uo_pf_cmpl.sru 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. $PBExportHeader$uo_pf_cmpl.sru
  2. forward
  3. global type uo_pf_cmpl from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_pf_cmpl from nonvisualobject
  7. end type
  8. global uo_pf_cmpl uo_pf_cmpl
  9. forward prototypes
  10. public function integer uof_cmpl_scll (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref s_pf_cmpl arg_pf, ref string arg_msg)
  11. end prototypes
  12. public function integer uof_cmpl_scll (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref s_pf_cmpl arg_pf, ref string arg_msg);Int rslt = 1
  13. Long arr,ll_j,l_arr
  14. s_pf_cmpl l_s_pf
  15. Decimal ld_Sonscale
  16. Decimal ld_SonLoss
  17. Decimal ld_SonDECLosS
  18. Long ll_SonMtrlid
  19. String ls_sonpfcode
  20. String ls_status
  21. String ls_woodcode
  22. String ls_pcode
  23. Int li_ifselforder,li_mtrlorigin
  24. Int li_mrptype,li_mrparg
  25. arr = UpperBound(arg_pf.sonmtrlid)
  26. DECLARE pf_cur CURSOR FOR
  27. SELECT u_PrdPF.Sonscale,
  28. u_PrdPF.SonLoss,
  29. u_PrdPF.SonDECLosS,
  30. u_PrdPF.SonMtrlid,
  31. u_PrdPF.sonpfcode,
  32. u_PrdPF.status,
  33. u_PrdPF.woodcode,
  34. u_PrdPF.pcode,
  35. u_mtrldef.ifselforder,
  36. u_mtrldef.mtrlorigin,
  37. u_mtrldef.mrptype,
  38. u_mtrldef.mrparg
  39. FROM u_PrdPF,u_mtrldef
  40. WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid )
  41. AND ( u_PrdPF.pfcode = :arg_pfcode )
  42. And ( u_PrdPF.mtrlid = :arg_mtrlid );
  43. OPEN pf_cur;
  44. FETCH pf_cur INTO :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,
  45. :ll_SonMtrlid,:ls_sonpfcode,:ls_status,:ls_woodcode,
  46. :ls_pcode,:li_ifselforder,:li_mtrlorigin,:li_mrptype,:li_mrparg;
  47. DO WHILE sqlca.SQLCode = 0
  48. //
  49. l_arr++
  50. IF ld_SonLoss = 1 THEN
  51. l_s_pf.scllqty[l_arr] = 0
  52. ELSE
  53. IF li_mrptype = 0 THEN
  54. l_s_pf.scllqty[l_arr] = Round(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,li_mrparg)
  55. ELSE
  56. l_s_pf.scllqty[l_arr] = Ceiling(Truncate(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,10))
  57. END IF
  58. l_s_pf.sonmtrlid[l_arr] = ll_SonMtrlid
  59. l_s_pf.sonpfcode[l_arr] = ls_sonpfcode
  60. l_s_pf.ifselforder[l_arr] = li_ifselforder
  61. l_s_pf.mtrlorigin[l_arr] = li_mtrlorigin
  62. END IF
  63. //总
  64. arr++
  65. IF ld_SonLoss = 1 THEN
  66. arg_pf.scllqty[arr] = 0
  67. ELSE
  68. IF li_mrptype = 0 THEN
  69. arg_pf.scllqty[arr] = Round(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,li_mrparg)
  70. ELSE
  71. arg_pf.scllqty[arr] = Ceiling(Truncate(arg_qty * ld_Sonscale/(1 - ld_SonLoss) + ld_SonDECLosS,10))
  72. END IF
  73. arg_pf.sonmtrlid[arr] = ll_SonMtrlid
  74. arg_pf.sonpfcode[arr] = ls_sonpfcode
  75. arg_pf.ifselforder[arr] = li_ifselforder
  76. arg_pf.mtrlorigin[arr] = li_mtrlorigin
  77. arg_pf.status[arr] = ls_status
  78. arg_pf.woodcode[arr] = ls_woodcode
  79. arg_pf.pcode[arr] = ls_pcode
  80. END IF
  81. FETCH pf_cur INTO :ld_Sonscale,:ld_SonLoss,:ld_SonDECLosS,
  82. :ll_SonMtrlid,:ls_sonpfcode,:ls_status,:ls_woodcode,
  83. :ls_pcode,:li_ifselforder,:li_mtrlorigin,:li_mrptype,:li_mrparg;
  84. LOOP
  85. CLOSE pf_cur;
  86. IF arr = 0 THEN
  87. rslt = 0
  88. arg_msg = '物料没有清单内容'
  89. GOTO ext
  90. END IF
  91. FOR ll_j = 1 To l_arr
  92. IF l_s_pf.mtrlorigin[ll_j] = 0 And &
  93. l_s_pf.ifselforder[ll_j] = 0 THEN
  94. IF uof_cmpl_scll(l_s_pf.sonmtrlid[ll_j],l_s_pf.sonpfcode[ll_j],l_s_pf.scllqty[ll_j],arg_pf,arg_msg) = 0 THEN
  95. rslt = 0
  96. GOTO ext
  97. END IF
  98. END IF
  99. NEXT
  100. ext:
  101. RETURN rslt
  102. end function
  103. on uo_pf_cmpl.create
  104. call super::create
  105. TriggerEvent( this, "constructor" )
  106. end on
  107. on uo_pf_cmpl.destroy
  108. TriggerEvent( this, "destructor" )
  109. call super::destroy
  110. end on