编程与数学 03-008 《看潮企业管理软件》项目开发 15 工序统计 4-3

编程与数学 03-008 《看潮企业管理软件》项目开发 15 工序统计 4-3

摘要:本文介绍了基于DevExpress WinForms开发的"看潮企业管理软件"工序统计模块(Uf07Gzjj)。该系统采用C#语言和.NET Framework技术栈,实现计件工作量统计表的全生命周期管理,支持数据录入、审核、登账等核心业务流程。系统创新性地采用动态列生成技术,根据部门工序自动构建统计表格,支持横向与纵向双模式数据录入。通过Ribbon界面整合打印预览、XML数据交换、批量审核等高级功能,配合完整的权限控制体系(编辑/审核/打印分级授权)和智能窗口布局记忆机制,为制造型企业提供了高效、灵活的计件工资管理解决方案。
关键词:计件工作量统计;DevExpress WinForms;工序管理;数据审核流程;动态列生成;权限控制;XML数据交换
人工智能助手:DeepSeek、Kimi

三、窗体功能代码

第二部分

csharp 复制代码
        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);
            }
        }
        private void Djview_keydown(object sender, KeyEventArgs e)
        {
            if (sfzj <= 0 || mtgv.OptionsBehavior.ReadOnly || mtgv.RowCount <= 2) return;
            if (e.KeyCode == Keys.Delete && e.Modifiers == Keys.Control)
            {
                if (MsgSfShow("确定要删除当前行吗?") == DialogResult.OK)
                {
                    try
                    {
                        int dqrow = mtgv.FocusedRowHandle;
                        mtgv.DeleteRow(dqrow);
                        mtgv.FocusedRowHandle = dqrow;
                        mtgv.FocusedColumn = mtgv.VisibleColumns[0];
                    }
                    catch (Exception ex)
                    {
                        MsgExShow("删除当前行", ex.Message, ex.Source, ex.StackTrace);
                    }
                }
            }
        }
        private void Djview_keyup(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            //处理键盘移动焦点单元格
            try
            {
                if (e.KeyCode == Keys.Enter)
                {
                    SendKeys.Send("{enter}");
                    if (fzxsr)
                    {
                        SendKeys.Send("{down}");
                    }
                    else
                    {
                        SendKeys.Send("{tab}");
                    }
                    return;
                }
            }
            catch (Exception ex)
            {
            }
        }
        private void Doprintdj()
        {
            try
            {
                //直接打印
                mtgv.OptionsPrint.AllowCancelPrintExport = true;
                mtgv.OptionsPrint.PrintHeader = true;
                mtgv.OptionsPrint.RtfPageHeader = Lctt.Text;
                mtgv.ShowRibbonPrintPreview();
            }
            catch (Exception ex)
            {
                MsgExShow("数据打印", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Dqdt2cs()
        {
            // 初始计件工作统计表数据
            DataRow nrow;
            dqdt2.Rows.Clear();
            dqdt2.AcceptChanges();
            for (int r = 0; r < dtbmry.Rows.Count; r++)
            {
                nrow = dqdt2.NewRow();
                nrow["rybh"] = dtbmry.Rows[r]["rybh"];
                nrow["ryxm"] = dtbmry.Rows[r]["ryxm"];
                dqdt2.Rows.Add(nrow);
            }
            dqdt2.AcceptChanges();
        }
        private void Dttj()
        {
            if (sftj) return;
            if (!sfzr) return;
            try
            {
                if (pYWQJ != KcDb.DBString("select max(ny) as ny from mlny"))
                {
                    MsgOxShow("系统业务期间已经发生变化,当前编辑无法提交,请重新启动本软件后再继续使用!");
                    sftj = true;
                    return;
                }
                KcDb.DBopen();
                // 提交前单象状态验证
                DataTable dt1yz = dt1.GetChanges(DataRowState.Modified);
                if (dt1yz != null)
                {
                    foreach (DataRow row in dt1yz.Rows)
                    {
                        string yzstr = KcDb.DBexec($"select dbo.x9_tj_when('{pDQYH}','{fdjmc}','{row[ft1oid]}')");
                        if (yzstr.Trim() != pDQYH)
                        {
                            MsgOxShow(yzstr + "\r\n");
                            return;
                        }
                    }
                }
                DataTable udt1 = dt1.GetChanges();
                DataTable udt2 = dt2.GetChanges();
                string xxstr = "";
                string bmstr = "";
                if (udt1 != null)
                {
                    foreach (DataRow row in udt1.Rows)
                    {
                        if (row.RowState != DataRowState.Deleted)
                        {
                            bmstr += $"({row[ft1oid]})";
                        }
                    }
                    xxstr += $"单象头数据提交:{udt1.Rows.Count}行\r\n";
                }
                if (udt2 != null)
                {
                    xxstr += $"单象体数据提交:{udt2.Rows.Count}行\r\n";
                }
                if (KcDb.GetDtSaven(ft1, udt1, ft2, udt2, "", null, "", "", ""))
                {
                    dt1.AcceptChanges();
                    dt2.AcceptChanges();
                }
                if (!string.IsNullOrEmpty(xxstr))
                {
                    string tjstr = KcDb.DBexec($"select x9_tj_4djsr('{pDQYH}','{fdjmc}','{bmstr}')");
                    xxstr += tjstr;
                }
                sfzr = true;
                sftj = true;
                sfzj = 0;
                Barenabled();
                if (!string.IsNullOrEmpty(xxstr))
                {
                    MsgXxShow($"数据提交已经完成\r\n{xxstr}\r\n{ft1tjts}");
                }
                KcDb.DBclose();
            }
            catch (Exception ex)
            {
                MsgExShow("数据提交", ex.Message, ex.Source, ex.StackTrace);
                sftj = false;
            }
        }
        private void Dtzr()
        {
            if (sfzr && !sftj)
            {
                if (MsgSfShow("当前数据尚未提交,重新载入将放弃所有编辑,是否继续?") != DialogResult.OK)
                {
                    return;
                }
            }
            if (sfzr)
            {
                SaveFmSet();
            }
            loading = true;
            try
            {
                KcDb.DBopen();
                string sqltj1 = $"select dyid,tjxh,tjmc,tjjg,tjsm,tjedit,rxkz from x9_gn_0zrtj nolock where gnbh='{fgnbh}' and yhmc='{pDQYH}' order by tjxh";
                dttj1 = KcDb.DtRead(sqltj1);
                if (dttj1.Rows.Count <= 0)
                {
                    KcDb.DBexec($"select x9_zrtjcs('{fgnbh}','{pDQYH}')");
                    dttj1 = KcDb.DtRead(sqltj1);
                }
                if (dttj1.Rows.Count > 0)
                {
                    FmZRTJ fmtj = new FmZRTJ();
                    fmtj.Text = fgnmc + "载入条件";
                    fmtj.fgnbh = fgnbh;
                    fmtj.fgnmc = fgnmc;
                    fmtj.Loadtjfm();
                    fmtj.Tjedit(ref dttj1);
                    dttj1.AcceptChanges();
                    fmtj.ShowDialog(this);
                    if (!fmtj.sfok)
                    {
                        if (!sfzr)
                        {
                            sftj = true;
                            this.Close();
                        }
                        return;
                    }
                    Zrtjsave(fmtj.tjlc, ref dttj1);
                    DataTable udt1 = dttj1.GetChanges();
                    if (udt1 != null && KcDb.GetDtSavev("x9_gn_0zrtj", ref udt1, "tjjg"))
                    {
                        dttj1.AcceptChanges();
                    }
                }
                Baroid.EditValue = "";
                Lczs.Text = "";
                dt1 = new DataTable();
                dt2 = new DataTable();
                dqdjh = -1;
                dqdjs = 0;
                string ybmdh = dqbmdh;
                string ygymc = dqgymc;
                zrtjstr = "";
                foreach (DataRow row in dttj1.Rows)
                {
                    string tjedit = row["tjedit"].ToString();
                    switch (tjedit)
                    {
                        case "dateedit":
                            DateTime tjdate;
                            try
                            {
                                tjdate = Convert.ToDateTime(row["tjjg"]);
                            }
                            catch
                            {
                                tjdate = Getywdate();
                            }
                            zrtjstr += $"{row["tjmc"]}@{tjdate:yyyy-MM-dd}@";
                            break;
                        default:
                            string tjmc = row["tjmc"].ToString();
                            string tjjg = row["tjjg"].ToString();
                            if (tjmc == "生产部门代号") dqbmdh = tjjg;
                            if (tjmc == "生产部门名称") dqbmmc = tjjg;
                            if (tjmc == "业务期间") dqywqj = tjjg;
                            if (tjmc == "工艺名称") dqgymc = tjjg.Trim();
                            if (tjmc == "计件种类") dqjjzl = tjjg.Trim();
                            if (tjmc == "是否钉扎") dqsfdj = tjjg;
                            zrtjstr += $"{tjmc}@{tjjg}@";
                            break;
                    }
                }
                string xxcx0 = KcDb.DBString($"select x9_jjgzlsj('ft1oidqz','{pYHJS}',{(dqsfdj == "1" ? "true" : "false")})");
                if (!string.IsNullOrEmpty(xxcx0))
                {
                    ft1oidqz = xxcx0.Replace("`", "'");
                }
                oidqz = Xttj(ft1oidqz);
                oidqz = TjStr(ref dttj1, oidqz);
                ywqj = dqywqj;
                Barywqj.EditValue = ywqj;
                string xxcx1 = KcDb.DBString($"select x9_jjgzlsj('ft1where','{pYHJS}',{(dqsfdj == "1" ? "true" : "false")})");
                if (!string.IsNullOrEmpty(xxcx1))
                {
                    ft1where = xxcx1.Replace("`", "'");
                }
                string xxcx2 = KcDb.DBString($"select x9_jjgzlsj('ft2where','{pYHJS}',{(dqsfdj == "1" ? "true" : "false")})");
                if (!string.IsNullOrEmpty(xxcx2))
                {
                    ft2where = xxcx2.Replace("`", "'");
                }
                string fttj1 = TjStr(ref dttj1, ft1where);
                string fttj2 = TjStr(ref dttj1, ft2where);
                fttj1 = Xttj(fttj1);
                fttj2 = Xttj(fttj2);
                sql1 = $"select {ft1list} from {ft1}{(fttj1.Trim() != "" ? " where " + fttj1 : "")} order by {ft1order}";
                dt1 = KcDb.DtRead(sql1);
                sql2 = $"select {ft2list} from {ft2}{(fttj2.Trim() != "" ? " where " + fttj2 : "")} order by {ft2order}";
                dt2 = KcDb.DtRead(sql2);
                if (dt1 == null || dt2 == null)
                {
                    MsgXxShow("数据未能正确载入,请检查功能定义是否完整或载入过程是否正确");
                    sftj = true;
                    if (!sfzr) this.Close();
                    return;
                }
                if (pSFSJ)
                {
                    string t1 = sql1.Replace("'", "`");
                    string t2 = sql2.Replace("'", "`");
                    string d1 = ($"select * from x9_sjzd where tname='{ft1}' and zdbb ='{ftbb}'").Replace("'", "`");
                    string d2 = ($"select * from x9_sjzd where tname='{ft2}' and zdbb ='{ftbb}'").Replace("'", "`");
                    KcDb.DBexec($"update x9_gn_0dymb set t1='{t1}',t2='{t2}',d1='{d1}',d2='{d2}' where gnbh='{fgnbh}' and sjsd=false");
                    StringBuilder strhelp = new StringBuilder();
                    strhelp.AppendLine();
                    strhelp.AppendLine(fgnmc);
                    strhelp.AppendLine(new string('=', fgnmc.Length * 2));
                    strhelp.AppendLine();
                    strhelp.AppendLine("一、功能用途");
                    strhelp.AppendLine();
                    StringBuilder dt1xm = new StringBuilder("二、单象头项目\r\n");
                    foreach (DataColumn col in dt1.Columns)
                    {
                        DataRow[] dr = dtzd1.Select($"tname='{ft1}' and fname='{col.ColumnName}'");
                        if (dr.Length > 0)
                        {
                            dt1xm.AppendLine($"{dr[0]["fmemo"]}({dr[0]["fname"]})。");
                        }
                    }
                    StringBuilder dt2xm = new StringBuilder("\r\n三、单象体项目\r\n");
                    foreach (DataColumn col in dt2.Columns)
                    {
                        DataRow[] dr = dtzd2.Select($"tname='{ft2}' and fname='{col.ColumnName}'");
                        if (dr.Length > 0)
                        {
                            dt2xm.AppendLine($"{dr[0]["fmemo"]}({dr[0]["fname"]})。");
                        }
                    }
                    strhelp.Append(dt1xm);
                    strhelp.Append(dt2xm);
                    strhelp.AppendLine("\r\n四、注意事项");
                    strhelp.AppendLine("\r\n五、操作方法(参见单象输入功能操作方法)");
                    KcDb.DBexec($"update x9_help_yy set mbhelp='{strhelp}' where ztbh='{fgnbh}'");
                }
                Lctt.Text = $"{dqywqj} {dqbmdh} {dqbmmc} {dqjjzl} {dqgymc} {(xzbj ? "编辑" : "无编辑权限")} {(xzsh ? "审核" : "无审核权限")}";
                if (dqbmdh != ybmdh || dqgymc != ygymc)
                {
                    try
                    {
                        if (string.IsNullOrEmpty(dqgymc))
                        {
                            dtbmgx = KcDb.DtRead($"select gxxh,gxmc from mlscgx where bmdh='{dqbmdh}' order by gxxh");
                        }
                        else
                        {
                            dqjjzl = "工艺价格";
                            dtbmgx = KcDb.DtRead($"select gxxh,gxmc from mlgygx where gymc='{dqgymc}' order by gxxh");
                        }
                        dtbmry = KcDb.DtRead($"select rybh,ryxm from mlbmry where bmdh='{dqbmdh}' order by rybh");
                        dqdt2 = new DataTable();
                        // 添加列
                        DataColumn colsr = new DataColumn
                        {
                            DataType = typeof(string),
                            ColumnName = "rybh",
                            DefaultValue = ""
                        };
                        dqdt2.Columns.Add(colsr);
                        colsr = new DataColumn
                        {
                            DataType = typeof(string),
                            ColumnName = "ryxm",
                            DefaultValue = ""
                        };
                        dqdt2.Columns.Add(colsr);
                        foreach (DataRow row in dtbmgx.Rows)
                        {
                            colsr = new DataColumn
                            {
                                DataType = typeof(double),
                                ColumnName = row["gxmc"].ToString().Trim(),
                                DefaultValue = 0
                            };
                            dqdt2.Columns.Add(colsr);
                        }
                        dqdt2.PrimaryKey = new DataColumn[] { dqdt2.Columns["rybh"] };
                        Loaddjgv();
                    }
                    catch (Exception ex)
                    {
                        loaderr = true;
                        MsgExShow("加载窗口,初始单象体组件", ex.Message, ex.Source, ex.StackTrace);
                    }
                }
                dqdjs = dt1.Rows.Count;
                dqdjh = dqdjs > 0 ? 0 : -1;
                sfzr = true;
                sftj = true;
                dqdjs = dt1.Rows.Count;
                KcDb.DBString($"select x9_djoid(5,'{ft1}','{ft1oid}','{oidqz}')");
                loading = false;
                if (!string.IsNullOrEmpty(dyoid))
                {
                    bool czjg = false;
                    for (int r = 0; r < dt1.Rows.Count; r++)
                    {
                        if (dt1.Rows[r][ft1oid].ToString() == dyoid)
                        {
                            czjg = true;
                            dqdjh = r;
                            Djload();
                            break;
                        }
                    }
                    if (!czjg)
                    {
                        Btpg4_ItemClick(null, null);
                    }
                }
                else
                {
                    Btpg4_ItemClick(null, null);
                }
                try
                {
                    string fmset = FmRead(fgnmc + dqbmmc);
                    string[] fmay = fmset.Split(',');
                    if (fmay.Length >= 5)
                    {
                        short ws = fmay.Length == 6 ? Convert.ToInt16(fmay[5]) : (short)0;
                        if (ws == 2)
                        {
                            this.WindowState = FormWindowState.Maximized;
                        }
                        else if (ws == 0)
                        {
                            if (Convert.ToInt32(fmay[0]) > 0) this.Top = Convert.ToInt32(fmay[0]);
                            if (Convert.ToInt32(fmay[1]) > 0) this.Left = Convert.ToInt32(fmay[1]);
                            if (Convert.ToInt32(fmay[2]) > 50) this.Width = Convert.ToInt32(fmay[2]);
                            if (Convert.ToInt32(fmay[3]) > 50) this.Height = Convert.ToInt32(fmay[3]);
                        }
                        if (Convert.ToInt32(fmay[4]) > 50) Sp1.SplitterPosition = Convert.ToInt32(fmay[4]);
                    }
                    fmset = FmRead(fgnmc + dqbmmc + "单象体");
                    fmay = fmset.Split(',');
                    if (mtgv != null && fmay.Length == mtgv.Columns.Count + 1)
                    {
                        for (int c = 0; c < mtgv.Columns.Count; c++)
                        {
                            int cw = Convert.ToInt32(fmay[c]);
                            if (cw <= 0)
                            {
                                mtgv.Columns[c].Visible = false;
                            }
                            else
                            {
                                mtgv.Columns[c].Width = cw;
                            }
                        }
                        mtgv.RowHeight = Convert.ToInt32(fmay[mtgv.Columns.Count]);
                    }
                    else if (mtgv != null)
                    {
                        Gvoptionwith(ref mtgv, GridDM.Width);
                    }
                }
                catch (Exception ex)
                {
                    MsgExShow("应用保存的窗口参数", ex.Message, ex.Source, ex.StackTrace);
                }
                KcDb.DBclose();
            }
            catch (Exception ex)
            {
                MsgExShow("数据载入", ex.Message, ex.Source, ex.StackTrace);
                this.Close();
            }
        }
        private void Dxmenuclick(object sender, EventArgs e)
        {
            Gvoptionwith(ref mtgv, GridDM.Width);
        }
        private BaseEdit Findgsx(string fname)
        {
            BaseEdit eb = null;
            for (int k = 0; k <= DJTab.TabPages.Count - 1; k++)
            {
                LayoutControl lc = DJTab.TabPages[k].Controls[0] as LayoutControl;
                string[] itag;
                foreach (LayoutControlItem lit in lc.Root.Items)
                {
                    itag = lit.Tag.ToString().Split(',');
                    if (itag.Length == 5)
                    {
                        if (itag[2] == fname)
                        {
                            eb = lit.Control as BaseEdit;
                        }
                    }
                }
            }
            return eb;
        }
        private BaseEdit Findlastedit(LayoutControlGroup lc)
        {
            bool fl = false;
            LayoutControlItem maxci = null;
            int xym = 0;
            int xyc = 0;
            BaseEdit be = null;
            for (int l = 0; l <= lc.Items.ItemCount - 1; l++)
            {
                if (!((!lc.Items[l].Visible) || lc.Items[l].IsHidden || lc.Items[l].Name.Substring(0, 1) == "e"))
                {
                    LayoutControlItem ci = lc.Items[l] as LayoutControlItem;
                    if (ci == null)
                    {
                        continue;
                    }
                    else
                    {
                        be = ci.Control as BaseEdit;
                        if (be != null)
                        {
                            be.EnterMoveNextControl = true;
                            be.KeyDown -= Fmlastedit_keydown;
                            if (maxci == null)
                            {
                                maxci = ci;
                            }
                            else
                            {
                                if (be.Name.Substring(0, 1) == "t")
                                {
                                    xym = maxci.Location.Y * 1000 + maxci.Location.X;
                                    xyc = ci.Location.Y * 1000 + ci.Location.X;
                                    if (xym < xyc)
                                    {
                                        maxci = ci;
                                    }
                                }
                                else
                                {
                                    continue;
                                }
                                continue;
                            }
                        }
                    }
                }
            }
            if (maxci == null)
            {
                be = null;
            }
            else
            {
                be = maxci.Control as BaseEdit;
                be.EnterMoveNextControl = false;
            }
            return be;
        }
        private void Fm_visiblechanged(object sender, System.EventArgs e)
        {
            if (fh && this.Visible)
            {
                sfzr = false;
                Dtzr();
                fh = false;
            }
        }
        private void Fmbuttonedit_buttonclick(object sender, ButtonPressedEventArgs e)
        {
            ButtonEdit be = sender as ButtonEdit;
            string cktj = zrtjstr;
            using (FmSRCK fmck = new FmSRCK())
            {
                Fmbuttonedit_srck(fmck, this, ref be, fgnbh, fgnmc, ft1, true, cktj);
            }
        }
        private void Fmbuttonedit_keydown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter) return;
            ButtonEdit be = sender as ButtonEdit;
            string cktj = zrtjstr;
            using (FmSRCK fmck = new FmSRCK())
            {
                Fmbuttonedit_srck(fmck, this, ref be, fgnbh, fgnmc, ft1, false, cktj);
            }
        }
        private void Fmlastedit_keydown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode != Keys.Enter) return;
            int tabidx = DJTab.SelectedTabPageIndex;
            if (tabidx < DJTab.TabPages.Count - 1)
            {
                // 下一页
                DJTab.SelectedTabPageIndex = tabidx + 1;
            }
            else
            {
                // 第一页
                entermtgv = true;
                mtgv.Focus();
            }
        }
        private void Fmxmclear(bool rw)
        {
            // 编辑项目清空
            for (int k = 0; k < DJTab.TabPages.Count; k++)
            {
                LayoutControl lc = DJTab.TabPages[k].Controls[0] as LayoutControl;
                Fmxmcls(ref lc, ref rw);
            }
            Lczs.Text = "";
        }
        private void Fmxmload()
        {
            // 数据表值
            if (loading) return;
            if (saving) return;
            try
            {
                sfzj = -1;
                DataRow dr;
                string dqbm = dt1.Rows[dqdjh][ft1oid].ToString();
                dr = dt1.Rows[dqdjh];
                if (dr != null)
                {
                    for (int k = 0; k < DJTab.TabPages.Count; k++)
                    {
                        LayoutControl lc = DJTab.TabPages[k].Controls[0] as LayoutControl;
                        Fmecload(ref lc, ref dr);
                    }
                }
                else
                {
                    Fmxmclear(true);
                }
                sfzj = 0;
                Barenabled();
            }
            catch (Exception ex)
            {
                MsgExShow("加载单记录头数据", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Fmxmrw(bool rw)
        {
            // 项目只读属性设置
            for (int k = 0; k < DJTab.TabPages.Count; k++)
            {
                LayoutControl lc = DJTab.TabPages[k].Controls[0] as LayoutControl;
                Fmxmec(ref lc, ref rw);
            }
        }
        private void Form_disposed(object sender, EventArgs e)
        {
            try
            {
                for (int i = 0; i < DJTab.TabPages.Count; i++)
                {
                    DJTab.TabPages[i].Controls.Clear();
                }
                ft1 = null; //string = "gzjjo"         //功能表1
                ft2 = null; //string = "gzjjm"           //功能表2
                ftbb = null; //string = ""         //功能表版本
                fgnbh = null; //string
                fgnmc = null; //string
                fdjmc = null; //string = "计件工作量统计表"
                ft1list = null; //string = "oid,ny,bmdh,bmmc,jjzl,rq,chxh,chdh,chhc,scdh,jhsl,bz,tzr,shr,djr"
                ft1oid = null; //string = "oid"
                ft1oidqz = null; //string = "gzjj{ppcxh}_{pywqj}_"
                ft1tz = null; //string = "tzr"
                ft1sh = null; //string = "shr"
                ft1dj = null; //string = "djr"
                ft1qj = null; //string = "ny"
                ft1where = null; //string = "oid like 'gzjj{ppcxh}%' and bmdh='{生产部门代号}' and ny='{业务期间}' and {是否登记}=iif(djr<>'',1,0)"
                ft1order = null; //string = "oid"
                ft1tjts = null; //string = ""
                ft2mid = null; //string = "mid"
                ft2oid = null; //string = "oid"
                ft2qj = null; //string = "ny"
                ft2list = null; //string = "mid,oid,ny,bmdh,bmmc,rybh,ryxm,gxmc,tjsl,sfgx,sfsh,sfdj"
                ft2where = null; //string = "oid like 'gzjj{ppcxh}%'  and bmdh='{生产部门代号}' and ny='{业务期间}' and sfdj={是否登记}"
                ft2order = null; //string = "oid,rybh,mid"
                ft2shbjzd = null; //string = "sfsh"
                ft2djbjzd = null; //string = "sfdj"
                fzxsr = false; //boolean
                xzbj = false; //boolean
                xzdy = false; //boolean
                xzck = false; //boolean
                xzwj = false; //boolean
                xzdc = false; //boolean
                dt1 = null; //datatable
                dtzd1 = null; //datatable
                dttj1 = null; //datatable
                dt2 = null; //datatable
                dtzd2 = null; //datatable
                ywqj = null; //string          //业务期间
                oidqz = null; //string         //编码前缀
                sfzj = 0; //integer         //是否增加  1添加同级 2添加下级 3修改
                sfzr = false; //boolean         //是否载入
                sftj = false; //boolean         //是否提交
                sfsp = false; //boolean         //是否审核
                sfdj = false; //boolean         //是否登记
                dqdt2 = null; //datatable
                ft1fd = null; //string       //字段列表数组
                ft2fd = null; //string
                firstedit = null; //baseedit //首控件
                mtgv = null; //new gridview    //单据体主数据表视图
                dqdjh = -1; //integer = -1
                dqdjs = 0; //integer = 0
                dqoid = ""; //string = ""
                dqmid = ""; //string = ""
                dqmrow = -1; //integer = -1
                zrtjstr = ""; //string = ""
                jszdstr = ""; //string = ""
                loading = false; //boolean = false  //单据装入中
                loadfm = false; //boolean = false   //表单装入中
                saving = false; //boolean = false   //单据保存中
                drsjz = false; //boolean = false    //数据调入中
                gsjsz = false; //boolean = false    //计算中
                djenter = false;
                fh = false;
                entermtgv = false;
                adding = false;
                savem = false;
                sql1 = null; //string
                sql2 = null; //string
                loaderr = false; //boolean = false
                dqbmdh = ""; //string = ""        //当前部门代号
                dqbmmc = ""; //string = ""        //当前部门名称
                dqgymc = ""; //string = ""               //计件种类
                dqjjzl = ""; //string = ""               //计件种类
                dqywqj = ""; //string = ""           //载入年月
                dtbmgx = null; //datatable            //部门工序
                dtbmry = null; //datatable             //部门人员
                RibbonControl = null; //devexpress.xtrabars.ribbon.ribboncontrol
                RibbonPage1 = null; //devexpress.xtrabars.ribbon.ribbonpage
                Rpg1 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                Rpg7 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                Rpg2 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                Rpg9 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                RibbonStatusBar = null; //devexpress.xtrabars.ribbon.ribbonstatusbar
                BarZR = null; //devexpress.xtrabars.barbuttonitem
                BarTJ = null; //devexpress.xtrabars.barbuttonitem
                BardjTJ = null; //devexpress.xtrabars.barbuttonitem
                L1 = null; //devexpress.xtrabars.barstaticitem
                L2 = null; //devexpress.xtrabars.barstaticitem
                Sp1 = null; //devexpress.xtraeditors.splitcontainercontrol
                BardjSC = null; //devexpress.xtrabars.barbuttonitem
                DJTab = null; //devexpress.xtratab.xtratabcontrol
                BarPrint = null; //devexpress.xtrabars.barbuttonitem
                BarPreview = null; //devexpress.xtrabars.barbuttonitem
                BarHelp = null; //devexpress.xtrabars.barbuttonitem
                BackgroundWorker1 = null; //system.componentmodel.backgroundworker
                OpenFileDialog1 = null; //system.windows.forms.openfiledialog
                RcCZJL = null; //devexpress.xtraeditors.repository.repositoryitemcombobox
                BardjXG = null; //devexpress.xtrabars.barbuttonitem
                BardjOK = null; //devexpress.xtrabars.barbuttonitem
                GridDM = null; //devexpress.xtragrid.gridcontrol
                GridView1 = null; //devexpress.xtragrid.views.grid.gridview
                BardjDR = null; //devexpress.xtrabars.barbuttonitem
                RC1 = null; //devexpress.xtraeditors.repository.repositoryitemcombobox
                BarBJ = null; //devexpress.xtrabars.barbuttonitem
                BarEditDJMC = null; //devexpress.xtrabars.baredititem
                RepositoryItemTextEdit1 = null; //devexpress.xtraeditors.repository.repositoryitemtextedit
                Rpgdjmc = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                Barexit = null; //devexpress.xtrabars.barbuttonitem
                BardjCancel = null; //devexpress.xtrabars.barbuttonitem
                R1 = null; //devexpress.xtrabars.barstaticitem
                Btpg4 = null; //devexpress.xtraeditors.simplebutton
                Btpg3 = null; //devexpress.xtraeditors.simplebutton
                Btpg2 = null; //devexpress.xtraeditors.simplebutton
                Btpg1 = null; //devexpress.xtraeditors.simplebutton
                Lctt = null; //devexpress.xtraeditors.labelcontrol
                Lctz = null; //devexpress.xtraeditors.labelcontrol
                RepositoryItemComboBox1 = null; //devexpress.xtraeditors.repository.repositoryitemcombobox
                RepositoryItemRadioGroup1 = null; //devexpress.xtraeditors.repository.repositoryitemradiogroup
                RepositoryItemRadioGroup2 = null; //devexpress.xtraeditors.repository.repositoryitemradiogroup
                BarCheckItem1 = null; //devexpress.xtrabars.barcheckitem
                RRg3 = null; //devexpress.xtraeditors.repository.repositoryitemradiogroup
                Baroid = null; //devexpress.xtrabars.baredititem
                Rtoid = null; //devexpress.xtraeditors.repository.repositoryitemtextedit
                Barywqj = null; //devexpress.xtrabars.baredititem
                Rtywqj = null; //devexpress.xtraeditors.repository.repositoryitemtextedit
                RepositoryItemTextEdit2 = null; //devexpress.xtraeditors.repository.repositoryitemtextedit
                R2 = null; //devexpress.xtrabars.barstaticitem
                R3 = null; //devexpress.xtrabars.barstaticitem
                Lczs = null; //devexpress.xtraeditors.labelcontrol
                BarSH = null; //devexpress.xtrabars.barbuttonitem
                Rp6 = null; //devexpress.xtrabars.ribbon.ribbonpagegroup
                BarDJ = null; //devexpress.xtrabars.barbuttonitem
                Lcdj = null; //labelcontrol
                Lcsh = null; //labelcontrol
                BarCZ = null;
                BarFx = null; //xtrabars.baredititem
                RcSrfx = null; //repositoryitemcombobox
                BarTCRY = null; //xtrabars.barbuttonitem
                Bardcwj = null; //xtrabars.barbuttonitem
                Bardrwj = null; //xtrabars.barbuttonitem
                Rpg8 = null; //ribbonpagegroup
                BarFullsh = null; //xtrabars.barbuttonitem
                BarFulldj = null; //xtrabars.barbuttonitem
                GC.Collect();
            }
            catch (Exception ex)
            {
                MsgExShow("析构窗口对象", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Form_FormClosed(object sender, FormClosedEventArgs e)
        {
            Form dqfm = null;
            foreach (Form opfm in Application.OpenForms)
            {
                opfm.WindowState = FormWindowState.Normal;
                dqfm = opfm;
            }
            if (dqfm != null)
            {
                dqfm.Activate();
            }
        }
        private void Loaddjgv()
        {
            try
            {
                if (GridDM == null)
                {
                    loaderr = true;
                    return;
                }
                GridDM.ViewCollection.Clear();
                mtgv = new GridView(GridDM);
                mtgv.BeginUpdate();
                mtgv.Name = "mtgv";
                mtgv.OptionsBehavior.AutoPopulateColumns = false;
                GridDM.DataSource = dqdt2;
                GridDM.ForceInitialize();
                GridDM.MainView = mtgv;
                mtgv.PopulateColumns(dqdt2);
                SetGv(ref mtgv, false);
                mtgv.ColumnPanelRowHeight = PanelRowHeightJj;
                mtgv.OptionsFind.AllowFindPanel = false;
                mtgv.OptionsBehavior.AutoUpdateTotalSummary = false;
                mtgv.PopupMenuShowing += Mtgv_popupmenushowing;
                // 人员编号列
                RepositoryItemButtonEdit rcb = new RepositoryItemButtonEdit
                {
                    TextEditStyle = TextEditStyles.Standard,
                    MaxLength = 10
                };
                rcb.KeyDown += Djbuttonedit_keydown;
                rcb.ButtonClick += Djbuttonedit_buttonclick;
                GridDM.RepositoryItems.Add(rcb);
                mtgv.Columns["rybh"].Caption = "人员编号";
                mtgv.Columns["rybh"].ColumnEdit = rcb;
                mtgv.Columns["rybh"].ToolTip = "";
                mtgv.Columns["rybh"].AppearanceHeader.Options.UseTextOptions = true;
                mtgv.Columns["rybh"].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Near;
                mtgv.Columns["rybh"].AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
                mtgv.Columns["rybh"].AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                mtgv.Columns["rybh"].AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                mtgv.Columns["rybh"].AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap;
                mtgv.Columns["rybh"].OptionsColumn.AllowSort = DefaultBoolean.False;
                mtgv.Columns["rybh"].OptionsColumn.AllowMove = false;
                mtgv.Columns["rybh"].OptionsColumn.AllowShowHide = false;
                mtgv.Columns["rybh"].OptionsFilter.AllowFilter = false;
                mtgv.Columns["rybh"].OptionsColumn.ReadOnly = false;
                mtgv.Columns["rybh"].Fixed = FixedStyle.Left;
                // 人员名列
                RepositoryItemTextEdit rct = new RepositoryItemTextEdit
                {
                    ReadOnly = true
                };
                GridDM.RepositoryItems.Add(rct);
                mtgv.Columns["ryxm"].Caption = "人员姓名";
                mtgv.Columns["ryxm"].ColumnEdit = rct;
                mtgv.Columns["ryxm"].ToolTip = "";
                mtgv.Columns["ryxm"].AppearanceHeader.Options.UseTextOptions = true;
                mtgv.Columns["ryxm"].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
                mtgv.Columns["ryxm"].AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
                mtgv.Columns["ryxm"].AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                mtgv.Columns["ryxm"].AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                mtgv.Columns["ryxm"].AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap;
                mtgv.Columns["ryxm"].OptionsColumn.AllowSort = DefaultBoolean.False;
                mtgv.Columns["ryxm"].OptionsColumn.AllowMove = false;
                mtgv.Columns["ryxm"].OptionsColumn.AllowShowHide = false;
                mtgv.Columns["ryxm"].OptionsFilter.AllowFilter = true;
                mtgv.Columns["ryxm"].OptionsColumn.ReadOnly = true;
                mtgv.Columns["ryxm"].Fixed = FixedStyle.Left;
                GridColumnSummaryItem sitotal = new GridColumnSummaryItem
                {
                    SummaryType = SummaryItemType.Count,
                    DisplayFormat = "共 {0} 行  "
                };
                mtgv.Columns["ryxm"].Summary.Add(sitotal);
                // 工序列
                foreach (DataRow row in dtbmgx.Rows)
                {
                    string gxmc = row["gxmc"].ToString().Trim();
                    RepositoryItemTextEdit rc = new RepositoryItemTextEdit
                    {
                        MaxLength = 12,
                    };
                    rc.DisplayFormat.FormatType = FormatType.Numeric;
                    rc.DisplayFormat.FormatString = "#";
                    rc.EditFormat.FormatType = FormatType.Numeric;
                    rc.EditFormat.FormatString = "#";
                    rc.KeyDown += Djview_keydown;
                    GridDM.RepositoryItems.Add(rc);
                    mtgv.Columns[gxmc].Caption = gxmc;
                    mtgv.Columns[gxmc].ColumnEdit = rc;
                    mtgv.Columns[gxmc].ToolTip = "";
                    mtgv.Columns[gxmc].AppearanceHeader.Options.UseTextOptions = true;
                    mtgv.Columns[gxmc].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
                    mtgv.Columns[gxmc].AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
                    mtgv.Columns[gxmc].AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                    mtgv.Columns[gxmc].AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                    mtgv.Columns[gxmc].AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap;
                    mtgv.Columns[gxmc].OptionsColumn.AllowSort = DefaultBoolean.False;
                    mtgv.Columns[gxmc].OptionsFilter.AllowFilter = false;
                    mtgv.Columns[gxmc].OptionsColumn.ReadOnly = false;
                    mtgv.Columns[gxmc].SummaryItem.DisplayFormat = " {0:#}  ";
                    mtgv.Columns[gxmc].SummaryItem.FieldName = gxmc;
                    mtgv.Columns[gxmc].SummaryItem.SummaryType = SummaryItemType.Sum;
                }
                mtgv.OptionsView.ShowFooter = true;
                mtgv.OptionsMenu.ShowFooterItem = true;
                mtgv.OptionsView.EnableAppearanceEvenRow = true;
                mtgv.OptionsView.EnableAppearanceOddRow = true;
                // 添加事件
                mtgv.KeyUp += Djview_keyup;
                mtgv.FocusedRowChanged += Dj_focusedrowchanged;
                mtgv.CellValueChanged += Dj_cellvaluechanged;
                // 计算合计列表达式
                StringBuilder strhj = new StringBuilder();
                foreach (GridColumn col in mtgv.Columns)
                {
                    string tyname = col.ColumnType.Name.ToLower();
                    if (tyname == "int16" || tyname == "int32" || tyname == "int64" ||
                        tyname == "byte" || tyname == "sbyte" || tyname == "uint16" ||
                        tyname == "uint32" || tyname == "uint64" || tyname == "decimal" ||
                        tyname == "double" || tyname == "single")
                    {
                        strhj.Append($"[{col.FieldName}]+");
                    }
                }
                if (strhj.Length > 0)
                {
                    strhj.Length--; // 移除最后一个+
                }
                // 添加合计列
                GridColumn unbcolumn = mtgv.Columns.AddField("total");
                unbcolumn.Caption = "合计";
                unbcolumn.AppearanceHeader.Options.UseTextOptions = true;
                unbcolumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
                unbcolumn.AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
                unbcolumn.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
                unbcolumn.AppearanceHeader.TextOptions.VAlignment = VertAlignment.Center;
                unbcolumn.AppearanceHeader.TextOptions.WordWrap = WordWrap.Wrap;
                unbcolumn.VisibleIndex = mtgv.Columns.Count;
                unbcolumn.UnboundType = UnboundColumnType.Decimal;
                unbcolumn.UnboundExpression = strhj.ToString();
                unbcolumn.OptionsColumn.AllowEdit = false;
                unbcolumn.DisplayFormat.FormatType = FormatType.Numeric;
                unbcolumn.DisplayFormat.FormatString = " {0:#}  ";
                mtgv.EndUpdate();
                GridDM.Tag = "gvend";
                GridDM.UseEmbeddedNavigator = false;
                GridDM.Visible = true;
            }
            catch (Exception ex)
            {
                loaderr = true;
                MsgExShow("初始单象体视图", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Loaddrtext(DataRow dr, string[] tc)
        {
            //加载单据头部信息
            try
            {
                if (dr != null)
                {
                    for (int k = 0; k <= DJTab.TabPages.Count - 1; k++)
                    {
                        LayoutControl lc = DJTab.TabPages[k].Controls[0] as LayoutControl;
                        string[] itag;
                        int coltch;
                        BaseEdit ec;
                        foreach (LayoutControlItem lit in lc.Root.Items)
                        {
                            itag = lit.Tag.ToString().Split(',');
                            if (itag.Length == 5)
                            {
                                coltch = Array.IndexOf(tc, itag[2]);
                                if (coltch >= 0)
                                {
                                    ec = lit.Control as BaseEdit;
                                    ec.EditValue = dr[itag[2]];
                                }
                            }
                        }
                    }
                }
                KcDb.DBclose();
            }
            catch (Exception ex)
            {
                MsgExShow("加载单据头部信息失败", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Mtgv_popupmenushowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
        {
            try
            {
                if (e.Menu == null) return;
                if (e.HitInfo.InColumnPanel)
                {
                    DXMenuItem dxmenu = new DXMenuItem
                    {
                        Caption = "自动配置列宽"
                    };
                    dxmenu.Click += Dxmenuclick;
                    e.Menu.Items.Add(dxmenu);
                }
            }
            catch (Exception ex)
            {
                MsgExShow("增加配置列宽右键菜单", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Refx(object sender, EventArgs e)
        {
            if (BarFx.EditValue.ToString() == "纵向输入")
            {
                fzxsr = true;
            }
            else
            {
                fzxsr = false;
            }
        }
        private void Form_formclosing(object sender, FormClosingEventArgs e)
        {
            if (sfzj > 0)
            {
                MsgOxShow("正在编辑数据,请确定或取消后退出");
                e.Cancel = true;
                return;
            }
            if (!sftj)
            {
                Dttj();
            }
        }
        private void Form_load(object sender, System.EventArgs e)
        {
            try
            {
                if (KcDb.KcCn.State != ConnectionState.Open)
                {
                    KcDb.DBLJ();
                    if (!KcDb.SFlj)
                    {
                        MsgXxShow("帐套数据库未能连接,请在主窗口重试!");
                        this.Close();
                        return;
                    }
                }
                //该功能字段为固定,不能更改,不能限制权限,单据体为需要时载入
                //未完成:打印相关
                SetDg(this, 1450, 680, true);
                RibbonControl.ApplicationCaption = fgnmc;
                RibbonPage1.Text = fgnmc;
                GridDM.Tag = "";
                if (pCdimage.Images.Count > 0)
                {
                    foreach (BarItem item in RibbonControl.Items)
                    {
                        if (item.GetType().Name.ToLower() == "barbuttonitem" || item.GetType().Name.ToLower() == "barcheckitem")
                        {
                            if (pCdimage.Images.Keys.IndexOf(item.Caption) > -1)
                            {
                                item.LargeGlyph = pCdimage.Images[item.Caption];
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                loaderr = true;
                MsgExShow("加载菜单图标", ex.Message, ex.Source, ex.StackTrace);
            }
            try
            {
                RcCZJL.Items.Clear();
                L1.Caption = "[" + fgnmc + "]";
                L2.Caption = "[当前用户:" + pDQYH + "]";
                R1.Caption = "";
                R2.Caption = "[" + pZTMC + "]";
                R3.Caption = "";
                //加载窗口图标
                string gnsql;
                gnsql = "select xzbj from x9_gnyhqx " +
                    "where gnbh='" + fgnbh + "' and xzbj=true and (position(yhjs in '" + pYHJS + "') > 0) and (sfsq = true) ";
                xzbj = (KcDb.DBInteger(gnsql) == 0) ? false : true;
                gnsql = "select xzsh from x9_gnyhqx " +
                    "where gnbh='" + fgnbh + "' and xzsh=true and (position(yhjs in '" + pYHJS + "') > 0) and (sfsq = true) ";
                xzsh = (KcDb.DBInteger(gnsql) == 0) ? false : true;
                if (pYHJS == "系统管理员")
                {
                    xzbj = true;
                    xzsh = true;
                }
                xzdy = true;
                xzck = true;
                xzwj = true;
                xzdc = true;
                Baroid.EditValue = "";
                Barywqj.EditValue = "";
                if (fdjmc.Length < 8)
                {
                    BarEditDJMC.Width = 150;
                }
                else
                {
                    BarEditDJMC.Width = 150 + (fdjmc.Length - 7) * 20;
                }
                Baroid.EditValue = "";
                Lctt.Text = "";
                Lczs.Text = "";
                string xxcx = "";
                xxcx = KcDb.DBString("select x9_jjgzlsj('ft1list','" + pYHJS + "',false)");
                if (xxcx != "")
                {
                    ft1list = xxcx;
                }
                xxcx = KcDb.DBString("select x9_jjgzlsj('ft2list','" + pYHJS + "',false)");
                if (xxcx != "")
                {
                    ft2list = xxcx;
                }
                ft1fd = ft1list.Split(',');
                ft2fd = ft2list.Split(',');
                dtzd1 = new DataTable();
                string sqlzd1;
                sqlzd1 = "select * from x9_sjzd nolock where zdbb='" + ftbb + "' and tname='" + ft1 + "' order by fxh";
                dtzd1 = KcDb.DtRead(sqlzd1);
                //查询分组情况
                DataTable dtfz1 = new DataTable();
                string sqlfz1;
                sqlfz1 = "select distinct fzmc from x9_sjzd nolock where zdbb='" + ftbb + "' and tname='" + ft1 + "' order by fzmc";
                dtfz1 = KcDb.DtRead(sqlfz1);
                DJTab.TabPages.Clear();
                string fzstr = "";
                if (dtfz1.Rows.Count > 0)
                {
                    firstedit = new BaseEdit[dtfz1.Rows.Count];
                }
                for (int k = 0; k < dtfz1.Rows.Count; k++)
                {
                    fzstr = dtfz1.Rows[k]["fzmc"].ToString();
                    DataRow[] fzzdrow = dtzd1.Select("fzmc='" + fzstr + "'");
                    string[] zdlist = ft1list.Split(',');
                    bool fzzdhave = false;
                    for (int l = 0; l < fzzdrow.Length; l++)
                    {
                        if (Array.IndexOf(zdlist, fzzdrow[l]["fname"].ToString()) >= 0)
                        {
                            fzzdhave = true;
                            break;
                        }
                    }
                    if (!fzzdhave)
                    {
                        continue;
                    }
                    XtraTabPage pgfz = DJTab.TabPages.Add();
                    pgfz.Text = fzstr;
                    LayoutControl pglc = new LayoutControl();
                    pglc.Name = fzstr;
                    pglc.BeginUpdate();
                    pgfz.Controls.Add(pglc);
                    pglc.Dock = DockStyle.Fill;
                    pglc.OptionsCustomizationForm.ShowLoadButton = false;
                    pglc.OptionsCustomizationForm.ShowSaveButton = false;
                    pglc.OptionsCustomizationForm.AllowHandleDeleteKey = true;
                    pglc.OptionsCustomizationForm.ShowPropertyGrid = true;
                    pglc.AllowCustomization = false;
                    Control ctl = GridDM as Control;
                    string lft = ft1list;
                    lft = lft.Replace(ft1oid, "");
                    lft = lft.Replace(ft1tz, "");
                    lft = lft.Replace(ft1sh, "");
                    lft = lft.Replace(ft1dj, "");
                    lft = lft.Replace(ft1qj, "");
                    lft = lft.Replace("bmdh", "");
                    lft = lft.Replace("bmmc", "");
                    lft = lft.Replace("jjzl", "");
                    lft = lft.Replace("gymc", "");
                    // dim fmx as new xform(fgnbh, fgnmc, fzstr, ft1, lft, xztp, xzwd, xzwj, dtzd1, djtab, pglc, k, 4, me)
                    int ecol = 4;
                    Fmloedit(ref pglc, ref dtzd1, fgnbh, fgnmc, fzstr, lft, k, ecol, true, xzwj);
                    string[] artag = "buttonedit,fileedit,fileread,buttontextedit,buttontextread".Split(',');
                    foreach (LayoutControlItem litem in pglc.Root.Items)
                    {
                        string[] ltag = litem.Tag.ToString().Split(',');
                        if (ltag.Length == 5)
                        {
                            string ei = ltag[1];
                            if (Array.IndexOf(artag, ei) < 0)
                            {
                                continue;
                            }
                            switch (ei)
                            {
                                case "buttonedit":
                                    ButtonEdit xc = litem.Control as ButtonEdit;
                                    xc.KeyDown += Fmbuttonedit_keydown;
                                    xc.ButtonClick += Fmbuttonedit_buttonclick;
                                    break;
                                case "buttontextedit":
                                case "buttontextread":
                                    ButtonEdit xc1 = litem.Control as ButtonEdit;
                                    xc1.ButtonClick += Text_buttonclick;
                                    break;
                            }
                        }
                    }
                    firstedit[k] = Findfirstedit(ref pglc);
                    BaseEdit lastbe = Findlastedit(pglc.Root);
                    if (lastbe != null)
                    {
                        lastbe.KeyDown += Fmlastedit_keydown;
                    }
                    pglc.EndUpdate();
                }
                SetTab(ref DJTab, TabHeaderLocation.Top, TabOrientation.Horizontal);
            }
            catch (Exception ex)
            {
                loaderr = true;
                MsgExShow("加载窗口,初始单据头控件", ex.Message, ex.Source, ex.StackTrace);
            }
            try
            {
                RcSrfx.Items.Clear();
                RcSrfx.TextEditStyle = TextEditStyles.DisableTextEditor;
                RcSrfx.Items.Add("横向输入");
                RcSrfx.Items.Add("纵向输入");
                if (fzxsr)
                {
                    BarFx.EditValue = "纵向输入";
                }
                else
                {
                    BarFx.EditValue = "横向输入";
                }
                BarFx.EditValueChanged += Refx;
                if (loaderr)
                {
                    MsgXxShow("加载功能时出错,请检查功能设计的正确性");
                    this.Close();
                    return;
                }
                string zdsql;
                zdsql = "select * from x9_sjzd where zdbb='" + ftbb + "' and tname='" + ft2 + "' and fmemo<>'' order by fxh";
                dtzd2 = KcDb.DtRead(zdsql);
            }
            catch (Exception ex)
            {
                MsgExShow("加载窗口,载入数据字典", ex.Message, ex.Source, ex.StackTrace);
            }
            Dtzr();
        }
        private void Savedjm()
        {
            // 保存数据到记录集 
            try
            {
                savem = true;
                //mid,oid,ny,bmdh,rybh,rymc,gxmc,tjsl
                dqoid = Baroid.EditValue.ToString();
                int midc = 0;
                DataTable dt2c = new DataTable();
                DataRow[] mrow;
                DataRow nmrow;
                dt2.DefaultView.RowFilter = ft2oid + "='" + dqoid + "'";
                dt2.DefaultView.RowStateFilter = (DataViewRowState.CurrentRows);
                for (int r = dt2.DefaultView.Count - 1; r >= 0; r--)
                {
                    dt2.DefaultView[r]["sfgx"] = 0;
                }
                for (int r = 0; r < mtgv.RowCount; r++)
                {
                    int dqh;
                    string gxmc;
                    string dqbh = mtgv.GetRowCellValue(r, mtgv.Columns["rybh"]).ToString();
                    string dqxm = mtgv.GetRowCellValue(r, mtgv.Columns["ryxm"]).ToString();
                    double tjsl;
                    for (int c = 2; c < mtgv.Columns.Count - 2; c++)      // 最后一列为合计列
                    {
                        gxmc = mtgv.Columns[c].FieldName;
                        if (!Convert.IsDBNull(mtgv.GetRowCellValue(r, mtgv.Columns[gxmc])))
                        {
                            tjsl = Convert.ToDouble(mtgv.GetRowCellValue(r, mtgv.Columns[gxmc]));
                        }
                        else
                        {
                            tjsl = 0;
                        }
                        if (tjsl == 0 && c != 2)
                        {
                            continue;
                        }
                        mrow = dt2.Select("oid='" + dqoid + "' and rybh='" + dqbh + "' and gxmc='" + gxmc + "'");
                        if (mrow.Length > 0)
                        {
                            dqh = dt2.Rows.IndexOf(mrow[0]);
                            dt2.Rows[dqh]["tjsl"] = tjsl;
                            dt2.Rows[dqh]["sfgx"] = 1;
                        }
                        else
                        {
                            nmrow = dt2.NewRow();
                            nmrow["mid"] = KcDb.DBInteger("select x9_djmid('" + ft2 + "','" + ft2mid + "')");
                            nmrow["oid"] = dqoid;
                            nmrow["ny"] = dqywqj;
                            nmrow["bmdh"] = dqbmdh;
                            nmrow["bmmc"] = dqbmmc;
                            nmrow["gymc"] = dqgymc;
                            nmrow[ft2shbjzd] = 0;
                            nmrow[ft2djbjzd] = 0;
                            nmrow["rybh"] = dqbh;
                            nmrow["ryxm"] = dqxm;
                            nmrow["gxmc"] = gxmc;
                            nmrow["tjsl"] = tjsl;
                            nmrow["sfgx"] = 1;
                            dt2.Rows.Add(nmrow);
                        }
                    }
                }
                for (int r = dt2.DefaultView.Count - 1; r >= 0; r--)
                {
                    if (Convert.ToInt32(dt2.DefaultView[r]["sfgx"]) == 0)
                    {
                        dt2.DefaultView[r].Delete();
                    }
                }
                savem = false;
                KcDb.DBclose();
            }
            catch (Exception ex)
            {
                MsgExShow("保存单记录体数据", ex.Message, ex.Source, ex.StackTrace);
                savem = false;
            }
        }
        private void Savedjo()
        {
            try
            {
                // 数据表值
                saving = true;
                switch (sfzj)
                {
                    case 1:          // 添加
                        Baroid.EditValue = KcDb.DBString("select x9_djoid(1,'" + ft1 + "','" + ft1oid + "','" + oidqz + "')");
                        DataRow tjrow = dt1.NewRow();
                        Fmtexttorow(this, ref DJTab, ref tjrow, false);
                        tjrow[ft1oid] = Baroid.EditValue.ToString();
                        tjrow[ft1qj] = ywqj;
                        tjrow[ft1tz] = pDQYH;
                        tjrow[ft1sh] = "";
                        tjrow[ft1dj] = "";
                        tjrow["bmdh"] = dqbmdh;
                        tjrow["bmmc"] = dqbmmc;
                        tjrow["jjzl"] = dqjjzl;
                        tjrow["gymc"] = dqgymc;
                        dt1.Rows.Add(tjrow);
                        tjrow = null;
                        dqdjh = dt1.Rows.Count - 1;
                        break;
                    case 2:       // 修改
                    case 3:
                        DataRow dr = dt1.Rows[dqdjh];
                        Fmtexttorow(this, ref DJTab, ref dr, false);
                        dt1.Rows[dqdjh].ItemArray = dr.ItemArray;
                        dt1.Rows[dqdjh][ft1qj] = ywqj;
                        dt1.Rows[dqdjh][ft1tz] = pDQYH;
                        dt1.Rows[dqdjh][ft1sh] = "";
                        dt1.Rows[dqdjh][ft1dj] = "";
                        dt1.Rows[dqdjh]["bmdh"] = dqbmdh;
                        dt1.Rows[dqdjh]["bmmc"] = dqbmmc;
                        dt1.Rows[dqdjh]["jjzl"] = dqjjzl;
                        dt1.Rows[dqdjh]["gymc"] = dqgymc;
                        break;
                }
                saving = false;
                KcDb.DBclose();
            }
            catch (Exception ex)
            {
                saving = false;
                MsgExShow("保存单记录头数据", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void SaveFmSet()
        {
            try
            {
                if (!sfzr)
                {
                    return;
                }
                string fmset = "";
                fmset = this.Top.ToString().Trim() + "," + this.Left.ToString().Trim() + "," + this.Width.ToString().Trim() + "," + this.Height.ToString().Trim() + "," +
                  Sp1.SplitterPosition.ToString().Trim() + "," + Convert.ToInt32(this.WindowState).ToString();
                FmSave(fgnmc + dqbmmc, fmset);
                if (mtgv != null)
                {
                    if (mtgv.RowCount > 0)
                    {
                        fmset = mtgv.Columns[0].Width.ToString();
                        for (int g = 1; g <= mtgv.Columns.Count - 1; g++)
                        {
                            int cw = -1;
                            if (mtgv.Columns[g].Visible)
                            {
                                cw = mtgv.Columns[g].Width;
                            }
                            fmset = fmset + "," + cw.ToString();
                        }
                        FmSave(fgnmc + dqbmmc + "单据体", fmset + "," + mtgv.RowHeight.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                MsgExShow("保存窗口参数", ex.Message, ex.Source, ex.StackTrace);
            }
        }
        private void Text_buttonclick(object sender, ButtonPressedEventArgs e)
        {
            if (dqdjh > -1 || sfzj > 0)
            {
                ButtonEdit be = sender as ButtonEdit;
                using (FmTEXT fmrt = new FmTEXT())
                {
                    Text_edit(fmrt, this, ref be, e.Button.Caption);
                }
            }
        }
        private void Textss(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                string czstr = "";
                czstr = XtraInputBox.Show("请输入单据号后四位的数值或其他字符:", pZTMC, "");
                if (czstr == "")
                {
                    return;
                }
                string czoid = "";
                if (IsNumeric(czstr))
                {
                    for (int r = dqdjh + 1; r <= dt1.Rows.Count - 1; r++)
                    {
                        czoid = dt1.Rows[r][ft1oid].ToString();
                        if (Convert.ToInt32(czstr) == Convert.ToInt32(czoid.Substring(czoid.Length - 4, 4)))
                        {
                            dqdjh = r;
                            Djload();
                            return;
                        }
                    }
                    for (int r = 0; r <= dqdjh - 1; r++)
                    {
                        czoid = dt1.Rows[r][ft1oid].ToString();
                        if (Convert.ToInt32(czstr) == Convert.ToInt32(czoid.Substring(czoid.Length - 4, 4)))
                        {
                            dqdjh = r;
                            Djload();
                            return;
                        }
                    }
                }
                if (czstr.Length < dqoid.Length)
                {
                    for (int r = dqdjh + 1; r <= dt1.Rows.Count - 1; r++)
                    {
                        czoid = dt1.Rows[r][ft1oid].ToString();
                        if (czoid.IndexOf(czstr) > 0)
                        {
                            dqdjh = r;
                            Djload();
                            return;
                        }
                    }
                    for (int r = 0; r <= dqdjh - 1; r++)
                    {
                        czoid = dt1.Rows[r][ft1oid].ToString();
                        if (czoid.IndexOf(czstr) > 0)
                        {
                            dqdjh = r;
                            Djload();
                            return;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MsgExShow("单据查找", ex.Message, ex.Source, ex.StackTrace);
            }
        }
    }
}
相关推荐
明月看潮生5 小时前
编程与数学 03-008 《看潮企业管理软件》项目开发 18 汇总查询 2-2
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生19 小时前
编程与数学 03-008 《看潮企业管理软件》项目开发 17 单据查询 4-3
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生4 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 16 业务处理 2-1
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生5 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 15 工序统计 4-1
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生5 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 15 工序统计 4-2
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生6 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 14 单据审批 6-2
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生6 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 14 单据审批 6-5
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生6 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 14 单据审批 6-6
erp·企业开发·项目实践·编程与数学·.net开发·c#编程
明月看潮生6 天前
编程与数学 03-008 《看潮企业管理软件》项目开发 14 单据审批 6-3
erp·企业开发·项目实践·编程与数学·.net开发·c#编程