UAS_出货标签管理.cs 87 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760
  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Windows.Forms;
  5. using System.Text.RegularExpressions;
  6. using System.Text;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Diagnostics;
  10. using LabelManager2;
  11. using UAS_LabelMachine.PublicMethod;
  12. using UAS_LabelMachine.Entity;
  13. using UAS_特殊解析规则;
  14. using UAS_LabelMachine.PublicForm;
  15. using System.Threading;
  16. using System.IO;
  17. using System.Globalization;
  18. using System.Threading.Tasks;
  19. namespace UAS_LabelMachine
  20. {
  21. public partial class UAS_出货标签打印 : Form
  22. {
  23. //自适应屏幕
  24. AutoSizeFormClass asc = new AutoSizeFormClass();
  25. DataHelper dh;
  26. DataTable dt;
  27. StringBuilder sql = new StringBuilder();
  28. /// <summary>
  29. /// CodeSoft新建打印机引擎
  30. /// </summary>
  31. ApplicationClass lbl;
  32. /// <summary>
  33. /// 单盘打印文件
  34. /// </summary>
  35. Document SingleDoc;
  36. /// <summary>
  37. /// 中盒打印文件
  38. /// </summary>
  39. Document MidDoc;
  40. /// <summary>
  41. /// 外箱打印文件
  42. /// </summary>
  43. Document OutBoxDoc;
  44. /// <summary>
  45. /// Loading窗口
  46. /// </summary>
  47. SetLoadingWindow stw;
  48. /// <summary>
  49. /// 弹窗线程
  50. /// </summary>
  51. Thread thread;
  52. /// <summary>
  53. /// 当前品牌
  54. /// </summary>
  55. string PI_ID;
  56. /// <summary>
  57. /// 当前扫描的所在行
  58. /// </summary>
  59. int CurrentRowIndex = 0;
  60. /// <summary>
  61. /// 正则表达式用于项目匹配
  62. /// </summary>
  63. Regex reg;
  64. bool logout = false;
  65. DataTable SingleLabelParam;
  66. DataTable MidLabelParam;
  67. DataTable OutLabelParam;
  68. //主表数据源
  69. DataTable LabelInfDataTable;
  70. //缓存单盘数据数据的DataTable
  71. DataTable SingleBoxCacheData;
  72. /// <summary>
  73. /// 存放单盘的ID
  74. /// </summary>
  75. List<string> SingleID = new List<string>();
  76. /// <summary>
  77. /// 单盘的打印参数
  78. /// </summary>
  79. List<string> SingleBoxArgument = new List<string>();
  80. /// <summary>
  81. /// 中盒缓存数据
  82. /// </summary>
  83. DataTable MidBoxCacheData;
  84. /// <summary>
  85. /// 存放中盒的ID和盒号
  86. /// </summary>
  87. Dictionary<string, string> MidIDAndOutboxcode = new Dictionary<string, string>();
  88. /// <summary>
  89. /// 中盒的打印参数
  90. /// </summary>
  91. List<string> MidBoxArgument = new List<string>();
  92. /// <summary>
  93. /// 全部采集
  94. /// </summary>
  95. bool AllCollect = false;
  96. /// <summary>
  97. /// 是否全选
  98. /// </summary>
  99. bool AllChecked = false;
  100. int CloumnCount = 0;
  101. /*需要重绘的Cell*/
  102. Dictionary<DataGridViewCell, bool> PaintCell = new Dictionary<DataGridViewCell, bool>();
  103. /// <summary>
  104. /// 是否通过选择Combox来改变打开的文件
  105. /// </summary>
  106. bool ComBoxClickChangeLabelDoc = false;
  107. List<string> SingleParam = new List<string>();
  108. List<string> MidParam = new List<string>();
  109. List<string> OutParam = new List<string>();
  110. string CurrentPrCode = "";
  111. string CurrentZXBZ = "";
  112. string CurrentUnit = "";
  113. public UAS_出货标签打印(string Master)
  114. {
  115. InitializeComponent();
  116. Text = Text + "-" + Master;
  117. }
  118. protected override void WndProc(ref Message m)
  119. {
  120. //拦截双击标题栏、移动窗体的系统消息
  121. if (m.Msg != 0xA3)
  122. {
  123. base.WndProc(ref m);
  124. }
  125. }
  126. private void 贴标机条码打印_Load(object sender, EventArgs e)
  127. {
  128. //杀死之前全部未关闭的进程
  129. Process[] processes = System.Diagnostics.Process.GetProcessesByName("lppa");
  130. for (int i = 0; i < processes.Length; i++)
  131. {
  132. processes[i].Kill();
  133. }
  134. //用计时器重置数据库链接
  135. LogManager.DoLog("程序启动,登陆人员【" + User.UserName + "】");
  136. dh = SystemInf.dh;
  137. CheckForIllegalCrossThreadCalls = false;
  138. CloumnCount = LabelInf.Columns.Count;
  139. pi_inoutno.Focus();
  140. //将本地读取的打印机设置进Combox,并选中默认打印机
  141. MidBoxCacheData = new DataTable();
  142. SingleBoxCacheData = new DataTable();
  143. Point pt = new Point();
  144. //禁止所有列的排序
  145. foreach (DataGridViewColumn dgv in LabelInf.Columns)
  146. {
  147. dgv.SortMode = DataGridViewColumnSortMode.NotSortable;
  148. }
  149. int ScreenWidth = Screen.GetWorkingArea(pt).Width;
  150. //设置获取当前屏幕大小自动全屏但是保留任务栏
  151. Rectangle ScreenArea = Screen.GetWorkingArea(this);
  152. Top = 0;
  153. Left = 0;
  154. Width = ScreenArea.Width;
  155. Height = ScreenArea.Height;
  156. OutboxCapacity.Value = Properties.Settings.Default.OutboxCapacity;
  157. asc.controllInitializeSize(this);
  158. asc.controlAutoSize(this);
  159. //实例化打印进程
  160. try
  161. {
  162. lbl = new ApplicationClass();
  163. }
  164. catch (Exception)
  165. {
  166. MessageBox.Show("未安装CodeSoft软件或者版本不正确");
  167. }
  168. RefreshDBConnect.Interval = 60000;
  169. RefreshDBConnect.Start();
  170. }
  171. //只执行一次窗体自适应
  172. bool AutoSized = false;
  173. private void 贴标机条码打印_SizeChanged(object sender, EventArgs e)
  174. {
  175. if (!AutoSized)
  176. {
  177. asc.controlAutoSize(this);
  178. AutoSized = true;
  179. }
  180. }
  181. private void GenerateBarCode_Click(object sender, EventArgs e)
  182. {
  183. 生成条码 form = new 生成条码(pi_inoutno.Text);
  184. form.FormClosed += LoadGridData;
  185. BaseUtil.SetFormCenter(form);
  186. form.ShowDialog();
  187. }
  188. private void LabelMaintain_Click(object sender, EventArgs e)
  189. {
  190. 客户标签维护 form = new 客户标签维护();
  191. BaseUtil.SetFormCenter(form);
  192. if (SingleDoc != null)
  193. SingleDoc.Close();
  194. if (MidDoc != null)
  195. MidDoc.Close();
  196. if (OutBoxDoc != null)
  197. OutBoxDoc.Close();
  198. form.FormClosed += LabelFormClose;
  199. form.ShowDialog();
  200. }
  201. private void LabelFormClose(object sender, EventArgs e)
  202. {
  203. if (GetGridOnly.Checked)
  204. GetInOutInfAndLabelFile();
  205. else
  206. {
  207. GetGridOnly.Checked = true;
  208. GetInOutInfAndLabelFile();
  209. GetGridOnly.Checked = false;
  210. }
  211. }
  212. //输入框Enter事件
  213. private void Input_KeyDown(object sender, KeyEventArgs e)
  214. {
  215. if (e.KeyCode == Keys.Enter)
  216. {
  217. if (Input.Text == "")
  218. {
  219. MessageBox.Show("采集的数据不能为空");
  220. return;
  221. }
  222. CollectInputData();
  223. Input.Clear();
  224. }
  225. }
  226. /// <summary>
  227. /// 采集数据
  228. /// </summary>
  229. private void CollectInputData()
  230. {
  231. Dictionary<string, string> Data = new Dictionary<string, string>();
  232. string[] SplitData = Input.Text.Split('*');
  233. if (SplitData.Length < 6)
  234. {
  235. MessageBox.Show("数据格式错误,无法解析");
  236. return;
  237. }
  238. for (int i = 0; i < SplitData.Length; i++)
  239. {
  240. switch (i.ToString())
  241. {
  242. case "0":
  243. Data.Add("PRCODE", SplitData[i]);
  244. break;
  245. case "1":
  246. Data.Add("QTY", SplitData[i]);
  247. break;
  248. case "2":
  249. Data.Add("DATECODE", SplitData[i]);
  250. break;
  251. case "3":
  252. Data.Add("BRAND", SplitData[i]);
  253. break;
  254. case "4":
  255. Data.Add("LOTNO", SplitData[i]);
  256. break;
  257. case "5":
  258. Data.Add("PO", SplitData[i]);
  259. break;
  260. case "6":
  261. Data.Add("SERIAL", SplitData[i]);
  262. break;
  263. default:
  264. break;
  265. }
  266. }
  267. int CodeCount = 0;
  268. //如果单位是KPCS则需要除1000
  269. if (CurrentUnit == "KPCS")
  270. CodeCount = int.Parse(Data["QTY"]) / 1000 / int.Parse(CurrentZXBZ);
  271. else
  272. CodeCount = int.Parse(Data["QTY"]) / int.Parse(CurrentZXBZ);
  273. string pib_barcode = Data.ContainsKey("SERIAL") ? Data["SERIAL"] : "";
  274. //获取ID
  275. string[] PIBID = dh.GetSEQ("prodiobarcode_seq", CodeCount);
  276. string pib_outboxcode2 = "";
  277. if (OutBoxNum.Text == "新增")
  278. {
  279. string maxoutbox = dh.getFieldDataByCondition("prodiobarcode", "max(pib_outboxcode2)", "pib_inoutno='" + pi_inoutno.Text + "'").ToString();
  280. //如果没有则从开始插入
  281. if (maxoutbox == "")
  282. {
  283. pib_outboxcode2 = "1";
  284. }
  285. else
  286. {
  287. pib_outboxcode2 = (int.Parse(maxoutbox) + 1).ToString();
  288. }
  289. }
  290. else pib_outboxcode2 = OutBoxNum.Text;
  291. sql.Clear();
  292. sql.Append("insert into prodiobarcode(PIB_ID,PIB_PRODCODE,PIB_INDATE,PIB_INOUTNO,PIB_PIID,PIB_PDNO, PIB_PDID,PIB_PICLASS,");
  293. sql.Append("PIB_BARCODE,PIB_CUSTBARCODE,PIB_QTY,PIB_OUTBOXCODE1,PIB_OUTBOXCODE2,pib_custoutboxcode,PIB_IFPRINT,PIB_ORDERCODE,PIB_CUSTPO) ");
  294. sql.Append("select :PIB_ID,pd_prodcode,sysdate,pi_inoutno,pi_id,pd_pdno,pd_id,pi_class,");
  295. sql.Append("'" + pib_barcode + "','','','','" + pib_outboxcode2 + "','',0,pd_ordercode,pd_pocode ");
  296. sql.Append("from prodinout left join prodiodetail on pi_id=pd_piid where pi_id='" + PI_ID + "' and pd_prodcode='" + CurrentPrCode + "'");
  297. dh.BatchInsert(sql.ToString(), new string[] { "PIB_ID" }, PIBID);
  298. LoadGridData(new object(), new EventArgs());
  299. //加载完数据之后进行容量的判断
  300. if (LabelInfDataTable.Select("pib_outboxcode2='" + OutBoxNum.Text + "'").Length > OutboxCapacity.Value)
  301. {
  302. MessageBox.Show("箱号" + OutBoxNum.Text + "超出容量");
  303. }
  304. }
  305. private void AutoPrintSingleLabel(string la_id, string LabelUrl)
  306. {
  307. //用标签本身的变量作为最外层的循环条件去匹配;
  308. string[] arg = SingleBoxArgument.ToArray();
  309. StringBuilder ParamLog = new StringBuilder();
  310. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  311. {
  312. //将维护的模板参数和模板本身的参数名称进行比对
  313. for (int k = 0; k < SingleLabelParam.Rows.Count; k++)
  314. {
  315. //名称相等的时候,取SQL进行值的查询
  316. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == SingleLabelParam.Rows[k]["lp_name"].ToString().ToLower())
  317. {
  318. string pib_id = LabelInf.Rows[CurrentRowIndex].Cells["pib_id1"].Value.ToString();
  319. DataRow[] dr = SingleBoxCacheData.Select("pib_id=" + pib_id);
  320. if (arg.Contains(SingleDoc.Variables.FreeVariables.Item(j + 1).Name))
  321. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = dr[0][SingleDoc.Variables.FreeVariables.Item(j + 1).Name].ToString();
  322. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.Contains("datecode1"))
  323. {
  324. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode1"].Value != null)
  325. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode1"].Value.ToString();
  326. }
  327. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.Contains("lotno"))
  328. {
  329. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"].Value != null)
  330. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_lotno"].Value.ToString();
  331. }
  332. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.Contains("datecode"))
  333. {
  334. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"].Value != null)
  335. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode"].Value.ToString();
  336. }
  337. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.Contains("产地"))
  338. {
  339. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_madein"].Value != null)
  340. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_madein"].Value.ToString();
  341. }
  342. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.Contains("pib_cusbarcode"))
  343. {
  344. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_cusbarcode"].Value != null)
  345. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_cusbarcode"].Value.ToString();
  346. }
  347. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Value == "")
  348. {
  349. try
  350. {
  351. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = SingleLabelParam.Select("lp_name='" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "'")[0]["lp_sql"].ToString();
  352. }
  353. catch (Exception)
  354. {
  355. }
  356. }
  357. ParamLog.AppendLine("pib_id:" + LabelInf.Rows[CurrentRowIndex].Cells["pib_id1"].Value.ToString() + ",SingleDoc打印参数【" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取到值" + SingleDoc.Variables.FreeVariables.Item(j + 1).Value);
  358. }
  359. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == "DateCode1")
  360. {
  361. if (LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode1"].Value != null)
  362. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[CurrentRowIndex].Cells["pib_datecode1"].Value.ToString();
  363. }
  364. }
  365. }
  366. LogManager.DoLog(ParamLog.ToString());
  367. //保存参数打印
  368. if (EnablePrint)
  369. {
  370. SingleDoc.Printer.SwitchTo(SingleLabelPrinter.Text);
  371. SingleDoc.PrintDocument();
  372. }
  373. }
  374. //关闭窗口前提示用户确认
  375. private void 贴标机条码打印_FormClosing(object sender, FormClosingEventArgs e)
  376. {
  377. //如果不是注销的话
  378. if (!logout)
  379. {
  380. string close = MessageBox.Show(this.ParentForm, "是否关闭", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  381. if (close.ToString() != "Yes")
  382. e.Cancel = true;
  383. else
  384. {
  385. lbl.Quit();
  386. LogManager.DoLog("关闭程序");
  387. }
  388. }
  389. }
  390. /// <summary>
  391. /// 获取打印标签
  392. /// </summary>
  393. private void GetInOutInfAndLabelFile()
  394. {
  395. ComBoxClickChangeLabelDoc = false;
  396. DataTable Attach = (DataTable)dh.ExecuteSql("select lap_param lp_name,lap_value lp_sql from LabelAttachPARAMETER where lap_custcode='" + pi_cardcode.Text + "'", "select");
  397. sql.Clear();
  398. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  399. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  400. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='单盘' order by cl_custcode");
  401. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  402. SingleLabelCombox.DisplayMember = "cl_labelname";
  403. SingleLabelCombox.ValueMember = "la_id";
  404. SingleLabelCombox.DataSource = dt;
  405. if (SingleDoc != null)
  406. SingleDoc.Close();
  407. if (!GetGridOnly.Checked)
  408. for (int i = 0; i < dt.Rows.Count; i++)
  409. {
  410. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  411. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  412. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  413. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  414. if (time.ToString() != file.LastWriteTime.ToString())
  415. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  416. }
  417. if (SingleLabelCombox.Text != "")
  418. {
  419. SingleDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + SingleLabelCombox.Text);
  420. SingleLabelParam = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + SingleLabelCombox.SelectedValue.ToString().Split('#')[0], "select");
  421. SingleLabelParam.Merge(Attach);
  422. for (int i = 0; i < SingleDoc.Variables.FreeVariables.Count; i++)
  423. {
  424. SingleParam.Add(SingleDoc.Variables.FreeVariables.Item(i + 1).Name);
  425. }
  426. }
  427. sql.Clear();
  428. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  429. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  430. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='中盒' order by cl_custcode");
  431. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  432. MidLabelCombox.DisplayMember = "cl_labelname";
  433. MidLabelCombox.ValueMember = "la_id";
  434. MidLabelCombox.DataSource = dt;
  435. if (MidDoc != null)
  436. MidDoc.Close();
  437. if (!GetGridOnly.Checked)
  438. for (int i = 0; i < dt.Rows.Count; i++)
  439. {
  440. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  441. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  442. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  443. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  444. if (time.ToString() != file.LastWriteTime.ToString())
  445. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  446. }
  447. if (MidLabelCombox.Text != "")
  448. {
  449. MidDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + MidLabelCombox.Text);
  450. MidLabelParam = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + MidLabelCombox.SelectedValue.ToString().Split('#')[0], "select");
  451. MidLabelParam.Merge(Attach);
  452. }
  453. //缓存中盒参数
  454. sql.Clear();
  455. sql.Append("select to_char(nvl(cl_date,sysdate),'YYYY-MM-DD HH24:Mi:SS') cl_date,cl_labelname,cl_isdefault,la_id||'#'||cl_labelurl||'#'||to_char(cl_date,'YYYY-MM-DD HH24:Mi:SS') la_id,cl_custcode from customerlabel left join prodinout on pi_cardcode=cl_custcode ");
  456. sql.Append("left join customer on cu_code=cl_custcode left join label on la_code=CL_LABELCODE where ((pi_cardcode='" + pi_cardcode.Text + "' ");
  457. sql.Append("and pi_inoutno='" + pi_inoutno.Text + "') or( cl_custcode is null)) and cl_labeltype='外箱' order by cl_custcode");
  458. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  459. OutBoxCombox.DisplayMember = "cl_labelname";
  460. OutBoxCombox.ValueMember = "la_id";
  461. OutBoxCombox.DataSource = dt;
  462. if (OutBoxDoc != null)
  463. OutBoxDoc.Close();
  464. if (!GetGridOnly.Checked)
  465. for (int i = 0; i < dt.Rows.Count; i++)
  466. {
  467. string LabelUrl = dt.Rows[i]["la_id"].ToString().Split('#')[1];
  468. string LabelName = dt.Rows[i]["cl_labelname"].ToString();
  469. System.DateTime time = Convert.ToDateTime(dt.Rows[i]["cl_date"].ToString());
  470. FileInfo file = new FileInfo(ftpOperater.DownLoadTo + LabelName);
  471. if (time.ToString() != file.LastWriteTime.ToString())
  472. BaseUtil.GetLabelUrl(LabelUrl, LabelName, time);
  473. }
  474. if (OutBoxCombox.Text != "")
  475. {
  476. OutBoxDoc = lbl.Documents.Open(ftpOperater.DownLoadTo + OutBoxCombox.Text);
  477. OutLabelParam = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + OutBoxCombox.SelectedValue.ToString().Split('#')[0], "select");
  478. OutLabelParam.Merge(Attach);
  479. }
  480. Input.Focus();
  481. //缓存外箱参数
  482. ComBoxClickChangeLabelDoc = true;
  483. Parallel.Invoke(GetSingleBoxData, GetMidBoxData);
  484. }
  485. /// <summary>
  486. /// 出入库单录入框的回车事件
  487. /// </summary>
  488. /// <param name="sender"></param>
  489. /// <param name="e"></param>
  490. private void pi_inoutno_KeyDown(object sender, KeyEventArgs e)
  491. {
  492. if (e.KeyCode == Keys.Enter)
  493. {
  494. sql.Clear();
  495. sql.Append("select pi_id,pi_cardcode,to_char(pi_date,'yyyymmdd')pi_date from prodinout where pi_inoutno='" + pi_inoutno.Text + "'");
  496. dt = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  497. if (dt.Rows.Count > 0)
  498. {
  499. pi_cardcode.Text = dt.Rows[0]["pi_cardcode"].ToString();
  500. pi_date.Text = dt.Rows[0]["pi_date"].ToString();
  501. PI_ID = dt.Rows[0]["pi_id"].ToString();
  502. LoadGridData(sender, e);
  503. //重新输入单号后清除缓存
  504. MidBoxArgument.Clear();
  505. MidBoxCacheData.Clear();
  506. BaseUtil.CleanDataTable(MidBoxCacheData);
  507. SingleBoxArgument.Clear();
  508. SingleBoxCacheData.Clear();
  509. BaseUtil.CleanDataTable(SingleBoxCacheData);
  510. MidIDAndOutboxcode.Clear();
  511. SingleID.Clear();
  512. //获取外箱数据
  513. OutBoxNum_Click(sender, new EventArgs());
  514. LoadPrcodeData();
  515. thread = new Thread(GetInOutInfAndLabelFile);
  516. stw = new SetLoadingWindow(thread, "正在获取打印标签");
  517. BaseUtil.SetFormCenter(stw);
  518. stw.ShowDialog();
  519. LogManager.DoLog("输入单号【" + pi_inoutno.Text + "】");
  520. }
  521. else
  522. MessageBox.Show("当前出入库单号不存在!");
  523. }
  524. }
  525. private void SingleBoxPrint()
  526. {
  527. try
  528. {
  529. if (SingleDoc.Variables.FreeVariables.Count == 0) { }
  530. }
  531. catch (Exception)
  532. {
  533. MessageBox.Show("单盘标签未维护参数");
  534. }
  535. if (MidLabelAutoPrint.Checked)
  536. {
  537. try
  538. {
  539. if (MidDoc.Variables.FreeVariables.Count == 0) { }
  540. }
  541. catch (Exception)
  542. {
  543. MessageBox.Show("中盘标签未维护参数");
  544. }
  545. }
  546. string la_id = SingleLabelCombox.SelectedValue.ToString().Split('#')[0];
  547. string cl_labelname = SingleLabelCombox.Text;
  548. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  549. //查询该模板维护的所有参数
  550. dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  551. if (SingleLabelParam.Rows.Count > 0 && LabelInf.Rows.Count > 0)
  552. {
  553. //每次打印清除之前缓存的行号和ID,后面会判断需要打印的数据重新加载
  554. MidIDAndOutboxcode.Clear();
  555. SingleID.Clear();
  556. //获取全部的中盒号
  557. Dictionary<string, bool> outboxcode1 = new Dictionary<string, bool>();
  558. //判断所有盒号为该盒的是否勾选已采集
  559. outboxcode1.Add(LabelInf.Rows[0].Cells["pib_outboxcode1"].Value.ToString(), true);
  560. for (int i = 0; i < LabelInf.Rows.Count; i++)
  561. {
  562. if (!SingleID.Contains(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString()))
  563. SingleID.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString());
  564. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifprint"].FormattedValue.ToString() != "True")
  565. {
  566. //如果不存在中盒号则进行添加
  567. if (!MidIDAndOutboxcode.ContainsValue(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()))
  568. {
  569. MidIDAndOutboxcode.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString());
  570. }
  571. }
  572. }
  573. if (SingleID.ToArray().Length == 0)
  574. {
  575. MessageBox.Show("选择的行未勾选采集或者已打印");
  576. return;
  577. }
  578. //打印的时候如果不存在数据开始缓存
  579. if (SingleBoxCacheData.Rows.Count == 0)
  580. GetSingleBoxData();
  581. if (MidBoxCacheData.Rows.Count == 0)
  582. GetMidBoxData();
  583. for (int i = 0; i < LabelInf.RowCount; i++)
  584. {
  585. if (i + 1 < LabelInf.RowCount)
  586. {
  587. //如果本行的中盒号和下一行不相等的话
  588. if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() != LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString())
  589. {
  590. if (!outboxcode1.ContainsKey(LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString()))
  591. outboxcode1.Add(LabelInf.Rows[i + 1].Cells["pib_outboxcode1"].Value.ToString(), true);
  592. }
  593. }
  594. }
  595. //用于判断用户是否勾选了行
  596. int CheckedRowCount = 0;
  597. string[] arg = SingleBoxArgument.ToArray();
  598. for (int i = 0; i < LabelInf.RowCount; i++)
  599. {
  600. //勾选了并且未打印
  601. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True" && LabelInf.Rows[i].Cells["pib_ifprint"].FormattedValue.ToString() != "True")
  602. {
  603. CheckedRowCount = CheckedRowCount + 1;
  604. CurrentRowIndex = i;
  605. //以标签模板的参数为基准,循环取数
  606. try
  607. {
  608. string pib_id = LabelInf.Rows[i].Cells["pib_id1"].Value.ToString();
  609. DataRow[] dr = SingleBoxCacheData.Select("pib_id=" + pib_id);
  610. StringBuilder ParamLog = new StringBuilder();
  611. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  612. {
  613. if (arg.Contains(SingleDoc.Variables.FreeVariables.Item(j + 1).Name))
  614. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = dr[0][SingleDoc.Variables.FreeVariables.Item(j + 1).Name].ToString();
  615. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode1"))
  616. {
  617. if (LabelInf.Rows[i].Cells["pib_datecode1"].Value != null)
  618. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_datecode1"].Value.ToString();
  619. }
  620. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("lotno"))
  621. {
  622. if (LabelInf.Rows[i].Cells["pib_lotno"].Value != null)
  623. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_lotno"].Value.ToString();
  624. }
  625. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode"))
  626. {
  627. if (LabelInf.Rows[i].Cells["pib_datecode"].Value != null)
  628. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_datecode"].Value.ToString();
  629. }
  630. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("产地"))
  631. {
  632. if (LabelInf.Rows[i].Cells["pib_madein"].Value != null)
  633. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_madein"].Value.ToString();
  634. }
  635. else if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("pib_cusbarcode"))
  636. {
  637. if (LabelInf.Rows[i].Cells["pib_cusbarcode"].Value != null)
  638. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[i].Cells["pib_cusbarcode"].Value.ToString();
  639. }
  640. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Value == "")
  641. {
  642. try
  643. {
  644. SingleDoc.Variables.FreeVariables.Item(j + 1).Value = SingleLabelParam.Select("lp_name='" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "'")[0]["lp_sql"].ToString();
  645. }
  646. catch (Exception)
  647. {
  648. }
  649. }
  650. ParamLog.AppendLine("pib_id:" + LabelInf.Rows[i].Cells["pib_id1"].Value.ToString() + ",SingleDoc打印参数【" + SingleDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取到值" + SingleDoc.Variables.FreeVariables.Item(j + 1).Value);
  651. }
  652. LogManager.DoLog(ParamLog.ToString());
  653. //保存参数打印
  654. if (EnablePrint)
  655. {
  656. SingleDoc.Printer.SwitchTo(SingleLabelPrinter.Text);
  657. SingleDoc.PrintDocument();
  658. }
  659. if (MidLabelAutoPrint.Checked)
  660. {
  661. //判断当前行的盒号和下一行不相等或者已经是最后一行了
  662. if (i + 1 == LabelInf.RowCount || LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() != LabelInf.Rows[i + 1 == LabelInf.RowCount ? i : i + 1].Cells["pib_outboxcode1"].Value.ToString())
  663. {
  664. if (outboxcode1[LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()])
  665. {
  666. if (MidLabelCombox.SelectedValue != null)
  667. {
  668. string la_id_mid = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  669. MidBoxCodePrint(la_id_mid, CurrentRowIndex);
  670. }
  671. }
  672. }
  673. }
  674. //勾选为已打印
  675. LabelInf.Rows[i].Cells["pib_ifprint"].Value = true;
  676. }
  677. catch (Exception ex) { LogManager.DoLog(ex.Message); }
  678. }
  679. }
  680. dh.BatchInsert("update prodiobarcode set pib_printdate=sysdate where pib_id=:pib_id", new string[] { "pib_id" }, SingleID.ToArray());
  681. MidBoxCacheData.Clear();
  682. BaseUtil.CleanDataTable(MidBoxCacheData);
  683. if (CheckedRowCount == 0)
  684. MessageBox.Show("未勾选打印明细!");
  685. else if (CurrentRowIndex + 1 < LabelInf.Rows.Count)
  686. CurrentRowIndex = CurrentRowIndex + 1;
  687. outboxcode1.Clear();
  688. }
  689. else
  690. {
  691. MessageBox.Show("此模板尚未维护参数或不存在打印明细");
  692. return;
  693. }
  694. }
  695. /// <summary>
  696. /// 缓存单盘的数据
  697. /// </summary>
  698. private void GetSingleBoxData()
  699. {
  700. if (SingleDoc == null)
  701. return;
  702. for (int i = 0; i < LabelInf.Rows.Count; i++)
  703. {
  704. if (!SingleID.Contains(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString()))
  705. SingleID.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString());
  706. //如果不存在中盒号则进行添加
  707. if (!MidIDAndOutboxcode.ContainsValue(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()))
  708. MidIDAndOutboxcode.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString());
  709. }
  710. //id数组
  711. string[] pib_id_arr = SingleID.ToArray();
  712. //将所有的列存在在这里
  713. List<DataTable> AllSingleBoxCacheData = new List<DataTable>();
  714. //每五百条拼接一次条件
  715. //手动添加ID列
  716. DataColumn datacolumn = new DataColumn("pib_id");
  717. if (!SingleBoxCacheData.Columns.Contains("pib_id"))
  718. SingleBoxCacheData.Columns.Add(datacolumn);
  719. //获取打印的SQL
  720. for (int j = 0; j < SingleDoc.Variables.FreeVariables.Count; j++)
  721. {
  722. //将维护的模板参数和模板本身的参数名称进行比对
  723. for (int k = 0; k < SingleLabelParam.Rows.Count; k++)
  724. {
  725. if (SingleDoc.Variables.FreeVariables.Item(j + 1).Name == SingleLabelParam.Rows[k]["lp_name"].ToString())
  726. {
  727. DataColumn dc = new DataColumn(SingleDoc.Variables.FreeVariables.Item(j + 1).Name);
  728. SingleBoxCacheData.Columns.Add(dc);
  729. SingleBoxArgument.Add(SingleDoc.Variables.FreeVariables.Item(j + 1).Name);
  730. string sql = SingleLabelParam.Rows[k]["lp_sql"].ToString();
  731. sql = sql.Substring(0, sql.IndexOf("{"));
  732. sql = sql.Substring(0, sql.LastIndexOf("="));
  733. DataTable temp = dh.getFieldsDatasByCondition(sql.Replace(" from ", " ,pib_id PIBID from ") + " in (select pib_id from PRODIOBARCODE where pib_inoutno='" + pi_inoutno.Text + "') ORDER by pib_id");
  734. temp.Columns[0].ColumnName = SingleDoc.Variables.FreeVariables.Item(j + 1).Name;
  735. AllSingleBoxCacheData.Add(temp);
  736. }
  737. }
  738. }
  739. DataTable[] Temp = AllSingleBoxCacheData.ToArray();
  740. //将所有数据写入到CacheData中
  741. if (Temp.Length > 0)
  742. for (int i = 0; i < Temp[0].Rows.Count; i++)
  743. {
  744. DataRow dr = SingleBoxCacheData.NewRow();
  745. dr["pib_id"] = pib_id_arr[i];
  746. //由于之前加了一个ID列,导致j从1开始
  747. for (int j = 1; j < SingleBoxCacheData.Columns.Count; j++)
  748. {
  749. dr[Temp[j - 1].Columns[0].ColumnName] = (Temp[j - 1].Select("PIBID=" + pib_id_arr[i]))[0][0];
  750. }
  751. SingleBoxCacheData.Rows.Add(dr);
  752. }
  753. }
  754. /// <summary>
  755. /// 缓存中盒的数据
  756. /// </summary>
  757. private void GetMidBoxData()
  758. {
  759. if (MidDoc == null)
  760. return;
  761. StringBuilder pib_condition_string = new StringBuilder();
  762. StringBuilder pib_qtycondition_string = new StringBuilder();
  763. for (int i = 0; i < LabelInf.Rows.Count; i++)
  764. {
  765. //如果不存在中盒号则进行添加
  766. if (!MidIDAndOutboxcode.ContainsValue(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()))
  767. {
  768. MidIDAndOutboxcode.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString());
  769. }
  770. }
  771. //id数组
  772. string[] pib_id_arr = MidIDAndOutboxcode.Keys.ToArray();
  773. string[] pib_outbox_arr = MidIDAndOutboxcode.Values.ToArray();
  774. if (pib_id_arr.Length == 0)
  775. {
  776. MessageBox.Show("未勾选打印明细");
  777. return;
  778. }
  779. //记录一个ID用来取中盒的数量
  780. string pib_id = pib_id_arr[0];
  781. //id个数
  782. //将所有的列存在在这里
  783. List<DataTable> AllMidBoxCacheData = new List<DataTable>();
  784. //每五百条拼接一次条件
  785. //手动添加ID列
  786. DataColumn IDColumn = new DataColumn("pib_id");
  787. DataColumn OutBoxColumn = new DataColumn("pib_outboxcode1");
  788. if (!MidBoxCacheData.Columns.Contains("pib_id"))
  789. MidBoxCacheData.Columns.Add(IDColumn);
  790. if (!MidBoxCacheData.Columns.Contains("pib_outboxcode1"))
  791. MidBoxCacheData.Columns.Add(OutBoxColumn);
  792. if (MidLabelCombox.SelectedValue == null)
  793. {
  794. return;
  795. }
  796. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  797. for (int j = 0; j < MidDoc.Variables.FreeVariables.Count; j++)
  798. {
  799. //将维护的模板参数和模板本身的参数名称进行比对
  800. for (int k = 0; k < MidLabelParam.Rows.Count; k++)
  801. {
  802. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name == MidLabelParam.Rows[k]["lp_name"].ToString())
  803. {
  804. DataColumn dc = new DataColumn(MidDoc.Variables.FreeVariables.Item(j + 1).Name);
  805. MidBoxCacheData.Columns.Add(dc);
  806. MidBoxArgument.Add(MidDoc.Variables.FreeVariables.Item(j + 1).Name);
  807. string sql = MidLabelParam.Rows[k]["lp_sql"].ToString();
  808. //如果打印的含有数量
  809. if (sql.ToLower().Contains("pib_qty"))
  810. {
  811. sql = sql.Substring(0, sql.IndexOf("{")) + pib_id + sql.Substring(sql.IndexOf("}") + 1);
  812. sql = sql.Substring(0, sql.LastIndexOf("=")) + " in (select distinct pib_outboxcode1 from PRODIOBARCODE where pib_inoutno='" + pi_inoutno.Text + "')" + sql.Substring(sql.LastIndexOf("}") + 1);
  813. }
  814. else
  815. {
  816. sql = sql.Substring(0, sql.IndexOf("{"));
  817. sql = sql.Substring(0, sql.LastIndexOf("="));
  818. sql = sql + " in (select distinct pib_outboxcode1 from PRODIOBARCODE where pib_inoutno='" + pi_inoutno.Text + "')" + " and pib_inoutno='" + pi_inoutno.Text + "' order by to_number(pib_outboxcode1)";
  819. }
  820. DataTable temp = dh.getFieldsDatasByCondition(sql);
  821. temp.Columns[0].ColumnName = MidDoc.Variables.FreeVariables.Item(j + 1).Name;
  822. AllMidBoxCacheData.Add(temp);
  823. }
  824. }
  825. }
  826. DataTable[] Temp = AllMidBoxCacheData.ToArray();
  827. //将所有数据写入到CacheData中
  828. if (Temp.Length > 0)
  829. {
  830. for (int i = 0; i < pib_id_arr.Length; i++)
  831. {
  832. DataRow dr = MidBoxCacheData.NewRow();
  833. dr["pib_id"] = pib_id_arr[i];
  834. dr["pib_outboxcode1"] = pib_outbox_arr[i];
  835. //由于之前加了一个ID列和箱号,导致j从2开始
  836. for (int j = 2; j < MidBoxCacheData.Columns.Count; j++)
  837. {
  838. //选出勾选的中盒号
  839. dr[Temp[j - 2].Columns[0].ColumnName] = Temp[j - 2].Select("PIB_OUTBOXCODE1='" + pib_outbox_arr[i] + "'")[0][0];
  840. }
  841. MidBoxCacheData.Rows.Add(dr);
  842. }
  843. }
  844. }
  845. private void SingleLabelPrint_Click(object sender, EventArgs e)
  846. {
  847. if (SingleLabelCombox.Text != "")
  848. {
  849. if (SingleBoxBegin.Text != "" || SingleBoxEnd.Text != "")
  850. {
  851. try
  852. {
  853. int begin = int.Parse(SingleBoxBegin.Text == "" ? "1" : SingleBoxBegin.Text);
  854. int end = int.Parse(SingleBoxEnd.Text == "" ? LabelInf.Rows.Count.ToString() : SingleBoxEnd.Text);
  855. if (begin > 0 && end <= LabelInf.Rows.Count && begin <= end)
  856. {
  857. for (int i = begin - 1; i < end; i++)
  858. {
  859. LabelInf.Rows[i].Cells["Choose"].Value = true;
  860. LabelInf.Rows[i].Cells["pib_ifprint"].Value = false;
  861. }
  862. }
  863. else
  864. {
  865. MessageBox.Show("单盘打印范围错误");
  866. return;
  867. }
  868. }
  869. catch (Exception)
  870. {
  871. MessageBox.Show("单盘打印范围错误");
  872. return;
  873. }
  874. }
  875. thread = new Thread(SingleBoxPrint);
  876. stw = new SetLoadingWindow(thread, "正在打印单盘");
  877. BaseUtil.SetFormCenter(stw);
  878. stw.ShowDialog();
  879. }
  880. else
  881. MessageBox.Show("未维护单盘标签");
  882. }
  883. private void MidBoxLabelPrint()
  884. {
  885. //未输入内容打印全部中盒
  886. if (MidLabelNum.Text == "")
  887. {
  888. int begin = 0;
  889. int end = 0;
  890. if (MidBoxBegin.Text != "" || MidBoxEnd.Text != "")
  891. {
  892. try
  893. {
  894. begin = int.Parse(MidBoxBegin.Text == "" ? "1" : MidBoxBegin.Text);
  895. end = int.Parse(MidBoxEnd.Text == "" ? LabelInf.Rows[LabelInf.Rows.Count - 1].Cells["pib_outboxcode1"].Value.ToString() : MidBoxEnd.Text);
  896. int minmidbox = int.Parse(LabelInf.Rows[0].Cells["pib_outboxcode1"].Value.ToString());
  897. int maxmidbox = int.Parse(LabelInf.Rows[LabelInf.Rows.Count - 1].Cells["pib_outboxcode1"].Value.ToString());
  898. if (begin >= minmidbox && end <= maxmidbox && begin <= end)
  899. {
  900. //设置中盒打印范围的行号
  901. for (int i = 0; i < LabelInf.Rows.Count; i++)
  902. {
  903. if (int.Parse(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()) == begin)
  904. {
  905. begin = i;
  906. }
  907. if (int.Parse(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()) == end)
  908. {
  909. end = i;
  910. }
  911. }
  912. }
  913. else
  914. {
  915. MessageBox.Show("中盒打印范围错误");
  916. return;
  917. }
  918. }
  919. catch (Exception)
  920. {
  921. MessageBox.Show("中盒打印范围错误");
  922. return;
  923. }
  924. }
  925. MidBoxArgument.Clear();
  926. MidBoxCacheData.Clear();
  927. BaseUtil.CleanDataTable(MidBoxCacheData);
  928. List<int> MidOutBoxCode = new List<int>();
  929. List<int> MidOutBoxCodeIndex = new List<int>();
  930. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  931. for (int i = (begin == 0 ? 0 : begin); i <= (end == 0 ? LabelInf.Rows.Count - 1 : end); i++)
  932. {
  933. if (!MidIDAndOutboxcode.ContainsValue(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()))
  934. MidIDAndOutboxcode.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString());
  935. if (!MidOutBoxCode.Contains(int.Parse(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString())))
  936. {
  937. MidOutBoxCode.Add(int.Parse(LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString()));
  938. MidOutBoxCodeIndex.Add(i);
  939. }
  940. }
  941. GetMidBoxData();
  942. for (int i = 0; i < MidOutBoxCodeIndex.Count; i++)
  943. {
  944. MidBoxCodePrint(la_id, MidOutBoxCodeIndex[i]);
  945. }
  946. MidBoxArgument.Clear();
  947. MidBoxCacheData.Clear();
  948. BaseUtil.CleanDataTable(MidBoxCacheData);
  949. return;
  950. }
  951. bool FindMidLabel = false;
  952. if (MidLabelCombox.SelectedValue != null)
  953. {
  954. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  955. string cl_labelname = MidLabelCombox.Text;
  956. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  957. //中盒号所在的行
  958. int MidLabelRowIndex = 0;
  959. //查找是否存在该中盒号
  960. List<int> MidRowIndex = new List<int>();
  961. //缓存中盒数据
  962. for (int i = 0; i < LabelInf.RowCount; i++)
  963. {
  964. if (MidLabelNum.Text == LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString())
  965. {
  966. //找到了输入的中盒号停止循环
  967. FindMidLabel = true;
  968. MidLabelRowIndex = i;
  969. MidRowIndex.Add(i);
  970. }
  971. }
  972. //找到了指定的盒号
  973. if (FindMidLabel)
  974. MidBoxCodePrint(la_id, MidLabelRowIndex, MidRowIndex.ToArray());
  975. else
  976. MessageBox.Show("该出入库单未找到该中盒号!");
  977. }
  978. else
  979. MessageBox.Show("未维护中盒模板");
  980. }
  981. private void MidLabelPrint_Click(object sender, EventArgs e)
  982. {
  983. if (MidLabelCombox.Text != "")
  984. {
  985. thread = new Thread(MidBoxLabelPrint);
  986. stw = new SetLoadingWindow(thread, "正在打印中盒");
  987. BaseUtil.SetFormCenter(stw);
  988. stw.ShowDialog();
  989. }
  990. else
  991. MessageBox.Show("未维护中盒标签");
  992. }
  993. private void OutBoxPrint()
  994. {
  995. List<string> Outboxcode = new List<string>();
  996. //如果未勾选箱号则对勾选的数据的箱号进行整合
  997. string la_id = OutBoxCombox.SelectedValue.ToString().Split('#')[0];
  998. string cl_labelname = OutBoxCombox.Text;
  999. string LabelUrl = dh.getFieldDataByCondition("label left join customerlabel on la_code=cl_labelcode", "cl_labelurl", "la_id='" + la_id + "' and cl_labelname='" + cl_labelname + "'").ToString();
  1000. if (OutBoxNum.Text == "")
  1001. {
  1002. for (int i = 0; i < LabelInf.RowCount; i++)
  1003. {
  1004. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True")
  1005. {
  1006. string outboxcode2 = LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString();
  1007. //富为使用包装单的逻辑
  1008. //如果不包含该箱号则进行添加
  1009. if (!Outboxcode.Contains(outboxcode2))
  1010. Outboxcode.Add(outboxcode2);
  1011. }
  1012. }
  1013. //按获取到的箱号列表进行打印
  1014. if (Outboxcode.ToArray().Length > 0)
  1015. {
  1016. try
  1017. {
  1018. // 循环打印外箱号
  1019. for (int i = 0; i < Outboxcode.ToArray().Length; i++)
  1020. {
  1021. for (int h = 0; h < LabelInf.RowCount; h++)
  1022. {
  1023. if (LabelInf.Rows[h].Cells["pib_outboxcode2"].Value.ToString() == Outboxcode.ToArray()[i])
  1024. {
  1025. OutBoxCodePrint(la_id, h);
  1026. break;
  1027. }
  1028. }
  1029. }
  1030. }
  1031. catch { }
  1032. }
  1033. else
  1034. {
  1035. MessageBox.Show("请勾选需要打印的外箱");
  1036. }
  1037. }
  1038. else
  1039. {
  1040. bool FindMidLabel = false;
  1041. try
  1042. {
  1043. int OutBoxLabelRowIndex = 0;
  1044. //查找是否存在该中盒号
  1045. for (int i = 0; i < LabelInf.RowCount; i++)
  1046. {
  1047. if (OutBoxNum.Text == LabelInf.Rows[i].Cells["pib_outboxcode2"].Value.ToString())
  1048. {
  1049. //找到了输入的中盒号停止循环
  1050. FindMidLabel = true;
  1051. OutBoxLabelRowIndex = i;
  1052. break;
  1053. }
  1054. }
  1055. //找到了指定的盒号
  1056. if (FindMidLabel)
  1057. OutBoxCodePrint(la_id, OutBoxLabelRowIndex);
  1058. else
  1059. MessageBox.Show("该出入库单未找到该外箱号!");
  1060. }
  1061. catch (Exception) { }
  1062. }
  1063. Outboxcode.Clear();
  1064. }
  1065. private void MidBoxCodePrint(string la_id, int rowindex)
  1066. {
  1067. if (MidBoxCacheData.Rows.Count == 0)
  1068. {
  1069. MidIDAndOutboxcode.Add(LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString(), LabelInf.Rows[rowindex].Cells["pib_outboxcode1"].Value.ToString());
  1070. GetMidBoxData();
  1071. }
  1072. DataTable dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1073. DataTable Attach = (DataTable)dh.ExecuteSql("select lap_param lp_name,lap_value lp_sql from LabelAttachPARAMETER where lap_custcode='" + pi_cardcode.Text + "'", "select");
  1074. //用标签本身的变量作为最外层的循环条件去匹配;
  1075. dt.Merge(Attach);
  1076. string[] arg = MidBoxArgument.ToArray();
  1077. for (int j = 0; j < MidDoc.Variables.FreeVariables.Count; j++)
  1078. {
  1079. //将维护的模板参数和模板本身的参数名称进行比对
  1080. for (int k = 0; k < MidLabelParam.Rows.Count; k++)
  1081. {
  1082. //名称相等的时候,取SQL进行值的查询
  1083. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name == MidLabelParam.Rows[k]["lp_name"].ToString())
  1084. {
  1085. //获取对应行的pib_id
  1086. string pib_id = LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString();
  1087. string pib_outboxcode1 = LabelInf.Rows[rowindex].Cells["pib_outboxcode1"].Value.ToString();
  1088. //获取打印执行的SQL
  1089. string sql = MidLabelParam.Rows[k]["lp_sql"].ToString();
  1090. try
  1091. {
  1092. //获取打印执行的SQL
  1093. if (sql.IndexOf("{") == 0)
  1094. {
  1095. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql).ToString();
  1096. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + dt.Rows[k]["lp_sql"].ToString() + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1097. }
  1098. else
  1099. {
  1100. DataRow[] dr = MidBoxCacheData.Select("pib_outboxcode1='" + pib_outboxcode1 + "'");
  1101. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode1"))
  1102. {
  1103. if (LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value != null)
  1104. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value.ToString();
  1105. }
  1106. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("lotno"))
  1107. {
  1108. if (LabelInf.Rows[rowindex].Cells["pib_lotno"].Value != null)
  1109. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_lotno"].Value.ToString();
  1110. }
  1111. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode"))
  1112. {
  1113. if (LabelInf.Rows[rowindex].Cells["pib_datecode"].Value != null)
  1114. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode"].Value.ToString();
  1115. }
  1116. else if (arg.Contains(MidDoc.Variables.FreeVariables.Item(j + 1).Name))
  1117. {
  1118. if (dr.Length > 0)
  1119. {
  1120. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dr[0][MidDoc.Variables.FreeVariables.Item(j + 1).Name].ToString();
  1121. }
  1122. }
  1123. if (MidDoc.Variables.FreeVariables.Item(j + 1).Value == "")
  1124. {
  1125. try
  1126. {
  1127. MidDoc.Variables.FreeVariables.Item(j + 1).Value = MidLabelParam.Select("lp_name='" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "'")[0]["lp_sql"].ToString();
  1128. }
  1129. catch (Exception)
  1130. {
  1131. }
  1132. }
  1133. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + sql + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1134. }
  1135. }
  1136. catch (Exception)
  1137. {
  1138. LogManager.DoLog("SQL维护不正确,请检查SQL语句\n" + sql);
  1139. return;
  1140. }
  1141. }
  1142. }
  1143. }
  1144. //保存参数打印
  1145. if (EnablePrint)
  1146. {
  1147. MidDoc.Printer.SwitchTo(MidLabelPrinter.Text);
  1148. MidDoc.PrintDocument();
  1149. }
  1150. }
  1151. private void MidBoxCodePrint(string la_id, int rowindex, int[] midindex)
  1152. {
  1153. for (int j = 0; j < MidDoc.Variables.FreeVariables.Count; j++)
  1154. {
  1155. //将维护的模板参数和模板本身的参数名称进行比对
  1156. for (int k = 0; k < MidLabelParam.Rows.Count; k++)
  1157. {
  1158. //名称相等的时候,取SQL进行值的查询
  1159. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name == MidLabelParam.Rows[k]["lp_name"].ToString())
  1160. {
  1161. //获取对应行的pib_id
  1162. string pib_id = LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString();
  1163. string pib_outboxcode1 = LabelInf.Rows[rowindex].Cells["pib_outboxcode1"].Value.ToString();
  1164. //获取打印执行的SQL
  1165. string sql = MidLabelParam.Rows[k]["lp_sql"].ToString();
  1166. try
  1167. {
  1168. //获取打印执行的SQL
  1169. if (sql.IndexOf("{") == 0)
  1170. {
  1171. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql).ToString();
  1172. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + dt.Rows[k]["lp_sql"].ToString() + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1173. }
  1174. else
  1175. {
  1176. if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode1"))
  1177. {
  1178. if (LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value != null)
  1179. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value.ToString();
  1180. }
  1181. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("lotno"))
  1182. {
  1183. if (LabelInf.Rows[rowindex].Cells["pib_lotno"].Value != null)
  1184. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_lotno"].Value.ToString();
  1185. }
  1186. else if (MidDoc.Variables.FreeVariables.Item(j + 1).Name.ToLower().Contains("datecode"))
  1187. {
  1188. if (LabelInf.Rows[rowindex].Cells["pib_datecode"].Value != null)
  1189. MidDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode"].Value.ToString();
  1190. }
  1191. else
  1192. {
  1193. if (sql.ToLower().Contains("pib_qty"))
  1194. {
  1195. sql = sql.Substring(0, sql.IndexOf("{")) + pib_id + sql.Substring(sql.IndexOf("}") + 1);
  1196. sql = sql.Substring(0, sql.LastIndexOf("=")) + "='" + pib_outboxcode1 + "' group by pib_outboxcode1";
  1197. }
  1198. else
  1199. {
  1200. sql = sql.Substring(0, sql.IndexOf("{"));
  1201. sql = sql.Substring(0, sql.LastIndexOf("="));
  1202. sql = sql + " in (select distinct pib_outboxcode1 from PRODIOBARCODE where pib_inoutno='" + pi_inoutno.Text + "')" + " and pib_inoutno='" + pi_inoutno.Text + "' and pib_outboxcode1='" + pib_outboxcode1 + "'";
  1203. }
  1204. MidDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(sql).ToString();
  1205. }
  1206. if (MidDoc.Variables.FreeVariables.Item(j + 1).Value == "")
  1207. {
  1208. try
  1209. {
  1210. MidDoc.Variables.FreeVariables.Item(j + 1).Value = MidLabelParam.Select("lp_name='" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "'")[0]["lp_sql"].ToString();
  1211. }
  1212. catch (Exception)
  1213. {
  1214. }
  1215. }
  1216. LogManager.DoLog("打印参数【" + MidDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + sql + ",取到值" + MidDoc.Variables.FreeVariables.Item(j + 1).Value);
  1217. }
  1218. }
  1219. catch (Exception)
  1220. {
  1221. LogManager.DoLog("SQL维护不正确,请检查SQL语句\n" + sql);
  1222. return;
  1223. }
  1224. }
  1225. }
  1226. }
  1227. //保存参数打印
  1228. if (EnablePrint)
  1229. {
  1230. MidDoc.Printer.SwitchTo(MidLabelPrinter.Text);
  1231. MidDoc.PrintDocument();
  1232. }
  1233. }
  1234. /// <summary>
  1235. /// 执行打印外箱号
  1236. /// </summary>
  1237. private void OutBoxCodePrint(string la_id, int rowindex)
  1238. {
  1239. DataTable dt = (DataTable)dh.ExecuteSql("select lp_name,lp_sql,lp_valuetype from label left join LABELPARAMETER on la_id= lp_laid where la_id=" + la_id, "select");
  1240. DataTable Attach = (DataTable)dh.ExecuteSql("select lap_param lp_name,lap_value lp_sql from LabelAttachPARAMETER where lap_custcode='" + pi_cardcode.Text + "'", "select");
  1241. //用标签本身的变量作为最外层的循环条件去匹配;
  1242. dt.Merge(Attach);
  1243. try
  1244. {
  1245. for (int j = 0; j < OutBoxDoc.Variables.FreeVariables.Count; j++)
  1246. {
  1247. //将维护的模板参数和模板本身的参数名称进行比对
  1248. for (int k = 0; k < OutLabelParam.Rows.Count; k++)
  1249. {
  1250. //名称相等的时候,取SQL进行值的查询
  1251. if (OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name == OutLabelParam.Rows[k]["lp_name"].ToString())
  1252. {
  1253. //获取对应行的pib_id
  1254. string pib_id = LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString();
  1255. string pib_outboxcode2 = LabelInf.Rows[rowindex].Cells["pib_outboxcode2"].Value.ToString();
  1256. //获取打印执行的SQL
  1257. string sql = OutLabelParam.Rows[k]["lp_sql"].ToString();
  1258. //select * from productiobarcode where pib_id={pib_id} and pib_outboxcode1={pib_outboxcode1}
  1259. try
  1260. {
  1261. string ExeSQL = "";
  1262. if (sql.ToLower().Contains("pib_lotno"))
  1263. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_lotno"].Value.ToString();
  1264. else if (sql.ToLower().Contains("pib_datecode"))
  1265. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode"].Value.ToString();
  1266. else if (sql.ToLower().Contains("pib_madein"))
  1267. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_madein"].Value.ToString();
  1268. else if (sql.ToLower().Contains("pib_cusbarcode"))
  1269. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_cusbarcode"].Value.ToString();
  1270. else if (sql.ToLower().Contains("pib_cusoutboxcode"))
  1271. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_cusoutboxcode"].Value.ToString();
  1272. else
  1273. {
  1274. ExeSQL = sql.ToLower().Replace("{pib_id}", "'" + pib_id + "'");
  1275. ExeSQL = ExeSQL.Replace("{pib_outboxcode2}", "'" + pib_outboxcode2 + "'");
  1276. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = dh.GetLabelParam(ExeSQL).ToString();
  1277. }
  1278. if (OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value == "")
  1279. {
  1280. try
  1281. {
  1282. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = OutLabelParam.Select("lp_name='" + OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name + "'")[0]["lp_sql"].ToString();
  1283. }
  1284. catch (Exception)
  1285. {
  1286. }
  1287. }
  1288. LogManager.DoLog("打印参数【" + OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name + "】赋值," + "取值SQL:" + ExeSQL + ",取到值" + OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value);
  1289. }
  1290. catch (Exception)
  1291. {
  1292. LogManager.DoLog("SQL维护不正确,请检查SQL语句" + sql);
  1293. MessageBox.Show("SQL维护不正确,请检查SQL语句\n" + sql);
  1294. return;
  1295. }
  1296. }
  1297. else if (OutBoxDoc.Variables.FreeVariables.Item(j + 1).Name == "DateCode1")
  1298. {
  1299. if (LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value != null)
  1300. {
  1301. OutBoxDoc.Variables.FreeVariables.Item(j + 1).Value = LabelInf.Rows[rowindex].Cells["pib_datecode1"].Value.ToString();
  1302. }
  1303. }
  1304. }
  1305. }
  1306. //保存参数打印
  1307. if (EnablePrint)
  1308. {
  1309. OutBoxDoc.Printer.SwitchTo(OutBoxPrinter.Text);
  1310. OutBoxDoc.PrintDocument();
  1311. }
  1312. LogManager.DoLog("执行打印外箱,pib_id:" + LabelInf.Rows[rowindex].Cells["pib_id1"].Value.ToString());
  1313. }
  1314. catch (Exception ex) { MessageBox.Show(ex.Message); }
  1315. }
  1316. private void CleanDetail_Click(object sender, EventArgs e)
  1317. {
  1318. ArrayList<string> DeleteID = new ArrayList<string>();
  1319. for (int i = 0; i < LabelInf.RowCount; i++)
  1320. {
  1321. if (LabelInf.Rows[i].Cells["Choose"].FormattedValue.ToString() == "True")
  1322. DeleteID.Add(LabelInf.Rows[i].Cells["pib_id1"].Value.ToString());
  1323. }
  1324. //勾选了删除的明细之后
  1325. if (DeleteID.ToArray().Length > 0)
  1326. {
  1327. string close = MessageBox.Show(this.ParentForm, "删除后不可恢复,是否确认删除", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  1328. if (close.ToString() == "Yes")
  1329. {
  1330. dh.BatchInsert("delete from prodiobarcode where pib_id=:pib_id", new string[] { "pib_id" }, DeleteID.ToArray());
  1331. MessageBox.Show("删除成功");
  1332. LoadGridData(sender, e);
  1333. }
  1334. }
  1335. else
  1336. MessageBox.Show("尚未勾选需要删除的明细");
  1337. }
  1338. private void OutBoxLabelPrint_Click(object sender, EventArgs e)
  1339. {
  1340. if (OutBoxCombox.Text != "")
  1341. {
  1342. thread = new Thread(OutBoxPrint);
  1343. stw = new SetLoadingWindow(thread, "正在打印外箱");
  1344. BaseUtil.SetFormCenter(stw);
  1345. stw.ShowDialog();
  1346. }
  1347. else
  1348. MessageBox.Show("未维护外箱标签");
  1349. }
  1350. private void LoadGridData()
  1351. {
  1352. LoadGridData(new object(), new EventArgs());
  1353. }
  1354. /// <summary>
  1355. /// 自定义函数 加载明细行的数据,多处使用添加进函数
  1356. /// </summary>
  1357. /// <param name="sender"></param>
  1358. /// <param name="e"></param>
  1359. private void LoadGridData(object sender, EventArgs e)
  1360. {
  1361. AllCollect = false;
  1362. sql.Clear();
  1363. sql.Append("select pd_custprodcode,pd_custprodspec,pd_pocode,pib_madein,pib_custbarcode,pib_custoutboxcode,pib_id,pib_datecode1,pib_pdid,pib_piid,pib_pdno,pib_prodcode,nvl(nvl(pd_brand,pib_brand),pr_brand)pib_brand, pr_vendprodcode,");
  1364. sql.Append("pib_lotno,pib_datecode,pib_qty,pr_spec,pr_zxbzs,pr_unit,pib_barcode,pib_outboxcode1,pib_outboxcode2,nvl(pib_ifprint,0)pib_ifprint");
  1365. sql.Append(" from prodiobarcode left join prodiodetail on pib_piid=pd_piid and pd_pdno=pib_pdno and ");
  1366. sql.Append(" pd_prodcode=pib_prodcode left join product on pr_code=pib_prodcode left join sale on sa_code=pib_ordercode ");
  1367. sql.Append("where pib_piid='" + PI_ID + "' order by to_number(pib_outboxcode1),pib_id,pd_prodcode");
  1368. LabelInfDataTable = (DataTable)dh.ExecuteSql(sql.ToString(), "select");
  1369. BaseUtil.FillDgvWithDataTable(LabelInf, LabelInfDataTable);
  1370. //有数据的话默认取第一条的品牌去取采集策略
  1371. TotalCount.Text = LabelInf.RowCount.ToString();
  1372. if (LabelInf.Rows.Count > 0)
  1373. LabelInf.FirstDisplayedScrollingRowIndex = LabelInf.Rows.Count - 1;
  1374. }
  1375. private void Refresh_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  1376. {
  1377. KeyEventArgs e2 = new KeyEventArgs(Keys.Enter);
  1378. pi_inoutno_KeyDown(sender, e2);
  1379. }
  1380. /// <summary>
  1381. /// 采集明细切换
  1382. /// </summary>
  1383. /// <param name="sender"></param>
  1384. /// <param name="e"></param>
  1385. private void griddetno_KeyDown(object sender, KeyEventArgs e)
  1386. {
  1387. if (Keys.Enter == e.KeyData)
  1388. {
  1389. bool FindDetno = false;
  1390. for (int i = 0; i < LabelInf.RowCount; i++)
  1391. {
  1392. if (LabelInf.Rows[i].Cells["pib_pdno"].Value.ToString() == griddetno.Text)
  1393. {
  1394. FindDetno = true;
  1395. CurrentRowIndex = i;
  1396. break;
  1397. }
  1398. }
  1399. if (!FindDetno)
  1400. {
  1401. MessageBox.Show("不存在未采集的明细序号" + griddetno.Text);
  1402. return;
  1403. }
  1404. }
  1405. }
  1406. private void AutoPrintMidLabel()
  1407. {
  1408. bool FullBox = true;
  1409. //判断所有盒号未该盒的是否勾选已采集
  1410. for (int i = 0; i < LabelInf.RowCount; i++)
  1411. {
  1412. //if (LabelInf.Rows[i].Cells["pib_outboxcode1"].Value.ToString() == LabelInf.Rows[CurrentRowIndex].Cells["pib_outboxcode1"].Value.ToString())
  1413. //{
  1414. // if (LabelInf.Rows[i].Cells["pib_ifpick"].FormattedValue.ToString() != "True")
  1415. // FullBox = false;
  1416. //}
  1417. }
  1418. //如果当前箱号已经装满了
  1419. if (FullBox)
  1420. {
  1421. if (MidLabelCombox.SelectedValue != null)
  1422. {
  1423. string la_id = MidLabelCombox.SelectedValue.ToString().Split('#')[0];
  1424. MidBoxCodePrint(la_id, CurrentRowIndex);
  1425. }
  1426. else
  1427. MessageBox.Show("未维护中盒模板");
  1428. }
  1429. }
  1430. /// <summary>
  1431. /// 勾选的时候自动打印
  1432. /// </summary>
  1433. /// <param name="sender"></param>
  1434. /// <param name="e"></param>
  1435. private void LabelInf_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  1436. {
  1437. if (LabelInf.Columns[e.ColumnIndex].Name == "pib_datecode")
  1438. {
  1439. string datecode = LabelInf.Rows[e.RowIndex].Cells["pib_datecode"].Value.ToString();
  1440. try
  1441. {
  1442. System.DateTime dt = System.DateTime.ParseExact(datecode, "yyyyMMdd", CultureInfo.CurrentCulture);
  1443. GregorianCalendar gc = new GregorianCalendar();
  1444. int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
  1445. if (weekOfYear < 10)
  1446. LabelInf.Rows[e.RowIndex].Cells["pib_datecode1"].Value = dt.Year.ToString().Substring(2, 2) + "0" + weekOfYear;
  1447. else
  1448. LabelInf.Rows[e.RowIndex].Cells["pib_datecode1"].Value = dt.Year.ToString().Substring(2, 2) + weekOfYear;
  1449. }
  1450. catch (Exception) { }
  1451. }
  1452. }
  1453. private void AllCollected_Click(object sender, EventArgs e)
  1454. {
  1455. if (AllCollect == false)
  1456. {
  1457. foreach (DataGridViewRow dr in LabelInf.Rows)
  1458. dr.Cells[1].Value = true;
  1459. AllCollect = true;
  1460. }
  1461. else
  1462. {
  1463. foreach (DataGridViewRow dr in LabelInf.Rows)
  1464. dr.Cells[1].Value = false;
  1465. AllCollect = false;
  1466. }
  1467. }
  1468. private void LogingOut_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
  1469. {
  1470. string close = MessageBox.Show(this.ParentForm, "是否注销", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  1471. if (close.ToString() == "Yes")
  1472. {
  1473. Login login = new Login();
  1474. //注销的时候需要将拼接的连接字符串置空
  1475. DataHelper.DBConnectionString = null;
  1476. logout = true;
  1477. lbl.Quit();
  1478. this.Hide();
  1479. login.ShowDialog();
  1480. this.Close();
  1481. }
  1482. }
  1483. private void LabelInf_DataError(object sender, DataGridViewDataErrorEventArgs e) { }
  1484. /// <summary>
  1485. /// 切换打开的单盘文件
  1486. /// </summary>
  1487. /// <param name="sender"></param>
  1488. /// <param name="e"></param>
  1489. private void SingleLabelCombox_SelectedIndexChanged(object sender, EventArgs e)
  1490. {
  1491. try
  1492. {
  1493. if (ComBoxClickChangeLabelDoc)
  1494. {
  1495. if (SingleDoc != null)
  1496. SingleDoc.Close();
  1497. if (SingleLabelCombox.Text != "" && SingleLabelCombox.SelectedValue != null && !GetGridOnly.Checked)
  1498. {
  1499. System.DateTime time = Convert.ToDateTime(SingleLabelCombox.SelectedValue.ToString().Split('#')[2]);
  1500. SingleDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(SingleLabelCombox.SelectedValue.ToString().Split('#')[1], SingleLabelCombox.Text, time));
  1501. }
  1502. }
  1503. }
  1504. catch (Exception) { }
  1505. }
  1506. /// <summary>
  1507. /// 切换打开的中盒文件
  1508. /// </summary>
  1509. /// <param name="sender"></param>
  1510. /// <param name="e"></param>
  1511. private void MidLabelCombox_SelectedIndexChanged(object sender, EventArgs e)
  1512. {
  1513. try
  1514. {
  1515. if (ComBoxClickChangeLabelDoc)
  1516. {
  1517. if (MidDoc != null)
  1518. MidDoc.Close();
  1519. if (MidLabelCombox.Text != "" && MidLabelCombox.SelectedValue != null && !GetGridOnly.Checked)
  1520. {
  1521. System.DateTime time = Convert.ToDateTime(MidLabelCombox.SelectedValue.ToString().Split('#')[2]);
  1522. MidDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(MidLabelCombox.SelectedValue.ToString().Split('#')[1], MidLabelCombox.Text, time));
  1523. }
  1524. }
  1525. }
  1526. catch (Exception) { }
  1527. }
  1528. /// <summary>
  1529. /// 切换打开的外箱文件
  1530. /// </summary>
  1531. /// <param name="sender"></param>
  1532. /// <param name="e"></param>
  1533. private void OutBoxCombox_SelectedIndexChanged(object sender, EventArgs e)
  1534. {
  1535. try
  1536. {
  1537. if (ComBoxClickChangeLabelDoc)
  1538. {
  1539. if (OutBoxDoc != null)
  1540. OutBoxDoc.Close();
  1541. if (OutBoxCombox.Text != "" && OutBoxCombox.SelectedValue != null && !GetGridOnly.Checked)
  1542. {
  1543. System.DateTime time = Convert.ToDateTime(OutBoxCombox.SelectedValue.ToString().Split('#')[2]);
  1544. OutBoxDoc = lbl.Documents.Open(BaseUtil.GetLabelUrl(OutBoxCombox.SelectedValue.ToString().Split('#')[1], OutBoxCombox.Text, time));
  1545. }
  1546. }
  1547. }
  1548. catch (Exception) { }
  1549. }
  1550. private void ChooseAll_Click(object sender, EventArgs e)
  1551. {
  1552. if (AllChecked)
  1553. {
  1554. foreach (DataGridViewRow dr in LabelInf.Rows)
  1555. dr.Cells[0].Value = false;
  1556. AllChecked = false;
  1557. }
  1558. else
  1559. {
  1560. foreach (DataGridViewRow dr in LabelInf.Rows)
  1561. dr.Cells[0].Value = true;
  1562. AllChecked = true;
  1563. }
  1564. }
  1565. private void ExportData_Click(object sender, EventArgs e)
  1566. {
  1567. ExportFileDialog.Description = "选择导出的路径";
  1568. DialogResult result = ExportFileDialog.ShowDialog();
  1569. if (result == DialogResult.OK)
  1570. {
  1571. ExcelHandler eh = new ExcelHandler();
  1572. DataTable dt = LabelInfDataTable.Copy();
  1573. for (int i = dt.Columns.Count - 1; i >= 0; i--)
  1574. {
  1575. for (int j = 0; j < LabelInf.Columns.Count; j++)
  1576. {
  1577. //去除ID列
  1578. if (dt.Columns[i].ColumnName.ToLower().Contains("id") || dt.Columns[i].ColumnName.ToLower() == "pib_barcode" || dt.Columns[i].ColumnName.ToLower() == "pib_pdno" || dt.Columns[i].ColumnName.ToLower() == "pib_ifprint" || dt.Columns[i].ColumnName.ToLower() == "pib_datecode1" || dt.Columns[i].ColumnName.ToLower() == "pr_vendprodcode")
  1579. {
  1580. dt.Columns.RemoveAt(i);
  1581. break;
  1582. }
  1583. switch (dt.Columns[i].ColumnName.ToLower())
  1584. {
  1585. case "pib_lotno":
  1586. dt.Columns[i].ColumnName = "批次号";
  1587. break;
  1588. case "pib_datecode":
  1589. dt.Columns[i].ColumnName = "生产日期";
  1590. break;
  1591. case "pib_custbarcode":
  1592. dt.Columns[i].ColumnName = "最小产品包装条码";
  1593. break;
  1594. default:
  1595. break;
  1596. }
  1597. if (dt.Columns[i].ColumnName.ToLower() == LabelInf.Columns[j].DataPropertyName.ToLower())
  1598. {
  1599. dt.Columns[i].ColumnName = LabelInf.Columns[j].HeaderText;
  1600. break;
  1601. }
  1602. }
  1603. }
  1604. eh.ExportExcel(dt, ExportFileDialog.SelectedPath, pi_date.Text + "-" + pi_inoutno.Text);
  1605. string close = MessageBox.Show(this.ParentForm, "导出成功,是否打开文件", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question).ToString();
  1606. if (close.ToString() == "Yes")
  1607. System.Diagnostics.Process.Start(ExportFileDialog.SelectedPath + "\\" + pi_date.Text + "-" + pi_inoutno.Text + ".xls");
  1608. }
  1609. }
  1610. private void AttachInfo_Click(object sender, EventArgs e)
  1611. {
  1612. if (pi_cardcode.Text != "")
  1613. {
  1614. 附件内容打印 att = new 附件内容打印(pi_cardcode.Text);
  1615. att.ShowDialog();
  1616. }
  1617. else MessageBox.Show("请先获取出库单信息");
  1618. }
  1619. private void MidBoxCapacity_Leave(object sender, EventArgs e)
  1620. {
  1621. NumericUpDown nup = (NumericUpDown)sender;
  1622. switch (nup.Name)
  1623. {
  1624. case "MidBoxCapacity":
  1625. Properties.Settings.Default.MidBoxCapacity = nup.Value;
  1626. Properties.Settings.Default.Save();
  1627. break;
  1628. case "OutboxCapacity":
  1629. Properties.Settings.Default.OutboxCapacity = nup.Value;
  1630. Properties.Settings.Default.Save();
  1631. break;
  1632. default:
  1633. break;
  1634. }
  1635. }
  1636. private void RefreshDBConnect_Tick(object sender, EventArgs e)
  1637. {
  1638. dh.ExecuteSql("select count(1) from employee", "select");
  1639. }
  1640. private void LoadPrcodeData()
  1641. {
  1642. GridPrcode.DataSource = (DataTable)dh.ExecuteSql("select pd_prodcode,pd_brand,pjd_zxbzs_user,pr_unit from prodiodetail left join prodinout on pi_id=pd_piid left join PRODJOINVENDDETAIL on pjd_brand =pd_brand and pjd_prodcode=pd_prodcode left join product on pd_prodcode=pr_code where pi_id='" + PI_ID + "' order by pjd_prodcode", "select");
  1643. if (GridPrcode.Rows.Count > 0)
  1644. {
  1645. CurrentPrCode = GridPrcode.Rows[0].Cells["pd_prodcode"].Value.ToString();
  1646. CurrentZXBZ = GridPrcode.Rows[0].Cells["pjd_zxbzs_user"].Value.ToString();
  1647. CurrentUnit = GridPrcode.Rows[0].Cells["pr_unit"].Value.ToString();
  1648. }
  1649. }
  1650. private void GridPrcode_CellClick(object sender, DataGridViewCellEventArgs e)
  1651. {
  1652. //用户在重新勾选后重置采集项目的索引
  1653. if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
  1654. {
  1655. CurrentPrCode = GridPrcode.Rows[e.RowIndex].Cells["pd_prodcode"].ToString();
  1656. CurrentZXBZ = GridPrcode.Rows[e.RowIndex].Cells["pjd_zxbzs_user"].ToString();
  1657. CurrentUnit = GridPrcode.Rows[e.RowIndex].Cells["pr_unit"].ToString();
  1658. }
  1659. }
  1660. private bool EnablePrint = true;
  1661. private void SetPrintStatus_Click(object sender, EventArgs e)
  1662. {
  1663. EnablePrint = !EnablePrint;
  1664. if (EnablePrint)
  1665. {
  1666. SetPrintStatus_label.ForeColor = Color.Green;
  1667. SetPrintStatus_label.Text = "可打印";
  1668. }
  1669. else
  1670. {
  1671. SetPrintStatus_label.ForeColor = Color.Red;
  1672. SetPrintStatus_label.Text = "暂停打印";
  1673. }
  1674. }
  1675. private void OutBoxNum_Click(object sender, EventArgs e)
  1676. {
  1677. OutBoxNum.Items.Clear();
  1678. DataTable dt = (DataTable)dh.ExecuteSql("select distinct pib_outboxcode2 from prodiobarcode where pib_inoutno='" + pi_inoutno.Text + "' order by pib_outboxcode2", "select");
  1679. ItemObject io = new ItemObject("新增", "新增");
  1680. OutBoxNum.Items.Add(io);
  1681. for (int i = 0; i < dt.Rows.Count; i++)
  1682. {
  1683. string pib_outboxcode2 = dt.Rows[i]["pib_outboxcode2"].ToString();
  1684. io = new ItemObject(pib_outboxcode2, pib_outboxcode2);
  1685. OutBoxNum.Items.Add(io);
  1686. }
  1687. OutBoxNum.SelectedIndex = OutBoxNum.Items.Count - 1;
  1688. }
  1689. }
  1690. }