Form - 生产计划排程窗体C#源码
Form - 生产计划排程窗体C#源码
生产计划排程单
Form - 生产计划排程窗体C#源码
C# 全选
using CartonERP.Business;
using CartonERP.Common;
using CartonERP.Library;
using CartonERP.Library.CommonClass;
using CartonERP.Library.Extensions;
using CartonERP.Models;
using CartonERP.Models.ResModels;
using CartonERP.ReportModule;
using CSFrameworkV6.Core;
using CSFrameworkV6.Core.Extensions;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
/*===================================================================
* 程序说明: PFPlan - 业务单据窗体
* 创建日期: 2023/08/08
* 最后修改: 2023/08/08
* 作者资料: CSFramework
* 版权所有 Copyright 2006~2023, C/S框架网 (www.csframework.com)
* ----------------------------------------------------------------
* 修改记录:
* 2023/08/08: 自动生成代码
* 2023/08/08: 您的修改记录
*===================================================================*/
namespace CartonERP.ProductionModule
{
///<summary>
/// PFPlan的资料管理窗体,界面由代码生成器(Code Generator)自动生成
/// </summary>
public partial class frm_PFPlan : frmBaseBusinessForm
{
private bll_PFPlan _BLL;//业务逻辑层对象引用
public frm_PFPlan()
{
InitializeComponent();
}
private void frm_PFPlan_Load(object sender, EventArgs e)
{
this.InitializeForm();//自定义初始化操作
this.BoundLookupData();
}
protected override void InitializeForm()
{
_BLL = new bll_PFPlan(); //实例化业务逻辑层
_SummaryView = new DevGridView(gvSummary);//实例化表格视图,框架支持多种表格视图,如表格GridControl,树列表TreeList.
_DetailGroupControl = pcDetailEditor;//【资料编辑】页面所有文本输入框的容器
base.InitializeForm();
frmGridCustomize.RegisterGrid(gvSummary);//注册表格组件,自动添加右键弹出菜单功能
DevStyle.SetGridControlLayout(gcSummary, false);//设置主表表格样式
DevStyle.SetSummaryGridViewLayout(gvSummary, false, true, true);//设置主表表格样式
gvSummary.DoubleClick += new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件
frmGridCustomize.RegisterGrid(gvDetail);//注册表格组件,自动添加右键弹出菜单功能
DevStyle.SetGridControlLayout(gcDetail, true);//明细表表格样式设置
DevStyle.SetDetailGridViewLayout(gvDetail);//明细表表格样式设置
gcDetail.EmbeddedNavigator.ButtonClick += new NavigatorButtonClickEventHandler(this.OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件
gvDetail.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件
BindingSummaryNavigator(controlNavigatorSummary, gcSummary); //绑定表格导航按钮的数据源.
this.ShowSummaryPage(true); //初始化完成后显示表格页
}
//绑定LookupEdit组件数据源
public override void BoundLookupData()
{
DataBinderTools.BoundApprovalStatus(txt_ApprovalStatus.Properties);
DataBinderTools.BoundUser(txt_DocUser.Properties);
DataBinderTools.BoundUser(lucCreatedBy);
DataBinderTools.BoundUser(lucLastUpdatedBy);
DataBinderTools.BoundUser(lucAppUser);
DataBinderTools.BoundUser(txtCreatedBy.Properties);
DataBinderTools.BoundUser(txtLastUpdatedBy.Properties);
DataBinderTools.BoundUser(txtAppUser.Properties);
DataBinderTools.BoundCheckEdit(ckhFlagApp);
}
//打印报表
public override void DoPrint(IButtonInfo button)
{
AssertFocusedRow();
var docNo = gvSummary.GetObject<res_tb_PFPlan>().PLNO;
rptPFPlan report = new rptPFPlan();
report.ShowReport(docNo);
}
//修改单元格数据时触发的事件
private void OnCellValueChanged(object sender, CellValueChangedEventArgs e)
{
//开发实例:修改单元格关联更新其它列的值
//参考(frmPO/frmSO).OnCellValueChanged方法}
}
//审核
public override void DoApproval(IButtonInfo button)
{
AssertFocusedRow();
var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();
var docNo = row.PLNO;
if (_BLL.IsApproved(row))
{
Msg.Warning($"单据 <{docNo}> 已经审核,不可重复操作!");
}
else
{
if (Msg.AskQuestion($"确定要审核单据 <{docNo}> 吗? "))
{
_BLL.ApprovalBusiness(row); //审核单据
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
this.DoViewContent(null);//显示单据明细
}
}
}
//反审核
public override void DoApprovalUndo(IButtonInfo button)
{
AssertFocusedRow();
var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();
var docNo = row.PLNO;
if (_BLL.IsApproved(row) == false)
{
Msg.Warning($"单据 <{docNo}> 没有审核,不需要反审核操作!");
}
else
{
if (Msg.AskQuestion($"确定要反审核单据 <{docNo}> 吗? "))
{
_BLL.ApprovalBusinessUndo(row); //审核单据
_SummaryView.RefreshRow(_SummaryView.FocusedRowHandle);
this.DoViewContent(null);//显示单据明细
}
}
}
/// <summary>
/// 重要!!当按钮状态改变时触发的事件
/// </summary>
/// <param name="currentState"></param>
protected override void ButtonStateChanged(UpdateType currentState)
{
bool isEditMode = (currentState == UpdateType.Add) || (currentState == UpdateType.Modify);
//设置编辑页面的文本框控件只读和可编辑状态
base.SetDetailEditorsAccessable(pcDetailEditor, isEditMode);
//设置明细表格的按钮禁用和可用状态
base.SetGridCustomButtonAccessable(gcDetail, isEditMode);
//设置明细表格的可修改状态
gvDetail.OptionsBehavior.Editable = isEditMode;
txtPLNO.Properties.ReadOnly = true;//不允许修改单号
txtCreationDate.Properties.ReadOnly = true;//禁止修改
txtCreatedBy.Properties.ReadOnly = true;//禁止修改
txtLastUpdateDate.Properties.ReadOnly = true;//禁止修改
txtLastUpdatedBy.Properties.ReadOnly = true;//禁止修改
txtAppUser.Properties.ReadOnly = true;//禁止修改
txtAppDate.Properties.ReadOnly = true;//禁止修改
lbStateName.Text = this.UpdateTypeName;
ucOpacityImage1.ShowImage(_BLL);//审核图片
}
//绑定明细表的数据源.
protected override void DoBindingDetailGrid(object dataSource)
{
gcDetail.DataSource = null;
gcDetail.DataSource = _BLL.CurrentBusiness.Details;
}
/// <summary>
/// 绑定【编辑页面】所有文本输入框的数据源
/// </summary>
/// <param name="summary">数据源</param>
protected override void DoBindingSummaryEditor(object dataSource)
{
this.DoBindingEditorPanel(pcDetailEditor, dataSource);
}
/// <summary>
/// 明细表格按钮事件
/// </summary>
/// <param name="sender">GridControlNavigator组件</param>
/// <param name="e">事件参数</param>
private void OnEmbeddedNavigatorButtonClick(object sender, NavigatorButtonClickEventArgs e)
{
try
{
GridControl gc = (GridControl)((GridControlNavigator)sender).Parent;
GridView gv = (GridView)gc.Views[0]; //明细表格:取GridControl第一个GridView组件.
var tag = e.Button.Tag.ToStringEx();
//新增记录
if (tag == nameof(DetailButtons.Add))
{
var row = new res_tb_PFPlanDetails();
if (tag == nameof(DetailButtons.Add))//增加-Add
{
//选择生产单
frmFuzzySearchPF.Execute(this.OnSearchCallBackPF, "", true);
}
gv.FocusedColumn = gv.VisibleColumns[0];//第1列设置焦点单元格
}
else if (tag == nameof(DetailButtons.Delete))
{
if (Msg.AskQuestion("确定要删除这条记录?"))
gv.DeleteRow(gv.FocusedRowHandle);
}
e.Handled = true;
}
catch (Exception ex)
{
LogUserOperate.Write(ex);
Msg.ShowException(ex);
}
}
private void OnSearchCallBackPF(List<res_PFSummary> list)
{
if (list == null) return;
var row = gvDetail.GetObject<res_tb_PFPlanDetails>(); //获取明细表当前记录
foreach (var resultRow in list)
{
row = new res_tb_PFPlanDetails();
row.isid = IdHelper.GetId();
var PaperIN = _BLL.GetPaperIN(resultRow.PFNO);
if (!PaperIN.IsEmpty())
{
row.PaperInQty = PaperIN.PaperInQty;//采购入库数
row.PaperOutQty = PaperIN.PaperOutQty;//领料出库数
}
row.SortId = gvDetail.RowCount + 1;
row.PFNO = resultRow.PFNO;
row.PFDate = resultRow.PFDate;
row.CustomerCode = resultRow.CustomerCode;
row.CustomerName = resultRow.CustomerName;
row.SONO = resultRow.SONO;
row.SODate = resultRow.SODate;
row.DeliveryDate = resultRow.DeliveryDate;
row.CustomerOrderNo = resultRow.CustomerOrderNo;
row.ProductCode = resultRow.ProductCode;
row.ProductName = resultRow.ProductName;
row.GoodsNo = resultRow.GoodsNo;
row.CartonCode = resultRow.CartonCode;
row.CartonName = resultRow.CartonName;
row.CartonSpec = resultRow.CartonSpec;
row.PaperName = resultRow.PaperName;
row.PaperNameSupplier = resultRow.PaperNameProduce;
row.PaperSpec = resultRow.PaperSpec;
row.PaperQty = resultRow.TotalQty;
row.OrderQty = resultRow.OrderQty;
row.CartonInQty = resultRow.TotalProduceQty;
row.CartonBalanceQty = resultRow.OrderQty - resultRow.TotalProduceQty;
row.DOQty = resultRow.TotalDO;
row.DOBalance = resultRow.TotalDOBalance;
row.Price = resultRow.OrderPrice;
row.SchedulQty = resultRow.OrderQty;
gvDetail.AddRow(row);
}
gvDetail.RefreshData();
}
//新增按钮事件
public override void DoAdd(IButtonInfo sender)
{
try
{
frmWaitingEx.ShowMe(this);
_BLL.NewBusiness(); //新增业务单据,实例化_BLL.CurrentBusiness
DoBindingSummaryEditor(_BLL.DataBinder); //绑定主表文本框数据源,显示数据
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
base.DoAdd(sender);
this.ShowDetailPage(true);
}
finally
{
frmWaitingEx.HideMe(this);
}
}
//删除按钮事件
public override void DoDelete(IButtonInfo sender)
{
AssertFocusedRow();
var row = _SummaryView.GetFocusedRow() as res_tb_PFPlan;
//删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
if (!this.DoBeforeEditOrDelete(row)) return;
if (Msg.AskQuestion($"单据号码:{row.PLNO},确定要删除当前单据吗 ? "))
{
try
{
frmWaitingEx.ShowMe(this);
bool b = _BLL.Delete(row.PLNO); //调用删除数据接口
AssertEqual(b, true, "删除记录时发生错误!");
_SummaryView.RemoveRow(_SummaryView.FocusedRowHandle);//删除表格中当前记录
this.ShowSummaryPage(true);
}
finally
{
frmWaitingEx.HideMe(this);
}
}
}
//修改按钮事件
public override void DoEdit(IButtonInfo sender)
{
this.AssertFocusedRow();
var row = (res_tb_PFPlan)_SummaryView.GetFocusedRow();
//删除前逻辑判断(如记录已审核、存档或有关联数据不可删除)
if (!this.DoBeforeEditOrDelete(row)) return;
base.DoEdit(sender);
}
//查看按钮事件
public override void DoViewContent(IButtonInfo sender)
{
AssertFocusedRow();
string docNo = _SummaryView.GetObject<res_tb_PFPlan>(_SummaryView.FocusedRowHandle).PLNO;
_BLL.CurrentBusiness = _BLL.GetDataByKey(docNo);//获取当前单据
this.DoBindingSummaryEditor(_BLL.CurrentBusiness.Master); //绑定主表文本框的数据源
this.DoBindingDetailGrid(_BLL.CurrentBusiness);//绑定明细表数据源
this.ButtonStateChanged(_UpdateType);//触发按钮事件
this.ShowDetailPage(false); //用户点击ViewContent按钮可以显示Summary页
}
//保存按钮事件
public override void DoSave(IButtonInfo sender)// 保存数据
{
this.UpdateLastControl();//更新最后一个输入框的数据
if (!ValidatingSummaryData(_BLL.CurrentBusiness.Master)) return; //检查主表数据合法性
if (!ValidatingDetailData(_BLL.CurrentBusiness.Details)) return; //检查从表数据合法性
try
{
frmWaitingEx.ShowMe(this);
//页面数据采集:创建用于保存的临时数据
var dsTemplate = _BLL.CreateSaveData(_BLL.CurrentBusiness); //创建用于保存的临时数据
SaveResult result = _BLL.Update(dsTemplate);//调用BLL层保存数据
if (result.Success) //保存成功
{
if (_UpdateType == UpdateType.Add) _BLL.CurrentBusiness.Master.PLNO = result.DocNo; //更新单据号码
base.UpdateSummaryRow(_BLL.CurrentBusiness.Master);//刷新表格内当前记录的缓存数据.
//this.DoBindingSummaryEditor(_BLL.DataBinder); //重新绑定文本框数据源
this.DoSave_ResetState(); //最后调用基类方法重置按钮状态
this.DoViewContent(sender); //刷新数据
frmWaitingEx.HideMe(this);
if (SystemSettings.Current.ShowOperateResultMsg) Msg.ShowInformation("保存成功!");
}
else
{
Msg.Warning("保存失败!");
}
}
finally
{
frmWaitingEx.HideMe(this);
}
}
private bool DoBeforeEditOrDelete(res_tb_PFPlan row)
{
if (_BLL.IsOwnerChange(row, nameof(res_tb_PFPlan.CreatedBy)) == false)
{
Msg.Warning("您不能修改别人创建的单据!1.您不是制单人的上级 2.您没有制单人的权限!");
return false;
}
if (_BLL.IsApproved(row))
{
Msg.Warning("单据已审核,禁止操作!");
return false;
}
return true;
}
//主表数据校验,保存前检查数据完整性
private bool ValidatingSummaryData(res_tb_PFPlan summary)
{
//多个输入项检查。若检查不通过,文本框右侧显示红色X图标
var isInvalid = false
| CommonTools.IsInvalid(txtDocDate);
if (isInvalid) return false;
//
//其他数据检查
//
return true;
}
//明细表数据校验
private bool ValidatingDetailData(List<res_tb_PFPlanDetails> detail)
{
foreach (var row in detail)
{
if (row.PFNO.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_PFNO;
Msg.Warning("生产单号不能为空!");
return false;
}
if (row.CustomerCode.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_CustomerCode;
Msg.Warning("客户编码不能为空!");
return false;
}
if (row.SONO.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_SONO;
Msg.Warning("销售单号不能为空!");
return false;
}
if (row.ProductCode.IsEmpty())
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_ProductCode;
Msg.Warning("货品编码不能为空!");
return false;
}
if (row.OrderQty == 0)
{
gcDetail.Focus();
gvDetail.FocusedRowHandle = gvDetail.GetRowHandle(detail.IndexOf(row));//获取对象序号
gvDetail.FocusedColumn = colD_OrderQty;
Msg.Warning("订单数量不能为零!");
return false;
}
}
return true;
}
//清空按钮事件
private void btnEmpty_Click(object sender, EventArgs e)
{
base.ClearContainerEditorText(pnlSearch);
}
//查询按钮事件
private void btnQuery_Click(object sender, EventArgs e)
{
try
{
frmWaitingEx.ShowMe(this);
//实例化查询参数
var input = new req_PFPlan
{
PLNO = txt_PLNO.EditValue.ToStringEx(),
DocDate = txt_DateFrom.DateTime
};
var dt = _BLL.Query(input);//调用业务逻辑层接口
this.DoBindingSummaryGrid(dt);//绑定表格的数据源
this.ShowSummaryPage(true); //显示表格页面.
}
finally
{
frmWaitingEx.HideMe(this);
}
}
//给明细表绑定KeyDown事件,按回车自动跳格
private void gvDetail_KeyDown(object sender, KeyEventArgs e)
{
//表格按回车键自动跳转到下一个可编辑列, 若是最后一列,自动新增一条记录
GridMovetor.OnGridViewKeyDown(gvDetail, e);
}
//显示数据操作日志
public override void DoShowLog(IButtonInfo button)
{
//显示审计日志
this.MainForm.OpenModuleForm(Globals.LogViewerForm, "", nameof(tb_PFPlan));
}
}
}
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
CSFrameworkV6 C/S框架网