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

781 lines
37 KiB

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Windows.Forms;
  5. using DevExpress.XtraEditors;
  6. using ICSSoft.Base.Config.AppConfig;
  7. using ICSSoft.Base.Config.DBHelper;
  8. using ICSSoft.Base.ReferForm.AppReferForm;
  9. using ICSSoft.Frame.Data.Entity;
  10. using ICSSoft.Frame.Data.BLL;
  11. namespace ICSSoft.Frame.APP
  12. {
  13. public partial class FormICSSOPriceSheetEditAdd : DevExpress.XtraEditors.XtraForm
  14. {
  15. string VRow = "";
  16. String guid = "";
  17. string SoCode = "";
  18. XS001_0001_E001_2020 entity = new XS001_0001_E001_2020();
  19. private DataTable dtNewRcards = null;
  20. #region 构造函数
  21. public FormICSSOPriceSheetEditAdd()
  22. {
  23. InitializeComponent();
  24. }
  25. public FormICSSOPriceSheetEditAdd(String id,string socode)
  26. {
  27. InitializeComponent();
  28. guid = id;
  29. SoCode = socode;
  30. }
  31. #endregion
  32. #region 关闭 退出
  33. private void btnClose_Click(object sender, EventArgs e)
  34. {
  35. this.Close();
  36. }
  37. #endregion
  38. #region 移动窗体
  39. private const int WM_NCHITTEST = 0x84;
  40. private const int HTCLIENT = 0x1;
  41. private const int HTCAPTION = 0x2;
  42. //首先必须了解Windows的消息传递机制,当有鼠标活动消息时,
  43. //系统发送WM_NCHITTEST 消息给窗体作为判断消息发生地的根据。 nchittest
  44. //假如你点击的是标题栏,窗体收到的消息值就是 HTCAPTION ,
  45. //同样地,若接受到的消息是 HTCLIENT,说明用户点击的是客户区,也就是鼠标消息发生在客户区。
  46. //重写窗体,使窗体可以不通过自带标题栏实现移动
  47. protected override void WndProc(ref Message m)
  48. {
  49. //当重载窗体的 WndProc 方法时,可以截获 WM_NCHITTEST 消息并改些该消息,
  50. //当判断鼠标事件发生在客户区时,改写改消息,发送 HTCAPTION 给窗体,
  51. //这样,窗体收到的消息就时 HTCAPTION ,在客户区通过鼠标来拖动窗体就如同通过标题栏来拖动一样。
  52. //注意:当你重载 WndProc 并改写鼠标事件后,整个窗体的鼠标事件也就随之改变了。
  53. switch (m.Msg)
  54. {
  55. case WM_NCHITTEST:
  56. base.WndProc(ref m);
  57. if ((int)m.Result == HTCLIENT)
  58. m.Result = (IntPtr)HTCAPTION;
  59. return;
  60. }
  61. //拦截双击标题栏、移动窗体的系统消息
  62. if (m.Msg != 0xA3)
  63. {
  64. base.WndProc(ref m);
  65. }
  66. }
  67. #endregion
  68. #region 取消
  69. private void can_Click(object sender, EventArgs e)
  70. {
  71. this.Close();
  72. }
  73. #endregion
  74. #region 页面加载
  75. private void FormICSINVENTORYEditAdd_Load(object sender, EventArgs e)
  76. {
  77. if (guid != "")
  78. {
  79. decimal sumsinglemoney = 0;
  80. lblTitle.Text = "单据维护";
  81. DataTable body = ICSSOPriceSheetBLL.GetDetailList(guid, AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"));
  82. grvDetail.DataSource = body;
  83. dtNewRcards = body;
  84. //grdDetail.BestFitColumns();
  85. txtSOCode.Enabled = false;
  86. checkAll.Enabled = false;
  87. checkAll.Checked = true;
  88. init();
  89. loadop();
  90. foreach (DataRow dr in body.Rows)
  91. {
  92. if (body.Rows.Count > 0)
  93. {
  94. txtSOCode.EditValue = dr["IDs"].ToString().Trim();
  95. txtCode.Text = dr["ID"].ToString().Trim();
  96. txtSOType.Text = dr["cSoType"].ToString().Trim();
  97. txtCusName.Text = dr["cCusName"].ToString().Trim();
  98. txtInvCode.Text = dr["InvCodes"].ToString().Trim();
  99. txtInvName.Text = dr["InvName"].ToString().Trim();
  100. txtNumber.Text = dr["iNum"].ToString().Trim();
  101. txtDNumber.Text = dr["cInvStd"].ToString().Trim();
  102. txtWeight.Text = dr["iWeight"].ToString().Trim();
  103. txtOpQuire.Text = dr["cinvtype"].ToString().Trim();
  104. txtdDate.Text = dr["dDate"].ToString().Trim();
  105. txtSumSingleMoney.Text = dr["iPrice"].ToString().Trim();
  106. }
  107. }
  108. for (int i = 0; i < grdDetail.RowCount; i++)
  109. {
  110. if (grdDetail.GetRowCellValue(i, colSingleMoney).ToString() == "")
  111. {
  112. sumsinglemoney = sumsinglemoney + 0;
  113. }
  114. else
  115. {
  116. sumsinglemoney = sumsinglemoney + Convert.ToDecimal(grdDetail.GetRowCellValue(i, colSingleMoney).ToString());
  117. txtSumMoney.Text = Convert.ToString(sumsinglemoney);
  118. }
  119. }
  120. }
  121. else
  122. {
  123. lblTitle.Text = "单据新增";
  124. txtCode.Text = ICSSOPriceSheetBLL.GetOutInNo(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"));
  125. init();
  126. }
  127. }
  128. #endregion
  129. #region 初始化查询条件
  130. private void init()
  131. {
  132. #region 销售订单号
  133. string sql = @"SELECT DISTINCT a.cSOCode 销售订单号,b.cInvCode 存货编码, b.cdefine24 工艺要求,
  134. (CASE WHEN isnull(c.cSOCode,'')='' THEN '' ELSE '' END ) as ,
  135. a.cSOCode+b.cInvCode+ISNULL(b.cdefine24, '') as ID
  136. FROM SO_SOMain a with(nolock)
  137. LEFT JOIN SO_SODetails b with(nolock) on b.cSOCode=a.cSOCode
  138. left JOIN dbo.XS001_0001_E001_2020 c with(nolock) ON a.cSOCode=c.cSOCode and isnull(b.cinvcode,'')=isnull(c.cinvcode,'')
  139. and isnull(b.cdefine24,'')=isnull(c.cinvtype,'')
  140. WHERE a.dDate>='2020-08-01' ";
  141. sql = string.Format(sql, AppConfig.WorkPointCode);
  142. if (!checkAll.Checked)
  143. {
  144. sql += " AND c.cSOCode is null";
  145. }
  146. else
  147. {
  148. sql += " AND 1=1 ";
  149. }
  150. DataTable dt = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"), CommandType.Text, sql).Tables[0];
  151. txtSOCode.Properties.ValueMember = "ID";
  152. txtSOCode.Properties.DisplayMember = "销售订单号";
  153. txtSOCode.Properties.DataSource = dt;
  154. txtSOCode.Properties.NullText = "";//空时的值
  155. //txtSOCode.Properties.View.Columns["ID"].Visible = false; //隐藏列
  156. txtSOCode.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体
  157. txtSOCode.Properties.ValidateOnEnterKey = true;//回车确认
  158. txtSOCode.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard
  159. txtSOCode.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容
  160. //自适应宽度
  161. txtSOCode.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
  162. #endregion
  163. #region 存货编码
  164. string sqls = @"SELECT DISTINCT cInvCode as 存货编码,cInvName as 存货名称,cInvStd as 图号 FROM Inventory";
  165. DataTable dts = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"), CommandType.Text, sqls).Tables[0];
  166. txtcInvCode.Properties.ValueMember = "存货编码";
  167. txtcInvCode.Properties.DisplayMember = "存货编码";
  168. txtcInvCode.Properties.DataSource = dts;
  169. txtcInvCode.Properties.NullText = "";//空时的值
  170. //txtSOCode.Properties.View.Columns["ID"].Visible = false; //隐藏列
  171. txtcInvCode.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体
  172. txtcInvCode.Properties.ValidateOnEnterKey = true;//回车确认
  173. txtcInvCode.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard
  174. txtcInvCode.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容
  175. //自适应宽度
  176. txtcInvCode.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
  177. #endregion
  178. }
  179. #endregion
  180. #region 销售订单号
  181. private void txtSOCode_EditValueChanged(object sender, EventArgs e)
  182. {
  183. try
  184. {
  185. string Code = txtSOCode.Text;
  186. string socode = "";
  187. string invcode="";
  188. string invtype="";
  189. #region 判断销售订单号是否维护
  190. GridLookUpEdit edit = sender as GridLookUpEdit;
  191. if (edit.EditValue != null && edit.EditValue.ToString() != "" && edit.EditValue.ToString() != "nulltext")
  192. {
  193. var o = edit.Properties.GetRowByKeyValue(edit.EditValue);
  194. if (o is DataRowView)
  195. {
  196. DataRowView RowView = o as DataRowView;
  197. socode = RowView.Row["销售订单号"].ToString();
  198. invcode = RowView.Row["存货编码"].ToString();
  199. invtype = RowView.Row["工艺要求"].ToString();
  200. }
  201. }
  202. string sqlso = @"SELECT cSOCode FROM XS001_0001_E001_2020 WHERE cSOCode='{0}' AND cInvCode='{1}' AND cinvtype='{2}'";
  203. sqlso = string.Format(sqlso, Code, invcode, invtype);
  204. DataTable dtso = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"), CommandType.Text, sqlso).Tables[0];
  205. if (dtso != null && dtso.Rows.Count > 0&&guid=="")
  206. {
  207. ICSBaseSimpleCode.AppshowMessageBox("该销售订单号已经维护,不能选择!!!");
  208. init();
  209. return;
  210. }
  211. #endregion
  212. #region 查询
  213. string sql = @"select
  214. a.ddate ,
  215. a.cSOCode ,
  216. d.cSTName ,
  217. a.cCusName ,
  218. b.cInvCode ,
  219. b.cinvname ,
  220. c.cinvstd ,
  221. b.cdefine24 ,
  222. CAST(isnull(SUM(b.iquantity),0) as NUMERIC(10,2)) ,
  223. CAST(isnull(sum(b.iNum),0) as NUMERIC(10,2)) ,
  224. CAST(isnull(SUM(b.iNatSum),0)/isnull(SUM(b.iquantity),0) as NUMERIC(18,6)) as
  225. from SO_SOMain a with(nolock)
  226. inner join SO_SODetails b with(nolock) on b.cSOCode=a.cSOCode
  227. inner join inventory c with(nolock) on c.cinvcode=b.cinvcode
  228. inner join SaleType d with(nolock) on d.cstcode=a.cstcode
  229. WHERE a.dDate>='2020-08-01' AND a.cSOCode='{0}' and b.cInvCode='{1}' and ISNULL(b.cdefine24, '')='{2}'
  230. group by a.cSOCode,a.cCusName,b.cInvCode,b.cinvname,
  231. b.cdefine24,c.cinvstd,d.cSTName,a.ddate";
  232. sql = string.Format(sql, Code,invcode,invtype, AppConfig.WorkPointCode);
  233. DataTable dt = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"), CommandType.Text, sql).Tables[0];
  234. if (dt != null && dt.Rows.Count > 0)
  235. {
  236. txtCusName.Text = dt.Rows[0]["客户名称"].ToString();
  237. txtSOType.Text = dt.Rows[0]["销售类型"].ToString();
  238. txtNumber.Text = dt.Rows[0]["数量"].ToString();
  239. txtInvCode.Text = dt.Rows[0]["存货编码"].ToString();
  240. txtInvName.Text = dt.Rows[0]["存货名称"].ToString();
  241. txtDNumber.Text = dt.Rows[0]["图号"].ToString();
  242. txtWeight.Text = dt.Rows[0]["重量"].ToString();
  243. txtOpQuire.Text = dt.Rows[0]["工艺要求"].ToString();
  244. txtdDate.Text = dt.Rows[0]["销售订单日期"].ToString();
  245. txtSumSingleMoney.Text = dt.Rows[0]["产品单价"].ToString();
  246. #region 新增时带出默认工序
  247. if (guid == "")
  248. {
  249. string sqlop = @"select DISTINCT
  250. 'Y' as isSelect,
  251. a.cSOCode as SOCode,
  252. '' as SORow,
  253. --1 as SORow,
  254. b.cInvCode InvCode,
  255. b.cinvname InvName,
  256. c.cinvstd DNumber,
  257. '' as QuotationItem,
  258. 'CL' OpCode,
  259. '' as SingleMoney,
  260. '' as Memo
  261. from dbo.SO_SOMain a with(nolock)
  262. inner join dbo.SO_SODetails b with(nolock) on b.cSOCode=a.cSOCode
  263. inner join dbo.inventory c with(nolock) on c.cinvcode=b.cinvcode
  264. WHERE b.cInvCode='{0}' and a.cSOCode='{2}'
  265. UNION ALL
  266. select DISTINCT
  267. 'Y' as isSelect,
  268. a.cSOCode as SOCode,
  269. '' as SORow,
  270. --row_number() OVER (ORDER BY a.cSCCode)+1 as SORow,
  271. b.cInvCode InvCode,
  272. b.cinvname InvName,
  273. c.cinvstd DNumber,
  274. f.OPDESC as QuotationItem,
  275. f.OPCODE as OpCode,
  276. '' as SingleMoney,
  277. '' as Memo
  278. from dbo.SO_SOMain a with(nolock)
  279. inner join dbo.SO_SODetails b with(nolock) on b.cSOCode=a.cSOCode
  280. inner join dbo.inventory c with(nolock) on c.cinvcode=b.cinvcode
  281. -- INNER JOIN [{1}].[ICSMES_YTSys].dbo.ICSITEM2ROUTE d ON b.cInvCode=d.itemcode
  282. -- INNER JOIN [{1}].[ICSMES_YTSys].dbo.ICSITEMROUTE2OP e ON d.ROUTECODE=e.ROUTECODE
  283. -- INNER JOIN [{1}].[ICSMES_YTSys].dbo.ICSOP f ON e.OPID=f.ID
  284. INNER JOIN(
  285. select
  286. distinct
  287. a.OPCODE,d.OPDESC,e.cInvCode
  288. from [{1}].[ICSMES_YTSys].dbo.ICSITEMROUTE2OPLot a with(nolock)
  289. inner join [{1}].[ICSMES_YTSys].dbo.ICSOP d with(nolock) on d.OPCODE=a.OPCODE
  290. inner join [{1}].[ICSMES_YTSys].dbo.ICSITEMLot b with(nolock) on b.LotNO=a.LotNo
  291. inner join [{1}].[ICSMES_YTSys].dbo.icsmo c with(nolock) on c.MOCODE=b.TransNO and c.MOSEQ=b.TransLine
  292. left join
  293. (select
  294. DISTINCT
  295. b.cSOCode,b.cInvCode,cDefine24
  296. from dbo.SO_SOMain a with(nolock)
  297. inner join dbo.SO_SODetails b with(nolock) on b.cSOCode=a.cSOCode
  298. where a.dDate>'2020-08-01 00:00:00.000'
  299. ) e on e.cSOCode=c.ORDERNO and e.cinvcode=a.ITEMCODE and e.cdefine24=c.REMOITEMDESC
  300. where e.cSOCode='{2}'
  301. )f on f.cInvCode=b.cInvCode
  302. WHERE b.cInvCode='{0}' and a.cSOCode='{2}'";
  303. #region 获取MES地址
  304. string sqlip = "SELECT DBIpAddress FROM Sys_DataBase WHERE DBSourceName='SYS'";
  305. sqlip = string.Format(sqlip, AppConfig.AppConnectString);
  306. DataTable dtip = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlip).Tables[0];
  307. #endregion
  308. sqlop = string.Format(sqlop, txtInvCode.Text, dtip.Rows[0]["DBIpAddress"].ToString(), txtSOCode.Text);
  309. DataTable dtop = DBHelper.ExecuteDataset(AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"), CommandType.Text, sqlop).Tables[0];
  310. grvDetail.DataSource = dtop;
  311. dtNewRcards = dtop;
  312. //grdDetail.BestFitColumns();
  313. }
  314. #endregion
  315. loadop();
  316. }
  317. #endregion
  318. }
  319. catch (Exception ex)
  320. {
  321. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  322. }
  323. }
  324. #endregion
  325. #region 加载工序
  326. private void loadop()
  327. {
  328. #region 工序代码
  329. string sqls = @"SELECT DISTINCT opcode as [工序代码],OPDESC as [工序名称] FROM ICSOP WHERE WorkPoint='{0}'";
  330. sqls = string.Format(sqls, AppConfig.WorkPointCode);
  331. DataTable dts = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqls).Tables[0];
  332. txtOPCode.Properties.ValueMember = "工序代码";
  333. txtOPCode.Properties.DisplayMember = "工序代码";
  334. txtOPCode.Properties.DataSource = dts;
  335. txtOPCode.Properties.NullText = "";//空时的值
  336. txtOPCode.Properties.ImmediatePopup = true;//输入值是否马上弹出窗体
  337. txtOPCode.Properties.ValidateOnEnterKey = true;//回车确认
  338. txtOPCode.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;//要使用户可以输入,这里须设为Standard
  339. txtOPCode.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.True; //可用Ctrl + Delete清空选择內容
  340. //自适应宽度
  341. txtOPCode.Properties.BestFitMode = DevExpress.XtraEditors.Controls.BestFitMode.BestFitResizePopup;
  342. #endregion
  343. }
  344. #endregion
  345. #region 工序代码
  346. private void txtOPCode_EditValueChanged(object sender, EventArgs e)
  347. {
  348. try
  349. {
  350. GridLookUpEdit edit = sender as GridLookUpEdit;
  351. if (edit.EditValue != null && edit.EditValue.ToString() != "" && edit.EditValue.ToString() != "nulltext")
  352. {
  353. var o = edit.Properties.GetRowByKeyValue(edit.EditValue);
  354. if (o is DataRowView)
  355. {
  356. DataRowView RowView = o as DataRowView;
  357. //赋值
  358. txtOPName.Text = RowView.Row["工序名称"].ToString();
  359. }
  360. }
  361. }
  362. catch (Exception ex)
  363. {
  364. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  365. }
  366. }
  367. #endregion
  368. #region 新增工序
  369. private void btnAdd_Click(object sender, EventArgs e)
  370. {
  371. try
  372. {
  373. if (txtSOCode.Text == "")
  374. {
  375. ICSBaseSimpleCode.AppshowMessageBox("销售订单号不能为空!");
  376. return;
  377. }
  378. if (txtOPName.Text == "")
  379. {
  380. ICSBaseSimpleCode.AppshowMessageBox("工序名不能为空!");
  381. return;
  382. }
  383. #region 判断工序不能重复添加
  384. for (int i = 0; i < grdDetail.RowCount; i++)
  385. {
  386. if (txtOPName.Text.Equals(grdDetail.GetRowCellValue(i, colQuotationItem).ToString()))
  387. {
  388. ICSBaseSimpleCode.AppshowMessageBox("工序:" + txtOPName.Text + ",在第" + Convert.ToInt32(i + 1) + "行已维护!");
  389. return;
  390. }
  391. }
  392. #endregion
  393. if (grdDetail.RowCount > 0)
  394. {
  395. DataRow[] isRow = dtNewRcards.Select("QuotationItem= '材料费'");
  396. if (isRow != null || isRow.Length > 0)
  397. {
  398. DataRow row = dtNewRcards.NewRow();
  399. row["isSelect"] = "Y";
  400. row["SOCode"] = txtSOCode.Text;//销售订单号
  401. row["SORow"] = dtNewRcards.Rows.Count + 1;
  402. row["InvCode"] = txtInvCode.Text;
  403. row["InvName"] = txtInvName.Text;
  404. row["DNumber"] = txtDNumber.Text;//图号
  405. row["QuotationItem"] = txtOPName.Text;//报价项目
  406. row["OpCode"] = txtOPCode.Text;//工序
  407. if (guid == "")
  408. {
  409. row["SingleMoney"] = "";
  410. }
  411. else
  412. {
  413. row["SingleMoney"] = 0;
  414. }
  415. row["Memo"] = txtMemo.Text;
  416. dtNewRcards.Rows.Add(row);
  417. grvDetail.DataSource = dtNewRcards;
  418. //grdDetail.BestFitColumns();
  419. }
  420. }
  421. }
  422. catch (Exception ex)
  423. {
  424. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  425. }
  426. }
  427. #endregion
  428. #region 保存
  429. private void btnSave_Click(object sender, EventArgs e)
  430. {
  431. DevExpress.Utils.WaitDialogForm _wait = new DevExpress.Utils.WaitDialogForm("正在查找...请稍等...");
  432. try
  433. {
  434. _wait.Show();
  435. List<XS001_0001_E001_2020> SoMainList = new List<XS001_0001_E001_2020>();
  436. List<XS001_0001_E002_2020> SoDetailLIist = new List<XS001_0001_E002_2020>();
  437. XS001_0001_E001_2020 SoMain = new XS001_0001_E001_2020();
  438. SoMain.ID = txtCode.Text;//单据号
  439. if (guid != "")
  440. {
  441. SoMain.cSOCode = SoCode;//销售订单号
  442. }
  443. else
  444. {
  445. SoMain.cSOCode = txtSOCode.Text;//销售订单号
  446. }
  447. SoMain.cCusName = txtCusName.Text;//客户名称
  448. SoMain.cSoType = txtSOType.Text;//销售类型
  449. SoMain.iNum = Convert.ToDecimal(txtNumber.Text);//数量
  450. if (txtSumSingleMoney.Text == "")
  451. {
  452. SoMain.iPrice = 0;
  453. }
  454. else
  455. {
  456. SoMain.iPrice = Convert.ToDecimal(txtSumSingleMoney.Text);//产品单价
  457. }
  458. SoMain.cInvCode = txtInvCode.Text;//存货编码
  459. SoMain.cInvName = txtInvName.Text;//存货名称
  460. SoMain.cInvStd = txtDNumber.Text;//图号
  461. SoMain.cinvtype = txtOpQuire.Text;//工艺要求
  462. SoMain.iWeight = Convert.ToDecimal(txtWeight.Text);//重量
  463. SoMain.cMake = AppConfig.UserName;//维护人
  464. SoMain.dMakeTime = AppConfig.GetSeverDateTime("yyyy-MM-dd HH:mm:ss");//维护时间
  465. SoMain.dDate = Convert.ToDateTime(txtdDate.Text);//销售订单日期
  466. SoMainList.Add(SoMain);
  467. for (int i = 0; i < grdDetail.RowCount; i++)
  468. {
  469. if (grdDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  470. {
  471. XS001_0001_E002_2020 SoDetail = new XS001_0001_E002_2020();
  472. SoDetail.RefMainID = txtCode.Text;//单据号
  473. if (guid == "")
  474. {
  475. SoDetail.RefRowID = Convert.ToString(i + 1);//行号
  476. }
  477. else
  478. {
  479. SoDetail.RefRowID = grdDetail.GetRowCellValue(i, colSORow).ToString();//行号
  480. }
  481. SoDetail.cInvCode = grdDetail.GetRowCellValue(i, colInvCode).ToString();//存货编码
  482. SoDetail.cInvName = grdDetail.GetRowCellValue(i, colInvName).ToString();//存货名称
  483. SoDetail.cInvStd = grdDetail.GetRowCellValue(i, colDNumber).ToString();//图号
  484. SoDetail.cItem = grdDetail.GetRowCellValue(i, colQuotationItem).ToString();//报价项目
  485. SoDetail.XS001_0001_E001_PK = Convert.ToString(grdDetail.GetRowCellValue(i, colOpCode).ToString());//工序
  486. if (string.IsNullOrWhiteSpace(grdDetail.GetRowCellValue(i, colSingleMoney).ToString()))
  487. {
  488. SoDetail.iPrice = 0;
  489. }
  490. else
  491. {
  492. SoDetail.iPrice = Convert.ToDecimal(grdDetail.GetRowCellValue(i, colSingleMoney).ToString());//含税单价
  493. }
  494. SoDetail.UAP_VoucherTransform_Rowkey = txtMemo.Text;//备注
  495. SoDetailLIist.Add(SoDetail);
  496. }
  497. }
  498. if (SoMainList.Count <= 0)
  499. {
  500. _wait.Close();
  501. ICSBaseSimpleCode.AppshowMessageBox("请选择数据!!!");
  502. return;
  503. }
  504. ICSSOPriceSheetBLL.Add(SoMainList, SoDetailLIist, AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"));
  505. _wait.Close();
  506. ICSBaseSimpleCode.AppshowMessageBox("保存成功");
  507. this.Close();
  508. FormICSINVENTORYEditAdd_Load(null,null);
  509. }
  510. catch (Exception ex)
  511. {
  512. _wait.Close();
  513. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  514. }
  515. }
  516. #endregion
  517. #region 删除
  518. private void btnDelete_Click(object sender, EventArgs e)
  519. {
  520. grdDetail.PostEditor();
  521. this.Validate();
  522. if (grdDetail.RowCount == 0)
  523. return;
  524. string code = "";
  525. string row = "";
  526. if (grdDetail.GetRowCellValue(grdDetail.FocusedRowHandle, colQuotationItem).ToString() == "材料费" && grdDetail.GetRowCellValue(grdDetail.FocusedRowHandle, colSORow).ToString() == "1")
  527. {
  528. ICSBaseSimpleCode.AppshowMessageBox("第一行材料费数据不能删除!!!");
  529. return;
  530. }
  531. for (int i = 0; i < grdDetail.RowCount; i++)
  532. {
  533. if (grdDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  534. {
  535. code = grdDetail.GetRowCellValue(i, colSOCode).ToString();
  536. row = grdDetail.GetRowCellValue(i, colSORow).ToString();
  537. }
  538. }
  539. if (code=="")
  540. {
  541. ICSBaseSimpleCode.AppshowMessageBox("请选择数据!");
  542. return;
  543. }
  544. if (ICSBaseSimpleCode.AppshowMessageBoxRepose("确定删除该行信息吗?删除后无法恢复,确定吗?") != DialogResult.OK)
  545. return;
  546. try
  547. {
  548. ICSSOPriceSheetBLL.deleteDetailInfo(code, row, AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"));
  549. ICSBaseSimpleCode.AppshowMessageBox(0, "删除成功");
  550. FormICSINVENTORYEditAdd_Load(null,null);
  551. }
  552. catch (Exception ex)
  553. {
  554. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  555. }
  556. }
  557. #endregion
  558. #region 删除窗体行
  559. private void repositoryItemButtonEdit4_Click(object sender, EventArgs e)
  560. {
  561. if (grdDetail.GetRowCellValue(grdDetail.FocusedRowHandle, colQuotationItem).ToString() == "材料费" && grdDetail.GetRowCellValue(grdDetail.FocusedRowHandle, colSORow).ToString()=="1")
  562. {
  563. ICSBaseSimpleCode.AppshowMessageBox("第一行材料费数据不能删除!!!");
  564. return;
  565. }
  566. grdDetail.DeleteRow(grdDetail.FocusedRowHandle);
  567. }
  568. #endregion
  569. #region 双击
  570. private void grdDetail_DoubleClick(object sender, EventArgs e)
  571. {
  572. if (grdDetail.FocusedRowHandle < 0)
  573. {
  574. return;
  575. }
  576. for (int i = 0; i < grdDetail.RowCount; i++)
  577. {
  578. grdDetail.SetRowCellValue(i, colisSelect, "");
  579. }
  580. if (grdDetail.FocusedColumn == colisSelect)
  581. {
  582. if (grdDetail.GetRowCellValue(grdDetail.FocusedRowHandle, colisSelect).ToString() == "")
  583. {
  584. grdDetail.SetRowCellValue(grdDetail.FocusedRowHandle, colisSelect, "Y");
  585. }
  586. else
  587. {
  588. grdDetail.SetRowCellValue(grdDetail.FocusedRowHandle, colisSelect, "");
  589. }
  590. }
  591. string code = "";
  592. string row = "";
  593. for (int i = 0; i < grdDetail.RowCount; i++)
  594. {
  595. if (grdDetail.GetRowCellValue(i, colisSelect).ToString() == "Y")
  596. {
  597. code = grdDetail.GetRowCellValue(i, colSOCode).ToString();
  598. row = grdDetail.GetRowCellValue(i, colSORow).ToString();
  599. }
  600. }
  601. DataTable dt = ICSSOPriceSheetBLL.GetDetailInfo(code, row, AppConfig.GetDataBaseConnectStringByKey("[DB.ERP]"));
  602. foreach (DataRow dr in dt.Rows)
  603. {
  604. txtOPCode.Text = dr["XS001_0001_E001_PK"].ToString().Trim();
  605. txtOPName.Text = dr["XS001_0001_E002_PK"].ToString().Trim();
  606. txtMemo.Text = dr["UAP_VoucherTransform_Rowkey"].ToString().Trim();
  607. txtOPCode.Enabled = false;
  608. txtMemo.Enabled = false;
  609. }
  610. }
  611. #endregion
  612. #region 计算含税单价
  613. private void grdDetail_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
  614. {
  615. try
  616. {
  617. if (e.Column.FieldName == "SingleMoney")
  618. {
  619. decimal singlemoney=0;
  620. decimal summoney = 0;
  621. if (string.IsNullOrWhiteSpace(grdDetail.GetRowCellValue(e.RowHandle, colSingleMoney).ToString()))
  622. {
  623. singlemoney = 0;
  624. }
  625. else
  626. {
  627. singlemoney = Convert.ToDecimal(grdDetail.GetRowCellValue(e.RowHandle, colSingleMoney).ToString());
  628. }
  629. if (txtSumMoney.Text == "0.00")
  630. {
  631. txtSumMoney.Text = Convert.ToString(0 + singlemoney);
  632. }
  633. else
  634. {
  635. for (int i = 0; i < grdDetail.RowCount; i++)
  636. {
  637. if (string.IsNullOrWhiteSpace(grdDetail.GetRowCellValue(i, colSingleMoney).ToString()))
  638. {
  639. summoney += 0;
  640. }
  641. else
  642. {
  643. summoney += Convert.ToDecimal(grdDetail.GetRowCellValue(i, colSingleMoney).ToString());
  644. }
  645. }
  646. txtSumMoney.Text = Convert.ToString(summoney);
  647. }
  648. }
  649. }
  650. catch (Exception ex)
  651. {
  652. MessageBox.Show(ex.Message);
  653. }
  654. }
  655. #endregion
  656. #region 显示全部
  657. private void checkAll_Click(object sender, EventArgs e)
  658. {
  659. init();
  660. grvDetail.DataSource = null;
  661. txtSOCode.Text = "";
  662. txtSumSingleMoney.Text = "";
  663. txtdDate.Text = "";
  664. txtOpQuire.Text = "";
  665. txtCusName.Text = "";
  666. txtSOType.Text = "";
  667. txtNumber.Text = "";
  668. txtInvCode.Text = "";
  669. txtInvName.Text = "";
  670. txtDNumber.Text = "";
  671. txtWeight.Text = "";
  672. txtOPCode.Text = "";
  673. txtOPName.Text = "";
  674. txtMemo.Text = "";
  675. }
  676. #endregion
  677. private void txtSOCode_QueryPopUp(object sender, System.ComponentModel.CancelEventArgs e)
  678. {
  679. txtSOCode.Properties.View.Columns["ID"].Visible = false; //隐藏列
  680. }
  681. #region 新增存货编码
  682. private void btnAddInvName_Click(object sender, EventArgs e)
  683. {
  684. try
  685. {
  686. if (txtcInvCode.Text == "")
  687. {
  688. ICSBaseSimpleCode.AppshowMessageBox("存货编码不能为空!");
  689. return;
  690. }
  691. if (grdDetail.RowCount > 0)
  692. {
  693. DataRow[] isRow = dtNewRcards.Select("QuotationItem= '材料费'");
  694. if (isRow != null || isRow.Length > 0)
  695. {
  696. DataRow row = dtNewRcards.NewRow();
  697. row["isSelect"] = "Y";
  698. row["SOCode"] = txtSOCode.Text;//销售订单号
  699. row["SORow"] = dtNewRcards.Rows.Count + 1;
  700. row["InvCode"] = txtcInvCode.Text;//存货编码
  701. row["InvName"] = txtcInvName.Text;//存货名称
  702. row["DNumber"] = txtcInvstd.Text;//图号
  703. row["QuotationItem"] = "材料费";//报价项目
  704. row["OpCode"] = "CL";//工序
  705. if (guid == "")
  706. {
  707. row["SingleMoney"] = "";
  708. }
  709. else
  710. {
  711. row["SingleMoney"] = 0;
  712. }
  713. row["Memo"] = "";
  714. for (int i = 0; i < grdDetail.RowCount; i++)
  715. {
  716. if (grdDetail.GetRowCellValue(i, colInvCode).ToString().Equals(txtcInvCode.Text) && row["QuotationItem"].Equals(grdDetail.GetRowCellValue(i, colQuotationItem).ToString()))
  717. {
  718. ICSBaseSimpleCode.AppshowMessageBox("存货编码:" + txtcInvCode.Text + ",报价项目:材料费,在第" + Convert.ToInt32(i + 1) + "行已维护!");
  719. return;
  720. }
  721. }
  722. dtNewRcards.Rows.Add(row);
  723. grvDetail.DataSource = dtNewRcards;
  724. //grdDetail.BestFitColumns();
  725. }
  726. }
  727. }
  728. catch (Exception ex)
  729. {
  730. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  731. }
  732. }
  733. #endregion
  734. #region 存货编码改变
  735. private void txtcInvCode_EditValueChanged(object sender, EventArgs e)
  736. {
  737. try
  738. {
  739. GridLookUpEdit edit = sender as GridLookUpEdit;
  740. if (edit.EditValue != null && edit.EditValue.ToString() != "" && edit.EditValue.ToString() != "nulltext")
  741. {
  742. var o = edit.Properties.GetRowByKeyValue(edit.EditValue);
  743. if (o is DataRowView)
  744. {
  745. DataRowView RowView = o as DataRowView;
  746. txtcInvName.Text = RowView.Row["存货名称"].ToString();
  747. txtcInvstd.Text = RowView.Row["图号"].ToString();
  748. }
  749. }
  750. }
  751. catch (Exception ex)
  752. {
  753. ICSBaseSimpleCode.AppshowMessageBox(ex.ToString());
  754. }
  755. }
  756. #endregion
  757. }
  758. }