uo_cp_auto_scll.sru 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. $PBExportHeader$uo_cp_auto_scll.sru
  2. forward
  3. global type uo_cp_auto_scll from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_cp_auto_scll from nonvisualobject
  7. end type
  8. global uo_cp_auto_scll uo_cp_auto_scll
  9. forward prototypes
  10. public function integer uof_cp_scll (long arg_scid, long arg_orderid, long arg_mtrlid, decimal arg_qty, ref s_cp_scll arg_s_cp_scll[], ref long arg_itmxt, ref string arg_msg)
  11. end prototypes
  12. public function integer uof_cp_scll (long arg_scid, long arg_orderid, long arg_mtrlid, decimal arg_qty, ref s_cp_scll arg_s_cp_scll[], ref long arg_itmxt, ref string arg_msg);Int rslt = 1
  13. Long count
  14. Long ll_mtrlid,ll_wrkGrpid
  15. Decimal ld_orderqty,ld_trueRqqty,ld_scllqty,ld_dstrqty
  16. String ls_status,ls_woodcode,ls_pcode
  17. String ls_mtrlcode
  18. Decimal ld_Sonscale,ld_SonLoss,ld_SonDECLosS
  19. Int li_mtrlkind
  20. IF arg_orderid = 0 THEN
  21. count = 0
  22. DECLARE pf_scll CURSOR FOR
  23. SELECT u_PrdPF.sonMtrlID,
  24. u_PrdPF.wrkGrpid,
  25. u_PrdPF.Sonscale,
  26. u_PrdPF.SonLoss,
  27. u_PrdPF.SonDECLosS,
  28. u_PrdPF.status,
  29. u_PrdPF.woodcode,
  30. u_PrdPF.pcode,
  31. u_mtrldef.mtrlcode
  32. FROM u_PrdPF,u_mtrldef,u_mtrl_pf
  33. WHERE ( u_mtrl_pf.mtrlid = :arg_mtrlid ) AND
  34. ( u_mtrl_pf.ifdft = 1 ) AND
  35. ( u_mtrl_pf.mtrlid = u_PrdPF.mtrlid ) AND
  36. ( u_mtrl_pf.pfcode = u_PrdPF.pfcode ) AND
  37. ( u_PrdPF.sonMtrlID = u_mtrldef.mtrlid );
  38. OPEN pf_scll;
  39. FETCH pf_scll INTO :ll_mtrlid,:ll_wrkGrpid,&
  40. :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,&
  41. :ls_status,:ls_woodcode,:ls_pcode,&
  42. :ls_mtrlcode;
  43. DO WHILE sqlca.SQLCode = 0
  44. count++
  45. IF ld_SonLoss = 1 THEN
  46. ld_scllqty = 0
  47. ELSE
  48. ld_scllqty = arg_qty * (ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS)
  49. END IF
  50. arg_s_cp_scll[count].scid = arg_scid
  51. arg_s_cp_scll[count].orderid = arg_orderid
  52. arg_s_cp_scll[count].mtrlid = ll_mtrlid
  53. arg_s_cp_scll[count].wrkGrpid = ll_wrkGrpid
  54. arg_s_cp_scll[count].status = ls_status
  55. arg_s_cp_scll[count].woodcode = ls_woodcode
  56. arg_s_cp_scll[count].pcode = ls_pcode
  57. arg_s_cp_scll[count].mtrlcode = ls_mtrlcode
  58. arg_s_cp_scll[count].qty = ld_scllqty
  59. arg_s_cp_scll[count].noallocqty = ld_scllqty
  60. arg_s_cp_scll[count].allocqty = 0
  61. FETCH pf_scll INTO :ll_mtrlid,:ll_wrkGrpid,&
  62. :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,&
  63. :ls_status,:ls_woodcode,:ls_pcode,&
  64. :ls_mtrlcode;
  65. LOOP
  66. CLOSE pf_scll;
  67. ELSE
  68. count = 0
  69. SELECT orderqty INTO :ld_orderqty
  70. FROM u_order_ml
  71. WHERE orderid = :arg_orderid
  72. AND scid = :arg_scid;
  73. IF sqlca.SQLCode <> 0 THEN
  74. arg_msg = '查询生产指令单生产数量失败,'+sqlca.SQLErrText
  75. rslt = 0
  76. GOTO ext
  77. END IF
  78. DECLARE ml_scll CURSOR FOR
  79. SELECT u_OrderRqMtrl_scll.MtrlID,
  80. u_OrderRqMtrl_scll.wrkGrpid,
  81. u_OrderRqMtrl_scll.trueRqqty,
  82. u_orderrqmtrl_scll.dstrqty,
  83. u_OrderRqMtrl_scll.status,
  84. u_OrderRqMtrl_scll.woodcode,
  85. u_OrderRqMtrl_scll.pcode,
  86. u_mtrldef.mtrlcode,
  87. u_mtrldef.mtrlkind
  88. FROM u_OrderRqMtrl_scll,u_mtrldef
  89. WHERE ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND
  90. ( u_OrderRqMtrl_scll.orderid = :arg_orderid ) AND
  91. ( u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid );
  92. OPEN ml_scll;
  93. FETCH ml_scll INTO :ll_mtrlid,:ll_wrkGrpid,&
  94. :ld_trueRqqty,:ld_dstrqty,:ls_status,:ls_woodcode,:ls_pcode,&
  95. :ls_mtrlcode,:li_mtrlkind;
  96. DO WHILE sqlca.SQLCode = 0
  97. count++
  98. ld_scllqty = ld_trueRqqty * arg_qty/ld_orderqty
  99. arg_s_cp_scll[count].scid = arg_scid
  100. arg_s_cp_scll[count].orderid = arg_orderid
  101. arg_s_cp_scll[count].mtrlid = ll_mtrlid
  102. arg_s_cp_scll[count].wrkGrpid = ll_wrkGrpid
  103. arg_s_cp_scll[count].status = ls_status
  104. arg_s_cp_scll[count].woodcode = ls_woodcode
  105. arg_s_cp_scll[count].pcode = ls_pcode
  106. arg_s_cp_scll[count].mtrlcode = ls_mtrlcode
  107. arg_s_cp_scll[count].qty = ld_scllqty
  108. IF li_mtrlkind = 0 THEN
  109. arg_s_cp_scll[count].noallocqty = 0
  110. arg_s_cp_scll[count].allocqty = ld_scllqty
  111. ELSEIF li_mtrlkind = 1 THEN
  112. arg_s_cp_scll[count].noallocqty = ld_scllqty
  113. arg_s_cp_scll[count].allocqty = 0
  114. ELSE
  115. IF ld_dstrqty > 0 THEN
  116. IF ld_dstrqty >= ld_scllqty THEN
  117. arg_s_cp_scll[count].noallocqty = 0
  118. arg_s_cp_scll[count].allocqty = ld_scllqty
  119. ELSE
  120. arg_s_cp_scll[count].noallocqty = 0
  121. arg_s_cp_scll[count].allocqty = ld_dstrqty
  122. END IF
  123. ELSE
  124. arg_s_cp_scll[count].noallocqty = ld_scllqty
  125. arg_s_cp_scll[count].allocqty = 0
  126. END IF
  127. END IF
  128. FETCH ml_scll INTO :ll_mtrlid,:ll_wrkGrpid,&
  129. :ld_trueRqqty,:ld_dstrqty,:ls_status,:ls_woodcode,:ls_pcode,&
  130. :ls_mtrlcode,:li_mtrlkind;
  131. LOOP
  132. CLOSE ml_scll;
  133. END IF
  134. arg_itmxt = count
  135. ext:
  136. RETURN rslt
  137. end function
  138. on uo_cp_auto_scll.create
  139. call super::create
  140. TriggerEvent( this, "constructor" )
  141. end on
  142. on uo_cp_auto_scll.destroy
  143. TriggerEvent( this, "destructor" )
  144. call super::destroy
  145. end on