f_reallocqty_yyx.srf 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. $PBExportHeader$f_reallocqty_yyx.srf
  2. global type f_reallocqty_yyx from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_reallocqty_yyx (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg)
  6. end prototypes
  7. global function integer f_reallocqty_yyx (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg);//YYX 2011-10-27
  8. //
  9. //1.取消要取消分配的订单明细
  10. //2.要分配订单明细重新排序
  11. //3.重新分配
  12. Int rslt = 1
  13. Long i
  14. uo_mtrlware_assign uo_mtrlware_fp
  15. uo_mtrlware_fp = Create uo_mtrlware_assign
  16. datastore ds_fp_cancel
  17. ds_fp_cancel = Create datastore
  18. datastore ds_refp
  19. ds_refp = Create datastore
  20. ds_refp.DataObject = 'ds_reallocqty_sort'
  21. ds_refp.SetTransObject(sqlca)
  22. datastore ds_refpmx
  23. ds_refpmx = Create datastore
  24. ds_refpmx.DataObject = 'ds_reallocqty_sortmx'
  25. ds_refpmx.SetTransObject(sqlca)
  26. datastore ds_refpmx_mtrlware
  27. ds_refpmx_mtrlware = Create datastore
  28. ds_refpmx_mtrlware.DataObject = 'ds_reallocqty_sortmx_mtrlware'
  29. ds_refpmx_mtrlware.SetTransObject(sqlca)
  30. //1.取消分配
  31. IF arg_reallocall And arg_ignorout THEN
  32. //未开过发货单则打散重新分配
  33. ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_1'
  34. ds_fp_cancel.SetTransObject(sqlca)
  35. ds_fp_cancel.Retrieve(arg_fpgrade)
  36. ELSEIF arg_reallocall And Not arg_ignorout THEN
  37. //全部打散重新分配
  38. ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_2'
  39. ds_fp_cancel.SetTransObject(sqlca)
  40. ds_fp_cancel.Retrieve(arg_fpgrade)
  41. ELSEIF Not arg_reallocall And arg_ignorout THEN
  42. //不齐货并且未开过发货单则打散重新分配
  43. ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_3'
  44. ds_fp_cancel.SetTransObject(sqlca)
  45. ds_fp_cancel.Retrieve(arg_fpgrade)
  46. ELSEIF Not arg_reallocall And Not arg_ignorout THEN
  47. //不齐货则打散重新分配
  48. ds_fp_cancel.DataObject = 'ds_reallocqty_cancel_fp_4'
  49. ds_fp_cancel.SetTransObject(sqlca)
  50. ds_fp_cancel.Retrieve(arg_fpgrade)
  51. END IF
  52. FOR i = 1 To ds_fp_cancel.RowCount()
  53. IF uo_mtrlware_fp.uof_assign_del(ds_fp_cancel.Object.assignid[i],&
  54. ds_fp_cancel.Object.qty[i],arg_msg,False) = 0 THEN
  55. rslt = 0
  56. GOTO ext
  57. END IF
  58. NEXT
  59. COMMIT;
  60. //2.排序.重新分配
  61. //时间段以内按
  62. //1 齐货
  63. //2 足钱
  64. //3 日期
  65. //4 优先级
  66. //5 少货数量
  67. Long j,k,l
  68. Long ll_scid,ll_taskid,ll_printid,ll_mtrlid,ll_mtrlwareid, ll_fpgrade
  69. String ls_status,ls_woodcode,ls_pcode
  70. Decimal ld_notfpqty_task,ld_notfpqty_mtrlware,ld_fpqty_real
  71. String arg_log
  72. Boolean if_enough = True
  73. Boolean if_hasfpqty = False
  74. ds_refp.Retrieve()
  75. ds_refp.AcceptText()
  76. FOR j = 1 To ds_refp.RowCount()
  77. arg_log = String(Now(), 'yyyy-MM-dd HH:mm:ss') + '--'
  78. ll_scid = ds_refp.Object.u_saletask_scid[j]
  79. ll_taskid = ds_refp.Object.u_saletask_taskid[j]
  80. ds_refpmx.Retrieve(ll_scid,ll_taskid)
  81. ds_refpmx.AcceptText()
  82. IF ds_refpmx.RowCount() = 0 THEN
  83. //不齐货
  84. arg_log += '分配失败,没有明细'
  85. f_task_writelog(ll_scid,ll_taskid,arg_log)
  86. CONTINUE
  87. END IF
  88. if_enough = True
  89. if_hasfpqty = False
  90. FOR k = 1 To ds_refpmx.RowCount()
  91. IF ds_refpmx.Object.notfpqty[k] > ds_refpmx.Object.warenotfpqty[k] THEN
  92. if_enough = False
  93. EXIT
  94. END IF
  95. NEXT
  96. // IF ds_refpmx.Object.notfpqty_sm[1] > ds_refpmx.Object.warenotfpqty_sm[1] THEN
  97. IF Not if_enough THEN
  98. //不齐货
  99. FOR k = 1 To ds_refpmx.RowCount()
  100. IF ds_refpmx.Object.fpqty[k] > 0 THEN
  101. if_hasfpqty = True
  102. EXIT
  103. END IF
  104. NEXT
  105. IF if_hasfpqty THEN
  106. arg_log += '分配失败,明细不能齐货printid=' + String(ds_refpmx.Object.printid[k])
  107. f_task_writelog(ll_scid,ll_taskid,arg_log)
  108. CONTINUE
  109. END IF
  110. END IF
  111. //齐货
  112. FOR k = 1 To ds_refpmx.RowCount()
  113. ll_scid = ds_refpmx.Object.scid[k]
  114. ll_taskid = ds_refpmx.Object.taskid[k]
  115. ll_printid = ds_refpmx.Object.printid[k]
  116. ll_mtrlid = ds_refpmx.Object.mtrlid[k]
  117. ls_status = ds_refpmx.Object.status[k]
  118. ls_woodcode = ds_refpmx.Object.woodcode[k]
  119. ls_pcode = ds_refpmx.Object.pcode[k]
  120. IF if_enough THEN
  121. ld_notfpqty_task = ds_refpmx.Object.notfpqty[k]
  122. ll_fpgrade = 2
  123. ELSE
  124. IF ds_refpmx.Object.notfpqty[k] > ds_refpmx.Object.fpqty[k] THEN
  125. ld_notfpqty_task = ds_refpmx.Object.fpqty[k]
  126. ELSE
  127. ld_notfpqty_task = ds_refpmx.Object.notfpqty[k]
  128. END IF
  129. ll_fpgrade = ds_refpmx.Object.fpgrade[k]
  130. END IF
  131. IF ld_notfpqty_task <= 0 THEN
  132. CONTINUE
  133. END IF
  134. ds_refpmx_mtrlware.Retrieve(ll_scid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
  135. ds_refpmx_mtrlware.AcceptText()
  136. FOR l = 1 To ds_refpmx_mtrlware.RowCount()
  137. IF ld_notfpqty_task <= 0 THEN EXIT
  138. ll_scid = ds_refpmx_mtrlware.Object.u_mtrlware_scid[l]
  139. ll_mtrlwareid = ds_refpmx_mtrlware.Object.u_mtrlware_mtrlwareid[l]
  140. ld_notfpqty_mtrlware = ds_refpmx_mtrlware.Object.notfpqty[l]
  141. IF ld_notfpqty_mtrlware <= 0 THEN CONTINUE
  142. IF ld_notfpqty_task > ld_notfpqty_mtrlware THEN
  143. ld_fpqty_real = ld_notfpqty_mtrlware
  144. ld_notfpqty_task = ld_notfpqty_task - ld_notfpqty_mtrlware
  145. ELSE
  146. ld_fpqty_real = ld_notfpqty_task
  147. ld_notfpqty_task = 0
  148. END IF
  149. IF uo_mtrlware_fp.uof_assign_add(ll_scid,ll_mtrlwareid,1,ll_taskid,ll_printid,&
  150. ld_fpqty_real,0,'','','',0,ll_fpgrade,publ_operator,arg_msg,False) = 0 THEN
  151. arg_log += '分配失败,明细行:'+String(k)+','+arg_msg
  152. // f_task_writelog(ll_scid,ll_taskid,arg_log)
  153. END IF
  154. // arg_log = '分配成功'
  155. // f_task_writelog(ll_scid,ll_taskid,arg_log)
  156. NEXT
  157. NEXT
  158. COMMIT;
  159. arg_log += '分配完毕'
  160. f_task_writelog(ll_scid,ll_taskid,arg_log)
  161. NEXT
  162. ext:
  163. IF rslt = 0 THEN
  164. ROLLBACK;
  165. ELSE
  166. COMMIT;
  167. END IF
  168. Destroy uo_mtrlware_fp
  169. Destroy ds_fp_cancel
  170. Destroy ds_refp
  171. Destroy ds_refpmx
  172. Destroy ds_refpmx_mtrlware
  173. RETURN rslt
  174. end function