Browse Source

生成自定义条码,超出数量提醒

章政 6 years ago
parent
commit
861466ce17

+ 1 - 0
UAS-出货标签管理(贸易版)/PublicMethod/BaseUtil.cs

@@ -58,6 +58,7 @@ namespace UAS_LabelMachine
             return pd_id + "-" + pr_id + "-" + serialcode;
         }
 
+
         /// <summary>
         /// 筛选DataTable
         /// </summary>

+ 28 - 17
UAS-出货标签管理(贸易版)/PublicMethod/DataHelper.cs

@@ -11,27 +11,38 @@ namespace UAS_LabelMachine
     public class DataHelper
     {
 
-        ////海创外网地址
-        //private readonly string ConnectionStrings = "Data Source=cmityj.gicp.net/orcl;User ID=HC_TEST;PassWord=select!#%*(";
-        ////海创ERP地址
-        //public static readonly string ERPAddesss = "http://cmityj.gicp.net:8099/ERP/";
-        ////海创FTP
-        //public static readonly string FTPAdress = "ftp://cmityj.gicp.net|HCFTP|Admin1@#";
+        //海创外网地址
+        private readonly string ConnectionStrings = "Data Source=cmityj.gicp.net/orcl;User ID=HC_TEST;PassWord=select!#%*(";
+        //海创ERP地址
+        public static readonly string ERPAddesss = "http://cmityj.gicp.net:8099/ERP/";
+        //海创FTP
+        public static readonly string FTPAdress = "ftp://cmityj.gicp.net|HCFTP|Admin1@#";
+        //Oracle端口
+        public static readonly string OraclePort = "1521";
+        //需要显示的账套
+        public static readonly string Masters = "HC_TEST";
+
+        ////凯而高地址
+        //private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=KRG_TEST;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=112.25.154.186)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+        ////凯而高ERP地址
+        //public static readonly string ERPAddesss = "http://112.25.154.186:8099/ERP/";
+        ////凯而高FTP
+        //public static readonly string FTPAdress = "ftp://112.25.154.186:21|KEGFTP|Admin1@#";
         ////Oracle端口
         //public static readonly string OraclePort = "1521";
         ////需要显示的账套
-        //public static readonly string Masters = "HC_TEST";
+        //public static readonly string Masters = "GOLDEN";
 
-        //凯而高地址
-        private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=KRG_TEST;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=112.25.154.186)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
-        //凯而高ERP地址
-        public static readonly string ERPAddesss = "http://112.25.154.186:8099/ERP/";
-        //凯而高FTP
-        public static readonly string FTPAdress = "ftp://112.25.154.186:21|KEGFTP|Admin1@#";
-        //Oracle端口
-        public static readonly string OraclePort = "1521";
-        //需要显示的账套
-        public static readonly string Masters = "GOLDEN";
+        ////凯而高
+        //private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=KRG_TEST;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.12)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";
+        ////凯而高ERP地址
+        //public static readonly string ERPAddesss = "http://192.168.100.11:8099/ERP/";
+        ////凯而高FTP
+        //public static readonly string FTPAdress = "ftp://192.168.100.11:21|KEGFTP|Admin1@#";
+        ////Oracle端口
+        //public static readonly string OraclePort = "1521";
+        ////需要显示的账套
+        //public static readonly string Masters = "GOLDEN";
 
         ////高登地址
         //private readonly string ConnectionStrings = "Connection Timeout=0;Pooling=false;Password=select!#%*(;User ID=DATACENTER;Pooling=false;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=183.238.39.179)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));";

File diff suppressed because it is too large
+ 176 - 206
UAS-出货标签管理(贸易版)/UAS_出货标签管理.Designer.cs


+ 288 - 92
UAS-出货标签管理(贸易版)/UAS_出货标签管理.cs

@@ -1084,7 +1084,7 @@ namespace UAS_LabelMachine
             if (e.KeyCode == Keys.Enter)
             {
                 sql.Clear();
-                sql.Append("select pi_id,pi_cardcode,to_char(pi_date,'yyyymmdd')pi_date from prodinout where pi_inoutno='" + pi_inoutno.Text + "'");
+                sql.Append("select pi_id,pi_cardcode,pi_class,to_char(pi_date,'yyyymmdd')pi_date from prodinout where pi_inoutno='" + pi_inoutno.Text + "'");
                 dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
                 if (dt.Rows.Count > 0)
                 {
@@ -1092,6 +1092,7 @@ namespace UAS_LabelMachine
                     cu_code.Text = dt.Rows[0]["pi_cardcode"].ToString();
                     InitGetLabel = false;
                     pi_date.Text = dt.Rows[0]["pi_date"].ToString();
+                    pi_class.Text = dt.Rows[0]["pi_class"].ToString();
                     PI_ID = dt.Rows[0]["pi_id"].ToString();
                     if (dh.GetConfig("AutoBarcode", "ProdInOut!Sale").ToString() != "")
                     {
@@ -2110,7 +2111,8 @@ namespace UAS_LabelMachine
         {
             Menu.Show(new Point(MenuSetting.Location.X, MenuSetting.Location.Y + 20));
         }
-
+        //客户的流水号
+        int custserialnum = 0;
         private void Menu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
         {
             Menu.Close();
@@ -2204,101 +2206,295 @@ namespace UAS_LabelMachine
                     result = ImportExcel.ShowDialog();
                     if (result == DialogResult.OK)
                     {
-                        dt = ExcelHandler.ExcelToDataTable(ImportExcel.FileName, true);
-                        DataTable dt1 = (DataTable)dh.ExecuteSql("select pr_orispeccode,pr_id,pd_piclass,pd_piid,pd_id,pr_zxbzs,pr_brand,pd_pdno,pd_id,pd_prodcode,pd_ordercode,pd_orderdetno from prodiodetail left join product on pd_prodcode=pr_code where pd_inoutno='" + pi_inoutno.Text + "'", "select");
-                        for (int i = 0; i < dt.Rows.Count; i++)
+                        thread = new Thread(ImportBarcode);
+                        stw = new SetLoadingWindow(thread, "正在生成条码");
+                        BaseUtil.SetFormCenter(stw);
+                        stw.ShowDialog();
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        //生成客户条码
+        public string BarcodeMethod1(string Prefix, string Suffix, int Index, int Length, int radix)
+        {
+            string str = Prefix;
+            //如果是流水则需要在前面加0
+            string serialcode = BaseUtil.DToAny(custserialnum, radix);
+            for (int j = serialcode.ToString().Length; j < Length; j++)
+            {
+                serialcode = "0" + serialcode;
+            }
+            str += serialcode;
+            str += Suffix;
+            custserialnum = custserialnum + 1;
+            return str;
+        }
+
+        public void ImportBarcode()
+        {
+
+            string Prefix = "";
+
+            string Suffix = "";
+            //客户编号
+            string CustCode = "";
+            //编码规则编号
+            string NrCode = "";
+            DataTable Nr = (DataTable)dh.ExecuteSql("select nrd_detno,nrd_name,nrd_type,nrd_radix,nrd_sql,nrd_length,nr_code,nvl(nrd_iscombine,-1)nrd_iscombine from NoRuleDetail left join norule on nrd_nrid=nr_id where nr_custcode='" + CustCode + "' order by nrd_detno", "select");
+            //如果没有则取公共规则
+            if (Nr.Rows.Count == 0)
+                Nr = (DataTable)dh.ExecuteSql("select nrd_detno,nrd_name,nrd_radix,nrd_type,nrd_sql,nrd_length,nr_code,nvl(nrd_iscombine,-1)nrd_iscombine from NoRuleDetail left join norule on nrd_nrid=nr_id where nr_custcode is null and nr_isdefault <> 0 order by nrd_detno", "select");
+            //用于过滤参数的正则表达式
+            if (Nr.Rows.Count > 0)
+            {
+                NrCode = Nr.Rows[0]["nr_code"].ToString();
+            }
+            Regex match = new Regex("{\\w+}");
+            //用于存放每一项的明细的数据
+            string[] NrData = new string[Nr.Rows.Count];
+            //流水号的索引
+            int SerialNumIndex = 0;
+            //流水长度
+            int SerialNumLength = 0;
+            //存放键值对
+            int Radix = 10;
+            string PrefixFixed = "";
+            for (int m = 0; m < Nr.Rows.Count; m++)
+            {
+                switch (Nr.Rows[m]["nrd_type"].ToString())
+                {
+                    //常量直接进行拼接
+                    case "常量":
+                        NrData[m] = Nr.Rows[m]["nrd_sql"].ToString();
+                        Prefix += NrData[m];
+                        Suffix += NrData[m];
+                        break;
+                    case "SQL":
+                        string SQL = Nr.Rows[m]["nrd_sql"].ToString();
+                        DataTable Temp;
+                        //如果不包含参数替换
+                        if (SQL.IndexOf("{") == 0)
                         {
-                            ArrayList<string> barcode = new ArrayList<string>();
-                            ArrayList<string> datecode = new ArrayList<string>();
-                            ArrayList<string> lotno = new ArrayList<string>();
-                            ArrayList<string> pib_inqty = new ArrayList<string>();
-                            ArrayList<string> piboutboxcode2 = new ArrayList<string>();
-                            string pr_orispeccode = dt.Rows[i]["规格型号"].ToString();
-                            string qty = dt.Rows[i]["数量"].ToString();
-                            string DateCode = "";
-                            string LotNo = "";
-                            if (dt.Columns.Contains("DC/LOT NO"))
-                            {
-                                DateCode = dt.Rows[i]["DC/LOT NO"].ToString().Split('-')[0];
-                                LotNo = dt.Rows[i]["DC/LOT NO"].ToString().Split('-')[1];
-                            }
-                            if (dt.Columns.Contains("DC"))
-                            {
-                                DateCode = dt.Rows[i]["DC"].ToString();
-                            }
-                            if (dt.Columns.Contains("LOT NO"))
-                            {
-                                LotNo = dt.Rows[i]["LOT NO"].ToString();
-                            }
-                            string pib_outboxcode2 = dt.Rows[i]["箱号"].ToString();
-                            DataRow[] dr = dt1.Select("pr_orispeccode='" + pr_orispeccode + "'");
-                            if (dr.Length == 0)
-                            {
-                                LogicHandler.FilterData(cu_code.Text, "FUDAN", pr_orispeccode, qty, DateCode, LotNo, out pr_orispeccode, out qty, out DateCode, out LotNo);
-                                dr = dt1.Select("pr_orispeccode='" + pr_orispeccode + "'");
-                            }
-                            else
+                            Temp = (DataTable)dh.ExecuteSql(SQL, "select");
+                        }
+                        else
+                        {
+                            //替换参数后重新执行SQL
+                            foreach (Match mch in match.Matches(SQL))
                             {
-                                LogicHandler.FilterData(cu_code.Text, dr[0]["pr_brand"].ToString(), pr_orispeccode, qty, DateCode, LotNo, out pr_orispeccode, out qty, out DateCode, out LotNo);
-                            }
-                            if (dr.Length > 0)
-                            {
-                                string pd_orderdetno = dr[0]["pd_orderdetno"].ToString();
-                                string pd_prodcode = dr[0]["pd_prodcode"].ToString();
-                                string pd_ordercode = dr[0]["pd_ordercode"].ToString();
-                                string pd_piid = dr[0]["pd_piid"].ToString();
-                                string pr_brand = dr[0]["pr_brand"].ToString();
-                                string pd_pdno = dr[0]["pd_pdno"].ToString();
-                                string pd_id = dr[0]["pd_id"].ToString();
-                                string pd_piclass = dr[0]["pd_piclass"].ToString();
-                                string pr_id = dr[0]["pr_id"].ToString();
-                                decimal zxbzs = decimal.Parse(dr[0]["pr_zxbzs"].ToString());
-                                decimal outqty = decimal.Parse(Regex.Replace(qty, @"[^\d]*", ""));
-                                decimal barcodenum = 0;
-                                string pib_barcode = dh.getFieldDataByCondition("prodiobarcode", "max(pib_barcode)", "PIB_INOUTNO='" + pi_inoutno.Text + "'").ToString();
-                                if (outqty % zxbzs != 0)
-                                {
-                                    barcodenum = Math.Floor(outqty / zxbzs) + 1;
-                                    //如果有余数先加上所有最小包最后加尾数
-                                    for (int j = 0; j < barcodenum - 1; j++)
-                                    {
-                                        barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
-                                        piboutboxcode2.Add(pib_outboxcode2);
-                                        pib_inqty.Add(zxbzs);
-                                        datecode.Add(DateCode);
-                                        lotno.Add(LotNo);
-                                    }
-                                    barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
-                                    pib_inqty.Add(outqty % zxbzs);
-                                    piboutboxcode2.Add(pib_outboxcode2);
-                                    datecode.Add(DateCode);
-                                    lotno.Add(LotNo);
-                                }
-                                else
-                                {
-                                    barcodenum = outqty / zxbzs;
-                                    for (int j = 0; j < barcodenum; j++)
-                                    {
-                                        barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
-                                        pib_inqty.Add(zxbzs);
-                                        piboutboxcode2.Add(pib_outboxcode2);
-                                        datecode.Add(DateCode);
-                                        lotno.Add(LotNo);
-                                    }
-                                }
-                                sql.Clear();
-                                sql.Append("insert into prodiobarcode (PIB_ID,PIB_PRODCODE,pib_inman,PIB_INDATE,PIB_INOUTNO,PIB_PIID,pib_brand,PIB_BARCODE,PIB_PDNO,");
-                                sql.Append("PIB_PDID,PIB_PICLASS,PIB_QTY,pib_datecode,pib_lotno,PIB_OUTBOXCODE1,PIB_IFPRINT,PIB_IFPICK,PIB_ORDERCODE,pib_orderdetno,pib_outboxcode2)");
-                                sql.Append(" values (prodiobarcode_seq.nextval,'" + pd_prodcode + "','" + User.UserName + "',sysdate,'" + pi_inoutno.Text + "'");
-                                sql.Append("," + pd_piid + ",'" + pr_brand + "',:barcode,'" + pd_pdno + "','" + pd_id + "',");
-                                sql.Append("'" + pd_piclass + "',:pib_inqty,:pib_datecode,:pib_lotno,0,0,'" + pd_ordercode + "','','" + pd_orderdetno + "',:outboxcode)");
-                                dh.BatchInsert(sql.ToString(), new string[] { "barcode", "pib_inqty", "pib_datecode", "pib_lotno", "outboxcode" }, barcode.ToArray(), pib_inqty.ToArray(), datecode.ToArray(), lotno.ToArray(), piboutboxcode2.ToArray());
+                                SQL = SQL.Replace(mch.Value.Trim(), "'" + pi_inoutno.Text + "'");
                             }
+                            Temp = (DataTable)dh.ExecuteSql(SQL, "select");
+                        }
+                        if (Temp.Rows.Count > 0)
+                        {
+                            NrData[m] = Temp.Rows[0][0].ToString();
+                            Prefix += NrData[m];
+                            Suffix += NrData[m];
                         }
+                        else
+                        {
+                            NrData[m] = "";
+                            Prefix += NrData[m];
+                            Suffix += NrData[m];
+                        }
+                        break;
+                    //流水需要通过MaxNumber去取
+                    case "流水":
+                        NrData[m] = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "'").ToString();
+                        Suffix = "";
+                        PrefixFixed = Prefix;
+                        //设置当前流水
+                        custserialnum = int.Parse(NrData[m] == "" ? "0" : NrData[m]);
+                        SerialNumIndex = m;
+                        SerialNumLength = int.Parse(Nr.Rows[m]["nrd_length"].ToString());
+                        Radix = int.Parse(Nr.Rows[m]["nrd_radix"].ToString());
+                        break;
+                    default:
+                        break;
+                }
+            }
+            //获取最大的流水号
+            string maxnum = dh.getFieldDataByCondition("RuleMaxNum", "rmn_maxnumber", "rmn_nrcode='" + NrCode + "' and rmn_prefix='" + Prefix + "'").ToString();
+            if (maxnum == "")
+            {
+                dh.ExecuteSql("insert into RuleMaxNum(rmn_id,rmn_nrcode,rmn_prefix,rmn_maxnumber) values(RuleMaxNum_seq.nextval,'" + NrCode + "','" + Prefix + "','1')", "insert");
+                custserialnum = 1;
+            }//如果流水号不为空则取当前流水
+            else
+            {
+                custserialnum = int.Parse(maxnum);
+            }
+            dt = ExcelHandler.ExcelToDataTable(ImportExcel.FileName, true);
+            sql.Clear();
+            sql.Append("select pr_orispeccode,pd_outqty,pr_id,pd_piclass,pd_piid,pd_id,pr_zxbzs,pr_brand,pd_pdno");
+            sql.Append(",pd_prodcode,pd_ordercode,pd_orderdetno from prodiodetail left join product on pd_prodcode=pr_code  ");
+            sql.Append("where pd_inoutno='" + pi_inoutno.Text + "' group by pr_orispeccode,pd_outqty,");
+            sql.Append("pr_id,pd_piclass,pd_piid,pd_id,pr_zxbzs,pr_brand,pd_pdno,pd_id,pd_prodcode,pd_ordercode,pd_orderdetno");
+            DataTable dt1 = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+            //需要插入的参数
+            ArrayList<string> barcode = new ArrayList<string>();
+            ArrayList<string> custbarcode = new ArrayList<string>();
+            ArrayList<string> datecode = new ArrayList<string>();
+            ArrayList<string> lotno = new ArrayList<string>();
+            ArrayList<string> pib_inqty = new ArrayList<string>();
+            ArrayList<string> piboutboxcode2 = new ArrayList<string>();
+            ArrayList<string> pdordercode = new ArrayList<string>();
+            ArrayList<string> pdorderdetno = new ArrayList<string>();
+            ArrayList<string> pdpdno = new ArrayList<string>();
+            ArrayList<string> pdid = new ArrayList<string>();
+            ArrayList<string> prbrand = new ArrayList<string>();
+            ArrayList<string> pdprodcode = new ArrayList<string>();
+            //用于数量的校验
+            Dictionary<string, decimal> sumqty = new Dictionary<string, decimal>();
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                string pr_orispeccode = dt.Rows[i]["规格型号"].ToString();
+                string qty = dt.Rows[i]["数量"].ToString();
+                string DateCode = "";
+                string LotNo = "";
+                if (dt.Columns.Contains("DC/LOT NO"))
+                {
+                    DateCode = dt.Rows[i]["DC/LOT NO"].ToString().Split('-')[0];
+                    LotNo = dt.Rows[i]["DC/LOT NO"].ToString().Split('-')[1];
+                }
+                if (dt.Columns.Contains("DC"))
+                {
+                    DateCode = dt.Rows[i]["DC"].ToString();
+                }
+                if (dt.Columns.Contains("LOT NO"))
+                {
+                    LotNo = dt.Rows[i]["LOT NO"].ToString();
+                }
+                string pib_outboxcode2 = dt.Rows[i]["箱号"].ToString();
+                DataRow[] dr = dt1.Select("pr_orispeccode='" + pr_orispeccode + "'");
+                if (dr.Length == 0)
+                {
+                    LogicHandler.FilterData(cu_code.Text, "FUDAN", pr_orispeccode, qty, DateCode, LotNo, out pr_orispeccode, out qty, out DateCode, out LotNo);
+                    dr = dt1.Select("pr_orispeccode='" + pr_orispeccode + "'");
+                }
+                else
+                {
+                    LogicHandler.FilterData(cu_code.Text, dr[0]["pr_brand"].ToString(), pr_orispeccode, qty, DateCode, LotNo, out pr_orispeccode, out qty, out DateCode, out LotNo);
+                }
+                if (dr.Length > 0)
+                {
+                    string pd_orderdetno = dr[0]["pd_orderdetno"].ToString();
+                    string pd_prodcode = dr[0]["pd_prodcode"].ToString();
+                    string pd_ordercode = dr[0]["pd_ordercode"].ToString();
+                    string pd_piid = dr[0]["pd_piid"].ToString();
+                    string pr_brand = dr[0]["pr_brand"].ToString();
+                    string pd_pdno = dr[0]["pd_pdno"].ToString();
+                    string pd_id = dr[0]["pd_id"].ToString();
+                    string pd_piclass = dr[0]["pd_piclass"].ToString();
+                    string pr_id = dr[0]["pr_id"].ToString();
+                    //已导入数量
+                    decimal zxbzs = decimal.Parse(dr[0]["pr_zxbzs"].ToString());
+                    decimal outqty = decimal.Parse(Regex.Replace(qty, @"[^\d]*", ""));
+                    decimal barcodenum = 0;
+                    if (!sumqty.ContainsKey(pr_orispeccode))
+                    {
+                        sumqty.Add(pr_orispeccode, 0);
                     }
-                    break;
-                default:
-                    break;
+                    //累计Excel该型号的数量
+                    sumqty[pr_orispeccode] += decimal.Parse(qty);
+                    string pib_barcode = dh.getFieldDataByCondition("prodiobarcode", "max(pib_barcode)", "PIB_INOUTNO='" + pi_inoutno.Text + "'").ToString();
+                    if (outqty % zxbzs != 0)
+                    {
+                        barcodenum = Math.Floor(outqty / zxbzs) + 1;
+                        //如果有余数先加上所有最小包最后加尾数
+                        for (int j = 0; j < barcodenum - 1; j++)
+                        {
+                            barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
+                            custbarcode.Add(BarcodeMethod1(PrefixFixed, Suffix, SerialNumIndex, SerialNumLength, Radix));
+                            piboutboxcode2.Add(pib_outboxcode2);
+                            pib_inqty.Add(zxbzs);
+                            datecode.Add(DateCode);
+                            lotno.Add(LotNo);
+                            pdordercode.Add(pd_ordercode);
+                            pdorderdetno.Add(pd_orderdetno);
+                            pdpdno.Add(pd_pdno);
+                            pdid.Add(pd_id);
+                            prbrand.Add(pr_brand);
+                            pdprodcode.Add(pd_prodcode);
+                        }
+                        custbarcode.Add(BarcodeMethod1(PrefixFixed, Suffix, SerialNumIndex, SerialNumLength, Radix));
+                        barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
+                        pib_inqty.Add(outqty % zxbzs);
+                        piboutboxcode2.Add(pib_outboxcode2);
+                        datecode.Add(DateCode);
+                        lotno.Add(LotNo);
+                        pdordercode.Add(pd_ordercode);
+                        pdorderdetno.Add(pd_orderdetno);
+                        pdpdno.Add(pd_pdno);
+                        pdid.Add(pd_id);
+                        prbrand.Add(pr_brand);
+                        pdprodcode.Add(pd_prodcode);
+                    }
+                    else
+                    {
+                        barcodenum = outqty / zxbzs;
+                        for (int j = 0; j < barcodenum; j++)
+                        {
+                            barcode.Add(BaseUtil.BarcodeMethod1(pd_id, pr_id, pib_barcode));
+                            custbarcode.Add(BarcodeMethod1(PrefixFixed, Suffix, SerialNumIndex, SerialNumLength, Radix));
+                            pib_inqty.Add(zxbzs);
+                            piboutboxcode2.Add(pib_outboxcode2);
+                            datecode.Add(DateCode);
+                            lotno.Add(LotNo);
+                            pdordercode.Add(pd_ordercode);
+                            pdorderdetno.Add(pd_orderdetno);
+                            pdpdno.Add(pd_pdno);
+                            pdid.Add(pd_id);
+                            prbrand.Add(pr_brand);
+                            pdprodcode.Add(pd_prodcode);
+                        }
+                    }
+                }
+            }
+            //插叙所有的统计数量
+            string ErrMsg = "";
+            foreach (var item in sumqty)
+            {
+                dt = (DataTable)dh.ExecuteSql("select nvl(sum(pd_outqty),0)pd_outqty,pr_orispeccode from prodiodetail left join product on pr_code=pd_prodcode where pd_piid=" + PI_ID + "group by pr_orispeccode", "select");
+                dt1 = (DataTable)dh.ExecuteSql("select nvl(sum(pib_qty),0)pib_qty,pr_orispeccode  from prodiobarcode left join product on pib_prodcode=pr_code where pib_piid=" + PI_ID + " group by pr_orispeccode", "select");
+                DataRow[] dr = dt.Select("pr_orispeccode='" + item.Key + "'");
+                DataRow[] dr1 = dt1.Select("pr_orispeccode='" + item.Key + "'");
+                if (dr.Length > 0)
+                {
+                    decimal pd_outqty = decimal.Parse(dr[0]["pd_outqty"].ToString());
+                    decimal pib_qty = 0;
+                    //如果有已导入的数量
+                    if (dr1.Length > 0)
+                    {
+                        pib_qty = decimal.Parse(dr1[0]["pib_qty"].ToString());
+                    }
+                    //本次导入的数量和原有导入数量累加和出库数量做对比
+                    if (pd_outqty < item.Value + pib_qty)
+                    {
+                        ErrMsg += "型号" + dr[0]["pr_orispeccode"].ToString() + "出货数量" + pd_outqty + ",已导入数量" + pib_qty + ",本次导入" + item.Value + ",超出数量" + (item.Value + pib_qty - pd_outqty) + "\n";
+                    }
+                }
+            }
+            if (ErrMsg == "")
+            {
+                sql.Clear();
+                sql.Append("insert into prodiobarcode (PIB_ID,PIB_PRODCODE,pib_inman,PIB_INDATE,PIB_INOUTNO,PIB_PIID,pib_brand,PIB_BARCODE,PIB_PDNO,");
+                sql.Append("PIB_PDID,PIB_PICLASS,PIB_QTY,pib_datecode,pib_lotno,PIB_OUTBOXCODE1,PIB_IFPRINT,PIB_IFPICK,PIB_ORDERCODE,pib_orderdetno,pib_outboxcode2,pib_custbarcode)");
+                sql.Append(" values (prodiobarcode_seq.nextval,:pd_prodcode,'" + User.UserName + "',sysdate,'" + pi_inoutno.Text + "'");
+                sql.Append("," + PI_ID + ",:pr_brand,:barcode,:pd_pdno,:pd_id,");
+                sql.Append("'" + pi_class.Text + "',:pib_inqty,:pib_datecode,:pib_lotno,0,0,:pd_ordercode,'',:pd_orderdetno,:outboxcode,:custbarcode)");
+                dh.BatchInsert(sql.ToString(), new string[] { "pd_prodcode", "pr_brand", "barcode", "pd_pdno", "pd_id", "pib_inqty", "pib_datecode", "pib_lotno", "pd_ordercode", "pd_orderdetno", "outboxcode", "custbarcode" }, pdprodcode.ToArray(), prbrand.ToArray(), barcode.ToArray(), pdpdno.ToArray(), pdid.ToArray(), pib_inqty.ToArray(), datecode.ToArray(), lotno.ToArray(), pdordercode.ToArray(), pdorderdetno.ToArray(), piboutboxcode2.ToArray(), custbarcode.ToArray());
+                //更新流水
+                dh.UpdateByCondition("RuleMaxNum", "rmn_maxnumber='" + custserialnum + "'", "rmn_nrcode='" + NrCode + "' and rmn_prefix='" + Prefix + "'");
+                LoadGridData();
+            }
+            else
+            {
+                MessageBox.Show(ErrMsg);
             }
         }
     }

+ 8 - 3
UAS-出货标签管理(贸易版)/生成条码.cs

@@ -250,7 +250,12 @@ namespace UAS_LabelMachine
                             {
                                 //如果小于最小包装数就是一条尾数
                                 if (mid_remain > pr_zxbzs)
-                                    count = int.Parse(Math.Floor(mid_remain / pr_zxbzs).ToString());
+                                {
+                                    if (mid_remain % pr_zxbzs != 0)
+                                        count = int.Parse(Math.Floor(mid_remain / pr_zxbzs).ToString()) + 1;
+                                    else
+                                        count = int.Parse(Math.Floor(mid_remain / pr_zxbzs).ToString());
+                                }
                                 else
                                     count = 1;
                             }
@@ -501,7 +506,7 @@ namespace UAS_LabelMachine
                         sql.Append("pd_prodcode,pd_piclass,outqty-nvl((select sum(nvl(pib_qty,0)) from PRODIOBARCODE where PIB_PIID=pd_piid and pib_pdno=pd_pdno ),0)pd_qty ");
                         sql.Append("from (select pd_piid,min(pd_id) pd_id,sum(pd_outqty)outqty,pd_ordercode,pd_orderdetno,pd_pdno,max(pd_prodcode)pd_prodcode,max(pd_piclass)pd_piclass ");
                         sql.Append("from prodiodetail  group by pd_piid,pd_ordercode, pd_orderdetno,pd_pdno)T left join product ");
-                        sql.Append("on pr_code=pd_prodcode)  where  pd_piid='" + pi_id + "'");
+                        sql.Append("on pr_code=pd_prodcode)  where  pd_piid='" + pi_id + "' order by pd_pdno");
                         break;
                     case "完工入库单":
                         sql.Clear();
@@ -510,7 +515,7 @@ namespace UAS_LabelMachine
                         sql.Append("pd_prodcode,pd_piclass,inqty-nvl((select sum(nvl(pib_qty,0)) from PRODIOBARCODE where PIB_PIID=pd_piid and pib_pdno=pd_pdno ),0)pd_qty ");
                         sql.Append("from (select pd_piid,min(pd_id) pd_id,sum(pd_inqty)inqty,pd_ordercode,pd_orderdetno,pd_pdno,max(pd_prodcode)pd_prodcode,max(pd_piclass)pd_piclass ");
                         sql.Append("from prodiodetail  group by pd_piid,pd_ordercode, pd_orderdetno,pd_pdno)T left join product ");
-                        sql.Append("on pr_code=pd_prodcode )  where  pd_piid='" + pi_id + "'");
+                        sql.Append("on pr_code=pd_prodcode )  where  pd_piid='" + pi_id + "' order by pd_pdno");
                         break;
                     default:
                         break;

Some files were not shown because too many files changed in this diff