uo_cmpl_packpro.sru 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661
  1. $PBExportHeader$uo_cmpl_packpro.sru
  2. forward
  3. global type uo_cmpl_packpro from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_cmpl_packpro from nonvisualobject
  7. end type
  8. global uo_cmpl_packpro uo_cmpl_packpro
  9. type variables
  10. Transaction commit_transaction //数据commit事务
  11. end variables
  12. forward prototypes
  13. public function integer uof_cmpl (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref string arg_msg)
  14. public function integer uof_ref_mtrlwarid_array (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref s_cmplpackpro_ref_mtrlwareid_array s_ref_mtrlwareid_array, ref string arg_msg)
  15. public function integer uof_cmpl_diqty (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg)
  16. public function integer uof_cmpl_diqty_commit (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg)
  17. public function integer uof_update_canuseqty (long arg_scid, long arg_mtrlwareid, decimal arg_qty, decimal arg_pack_min_nofpqty, decimal arg_noauditingqty_ifpackpro, decimal arg_canpackqty_fp, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer uof_add_fpqty (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer uof_add_fpqty_out (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_outqty, ref string arg_msg, boolean arg_ifcommit)
  20. end prototypes
  21. public function integer uof_cmpl (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref string arg_msg);Int rslt = 1
  22. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  23. IF uof_ref_mtrlwarid_array(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  24. rslt = 0
  25. GOTO ext
  26. END IF
  27. IF uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  28. rslt = 0
  29. GOTO ext
  30. END IF
  31. ext:
  32. IF rslt = 0 THEN
  33. ROLLBACK Using commit_transaction;
  34. END IF
  35. RETURN rslt
  36. end function
  37. public function integer uof_ref_mtrlwarid_array (long arg_mtrlid, string arg_plancode, string arg_mtrlcuscode, long arg_storageid, ref s_cmplpackpro_ref_mtrlwareid_array s_ref_mtrlwareid_array, ref string arg_msg);Int rslt = 1
  38. Long ll_i,ll_rowcnt,ll_array,ll_j
  39. Int li_ifpackpro
  40. datastore ds_cmpl_packpro
  41. ds_cmpl_packpro = Create datastore
  42. Select ifpackpro Into :li_ifpackpro
  43. From u_mtrldef
  44. Where mtrlid = :arg_mtrlid Using commit_transaction;
  45. If sqlca.SQLCode <> 0 Then
  46. arg_msg = '查询物料是否包件产品失败,'+commit_transaction.SQLErrText
  47. rslt = 0
  48. Goto ext
  49. End If
  50. If li_ifpackpro = 3 Or li_ifpackpro = 4 Then
  51. ds_cmpl_packpro.DataObject = 'ds_mtrlware_auto_cmpl_packpro2'
  52. Else
  53. ds_cmpl_packpro.DataObject = 'ds_mtrlware_auto_cmpl_packpro'
  54. End If
  55. ll_array = UpperBound(s_ref_mtrlwareid_array.mtrlwareid)
  56. If ll_array = 0 Then
  57. s_ref_mtrlwareid_array.scid[1] = 0
  58. s_ref_mtrlwareid_array.mtrlwareid[1] = 0
  59. s_ref_mtrlwareid_array.storageid[1] = 0
  60. s_ref_mtrlwareid_array.mtrlid[1] = 0
  61. s_ref_mtrlwareid_array.status[1] = ''
  62. s_ref_mtrlwareid_array.woodcode[1] = ''
  63. s_ref_mtrlwareid_array.pcode[1] = ''
  64. s_ref_mtrlwareid_array.plancode[1] = ''
  65. s_ref_mtrlwareid_array.mtrlcuscode[1] = ''
  66. s_ref_mtrlwareid_array.cmpl_ifpackpro[1] = 0
  67. End If
  68. ds_cmpl_packpro.SetTransObject(commit_transaction)
  69. ll_rowcnt = ds_cmpl_packpro.Retrieve(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid)
  70. For ll_i = 1 To ll_rowcnt
  71. For ll_j = 1 To UpperBound(s_ref_mtrlwareid_array.mtrlwareid)
  72. If ds_cmpl_packpro.Object.u_mtrlware_scid[ll_i] = s_ref_mtrlwareid_array.scid[ll_j] And &
  73. ds_cmpl_packpro.Object.u_mtrlware_mtrlwareid[ll_i] = s_ref_mtrlwareid_array.mtrlwareid[ll_j] Then
  74. Goto _next
  75. End If
  76. Next
  77. ll_array++
  78. s_ref_mtrlwareid_array.scid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_scid[ll_i]
  79. s_ref_mtrlwareid_array.mtrlwareid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_mtrlwareid[ll_i]
  80. s_ref_mtrlwareid_array.mtrlid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_mtrlid[ll_i]
  81. s_ref_mtrlwareid_array.storageid[ll_array] = ds_cmpl_packpro.Object.u_mtrlware_storageid[ll_i]
  82. s_ref_mtrlwareid_array.status[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_status[ll_i])
  83. s_ref_mtrlwareid_array.woodcode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_woodcode[ll_i])
  84. s_ref_mtrlwareid_array.pcode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_pcode[ll_i])
  85. s_ref_mtrlwareid_array.plancode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_plancode[ll_i])
  86. s_ref_mtrlwareid_array.mtrlcuscode[ll_array] = Trim(ds_cmpl_packpro.Object.u_mtrlware_mtrlcuscode[ll_i])
  87. s_ref_mtrlwareid_array.cmpl_ifpackpro[ll_array] = li_ifpackpro
  88. _next:
  89. Next
  90. ext:
  91. Destroy ds_cmpl_packpro
  92. Return rslt
  93. end function
  94. public function integer uof_cmpl_diqty (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg);Int rslt = 1
  95. Long ll_i,ll_rowcnt
  96. Long ll_scid,ll_mtrlwareid,ll_mtrlid,ll_storageid
  97. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode
  98. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp
  99. String arg_lsg
  100. Int li_ifpackpro
  101. ll_rowcnt = UpperBound(arg_s_mtrlwareid_array_rst.mtrlwareid)
  102. FOR ll_i = 1 To ll_rowcnt
  103. ll_scid = arg_s_mtrlwareid_array_rst.scid[ll_i]
  104. ll_mtrlwareid = arg_s_mtrlwareid_array_rst.mtrlwareid[ll_i]
  105. ll_mtrlid = arg_s_mtrlwareid_array_rst.mtrlid[ll_i]
  106. ll_storageid = arg_s_mtrlwareid_array_rst.storageid[ll_i]
  107. ls_status = Trim(arg_s_mtrlwareid_array_rst.status[ll_i])
  108. ls_woodcode = Trim(arg_s_mtrlwareid_array_rst.woodcode[ll_i])
  109. ls_pcode = Trim(arg_s_mtrlwareid_array_rst.pcode[ll_i])
  110. ls_plancode = Trim(arg_s_mtrlwareid_array_rst.plancode[ll_i])
  111. ls_mtrlcuscode = Trim(arg_s_mtrlwareid_array_rst.mtrlcuscode[ll_i])
  112. li_ifpackpro = arg_s_mtrlwareid_array_rst.cmpl_ifpackpro[ll_i]
  113. IF ll_mtrlwareid = 0 THEN CONTINUE
  114. ld_ref_qty = 0
  115. ld_ref_pack_min_nofpqty = 0
  116. ld_ref_noauditingqty_ifpackpro = 0
  117. IF li_ifpackpro = 4 And Pos(ls_status,'+') = 0 And Pos(ls_status,'*') = 0 THEN
  118. ld_ref_qty = 0
  119. ld_ref_pack_min_nofpqty = 0
  120. ld_ref_noauditingqty_ifpackpro = 0
  121. ELSE
  122. IF f_cmp_di_qty_fpqty(ll_mtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 THEN
  123. rslt = 0
  124. GOTO ext
  125. END IF
  126. END IF
  127. IF uof_update_canuseqty(ll_scid,ll_mtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 THEN
  128. rslt = 0
  129. GOTO ext
  130. END IF
  131. NEXT
  132. ext:
  133. IF rslt = 0 THEN
  134. ROLLBACK Using commit_transaction;
  135. END IF
  136. RETURN rslt
  137. end function
  138. public function integer uof_cmpl_diqty_commit (s_cmplpackpro_ref_mtrlwareid_array arg_s_mtrlwareid_array_rst, ref string arg_msg);Int rslt = 1
  139. Long ll_i,ll_rowcnt
  140. Long ll_scid,ll_mtrlwareid,ll_mtrlid,ll_storageid
  141. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode
  142. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp
  143. String arg_lsg
  144. Int li_ifpackpro
  145. ll_rowcnt = UpperBound(arg_s_mtrlwareid_array_rst.mtrlwareid)
  146. For ll_i = 1 To ll_rowcnt
  147. ll_scid = arg_s_mtrlwareid_array_rst.scid[ll_i]
  148. ll_mtrlwareid = arg_s_mtrlwareid_array_rst.mtrlwareid[ll_i]
  149. ll_mtrlid = arg_s_mtrlwareid_array_rst.mtrlid[ll_i]
  150. ll_storageid = arg_s_mtrlwareid_array_rst.storageid[ll_i]
  151. ls_status = Trim(arg_s_mtrlwareid_array_rst.status[ll_i])
  152. ls_woodcode = Trim(arg_s_mtrlwareid_array_rst.woodcode[ll_i])
  153. ls_pcode = Trim(arg_s_mtrlwareid_array_rst.pcode[ll_i])
  154. ls_plancode = Trim(arg_s_mtrlwareid_array_rst.plancode[ll_i])
  155. ls_mtrlcuscode = Trim(arg_s_mtrlwareid_array_rst.mtrlcuscode[ll_i])
  156. li_ifpackpro = arg_s_mtrlwareid_array_rst.cmpl_ifpackpro[ll_i]
  157. If ll_mtrlwareid = 0 Then Continue
  158. ld_ref_qty = 0
  159. ld_ref_pack_min_nofpqty = 0
  160. ld_ref_noauditingqty_ifpackpro = 0
  161. If li_ifpackpro = 4 And Pos(ls_status,'+') = 0 And Pos(ls_status,'*') = 0 Then
  162. ld_ref_qty = 0
  163. ld_ref_pack_min_nofpqty = 0
  164. ld_ref_noauditingqty_ifpackpro = 0
  165. Else
  166. If f_cmp_di_qty_fpqty(ll_mtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then
  167. Rollback Using commit_transaction;
  168. Continue
  169. End If
  170. End If
  171. If uof_update_canuseqty(ll_scid,ll_mtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,True) = 0 Then
  172. Continue
  173. End If
  174. Next
  175. Return rslt
  176. end function
  177. public function integer uof_update_canuseqty (long arg_scid, long arg_mtrlwareid, decimal arg_qty, decimal arg_pack_min_nofpqty, decimal arg_noauditingqty_ifpackpro, decimal arg_canpackqty_fp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  178. UPDATE u_mtrlware
  179. SET u_mtrlware.canuseqty = :arg_qty,
  180. u_mtrlware.pack_min_nofpqty = :arg_pack_min_nofpqty,
  181. u_mtrlware.canuseqty_noauditingqty = :arg_noauditingqty_ifpackpro,
  182. u_mtrlware.canpackqty_fp = :arg_canpackqty_fp
  183. WHERE u_mtrlware.scid = :arg_scid
  184. AND u_mtrlware.mtrlwareid = :arg_mtrlwareid
  185. Using commit_transaction;
  186. IF commit_transaction.SQLCode <> 0 THEN
  187. arg_msg = '更新库存参考数失败,可装数:'+string(arg_qty,'#,#0.##########')+',未开单可装数:'+string(arg_noauditingqty_ifpackpro,'#,#0.##########')+',未分配可装数:'+string(arg_pack_min_nofpqty,'#,#0.##########')+','+commit_transaction.SQLErrText
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. ext:
  192. IF rslt = 0 THEN
  193. ROLLBACK Using commit_transaction;
  194. ELSEIF rslt = 1 And arg_ifcommit THEN
  195. COMMIT Using commit_transaction;
  196. END IF
  197. RETURN rslt
  198. end function
  199. public function integer uof_add_fpqty (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  200. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp
  201. Long ll_storageid
  202. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,arg_lsg
  203. Long ll_cnt
  204. Decimal ld_nopackqty_fp,ld_tmpqty_fp,ld_packqty_fp
  205. Long ll_cpmtrlwareid_arr[],ll_cpmtrlid_arr[]
  206. Decimal ld_qty_update_arr[]
  207. Long it_mxbt = 0,ll_i
  208. Int li_if_loop = 0 //是否要扣减其他分配占用的标记
  209. Decimal ld_packqty_fp_upadte = 0,ld_outwareqty
  210. datastore ds_fp
  211. ds_fp = Create datastore
  212. ds_fp.DataObject = 'ds_mtrlware_pack_fp'
  213. ds_fp.SetTransObject(sqlca)
  214. //arg_qty 为负数即为取消(因为修改功能暂时屏蔽 2015-03-12)
  215. //如果是取消分配占用数,检查发货单包件明细是否已用到相关占用,如果已开单,不能取消占用
  216. If arg_qty < 0 And arg_cpmtrlwareid > 0 Then
  217. Select SUM(Case u_outwaremx_mx.qty WHEN 0 Then u_outwaremx_mx.planqty Else u_outwaremx_mx.qty End)
  218. Into :ld_outwareqty
  219. From u_outwaremx_mx Inner JOIN
  220. u_outwaremx On u_outwaremx_mx.outwareid = u_outwaremx.outwareid And
  221. u_outwaremx_mx.scid = u_outwaremx.scid And
  222. u_outwaremx_mx.printid = u_outwaremx.printid Inner JOIN
  223. u_outware On u_outwaremx.scid = u_outware.scid And
  224. u_outwaremx.outwareid = u_outware.outwareid
  225. Where (u_outware.flag = 0)
  226. And u_outwaremx_mx.mtrlwareid = :arg_mtrlwareid
  227. And u_outwaremx.mtrlwareid = :arg_cpmtrlwareid
  228. And u_outwaremx_mx.scid = :arg_scid Using commit_transaction;
  229. If commit_transaction.SQLCode <> 0 Then
  230. rslt = 0
  231. arg_msg = '查询是否有相关发货单使用到该包件失败,'+commit_transaction.SQLErrText
  232. Goto ext
  233. End If
  234. If IsNull(ld_outwareqty) Then ld_outwareqty = 0
  235. End If
  236. //如果是减数量(进仓单撤审),检查原先生成的分配是否够数量扣减,否则循环扣减其他分配数量
  237. If arg_qty < 0 Then
  238. Select u_mtrlware.noallocqty - u_mtrlware.packqty_fp
  239. Into :ld_nopackqty_fp
  240. From u_mtrlware
  241. Where scid = :arg_scid
  242. And mtrlwareid = :arg_mtrlwareid Using commit_transaction;
  243. If commit_transaction.SQLCode <> 0 Then
  244. rslt = 0
  245. arg_msg = '查询通用包件库存未分配数占用数失败,'+commit_transaction.SQLErrText
  246. Goto ext
  247. End If
  248. If arg_cpmtrlwareid > 0 Then
  249. //如果指定要招减对应分配(生产进仓单撤审)
  250. Select qty - outqty
  251. Into :ld_packqty_fp
  252. From u_mtrlware_pack_fp
  253. Where scid = :arg_scid
  254. And mtrlwareid = :arg_mtrlwareid
  255. And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction;
  256. If commit_transaction.SQLCode = -1 Then
  257. rslt = 0
  258. arg_msg = '查询对应分配占用明细信息失败,'+commit_transaction.SQLErrText
  259. Goto ext
  260. End If
  261. If IsNull(ld_packqty_fp) Then ld_packqty_fp = 0
  262. Select SUM(Case u_outwaremx_mx.qty WHEN 0 Then u_outwaremx_mx.planqty Else u_outwaremx_mx.qty End)
  263. Into :ld_outwareqty
  264. From u_outwaremx_mx Inner JOIN
  265. u_outwaremx On u_outwaremx_mx.outwareid = u_outwaremx.outwareid And
  266. u_outwaremx_mx.scid = u_outwaremx.scid And
  267. u_outwaremx_mx.printid = u_outwaremx.printid Inner JOIN
  268. u_outware On u_outwaremx.scid = u_outware.scid And
  269. u_outwaremx.outwareid = u_outware.outwareid
  270. Where (u_outware.flag = 0)
  271. And u_outwaremx_mx.mtrlwareid = :arg_mtrlwareid
  272. And u_outwaremx.mtrlwareid = :arg_cpmtrlwareid
  273. And u_outwaremx_mx.scid = :arg_scid Using commit_transaction;
  274. If commit_transaction.SQLCode <> 0 Then
  275. rslt = 0
  276. arg_msg = '查询是否有相关发货单使用到该包件失败,'+commit_transaction.SQLErrText
  277. Goto ext
  278. End If
  279. If IsNull(ld_outwareqty) Then ld_outwareqty = 0
  280. If ld_packqty_fp + arg_qty - ld_outwareqty < 0 Then
  281. rslt = 0
  282. arg_msg = '可取消分配数:'+String(ld_packqty_fp,'#,##0.##########')+',已开单未审数:'+String(ld_outwareqty,'#,##0.##########')+',不能取消:'+String(0 - arg_qty,'#,##0.##########')
  283. Goto ext
  284. End If
  285. If ld_packqty_fp > 0 Then
  286. it_mxbt++
  287. ll_cpmtrlwareid_arr[it_mxbt] = arg_cpmtrlwareid
  288. ll_cpmtrlid_arr[it_mxbt] = arg_cpmtrlid
  289. If ld_packqty_fp + arg_qty > 0 Then
  290. ld_qty_update_arr[it_mxbt] = arg_qty
  291. Else
  292. ld_qty_update_arr[it_mxbt] = 0 - ld_packqty_fp
  293. End If
  294. End If
  295. If ld_packqty_fp + ld_nopackqty_fp + arg_qty < 0 Then
  296. //如果未分配数不够扣减多出数量,则需要减其余分配数量
  297. ld_tmpqty_fp = ld_packqty_fp + ld_nopackqty_fp + arg_qty
  298. li_if_loop = 1
  299. End If
  300. Else
  301. //不指定(其余进仓单明细是通用包件撤审)
  302. //先找通用包件未分配数是否足够扣减,如果足够,则不减分配明细,如果不够,多出数量循环扣减其他分配数量
  303. If ld_nopackqty_fp + arg_qty >= 0 Then
  304. rslt = 1
  305. Goto ext
  306. Else
  307. ld_tmpqty_fp = ld_nopackqty_fp + arg_qty
  308. li_if_loop = 1
  309. End If
  310. End If
  311. //需要扣减其他分配占用数量的情况
  312. If li_if_loop = 1 Then
  313. ds_fp.Retrieve(arg_scid,arg_mtrlwareid)
  314. For ll_i = 1 To ds_fp.RowCount()
  315. it_mxbt++
  316. ll_cpmtrlwareid_arr[it_mxbt] = ds_fp.Object.cpmtrlwareid[ll_i]
  317. ll_cpmtrlid_arr[it_mxbt] = ds_fp.Object.cpmtrlid[ll_i]
  318. If ld_tmpqty_fp + ds_fp.Object.notoutqty[ll_i] > 0 Then
  319. //分配明细数量够减
  320. ld_qty_update_arr[it_mxbt] = ld_tmpqty_fp
  321. ld_tmpqty_fp = 0
  322. Else
  323. ld_qty_update_arr[it_mxbt] = 0 - ds_fp.Object.notoutqty[ll_i]
  324. ld_tmpqty_fp = ld_tmpqty_fp + ds_fp.Object.notoutqty[ll_i]
  325. End If
  326. If ld_tmpqty_fp >= 0 Then Exit
  327. Next
  328. End If
  329. Else
  330. it_mxbt++
  331. ll_cpmtrlwareid_arr[it_mxbt] = arg_cpmtrlwareid
  332. ll_cpmtrlid_arr[it_mxbt] = arg_cpmtrlid
  333. ld_qty_update_arr[it_mxbt] = arg_qty
  334. End If
  335. For ll_i = 1 To it_mxbt
  336. Update u_mtrlware_pack_fp
  337. Set qty = qty + :ld_qty_update_arr[ll_i],
  338. opdate = getdate(),
  339. opemp = :publ_operator
  340. Where scid = :arg_scid
  341. And mtrlwareid = :arg_mtrlwareid
  342. And cpmtrlwareid = :ll_cpmtrlwareid_arr[ll_i] Using commit_transaction;
  343. If commit_transaction.SQLCode = 0 Then
  344. If commit_transaction.SQLNRows = 0 Then
  345. If arg_qty > 0 Then
  346. Insert Into u_mtrlware_pack_fp
  347. (scid,
  348. mtrlwareid,
  349. mtrlid,
  350. cpmtrlwareid,
  351. cpmtrlid,
  352. qty,
  353. opdate,
  354. opemp)
  355. Values (:arg_scid,
  356. :arg_mtrlwareid,
  357. :arg_mtrlid,
  358. :ll_cpmtrlwareid_arr[ll_i],
  359. :ll_cpmtrlid_arr[ll_i],
  360. :ld_qty_update_arr[ll_i],
  361. getdate(),
  362. :publ_operator) Using commit_transaction;
  363. If commit_transaction.SQLCode <> 0 Then
  364. rslt = 0
  365. arg_msg = '插入包件占用记录失败,'+commit_transaction.SQLErrText
  366. Goto ext
  367. End If
  368. End If
  369. End If
  370. Else
  371. rslt = 0
  372. arg_msg = '更新包件占用记录失败,'+commit_transaction.SQLErrText
  373. Goto ext
  374. End If
  375. //如果qty= 0,删除该行记录
  376. Delete From u_mtrlware_pack_fp
  377. Where scid = :arg_scid
  378. And mtrlwareid = :arg_mtrlwareid
  379. And cpmtrlwareid = :ll_cpmtrlwareid_arr[ll_i]
  380. And qty <= 0 Using commit_transaction;
  381. If commit_transaction.SQLCode <> 0 Then
  382. rslt = 0
  383. arg_msg = '删除包件占用记录失败,'+commit_transaction.SQLErrText
  384. Goto ext
  385. End If
  386. //计算通用包件产品的占用可装数并更新
  387. Select storageid,status,woodcode,pcode,plancode,mtrlcuscode
  388. Into :ll_storageid,:ls_status,:ls_woodcode,:ls_pcode,:ls_plancode,:ls_mtrlcuscode
  389. From u_mtrlware
  390. Where scid = :arg_scid
  391. And mtrlwareid = :ll_cpmtrlwareid_arr[ll_i] Using commit_transaction;
  392. If commit_transaction.SQLCode <> 0 Then
  393. rslt = 0
  394. arg_msg = '查询包件产品库存信息失败,'+commit_transaction.SQLErrText
  395. Goto ext
  396. End If
  397. If f_cmp_di_qty_fpqty(ll_cpmtrlid_arr[ll_i],ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then
  398. rslt = 0
  399. Goto ext
  400. End If
  401. If uof_update_canuseqty(arg_scid,ll_cpmtrlwareid_arr[ll_i],ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 Then
  402. rslt = 0
  403. Goto ext
  404. End If
  405. ld_packqty_fp_upadte = ld_packqty_fp_upadte + ld_qty_update_arr[ll_i]
  406. Next
  407. //更新包件库存的产品已占用数
  408. Update u_mtrlware
  409. Set packqty_fp = case when packqty_fp + :ld_packqty_fp_upadte < 0 then 0 else packqty_fp + :ld_packqty_fp_upadte End
  410. Where scid = :arg_scid
  411. And mtrlwareid = :arg_mtrlwareid Using commit_transaction;
  412. If commit_transaction.SQLCode <> 0 Then
  413. rslt = 0
  414. arg_msg = '更新包件库存的产品已占用数失败,'+commit_transaction.SQLErrText
  415. Goto ext
  416. End If
  417. ext:
  418. If rslt = 0 Then
  419. Rollback Using commit_transaction;
  420. ElseIf rslt = 1 And arg_ifcommit Then
  421. Commit Using commit_transaction;
  422. End If
  423. Destroy ds_fp
  424. Return rslt
  425. end function
  426. public function integer uof_add_fpqty_out (long arg_scid, long arg_mtrlwareid, long arg_mtrlid, long arg_cpmtrlwareid, long arg_cpmtrlid, decimal arg_outqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  427. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp
  428. Long ll_storageid
  429. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,arg_lsg
  430. Decimal ld_qty,ld_outqty_ori
  431. Select qty,outqty
  432. Into :ld_qty,:ld_outqty_ori
  433. From u_mtrlware_pack_fp
  434. Where scid = :arg_scid
  435. And mtrlwareid = :arg_mtrlwareid
  436. And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction;
  437. If commit_transaction.SQLCode <> 0 Then
  438. rslt = 0
  439. arg_msg = '查询包件占用记录失败,'+commit_transaction.SQLErrText
  440. Goto ext
  441. End If
  442. if ld_outqty_ori + arg_outqty > ld_qty then
  443. rslt = 0
  444. arg_msg = '包件占用记录数量:'+string(ld_qty,'#,##0.##########')+',已出仓数:'+string(ld_outqty_ori,'#,##0.##########')+',不能再出仓:'+string(arg_outqty,'#,##0.##########')
  445. goto ext
  446. end if
  447. Update u_mtrlware_pack_fp
  448. Set outqty = outqty + :arg_outqty
  449. Where scid = :arg_scid
  450. And mtrlwareid = :arg_mtrlwareid
  451. And cpmtrlwareid = :arg_cpmtrlwareid Using commit_transaction;
  452. If commit_transaction.SQLCode <> 0 Then
  453. rslt = 0
  454. arg_msg = '更新包件占用记录失败,'+commit_transaction.SQLErrText
  455. Goto ext
  456. End If
  457. //计算通用包件产品的占用可装数并更新
  458. Select storageid,status,woodcode,pcode,plancode,mtrlcuscode
  459. Into :ll_storageid,:ls_status,:ls_woodcode,:ls_pcode,:ls_plancode,:ls_mtrlcuscode
  460. From u_mtrlware
  461. Where scid = :arg_scid
  462. And mtrlwareid = :arg_cpmtrlwareid Using commit_transaction;
  463. If commit_transaction.SQLCode <> 0 Then
  464. rslt = 0
  465. arg_msg = '查询包件产品库存信息失败,'+commit_transaction.SQLErrText
  466. Goto ext
  467. End If
  468. If f_cmp_di_qty_fpqty(arg_cpmtrlid,ll_storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_lsg,arg_msg) = 0 Then
  469. rslt = 0
  470. Goto ext
  471. End If
  472. If uof_update_canuseqty(arg_scid,arg_cpmtrlwareid,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_qty_fp,arg_msg,False) = 0 Then
  473. rslt = 0
  474. Goto ext
  475. End If
  476. //更新包件库存的产品已占用数
  477. Update u_mtrlware
  478. Set packqty_fp = packqty_fp - :arg_outqty
  479. Where scid = :arg_scid
  480. And mtrlwareid = :arg_mtrlwareid Using commit_transaction;
  481. If commit_transaction.SQLCode <> 0 Then
  482. rslt = 0
  483. arg_msg = '更新包件库存的产品已占用数失败,'+commit_transaction.SQLErrText
  484. Goto ext
  485. End If
  486. ext:
  487. If rslt = 0 Then
  488. Rollback Using commit_transaction;
  489. ElseIf rslt = 1 And arg_ifcommit Then
  490. Commit Using commit_transaction;
  491. End If
  492. Return rslt
  493. end function
  494. on uo_cmpl_packpro.create
  495. call super::create
  496. TriggerEvent( this, "constructor" )
  497. end on
  498. on uo_cmpl_packpro.destroy
  499. TriggerEvent( this, "destructor" )
  500. call super::destroy
  501. end on