Make_StepReport.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Drawing;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using UAS_MES_NEW.DataOperate;
  8. using UAS_MES_NEW.Entity;
  9. using UAS_MES_NEW.PublicMethod;
  10. namespace UAS_MES_NEW.Make
  11. {
  12. public partial class Make_StepReport : Form
  13. {
  14. AutoSizeFormClass asc = new AutoSizeFormClass();
  15. DataHelper dh;
  16. DataTable dt;
  17. LogStringBuilder sql = new LogStringBuilder();
  18. DataTable Dbfind;
  19. string ma_id;
  20. //上一次查询的工单号
  21. string last_macoe = "";
  22. string craftcode_condition = "";
  23. public Make_StepReport()
  24. {
  25. InitializeComponent();
  26. }
  27. private void Make_PositionStock_Load(object sender, EventArgs e)
  28. {
  29. asc.controllInitializeSize(this);
  30. ma_code.TableName = "make left join product on ma_prodcode=pr_code ";
  31. ma_code.SelectField = "ma_code # 工单号,ma_prodcode # 产品编号,ma_craftcode # 工艺路线,pr_detail # 产品名称,ma_qty # 工单数量";
  32. ma_code.FormName = Name;
  33. ma_code.DBTitle = "工单查询";
  34. ma_code.SetValueField = new string[] { "ma_code", "ma_prodcode", "pr_detail", "ma_craftcode", "ma_qty" };
  35. ma_code.Condition = "ma_statuscode='STARTED'";
  36. ma_code.DbChange += Ma_code_DbChange;
  37. sc_stepcode.Text = User.CurrentStepCode;
  38. ma_code.SetLockCheckBox(Lock);
  39. Lock.GetMakeCodeCtl(ma_code);
  40. dh = SystemInf.dh;
  41. }
  42. private void Ma_code_DbChange(object sender, EventArgs e)
  43. {
  44. Dbfind = ma_code.ReturnData;
  45. BaseUtil.SetFormValue(this.Controls, Dbfind);
  46. FillDataGridView();
  47. }
  48. private void Make_PositionStock_SizeChanged(object sender, EventArgs e)
  49. {
  50. asc.controlAutoSize(this);
  51. }
  52. private void Clean_Click(object sender, EventArgs e)
  53. {
  54. OperateResult.Clear();
  55. }
  56. //物料批号Enter事件
  57. private void pr_batchnum_KeyDown(object sender, KeyEventArgs e)
  58. {
  59. }
  60. //加载Grid数据
  61. private void FillDataGridView()
  62. {
  63. sql.Clear();
  64. sql.Append("select ms_id,ms_makecode,ms_prodcode,ms_stepcode,ms_linecode,ms_sourcecode,ms_man,ms_indate,ms_okqty,ms_ngqty,ms_agokqty from MES_STEPREPORT ");
  65. sql.Append("where ms_makecode = '"+ma_code.Text+"' and ms_stepcode = '"+User.CurrentStepCode+"' and ms_status = 0 order by ms_id desc");
  66. DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  67. BaseUtil.FillDgvWithDataTable(BatchProductDGV56, dt);
  68. sql.Clear();
  69. sql.Append("select sum(ms_okqty)oksum,sum(ms_agokqty) agoksum,sum(ms_ngqty)ngsum from MES_STEPREPORT ");
  70. sql.Append("where ms_makecode = '" + ma_code.Text + "' and ms_stepcode = '" + User.CurrentStepCode + "' and ms_status = 0");
  71. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  72. BaseUtil.SetFormValue(this.Controls, dt);
  73. }
  74. private void Confirm_Click(object sender, EventArgs e)
  75. {
  76. pr_batchnum_KeyDown(sender, new KeyEventArgs(Keys.Enter));
  77. }
  78. private void Screen_Click(object sender, EventArgs e)
  79. {
  80. FillDataGridView();
  81. }
  82. private void ma_prodcode_TextChanged(object sender, EventArgs e)
  83. {
  84. if (ma_code.Text != "")
  85. {
  86. dt = (DataTable)dh.ExecuteSql("select ma_id,ma_craftcode,ma_statuscode,ma_code,ma_prodcode,pr_spec,pr_detail,ma_bomversion from make left join product on ma_prodcode=pr_code where ma_code='" + ma_code.Text + "'", "select");
  87. if (dt.Rows.Count > 0)
  88. {
  89. ma_id = dt.Rows[0]["ma_id"].ToString();
  90. string craftcode = dt.Rows[0]["ma_craftcode"].ToString();
  91. BaseUtil.SetFormValue(this.Controls, dt);
  92. }
  93. else OperateResult.AppendText(">>工单号不存在\n", Color.Red);
  94. }
  95. else OperateResult.AppendText(">>工单号不允许为空\n", Color.Red);
  96. }
  97. private void BatchProduct_CellContentClick(object sender, DataGridViewCellEventArgs e)
  98. {
  99. if (BatchProductDGV56.Columns[e.ColumnIndex].Name == "DeleteRow")
  100. {
  101. if (e.RowIndex >= 0)
  102. {
  103. string id = BatchProductDGV56.Rows[e.RowIndex].Cells["ms_id"].Value.ToString();
  104. if (id != "0")
  105. {
  106. dh.ExecuteSql("update MES_STEPREPORT set ms_status =-1 where ms_id='" + id + "'", "delete");
  107. DataTable dt = (DataTable)dh.ExecuteSql("select cm_id,cm_barcode,cm_inqty from craftmaterial where cm_msid = " + id + "", "select");
  108. for (int i = 0; i < dt.Rows.Count; i++)
  109. {
  110. dh.UpdateByCondition("craftmaterial","cm_status =-1","cm_id = "+dt.Rows[i]["cm_id"].ToString() +"");
  111. dh.UpdateByCondition("makesourcestock", "mss_remain =mss_remain+"+ dt.Rows[i]["cm_inqty"].ToString() + ",mss_useqty = mss_useqty-" + dt.Rows[i]["cm_inqty"].ToString() + "", "mss_barcode = '" + dt.Rows[i]["cm_barcode"].ToString() + "'");
  112. dh.UpdateByCondition("barcode", "bar_remain =bar_remain+" + dt.Rows[i]["cm_inqty"].ToString() + "", "bar_code = '" + dt.Rows[i]["cm_barcode"].ToString() + "'");
  113. }
  114. LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ma_code.Text, User.UserLineCode, User.UserSourceCode, "工序报工", "删除记录" + id, "", "");
  115. OperateResult.AppendText(">>报工记录删除成功\n",Color.Green);
  116. FillDataGridView();
  117. }
  118. }
  119. }
  120. if (BatchProductDGV56.Columns[e.ColumnIndex].Name == "AddBad")
  121. {
  122. if (e.RowIndex >= 0)
  123. {
  124. string id = BatchProductDGV56.Rows[e.RowIndex].Cells["ms_id"].Value.ToString();
  125. double ngqty = double.Parse(BatchProductDGV56.Rows[e.RowIndex].Cells["ms_ngqty"].Value.ToString());
  126. if (ma_code.Text == "" || ngqty == 0)
  127. {
  128. OperateResult.AppendText(">>工单号与不良不允许为空\n", Color.Red);
  129. }
  130. else
  131. {
  132. Make_StepReportDetail badcode = new Make_StepReportDetail(id, ngqty,ma_code.Text);
  133. BaseUtil.SetFormCenter(badcode);
  134. badcode.ShowDialog();
  135. }
  136. }
  137. }
  138. }
  139. private void ma_code_UserControlTextChanged(object sender, EventArgs e)
  140. {
  141. if (ma_code.Text.Length > 4)
  142. {
  143. string ErrMessage = "";
  144. if (LogicHandler.CheckMakeStatus(ma_code.Text, out ErrMessage))
  145. {
  146. craftcode_condition = "";
  147. DataTable dt = (DataTable)dh.ExecuteSql("select ma_craftcode from make where ma_code='" + ma_code.Text + "'", "select");
  148. string craftcode = "";
  149. if (dt.Rows.Count > 0)
  150. {
  151. craftcode = dt.Rows[0]["ma_craftcode"].ToString();
  152. }
  153. sql.Clear();
  154. sql.Append("select distinct ms_craftcode ma_craftcode from makeserial left join craft on cr_code=ms_craftcode ");
  155. sql.Append("where ms_makecode='" + ma_code.Text + "' and ms_craftcode<>'" + craftcode + "'");
  156. dt.Merge((DataTable)dh.ExecuteSql(sql.GetString(), "select"));
  157. ma_craftcode.DisplayMember = "ma_craftcode";
  158. ma_craftcode.ValueMember = "ma_craftcode";
  159. ma_craftcode.DataSource = dt;
  160. for (int i = 0; i < dt.Rows.Count; i++)
  161. {
  162. if (dt.Rows.Count - 1 == i)
  163. craftcode_condition += "'" + dt.Rows[i]["ma_craftcode"].ToString() + "'";
  164. else
  165. craftcode_condition += "'" + dt.Rows[i]["ma_craftcode"].ToString() + "',";
  166. }
  167. }
  168. }
  169. }
  170. private void BatchProductDGV_CellEndEdit(object sender, DataGridViewCellEventArgs e)
  171. {
  172. }
  173. private void BatchProductDGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
  174. {
  175. if (BatchProductDGV56.Columns[e.ColumnIndex].Name == "DeleteRow")
  176. {
  177. if (BatchProductDGV56.Rows[e.RowIndex].Cells["ms_id"].Value.ToString() == "0")
  178. e.Value = Properties.Resources.WhiteImage;
  179. else
  180. e.Value = Properties.Resources.bindingNavigatorDeleteItem_Image;
  181. }
  182. }
  183. private void ma_craftcode_SelectedIndexChanged(object sender, EventArgs e)
  184. {
  185. Screen.PerformClick();
  186. }
  187. private void BatchProductDGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
  188. {
  189. bool mouseOver = e.CellBounds.Contains(this.PointToClient(Cursor.Position));
  190. if (e.ColumnIndex > 0)
  191. {
  192. if (BatchProductDGV56.Columns[e.ColumnIndex].Name == "mss_remain")
  193. {
  194. SolidBrush solidBrush = new SolidBrush(Color.FromArgb(51, 153, 255));
  195. e.Graphics.FillRectangle(mouseOver ? solidBrush : Brushes.LightSeaGreen, e.CellBounds);
  196. Rectangle border = e.CellBounds;
  197. border.Width -= 1;
  198. e.Graphics.DrawRectangle(Pens.White, border);
  199. e.PaintContent(e.CellBounds);
  200. e.Handled = true;
  201. }
  202. }
  203. }
  204. private void normalButton1_Click(object sender, EventArgs e)
  205. {
  206. }
  207. private void normalButton2_Click(object sender, EventArgs e)
  208. {
  209. if (okqty.Text == "" && ngqty.Text == ""&&agokqty.Text == "")
  210. {
  211. OperateResult.AppendText(">>录入信息不可为空\n", Color.Green);
  212. return;
  213. }
  214. if (!dh.CheckExist("step", "st_code ='" + User.CurrentStepCode + "' and st_ifoutline = -1"))
  215. {
  216. OperateResult.AppendText(">>工序"+User.CurrentStepCode+"不允许在此界面采集\n", Color.Red);
  217. return;
  218. }
  219. int ok = int.Parse(okqty.Text == "" ? "0" : okqty.Text);
  220. int ng = int.Parse(ngqty.Text == "" ? "0" : ngqty.Text);
  221. int agok = int.Parse(agokqty.Text == "" ? "0" : agokqty.Text);
  222. int inagsum = int.Parse(agoksum.Text == "" ? "0" : agoksum.Text);
  223. int inngsum = int.Parse(ngsum.Text == "" ? "0" : ngsum.Text);
  224. if (agok + inagsum > inngsum)
  225. {
  226. OperateResult.AppendText(">>再次通过数:"+agok+"+已采集再次通过数:"+inagsum+"大于不良数:"+inngsum+",无法采集\n", Color.Red);
  227. return;
  228. }
  229. string msid = dh.GetSEQ("MES_STEPREPORT_seq");
  230. if (dh.CheckExist("step", "st_code ='" + User.CurrentStepCode + "' and st_ifinput = -1"))
  231. {
  232. DataTable dt;
  233. DataTable dta;
  234. DataTable dtb;
  235. sql.Clear();
  236. sql.Append(" select wm_concat(mm_prodcode)mm_prodcode,count(1)cn from (select MAX(mm_oneuseqty) baseqty,mm_prodcode from make left join makematerial on mm_maid=ma_id left join Product on mm_prodcode=pr_code ");
  237. sql.Append(" where ma_prodcode='"+ma_prodcode.Text+"' and ma_code='"+ma_code.Text+"' and pr_mncode='"+User.CurrentStepCode+ "'and mm_oneuseqty>0 GROUP BY mm_prodcode) B left join ");
  238. sql.Append(" (select sum(nvl(mss_remain,0))remain,mss_fprodcode from makesourcestock where mss_linecode='"+User.UserLineCode+"' and mss_stepcode='" + User.CurrentStepCode + "' group by mss_fprodcode)A ");
  239. sql.Append(" on mm_prodcode=mss_fprodcode where (nvl(mss_fprodcode,' ')=' ' or A.remain<b.baseqty*"+(ok+ng)+") AND rownum<20 ");
  240. dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  241. if (int.Parse(dt.Rows[0]["cn"].ToString()) > 0)
  242. {
  243. OperateResult.AppendText(">>批次物料" + dt.Rows[0]["mm_prodcode"].ToString() + "备料不足\n", Color.Red);
  244. return;
  245. }
  246. sql.Clear();
  247. sql.Append(" SELECT mss_fprodcode,max(mss_baseqty)*"+(ok+ng)+ " baseqty,count(1)cn FROM makesourcestock where mss_linecode='" + User.UserLineCode + "' ");
  248. sql.Append(" and mss_stepcode='" + User.CurrentStepCode + "' and exists (select 1 from make left join makematerial on mm_maid=ma_id left join Product on mm_prodcode=pr_code where ma_prodcode='" + ma_prodcode.Text + "' and ma_code='" + ma_code.Text + "' and pr_mncode='" + User.CurrentStepCode + "' and mss_fprodcode=mm_prodcode) ");
  249. sql.Append(" and mss_remain>0 group by mss_fprodcode ");
  250. dta = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  251. for (int i = 0; i < dta.Rows.Count; i++)
  252. {
  253. double baseqty = double.Parse(dta.Rows[i]["baseqty"].ToString());
  254. sql.Clear();
  255. sql.Append(" select mss_id,mss_remain,mss_barcode,mss_prodcode,mss_baseqty from makesourcestock where mss_linecode='" + User.UserLineCode + "' AND mss_stepcode='" + User.CurrentStepCode + "' ");
  256. sql.Append(" and mss_fprodcode='"+dta.Rows[i]["mss_fprodcode"].ToString() +"' AND mss_invalidtime is null order by mss_id asc ");
  257. dtb = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  258. for (int j = 0; j < dtb.Rows.Count; j++)
  259. {
  260. if (baseqty > 0)
  261. {
  262. double v_v_useqty = 0;
  263. if (double.Parse(dtb.Rows[j]["mss_remain"].ToString()) >= baseqty || j == dtb.Rows.Count - 1)
  264. {
  265. v_v_useqty = baseqty;
  266. baseqty = 0;
  267. dh.UpdateByCondition("makesourcestock", "mss_remain= mss_remain - " + v_v_useqty + ",mss_useqty=NVL(mss_useqty,0)+" + v_v_useqty + ",mss_madeqty=NVL(mss_madeqty,0)+ceil(" + v_v_useqty + "/" + double.Parse(dtb.Rows[j]["mss_baseqty"].ToString()) + "),mss_validtime=(case when mss_validtime is null then sysdate else mss_validtime end),MSS_UABLE=-1 ", "mss_id=" + dtb.Rows[j]["mss_id"].ToString() + "");
  268. }
  269. else {
  270. v_v_useqty = double.Parse(dtb.Rows[j]["mss_remain"].ToString());
  271. baseqty = baseqty- v_v_useqty;
  272. dh.UpdateByCondition("makesourcestock", "mss_remain= mss_remain - " + v_v_useqty + ",mss_useqty=NVL(mss_useqty,0)+" + v_v_useqty + ",mss_madeqty=NVL(mss_madeqty,0)+ceil(" + v_v_useqty + "/" + double.Parse(dtb.Rows[j]["mss_baseqty"].ToString()) + "),mss_validtime=(case when mss_validtime is null then sysdate else mss_validtime end),MSS_UABLE=-1 ", "mss_id=" + dtb.Rows[j]["mss_id"].ToString() + "");
  273. }
  274. dh.UpdateByCondition("barcode", "bar_remain=bar_remain-"+ v_v_useqty + "", "bar_code='"+ dtb.Rows[j]["mss_barcode"].ToString() + "' and bar_remain>0");
  275. dh.ExecuteSql("insert into craftmaterial(CM_ID,CM_MAKECODE,CM_MAID,CM_MAPRODCODE,CM_STEPCODE,CM_CRAFTCODE,CM_BARCODE,CM_SONCODE,CM_FSONCODE,CM_INQTY,CM_INDATE,CM_INMAN,CM_LINECODE,CM_WCCODE,CM_SOURCECODE,CM_STATUS,CM_MSID) SELECT craftmaterial_seq.nextval,MA_CODE,ma_id,ma_prodcode,'"+User.CurrentStepCode+"', '"+ma_craftcode.Text+"','"+ dtb.Rows[j]["mss_barcode"].ToString() + "','"+ dtb.Rows[j]["mss_prodcode"].ToString() + "','"+ dtb.Rows[j]["mss_prodcode"].ToString() + "',"+ v_v_useqty + ",sysdate,'"+User.UserName+"','"+User.UserLineCode+"','"+User.WorkCenter+"','"+User.UserSourceCode+"',0,'"+ msid + "' FROM MAKE WHERE MA_CODE='"+ma_code.Text+"'", "select");
  276. }
  277. }
  278. }
  279. }
  280. sql.Clear();
  281. sql.Append("insert into MES_STEPREPORT (MS_ID,MS_MAKECODE,MS_PRODCODE ,MS_STEPCODE,");
  282. sql.Append("MS_LINECODE,MS_SOURCECODE,MS_MAN,MS_INDATE,MS_OKQTY,MS_NGQTY,");
  283. sql.Append("MS_REMARK,MS_STATUS,MS_AGOKQTY) values(" + msid + ",'" + ma_code.Text + "','" + ma_prodcode.Text + "',");
  284. sql.Append("'" +User.CurrentStepCode + "','" + User.UserLineCode + "','" + User.UserSourceCode + "','" + User.UserName + "',");
  285. sql.Append("sysdate,'" + ok + "','" + ng + "','" + Remark.Text + "','" + 0 + "','"+agok+"')");
  286. dh.ExecuteSql(sql.GetString(), "insert");
  287. LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, ma_code.Text, User.UserLineCode, User.UserSourceCode, "工序报工", "良品:"+ok+",再次通过:"+agok+",不良品:"+ng+"", "", "");
  288. //数据插入成功后加载Grid的数据
  289. FillDataGridView();
  290. OperateResult.AppendText(">>工单"+ma_code.Text+",良品:" + ok + ",再次通过:" + agok + ",不良品:" + ng + "报工成功\n", Color.Green, okqty,ngqty,agokqty);
  291. Remark.Text = "";
  292. }
  293. }
  294. }