f_get_defsaleprice.srf 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. $PBExportHeader$f_get_defsaleprice.srf
  2. global type f_get_defsaleprice from function_object
  3. end type
  4. forward prototypes
  5. global subroutine f_get_defsaleprice (long arg_cusid, long arg_mtrlid, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, ref decimal arg_def_dftsaleprice)
  6. end prototypes
  7. global subroutine f_get_defsaleprice (long arg_cusid, long arg_mtrlid, string arg_status, string arg_pcode, string arg_woodcode, long arg_moneyid, ref decimal arg_def_dftsaleprice);Int rslt = 1
  8. Int li_mtrlorigin,li_price_ifpz
  9. String ls_status,ls_pcode,ls_woodcode
  10. Long ll_pricelistid,li_flag
  11. Long ll_moneyid
  12. s_mtrlcfg_expr s_pz[]
  13. Long ll_statusflag
  14. Decimal obj_price
  15. Long ll_i
  16. String ls_status_zj
  17. Decimal ld_price_zj,ld_rebate_zj
  18. SELECT statusflag,mtrlorigin,price_ifpz
  19. INTO :ll_statusflag,:li_mtrlorigin,:li_price_ifpz
  20. FROM u_mtrldef
  21. Where mtrlid = :arg_mtrlid;
  22. IF sqlca.SQLCode <> 0 THEN
  23. rslt = 0
  24. GOTO ext
  25. END IF
  26. IF sys_option_checkprice_native = 1 THEN
  27. SELECT moneyid INTO :ll_moneyid
  28. FROM cw_currency
  29. Where native = 1;
  30. IF sqlca.SQLCode <> 0 THEN
  31. rslt = 0
  32. GOTO ext
  33. END IF
  34. ELSE
  35. ll_moneyid = arg_moneyid
  36. END IF
  37. IF ll_statusflag = 2 And arg_status <> '' THEN
  38. SELECT pricelistid INTO :ll_pricelistid
  39. FROM u_cust
  40. Where cusid = :arg_cusid;
  41. IF sqlca.SQLCode <> 0 THEN
  42. rslt = 0
  43. GOTO ext
  44. END IF
  45. f_checkpz(arg_status,s_pz[])
  46. //改写
  47. // IF sys_option_price_if_pz = 0 THEN
  48. // ls_pcode = ''
  49. // ls_woodcode = ''
  50. // ELSE
  51. // ls_pcode = arg_pcode
  52. // ls_woodcode = arg_woodcode
  53. // END IF
  54. CHOOSE CASE li_price_ifpz
  55. CASE 0,1,4,6,7
  56. ls_woodcode = ''
  57. ls_pcode = ''
  58. CASE 2
  59. ls_woodcode = arg_woodcode
  60. ls_pcode = ''
  61. CASE 3
  62. ls_woodcode = ''
  63. ls_pcode = arg_pcode
  64. CASE 5
  65. ls_woodcode = arg_woodcode
  66. ls_pcode = arg_pcode
  67. END CHOOSE
  68. obj_price = 0
  69. FOR ll_i = 1 To UpperBound(s_pz)
  70. ls_status_zj = s_pz[ll_i].cfgname
  71. ld_price_zj = 0
  72. ld_rebate_zj = 0
  73. IF ll_pricelistid = 0 THEN
  74. SELECT u_sale_price_list.pricelistid INTO :ll_pricelistid
  75. FROM u_sale_price_list,u_sale_price_mx
  76. WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid
  77. AND u_sale_price_mx.mtrlid = :arg_mtrlid
  78. AND u_sale_price_mx.status = :ls_status_zj
  79. AND u_sale_price_mx.pcode = :ls_pcode
  80. AND u_sale_price_mx.woodcode = :ls_woodcode
  81. AND u_sale_price_list.dftflag = 1
  82. AND u_sale_price_mx.flag = 1
  83. And u_sale_price_list.moneyid = :ll_moneyid;
  84. IF sqlca.SQLCode <> 0 THEN
  85. rslt = 0
  86. GOTO ext
  87. END IF
  88. END IF
  89. SELECT u_sale_price_mx.price,u_sale_price_mx.rebate
  90. INTO :ld_price_zj,:ld_rebate_zj
  91. FROM u_sale_price_mx,u_sale_price_list
  92. WHERE ( u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid) AND
  93. (u_sale_price_mx.pricelistid = :ll_pricelistid) AND
  94. ( u_sale_price_mx.mtrlid = :arg_mtrlid ) AND
  95. ( u_sale_price_mx.status = :ls_status_zj ) AND
  96. ( u_sale_price_mx.pcode = :ls_pcode ) AND
  97. ( u_sale_price_mx.woodcode = :ls_woodcode ) AND
  98. ( u_sale_price_mx.flag = 1 );
  99. IF sqlca.SQLCode <> 0 THEN
  100. rslt = 0
  101. GOTO ext
  102. ELSE
  103. obj_price = obj_price + ld_price_zj * ld_rebate_zj * Dec(s_pz[ll_i].qty)
  104. END IF
  105. NEXT
  106. arg_def_dftsaleprice = obj_price
  107. ELSE
  108. //改写
  109. // IF sys_option_price_if_status = 0 THEN
  110. // ls_status = ''
  111. // ls_pcode = ''
  112. // ls_woodcode = ''
  113. // ELSE
  114. // ls_status = arg_status
  115. // ls_pcode = arg_pcode
  116. // ls_woodcode = arg_woodcode
  117. // END IF
  118. CHOOSE CASE li_price_ifpz
  119. CASE 0
  120. ls_status = ''
  121. ls_woodcode = ''
  122. ls_pcode = ''
  123. case 1
  124. ls_status = arg_status
  125. ls_woodcode = ''
  126. ls_pcode = ''
  127. CASE 2
  128. ls_status = ''
  129. ls_woodcode = arg_woodcode
  130. ls_pcode = ''
  131. CASE 3
  132. ls_status = ''
  133. ls_woodcode = ''
  134. ls_pcode = arg_pcode
  135. case 4
  136. ls_status = arg_status
  137. ls_woodcode = arg_woodcode
  138. ls_pcode = ''
  139. CASE 5
  140. ls_status = ''
  141. ls_woodcode = arg_woodcode
  142. ls_pcode = arg_pcode
  143. case 6
  144. ls_status = arg_status
  145. ls_woodcode = ''
  146. ls_pcode = arg_pcode
  147. case 7
  148. ls_status = arg_status
  149. ls_woodcode = arg_woodcode
  150. ls_pcode = arg_pcode
  151. END CHOOSE
  152. SELECT pricelistid INTO :ll_pricelistid
  153. FROM u_cust
  154. Where cusid = :arg_cusid;
  155. IF sqlca.SQLCode <> 0 THEN
  156. rslt = 0
  157. GOTO ext
  158. END IF
  159. IF ll_pricelistid = 0 THEN
  160. SELECT u_sale_price_list.pricelistid INTO :ll_pricelistid
  161. FROM u_sale_price_list,u_sale_price_mx
  162. WHERE u_sale_price_mx.pricelistid = u_sale_price_list.pricelistid
  163. AND u_sale_price_mx.mtrlid = :arg_mtrlid
  164. AND u_sale_price_mx.status = :ls_status
  165. AND u_sale_price_mx.pcode = :ls_pcode
  166. AND u_sale_price_mx.woodcode = :ls_woodcode
  167. AND u_sale_price_list.dftflag = 1
  168. AND u_sale_price_mx.flag = 1
  169. And u_sale_price_list.moneyid = :ll_moneyid;
  170. IF sqlca.SQLCode <> 0 THEN
  171. rslt = 0
  172. GOTO ext
  173. END IF
  174. END IF
  175. SELECT u_sale_price_mx.price,u_sale_price_mx.flag
  176. INTO :arg_def_dftsaleprice,:li_flag
  177. FROM u_sale_price_mx
  178. WHERE u_sale_price_mx.mtrlid = :arg_mtrlid
  179. AND u_sale_price_mx.status = :ls_status
  180. AND u_sale_price_mx.pcode = :ls_pcode
  181. AND u_sale_price_mx.woodcode = :ls_woodcode
  182. AND u_sale_price_mx.flag = 1
  183. And u_sale_price_mx.pricelistid = :ll_pricelistid;
  184. IF sqlca.SQLCode <> 0 THEN
  185. rslt = 0
  186. GOTO ext
  187. END IF
  188. IF li_flag = 0 THEN
  189. rslt = 0
  190. GOTO ext
  191. END IF
  192. END IF
  193. ext:
  194. IF rslt = 0 THEN
  195. arg_def_dftsaleprice = 0
  196. END IF
  197. //如果是采购类产品查不到订单,则查最新购价作定价
  198. IF li_mtrlorigin = 2 And arg_def_dftsaleprice = 0 And sys_option_saletask_dftsaleprice_get1buyprice = 1 THEN
  199. SELECT v_maxprice_sptprice.price INTO :arg_def_dftsaleprice
  200. From v_maxprice_sptprice Where mtrlid = :arg_mtrlid;
  201. IF sqlca.SQLCode <> 0 THEN
  202. arg_def_dftsaleprice = 0
  203. END IF
  204. END IF
  205. end subroutine