UAS_出货标签管理.cs 89 KB

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