diff --git a/插件库/Lskj.PubBomImportNew/DllBaseClass.cs b/插件库/Lskj.PubBomImportNew/DllBaseClass.cs
new file mode 100644
index 0000000..5994345
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/DllBaseClass.cs
@@ -0,0 +1,103 @@
+/******************************
+* 说明:PubSpec 模块
+* 创建人:龚宇超
+* 创建日期:2018-01-02
+* 修改人:
+* 修改日期:
+* 修改备注:
+* 版本:1.0.0.0
+******************************/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Lskj.Util;
+using Lskj.Business;
+using System.Windows.Forms;
+using Lskj.Model;
+using DevExpress.XtraGrid.Views.Grid;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using System.Data;
+using Lskj.Business.Impl;
+
+namespace Lskj.PubBomImportNew
+{
+ ///
+ /// PubSpec 模块
+ ///
+ public class DllBaseClass : IForm
+ {
+ public DllBaseClass()
+ {
+
+ }
+ public DllBaseClass(string[] obj)
+ {
+ try
+ {
+ FrmMain main = new FrmMain();
+ this.SubForm = main;
+ main.Model = new DynamicBomImportNew(obj);
+ }
+ catch (Exception ex)
+ {
+ LogUtil.WriteError("Lskj.PubSpecialImport.dll--参数错误-->" + obj.ToString(), ex);
+ }
+ }
+ public Form SubForm { get; set; }
+ }
+ ///
+ /// PubSpecialImport入库参数
+ ///
+ public class DynamicBomImportNew : DynamicModel
+ {
+ ///
+ /// 标题行
+ ///
+ public string FirstRowIndex = "";
+ ///
+ /// 结束标识
+ ///
+ public string EndTableCond = "";
+ ///
+ /// sheet名称
+ ///
+ public string SheetName = "";
+ ///
+ /// 字段对照
+ ///
+ public string MainFieldDic = "";
+ ///
+ /// 读取筛选条件
+ ///
+ public string ReadTableCond = "";
+ ///
+ /// 忽略合并明细列标题行
+ ///
+ public bool CustomerServiceApp = false;
+ ///
+ /// 模块编码
+ ///
+ public string SaveModuleCode = "";
+ public DynamicBomImportNew(string[] args)
+ : base(args)
+ {
+ if (args.Length > 5 && !string.IsNullOrWhiteSpace(args[5]))
+ {
+ FirstRowIndex = args[5] + "";
+ }
+ if (args.Length > 6 && !string.IsNullOrWhiteSpace(args[6]))
+ {
+ EndTableCond = args[6] + "";
+ }
+ if (args.Length > 7 && !string.IsNullOrWhiteSpace(args[7]))
+ {
+ SheetName = args[7] + "";
+ }
+ if (args.Length > 8 && !string.IsNullOrWhiteSpace(args[8]))
+ {
+ MainFieldDic = args[8] + "";
+ }
+ if (args.Length > 9 && !string.IsNullOrWhiteSpace(args[9]))
+ {
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmBillInfo.Designer.cs b/插件库/Lskj.PubBomImportNew/FrmBillInfo.Designer.cs
new file mode 100644
index 0000000..7f528a1
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmBillInfo.Designer.cs
@@ -0,0 +1,721 @@
+
+namespace Lskj.PubBomImport
+{
+ partial class FrmBillInfo
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.pl_main = new DevExpress.XtraEditors.PanelControl();
+ this.pl_main_center = new DevExpress.XtraEditors.PanelControl();
+ this.pl_main_center_detail = new DevExpress.XtraEditors.PanelControl();
+ this.gcMain = new Lskj.Control.GridControlEx();
+ this.pl_main_center_master = new DevExpress.XtraEditors.XtraScrollableControl();
+ this.pl_treeview_detault_search = new DevExpress.XtraEditors.PanelControl();
+ this.panelControl4 = new DevExpress.XtraEditors.PanelControl();
+ this.textEdit1 = new DevExpress.XtraEditors.TextEdit();
+ this.lceCombobox = new Lskj.Control.LabelComboxEdit();
+ this.panelControl3 = new DevExpress.XtraEditors.PanelControl();
+ this.btnTreeSearch = new DevExpress.XtraEditors.SimpleButton();
+ this.pl_main_bottom = new DevExpress.XtraEditors.PanelControl();
+ this.dbpFP = new DevExpress.XtraEditors.DropDownButton();
+ this.btnRefresh = new DevExpress.XtraEditors.SimpleButton();
+ this.btnHiding = new DevExpress.XtraEditors.SimpleButton();
+ this.btnHelp = new DevExpress.XtraEditors.SimpleButton();
+ this.pl_templete = new DevExpress.XtraEditors.PanelControl();
+ this.cb_templete = new DevExpress.XtraEditors.ComboBoxEdit();
+ this.lbl_templete = new DevExpress.XtraEditors.LabelControl();
+ this.pl_input = new DevExpress.XtraEditors.PanelControl();
+ this.cb_input = new DevExpress.XtraEditors.ComboBoxEdit();
+ this.txt_input = new DevExpress.XtraEditors.TextEdit();
+ this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
+ this.btn_input = new DevExpress.XtraEditors.SimpleButton();
+ this.dpbImport = new DevExpress.XtraEditors.DropDownButton();
+ this.btnBillAdd = new DevExpress.XtraEditors.SimpleButton();
+ this.btnBillApply = new DevExpress.XtraEditors.SimpleButton();
+ this.dpCopyBill = new DevExpress.XtraEditors.DropDownButton();
+ this.btnPrint = new DevExpress.XtraEditors.DropDownButton();
+ this.dpbTools = new DevExpress.XtraEditors.DropDownButton();
+ this.btnDelete = new DevExpress.XtraEditors.SimpleButton();
+ this.btnBillSave = new DevExpress.XtraEditors.SimpleButton();
+ this.pl_main_top = new DevExpress.XtraEditors.PanelControl();
+ this.pl_main_top_center = new DevExpress.XtraEditors.PanelControl();
+ this.lbTitle = new System.Windows.Forms.Label();
+ this.pl_main_top_right = new DevExpress.XtraEditors.PanelControl();
+ this.lblOrderNo = new DevExpress.XtraEditors.LabelControl();
+ this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
+ this.pl_main_top_left = new DevExpress.XtraEditors.PanelControl();
+ this.pl_red = new DevExpress.XtraEditors.PanelControl();
+ this.rdRed = new System.Windows.Forms.RadioButton();
+ this.pl_blue = new DevExpress.XtraEditors.PanelControl();
+ this.rdBlue = new System.Windows.Forms.RadioButton();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main)).BeginInit();
+ this.pl_main.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_center)).BeginInit();
+ this.pl_main_center.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_center_detail)).BeginInit();
+ this.pl_main_center_detail.SuspendLayout();
+ this.pl_main_center_master.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_treeview_detault_search)).BeginInit();
+ this.pl_treeview_detault_search.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl4)).BeginInit();
+ this.panelControl4.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl3)).BeginInit();
+ this.panelControl3.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_bottom)).BeginInit();
+ this.pl_main_bottom.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_templete)).BeginInit();
+ this.pl_templete.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cb_templete.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_input)).BeginInit();
+ this.pl_input.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cb_input.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txt_input.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top)).BeginInit();
+ this.pl_main_top.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_center)).BeginInit();
+ this.pl_main_top_center.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_right)).BeginInit();
+ this.pl_main_top_right.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_left)).BeginInit();
+ this.pl_main_top_left.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_red)).BeginInit();
+ this.pl_red.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_blue)).BeginInit();
+ this.pl_blue.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // pl_main
+ //
+ this.pl_main.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main.Appearance.Options.UseBackColor = true;
+ this.pl_main.Controls.Add(this.pl_main_center);
+ this.pl_main.Controls.Add(this.pl_main_bottom);
+ this.pl_main.Controls.Add(this.pl_main_top);
+ this.pl_main.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pl_main.Location = new System.Drawing.Point(0, 0);
+ this.pl_main.Name = "pl_main";
+ this.pl_main.Size = new System.Drawing.Size(666, 518);
+ this.pl_main.TabIndex = 2;
+ //
+ // pl_main_center
+ //
+ this.pl_main_center.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_center.Appearance.Options.UseBackColor = true;
+ this.pl_main_center.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_center.Controls.Add(this.pl_main_center_detail);
+ this.pl_main_center.Controls.Add(this.pl_main_center_master);
+ this.pl_main_center.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pl_main_center.Location = new System.Drawing.Point(2, 40);
+ this.pl_main_center.Name = "pl_main_center";
+ this.pl_main_center.Size = new System.Drawing.Size(662, 439);
+ this.pl_main_center.TabIndex = 2;
+ //
+ // pl_main_center_detail
+ //
+ this.pl_main_center_detail.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_center_detail.Appearance.Options.UseBackColor = true;
+ this.pl_main_center_detail.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_center_detail.Controls.Add(this.gcMain);
+ this.pl_main_center_detail.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pl_main_center_detail.Location = new System.Drawing.Point(0, 164);
+ this.pl_main_center_detail.Name = "pl_main_center_detail";
+ this.pl_main_center_detail.Size = new System.Drawing.Size(662, 275);
+ this.pl_main_center_detail.TabIndex = 5;
+ //
+ // gcMain
+ //
+ this.gcMain.AdapterObj = null;
+ this.gcMain.BackColor = System.Drawing.Color.Transparent;
+ this.gcMain.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gcMain.Location = new System.Drawing.Point(0, 0);
+ this.gcMain.Margin = new System.Windows.Forms.Padding(5);
+ this.gcMain.Name = "gcMain";
+ this.gcMain.SiftEnumObj = Lskj.Control.GridControlEx.HeaderSiftEnum.Sum;
+ this.gcMain.Size = new System.Drawing.Size(662, 275);
+ this.gcMain.TabIndex = 0;
+ //
+ // pl_main_center_master
+ //
+ this.pl_main_center_master.AutoScroll = false;
+ this.pl_main_center_master.Controls.Add(this.pl_treeview_detault_search);
+ this.pl_main_center_master.Dock = System.Windows.Forms.DockStyle.Top;
+ this.pl_main_center_master.Location = new System.Drawing.Point(0, 0);
+ this.pl_main_center_master.Name = "pl_main_center_master";
+ this.pl_main_center_master.Size = new System.Drawing.Size(662, 164);
+ this.pl_main_center_master.TabIndex = 6;
+ //
+ // pl_treeview_detault_search
+ //
+ this.pl_treeview_detault_search.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_treeview_detault_search.Appearance.Options.UseBackColor = true;
+ this.pl_treeview_detault_search.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_treeview_detault_search.Controls.Add(this.panelControl4);
+ this.pl_treeview_detault_search.Controls.Add(this.panelControl3);
+ this.pl_treeview_detault_search.Location = new System.Drawing.Point(39, 104);
+ this.pl_treeview_detault_search.Margin = new System.Windows.Forms.Padding(5, 3, 5, 3);
+ this.pl_treeview_detault_search.Name = "pl_treeview_detault_search";
+ this.pl_treeview_detault_search.Size = new System.Drawing.Size(270, 28);
+ this.pl_treeview_detault_search.TabIndex = 24;
+ this.pl_treeview_detault_search.Visible = false;
+ //
+ // panelControl4
+ //
+ this.panelControl4.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.panelControl4.Controls.Add(this.textEdit1);
+ this.panelControl4.Controls.Add(this.lceCombobox);
+ this.panelControl4.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panelControl4.Location = new System.Drawing.Point(0, 0);
+ this.panelControl4.Name = "panelControl4";
+ this.panelControl4.Padding = new System.Windows.Forms.Padding(2, 4, 2, 0);
+ this.panelControl4.Size = new System.Drawing.Size(206, 28);
+ this.panelControl4.TabIndex = 25;
+ //
+ // textEdit1
+ //
+ this.textEdit1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.textEdit1.Location = new System.Drawing.Point(113, 4);
+ this.textEdit1.Name = "textEdit1";
+ this.textEdit1.Properties.Appearance.Font = new System.Drawing.Font("宋体", 10F);
+ this.textEdit1.Properties.Appearance.Options.UseFont = true;
+ this.textEdit1.Size = new System.Drawing.Size(91, 20);
+ this.textEdit1.TabIndex = 5;
+ //
+ // lceCombobox
+ //
+ this.lceCombobox.BackColor = System.Drawing.SystemColors.Control;
+ this.lceCombobox.Dock = System.Windows.Forms.DockStyle.Left;
+ this.lceCombobox.EditText = "";
+ this.lceCombobox.Font = new System.Drawing.Font("宋体", 9F);
+ this.lceCombobox.FontSize = 0F;
+ this.lceCombobox.LabelText = "查询";
+ this.lceCombobox.Location = new System.Drawing.Point(2, 4);
+ this.lceCombobox.Margin = new System.Windows.Forms.Padding(4);
+ this.lceCombobox.Model = null;
+ this.lceCombobox.Name = "lceCombobox";
+ this.lceCombobox.NullText = "";
+ this.lceCombobox.ReadOnly = false;
+ this.lceCombobox.Required = false;
+ this.lceCombobox.Size = new System.Drawing.Size(111, 24);
+ this.lceCombobox.TabIndex = 4;
+ //
+ // panelControl3
+ //
+ this.panelControl3.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.panelControl3.Controls.Add(this.btnTreeSearch);
+ this.panelControl3.Dock = System.Windows.Forms.DockStyle.Right;
+ this.panelControl3.Location = new System.Drawing.Point(206, 0);
+ this.panelControl3.Name = "panelControl3";
+ this.panelControl3.Padding = new System.Windows.Forms.Padding(3);
+ this.panelControl3.Size = new System.Drawing.Size(64, 28);
+ this.panelControl3.TabIndex = 25;
+ //
+ // btnTreeSearch
+ //
+ this.btnTreeSearch.AllowFocus = false;
+ this.btnTreeSearch.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnTreeSearch.Appearance.Options.UseFont = true;
+ this.btnTreeSearch.Dock = System.Windows.Forms.DockStyle.Right;
+ this.btnTreeSearch.Location = new System.Drawing.Point(1, 3);
+ this.btnTreeSearch.Name = "btnTreeSearch";
+ this.btnTreeSearch.Size = new System.Drawing.Size(60, 22);
+ this.btnTreeSearch.TabIndex = 21;
+ this.btnTreeSearch.Text = "查询";
+ //
+ // pl_main_bottom
+ //
+ this.pl_main_bottom.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_bottom.Appearance.Options.UseBackColor = true;
+ this.pl_main_bottom.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_bottom.Controls.Add(this.dbpFP);
+ this.pl_main_bottom.Controls.Add(this.btnRefresh);
+ this.pl_main_bottom.Controls.Add(this.btnHiding);
+ this.pl_main_bottom.Controls.Add(this.btnHelp);
+ this.pl_main_bottom.Controls.Add(this.pl_templete);
+ this.pl_main_bottom.Controls.Add(this.pl_input);
+ this.pl_main_bottom.Controls.Add(this.dpbImport);
+ this.pl_main_bottom.Controls.Add(this.btnBillAdd);
+ this.pl_main_bottom.Controls.Add(this.btnBillApply);
+ this.pl_main_bottom.Controls.Add(this.dpCopyBill);
+ this.pl_main_bottom.Controls.Add(this.btnPrint);
+ this.pl_main_bottom.Controls.Add(this.dpbTools);
+ this.pl_main_bottom.Controls.Add(this.btnDelete);
+ this.pl_main_bottom.Controls.Add(this.btnBillSave);
+ this.pl_main_bottom.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.pl_main_bottom.Location = new System.Drawing.Point(2, 479);
+ this.pl_main_bottom.Name = "pl_main_bottom";
+ this.pl_main_bottom.Size = new System.Drawing.Size(662, 37);
+ this.pl_main_bottom.TabIndex = 1;
+ //
+ // dbpFP
+ //
+ this.dbpFP.AllowFocus = false;
+ this.dbpFP.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.dbpFP.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.dbpFP.Appearance.Options.UseFont = true;
+ this.dbpFP.Location = new System.Drawing.Point(-199, 7);
+ this.dbpFP.Name = "dbpFP";
+ this.dbpFP.Size = new System.Drawing.Size(58, 26);
+ this.dbpFP.TabIndex = 34;
+ this.dbpFP.Text = "分配";
+ //
+ // btnRefresh
+ //
+ this.btnRefresh.AllowFocus = false;
+ this.btnRefresh.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnRefresh.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnRefresh.Appearance.Options.UseFont = true;
+ this.btnRefresh.Location = new System.Drawing.Point(-135, 7);
+ this.btnRefresh.Name = "btnRefresh";
+ this.btnRefresh.Size = new System.Drawing.Size(74, 26);
+ this.btnRefresh.TabIndex = 33;
+ this.btnRefresh.Text = "刷新列数据";
+ //
+ // btnHiding
+ //
+ this.btnHiding.AllowFocus = false;
+ this.btnHiding.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnHiding.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnHiding.Appearance.Options.UseFont = true;
+ this.btnHiding.Location = new System.Drawing.Point(-59, 7);
+ this.btnHiding.Name = "btnHiding";
+ this.btnHiding.Size = new System.Drawing.Size(67, 26);
+ this.btnHiding.TabIndex = 32;
+ this.btnHiding.Text = "隐藏主表";
+ this.btnHiding.Visible = false;
+ //
+ // btnHelp
+ //
+ this.btnHelp.AllowFocus = false;
+ this.btnHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnHelp.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnHelp.Appearance.Options.UseFont = true;
+ this.btnHelp.Location = new System.Drawing.Point(10, 7);
+ this.btnHelp.Name = "btnHelp";
+ this.btnHelp.Size = new System.Drawing.Size(67, 26);
+ this.btnHelp.TabIndex = 30;
+ this.btnHelp.Text = "帮助文档";
+ //
+ // pl_templete
+ //
+ this.pl_templete.Controls.Add(this.cb_templete);
+ this.pl_templete.Controls.Add(this.lbl_templete);
+ this.pl_templete.Location = new System.Drawing.Point(3, 3);
+ this.pl_templete.LookAndFeel.SkinName = "VS2010";
+ this.pl_templete.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Style3D;
+ this.pl_templete.Name = "pl_templete";
+ this.pl_templete.Size = new System.Drawing.Size(195, 29);
+ this.pl_templete.TabIndex = 29;
+ this.pl_templete.Visible = false;
+ //
+ // cb_templete
+ //
+ this.cb_templete.Location = new System.Drawing.Point(58, 4);
+ this.cb_templete.Name = "cb_templete";
+ this.cb_templete.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+ this.cb_templete.Properties.DropDownRows = 8;
+ this.cb_templete.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+ this.cb_templete.Size = new System.Drawing.Size(133, 20);
+ this.cb_templete.TabIndex = 19;
+ //
+ // lbl_templete
+ //
+ this.lbl_templete.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.lbl_templete.Location = new System.Drawing.Point(5, 8);
+ this.lbl_templete.Name = "lbl_templete";
+ this.lbl_templete.Size = new System.Drawing.Size(48, 12);
+ this.lbl_templete.TabIndex = 16;
+ this.lbl_templete.Text = "选择模版";
+ //
+ // pl_input
+ //
+ this.pl_input.Controls.Add(this.cb_input);
+ this.pl_input.Controls.Add(this.txt_input);
+ this.pl_input.Controls.Add(this.labelControl2);
+ this.pl_input.Controls.Add(this.btn_input);
+ this.pl_input.Location = new System.Drawing.Point(3, 3);
+ this.pl_input.LookAndFeel.SkinName = "VS2010";
+ this.pl_input.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.Style3D;
+ this.pl_input.Name = "pl_input";
+ this.pl_input.Size = new System.Drawing.Size(280, 29);
+ this.pl_input.TabIndex = 27;
+ this.pl_input.Visible = false;
+ //
+ // cb_input
+ //
+ this.cb_input.Location = new System.Drawing.Point(58, 4);
+ this.cb_input.Name = "cb_input";
+ this.cb_input.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
+ new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)});
+ this.cb_input.Properties.DropDownRows = 8;
+ this.cb_input.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
+ this.cb_input.Size = new System.Drawing.Size(79, 20);
+ this.cb_input.TabIndex = 19;
+ //
+ // txt_input
+ //
+ this.txt_input.Location = new System.Drawing.Point(149, 4);
+ this.txt_input.Name = "txt_input";
+ this.txt_input.Properties.Appearance.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.txt_input.Properties.Appearance.Options.UseFont = true;
+ this.txt_input.Size = new System.Drawing.Size(98, 20);
+ this.txt_input.TabIndex = 18;
+ //
+ // labelControl2
+ //
+ this.labelControl2.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.labelControl2.Location = new System.Drawing.Point(5, 8);
+ this.labelControl2.Name = "labelControl2";
+ this.labelControl2.Size = new System.Drawing.Size(48, 12);
+ this.labelControl2.TabIndex = 16;
+ this.labelControl2.Text = "快速录入";
+ //
+ // btn_input
+ //
+ this.btn_input.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btn_input.Appearance.Options.UseFont = true;
+ this.btn_input.Location = new System.Drawing.Point(249, 4);
+ this.btn_input.Name = "btn_input";
+ this.btn_input.Size = new System.Drawing.Size(27, 21);
+ this.btn_input.TabIndex = 13;
+ this.btn_input.Text = ">>";
+ //
+ // dpbImport
+ //
+ this.dpbImport.AllowFocus = false;
+ this.dpbImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.dpbImport.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.dpbImport.Appearance.Options.UseFont = true;
+ this.dpbImport.DropDownArrowStyle = DevExpress.XtraEditors.DropDownArrowStyle.Show;
+ this.dpbImport.Location = new System.Drawing.Point(155, 7);
+ this.dpbImport.Name = "dpbImport";
+ this.dpbImport.Size = new System.Drawing.Size(74, 26);
+ this.dpbImport.TabIndex = 26;
+ this.dpbImport.Text = "导入导出";
+ //
+ // btnBillAdd
+ //
+ this.btnBillAdd.AllowFocus = false;
+ this.btnBillAdd.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnBillAdd.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnBillAdd.Appearance.Options.UseFont = true;
+ this.btnBillAdd.Location = new System.Drawing.Point(307, 7);
+ this.btnBillAdd.Name = "btnBillAdd";
+ this.btnBillAdd.Size = new System.Drawing.Size(67, 26);
+ this.btnBillAdd.TabIndex = 19;
+ this.btnBillAdd.Text = "新建单据";
+ //
+ // btnBillApply
+ //
+ this.btnBillApply.AllowFocus = false;
+ this.btnBillApply.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnBillApply.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnBillApply.Appearance.Options.UseFont = true;
+ this.btnBillApply.Location = new System.Drawing.Point(514, 7);
+ this.btnBillApply.Name = "btnBillApply";
+ this.btnBillApply.Size = new System.Drawing.Size(67, 26);
+ this.btnBillApply.TabIndex = 25;
+ this.btnBillApply.Text = "保存提交";
+ //
+ // dpCopyBill
+ //
+ this.dpCopyBill.AllowFocus = false;
+ this.dpCopyBill.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.dpCopyBill.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.dpCopyBill.Appearance.Options.UseFont = true;
+ this.dpCopyBill.DropDownArrowStyle = DevExpress.XtraEditors.DropDownArrowStyle.Show;
+ this.dpCopyBill.Location = new System.Drawing.Point(231, 7);
+ this.dpCopyBill.Name = "dpCopyBill";
+ this.dpCopyBill.Size = new System.Drawing.Size(74, 26);
+ this.dpCopyBill.TabIndex = 24;
+ this.dpCopyBill.Text = "复制单据";
+ //
+ // btnPrint
+ //
+ this.btnPrint.AllowFocus = false;
+ this.btnPrint.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnPrint.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnPrint.Appearance.Options.UseFont = true;
+ this.btnPrint.DropDownArrowStyle = DevExpress.XtraEditors.DropDownArrowStyle.Show;
+ this.btnPrint.Location = new System.Drawing.Point(583, 7);
+ this.btnPrint.Name = "btnPrint";
+ this.btnPrint.Size = new System.Drawing.Size(74, 26);
+ this.btnPrint.TabIndex = 23;
+ this.btnPrint.Text = "打印单据";
+ //
+ // dpbTools
+ //
+ this.dpbTools.AllowFocus = false;
+ this.dpbTools.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.dpbTools.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.dpbTools.Appearance.Options.UseFont = true;
+ this.dpbTools.DropDownArrowStyle = DevExpress.XtraEditors.DropDownArrowStyle.Show;
+ this.dpbTools.Location = new System.Drawing.Point(79, 7);
+ this.dpbTools.Name = "dpbTools";
+ this.dpbTools.Size = new System.Drawing.Size(74, 26);
+ this.dpbTools.TabIndex = 22;
+ this.dpbTools.Text = "常用工具";
+ //
+ // btnDelete
+ //
+ this.btnDelete.AllowFocus = false;
+ this.btnDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnDelete.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnDelete.Appearance.Options.UseFont = true;
+ this.btnDelete.Location = new System.Drawing.Point(376, 7);
+ this.btnDelete.Name = "btnDelete";
+ this.btnDelete.Size = new System.Drawing.Size(67, 26);
+ this.btnDelete.TabIndex = 20;
+ this.btnDelete.Text = "删除记录";
+ //
+ // btnBillSave
+ //
+ this.btnBillSave.AllowFocus = false;
+ this.btnBillSave.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnBillSave.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.btnBillSave.Appearance.Options.UseFont = true;
+ this.btnBillSave.Location = new System.Drawing.Point(445, 7);
+ this.btnBillSave.Name = "btnBillSave";
+ this.btnBillSave.Size = new System.Drawing.Size(67, 26);
+ this.btnBillSave.TabIndex = 21;
+ this.btnBillSave.Text = "保存单据";
+ //
+ // pl_main_top
+ //
+ this.pl_main_top.Appearance.BackColor = System.Drawing.SystemColors.Control;
+ this.pl_main_top.Appearance.Options.UseBackColor = true;
+ this.pl_main_top.Controls.Add(this.pl_main_top_center);
+ this.pl_main_top.Controls.Add(this.pl_main_top_right);
+ this.pl_main_top.Controls.Add(this.pl_main_top_left);
+ this.pl_main_top.Dock = System.Windows.Forms.DockStyle.Top;
+ this.pl_main_top.Location = new System.Drawing.Point(2, 2);
+ this.pl_main_top.Name = "pl_main_top";
+ this.pl_main_top.Size = new System.Drawing.Size(662, 38);
+ this.pl_main_top.TabIndex = 0;
+ //
+ // pl_main_top_center
+ //
+ this.pl_main_top_center.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_top_center.Appearance.Options.UseBackColor = true;
+ this.pl_main_top_center.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_top_center.Controls.Add(this.lbTitle);
+ this.pl_main_top_center.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.pl_main_top_center.Location = new System.Drawing.Point(162, 2);
+ this.pl_main_top_center.Name = "pl_main_top_center";
+ this.pl_main_top_center.Size = new System.Drawing.Size(315, 34);
+ this.pl_main_top_center.TabIndex = 3;
+ //
+ // lbTitle
+ //
+ this.lbTitle.BackColor = System.Drawing.Color.Transparent;
+ this.lbTitle.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.lbTitle.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.lbTitle.ForeColor = System.Drawing.Color.Blue;
+ this.lbTitle.Location = new System.Drawing.Point(0, 0);
+ this.lbTitle.Name = "lbTitle";
+ this.lbTitle.Size = new System.Drawing.Size(315, 34);
+ this.lbTitle.TabIndex = 1;
+ this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // pl_main_top_right
+ //
+ this.pl_main_top_right.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_top_right.Appearance.Options.UseBackColor = true;
+ this.pl_main_top_right.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_top_right.Controls.Add(this.lblOrderNo);
+ this.pl_main_top_right.Controls.Add(this.labelControl1);
+ this.pl_main_top_right.Dock = System.Windows.Forms.DockStyle.Right;
+ this.pl_main_top_right.Location = new System.Drawing.Point(477, 2);
+ this.pl_main_top_right.Name = "pl_main_top_right";
+ this.pl_main_top_right.Size = new System.Drawing.Size(183, 34);
+ this.pl_main_top_right.TabIndex = 2;
+ //
+ // lblOrderNo
+ //
+ this.lblOrderNo.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.lblOrderNo.Appearance.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline);
+ this.lblOrderNo.Appearance.ForeColor = System.Drawing.Color.Blue;
+ this.lblOrderNo.Location = new System.Drawing.Point(67, 19);
+ this.lblOrderNo.Name = "lblOrderNo";
+ this.lblOrderNo.Size = new System.Drawing.Size(90, 12);
+ this.lblOrderNo.TabIndex = 1;
+ this.lblOrderNo.Text = "XTC170112010001";
+ //
+ // labelControl1
+ //
+ this.labelControl1.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.labelControl1.Appearance.Font = new System.Drawing.Font("宋体", 9F);
+ this.labelControl1.Appearance.ForeColor = System.Drawing.Color.Blue;
+ this.labelControl1.Location = new System.Drawing.Point(7, 19);
+ this.labelControl1.Name = "labelControl1";
+ this.labelControl1.Size = new System.Drawing.Size(54, 12);
+ this.labelControl1.TabIndex = 0;
+ this.labelControl1.Text = "单据编号:";
+ //
+ // pl_main_top_left
+ //
+ this.pl_main_top_left.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_main_top_left.Appearance.Options.UseBackColor = true;
+ this.pl_main_top_left.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_main_top_left.Controls.Add(this.pl_red);
+ this.pl_main_top_left.Controls.Add(this.pl_blue);
+ this.pl_main_top_left.Dock = System.Windows.Forms.DockStyle.Left;
+ this.pl_main_top_left.Location = new System.Drawing.Point(2, 2);
+ this.pl_main_top_left.Name = "pl_main_top_left";
+ this.pl_main_top_left.Size = new System.Drawing.Size(160, 34);
+ this.pl_main_top_left.TabIndex = 1;
+ //
+ // pl_red
+ //
+ this.pl_red.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_red.Appearance.Options.UseBackColor = true;
+ this.pl_red.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_red.Controls.Add(this.rdRed);
+ this.pl_red.Dock = System.Windows.Forms.DockStyle.Left;
+ this.pl_red.Location = new System.Drawing.Point(80, 0);
+ this.pl_red.Name = "pl_red";
+ this.pl_red.Size = new System.Drawing.Size(80, 34);
+ this.pl_red.TabIndex = 3;
+ //
+ // rdRed
+ //
+ this.rdRed.AutoSize = true;
+ this.rdRed.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.rdRed.ForeColor = System.Drawing.Color.Red;
+ this.rdRed.Location = new System.Drawing.Point(6, 12);
+ this.rdRed.Name = "rdRed";
+ this.rdRed.Size = new System.Drawing.Size(71, 16);
+ this.rdRed.TabIndex = 3;
+ this.rdRed.Text = "红字单据";
+ this.rdRed.UseVisualStyleBackColor = true;
+ //
+ // pl_blue
+ //
+ this.pl_blue.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_blue.Appearance.Options.UseBackColor = true;
+ this.pl_blue.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_blue.Controls.Add(this.rdBlue);
+ this.pl_blue.Dock = System.Windows.Forms.DockStyle.Left;
+ this.pl_blue.Location = new System.Drawing.Point(0, 0);
+ this.pl_blue.Name = "pl_blue";
+ this.pl_blue.Size = new System.Drawing.Size(80, 34);
+ this.pl_blue.TabIndex = 2;
+ //
+ // rdBlue
+ //
+ this.rdBlue.AutoSize = true;
+ this.rdBlue.Checked = true;
+ this.rdBlue.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.rdBlue.ForeColor = System.Drawing.Color.Blue;
+ this.rdBlue.Location = new System.Drawing.Point(7, 12);
+ this.rdBlue.Name = "rdBlue";
+ this.rdBlue.Size = new System.Drawing.Size(71, 16);
+ this.rdBlue.TabIndex = 2;
+ this.rdBlue.TabStop = true;
+ this.rdBlue.Text = "蓝字单据";
+ this.rdBlue.UseVisualStyleBackColor = true;
+ //
+ // FrmBillInfo
+ //
+ this.Controls.Add(this.pl_main);
+ this.Name = "FrmBillInfo";
+ this.Size = new System.Drawing.Size(666, 518);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main)).EndInit();
+ this.pl_main.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_center)).EndInit();
+ this.pl_main_center.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_center_detail)).EndInit();
+ this.pl_main_center_detail.ResumeLayout(false);
+ this.pl_main_center_master.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_treeview_detault_search)).EndInit();
+ this.pl_treeview_detault_search.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl4)).EndInit();
+ this.panelControl4.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.textEdit1.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.panelControl3)).EndInit();
+ this.panelControl3.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_bottom)).EndInit();
+ this.pl_main_bottom.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_templete)).EndInit();
+ this.pl_templete.ResumeLayout(false);
+ this.pl_templete.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cb_templete.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_input)).EndInit();
+ this.pl_input.ResumeLayout(false);
+ this.pl_input.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.cb_input.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.txt_input.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top)).EndInit();
+ this.pl_main_top.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_center)).EndInit();
+ this.pl_main_top_center.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_right)).EndInit();
+ this.pl_main_top_right.ResumeLayout(false);
+ this.pl_main_top_right.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_main_top_left)).EndInit();
+ this.pl_main_top_left.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_red)).EndInit();
+ this.pl_red.ResumeLayout(false);
+ this.pl_red.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_blue)).EndInit();
+ this.pl_blue.ResumeLayout(false);
+ this.pl_blue.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private DevExpress.XtraEditors.PanelControl pl_main;
+ private DevExpress.XtraEditors.PanelControl pl_main_center;
+ private DevExpress.XtraEditors.PanelControl pl_main_center_detail;
+ private Control.GridControlEx gcMain;
+ private DevExpress.XtraEditors.XtraScrollableControl pl_main_center_master;
+ private DevExpress.XtraEditors.PanelControl pl_treeview_detault_search;
+ private DevExpress.XtraEditors.PanelControl panelControl4;
+ private DevExpress.XtraEditors.TextEdit textEdit1;
+ private Control.LabelComboxEdit lceCombobox;
+ private DevExpress.XtraEditors.PanelControl panelControl3;
+ private DevExpress.XtraEditors.SimpleButton btnTreeSearch;
+ public DevExpress.XtraEditors.PanelControl pl_main_bottom;
+ private DevExpress.XtraEditors.DropDownButton dbpFP;
+ private DevExpress.XtraEditors.SimpleButton btnRefresh;
+ private DevExpress.XtraEditors.SimpleButton btnHiding;
+ private DevExpress.XtraEditors.SimpleButton btnHelp;
+ private DevExpress.XtraEditors.PanelControl pl_templete;
+ private DevExpress.XtraEditors.ComboBoxEdit cb_templete;
+ private DevExpress.XtraEditors.LabelControl lbl_templete;
+ private DevExpress.XtraEditors.PanelControl pl_input;
+ private DevExpress.XtraEditors.ComboBoxEdit cb_input;
+ private DevExpress.XtraEditors.TextEdit txt_input;
+ private DevExpress.XtraEditors.LabelControl labelControl2;
+ private DevExpress.XtraEditors.SimpleButton btn_input;
+ private DevExpress.XtraEditors.DropDownButton dpbImport;
+ private DevExpress.XtraEditors.SimpleButton btnBillAdd;
+ private DevExpress.XtraEditors.SimpleButton btnBillApply;
+ private D
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmBillInfo.cs b/插件库/Lskj.PubBomImportNew/FrmBillInfo.cs
new file mode 100644
index 0000000..af22741
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmBillInfo.cs
@@ -0,0 +1,609 @@
+using DevExpress.XtraGrid.Columns;
+using DevExpress.XtraGrid.Views.Grid;
+using DevExpress.XtraTreeList.Columns;
+using Lskj.Business;
+using Lskj.Business.Impl;
+using Lskj.Control;
+using Lskj.Control.Model;
+using Lskj.Core;
+using Lskj.Data;
+using Lskj.Model;
+using Lskj.Util;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+
+namespace Lskj.PubBomImport
+{
+ public partial class FrmBillInfo : UserControl
+ {
+ public DynamicBomImport Model;
+ public DynamicBillModel SysModel;
+ public BillModel billModel;
+ public MyControl ControlObj;
+ public event EventHandler OnControlSourceBind;
+ ///
+ /// 单据明细列
+ ///
+ private DataTable _detailColumns;
+ private string guidField = "xxxxx_guid";
+ ///
+ /// 保存或修改时报错信息
+ ///
+ public string SaveErrorMessage = string.Empty;
+ public GridView GcMainView
+ {
+ get { return gcMain.GridView; }
+ }
+ public FrmBillInfo()
+ {
+ InitializeComponent();
+ }
+ public void OnLoad(DynamicBomImport mainModel)
+ {
+ Model = mainModel;
+ GetControlData(mainModel);
+ InitControlView();
+ SetControlData();
+ }
+ public void GetControlData(DynamicBomImport Model)
+ {
+ string[] args = new[] { Model.FormText, Model.UserId, Model.UserName, Model.Privilege, Model.ModuleCode, "", Model.ModuleCode };
+ SysModel = new DynamicBillModel(args);
+ SysModel.BillMasterSql = Model.BillMasterSql;
+ SysModel.BillDetailSql = "";
+ DataRow modelRow = BillImpl.GetBillInfo(SysModel.ModuleCode);//获取单个模块信息
+ billModel = new BillModel(modelRow);//初始化类的新实例。
+ if (billModel != null)
+ {
+ billModel.TypeName = string.IsNullOrEmpty(SysModel.BillMasterSql) ? SysModel.FormText : billModel.TypeName;// 模块名称
+ string masterPreFix = BaseImpl.GetColumnPrefix(billModel.MasterTable);// 主表列前缀
+ billModel.MasterPreFix = masterPreFix;
+ string detailPreFix = BaseImpl.GetColumnPrefix(billModel.DetailTable);// 明细表列前缀
+ billModel.DetailPreFix = detailPreFix;
+ billModel.DetailOrderField = billModel.DetailPreFix + "lsidx_id";// 单据来源id
+ if (SystemInfo.Instance.IsNotBillDetailOrder)//禁用排序
+ {
+ billModel.DetailOrderField = string.Empty;
+ }
+ }
+ DataRow menuRow = BaseImpl.GetMenuConfigTab(SysModel.ModuleId);//获取菜单其他配置
+ if (menuRow != null)
+ {
+ billModel.BillSourceIds = menuRow.Table.Columns.Contains("BillSourceIds") ? (menuRow["BillSourceIds"] + "").Trim(',') : string.Empty;
+ billModel.BillFlag = menuRow.Table.Columns.Contains("BillFlag") && !string.IsNullOrEmpty(menuRow["BillFlag"] + "") ? Convert.ToInt32(menuRow["BillFlag"] + "") : -1;
+ }
+ DataTable controls = BaseModuleImpl.GetControlLocation(billModel.FormKey, SysModel.ModuleCode);
+ DataTable groups = BaseModuleImpl.GetAddGroupData(billModel.FormKey);//获取主信息分组数据
+ ControlObj = new MyControl() { Model = SysModel };//主表控件
+ ControlObj.OtherParams = SysModel.OtherParams();
+ ControlObj.OnDataSourceBindCallBack += (s, e) =>
+ {
+ if (OnControlSourceBind != null)
+ {
+ OnControlSourceBind(null, null);
+ }
+ };
+ ControlObj.InitControl(controls, this.pl_main_center_master, groups);
+ if (SysModel.GridEnumObj == GridEnum.BandedGridView || billModel.AutoMultiHeader == 1)
+ {
+ this.pl_main_center_detail.Controls.Clear();
+ this.gcMain = new BandedGridControlEx();
+ this.gcMain.Model = SysModel;
+ this.gcMain.Dock = DockStyle.Fill;
+ this.pl_main_center_detail.Controls.Add(this.gcMain);
+ }
+ _detailColumns = BillImpl.GetDetailColumns(SysModel.ModuleCode);//初始化单据明细列
+ if (SysModel.GridEnumObj == GridEnum.BandedGridView || billModel.AutoMultiHeader == 1)
+ {
+ //多表头sql要增加一个判断,否则多表头会出错
+ _detailColumns = BillImpl.GetDetailColumns(SysModel.ModuleCode, true);//初始化单据明细列
+ }
+ this.gcMain.DisableFieldSources = billModel.DisableFieldSources;
+ this.gcMain.Model = SysModel;
+ this.gcMain.ParentControl = ControlObj;//把主表控件赋给 单据主表控件、基础档案查询条件控件等等
+ this.gcMain.SetEditColumns(_detailColumns, GridCustomColumnStruct.BillDetailGridView + billModel.FormKey);//设置可编辑列
+ }
+ public void InitControlView()
+ {
+
+ }
+ public void SetControlData()
+ {
+
+ }
+ public void InitializeHeader(DataRow parentRow, string controlSql)
+ {
+ // 新增
+ if (!string.IsNullOrEmpty(controlSql))
+ {
+ string billMasterSql = controlSql;
+ billMasterSql = ReplaceHelper.ReplaceRowParam(parentRow, billMasterSql);
+ // 处理单据表头数据
+ DataRow row = BillImpl.GetDataRowResult(billMasterSql);
+ if (row != null)
+ {
+ ControlObj.SetAllControlValue(row, true);
+ }
+ }
+ }
+ public void InitializeHeader(DataRow rowItem)
+ {
+ // 新增
+ if (rowItem != null)
+ {
+ ControlObj.SetAllControlValue(rowItem, true);
+ }
+ }
+ public bool BillSave(ref string billNo, int comfirm = 0, bool canTipMsg = true)
+ {
+ bool saveResult = false;
+ if (ControlObj.VerifyNull())
+ {
+ // 保存之前先进行表格更新
+ if (billModel.DetailTreeTable)
+ {
+ (this.gcMain as TreeGridControlEx).TreeListObj.PostEditor();
+ }
+ else
+ {
+ this.gcMain.GridView.PostEditor();
+ this.gcMain.GridView.UpdateCurrentRow();
+ }
+ try
+ {
+ if (this.gcMain.VerifyNull())
+ {
+ if (this.gcMain.RepeatedVerificationNames.Count > 0 && this.gcMain.VerifyDuplicateColumns())
+ {
+ //MessageUtil.Show("表格中数据内容重复,保存失败!");
+ return saveResult;
+ }
+ billNo = this.lblOrderNo.Text.Trim();
+ string detailGuid = Guid.NewGuid().ToString();
+ string masterSql = billModel.SaveState ? GetUpdateRecord(billNo) : GetAddRecord(ref billNo);
+ string detailSql = GetDetailRecord(detailGuid, billNo).ToString();
+ // 检查单据头数据合法性
+ if (string.IsNullOrEmpty(masterSql)) return false;
+ // 验证明细合法性
+ if (string.IsNullOrEmpty(detailSql) && !billModel.SaveNullDetail)
+ {
+ MessageUtil.Show(ResourceKeys.BillDetailIsNotNull);
+ return false;
+ }
+ string tipMsg = string.Empty;
+ int result = BillImpl.BillSave(masterSql, detailSql, billModel.DetailTable, ref billNo, detailGuid, billModel.BillSeq, billModel.SaveState ? 2 : 1, comfirm, out tipMsg, 0, billModel.NewVer);
+ if (result == 1)
+ {
+ saveResult = true;
+ }
+ else
+ {
+ throw new Exception($"保存Bom失败\r\n{tipMsg}");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"保存Bom失败\r\n{ex.Message}");
+ }
+ }
+ return saveResult;
+ }
+ public bool BillSaveSql(string guid, int comfirm = 0, bool canTipMsg = true)
+ {
+ bool saveResult = false;
+ if (ControlObj.VerifyNull())
+ {
+ // 保存之前先进行表格更新
+ if (billModel.DetailTreeTable)
+ {
+ (this.gcMain as TreeGridControlEx).TreeListObj.PostEditor();
+ }
+ else
+ {
+ this.gcMain.GridView.PostEditor();
+ this.gcMain.GridView.UpdateCurrentRow();
+ }
+ try
+ {
+ if (this.gcMain.VerifyNull())
+ {
+ if (this.gcMain.RepeatedVerificationNames.Count > 0 && this.gcMain.VerifyDuplicateColumns())
+ {
+ //MessageUtil.Show("表格中数据内容重复,保存失败!");
+ return saveResult;
+ }
+ string billNo = billModel.SaveState ? this.lblOrderNo.Text.Trim() : Guid.NewGuid() + "";
+ string detailGuid = Guid.NewGuid().ToString();
+ string masterSql = billModel.SaveState ? GetUpdateRecord(billNo) : GetAddRecord(ref billNo);
+ string detailSql = GetDetailRecord(detailGuid, billNo).ToString();
+ // 检查单据头数据合法性
+ if (string.IsNullOrEmpty(masterSql)) return false;
+ // 验证明细合法性
+ if (string.IsNullOrEmpty(detailSql) && !billModel.SaveNullDetail)
+ {
+ MessageUtil.Show(ResourceKeys.BillDetailIsNotNull);
+ return false;
+ }
+ string tipMsg = string.Empty;
+
+ //param[0].Value = masterSql;
+ //param[1].Value = billNo;
+ //param[2].Value = detailGuid;
+ //param[3].Value = ERPInfo.Instance.UserId;
+ //param[4].Value = billWay;// --1新增,2为修改,3为删除
+ //param[5].Value = billSeq;
+ //param[6].Value = "";
+ //param[7].Value = auditFlag;
+ //param[8].Value = comfirm;
+ SqlHelper.ExecuteNonQuery($"delete p_bomImportExecTab where guid = '{guid}'");
+ SqlHelper.ExecuteNonQuery($"insert into p_bomImportExecTab (guid,detailTable,masterSql,detailSql,billNo,detailGuid,UserId,billWay,billSeq,auditFlag,comfirm,newVer) " +
+ $"values ('{guid}','{billModel.DetailTable}','{masterSql.Replace("'", "''")}','{detailSql.Replace("'", "''")}','{billNo}','{detailGuid.Replace("'", "''")}','{ERPInfo.Instance.UserId}','{(billModel.SaveState ? 2 : 1)}','{billModel.BillSeq}','0','{comfirm}','{billModel.NewVer}')");
+ //int result = BillImpl.BillSave(masterSql, detailSql, billModel.DetailTable, ref billNo, detailGuid, billModel.BillSeq, billModel.SaveState ? 2 : 1, comfirm, out tipMsg, 0, billModel.NewVer);
+ //if (result == 1)
+ //{
+ // saveResult = true;
+ //}
+ //else
+ //{
+ // throw new Exception($"保存Bom失败\r\n{tipMsg}");
+ //}
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new Exception($"保存Bom失败\r\n{ex.Message}");
+ }
+ }
+ return saveResult;
+ }
+ private string GetUpdateRecord(string parmaryValue)
+ {
+ StringBuilder updateBuilder = new StringBuilder();
+ DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", billModel.MasterTable));
+ string errorMessage = string.Empty;//数据不符合数据库规范的信息
+ // 修改单据
+ foreach (ControlModel model in this.ControlObj.ControlModels)
+ {
+ if (!model.IsSave ||
+ model.FieldName.Equals(billModel.RtagidKey, StringComparison.OrdinalIgnoreCase) ||
+ model.FieldType == ControlType.LabPic ||
+ model.FieldType == ControlType.LabPicEx)
+ continue;
+ BaseUserControl userControl = this.ControlObj.FindControl(model);
+ if (userControl != null)
+ {
+ string fieldValue = this.ControlObj.GetControlValue(model);
+ if (SystemInfo.Instance.TrimWhiteSpace)
+ fieldValue = fieldValue.Trim();
+ if (fieldValue == "****") continue;
+
+ errorMessage = errorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(DetailedProperties, model, fieldValue);
+ if (string.IsNullOrEmpty(fieldValue) && model.Isintordecimal) fieldValue = "0";//数值保存时为空的话默认保存为0;
+
+ updateBuilder.Append(string.IsNullOrEmpty(fieldValue) ? string.Format("{0}={1}", model.FieldName, this.ControlObj.GetNullValue(model)) : string.Format("{0}=N'{1}',", model.FieldName, fieldValue.Contains("'") ? fieldValue.Replace("'", "''") : fieldValue));
+
+ }
+ }
+ if (!string.IsNullOrWhiteSpace(errorMessage)) SaveErrorMessage = "表头错误:" + errorMessage;
+ return string.Format("update {0} set {1} where {2}='{3}'", billModel.MasterTable, updateBuilder.ToString().TrimEnd(','), billModel.PrimaryKey, parmaryValue);
+ }
+ private string GetAddRecord(ref string parmaryValue)
+ {
+ if (billModel.NewVer == 0)
+ {
+ // 检查当前的单据号是否已被占用.
+ string newBillNo = BillImpl.GetBillNo(billModel.BillSeq);
+ if (!parmaryValue.Equals(newBillNo))
+ {
+ if (MessageUtil.Show(ResourceKeys.BillRecordRepeat, MessageBoxButtons.YesNo) == DialogResult.No)
+ {
+ return string.Empty;
+ }
+ else
+ {
+ this.lblOrderNo.Text = newBillNo;
+ parmaryValue = newBillNo;
+ }
+ }
+ }
+ StringBuilder fieldBuilder = new StringBuilder();
+ StringBuilder valueBuilder = new StringBuilder();
+ DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", billModel.MasterTable));
+ string errorMessage = string.Empty;//数据不符合数据库规范的信息
+ foreach (ControlModel model in this.ControlObj.ControlModels)
+ {
+ if (!model.IsSave ||
+ model.FieldName.Equals(billModel.PrimaryKey, StringComparison.OrdinalIgnoreCase) ||
+ model.FieldName.Equals(billModel.RtagidKey, StringComparison.OrdinalIgnoreCase) ||
+ model.FieldType == ControlType.LabPic ||
+ model.FieldType == ControlType.LabPicEx)
+ continue;
+
+ string fieldValue = this.ControlObj.GetControlValue(model);
+ if (SystemInfo.Instance.TrimWhiteSpace)
+ fieldValue = fieldValue.Trim();
+ if (fieldValue == "****") continue;
+
+ errorMessage = errorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(DetailedProperties, model, fieldValue);
+ if (string.IsNullOrEmpty(fieldValue) && model.Isintordecimal) fieldValue = "0";//数值保存时为空的话默认保存为0;
+
+ fieldBuilder.Append(model.FieldName + ",");
+ valueBuilder.Append(string.IsNullOrEmpty(fieldValue) ? this.ControlObj.GetNullValue(model) : string.Format("N'{0}',", fieldValue));
+
+ }
+ if (!string.IsNullOrWhiteSpace(errorMessage)) SaveErrorMessage = "表头错误:" + errorMessage;
+ // 增加主键
+ fieldBuilder.Append(billModel.PrimaryKey);
+ //valueBuilder.Append("N'" + parmaryValue + "'");
+ valueBuilder.Append("N'" + parmaryValue + "'");
+ // 增加红蓝字单标记
+ fieldBuilder.Append("," + billModel.RtagidKey);
+ valueBuilder.Append(",N'" + (rdRed.Checked ? 1 : 0) + "'");
+ return string.Format("insert into {0}({1}) values ({2})", billModel.MasterTable, fieldBuilder.ToString().TrimEnd(','), valueBuilder.ToString().TrimEnd(','));
+ }
+ private StringBuilder GetDetailRecord(string guid, string billNo)
+ {
+ // 构造明细
+ StringBuilder detailBuilder = new StringBuilder();
+ DataTable detailTable = this.gcMain.GridControl.DataSourceTable().TrimDeleteRows();
+ if (billModel.DetailTreeTable)
+ {
+ detailTable = ((this.gcMain as TreeGridControlEx).TreeListObj.DataSource as DataTable).TrimDeleteRows();
+ }
+ DataTable DetailedProperties = BaseImpl.GetDataTableResult(string.Format("select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.columns where table_name = '{0}'", billModel.DetailTable + "_temp"));//单据明细性表
+ if (detailTable.Rows.Count > 0)
+ {
+ int lineNumber = 1;
+ DataTable BillColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", billModel.DetailTable));
+ DataTable BillTempColumns = BaseImpl.GetDataTableResult(string.Format("select * from {0} where 1<>1", billModel.DetailTable + "_temp"));
+ foreach (DataRow dataRow in detailTable.Rows)
+ {
+ string errorMessage = string.Empty;//数据不符合数据库规范的信息
+ StringBuilder fields = new StringBuilder();
+ StringBuilder values = new StringBuilder();
+ string detailSql = @"insert into " + billModel.DetailTable + "_temp" + "({0}) values({1})";
+ fields.Append("sysstr,");
+ values.Append("'" + guid + "',");
+ foreach (DataColumn item in BillColumns.Columns)
+ {
+ if (item.ColumnName.Equals(guidField) || item.ColumnName.Equals(ERPInfo.Instance.isAddRows)) continue;
+ if (!BillTempColumns.Columns.Contains(item.ColumnName))
+ {
+ string type = "varchar(100)";
+ if (item.DataType == typeof(DateTime))
+ {
+ type = "datetime";
+ }
+ BaseImpl.ExecSqlValue(string.Format("alter table {0} add {1} {2}", billModel.DetailTable + "_temp", item.ColumnName, type));
+ }
+ if (billModel.DetailTreeTable)
+ {
+ TreeListColumn[] TreeListColumns = (this.gcMain as TreeGridControlEx).TreeListObj.Columns.Cast().Where(x => x.FieldName.Equals(item.Caption, StringComparison.OrdinalIgnoreCase)).ToArray();
+ if (TreeListColumns.Count() == 0 && item.Caption.Equals(billModel.PrimaryDetailKey))
+ {
+ string primaryValues = dataRow[billModel.PrimaryDetailKey] + "";
+ if (!string.IsNullOrWhiteSpace(primaryValues))
+ {
+ fields.Append(item.ColumnName + ",");
+ values.Append("N'" + primaryValues.Replace("'", "''") + "',");
+ }
+ }
+ if (TreeListColumns.Count() == 0) continue;
+ }
+ else
+ {
+ GridColumn[] gridColumns = gcMain.GridView.Columns.Cast().Where(x => x.FieldName.Equals(item.Caption, StringComparison.OrdinalIgnoreCase)).ToArray();
+ if (gridColumns.Count() == 0 && item.Caption.Equals(billModel.PrimaryDetailKey))
+ {
+ string primaryValues = dataRow[billModel.PrimaryDetailKey] + "";
+ if (!string.IsNullOrWhiteSpace(primaryValues))
+ {
+ fields.Append(item.ColumnName + ",");
+ values.Append("N'" + primaryValues.Replace("'", "''") + "',");
+ }
+ }
+ if (gridColumns.Count() == 0) continue;
+ }
+ fields.Append(item.ColumnName + ",");
+ string fieldValue = dataRow.Table.Columns.Contains(item.ColumnName) ? dataRow[item.ColumnName] + "" : string.Empty;
+ //if (SystemInfo.Instance.TrimWhiteSpace)
+ // fieldValue = fieldValue.Trim();
+ if (item.ColumnName.Equals(billModel.PrimaryDetailKey, StringComparison.OrdinalIgnoreCase))
+ fieldValue = billNo;
+ if (!string.IsNullOrWhiteSpace(fieldValue))
+ {
+ values.Append(item.DataType == typeof(DateTime) ? "'" + Convert.ToDateTime(fieldValue).ToString("yyyy-MM-dd HH:mm:ss") + "'," : fieldValue.Contains("'") ? "N'" + fieldValue.Replace("'", "''") + "'," : "N'" + fieldValue + "',");
+ }
+ else
+ {
+ if (item.DataType == typeof(Decimal) ||
+ item.DataType == typeof(Double) ||
+ item.DataType == typeof(Int16) ||
+ item.DataType == typeof(Int32) ||
+ item.DataType == typeof(Int64))
+ values.Append("0,");
+ else if (item.DataType == typeof(DateTime))
+ {
+ values.Append("NULL,");
+ }
+ else
+ {
+ values.Append("'',");
+ }
+ }
+ errorMessage = errorMessage + DatabaseFormatJudgment.SaveOrModifyBalidation(_detailColumns, DetailedProperties, dataRow, item, fieldValue);
+ }
+ detailBuilder.AppendFormat(detailSql, fields.ToString().Trim(','), values.ToString().Trim(','));
+ if (!string.IsNullOrWhiteSpace(errorMessage)) errorMessage = "第" + lineNumber + "行:" + errorMessage;
+ lineNumber++;
+ }
+ }
+ return detailBuilder;
+ }
+ private void SetBillStatus(DataRow rowItem)
+ {
+ if (rowItem != null)
+ {
+ // 单据为修改状态,无需设置赋值时不需要计算面板属性
+ bool isReadOnly = !string.IsNullOrEmpty(billModel.ModifyCond) && !ReplaceHelper.ReplaceRowParamCond(rowItem, billModel.ModifyCond);
+ this.ControlObj.CanExecControl = false; // 单据为修改状态时,无需计算面板属性
+ this.lbTitle.Text = billModel.TypeName + "(修改)";
+ this.lblOrderNo.Text = rowItem[billModel.PrimaryKey] + "";
+ this.rdBlue.Checked = "0".Equals(rowItem[billModel.RtagidKey] + "");
+ this.rdRed.Checked = "1".Equals(rowItem[billModel.RtagidKey] + "");
+ billModel.SaveState = true;
+ this.rdBlue.Enabled = this.rdRed.Enabled = false;
+ this.ControlObj.SetReadOnlyAllControl(isReadOnly);
+ this.ControlObj.SetAllControlValue(rowItem);
+ this.dbpFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = !isReadOnly;
+ this.ControlObj.CanExecControl = true;
+ this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = !isReadOnly;
+ this.labelControl1.ForeColor = this.lblOrderNo.ForeColor = this.lbTitle.ForeColor = rdBlue.Checked ? Color.Blue : Color.Red;
+ this.gcMain.GridView.OptionsBehavior.Editable = !isReadOnly;
+ // 上一次查询
+ int oldRowHandle = this.gcMain.GridView.FocusedRowHandle;
+ //获取数据源并排序
+ DataTable dt = BillImpl.GetDataTableResult(ReplaceHelper.ReplaceRowParam(rowItem, billModel.DetailSql));
+ if (dt.Columns.Contains(billModel.DetailOrderField))
+ {
+ DataView dataView = dt.AsDataView();
+ dataView.Sort = billModel.DetailOrderField;
+ dt = dataView.ToTable();
+ }
+ if (billModel.DetailTreeTable)
+ {
+ //判断是否有tap_id和tap_pid
+ (this.gcMain as TreeGridControlEx).SetGridViewDataSourceGenerateID(dt);
+ this.gcMain.GridView.SelectRowHandler(oldRowHandle);
+ }
+ else
+ {
+ this.gcMain.GridControl.DataSource = dt;
+ this.gcMain.GridView.SelectRowHandler(oldRowHandle);
+ if (billModel.SelectLast && dt.Rows.Count > 0)
+ {
+ this.gcMain.GridView.SelectRowHandler(dt.Rows.Count - 1);
+ }
+ }
+ BaseUserControl userControl = this.ControlObj.FindControl(billModel.RtagidKey);
+ if (userControl != null)
+ {
+ userControl.EditText = this.rdRed.Checked ? "1" : "0";
+ }
+ }
+ else
+ {
+ // 单据为新增状态
+ this.dbpFP.Enabled = this.btnDelete.Enabled = this.btnBillSave.Enabled = this.btnBillApply.Enabled = true;
+ this.lbTitle.Text = billModel.TypeName + "(新增)";
+ this.lblOrderNo.Text = BillImpl.GetBillNo(billModel.BillSeq);
+ this.cb_input.Enabled = this.btn_input.Enabled = this.txt_input.Enabled = true;
+ this.cb_templete.Enabled = true;
+ billModel.SaveState = false;
+ this.ControlObj.SetReadOnlyAllControl(false);
+ this.rdBlue.Enabled = this.rdRed.Enabled = true;
+ // 通过右键菜单打开单据,假如明细有数据则在初始化时使用传入数据.
+ if (billModel.DetailTreeTable)
+ {
+ (this.gcMain as TreeGridControlEx).TreeListObj.OptionsBehavior.Editable = true;
+ (this.gcMain as TreeGridControlEx).SetGridViewDataSourceGenerateID(BillImpl.GetDataTableResult(billModel.DetailSql));
+ }
+ else
+ {
+ this.gcMain.GridView.OptionsBehavior.Editable = true;
+ this.gcMain.GridControl.DataSource = BillImpl.GetDataTableResult(billModel.DetailSql);
+ }
+ BaseUserControl userControl = this.ControlObj.FindControl(billModel.RtagidKey);
+ if (userControl != null)
+ {
+ userControl.EditText = this.rdRed.Checked ? "1" : "0";
+ }
+ }
+ this.lbTitle.Invalidate();
+ }
+ public void OnBillAdd()
+ {
+ this.SetBillStatus(null);
+ this.ControlObj.ResetControlValue(billModel.ManuallyTriggerCorrelation, true);
+ }
+ public void AddOrUpdateBill(DataRow rowItem, DataTable newSource)
+ {
+ string masterSql = rowItem == null ? billModel.MasterSql.Replace("{" + billModel.PrimaryKey + "}", this.lblOrderNo.Text) : ReplaceHelper.ReplaceRowParam(rowItem, billModel.MasterSql);
+ // 加载单据信息
+ DataRow mainRow = BillImpl.GetDataRowResult(masterSql);
+ this.SetBillStatus(mainRow);
+ if (!billModel.SaveState)
+ {
+ this.InitializeHeader(rowItem);
+ }
+ else
+ {
+ if (rowItem != null)
+ {
+ DataRow dataRow = BaseImpl.GetDataRowResult($"select '{rowItem["bak"] + ""}' as bak,'{rowItem["bombb"] + ""}' as bombb,'{rowItem["bombc"] + ""}' as bombc");
+ this.InitializeHeader(dataRow);
+ }
+ }
+ if (mainRow != null)
+ {
+ //更新
+ DataTable source = this.gcMain.GridControl.DataSourceTable();
+
+ List deleteRows = new List();
+ foreach (DataRow sourceRow in source.Rows)
+ {
+ string productId = sourceRow["ProductId"] + "";
+ DataRow newSourceRow = newSource.Rows.Cast().Where(n => (n["ProductId"] + "").Equals(productId)).FirstOrDefault();
+ if (newSourceRow != null)
+ {
+ sourceRow["tamount"] = newSourceRow["tamount"];
+ sourceRow["amount"] = newSourceRow["amount"];
+ sourceRow["bak"] = newSourceRow["bak"];
+ sourceRow["bombb"] = newSourceRow["bombb"];
+ sourceRow["bombc"] = newSourceRow["bombc"];
+ newSource.Rows.Remove(newSourceRow);
+ }
+ else
+ {
+ deleteRows.Add(sourceRow);
+ }
+ }
+ foreach (DataRow deleteRow in deleteRows)
+ {
+ source.Rows.Remove(deleteRow);
+ }
+ foreach (DataRow newSourceRow in newSource.Rows)
+ {
+ DataRow newRow = source.NewRow();
+ newRow.ItemArray = newSourceRow.ItemArray;
+ source.Rows.Add(newRow);
+ }
+ }
+ else
+ {
+ //新增
+ this.gcMain.GridControl.DataSource = newSource;
+ }
+ }
+ public void AddOrUpdateBillByZZQD(DataRow rowItem, DataTable newSource)
+ {
+ string masterSql = rowItem == null ? billModel.MasterSql.Replace("{" + billModel.PrimaryKey + "}", this.lblOrderNo.Text) : ReplaceHelper.ReplaceRowParam(rowItem, billModel.MasterSql);
+ // 加载单据信息
+ DataRow mainRow = BillImpl.GetDataRowResult(masterSql);
+ this.SetBillStatus(mainRow);
+ if (!billModel.SaveState)
+ {
+ this.InitializeHeader(rowItem);
+ }
+ string controlSql = "select '' as billdocument_id,'0' affirmer,'0' rtagid,'{材料代码}' as productid";
+ if (mainRow != null)
+ {
+ //更新
+ DataTable source = this.gcMain.GridC
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmBillInfo.resx b/插件库/Lskj.PubBomImportNew/FrmBillInfo.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmBillInfo.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmMain.Designer.cs b/插件库/Lskj.PubBomImportNew/FrmMain.Designer.cs
new file mode 100644
index 0000000..9d15c54
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmMain.Designer.cs
@@ -0,0 +1,291 @@
+
+namespace Lskj.PubBomImportNew
+{
+ partial class FrmMain
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.btnImport = new DevExpress.XtraEditors.SimpleButton();
+ this.btnRead = new DevExpress.XtraEditors.SimpleButton();
+ this.pl_bottom = new DevExpress.XtraEditors.PanelControl();
+ this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
+ this.btnOk = new DevExpress.XtraEditors.SimpleButton();
+ this.pl_cond = new DevExpress.XtraEditors.PanelControl();
+ this.condTxtEdit = new DevExpress.XtraEditors.TextEdit();
+ this.lb_cond = new System.Windows.Forms.Label();
+ this.pl_purview = new DevExpress.XtraEditors.PanelControl();
+ this.purview_Mulit = new Lskj.Control.LabelMultiAutoTextEdit();
+ this.lb_purview = new System.Windows.Forms.Label();
+ this.tips = new DevExpress.XtraEditors.PanelControl();
+ this.tipsEdit = new DevExpress.XtraEditors.TextEdit();
+ this.splitMainContainer = new DevExpress.XtraEditors.SplitContainerControl();
+ this.gcMain = new Lskj.Control.GridControlEx();
+ this.gc_Right = new Lskj.Control.GridControlEx();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_bottom)).BeginInit();
+ this.pl_bottom.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_cond)).BeginInit();
+ this.pl_cond.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.condTxtEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_purview)).BeginInit();
+ this.pl_purview.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.tips)).BeginInit();
+ this.tips.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.tipsEdit.Properties)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.splitMainContainer)).BeginInit();
+ this.splitMainContainer.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // btnImport
+ //
+ this.btnImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnImport.Location = new System.Drawing.Point(764, 10);
+ this.btnImport.Margin = new System.Windows.Forms.Padding(4);
+ this.btnImport.Name = "btnImport";
+ this.btnImport.Size = new System.Drawing.Size(97, 31);
+ this.btnImport.TabIndex = 11;
+ this.btnImport.Text = "导入数据";
+ //
+ // btnRead
+ //
+ this.btnRead.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.btnRead.Location = new System.Drawing.Point(656, 10);
+ this.btnRead.Margin = new System.Windows.Forms.Padding(4);
+ this.btnRead.Name = "btnRead";
+ this.btnRead.Size = new System.Drawing.Size(97, 31);
+ this.btnRead.TabIndex = 10;
+ this.btnRead.Text = "读取Excel";
+ //
+ // pl_bottom
+ //
+ this.pl_bottom.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.pl_bottom.Appearance.Options.UseBackColor = true;
+ this.pl_bottom.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.pl_bottom.Controls.Add(this.btnImport);
+ this.pl_bottom.Controls.Add(this.btnCancel);
+ this.pl_bottom.Controls.Add(this.btnRead);
+ this.pl_bottom.Controls.Add(this.btnOk);
+ this.pl_bottom.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.pl_bottom.Location = new System.Drawing.Point(0, 549);
+ this.pl_bottom.Margin = new System.Windows.Forms.Padding(4);
+ this.pl_bottom.Name = "pl_bottom";
+ this.pl_bottom.Size = new System.Drawing.Size(872, 50);
+ this.pl_bottom.TabIndex = 2;
+ //
+ // btnCancel
+ //
+ this.btnCancel.Location = new System.Drawing.Point(120, 10);
+ this.btnCancel.Margin = new System.Windows.Forms.Padding(4);
+ this.btnCancel.Name = "btnCancel";
+ this.btnCancel.Size = new System.Drawing.Size(97, 31);
+ this.btnCancel.TabIndex = 11;
+ this.btnCancel.Text = "清除绑定";
+ //
+ // btnOk
+ //
+ this.btnOk.Location = new System.Drawing.Point(12, 10);
+ this.btnOk.Margin = new System.Windows.Forms.Padding(4);
+ this.btnOk.Name = "btnOk";
+ this.btnOk.Size = new System.Drawing.Size(97, 31);
+ this.btnOk.TabIndex = 10;
+ this.btnOk.Text = "保存绑定";
+ //
+ // pl_cond
+ //
+ this.pl_cond.Appearance.BackColor = System.Drawing.Color.White;
+ this.pl_cond.Appearance.Options.UseBackColor = true;
+ this.pl_cond.Controls.Add(this.condTxtEdit);
+ this.pl_cond.Controls.Add(this.lb_cond);
+ this.pl_cond.Dock = System.Windows.Forms.DockStyle.Top;
+ this.pl_cond.Location = new System.Drawing.Point(0, 0);
+ this.pl_cond.Margin = new System.Windows.Forms.Padding(4);
+ this.pl_cond.Name = "pl_cond";
+ this.pl_cond.Size = new System.Drawing.Size(872, 42);
+ this.pl_cond.TabIndex = 12;
+ //
+ // condTxtEdit
+ //
+ this.condTxtEdit.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.condTxtEdit.Location = new System.Drawing.Point(87, 2);
+ this.condTxtEdit.Name = "condTxtEdit";
+ this.condTxtEdit.Properties.Appearance.BackColor = System.Drawing.Color.White;
+ this.condTxtEdit.Properties.Appearance.Options.UseBackColor = true;
+ this.condTxtEdit.Properties.AutoHeight = false;
+ this.condTxtEdit.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.condTxtEdit.Size = new System.Drawing.Size(783, 38);
+ this.condTxtEdit.TabIndex = 5;
+ //
+ // lb_cond
+ //
+ this.lb_cond.BackColor = System.Drawing.Color.White;
+ this.lb_cond.Dock = System.Windows.Forms.DockStyle.Left;
+ this.lb_cond.Location = new System.Drawing.Point(2, 2);
+ this.lb_cond.Name = "lb_cond";
+ this.lb_cond.Size = new System.Drawing.Size(85, 38);
+ this.lb_cond.TabIndex = 3;
+ this.lb_cond.Text = "筛选条件:";
+ this.lb_cond.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // pl_purview
+ //
+ this.pl_purview.Appearance.BackColor = System.Drawing.Color.White;
+ this.pl_purview.Appearance.Options.UseBackColor = true;
+ this.pl_purview.Controls.Add(this.purview_Mulit);
+ this.pl_purview.Controls.Add(this.lb_purview);
+ this.pl_purview.Cursor = System.Windows.Forms.Cursors.Default;
+ this.pl_purview.Dock = System.Windows.Forms.DockStyle.Top;
+ this.pl_purview.Location = new System.Drawing.Point(0, 42);
+ this.pl_purview.Margin = new System.Windows.Forms.Padding(4);
+ this.pl_purview.Name = "pl_purview";
+ this.pl_purview.Size = new System.Drawing.Size(872, 21);
+ this.pl_purview.TabIndex = 13;
+ //
+ // purview_Mulit
+ //
+ this.purview_Mulit.BackColor = System.Drawing.Color.White;
+ this.purview_Mulit.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.purview_Mulit.EditText = "";
+ this.purview_Mulit.FontSize = 0F;
+ this.purview_Mulit.LabelText = "名称";
+ this.purview_Mulit.Location = new System.Drawing.Point(135, 2);
+ this.purview_Mulit.Margin = new System.Windows.Forms.Padding(4);
+ this.purview_Mulit.Model = null;
+ this.purview_Mulit.Name = "purview_Mulit";
+ this.purview_Mulit.NullText = "";
+ this.purview_Mulit.ReadOnly = false;
+ this.purview_Mulit.Required = false;
+ this.purview_Mulit.Size = new System.Drawing.Size(735, 17);
+ this.purview_Mulit.TabIndex = 4;
+ this.purview_Mulit.TextBoxProhibition = false;
+ //
+ // lb_purview
+ //
+ this.lb_purview.BackColor = System.Drawing.Color.White;
+ this.lb_purview.Dock = System.Windows.Forms.DockStyle.Left;
+ this.lb_purview.Location = new System.Drawing.Point(2, 2);
+ this.lb_purview.Name = "lb_purview";
+ this.lb_purview.Size = new System.Drawing.Size(133, 17);
+ this.lb_purview.TabIndex = 3;
+ this.lb_purview.Text = "条件可编辑人员:";
+ this.lb_purview.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // tips
+ //
+ this.tips.Appearance.BackColor = System.Drawing.Color.White;
+ this.tips.Appearance.Options.UseBackColor = true;
+ this.tips.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Office2003;
+ this.tips.Controls.Add(this.tipsEdit);
+ this.tips.Dock = System.Windows.Forms.DockStyle.Top;
+ this.tips.Location = new System.Drawing.Point(0, 63);
+ this.tips.Margin = new System.Windows.Forms.Padding(4);
+ this.tips.Name = "tips";
+ this.tips.Size = new System.Drawing.Size(872, 42);
+ this.tips.TabIndex = 14;
+ //
+ // tipsEdit
+ //
+ this.tipsEdit.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tipsEdit.EditValue = "请导入Excel模板";
+ this.tipsEdit.Location = new System.Drawing.Point(2, 2);
+ this.tipsEdit.Name = "tipsEdit";
+ this.tipsEdit.Properties.Appearance.BackColor = System.Drawing.Color.White;
+ this.tipsEdit.Properties.Appearance.ForeColor = System.Drawing.Color.Red;
+ this.tipsEdit.Properties.Appearance.Options.UseBackColor = true;
+ this.tipsEdit.Properties.Appearance.Options.UseForeColor = true;
+ this.tipsEdit.Properties.AutoHeight = false;
+ this.tipsEdit.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ this.tipsEdit.Properties.ReadOnly = true;
+ this.tipsEdit.Size = new System.Drawing.Size(868, 38);
+ this.tipsEdit.TabIndex = 6;
+ //
+ // splitMainContainer
+ //
+ this.splitMainContainer.Appearance.BackColor = System.Drawing.Color.Transparent;
+ this.splitMainContainer.Appearance.Options.UseBackColor = true;
+ this.splitMainContainer.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Default;
+ this.splitMainContainer.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.splitMainContainer.Location = new System.Drawing.Point(0, 105);
+ this.splitMainContainer.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.splitMainContainer.Name = "splitMainContainer";
+ this.splitMainContainer.Panel1.Controls.Add(this.gcMain);
+ this.splitMainContainer.Panel1.Text = "Panel1";
+ this.splitMainContainer.Panel2.Controls.Add(this.gc_Right);
+ this.splitMainContainer.Panel2.Text = "Panel2";
+ this.splitMainContainer.Size = new System.Drawing.Size(872, 444);
+ this.splitMainContainer.SplitterPosition = 500;
+ this.splitMainContainer.TabIndex = 17;
+ this.splitMainContainer.Text = "splitContainerControl1";
+ //
+ // gcMain
+ //
+ this.gcMain.AdapterObj = null;
+ this.gcMain.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gcMain.Location = new System.Drawing.Point(0, 0);
+ this.gcMain.Margin = new System.Windows.Forms.Padding(4);
+ this.gcMain.Name = "gcMain";
+ this.gcMain.SiftEnumObj = Lskj.Control.GridControlEx.HeaderSiftEnum.Sum;
+ this.gcMain.Size = new System.Drawing.Size(500, 444);
+ this.gcMain.TabIndex = 16;
+ //
+ // gc_Right
+ //
+ this.gc_Right.AdapterObj = null;
+ this.gc_Right.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.gc_Right.Location = new System.Drawing.Point(0, 0);
+ this.gc_Right.Margin = new System.Windows.Forms.Padding(4);
+ this.gc_Right.Name = "gc_Right";
+ this.gc_Right.SiftEnumObj = Lskj.Control.GridControlEx.HeaderSiftEnum.Sum;
+ this.gc_Right.Size = new System.Drawing.Size(367, 444);
+ this.gc_Right.TabIndex = 18;
+ //
+ // FrmMain
+ //
+ this.Appearance.BackColor = System.Drawing.SystemColors.Control;
+ this.Appearance.Options.UseBackColor = true;
+ this.Appearance.Options.UseFont = true;
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
+ this.ClientSize = new System.Drawing.Size(872, 599);
+ this.Controls.Add(this.splitMainContainer);
+ this.Controls.Add(this.tips);
+ this.Controls.Add(this.pl_purview);
+ this.Controls.Add(this.pl_cond);
+ this.Controls.Add(this.pl_bottom);
+ this.Name = "FrmMain";
+ this.Opacity = 0D;
+ this.Text = "表格导入";
+ ((System.ComponentModel.ISupportInitialize)(this.pl_bottom)).EndInit();
+ this.pl_bottom.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.pl_cond)).EndInit();
+ this.pl_cond.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.condTxtEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.pl_purview)).EndInit();
+ this.pl_purview.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.tips)).EndInit();
+ this.tips.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.tipsEdit.Properties)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.splitMainContainer)).EndInit();
+ this.splitMainContainer.ResumeLayout(false);
+ this.ResumeLayout(f
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmMain.cs b/插件库/Lskj.PubBomImportNew/FrmMain.cs
new file mode 100644
index 0000000..2f1a7a6
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmMain.cs
@@ -0,0 +1,1557 @@
+using DevExpress.XtraEditors.Repository;
+using DevExpress.XtraGrid.Columns;
+using DevExpress.XtraGrid.Views.BandedGrid;
+using DevExpress.XtraGrid.Views.Grid;
+using Lskj.Business;
+using Lskj.Business.Impl;
+using Lskj.Control;
+using Lskj.Control.Model;
+using Lskj.Core;
+using Lskj.Data;
+using Lskj.Model;
+using Lskj.PubBomImportNew;
+using Lskj.Util;
+using NPOI.HSSF.UserModel;
+using NPOI.SS.UserModel;
+using NPOI.SS.Util;
+using NPOI.XSSF.UserModel;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Windows.Forms;
+
+namespace Lskj.PubBomImportNew
+{
+ public partial class FrmMain : BaseForm
+ {
+ public FrmMain()
+ {
+ InitializeComponent();
+ this.Load += FrmMain_Load;
+ }
+ public DynamicBomImportNew Model;
+ public int FirstRowIndex = 0;
+ ///
+ /// 匹配搜索框列
+ ///
+ private RepositoryItemGridLookUpEdit searchEdit = new RepositoryItemGridLookUpEdit();
+ ///
+ /// 缓存列对象
+ ///
+ private static List ColumnList = new List();
+ ///
+ /// 导入文件名
+ ///
+ private string importFileName = "";
+ private static Dictionary ValueGridColumnTable;
+ private static Dictionary LookupParentKey;
+ private static List _checkColumns;
+ private static string _treeColumnName;
+ #region 事件
+ ///
+ /// 初始化时
+ ///
+ ///
+ ///
+ private void FrmMain_Load(object sender, EventArgs e)
+ {
+ try
+ {
+ InitlizeSpiltLocation();
+ InitEvents();
+ InitGridColumns();
+ InitMulitControl();
+ InitDataSource();
+ }
+ catch (Exception ex)
+ {
+ WaitForm.HideForm();
+ MessageUtil.Show(ex.Message);
+ this.Close();
+ }
+ }
+ ///
+ /// 导入按钮点击
+ ///
+ ///
+ ///
+ private void OnBtnImportClick(object sender, EventArgs e)
+ {
+ try
+ {
+ OpenFileDialog dialog = new OpenFileDialog();
+ dialog.Multiselect = false;
+ dialog.InitialDirectory = Properties.Settings.Default.LastSelectFolder;
+ dialog.Title = "选择导入文件";
+ dialog.Filter = "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls";
+ DialogResult dialogResult = dialog.ShowDialog();
+ if (dialogResult == DialogResult.OK)
+ {
+ Properties.Settings.Default.LastSelectFolder = Path.GetDirectoryName(dialog.FileName);
+ FrmProgress frmProgress = new FrmProgress();
+ frmProgress.StartImportInFileByZB(dialog.FileName.ToList());
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ }
+ }
+ ///
+ /// 读取按钮点击
+ ///
+ ///
+ ///
+ private void OnBtnReadClick(object sender, EventArgs e)
+ {
+ try
+ {
+ OpenFileDialog dialog = new OpenFileDialog();
+ dialog.Title = "选择导入文件";
+ dialog.Filter = SystemInfo.Instance.IsXlsxFirst ? "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls" : "Excel文件(*.xls)|*.xls|Excel文件(*.xlsx)|*.xlsx";
+ DialogResult result = dialog.ShowDialog();
+ DataTable gcData = new DataTable();
+ if (result == DialogResult.OK)
+ {
+ string fileName = importFileName = dialog.FileName;
+ tipsEdit.Text = string.Format("当前读取文件:{0},请绑定列后点击导入", Path.GetFileName(fileName));
+ string colFields = this.gcMain.GridView.Columns.ToString(',');
+ int.TryParse(Model.FirstRowIndex, out FirstRowIndex);
+ DataTable dataTable = ExcelToDatatable(fileName, Model, Model.SheetName, FirstRowIndex);
+ DataTable importTable = GetSourceTable(dataTable);
+ DataTable sourceTable = this.gcMain.GridControl.DataSource as DataTable;
+ if (dataTable != null)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(Model.ReadTableCond))
+ {
+ DataView view = new DataView(dataTable);
+ view.RowFilter = Model.ReadTableCond;
+ dataTable = view.ToTable();
+ }
+ }
+ catch (Exception)
+ {
+ }
+ this.gc_Right.SetGridViewDataSource(dataTable);
+ }
+ if (sourceTable != null && sourceTable.Rows.Count > 0)
+ {
+ if (sourceTable.Rows.Count != importTable.Rows.Count)
+ {
+ this.gcMain.SetGridViewDataSource(importTable);
+ this.condTxtEdit.Text = "";
+ }
+ else
+ {
+ bool isComplete = true;
+ int rowCount = importTable.Rows.Count;
+ for (int i = 0; i < rowCount; i++)
+ {
+ DataRow row = importTable.Rows[i];
+ int count = sourceTable.Rows.Cast().Where(n => (n["excelFieldName"] + "").Equals(row["excelFieldName"] + "")).Count();
+ if (count == 0)
+ {
+ isComplete = false;
+ break;
+ }
+ }
+ if (!isComplete)
+ {
+ this.gcMain.SetGridViewDataSource(importTable);
+ this.condTxtEdit.Text = "";
+ }
+ }
+ }
+ else
+ {
+ this.gcMain.SetGridViewDataSource(importTable);
+ this.condTxtEdit.Text = "";
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ tipsEdit.Text = "请导入Excel模板";
+ gc_Right.SetGridViewDataSource(new DataTable());
+ this.DialogResult = DialogResult.Cancel;
+ }
+ }
+ ///
+ /// 确定按钮点击
+ ///
+ ///
+ ///
+ private void OnBtnOkClick(object sender, EventArgs e)
+ {
+ try
+ {
+ string condFilter = this.condTxtEdit.Text.Trim();
+ string condPurview = this.purview_Mulit.EditValue;
+ string unionColumn = GetUnionColumn();
+ string sql = "if exists(select * from P_SpecialImportTab where moduleId = '{0}' and rightMenuName = '{1}') " +
+ "begin " +
+ "update P_SpecialImportTab set Ls_CondFilter = '{2}',Ls_UnionColumn = '{3}',Ls_CondPurview = '{4}' where moduleId = '{0}' and rightMenuName = '{1}' " +
+ "end " +
+ "else begin " +
+ "insert into P_SpecialImportTab (moduleId,rightMenuName,Ls_CondFilter,Ls_UnionColumn,Ls_CondPurview) values ('{0}','{1}','{2}','{3}','{4}') " +
+ "end";
+ sql = string.Format(sql, Model.ModuleCode, Model.ModuleId, condFilter.Replace("'", "''"), unionColumn.Replace("'", "''"), condPurview.Replace("'", "''"));
+ SqlHelper.ExecuteNonQuery(sql);
+ MessageUtil.Show("保存成功");
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show("保存失败,原因:" + ex.Message);
+ }
+ }
+ ///
+ /// 取消按钮点击
+ ///
+ ///
+ ///
+ private void OnBtnCancelClick(object sender, EventArgs e)
+ {
+ try
+ {
+ DataTable dataTable = this.gcMain.GridControl.DataSourceTable();
+ if (dataTable != null && dataTable.Rows.Count > 0)
+ {
+ foreach (DataRow item in dataTable.Rows)
+ {
+ item["clientFieldName"] = "";
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(string.Format("取消绑定列失败,原因:{0}", ex.Message));
+ }
+ }
+ ///
+ /// 分隔条位置改变时
+ ///
+ ///
+ ///
+ private void OnSplitMainContainerPositionChanged(object sender, EventArgs e)
+ {
+ try
+ {
+ if (this.Model != null)
+ {
+ IniHelper.Write(string.Format("PubSpecialImport_SplitMain_{0}", this.Model.ModuleCode), this.splitMainContainer.SplitterPosition + "");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ }
+ }
+ #endregion
+ #region 方法
+ ///
+ /// 初始化事件绑定
+ ///
+ private void InitEvents()
+ {
+ this.btnRead.Click += OnBtnReadClick;
+ this.btnImport.Click += OnBtnImportClick;
+ this.btnOk.Click += OnBtnOkClick;
+ this.btnCancel.Click += OnBtnCancelClick;
+ this.splitMainContainer.SplitterPositionChanged += OnSplitMainContainerPositionChanged;
+ }
+ ///
+ /// 设置分割条位置
+ ///
+ private void InitlizeSpiltLocation()
+ {
+ try
+ {
+ string splitMainWidth = IniHelper.Read(string.Format("PubSpecialImport_SplitMain_{0}", this.Model.ModuleCode));//通过Key获取Value值
+ if (!string.IsNullOrEmpty(splitMainWidth))
+ {
+ this.splitMainContainer.SplitterPosition = Convert.ToInt32(splitMainWidth);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ }
+ }
+ ///
+ /// 初始化表格列
+ ///
+ private void InitGridColumns()
+ {
+ this.gcMain.AllowClearColumns = false;
+ GridColumn excelFieldNameColumn = this.gcMain.GridView.Columns.AddVisible("excelFieldName", "Excel列名");
+ excelFieldNameColumn.Width = 200;
+ GridColumn clientFieldNameColumn = this.gcMain.GridView.Columns.AddVisible("clientFieldName", "绑定程序列");
+ clientFieldNameColumn.Width = 200;
+
+ //DataTable gridColumnsTab = BaseModuleImpl.GetBaseGridColumns(this.Model.ModuleCode);
+ DataTable gridColumnsTab = BillImpl.GetDetailColumns(this.Model.ModuleCode);
+ searchEdit.View.OptionsView.ShowIndicator = false;
+ searchEdit.View.OptionsView.ColumnAutoWidth = false;
+ //searchEdit.PopupSizeable = true;
+ //searchEdit.PopupResizeMode = ResizeMode.Default;
+ searchEdit.ImmediatePopup = true;
+ searchEdit.ShowFooter = false;
+ searchEdit.NullText = "";
+ searchEdit.ValueMember = "dm";
+ searchEdit.DisplayMember = "mc";
+ searchEdit.View.Columns.AddVisible("dm", "dm").Width = 150;
+ searchEdit.View.Columns.AddVisible("mc", "mc").Width = 200;
+ searchEdit.View.OptionsView.ShowColumnHeaders = false;
+ this.gcMain.GridControl.RepositoryItems.Add(searchEdit);
+ clientFieldNameColumn.ColumnEdit = searchEdit;
+ searchEdit.DataSource = GetSearchSourceTable(gridColumnsTab);
+ searchEdit.View.Tag = searchEdit;
+ }
+ ///
+ /// 初始化多选控件
+ ///
+ private void InitMulitControl()
+ {
+ if (!ERPInfo.Instance.UserName.Equals("管理员"))
+ {
+ pl_purview.Visible = false;
+ return;
+ }
+ purview_Mulit.LabelText = "";
+ purview_Mulit.ValueMember = "UserId";
+ purview_Mulit.TextField = "UserName";
+ purview_Mulit.ValueField = "UserId";
+ purview_Mulit.Model = new ControlModel()
+ {
+ FieldType = ControlType.LabMultiSelectValue,
+ };
+ string fields = string.Empty;
+ if (BaseImpl.HasExistsColumn("P_EmployeeTab", "SignBmp"))
+ fields = ",SignBmp";
+ if (BaseImpl.HasExistsColumn("P_EmployeeTab", "Password"))
+ fields += ",Password";
+ if (BaseImpl.HasExistsColumn("P_EmployeeTab", "AD_Id"))
+ fields += ",AD_Id";
+ string sqlValue = string.Format("select EmployeeId UserId,LoginAccount UserCode,EmployeeName UserName {0} from P_EmployeeTab WHERE sign=0 and UseFlag=1 order by loginaccount", fields);
+ DataTable dataSource = SqlHelper.ExecuteDataTable(sqlValue);
+ purview_Mulit.SourceSQL = sqlValue;
+ purview_Mulit.SetDataSource(dataSource);
+ purview_Mulit.TextEdit.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+ }
+ ///
+ /// 初始化数据
+ ///
+ private void InitDataSource()
+ {
+ if (BaseImpl.HasExistsTable("P_SpecialImportTab"))
+ {
+ if (!BaseImpl.HasExistsColumn("P_SpecialImportTab", "moduleId"))
+ {
+ string addColumnSql = "alter table P_SpecialImportTab add moduleId int";
+ SqlHelper.ExecuteNonQuery(addColumnSql);
+ }
+ if (!BaseImpl.HasExistsColumn("P_SpecialImportTab", "rightMenuName"))
+ {
+ string addColumnSql = "alter table P_SpecialImportTab add rightMenuName varchar(100)";
+ SqlHelper.ExecuteNonQuery(addColumnSql);
+ }
+ if (!BaseImpl.HasExistsColumn("P_SpecialImportTab", "Ls_CondFilter"))
+ {
+ string addColumnSql = "alter table P_SpecialImportTab add Ls_CondFilter varchar(1000)";
+ SqlHelper.ExecuteNonQuery(addColumnSql);
+ }
+ if (!BaseImpl.HasExistsColumn("P_SpecialImportTab", "Ls_UnionColumn"))
+ {
+ string addColumnSql = "alter table P_SpecialImportTab add Ls_UnionColumn varchar(2000)";
+ SqlHelper.ExecuteNonQuery(addColumnSql);
+ }
+ if (!BaseImpl.HasExistsColumn("P_SpecialImportTab", "Ls_CondPurview"))
+ {
+ string addColumnSql = "alter table P_SpecialImportTab add Ls_CondPurview varchar(1000)";
+ SqlHelper.ExecuteNonQuery(addColumnSql);
+ }
+ DataTable dataTable = new DataTable();
+ try
+ {
+ string menuName = Model.ModuleId + "";
+ //if (Model.BillDetailSql.StartsWith("*"))
+ //{
+ // string rightid = Model.BillDetailSql.TrimStart('*');
+ // string sqlValue = "select AllowNullExec,* from p_systempopupmenu ";
+ // sqlValue = $"{sqlValue} where id = '{rightid}'";
+ // DataRow rowItem = BaseImpl.GetDataRowResult(sqlValue);
+ // if (rowItem != null)
+ // {
+ // menuName = rowItem["menuname"] + "";
+ // }
+ //}
+ string searchSql = string.Format("select * from P_SpecialImportTab where moduleId = '{0}' and rightMenuName = '{1}'", Model.ModuleCode, menuName);
+ dataTable = SqlHelper.ExecuteDataTable(searchSql);
+ }
+ catch (Exception)
+ {
+ }
+ if (dataTable != null && dataTable.Rows.Count > 0)
+ {
+ DataRow dataRow = dataTable.Rows[0];
+ string condFilter = dataRow["Ls_CondFilter"] + "";
+ string unionColumn = dataRow["Ls_UnionColumn"] + "";
+ string condPurview = dataRow["Ls_CondPurview"] + "";
+
+ string[] values = condPurview.Trim(',').Split(',');
+ if (!values.Contains(ERPInfo.Instance.UserId))
+ {
+ condTxtEdit.ReadOnly = true;
+ }
+ this.condTxtEdit.Text = condFilter;
+ this.purview_Mulit.EditText = condPurview;
+ List unionColumnList = unionColumn.Split(',').ToList();
+ DataTable sourceTable = GetSourceTable(unionColumnList);
+ this.gcMain.GridControl.DataSource = sourceTable;
+ }
+ else
+ {
+ if (!ERPInfo.Instance.UserName.Equals("管理员"))
+ {
+ MessageUtil.Show("未获取到配置数据\r\n请联系管理员配置数据");
+ this.Close();
+ }
+ }
+ }
+ else
+ {
+ string createTableSql = "create table P_SpecialImportTab (moduleId int,rightMenuName varchar(100),Ls_CondFilter varchar(1000),Ls_UnionColumn varchar(2000),Ls_CondPurview varchar(1000))";
+ SqlHelper.ExecuteNonQuery(createTableSql);
+ }
+ }
+ ///
+ /// 判断标题行
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool IsTitleRow(string fileName, string sheetName = "", int firstRowIndex = 0)
+ {
+ bool isTitle = false;
+ DataTable data = new DataTable();
+ FileStream fs;
+ IWorkbook workbook = null;
+ try
+ {
+ fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
+ if (fileName.IndexOf(".xlsx") > 0) // 2007版本
+ {
+ workbook = new XSSFWorkbook(fs);
+ }
+ else if (fileName.IndexOf(".xls") > 0) // 2003版本
+ {
+ workbook = new HSSFWorkbook(fs);
+ }
+ ISheet sheet;
+ if (!string.IsNullOrEmpty(sheetName))
+ {
+ sheet = workbook.GetSheet(sheetName);//根据给定的sheet名称获取数据
+ }
+ else
+ {
+ //也可以根据sheet编号来获取数据
+ sheet = workbook.GetSheetAt(0);//获取第几个sheet表(此处表示如果没有给定sheet名称,默认是第一个sheet表)
+ }
+ if (sheet != null)
+ {
+ IRow firstRow = sheet.GetRow(firstRowIndex);
+ }
+ }
+ catch (Exception)
+ {
+ }
+ return isTitle;
+ }
+ ///
+ /// 获取表格数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ public DataTable ExcelToDatatable(string fileName, DynamicBomImportNew Model, string sheetName = "", int firstRowIndex = 0)
+ {
+ DataTable data = new DataTable();
+ FileStream fs;
+ IWorkbook workbook = null;
+ try
+ {
+ fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
+ if (fileName.IndexOf(".xlsx") > 0) // 2007版本
+ {
+ workbook = new XSSFWorkbook(fs);
+ }
+ else if (fileName.IndexOf(".xls") > 0) // 2003版本
+ {
+ workbook = new HSSFWorkbook(fs);
+ }
+ ISheet sheet;
+ if (!string.IsNullOrEmpty(sheetName))
+ {
+ sheet = workbook.GetSheet(sheetName);//根据给定的sheet名称获取数据
+ }
+ else
+ {
+ //也可以根据sheet编号来获取数据
+ sheet = workbook.GetSheetAt(0);//获取第几个sheet表(此处表示如果没有给定sheet名称,默认是第一个sheet表)
+ }
+ if (sheet != null)
+ {
+ int startRow = firstRowIndex + 1;
+ IRow firstRow = sheet.GetRow(firstRowIndex);
+ IRow bandRow = null;
+ int cellCount = firstRow.LastCellNum;
+ for (int i = firstRow.FirstCellNum; i < firstRow.LastCellNum; i++)//第一行列数循环
+ {
+ ICell titleCell = firstRow.GetCell(i);
+ ICell bandCell = null;
+ bool isBandTitle = false;
+ if (titleCell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, firstRowIndex, i);
+ startRow = mergrRange.LastRow + 1;
+ if (mergrRange != null)
+ {
+ if (mergrRange.FirstColumn < mergrRange.LastColumn && !Model.CustomerServiceApp)
+ {
+ isBandTitle = true;
+ bandRow = sheet.GetRow(mergrRange.LastRow + 1);
+ titleCell = firstRow.GetCell(mergrRange.FirstColumn);
+ bandCell = bandRow.GetCell(i);
+ CellRangeAddress bandMergrRange = FindMergedRegion(sheet, mergrRange.LastRow + 1, i);
+ if (bandMergrRange != null)
+ {
+ startRow = bandMergrRange.LastRow + 1;
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 2;
+ }
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 1;
+ }
+ }
+ }
+ string fieldName = "";
+ if (!isBandTitle || bandRow == null)
+ {
+ fieldName = GetCellValue(titleCell);
+ }
+ else
+ {
+ fieldName = $"{GetCellValue(titleCell)}|{GetCellValue(bandCell)}";
+ }
+ if (string.IsNullOrEmpty(fieldName) && titleCell.IsMergedCell)
+ {
+ cellCount -= 1;
+ continue;
+ }
+ DataColumn column = new DataColumn(fieldName);//获取标题
+ data.Columns.Add(column);//添加列
+ }
+ //最后一行的标号
+ int rowCount = sheet.LastRowNum;
+ for (int i = startRow; i <= rowCount; i++)//循环遍历所有行
+ {
+ IRow row = sheet.GetRow(i);//第几行
+ if (row == null)
+ {
+ continue; //没有数据的行默认是null;
+ }
+ //将excel表每一行的数据添加到datatable的行中
+ DataRow dataRow = data.NewRow();
+ int dataRowIndex = 0;
+ for (int j = firstRow.FirstCellNum; j < cellCount; j++)
+ {
+ ICell cell = row.GetCell(j);
+ if (cell != null && cell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, i, j);
+ if (j == mergrRange.FirstColumn)
+ {
+ dataRow[dataRowIndex] = GetCellValue(row.GetCell(j));
+ dataRowIndex += 1;
+ }
+ else
+ {
+ continue;
+ }
+ }
+ else
+ {
+ if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
+ {
+ dataRow[dataRowIndex] = GetCellValue(row.GetCell(j));
+ dataRowIndex += 1;
+ }
+ }
+ }
+ data.Rows.Add(dataRow);
+ }
+ }
+ return data;
+ }
+ catch (IOException ex)
+ {
+ throw new IOException(string.Format("读取模板内容失败,原因:{0}", ex.Message));
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(string.Format("读取模板内容失败,原因:{0}", ex.Message));
+ }
+ }
+ ///
+ /// 获取特殊单元格的值
+ ///
+ ///
+ public string GetSpecialCellValue(string fileName, string sheetName = "", int rowIndex = 0, int colIndex = 0)
+ {
+ string value = "";
+ FileStream fs;
+ IWorkbook workbook = null;
+ try
+ {
+ fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
+ if (fileName.IndexOf(".xlsx") > 0) // 2007版本
+ {
+ workbook = new XSSFWorkbook(fs);
+ }
+ else if (fileName.IndexOf(".xls") > 0) // 2003版本
+ {
+ workbook = new HSSFWorkbook(fs);
+ }
+ ISheet sheet;
+ if (!string.IsNullOrEmpty(sheetName))
+ {
+ sheet = workbook.GetSheet(sheetName);//根据给定的sheet名称获取数据
+ }
+ else
+ {
+ //也可以根据sheet编号来获取数据
+ sheet = workbook.GetSheetAt(0);//获取第几个sheet表(此处表示如果没有给定sheet名称,默认是第一个sheet表)
+ }
+ if (sheet != null)
+ {
+ IRow firstRow = sheet.GetRow(rowIndex);
+ value = GetCellValue(firstRow.GetCell(colIndex));
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ return value;
+ }
+ ///
+ /// 获取数据源
+ ///
+ ///
+ private DataTable GetSourceTable(DataTable dataTable)
+ {
+ DataTable sourceTable = new DataTable();
+ sourceTable.Columns.Add("excelFieldName");
+ sourceTable.Columns.Add("clientFieldName");
+ if (dataTable != null)
+ {
+ foreach (DataColumn col in dataTable.Columns)
+ {
+ DataRow dataRow = sourceTable.NewRow();
+ dataRow["excelFieldName"] = col.ColumnName;
+ sourceTable.Rows.Add(dataRow);
+ }
+ }
+ return sourceTable;
+ }
+ ///
+ /// 获取数据源
+ ///
+ ///
+ private DataTable GetSourceTable(List unionColumnList)
+ {
+ DataTable sourceTable = new DataTable();
+ sourceTable.Columns.Add("excelFieldName");
+ sourceTable.Columns.Add("clientFieldName");
+ if (unionColumnList != null)
+ {
+ foreach (string unionColumn in unionColumnList)
+ {
+ string[] unionCilumnArray = unionColumn.Split('^');
+ if (unionCilumnArray.Length == 2)
+ {
+ DataRow dataRow = sourceTable.NewRow();
+ dataRow["excelFieldName"] = unionCilumnArray[0];
+ dataRow["clientFieldName"] = unionCilumnArray[1];
+ sourceTable.Rows.Add(dataRow);
+ }
+ }
+ }
+ return sourceTable;
+ }
+ ///
+ /// 获取搜索数据源
+ ///
+ ///
+ private DataTable GetSearchSourceTable(DataTable dataTable)
+ {
+ DataTable sourceTable = new DataTable();
+ sourceTable.Columns.Add("dm");
+ sourceTable.Columns.Add("mc");
+ if (dataTable != null && dataTable.Rows.Count > 0)
+ {
+ foreach (DataRow row in dataTable.Rows)
+ {
+ GridColumnModel model = new GridColumnModel(row);
+ if (model.Visible)
+ {
+ DataRow dataRow = sourceTable.NewRow();
+ dataRow["dm"] = row["fieldname"];
+ string username = row["username"] + "";
+ if (string.IsNullOrEmpty(username))
+ {
+ username = row["fieldname"] + "";
+ }
+ dataRow["mc"] = username;
+ sourceTable.Rows.Add(dataRow);
+ }
+ }
+ }
+ return sourceTable;
+ }
+ ///
+ /// 获取关联列数据
+ ///
+ ///
+ private string GetUnionColumn()
+ {
+ string unionColumn = "";
+ DataTable sourceTable = this.gcMain.GridControl.DataSourceTable();
+ if (sourceTable != null)
+ {
+ foreach (DataRow row in sourceTable.Rows)
+ {
+ unionColumn += string.Format("{0}^{1},", row["excelFieldName"], row["clientFieldName"]);
+ }
+ }
+ return unionColumn.TrimEnd(',');
+ }
+ ///
+ /// 导入到表格中
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public DataTable ToExcelDataTable(string fileName, out int count, out int errorCount, bool isDirectImport = false, bool isBillImport = false)
+ {
+ count = 0;
+ errorCount = 0;
+ GridView gridView = ParentView;
+ DataTable columnsTable = gcMain.gridControl.DataSourceTable();
+ DataTable table = gridView.GridControl.DataSourceTable();
+ DataTable sourceDataTable = ExcelToDatatable(fileName, Model, Model.SheetName, FirstRowIndex);
+ DataView filterDataView = new DataView(sourceDataTable);
+ try
+ {
+ if (!string.IsNullOrEmpty(Model.ReadTableCond))
+ {
+ filterDataView.RowFilter = Model.ReadTableCond;
+ }
+ }
+ catch (Exception)
+ {
+ }
+ List dataRows = columnsTable.Rows.Cast().Where(n => !string.IsNullOrEmpty(n["excelFieldName"] + "") && !string.IsNullOrEmpty(n["clientFieldName"] + "")).ToList();
+ int index = gridView is BandedGridView ? FirstRowIndex + 1 : FirstRowIndex;
+ isBillImport = index == FirstRowIndex ? true : isBillImport;
+ string fileExt = Path.GetExtension(fileName).ToLower();
+
+ int CurrentRow = 0;//当前行数
+ int CurrentColumn = 0;//当前列数
+ string columnName = string.Empty;//当前列名
+ bool ToAssignment = false;//是否在给新表赋值
+
+ try
+ {
+ ISheet sheet = ExcelHelper.GetSheet(fileName);
+ IRow firstRow = sheet.GetRow(index);
+ IRow bandRow = null;
+ int startRow = FirstRowIndex + 1;
+ string bandTitel = string.Empty;
+ ColumnList.Clear();
+ int cellCount = firstRow.LastCellNum;
+ // 添加列
+ for (int i = firstRow.FirstCellNum; i < firstRow.LastCellNum; i++)
+ {
+ ICell titleCell = firstRow.GetCell(i);
+ ICell bandCell = null;
+ bool isBandTitle = false;
+ if (titleCell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, index, i);
+ startRow = mergrRange.LastRow + 1;
+ if (mergrRange != null)
+ {
+ if (mergrRange.FirstColumn < mergrRange.LastColumn && !Model.CustomerServiceApp)
+ {
+ isBandTitle = true;
+ bandRow = sheet.GetRow(mergrRange.LastRow + 1);
+ titleCell = firstRow.GetCell(mergrRange.FirstColumn);
+ bandCell = bandRow.GetCell(i);
+ CellRangeAddress bandMergrRange = FindMergedRegion(sheet, mergrRange.LastRow + 1, i);
+ if (bandMergrRange != null)
+ {
+ startRow = bandMergrRange.LastRow + 1;
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 2;
+ }
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 1;
+ }
+ }
+ }
+ string headerName = "";
+ if (!isBandTitle || bandRow == null)
+ {
+ headerName = GetCellValue(titleCell);
+ }
+ else if (!string.IsNullOrEmpty(GetCellValue(bandCell)))
+ {
+ headerName = $"{GetCellValue(titleCell)}|{GetCellValue(bandCell)}";
+ }
+ if (string.IsNullOrEmpty(headerName))
+ {
+ cellCount -= 1;
+ continue;
+ }
+ DataRow row = columnsTable.Rows.Cast().Where(x => (x["excelFieldName"] + "").Equals(headerName)).FirstOrDefault();
+ headerName = row != null ? row["clientFieldName"] + "" : headerName;
+ if (string.IsNullOrWhiteSpace(headerName))
+ {
+ continue;
+ }
+ GridColumn col = gridView.Columns.OfType().FirstOrDefault(x => x.FieldName.Equals(headerName));
+ if (col != null)
+ {
+ if (!table.Columns.Contains(col.FieldName))
+ {
+ table.Columns.Add(col.FieldName, col.ColumnType);
+ }
+ ColumnList.Add(col.Tag as GridColumnModel);
+ }
+ else
+ {
+ MessageUtil.Show("未找到列->" + headerName + "");
+ }
+ }
+ InitializeValueGrid();
+ bool AutoImportCal = SystemInfo.Instance.AutoImportCal;//是否执行计算公式
+ for (int i = startRow; i <= sheet.LastRowNum; i++)
+ {
+ ToAssignment = true;
+ CurrentRow = i;
+ DataRow rowSource = sourceDataTable.Rows[i - startRow];
+ if (!filterDataView.Cast().Any(rowView => rowView.Row == rowSource) || !ValidateCond(condTxtEdit.Text, rowSource))
+ {
+ continue;
+ }
+ GridColumn col = new GridColumn();
+ IRow row = sheet.GetRow(i);
+ if (row == null) continue;
+ bandTitel = string.Empty;
+ DataRow dataRow = table.NewRow();
+ //if (i == sheet.LastRowNum && fileExt == ".xlsx") break;
+ for (int j = row.FirstCellNum; j < firstRow.LastCellNum; j++)
+ {
+ CurrentColumn = j;
+ ICell cell = row.GetCell(j);
+ ICell titleCell = firstRow.GetCell(j);
+ ICell bandCell = null;
+ bool isBandTitle = false;
+ if (titleCell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, index, j);
+ startRow = mergrRange.LastRow + 1;
+ if (mergrRange != null)
+ {
+ if (mergrRange.FirstColumn < mergrRange.LastColumn && !Model.CustomerServiceApp)
+ {
+ isBandTitle = true;
+ bandRow = sheet.GetRow(mergrRange.LastRow + 1);
+ titleCell = firstRow.GetCell(mergrRange.FirstColumn);
+ bandCell = bandRow.GetCell(j);
+ CellRangeAddress bandMergrRange = FindMergedRegion(sheet, mergrRange.LastRow + 1, j);
+ if (bandMergrRange != null)
+ {
+ startRow = bandMergrRange.LastRow + 1;
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 2;
+ }
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 1;
+ }
+ }
+ }
+ if (!isBandTitle || bandRow == null)
+ {
+ columnName = GetCellValue(titleCell);
+ }
+ else if (!string.IsNullOrEmpty(GetCellValue(bandCell)))
+ {
+ columnName = $"{GetCellValue(titleCell)}|{GetCellValue(bandCell)}";
+ }
+ if (string.IsNullOrEmpty(columnName))
+ {
+ continue;
+ }
+ DataRow colDataRow = dataRows.Where(n => (n["excelFieldName"] + "").Equals(columnName)).FirstOrDefault();
+ if (colDataRow == null)
+ {
+ continue;
+ }
+ columnName = colDataRow["clientFieldName"] + "";
+ //if (!bandTitel.Equals(Bandcell + "") && !string.IsNullOrEmpty(Bandcell + "")) bandTitel = Bandcell + "";
+ col = gridView.Columns.OfType().FirstOrDefault(x => x.FieldName.Equals(columnName));
+ if (col == null) continue;
+ GridColumnModel model = col.Tag as GridColumnModel;
+ if (cell != null)
+ {
+ try
+ {
+ if (cell.CellType == CellType.Blank)
+ {
+ continue;
+ }
+ if (cell.CellType == CellType.Numeric && (cell + "").StartsWith("-"))
+ {
+ dataRow[col.FieldName] = cell.NumericCellValue;
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ else
+ {
+ if (cell.CellType == CellType.Numeric)
+ {
+
+ //GridColumnModel model = col.Tag as GridColumnModel;
+ if (model != null && isDirectImport && (model.FieldType == ControlType.LabDate ||
+ model.FieldType == ControlType.LabDateTime ||
+ model.FieldType == ControlType.LabDateTimeShort ||
+ model.FieldType == ControlType.LabTime ||
+ model.FieldType == ControlType.LabShortTime))
+ {
+ string fieldValue = ToDateTimeValue(cell.NumericCellValue + "");
+ if (fieldValue != "")
+ {
+ dataRow[col.FieldName] = Convert.ToDateTime(fieldValue);
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ }
+ else
+ {
+ dataRow[col.FieldName] = cell.NumericCellValue;
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ }
+ else
+ {
+ //GridColumnModel model = col.Tag as GridColumnModel;
+ if (model != null && isDirectImport && (model.FieldType == ControlType.LabTreeType ||
+ model.FieldType == ControlType.LabComboxValue ||
+ model.FieldType == ControlType.LabComboxValueParam ||
+ model.FieldType == ControlType.LabAutoCompleteValue ||
+ model.FieldType == ControlType.LabAutoCompleteValueParam ||
+ model.FieldType == ControlType.LabMultiSelectValue ||
+ model.FieldType == ControlType.LabMultiSelectValueParam
+ || model.FieldType == ControlType.LabTreeLookValue
+ ))
+ {
+ bool isEmpty = model.CanNull;
+ string fieldValue = GetValueByImportText(dataRow, col.FieldName, cell + "", isBillImport);
+ if ((model.FieldType == ControlType.LabMultiSelectValue ||
+ model.FieldType == ControlType.LabMultiSelectValueParam) && GetCellValue(cell).Contains(","))
+ {
+ string[] cellText = GetCellValue(cell).Split(',');
+ foreach (string cellValue in cellText)
+ {
+ fieldValue += GetValueByImportText(dataRow, col.FieldName, cellValue, isBillImport) + ',';
+ }
+ fieldValue = fieldValue.TrimEnd(',');
+ }
+ if (string.IsNullOrEmpty(fieldValue))
+ {
+ if (isEmpty)
+ {
+ MessageUtil.Show("该列不允许为空->" + col.Caption + "");
+ }
+ else
+ {
+ GridColumn column = gridView.Columns[col.FieldName];
+ if (column.ColumnType.Name.ToLower().IndexOf("int") >= 0)
+ if (column.ColumnType.Name.ToLower() == "string")
+ dataRow[col.FieldName] = "";
+ if (column.ColumnType.Name.ToLower().IndexOf("char") >= 0)
+ dataRow[col.FieldName] = "";
+ if (column.ColumnType.Name.ToLower().IndexOf("int") >= 0)
+ dataRow[col.FieldName] = 0;
+ if (column.ColumnType.Name.ToLower() == "decimal")
+ dataRow[col.FieldName] = 0;
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ }
+ else
+ {
+ dataRow[col.FieldName] = fieldValue;
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ }
+ else
+ {
+ IRichTextString richTextString = (IRichTextString)cell.RichStringCellValue;
+ if (fileExt == ".xlsx")
+ {
+ cell.SetCellValue(richTextString);
+ }
+ else if (fileExt == ".xls")
+ {
+ string cellValue = string.Empty;
+ for (int m = 0; m < richTextString.Length; m++)
+ {
+
+ //string aaa = richTextString.String.Substring(m , 1);
+ //short aaa = richTextString.GetFontAtIndex(m);
+ IFont font = sheet.Workbook.GetFontAt(richTextString.GetFontAtIndex(m));//richTextString.GetFontAtIndex(m)
+
+ string str = string.Empty;
+ string code = richTextString.ToString().Substring(m, 1);
+ switch (font.TypeOffset)
+ {
+ case FontSuperScript.Sub:
+ str = ChemistryHelper.GetSubChar(code);
+ break;
+
+ case FontSuperScript.Super:
+ str = ChemistryHelper.GetSuperChar(code);
+ break;
+ default:
+ str = code;
+ break;
+ }
+ cellValue = cellValue + str;
+ }
+ cell.SetCellValue(cellValue);
+ }
+ dataRow[col.FieldName] = GetCellValue(cell);
+ if (AutoImportCal)
+ {
+ if (!string.IsNullOrEmpty(model.UnionFields))
+ {
+ SetUnionValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ SetCalcValue(model, dataRow[col.FieldName] + "", dataRow);
+ }
+ }
+ }
+ }
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+ }
+ table.Rows.Add(dataRow);
+ count += 1;
+ }
+ ToAssignment = false;
+ }
+ catch (InvalidOperationException ex)
+ {
+
+ if (ToAssignment && (CurrentRow != 0 || CurrentColumn != 0))
+ {
+ string value = string.Format("第{0}行,第{1}列 {2},值出现异常", CurrentRow, CurrentColumn + 1, columnName);
+ MessageUtil.Show(value);
+ }
+ else
+ {
+ MessageUtil.Show(ResourceKeys.DeleteLastTotalRow);
+ }
+ }
+ catch (IOException exe)
+ {
+ //string Message = ErrorMessage.PromptErrorMessage(exe);
+ //MessageUtil.Show(Message, exe.Message);
+ MessageUtil.Show(string.Format(ResourceKeys.UseingFile, Path.GetFileName(fileName)));
+ }
+ catch (Exception ex)
+ {
+ //MessageUtil.Show(ResourceKeys.ImportFault + ex.Message);
+ LogUtil.WriteError("读取excel出错!", ex);
+ string Message = ErrorMessage.PromptErrorMessage(ex);
+ MessageUtil.Show(Message, ex.Message);
+ }
+ return table.TrimEmptyRows();
+ }
+ ///
+ /// 导入表的时候将下拉框的值存储
+ ///
+ ///
+ private void InitializeValueGrid()
+ {
+ GridView gridView = ParentView;
+ ValueGridColumnTable = new Dictionary();
+ _checkColumns = new List();
+ LookupParentKey = new Dictionary();
+ foreach (GridColumn col in gridView.Columns)
+ {
+ if (col.Tag is GridColumnModel)
+ {
+ GridColumnModel model = col.Tag as GridColumnModel;
+ if (model != null && !ValueGridColumnTable.ContainsKey(model))
+ {
+ if (model.FieldType == ControlType.LabTreeType ||
+ model.FieldType == ControlType.LabComboxValue ||
+ model.FieldType == ControlType.LabComboxValueParam ||
+ model.FieldType == ControlType.LabAutoCompleteValue ||
+ model.FieldType == ControlType.LabAutoCompleteValueParam ||
+ model.FieldType == ControlType.LabMultiSelectValue ||
+ model.FieldType == ControlType.LabMultiSelectValueParam
+ || model.FieldType == ControlType.LabTreeLookValue
+ )
+ {
+ string sqlValue = model.SqlSource;
+ if (sqlValue.Contains(" #"))
+ {
+ //sqlValue = sqlValue.Replace("#", "");
+ Match m = Regex.Match(sqlValue, @"#([\s\S]*?)#");
+ //处理带参数上一级编码过滤问题,需在带参数sql中增加名称的父级字段
+ if (m.Success)
+ {
+ sqlValue = ReplaceHelper.ReplaceParam(sqlValue);
+ LookupParentKey.Add(model.FieldName, m.Value.Replace("#", ""));
+ }
+ }
+ ValueGridColumnTable.Add(model, BaseImpl.GetDataTableResult(sqlValue));
+
+ if (model.FieldType == ControlType.LabTreeType)
+ {
+ _treeColumnName = model.FieldName;
+ }
+ }
+ if (model.FieldType == ControlType.LabCheckBox)
+ {
+ _checkColumns.Add(col.FieldName.ToLower());
+ }
+ }
+ }
+ }
+ }
+ ///
+ /// 计算列关联字段
+ ///
+ ///
+ ///
+ ///
+ private void SetUnionValue(GridColumnModel model, string fieldValue, DataRow rowItem)
+ {
+ //DataTable table = gcMain.gridControl.DataSourceTable();
+ //DataRow rowItem = this.gridView.GetFocusedDataRow();
+ string unionValues = model.UnionValues;
+ if (rowItem != null && model != null)
+ {
+ // if (this.ControlObj != null)
+ // unionValues = this.ControlObj.ReplaceParentControlValue(unionValues);
+ unionValues = ReplaceHelper.ReplaceRowParam(rowItem, unionValues.Replace("{" + model.FieldName + "}", fieldValue));
+ try
+ {
+ string[] fields = model.UnionFields.Trim(',').Split(',');
+ DataRow rowResult = BaseImpl.GetDataRowResult(unionValues);
+ if (rowResult != null)
+ {
+ for (int i = 0; i < fields.Length; i++)
+ {
+ string field = fields[i];
+ string value = rowResult.Table.Columns.Contains(field) ? rowResult[field] + "" : null;
+ rowItem[field] = value;
+ }
+ }
+ else
+ {
+ // 设置为空
+ for (int i = 0; i < fields.Length; i++)
+ {
+ string field = fields[i];
+ rowItem[field] = DBNull.Value;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Instance.WriteError(ex);
+ LogUtil.WriteError("计算列关联字段--错误-->" + unionValues, ex);
+ }
+ }
+ }
+ ///
+ /// 计算列计算公式
+ ///
+ ///
+ ///
+ ///
+ private void SetCalcValue(GridColumnModel model, string fieldValue, DataRow rowItem)
+ {
+ try
+ {
+ if (rowItem != null && model != null)
+ {
+ foreach (GridColumn col in this.ParentView.Columns)
+ {
+ GridColumnModel colModel = col.Tag as GridColumnModel;
+ if (colModel == null) continue;
+ string defultValue = colModel.DefaultValue;
+ if (colModel.FieldType == 7 && rowItem.Table.Columns.Contains(col.FieldName) && string.IsNullOrEmpty(rowItem[col.FieldName] + "") && !string.IsNullOrEmpty(colModel.DefaultValue))
+ {
+ defultValue = ReplaceHelper.ReplaceUserInfo(colModel.DefaultValue);
+ if (defultValue.StartsWith("@"))
+ {
+ defultValue = BaseImpl.GetDefaultValue(ReplaceHelper.ReplaceRowParam(rowItem, defultValue));
+ }
+
+ if (IsNumberic(defultValue)) rowItem[col.FieldName] = defultValue;//colModel.DefaultValue;
+
+ }
+ }
+ List calcModels = ColumnList.FindAll(x => !string.IsNullOrEmpty(x.CalcExpr)).OrderBy(y => y.CalcOrder).ToList();
+ foreach (GridColumnModel gridModel in calcModels)
+ {
+ // 计算顺序小于当前控件则不计算
+ if (gridModel.CalcOrder < model.CalcOrder) continue;
+
+ if (!gridModel.FieldName.Equals(model.FieldName, StringComparison.OrdinalIgnoreCase))
+ {
+ bool isTruncate = false;
+ string calcExpr = gridModel.CalcExpr;
+ if (calcExpr.StartsWith("@truncate:"))
+ {
+ calcExpr = calcExpr.Substring(10);
+ isTruncate = true;
+ }
+
+ try
+ {
+ string result = string.Empty;
+ if (calcExpr.StartsWith("@"))
+ {
+ result = BaseImpl.GetDefaultValue(ReplaceHelper.ReplaceRowParam(rowItem, calcExpr));
+ }
+ else
+ {
+ calcExpr = ReplaceHelper.ReplaceRowParam(rowItem, calcExpr);
+ result = EvalHelper.Eval2(ReplaceHelper.ReplaceEvalCond(calcExpr)) + "";
+ }
+ if (isTruncate)
+ {
+ result += result.Contains(".") ? "0000000000" : ".0000000000";
+ rowItem[gridModel.FieldName] = result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1);
+ //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), model.Decimals + 1));
+ }
+ else
+ {
+ try
+ {
+ double d = 0;
+ if (!string.IsNullOrEmpty(result) &&
+ !"NaN".Equals(result, StringComparison.OrdinalIgnoreCase) &&
+ !"非数字".Equals(result, StringComparison.OrdinalIgnoreCase) &&
+ !"undefined".Equals(result, StringComparison.OrdinalIgnoreCase) &&
+ result != "∞" && result != "-∞" &&
+ !"正无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
+ !"负无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
+ double.TryParse(result, out d))
+ {
+ if (string.IsNullOrEmpty(gridModel.DataFormat))
+ {
+ result = Math.Round(Convert.ToDouble(d), model.Decimals, MidpointRounding.AwayFromZero) + "";
+ }
+ else
+ {
+ //计算后先执行保存小数位数
+ if (SystemInfo.Instance.ComputeFormatting) result = string.Format("{0:" + gridModel.DataFormat + "}", Convert.ToDecimal(result));
+ }
+ if (model.FieldType == 7 && result.Contains('%'))
+ {
+ result = (double.Parse(result.Replace("%", "")) * 0.01).ToString();
+ }
+ rowItem[gridModel.FieldName] = result;
+ // 判断计算列有无关联值
+ GridColumnModel UnionModel = calcModels.FirstOrDefault(x => x.FieldName == gridModel.FieldName);
+ if (!string.IsNullOrEmpty(UnionModel.UnionFields))
+ {
+ this.SetUnionValue(UnionModel, rowItem[gridModel.FieldName] + "", rowItem);
+ }
+ //this.gridView.SetRowCellValue(this.gridView.FocusedRowHandle, this.gridView.Columns[gridModel.FieldName], result);
+ }
+ }
+ catch (Exception)
+ {
+
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ LogHelper.Instance.WriteError(ex);
+ LogUtil.WriteError("计算列计算公式--错误-->" + rowItem[gridModel.FieldName], ex);
+ }
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
+ }
+ ///
+ /// 判断输入的字符串是否可以转换成数值类型
+ ///
+ ///
+ ///
+ public static bool IsNumberic(string str)
+ {
+ double vsNum;
+ bool isNum;
+ isNum = double.TryParse(str, System.Globalization.NumberStyles.Float,
+ System.Globalization.NumberFormatInfo.InvariantInfo, out vsNum);
+ return isNum;
+ }
+ ///
+ /// 获取导入到下拉框里的显示值
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static string GetValueByImportText(DataRow row, string fieldName, string text, bool isBillImport = false)
+ {
+ string value = text;
+ foreach (GridColumnModel model in ValueGridColumnTable.Keys)
+ {
+ if (model.FieldName.Equals(fieldName, StringComparison.OrdinalIgnoreCase))
+ {
+ string selWhere = "1=1";
+ DataTable table = ValueGridColumnTable[model];
+ if (table != null && table.Rows.Count > 0)
+ {
+ DataRow rowItemValue = table.Rows.Cast().FirstOrDefault(x => x[model.TextMember] + "" == text);
+ DataRow rowItemText = table.Rows.Cast().FirstOrDefault(x => x[model.ValueMember] + "" == text);
+ value = rowItemValue != null ? rowItemValue[isBillImport ? model.ValueMember : model.TextMember] + "" : rowItemText != null ? rowItemText[isBillImport ? model.ValueMember : model.TextMember] + "" : "";
+ }
+ else
+ value = "";
+ }
+ }
+ return value;
+ }
+ ///
+ /// 数字转换时间格式
+ ///
+ ///
+ /// 日期/时间格式
+ private static string ToDateTimeValue(string strNumber)
+ {
+ string returnData = "";
+ if (!string.IsNullOrWhiteSpace(strNumber))
+ {
+ if (!string.IsNullOrWhiteSpace(strNumber))
+ {
+ DateTime dateTime = DateTime.FromOADate(Convert.ToDouble(strNumber));
+ returnData = dateTime.ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ }
+ return returnData;
+ }
+ ///
+ /// 解析code信息
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void GetFileCodeInfo(string sourceCode, out string code, out string name, out string bb, out int bc)
+ {
+ string namepattern = @"^(.*-S[A-Z]\d*)(.*)$";
+ string pattern = @"^(.*?)(\d+)?$";
+ string childcode = "";
+ string childname = "";
+ string childsourceCode = "";
+ string childsourceBB = "";
+ int childsourceBC = 0;
+ Match namematch = Regex.Match(Path.GetFileNameWithoutExtension(sourceCode).Trim(), namepattern);
+ if (namematch.Success)
+ {
+ childcode = namematch.Groups[1].Value.Trim();
+ childname = namematch.Groups[2].Value.Trim();
+ }
+ Match match = Regex.Match(childcode, pattern);
+ if (match.Success)
+ {
+ childsourceCode = match.Groups[1].Value;
+ int.TryParse(match.Groups[2].Value, out childsourceBC);//版次
+ Match bbMatch = Regex.Match(childsourceCode, @"^.*?([A-Za-z]+)(\d*)$");
+ if (bbMatch.Success)
+ {
+ childsourceBB = bbMatch.Groups[1].Value.Trim();
+ }
+ }
+ code = childsourceCode;
+ name = childname;
+ bb = childsourceBB;
+ bc = childsourceBC;
+ }
+ ///
+ /// 说明:检查可用条件
+ /// 创建日期:2024-3-19
+ /// 修改人:
+ /// 修改日期:
+ /// 修改备注:
+ /// 版本:1.0
+ ///
+ /// The cond.
+ /// The data row.
+ /// true if XXXX, false otherwise.
+ public bool ValidateCond(string cond, DataRow dataRow)
+ {
+ bool result = false;
+ try
+ {
+ cond = ReplaceHelper.ReplaceRowParam(dataRow, cond);
+ if (cond.StartsWith("@") || cond.StartsWith("!"))
+ {
+ result = "1".Equals(BaseImpl.GetDefaultValue(cond));
+ }
+ else if (dataRow == null)
+ {
+ result = ReplaceHelper.EvalCond(cond);
+ }
+ else
+ {
+ result = ReplaceHelper.ReplaceRowParamCond(dataRow, cond);
+ }
+ }
+ catch (Exception)
+ {
+ }
+ return result;
+ }
+ ///
+ /// 获取合并区域
+ ///
+ ///
+ ///
+ ///
+ ///
+ private CellRangeAddress FindMergedRegion(ISheet sheet, int rowIndex, int columnIndex)
+ {
+ int mergedRegionsCount = sheet.NumMergedRegions;
+
+ for (int i = 0; i < mergedRegionsCount; i++)
+ {
+ CellRangeAddress mergedRegion = sheet.GetMergedRegion(i);
+ if (mergedRegion.IsInRange(rowIndex, columnIndex))
+ {
+ return mergedRegion; // 返回合并区域
+ }
+ }
+ return null; // 未找到合并区域
+ }
+ ///
+ /// 获取单元格值
+ ///
+ ///
+ ///
+ public static string GetCellValue(ICell cell)
+ {
+ string cellValue = "";
+ try
+ {
+ if (cell != null)
+ {
+ // 根据单元格类型获取值
+ switch (cell.CellType)
+ {
+ case CellType.String:
+ cellValue = cell.StringCellValue;
+ break;
+ case CellType.Numeric:
+ cellValue = cell.NumericCellValue.ToString();
+ break;
+ case CellType.Boolean:
+ cellValue = cell.BooleanCellValue.ToString();
+ break;
+ case CellType.Formula://单元格中带有公式,根据类型继续判断
+ switch (cell.CachedFormulaResultType)
+ {
+ case CellType.String:
+ cellValue = cell.StringCellValue;
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmMain.resx b/插件库/Lskj.PubBomImportNew/FrmMain.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmProgress.Designer.cs b/插件库/Lskj.PubBomImportNew/FrmProgress.Designer.cs
new file mode 100644
index 0000000..1476b4a
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmProgress.Designer.cs
@@ -0,0 +1,143 @@
+namespace Lskj.PubBomImport
+{
+ partial class FrmProgress
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmProgress));
+ this.label3 = new System.Windows.Forms.Label();
+ this.splitter1 = new System.Windows.Forms.Splitter();
+ this.progressBarTotal = new System.Windows.Forms.ProgressBar();
+ this.panel2 = new System.Windows.Forms.Panel();
+ this.labelCurrentItem = new System.Windows.Forms.Label();
+ this.progressBarCurrent = new System.Windows.Forms.ProgressBar();
+ this.lblAll = new System.Windows.Forms.Label();
+ this.panel1 = new System.Windows.Forms.Panel();
+ this.splitter2 = new System.Windows.Forms.Splitter();
+ this.panel2.SuspendLayout();
+ this.panel1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label3.Location = new System.Drawing.Point(11, 8);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(104, 12);
+ this.label3.TabIndex = 0;
+ this.label3.Text = "系统正在导入Bom";
+ //
+ // splitter1
+ //
+ this.splitter1.BackColor = System.Drawing.SystemColors.InactiveBorder;
+ this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.splitter1.Location = new System.Drawing.Point(0, 31);
+ this.splitter1.Name = "splitter1";
+ this.splitter1.Size = new System.Drawing.Size(462, 2);
+ this.splitter1.TabIndex = 10;
+ this.splitter1.TabStop = false;
+ //
+ // progressBarTotal
+ //
+ this.progressBarTotal.Location = new System.Drawing.Point(16, 71);
+ this.progressBarTotal.Name = "progressBarTotal";
+ this.progressBarTotal.Size = new System.Drawing.Size(438, 12);
+ this.progressBarTotal.Step = 1;
+ this.progressBarTotal.TabIndex = 4;
+ //
+ // panel2
+ //
+ this.panel2.Controls.Add(this.progressBarTotal);
+ this.panel2.Controls.Add(this.labelCurrentItem);
+ this.panel2.Controls.Add(this.progressBarCurrent);
+ this.panel2.Controls.Add(this.lblAll);
+ this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panel2.ForeColor = System.Drawing.SystemColors.ControlDark;
+ this.panel2.Location = new System.Drawing.Point(0, 31);
+ this.panel2.Name = "panel2";
+ this.panel2.Size = new System.Drawing.Size(462, 101);
+ this.panel2.TabIndex = 8;
+ //
+ // labelCurrentItem
+ //
+ this.labelCurrentItem.AutoSize = true;
+ this.labelCurrentItem.Location = new System.Drawing.Point(14, 16);
+ this.labelCurrentItem.Name = "labelCurrentItem";
+ this.labelCurrentItem.Size = new System.Drawing.Size(65, 12);
+ this.labelCurrentItem.TabIndex = 0;
+ this.labelCurrentItem.Text = "正在导入:";
+ //
+ // progressBarCurrent
+ //
+ this.progressBarCurrent.Location = new System.Drawing.Point(15, 33);
+ this.progressBarCurrent.Name = "progressBarCurrent";
+ this.progressBarCurrent.Size = new System.Drawing.Size(438, 12);
+ this.progressBarCurrent.Step = 1;
+ this.progressBarCurrent.TabIndex = 5;
+ //
+ // lblAll
+ //
+ this.lblAll.AutoSize = true;
+ this.lblAll.Location = new System.Drawing.Point(14, 55);
+ this.lblAll.Name = "lblAll";
+ this.lblAll.Size = new System.Drawing.Size(53, 12);
+ this.lblAll.TabIndex = 2;
+ this.lblAll.Text = "总进度:";
+ //
+ // panel1
+ //
+ this.panel1.BackColor = System.Drawing.SystemColors.ButtonHighlight;
+ this.panel1.Controls.Add(this.label3);
+ this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.panel1.Location = new System.Drawing.Point(0, 0);
+ this.panel1.Name = "panel1";
+ this.panel1.Size = new System.Drawing.Size(462, 31);
+ this.panel1.TabIndex = 7;
+ //
+ // splitter2
+ //
+ this.splitter2.BackColor = System.Drawing.SystemColors.InactiveBorder;
+ this.splitter2.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.splitter2.Location = new System.Drawing.Point(0, 132);
+ this.splitter2.Name = "splitter2";
+ this.splitter2.Size = new System.Drawing.Size(462, 2);
+ this.splitter2.TabIndex = 11;
+ this.splitter2.TabStop = false;
+ //
+ // FrmProgress
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(462, 134);
+ this.Controls.Add(this.splitter1);
+ this.Controls.Add(this.panel2);
+ this.Controls.Add(this.panel1);
+ this.Controls.Add(this.splitter2);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmProgress.cs b/插件库/Lskj.PubBomImportNew/FrmProgress.cs
new file mode 100644
index 0000000..01ce15b
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmProgress.cs
@@ -0,0 +1,958 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.IO;
+using System.Threading;
+using System.Net;
+using Lskj.Control;
+using System.Threading.Tasks;
+using Lskj.Core;
+using DevExpress.XtraGrid.Columns;
+using NPOI.SS.UserModel;
+using NPOI.SS.Util;
+using NPOI.XSSF.UserModel;
+using NPOI.HSSF.UserModel;
+using Lskj.Model;
+using Lskj.Control.BrowserSetting;
+using Lskj.Business;
+using Newtonsoft.Json.Linq;
+using Newtonsoft.Json;
+using Lskj.Business.Impl;
+using System.Text.RegularExpressions;
+using Lskj.Util;
+using System.Web;
+using Lskj.Control.Model;
+using System.Data.SqlClient;
+
+namespace Lskj.PubBomImportNew
+{
+
+ ///
+ /// 下载进度窗口
+ ///
+ public partial class FrmProgress : Form
+ {
+ public FrmMain frmMain;
+ public DynamicBomImportNew Model;
+ public System.Windows.Forms.Timer ImportTimer = new System.Windows.Forms.Timer();
+ public FrmProgress()
+ {
+ InitializeComponent();
+ this.ControlBox = false;
+ }
+ ///
+ /// bom结构上传(总部)
+ ///
+ ///
+ public void StartImportInFileByZB(List selectRows)
+ {
+ try
+ {
+ if (Directory.Exists("BomImportTemp"))
+ {
+ Directory.Delete("BomImportTemp", true);
+ }
+ Directory.CreateDirectory("BomImportTemp");
+ int execOrder = 1;
+ if (selectRows.Count > 1)
+ {
+ throw new Exception($"不允许选择多个文件");
+ }
+ DataRow mxRow = selectRows[0];
+ if (mxRow != null)
+ {
+ string mxDirPath = mxRow["BomFieldNameDir"] + "";
+ string productId = mxRow["BomMxMainProduct"] + "";
+ string addState = mxRow["BomMxAddState"] + "";
+ if (string.IsNullOrEmpty(Model.MainFieldDic))
+ {
+ throw new Exception($"字段对应关系配置异常");
+ }
+ if (string.IsNullOrEmpty(productId))
+ {
+ throw new Exception($"保存失败\r\n请重新进行BOM上传后保存");
+ }
+ if (addState.Equals("新增"))
+ {
+ DataRow billRow = BaseImpl.GetDataRowResult($"select qms_maddf_billdocument_id from qms_BillFileAddMaintab where qms_maddf_productid = '{productId}' and isnull(qms_maddf_addMode,'0') = '0'");
+ if (billRow != null)
+ {
+ throw new Exception($"物料编码{productId}的BOM新增单已存在审批流\r\n请进行审批");
+ }
+ DataRow billbomRow = BaseImpl.GetDataRowResult($"select top 1 billdocument_id from bom_BillTab where productid='{productId}'");
+ if (billRow != null)
+ {
+ throw new Exception($"物料编码{productId}的BOM建立单已存在\r\n请进行修改操作");
+ }
+ }
+ else
+ {
+ DataRow billbomRow = BaseImpl.GetDataRowResult($"select top 1 billdocument_id from bom_BillTab where productid='{productId}' and stepover = '1'");
+ if (billbomRow != null)
+ {
+ throw new Exception($"物料编码{productId}的BOM建立单已终审\r\n禁止修改操作");
+ }
+ }
+ FileInfo mxInfo = null;
+ if (!string.IsNullOrEmpty(mxDirPath))
+ {
+ mxInfo = new FileInfo(mxDirPath);
+ }
+ if (mxInfo != null)
+ {
+ DataTable mxfiletable = BaseImpl.GetDataTableResult($"select sname,fileId,webpath from p_fm_filetab where parentid in (select dirid from P_fm_DirectoryTab where pid = '{productId}' and dllcoid = '1000202') and speciesno = '010106' and sname = '{mxInfo.Name}'");
+ if (mxfiletable.Rows.Count > 0)
+ {
+ throw new Exception($"该文件已存在,请确认后再创建BOM");
+ }
+ FrmBillInfo frmBillInfo = new FrmBillInfo();
+ int.TryParse(Model.FirstRowIndex + "", out int firstRowIndex);
+ DataTable parentTable = ExcelToDatatable(mxInfo.FullName, Model, Model.SheetName, firstRowIndex);
+ parentTable = parentTable.Rows.Cast().Where(n => int.TryParse(n["序号"] + "", out _) && !string.IsNullOrEmpty(n["物料编码"] + "")).ToList().CopyToDataTable();
+ //StringBuilder stringBuilder = new StringBuilder();
+ //foreach (DataRow dataRow in parentTable.Rows)
+ //{
+ // string code = (dataRow["图号"] + "").Trim();
+ // if (code.StartsWith("QD"))
+ // {
+ // int createCode = ProductSaveUnique(code.Replace("'", "''"), (dataRow["名称"] + "").Replace("'", "''"), (dataRow["备注"] + "").Replace("'", "''"), "1000202_1", out string pid, out string msg);
+ // if ((createCode + "").Equals("-1"))
+ // {
+ // throw new Exception($"虚拟物料创建失败\r\n{msg}");
+ // }
+ // }
+ //}
+ //if (!string.IsNullOrEmpty(stringBuilder.ToString()))
+ //{
+ // SqlHelper.ExecuteNonQuery(stringBuilder.ToString());
+ //}
+ frmBillInfo.OnControlSourceBind += (s, args) =>
+ {
+ Task task = new Task(() =>
+ {
+ try
+ {
+ int.TryParse(Model.FirstRowIndex, out int index);
+ frmMain.FirstRowIndex = index;
+ bool isUpload = false;
+ string msg = "";
+ Dictionary maxBcFileDic = new Dictionary();
+ Dictionary fileTableDic = new Dictionary();
+ #region 新增或修改MX
+ frmBillInfo.OnBillAdd();
+ SetProcessBar(0, 0);
+ SetProcessMsg($"正在导入:{Path.GetFileName(mxInfo.FullName)}");
+ DataTable childTable = frmBillInfo.GcMainView.GridControl.DataSourceTable().Clone();
+ var mxCodeRows = parentTable.AsEnumerable();
+ string[] fieldDic = Model.MainFieldDic.Split(',');
+ foreach (DataRow parentRow in parentTable.Rows)
+ {
+ string code = (parentRow["物料编码"] + "").Trim();
+ int codeCount = mxCodeRows.Where(n => (n["物料编码"] + "").Trim().StartsWith(code)).Count();
+ if (codeCount > 1)//只允许存在一个
+ {
+ throw new Exception($"文件中的物料编码{code}重复,请修改");
+ }
+ DataRow childRow = childTable.NewRow();
+ foreach (string item in fieldDic)
+ {
+ string[] fieldArray = item.Split('^');
+ string key0 = fieldArray[0];
+ string key1 = fieldArray[1];
+ childRow[key0] = parentRow[key1] + "";
+ }
+ //childRow["ProductId"] = parentRow["物料编码"] + "";
+ //childRow["appellation"] = parentRow["名称"] + "";
+ //childRow["bak"] = parentRow["备注"] + "";
+ //childRow["tamount"] = parentRow["数量"] + "";
+ //childRow["amount"] = parentRow["数量"] + "";
+ childTable.Rows.Add(childRow);
+ }
+ SetProcessBar(20, 0);
+ if (childTable.Rows.Count == 0)
+ {
+ throw new Exception($"明细数据不能空");
+ }
+ SetProcessBar(40, 0);
+ string billMasterSql = $"select (select top 1 billdocument_id from bom_BillTab where productid='{productId}') as billdocument_id,'0' affirmer,'0' rtagid,'{productId}' as productid,'' as bak,'' as bombb,'' as bombc";
+ // 处理单据表头数据
+ DataRow masterRow = BillImpl.GetDataRowResult(billMasterSql);
+ SetProcessBar(60, 0);
+ frmBillInfo.AddOrUpdateBill(masterRow, childTable);
+ string guid = Guid.NewGuid() + "";
+ frmBillInfo.BillSaveSql(guid);
+ SetProcessBar(80, 0);
+ //上传文件
+ string uploadMxFileId = "";
+ if (mxfiletable.Rows.Count == 0)
+ {
+ isUpload = UploadFileToAudit(mxInfo.FullName, productId, "010106", out msg, out uploadMxFileId);
+ if (!isUpload)
+ {
+ throw new Exception($"{mxInfo.Name}附件上传失败\r\n{msg}");
+ }
+ }
+ StaticControl.RightMenuGridView.GridControl.Invoke(new Action(() =>
+ {
+ if (mxRow.Table.Columns.Contains("qms_laddf_FileId"))
+ {
+ int.TryParse(uploadMxFileId, out int qms_laddf_FileId);
+ mxRow["qms_laddf_FileId"] = qms_laddf_FileId;
+ }
+ if (mxRow.Table.Columns.Contains("qms_laddf_Exec"))
+ {
+ mxRow["qms_laddf_Exec"] = guid;
+ }
+ if (mxRow.Table.Columns.Contains("qms_laddf_ExecOrder"))
+ {
+ mxRow["qms_laddf_ExecOrder"] = execOrder;
+ }
+ }));
+ execOrder += 1;
+ #endregion
+ SetProcessBar(100, (1 / (parentTable.Rows.Count + 1)) * 100);
+ SetProcessLabelAllMsg($"总进度:{1}/{parentTable.Rows.Count + 1}");
+ this.Invoke(new Action(() =>
+ {
+ this.DialogResult = DialogResult.OK;
+ Close();
+ ImportTimer?.Dispose();
+ }));
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ this.Invoke(new Action(() =>
+ {
+ this.DialogResult = DialogResult.Cancel;
+ Close();
+ ImportTimer?.Dispose();
+ }));
+ }
+ });
+ task.Start();
+ };
+ frmBillInfo.OnLoad(Model);
+ frmMain.ParentView = frmBillInfo.GcMainView;
+ }
+ else
+ {
+ throw new Exception("文件不存在");
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageUtil.Show(ex.Message);
+ this.Invoke(new Action(() =>
+ {
+ this.DialogResult = DialogResult.Cancel;
+ Close();
+ ImportTimer?.Dispose();
+ }));
+ }
+ }
+ public int ProductSaveUnique(string spec, string appellation, string bak, string billSeq, out string productId, out string tipMsg)
+ {
+ productId = string.Empty;
+ tipMsg = string.Empty;
+ try
+ {
+ /*----------------------------------------------------
+ * 1) 组装存储过程参数
+ *--------------------------------------------------*/
+ // ProductId OUTPUT
+ SqlParameter pProductId = new SqlParameter("@ProductId", SqlDbType.VarChar, 100)
+ {
+ Direction = ParameterDirection.Output
+ };
+
+ // 存储过程 RETURN 值
+ SqlParameter pReturn = new SqlParameter("@return", SqlDbType.Int)
+ {
+ Direction = ParameterDirection.ReturnValue
+ };
+
+ // 中文字段可根据服务器排序规则切换参数类型
+ bool useNVar = ERPInfo.Instance.ChangeParameterType;
+
+ SqlParameter[] param =
+ {
+ new SqlParameter("@Spec", SqlDbType.VarChar, 50),
+ useNVar
+ ? new SqlParameter("@Appellation", SqlDbType.NVarChar, 200)
+ : new SqlParameter("@Appellation", SqlDbType.VarChar, 200),
+ useNVar
+ ? new SqlParameter("@Bak", SqlDbType.NVarChar, 200)
+ : new SqlParameter("@Bak", SqlDbType.VarChar, 200),
+ new SqlParameter("@BillSeq", SqlDbType.VarChar, 40),
+ pProductId,
+ pReturn
+ };
+
+ param[0].Value = spec;
+ param[1].Value = appellation ?? string.Empty;
+ param[2].Value = bak ?? string.Empty;
+ param[3].Value = string.IsNullOrWhiteSpace(billSeq) ? (object)DBNull.Value : billSeq;
+
+ SqlHelper.ExecuteNonQuery(
+ CommandType.StoredProcedure,
+ "sp_InsertProductUnique",
+ param);
+
+ /*----------------------------------------------------
+ * 3) 处理返回值与提示信息
+ *--------------------------------------------------*/
+ productId = pProductId.Value == DBNull.Value ? string.Empty
+ : pProductId.Value.ToString();
+ int retCode = (pReturn.Value == DBNull.Value) ? -1
+ : Convert.ToInt32(pReturn.Value);
+
+ // 根据返回值给出业务提示
+ switch (retCode)
+ {
+ case 0:
+ tipMsg = "保存成功!";
+ break;
+ case 1:
+ tipMsg = "规格已存在,直接返回现有编码。";
+ break;
+ default:
+ tipMsg = "发生异常,请查看日志!";
+ break;
+ }
+
+ return retCode;
+ }
+ catch (Exception ex)
+ {
+ tipMsg = ex.Message;
+ throw; // 继续向外抛,让调用层捕获日志
+ }
+ }
+
+ ///
+ /// 显示当前文件
+ ///
+ ///
+ private void SetProcessMsg(string text)
+ {
+ this.labelCurrentItem.Invoke(new Action(() =>
+ {
+ this.labelCurrentItem.Text = text;
+ }));
+ }
+ private void SetProcessLabelAllMsg(string text)
+ {
+ this.lblAll.Invoke(new Action(() =>
+ {
+ this.lblAll.Text = text;
+ }));
+ }
+ ///
+ /// 显示当前进度
+ ///
+ ///
+ ///
+ private void SetProcessBar(int current, int total)
+ {
+ this.Invoke(new Action(() =>
+ {
+ this.progressBarCurrent.Value = current;
+ this.progressBarTotal.Value = total;
+ }));
+ }
+ ///
+ /// 获取表格数据
+ ///
+ ///
+ ///
+ ///
+ ///
+ public DataTable ExcelToDatatable(string fileName, DynamicBomImportNew Model, string sheetName = "", int firstRowIndex = 0)
+ {
+ DataTable data = new DataTable();
+ FileStream fs;
+ IWorkbook workbook = null;
+ try
+ {
+ fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
+ if (fileName.IndexOf(".xlsx") > 0) // 2007版本
+ {
+ workbook = new XSSFWorkbook(fs);
+ }
+ else if (fileName.IndexOf(".xls") > 0) // 2003版本
+ {
+ workbook = new HSSFWorkbook(fs);
+ }
+ ISheet sheet;
+ if (!string.IsNullOrEmpty(sheetName))
+ {
+ sheet = workbook.GetSheet(sheetName);//根据给定的sheet名称获取数据
+ }
+ else
+ {
+ //也可以根据sheet编号来获取数据
+ sheet = workbook.GetSheetAt(0);//获取第几个sheet表(此处表示如果没有给定sheet名称,默认是第一个sheet表)
+ }
+ if (sheet != null)
+ {
+ int startRow = firstRowIndex + 1;
+ IRow firstRow = sheet.GetRow(firstRowIndex);
+ IRow bandRow = null;
+ int cellCount = firstRow.LastCellNum;
+ for (int i = firstRow.FirstCellNum; i < firstRow.LastCellNum; i++)//第一行列数循环
+ {
+ ICell titleCell = firstRow.GetCell(i);
+ ICell bandCell = null;
+ bool isBandTitle = false;
+ if (titleCell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, firstRowIndex, i);
+ startRow = mergrRange.LastRow + 1;
+ if (mergrRange != null)
+ {
+ if (mergrRange.FirstColumn < mergrRange.LastColumn && !Model.CustomerServiceApp)
+ {
+ isBandTitle = true;
+ bandRow = sheet.GetRow(mergrRange.LastRow + 1);
+ titleCell = firstRow.GetCell(mergrRange.FirstColumn);
+ bandCell = bandRow.GetCell(i);
+ CellRangeAddress bandMergrRange = FindMergedRegion(sheet, mergrRange.LastRow + 1, i);
+ if (bandMergrRange != null)
+ {
+ startRow = bandMergrRange.LastRow + 1;
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 2;
+ }
+ }
+ else
+ {
+ startRow = mergrRange.LastRow + 1;
+ }
+ }
+ }
+ string fieldName = "";
+ if (!isBandTitle || bandRow == null)
+ {
+ fieldName = GetCellValue(titleCell);
+ }
+ else
+ {
+ fieldName = $"{GetCellValue(titleCell)}|{GetCellValue(bandCell)}";
+ }
+ if (string.IsNullOrEmpty(fieldName) && titleCell.IsMergedCell)
+ {
+ cellCount -= 1;
+ continue;
+ }
+ DataColumn column = new DataColumn(fieldName);//获取标题
+ data.Columns.Add(column);//添加列
+ }
+ //最后一行的标号
+ int rowCount = sheet.LastRowNum;
+ for (int i = startRow; i <= rowCount; i++)//循环遍历所有行
+ {
+ IRow row = sheet.GetRow(i);//第几行
+ if (row == null)
+ {
+ continue; //没有数据的行默认是null;
+ }
+ //将excel表每一行的数据添加到datatable的行中
+ DataRow dataRow = data.NewRow();
+ int dataRowIndex = 0;
+ for (int j = firstRow.FirstCellNum; j < cellCount; j++)
+ {
+ ICell cell = row.GetCell(j);
+ if (cell != null && cell.IsMergedCell)
+ {
+ CellRangeAddress mergrRange = FindMergedRegion(sheet, i, j);
+ if (j == mergrRange.FirstColumn)
+ {
+ dataRow[dataRowIndex] = GetCellValue(row.GetCell(j));
+ dataRowIndex += 1;
+ }
+ else
+ {
+ cellCount += 1;
+ continue;
+ }
+ }
+ else
+ {
+ if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null
+ {
+ dataRow[dataRowIndex] = GetCellValue(row.GetCell(j));
+ dataRowIndex += 1;
+ }
+ }
+ }
+ data.Rows.Add(dataRow);
+ }
+ }
+ return data;
+ }
+ catch (IOException ex)
+ {
+ throw new IOException(string.Format("读取模板内容失败,原因:{0}", ex.Message));
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(string.Format("读取模板内容失败,原因:{0}", ex.Message));
+ }
+ }
+ ///
+ /// 获取单元格值
+ ///
+ ///
+ ///
+ public static string GetCellValue(ICell cell)
+ {
+ string cellValue = "";
+ try
+ {
+ if (cell != null)
+ {
+ // 根据单元格类型获取值
+ switch (cell.CellType)
+ {
+ case CellType.String:
+ cellValue = cell.StringCellValue;
+ break;
+ case CellType.Numeric:
+ cellValue = cell.NumericCellValue.ToString();
+ break;
+ case CellType.Boolean:
+ cellValue = cell.BooleanCellValue.ToString();
+ break;
+ case CellType.Formula://单元格中带有公式,根据类型继续判断
+ switch (cell.CachedFormulaResultType)
+ {
+ case CellType.String:
+ cellValue = cell.StringCellValue;
+ break;
+ case CellType.Numeric:
+ cellValue = cell.NumericCellValue.ToString();
+ break;
+ case CellType.Boolean:
+ cellValue = cell.BooleanCellValue.ToString();
+ break;
+ case CellType.Blank:
+ break;
+ default:
+ cellValue.ToString();
+ break;
+ }
+ break;
+ default:
+ cellValue = cell.ToString();
+ break;
+ }
+ }
+ }
+ catch (Exception)
+ {
+ }
+ return cellValue;
+ }
+ ///
+ /// 获取合并区域
+ ///
+ ///
+ ///
+ ///
+ ///
+ private CellRangeAddress FindMergedRegion(ISheet sheet, int rowIndex, int columnIndex)
+ {
+ int mergedRegionsCount = sheet.NumMergedRegions;
+
+ for (int i = 0; i < mergedRegionsCount; i++)
+ {
+ CellRangeAddress mergedRegion = sheet.GetMergedRegion(i);
+ if (mergedRegion.IsInRange(rowIndex, columnIndex))
+ {
+ return mergedRegion; // 返回合并区域
+ }
+ }
+ return null; // 未找到合并区域
+ }
+ ///
+ /// 上传文件
+ ///
+ ///
+ ///
+ ///
+ private bool UploadFile(string filePath, string idValue, out string msg, out string outFileId)
+ {
+ bool isUpload = false;
+ string File = filePath;
+ string returnMsg = "";
+ string fileId = "";
+ string postUrl = "";
+ try
+ {
+ //获取文件信息
+ FileInfo fileInfo = new FileInfo(File);
+ string suffix = Path.GetExtension(File);
+ string name = fileInfo.Name;
+ DateTime creationTime = fileInfo.CreationTime;
+ byte[] fileBytes = ConvertFileToBytes(File);
+ string fileStream = Convert.ToBase64String(fileBytes);
+ string userId = ERPInfo.Instance.UserId;
+ DateTime uploadTime = DateTime.Now;
+ string speciesno = "010102";
+ // 检查扩展名是否为 .xlsx 或 .xls
+ if (suffix.Equals(".xlsx", StringComparison.OrdinalIgnoreCase) ||
+ suffix.Equals(".xls", StringComparison.OrdinalIgnoreCase))
+ {
+ speciesno = "010101";
+ }
+ //上传文件到服务器目录
+ postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&speciesno={8}&folder={3}&totsize={4}&position={5}&filename={6}&method={7}&confirm=1";
+ if (!string.IsNullOrEmpty(idValue))
+ {
+ string token = "";
+ string loginUrl = $"{SystemInfo.Instance.OAUrl}/Api/SysUserAjaxApi.ashx";
+ HttpTools.setting("application/x-www-form-urlencoded", null, null, HttpTools.Encode.UTF8);
+ Dictionary loginPmsDic = new Dictionary();
+ loginPmsDic.Add("method", "Login");
+ loginPmsDic.Add("username", HttpUtility.UrlEncode(ERPInfo.Instance.UserName));
+ loginPmsDic.Add("password", HttpUtility.UrlEncode(ERPInfo.Instance.InPassWord));
+ HttpWebResponse loginResponse = HttpTools.Post(loginUrl, "", loginPmsDic, HttpTools.Method.POST, out CookieCollection loginCookie, out string loginResult);
+ if (loginResponse != null && !string.IsNullOrEmpty(loginResult))
+ {
+ JObject jObject = JsonConvert.DeserializeObject(loginResult);
+ if (jObject.ContainsKey("success"))
+ {
+ if ((jObject["success"] + "").Equals("True"))
+ {
+ if (jObject.ContainsKey("token"))
+ {
+ token = jObject["token"] + "";
+ }
+ }
+ }
+ }
+ if (!string.IsNullOrEmpty(token))
+ {
+ //string selectSql = $"select * from P_fm_FileTab where parentid in (select dirid from P_fm_DirectoryTab where pid = '{idValue}' and dllcoid = '1000202') and speciesno = '{speciesno}' and sname = '{name.Replace(" ", "")}'";
+ //DataTable deleteTable = BaseImpl.GetDataTableResult(selectSql);
+ //if (deleteTable != null && deleteTable.Rows.Count > 0)
+ //{
+ // foreach (DataRow deleteRow in deleteTable.Rows)
+ // {
+ // string field = HttpUtility.UrlEncode(deleteRow["fileId"] + "");
+ // string webpath = HttpUtility.UrlEncode(deleteRow["webpath"] + "");
+ // //删除文件
+ // string deleteUrl = "{0}Api/FileUploadApi.ashx?fileId={1}&filename={2}&method={3}";
+ // deleteUrl = string.Format(deleteUrl, SystemInfo.Instance.OAUrl, field, webpath, "DoDelete");
+ // HttpHelper.Setting("application/x-www-form-urlencoded", null, null);
+ // Dictionary deleteHeaderDic = new Dictionary();
+ // deleteHeaderDic.Add("Authorization", $"Bearer {token}");
+ // HttpWebResponse deleteWebResponse = HttpHelper.Post(deleteUrl, fileStream, null, deleteHeaderDic, out string deleteResult);
+ // }
+ //}
+ postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, "1000202", HttpUtility.UrlEncode(idValue), "file", fileBytes.Length, 0, HttpUtility.UrlEncode(name), "DoWebUpload", speciesno);
+ HttpTools.setting("application/x-www-form-urlencoded", null, null);
+ string result = "";
+ CookieCollection cookieCollection = null;
+ Dictionary headerDic = new Dictionary();
+ headerDic.Add("Authorization", $"Bearer {token}");
+ HttpWebResponse webResponse = HttpTools.Post(postUrl, fileStream, null, headerDic, HttpTools.Method.POST, out cookieCollection, out result);
+ if (webResponse != null && !string.IsNullOrEmpty(result))
+ {
+ JObject jsonObject = (JObject)JsonConvert.DeserializeObject(result);
+ string isSuccess = jsonObject["success"] + "";
+ if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase))
+ {
+ if (jsonObject.ContainsKey("other"))
+ {
+ fileId = jsonObject["other"] + "";
+ }
+ isUpload = true;
+ }
+ else
+ {
+ if (jsonObject.ContainsKey("msg"))
+ {
+ returnMsg = jsonObject["msg"] + "";
+ }
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = "上传请求失败";
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = loginResult;
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = "上传节点值不能为空";
+ isUpload = false;
+ }
+ }
+ catch (Exception ex)
+ {
+ returnMsg = ex.Message;
+ throw new Exception($"文件{Path.GetFileName(filePath)}上传失败\r\n{ex.Message}");
+ isUpload = false;
+ }
+ msg = returnMsg;
+ outFileId = fileId;
+ return isUpload;
+ }
+ private bool UploadFileToAudit(string filePath, string idValue, string speciesno, out string msg, out string outFileId)
+ {
+ bool isUpload = false;
+ string File = filePath;
+ string returnMsg = "";
+ string fileId = "";
+ string postUrl = "";
+ try
+ {
+ //获取文件信息
+ FileInfo fileInfo = new FileInfo(File);
+ string suffix = Path.GetExtension(File);
+ string name = fileInfo.Name;
+ DateTime creationTime = fileInfo.CreationTime;
+ byte[] fileBytes = ConvertFileToBytes(File);
+ string fileStream = Convert.ToBase64String(fileBytes);
+ string userId = ERPInfo.Instance.UserId;
+ DateTime uploadTime = DateTime.Now;
+ string code = "";
+ string namepattern = @"^(.*-S[A-Z]\d*)(.*)$";
+ Match namematch = Regex.Match(Path.GetFileNameWithoutExtension(fileInfo.Name).Trim(), namepattern);
+ if (namematch.Success)
+ {
+ code = namematch.Groups[1].Value;
+ }
+ //上传文件到服务器目录
+ postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&speciesno={8}&folder={3}&totsize={4}&position={5}&filename={6}&method={7}&confirm=1";
+ if (!string.IsNullOrEmpty(idValue))
+ {
+ string token = "";
+ string loginUrl = $"{SystemInfo.Instance.OAUrl}/Api/SysUserAjaxApi.ashx";
+ HttpTools.setting("application/x-www-form-urlencoded", null, null, HttpTools.Encode.UTF8);
+ Dictionary loginPmsDic = new Dictionary();
+ loginPmsDic.Add("method", "Login");
+ loginPmsDic.Add("username", HttpUtility.UrlEncode(ERPInfo.Instance.UserName));
+ loginPmsDic.Add("password", HttpUtility.UrlEncode(ERPInfo.Instance.InPassWord));
+ HttpWebResponse loginResponse = HttpTools.Post(loginUrl, "", loginPmsDic, HttpTools.Method.POST, out CookieCollection loginCookie, out string loginResult);
+ if (loginResponse != null && !string.IsNullOrEmpty(loginResult))
+ {
+ JObject jObject = JsonConvert.DeserializeObject(loginResult);
+ if (jObject.ContainsKey("success"))
+ {
+ if ((jObject["success"] + "").Equals("True"))
+ {
+ if (jObject.ContainsKey("token"))
+ {
+ token = jObject["token"] + "";
+ }
+ }
+ }
+ }
+ if (!string.IsNullOrEmpty(token))
+ {
+ //string selectSql = $"select * from P_fm_FileTab where parentid in (select dirid from P_fm_DirectoryTab where pid = '{idValue}' and dllcoid = '1000202') and speciesno = '{speciesno}' and sname = '{name.Replace(" ", "")}'";
+ //DataTable deleteTable = BaseImpl.GetDataTableResult(selectSql);
+ //if (deleteTable != null && deleteTable.Rows.Count > 0)
+ //{
+ // foreach (DataRow deleteRow in deleteTable.Rows)
+ // {
+ // string field = HttpUtility.UrlEncode(deleteRow["fileId"] + "");
+ // string webpath = HttpUtility.UrlEncode(deleteRow["webpath"] + "");
+ // //删除文件
+ // string deleteUrl = "{0}Api/FileUploadApi.ashx?fileId={1}&filename={2}&method={3}";
+ // deleteUrl = string.Format(deleteUrl, SystemInfo.Instance.OAUrl, field, webpath, "DoDelete");
+ // HttpHelper.Setting("application/x-www-form-urlencoded", null, null);
+ // Dictionary deleteHeaderDic = new Dictionary();
+ // deleteHeaderDic.Add("Authorization", $"Bearer {token}");
+ // HttpWebResponse deleteWebResponse = HttpHelper.Post(deleteUrl, fileStream, null, deleteHeaderDic, out string deleteResult);
+ // }
+ //}
+ postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, "1000202", HttpUtility.UrlEncode(idValue), "file", fileBytes.Length, 0, HttpUtility.UrlEncode(name), "DoWebUpload", speciesno);
+ HttpTools.setting("application/x-www-form-urlencoded", null, null);
+ string result = "";
+ CookieCollection cookieCollection = null;
+ Dictionary headerDic = new Dictionary();
+ headerDic.Add("Authorization", $"Bearer {token}");
+ HttpWebResponse webResponse = HttpTools.Post(postUrl, fileStream, null, headerDic, HttpTools.Method.POST, out cookieCollection, out result);
+ if (webResponse != null && !string.IsNullOrEmpty(result))
+ {
+ JObject jsonObject = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(result);
+ string isSuccess = jsonObject["success"] + "";
+ if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase))
+ {
+ if (jsonObject.ContainsKey("other"))
+ {
+ fileId = jsonObject["other"] + "";
+ BaseImpl.ExecSqlValue($"update p_fm_filetab set isdisabled = 2 where fileid = '{fileId}'");
+ }
+ isUpload = true;
+ }
+ else
+ {
+ if (jsonObject.ContainsKey("msg"))
+ {
+ returnMsg = jsonObject["msg"] + "";
+ }
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = "上传请求失败";
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = loginResult;
+ isUpload = false;
+ }
+ }
+ else
+ {
+ returnMsg = "上传节点值不能为空";
+ isUpload = false;
+ }
+ }
+ catch (Exception ex)
+ {
+ returnMsg = ex.Message;
+ throw new Exception($"文件{Path.GetFileName(filePath)}上传失败\r\n{ex.Message}");
+ isUpload = false;
+ }
+ msg = returnMsg;
+ outFileId = fileId;
+ return isUpload;
+ }
+ ///
+ /// 记录附件变更数据
+ ///
+ ///
+ ///
+ public string BuildBomFileTabSql(DataTable dt, string billno)
+ {
+ if (dt == null || dt.Rows.Count == 0) return string.Empty;
+ var sb = new StringBuilder();
+ sb.AppendLine("BEGIN TRANSACTION;");
+ foreach (DataRow row in dt.Rows)
+ {
+ int fileId = Convert.ToInt32(row["文件ID"]);
+ string fileName = row["附件名称"].ToString().Replace("'", "''");// 单引号转义
+ string speciesNo = row["目录ID"].ToString().Replace("'", "''");// → speciesno
+ string dirName = row["目录名称"].ToString().Trim();// → pid
+ int pid = 0;
+ int.TryParse(dirName, out pid); //目录名称若为数字则转换,否则默认为 0
+ sb.AppendFormat(
+ @"IF NOT EXISTS (
+ SELECT 1 FROM bom_filetab
+ WHERE fileid = {0}
+ AND speciesno = '{1}'
+ AND pid = {2})
+ INSERT INTO bom_filetab (billno, fileid, filename, speciesno, pid)
+ VALUES ('{4}',{0}, N'{3}', '{1}', {2});
+ ", fileId, speciesNo, pid, fileName, billno);
+ }
+ sb.AppendLine("COMMIT TRANSACTION;");
+ return sb.ToString();
+ }
+ ///
+ /// 附件转换byte[]
+ ///
+ /// 附件路径
+ /// 二进制
+ private byte[] ConvertFileToBytes(string filePath)
+ {
+ byte[] bytContent = null;
+ System.IO.FileStream fs = null;
+ System.IO.BinaryReader br = null;
+ try
+ {
+ fs = new FileStream(filePath, System.IO.FileMode.Open);
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ finally
+ {
+ if (fs != null)
+ br = new BinaryReader((Stream)fs);
+ if (br != null)
+ bytContent = br.ReadBytes((Int32)fs.Length);
+ if (fs != null)
+ fs.Dispose();
+ }
+ return bytContent;
+ }
+ ///
+ /// 解析code信息
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void GetFileCodeInfo(string sourceCode, out string code, out string name, out string bb, out int bc)
+ {
+ string namepattern = @"^(.*-S[A-Z]\d*)(.*)$";
+ string pattern = @"^(.*?)(\d+)?$";
+ string childcode = "";
+ string childname = "";
+ string childsourceCode = "";
+ string childsourceBB = "";
+ int childsourceBC = 0;
+ Match namematch = Regex.Match(Path.GetFileNameWithoutExtension(sourceCode).Trim(), namepattern);
+ if (namematch.Success)
+ {
+ childcode = namematch.Groups[1].Value.Trim();
+ childname = namematch.Groups[2].Value.Trim();
+ }
+ Match match = Regex.Match(childcode, pattern);
+ if (match.Success)
+ {
+ childsourceCode = match.Groups[1].Value;
+ int.TryParse(match.Groups[2].Value, out childsourceBC);//版次
+ Match bbMatch = Regex.Match(childsourceCode, @"^.*?([A-Za-z]+)(\d*)$");
+ if (bbMatch.Success)
+ {
+ childsourceBB = bbMatch.Groups[1].Value.Trim();
+ }
+ }
+ code = childsourceCode;
+ name = childname;
+ bb = childsourceBB;
+ bc = childsourceBC;
+ }
+ ///
+ /// 解析code信息
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ private bool GetOtherFileCodeInfo(string fileName, out string code, out string spec, out string name, out string extension, out string bb, out int bc)
+ {
+ string namepattern = @"^(\S+)\s+(\S*-S[A-Z][0-9]*)\s+(.+)(\.[^.]+)$";
+ string pattern = @"^(.*?)(\d+)?$";
+ var match = Regex.Match(fileName, namepattern);
+ code = "";
+ spec = "";
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/FrmProgress.resx b/插件库/Lskj.PubBomImportNew/FrmProgress.resx
new file mode 100644
index 0000000..7eaf40a
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/FrmProgress.resx
@@ -0,0 +1,1253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD///8q////ZP///5P///+9////1f///+n////x////8/////P////z////8///
+ //P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8///
+ //P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8///
+ //P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8///
+ //P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8///
+ //P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8f//
+ /+n////V////vf///5X///9k////KgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yj///+D////0///////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////0///
+ /4P///8oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /zr///+t////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////+t////OgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///xj///+l////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////pf///xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9e////8///
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////9f//
+ /14AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA////mf//////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///73/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////70AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD////J////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////8kAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////v///////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////78AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP///53/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /50AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///9W////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////58f//9/H/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////79f//9/H///ry////////////////////
+ ///////////////////////////////////////////////8+v//9vH///v3////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////Dv//////////////////////////////////////////////////////w2z//6hD//+y
+ Rv//skb//7JG//+yRv//skb//6ZD///Jff////////////////////////jn//++cP//pTD//5sP//+Z
+ D///oSX//7VZ///juv/////////////////////////////15f//skP//6JD///Gd///////////////
+ ////6Mb//6ZD//+lQ///5b///////////////////8Z3//+lQ///qEP//+bD/////////////+/Y//++
+ bf//qjr//54U//+ZD///nBD//6c1//+9bf//8tr////////////////////////////////////////U
+ oP//sE3//54b//+YD///nRf//6xC///Nj/////7/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////+PL///nx///6
+ 8v//+vL///ry///68v//+vL///ry///58f//9/H/////////////////////////////////////////
+ /////////////////w4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///+t////////////////////////
+ //////////////////////////////+gGP//dwD//4kA//98AP//dwD//3cA//93AP//YAD//58X////
+ ///////////////t0///kw///38A//+HAP//ggD//4AA//+DAP//ggD//4IA///Ogv//////////////
+ /////////+/X//+GAP//bQD//6Yp//////////////////+4UP//cgD//3IA//+zRP//////////////
+ ////pin//3IA//93AP//2KD/////////////xnX//20A//97AP//fAD//30A//99AP//gQD//4EA//+M
+ Af//47z////////////////////////68P//qDz//4EA//+DAP//ggD//4AA//+BAP//ggD//4AA//+e
+ KP//8tr/////////////////////////////////////////////////////////////////////////
+ ////////////////////8t3//6tG//+YDv//nBD//5sN//+QAP//kQD//5kI//+fEf//mQf//44A//+J
+ AP//lxj//9iX////////////////////////////////////////////////rQAAAAAAAAAAAAAAAAAA
+ AAAAAAAA////Kv///////////////////////////////////////////////////////////603//+I
+ AP//lAL//6oy//+yRv//skb//7JG//+mQ///yX3//////////////v3//6Ia//+CAP//kgD//4wA//+s
+ Nf//skb//54T//+LAP//kAD//4EA///lwP//////////////////8dz//5YA//+BAP//skb/////////
+ ////+vP//5gG//+PAP//kAD//5YC///47/////////////+yRv//hQD//4kA///drf/////////////A
+ Zf//cQD//6kw///EcP//y4H//8Js//+bEf//kQD//4UA//+aCP//+/X//////////////v7//6Qp//9/
+ AP//kQD//4gA//+lJP//skb//6sy//+OAP//jAD//4QA//+WDf//9+z/////////////////////////
+ //////////////////////////////////////////////////////////r0//+fFv//fAD//4sA//+A
+ AP//iwD//7JC//+fF///hwD//3wA//+VAP//sD///6sy//+GAP//eAD//9+x////////////////////
+ ////////////////////////////LAAAAAAAAAAAAAAAAAAAAAD///+3////////////////////////
+ ////////////////////////////////////rTf//4cA//+KAP//6Mf/////////////////////////
+ ///////////////er///gwD//5MA//+OAP//26r/////////////+e///60///+KAP//gwD//7BB////
+ ///////////////x3P//lgD//4EA//+yRv/////////////Xnv//gwD//5QA//+SAP//gwD//9WY////
+ /////////7JG//+FAP//iQD//92t/////////////9CN///Liv////////////////////////br//+W
+ DP//kAD//4YA///gtf/////////////Hdf//fAD//5QA//+JAP//zo7//////////////////+O///+X
+ EP//jgD//38A//+1Rv//////////////////////////////////////////////////////////////
+ ////////////////////3a3//4IA//+SAP//piD//7JK//+VEP//vGH////////lwP//mSX//8aD////
+ +v///////+O5//93AP//rzz///////////////////////////////////////////////+3AAAAAAAA
+ AAAAAAAA////Hv////////////////////////////////////////////////////////////////+t
+ N///hwD//4sA///ht////////////////////////////////////////8Jr//+CAP//hQD//7tW////
+ ////////////////////8t3//40A//+LAP//mQf///rz//////////////Hc//+WAP//gQD//7JG////
+ /////////7E9//+AAP//pST//6oy//99AP//sDr/////////////skb//4UA//+JAP//3a3/////////
+ /////////////////////////////////////////5cM//+QAP//hQD//9ig////////+vL//5cC//+O
+ AP//hAD//8Nt/////////////////////////////+jE//+JAP//kQD//4oA///t0///////////////
+ ///////////////////////////////////////////////////////////////Wnf//hwD//40A//+U
+ Ev//7tD///7+//+tPf//uFP////////45v//jwn//5cR/////////////4wA//+oLP//////////////
+ //////////////////////////////////////8eAAAAAAAAAAD///+F////////////////////////
+ /////////////////////////////////////////603//+HAP//iwD//+C0////////////////////
+ ////////////////////t0///4UA//+EAP//1Zr/////////////////////////////ohj//4kA//+S
+ AP//7dT/////////////8dz//5YA//+BAP//skb////////26f//kQD//4EA///Eb///4rj//4AA//+R
+ AP//9eb///////+yRv//hQD//4kA///drf///////////////////////////////////////+G9//+i
+ Kf//jAD//5MA//+KAP//7dP////////er///hwD//5EA//+UBf//+fH/////////////////////////
+ /////////641//+JAP//gQD//8p+////////////////////////////////////////////////////
+ /////////////////////////9mk//+GAP//oRD//48D//+HAP//79n///////+hHP//wGb////////Q
+ h///eQD///ft////////jAD//6oy////////////////////////////////////////////////////
+ /4UAAAAAAAAAAP///9v/////////////////////////////////////////////////////////////
+ ////rTf//4cA//+LAP//4LT///////////////////////////////////////+1S///hgD//4gA///X
+ nv////////////////////////////+mKf//iAD//5AA///pyv/////////////x3P//lgD//4EA//+x
+ RP///////9CN//+CAP//gwD//92t////////lAD//3sA///Pi////////7FE//+FAP//iQD//92t////
+ /////////////////////////9qs//+qQP//iQD//4oA//+WAP//eQD//7pV/////////////86J//+E
+ AP//igD//6sw////////////////////////////////////////xXL//4QA//+FAP//uVX/////////
+ ////////////////////////////////////////////////////////////////////2aT//4EA//+d
+ IP//8tj//9Wi//+nK///8d3///////+XAv//2aP///////+9X///4rj///////+SAP//qC3/////////
+ ////////////////////////////////////////////2wAAAAD///8k////////////////////////
+ //////////////////////////////////////////////+tN///hwD//4sA///gtP//////////////
+ /////////////////////////7ZO//+GAP//hwD//9WZ/////////////////////////////6Un//+I
+ AP//kAD//+nK//////////////Hc//+WAP//gQD//7ZN////////qy7//4IA//+UAP//9+z///////+0
+ Rv//dQD//6sv////////tk3//4UA//+JAP//3a3///////////////////v1//+vSv//ggD//4YA//+T
+ AP//hgD//4MA//+2V///////////////////y4L//4QA//+HAP//skX/////////////////////////
+ ///////////////Lgf//hAD//4YA//+0SP//////////////////////////////////////////////
+ ///////////////////////////////ZpP//iAD//4UA//+6WP///////+fF//+uOv//26///7lU//+h
+ G///yob//9GN/////////////40A//+pL///////////////////////////////////////////////
+ ////////////JP///2b/////////////////////////////////////////////////////////////
+ /////////603//+HAP//iwD//+C0////////////////////////////////////////tk7//4YA//+H
+ AP//1Zn/////////////////////////////pSb//4gA//+QAP//6cv/////////////8dz//5YA//+B
+ AP//wmv///jt//+OAP//ggD//7JC/////////////9ql//+BAP//jgD///ju///Ca///hQD//4kA///d
+ rf//////////////////rTX//3sA//+XAP//iAD//4kA//+rQ///3bP////////////////////////Q
+ jP//hQD//4gA//+uOf///////////////////////////////////////8Z2//+EAP//hgD//7ZN////
+ /////////////////////////////////////////////////////////////////////////9mk//+I
+ AP//lwD//30A///Baf///////9ql//+aFv//s0j//7VK//+jJP//skX//82G//+3T///gAD//7JF////
+ //////////////////////////////////////////////////////9m////mf//////////////////
+ ////////////////////////////////////////////////////rTf//4cA//+LAP//4LT/////////
+ //////////////////////////////+2Tv//hgD//4cA///Vmf////////////////////////////+l
+ Jv//iAD//5AA///py//////////////x3P//lgD//4EA///Ie///0Y///4QA//+EAP//15//////////
+ ////+/b//5oI//97AP//0pL//8h5//+FAP//iQD//92t/////////////9yq//+BAP//lwD//4sA//+k
+ MP//4bz//////////////////////////////////9+x//+IAP//jwD//5sM///+/P//////////////
+ ////////////////////tEP//4gA//+CAP//wmv/////////////////////////////////////////
+ ////////////////////////////////////2aT//4gA//+VAP//kQH//6w3///Nh///0Y///7ZP//+2
+ T///t0///7tT//+vP///lgH//4MA//+IAP//s0j/////////////////////////////////////////
+ /////////////////5n///+/////////////////////////////////////////////////////////
+ //////////////+tN///hwD//4sA///gtP///////////////////////////////////////7ZO//+G
+ AP//hwD//9WZ/////////////////////////////6Um//+IAP//kAD//+nL//////////////Hc//+W
+ AP//hgD//7ta//+wQP//hQD//5cF///68///////////////////ulb//3gA//+xQf//ulj//4oA//+J
+ AP//3a3/////////////wmv//4EA//+MAP//pCv/////////////////////////////////////////
+ ////+vL//5cD//+OAP//hAD//9SR//////////////////////////////bn//+PAf//kwD//4QA///d
+ rf/////////////////////////////////////////////////////////////////////////////Z
+ pP//iAD//44A//+aBv////////ry//+tOP//r0b//7VL//+yRf//r03///bp////////qDD//3oA//+y
+ Rv//////////////////////////////////////////////////////////v////9n/////////////
+ /////////////////////////////////////////////////////////603//+HAP//iwD//+C0////
+ ////////////////////////////////////tk7//4YA//+HAP//1Zn/////////////////////////
+ ////pSb//4gA//+QAP//6cv/////////////8dz//5YA//+NAP//qS///58V//+BAP//uFH/////////
+ ///////////////gtP//hAD//50N//+oLP//kQD//4kA///drf/////////////GdP//gQD//4gA//+v
+ Pv/////////////////////////////47f///v3/////////////w23//30A//+RAP//kAP//+O+////
+ ///////////////69f//pzT//4kA//+IAP//nQ////36//////////////////////////////79////
+ /////////////////////////////////////////9mk//+IAP//jwD//5gF///8+P///////604//+g
+ JP//pyn//6Yn//+bIf//5sL///////+3UP//dQD//7JG////////////////////////////////////
+ ///////////////////////Z////6f//////////////////////////////////////////////////
+ ////////////////////rTf//4cA//+LAP//4LT///////////////////////////////////////+2
+ Tv//hgD//4cA///Vmf////////////////////////////+lJv//iAD//5AA///py//////////////x
+ 3P//lgD//5IA//+YBf//lgD//4UA///drv/////////////////////////+//+fEf//jAD//5gG//+W
+ AP//iQD//92t/////////////+fE//+EAP//kQD//5AA//+5Vv//3rD//+S8///Zov//qkr//7dR////
+ /v/////////////89///nBf//4MA//+OAP//jwD//7lU///Lgf//xHD//58b//+JAP//kAD//4AA///g
+ tP///////////////////////+7X//+/a///umX//7pi///Fdf//+fH/////////////////////////
+ ////16D//4cA//+PAP//mAX///v1////////tUz//6s8//+xQf//sED//6Q1///mwv///////7dQ//92
+ AP//sEL//////////////////////////////////////////////////////////+n////z////////
+ //////////////////////////////////////////////////////////////+nJ///fgD//4IA///e
+ rv///////////////////////////////////////7BA//99AP//fgD//9KR////////////////////
+ /////////54V//9/AP//hwD//+fH//////////////DZ//+OAP//iQD//40A//+EAP//mAT///36////
+ /////////////////////////8Bm//95AP//jQD//44A//+AAP//2qf//////////////////8Rq//98
+ AP//hwD//4IA//+IAP//iwD//4UA//9oAP//qzL////////////////////////04P//myD//38A//+H
+ AP//gwD//4MA//+DAP//hwD//4QA//+DAP//0Yn////////////////////////oyP//qCz//8yJ///t
+ 1P//7db//75j//+vPP//9un////////////////////////Yov//gwD//5AA//+YBf////////////+v
+ Pf//oSv//6ox//+nK///ozb///nv////////qTL//3cA//+vPP//////////////////////////////
+ ////////////////////////////8f////P/////////////////////////////////////////////
+ /////////////////////////7FB//+NDf//kQ3//+K4////////////////////////////////////
+ ////ulf//4wN//+NDf//157/////////////////////////////qjH//44N//+WDf//6s7/////////
+ ////8t7//5sN//+XDf//nBD//4sN///Ebv//////////////////////////////////6Mj//5IN//+a
+ Df//mw3//48N///fsf///////////////////////9OX//+hKv//kQD//4kA//+HAP//jQD//48L///I
+ ef/////////////////////////////+9v//wHT//50g//+OAP//iQD//4sA//+UBf//q0T//+S9////
+ //////////////////////7//7NH///qzf//683///rt///x3f//6sz//9Wa///AZv//////////////
+ //////////Tl//+RAP//gQD//5YA//+5Vf//uVb//7ZN//++YP//vmL//71f///CZ///wmr//604//+K
+ AP//eQD//9CO///////////////////////////////////////////////////////////z////8///
+ ////////////////////////////////////////////////////////////////////+/X///ny///5
+ 8v///fv////////////////////////////////////////79v//+fL///ny///9+v//////////////
+ ///////////////69P//+fL///ny///+/P/////////////+/f//+vL///ny///68v//+PL/////////
+ /////////////////////////////////////PL///ny///68v//+fL///37////////////////////
+ ///////////////u3P//4rz//+G8///oyP//+u7/////////////////////////////////////////
+ /////////+nR///gvP//473///Pm///////////////////////////////////mwv//vmL////////Q
+ jv//wXb//8Vy///v2f///////7ta///58P///////////////////////+Gx//+VFf//iQD//3sA//98
+ AP//ggD//4EA//+AAP//gQD//4AA//97AP//fAD//4sA//+/Yv//////////////////////////////
+ //////////////////////////////////P////z////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////9yq///Db////////9KR///Adf//zYf//+nK////////v2T///Tk////
+ //////////////////////////30///jwf//5L3//+XA///lwP//5cD//+XA///lwP//5cD//+W////i
+ u///7tn/////////////////////////////////////////////////////////////////////8///
+ //P/////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////9ef//7NI////
+ ////1Jj//9ml///Rj///3a3///bq//+2Tv//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////z////8///////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////y4H//7dR///z4P//27L//+nH///v2///qS7//92r////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //P////z////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////wmz//7hZ///Qkv//zo///7FG///Tk///////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////8/////P/////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////7tf//8+R///SmP//+Oz/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////z////8///////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////P////z////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////8/////P/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////z////8///////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////////P////z////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////8/////P/////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////z/+vO8//rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///r
+ zv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzv//687//+vO///rzvP/kQDz/5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+RAP//kQD//5EA//+R
+ AP//kQD//5EA//+RAP//kQD//5EA8/+TAPP/kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+T
+ AP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwD//5MA//+TAP//kwDz/5cD8/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+X
+ A/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lgL//5YA//+WAf//lgH//5YB//+WAf//lgH//5YB//+WAf//lgH//5YC//+W
+ Av//lgH//5YB//+WAf//lgH//5YB//+WAf//lgH//5YB//+WAf//lgH//5YA//+XAv//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5gD//+XAP//jAD//4QA//+GAP//iAD//4gA//+H
+ AP//hwD//4cA//+GAP//hgD//4YA//+GAP//hgD//4YA//+GAP//hgD//4YA//+GAP//hwD//4cA//+H
+ AP//hwD//4cA//+HAP//iAD//5EA//+aA///lwP//5cD//+XA///lwP//5gD//+XAv//iQD//4cA//+I
+ AP//iAD//4gA//+IAP//hwD//4wA//+ZA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5gD//+XA///jAD//4sA//+LAP//iwD//4sA//+LAP//iwD//4wA//+XA///mAP//5cD//+X
+ A///lwP//5cD//+XA///mAP//44A//+KAP//igD//4oA//+JAP//iQD//4gA//+LAP//lwP//5gD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+X
+ A/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+Z
+ A///jQD//4YA//+jJf//wGn//9KS///ZpP//2KD//9ab///Vmf//1Jf//9OU///Tlf//05X//9OW///S
+ k///0pL//9OV///Tlf//05X//9OU///Ul///1Zr//9WZ///VmP//1pv//9ed///apP//skX//4wB//+X
+ A///lwP//5cD//+XA///lQL//5cE//+tOP//sUP//68+//+vPv//rz7//68+//+yRv//qS7//5QC//+W
+ Av//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lgL//5cE//+lJf//qCv//6cp//+n
+ Kf//pyn//6cp//+oK///pSX//5cE//+WAv//lwP//5cD//+XA///lwP//5YC//+WAv//oyH//6ku//+p
+ Lv//qjH//6s0//+sN///sD///6sz//+WAv//lgL//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///mQP//4cA//+UCv//1J3/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////Jfv//ggD//5cD//+XA///lwP//5cD//+PAP//mQf///35////
+ ///////////////////////////////pyf//igD//5UA//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+QAP//mQf///fq///////////////////////////////////36v//mQf//5AA//+X
+ A///lwP//5cD//+XA///lAD//5AA///rzf//////////////////////////////////9ej//5QA//+S
+ AP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5kD//+I
+ AP//mBT///Le////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////8Js//+F
+ AP//lwP//5cD//+XA///lwP//5AA//+ZB///+Ov//////////////////////////////////+S+//+L
+ AP//lQD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5AA//+ZB///+vD/////////
+ //////////////////////////rw//+ZB///kAD//5cD//+XA///lwP//5cD//+UAP//kAD//+3T////
+ ///////////////////////////////w3P//lAD//5IA//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///kAH//4wA///x1///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////wmz//4UA//+XA///lwP//5cD//+XA///kAD//5kH///1
+ 5f//////////////////////////////////4rn//4sA//+VAP//lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///kAD//5kH///15f//////////////////////////////////9eX//5kH//+Q
+ AP//lwP//5cD//+XA///lwP//5QA//+QAP//6cn//////////////////////////////////+7W//+U
+ AP//kgD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5gC//+B
+ AP//y3v/////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////C
+ bP//hQD//5cD//+XA///lwP//5cD//+QAP//mQf///Xl///////////////////////////////////i
+ uf//iwD//5UA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////
+ ///////////////////////////////15f//mQf//5AA//+XA///lwP//5cD//+XA///lAD//5AA///p
+ yf//////////////////////////////////7tb//5QA//+SAP//lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///jwD//5gK///8+f//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////8Js//+FAP//lwP//5cD//+XA///lwP//5AA//+Z
+ B///9eX//////////////////////////////////+K5//+LAP//lQD//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5AA//+ZB///9eX///////////////////////////////////Xl//+Z
+ B///kAD//5cD//+XA///lwP//5cD//+UAP//kAD//+nJ///////////////////////////////////u
+ 1v//lAD//5IA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+D
+ AP//v2H/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////wmz//4UA//+XA///lwP//5cD//+XA///kAD//5kH///15f//////////////////////////////
+ ////4rn//4sA//+VAP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///kAD//5kG///1
+ 5P//////////////////////////////////9eb//5kI//+QAP//lwP//5cD//+XA///lwP//5QA//+Q
+ AP//6cn//////////////////////////////////+7W//+UAP//kgD//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lgH//4cA///er///////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////Jfv//ggD//5cD//+XA///lwP//5cD//+Q
+ AP//mQf///Xl///////////////////////////////////iuf//iwD//5UA//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+QAP//mAb///Xm///////////////////////////////////1
+ 5f//mQf//5AA//+XA///lwP//5cD//+XA///lAD//5AA///pyf//////////////////////////////
+ ////7tb//5QA//+SAP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+S
+ AP//lQH///Tl///////////////////////////////////////////////////89P//3bH//9ae///Y
+ oP//2KH//9ih///Yof//2KH//9ih///Yof//2KH//9ih///Yof//2KH//9ih///Yof//2KH//9ih///Y
+ of//2qb//7JF//+MAf//lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////////////////////
+ /////////+K5//+LAP//lQD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//48A//+c
+ Dv//+/b///////////////////////////////////Lg//+WAf//kQD//5cD//+XA///lwP//5cD//+U
+ AP//kAD//+nJ///////////////////////////////////u1v//lAD//5IA//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//4wA//+kIf//////////////////////////////
+ ////////////////////3aX//5UV//+GAP//hwD//4gA//+IAP//iAD//4gA//+IAP//iAD//4gA//+I
+ AP//iAD//4gA//+IAP//iAD//4gA//+IAP//iAD//4gA//+JAP//kQD//5oD//+XA///lwP//5cD//+X
+ A///kAD//5kH///15f//////////////////////////////////4rn//4sA//+VAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///iQD//6ku////////////////////////////////////
+ ////7tb//5QA//+SAP//lwP//5cD//+XA///lwP//5QA//+QAP//6cn/////////////////////////
+ /////////+7W//+UAP//kgD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///iAD//68+/////////////////////////////////////////////+fG//+DAP//hwD//5cA//+W
+ Af//lgH//5YA//+WAP//lgD//5YA//+WAP//lgD//5YA//+WAP//lgD//5YA//+WAP//lgD//5YA//+W
+ AP//lgD//5YA//+XAv//lwP//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////////////////////
+ ///////////////iuf//iwD//5UA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5gD//+B
+ AP//wmv////////////////////////////////////////pyv//jwD//5QA//+XA///lwP//5cD//+X
+ A///lAD//5AA///pyf//////////////////////////////////7tb//5QA//+SAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+GAP//tU3/////////////////////////
+ ////////////////////rTb//4EA//+ZA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5AA//+ZB///9eX//////////////////////////////////+K5//+LAP//lQD//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+YA///kQD//4QA///rzv//////////////////////////////
+ /////////+K5//+KAP//lQD//5cD//+XA///lwP//5cD//+UAP//kAD//+nJ////////////////////
+ ///////////////u1v//lAD//5IA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//4YA//+4Uv////////////////////////////////////////Xm//+TAP//kgD//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///kAD//5kH///15f//////////////
+ ////////////////////4rn//4sA//+VAP//lwP//5cD//+XA///lwP//5cD//+YA///lgD//4gA//96
+ AP//wmb/////////////////////////////////////////////1Zn//4QA//+XAv//lwP//5cD//+X
+ A///lwP//5QA//+QAP//6cn//////////////////////////////////+7W//+UAP//kgD//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///hgD//7dP////////////////////
+ ////////////////////4bj//4oA//+WAP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+QAP//mQf///Xl///////////////////////////////////er///egD//4UA//+H
+ AP//iAD//4cA//+HAP//hQD//4IA//+JAP//oSn//9KW////////////////////////////////////
+ //////////////+4Tf//hQD//5cD//+XA///lwP//5cD//+XA///lAD//5AA///pyf//////////////
+ ////////////////////7NH//4cA//+FAP//iwD//4sA//+LAP//iwD//4sA//+LAP//iwD//4sA//+L
+ AP//iwD//4wA//+PAP//kgD//5YA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+GAP//tU3////////////////////////////////////////cq///iQD//5UA//+X
+ A///lwP//5gD//+WAP//iAD//4MA//+DAP//gwD//4MA//+DAP//gwD//4MA//+DAP//gwD//4MA//+D
+ AP//gwD//4MA//+DAP//iQD//5kE//+XBP//lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////
+ /////////////////////////+nK//+oP///sED//7FC//+xQf//sUP//7RI//+7Xv//yYL//+K/////
+ ////////////////////////////////////////////////////9ef//48A//+SAP//lwP//5cD//+X
+ A///lwP//5cD//+UAP//kAD//+nJ///////////////////////////////////x3f//pSn//6Qp//+o
+ Lf//qC3//6gt//+oLf//qC3//6gt//+oLf//qC3//6gt//+nKv//oyH//50S//+TAP//iAD//4YA//+V
+ AP//mQP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+X
+ A/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//4YA//+1Tv//////////////
+ /////////////////////////96u//+KAP//lQD//5cD//+YBP//lAL//4oA//+0Sf//y4H//8uB///L
+ gf//y4H//8uB///Lgf//y4H//8uB///Lgf//y4H//8uB///Lgf//y4H//8uB//++YP//kgL//5YC//+X
+ A///lwP//5cD//+XA///kAD//5kH///15f//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////////+6Vf//ggD//5gD//+XA///lwP//5cD//+XA///lwP//5QA//+QAP//6cn/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////v//+vP//+7V///Zpf//skz//4kA//+JAP//mQP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///hgD//7VM////////////////////////////////////////3q///4oA//+V
+ AP//lwP//5cC//+HAP//wnL/////////////////////////////////////////////////////////
+ //////////////////////////Lf//+KAP//lQD//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////v//yX3//4YA//+VAv//lwP//5cD//+X
+ A///lwP//5cD//+XA///lAD//5AA///pyf//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////37f//5oa//+FAP//mQP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+HAP//tEn/////////
+ ///////////////////////////////er///igD//5UA//+XA///kQD//5cH///9+v//////////////
+ ////////////////////////////////////////////////////////////////////5Lz//4wA//+V
+ AP//lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////79//+zR///egD//5kD//+XA///lwP//5cD//+XA///lwP//5cD//+UAP//kAD//+nJ////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////+e3//54j//+GAP//mQP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//4cA//+zRv///////////////////////////////////////96v//+K
+ AP//lQD//5cD//+OAP//nhL///35////////////////////////////////////////////////////
+ ///////////////////////////////kvP//jAD//5UA//+XA///lwP//5cD//+XA///kAD//5kH///1
+ 5f//////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////+wQv//ggD//5kD//+X
+ A///lwP//5cD//+XA///lwP//5QA//+QAP//6cn/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////9+b//48D//+PAP//mAT//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///hwD//7JG////
+ ////////////////////////////////////3q///4oA//+VAP//lwP//48A//+dEv//+/X/////////
+ /////////////////////////////////////////////////////////////////////////+S8//+M
+ AP//lQD//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////7//+YEv//igD//5gD//+XA///lwP//5cD//+XA///lAD//5AA///p
+ yf//////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////0Ij//4EA//+Y
+ Av//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+HAP//tEn////////////////////////////////////////e
+ r///igD//5UA//+XA///jgD//54O////////////////////////////////////////////////////
+ ////////////////////////////////////5Lz//4wA//+VAP//lwP//5cD//+XA///lwP//5AA//+Z
+ B///9eX/////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////+Cw//+F
+ AP//lgH//5cD//+XA///lwP//5cD//+UAP//kAD//+nJ////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////+/f//mw///48A//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//4YA//+1
+ TP///////////////////////////////////////96v//+KAP//lQD//5cD//+UAP//jAD//+rK////
+ ///////////////////////////////////////////////////////////////////////////////q
+ yv//iwD//5UA//+XA///lwP//5cD//+XA///kAD//5kH///15f//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////6ck//+KAP//lwP//5cD//+XA///lwP//5QA//+Q
+ AP//6cn/////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////A
+ Y///gwD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///hgD//7ZQ////////////////////////////////////
+ ////3a3//4oA//+VAP//lwP//5gD//+MAP//nhz//+O8///68v//+vL///ry///68v//+vL///ry///6
+ 8v//+vL///ry///68v//+vL///ry///68v//+vL//+Cy//+NAP//lQD//5cD//+XA///lwP//5cD//+Q
+ AP//mQf///Xl///////////////////////////////////79f//vGn//6Uz//+oLf//qjD//6ow//+q
+ MP//qjD//6ow//+qMP//qjD//6gt//+lM///vGr///v1////////////////////////////////////
+ ////w27//4MA//+XA///lwP//5cD//+XA///lAD//5AA///pyf//////////////////////////////
+ /////////9qh//+pPv//py3//6kw//+qMP//qjD//6ow//+qMP//qjD//6ow//+pL///pi3//6tG///j
+ tP///////////////////////////////////////9ig//+FAP//lwH//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+G
+ AP//uFL////////////////////////////////////////drv//iQD//5YA//+XA///lwP//5oD//+M
+ AP//jgD//5wQ//+cEP//nBD//5wQ//+cEP//nBD//5wQ//+cEP//nBD//5wQ//+cEP//nBD//5wQ//+c
+ EP//mw3//5YD//+XA///lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////////////////////
+ /////fv//6ov//94AP//iQD//4sA//+KAP//igD//4oA//+KAP//igD//4oA//+KAP//iwD//4kA//94
+ AP//qjD///78///////////////////////////////////Tlf//hQD//5cC//+XA///lwP//5cD//+U
+ AP//kAD//+nJ///////////////////////////////////Yn///fQD//4MA//+LAP//igD//4oA//+K
+ AP//igD//4oA//+KAP//igD//4oA//+LAP//gQD//4IA///iuf//////////////////////////////
+ ////58b//40A//+UAP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//4YA//+2Tf//////////////////////////////
+ /////////+bD//+MAP//lQD//5cD//+XA///lwP//5gD//+UAP//jwD//48A//+PAP//jwD//48A//+P
+ AP//jwD//48A//+PAP//jwD//48A//+PAP//jwD//48A//+RAP//mAP//5cD//+XA///lwP//5cD//+X
+ A///kAD//5kH///15f/////////////////////////////gs///ggD//5YA//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5YA//+DAP//4LX/////////////////////////
+ /////////9yq//+JAP//lgD//5cD//+XA///lwP//5QA//+QAP//6cn/////////////////////////
+ /////////6Mg//+FAP//mAT//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+Z
+ A///gAD//689///////////////////////////////////w2v//lAD//5IA//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///iAD//68+////////////////////////////////////////+vL//5kF//+PAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////////////////////
+ /////////9WY//+GAP//lwD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwD//4YA///WnP//////////////////////////////////4LT//4oA//+VAP//lwP//5cD//+X
+ A///lAD//5AA///pyf///////////////////////////////v//oBj//44A//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+JAP//qjH/////////////////////////
+ //////////Tk//+YA///kQD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+LAP//pST/////////////////////////
+ ////////////////////t1H//38A//+ZA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5AA//+ZB///9eX/////////////////////////////153//4gA//+WAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+WAP//iAD//9ih////////////////////
+ ///////////////gtP//igD//5UA//+XA///lwP//5cD//+UAP//kAD//+nJ////////////////////
+ ///////////+//+iHf//jgD//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//4oA//+sNv//////////////////////////////////9OT//5gE//+RAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5EA//+YBP//9+v////////////////////////////////////////w2///igD//4UA//+Y
+ AP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///kAD//5kH///15f//////////////
+ ///////////////Vmf//hAD//5gA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5gA//+EAP//1pz//////////////////////////////////9uo//+JAP//lgD//5cD//+X
+ A///lwP//5QA//+QAP//6cn//////////////////////////////////58V//+NAP//lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///hwD//6ku////////////////////
+ ///////////////w2///lQD//5IA//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lgD//4kA///iuf//////////////
+ ///////////////////////////////ktv//lRT//4IA//+DAP//gwD//4QA//+EAP//hAD//4QA//+E
+ AP//hAD//4QA//+FAP//hQD//4UA//+FAP//hQD//4UA//+FAP//hgD//4YA//+QAP//mgT//5cD//+X
+ A///lwP//5cD//+QAP//mQf///Xl/////////////////////////////+3T//+IAP//jAD//5gC//+W
+ Av//lgH//5YB//+WAf//lgH//5YB//+WAf//lgH//5YC//+YAv//iwD//4gA///t1P//////////////
+ ////////////////////0Y///4QA//+XAv//lwP//5cD//+XA///lAD//5AA///pyf//////////////
+ ////////////////////skX//3oA//+XAP//lwL//5YB//+WAf//lgH//5YB//+WAf//lgH//5YB//+W
+ Af//lwL//5YA//94AP//wGX//////////////////////////////////+bD//+MAP//lQD//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///ggD//8Vy///////////////////////////////////////////////////8
+ 8v//1qX//8mA///Kf///yX3//8h7///Hef//x3b//8Z0///Fcv//xG///8Nt///Ca///wWj//8Bm//+/
+ ZP//vmH//71f//+8Xf//vF3//6Yn//+RAv//lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////
+ /////////////////////////8+G//+EAP//ggD//4YA//+GAP//hgD//4YA//+GAP//hgD//4YA//+G
+ AP//hgD//4IA//+FAP//z4f////////////////////////////////////////AZv//hAD//5cD//+X
+ A///lwP//5cD//+UAP//kAD//+nJ///////////////////////////////////y4P//nB///4AA//+F
+ AP//hgD//4YA//+GAP//hgD//4YA//+GAP//hgD//4YA//+EAP//gAD//6Yv///47v//////////////
+ ////////////////////05X//4QA//+XAv//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+X
+ A/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+MAP//oBb/////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////yHr//4MA//+X
+ A///lwP//5cD//+XA///kAD//5kH///15f///////////////////////////////////////+vL///Q
+ lf//0pL//9OV///Tlf//05X//9OV///Tlf//05X//9OV///Skv//0JX//+vM////////////////////
+ /////////////////////////6ck//+LAP//lwP//5cD//+XA///lwP//5QA//+QAP//6cn/////////
+ ///////////////////////////////+9///1aT//9CP///Tlf//05X//9OV///Tlf//05X//9OV///T
+ lf//05T//9CP///Yqf////////////////////////////////////////////+3Sv//hQD//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cB//+CAP//2qD/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////Dbf//hQD//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////rzv//iQD//5UA//+X
+ A///lwP//5cD//+XA///lAD//5AA///pyf//////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////+O3//5IB//+SAP//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///mAP//4sA//+Y
+ EP////3/////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////8Js//+F
+ AP//lwP//5cD//+XA///lwP//5AA//+ZB///9eX/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////7RG//+EAP//mAP//5cD//+XA///lwP//5cD//+UAP//kAD//+nJ////
+ ////////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////CZP//ggD//5gC//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///mQL//4IA//+ySv//////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////wmz//4UA//+XA///lwP//5cD//+XA///kAD//5kH///1
+ 5f//////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////cpv//hAD//5UB//+X
+ A///lwP//5cD//+XA///lwP//5QA//+QAP//6cn/////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////6MP//4cA//+TAf//lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwL//4EA//+3Wf//////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////C
+ bP//hQD//5cD//+XA///lwP//5cD//+QAP//mQf///Xl////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////2ab//4oA//+OAP//mAP//5cD//+XA///lwP//5cD//+XA///lAD//5AA///p
+ yf//////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////+fG//+RB///igD//5kD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+YA///lgH//4IA//+lMf//47//////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////8Nw//+EAP//lwP//5cD//+XA///lwP//48A//+Z
+ B////vr/////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////5cP//7VT//+HAP//jgD//5kD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+UAP//kAD//+7W////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ //////////Lj///Eev//jQD//4oA//+aA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+YA///mAL//4cA//+LAP//r0X//9Sb///s1P///Pf/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////xXP//4QA//+XA///lwP//5cD//+XA///kQD//5kH///s0P//9+v///Xn///15///9ef///Xn///1
+ 5///9ef///Xn///15///9ef///Xn///15///9ef///Xn///15///9ej///bp///15v//7tb//+W////W
+ nv//w3D//6gv//+MAP//hAD//5UA//+ZA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5QA//+Q
+ AP//58X///37///9+v///fr///36///9+v///fr///36///9+v///fr///36///9+v///fr///36///9
+ +v///fr///36///9+////Pj///nw///v2P//5L7//9GR//+1U///lQb//4IA//+RAP//mQT//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///mAP//5QA//+H
+ AP//hQD//5IA//+fF///qjD//605//+tOP//rTf//603//+tN///rTf//603//+tN///rTf//603//+t
+ N///rTf//603//+tN///rTf//603//+tN///rTj//68+//+gGf//kwL//5cD//+XA///lwP//5cD//+X
+ A///lwP//5kH//+aC///mQj//5kI//+ZCP//mQj//5kI//+ZCP//mQj//5kI//+ZCP//mQj//5kI//+Z
+ CP//mQj//5kI//+ZCP//mQn//5kH//+UAP//jQD//4cA//+EAP//igD//5QA//+YA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwL//5YC//+fFv//oRz//6Eb//+hG///oRv//6Eb//+h
+ G///oRv//6Eb//+hG///oRv//6Eb//+hG///oRv//6Eb//+hG///oRv//6Ec//+gGP//nA///5QA//+M
+ AP//hQD//4UA//+RAP//mAL//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XAf//kwD//44A//+KAP//iQD//4kA//+J
+ AP//iQD//4kA//+JAP//iQD//4kA//+JAP//iQD//4kA//+JAP//iQD//4kA//+JAP//iQD//4kA//+J
+ AP//iAD//5EA//+ZA///lwP//5cD//+XA///lwP//5cD//+XA///kQD//5AA//+QAP//kAD//5AA//+Q
+ AP//kAD//5AA//+QAP//kAD//5AA//+QAP//kAD//5AA//+QAP//kAD//5AA//+QAP//kAD//5IA//+V
+ AP//lgH//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///mAP//48A//+NAP//jQD//40A//+NAP//jQD//40A//+NAP//jQD//40A//+NAP//jQD//40A//+N
+ AP//jQD//40A//+NAP//jQD//44A//+PAP//kgD//5UA//+XAv//lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwPz/5cD8/+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD8/+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwPz/5cD8/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwPz/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD8/+X
+ A/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwPx/5cD6f+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A+n/lwPZ/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD2f+XA7//lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwO//5cDmf+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA5n/lwNm/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cDZv+XAyT/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwMkAAAAAP+XA9v/lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD2wAAAAAAAAAA/5cDhf+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwOFAAAAAAAAAAD/lwMe/5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XAx4AAAAAAAAAAAAAAAD/lwO3/5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwO3AAAAAAAAAAAAAAAAAAAAAP+X
+ Ayr/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XAyoAAAAAAAAAAAAAAAAAAAAAAAAAAP+XA6v/lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwOtAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/5cDDv+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XAw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5cDVv+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwNWAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/5cDnf+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cDnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5cDv/+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA78AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5cDyf+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwPJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAA/5cDvf+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cDvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5cDmf+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A5kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA/5cDYP+XA/P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA/P/lwNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/5cDGP+X
+ A6P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwOj/5cDGAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+XAzr/lwOt/5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwOt/5cDOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD/lwMo/5cDg/+XA9P/lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+X
+ A///lwP//5cD//+XA///lwP//5cD//+XA///lwP//5cD//+XA9P/lwOD/5cDKAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+X
+ Ayr/lwNk/5cDk/+XA73/lwPV/5cD6f+XA/H/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+X
+ A/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+X
+ A/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+X
+ A/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+X
+ A/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+X
+ A/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPz/5cD8/+XA/P/lwPx/5cD6f+XA9X/lwO9/5cDlf+X
+ A2T/lwMqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAA//////AAAAAAAAAAAAAAAA/////AAAAAAAAAAA
+ AAAAAD////AAAAAAAAAAAAAAAAAP///gAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAAH//wAAAAAA
+ AAAAAAAAAAAA//4AAAAAAAAAAAAAAAAAAH/8AAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAAAAAAH/gA
+ AAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP4AAAAAAAAAAAAAAAAAAAB+AAAAAAAAAAAAAAAAAA
+ AAfAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAA
+ AAAAAAABgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAgAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAABgAAAAAAA
+ AAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAB+AA
+ AAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAP+AAAAAAAAAAAAAAAAAAAH/gAAAAAAAAAAAAAAAAA
+ AB/8AAAAAAAAAAAAAAAAAAA//gAAAAAAAAAAAAAAAAAAf/8AAAAAAAAAAAAAAAAAAP//gAAAAAAAAAAA
+ AAAAAAH//+AAAAAAAAAAAAAAAAAH///wAAAAAAAAAAAAAAAAD////AAAAAAAAAAAAAAAAD////8AAAAA
+ AAAAAAAAAAD/////8AAAAAAAAAAAAAAP//8=
+
+
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/Lskj.PubBomImportNew.csproj b/插件库/Lskj.PubBomImportNew/Lskj.PubBomImportNew.csproj
new file mode 100644
index 0000000..63cb521
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/Lskj.PubBomImportNew.csproj
@@ -0,0 +1,141 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {8C507C31-8C19-46C9-82F8-85DDCAE69190}
+ Library
+ Lskj.PubBomImport
+ Lskj.PubBomImport
+ v4.0
+ 512
+ true
+
+
+ true
+ full
+ false
+ ..\..\Debug\Lib\
+ DEBUG;TRACE
+ prompt
+ 4
+ x86
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+ False
+ ..\..\引用DLL\Newtonsoft.Json.dll
+
+
+ ..\..\..\引用DLL\NPOI.dll
+
+
+ ..\..\..\引用DLL\NPOI.OOXML.dll
+
+
+ D:\工作\lserp_cs_6.0\引用DLL\NPOI.OpenXml4Net.dll
+
+
+ D:\工作\lserp_cs_6.0\引用DLL\NPOI.OpenXmlFormats.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ FrmBillInfo.cs
+
+
+ Form
+
+
+ FrmMain.cs
+
+
+ Form
+
+
+ FrmProgress.cs
+
+
+
+ True
+ True
+ Settings.settings
+
+
+
+
+
+ FrmBillInfo.cs
+
+
+ FrmMain.cs
+
+
+ FrmProgress.cs
+
+
+
+
+
+ {7EAFCCC2-A18F-49E9-85C6-A984966CFD01}
+ Lskj.Business
+
+
+ {447CDC40-659F-4CCA-9ED6-8E818B4CF8BF}
+ Lskj.Control
+
+
+ {2A1BE6AC-1077-491B-A754-C5822FE8121E}
+ Lskj.Core
+
+
+ {308B9B18-9BE2-495C-9C64-EED81D567813}
+ Lskj.Data
+
+
+ {52BC40E0-C0C6-4F78-996B-CAE028D209CA}
+ Lskj.Model
+
+
+ {A51BF642-6543-4DE3-8948-83F558B72BD4}
+ Lskj.Util
+
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/Properties/AssemblyInfo.cs b/插件库/Lskj.PubBomImportNew/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..090c46f
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/Properties/AssemblyInfo.cs
@@ -0,0 +1,9 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("Lskj.PubBomImport")]
+[assembly: AssemblyDe
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/Properties/Settings.Designer.cs b/插件库/Lskj.PubBomImportNew/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..be00b06
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/Properties/Settings.Designer.cs
@@ -0,0 +1,14 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace Lskj.PubBomImport.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttrib
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/Properties/Settings.settings b/插件库/Lskj.PubBomImportNew/Properties/Settings.settings
new file mode 100644
index 0000000..ecda03c
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/Properties/Settings.settings
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/插件库/Lskj.PubBomImportNew/app.config b/插件库/Lskj.PubBomImportNew/app.config
new file mode 100644
index 0000000..7078b78
--- /dev/null
+++ b/插件库/Lskj.PubBomImportNew/app.config
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file