编程与数学 03-008 《看潮企业管理软件》项目开发 15 工序统计 4-2
摘要:本文介绍了基于DevExpress WinForms开发的"看潮企业管理软件"工序统计模块(Uf07Gzjj)。该系统采用C#语言和.NET Framework技术栈,实现计件工作量统计表的全生命周期管理,支持数据录入、审核、登账等核心业务流程。系统创新性地采用动态列生成技术,根据部门工序自动构建统计表格,支持横向与纵向双模式数据录入。通过Ribbon界面整合打印预览、XML数据交换、批量审核等高级功能,配合完整的权限控制体系(编辑/审核/打印分级授权)和智能窗口布局记忆机制,为制造型企业提供了高效、灵活的计件工资管理解决方案。
关键词:计件工作量统计;DevExpress WinForms;工序管理;数据审核流程;动态列生成;权限控制;XML数据交换
人工智能助手:DeepSeek、Kimi
三、窗体功能代码
第一部分
csharp
using DevExpress.Data;
using DevExpress.Utils;
using DevExpress.Utils.Menu;
using DevExpress.XtraBars;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraLayout;
using DevExpress.XtraTab;
using System;
using System.Data;
using System.Text;
using System.Windows.Forms;
using static KcErp.KcDb;
using static KcErp.KcEditfm;
using static KcErp.KcEditgd;
using static KcErp.KcMain;
namespace KcErp
{
public partial class Uf07Gzjj : DevExpress.XtraEditors.XtraForm
{
#region "public"
public string dyoid = "";
public string fdjmc = "计件工作量统计表";
public string fgnbh;
public string fgnmc;
public string ft1 = "gzjjo"; //制造表1
public string ft1dj = "djr";
public string ft1list = "oid,ny,bmdh,bmmc,jjzl,gymc,rq,chxh,chdh,chhc,scdh,jhsl,bz,tzr,shr,djr";
public string ft1oid = "oid";
public string ft1oidqz = "gzjj{ppcxh}_{业务期间}_";
public string ft1order = "oid";
public string ft1qj = "ny";
public string ft1sh = "shr";
public string ft1tjts = "";
public string ft1tz = "tzr";
public string ft1where = "oid like 'gzjj{ppcxh}%' and bmdh='{生产部门代号}' and ny='{业务期间}' and gymc='{工艺名称}' and {是否登记}=iif(djr<>'',1,0)";
public string ft2 = "gzjjm"; //制造表2
public string ft2djbjzd = "sfdj";
public string ft2list = "mid,oid,ny,bmdh,bmmc,rybh,ryxm,gymc,gxmc,tjsl,sfgx,sfsh,sfdj";
public string ft2mid = "mid";
public string ft2oid = "oid";
public string ft2order = "oid,rybh,mid";
public string ft2qj = "ny";
public string ft2shbjzd = "sfsh";
public string ft2where = "oid like 'gzjj{ppcxh}%' and bmdh='{生产部门代号}' and ny='{业务期间}' and gymc='{工艺名称}' and sfdj={是否登记}";
public string ftbb = ""; //制造表版本
public bool fzxsr;
#endregion
#region "dim"
bool adding = false;
bool djenter = false;
string dqbmdh = "";
//当前部门代号
string dqbmmc = "";
int dqdjh = -1;
int dqdjs = 0;
DataTable dqdt2;
//当前部门名称
string dqgymc = "";
//当前工艺名称
string dqjjzl = "";
string dqmid = "";
int dqmrow = -1;
string dqoid = "";
string dqsfdj;
//计件种类
string dqywqj = "";
bool drsjz = false;
DataTable dt1;
DataTable dt2;
//载入年月
DataTable dtbmgx;
//部门工序
DataTable dtbmry;
DataTable dttj1;
DataTable dtzd1;
DataTable dtzd2;
bool entermtgv = false;
bool fh = false;
BaseEdit[] firstedit;
string[] ft1fd;
//字段列表数组
string[] ft2fd;
//数据调入中
bool gsjsz = false;
string jszdstr = "";
bool loaderr = false;
bool loadfm = false;
bool loading = false;
//首控件
GridView mtgv = new GridView();
string oidqz;
//计算中
bool savem = false;
//单据装入中
//表单装入中
bool saving = false;
bool sfdj;
bool sfsp;
bool sftj;
//编码前缀
int sfzj;
//是否增加 1添加同级 2添加下级 3修改
bool sfzr;
//单据保存中
string sql1;
string sql2;
//编辑、审核、打印、参考、图片、文档、文件、设计、导出
bool xzbj;
bool xzck;
bool xzdc;
bool xzdy;
bool xzsh;
bool xzwj;
string ywqj; //业务期间
//是否载入
//是否提交
//是否审核
//是否登记
//单据体主数据表视图
string zrtjstr = "";
//部门人员
#endregion
public Uf07Gzjj()
{
InitializeComponent();
// 窗体生命周期
this.Load += Form_load;
this.FormClosing += Form_formclosing;
this.FormClosed += Form_FormClosed;
this.Disposed += Form_disposed;
this.VisibleChanged += Fm_visiblechanged;
// 按钮点击
this.Btpg1.Click += Btpg1_ItemClick;
this.Btpg2.Click += Btpg2_ItemClick;
this.Btpg3.Click += Btpg3_ItemClick;
this.Btpg4.Click += Btpg4_ItemClick;
// Bar 按钮 ItemClick
this.BarTJ.ItemClick += BarTJ_ItemClick;
this.BarZR.ItemClick += BarZR_ItemClick;
this.BarDJ.ItemClick += Bardj_itemclick;
this.BarCZ.ItemClick += Textss;
this.BarSH.ItemClick += Barsh_itemclick;
this.BarHelp.ItemClick += Barhelp_itemclick;
this.Barexit.ItemClick += Barexit_itemclick;
this.BarPrint.ItemClick += Barprint_itemclick;
this.BarPreview.ItemClick += Barpreview_itemclick;
this.BarFullsh.ItemClick += Barfullsh_itemclick;
this.BarFulldj.ItemClick += Barfulldj_itemclick;
// 单据相关 Bar 按钮
this.BardjOK.ItemClick += BardjOK_ItemClick;
this.BardjCancel.ItemClick += BardjCancel_ItemClick;
this.BardjTJ.ItemClick += BardjTJ_ItemClick;
this.BardjXG.ItemClick += BardjXG_ItemClick;
this.BardjSC.ItemClick += BardjSC_ItemClick;
this.BardjDR.ItemClick += BardjDR_ItemClick;
// 导出/导入
this.Bardcwj.ItemClick += Bardcwj_itemclick;
this.Bardrwj.ItemClick += Bardrwj_itemclick;
// 其他
this.DJTab.SelectedPageChanged += Djtab_selectedpagechanged;
}
private static void Fmecload(ref LayoutControl lc, ref DataRow dr)
{
// 加载单记录头字段值
string[] itag;
for (int lt = 0; lt < lc.Items.Count; lt++)
{
itag = lc.Items[lt].Tag.ToString().Split(',');
if (itag.Length == 5)
{
BaseEdit ec;
LayoutControlItem ci = lc.Items[lt] as LayoutControlItem;
if (ci != null)
{
ec = ci.Control as BaseEdit;
if (!Convert.IsDBNull(dr[itag[2]]))
{
ec.EditValue = dr[itag[2]];
}
else
{
ec.EditValue = DBNull.Value;
}
ec.Properties.ReadOnly = true;
}
}
}
}
private static void Fmxmcls(ref LayoutControl lc, ref bool rw)
{
// 编辑项目清空
string[] itag;
for (int lt = 0; lt < lc.Items.Count; lt++)
{
itag = lc.Items[lt].Tag.ToString().Split(',');
if (itag.Length == 5)
{
BaseEdit ec;
LayoutControlItem ci = lc.Items[lt] as LayoutControlItem;
if (ci != null)
{
ec = ci.Control as BaseEdit;
if (ec != null)
{
switch (itag[3])
{
case "char":
case "nchar":
case "text":
case "ntext":
case "varchar":
case "nvarchar":
ec.EditValue = "";
break;
case "int":
case "smallint":
case "bigint":
case "decimal":
case "numeric":
case "float":
case "real":
ec.EditValue = "";
break;
case "date":
case "datetime":
case "datetime2":
case "smalldatetime":
case "datetimeofset":
ec.EditValue = Getywdate();
break;
case "time":
ec.EditValue = DateTime.Now.TimeOfDay;
break;
case "bit":
ec.EditValue = false;
break;
case "binary":
ec.EditValue = DBNull.Value;
break;
case "image":
ec.EditValue = DBNull.Value;
break;
default:
ec.EditValue = DBNull.Value;
break;
}
ec.Properties.ReadOnly = rw;
if (!rw)
{
ec.Properties.ReadOnly = (itag[1].IndexOf("read") > -1);
}
}
}
}
}
}
private static void Fmxmec(ref LayoutControl lc, ref bool rw)
{
// 项目只读属性设置
string[] itag;
for (int lt = 0; lt < lc.Items.Count; lt++)
{
itag = lc.Items[lt].Tag.ToString().Split(',');
if (itag.Length == 5)
{
BaseEdit ec;
LayoutControlItem ci = lc.Items[lt] as LayoutControlItem;
if (ci != null)
{
ec = ci.Control as BaseEdit;
ec.Properties.ReadOnly = rw;
if (!rw)
{
ec.Properties.ReadOnly = (itag[1].IndexOf("read") > -1);
}
}
}
}
}
private void Bardcwj_itemclick(object sender, ItemClickEventArgs e)
{
try
{
if (dt1.Rows.Count <= 0)
{
MsgOxShow("没有查询结果,无法导出");
return;
}
if (dt2.Rows.Count <= 0)
{
MsgOxShow("没有查询结果,无法导出");
return;
}
string djzs = dt1.Rows.Count.ToString().Trim() + "张";
DataSet dsdc = new DataSet();
DataTable dcdt1 = dt1.Copy();
dcdt1.TableName = ft1;
dsdc.Tables.Add(dcdt1);
DataTable dcdt2 = dt2.Copy();
dcdt2.TableName = ft2;
dsdc.Tables.Add(dcdt2);
SaveFileDialog ofd = new SaveFileDialog();
ofd.Filter = "xml文件|*.xml";
//打开文件
ofd.InitialDirectory = pFilesXml;
ofd.FileName = pDBmc + " " + ywqj + " " + DateTime.Now.ToString("yyyymmddhhmm") + " " + fdjmc.ToString().Trim() + "" + djzs + ".xml";
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
dsdc.WriteXml(ofd.FileName, XmlWriteMode.WriteSchema);
MsgXxShow(ofd.FileName + "导出完成");
}
dcdt1 = null;
dcdt2 = null;
dsdc = null;
ofd = null;
}
catch (Exception ex)
{
MsgExShow("文件导出", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Bardj_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//登账 单据
if (!sfsp) return;
try
{
if (!sfsp)
{
MsgOxShow("尚未审核,不能登账");
return;
}
if (dt1.Rows[dqdjh][ft1dj].ToString() == "")
{
if (MsgSfShow("单据登账后将无法更改,确定要进行登账操作吗?") != System.Windows.Forms.DialogResult.OK)
{
return;
}
string czjg = KcDb.DBexec("select x9_djdj('" + pDQYH + "','" + pBJMC + "','" + fdjmc + "','" + dqoid + "')");
if (czjg == pDQYH)
{
dt1.Rows[dqdjh][ft1dj] = pDQYH;
if (dt2.DefaultView.Count > 0)
{
for (int t2r = dt2.DefaultView.Count - 1; t2r >= 0; t2r += -1)
{
dt2.DefaultView[t2r][ft2djbjzd] = 1;
}
}
}
else
{
MsgOxShow(czjg);
return;
}
}
else
{
if (MsgSfShow("单据反登账是将单据恢复到未登账状态,确定要进行反登账操作吗?") != System.Windows.Forms.DialogResult.OK)
{
return;
}
string czjg = KcDb.DBexec("select x9_djdj('" + pDQYH + "','" + pBJMC + "','" + fdjmc + "','" + dqoid + "')");
if (czjg == pDQYH)
{
dt1.Rows[dqdjh][ft1dj] = "";
if (dt2.DefaultView.Count > 0)
{
for (int t2r = dt2.DefaultView.Count - 1; t2r >= 0; t2r += -1)
{
dt2.DefaultView[t2r][ft2djbjzd] = 0;
}
}
}
else
{
MsgOxShow(czjg);
return;
}
}
DataTable udt2 = dt2.GetChanges(); //表二
DataTable udt1 = dt1.GetChanges(); //表一
if (KcDb.GetDtSaven(ft1, udt1, ft2, udt2, "", null, ft1dj, ft2djbjzd, ""))
{
dt1.AcceptChanges();
dt2.AcceptChanges();
}
udt2 = null;
udt1 = null;
sftj = true;
Djload();
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("登账单据[" + dqoid + "]", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BardjCancel_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (dqdjh >= 0)
{
Djload();
}
else
{
Fmxmclear(true);
mtgv.OptionsBehavior.ReadOnly = true;
dt2.DefaultView.RowFilter = "false";
dqdt2.Rows.Clear();
sfzj = 0;
Barenabled();
}
}
private void BardjDR_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
// 数据导入
if (mtgv.OptionsBehavior.ReadOnly) return;
if (sfzj == 0) return;
try
{
string msgstr = "";
string sqlo = "";
string sqlm = "";
string sqld = "";
DataTable dt = KcDb.DtRead("select * from x9_gn_0djsr_dr where gnbh='" + fgnbh + "' and rtrim(drmc)<>'' order by gnmc,xh");
if (dt.Rows.Count <= 0)
{
MsgXxShow("没有定义数据导入!");
return;
}
FmDJDR fmdr = new FmDJDR();
fmdr.Text = fgnmc + "数据导入";
fmdr.fgnbh = fgnbh;
fmdr.fgnmc = fgnmc;
fmdr.dtlist = dt;
fmdr.ShowDialog(this);
if (!fmdr.sfok)
{
dt = null;
fmdr.Dispose();
return;
}
drsjz = true;
adding = true;
string colname = "";
int coltch = -1;
DataTable dttco = new DataTable();
DataTable dttcm = new DataTable();
DataTable dttcd = new DataTable();
string droid = "";
// 导入头存储过程 xt_djdro '" + pdqyh + "',功能名称,数据名称,条件字符串
sqlo = "select x9_djdro('" + pDQYH + "', '" + fgnmc + "', '" + fmdr.fdrmc + "','" + fmdr.tjstr + "')";
string drostr = KcDb.DBString(sqlo);
if (drostr.IndexOf("错误") > -1 || drostr.ToLower().IndexOf("select") <= -1)
{
MsgXxShow(drostr);
dttco = null;
}
else
{
dttco = KcDb.DtRead(drostr);
}
if (dttco != null)
{
dttco.TableName = "djo";
if (dttco.Rows.Count > 0 && dttco.Columns.Count > 1)
{
string[] tccol = new string[dttco.Columns.Count];
for (int i = 0; i < tccol.Length; i++)
{
if (dttco.Columns[i].ColumnName.ToLower() == ft1oid.ToLower())
{
droid = dttco.Rows[0][ft1oid].ToString();
}
if (dttco.Columns[i].ColumnName.ToLower() == ft1oid.ToLower() ||
dttco.Columns[i].ColumnName.ToLower() == ft1qj.ToLower() ||
dttco.Columns[i].ColumnName.ToLower() == ft1tz.ToLower())
{
tccol[i] = "";
}
else
{
tccol[i] = dttco.Columns[i].ColumnName;
}
}
Loaddrtext(dttco.Rows[0], tccol);
msgstr += "导入单记录头数据1行\r\n";
}
else
{
msgstr += "导入单记录头数据0行\r\n";
}
}
else
{
msgstr += "导入单记录头数据没有定义\r\n";
}
// 导入体存储过程 xt_djdrm '" + pdqyh + "',功能名称,单记录名称缩写,数据导入名称,条件字符串
sqlm = "select x9_djdrm('" + pDQYH + "', '" + fgnmc + "', '" + fmdr.fdrmc + "','" + fmdr.tjstr + "')";
string drmstr = KcDb.DBString(sqlm);
if (drmstr.IndexOf("错误") > -1 || drmstr.ToLower().IndexOf("select") <= -1)
{
MsgXxShow(drmstr);
dttcm = null;
}
else
{
dttcm = KcDb.DtRead(drmstr);
}
int mhs = 0;
if (dttcm != null)
{
if (dttcm.Rows.Count > 0 && dttcm.Columns.Count > 1)
{
for (int r = mtgv.RowCount - 1; r >= 0; r--)
{
if (mtgv.GetRowCellValue(r, mtgv.VisibleColumns[0]).ToString().Trim() == "")
{
mtgv.DeleteRow(r);
}
}
string[] tccol = new string[dttcm.Columns.Count];
for (int i = 0; i < tccol.Length; i++)
{
string fn = dttcm.Columns[i].ColumnName.ToLower();
if (fn == ft2oid.ToLower() || fn == ft2mid.ToLower())
{
tccol[i] = "";
}
else
{
tccol[i] = dttcm.Columns[i].ColumnName;
}
}
DataRow drmrow;
int drnm = 0;
for (int r = 0; r < dttcm.Rows.Count; r++)
{
drmrow = dqdt2.NewRow();
drnm = 0;
for (int c = 0; c < dqdt2.Columns.Count; c++)
{
colname = dqdt2.Columns[c].ColumnName;
coltch = Array.IndexOf(tccol, colname);
if (coltch >= 0)
{
drmrow[colname] = dttcm.Rows[r][coltch];
drnm++;
}
}
if (drnm == 0)
{
continue;
}
drmrow[ft2mid] = KcDb.DBInteger("select x9_djmid('" + ft2 + "','" + ft2mid + "')");
drmrow[ft2oid] = Baroid.EditValue.ToString();
dqdt2.Rows.Add(drmrow);
mhs++;
}
DataRow nrow = dqdt2.NewRow();
nrow[ft2mid] = KcDb.DBInteger("select x9_djmid('" + ft2 + "','" + ft2mid + "')");
nrow[ft2oid] = Baroid.EditValue.ToString();
dqdt2.Rows.Add(nrow);
mtgv.RefreshData();
msgstr += "导入单记录体数据" + mhs.ToString().Trim() + "行\r\n";
}
}
fmdr.Dispose();
mtgv.FocusedRowHandle = mtgv.RowCount - 1;
drsjz = false;
adding = false;
MsgXxShow("数据导入操作完成,请检查其正确性!\r\n" + msgstr);
KcDb.DBclose();
}
catch (Exception ex)
{
drsjz = false;
adding = false;
MsgExShow("数据导入", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BardjOK_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
try
{
if (!Fmvalid(this, ref DJTab))
{
return;
}
string firstmc = "";
string nextmc;
string nextmctext;
mtgv.PostEditor();
mtgv.FocusedRowHandle = 1;
mtgv.FocusedRowHandle = 0;
DJTab.Focus();
firstmc = mtgv.VisibleColumns[0].FieldName;
nextmc = mtgv.VisibleColumns[1].FieldName;
nextmctext = mtgv.VisibleColumns[1].Caption;
gsjsz = false;
Savedjo();
Savedjm();
sfzj = 0;
sftj = false;
Djload();
}
catch (Exception ex)
{
MsgExShow("保存单记录", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BardjSC_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (!sfzr) return;
if (sfzj != 0) return;
if (MsgSfShow("单记录删除操作直接提交数据,删除的单记录将无法恢复,确实要删除当前单记录吗?") != System.Windows.Forms.DialogResult.OK) return;
try
{
string dqoid = Baroid.EditValue.ToString();
string yzstr = KcDb.DBexec("select dbo.x9_tj_when('" + pDQYH + "','" + fdjmc + "','" + dqoid + "')");
if (yzstr.Trim() != pDQYH)
{
MsgOxShow(yzstr + "\r\n" + "单记录不能删除");
return;
}
if (KcDb.DBString("select x9_djoid(0,'" + ft1 + "','" + ft1oid + "','" + oidqz + "')") != "")
{
MsgOxShow("单记录号未能更新" + "\r\n" + "单记录不能删除");
return;
}
dt1.Rows[dqdjh].Delete();
for (int s = dt2.DefaultView.Count - 1; s >= 0; s--)
{
dt2.DefaultView[s].Delete();
}
DataTable udt1 = dt1.GetChanges();
if (udt1 != null)
{
if (KcDb.GetDtSaven(ft1, udt1))
{
dt1.AcceptChanges();
}
}
udt1 = null;
DataTable udt2 = dt2.GetChanges();
if (udt2 != null)
{
if (KcDb.GetDtSaven(ft2, udt2))
{
dt2.AcceptChanges();
}
}
udt2 = null;
dqdjs = dt1.Rows.Count;
if (dqdjs > 0)
{
dqdjh = 0;
}
else
{
dqdjh = -1;
}
Btpg4_ItemClick(null, null);
// 删除单记录时未删除关联信息,需要在后台处理
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("删除单记录", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BardjTJ_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (!sfzr) return;
try
{
sfzj = 1;
Barenabled();
Fmxmclear(false);
DJTab.SelectedTabPageIndex = 0;
DJTab.TabPages[0].Controls[0].Focus();
Baroid.EditValue = KcDb.DBString("select x9_djoid(2,'" + ft1 + "','" + ft1oid + "','" + oidqz + "')");
dqdt2.Rows.Clear();
dqdt2.AcceptChanges();
// 添加时增行,所有人员
for (int r = 0; r < dtbmry.Rows.Count; r++)
{
DataRow nrow = dqdt2.NewRow();
nrow["rybh"] = dtbmry.Rows[r]["rybh"];
nrow["ryxm"] = dtbmry.Rows[r]["ryxm"];
dqdt2.Rows.Add(nrow);
}
mtgv.OptionsBehavior.ReadOnly = false;
mtgv.RefreshData();
Lczs.Text = "[" + (dqdjh + 1).ToString().Trim() + "/" + dt1.Rows.Count.ToString().Trim() + "张][" + (mtgv.FocusedRowHandle + 1).ToString().Trim() + "/" + mtgv.RowCount.ToString().Trim() + "行]";
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("添加单记录", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BardjXG_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (!sfzr) return;
try
{
sfzj = 2;
Barenabled();
Fmxmrw(false);
if (mtgv.RowCount < 2)
{
for (int r = mtgv.RowCount; r <= 1; r++)
{
DataRow nrow = dqdt2.NewRow();
dqdt2.Rows.Add(nrow);
}
}
mtgv.OptionsBehavior.ReadOnly = false;
mtgv.FocusedRowHandle = 0;
mtgv.FocusedColumn = mtgv.VisibleColumns[0];
mtgv.Focus();
Lczs.Text = "[" + (dqdjh + 1).ToString().Trim() + "/" + dt1.Rows.Count.ToString().Trim() + "张][" + (mtgv.FocusedRowHandle + 1).ToString().Trim() + "/" + mtgv.RowCount.ToString().Trim() + "行]";
}
catch (Exception ex)
{
MsgExShow("修改单记录", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Bardrwj_itemclick(object sender, ItemClickEventArgs e)
{
//收集文件数据
OpenFileDialog ofd = new OpenFileDialog();
DataSet DsWj = new DataSet();
DataTable dtset = null;
try
{
ofd.Filter = "xml文件|*.xml";
ofd.InitialDirectory = (pDRLJ != "" ? pDRLJ : pFilesXml);
//打开文件
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
DsWj.ReadXml(ofd.FileName);
}
else
{
DsWj = null;
dtset = null;
ofd = null;
return;
}
if (DsWj.Tables.Count != 2)
{
MsgOxShow("不是有效单据文件,无法导入");
return;
}
pDRLJ = ofd.FileName.Replace(ofd.SafeFileName, "");
foreach (DataColumn col in DsWj.Tables[0].Columns)
{
string lm = col.ColumnName;
if (lm != lm.ToLower())
{
col.ColumnName = lm.ToLower();
}
}
foreach (DataColumn col in DsWj.Tables[1].Columns)
{
string lm = col.ColumnName;
if (lm != lm.ToLower())
{
col.ColumnName = lm.ToLower();
}
}
int ohs = 0;
int mhs = 0;
string droid = "";
string newoid = "";
string colname = "";
int coltch = -1;
string[] tccol1 = new string[DsWj.Tables[0].Columns.Count];
for (int i = 0; i <= tccol1.Length - 1; i++)
{
if (DsWj.Tables[0].Columns[i].ColumnName.ToLower() == ft1oid.ToLower() || DsWj.Tables[0].Columns[i].ColumnName.ToLower() == ft1qj.ToLower()
|| DsWj.Tables[0].Columns[i].ColumnName.ToLower() == ft1tz.ToLower())
{
tccol1[i] = "";
}
else
{
tccol1[i] = DsWj.Tables[0].Columns[i].ColumnName;
}
}
string[] tccol2 = new string[DsWj.Tables[1].Columns.Count];
for (int i = 0; i <= tccol2.Length - 1; i++)
{
string fn = DsWj.Tables[1].Columns[i].ColumnName.ToLower();
if (fn == ft2oid.ToLower() || fn == ft2mid.ToLower() || fn == ft2qj.ToLower())
{
tccol2[i] = "";
}
else
{
tccol2[i] = DsWj.Tables[1].Columns[i].ColumnName;
}
}
for (int r1 = 0; r1 <= DsWj.Tables[0].Rows.Count - 1; r1++)
{
//djo
newoid = "";
coltch = DsWj.Tables[0].Columns.IndexOf(ft1oid);
if (coltch < 0)
{
continue;
}
coltch = DsWj.Tables[0].Columns.IndexOf(ft2oid);
if (coltch < 0)
{
continue;
}
droid = DsWj.Tables[0].Rows[r1][ft1oid].ToString();
DataRow drorow = dt1.NewRow();
for (int c = 0; c <= dt1.Columns.Count - 1; c++)
{
colname = dt1.Columns[c].ColumnName;
coltch = Array.IndexOf(tccol1, colname);
if (coltch >= 0)
{
try
{
drorow[colname] = DsWj.Tables[0].Rows[r1][coltch];
}
catch (Exception ex)
{
}
}
}
newoid = KcDb.DBString("select x9_djoid(1,'" + ft1 + "','" + ft1oid + "','" + oidqz + "')");
drorow[ft1oid] = newoid;
drorow[ft1qj] = ywqj;
drorow[ft1tz] = pDQYH;
drorow[ft1sh] = "";
drorow[ft1dj] = "";
dt1.Rows.Add(drorow);
drorow = null;
ohs += 1;
//djm
DataRow[] dcrs2 = DsWj.Tables[1].Select(ft2oid + "='" + droid + "'");
DataRow drmrow = null;
int dqhh = 1;
for (int r2 = 0; r2 <= dcrs2.Length - 1; r2++)
{
drmrow = dt2.NewRow();
for (int c = 0; c <= dt2.Columns.Count - 1; c++)
{
colname = dt2.Columns[c].ColumnName;
coltch = Array.IndexOf(tccol2, colname);
if (coltch >= 0)
{
try
{
drmrow[colname] = dcrs2[r2][coltch];
}
catch (Exception ex)
{
}
}
}
drmrow[ft2mid] = KcDb.DBInteger("select x9_djmid('" + ft2 + "','" + ft2mid + "')");
drmrow[ft2oid] = newoid;
drmrow[ft2qj] = ywqj;
drmrow["sfdj"] = 0;
dt2.Rows.Add(drmrow);
dqhh += 1;
mhs += 1;
}
}
ofd = null;
dtset = null;
DsWj = null;
if (ohs > 0)
{
sftj = false;
dqdjs = dt1.Rows.Count;
Btpg4_ItemClick(null, null);
MsgXxShow("单据导入完成,共导入" + ohs.ToString().Trim() + "张" + mhs.ToString().Trim() + "行,请检查导入数据的正确性");
}
else
{
MsgXxShow("没有单据被导入");
}
KcDb.DBclose();
}
catch (Exception ex)
{
ofd = null;
dtset = null;
DsWj = null;
MsgExShow("文件导入", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Barenabled()
{
BarZR.Enabled = (sfzj == 0);
BarTJ.Enabled = (sfzj == 0) && (sfzr && (!sftj)) && xzbj;
BardjTJ.Enabled = (sfzj == 0) && xzbj;
BardjXG.Enabled = (sfzj == 0) && dqdjs > 0 && (!sfsp) && (!sfdj) && xzbj;
BardjSC.Enabled = (sfzj == 0) && sfzr && sftj && (dqdjs > 0) && (!sfsp) && (!sfdj) && (dqdjh == dqdjs - 1) && xzbj;
BarPreview.Enabled = (sfzj == 0) && (sfzr && sftj) && sfsp && xzdy;
BarPrint.Enabled = (sfzj == 0) && (sfzr && sftj) && sfsp && xzdy;
BardjCancel.Enabled = (sfzj > 0) && sfzr;
BardjOK.Enabled = (sfzj > 0) && sfzr;
BardjDR.Enabled = (sfzj == 1 || sfzj == 2) && sfzr && xzbj;
Btpg1.Enabled = (sfzj == 0) && dqdjs > 0 && dqdjh != 0;
Btpg2.Enabled = (sfzj == 0) && dqdjs > 0 && dqdjh != 0;
Btpg3.Enabled = (sfzj == 0) && dqdjs > 0 && dqdjh != dqdjs - 1;
Btpg4.Enabled = (sfzj == 0) && dqdjs > 0 && dqdjh != dqdjs - 1;
BarCZ.Enabled = (sfzj == 0) && dqdjs > 0;
BarSH.Enabled = (sfzj == 0) && sfzr && sftj && dqdjs > 0 && (!sfdj) && xzsh;
BarDJ.Enabled = (sfzj == 0) && sfzr && sftj && dqdjs > 0 && sfsp && xzsh;
BarFullsh.Enabled = (sfzj == 0) && sfzr && sftj && dqdjs > 0 && (!sfdj) && xzsh;
BarFulldj.Enabled = (sfzj == 0) && sfzr && sftj && dqdjs > 0 && sfsp && xzsh;
Bardcwj.Enabled = (sfzj == 0) && sfzr && sftj && dqdjs > 0 && xzdc;
Bardrwj.Enabled = (sfzj == 0) && sfzr && sftj && xzbj;
}
private void Barexit_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (sfzj > 0)
{
MsgOxShow("正在编辑数据,请确定或取消后退出");
}
else
{
try
{
SaveFmSet();
if (!sftj)
{
Dttj();
}
fh = true;
dt1 = null;
dt2 = null;
this.Close();
}
catch (Exception ex)
{
MsgExShow("返回上级窗口", ex.Message, ex.Source, ex.StackTrace);
}
}
}
private void Barfulldj_itemclick(object sender, ItemClickEventArgs e)
{
//登账 全部
if (MsgSfShow("全部登账将一次性登账所有已经符合条件的单据,不符合条件的将被忽略" + Environment.NewLine +
"确要执行全部登账吗?") != System.Windows.Forms.DialogResult.OK)
{
return;
}
try
{
string czjg = "";
bool djtj = false;
int wcsl = 0;
for (int r = 0; r <= dt1.Rows.Count - 1; r++)
{
if (dt1.Rows[r][ft1dj].ToString() != "")
{
continue;
}
djtj = (dt1.Rows[r][ft1sh].ToString() != "");
if (!djtj)
{
continue;
}
czjg = KcDb.DBexec("select x9_djdj('" + pDQYH + "','" + pBJMC + "','" + fdjmc + "','" + dt1.Rows[r][ft1oid] + "')");
if (czjg == pDQYH)
{
dt1.Rows[r][ft1dj] = pDQYH;
dt2.DefaultView.RowFilter = ft2oid + "='" + dt1.Rows[r][ft1oid] + "'";
if (dt2.DefaultView.Count > 0)
{
for (int t2r = dt2.DefaultView.Count - 1; t2r >= 0; t2r += -1)
{
dt2.DefaultView[t2r][ft2djbjzd] = true;
}
}
wcsl += 1;
}
else
{
MsgOxShow(czjg);
}
}
DataTable udt2 = dt2.GetChanges(); //表二
DataTable udt1 = dt1.GetChanges(); //表一
if (KcDb.GetDtSaven(ft1, udt1, ft2, udt2, "", null, ft1dj, ft2djbjzd, ""))
{
dt1.AcceptChanges();
dt2.AcceptChanges();
}
udt2 = null;
udt1 = null;
sftj = true;
Djload();
MsgXxShow("全部单据登账操作已经完成,请检查结果是否正确,本次共完成 " + wcsl.ToString().Trim() + " 张单据的处理!");
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("登账全部单据", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Barfullsh_itemclick(object sender, ItemClickEventArgs e)
{
//全部审核
bool spcz = false;
try
{
spcz = !sfsp;
if (MsgSfShow("全部" + (spcz ? "" : "取消") + "审核" + "将一次性处理所有单据。" + Environment.NewLine +
"。请在确定所有数据的正确性和合法性后执行此操作,是否继续?") != System.Windows.Forms.DialogResult.OK)
{
return;
}
string czsql = "";
string czjg = "";
int wcsl = 0;
for (int r = 0; r <= dt1.Rows.Count - 1; r++)
{
if (dt1.Rows[r][ft1dj].ToString().Trim() != "") //已经登账
{
continue;
}
if (spcz)
{
if (dt1.Rows[r][ft1sh].ToString() != "") //已经审核
{
continue;
}
}
else
{
//取消
if (dt1.Rows[r][ft1sh].ToString() == "") //未经审核
{
continue;
}
else
{
if (dt1.Rows[r][ft1sh].ToString() != pDQYH) //他人审核
{
continue;
}
}
}
czsql = "select x9_djsp('" + pDQYH + "','" + pBJMC + "','" + fdjmc + "','" + dt1.Rows[r][ft1oid] + "','" + "审核" + "'," + (spcz ? "true" : "false") + ")";
czjg = KcDb.DBexec(czsql);
if (czjg == pDQYH)
{
dt1.Rows[r][ft1sh] = (spcz ? pDQYH : "");
dt2.DefaultView.RowFilter = ft2oid + "='" + dt1.Rows[r][ft1oid] + "'";
if (dt2.DefaultView.Count > 0)
{
for (int t2r = dt2.DefaultView.Count - 1; t2r >= 0; t2r += -1)
{
dt2.DefaultView[t2r][ft2shbjzd] = (spcz ? true : false);
}
}
wcsl += 1;
}
else
{
MsgOxShow(czjg);
}
//更新状态值
}
DataTable udt2 = dt2.GetChanges(); //表二
DataTable udt1 = dt1.GetChanges(); //表一
if (KcDb.GetDtSaven(ft1, udt1, ft2, udt2, "", null, ft1sh, ft2shbjzd, ""))
{
dt1.AcceptChanges();
dt2.AcceptChanges();
}
udt2 = null;
udt1 = null;
sftj = true;
Djload();
MsgXxShow("全部" + (spcz ? "" : "取消") + "审核" + "操作已经完成,本次共完成 " + wcsl.ToString().Trim() + " 张单据的处理!");
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow("全部" + (spcz ? "" : "取消") + "审核", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Barhelp_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
RunHelpyy(this, fgnmc, pSFSJ);
}
private void Barpreview_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Doprintdj();
}
private void Barprint_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Doprintdj();
}
private void Barsh_itemclick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//审核单据
try
{
if (dt1.Rows[dqdjh][ft1dj].ToString() != "")
{
MsgOxShow("单据已经被登账,不能审核或取消审核");
return;
}
if (sfsp)
{
if (dt1.Rows[dqdjh][ft1sh].ToString() != pDQYH) //他人审核
{
MsgOxShow("不能取消他人审核");
return;
}
}
string czsql = "select x9_djsp('" + pDQYH + "','" + pBJMC + "','" + fdjmc + "','" + dqoid + "','审核'," + (sfsp ? "false" : "true") + ")";
string czjg = KcDb.DBString(czsql);
if (czjg == pDQYH)
{
dt1.Rows[dqdjh][ft1sh] = (sfsp ? "" : pDQYH);
if (dt2.DefaultView.Count > 0)
{
for (int t2r = dt2.DefaultView.Count - 1; t2r >= 0; t2r += -1)
{
dt2.DefaultView[t2r][ft2shbjzd] = (sfsp ? false : true);
}
}
DataTable udt2 = dt2.GetChanges(); //表二
DataTable udt1 = dt1.GetChanges(); //表一
if (KcDb.GetDtSaven(ft1, udt1, ft2, udt2, "", null, ft1sh, ft2shbjzd, ""))
{
dt1.AcceptChanges();
dt2.AcceptChanges();
}
udt2 = null;
udt1 = null;
sftj = true;
Djload();
}
else
{
MsgOxShow(czjg);
}
KcDb.DBclose();
}
catch (Exception ex)
{
MsgExShow((sfsp ? "审核" : "取消" + "审核") + "单据[" + dqoid + "]", ex.Message, ex.Source, ex.StackTrace);
}
}
private void BarTJ_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
Dttj();
}
private void BarZR_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
sfzr = true;
Dtzr();
}
private void Btpg1_ItemClick(object sender, EventArgs e)
{
// 首张
if (dqdjs > 0)
{
dqdjh = 0;
Djload();
}
else
{
Fmxmclear(true);
mtgv.OptionsBehavior.ReadOnly = true;
Gvclear(ref mtgv);
Barenabled();
}
}
private void Btpg2_ItemClick(object sender, EventArgs e)
{
if (dqdjs > 0)
{
if (dqdjh > 0)
{
dqdjh--;
Djload();
}
}
}
private void Btpg3_ItemClick(object sender, EventArgs e)
{
// 下一张
if (dqdjs > 0)
{
if (dqdjh < dqdjs - 1)
{
dqdjh++;
Djload();
}
}
}
private void Btpg4_ItemClick(object sender, EventArgs e)
{
if (dqdjs > 0)
{
dqdjh = dqdjs - 1;
Djload();
}
else
{
Fmxmclear(true);
mtgv.OptionsBehavior.ReadOnly = true;
Gvclear(ref mtgv);
Barenabled();
}
}
private void Dj_cellvaluechanged(object sender, CellValueChangedEventArgs e)
{
mtgv.UpdateSummary();
}
private void Dj_focusedrowchanged(object sender, FocusedRowChangedEventArgs e)
{
if (savem || mtgv.FocusedRowHandle < 0 || adding) return;
try
{
adding = true;
dqmrow = mtgv.FocusedRowHandle;
if (sfzj > 0 && !mtgv.OptionsBehavior.ReadOnly && xzbj &&
dqmrow == mtgv.RowCount - 1 && dqmrow < 256)
{
DataRow nrow = dqdt2.NewRow();
dqdt2.Rows.Add(nrow);
mtgv.RefreshRow(mtgv.RowCount - 1);
}
Lczs.Text = $"[{dqdjh + 1}/{dt1.Rows.Count}张][{mtgv.FocusedRowHandle + 1}/{mtgv.RowCount}行]";
}
catch
{
// 忽略错误
}
finally
{
adding = false;
}
}
private void Djbuttonedit_buttonclick(object sender, EventArgs e)
{
if (mtgv.OptionsBehavior.ReadOnly) return;
ButtonEdit be = sender as ButtonEdit;
FmSRCK fmck = new FmSRCK();
{
Gdbuttonedit_srck(ref fmck, this, ref mtgv, ref be, fgnbh, fgnmc, ft2, "", dqbmdh, false);
}
object bv = be.EditValue;
be.EditValue = null;
be.EditValue = bv;
}
private void Djbuttonedit_keydown(object sender, KeyEventArgs e)
{
if (e.KeyCode != Keys.Enter || mtgv.OptionsBehavior.ReadOnly) return;
ButtonEdit be = sender as ButtonEdit;
FmSRCK fmck = new FmSRCK();
{
Gdbuttonedit_srck(ref fmck, this, ref mtgv, ref be, fgnbh, fgnmc, ft2, "", dqbmdh, true);
}
object bv = be.EditValue;
be.EditValue = null;
be.EditValue = bv;
}
private void Djload()
{
try
{
sfzj = 0;
dqdjs = dt1.Rows.Count;
loadfm = true;
if (dqdjh < 0)
{
Fmxmrw(true);
dt2.DefaultView.RowFilter = "false";
Lczs.Text = "0/0";
Lctz.Text = "填制:";
Lcdj.Text = "审核:";
Lcsh.Text = "签批:";
}
else
{
Gvclear(ref mtgv);
Baroid.EditValue = dt1.Rows[dqdjh][ft1oid].ToString();
Fmxmload();
dt2.DefaultView.RowFilter = ft2oid + "='" + Baroid.EditValue.ToString() + "'";
dt2.DefaultView.RowStateFilter = (DataViewRowState.CurrentRows);
sfsp = dt1.Rows[dqdjh][ft1sh].ToString() != "";
sfdj = dt1.Rows[dqdjh][ft1dj].ToString() != "";
Lctz.Text = "填制:" + dt1.Rows[dqdjh][ft1tz].ToString();
Lcsh.Text = "审核:" + dt1.Rows[dqdjh][ft1sh].ToString();
Lcdj.Text = "签批:" + dt1.Rows[dqdjh][ft1dj].ToString();
if (dt2.DefaultView.Count > 0)
{
string gxstr = "";
string gxlost = "";
for (int c = 0; c < dtbmgx.Rows.Count; c++)
{
gxstr += "`" + dtbmgx.Rows[c]["gxmc"] + "`";
}
dqdt2.Rows.Clear();
dqdt2.AcceptChanges();
DataRow[] nrow;
DataRow nrow2;
string rybh = "";
string ryxm = "";
string gxmc;
double tjsl = 0;
int dqh = -1;
for (int r = 0; r < dt2.DefaultView.Count; r++)
{
if (rybh != dt2.DefaultView[r]["rybh"].ToString())
{
nrow = dqdt2.Select("rybh='" + dt2.DefaultView[r]["rybh"] + "'");
if (nrow.Length > 0)
{
dqh = dqdt2.Rows.IndexOf(nrow[0]);
}
else
{
nrow2 = dqdt2.NewRow();
nrow2["rybh"] = dt2.DefaultView[r]["rybh"];
nrow2["ryxm"] = dt2.DefaultView[r]["ryxm"];
dqdt2.Rows.Add(nrow2);
nrow = dqdt2.Select("rybh='" + dt2.DefaultView[r]["rybh"] + "'");
if (nrow.Length > 0)
{
dqh = dqdt2.Rows.IndexOf(nrow[0]);
}
}
}
rybh = dt2.DefaultView[r]["rybh"].ToString();
gxmc = dt2.DefaultView[r]["gxmc"].ToString();
if (gxstr.IndexOf("`" + gxmc + "`") > -1)
{
if (dqh >= 0)
{
tjsl = Convert.ToDouble(dt2.DefaultView[r]["tjsl"]);
if (tjsl != 0)
{
dqdt2.Rows[dqh][gxmc] = dt2.DefaultView[r]["tjsl"];
}
}
}
else
{
if (gxlost == "")
{
gxlost = gxmc;
}
else
{
if (gxlost.IndexOf(gxmc) <= -1)
{
gxlost += "," + gxmc;
}
}
}
}
dqdt2.AcceptChanges();
if (gxlost.Length > 0)
{
MsgXxShow("工序名称:" + gxlost + " 在当前工作中不存在!\r\n" +
"这些数据在数据库中依然存在,这将导致严重的数据错误,请删除后重新输入!\r\n" +
"文件导入数据时,需要区分工作中心。");
}
nrow = null;
nrow2 = null;
}
else
{
Dqdt2cs();
dqdt2.AcceptChanges();
}
}
mtgv.RefreshData();
mtgv.OptionsBehavior.ReadOnly = true;
if (dt1.Rows.Count > 0)
{
if (mtgv.RowCount <= 0)
{
Lczs.Text = "[" + (dqdjh + 1).ToString().Trim() + "/" + dt1.Rows.Count.ToString().Trim() + "张][0/0行]";
}
else
{
Lczs.Text = "[" + (dqdjh + 1).ToString().Trim() + "/" + dt1.Rows.Count.ToString().Trim() + "张][" + (mtgv.FocusedRowHandle + 1).ToString().Trim() + "/" + mtgv.RowCount.ToString().Trim() + "行]";
}
}
dqoid = Baroid.EditValue.ToString();
Barenabled();
loadfm = false;
}
catch (Exception ex)
{
MsgExShow("加载单记录[" + dqoid + "]", ex.Message, ex.Source, ex.StackTrace);
}
}
private void Djtab_selectedpagechanged(object sender, DevExpress.XtraTab.TabPageChangedEventArgs e)
{
try
{
if (DJTab.TabPages.Count == 0 || DJTab.SelectedTabPage == null) return;
if (DJTab.SelectedTabPage.Controls.Count <= 0) return;
int pg = DJTab.SelectedTabPageIndex;
if (firstedit?[pg] != null)
firstedit[pg].Focus();
}
catch (Exception ex)
{
MsgExShow("选项卡切换", ex.Message, ex.Source, ex.StackTrace);
}
}
}
}