f_ref_saletask_notfpqty.srf 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. $PBExportHeader$f_ref_saletask_notfpqty.srf
  2. global type f_ref_saletask_notfpqty from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_ref_saletask_notfpqty (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, ref decimal arg_ref_notfpqty, ref string arg_msg)
  6. end prototypes
  7. global function integer f_ref_saletask_notfpqty (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, ref decimal arg_ref_notfpqty, ref string arg_msg);Int rslt = 1
  8. Int li_ifpackpro
  9. String ls_status_saletask,ls_woodcode_saletask,ls_pcode_saletask
  10. Long ll_saletaskmx_pf_ch
  11. Decimal ld_Sonscale,ld_Sonscale_fm
  12. Decimal ld_saleqty,ld_fpqty,ld_not_fpqty
  13. SELECT u_saletaskmx.saleqty - u_saletaskmx.stopqty,
  14. u_mtrldef.ifpackpro,
  15. u_saletaskmx.status,
  16. u_saletaskmx.woodcode,
  17. u_saletaskmx.pcode
  18. INTO :ld_saleqty,
  19. :li_ifpackpro,
  20. :ls_status_saletask,
  21. :ls_woodcode_saletask,
  22. :ls_pcode_saletask
  23. FROM u_saletaskmx,u_mtrldef
  24. WHERE u_saletaskmx.scid = :arg_scid
  25. AND u_saletaskmx.taskid = :arg_taskid
  26. AND u_saletaskmx.printid = :arg_printid
  27. And u_saletaskmx.mtrlid = u_mtrldef.mtrlid;
  28. IF sqlca.SQLCode <> 0 THEN
  29. arg_msg = '查询销售订单明细订货数失败,'+sqlca.SQLErrText
  30. rslt = 0
  31. GOTO ext
  32. END IF
  33. IF li_ifpackpro = 0 Or li_ifpackpro = 1 Or li_ifpackpro = 2 THEN
  34. IF li_ifpackpro = 0 THEN
  35. ld_Sonscale = 1
  36. ld_Sonscale_fm = 1
  37. ELSE
  38. ll_saletaskmx_pf_ch = 0
  39. IF li_ifpackpro = 1 THEN
  40. ll_saletaskmx_pf_ch = 0
  41. ELSE
  42. SELECT count(*)
  43. INTO :ll_saletaskmx_pf_ch
  44. FROM u_SaleTaskMx_pf
  45. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  46. AND u_SaleTaskMx_pf.taskid = :arg_taskid
  47. And u_SaleTaskMx_pf.printid = :arg_printid;
  48. IF sqlca.SQLCode <> 0 THEN
  49. arg_msg = '订单明细物料查询是否有换包件失败,'+sqlca.SQLErrText
  50. rslt = 0
  51. GOTO ext
  52. END IF
  53. END IF
  54. IF ll_saletaskmx_pf_ch > 0 THEN
  55. SELECT u_SaleTaskMx_pf.Sonscale,
  56. u_SaleTaskMx_pf.Sonscale_fm
  57. INTO :ld_Sonscale,:ld_Sonscale_fm
  58. FROM u_SaleTaskMx_pf
  59. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  60. AND u_SaleTaskMx_pf.taskid = :arg_taskid
  61. AND u_SaleTaskMx_pf.printid = :arg_printid
  62. And u_SaleTaskMx_pf.sonmtrlid = :arg_mtrlid;
  63. IF sqlca.SQLCode = -1 THEN
  64. arg_msg = '订单明细包件物料查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+sqlca.SQLErrText
  65. rslt = 0
  66. GOTO ext
  67. ELSEIF sqlca.SQLCode = 100 THEN
  68. arg_msg = '订单明细包件物料当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  69. rslt = 0
  70. GOTO ext
  71. END IF
  72. ELSE
  73. SELECT u_prdpf.Sonscale,1
  74. INTO :ld_Sonscale,:ld_Sonscale_fm
  75. FROM u_saletaskmx,u_mtrl_pf,u_prdpf,u_mtrldef
  76. WHERE u_saletaskmx.mtrlid = u_mtrl_pf.mtrlid
  77. AND u_saletaskmx.scid = :arg_scid
  78. AND u_saletaskmx.taskid = :arg_taskid
  79. AND u_saletaskmx.printid = :arg_printid
  80. AND u_mtrl_pf.mtrlid = u_prdpf.mtrlid
  81. AND u_mtrl_pf.pfcode = u_prdpf.pfcode
  82. AND ( u_mtrl_pf.ifdi = 0 AND u_mtrl_pf.ifdft = 1 )
  83. AND u_PrdPF.SonMtrlid = :arg_mtrlid
  84. AND u_prdpf.sonmtrlid = u_mtrldef.mtrlid
  85. And u_mtrldef.ifpack > 0;
  86. IF sqlca.SQLCode = -1 THEN
  87. arg_msg = '订单明细包件物料查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+sqlca.SQLErrText
  88. rslt = 0
  89. GOTO ext
  90. ELSEIF sqlca.SQLCode = 100 THEN
  91. arg_msg = '订单明细包件物料当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  92. rslt = 0
  93. GOTO ext
  94. END IF
  95. END IF
  96. END IF
  97. IF ld_Sonscale = 0 THEN
  98. arg_msg = '错误的包件组成数,操作取消'
  99. rslt = 0
  100. GOTO ext
  101. END IF
  102. ld_saleqty = ld_saleqty * ld_Sonscale/ld_Sonscale_fm
  103. SELECT isnull(sum(assignqty),0)
  104. INTO :ld_fpqty
  105. FROM u_mtrlware_assign
  106. WHERE u_mtrlware_assign.scid = :arg_scid
  107. AND u_mtrlware_assign.relbillid = :arg_taskid
  108. AND u_mtrlware_assign.relprintid = :arg_printid
  109. AND u_mtrlware_assign.mtrlid = :arg_mtrlid
  110. And u_mtrlware_assign.assigntype = 1;
  111. IF sqlca.SQLCode <> 0 THEN
  112. arg_msg = '查询销售订单明细已分配数失败,'+sqlca.SQLErrText
  113. rslt = 0
  114. GOTO ext
  115. END IF
  116. ld_not_fpqty = ld_saleqty - ld_fpqty
  117. ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN
  118. s_mtrlcfg_expr s_pz[]
  119. Long ll_array,ll_l
  120. Decimal ld_pf_Sonscale[]
  121. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  122. f_checkpz(ls_status_saletask,s_pz[])
  123. ll_array = UpperBound(s_pz)
  124. IF ll_array = 0 THEN
  125. arg_msg = '订单拆分子件错误,请检查组合配置'
  126. rslt = 0
  127. GOTO ext
  128. END IF
  129. FOR ll_l = 1 To ll_array
  130. IF s_pz[ll_l].cfgname = arg_status THEN
  131. ld_Sonscale = Dec(s_pz[ll_l].qty)
  132. EXIT
  133. END IF
  134. NEXT
  135. IF ld_Sonscale = 0 THEN
  136. arg_msg = '错误的子件组成数,操作取消'
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. ld_saleqty = ld_saleqty * ld_Sonscale
  141. SELECT isnull(sum(assignqty),0)
  142. INTO :ld_fpqty
  143. FROM u_mtrlware_assign,u_mtrlware
  144. WHERE u_mtrlware_assign.scid = u_mtrlware.scid
  145. AND u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid
  146. AND u_mtrlware_assign.scid = :arg_scid
  147. AND u_mtrlware_assign.relbillid = :arg_taskid
  148. AND u_mtrlware_assign.relprintid = :arg_printid
  149. AND u_mtrlware_assign.mtrlid = :arg_mtrlid
  150. AND u_mtrlware.status = :arg_status
  151. AND u_mtrlware.woodcode = :ls_woodcode_saletask
  152. AND u_mtrlware.pcode = :ls_pcode_saletask
  153. And u_mtrlware_assign.assigntype = 1;
  154. IF sqlca.SQLCode <> 0 THEN
  155. arg_msg = '查询销售订单明细已分配数失败,'+sqlca.SQLErrText
  156. rslt = 0
  157. GOTO ext
  158. END IF
  159. ld_not_fpqty = ld_saleqty - ld_fpqty
  160. END IF
  161. arg_ref_notfpqty = ld_not_fpqty
  162. ext:
  163. RETURN rslt
  164. end function