f_addmx_mtrl_change.srf 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. $PBExportHeader$f_addmx_mtrl_change.srf
  2. global type f_addmx_mtrl_change from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg)
  6. end prototypes
  7. global function integer f_addmx_mtrl_change (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_sqty, decimal arg_dqty, ref s_order_ml_mtrl_change_mx arg_s_mx[], ref string arg_msg);Long ll_pmtrlid,ll_ordertype,ll_porderid
  8. long ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid
  9. String ls_ordercode,ls_relcode, ls_taskrelcode
  10. Decimal ld_rqqty
  11. Long ll_mtrlorigin
  12. Int rslt = 1
  13. Long ll_row
  14. Long i = 1
  15. Long ll_porderid_arr[]
  16. String ls_ordercode_arr[],ls_relcode_arr[], ls_taskrelcode_arr[]
  17. Long ll_i
  18. Boolean lb_iffind = False
  19. Decimal ld_DstrQty
  20. uo_find_sc_wrkgrpid uo_fscwrkgrpid
  21. uo_fscwrkgrpid = Create uo_find_sc_wrkgrpid
  22. SELECT ordertype,mtrlid INTO :ll_ordertype,:ll_pmtrlid
  23. FROM u_order_ml
  24. WHERE orderid = :arg_orderid
  25. And scid = :arg_scid;
  26. IF sqlca.SQLCode <> 0 THEN
  27. rslt = 0
  28. ARG_MSG = '查询指令单相关信息失败'+"~n"+sqlca.SQLErrText
  29. GOTO ext
  30. END IF
  31. IF ll_ordertype <> 4 THEN //生产计划,明细插入自己本身
  32. uo_fscwrkgrpid.deep = 0
  33. uo_fscwrkgrpid.lb_find = false
  34. IF uo_fscwrkgrpid.uof_rst_top1_produce_wrkGrpid(arg_scid,arg_orderid,ll_pmtrlid,&
  35. arg_mtrlid,arg_wrkgrpid,arg_status,arg_woodcode,arg_pcode,&
  36. ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid,ARG_MSG) = 0 THEN
  37. rslt = 0
  38. GOTO ext
  39. END IF
  40. SELECT mtrlorigin INTO :ll_mtrlorigin
  41. FROM u_mtrldef
  42. Where mtrlid = :arg_mtrlid;
  43. IF sqlca.SQLCode <> 0 THEN
  44. rslt = 0
  45. ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText
  46. GOTO ext
  47. END IF
  48. IF ll_mtrlorigin = 6 THEN ll_mtrlorigin = 0
  49. IF ll_mtrlorigin <> 0 THEN ll_produce_wrkGrpid = 0 //yyx20101020
  50. // IF ll_mtrlorigin = 3 THEN ll_produce_wrkGrpid = 0 //yyx20100622
  51. SELECT rqqty,DstrQty INTO :ld_rqqty,:ld_DstrQty
  52. FROM u_orderrqmtrl
  53. WHERE scid = :arg_scid
  54. AND orderid = :arg_orderid
  55. AND mtrlid = :arg_mtrlid
  56. AND wrkgrpid = :arg_wrkgrpid
  57. AND status = :arg_status
  58. AND woodcode = :arg_woodcode
  59. AND pcode = :arg_pcode
  60. AND plantype = :ll_mtrlorigin
  61. And produce_wrkGrpid = :ll_produce_wrkGrpid;
  62. IF sqlca.SQLCode <> 0 THEN
  63. rslt = 0
  64. ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText
  65. GOTO ext
  66. END IF
  67. SELECT ordercode,relcode, taskrelcode
  68. INTO :ls_ordercode,:ls_relcode , :ls_taskrelcode
  69. FROM u_order_ml
  70. WHERE orderid = :arg_orderid
  71. And scid = :arg_scid;
  72. IF sqlca.SQLCode <> 0 THEN
  73. rslt = 0
  74. ARG_MSG = '查询主生产计划信息失败'+"~n"+sqlca.SQLErrText
  75. GOTO ext
  76. END IF
  77. ll_row++
  78. arg_s_mx[ll_row].printid = ll_row
  79. arg_s_mx[ll_row].orderid = arg_orderid
  80. arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty
  81. arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty
  82. ELSE //生产指令单,搜索明细表得出相关主生产计划
  83. DECLARE cur_mx CURSOR FOR
  84. SELECT u_order_ml_mx.taskid,
  85. u_order_ml_mx.taskcode,
  86. u_order_ml.relcode,
  87. u_order_ml.taskrelcode
  88. FROM u_order_ml_mx,
  89. u_order_ml
  90. WHERE ( u_order_ml_mx.scid = u_order_ml.scid ) AND
  91. ( u_order_ml_mx.taskid = u_order_ml.orderid ) AND
  92. ( u_order_ml_mx.orderid = :arg_orderid ) AND
  93. ( u_order_ml_mx.scid = :arg_scid ) ;
  94. OPEN cur_mx;
  95. FETCH cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i];
  96. DO WHILE sqlca.SQLCode = 0
  97. i++
  98. FETCH cur_mx Into :ll_porderid_arr[i],:ls_ordercode_arr[i],:ls_relcode_arr[i],:ls_taskrelcode_arr[i];
  99. LOOP
  100. CLOSE cur_mx;
  101. FOR ll_i = 1 To i - 1
  102. uo_fscwrkgrpid.deep = 0
  103. uo_fscwrkgrpid.lb_find = false
  104. IF uo_fscwrkgrpid.uof_rst_top1_produce_wrkGrpid(arg_scid,ll_porderid_arr[ll_i],ll_pmtrlid,&
  105. arg_mtrlid,arg_wrkgrpid,arg_status,arg_woodcode,arg_pcode,&
  106. ll_lp,ll_printid,ll_produce_scid,ll_produce_wrkGrpid,ARG_MSG) = 0 THEN
  107. rslt = 0
  108. GOTO ext
  109. END IF
  110. SELECT mtrlorigin INTO :ll_mtrlorigin
  111. FROM u_mtrldef
  112. Where mtrlid = :arg_mtrlid;
  113. IF sqlca.SQLCode <> 0 THEN
  114. rslt = 0
  115. ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText
  116. GOTO ext
  117. END IF
  118. IF ll_mtrlorigin = 6 THEN ll_mtrlorigin = 0
  119. IF ll_mtrlorigin <> 0 THEN ll_produce_wrkGrpid = 0
  120. SELECT rqqty,DstrQty INTO :ld_rqqty,:ld_DstrQty
  121. FROM u_orderrqmtrl
  122. WHERE scid = :arg_scid
  123. AND orderid = :ll_porderid_arr[ll_i]
  124. AND mtrlid = :arg_mtrlid
  125. AND wrkgrpid = :arg_wrkgrpid
  126. AND status = :arg_status
  127. AND woodcode = :arg_woodcode
  128. AND pcode = :arg_pcode
  129. AND plantype = :ll_mtrlorigin
  130. And produce_wrkGrpid = :ll_produce_wrkGrpid;
  131. IF sqlca.SQLCode <> 0 THEN
  132. rslt = 0
  133. ARG_MSG = '查询原需求物料来源失败'+"~n"+sqlca.SQLErrText
  134. GOTO ext
  135. END IF
  136. ll_row++
  137. arg_s_mx[ll_row].printid = ll_row
  138. arg_s_mx[ll_row].orderid = ll_porderid_arr[ll_i]
  139. arg_s_mx[ll_row].rqqty_ori = ld_rqqty - ld_DstrQty
  140. arg_s_mx[ll_row].rateqty = ld_rqqty - ld_DstrQty
  141. NEXT
  142. END IF
  143. Decimal ld_sumqty
  144. ld_sumqty = 0
  145. FOR ll_i = 1 To ll_row
  146. ld_sumqty = ld_sumqty + arg_s_mx[ll_i].rateqty
  147. NEXT
  148. FOR ll_i = 1 To ll_row
  149. IF ld_sumqty > 0 THEN
  150. arg_s_mx[ll_i].rqqty_ori = arg_sqty / ld_sumqty * arg_s_mx[ll_i].rateqty
  151. arg_s_mx[ll_i].rqqty = arg_dqty / ld_sumqty * arg_s_mx[ll_i].rateqty
  152. ELSE
  153. arg_s_mx[ll_i].rqqty_ori = arg_sqty / ll_row
  154. arg_s_mx[ll_i].rqqty = arg_dqty / ll_row
  155. END IF
  156. NEXT
  157. ext:
  158. Destroy uo_fscwrkgrpid
  159. RETURN rslt
  160. end function