12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526 |
- $PBExportHeader$uo_cmplcost.sru
- forward
- global type uo_cmplcost from nonvisualobject
- end type
- end forward
- global type uo_cmplcost from nonvisualobject
- end type
- global uo_cmplcost uo_cmplcost
- type variables
- Long deep = 0
- Boolean ifcmpl_1 = False
- Int uo_option_produce_dec,uo_option_cost_notax
- Int uo_option_pfmrp_ifuse_mtrlmrparg
- long ins_cnt = 0
- long ins_cl_errcnt = 0,ins_wf_errcnt = 0,ins_rl_errcnt = 0
- end variables
- forward prototypes
- 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)
- 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)
- 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)
- 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[])
- 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)
- 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)
- 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)
- end prototypes
- 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
- Decimal ld_f_rice
- SELECT isnull(sum(u_mtrl_cost.cost),0) INTO :ld_f_rice
- FROM u_mtrl_cost
- Where u_mtrl_cost.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询:'+arg_mtrlcode+'分摊费用成本失败,'+sqlca.sqlerrtext
- rslt = 0
- GOTO ext
- END IF
- IF IsNull(arg_f_price) THEN arg_f_price = 0
- arg_f_price = ld_f_rice * arg_qty
- ext:
- RETURN rslt
- end function
- 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
- Decimal ld_wageprice
- Int li_statusflag
- Long ll_dftwrkgrpid
- String ls_wpcode
- Long ll_rl_errcnt = 0
- Select statusflag,dftwrkgrpid Into :li_statusflag,:ll_dftwrkgrpid
- From u_mtrldef
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode <> 0 Then
- MessageBox('Error','查询物料是否使用组合配置及默认生产车间失败,'+sqlca.SQLErrText)
- Return 0
- End If
- Select wpcode Into :ls_wpcode
- From u_mtrl_workprice
- Where mtrlid = :arg_mtrlid
- And ifdft = 1;
- If sqlca.SQLCode = 100 Then
- Select top 1 wpcode Into :ls_wpcode
- From u_mtrl_workprice
- Where mtrlid = :arg_mtrlid
- And wrkid = :ll_dftwrkgrpid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
- rslt = 0
- Goto ext
- End If
- ElseIf sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
- rslt = 0
- Goto ext
- End If
- If li_statusflag <> 2 Then arg_status = ''
- Select sum(u_sc_workprice.workprice * u_sc_workprice.workqty) Into :ld_wageprice
- From u_sc_workprice
- Where u_sc_workprice.ifownpro = 0
- And u_sc_workprice.mtrlid = :arg_mtrlid
- And u_sc_workprice.wpcode = :ls_wpcode
- And u_sc_workprice.status = :arg_status
- And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftjj = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '');
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'本厂工价失败'
- rslt = 0
- Goto ext
- End If
- Select count(*)
- Into :ll_rl_errcnt
- From u_sc_workprice
- Where u_sc_workprice.ifownpro = 0
- And u_sc_workprice.mtrlid = :arg_mtrlid
- And u_sc_workprice.wpcode = :ls_wpcode
- And u_sc_workprice.status = :arg_status
- And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftjj = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
- And u_sc_workprice.workprice = 0;
- If sqlca.SQLCode = 0 Then
- ins_rl_errcnt = ins_rl_errcnt + ll_rl_errcnt
- End If
- If IsNull(ld_wageprice) Then ld_wageprice = 0
- arg_wageprice = ld_wageprice * arg_qty
- ext:
- Return rslt
- end function
- 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
- Int li_statusflag,li_equiptype,li_issuliao
- Decimal ld_eqprice = 0,ld_eqprice_suliao = 0
- Decimal ld_period,ld_Cost_Elec_Degree,ld_depreciation_cost
- Decimal ld_sbcost,ld_glcost ,ld_ectcost,ld_modelqty = 1
- Long ll_macnt
- string ls_wpcode
- long ll_dftwrkgrpid
- SELECT statusflag,equiptype,issuliao,dftwrkgrpid
- INTO :li_statusflag,:li_equiptype,:li_issuliao,:ll_dftwrkgrpid
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料'+arg_mtrlcode+'相关信息失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT wpcode INTO :ls_wpcode
- FROM u_mtrl_workprice
- WHERE mtrlid = :arg_mtrlid
- and ifdft = 1;
- IF sqlca.SQLCode = 100 THEN
- SELECT top 1 wpcode INTO :ls_wpcode
- FROM u_mtrl_workprice
- WHERE mtrlid = :arg_mtrlid
- And wrkid = :ll_dftwrkgrpid;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
- rslt = 0
- GOTO ext
- END IF
- ELSEIF sqlca.SQLCode = -1 THEN
- arg_msg = '查询物料:'+arg_mtrlcode+'默认工价表失败'
- rslt = 0
- GOTO ext
- END IF
- //查询本厂机台数量,用于计算管理成本
- SELECT count(*) INTO :ll_macnt
- FROM u_workgroup
- WHERE mode = 1
- And ifm = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询机台数量失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF li_statusflag = 2 And Trim(arg_status) <> '' THEN
- IF li_equiptype = 0 THEN
- SELECT sum(u_sc_workprice.eqworkhour * u_Equipment_type.zjamt * 60)
- INTO :ld_eqprice
- FROM u_sc_workprice INNER JOIN
- u_Equipment_type ON u_sc_workprice.EquipmentID = u_Equipment_type.typeid
- WHERE u_sc_workprice.mtrlid = :arg_mtrlid
- And u_sc_workprice.status = :arg_status
- and u_sc_workprice.wpcode = :ls_wpcode;
- IF sqlca.SQLCode <> 0 THEN
- ld_eqprice = 0
- END IF
- ELSE
- SELECT sum(u_mtrl_wkp_tech_mx.eqworkhour_minute * u_Equipment_type.zjamt)
- INTO :ld_eqprice
- FROM u_mtrl_wkp_tech_mx INNER JOIN
- u_mtrl_wkp_tech ON u_mtrl_wkp_tech_mx.mtrlid = u_mtrl_wkp_tech.mtrlid AND
- u_mtrl_wkp_tech_mx.printid = u_mtrl_wkp_tech.printid INNER JOIN
- u_Equipment_type ON u_mtrl_wkp_tech.equipmenttypeid = u_Equipment_type.typeid
- WHERE u_mtrl_wkp_tech_mx.mtrlid = :arg_mtrlid
- And u_mtrl_wkp_tech_mx.pzname = :arg_status;
- IF sqlca.SQLCode <> 0 THEN
- ld_eqprice = 0
- END IF
- END IF
- ELSE
- IF li_equiptype = 0 THEN
- SELECT sum(u_sc_workprice.eqworkhour * u_Equipment_type.zjamt * 60)
- INTO :ld_eqprice
- FROM u_sc_workprice INNER JOIN
- u_Equipment_type ON u_sc_workprice.EquipmentID = u_Equipment_type.typeid
- Where u_sc_workprice.mtrlid = :arg_mtrlid
- and u_sc_workprice.wpcode = :ls_wpcode;
- IF sqlca.SQLCode <> 0 THEN
- ld_eqprice = 0
- END IF
- ELSE
- SELECT sum(u_mtrl_wkp_tech.eqworkhour_minute * u_Equipment_type.zjamt)
- INTO :ld_eqprice
- FROM u_mtrl_wkp_tech INNER JOIN
- u_Equipment_type ON u_mtrl_wkp_tech.equipmenttypeid = u_Equipment_type.typeid
- Where u_mtrl_wkp_tech.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- ld_eqprice = 0
- END IF
- END IF
- END IF
- IF li_issuliao = 1 THEN
- SELECT top 1 u_model_mtrl.modelqty
- INTO :ld_modelqty
- FROM u_model_mtrl
- WHERE u_model_mtrl.mtrlid = :arg_mtrlid
- Order By u_model_mtrl.ifdft Desc;
- IF sqlca.SQLCode <> 0 THEN
- ld_modelqty = 1
- END IF
-
- IF IsNull(ld_modelqty) THEN ld_modelqty = 0
- IF ld_modelqty = 0 THEN ld_modelqty = 1
-
- SELECT u_mtrldef_sl.period,
- U_Equipment_Manage.Cost_Elec_Degree,
- U_Equipment_Manage.depreciation_cost
- INTO :ld_period,
- :ld_Cost_Elec_Degree,
- :ld_depreciation_cost
- FROM u_mtrldef_sl INNER JOIN
- U_Equipment_Manage ON
- u_mtrldef_sl.equipmentid = U_Equipment_Manage.EquipmentID
- Where u_mtrldef_sl.mtrlid = :arg_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- ld_eqprice_suliao = 0
- ELSE
- IF IsNull(ld_period) THEN ld_period = 0
- IF IsNull(ld_Cost_Elec_Degree) THEN ld_Cost_Elec_Degree = 0
- IF IsNull(ld_depreciation_cost) THEN ld_depreciation_cost = 0
-
- IF ld_depreciation_cost = 0 THEN
- ld_sbcost = 0
- ELSE
- ld_sbcost = (ld_period / ld_modelqty / 3600) * ld_depreciation_cost
- END IF
-
- IF ll_macnt = 0 THEN
- ld_glcost = 0
- ELSE
- ld_glcost = (sys_option_management_cost / 30 / ll_macnt / 24 ) * (ld_period / ld_modelqty / 3600)
- END IF
-
- ld_ectcost = (ld_Cost_Elec_Degree / 3600) * (ld_period / ld_modelqty) * sys_option_ect_price
- END IF
-
- END IF
- IF IsNull(ld_eqprice) THEN ld_eqprice = 0
- ld_eqprice = ld_eqprice + ld_sbcost + ld_glcost + ld_ectcost
- ext:
- IF IsNull(ld_eqprice) THEN ld_eqprice = 0
- arg_eqprice = ld_eqprice * arg_qty
- RETURN rslt
- end function
- 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
- Long ll_orderid,ll_scid,ll_i,ll_lp
- Int li_ifnext = 0,li_Mtrlorigin
- Decimal ld_orderqty,ld_qty
- Decimal ld_price,ld_mprice,ld_wageprice,ld_eqprice,ld_outcost
- Decimal ld_jgamt , ld_jgqty,ld_jgamt_notax
- Long ll_mtrlid
- Decimal ld_mxprice,ld_mxjgprice,ld_mxeqprice
- datastore ds_tree
- ds_tree = Create datastore
- ds_tree.DataObject = 'ds_orderrqmtrl_tree_cmp_cost'
- ds_tree.SetTransObject(sqlca)
- SELECT top 1 orderid ,scid,orderqty
- INTO :ll_orderid,:ll_scid,:ld_orderqty
- FROM u_order_ml
- WHERE ordertype <> 4
- AND status <> 0
- AND mtrlid = :arg_mtrlid
- AND status_mode = :arg_status
- AND woodcode = :arg_woodcode
- AND pcode = :arg_pcode
- Order By ordercode Desc;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '统计部件选配项与标准值不相等,需要用相关生产计划用料明细进行核算,但产品配置无排过生产计划,所以不能核算'
- GOTO ext
- END IF
- IF arg_pricetype = 0 THEN
- SELECT sum(v_maxprice_sptprice.price * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
- INTO :ld_price
- FROM u_OrderRqMtrl_scll INNER JOIN
- u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
- v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- AND ( u_order_ml.scid = :ll_scid)
- And ( u_mtrldef.Mtrlorigin = 2);
- IF sqlca.SQLCode <> 0 THEN
- IF sqlca.SQLCode = 100 THEN
- ld_price = 0
- ELSE
- arg_msg = '查询材料成本失败(最新价),'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
-
-
- //ELSE
- // SELECT sum(isnull(v_mtrlcost.price,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
- // INTO :ld_price
- // FROM u_OrderRqMtrl_scll INNER JOIN
- // u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- // u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- // u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
- // (SELECT CASE SUM(u_mtrlware.noallocqty) WHEN 0 THEN MAX(u_mtrlware.cost)
- // ELSE SUM(u_mtrlware.wareamt) / SUM(u_mtrlware.noallocqty) END AS price,
- // u_mtrlware.mtrlid
- // FROM u_mtrlware INNER JOIN
- // u_storage ON u_mtrlware.storageid = u_storage.storageid
- // WHERE (u_storage.Mtrlprp <> 3) AND (u_storage.inuse = 1)
- // GROUP BY u_mtrlware.mtrlid) v_mtrlcost ON
- // u_mtrldef.mtrlid = v_mtrlcost.mtrlid
- // WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- // AND ( u_order_ml.scid = :ll_scid)
- // And ( u_mtrldef.Mtrlorigin = 2);
- // IF sqlca.SQLCode <> 0 THEN
- // IF sqlca.SQLCode = 100 THEN
- // ld_price = 0
- // ELSE
- // arg_msg = '查询材料成本失败(库存成本价),'+sqlca.SQLErrText
- // rslt = 0
- // GOTO ext
- // END IF
- // END IF
- //END IF
-
- SELECT sum( v_maxprice_sptprice.price * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
- INTO :ld_mprice
- FROM u_OrderRqMtrl_scll INNER JOIN
- u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
- v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- AND ( u_order_ml.scid = :ll_scid)
- And ( u_mtrldef.Mtrlorigin = 3);
- IF sqlca.SQLCode <> 0 THEN
- IF sqlca.SQLCode = 100 THEN
- ld_mprice = 0
- ELSE
- arg_msg = '查询外协成本失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
-
-
- DECLARE cur_buy CURSOR FOR
- SELECT u_OrderRqMtrl_scll.MtrlID,
- u_mtrldef.Mtrlorigin,
- isnull(v_maxprice_sptprice.price,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty),
- u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty
- FROM u_OrderRqMtrl_scll INNER JOIN
- u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
- v_maxprice_sptprice ON u_mtrldef.mtrlid = v_maxprice_sptprice.mtrlid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- AND ( u_order_ml.scid = :ll_scid)
- And ( u_mtrldef.Mtrlorigin = 2 Or u_mtrldef.Mtrlorigin = 3);
-
- OPEN cur_buy;
-
- FETCH cur_buy Into :ll_mtrlid,:li_Mtrlorigin,:ld_mxprice,:ld_qty;
- DO WHILE sqlca.SQLCode = 0
- ins_cnt++
- arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
- arg_s_mx[ins_cnt].qty = ld_qty
- IF li_Mtrlorigin = 2 THEN
- arg_s_mx[ins_cnt].price = ld_mxprice
- ELSE
- arg_s_mx[ins_cnt].wfjgprice = ld_mxprice
- END IF
- FETCH cur_buy Into :ll_mtrlid,:li_Mtrlorigin,:ld_mxprice,:ld_qty;
- LOOP
-
- CLOSE cur_buy;
-
-
-
- ELSE
- ds_tree.Retrieve(ll_scid,ll_orderid)
-
- FOR ll_i = 1 To ds_tree.RowCount()
-
- IF li_ifnext = 1 THEN
- IF ll_lp < ds_tree.Object.u_orderrqmtrl_tree_lp[ll_i] THEN CONTINUE
- END IF
-
- li_ifnext = 0
-
- IF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 2 Or ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 3 THEN
- ins_cnt++
- arg_s_mx[ins_cnt].SonMtrlid = ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i]
- arg_s_mx[ins_cnt].qty = ds_tree.Object.qty[ll_i]
- END IF
-
- IF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 2 THEN
- ld_price = ld_price + ds_tree.Object.costamt[ll_i]
- arg_s_mx[ins_cnt].price = ds_tree.Object.costamt[ll_i]
-
- ELSEIF ds_tree.Object.u_mtrldef_mtrlorigin[ll_i] = 3 THEN
-
- ld_jgqty = ds_tree.Object.jgqty[ll_i]
-
- IF ld_jgqty > 0 THEN
- IF uo_option_cost_notax = 0 THEN
- ld_mprice = ld_mprice + ld_jgamt / ld_jgqty
- arg_s_mx[ins_cnt].wfjgprice = ld_jgamt / ld_jgqty
- ELSE
- ld_mprice = ld_mprice + ld_jgamt_notax / ld_jgqty
- arg_s_mx[ins_cnt].wfjgprice = ld_jgamt_notax / ld_jgqty
- END IF
-
- ELSE
- ld_price = ld_price + ds_tree.Object.costamt[ll_i]
-
- ll_lp = ds_tree.Object.u_orderrqmtrl_tree_lp[ll_i]
-
- arg_s_mx[ins_cnt].price = ds_tree.Object.costamt[ll_i]
-
- //直接取外协件库存成本,下级不考虑,跳过
- li_ifnext = 1
-
- END IF
- END IF
-
- NEXT
- END IF
- SELECT sum(isnull(u_mtrl_cost.cost,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty))
- INTO :ld_outcost
- FROM u_OrderRqMtrl_scll INNER JOIN
- u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
- u_mtrl_cost ON u_mtrldef.mtrlid = u_mtrl_cost.mtrlid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- AND ( u_order_ml.scid = :ll_scid)
- And ( u_mtrldef.Mtrlorigin = 0);
- IF sqlca.SQLCode <> 0 THEN
- IF sqlca.SQLCode = 100 THEN
- ld_outcost = 0
- ELSE
- arg_msg = '查询费用成本失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
- DECLARE cur_outcost CURSOR FOR
- SELECT u_mtrldef.mtrlid ,
- isnull(u_mtrl_cost.cost,0) * (u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty),
- u_OrderRqMtrl_scll.trueRqqty / u_Order_ml.orderqty
- FROM u_OrderRqMtrl_scll INNER JOIN
- u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND
- u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID INNER JOIN
- u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid INNER JOIN
- u_mtrl_cost ON u_mtrldef.mtrlid = u_mtrl_cost.mtrlid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- AND ( u_order_ml.scid = :ll_scid)
- And ( u_mtrldef.Mtrlorigin = 0);
-
- OPEN cur_outcost;
- FETCH cur_outcost Into :ll_mtrlid,:ld_mxprice,:ld_qty;
- DO WHILE sqlca.SQLCode = 0
- IF ld_mxprice > 0 THEN
- ins_cnt++
- arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
- arg_s_mx[ins_cnt].qty = ld_qty
- arg_s_mx[ins_cnt].outcost = ld_mxprice
- END IF
- FETCH cur_outcost Into :ll_mtrlid,:ld_mxprice,:ld_qty;
- LOOP
- CLOSE cur_outcost;
- SELECT sum(U_OrderRqwp.proqty / u_Order_ml.orderqty * U_OrderRqwp.workPrice),
- sum(ISNULL(u_Equipment_type.zjamt, 0) * U_OrderRqwp.eqworkhour * 60 )
- INTO :ld_wageprice,
- :ld_eqprice
- FROM U_OrderRqwp INNER JOIN
- u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid AND
- U_OrderRqwp.orderid = u_Order_ml.OrderID LEFT OUTER JOIN
- u_Equipment_type ON
- U_OrderRqwp.EquipmentID = u_Equipment_type.typeid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- And ( u_order_ml.scid = :ll_scid);
- IF sqlca.SQLCode <> 0 THEN
- IF sqlca.SQLCode = 100 THEN
- ld_wageprice = 0
- ld_eqprice = 0
- ELSE
- arg_msg = '查询人力成本,费用成本失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
- DECLARE cur_rl CURSOR FOR
- SELECT u_Order_ml.mtrlid,
- U_OrderRqwp.proqty / u_Order_ml.orderqty ,
- U_OrderRqwp.proqty / u_Order_ml.orderqty * U_OrderRqwp.workPrice,
- ISNULL(u_Equipment_type.zjamt, 0) * U_OrderRqwp.eqworkhour * 60
- FROM U_OrderRqwp INNER JOIN
- u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid AND
- U_OrderRqwp.orderid = u_Order_ml.OrderID LEFT OUTER JOIN
- u_Equipment_type ON
- U_OrderRqwp.EquipmentID = u_Equipment_type.typeid
- WHERE ((u_Order_ml.OrderID = :ll_orderid) OR (u_Order_ml.porderid = :ll_orderid))
- And ( u_order_ml.scid = :ll_scid);
-
- OPEN cur_rl;
- FETCH cur_rl Into :ll_mtrlid,:ld_qty,:ld_mxjgprice,:ld_mxeqprice;
- DO WHILE sqlca.SQLCode = 0
- IF ld_mxjgprice > 0 Or ld_mxeqprice > 0 THEN
- ins_cnt++
- arg_s_mx[ins_cnt].SonMtrlid = ll_mtrlid
- arg_s_mx[ins_cnt].qty = ld_qty
- arg_s_mx[ins_cnt].jgprice = ld_mxjgprice
- arg_s_mx[ins_cnt].eqprice = ld_mxeqprice
- END IF
-
- FETCH cur_rl Into :ll_mtrlid,:ld_qty,:ld_mxjgprice,:ld_mxeqprice;
- LOOP
- CLOSE cur_rl;
- IF IsNull(ld_price) THEN ld_price = 0
- IF IsNull(ld_mprice) THEN ld_mprice = 0
- IF IsNull(ld_wageprice) THEN ld_wageprice = 0
- IF IsNull(ld_eqprice) THEN ld_eqprice = 0
- IF IsNull(ld_outcost) THEN ld_outcost = 0
- arg_price = ld_price
- arg_mprice = ld_mprice
- arg_wageprice = ld_wageprice
- arg_eqprice = ld_eqprice
- arg_outcost = ld_outcost
- Destroy ds_tree
- ext:
- RETURN rslt
- end function
- 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
- rslt = 1
- If uo_option_produce_dec = -1000 Then
- rslt = 0
- arg_msg = '选项:[089]生产计划物料运算小数位,读取初始默认值失败,操作取消!'
- Goto ext
- End If
- If uo_option_cost_notax = -1000 Then
- rslt = 0
- arg_msg = '选项:[362]采购外协使用不含税价进仓,读取初始默认值失败,操作取消!'
- Goto ext
- End If
- Decimal Sonscale,SonLoss,SonDECLosS
- Long SonMtrlid,count = 0,ls_i
- String mtrlcode, mtrlname
- s_pfmx ls_s_pfmx[]
- Decimal ld_price,ld_qty,ld_outcost,ld_wageprice,ld_eqprice
- Decimal ld_planprice
- Int li_mtrlorigin,li_statusflag,li_ifpzpf
- Long ll_scid,ll_pzpfcnt
- Decimal ld_cmpqty
- Decimal ld_noallocqty,ld_wareamt
- Long tem_long
- Int li_ifpackpro
- Decimal ld_jgamt,ld_jgamt_notax,ld_jgqty
- Int li_if_wfjg,li_protype,li_ifselforder
- deep++
- If deep > 10000 Then //防止死递归
- arg_msg = '物料:'+arg_mtrlcode+'死循环'
- rslt = 0
- Goto ext
- End If
- Select cmpqty,statusflag,protype,ifselforder
- Into :ld_cmpqty,:li_statusflag,:li_protype,:li_ifselforder
- From u_mtrldef
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode <> 0 Then
- MessageBox('Error','查询物料清单基数及是否使用组合配置失败,'+sqlca.SQLErrText)
- Return 0
- End If
- If li_statusflag = 2 And arg_ifcfg = 0 Then
- ll_pzpfcnt = 0
- Select count(*) Into :ll_pzpfcnt
- From u_mtrl_pf
- Where mtrlid = :arg_mtrlid
- And pfcode = :arg_pfcode
- And ifpzpf = 1;
- If sqlca.SQLCode <> 0 Then
- arg_msg = '查询物料是否启用组合配置清单失败,'+sqlca.SQLErrText
- rslt = 0
- Goto ext
- End If
-
- If ll_pzpfcnt > 0 Then
- li_ifpzpf = 1
- Else
- li_ifpzpf = 0
- End If
- Else
- li_ifpzpf = 0
- End If
- s_mtrlcfg_expr s_mtrlcfg[]
- Long ll_cfg,ll_cnt_s_mtrlcfg,cnt
- //配置运算
- count = 0
- //yyx2013-6-22
- //+整套(空子件)的工价人力成本
- If li_statusflag = 2 And arg_ifcfg = 0 And deep = 1 Then
- ld_wageprice = 0
- If uof_get_wageprice(arg_mtrlid,arg_mtrlcode,'',arg_qty,ld_wageprice,arg_msg) = 0 Then
- rslt = 0
- Goto ext
- End If
- arg_wageprice = arg_wageprice + ld_wageprice
- End If
- //yyx2013-6-22_end
- If li_statusflag = 2 And arg_ifcfg = 0 And li_ifpzpf = 0 Then
- //分解配置
- f_checkpz(arg_pfcode,s_mtrlcfg)
- //
-
- ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg)
- If ll_cnt_s_mtrlcfg = 0 Then
- count = 0
- Else
- For ll_cfg = 1 To ll_cnt_s_mtrlcfg
- count++
- ls_s_pfmx[count].SonMtrlid = arg_mtrlid
- ls_s_pfmx[count].sonpfcode = s_mtrlcfg[ll_cfg].cfgname
- ls_s_pfmx[count].ifcfg = 1
- ls_s_pfmx[count].Sonscale = Dec(s_mtrlcfg[ll_cfg].qty)
- ls_s_pfmx[count].SonLoss = 0
- ls_s_pfmx[count].SonDECLosS = 0
- Next
- End If
-
- If count = 0 Then
- arg_msg = '物料分拆配置失败,请检查配置内容'
- rslt = 0
- Goto ext
- End If
-
- //查询附加常规清单
- cnt = 0
- Select count(*) Into :cnt
- From u_mtrl_pf
- Where ( u_mtrl_pf.mtrlid = :arg_mtrlid )
- And ( u_mtrl_pf.ifdi = 0 )
- And ( u_mtrl_pf.ifdft = 1 );
- If sqlca.SQLCode <> 0 Then
- arg_msg = '查询组合配置产品附加默认清单失败,请检查是否已建立默认清单'
- rslt = 0
- Goto ext
- End If
-
- If cnt > 1 Then
- arg_msg = '组合配置产品附加默认清单只能设置1个,请检查资料'
- rslt = 0
- Goto ext
- End If
-
- If cnt = 1 Then
- Declare pf_cur_dft Cursor For
- Select u_PrdPF.Sonscale,
- u_PrdPF.SonLoss,
- u_PrdPF.SonDECLosS,
- u_PrdPF.SonMtrlid,
- u_mtrldef.mtrlcode,
- u_PrdPF.sonpfcode,0,
- u_mtrldef.mrptype,
- u_mtrldef.mrparg
- From u_PrdPF,u_mtrldef,u_mtrl_pf
- Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
- And ( u_mtrl_pf.ifdi = 0 )
- And ( u_mtrl_pf.ifdft = 1 )
- And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
- And ( u_PrdPF.mtrlid = :arg_mtrlid )
- And ( u_PrdPF.mtrlid = u_mtrldef.mtrlid );
-
- Open pf_cur_dft;
- count++
- Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
- :ls_s_pfmx[count].u_mtrldef_mrparg;
-
- Do While sqlca.SQLCode = 0
- count++
- Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
- :ls_s_pfmx[count].u_mtrldef_mrparg;
- Loop
- count = count - 1
- Close pf_cur_dft;
- End If
- Else
- Declare pf_cur Cursor For
- Select u_PrdPF.Sonscale,
- u_PrdPF.SonLoss,
- u_PrdPF.SonDECLosS,
- u_PrdPF.SonMtrlid,
- u_mtrldef.mtrlcode,
- u_PrdPF.sonpfcode,
- 0,
- u_mtrldef.mrptype,
- u_mtrldef.mrparg
- From u_PrdPF,
- u_mtrldef
- Where ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) And
- ( u_PrdPF.mtrlid = :arg_mtrlid ) And
- ( u_PrdPF.pfcode = :arg_pfcode );
-
- Open pf_cur;
- count = 1
- Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
- :ls_s_pfmx[count].u_mtrldef_mrparg;
-
- Do While sqlca.SQLCode = 0
- count++
- Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
- :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
- :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].ifcfg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
- :ls_s_pfmx[count].u_mtrldef_mrparg;
- Loop
- count = count - 1
- Close pf_cur;
- End If
- //***查询最新采购价
- If (arg_lp > 1 Or ifcmpl_1) And Not (li_statusflag = 2 And arg_ifcfg = 0) Then
-
- Select mtrlorigin,scid,ifpackpro
- Into :li_mtrlorigin,:ll_scid,:li_ifpackpro
- From u_mtrldef
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode <> 0 Then
- arg_msg = '查询:'+arg_mtrlcode+'来源失败'
- rslt = 0
- Goto ext
- End If
-
- Select planprice Into :ld_planprice
- From u_mtrldef_planprice
- Where mtrlid = :arg_mtrlid
- And status = ''
- And woodcode = ''
- And pcode = '';
- If sqlca.SQLCode <> 0 Then
- ld_planprice = 0
- End If
-
- ins_cnt++
- arg_s_mx[ins_cnt].SonMtrlid = arg_mtrlid
- arg_s_mx[ins_cnt].qty = arg_qty
-
-
- Choose Case li_mtrlorigin
- Case 2,3
-
- If arg_pricetype = 0 Then
- If uo_option_cost_notax = 0 Then
- Select Case when price = 0 Then price_bj Else price End Into :ld_price
- From v_maxprice_sptprice
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- Else
- Select price_notax Into :ld_price
- From v_maxprice_sptprice_notax
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- End If
- Else
- If li_mtrlorigin = 3 Then
-
- Select SUM(ow_wfjgmx_in_aft.jgprice * ow_wfjgmx_in_aft.uqty * ow_wfjgmx_in_aft.rebate) ,
- SUM((ow_wfjgmx_in_aft.jgprice * ow_wfjgmx_in_aft.uqty * ow_wfjgmx_in_aft.rebate) / (1 + ow_wfjgmx_in_aft.taxrate)),
- sum(ow_wfjgmx_in_aft.uqty)
- Into :ld_jgamt,
- :ld_jgamt_notax,
- :ld_jgqty
- From (Select u_inware.relid, u_inwaremx.mtrlid, u_inwaremx.printid, u_inware.storageid,
- u_inware.balcdateint
- From u_inware Inner JOIN
- u_inwaremx ON u_inware.scid = u_inwaremx.scid And
- u_inware.inwareid = u_inwaremx.inwareid
- Where (u_inware.billtype = 4)) v_inware Inner JOIN
- (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint
- From u_warebalc
- Where (balcdateint > 0)
- Group By Storageid) v_balcint ON v_inware.storageid = v_balcint.Storageid And
- v_inware.balcdateint = v_balcint.balcdateint Inner JOIN
- ow_wfjgmx_in_aft ON v_inware.relid = ow_wfjgmx_in_aft.inwareid And
- v_inware.printid = ow_wfjgmx_in_aft.printid
- Where (ow_wfjgmx_in_aft.mtrlid = :arg_mtrlid);
- If sqlca.SQLCode <> 0 Then
- li_if_wfjg = 0
- Else
- If IsNull(ld_jgamt) Then ld_jgamt = 0
- If IsNull(ld_jgamt_notax) Then ld_jgamt_notax = 0
- If IsNull(ld_jgqty) Then ld_jgqty = 0
-
- If ld_jgqty = 0 Then
- li_if_wfjg = 0
- Else
- li_if_wfjg = 1
- End If
- End If
-
- If li_if_wfjg = 1 Then
- If uo_option_cost_notax = 0 Then
- ld_price = ld_jgamt / ld_jgqty
- Else
- ld_price = ld_jgamt_notax / ld_jgqty
- End If
- End If
-
- End If
-
- If li_mtrlorigin = 2 Or (li_mtrlorigin = 3 And li_if_wfjg = 0) Then
- Select sum(u_mtrlware.noallocqty),
- sum(u_mtrlware.wareamt)
- Into :ld_noallocqty,
- :ld_wareamt
- From u_mtrlware Inner JOIN
- u_storage ON u_mtrlware.storageid = u_storage.storageid
- Where (u_storage.Mtrlprp <> 3)
- And (u_storage.inuse = 1)
- And (u_mtrlware.mtrlid = :arg_mtrlid) ;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新成本价失败(总库存量),'+sqlca.SQLErrText
- rslt = 0
- Goto ext
- End If
-
- If IsNull(ld_noallocqty) Then ld_noallocqty = 0
- If IsNull(ld_wareamt) Then ld_wareamt = 0
-
- If ld_noallocqty = 0 Then
- Select top 1 u_mtrlware.cost
- Into :ld_price
- From u_mtrlware Inner JOIN
- u_storage ON u_mtrlware.storageid = u_storage.storageid
- Where (u_storage.Mtrlprp <> 3)
- And (u_storage.inuse = 1)
- And (u_mtrlware.mtrlid = :arg_mtrlid)
- Order By u_mtrlware.cost Desc;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新成本价失败,'+sqlca.SQLErrText
- rslt = 0
- Goto ext
- ElseIf sqlca.SQLCode = 100 Or ld_price = 0 Then
-
- li_if_wfjg = 1
-
- If uo_option_cost_notax = 0 Then
- Select price Into :ld_price
- From v_maxprice_sptprice
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- Else
- Select price_notax Into :ld_price
- From v_maxprice_sptprice_notax
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- End If
- End If
- Else
- ld_price = ld_wareamt / ld_noallocqty
-
- If ld_wareamt = 0 Then
- li_if_wfjg = 1
-
- If uo_option_cost_notax = 0 Then
- Select price Into :ld_price
- From v_maxprice_sptprice
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- Else
- Select price_notax Into :ld_price
- From v_maxprice_sptprice_notax
- Where mtrlid = :arg_mtrlid;
- If sqlca.SQLCode = -1 Then
- arg_msg = '查询物料:'+arg_mtrlcode+'最新采购价或最新外加工单价失败'
- rslt = 0
- Goto ext
- End If
- End If
- End If
- End If
- End If
- End If
-
- If IsNull(ld_price) Then ld_price = 0
-
- If li_mtrlorigin = 3 Then
- If arg_pricetype = 0 Or li_if_wfjg = 1 Then
- arg_mprice = arg_mprice + ld_price * arg_qty
-
- arg_s_mx[ins_cnt].wfjgprice = ld_price * arg_qty
-
- If ld_price = 0 Then ins_wf_errcnt++
- Else
- arg_price = arg_price + ld_price * arg_qty
-
- arg_s_mx[ins_cnt].price = ld_price * arg_qty
- If ld_price = 0 Then ins_cl_errcnt++
- rslt = 1
- Goto ext
- End If
-
- End If
-
- If li_mtrlorigin = 2 And (li_ifpackpro = 0 Or count = 0) Then
- arg_price = arg_price + ld_price * arg_qty
-
- arg_s_mx[ins_cnt].price = ld_price * arg_qty
-
- If ld_price = 0 Then ins_cl_errcnt++
-
-
- rslt = 1
- Goto ext
- End If
-
- Case 0
- If arg_scid <> ll_scid Then
- arg_price = arg_price + ld_planprice * arg_qty
-
- arg_s_mx[ins_cnt].price = ld_planprice * arg_qty
- If ld_planprice = 0 Then ins_cl_errcnt++
- rslt = 1
- Goto ext
- Else
- //计算分摊费用
- If uof_get_f_price(arg_mtrlid,arg_mtrlcode,arg_qty,ld_outcost,arg_msg) = 0 Then
- rslt = 0
- Goto ext
- End If
-
- arg_outcost = arg_outcost + ld_outcost
-
- arg_s_mx[ins_cnt].outcost = ld_outcost
-
- //计算人工
- If li_ifselforder = 0 And arg_protype = 0 Then
- ld_wageprice = 0
- Else
- If uof_get_wageprice(arg_mtrlid,arg_mtrlcode,arg_pfcode,arg_qty,ld_wageprice,arg_msg) = 0 Then
- rslt = 0
- Goto ext
- End If
- End If
- arg_wageprice = arg_wageprice + ld_wageprice
-
- arg_s_mx[ins_cnt].jgprice = ld_wageprice
-
- //计算设备成本
- If uof_get_equipprice(arg_mtrlid,arg_mtrlcode,arg_pfcode,arg_qty,ld_eqprice,arg_msg) = 0 Then
- rslt = 0
- Goto ext
- End If
- arg_eqprice = arg_eqprice + ld_eqprice
-
- arg_s_mx[ins_cnt].eqprice = ld_eqprice
- End If
- End Choose
- End If
- For ls_i = 1 To count
- // 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)
-
- If uo_option_pfmrp_ifuse_mtrlmrparg = 0 Then
- If ls_s_pfmx[ls_i].u_mtrldef_mrptype = 0 Then
- 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)
- Else
- If ls_s_pfmx[ls_i].u_mtrldef_mrparg = 0 Then
- 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)
- Else
- tem_long = 10^ls_s_pfmx[ls_i].u_mtrldef_mrparg
-
- 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
- ld_qty = Round(ld_qty , ls_s_pfmx[ls_i].u_mtrldef_mrparg)
- End If
- End If
- Else
- 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)
- End If
-
- If uof_get_cost(arg_pricetype,arg_scid,ls_s_pfmx[ls_i].SonMtrlid,ls_s_pfmx[ls_i].mtrlcode,&
- ls_s_pfmx[ls_i].sonpfcode,ld_qty,arg_lp+1,arg_price,arg_mprice,arg_outcost,&
- arg_wageprice,arg_eqprice,ls_s_pfmx[ls_i].ifcfg,arg_msg,arg_s_mx,li_protype) = 0 Then
- rslt = 0
- Goto ext
- End If
- Next
- ext:
- Return rslt
- end function
- 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
- String ls_wpcode
- uo_mtrl_pf uo_pf
- uo_workpricetable u_wrkprice
- uo_pf = create uo_mtrl_pf
- u_wrkprice = create uo_workpricetable
- If uo_pf.f_clearprdpfmx(arg_mtrlid,arg_pfcode,arg_msg,False) = 0 Then
- rslt = 0
- Goto ext
- End If
- uo_pf.deep_count = 0
- uo_pf.il_printid = 0
- If uo_pf.f_cmpprdpf(arg_mtrlid,arg_mtrlid,arg_pfcode,arg_pfcode,1,1,1,arg_msg,False,0) = 0 Then
- rslt = 0
- Goto ext
- End If
- Delete From u_mtrlprice_prdpfmx
- Where mtrlid = :arg_mtrlid
- And pfcode = :arg_pfcode
- And sumdate = :arg_sumdate;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '删除旧数据失败(物料清单用料列表),'+sqlca.SQLErrText
- Goto ext
- End If
- Insert Into u_mtrlprice_prdpfmx
- (mtrlid, pfcode, printid, pfgroup, SonMtrlid, Sonscale, SonLoss, SonDECLosS,
- Sonahead, dscrp, pfgroupqty, pfgroupmode, promode, wrkgrpid, status, sonflag,
- grade, woodcode, pcode, realqty, pfklmode, sonpfcode, upmtrlid, uprealqty, wenli,
- fengbian, paikong, luoji, penyou,sumdate)
- Select mtrlid, pfcode, printid, pfgroup, SonMtrlid, Sonscale, SonLoss, SonDECLosS,
- Sonahead, dscrp, pfgroupqty, pfgroupmode, promode, wrkgrpid, status, sonflag,
- grade, woodcode, pcode, realqty, pfklmode, sonpfcode, upmtrlid, uprealqty, wenli,
- fengbian, paikong, luoji, penyou,:arg_sumdate
- From u_PrdPF_mx
- Where mtrlid = :arg_mtrlid
- And pfcode = :arg_pfcode;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '插入物料清单用料列表失败,'+sqlca.SQLErrText
- Goto ext
- End If
- //更新用料价格
- Update u_mtrlprice_prdpfmx
- Set price = v_mx.price
- From u_mtrlprice_prdpfmx Inner JOIN
- (Select u_mtrlprice_mx.mtrlid, u_mtrlprice_mx.pfcode, u_mtrlprice_mx.sonmtrlid,
- CASE u_mtrlprice_mx.qty WHEN 0 THEN 0 ELSE CASE u_mtrldef.Mtrlorigin WHEN
- 2 THEN u_mtrlprice_mx.price / u_mtrlprice_mx.qty WHEN 3 THEN u_mtrlprice_mx.wfjgprice
- / u_mtrlprice_mx.qty ELSE 0 END END AS price
- From u_mtrlprice_mx Inner JOIN
- u_mtrldef ON u_mtrlprice_mx.sonmtrlid = u_mtrldef.mtrlid
- Where (u_mtrldef.Mtrlorigin = 2 Or u_mtrldef.Mtrlorigin = 3)
- And u_mtrlprice_mx.mtrlid = :arg_mtrlid
- And u_mtrlprice_mx.pfcode = :arg_pfcode
- And u_mtrlprice_mx.status = :arg_status
- And u_mtrlprice_mx.woodcode = :arg_woodcode
- And u_mtrlprice_mx.pcode = :arg_pcode) v_mx ON
- u_mtrlprice_prdpfmx.mtrlid = v_mx.mtrlid And
- u_mtrlprice_prdpfmx.pfcode = v_mx.pfcode COLLATE Chinese_PRC_CI_AS And
- u_mtrlprice_prdpfmx.SonMtrlid = v_mx.sonmtrlid
- Where u_mtrlprice_prdpfmx.mtrlid = :arg_mtrlid
- And u_mtrlprice_prdpfmx.pfcode = :arg_pfcode
- and u_mtrlprice_prdpfmx.sumdate = :arg_sumdate;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '插入物料清单用料列表单价失败,'+sqlca.SQLErrText
- Goto ext
- End If
- //工价表
- Select wpcode Into :ls_wpcode
- From u_mtrl_workprice
- Where mtrlid = :arg_mtrlid
- And ifdft = 1;
- If sqlca.SQLCode <> 0 Then
- arg_msg = '查询物料默认工价表失败'
- rslt = 0
- Goto ext
- End If
- u_wrkprice.mtrlid = arg_mtrlid
- If u_wrkprice.f_clearpfmx(arg_mtrlid,ls_wpcode,arg_msg,False) = 0 Then
- rslt = 0
- Goto ext
- End If
- //插入自身工价表
- u_wrkprice.deep_count = 0
- u_wrkprice.il_printid = 0
- If u_wrkprice.f_addworkprice(arg_mtrlid,ls_wpcode,arg_msg,False) = 0 Then
- rslt = 0
- Goto ext
- End If
- //插入下级自制物料工价表
- If u_wrkprice.f_addpfmx(arg_mtrlid,ls_wpcode,arg_pfcode,1,1,arg_msg,False,1) = 0 Then
- rslt = 0
- Goto ext
- End If
- Delete From u_mtrlprice_wpmx
- Where parentmtrlid = :arg_mtrlid
- And sumdate = :arg_sumdate;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '删除旧数据失败(全套工价),'+sqlca.SQLErrText
- Goto ext
- End If
- Insert Into u_mtrlprice_wpmx
- (parentmtrlid, printid, wpcode, wrkid, mtrlid, proid, proorder, procode, proname,
- wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, auditflag,
- auditrep, auditdate, Lastflag, lp, status, ifjd, sumdate)
- Select parentmtrlid, printid, wpcode, wrkid, mtrlid, proid, proorder, procode, proname,
- wrkgrpid, workprice, workqty, worklevel, techlevel, workhour, dscrp, auditflag,
- auditrep, auditdate, Lastflag, lp, status, ifjd, :arg_sumdate
- From u_sc_workprice_mx
- Where parentmtrlid = :arg_mtrlid;
- If sqlca.SQLCode <> 0 Then
- rslt = 0
- arg_msg = '插入全套工价失败,'+sqlca.SQLErrText
- Goto ext
- End If
- ext:
- destroy uo_pf
- destroy u_wrkprice
- If rslt = 1 Then
- Commit;
- ElseIf rslt = 0 Then
- Rollback;
- End If
- Return rslt
- end function
- 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
- Long li_statusflag, li_woodcodeflag, li_pcodeflag, ll_scid
- String ls_status_config, ls_woodcode_config, ls_pcode_config
- String ls_mtrlcode
- Decimal ld_price, ld_wfjgprice, ld_outcost_self, ld_outcost, ld_wageprice, ld_otherprice, ld_eqprice
- s_mtrlprice_mx arg_s_mx[],arg_s_empty[]
- Long ll_cl_errcnt,ll_wf_errcnt,ll_rl_errcnt
- Long ll_i
- Long sumdate
- sumdate = Year(Date(Today())) * 10000 + Month(Date(Today())) * 100 + Day(Date(Today()))
- IF ls_pfcode = '' THEN
- GOTO ext
- END IF
- SELECT statusflag, woodcodeflag, pcodeflag, scid, status_config, woodcode_config, pcode_config
- INTO :li_statusflag,:li_woodcodeflag,:li_pcodeflag,:ll_scid,:ls_status_config,:ls_woodcode_config,:ls_pcode_config
- FROM u_mtrldef
- Where mtrlid = :ll_mtrlid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料资料失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ld_price = 0
- ld_wfjgprice = 0
- ld_outcost_self = 0
- ld_outcost = 0
- ld_wageprice = 0
- ld_otherprice = 0
- ld_eqprice = 0
- arg_msg = ''
- deep = 0
- ifcmpl_1 = True
- ins_cnt = 0
- ins_cl_errcnt = 0
- ins_wf_errcnt = 0
- ins_rl_errcnt = 0
- arg_s_mx = arg_s_empty
- If (li_statusflag = 4 And ls_status <> ls_status_config Or &
- li_woodcodeflag = 4 And ls_woodcode <> ls_woodcode_config Or &
- li_pcodeflag = 4 And ls_pcode <> ls_pcode_config) THEN
-
- 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
- arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
- // Continue
-
- ld_price = 0
- ld_wfjgprice = 0
- ld_outcost = 0
- ld_wageprice = 0
- ld_eqprice = 0
- END IF
- ELSE
- 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
- arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
- rslt = 0
- GOTO ext
-
- ld_price = 0
- ld_wfjgprice = 0
- ld_outcost = 0
- ld_wageprice = 0
- ld_eqprice = 0
- END IF
- END IF
- ld_price = Round(ld_price,li_dec)
- ld_wfjgprice = Round(ld_wfjgprice,li_dec)
- ld_outcost = Round(ld_outcost,li_dec)
- ld_wageprice = Round(ld_wageprice,li_dec)
- ld_eqprice = Round(ld_eqprice,li_dec)
- ll_cl_errcnt = ins_cl_errcnt
- ll_wf_errcnt = ins_wf_errcnt
- ll_rl_errcnt = ins_rl_errcnt
- IF if_auto_copy THEN
- SELECT top 1 otherprice INTO :ld_otherprice
- FROM u_mtrlprice_sum
- WHERE mtrlid = :ll_mtrlid
- AND pfcode = :ls_pfcode
- AND sumdate < :sumdate
- AND status = :ls_status
- AND woodcode = :ls_woodcode
- AND pcode = :ls_pcode
- Order By sumdate Desc;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '物料:'+ls_mtrlcode+'取上次附加成本失败,'+arg_msg
- rslt = 0
- GOTO ext
- END IF
-
- IF IsNull(ld_otherprice) THEN ld_otherprice = 0
- END IF
- UPDATE u_mtrlprice_sum
- SET price = :ld_price,
- cost = :ld_price * :ifprice + :ld_wfjgprice * :ifwfjgprice + :ld_wageprice * :ifjgprice + :ld_outcost * :ifoutcost + :ld_otherprice * :ifotherprice + :ld_eqprice * :ifeqprice,
- wfjgprice = :ld_wfjgprice,
- jgprice = :ld_wageprice,
- outcost = :ld_outcost,
- otherprice = :ld_otherprice,
- eqprice = :ld_eqprice,
- dscrp = :arg_msg,
- sumdate = :sumdate,
- cl_errcnt = :ll_cl_errcnt,
- wf_errcnt = :ll_wf_errcnt,
- rl_errcnt = :ll_rl_errcnt
- WHERE mtrlid = :ll_mtrlid
- AND pfcode = :ls_pfcode
- AND (sumdate = :sumdate OR sumdate = 0 )
- AND status = :ls_status
- AND woodcode = :ls_woodcode
- And pcode = :ls_pcode;
- IF sqlca.SQLCode = 0 THEN
- IF sqlca.SQLNRows = 0 THEN
- INSERT INTO u_mtrlprice_sum
- (sumdate,
- pfcode,
- mtrlid,
- price,
- cost,
- wfjgprice,
- jgprice,
- eqprice,
- outcost,
- otherprice,
- dscrp,
- status,
- woodcode,
- pcode,
- cl_errcnt,
- wf_errcnt,
- rl_errcnt)
- VALUES(:sumdate,
- :ls_pfcode,
- :ll_mtrlid,
- :ld_price,
- :ld_price * :ifprice + :ld_wfjgprice * :ifwfjgprice + :ld_wageprice * :ifjgprice + :ld_outcost * :ifoutcost + :ld_otherprice * :ifotherprice + :ld_eqprice * :ifeqprice,
- :ld_wfjgprice,
- :ld_wageprice,
- :ld_eqprice,
- :ld_outcost,
- :ld_otherprice,
- :arg_msg,
- :ls_status,
- :ls_woodcode,
- :ls_pcode,
- :ll_cl_errcnt,
- :ll_wf_errcnt,
- :ll_rl_errcnt);
- IF sqlca.SQLCode <> 0 THEN
- ROLLBACK;
- arg_msg = '新增物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
- ELSE
- ROLLBACK;
- arg_msg = '更新物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- DELETE FROM u_mtrlprice_mx
- WHERE mtrlid = :ll_mtrlid
- AND pfcode = :ls_pfcode
- AND status = :ls_status
- AND woodcode = :ls_woodcode
- And pcode = :ls_pcode;
- IF sqlca.SQLCode <> 0 THEN
- ROLLBACK;
- arg_msg = '删除物料:'+ls_mtrlcode+'原成本组成明细失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- FOR ll_i = 1 To UpperBound(arg_s_mx)
- UPDATE u_mtrlprice_mx
- SET price = price + :arg_s_mx[ll_i].price,
- wfjgprice = wfjgprice + :arg_s_mx[ll_i].wfjgprice,
- jgprice = jgprice + :arg_s_mx[ll_i].jgprice,
- outcost = outcost + :arg_s_mx[ll_i].outcost,
- eqprice = eqprice + :arg_s_mx[ll_i].eqprice,
- qty = qty + :arg_s_mx[ll_i].qty
- WHERE mtrlid = :ll_mtrlid
- AND pfcode = :ls_pfcode
- AND status = :ls_status
- AND woodcode = :ls_woodcode
- AND pcode = :ls_pcode
- And sonmtrlid = :arg_s_mx[ll_i].sonmtrlid;
- IF sqlca.SQLCode = 0 THEN
- IF sqlca.SQLNRows = 0 THEN
- INSERT INTO u_mtrlprice_mx
- (mtrlid,
- pfcode,
- status,
- woodcode,
- pcode,
- sonmtrlid,
- price,
- wfjgprice,
- jgprice,
- outcost,
- eqprice,
- qty)
- VALUES (:ll_mtrlid,
- :ls_pfcode,
- :ls_status,
- :ls_woodcode,
- :ls_pcode,
- :arg_s_mx[ll_i].sonmtrlid,
- :arg_s_mx[ll_i].price,
- :arg_s_mx[ll_i].wfjgprice,
- :arg_s_mx[ll_i].jgprice,
- :arg_s_mx[ll_i].outcost,
- :arg_s_mx[ll_i].eqprice,
- :arg_s_mx[ll_i].qty);
- IF sqlca.SQLCode <> 0 THEN
- ROLLBACK;
- arg_msg = '物料:'+ls_mtrlcode+'插入成本组成明细失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- END IF
- ELSE
- ROLLBACK;
- arg_msg = '更新物料:'+ls_mtrlcode+'成本组成明细失败,'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- NEXT
- COMMIT;
- IF uof_add_mtrlprice_mx(sumdate,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ls_pfcode,arg_s_mx,arg_msg) = 0 THEN
- arg_msg = '更新物料:'+ls_mtrlcode+'历史物料清单及工价表失败,'+arg_msg
- rslt = 0
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- on uo_cmplcost.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_cmplcost.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
- event constructor;String str_optionvalue,arg_msg
- f_get_sys_option_value('089',str_optionvalue,arg_msg)
- uo_option_produce_dec = Long(str_optionvalue)
- f_get_sys_option_value('362',str_optionvalue,arg_msg)
- uo_option_cost_notax = long(str_optionvalue)
- f_get_sys_option_value('365',str_optionvalue,arg_msg)
- uo_option_pfmrp_ifuse_mtrlmrparg = long(str_optionvalue)
- end event
|