f_aps_mtrl_will_find.srf 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. $PBExportHeader$f_aps_mtrl_will_find.srf
  2. global type f_aps_mtrl_will_find from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_aps_mtrl_will_find (integer arg_type, integer arg_audittype, long arg_scid, long arg_billid, ref string arg_msg)
  6. end prototypes
  7. global function integer f_aps_mtrl_will_find (integer arg_type, integer arg_audittype, long arg_scid, long arg_billid, ref string arg_msg);// arg_type
  8. //1.销售订单
  9. //2.销售发货单
  10. //3.订单配置变更单
  11. //4.外协订单
  12. //5.外协收货单
  13. //6.采购订单
  14. //7.采购收货单
  15. //8.生产进仓单
  16. //9.生产指令单
  17. //10.指令单换料,增料单
  18. //arg_audittype - 0 - 审核 1-撤审
  19. Int rslt = 1
  20. IF sys_option_if_newmrp = 0 THEN
  21. rslt = 1
  22. GOTO ext
  23. END IF
  24. datastore ds_salemx,ds_outwaremx_sale,ds_sale_changemx,ds_order_wfjgmx,ds_wfjgmx_in,ds_wfjgmx_in_out_mtrlware
  25. datastore ds_buytaskmx,ds_inwaremx_buy,ds_inwaremx_cp,ds_order_wfjgmx_out,ds_order_ml_mx,ds_wfjgmx_out_rqmtrl
  26. datastore ds_mrpmx
  27. ds_wfjgmx_out_rqmtrl = Create datastore
  28. ds_wfjgmx_out_rqmtrl.DataObject = 'ds_aps_wfjgmx_out_rqmtrl'
  29. ds_wfjgmx_out_rqmtrl.SetTransObject(sqlca)
  30. ds_mrpmx = Create datastore
  31. ds_mrpmx.DataObject = 'ds_order_ml_mrpmx'
  32. ds_mrpmx.SetTransObject(sqlca)
  33. ds_salemx = Create datastore
  34. ds_salemx.DataObject = 'ds_aps_saletaskmx'
  35. ds_salemx.SetTransObject(sqlca)
  36. ds_outwaremx_sale = Create datastore
  37. ds_outwaremx_sale.DataObject = 'ds_aps_outwaremx_sale'
  38. ds_outwaremx_sale.SetTransObject(sqlca)
  39. ds_sale_changemx = Create datastore
  40. ds_sale_changemx.DataObject = 'ds_aps_saletaskmx_change'
  41. ds_sale_changemx.SetTransObject(sqlca)
  42. ds_order_wfjgmx = Create datastore
  43. ds_order_wfjgmx.DataObject = 'ds_aps_order_wfjgmx'
  44. ds_order_wfjgmx.SetTransObject(sqlca)
  45. ds_wfjgmx_in = Create datastore
  46. ds_wfjgmx_in.DataObject = 'ds_aps_wfjgmx_in_aft'
  47. ds_wfjgmx_in.SetTransObject(sqlca)
  48. ds_wfjgmx_in_out_mtrlware = Create datastore
  49. ds_wfjgmx_in_out_mtrlware.DataObject = 'ds_aps_wfjgmx_in_aft'
  50. ds_wfjgmx_in_out_mtrlware.SetTransObject(sqlca)
  51. ds_buytaskmx = Create datastore
  52. ds_buytaskmx.DataObject = 'ds_aps_buytaskmx'
  53. ds_buytaskmx.SetTransObject(sqlca)
  54. ds_inwaremx_buy = Create datastore
  55. ds_inwaremx_buy.DataObject = 'ds_aps_inwaremx_buy'
  56. ds_inwaremx_buy.SetTransObject(sqlca)
  57. ds_inwaremx_cp = Create datastore
  58. ds_inwaremx_cp.DataObject = 'ds_aps_inwaremx_cp'
  59. ds_inwaremx_cp.SetTransObject(sqlca)
  60. ds_order_wfjgmx_out = Create datastore
  61. ds_order_wfjgmx_out.DataObject = 'ds_aps_order_wfjgmx_out'
  62. ds_order_wfjgmx_out.SetTransObject(sqlca)
  63. ds_order_ml_mx = Create datastore
  64. ds_order_ml_mx.DataObject = 'ds_aps_order_ml_mx'
  65. ds_order_ml_mx.SetTransObject(sqlca)
  66. Long ll_row ,ll_i,ll_j
  67. String ls_status,ls_woodcode,ls_pcode
  68. String ls_status_old,ls_woodcode_old,ls_pcode_old
  69. Long ll_mtrlid,ll_scid,ll_smtrlid,ll_wrkgrpid
  70. DateTime ldt_rqdate,ldt_rqdate_wx_find,ldt_rqdate_out
  71. Decimal ld_qty,ld_sqty,ld_dqty,ld_qty_order
  72. Int li_inwareflag,li_billtype
  73. Int li_ordertype
  74. Long ll_porderid,ll_relid,cnt
  75. Long ll_ordertype,ll_pzlorderid
  76. Long ll_orderid_update,ll_orderid
  77. Long ll_taskid[],i
  78. Long ll_row_f,ll_k,ll_lp
  79. String ls_pfcode
  80. Decimal ld_qty_out
  81. Long ll_mtrlid_out
  82. String ls_status_out,ls_woodcode_out,ls_pcode_out
  83. CHOOSE CASE arg_type
  84. CASE 1
  85. ds_salemx.Retrieve(arg_scid,arg_billid)
  86. FOR ll_i = 1 To ds_salemx.RowCount()
  87. ll_mtrlid = ds_salemx.Object.mtrlid[ll_i]
  88. ls_status = ds_salemx.Object.status[ll_i]
  89. ls_woodcode = ds_salemx.Object.woodcode[ll_i]
  90. ls_pcode = ds_salemx.Object.pcode[ll_i]
  91. ldt_rqdate = ds_salemx.Object.requiredate[ll_i]
  92. IF arg_audittype = 0 THEN
  93. ld_qty = ds_salemx.Object.saleqty[ll_i]
  94. ELSE
  95. ld_qty = 0 - ds_salemx.Object.saleqty[ll_i]
  96. END IF
  97. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,1,arg_msg,mrp_sqlca,True) = 0 THEN
  98. rslt = 0
  99. GOTO ext
  100. END IF
  101. NEXT
  102. CASE 2
  103. ds_outwaremx_sale.Retrieve(arg_scid,arg_billid)
  104. FOR ll_i = 1 To ds_outwaremx_sale.RowCount()
  105. ll_mtrlid = ds_outwaremx_sale.Object.u_saletaskmx_mtrlid[ll_i]
  106. ls_status = ds_outwaremx_sale.Object.u_saletaskmx_status[ll_i]
  107. ls_woodcode = ds_outwaremx_sale.Object.u_saletaskmx_woodcode[ll_i]
  108. ls_pcode = ds_outwaremx_sale.Object.u_saletaskmx_pcode[ll_i]
  109. ldt_rqdate = ds_outwaremx_sale.Object.u_saletaskmx_requiredate[ll_i]
  110. IF arg_audittype = 0 THEN
  111. ld_qty = 0 - ds_outwaremx_sale.Object.u_outwaremx_qty[ll_i]
  112. ELSE
  113. ld_qty = ds_outwaremx_sale.Object.u_outwaremx_qty[ll_i]
  114. END IF
  115. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,1,arg_msg,mrp_sqlca,True) = 0 THEN
  116. rslt = 0
  117. GOTO ext
  118. END IF
  119. NEXT
  120. CASE 3
  121. ds_sale_changemx.Retrieve(arg_scid,arg_billid)
  122. FOR ll_i = 1 To ds_sale_changemx.RowCount()
  123. ll_mtrlid = ds_sale_changemx.Object.u_saletaskmx_mtrlid[ll_i]
  124. ls_status = ds_sale_changemx.Object.u_saletaskmx_change_newstatus[ll_i]
  125. ls_woodcode = ds_sale_changemx.Object.u_saletaskmx_change_newwoodcode[ll_i]
  126. ls_pcode = ds_sale_changemx.Object.u_saletaskmx_change_newpcode[ll_i]
  127. ls_status_old = ds_sale_changemx.Object.u_saletaskmx_change_oldstatus[ll_i]
  128. ls_woodcode_old = ds_sale_changemx.Object.u_saletaskmx_change_oldwoodcode[ll_i]
  129. ls_pcode_old = ds_sale_changemx.Object.u_saletaskmx_change_oldpcode[ll_i]
  130. ldt_rqdate = ds_sale_changemx.Object.u_saletaskmx_requiredate[ll_i]
  131. ld_qty = ds_sale_changemx.Object.u_saletaskmx_saleqty[ll_i]
  132. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status_old,ls_woodcode_old,ls_pcode_old,ldt_rqdate, 0 - ld_qty,1,arg_msg,mrp_sqlca,True) = 0 THEN
  133. rslt = 0
  134. GOTO ext
  135. END IF
  136. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,1,arg_msg,mrp_sqlca,True) = 0 THEN
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. NEXT
  141. CASE 4
  142. //收货明细- 更新外协未到货数
  143. ds_order_wfjgmx.Retrieve(arg_scid,arg_billid)
  144. FOR ll_i = 1 To ds_order_wfjgmx.RowCount()
  145. ll_mtrlid = ds_order_wfjgmx.Object.mtrlid[ll_i]
  146. ls_status = ds_order_wfjgmx.Object.status[ll_i]
  147. ls_woodcode = ds_order_wfjgmx.Object.woodcode[ll_i]
  148. ls_pcode = ds_order_wfjgmx.Object.pcode[ll_i]
  149. ldt_rqdate = ds_order_wfjgmx.Object.requiredate[ll_i]
  150. IF arg_audittype = 0 THEN
  151. ld_qty = ds_order_wfjgmx.Object.qty[ll_i]
  152. ELSE
  153. ld_qty = 0 - ds_order_wfjgmx.Object.qty[ll_i]
  154. END IF
  155. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,6,arg_msg,mrp_sqlca,True) = 0 THEN
  156. rslt = 0
  157. GOTO ext
  158. END IF
  159. NEXT
  160. //发货明细- 更新外协需求数
  161. //发出明细-生产需求数
  162. ds_order_wfjgmx_out.Retrieve(arg_scid,arg_billid)
  163. FOR ll_i = 1 To ds_order_wfjgmx_out.RowCount()
  164. ll_mtrlid = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_mtrlid[ll_i]
  165. ls_status = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_status[ll_i]
  166. ls_woodcode = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_woodcode[ll_i]
  167. ls_pcode = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_pcode[ll_i]
  168. ldt_rqdate = ds_order_wfjgmx_out.Object.u_order_wfjg_requiredate[ll_i]
  169. // //这个有问题取相关收货明细的交货日期
  170. // //最对应收货明细最早交货行
  171. // SELECT min(u_order_wfjgMx.Requiredate)
  172. // INTO :ldt_rqdate_wx_find
  173. // FROM u_order_wfjgMx,u_order_wfjgmx_out_mx
  174. // WHERE u_order_wfjgMx.scid = u_order_wfjgmx_out_mx.scid
  175. // AND u_order_wfjgMx.printid = u_order_wfjgmx_out_mx.relprintid
  176. // AND u_order_wfjgmx_out_mx.mtrlid = :ll_mtrlid
  177. // AND u_order_wfjgmx_out_mx.status = :ls_status
  178. // AND u_order_wfjgmx_out_mx.woodcode = :ls_woodcode
  179. // AND u_order_wfjgmx_out_mx.pcode = :ls_pcode
  180. // AND u_order_wfjgMx.scid = :arg_scid
  181. // And u_order_wfjgMx.wfjgid = :arg_billid;
  182. // IF sqlca.SQLCode <> 0 THEN
  183. // arg_msg = '查询发出明细对应收货明细最早交货日期失败,'+sqlca.SQLErrText
  184. // rslt = 0
  185. // GOTO ext
  186. // END IF
  187. //
  188. // ldt_rqdate = ldt_rqdate_wx_find
  189. IF arg_audittype = 0 THEN
  190. ld_qty = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_qty[ll_i]
  191. // ld_qty_order = 0 - ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_qty[ll_i]
  192. ELSE
  193. ld_qty = 0 - ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_qty[ll_i]
  194. // ld_qty_order = ds_order_wfjgmx_out.Object.u_order_wfjgmx_out_qty[ll_i]
  195. END IF
  196. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,3,arg_msg,mrp_sqlca,True) = 0 THEN
  197. rslt = 0
  198. GOTO ext
  199. END IF
  200. ds_wfjgmx_out_rqmtrl.Retrieve(arg_scid,arg_billid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
  201. FOR ll_j = 1 To ds_wfjgmx_out_rqmtrl.RowCount()
  202. ldt_rqdate_wx_find = ds_wfjgmx_out_rqmtrl.Object.rqdate[ll_j]
  203. ld_qty_order = ds_wfjgmx_out_rqmtrl.Object.qty[ll_j]
  204. IF arg_audittype = 0 THEN
  205. ld_qty_order = 0 - ld_qty_order
  206. ELSE
  207. ld_qty_order = ld_qty_order
  208. END IF
  209. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate_wx_find,ld_qty_order,2,arg_msg,mrp_sqlca,True) = 0 THEN
  210. rslt = 0
  211. GOTO ext
  212. END IF
  213. NEXT
  214. NEXT
  215. CASE 5
  216. ds_wfjgmx_in.Retrieve(arg_scid,arg_billid)
  217. //收货明细- 更新外协未到货数
  218. //相关发出明细已领数 - 更新外协需求数
  219. FOR ll_i = 1 To ds_wfjgmx_in.RowCount()
  220. ll_mtrlid = ds_wfjgmx_in.Object.u_order_wfjgmx_mtrlid[ll_i]
  221. ls_status = ds_wfjgmx_in.Object.u_order_wfjgmx_status[ll_i]
  222. ls_woodcode = ds_wfjgmx_in.Object.u_order_wfjgmx_woodcode[ll_i]
  223. ls_pcode = ds_wfjgmx_in.Object.u_order_wfjgmx_pcode[ll_i]
  224. ldt_rqdate = ds_wfjgmx_in.Object.u_order_wfjgmx_requiredate[ll_i]
  225. ll_orderid = ds_wfjgmx_in.Object.u_order_wfjgmx_orderid[ll_i]
  226. ls_pfcode = ds_wfjgmx_in.Object.u_order_wfjgmx_pfcode[ll_i]
  227. ldt_rqdate_out = ds_wfjgmx_in.Object.u_order_wfjg_requiredate[ll_i]
  228. IF arg_audittype = 0 THEN
  229. ld_qty = 0 - ds_wfjgmx_in.Object.ow_wfjgmx_in_aft_qty[ll_i]
  230. ELSE
  231. ld_qty = ds_wfjgmx_in.Object.ow_wfjgmx_in_aft_qty[ll_i]
  232. END IF
  233. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,6,arg_msg,mrp_sqlca,True) = 0 THEN
  234. rslt = 0
  235. GOTO ext
  236. END IF
  237. IF ll_orderid > 0 THEN
  238. ds_mrpmx.Retrieve(arg_scid,ll_orderid)
  239. ll_row_f = ds_mrpmx.Find("u_orderrqmtrl_tree_mtrlid = "+String(ll_mtrlid),1,ds_mrpmx.RowCount())
  240. IF ll_row_f > 0 THEN
  241. ll_lp = ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_row_f]
  242. FOR ll_k = ll_row_f + 1 To ds_mrpmx.RowCount()
  243. IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_k] <= ll_lp THEN EXIT
  244. IF ds_mrpmx.Object.u_orderrqmtrl_tree_lp[ll_k] = ll_lp + 1 And ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_k] > 0 THEN
  245. ll_mtrlid_out = ds_mrpmx.Object.u_orderrqmtrl_tree_mtrlid[ll_k]
  246. ls_status_out = ds_mrpmx.Object.u_orderrqmtrl_tree_status[ll_k]
  247. ls_woodcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_woodcode[ll_k]
  248. ls_pcode_out = ds_mrpmx.Object.u_orderrqmtrl_tree_pcode[ll_k]
  249. ld_qty_out = ld_qty / ds_mrpmx.Object.u_orderrqmtrl_tree_truerqqty[ll_row_f] * ds_mrpmx.Object.u_orderrqmtrl_tree_rqqty[ll_k]
  250. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid_out,ls_status_out,ls_woodcode_out,ls_pcode_out,ldt_rqdate_out,ld_qty_out,3,arg_msg,mrp_sqlca,True) = 0 THEN
  251. rslt = 0
  252. GOTO ext
  253. END IF
  254. END IF
  255. NEXT
  256. END IF
  257. ELSE
  258. DECLARE cur_inmx CURSOR FOR
  259. SELECT u_PrdPF.SonMtrlid,
  260. :ld_qty * u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss
  261. FROM u_PrdPF INNER JOIN
  262. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  263. WHERE ( u_PrdPF.mtrlid = :ll_mtrlid )
  264. And ( u_PrdPF.pfcode = :ls_pfcode ) ;
  265. OPEN cur_inmx;
  266. FETCH cur_inmx Into :ll_mtrlid_out,:ld_qty_out;
  267. DO WHILE sqlca.SQLCode = 0
  268. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid_out,'','','',ldt_rqdate_out,ld_qty_out,3,arg_msg,mrp_sqlca,True) = 0 THEN
  269. rslt = 0
  270. GOTO ext
  271. END IF
  272. FETCH cur_inmx Into :ll_mtrlid_out,:ld_qty_out;
  273. LOOP
  274. CLOSE cur_inmx;
  275. END IF
  276. NEXT
  277. CASE 6
  278. ds_buytaskmx.Retrieve(arg_scid,arg_billid)
  279. FOR ll_i = 1 To ds_buytaskmx.RowCount()
  280. ll_mtrlid = ds_buytaskmx.Object.mtrlid[ll_i]
  281. ls_status = ds_buytaskmx.Object.status[ll_i]
  282. ls_woodcode = ds_buytaskmx.Object.woodcode[ll_i]
  283. ls_pcode = ds_buytaskmx.Object.pcode[ll_i]
  284. ldt_rqdate = ds_buytaskmx.Object.requiredate[ll_i]
  285. IF arg_audittype = 0 THEN
  286. ld_qty = ds_buytaskmx.Object.qty[ll_i]
  287. ELSE
  288. ld_qty = 0 - ds_buytaskmx.Object.qty[ll_i]
  289. END IF
  290. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,4,arg_msg,mrp_sqlca,True) = 0 THEN
  291. rslt = 0
  292. GOTO ext
  293. END IF
  294. NEXT
  295. CASE 7
  296. ds_inwaremx_buy.Retrieve(arg_scid,arg_billid)
  297. FOR ll_i = 1 To ds_inwaremx_buy.RowCount()
  298. ll_mtrlid = ds_inwaremx_buy.Object.u_buytaskmx_mtrlid[ll_i]
  299. ls_status = ds_inwaremx_buy.Object.u_buytaskmx_status[ll_i]
  300. ls_woodcode = ds_inwaremx_buy.Object.u_buytaskmx_woodcode[ll_i]
  301. ls_pcode = ds_inwaremx_buy.Object.u_buytaskmx_pcode[ll_i]
  302. ldt_rqdate = ds_inwaremx_buy.Object.u_buytaskmx_requiredate[ll_i]
  303. IF arg_audittype = 0 THEN
  304. ld_qty = 0 - ds_inwaremx_buy.Object.u_buytaskmx_qty[ll_i]
  305. ELSE
  306. ld_qty = ds_inwaremx_buy.Object.u_buytaskmx_qty[ll_i]
  307. END IF
  308. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,4,arg_msg,mrp_sqlca,True) = 0 THEN
  309. rslt = 0
  310. GOTO ext
  311. END IF
  312. NEXT
  313. CASE 8
  314. ds_inwaremx_cp.Retrieve(arg_scid,arg_billid)
  315. FOR ll_i = 1 To ds_inwaremx_cp.RowCount()
  316. ll_mtrlid = ds_inwaremx_cp.Object.u_inwaremx_mtrlid[ll_i]
  317. ls_status = ds_inwaremx_cp.Object.u_inwaremx_status[ll_i]
  318. ls_woodcode = ds_inwaremx_cp.Object.u_inwaremx_woodcode[ll_i]
  319. ls_pcode = ds_inwaremx_cp.Object.u_inwaremx_pcode[ll_i]
  320. ldt_rqdate = ds_inwaremx_cp.Object.u_order_ml_requiredate[ll_i]
  321. IF arg_audittype = 0 THEN
  322. ld_qty = 0 - ds_inwaremx_cp.Object.u_inwaremx_qty[ll_i]
  323. ELSE
  324. ld_qty = ds_inwaremx_cp.Object.u_inwaremx_qty[ll_i]
  325. END IF
  326. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,5,arg_msg,mrp_sqlca,True) = 0 THEN
  327. rslt = 0
  328. GOTO ext
  329. END IF
  330. NEXT
  331. CASE 9
  332. SELECT mtrlid,status_mode,woodcode,pcode,orderqty,requiredate,inwareflag,ordertype,pzlorderid
  333. INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ld_qty,:ldt_rqdate,:li_inwareflag,:ll_ordertype,:ll_pzlorderid
  334. FROM u_order_ml
  335. WHERE scid = :arg_scid
  336. And orderid = :arg_billid Using sqlca;
  337. IF sqlca.SQLCode <> 0 THEN
  338. rslt = 0
  339. arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText
  340. GOTO ext
  341. END IF
  342. IF li_inwareflag = 0 THEN
  343. GOTO _not_zl
  344. END IF
  345. IF arg_audittype = 0 THEN
  346. ld_qty = ld_qty
  347. ELSE
  348. ld_qty = 0 - ld_qty
  349. END IF
  350. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,5,arg_msg,mrp_sqlca,True) = 0 THEN
  351. rslt = 0
  352. GOTO ext
  353. END IF
  354. //更新生产计划未排指令数
  355. _not_zl:
  356. IF ll_ordertype = 4 And ll_pzlorderid = 0 THEN
  357. ds_order_ml_mx.Retrieve(arg_scid,arg_billid)
  358. FOR ll_i = 1 To ds_order_ml_mx.RowCount()
  359. ldt_rqdate = ds_order_ml_mx.Object.u_orderrqmtrl_rqdate[ll_i]
  360. ld_qty = ds_order_ml_mx.Object.u_order_ml_mx_qty[ll_i]
  361. IF arg_audittype = 0 THEN
  362. ld_qty = 0 - ld_qty
  363. ELSE
  364. ld_qty = ld_qty
  365. END IF
  366. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_qty,7,arg_msg,mrp_sqlca,True) = 0 THEN
  367. rslt = 0
  368. GOTO ext
  369. END IF
  370. NEXT
  371. END IF
  372. CASE 10
  373. SELECT u_order_ml_mtrl_change.billtype,
  374. u_order_ml_mtrl_change.smtrlid,
  375. u_order_ml_mtrl_change.dmtrlid,
  376. u_order_ml_mtrl_change.status,
  377. u_order_ml_mtrl_change.woodcode,
  378. u_order_ml_mtrl_change.pcode,
  379. u_order_ml_mtrl_change.sqty,
  380. u_order_ml_mtrl_change.dqty,
  381. ISNULL(v_orderrqmtrl.edate, GETDATE())
  382. INTO :li_billtype,
  383. :ll_smtrlid,
  384. :ll_mtrlid,
  385. :ls_status,
  386. :ls_woodcode,
  387. :ls_pcode,
  388. :ld_sqty,
  389. :ld_dqty,
  390. :ldt_rqdate
  391. FROM u_order_ml_mtrl_change LEFT OUTER JOIN
  392. (SELECT scid, OrderID, MtrlID, status, woodcode, pcode, MIN(edate) AS edate
  393. FROM u_OrderRqMtrl
  394. GROUP BY scid, OrderID, MtrlID, status, woodcode, pcode) v_orderrqmtrl ON
  395. u_order_ml_mtrl_change.scid = v_orderrqmtrl.scid AND
  396. u_order_ml_mtrl_change.orderid = v_orderrqmtrl.OrderID AND
  397. u_order_ml_mtrl_change.smtrlid = v_orderrqmtrl.MtrlID AND
  398. u_order_ml_mtrl_change.status = v_orderrqmtrl.status AND
  399. u_order_ml_mtrl_change.woodcode = v_orderrqmtrl.woodcode AND
  400. u_order_ml_mtrl_change.pcode = v_orderrqmtrl.pcode
  401. WHERE u_order_ml_mtrl_change.scid = :arg_scid
  402. And u_order_ml_mtrl_change.billid = :arg_billid;
  403. IF sqlca.SQLCode <> 0 THEN
  404. rslt = 0
  405. arg_msg = '更新用料需求数>>查询单据信息失败,'+sqlca.SQLErrText
  406. GOTO ext
  407. END IF
  408. IF li_billtype = 0 Or li_billtype = 1 Or li_billtype = 3 THEN
  409. IF f_aps_mtrl_will_add(arg_scid,ll_smtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,0 - ld_sqty,2,arg_msg,mrp_sqlca,True) = 0 THEN
  410. rslt = 0
  411. GOTO ext
  412. END IF
  413. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_dqty,2,arg_msg,mrp_sqlca,True) = 0 THEN
  414. rslt = 0
  415. GOTO ext
  416. END IF
  417. ELSEIF li_billtype = 2 THEN
  418. IF f_aps_mtrl_will_add(arg_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ldt_rqdate,ld_dqty,2,arg_msg,mrp_sqlca,True) = 0 THEN
  419. rslt = 0
  420. GOTO ext
  421. END IF
  422. END IF
  423. END CHOOSE
  424. ext:
  425. Destroy ds_salemx
  426. Destroy ds_outwaremx_sale
  427. Destroy ds_sale_changemx
  428. Destroy ds_order_wfjgmx
  429. Destroy ds_wfjgmx_in
  430. Destroy ds_wfjgmx_in_out_mtrlware
  431. Destroy ds_buytaskmx
  432. Destroy ds_inwaremx_buy
  433. Destroy ds_inwaremx_cp
  434. Destroy ds_order_wfjgmx_out
  435. Destroy ds_order_ml_mx
  436. Destroy ds_mrpmx
  437. Destroy ds_wfjgmx_out_rqmtrl
  438. RETURN rslt
  439. end function