uo_cmplcost.sru 45 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526
  1. $PBExportHeader$uo_cmplcost.sru
  2. forward
  3. global type uo_cmplcost from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_cmplcost from nonvisualobject
  7. end type
  8. global uo_cmplcost uo_cmplcost
  9. type variables
  10. Long deep = 0
  11. Boolean ifcmpl_1 = False
  12. Int uo_option_produce_dec,uo_option_cost_notax
  13. Int uo_option_pfmrp_ifuse_mtrlmrparg
  14. long ins_cnt = 0
  15. long ins_cl_errcnt = 0,ins_wf_errcnt = 0,ins_rl_errcnt = 0
  16. end variables
  17. forward prototypes
  18. public function integer uof_get_f_price (long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, ref decimal arg_f_price, ref string arg_msg)
  19. public function integer uof_get_wageprice (long arg_mtrlid, string arg_mtrlcode, string arg_status, decimal arg_qty, ref decimal arg_wageprice, ref string arg_msg)
  20. public function integer uof_get_equipprice (long arg_mtrlid, string arg_mtrlcode, string arg_status, decimal arg_qty, ref decimal arg_eqprice, ref string arg_msg)
  21. public function integer uof_get_cost_dz (integer arg_pricetype, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_mprice, ref decimal arg_outcost, ref decimal arg_wageprice, ref decimal arg_eqprice, ref string arg_msg, ref s_mtrlprice_mx arg_s_mx[])
  22. public function integer uof_get_cost (integer arg_pricetype, long arg_scid, long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, decimal arg_qty, long arg_lp, ref decimal arg_price, ref decimal arg_mprice, ref decimal arg_outcost, ref decimal arg_wageprice, ref decimal arg_eqprice, integer arg_ifcfg, ref string arg_msg, ref s_mtrlprice_mx arg_s_mx[], integer arg_protype)
  23. public function integer uof_add_mtrlprice_mx (long arg_sumdate, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_pfcode, s_mtrlprice_mx arg_s_mx[], ref string arg_msg)
  24. public function integer uof_cmpl_mtrlcost (long ll_mtrlid, string ls_pfcode, string ls_status, string ls_woodcode, string ls_pcode, long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string arg_msg)
  25. end prototypes
  26. public function integer uof_get_f_price (long arg_mtrlid, string arg_mtrlcode, decimal arg_qty, ref decimal arg_f_price, ref string arg_msg);Int rslt = 1
  27. Decimal ld_f_rice
  28. SELECT isnull(sum(u_mtrl_cost.cost),0) INTO :ld_f_rice
  29. FROM u_mtrl_cost
  30. Where u_mtrl_cost.mtrlid = :arg_mtrlid;
  31. IF sqlca.SQLCode = -1 THEN
  32. arg_msg = '查询:'+arg_mtrlcode+'分摊费用成本失败,'+sqlca.sqlerrtext
  33. rslt = 0
  34. GOTO ext
  35. END IF
  36. IF IsNull(arg_f_price) THEN arg_f_price = 0
  37. arg_f_price = ld_f_rice * arg_qty
  38. ext:
  39. RETURN rslt
  40. end function
  41. public function integer uof_get_wageprice (long arg_mtrlid, string arg_mtrlcode, string arg_status, decimal arg_qty, ref decimal arg_wageprice, ref string arg_msg);Int rslt = 1
  42. Decimal ld_wageprice
  43. Int li_statusflag
  44. Long ll_dftwrkgrpid
  45. String ls_wpcode
  46. Long ll_rl_errcnt = 0
  47. Select statusflag,dftwrkgrpid Into :li_statusflag,:ll_dftwrkgrpid
  48. From u_mtrldef
  49. Where mtrlid = :arg_mtrlid;
  50. If sqlca.SQLCode <> 0 Then
  51. MessageBox('Error','查询物料是否使用组合配置及默认生产车间失败,'+sqlca.SQLErrText)
  52. Return 0
  53. End If
  54. Select wpcode Into :ls_wpcode
  55. From u_mtrl_workprice
  56. Where mtrlid = :arg_mtrlid
  57. And ifdft = 1;
  58. If sqlca.SQLCode = 100 Then
  59. Select top 1 wpcode Into :ls_wpcode
  60. From u_mtrl_workprice
  61. Where mtrlid = :arg_mtrlid
  62. And wrkid = :ll_dftwrkgrpid;
  63. If sqlca.SQLCode = -1 Then
  64. arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
  65. rslt = 0
  66. Goto ext
  67. End If
  68. ElseIf sqlca.SQLCode = -1 Then
  69. arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
  70. rslt = 0
  71. Goto ext
  72. End If
  73. If li_statusflag <> 2 Then arg_status = ''
  74. Select sum(u_sc_workprice.workprice * u_sc_workprice.workqty) Into :ld_wageprice
  75. From u_sc_workprice
  76. Where u_sc_workprice.ifownpro = 0
  77. And u_sc_workprice.mtrlid = :arg_mtrlid
  78. And u_sc_workprice.wpcode = :ls_wpcode
  79. And u_sc_workprice.status = :arg_status
  80. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftjj = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '');
  81. If sqlca.SQLCode = -1 Then
  82. arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
  83. rslt = 0
  84. Goto ext
  85. End If
  86. Select count(*)
  87. Into :ll_rl_errcnt
  88. From u_sc_workprice
  89. Where u_sc_workprice.ifownpro = 0
  90. And u_sc_workprice.mtrlid = :arg_mtrlid
  91. And u_sc_workprice.wpcode = :ls_wpcode
  92. And u_sc_workprice.status = :arg_status
  93. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftjj = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  94. And u_sc_workprice.workprice = 0;
  95. If sqlca.SQLCode = 0 Then
  96. ins_rl_errcnt = ins_rl_errcnt + ll_rl_errcnt
  97. End If
  98. If IsNull(ld_wageprice) Then ld_wageprice = 0
  99. arg_wageprice = ld_wageprice * arg_qty
  100. ext:
  101. Return rslt
  102. end function
  103. public function integer uof_get_equipprice (long arg_mtrlid, string arg_mtrlcode, string arg_status, decimal arg_qty, ref decimal arg_eqprice, ref string arg_msg);Int rslt = 1
  104. Int li_statusflag,li_equiptype,li_issuliao
  105. Decimal ld_eqprice = 0,ld_eqprice_suliao = 0
  106. Decimal ld_period,ld_Cost_Elec_Degree,ld_depreciation_cost
  107. Decimal ld_sbcost,ld_glcost ,ld_ectcost,ld_modelqty = 1
  108. Long ll_macnt
  109. string ls_wpcode
  110. long ll_dftwrkgrpid
  111. SELECT statusflag,equiptype,issuliao,dftwrkgrpid
  112. INTO :li_statusflag,:li_equiptype,:li_issuliao,:ll_dftwrkgrpid
  113. FROM u_mtrldef
  114. Where mtrlid = :arg_mtrlid;
  115. IF sqlca.SQLCode <> 0 THEN
  116. rslt = 0
  117. arg_msg = '查询物料'+arg_mtrlcode+'相关信息失败,'+sqlca.SQLErrText
  118. GOTO ext
  119. END IF
  120. SELECT wpcode INTO :ls_wpcode
  121. FROM u_mtrl_workprice
  122. WHERE mtrlid = :arg_mtrlid
  123. and ifdft = 1;
  124. IF sqlca.SQLCode = 100 THEN
  125. SELECT top 1 wpcode INTO :ls_wpcode
  126. FROM u_mtrl_workprice
  127. WHERE mtrlid = :arg_mtrlid
  128. And wrkid = :ll_dftwrkgrpid;
  129. IF sqlca.SQLCode = -1 THEN
  130. arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
  131. rslt = 0
  132. GOTO ext
  133. END IF
  134. ELSEIF sqlca.SQLCode = -1 THEN
  135. arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
  136. rslt = 0
  137. GOTO ext
  138. END IF
  139. //查询本厂机台数量,用于计算管理成本
  140. SELECT count(*) INTO :ll_macnt
  141. FROM u_workgroup
  142. WHERE mode = 1
  143. And ifm = 1;
  144. IF sqlca.SQLCode <> 0 THEN
  145. rslt = 0
  146. arg_msg = '查询机台数量失败,'+sqlca.SQLErrText
  147. GOTO ext
  148. END IF
  149. IF li_statusflag = 2 And Trim(arg_status) <> '' THEN
  150. IF li_equiptype = 0 THEN
  151. SELECT sum(u_sc_workprice.eqworkhour * u_Equipment_type.zjamt * 60)
  152. INTO :ld_eqprice
  153. FROM u_sc_workprice INNER JOIN
  154. u_Equipment_type ON u_sc_workprice.EquipmentID = u_Equipment_type.typeid
  155. WHERE u_sc_workprice.mtrlid = :arg_mtrlid
  156. And u_sc_workprice.status = :arg_status
  157. and u_sc_workprice.wpcode = :ls_wpcode;
  158. IF sqlca.SQLCode <> 0 THEN
  159. ld_eqprice = 0
  160. END IF
  161. ELSE
  162. SELECT sum(u_mtrl_wkp_tech_mx.eqworkhour_minute * u_Equipment_type.zjamt)
  163. INTO :ld_eqprice
  164. FROM u_mtrl_wkp_tech_mx INNER JOIN
  165. u_mtrl_wkp_tech ON u_mtrl_wkp_tech_mx.mtrlid = u_mtrl_wkp_tech.mtrlid AND
  166. u_mtrl_wkp_tech_mx.printid = u_mtrl_wkp_tech.printid INNER JOIN
  167. u_Equipment_type ON u_mtrl_wkp_tech.equipmenttypeid = u_Equipment_type.typeid
  168. WHERE u_mtrl_wkp_tech_mx.mtrlid = :arg_mtrlid
  169. And u_mtrl_wkp_tech_mx.pzname = :arg_status;
  170. IF sqlca.SQLCode <> 0 THEN
  171. ld_eqprice = 0
  172. END IF
  173. END IF
  174. ELSE
  175. IF li_equiptype = 0 THEN
  176. SELECT sum(u_sc_workprice.eqworkhour * u_Equipment_type.zjamt * 60)
  177. INTO :ld_eqprice
  178. FROM u_sc_workprice INNER JOIN
  179. u_Equipment_type ON u_sc_workprice.EquipmentID = u_Equipment_type.typeid
  180. Where u_sc_workprice.mtrlid = :arg_mtrlid
  181. and u_sc_workprice.wpcode = :ls_wpcode;
  182. IF sqlca.SQLCode <> 0 THEN
  183. ld_eqprice = 0
  184. END IF
  185. ELSE
  186. SELECT sum(u_mtrl_wkp_tech.eqworkhour_minute * u_Equipment_type.zjamt)
  187. INTO :ld_eqprice
  188. FROM u_mtrl_wkp_tech INNER JOIN
  189. u_Equipment_type ON u_mtrl_wkp_tech.equipmenttypeid = u_Equipment_type.typeid
  190. Where u_mtrl_wkp_tech.mtrlid = :arg_mtrlid;
  191. IF sqlca.SQLCode <> 0 THEN
  192. ld_eqprice = 0
  193. END IF
  194. END IF
  195. END IF
  196. IF li_issuliao = 1 THEN
  197. SELECT top 1 u_model_mtrl.modelqty
  198. INTO :ld_modelqty
  199. FROM u_model_mtrl
  200. WHERE u_model_mtrl.mtrlid = :arg_mtrlid
  201. Order By u_model_mtrl.ifdft Desc;
  202. IF sqlca.SQLCode <> 0 THEN
  203. ld_modelqty = 1
  204. END IF
  205. IF IsNull(ld_modelqty) THEN ld_modelqty = 0
  206. IF ld_modelqty = 0 THEN ld_modelqty = 1
  207. SELECT u_mtrldef_sl.period,
  208. U_Equipment_Manage.Cost_Elec_Degree,
  209. U_Equipment_Manage.depreciation_cost
  210. INTO :ld_period,
  211. :ld_Cost_Elec_Degree,
  212. :ld_depreciation_cost
  213. FROM u_mtrldef_sl INNER JOIN
  214. U_Equipment_Manage ON
  215. u_mtrldef_sl.equipmentid = U_Equipment_Manage.EquipmentID
  216. Where u_mtrldef_sl.mtrlid = :arg_mtrlid;
  217. IF sqlca.SQLCode <> 0 THEN
  218. ld_eqprice_suliao = 0
  219. ELSE
  220. IF IsNull(ld_period) THEN ld_period = 0
  221. IF IsNull(ld_Cost_Elec_Degree) THEN ld_Cost_Elec_Degree = 0
  222. IF IsNull(ld_depreciation_cost) THEN ld_depreciation_cost = 0
  223. IF ld_depreciation_cost = 0 THEN
  224. ld_sbcost = 0
  225. ELSE
  226. ld_sbcost = (ld_period / ld_modelqty / 3600) * ld_depreciation_cost
  227. END IF
  228. IF ll_macnt = 0 THEN
  229. ld_glcost = 0
  230. ELSE
  231. ld_glcost = (sys_option_management_cost / 30 / ll_macnt / 24 ) * (ld_period / ld_modelqty / 3600)
  232. END IF
  233. ld_ectcost = (ld_Cost_Elec_Degree / 3600) * (ld_period / ld_modelqty) * sys_option_ect_price
  234. END IF
  235. END IF
  236. IF IsNull(ld_eqprice) THEN ld_eqprice = 0
  237. ld_eqprice = ld_eqprice + ld_sbcost + ld_glcost + ld_ectcost
  238. ext:
  239. IF IsNull(ld_eqprice) THEN ld_eqprice = 0
  240. arg_eqprice = ld_eqprice * arg_qty
  241. RETURN rslt
  242. end function
  243. public function integer uof_get_cost_dz (integer arg_pricetype, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_price, ref decimal arg_mprice, ref decimal arg_outcost, ref decimal arg_wageprice, ref decimal arg_eqprice, ref string arg_msg, ref s_mtrlprice_mx arg_s_mx[]);Int rslt = 1
  244. Long ll_orderid,ll_scid,ll_i,ll_lp
  245. Int li_ifnext = 0,li_Mtrlorigin
  246. Decimal ld_orderqty,ld_qty
  247. Decimal ld_price,ld_mprice,ld_wageprice,ld_eqprice,ld_outcost
  248. Decimal ld_jgamt , ld_jgqty,ld_jgamt_notax
  249. Long ll_mtrlid
  250. Decimal ld_mxprice,ld_mxjgprice,ld_mxeqprice
  251. datastore ds_tree
  252. ds_tree = Create datastore
  253. ds_tree.DataObject = 'ds_orderrqmtrl_tree_cmp_cost'
  254. ds_tree.SetTransObject(sqlca)
  255. SELECT top 1 orderid ,scid,orderqty
  256. INTO :ll_orderid,:ll_scid,:ld_orderqty
  257. FROM u_order_ml
  258. WHERE ordertype <> 4
  259. AND status <> 0
  260. AND mtrlid = :arg_mtrlid
  261. AND status_mode = :arg_status
  262. AND woodcode = :arg_woodcode
  263. AND pcode = :arg_pcode
  264. Order By ordercode Desc;
  265. IF sqlca.SQLCode <> 0 THEN
  266. rslt = 0
  267. arg_msg = '统计部件选配项与标准值不相等,需要用相关生产计划用料明细进行核算,但产品配置无排过生产计划,所以不能核算'
  268. GOTO ext
  269. END IF
  270. IF arg_pricetype = 0 THEN
  271. SELECT sum(v_maxprice_sptprice.price * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
  272. INTO :ld_price
  273. FROM u_OrderRqMtrl_scll INNER JOIN
  274. u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  275. u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  276. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
  277. v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
  278. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  279. AND ( u_order_ml.scid = :ll_scid)
  280. And ( u_mtrldef.Mtrlorigin = 2);
  281. IF sqlca.SQLCode <> 0 THEN
  282. IF sqlca.SQLCode = 100 THEN
  283. ld_price = 0
  284. ELSE
  285. arg_msg = '查询材料成本失败(最新价),'+sqlca.SQLErrText
  286. rslt = 0
  287. GOTO ext
  288. END IF
  289. END IF
  290. //ELSE
  291. // SELECT sum(isnull(v_mtrlcost.price,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
  292. // INTO :ld_price
  293. // FROM u_OrderRqMtrl_scll INNER JOIN
  294. // u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  295. // u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  296. // u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
  297. // (SELECT CASE SUM(u_mtrlware.noallocqty) WHEN 0 THEN MAX(u_mtrlware.cost)
  298. // ELSE SUM(u_mtrlware.wareamt) / SUM(u_mtrlware.noallocqty) END AS price,
  299. // u_mtrlware.mtrlid
  300. // FROM u_mtrlware INNER JOIN
  301. // u_storage ON u_mtrlware.storageid = u_storage.storageid
  302. // WHERE (u_storage.Mtrlprp <> 3) AND (u_storage.inuse = 1)
  303. // GROUP BY u_mtrlware.mtrlid) v_mtrlcost ON
  304. // u_mtrldef.mtrlid = v_mtrlcost.mtrlid
  305. // WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  306. // AND ( u_order_ml.scid = :ll_scid)
  307. // And ( u_mtrldef.Mtrlorigin = 2);
  308. // IF sqlca.SQLCode <> 0 THEN
  309. // IF sqlca.SQLCode = 100 THEN
  310. // ld_price = 0
  311. // ELSE
  312. // arg_msg = '查询材料成本失败(库存成本价),'+sqlca.SQLErrText
  313. // rslt = 0
  314. // GOTO ext
  315. // END IF
  316. // END IF
  317. //END IF
  318. SELECT sum( v_maxprice_sptprice.price * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
  319. INTO :ld_mprice
  320. FROM u_OrderRqMtrl_scll INNER JOIN
  321. u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  322. u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  323. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
  324. v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
  325. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  326. AND ( u_order_ml.scid = :ll_scid)
  327. And ( u_mtrldef.Mtrlorigin = 3);
  328. IF sqlca.SQLCode <> 0 THEN
  329. IF sqlca.SQLCode = 100 THEN
  330. ld_mprice = 0
  331. ELSE
  332. arg_msg = '查询外协成本失败,'+sqlca.SQLErrText
  333. rslt = 0
  334. GOTO ext
  335. END IF
  336. END IF
  337. DECLARE cur_buy CURSOR FOR
  338. SELECT u_OrderRqMtrl_scll.MtrlID,
  339. u_mtrldef.Mtrlorigin,
  340. isnull(v_maxprice_sptprice.price,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty),
  341. u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty
  342. FROM u_OrderRqMtrl_scll INNER JOIN
  343. u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  344. u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  345. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
  346. v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
  347. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  348. AND ( u_order_ml.scid = :ll_scid)
  349. And ( u_mtrldef.Mtrlorigin = 2 Or u_mtrldef.Mtrlorigin = 3);
  350. OPEN cur_buy;
  351. FETCH cur_buy Into :ll_mtrlid,:li_Mtrlorigin,:ld_mxprice,:ld_qty;
  352. DO WHILE sqlca.SQLCode = 0
  353. ins_cnt++
  354. arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
  355. arg_s_mx[ins_cnt].qty = ld_qty
  356. IF li_Mtrlorigin = 2 THEN
  357. arg_s_mx[ins_cnt].price = ld_mxprice
  358. ELSE
  359. arg_s_mx[ins_cnt].wfjgprice = ld_mxprice
  360. END IF
  361. FETCH cur_buy Into :ll_mtrlid,:li_Mtrlorigin,:ld_mxprice,:ld_qty;
  362. LOOP
  363. CLOSE cur_buy;
  364. ELSE
  365. ds_tree.Retrieve(ll_scid,ll_orderid)
  366. FOR ll_i = 1 To ds_tree.RowCount()
  367. IF li_ifnext = 1 THEN
  368. IF ll_lp < ds_tree.Object.u_orderrqmtrl_tree_lp[ll_i] THEN CONTINUE
  369. END IF
  370. li_ifnext = 0
  371. IF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 2 Or ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 3 THEN
  372. ins_cnt++
  373. arg_s_mx[ins_cnt].SonMtrlid = ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i]
  374. arg_s_mx[ins_cnt].qty = ds_tree.Object.qty[ll_i]
  375. END IF
  376. IF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 2 THEN
  377. ld_price = ld_price + ds_tree.Object.costamt[ll_i]
  378. arg_s_mx[ins_cnt].price = ds_tree.Object.costamt[ll_i]
  379. ELSEIF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 3 THEN
  380. ld_jgqty = ds_tree.Object.jgqty[ll_i]
  381. IF ld_jgqty > 0 THEN
  382. IF uo_option_cost_notax = 0 THEN
  383. ld_mprice = ld_mprice + ld_jgamt / ld_jgqty
  384. arg_s_mx[ins_cnt].wfjgprice = ld_jgamt / ld_jgqty
  385. ELSE
  386. ld_mprice = ld_mprice + ld_jgamt_notax / ld_jgqty
  387. arg_s_mx[ins_cnt].wfjgprice = ld_jgamt_notax / ld_jgqty
  388. END IF
  389. ELSE
  390. ld_price = ld_price + ds_tree.Object.costamt[ll_i]
  391. ll_lp = ds_tree.Object.u_orderrqmtrl_tree_lp[ll_i]
  392. arg_s_mx[ins_cnt].price = ds_tree.Object.costamt[ll_i]
  393. //直接取外协件库存成本,下级不考虑,跳过
  394. li_ifnext = 1
  395. END IF
  396. END IF
  397. NEXT
  398. END IF
  399. SELECT sum(isnull(u_mtrl_cost.cost,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
  400. INTO :ld_outcost
  401. FROM u_OrderRqMtrl_scll INNER JOIN
  402. u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  403. u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  404. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
  405. u_mtrl_cost ON u_mtrldef.mtrlid = u_mtrl_cost.mtrlid
  406. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  407. AND ( u_order_ml.scid = :ll_scid)
  408. And ( u_mtrldef.Mtrlorigin = 0);
  409. IF sqlca.SQLCode <> 0 THEN
  410. IF sqlca.SQLCode = 100 THEN
  411. ld_outcost = 0
  412. ELSE
  413. arg_msg = '查询费用成本失败,'+sqlca.SQLErrText
  414. rslt = 0
  415. GOTO ext
  416. END IF
  417. END IF
  418. DECLARE cur_outcost CURSOR FOR
  419. SELECT u_mtrldef.mtrlid ,
  420. isnull(u_mtrl_cost.cost,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty),
  421. u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty
  422. FROM u_OrderRqMtrl_scll INNER JOIN
  423. u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
  424. u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
  425. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
  426. u_mtrl_cost ON u_mtrldef.mtrlid = u_mtrl_cost.mtrlid
  427. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  428. AND ( u_order_ml.scid = :ll_scid)
  429. And ( u_mtrldef.Mtrlorigin = 0);
  430. OPEN cur_outcost;
  431. FETCH cur_outcost Into :ll_mtrlid,:ld_mxprice,:ld_qty;
  432. DO WHILE sqlca.SQLCode = 0
  433. IF ld_mxprice > 0 THEN
  434. ins_cnt++
  435. arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
  436. arg_s_mx[ins_cnt].qty = ld_qty
  437. arg_s_mx[ins_cnt].outcost = ld_mxprice
  438. END IF
  439. FETCH cur_outcost Into :ll_mtrlid,:ld_mxprice,:ld_qty;
  440. LOOP
  441. CLOSE cur_outcost;
  442. SELECT sum(U_OrderRqwp.proqty / u_Order_ml.orderqty * U_OrderRqwp.workPrice),
  443. sum(ISNULL(u_Equipment_type.zjamt, 0) * U_OrderRqwp.eqworkhour * 60 )
  444. INTO :ld_wageprice,
  445. :ld_eqprice
  446. FROM U_OrderRqwp INNER JOIN
  447. u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid AND
  448. U_OrderRqwp.orderid = u_Order_ml.OrderID LEFT OUTER JOIN
  449. u_Equipment_type ON
  450. U_OrderRqwp.EquipmentID = u_Equipment_type.typeid
  451. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  452. And ( u_order_ml.scid = :ll_scid);
  453. IF sqlca.SQLCode <> 0 THEN
  454. IF sqlca.SQLCode = 100 THEN
  455. ld_wageprice = 0
  456. ld_eqprice = 0
  457. ELSE
  458. arg_msg = '查询人力成本,费用成本失败,'+sqlca.SQLErrText
  459. rslt = 0
  460. GOTO ext
  461. END IF
  462. END IF
  463. DECLARE cur_rl CURSOR FOR
  464. SELECT u_Order_ml.mtrlid,
  465. U_OrderRqwp.proqty / u_Order_ml.orderqty ,
  466. U_OrderRqwp.proqty / u_Order_ml.orderqty * U_OrderRqwp.workPrice,
  467. ISNULL(u_Equipment_type.zjamt, 0) * U_OrderRqwp.eqworkhour * 60
  468. FROM U_OrderRqwp INNER JOIN
  469. u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid AND
  470. U_OrderRqwp.orderid = u_Order_ml.OrderID LEFT OUTER JOIN
  471. u_Equipment_type ON
  472. U_OrderRqwp.EquipmentID = u_Equipment_type.typeid
  473. WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
  474. And ( u_order_ml.scid = :ll_scid);
  475. OPEN cur_rl;
  476. FETCH cur_rl Into :ll_mtrlid,:ld_qty,:ld_mxjgprice,:ld_mxeqprice;
  477. DO WHILE sqlca.SQLCode = 0
  478. IF ld_mxjgprice > 0 Or ld_mxeqprice > 0 THEN
  479. ins_cnt++
  480. arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
  481. arg_s_mx[ins_cnt].qty = ld_qty
  482. arg_s_mx[ins_cnt].jgprice = ld_mxjgprice
  483. arg_s_mx[ins_cnt].eqprice = ld_mxeqprice
  484. END IF
  485. FETCH cur_rl Into :ll_mtrlid,:ld_qty,:ld_mxjgprice,:ld_mxeqprice;
  486. LOOP
  487. CLOSE cur_rl;
  488. IF IsNull(ld_price) THEN ld_price = 0
  489. IF IsNull(ld_mprice) THEN ld_mprice = 0
  490. IF IsNull(ld_wageprice) THEN ld_wageprice = 0
  491. IF IsNull(ld_eqprice) THEN ld_eqprice = 0
  492. IF IsNull(ld_outcost) THEN ld_outcost = 0
  493. arg_price = ld_price
  494. arg_mprice = ld_mprice
  495. arg_wageprice = ld_wageprice
  496. arg_eqprice = ld_eqprice
  497. arg_outcost = ld_outcost
  498. Destroy ds_tree
  499. ext:
  500. RETURN rslt
  501. end function
  502. public function integer uof_get_cost (integer arg_pricetype, long arg_scid, long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, decimal arg_qty, long arg_lp, ref decimal arg_price, ref decimal arg_mprice, ref decimal arg_outcost, ref decimal arg_wageprice, ref decimal arg_eqprice, integer arg_ifcfg, ref string arg_msg, ref s_mtrlprice_mx arg_s_mx[], integer arg_protype);Int rslt
  503. rslt = 1
  504. If uo_option_produce_dec = -1000 Then
  505. rslt = 0
  506. arg_msg = '选项:[089]生产计划物料运算小数位,读取初始默认值失败,操作取消!'
  507. Goto ext
  508. End If
  509. If uo_option_cost_notax = -1000 Then
  510. rslt = 0
  511. arg_msg = '选项:[362]采购外协使用不含税价进仓,读取初始默认值失败,操作取消!'
  512. Goto ext
  513. End If
  514. Decimal Sonscale,SonLoss,SonDECLosS
  515. Long SonMtrlid,count = 0,ls_i
  516. String mtrlcode, mtrlname
  517. s_pfmx ls_s_pfmx[]
  518. Decimal ld_price,ld_qty,ld_outcost,ld_wageprice,ld_eqprice
  519. Decimal ld_planprice
  520. Int li_mtrlorigin,li_statusflag,li_ifpzpf
  521. Long ll_scid,ll_pzpfcnt
  522. Decimal ld_cmpqty
  523. Decimal ld_noallocqty,ld_wareamt
  524. Long tem_long
  525. Int li_ifpackpro
  526. Decimal ld_jgamt,ld_jgamt_notax,ld_jgqty
  527. Int li_if_wfjg,li_protype,li_ifselforder
  528. deep++
  529. If deep > 10000 Then //防止死递归
  530. arg_msg = '物料:'+arg_mtrlcode+'死循环'
  531. rslt = 0
  532. Goto ext
  533. End If
  534. Select cmpqty,statusflag,protype,ifselforder
  535. Into :ld_cmpqty,:li_statusflag,:li_protype,:li_ifselforder
  536. From u_mtrldef
  537. Where mtrlid = :arg_mtrlid;
  538. If sqlca.SQLCode <> 0 Then
  539. MessageBox('Error','查询物料清单基数及是否使用组合配置失败,'+sqlca.SQLErrText)
  540. Return 0
  541. End If
  542. If li_statusflag = 2 And arg_ifcfg = 0 Then
  543. ll_pzpfcnt = 0
  544. Select count(*) Into :ll_pzpfcnt
  545. From u_mtrl_pf
  546. Where mtrlid = :arg_mtrlid
  547. And pfcode = :arg_pfcode
  548. And ifpzpf = 1;
  549. If sqlca.SQLCode <> 0 Then
  550. arg_msg = '查询物料是否启用组合配置清单失败,'+sqlca.SQLErrText
  551. rslt = 0
  552. Goto ext
  553. End If
  554. If ll_pzpfcnt > 0 Then
  555. li_ifpzpf = 1
  556. Else
  557. li_ifpzpf = 0
  558. End If
  559. Else
  560. li_ifpzpf = 0
  561. End If
  562. s_mtrlcfg_expr s_mtrlcfg[]
  563. Long ll_cfg,ll_cnt_s_mtrlcfg,cnt
  564. //配置运算
  565. count = 0
  566. //yyx2013-6-22
  567. //+整套(空子件)的工价人力成本
  568. If li_statusflag = 2 And arg_ifcfg = 0 And deep = 1 Then
  569. ld_wageprice = 0
  570. If uof_get_wageprice(arg_mtrlid,arg_mtrlcode,'',arg_qty,ld_wageprice,arg_msg) = 0 Then
  571. rslt = 0
  572. Goto ext
  573. End If
  574. arg_wageprice = arg_wageprice + ld_wageprice
  575. End If
  576. //yyx2013-6-22_end
  577. If li_statusflag = 2 And arg_ifcfg = 0 And li_ifpzpf = 0 Then
  578. //分解配置
  579. f_checkpz(arg_pfcode,s_mtrlcfg)
  580. //
  581. ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg)
  582. If ll_cnt_s_mtrlcfg = 0 Then
  583. count = 0
  584. Else
  585. For ll_cfg = 1 To ll_cnt_s_mtrlcfg
  586. count++
  587. ls_s_pfmx[count].SonMtrlid = arg_mtrlid
  588. ls_s_pfmx[count].sonpfcode = s_mtrlcfg[ll_cfg].cfgname
  589. ls_s_pfmx[count].ifcfg = 1
  590. ls_s_pfmx[count].Sonscale = Dec(s_mtrlcfg[ll_cfg].qty)
  591. ls_s_pfmx[count].SonLoss = 0
  592. ls_s_pfmx[count].SonDECLosS = 0
  593. Next
  594. End If
  595. If count = 0 Then
  596. arg_msg = '物料分拆配置失败,请检查配置内容'
  597. rslt = 0
  598. Goto ext
  599. End If
  600. //查询附加常规清单
  601. cnt = 0
  602. Select count(*) Into :cnt
  603. From u_mtrl_pf
  604. Where ( u_mtrl_pf.mtrlid = :arg_mtrlid )
  605. And ( u_mtrl_pf.ifdi = 0 )
  606. And ( u_mtrl_pf.ifdft = 1 );
  607. If sqlca.SQLCode <> 0 Then
  608. arg_msg = '查询组合配置产品附加默认清单失败,请检查是否已建立默认清单'
  609. rslt = 0
  610. Goto ext
  611. End If
  612. If cnt > 1 Then
  613. arg_msg = '组合配置产品附加默认清单只能设置1个,请检查资料'
  614. rslt = 0
  615. Goto ext
  616. End If
  617. If cnt = 1 Then
  618. Declare pf_cur_dft Cursor For
  619. Select u_PrdPF.Sonscale,
  620. u_PrdPF.SonLoss,
  621. u_PrdPF.SonDECLosS,
  622. u_PrdPF.SonMtrlid,
  623. u_mtrldef.mtrlcode,
  624. u_PrdPF.sonpfcode,0,
  625. u_mtrldef.mrptype,
  626. u_mtrldef.mrparg
  627. From u_PrdPF,u_mtrldef,u_mtrl_pf
  628. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  629. And ( u_mtrl_pf.ifdi = 0 )
  630. And ( u_mtrl_pf.ifdft = 1 )
  631. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  632. And ( u_PrdPF.mtrlid = :arg_mtrlid )
  633. And ( u_PrdPF.mtrlid = u_mtrldef.mtrlid );
  634. Open pf_cur_dft;
  635. count++
  636. Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  637. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  638. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  639. :ls_s_pfmx[count].u_mtrldef_mrparg;
  640. Do While sqlca.SQLCode = 0
  641. count++
  642. Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  643. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  644. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  645. :ls_s_pfmx[count].u_mtrldef_mrparg;
  646. Loop
  647. count = count - 1
  648. Close pf_cur_dft;
  649. End If
  650. Else
  651. Declare pf_cur Cursor For
  652. Select u_PrdPF.Sonscale,
  653. u_PrdPF.SonLoss,
  654. u_PrdPF.SonDECLosS,
  655. u_PrdPF.SonMtrlid,
  656. u_mtrldef.mtrlcode,
  657. u_PrdPF.sonpfcode,
  658. 0,
  659. u_mtrldef.mrptype,
  660. u_mtrldef.mrparg
  661. From u_PrdPF,
  662. u_mtrldef
  663. Where ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) And
  664. ( u_PrdPF.mtrlid = :arg_mtrlid ) And
  665. ( u_PrdPF.pfcode = :arg_pfcode );
  666. Open pf_cur;
  667. count = 1
  668. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  669. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  670. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  671. :ls_s_pfmx[count].u_mtrldef_mrparg;
  672. Do While sqlca.SQLCode = 0
  673. count++
  674. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  675. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  676. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  677. :ls_s_pfmx[count].u_mtrldef_mrparg;
  678. Loop
  679. count = count - 1
  680. Close pf_cur;
  681. End If
  682. //***查询最新采购价
  683. If (arg_lp > 1 Or ifcmpl_1) And Not (li_statusflag = 2 And arg_ifcfg = 0) Then
  684. Select mtrlorigin,scid,ifpackpro
  685. Into :li_mtrlorigin,:ll_scid,:li_ifpackpro
  686. From u_mtrldef
  687. Where mtrlid = :arg_mtrlid;
  688. If sqlca.SQLCode <> 0 Then
  689. arg_msg = '查询:'+arg_mtrlcode+'来源失败'
  690. rslt = 0
  691. Goto ext
  692. End If
  693. Select planprice Into :ld_planprice
  694. From u_mtrldef_planprice
  695. Where mtrlid = :arg_mtrlid
  696. And status = ''
  697. And woodcode = ''
  698. And pcode = '';
  699. If sqlca.SQLCode <> 0 Then
  700. ld_planprice = 0
  701. End If
  702. ins_cnt++
  703. arg_s_mx[ins_cnt].SonMtrlid = arg_mtrlid
  704. arg_s_mx[ins_cnt].qty = arg_qty
  705. Choose Case li_mtrlorigin
  706. Case 2,3
  707. If arg_pricetype = 0 Then
  708. If uo_option_cost_notax = 0 Then
  709. Select Case when price = 0 Then price_bj Else price End Into :ld_price
  710. From v_maxprice_sptprice
  711. Where mtrlid = :arg_mtrlid;
  712. If sqlca.SQLCode = -1 Then
  713. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  714. rslt = 0
  715. Goto ext
  716. End If
  717. Else
  718. Select price_notax Into :ld_price
  719. From v_maxprice_sptprice_notax
  720. Where mtrlid = :arg_mtrlid;
  721. If sqlca.SQLCode = -1 Then
  722. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  723. rslt = 0
  724. Goto ext
  725. End If
  726. End If
  727. Else
  728. If li_mtrlorigin = 3 Then
  729. Select SUM(ow_wfjgmx_in_aft.jgprice * ow_wfjgmx_in_aft.uqty * ow_wfjgmx_in_aft.rebate) ,
  730. SUM((ow_wfjgmx_in_aft.jgprice * ow_wfjgmx_in_aft.uqty * ow_wfjgmx_in_aft.rebate) / (1 + ow_wfjgmx_in_aft.taxrate)),
  731. sum(ow_wfjgmx_in_aft.uqty)
  732. Into :ld_jgamt,
  733. :ld_jgamt_notax,
  734. :ld_jgqty
  735. From (Select u_inware.relid, u_inwaremx.mtrlid, u_inwaremx.printid, u_inware.storageid,
  736. u_inware.balcdateint
  737. From u_inware Inner JOIN
  738. u_inwaremx ON u_inware.scid = u_inwaremx.scid And
  739. u_inware.inwareid = u_inwaremx.inwareid
  740. Where (u_inware.billtype = 4)) v_inware Inner JOIN
  741. (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint
  742. From u_warebalc
  743. Where (balcdateint > 0)
  744. Group By Storageid) v_balcint ON v_inware.storageid = v_balcint.Storageid And
  745. v_inware.balcdateint = v_balcint.balcdateint Inner JOIN
  746. ow_wfjgmx_in_aft ON v_inware.relid = ow_wfjgmx_in_aft.inwareid And
  747. v_inware.printid = ow_wfjgmx_in_aft.printid
  748. Where (ow_wfjgmx_in_aft.mtrlid = :arg_mtrlid);
  749. If sqlca.SQLCode <> 0 Then
  750. li_if_wfjg = 0
  751. Else
  752. If IsNull(ld_jgamt) Then ld_jgamt = 0
  753. If IsNull(ld_jgamt_notax) Then ld_jgamt_notax = 0
  754. If IsNull(ld_jgqty) Then ld_jgqty = 0
  755. If ld_jgqty = 0 Then
  756. li_if_wfjg = 0
  757. Else
  758. li_if_wfjg = 1
  759. End If
  760. End If
  761. If li_if_wfjg = 1 Then
  762. If uo_option_cost_notax = 0 Then
  763. ld_price = ld_jgamt / ld_jgqty
  764. Else
  765. ld_price = ld_jgamt_notax / ld_jgqty
  766. End If
  767. End If
  768. End If
  769. If li_mtrlorigin = 2 Or (li_mtrlorigin = 3 And li_if_wfjg = 0) Then
  770. Select sum(u_mtrlware.noallocqty),
  771. sum(u_mtrlware.wareamt)
  772. Into :ld_noallocqty,
  773. :ld_wareamt
  774. From u_mtrlware Inner JOIN
  775. u_storage ON u_mtrlware.storageid = u_storage.storageid
  776. Where (u_storage.Mtrlprp <> 3)
  777. And (u_storage.inuse = 1)
  778. And (u_mtrlware.mtrlid = :arg_mtrlid) ;
  779. If sqlca.SQLCode = -1 Then
  780. arg_msg = '查询物料:'+arg_mtrlcode+'最新成本价失败(总库存量),'+sqlca.SQLErrText
  781. rslt = 0
  782. Goto ext
  783. End If
  784. If IsNull(ld_noallocqty) Then ld_noallocqty = 0
  785. If IsNull(ld_wareamt) Then ld_wareamt = 0
  786. If ld_noallocqty = 0 Then
  787. Select top 1 u_mtrlware.cost
  788. Into :ld_price
  789. From u_mtrlware Inner JOIN
  790. u_storage ON u_mtrlware.storageid = u_storage.storageid
  791. Where (u_storage.Mtrlprp <> 3)
  792. And (u_storage.inuse = 1)
  793. And (u_mtrlware.mtrlid = :arg_mtrlid)
  794. Order By u_mtrlware.cost Desc;
  795. If sqlca.SQLCode = -1 Then
  796. arg_msg = '查询物料:'+arg_mtrlcode+'最新成本价失败,'+sqlca.SQLErrText
  797. rslt = 0
  798. Goto ext
  799. ElseIf sqlca.SQLCode = 100 Or ld_price = 0 Then
  800. li_if_wfjg = 1
  801. If uo_option_cost_notax = 0 Then
  802. Select price Into :ld_price
  803. From v_maxprice_sptprice
  804. Where mtrlid = :arg_mtrlid;
  805. If sqlca.SQLCode = -1 Then
  806. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  807. rslt = 0
  808. Goto ext
  809. End If
  810. Else
  811. Select price_notax Into :ld_price
  812. From v_maxprice_sptprice_notax
  813. Where mtrlid = :arg_mtrlid;
  814. If sqlca.SQLCode = -1 Then
  815. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  816. rslt = 0
  817. Goto ext
  818. End If
  819. End If
  820. End If
  821. Else
  822. ld_price = ld_wareamt / ld_noallocqty
  823. If ld_wareamt = 0 Then
  824. li_if_wfjg = 1
  825. If uo_option_cost_notax = 0 Then
  826. Select price Into :ld_price
  827. From v_maxprice_sptprice
  828. Where mtrlid = :arg_mtrlid;
  829. If sqlca.SQLCode = -1 Then
  830. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  831. rslt = 0
  832. Goto ext
  833. End If
  834. Else
  835. Select price_notax Into :ld_price
  836. From v_maxprice_sptprice_notax
  837. Where mtrlid = :arg_mtrlid;
  838. If sqlca.SQLCode = -1 Then
  839. arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
  840. rslt = 0
  841. Goto ext
  842. End If
  843. End If
  844. End If
  845. End If
  846. End If
  847. End If
  848. If IsNull(ld_price) Then ld_price = 0
  849. If li_mtrlorigin = 3 Then
  850. If arg_pricetype = 0 Or li_if_wfjg = 1 Then
  851. arg_mprice = arg_mprice + ld_price * arg_qty
  852. arg_s_mx[ins_cnt].wfjgprice = ld_price * arg_qty
  853. If ld_price = 0 Then ins_wf_errcnt++
  854. Else
  855. arg_price = arg_price + ld_price * arg_qty
  856. arg_s_mx[ins_cnt].price = ld_price * arg_qty
  857. If ld_price = 0 Then ins_cl_errcnt++
  858. rslt = 1
  859. Goto ext
  860. End If
  861. End If
  862. If li_mtrlorigin = 2 And (li_ifpackpro = 0 Or count = 0) Then
  863. arg_price = arg_price + ld_price * arg_qty
  864. arg_s_mx[ins_cnt].price = ld_price * arg_qty
  865. If ld_price = 0 Then ins_cl_errcnt++
  866. rslt = 1
  867. Goto ext
  868. End If
  869. Case 0
  870. If arg_scid <> ll_scid Then
  871. arg_price = arg_price + ld_planprice * arg_qty
  872. arg_s_mx[ins_cnt].price = ld_planprice * arg_qty
  873. If ld_planprice = 0 Then ins_cl_errcnt++
  874. rslt = 1
  875. Goto ext
  876. Else
  877. //计算分摊费用
  878. If uof_get_f_price(arg_mtrlid,arg_mtrlcode,arg_qty,ld_outcost,arg_msg) = 0 Then
  879. rslt = 0
  880. Goto ext
  881. End If
  882. arg_outcost = arg_outcost + ld_outcost
  883. arg_s_mx[ins_cnt].outcost = ld_outcost
  884. //计算人工
  885. If li_ifselforder = 0 And arg_protype = 0 Then
  886. ld_wageprice = 0
  887. Else
  888. If uof_get_wageprice(arg_mtrlid,arg_mtrlcode,arg_pfcode,arg_qty,ld_wageprice,arg_msg) = 0 Then
  889. rslt = 0
  890. Goto ext
  891. End If
  892. End If
  893. arg_wageprice = arg_wageprice + ld_wageprice
  894. arg_s_mx[ins_cnt].jgprice = ld_wageprice
  895. //计算设备成本
  896. If uof_get_equipprice(arg_mtrlid,arg_mtrlcode,arg_pfcode,arg_qty,ld_eqprice,arg_msg) = 0 Then
  897. rslt = 0
  898. Goto ext
  899. End If
  900. arg_eqprice = arg_eqprice + ld_eqprice
  901. arg_s_mx[ins_cnt].eqprice = ld_eqprice
  902. End If
  903. End Choose
  904. End If
  905. For ls_i = 1 To count
  906. // ld_qty = Round(arg_qty * (ls_s_pfmx[ls_i].Sonscale / (1 - ls_s_pfmx[ls_i].SonLoss) + ls_s_pfmx[ls_i].SonDECLosS) / ld_cmpqty,uo_option_produce_dec)
  907. If uo_option_pfmrp_ifuse_mtrlmrparg = 0 Then
  908. If ls_s_pfmx[ls_i].u_mtrldef_mrptype = 0 Then
  909. ld_qty = Round(arg_qty * (ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ls_i].u_mtrldef_mrparg)
  910. Else
  911. If ls_s_pfmx[ls_i].u_mtrldef_mrparg = 0 Then
  912. ld_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS,10)/ld_cmpqty)
  913. Else
  914. tem_long = 10^ls_s_pfmx[ls_i].u_mtrldef_mrparg
  915. ld_qty = Ceiling((Truncate(arg_qty * ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS,10)/ld_cmpqty) * tem_long)/tem_long
  916. ld_qty = Round(ld_qty , ls_s_pfmx[ls_i].u_mtrldef_mrparg)
  917. End If
  918. End If
  919. Else
  920. ld_qty = Round(arg_qty * (ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS)/ld_cmpqty,uo_option_produce_dec)
  921. End If
  922. If uof_get_cost(arg_pricetype,arg_scid,ls_s_pfmx[ls_i].SonMtrlid,ls_s_pfmx[ls_i].mtrlcode,&
  923. ls_s_pfmx[ls_i].sonpfcode,ld_qty,arg_lp+1,arg_price,arg_mprice,arg_outcost,&
  924. arg_wageprice,arg_eqprice,ls_s_pfmx[ls_i].ifcfg,arg_msg,arg_s_mx,li_protype) = 0 Then
  925. rslt = 0
  926. Goto ext
  927. End If
  928. Next
  929. ext:
  930. Return rslt
  931. end function
  932. public function integer uof_add_mtrlprice_mx (long arg_sumdate, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_pfcode, s_mtrlprice_mx arg_s_mx[], ref string arg_msg);Int rslt = 1
  933. String ls_wpcode
  934. uo_mtrl_pf uo_pf
  935. uo_workpricetable u_wrkprice
  936. uo_pf = create uo_mtrl_pf
  937. u_wrkprice = create uo_workpricetable
  938. If uo_pf.f_clearprdpfmx(arg_mtrlid,arg_pfcode,arg_msg,False) = 0 Then
  939. rslt = 0
  940. Goto ext
  941. End If
  942. uo_pf.deep_count = 0
  943. uo_pf.il_printid = 0
  944. If uo_pf.f_cmpprdpf(arg_mtrlid,arg_mtrlid,arg_pfcode,arg_pfcode,1,1,1,arg_msg,False,0) = 0 Then
  945. rslt = 0
  946. Goto ext
  947. End If
  948. Delete From u_mtrlprice_prdpfmx
  949. Where mtrlid = :arg_mtrlid
  950. And pfcode = :arg_pfcode
  951. And sumdate = :arg_sumdate;
  952. If sqlca.SQLCode <> 0 Then
  953. rslt = 0
  954. arg_msg = '删除旧数据失败(物料清单用料列表),'+sqlca.SQLErrText
  955. Goto ext
  956. End If
  957. Insert Into u_mtrlprice_prdpfmx
  958. (mtrlid, pfcode, printid, pfgroup, SonMtrlid, Sonscale, SonLoss, SonDECLosS,
  959. Sonahead, dscrp, pfgroupqty, pfgroupmode, promode, wrkgrpid, status, sonflag,
  960. grade, woodcode, pcode, realqty, pfklmode, sonpfcode, upmtrlid, uprealqty, wenli,
  961. fengbian, paikong, luoji, penyou,sumdate)
  962. Select mtrlid, pfcode, printid, pfgroup, SonMtrlid, Sonscale, SonLoss, SonDECLosS,
  963. Sonahead, dscrp, pfgroupqty, pfgroupmode, promode, wrkgrpid, status, sonflag,
  964. grade, woodcode, pcode, realqty, pfklmode, sonpfcode, upmtrlid, uprealqty, wenli,
  965. fengbian, paikong, luoji, penyou,:arg_sumdate
  966. From u_PrdPF_mx
  967. Where mtrlid = :arg_mtrlid
  968. And pfcode = :arg_pfcode;
  969. If sqlca.SQLCode <> 0 Then
  970. rslt = 0
  971. arg_msg = '插入物料清单用料列表失败,'+sqlca.SQLErrText
  972. Goto ext
  973. End If
  974. //更新用料价格
  975. Update u_mtrlprice_prdpfmx
  976. Set price = v_mx.price
  977. From u_mtrlprice_prdpfmx Inner JOIN
  978. (Select u_mtrlprice_mx.mtrlid, u_mtrlprice_mx.pfcode, u_mtrlprice_mx.sonmtrlid,
  979. CASE u_mtrlprice_mx.qty WHEN 0 THEN 0 ELSE CASE u_mtrldef.Mtrlorigin WHEN
  980. 2 THEN u_mtrlprice_mx.price / u_mtrlprice_mx.qty WHEN 3 THEN u_mtrlprice_mx.wfjgprice
  981. / u_mtrlprice_mx.qty ELSE 0 END END AS price
  982. From u_mtrlprice_mx Inner JOIN
  983. u_mtrldef ON u_mtrlprice_mx.sonmtrlid = u_mtrldef.mtrlid
  984. Where (u_mtrldef.Mtrlorigin = 2 Or u_mtrldef.Mtrlorigin = 3)
  985. And u_mtrlprice_mx.mtrlid = :arg_mtrlid
  986. And u_mtrlprice_mx.pfcode = :arg_pfcode
  987. And u_mtrlprice_mx.status = :arg_status
  988. And u_mtrlprice_mx.woodcode = :arg_woodcode
  989. And u_mtrlprice_mx.pcode = :arg_pcode) v_mx ON
  990. u_mtrlprice_prdpfmx.mtrlid = v_mx.mtrlid And
  991. u_mtrlprice_prdpfmx.pfcode = v_mx.pfcode COLLATE Chinese_PRC_CI_AS And
  992. u_mtrlprice_prdpfmx.SonMtrlid = v_mx.sonmtrlid
  993. Where u_mtrlprice_prdpfmx.mtrlid = :arg_mtrlid
  994. And u_mtrlprice_prdpfmx.pfcode = :arg_pfcode
  995. and u_mtrlprice_prdpfmx.sumdate = :arg_sumdate;
  996. If sqlca.SQLCode <> 0 Then
  997. rslt = 0
  998. arg_msg = '插入物料清单用料列表单价失败,'+sqlca.SQLErrText
  999. Goto ext
  1000. End If
  1001. //工价表
  1002. Select wpcode Into :ls_wpcode
  1003. From u_mtrl_workprice
  1004. Where mtrlid = :arg_mtrlid
  1005. And ifdft = 1;
  1006. If sqlca.SQLCode <> 0 Then
  1007. arg_msg = '查询物料默认工价表失败'
  1008. rslt = 0
  1009. Goto ext
  1010. End If
  1011. u_wrkprice.mtrlid = arg_mtrlid
  1012. If u_wrkprice.f_clearpfmx(arg_mtrlid,ls_wpcode,arg_msg,False) = 0 Then
  1013. rslt = 0
  1014. Goto ext
  1015. End If
  1016. //插入自身工价表
  1017. u_wrkprice.deep_count = 0
  1018. u_wrkprice.il_printid = 0
  1019. If u_wrkprice.f_addworkprice(arg_mtrlid,ls_wpcode,arg_msg,False) = 0 Then
  1020. rslt = 0
  1021. Goto ext
  1022. End If
  1023. //插入下级自制物料工价表
  1024. If u_wrkprice.f_addpfmx(arg_mtrlid,ls_wpcode,arg_pfcode,1,1,arg_msg,False,1) = 0 Then
  1025. rslt = 0
  1026. Goto ext
  1027. End If
  1028. Delete From u_mtrlprice_wpmx
  1029. Where parentmtrlid = :arg_mtrlid
  1030. And sumdate = :arg_sumdate;
  1031. If sqlca.SQLCode <> 0 Then
  1032. rslt = 0
  1033. arg_msg = '删除旧数据失败(全套工价),'+sqlca.SQLErrText
  1034. Goto ext
  1035. End If
  1036. Insert Into u_mtrlprice_wpmx
  1037. (parentmtrlid, printid, wpcode, wrkid, mtrlid, proid, proorder, procode, proname,
  1038. wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, auditflag,
  1039. auditrep, auditdate, Lastflag, lp, status, ifjd, sumdate)
  1040. Select parentmtrlid, printid, wpcode, wrkid, mtrlid, proid, proorder, procode, proname,
  1041. wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, auditflag,
  1042. auditrep, auditdate, Lastflag, lp, status, ifjd, :arg_sumdate
  1043. From u_sc_workprice_mx
  1044. Where parentmtrlid = :arg_mtrlid;
  1045. If sqlca.SQLCode <> 0 Then
  1046. rslt = 0
  1047. arg_msg = '插入全套工价失败,'+sqlca.SQLErrText
  1048. Goto ext
  1049. End If
  1050. ext:
  1051. destroy uo_pf
  1052. destroy u_wrkprice
  1053. If rslt = 1 Then
  1054. Commit;
  1055. ElseIf rslt = 0 Then
  1056. Rollback;
  1057. End If
  1058. Return rslt
  1059. end function
  1060. public function integer uof_cmpl_mtrlcost (long ll_mtrlid, string ls_pfcode, string ls_status, string ls_woodcode, string ls_pcode, long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string arg_msg);Int rslt = 1
  1061. Long li_statusflag, li_woodcodeflag, li_pcodeflag, ll_scid
  1062. String ls_status_config, ls_woodcode_config, ls_pcode_config
  1063. String ls_mtrlcode
  1064. Decimal ld_price, ld_wfjgprice, ld_outcost_self, ld_outcost, ld_wageprice, ld_otherprice, ld_eqprice
  1065. s_mtrlprice_mx arg_s_mx[],arg_s_empty[]
  1066. Long ll_cl_errcnt,ll_wf_errcnt,ll_rl_errcnt
  1067. Long ll_i
  1068. Long sumdate
  1069. sumdate = Year(Date(Today())) * 10000 + Month(Date(Today())) * 100 + Day(Date(Today()))
  1070. IF ls_pfcode = '' THEN
  1071. GOTO ext
  1072. END IF
  1073. SELECT statusflag, woodcodeflag, pcodeflag, scid, status_config, woodcode_config, pcode_config
  1074. INTO :li_statusflag,:li_woodcodeflag,:li_pcodeflag,:ll_scid,:ls_status_config,:ls_woodcode_config,:ls_pcode_config
  1075. FROM u_mtrldef
  1076. Where mtrlid = :ll_mtrlid;
  1077. IF sqlca.SQLCode <> 0 THEN
  1078. rslt = 0
  1079. arg_msg = '查询物料资料失败,' + sqlca.SQLErrText
  1080. GOTO ext
  1081. END IF
  1082. ld_price = 0
  1083. ld_wfjgprice = 0
  1084. ld_outcost_self = 0
  1085. ld_outcost = 0
  1086. ld_wageprice = 0
  1087. ld_otherprice = 0
  1088. ld_eqprice = 0
  1089. arg_msg = ''
  1090. deep = 0
  1091. ifcmpl_1 = True
  1092. ins_cnt = 0
  1093. ins_cl_errcnt = 0
  1094. ins_wf_errcnt = 0
  1095. ins_rl_errcnt = 0
  1096. arg_s_mx = arg_s_empty
  1097. If (li_statusflag = 4 And ls_status <> ls_status_config Or &
  1098. li_woodcodeflag = 4 And ls_woodcode <> ls_woodcode_config Or &
  1099. li_pcodeflag = 4 And ls_pcode <> ls_pcode_config) THEN
  1100. IF uof_get_cost_dz(0,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,arg_msg,arg_s_mx) = 0 THEN
  1101. arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
  1102. // Continue
  1103. ld_price = 0
  1104. ld_wfjgprice = 0
  1105. ld_outcost = 0
  1106. ld_wageprice = 0
  1107. ld_eqprice = 0
  1108. END IF
  1109. ELSE
  1110. IF uof_get_cost(0,ll_scid,ll_mtrlid,ls_mtrlcode,ls_pfcode,1,1,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,0,arg_msg,arg_s_mx,1) = 0 THEN
  1111. arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
  1112. rslt = 0
  1113. GOTO ext
  1114. ld_price = 0
  1115. ld_wfjgprice = 0
  1116. ld_outcost = 0
  1117. ld_wageprice = 0
  1118. ld_eqprice = 0
  1119. END IF
  1120. END IF
  1121. ld_price = Round(ld_price,li_dec)
  1122. ld_wfjgprice = Round(ld_wfjgprice,li_dec)
  1123. ld_outcost = Round(ld_outcost,li_dec)
  1124. ld_wageprice = Round(ld_wageprice,li_dec)
  1125. ld_eqprice = Round(ld_eqprice,li_dec)
  1126. ll_cl_errcnt = ins_cl_errcnt
  1127. ll_wf_errcnt = ins_wf_errcnt
  1128. ll_rl_errcnt = ins_rl_errcnt
  1129. IF if_auto_copy THEN
  1130. SELECT top 1 otherprice INTO :ld_otherprice
  1131. FROM u_mtrlprice_sum
  1132. WHERE mtrlid = :ll_mtrlid
  1133. AND pfcode = :ls_pfcode
  1134. AND sumdate < :sumdate
  1135. AND status = :ls_status
  1136. AND woodcode = :ls_woodcode
  1137. AND pcode = :ls_pcode
  1138. Order By sumdate Desc;
  1139. IF sqlca.SQLCode <> 0 THEN
  1140. arg_msg = '物料:'+ls_mtrlcode+'取上次附加成本失败,'+arg_msg
  1141. rslt = 0
  1142. GOTO ext
  1143. END IF
  1144. IF IsNull(ld_otherprice) THEN ld_otherprice = 0
  1145. END IF
  1146. UPDATE u_mtrlprice_sum
  1147. SET price = :ld_price,
  1148. cost = :ld_price * :ifprice + :ld_wfjgprice * :ifwfjgprice + :ld_wageprice * :ifjgprice + :ld_outcost * :ifoutcost + :ld_otherprice * :ifotherprice + :ld_eqprice * :ifeqprice,
  1149. wfjgprice = :ld_wfjgprice,
  1150. jgprice = :ld_wageprice,
  1151. outcost = :ld_outcost,
  1152. otherprice = :ld_otherprice,
  1153. eqprice = :ld_eqprice,
  1154. dscrp = :arg_msg,
  1155. sumdate = :sumdate,
  1156. cl_errcnt = :ll_cl_errcnt,
  1157. wf_errcnt = :ll_wf_errcnt,
  1158. rl_errcnt = :ll_rl_errcnt
  1159. WHERE mtrlid = :ll_mtrlid
  1160. AND pfcode = :ls_pfcode
  1161. AND (sumdate = :sumdate OR sumdate = 0 )
  1162. AND status = :ls_status
  1163. AND woodcode = :ls_woodcode
  1164. And pcode = :ls_pcode;
  1165. IF sqlca.SQLCode = 0 THEN
  1166. IF sqlca.SQLNRows = 0 THEN
  1167. INSERT INTO u_mtrlprice_sum
  1168. (sumdate,
  1169. pfcode,
  1170. mtrlid,
  1171. price,
  1172. cost,
  1173. wfjgprice,
  1174. jgprice,
  1175. eqprice,
  1176. outcost,
  1177. otherprice,
  1178. dscrp,
  1179. status,
  1180. woodcode,
  1181. pcode,
  1182. cl_errcnt,
  1183. wf_errcnt,
  1184. rl_errcnt)
  1185. VALUES(:sumdate,
  1186. :ls_pfcode,
  1187. :ll_mtrlid,
  1188. :ld_price,
  1189. :ld_price * :ifprice + :ld_wfjgprice * :ifwfjgprice + :ld_wageprice * :ifjgprice + :ld_outcost * :ifoutcost + :ld_otherprice * :ifotherprice + :ld_eqprice * :ifeqprice,
  1190. :ld_wfjgprice,
  1191. :ld_wageprice,
  1192. :ld_eqprice,
  1193. :ld_outcost,
  1194. :ld_otherprice,
  1195. :arg_msg,
  1196. :ls_status,
  1197. :ls_woodcode,
  1198. :ls_pcode,
  1199. :ll_cl_errcnt,
  1200. :ll_wf_errcnt,
  1201. :ll_rl_errcnt);
  1202. IF sqlca.SQLCode <> 0 THEN
  1203. ROLLBACK;
  1204. arg_msg = '新增物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
  1205. rslt = 0
  1206. GOTO ext
  1207. END IF
  1208. END IF
  1209. ELSE
  1210. ROLLBACK;
  1211. arg_msg = '更新物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
  1212. rslt = 0
  1213. GOTO ext
  1214. END IF
  1215. DELETE FROM u_mtrlprice_mx
  1216. WHERE mtrlid = :ll_mtrlid
  1217. AND pfcode = :ls_pfcode
  1218. AND status = :ls_status
  1219. AND woodcode = :ls_woodcode
  1220. And pcode = :ls_pcode;
  1221. IF sqlca.SQLCode <> 0 THEN
  1222. ROLLBACK;
  1223. arg_msg = '删除物料:'+ls_mtrlcode+'原成本组成明细失败,'+sqlca.SQLErrText
  1224. rslt = 0
  1225. GOTO ext
  1226. END IF
  1227. FOR ll_i = 1 To UpperBound(arg_s_mx)
  1228. UPDATE u_mtrlprice_mx
  1229. SET price = price + :arg_s_mx[ll_i].price,
  1230. wfjgprice = wfjgprice + :arg_s_mx[ll_i].wfjgprice,
  1231. jgprice = jgprice + :arg_s_mx[ll_i].jgprice,
  1232. outcost = outcost + :arg_s_mx[ll_i].outcost,
  1233. eqprice = eqprice + :arg_s_mx[ll_i].eqprice,
  1234. qty = qty + :arg_s_mx[ll_i].qty
  1235. WHERE mtrlid = :ll_mtrlid
  1236. AND pfcode = :ls_pfcode
  1237. AND status = :ls_status
  1238. AND woodcode = :ls_woodcode
  1239. AND pcode = :ls_pcode
  1240. And sonmtrlid = :arg_s_mx[ll_i].sonmtrlid;
  1241. IF sqlca.SQLCode = 0 THEN
  1242. IF sqlca.SQLNRows = 0 THEN
  1243. INSERT INTO u_mtrlprice_mx
  1244. (mtrlid,
  1245. pfcode,
  1246. status,
  1247. woodcode,
  1248. pcode,
  1249. sonmtrlid,
  1250. price,
  1251. wfjgprice,
  1252. jgprice,
  1253. outcost,
  1254. eqprice,
  1255. qty)
  1256. VALUES (:ll_mtrlid,
  1257. :ls_pfcode,
  1258. :ls_status,
  1259. :ls_woodcode,
  1260. :ls_pcode,
  1261. :arg_s_mx[ll_i].sonmtrlid,
  1262. :arg_s_mx[ll_i].price,
  1263. :arg_s_mx[ll_i].wfjgprice,
  1264. :arg_s_mx[ll_i].jgprice,
  1265. :arg_s_mx[ll_i].outcost,
  1266. :arg_s_mx[ll_i].eqprice,
  1267. :arg_s_mx[ll_i].qty);
  1268. IF sqlca.SQLCode <> 0 THEN
  1269. ROLLBACK;
  1270. arg_msg = '物料:'+ls_mtrlcode+'插入成本组成明细失败,'+sqlca.SQLErrText
  1271. rslt = 0
  1272. GOTO ext
  1273. END IF
  1274. END IF
  1275. ELSE
  1276. ROLLBACK;
  1277. arg_msg = '更新物料:'+ls_mtrlcode+'成本组成明细失败,'+sqlca.SQLErrText
  1278. rslt = 0
  1279. GOTO ext
  1280. END IF
  1281. NEXT
  1282. COMMIT;
  1283. IF uof_add_mtrlprice_mx(sumdate,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ls_pfcode,arg_s_mx,arg_msg) = 0 THEN
  1284. arg_msg = '更新物料:'+ls_mtrlcode+'历史物料清单及工价表失败,'+arg_msg
  1285. rslt = 0
  1286. GOTO ext
  1287. END IF
  1288. ext:
  1289. RETURN rslt
  1290. end function
  1291. on uo_cmplcost.create
  1292. call super::create
  1293. TriggerEvent( this, "constructor" )
  1294. end on
  1295. on uo_cmplcost.destroy
  1296. TriggerEvent( this, "destructor" )
  1297. call super::destroy
  1298. end on
  1299. event constructor;String str_optionvalue,arg_msg
  1300. f_get_sys_option_value('089',str_optionvalue,arg_msg)
  1301. uo_option_produce_dec = Long(str_optionvalue)
  1302. f_get_sys_option_value('362',str_optionvalue,arg_msg)
  1303. uo_option_cost_notax = long(str_optionvalue)
  1304. f_get_sys_option_value('365',str_optionvalue,arg_msg)
  1305. uo_option_pfmrp_ifuse_mtrlmrparg = long(str_optionvalue)
  1306. end event