华恒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.

556 lines
22 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.Entity;
  20. using ICSSoft.Frame.Data.BLL;
  21. namespace ICSSoft.Frame.APP
  22. {
  23. public partial class FormICSOPBOMNew : DevExpress.XtraEditors.XtraForm
  24. {
  25. String guid = AppConfig.GetGuid();
  26. private DataTable dataSource = null;
  27. String ItemCode = null;
  28. string Itemid = "";
  29. string itemmover = null;
  30. string workpoint;
  31. string BOMVER = "";
  32. #region 构造函数
  33. public FormICSOPBOMNew()
  34. {
  35. InitializeComponent();
  36. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  37. this.WindowState = FormWindowState.Maximized;
  38. initTreeView();
  39. }
  40. #endregion
  41. public FormICSOPBOMNew(string _ItemCode,string WORKPOINT)
  42. {
  43. ItemCode = _ItemCode;
  44. workpoint = WORKPOINT;
  45. InitializeComponent();
  46. this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height);
  47. this.WindowState = FormWindowState.Maximized;
  48. initTreeView();
  49. grdDetail_Load(null, null);
  50. }
  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 SystemOptition
  82. /// <summary>
  83. /// 操作权限
  84. /// </summary>
  85. /// <returns></returns>
  86. public DataTable RightOfExute()
  87. {
  88. DataTable rData = new DataTable();
  89. rData.Columns.Add("BtnName");
  90. rData.Columns.Add("ActionName");
  91. //查看权限(必须有)
  92. DataRow seeRow = rData.NewRow();
  93. seeRow["BtnName"] = "see";
  94. seeRow["ActionName"] = "查看";
  95. rData.Rows.Add(seeRow);
  96. //foreach (Control ctr in panelControl3.Controls)
  97. //{
  98. // if (ctr.Name == btnFalsh.Name || ctr.Name == btnExit.Name || ctr.Name == lblTitle.Name || ctr.Name == btnClose.Name)
  99. // continue;
  100. // DataRow dr = rData.NewRow();
  101. // dr["BtnName"] = ctr.Name;
  102. // dr["ActionName"] = ctr.Text;
  103. // rData.Rows.Add(dr);
  104. //}
  105. //List<Control> ControlList = new List<Control>();
  106. //ControlList.Add(btnAdd);
  107. //ControlList.Add(btnExit);
  108. //foreach (Control ctr in ControlList)
  109. //{
  110. // if (ctr.GetType() == typeof(SimpleButton))
  111. // {
  112. // DataRow dr = rData.NewRow();
  113. // dr["BtnName"] = ctr.Name;
  114. // dr["ActionName"] = ctr.Text;
  115. // rData.Rows.Add(dr);
  116. // }
  117. //}
  118. rData.AcceptChanges();
  119. return rData;
  120. }
  121. /// <summary>
  122. /// 数据权限
  123. /// </summary>
  124. /// <returns></returns>
  125. public DataTable RightOfData()
  126. {
  127. DataTable rData = new DataTable();
  128. rData.Columns.Add("BodyName");
  129. rData.Columns.Add("ControlName");
  130. rData.Columns.Add("ControlCaption");
  131. rData.AcceptChanges();
  132. return rData;
  133. }
  134. #endregion
  135. #region 退出
  136. private void btnClose_Click(object sender, EventArgs e)
  137. {
  138. AppConfig.CloseFormShow(this.Text);
  139. this.Close();
  140. }
  141. private void btnExit_Click(object sender, EventArgs e)
  142. {
  143. AppConfig.CloseFormShow(this.Text);
  144. this.Close();
  145. }
  146. #endregion
  147. #region 刷新
  148. private void btnFalsh_Click(object sender, EventArgs e)
  149. {
  150. grdDetail_Load(null,null);
  151. }
  152. #endregion
  153. #region 列表
  154. private void grvDetail_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
  155. {
  156. }
  157. #endregion
  158. private void grdDetail_Click(object sender, EventArgs e)
  159. {
  160. DataTable dt = new DataTable();
  161. dt.Columns.Add();
  162. }
  163. #region 保存
  164. private void btnAdd_Click(object sender, EventArgs e)
  165. {
  166. if (treeView == null || treeView.SelectedNode == null)
  167. {
  168. ICSBaseSimpleCode.AppshowMessageBox("请选择工序!!!");
  169. return;
  170. }
  171. //int count = 0;
  172. //for (int i = 0; i < grvDetail.RowCount; i++)
  173. //{
  174. // if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  175. // {
  176. // count++;
  177. // }
  178. //}
  179. //if (count < 1)
  180. //{
  181. // ICSBaseSimpleCode.AppshowMessageBox("请选择数据!!!");
  182. // for (int i = 0; i < grvDetail.RowCount; i++)
  183. // {
  184. // grvDetail.SetRowCellValue(i, colisSelect, "");
  185. // }
  186. // return;
  187. //}
  188. try
  189. {
  190. List<ICSOPBOMDETAIL> opbomdetailList = new List<ICSOPBOMDETAIL>();
  191. List<ICSOPBOMDETAIL> opbomdetailListNotSelect = new List<ICSOPBOMDETAIL>();
  192. List<ICSOPBOM> opbomList = new List<ICSOPBOM>();
  193. for (int i = 0; i < grvDetail.RowCount; i++)
  194. {
  195. ICSOPBOMDETAIL opbomdetail = new ICSOPBOMDETAIL();
  196. opbomdetail.OPID = treeView.SelectedNode.Parent.Text + treeView.SelectedNode.Text + txtinvcode.Text; ;
  197. opbomdetail.ITEMID = Itemid;
  198. opbomdetail.ITEMCODE = txtinvcode.Text;
  199. opbomdetail.OBCODE = treeView.SelectedNode.Parent.Text;
  200. opbomdetail.OPBOMVER = BOMVER;
  201. opbomdetail.OBITEMCODE = grvDetail.GetRowCellValue(i, SBITEMCODE).ToString();
  202. opbomdetail.OPCODE = treeView.SelectedNode.Text;
  203. opbomdetail.OBITEMNAME = grvDetail.GetRowCellValue(i, SBITEMNAME).ToString();
  204. opbomdetail.OBITEMECN = grvDetail.GetRowCellValue(i, SBITEMECN).ToString();
  205. opbomdetail.OBITEMUOM = grvDetail.GetRowCellValue(i, SBITEMUOM).ToString();//物料单位
  206. opbomdetail.OBITEMQTY = Convert.ToInt32(Convert.ToDouble(grvDetail.GetRowCellValue(i, SBITEMQTY).ToString()));//计量数量
  207. opbomdetail.OBSITEMCODE = grvDetail.GetRowCellValue(i, SBSITEMCODE).ToString();
  208. opbomdetail.OBITEMVER = grvDetail.GetRowCellValue(i, SBITEMVER).ToString();
  209. opbomdetail.OBITEMTYPE = grvDetail.GetRowCellValue(i, INVTYPE).ToString();//子阶料物料类型
  210. opbomdetail.OBITEMCONTYPE = grvDetail.GetRowCellValue(i, INVTYPE).ToString();
  211. opbomdetail.OBITEMEFFTIME = DateTime.Parse(grvDetail.GetRowCellValue(i, SBITEMEFFTIME).ToString());
  212. opbomdetail.OBITEMINVTIME = DateTime.Parse(grvDetail.GetRowCellValue(i, SBITEMINVTIME).ToString());
  213. opbomdetail.ISITEMCHECK = "0";//是否检查厂内物料
  214. opbomdetail.MUSER = AppConfig.UserCode;
  215. opbomdetail.MUSERName = AppConfig.UserName;
  216. opbomdetail.MTIME = DateTime.Now;
  217. opbomdetail.WorkPoint = workpoint;
  218. opbomdetail.EATTRIBUTE1 = grvDetail.GetRowCellValue(i, colEttr1).ToString();//子阶料物料类型
  219. opbomdetail.ACTIONTYPE = 0;
  220. opbomdetail.CHECKSTATUS = "0";
  221. opbomdetail.OBITEMSEQ = int.Parse(grvDetail.GetRowCellValue(i, SEQ).ToString() == "" ? "0" : grvDetail.GetRowCellValue(i, SEQ).ToString());
  222. opbomdetail.OBPARSETYPE = "parse_prepare";
  223. opbomdetail.OBCHECKTYPE = "check_linkbarcode";
  224. opbomdetail.OBVALID = 1;
  225. opbomdetail.SNLENGTH = 0;
  226. opbomdetail.NeedVendor = "0";
  227. if (grvDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  228. {
  229. opbomdetailList.Add(opbomdetail);
  230. }
  231. else
  232. {
  233. opbomdetailListNotSelect.Add(opbomdetail);
  234. }
  235. }
  236. ICSOPBOM opbom = new ICSOPBOM();
  237. opbom.ITEMID = Itemid;
  238. opbom.ITEMCODE = txtinvcode.Text;
  239. opbom.OBCODE = treeView.SelectedNode.Parent.Text;
  240. opbom.OPBOMVER = BOMVER;
  241. opbom.OBROUTE = treeView.SelectedNode.Parent.Text;
  242. //opbom.OPDESC = treeView.SelectedNode.Text;
  243. opbom.MUSER = AppConfig.UserCode;
  244. opbom.MUSERName = AppConfig.UserName;
  245. opbom.MTIME = DateTime.Now;
  246. opbom.WorkPoint = workpoint;
  247. opbom.AVIALABLE = 1;
  248. opbomList.Add(opbom);
  249. ICSOPBOMDETAILBLL.deleteOld(txtinvcode.Text, treeView.SelectedNode.Text, BOMVER, opbom.OBCODE,AppConfig.WorkPointCode, AppConfig.AppConnectString);
  250. ICSOPBOMDETAILBLL.AddList(opbomdetailList, AppConfig.AppConnectString);
  251. ICSOPBOMBLL.AddList(opbomList, AppConfig.AppConnectString);
  252. ICSOPBOMDETAILBLL.deleteList(AppConfig.AppConnectString, opbomdetailListNotSelect);
  253. ICSBaseSimpleCode.AppshowMessageBox("保存成功!");
  254. //btnFalsh_Click(null, null);
  255. }
  256. catch (Exception ex)
  257. {
  258. ICSBaseSimpleCode.AppshowMessageBox(ex.Message);
  259. }
  260. }
  261. #endregion
  262. #region 双击选择
  263. private void grdDetail_DoubleClick(object sender, EventArgs e)
  264. {
  265. if (grvDetail.FocusedRowHandle < 0)
  266. {
  267. return;
  268. }
  269. if (grvDetail.FocusedColumn == colisSelect)
  270. {
  271. if (grvDetail.GetRowCellValue(grvDetail.FocusedRowHandle, colisSelect).ToString() == "")
  272. {
  273. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, "Y");
  274. }
  275. else
  276. {
  277. grvDetail.SetRowCellValue(grvDetail.FocusedRowHandle, colisSelect, "");
  278. }
  279. }
  280. }
  281. #endregion
  282. private void grdDetail_Load(object sender, EventArgs e)
  283. {
  284. if (BOMVER == "") bindCbox();
  285. string sql = @"SELECT '' as isSelect,[SBITEMID]
  286. ,[SBSITEMID]
  287. ,[SBITEMCODE]
  288. ,[SBSITEMCODE]
  289. ,[SBITEMQTY]
  290. ,[SBITEMEFFTIME]
  291. ,[SBITEMINVTIME]
  292. ,[SBWH]
  293. ,[SEQ]
  294. ,[SBITEMECN]
  295. ,b2.INVNAME as SBITEMNAME
  296. ,b2.invstd as SBITEMDESC
  297. ,[SBITEMDESC]
  298. ,[SBITEMSTATUS]
  299. ,[SBITEMLOCATION]
  300. ,b2.invuom [SBITEMUOM]
  301. ,[SBITEMVER]
  302. ,[SBITEMCONTYPE]
  303. ,[SBPITEMCODE]
  304. ,[ALPGR]
  305. ,a.[MUSER]
  306. ,a.[MUSERName]
  307. ,a.[MTIME]
  308. ,a.[WorkPoint]
  309. ,[SBOMVER]
  310. ,[SBFACTORY]
  311. ,[SBUSAGE]
  312. ,[SBITEMPROJECT]
  313. ,[SBITEMSEQ]
  314. ,[LOCATION]
  315. ,a.[EATTRIBUTE1]
  316. ,b.INVCODE as INVCODE
  317. ,b.INVNAME as INVNAME
  318. ,a.ITEMDESC as INVDESC
  319. ,b.INVStd as INVTYPE
  320. ,a.EATTRIBUTE1 as EATTRIBUTE1,b.id ITEMID
  321. FROM [ICSSBOM] a INNER JOIN dbo.ICSINVENTORY b ON a.itemcode=b.invcode and a.workpoint=b.workpoint
  322. left join dbo.ICSINVENTORY b2 ON a.SBITEMCODE=b2.invcode and a.workpoint=b2.workpoint
  323. where b.invcode='{0}' and b.workpoint='{1}' ";
  324. if (BOMVER != "")
  325. {
  326. sql = string.Format(sql, ItemCode,AppConfig.WorkPointCode) + "and a.SBOMVER='" + BOMVER + "'";
  327. }
  328. else
  329. {
  330. sql = string.Format(sql, ItemCode,AppConfig.WorkPointCode);
  331. }
  332. sql += "order by SEQ";
  333. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  334. if (dt.Rows.Count != 0)
  335. {
  336. txtinvcode.Text = dt.Rows[0]["INVCODE"].ToString();
  337. txtinvname.Text = dt.Rows[0]["INVNAME"].ToString();
  338. txtinvtype.Text = dt.Rows[0]["INVTYPE"].ToString();
  339. Itemid = dt.Rows[0]["ITEMID"].ToString();
  340. }
  341. grdDetail.DataSource = dt;
  342. grvDetail.BestFitColumns();
  343. }
  344. private void bindCbox()
  345. {
  346. try
  347. {
  348. string sql = @"SELECT DISTINCT SBOMVER FROM dbo.ICSSBOM WHERE itemcode='{0}' and workpoint='{1}' ";
  349. sql = string.Format(sql, ItemCode,AppConfig.WorkPointCode);
  350. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  351. comboBox1.DataSource = dt;
  352. comboBox1.DisplayMember = "SBOMVER";
  353. if(dt!=null && dt.Rows.Count > 0) { comboBox1.SelectedIndex = 0; }
  354. }
  355. catch (Exception ex)
  356. {
  357. ICSBaseSimpleCode.AppshowMessageBox("可选BOM数据加载失败!!");
  358. }
  359. }
  360. private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  361. {
  362. BOMVER = ((DataRowView)comboBox1.SelectedValue).Row["SBOMVER"].ToString();
  363. grdDetail_Load(sender, e);
  364. }
  365. #region 树状图
  366. private void initTreeView()
  367. {
  368. string sql = @"SELECT
  369. a.ROUTECODE,
  370. a.OPSEQ,
  371. a.OPCODE
  372. FROM
  373. ICSITEMROUTE2OP a
  374. LEFT JOIN ICSINVENTORY b ON a.ITEMCODE = b.invCode and a.workpoint=b.workpoint
  375. WHERE
  376. b.invcode = '{0}' and b.workpoint='{1}'
  377. ORDER BY
  378. a.ROUTECODE,
  379. a.OPSEQ";
  380. sql = string.Format(sql, ItemCode,AppConfig.WorkPointCode);
  381. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  382. string routeCode = "";
  383. string opCode = "";
  384. TreeNode nodeRouteCode = new TreeNode();
  385. TreeNode nodeOpCode = new TreeNode();
  386. foreach (DataRow dr in dt.Rows)
  387. {
  388. routeCode = dr["ROUTECODE"].ToString();
  389. if (!nodeRouteCode.Name.Equals(routeCode))
  390. {
  391. nodeRouteCode = new TreeNode();
  392. nodeRouteCode.Name = routeCode;
  393. nodeRouteCode.Text = routeCode;
  394. treeView.Nodes.Add(nodeRouteCode);
  395. }
  396. opCode = dr["OPCODE"].ToString();
  397. nodeOpCode = new TreeNode();
  398. nodeOpCode.Name = opCode;
  399. nodeOpCode.Text = opCode;
  400. nodeRouteCode.Nodes.Add(nodeOpCode);
  401. }
  402. treeView.ExpandAll();
  403. }
  404. #endregion
  405. #region 全选
  406. private void btnCanSelect_Click(object sender, EventArgs e)
  407. {
  408. grvDetail.PostEditor();
  409. this.Validate();
  410. for (int i = 0; i < grvDetail.RowCount; i++)
  411. {
  412. grvDetail.SetRowCellValue(i, colisSelect, "Y");
  413. }
  414. }
  415. #endregion
  416. #region 全消
  417. private void btnCancelAll_Click(object sender, EventArgs e)
  418. {
  419. grvDetail.PostEditor();
  420. this.Validate();
  421. for (int i = 0; i < grvDetail.RowCount; i++)
  422. {
  423. grvDetail.SetRowCellValue(i, colisSelect, "");
  424. }
  425. }
  426. #endregion
  427. private TreeNode node;
  428. #region 选中工序
  429. private void treeView_AfterSelect(object sender, TreeViewEventArgs e)
  430. {
  431. TreeView view = sender as TreeView;
  432. if (node != null)
  433. {
  434. node.ForeColor = Color.Black;
  435. }
  436. view.SelectedNode.ForeColor = Color.Red;
  437. node = view.SelectedNode;
  438. if (view.SelectedNode.Nodes.Count == 0)
  439. {
  440. string routeCode = treeView.SelectedNode.Parent.Text;
  441. string opCode = view.SelectedNode.Text;
  442. string sql = @"SELECT CASE WHEN c.OPID IS NULL THEN '' ELSE 'Y' END as isSelect,[SBITEMID]
  443. ,[SBSITEMID]
  444. ,[SBITEMCODE]
  445. ,[SBSITEMCODE]
  446. ,CASE WHEN OBITEMQTY IS NOT NULL THEN OBITEMQTY ELSE SBITEMQTY END AS SBITEMQTY
  447. ,[SBITEMEFFTIME]
  448. ,[SBITEMINVTIME]
  449. ,[SBWH]
  450. ,[SEQ]
  451. ,[SBITEMECN]
  452. ,b2.INVNAME as SBITEMNAME
  453. ,b2.invstd as SBITEMDESC
  454. ,[SBITEMSTATUS]
  455. ,[SBITEMLOCATION]
  456. ,b2.invuom [SBITEMUOM]
  457. ,[SBITEMVER]
  458. ,[SBITEMCONTYPE]
  459. ,[SBPITEMCODE]
  460. ,[ALPGR]
  461. ,a.[MUSER]
  462. ,a.[MUSERName]
  463. ,a.[MTIME]
  464. ,a.[WorkPoint]
  465. ,[SBOMVER]
  466. ,[SBFACTORY]
  467. ,[SBUSAGE]
  468. ,[SBITEMPROJECT]
  469. ,[SBITEMSEQ]
  470. ,[LOCATION]
  471. ,a.[EATTRIBUTE1]
  472. ,b.invcode as INVCODE
  473. ,b.INVNAME as INVNAME
  474. ,a.ITEMDESC as INVDESC
  475. ,b.invstd as INVTYPE
  476. FROM [ICSSBOM] a INNER JOIN dbo.ICSINVENTORY b ON a.itemcode=b.invcode
  477. and a.workpoint=b.workpoint
  478. LEFT JOIN ICSOPBOMDETAIL c ON c.ITEMCODE = b.invcode AND c.OBCODE = '{1}' and a.workpoint=c.workpoint
  479. and c.obitemcode=a.sbitemcode AND c.OPCODE = '{3}' and isnull(a.sbomver,'')=c.OPBOMVER
  480. left join dbo.ICSINVENTORY b2 ON a.SBITEMCODE=b2.invcode and a.workpoint=b2.workpoint
  481. where b.invcode='{0}' AND a.sbomver = '{2}' ";
  482. if (BOMVER != "")
  483. {
  484. sql = string.Format(sql, ItemCode,routeCode,BOMVER,opCode,AppConfig.WorkPointCode
  485. ) + "and a.SBOMVER='" + BOMVER + "'";
  486. }
  487. else
  488. {
  489. sql = string.Format(sql, ItemCode, routeCode, BOMVER, opCode, AppConfig.WorkPointCode);
  490. }
  491. sql += "order by SEQ";
  492. DataTable dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString, CommandType.Text, sql).Tables[0];
  493. if (dt.Rows.Count != 0)
  494. {
  495. txtinvcode.Text = dt.Rows[0]["INVCODE"].ToString();
  496. txtinvname.Text = dt.Rows[0]["INVNAME"].ToString();
  497. txtinvtype.Text = dt.Rows[0]["INVTYPE"].ToString();
  498. txtRouteCode.Text = routeCode;
  499. }
  500. grdDetail.DataSource = dt;
  501. grvDetail.BestFitColumns();
  502. }
  503. }
  504. #endregion
  505. }
  506. }