Browse Source

优化打印com资源报错

yhluo 5 months ago
parent
commit
6fe4a87069

+ 63 - 8
UAS_MES_JH/FunctionCode/Make/Make_RePrintLabel.cs

@@ -84,9 +84,10 @@ namespace UAS_MES_NEW.Make
         {
             try
             {
-                engine = new BarTender.Application();
-                lbl = new ApplicationClass();
+                //engine = new BarTender.Application();
+                //lbl = new ApplicationClass();
                 BaseUtil.WriteLbl();
+                COMObjManage.Initialize();
             }
             catch (Exception ex)
             {
@@ -265,7 +266,16 @@ namespace UAS_MES_NEW.Make
                 //doc = lbl.Documents.Open(PrintLabel.Text);
                 if (PrintLabel.Text.ToUpper().Contains(".BTW"))
                 {
-                    if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
+                    /*if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
+                    {
+                        //按照打印张数打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.SinglePrint(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
                     {
                         //按照打印张数打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);
@@ -277,7 +287,16 @@ namespace UAS_MES_NEW.Make
                 }
                 else
                 {
-                    if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
+                    /*if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
+                    {
+                        //按照打印张数打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.CodeSoft(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, giftBox.Checked ? "彩盒标" : "机身标", "-1", out errorMessage))
                     {
                         //按照打印张数打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);
@@ -311,7 +330,16 @@ namespace UAS_MES_NEW.Make
                 //doc = lbl.Documents.Open(PrintLabel.Text);
                 if (PrintLabel.Text.ToUpper().Contains(".BTW"))
                 {
-                    if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
+                    /*if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
+                    {
+                        //判断通过,打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.SinglePrint(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
                     {
                         //判断通过,打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);
@@ -323,7 +351,16 @@ namespace UAS_MES_NEW.Make
                 }
                 else
                 {
-                    if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
+                    /*if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
+                    {
+                        //判断通过,打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.CodeSoft(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "卡通箱标", "-1", out errorMessage))
                     {
                         //判断通过,打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);
@@ -357,7 +394,16 @@ namespace UAS_MES_NEW.Make
                 //doc = lbl.Documents.Open(PrintLabel.Text);
                 if (PrintLabel.Text.ToUpper().Contains(".BTW"))
                 {
-                    if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
+                    /*if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
+                    {
+                        //判断通过,打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.SinglePrint(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
                     {
                         //判断通过,打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);
@@ -369,7 +415,16 @@ namespace UAS_MES_NEW.Make
                 }
                 else
                 {
-                    if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
+                    /*if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
+                    {
+                        //判断通过,打印
+                        OperateResult.AppendText("<<打印成功\n", Color.Green);
+                    }
+                    else
+                    {
+                        OperateResult.AppendText(errorMessage + "\n", Color.Red);
+                    }*/
+                    if (COMObjManage.CodeSoft(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), Printer.Text, inputValue.Text, int.Parse(printNum.Text), ms_makecode.Text, pr_code.Text, "栈板标", "-1", out errorMessage))
                     {
                         //判断通过,打印
                         OperateResult.AppendText("<<打印成功\n", Color.Green);

+ 31 - 14
UAS_MES_JH/FunctionCode/Packing/Packing_PackageCollection.cs

@@ -47,19 +47,20 @@ namespace UAS_MES_NEW.Packing
         {
             try
             {
-                try
-                {
-                    engine = new BarTender.Application();
-                }
-                catch
-                {
+                COMObjManage.Initialize();
+                //try
+                //{
+                //    engine = new BarTender.Application();
+                //}
+                //catch
+                //{
 
-                }
-                try
-                {
-                    lbl = new ApplicationClass();
-                }
-                catch { }
+                //}
+                //try
+                //{
+                //    lbl = new ApplicationClass();
+                //}
+                //catch { }
                 BaseUtil.WriteLbl();
             }
             catch (Exception ex)
@@ -176,7 +177,15 @@ namespace UAS_MES_NEW.Packing
                     //doc = lbl.Documents.Open(PrintLabel.Text);
                     if (PrintLabel.Text.ToUpper().Contains(".BTW"))
                     {
-                        if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
+                        /*if (Print.SinglePrint(Tag.ToString(), engine, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
+                        {
+                            OperateResult.AppendText(">>开始打印箱号" + pa_outboxcode.Text + "\n", Color.Black);
+                        }
+                        else
+                        {
+                            OperateResult.AppendText(ErrorMessage + "\n", Color.Red);
+                        }*/
+                        if (COMObjManage.SinglePrint(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
                         {
                             OperateResult.AppendText(">>开始打印箱号" + pa_outboxcode.Text + "\n", Color.Black);
                         }
@@ -187,7 +196,15 @@ namespace UAS_MES_NEW.Packing
                     }
                     else
                     {
-                        if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
+                        /*if (Print.CodeSoft(Tag.ToString(), ref lbl, PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
+                        {
+                            OperateResult.AppendText(">>开始打印箱号" + pa_outboxcode.Text + "\n", Color.Black);
+                        }
+                        else
+                        {
+                            OperateResult.AppendText(ErrorMessage + "\n", Color.Red);
+                        }*/
+                        if (COMObjManage.CodeSoft(Tag.ToString(), PrintLabel.Text, PrintLabel.SelectedValue.ToString(), PrintList.Text, pa_outboxcode.Text, int.Parse(PrintNum.Text), oMakeCode == "" ? pa_makecode.Text : oMakeCode, pr_code.Text, "卡通箱标", "0", out ErrorMessage))
                         {
                             OperateResult.AppendText(">>开始打印箱号" + pa_outboxcode.Text + "\n", Color.Black);
                         }

+ 365 - 0
UAS_MES_JH/PublicMethod/COMObjManage.cs

@@ -0,0 +1,365 @@
+using LabelManager2;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+using UAS_MES_NEW.DataOperate;
+using UAS_MES_NEW.Entity;
+
+namespace UAS_MES_NEW.PublicMethod
+{
+    internal static class COMObjManage
+    {
+        private static readonly object _lock = new object();
+        private static ApplicationClass _lblApp;
+        private static BarTender.Application _btApp;
+        private static bool _isInitialized = false;
+
+        static DataHelper dh = SystemInf.dh;
+        static Document doc;
+        static FileInfo info;
+        static BarTender.Format doc2;
+
+        public static void Initialize()
+        {
+            lock (_lock)
+            {
+                if (!_isInitialized)
+                {
+                    try
+                    {
+                        _btApp = new BarTender.Application();
+                        _lblApp = new ApplicationClass();
+                        BaseUtil.WriteLbl();
+                        _isInitialized = true;
+                    }
+                    catch (Exception ex)
+                    {
+                        Cleanup();
+                        throw new Exception("初始化COM资源失败: " + ex.Message, ex);
+                    }
+                }
+            }
+        }
+
+        public static BarTender.Application GetBarTenderApplication()
+        {
+            lock (_lock)
+            {
+                if (!_isInitialized)
+                {
+                    Initialize();
+                }
+                if (_btApp == null)
+                {
+                    throw new InvalidOperationException("BarTender应用程序未初始化");
+                }
+
+                return _btApp;
+            }
+        }
+
+        public static ApplicationClass GetLabelManagerApplication()
+        {
+            lock (_lock)
+            {
+                if (!_isInitialized)
+                {
+                    Initialize();
+                }
+                if (_lblApp == null)
+                {
+                    throw new InvalidOperationException("LabelManager应用程序未初始化");
+                }
+
+                return _lblApp;
+            }
+        }
+
+        public static void Cleanup()
+        {
+            lock (_lock)
+            {
+                try
+                {
+                    if (_btApp != null)
+                    {
+                        _btApp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);
+                        Marshal.ReleaseComObject(_btApp);
+                        _btApp = null;
+                    }
+
+                    if (_lblApp != null)
+                    {
+                        _lblApp.Quit();
+                        Marshal.ReleaseComObject(_lblApp);
+                        _lblApp = null;
+                    }
+                }
+                catch (Exception ex)
+                {
+                    System.Diagnostics.Debug.WriteLine("清理COM资源时出错: " + ex.Message);
+                }
+                finally
+                {
+                    _isInitialized = false;
+                }
+            }
+        }
+
+        public static void SafePrint(Action<BarTender.Application, ApplicationClass> printAction)
+        {
+            lock (_lock)
+            {
+                if (!_isInitialized)
+                {
+                    Initialize();
+                }
+                try
+                {
+                    printAction(_btApp, _lblApp);
+                }
+                catch (Exception ex)
+                {
+                    throw new Exception("执行打印操作时出错: " + ex.Message, ex);
+                }
+                finally
+                {
+                    // 根据需求决定是否在每次操作后清理资源, 如果频繁打印,不需要每次清理
+                    // Cleanup();
+                }
+            }
+        }
+
+
+        public static bool CodeSoft(string iCaller, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
+        {
+            ErrorMessage = "";
+            DataTable dt = new DataTable();
+            if (IfRePrint != "-1")
+            {
+                if (LabelType == "卡通箱标" || LabelType == "大箱标" || LabelType == "栈板标")
+                {
+                    dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
+                }
+                else
+                {
+                    dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
+                }
+                if (dh.getFieldDataByCondition("employee", "em_type", "em_code = '" + User.UserCode + "'").ToString() != "admin")
+                {
+                    //如果已经打印过了,则不允许再打印
+                    if (dt.Rows.Count > 0)
+                    {
+                        ErrorMessage = SnCode + LabelType + "已打印";
+                        return false;
+                    }
+                }
+
+            }
+            string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString();
+            FileInfo PrintFile = new FileInfo(LabelName);
+            //打开模板路径
+            //查询模板对应的取值SQL和参数名称
+            dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select");
+            StringBuilder sb = new StringBuilder();
+            if (!PrintFile.Exists)
+            {
+                MessageBox.Show("打印文件不存在");
+                return false;
+            }
+            string filechangetime = PrintFile.LastWriteTime.ToString();
+            if (filechangetime != filelastwritetime)
+            {
+                _lblApp.Quit();
+                _lblApp = new ApplicationClass();
+                BaseUtil.WriteLbl();
+                filechangetime = PrintFile.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
+                string update = "la_lastwritetime = to_date((regexp_substr('" + filechangetime + "','\\d+.+\\d+')),'yyyy-mm-dd hh24:mi:ss')";
+                dh.UpdateByCondition("label", update, "la_id = '" + LaID + "'");
+            }
+            doc = _lblApp.Documents.Open(LabelName, true);
+            if (doc == null)
+            {
+                MessageBox.Show("标签文件打开失败");
+                return false;
+            }
+            for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
+            {
+                doc.Variables.FormVariables.Item(k + 1).Value = null;
+            }
+            //执行全部的SQL
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                string sql = dt.Rows[i]["lp_sql"].ToString();
+                try
+                {
+                    Regex ConnoteA = new Regex("{\\w+}");
+                    foreach (Match mch in ConnoteA.Matches(sql))
+                    {
+                        string x = mch.Value.Trim();
+                        sql = sql.Replace(x, "'" + SnCode + "'");
+                    }
+                    DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+                    if (Param.Rows.Count == 0)
+                        continue;
+                    //查询的结果的参数个数大于1需要给标签的多个参数赋值
+                    if (Param.Rows.Count > 0)
+                    {
+                        int LoopTime = Param.Rows.Count > 100 ? 100 : Param.Rows.Count;
+                        for (int j = 0; j < LoopTime; j++)
+                        {
+                            for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
+                            {
+                                if (j == 0 & doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
+                                {
+                                    doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[0][0].ToString();
+                                }
+                                //使用SN开头的参数赋值SN1,SN2,SN3等参数
+                                if (doc.Variables.FormVariables.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
+                                {
+                                    doc.Variables.FormVariables.Item(k + 1).Value = Param.Rows[j][0].ToString();
+                                }
+                            }
+                        }
+                    }
+                }
+                catch (System.Exception ex)
+                {
+                    MessageBox.Show("SQL维护不正确");
+                }
+            }
+            LogManager.DoLog(sb.ToString());
+            //保存本次赋值进行打印
+            doc.Printer.SwitchTo(PrinterName);
+            doc.PrintDocument(PrintNum);
+            LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
+            for (int k = 0; k < doc.Variables.FormVariables.Count; k++)
+            {
+                doc.Variables.FormVariables.Item(k + 1).Value = null;
+            }
+            LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode);
+            return true;
+        }
+
+        public static bool SinglePrint(string iCaller, string LabelName, string LaID, string PrinterName, string SnCode, int PrintNum, string MakeCode, string ProdCode, string LabelType, string IfRePrint, out string ErrorMessage)
+        {
+            ErrorMessage = "";
+            DataTable dt = new DataTable();
+            if (IfRePrint != "-1")
+            {
+                if (LabelType == "卡通箱标" || LabelType == "彩盒标" || LabelType == "栈板标" || LabelType == "机身标")
+                {
+                    dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
+                }
+                else
+                {
+                    dt = (DataTable)dh.ExecuteSql("select lpl_id from labelprintlog where lpl_value='" + SnCode + "' and lpl_makecode='" + MakeCode + "' and lpl_type='" + LabelType + "' and lpl_stepcode='" + User.CurrentStepCode + "'", "select");
+                }
+                if (dh.getFieldDataByCondition("employee", "em_type", "em_code = '" + User.UserCode + "'").ToString() != "admin")
+                {
+                    ////如果已经打印过了,则不允许再打印
+                    if (dt.Rows.Count > 0)
+                    {
+                        ErrorMessage = SnCode + LabelType + "已打印";
+                        return false;
+                    }
+                }
+            }
+            //  string filelastwritetime = dh.getFieldDataByCondition("label", "la_lastwritetime", "la_id = '" + LaID + "'").ToString();
+            // FileInfo PrintFile = new FileInfo(LabelName);
+            //打开模板路径
+            //查询模板对应的取值SQL和参数名称
+            dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id=lp_laid where la_id='" + LaID + "'", "select");
+            //StringBuilder sb = new StringBuilder();
+            //if (!PrintFile.Exists)
+            //{
+            //    MessageBox.Show("打印文件不存在");
+            //    return false;
+            //}
+            //string filechangetime = PrintFile.LastWriteTime.ToString();
+            //if (filechangetime != filelastwritetime)
+            //{
+            //    lbl.Dispose();
+            //    lbl = new Engine();
+            //  //  BaseUtil.WriteLbl();
+            //    filechangetime = PrintFile.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
+            //    string update = "la_lastwritetime = to_date((regexp_substr('" + filechangetime + "','\\d+.+\\d+')),'yyyy-mm-dd hh24:mi:ss')";
+            //    dh.UpdateByCondition("label", update, "la_id = '" + LaID + "'");
+            //}
+            doc2 = _btApp.Formats.Open(LabelName);
+            if (doc2 == null)
+            {
+                MessageBox.Show("标签文件打开失败");
+                return false;
+            }
+            //执行全部的SQL
+            for (int i = 0; i < dt.Rows.Count; i++)
+            {
+                string sql = dt.Rows[i]["lp_sql"].ToString();
+                try
+                {
+                    Regex ConnoteA = new Regex("{\\w+}");
+                    foreach (Match mch in ConnoteA.Matches(sql))
+                    {
+                        string x = mch.Value.Trim();
+                        sql = sql.Replace(x, "'" + SnCode + "'");
+                    }
+                    DataTable Param = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
+                    if (Param.Rows.Count == 0)
+                        continue;
+                    //查询的结果的参数个数大于1需要给标签的多个参数赋值
+                    if (Param.Rows.Count > 0)
+                    {
+                        int LoopTime = Param.Rows.Count > 200 ? 200 : Param.Rows.Count;
+                        for (int j = 0; j < LoopTime; j++)
+                        {
+                            for (int k = 0; k < doc2.NamedSubStrings.Count; k++)
+                            {
+                                if (j == 0 & doc2.NamedSubStrings.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper())
+                                {
+                                    doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, Param.Rows[0][0].ToString());
+                                }
+                                //使用SN开头的参数赋值SN1,SN2,SN3等参数
+                                //if (j != 0 & doc2.NamedSubStrings.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j))
+                                //{
+                                //    doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, Param.Rows[j][0].ToString());
+                                //}
+                                if (doc2.NamedSubStrings.Item(k + 1).Name.ToUpper() == dt.Rows[i]["lp_name"].ToString().ToUpper() + (j + 1))
+                                {
+                                    doc2.SetNamedSubStringValue(doc2.NamedSubStrings.Item(k + 1).Name, Param.Rows[j][0].ToString());
+                                }
+                            }
+                        }
+                    }
+                }
+                catch (System.Exception ex)
+                {
+                    MessageBox.Show("SQL维护不正确" + ex.Message);
+                }
+            }
+            //  LogManager.DoLog(sb.ToString());
+            //保存本次赋值进行打印
+            // doc2.Printer.SwitchTo(PrinterName);
+
+            // 同样标签的份数 
+            doc2.PrintSetup.IdenticalCopiesOfLabel = PrintNum;
+            // 序列标签数 
+            doc2.PrintSetup.NumberSerializedLabels = 1;
+            doc2.PrintSetup.Printer = PrinterName;
+            doc2.PrintOut(false, false);
+            doc2.Close(BarTender.BtSaveOptions.btDoNotSaveChanges);
+            LogicHandler.DoCommandLog(iCaller, User.UserCode, "", User.UserLineCode, User.UserSourceCode, "打印", "成功打印", SnCode, "");
+            LogicHandler.doLabelPrintLog(SnCode, LabelType, MakeCode, ProdCode, User.UserSourceCode, User.CurrentStepCode, IfRePrint, User.UserCode);
+            //打印完毕 
+            _btApp.Quit(BarTender.BtSaveOptions.btDoNotSaveChanges);
+            return true;
+        }
+
+    }
+}