kyy
2025-09-01 fdc017bffe579b0855743b68c58e3ba7571b8ad1
DevApp/Gs.DevApp/DevFrm/Warehouse/Frm_ArrivalBarcode.cs
@@ -1,3 +1,4 @@
using DevExpress.XtraRichEdit.Model;
using Gs.DevApp.DevFrm.Rpt;
using Gs.DevApp.Entity;
using Gs.DevApp.ToolBox;
@@ -7,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Threading.Tasks;
using System.Windows.Forms;
@@ -25,6 +27,9 @@
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx1);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx2);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx3);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL1);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL2);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL3);
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameter(gridView1, null, null, "", "", (value) =>
            {
                Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 0);
@@ -33,7 +38,10 @@
            });
            Gs.DevApp.ToolBox.UtilityHelper.SetTabParameter(gridView1, xtraTabControl1, pageBar1, (value) =>
            {
                getModel(value);
            }, (value) =>
            {
                getPageList(this.pageBar1.CurrentPage);
@@ -81,33 +89,39 @@
                string rowGuid = lbMxGuid.Text.Trim();
                SelectDeleteBar frm = new SelectDeleteBar(rowGuid, "采购入库");
                string strCodeList = "";
                string strAction = "";
                frm.UpdateParent += (ss, ee) =>
                {
                    strCodeList = ee.StringSingle;
                    strAction = ee.Data;
                };
                frm.ShowDialog();
                if (string.IsNullOrEmpty(strCodeList))
                    return;
                try
                if (strAction == "print")
                {
                    string rptParameter = "rpt_Arrival{"
                    + "100"//重打都是传100,
                    + "," + ""
                    + "," + ""
                    + "," + ""
                    + "," + ""
                    + "," + strCodeList
                    + "}";
                    using (Form rpt = new RptPreview(rowGuid, rptParameter))
                    try
                    {
                        rpt.ShowDialog();
                        string rptParameter = "rpt_Arrival{"
                        + "100"//重打都是传100,
                        + "," + ""
                        + "," + ""
                        + "," + ""
                        + "," + ""
                        + "," + strCodeList
                        + "}";
                        using (Form rpt = new RptPreview(rowGuid, rptParameter))
                        {
                            rpt.ShowDialog();
                        }
                        frm.Close();
                    }
                    frm.Close();
                    catch (Exception ex)
                    {
                        MsgHelper.ShowError(ex.Message);
                    }
                }
                catch (Exception ex)
                {
                    MsgHelper.ShowError(ex.Message);
                }
            };
            // -------------------- gvMx3 打印事件 --------------------
@@ -159,39 +173,177 @@
                string rowGuid = txt_releaseNo.Text.Trim();
                SelectDeleteBar frm = new SelectDeleteBar(rowGuid, "到货条码(合并)码"); // 标题区分来源
                string strCodeList = "";
                string strAction = "";
                frm.UpdateParent += (ss, ee) =>
                {
                    strCodeList = ee.StringSingle;
                    strAction = ee.Data;
                };
                frm.ShowDialog();
                if (string.IsNullOrEmpty(strCodeList))
                    return;
                if (strAction == "print")
                {
                    try
                    {
                        string rptParameter = "rpt_Arrival{"
                        + "100"//重打都是传100,
                        + "," + ""
                        + "," + ""
                        + "," + ""
                        + "," + ""
                        + "," + strCodeList
                        + "}";
                        using (Form rpt = new RptPreview(rowGuid, rptParameter))
                        {
                            rpt.ShowDialog();
                        }
                        frm.Close();
                    }
                    catch (Exception ex)
                    {
                        MsgHelper.ShowError(ex.Message);
                    }
                }
            };
            // --------------------gvMx3 ucBtnPrintOne1 批量打印事件(优化版)--------------------
            this.ucBtnPrintOne1.btnPrintClick += (s, e) =>
            {
                // 1. 基础验证:主表行选择
                string mainGuid = lbGuid.Text.Trim();
                if (string.IsNullOrEmpty(mainGuid) || mainGuid.Length < 10)
                {
                    Gs.DevApp.ToolBox.MsgHelper.ShowError("请先在主表中选择数据行!");
                    this.ucBtnPrintOne1.rptParameter = "return false";
                    return;
                }
                // 2. 获取明细数据源
                DataTable dtDetails = gcMx3.DataSource as DataTable;
                if (dtDetails == null || dtDetails.Rows.Count == 0)
                {
                    Gs.DevApp.ToolBox.MsgHelper.ShowError("当前主表无关联的明细数据,请先加载明细!");
                    this.ucBtnPrintOne1.rptParameter = "return false";
                    return;
                }
                // 3. 筛选可打印明细(逻辑不变)
                List<string> validReleaseNos = new List<string>();
                List<string> validPrintQtys = new List<string>();
                string releaseNoField = "releaseNo";
                if (!dtDetails.Columns.Contains(releaseNoField))
                {
                    Gs.DevApp.ToolBox.MsgHelper.ShowError($"明细数据源缺少必要字段:{releaseNoField}");
                    this.ucBtnPrintOne1.rptParameter = "return false";
                    return;
                }
                foreach (DataRow row in dtDetails.Rows)
                {
                    string rowReleaseNo = row[releaseNoField]?.ToString()?.Trim() ?? "";
                    if (string.IsNullOrEmpty(rowReleaseNo) || rowReleaseNo.Length < 5)
                    {
                        Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过无效明细行:缺少或无效的releaseNo");
                        continue;
                    }
                    string kQtyStr = row["kQty"]?.ToString()?.Trim() ?? "0";
                    if (!Gs.DevApp.ToolBox.UtilityHelper.IsNumeric3(kQtyStr)
                        || !decimal.TryParse(kQtyStr, out decimal kQty)
                        || kQty <= 0)
                    {
                        Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过明细行(releaseNo:{rowReleaseNo}):可打印数量无效或<=0");
                        continue;
                    }
                    if (!validReleaseNos.Contains(rowReleaseNo))
                    {
                        validReleaseNos.Add(rowReleaseNo);
                        validPrintQtys.Add(kQty.ToString("F2"));
                    }
                    else
                    {
                        Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过重复明细行(releaseNo:{rowReleaseNo}):已包含该releaseNo");
                    }
                }
                if (validReleaseNos.Count == 0)
                {
                    Gs.DevApp.ToolBox.MsgHelper.ShowError("没有可批量打印的明细行(所有行均为无效数据或可打印数量<=0)");
                    this.ucBtnPrintOne1.rptParameter = "return false";
                    return;
                }
                // 4. 组装参数(适配_rptGetParameterP解析逻辑)
                string releaseNosStr = string.Join("|", validReleaseNos);
                string printQtysStr = string.Join("|", validPrintQtys);
                // 仅传6个关键参数,对应解析方法的s0-s5
                string[] reportParams = new string[]
                {
        "batch",       // s0 → @in1:批量标识
        "0",           // s1 → @in2:占位
        "0",           // s2 → @in3:余量
        "1",           // s3 → @in4:张数
        printQtysStr,  // s4 → @in5:数量列表
        releaseNosStr  // s5 → @in6:releaseNo列表
                };
                /*string paramContent = string.Join(",", reportParams);
                string rptParam = $"rpt_Arrival_One{{{paramContent}}}";
                this.ucBtnPrintOne1.guidKey = mainGuid;
                this.ucBtnPrintOne1.rptParameter = rptParam;
                // 5. 调用预览(逻辑不变)
                try
                {
                    string rptParameter = "rpt_Arrival_Hb{"
                    + "100"//重打标识
                    + "," + ""
                    + "," + ""
                    + "," + ""
                    + "," + ""
                    + "," + strCodeList
                    + "}";
                    using (Form rpt = new RptPreview(rowGuid, rptParameter))
                    using (Form rptPreviewForm = new RptPreview(mainGuid, rptParam))
                    {
                        rpt.ShowDialog();
                        DialogResult previewResult = rptPreviewForm.ShowDialog();
                        if (previewResult == DialogResult.OK)
                        {
                            getModel(mainGuid);
                            Gs.DevApp.ToolBox.MsgHelper.ShowError($"批量打印完成!共打印 {validReleaseNos.Count} 条有效明细");
                        }
                        else if (previewResult == DialogResult.Cancel)
                        {
                            Gs.DevApp.ToolBox.MsgHelper.ShowError("用户取消批量打印操作");
                        }
                    }
                    frm.Close();
                }
                catch (Exception ex)
                {
                    MsgHelper.ShowError(ex.Message);
                    string errorMsg = $"批量打印异常:{ex.Message}";
                    if (ex.InnerException != null)
                    {
                        errorMsg += $"\n内部错误:{ex.InnerException.Message}";
                    }
                    Gs.DevApp.ToolBox.MsgHelper.ShowError(errorMsg);
                    this.ucBtnPrintOne1.rptParameter = "return false";
                }
*/
                this.ucBtnPrintOne1.guidKey = mainGuid;
                this.ucBtnPrintOne1.rptParameter = "rpt_Arrival_One{"
                    + string.Join(",", reportParams)  // 拼接reportParams数组元素
                    + "}";
                // 6. 清空控件
                txt_iCount_2.Text = "";
                txt_psnQty_2.Text = "";
                txt_releaseNo.Text = "";
            };
            //明细行切换事件
            // 关键:绑定gvMx1和gvMx3的焦点行变化事件
            gvMx1.FocusedRowChanged += GvMx1_FocusedRowChanged;
            gvMx3.FocusedRowChanged += GvMx3_FocusedRowChanged; // 取消注释并绑定事件
            //gvMx3打印自动计算
            //gvMx1打印自动计算
            txt_psnQty_1.TextChanged += (s, e) =>
            {
                Gs.DevApp.ToolBox.UtilityHelper.PrintJiSuan(txt_psnQty_1, txt_iCount_1, txt_kQty.Text.Trim(), radOut, txt_yuliang_1);
@@ -211,6 +363,7 @@
            };
            ////底部汇总启用
            //gvMx1.OptionsView.ShowFooter = true;
            //// 为某一列设置求和汇总
@@ -221,7 +374,44 @@
            UtilityHelper.SetupGridSummary(gvMx1, "quantity", "okRkqty");
            UtilityHelper.SetupGridSummary(gvMxL1, "quantity", "okRkqty");
            // 检查数据加载后再设置颜色
            this.Load += (s, e) => {
                System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
                timer.Interval = 1000; // 1秒后执行,确保数据已加载
                timer.Tick += (sender, args) => {
                    timer.Stop();
                    timer.Dispose();
                    // 使用新的简化格式设置检验结果颜色
                    UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains不合格", "Cell", Color.Red);
                    UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains合格", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains免检", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains不合格", "Cell", Color.Red);
                    UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains合格", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains免检", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains不合格", "Cell", Color.Red);
                    UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains合格", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains免检", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains不合格", "Cell", Color.Red);
                    UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains合格", "Cell", Color.Green);
                    UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains免检", "Cell", Color.Green);
                    //  当收货数量(quantity)大于已入库数量(okRkqty)时,整行显示橙色
                    // UtilityHelper.SetSimpleGridColor(gvMx1, "", "quantity-okRkqty>0", "Row", Color.Orange);
                    //  当可打印数量(kQty)小于等于0时,整行显示灰色
                    //UtilityHelper.SetSimpleGridColor(gvMx1, "", "kQty<=0", "Row", Color.Gray);
                    UtilityHelper.SetSimpleGridColor(gridView1, "barRatio", "=100.00%", "Cell", Color.Green);
                    //入库比例
                    UtilityHelper.SetSimpleGridColor(gridView1, "rkbl", "=100.00%", "Cell", Color.Green);
                };
                timer.Start();
            };
        }
        private void GridView1_ColumnFilterChanged(object sender, EventArgs e)
@@ -396,9 +586,10 @@
        }
        private void getModel(string strGuid)
        {
            gcMx3.DataSource = null;
            gcMx1.DataSource = null;
            gcMx2.DataSource = null;
            gcMx3.DataSource = null;
            bool isEdit = false;
            if (toolBarMenu1.currentAction == "add") return;
            if (toolBarMenu1.currentAction == "edit") isEdit = true;
@@ -415,6 +606,7 @@
            {
                string strJson = UtilityHelper.HttpPost("", _webServiceName + "GetModel", JsonConvert.SerializeObject(_obj));
                ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson);
                if (_rtn.rtnCode > 0)
                {
                    dynamic dy = _rtn.rtnData;
@@ -424,7 +616,27 @@
                    gvList.Add(gvMx2);
                    gvList.Add(gvMx3);
                    UtilityHelper.SetValueByObj(this.layoutMx1.Controls, dy, isEdit, gvList);
                    JArray array3 = new JArray();
                    foreach (var a in dy["list3"])
                    {
                        array3.Add(a);
                    }
                    DataTable dt3 = JsonConvert.DeserializeObject<DataTable>(array3.ToString());
                    if (dt3.Rows.Count > 0)
                    {
                        gcMx3.BindingContext = new BindingContext();
                        gcMx3.DataSource = dt3;
                        gcMx3.ForceInitialize();
                        gvMx3.BestFitColumns();
                        Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx3);
                    }
                    else
                    {
                        Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx3, gvMx3);
                    }
                    JArray array1 = new JArray();
                    foreach (var a in dy["list1"])
                    {
@@ -444,6 +656,7 @@
                    {
                        Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx1, gvMx1);
                    }
                    JArray array2 = new JArray();
                    foreach (var a in dy["list2"])
                    {
@@ -462,25 +675,10 @@
                    {
                        Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx2, gvMx2);
                    }
                    JArray array3 = new JArray();
                    foreach (var a in dy["list3"])
                    {
                        array3.Add(a);
                    }
                    DataTable dt3 = JsonConvert.DeserializeObject<DataTable>(array3.ToString());
                    if (dt3.Rows.Count > 0)
                    {
                        gcMx3.BindingContext = new BindingContext();
                        gcMx3.DataSource = dt3;
                        gcMx3.ForceInitialize();
                        gvMx3.BestFitColumns();
                        Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx3);
                    }
                    else
                    {
                        Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx3, gvMx3);
                    }
                }
                       }
                else
                    ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg);
            }