华恒Mes鼎捷代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

561 lines
20 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using DevExpress.XtraEditors;
  9. using ICSSoft.Frame.User.BLL;
  10. using ICSSoft.Base.Language.Tool;
  11. using ICSSoft.Base.UserControl.MessageControl;
  12. using System.Data.SqlClient;
  13. using ICSSoft.Base.Config.AppConfig;
  14. using ICSSoft.Base.Report.Filter;
  15. using ICSSoft.Base.Config.DBHelper;
  16. using ICSSoft.Base.UserControl.FormControl;
  17. using ICSSoft.Base.ReferForm.AppReferForm;
  18. using ICSSoft.Base.Lable.PrintTool;
  19. using ICSSoft.Frame.Data.BLL;
  20. using ICSSoft.Frame.Data.Entity;
  21. namespace ICSSoft.Frame.APP
  22. {
  23. public partial class FormICSMbarcodeCreate : DevExpress.XtraEditors.XtraForm
  24. {
  25. private FormICSRdrecord2LOTUIModel RecInfo;
  26. private string CODE;
  27. private string RowNo;
  28. private string invStd;
  29. private string type;
  30. #region 构造函数
  31. public FormICSMbarcodeCreate(string code,string rowNO,string InvStd,string Type)
  32. {
  33. InitializeComponent();
  34. chkBtnAll.Checked = false;
  35. chkBtnNo.Checked = true;
  36. type = Type;
  37. CODE = code;
  38. RowNo = rowNO;
  39. invStd = InvStd;
  40. GetRecInfo();
  41. if (RecInfo == null)
  42. {
  43. throw new Exception("入库单信息取得失败");
  44. }
  45. //if (RecInfo.item.ItemCtrType == null || RecInfo.item.ItemCtrType.ItemCtrTypeCode == "")
  46. //{
  47. // throw new Exception("入库单对应料品的控管类型为空,无法生成条码");
  48. //}
  49. }
  50. #endregion
  51. #region 移动窗体
  52. private const int WM_NCHITTEST = 0x84;
  53. private const int HTCLIENT = 0x1;
  54. private const int HTCAPTION = 0x2;
  55. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  56. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  57. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  58. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  59. //重写窗体,使窗体可以不通过自带标题栏实现移动
  60. protected override void WndProc(ref Message m)
  61. {
  62. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  63. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  64. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  65. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  66. switch (m.Msg)
  67. {
  68. case WM_NCHITTEST:
  69. base.WndProc(ref m);
  70. if ((int)m.Result == HTCLIENT)
  71. m.Result = (IntPtr)HTCAPTION;
  72. return;
  73. }
  74. //拦截双击标题栏、移动窗体的系统消息
  75. if (m.Msg != 0xA3)
  76. {
  77. base.WndProc(ref m);
  78. }
  79. }
  80. #endregion
  81. #region 退出
  82. private void btnClose_Click(object sender, EventArgs e)
  83. {
  84. AppConfig.CloseFormShow(this.Text);
  85. this.Close();
  86. }
  87. private void btnExit_Click(object sender, EventArgs e)
  88. {
  89. AppConfig.CloseFormShow(this.Text);
  90. this.Close();
  91. }
  92. #endregion
  93. private void GetRecInfo()
  94. {
  95. RecInfo = ICSMbarcodeLOTBLL.SearchInfo(CODE, RowNo, AppConfig.AppConnectString);
  96. init();
  97. }
  98. private void init()
  99. {
  100. txtSumNo.Text = "";
  101. txtNowNo.Text = "";
  102. txtNowQty.Text = "";
  103. txtSumQty.Text = "";
  104. txtAllQty.Text = "";
  105. btnLabelCreate.Enabled = true;
  106. if (RecInfo == null)
  107. {
  108. return;
  109. }
  110. //if (RecInfo.item != null)
  111. //{
  112. // if (RecInfo.item.ItemCtrType == null)
  113. // {
  114. // btnLabelCreate.Enabled = false;
  115. // }
  116. //if (RecInfo.item.ItemCtrType.ItemCtrTypeCode == ATVControlParam.ItemCtrlEnum.PieceCtrl.Code)
  117. //{
  118. // txtNowPackQty.Text = "1";
  119. // txtNowPackQty.Properties.ReadOnly = true;
  120. // chkBtnPack.Checked = false;
  121. // chkBtnPack.Checked = true;
  122. // chkBtnAll.Enabled = false;
  123. // chkBtnNo.Enabled = false;
  124. // chkBtnPack.Enabled = false;
  125. //}
  126. //else
  127. //{
  128. //txtNowPackQty.Text = "1";
  129. txtNowPackQty.Properties.ReadOnly = false;
  130. //chkBtnPack.Checked = false;
  131. //chkBtnPack.Checked = true;
  132. chkBtnAll.Enabled = true;
  133. chkBtnNo.Enabled = true;
  134. chkBtnPack.Enabled = true;
  135. //}
  136. //}
  137. txtSumQty.Text = RecInfo.SumQty.ToString();
  138. txtSumNo.Text = RecInfo.SumNo.ToString();
  139. txtNowQty.Text = (RecInfo.rdrecords.MOPLANQTY - RecInfo.SumQty > 0 ? RecInfo.rdrecords.MOPLANQTY - RecInfo.SumQty : 0).ToString();
  140. //txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text)).ToString();
  141. if (string.IsNullOrWhiteSpace(RecInfo.inventory.INVCARTONQTY.ToString()))
  142. {
  143. txtNowPackQty.Text = "1";
  144. txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text)).ToString();
  145. }
  146. else
  147. {
  148. if (RecInfo.inventory.INVCARTONQTY == 0)
  149. {
  150. txtNowPackQty.Text = "1";
  151. txtNowNo.Text = txtNowQty.Text;
  152. }
  153. else
  154. {
  155. txtNowPackQty.Text = RecInfo.inventory.INVCARTONQTY.ToString();
  156. txtNowNo.Text = Math.Ceiling(decimal.Parse(txtNowQty.Text) / decimal.Parse(RecInfo.inventory.INVCARTONQTY.ToString())).ToString();
  157. }
  158. }
  159. txtAllQty.Text = (decimal.Parse(txtSumQty.Text) + decimal.Parse(txtNowQty.Text)).ToString();
  160. txtAllNo.Text = (decimal.Parse(txtSumNo.Text) + decimal.Parse(txtNowNo.Text)).ToString();
  161. }
  162. private void btnLabelCreate_Click(object sender, EventArgs e)
  163. {
  164. String VLotNo = "";
  165. if (RecInfo == null)
  166. {
  167. ICSBaseSimpleCode.AppshowMessageBox("入库单信息取得失败");
  168. return;
  169. }
  170. if (string.IsNullOrWhiteSpace(RecInfo.rdrecords.MOCODE) || string.IsNullOrWhiteSpace(RecInfo.rdrecords.MOSEQ.ToString()))
  171. {
  172. ICSBaseSimpleCode.AppshowMessageBox("生产订单号或生产订单号行号不能为空!");
  173. return;
  174. }
  175. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在生成条码……");
  176. try
  177. {
  178. _wait.Show();
  179. Decimal totalQty = decimal.Parse(txtNowQty.Text);
  180. decimal pieceQty = decimal.Parse(txtNowPackQty.Text);
  181. int Num = int.Parse(txtNowNo.Text);
  182. if (pieceQty * Num < totalQty || pieceQty * (Num - 1) >= totalQty)
  183. {
  184. throw new Exception("条码数量计算出错,请重新计算");
  185. }
  186. decimal Qty = decimal.Parse(txtNowPackQty.Text);
  187. if (Num <= 0)
  188. {
  189. throw new Exception("条码张数不能为0");
  190. }
  191. if (Qty <= 0)
  192. {
  193. throw new Exception("条码数量不能为0");
  194. }
  195. List<ICSITEMLot> InfoList = new List<ICSITEMLot>();
  196. int count = Convert.ToInt32(RecInfo.MaxNo);
  197. DateTime time = AppConfig.GetSeverDateTime("yyyy-MM-dd");
  198. string timeStr=time.ToString("yyMMdd");
  199. string sql = @"SELECT A.VenderLotNO AS VenderLotNO FROM ICSITEMLot A WHERE TransNO ='{0}' AND TransLine='{1}' ORDER BY A.VenderLotNO desc";
  200. sql = string.Format(sql, CODE, RowNo);
  201. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  202. if (dt == null || dt.Rows.Count <= 0)
  203. {
  204. if (type.Equals("I02"))//半成品
  205. {
  206. VLotNo = "SFG" + RecInfo.rdrecords.MOCODE + (RecInfo.TodayMOCount + 1).ToString().PadLeft(2, '0');
  207. }
  208. //else if (type.Equals("I05"))//成品
  209. //{
  210. // VLotNo = "FG" + RecInfo.rdrecords.MOCODE + (RecInfo.TodayMOCount + 1).ToString().PadLeft(2, '0');
  211. //}
  212. else
  213. {
  214. VLotNo = "FG" + RecInfo.rdrecords.MOCODE + (RecInfo.TodayMOCount + 1).ToString().PadLeft(2, '0');
  215. }
  216. }
  217. else if (dt != null && dt.Rows.Count > 0 && !string.IsNullOrEmpty(dt.Rows[0]["VenderLotNO"].ToString()))
  218. {
  219. VLotNo = (dt.Rows[0][0].ToString().Substring(0, dt.Rows[0][0].ToString().Length - 2)).ToString() + (Convert.ToInt32(dt.Rows[0][0].ToString().Substring(dt.Rows[0][0].ToString().Length - 2)) + 1).ToString().PadLeft(2, '0');
  220. }
  221. for (int i = 0; i < Num; i++)
  222. {
  223. _wait.Caption = "正在生成条码……" + " " + i.ToString() + "/" + Num.ToString();
  224. _wait.Refresh();
  225. ICSITEMLot Info = new ICSITEMLot();
  226. Info.ID = "";
  227. if (Qty < totalQty - Qty * i)
  228. {
  229. Info.LOTQTY = Qty;
  230. }
  231. else
  232. {
  233. Info.LOTQTY = totalQty - Qty * i;
  234. }
  235. Info.LotNO = RecInfo.rdrecords.MOCODE + RecInfo.rdrecords.MOSEQ + (count + i + 1).ToString().PadLeft(5, '0');
  236. Info.MCODE = RecInfo.rdrecords.ITEMCODE;
  237. Info.TransNO = RecInfo.rdrecords.MOCODE;
  238. Info.TransLine = RecInfo.rdrecords.MOSEQ;
  239. //if (!string.IsNullOrWhiteSpace(RecInfo.VenderLotNO))
  240. // Info.VenderLotNO = RecInfo.VenderLotNO;
  241. //else
  242. // Info.VenderLotNO = timeStr.Substring(timeStr.Length-6) + (RecInfo.TodayMOCount+1).ToString().PadLeft(3,'0'); //生产批号,每个工单一个
  243. Info.VenderLotNO = VLotNo;
  244. Info.PRODUCTDATE = time;
  245. Info.ACTIVE = "Y";
  246. Info.Exdate = Convert.ToDateTime("2999-12-31");
  247. Info.TYPE = type;
  248. InfoList.Add(Info);
  249. }
  250. _wait.Caption = "条码生成成功,正在上传数据";
  251. _wait.Refresh();
  252. ICSMbarcodeLOTBLL.Add(InfoList,AppConfig.AppConnectString);
  253. //_wait.Caption = "数据上传完成,正在打开条码打印";
  254. //_wait.Refresh();
  255. //GetRecInfo();
  256. _wait.Close();
  257. this.Close();
  258. }
  259. catch (Exception ex)
  260. {
  261. _wait.Close();
  262. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  263. }
  264. }
  265. private void chkBtnAll_CheckedChanged(object sender, EventArgs e)
  266. {
  267. if (chkBtnAll.Checked == true)
  268. {
  269. chkBtnAll.Checked = true;
  270. chkBtnNo.Checked = false;
  271. chkBtnPack.Checked = false;
  272. chkBtnCheckedCharge();
  273. }
  274. }
  275. private void chkBtnNo_CheckedChanged(object sender, EventArgs e)
  276. {
  277. if (chkBtnNo.Checked == true)
  278. {
  279. chkBtnAll.Checked = false;
  280. chkBtnNo.Checked = true;
  281. chkBtnPack.Checked = false;
  282. chkBtnCheckedCharge();
  283. }
  284. }
  285. private void chkBtnPack_CheckedChanged(object sender, EventArgs e)
  286. {
  287. if (chkBtnPack.Checked == true)
  288. {
  289. chkBtnAll.Checked = false;
  290. chkBtnNo.Checked = false;
  291. chkBtnPack.Checked = true;
  292. chkBtnCheckedCharge();
  293. }
  294. }
  295. private void chkBtnCheckedCharge()
  296. {
  297. if (chkBtnAll.Checked == true)
  298. {
  299. chkBtnAll.Checked = true;
  300. chkBtnNo.Checked = false;
  301. chkBtnPack.Checked = false;
  302. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  303. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  304. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  305. txtNowQty.Properties.ReadOnly = true;
  306. txtNowNo.Properties.ReadOnly = false;
  307. txtNowPackQty.Properties.ReadOnly = false;
  308. }
  309. else if (chkBtnNo.Checked == true)
  310. {
  311. chkBtnAll.Checked = false;
  312. chkBtnNo.Checked = true;
  313. chkBtnPack.Checked = false;
  314. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  315. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  316. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  317. txtNowQty.Properties.ReadOnly = false;
  318. txtNowNo.Properties.ReadOnly = true;
  319. txtNowPackQty.Properties.ReadOnly = false;
  320. }
  321. else if (chkBtnPack.Checked == true)
  322. {
  323. chkBtnAll.Checked = false;
  324. chkBtnNo.Checked = false;
  325. chkBtnPack.Checked = true;
  326. this.chkBtnAll.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  327. this.chkBtnNo.Image = global::ICSSoft.Frame.APP.Properties.Resources.edit;
  328. this.chkBtnPack.Image = global::ICSSoft.Frame.APP.Properties.Resources.header_complete;
  329. txtNowQty.Properties.ReadOnly = false;
  330. txtNowNo.Properties.ReadOnly = false;
  331. txtNowPackQty.Properties.ReadOnly = true;
  332. }
  333. }
  334. private void txtNowPackQty_TextChanged(object sender, EventArgs e)
  335. {
  336. }
  337. private void txtDocOrg_EditValueChanged(object sender, EventArgs e)
  338. {
  339. }
  340. private void txtNowPackQty_EditValueChanged(object sender, EventArgs e)
  341. {
  342. bool isOK = false;
  343. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  344. {
  345. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  346. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  347. {
  348. isOK = true;
  349. }
  350. }
  351. if (!isOK)
  352. {
  353. return;
  354. }
  355. decimal No = 0;
  356. decimal Qty = 0;
  357. decimal Pack = 0;
  358. decimal Sqty = 0;
  359. decimal.TryParse(txtNowNo.Text, out No);
  360. decimal.TryParse(txtNowQty.Text, out Qty);
  361. decimal.TryParse(txtNowPackQty.Text, out Pack);
  362. if (txtNowNo.Properties.ReadOnly == true)
  363. {
  364. if (Pack == 0)
  365. {
  366. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  367. return;
  368. }
  369. Sqty = Math.Ceiling(Qty / Pack);
  370. txtNowNo.Text = Sqty.ToString();
  371. txtNowQty.Text = Qty.ToString();
  372. txtNowPackQty.Text = Pack.ToString();
  373. }
  374. if (txtNowQty.Properties.ReadOnly == true)
  375. {
  376. if (Pack != 0)
  377. {
  378. Sqty = Math.Ceiling(Qty / Pack);
  379. txtNowNo.Text = Sqty.ToString();
  380. txtNowQty.Text = Qty.ToString();
  381. txtNowPackQty.Text = Pack.ToString();
  382. }
  383. else
  384. {
  385. No = 0;
  386. }
  387. }
  388. }
  389. private void txtNowNo_EditValueChanged(object sender, EventArgs e)
  390. {
  391. bool isOK = false;
  392. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  393. {
  394. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  395. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  396. {
  397. isOK = true;
  398. }
  399. }
  400. if (!isOK)
  401. {
  402. return;
  403. }
  404. decimal No;
  405. decimal Qty;
  406. decimal Pack;
  407. decimal Sqty = 0;
  408. decimal.TryParse(txtNowNo.Text, out No);
  409. decimal.TryParse(txtNowQty.Text, out Qty);
  410. decimal.TryParse(txtNowPackQty.Text, out Pack);
  411. if (txtNowPackQty.Properties.ReadOnly == true)
  412. {
  413. Sqty = Math.Ceiling(Qty / Pack);
  414. txtNowNo.Text = Sqty.ToString();
  415. txtNowQty.Text = Qty.ToString();
  416. txtNowPackQty.Text = Pack.ToString();
  417. }
  418. if (txtNowQty.Properties.ReadOnly == true)
  419. {
  420. if (No != 0)
  421. {
  422. Sqty = Math.Ceiling(Qty / Pack);
  423. txtNowNo.Text = Sqty.ToString();
  424. txtNowQty.Text = Qty.ToString();
  425. txtNowPackQty.Text = Pack.ToString();
  426. }
  427. else
  428. {
  429. Pack = 0;
  430. }
  431. }
  432. }
  433. private void txtNowQty_EditValueChanged(object sender, EventArgs e)
  434. {
  435. bool isOK = false;
  436. if (this.ActiveControl != null && this.ActiveControl.GetType() == typeof(DevExpress.XtraEditors.TextBoxMaskBox))
  437. {
  438. DevExpress.XtraEditors.TextBoxMaskBox temp = this.ActiveControl as DevExpress.XtraEditors.TextBoxMaskBox;
  439. if (temp.OwnerEdit.Name == ((DevExpress.XtraEditors.TextEdit)sender).Name)
  440. {
  441. isOK = true;
  442. }
  443. }
  444. if (!isOK)
  445. {
  446. return;
  447. }
  448. decimal No = 0;
  449. decimal Qty = 0;
  450. decimal Pack = 0;
  451. decimal Sqty = 0;
  452. decimal.TryParse(txtNowNo.Text, out No);
  453. decimal.TryParse(txtNowQty.Text, out Qty);
  454. decimal.TryParse(txtNowPackQty.Text, out Pack);
  455. if (txtNowPackQty.Properties.ReadOnly == true)
  456. {
  457. if (Pack != 0)
  458. {
  459. if (Pack == 0)
  460. {
  461. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  462. return;
  463. }
  464. Sqty = Math.Ceiling(Qty / Pack);
  465. txtNowNo.Text = Sqty.ToString();
  466. txtNowQty.Text = Qty.ToString();
  467. txtNowPackQty.Text = Pack.ToString();
  468. }
  469. }
  470. if (txtNowNo.Properties.ReadOnly == true)
  471. {
  472. if (Pack == 0)
  473. {
  474. ICSBaseSimpleCode.AppshowMessageBox("包装量不能为0");
  475. return;
  476. }
  477. Sqty = Math.Ceiling(Qty / Pack);
  478. txtNowNo.Text = Sqty.ToString();
  479. txtNowQty.Text = Qty.ToString();
  480. txtNowPackQty.Text = Pack.ToString();
  481. }
  482. }
  483. }
  484. }