锐腾搅拌上料功能
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.

528 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.Data.Linq;
  6. using System.Linq;
  7. using System.Drawing;
  8. using System.Text;
  9. using System.Windows.Forms;
  10. using DevExpress.XtraEditors;
  11. using DevExpress.XtraGrid.Views.BandedGrid;
  12. using DevExpress.XtraGrid.Columns;
  13. using DevExpress.XtraGrid;
  14. using System.IO;
  15. using System.Threading;
  16. using ICSSoft.Base.Language.Tool;
  17. using ICSSoft.Base.Config.AppConfig;
  18. using ICSSoft.Base.UserControl.MessageControl;
  19. using ICSSoft.Base.Config.DBHelper;
  20. using ICSSoft.Base.Report.Filter;
  21. using ICSSoft.Base.UserControl.FormControl;
  22. using ICSSoft.Base.Report.GridReport;
  23. using ICSSoft.Base.ReferForm.AppReferForm;
  24. using ICSSoft.Frame.Data.BLL;
  25. using ICSSoft.Base.Lable.PrintTool;
  26. using DevExpress.XtraPrinting;
  27. namespace ICSSoft.Frame.APP
  28. {
  29. public partial class FormICSInvTransferGauge : DevExpress.XtraEditors.XtraForm
  30. {
  31. private string sqltxt = "";
  32. private string sqlconn = "";
  33. String guid = AppConfig.GetGuid();
  34. private DataTable dataSource = null;
  35. private string MoId = "";
  36. private string MoCode = "";
  37. private decimal Qty = 0.00m;
  38. DataTable Serialdata = null;
  39. #region 构造函数
  40. public FormICSInvTransferGauge()
  41. {
  42. InitializeComponent();
  43. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  44. this.WindowState = FormWindowState.Maximized;
  45. }
  46. public FormICSInvTransferGauge(string moID, string moCode, decimal qty)
  47. {
  48. InitializeComponent();
  49. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  50. this.WindowState = FormWindowState.Maximized;
  51. MoId = moID;
  52. MoCode = moCode;
  53. Qty = qty;
  54. }
  55. #endregion
  56. #region 操作权限
  57. public DataTable RightOfExute()
  58. {
  59. DataTable rData = new DataTable();
  60. rData.Columns.Add("BtnName");
  61. rData.Columns.Add("ActionName");
  62. //查看权限(必须有)
  63. DataRow seeRow = rData.NewRow();
  64. seeRow["BtnName"] = "see";
  65. seeRow["ActionName"] = "查看";
  66. rData.Rows.Add(seeRow);
  67. List<Control> ControlList = new List<Control>();
  68. ControlList.Add(btnPrint);
  69. ControlList.Add(btnOutPut);
  70. foreach (Control ctr in ControlList)
  71. {
  72. if (ctr.GetType() == typeof(SimpleButton))
  73. {
  74. DataRow dr = rData.NewRow();
  75. dr["BtnName"] = ctr.Name;
  76. dr["ActionName"] = ctr.Text;
  77. rData.Rows.Add(dr);
  78. }
  79. }
  80. rData.AcceptChanges();
  81. return rData;
  82. }
  83. public DataTable RightOfData()// 数据权限
  84. {
  85. DataTable rData = new DataTable();
  86. rData.Columns.Add("BodyName");
  87. rData.Columns.Add("ControlName");
  88. rData.Columns.Add("ControlCaption");
  89. rData.AcceptChanges();
  90. return rData;
  91. }
  92. #endregion
  93. #region 退出
  94. private void btnClose_Click(object sender, EventArgs e)
  95. {
  96. AppConfig.CloseFormShow(this.Text);
  97. this.Close();
  98. }
  99. private void btnExit_Click(object sender, EventArgs e)
  100. {
  101. AppConfig.CloseFormShow(this.Text);
  102. this.Close();
  103. }
  104. #endregion
  105. #region 移动窗体
  106. private const int WM_NCHITTEST = 0x84;
  107. private const int HTCLIENT = 0x1;
  108. private const int HTCAPTION = 0x2;
  109. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  110. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  111. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  112. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  113. //重写窗体,使窗体可以不通过自带标题栏实现移动
  114. protected override void WndProc(ref Message m)
  115. {
  116. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  117. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  118. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  119. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  120. switch (m.Msg)
  121. {
  122. case WM_NCHITTEST:
  123. base.WndProc(ref m);
  124. if ((int)m.Result == HTCLIENT)
  125. m.Result = (IntPtr)HTCAPTION;
  126. return;
  127. }
  128. //拦截双击标题栏、移动窗体的系统消息
  129. if (m.Msg != 0xA3)
  130. {
  131. base.WndProc(ref m);
  132. }
  133. }
  134. #endregion
  135. #region 列表
  136. private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
  137. {
  138. if (e.Info.IsRowIndicator && e.RowHandle >= 0)
  139. e.Info.DisplayText = (e.RowHandle + 1).ToString();
  140. }
  141. #endregion
  142. private void btnFilter_Click(object sender, EventArgs e)
  143. {
  144. }
  145. //加载
  146. private void FormICSInvTransferGauge_Load(object sender, EventArgs e)
  147. {
  148. init();
  149. }
  150. #region 初始化查询条件
  151. private void init()
  152. {
  153. #region 单号
  154. string sql = @"SELECT DISTINCT A.TransferNO AS [单据号] FROM ICSTransVouchs A
  155. LEFT JOIN (SELECT TransferNO, SUM(ISNULL(PLANQTY, 0)) PLANQTY, SUM(ISNULL(ACTQTY, 0)) ACTQTY FROM ICSTransVouchs WHERE 1=1
  156. GROUP BY TransferNO) B ON A.TransferNO = B.TransferNO WHERE 1=1 AND B.PLANQTY <> B.ACTQTY AND A.WorkPoint = '{0}' ORDER BY A.TransferNO DESC ";
  157. sql = string.Format(sql, AppConfig.WorkPointCode);
  158. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  159. txtMOCode.Properties.ValueMember = "单据号";
  160. txtMOCode.Properties.DisplayMember = "单据号";
  161. txtMOCode.Properties.DataSource = dt;
  162. txtMOCode.Properties.NullText = "";//空时的值
  163. txtMOCode.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体
  164. txtMOCode.Properties.ValidateOnEnterKey = true;//回车确认
  165. txtMOCode.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard
  166. txtMOCode.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容
  167. //自适应宽度
  168. txtMOCode.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
  169. #endregion
  170. }
  171. #endregion
  172. private void loadData()
  173. {
  174. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
  175. try
  176. {
  177. _wait.Show();
  178. if (string.IsNullOrWhiteSpace(txtMOCode.Text.Trim()))
  179. {
  180. ICSBaseSimpleCode.AppshowMessageBox("请输入单据号!");
  181. return;
  182. }
  183. string sql = @" SELECT
  184. a.TransferNO AS cDLCode,
  185. a.TransferLine AS irowno,
  186. a.ITEMCODE AS cInvCode,
  187. b.INVNAME AS cInvName,
  188. a.cTVBatch as cTVBatch,
  189. b.INVSTD AS cInvStd,
  190. a.PLANQTY AS iQuantity,
  191. a.FROMStorageCode,
  192. a.TOStorageCode,
  193. b.INVUOM
  194. FROM
  195. ICSTransVouchs a
  196. LEFT JOIN ICSINVENTORY b ON a.ITEMCODE = b.INVCODE AND a.WorkPoint=b.WorkPoint
  197. WHERE a.TransferNO='{0}' AND a.WorkPoint = '{1}'
  198. ORDER BY a.TransferLine,a.ITEMCODE
  199. ";
  200. #region 20190916ZM注释
  201. // sql += @"
  202. // SELECT DISTINCT
  203. // c.cDLCode,
  204. // c.cInvCode,
  205. // c.cInvName,
  206. //--c.cTVBatch,
  207. //e.VenderLotNO AS cTVBatch,
  208. // c.cInvStd,
  209. // c.INVUOM,
  210. // c.iQuantity,
  211. // d.WHCode,
  212. // d.BinCode,
  213. // d.LotNO,
  214. // ISNULL(d.LotQty, 0) AS QTY,
  215. // d.MTIME,
  216. // f.QTYTotal
  217. // FROM
  218. // (
  219. // SELECT
  220. // a.TransferNO AS cDLCode,
  221. // a.ITEMCODE AS cInvCode,
  222. // b.INVNAME AS cInvName,
  223. // b.INVSTD AS cInvStd,
  224. // SUM(ISNULL(a.PLANQTY, 0)) AS iQuantity,
  225. // a.FROMStorageCode,
  226. //a.cTVBatch,
  227. // b.INVUOM
  228. // FROM
  229. // ICSTransVouchs a
  230. // LEFT JOIN ICSINVENTORY b ON a.ITEMCODE = b.INVCODE AND a.WorkPoint=b.WorkPoint
  231. // WHERE a.TransferNO='{0}' AND a.WorkPoint = '{1}'
  232. // GROUP BY a.TransferNO, a.ITEMCODE, b.INVNAME, b.INVSTD,a.FROMStorageCode,a.cTVBatch,b.INVUOM
  233. // ) c
  234. // LEFT JOIN ICSWareHouseLotInfo d ON c.cInvCode=d.INVCode AND c.FROMStorageCode=d.WHCode AND d.WorkPoint='{1}' AND d.LotQty>0
  235. //
  236. //LEFT JOIN ICSITEMLot e ON e.LotNO=d.LotNO and c.cTVBatch= e.VenderLotNO
  237. //
  238. // LEFT JOIN (SELECT INVCode,WHCode,SUM(LotQty) AS QTYTotal FROM ICSWareHouseLotInfo WHERE WorkPoint='{1}' GROUP BY INVCode,WHCode) f ON c.cInvCode=f.INVCode AND c.FROMStorageCode=f.WHCode
  239. // ORDER BY c.cInvCode,d.MTIME,d.LotNO
  240. // ";
  241. #endregion
  242. sql += @"SELECT DISTINCT
  243. c.cDLCode,
  244. c.cInvCode,
  245. c.cInvName,
  246. k.VenderLotNO AS cTVBatch,
  247. c.cInvStd,
  248. c.INVUOM,
  249. c.iQuantity,
  250. k.WHCode,
  251. k.BinCode,
  252. k.LotNO,
  253. ISNULL(k.QTY, 0) AS QTY,
  254. k.MTIME,
  255. f.QTYTotal
  256. FROM
  257. (
  258. SELECT
  259. a.TransferNO AS cDLCode,
  260. a.ITEMCODE AS cInvCode,
  261. b.INVNAME AS cInvName,
  262. b.INVSTD AS cInvStd,
  263. SUM (ISNULL(a.PLANQTY, 0)) AS iQuantity,
  264. a.FROMStorageCode,
  265. a.cTVBatch,
  266. b.INVUOM
  267. FROM
  268. ICSTransVouchs a
  269. LEFT JOIN ICSINVENTORY b ON a.ITEMCODE = b.INVCODE
  270. AND a.WorkPoint = b.WorkPoint
  271. WHERE
  272. a.TransferNO = '{0}'
  273. AND a.WorkPoint = '{1}'
  274. GROUP BY
  275. a.TransferNO,
  276. a.ITEMCODE,
  277. b.INVNAME,
  278. b.INVSTD,
  279. a.FROMStorageCode,
  280. a.cTVBatch,
  281. b.INVUOM
  282. ) c
  283. LEFT JOIN (
  284. SELECT
  285. d.BinCode,
  286. d.LotNO,
  287. ISNULL(d.LotQty, 0) AS QTY,
  288. d.MTIME,
  289. d.INVCode,
  290. d.WHCode,
  291. e.VenderLotNO
  292. FROM
  293. ICSWareHouseLotInfo d
  294. INNER JOIN ICSITEMLot e ON e.LotNO = d.LotNO
  295. WHERE
  296. d.WorkPoint = '{1}'
  297. AND d.LotQty > 0
  298. ) k ON ISNULL(c.cTVBatch, '') = ISNULL(k.VenderLotNO, '')
  299. AND c.cInvCode = k.INVCode
  300. AND c.FROMStorageCode = k.WHCode
  301. LEFT JOIN (
  302. SELECT
  303. INVCode,
  304. WHCode,
  305. SUM (LotQty) AS QTYTotal
  306. FROM
  307. ICSWareHouseLotInfo
  308. WHERE
  309. WorkPoint = '{1}'
  310. GROUP BY
  311. INVCode,
  312. WHCode
  313. ) f ON c.cInvCode = f.INVCode
  314. AND c.FROMStorageCode = f.WHCode
  315. ORDER BY
  316. c.cInvCode,
  317. k.MTIME,
  318. k.LotNO";
  319. string Where = txtMOCode.Text.Trim();
  320. #region 查询
  321. if (!string.IsNullOrWhiteSpace(cmbSEQ.Text.Trim()))
  322. {
  323. Where += "' AND a.TransferLine='" + cmbSEQ.Text.Trim() + " ";
  324. }
  325. sql = string.Format(sql, Where, AppConfig.WorkPointCode);
  326. DataSet ds = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql);
  327. if (ds != null && ds.Tables.Count == 2)
  328. {
  329. grdDetail.DataSource = ds.Tables[0];
  330. grvDetail.BestFitColumns();
  331. #region 拣料表
  332. DataTable dt = ds.Tables[1];
  333. #region 20190916先拿掉
  334. string ItemCode = "";
  335. string _cTVBatch = "";
  336. string ItemCodeAndcTVBatch = string.Empty;
  337. decimal QTY = 0;
  338. bool CanDelete = false;
  339. int count = dt.Rows.Count;
  340. for (int i = 0; i < count; i++)
  341. {
  342. DataRow dr = dt.Rows[i];
  343. //if (!ItemCode.Equals(dr["cInvCode"].ToString()))
  344. //{
  345. // ItemCode = dr["cInvCode"].ToString();
  346. // QTY = 0;
  347. // CanDelete = false;
  348. //}
  349. if (!ItemCodeAndcTVBatch.Equals(dr["cInvCode"].ToString() + dr["cTVBatch"].ToString()))
  350. {
  351. ItemCodeAndcTVBatch = dr["cInvCode"].ToString() + dr["cTVBatch"].ToString();
  352. //ItemCode = dr["cInvCode"].ToString();
  353. //_cTVBatch = dr["cTVBatch"].ToString();
  354. QTY = 0;
  355. CanDelete = false;
  356. }
  357. if (CanDelete)
  358. {
  359. dr.Delete();
  360. continue;
  361. }
  362. QTY += Convert.ToDecimal(dr["QTY"]);
  363. if (QTY >= Convert.ToDecimal(dr["iQuantity"]))
  364. {
  365. CanDelete = true;
  366. }
  367. }
  368. #endregion
  369. dt.AcceptChanges();
  370. gridControlGauge.DataSource = dt;
  371. gridViewGauge.BestFitColumns();
  372. #endregion
  373. }
  374. #endregion
  375. _wait.Close();
  376. }
  377. catch (Exception ex)
  378. {
  379. _wait.Close();
  380. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  381. }
  382. }
  383. private void txtMOCode_EditValueChanged(object sender, EventArgs e)
  384. {
  385. grdDetail.DataSource = null;
  386. gridControlGauge.DataSource = null;
  387. cmbSEQ.Text = "";
  388. cmbSEQ.Properties.Items.Clear();
  389. string MOCode = txtMOCode.EditValue.ToString();
  390. string sql = "SELECT TransferLine FROM ICSTransVouchs WHERE WorkPoint='{0}' AND TransferNO='{1}' ORDER BY TransferLine";
  391. sql = string.Format(sql, AppConfig.WorkPointCode, MOCode);
  392. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0];
  393. cmbSEQ.Properties.Items.Add("");
  394. cmbSEQ.Properties.Items.AddRange(dt.AsEnumerable().Select(a => a["TransferLine"]).ToList());
  395. loadData();
  396. }
  397. private void cmbSEQ_SelectedIndexChanged(object sender, EventArgs e)
  398. {
  399. grdDetail.DataSource = null;
  400. gridControlGauge.DataSource = null;
  401. loadData();
  402. }
  403. #region 导出
  404. private void btnOutPut_Click(object sender, EventArgs e)
  405. {
  406. SimpleButton btntemp = (SimpleButton)sender;
  407. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  408. {
  409. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  410. return;
  411. }
  412. FormOutExcel foe = new FormOutExcel(this.Tag.ToString(), grdDetail);
  413. foe.ShowDialog();
  414. }
  415. #endregion
  416. #region 打印
  417. private void btnPrint_Click(object sender, EventArgs e)
  418. {
  419. try
  420. {
  421. //this.gridViewGauge.OptionsView.RowAutoHeight = true;
  422. //PrintingSystem print = new DevExpress.XtraPrinting.PrintingSystem();
  423. //PrintableComponentLink link = new PrintableComponentLink(print);
  424. //DevExpress.XtraPrintingLinks.CompositeLink compositeLink = new DevExpress.XtraPrintingLinks.CompositeLink();
  425. //print.Links.Add(link);
  426. //link.Component = gridControlGauge;//这里可以是可打印的部件
  427. //link.Margins.Top = 50;
  428. //link.Margins.Bottom = 0;
  429. //link.Margins.Left = 0;
  430. //link.Margins.Right = 0;
  431. //string _PrintHeader = MOTitle.Text;
  432. //PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
  433. //phf.Header.Content.Clear();
  434. //phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
  435. //phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
  436. //phf.Header.LineAlignment = BrickAlignment.Center;
  437. //link.CreateDocument(); //建立文档
  438. //print.PreviewFormEx.Show();//进行预览
  439. SimpleButton btntemp = (SimpleButton)sender;
  440. if (AppConfig.GetUserExcuteRight(this.Tag.ToString(), btntemp.Name) == false)
  441. {
  442. ICSBaseSimpleCode.AppshowMessageBox("对不起您没有:" + btntemp.Text + "权限,请联系系统管理员!");
  443. return;
  444. }
  445. if (string.IsNullOrWhiteSpace(txtMOCode.EditValue.ToString()))
  446. {
  447. ICSBaseSimpleCode.AppshowMessageBox("请选择生产订单号!");
  448. return;
  449. }
  450. List<PrintPara> parasList = new List<PrintPara>();
  451. PrintPara para = new PrintPara();
  452. para.PrintKey = "CODE";
  453. para.PrintValues = new object[] { txtMOCode.EditValue };
  454. parasList.Add(para);
  455. if (parasList.Count == 0)
  456. {
  457. ICSBaseSimpleCode.AppshowMessageBox("请选择数据!");
  458. return;
  459. }
  460. //FormPrintDialog f = new FormPrintDialog("015", this.Text, parasList, false, null);
  461. FormPrintDialog f = new FormPrintDialog("023", this.Text, parasList, false, null);
  462. f.ShowDialog();
  463. }
  464. catch (Exception ex)
  465. {
  466. MessageBox.Show(ex.ToString());
  467. }
  468. }
  469. #endregion
  470. }
  471. }