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

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