12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804 |
- $PBExportHeader$uo_order_ml_mrp.sru
- forward
- global type uo_order_ml_mrp from nonvisualobject
- end type
- end forward
- global type uo_order_ml_mrp from nonvisualobject
- end type
- global uo_order_ml_mrp uo_order_ml_mrp
- type variables
- boolean ifbuy_mtrl_not_useqty
- boolean ifwx_mtrl_not_useqty
- public long deep
- public long deep_scll
- end variables
- forward prototypes
- public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
- public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg)
- public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
- public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
- public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
- public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup)
- public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
- public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
- end prototypes
- public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);
- Integer rslt = 1
- Integer li_status
- Integer li_scllflag
- Integer li_scllsecflag
- Decimal ld_dstrqty
- SELECT u_saletaskmx.flag,
- u_saletaskmx.scllflag
- INTO :li_status,
- :li_scllflag
- FROM u_saletaskmx
- WHERE u_saletaskmx.scid = :arg_scid AND
- u_saletaskmx.taskid = :arg_taskid AND
- u_saletaskmx.printid = :arg_printid;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询销售订单明细状态失败," + sqlca.SQLErrText
- rslt = 0
- ELSE
- IF li_status <> 1 THEN
- arg_msg = "销售订单明细不是在进行状态,不能计算用料"
- rslt = 0
- GOTO ext
- ELSE
- IF li_scllflag = 1 THEN
- arg_msg = "销售订单明细已用料审核,不能计算用料"
- rslt = 0
- GOTO ext
- END IF
- END IF
-
- SELECT sum ( DstrQty )
- INTO :ld_dstrqty
- FROM u_saleRqMtrl_scll
- WHERE u_saleRqMtrl_scll.scid = :arg_scid AND
- u_saleRqMtrl_scll.taskID = :arg_taskid AND
- u_saleRqMtrl_scll.printid = :arg_printid
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询销售订单明细已领料数失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- ELSEIF ld_dstrqty > 0 THEN
- arg_msg = "销售订单明细已有领料数,不能计算"
- rslt = 0
- GOTO ext
- END IF
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg);
- Integer rslt = 1
- Decimal ld_qty
- String ls_mtrlcode
- Integer li_ordertype
- SELECT mtrlcode
- INTO :ls_mtrlcode
- FROM u_mtrldef Where mtrlid = :arg_mtrlid USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询物料编码失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- ELSE
-
- CHOOSE CASE arg_type
- CASE 1
- SELECT sum ( u_buytaskmx.qty - u_buytaskmx.consignedqty )
- INTO :ld_qty
- FROM u_buytaskmx , u_buytask
- WHERE u_buytaskmx.scid = :arg_scid
- AND u_buytaskmx.mtrlid = :arg_mtrlid
- AND u_buytaskmx.status = :arg_status
- AND u_buytaskmx.woodcode = :arg_woodcode
- AND u_buytaskmx.pcode = :arg_pcode
- AND u_buytaskmx.scid = u_buytask.scid
- AND u_buytaskmx.taskid = u_buytask.taskid
- AND u_buytaskmx.stopflag = 0
- AND u_buytask.status = 1
- USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询物料:" + ls_mtrlcode + " 采购未进仓数失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- CASE 3
- SELECT sum ( u_order_wfjgMx.qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty )
- INTO :ld_qty
- FROM u_order_wfjgMx , u_order_wfjg
- WHERE u_order_wfjgMx.scid = :arg_scid AND
- u_order_wfjgMx.mtrlid = :arg_mtrlid AND
- u_order_wfjgMx.status = :arg_status AND
- u_order_wfjgMx.woodcode = :arg_woodcode AND
- u_order_wfjgMx.pcode = :arg_pcode AND
- u_order_wfjgMx.scid = u_order_wfjg.scid AND
- u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID AND
- u_order_wfjg.status = 1 USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询物料:" + ls_mtrlcode + " 外协未进仓数失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- CASE 4
- SELECT sum ( u_Mtrlware.noallocqty )
- INTO :ld_qty
- FROM u_Mtrlware , u_storage
- WHERE u_Mtrlware.storageid = u_storage.storageid AND
- u_Mtrlware.scid = :arg_scid AND
- u_Mtrlware.mtrlid = :arg_mtrlid AND
- u_Mtrlware.status = :arg_status AND
- u_Mtrlware.woodcode = :arg_woodcode AND
- u_Mtrlware.pcode = :arg_pcode USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询物料:" + ls_mtrlcode + " 库存数失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- CASE 5
- SELECT sum (u_saleRqMtrl_scll.trueRqqty - u_saleRqMtrl_scll.DstrQty )
- INTO :ld_qty
- FROM u_saleRqMtrl_scll INNER JOIN
- u_SaleTaskMx ON u_saleRqMtrl_scll.scid = u_SaleTaskMx.scid AND
- u_saleRqMtrl_scll.taskID = u_SaleTaskMx.TaskID AND
- u_saleRqMtrl_scll.printid = u_SaleTaskMx.printid
- WHERE (u_SaleTaskMx.flag = 1) AND
- u_saleRqMtrl_scll.scid = :arg_scid AND
- u_saleRqMtrl_scll.mtrlid = :arg_mtrlid AND
- u_saleRqMtrl_scll.status = :arg_status AND
- u_saleRqMtrl_scll.woodcode = :arg_woodcode AND
- u_saleRqMtrl_scll.pcode = :arg_pcode AND
- not exists (select 1 from u_saleRqMtrl_scll a where a.scid = u_saleRqMtrl_scll.scid and a.taskid = u_saleRqMtrl_scll.taskid and a.printid = u_saleRqMtrl_scll.printid and a.scid = :arg_scid AND
- a.taskid = :arg_taskid AND
- a.printid = :arg_printid)
- USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询物料:" + ls_mtrlcode + " 订单需求数失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- END CHOOSE
-
- IF IsNull(ld_qty) THEN
- ld_qty = 0
- END IF
-
- END IF
- ext:
- arg_ref_qty = ld_qty
- RETURN rslt
- end function
- public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
- Integer rslt = 1
- Integer li_pfflag
- Long arr_mxt
- Long ll_i
- Boolean if_special_notuse = FALSE
- String ls_mtrlcode
- String ls_mtrlname
- String ls_mtrlmode
- String ls_unit
- String ls_mtrltype
- Integer li_mtrlkind
- Integer li_ifselforder
- Integer li_mtrlorigin
- Long ll_scid_mtrl
- Long ll_wrkgrpid_mtrl
- Decimal ld_buydays
- Decimal ld_orderdays
- Decimal ld_wfjgdays
- Decimal ld_aheaddays
- Date ld_sdate
- Date ld_edate
- DateTime ldt_sdate
- DateTime ldt_edate
- DateTime ldt_sdate_2359
- Decimal ld_cmplqty
- Decimal ld_mqty
- Decimal ld_bqty
- Decimal ld_wqty
- Decimal ld_pqty
- Decimal ld_otherrqqty
- Decimal ld_samerqqty
- Long count
- Long ll_j
- Decimal cmpl_qty
- s_pfmx ls_s_pfmx[]
- DECLARE pf_cur CURSOR FOR
- SELECT u_PrdPF.Sonscale ,
- u_PrdPF.SonLoss ,
- u_PrdPF.SonDECLosS ,
- u_PrdPF.SonMtrlid ,
- u_PrdPF.status ,
- u_PrdPF.woodcode ,
- u_PrdPF.pcode ,
- u_PrdPF.wrkGrpid ,
- u_mtrldef.mtrlorigin ,
- u_PrdPF.dscrp
- FROM u_PrdPF , u_mtrldef
- WHERE ( u_PrdPF.mtrlid = :arg_mtrlid )
- AND ( u_PrdPF.pfcode = '组装' )
- And ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) ;
-
- deep ++
- IF deep > 500 THEN
- arg_msg = "递归太深" + String(deep)
- rslt = 0
- ELSE
- SELECT mtrlcode ,
- mtrlname ,
- mtrlmode ,
- mtrltype ,
- unit ,
- mtrlkind ,
- mtrlorigin
- INTO :ls_mtrlcode,
- :ls_mtrlname,
- :ls_mtrlmode,
- :ls_mtrltype,
- :ls_unit,
- :li_mtrlkind ,
- :li_mtrlorigin
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询物料资失败," + sqlca.SQLErrText
- rslt = 0
- ELSE
-
-
- IF arg_if_allowuse = 1 THEN
-
- IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uof_get_qty(2,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- //
- // if uof_get_qty(4,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 then
- // rslt = 0
- // goto ext
- // end if
-
- // if uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_sdate_2359,arg_msg) = 0 then
- // rslt = 0
- // goto label_0
- // end if
-
- END IF
-
- IF deep = 1 THEN
- ld_cmplqty = arg_qty
- ELSE
- arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
-
- IF arr_mxt = 0 THEN
- ld_samerqqty = 0
- ELSE
-
- FOR ll_i = 1 TO arr_mxt
- IF arg_s_mtrl.scid[ll_i] = arg_scid AND arg_s_mtrl.taskid[ll_i] = arg_taskid AND arg_s_mtrl.printid[ll_i] = arg_printid AND arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid AND arg_s_mtrl.status[ll_i] = arg_status AND arg_s_mtrl.woodcode[ll_i] = arg_woodcode AND arg_s_mtrl.pcode[ll_i] = arg_pcode AND arg_s_mtrl.wrkgrpid_scll[ll_i] = arg_wrkgrpid_scll THEN
- ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i]
- END IF
- NEXT
-
- END IF
-
- IF arg_if_allowuse = 1 THEN
-
- If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN
-
- IF li_mtrlorigin = 2 THEN
- IF ifbuy_mtrl_not_useqty THEN
- ld_cmplqty = arg_qty
- if_special_notuse = TRUE
- END IF
- ELSE
- IF li_mtrlorigin = 3 THEN
- IF ifwx_mtrl_not_useqty THEN
- ld_cmplqty = arg_qty
- if_special_notuse = TRUE
- END IF
- END IF
- END IF
- END IF
-
- IF NOT if_special_notuse THEN
-
- IF ld_samerqqty > 0 THEN
- ld_cmplqty = arg_qty
- ELSE
-
- IF ld_otherrqqty >= ld_mqty + ld_bqty + ld_wqty + ld_pqty THEN
- ld_cmplqty = arg_qty
- ELSE
-
- IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN
- ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
- ELSE
- ld_cmplqty = 0
- END IF
-
- END IF
-
- END IF
-
- END IF
-
- ELSE
- ld_cmplqty = arg_qty
- END IF
-
- arr_mxt ++
- arg_s_mtrl.scid[arr_mxt] = arg_scid
- arg_s_mtrl.taskid[arr_mxt] = arg_taskid
- arg_s_mtrl.printid[arr_mxt] = arg_printid
- arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid
- arg_s_mtrl.qty[arr_mxt] = arg_qty
- arg_s_mtrl.status[arr_mxt] = arg_status
- arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode
- arg_s_mtrl.pcode[arr_mxt] = arg_pcode
- arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
- arg_s_mtrl.plantype[arr_mxt] = arg_plantype
- arg_s_mtrl.mqty[arr_mxt] = ld_mqty
- arg_s_mtrl.bqty[arr_mxt] = ld_bqty
- arg_s_mtrl.wqty[arr_mxt] = ld_wqty
- arg_s_mtrl.pqty[arr_mxt] = ld_pqty
- // arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
- arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
- arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
- arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
- arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
- arg_s_mtrl.unit[arr_mxt] = ls_unit
- arg_s_mtrl.mtrlorigin[arr_mxt] = arg_plantype
- arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl
- arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl
- arg_s_mtrl.wrkgrpid_scll[arr_mxt] = arg_wrkgrpid_scll
- arg_s_mtrl.lp[arr_mxt] = arg_lp
- arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
- arg_s_mtrl.ifmainmtrlid[arr_mxt] = 0
- arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid
- arg_s_mtrl.ifchanged[arr_mxt] = 0
-
- If ((arg_plantype = 2) Or (arg_plantype = 6)) THEN
- rslt = 1
- GOTO ext
- END IF
-
- END IF
-
- IF ld_cmplqty <= 0 THEN
- rslt = 1
- ELSE
- count = 0
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].mtrlorigin ,
- :ls_s_pfmx[count].dscrp ;
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].mtrlorigin ,
- :ls_s_pfmx[count].dscrp ;
- LOOP
-
- count = count - 1
- CLOSE pf_cur;
-
- IF count = 0 THEN
- rslt = 1
- ELSE
-
- FOR ll_j = 1 TO count
-
- IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
- cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
- ELSE
- cmpl_qty = 0
- END IF
-
- rslt = uof_cmpl_rqmtrl_re(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].mtrlorigin,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg)
-
- IF rslt = 0 THEN
- EXIT
- END IF
- NEXT
- END IF
- END IF
-
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
- Integer rslt = 1
- Integer li_pfflag
- Long li_mxt
- Long ll_i
- String ls_mtrlcode
- String ls_mtrlname
- String ls_mtrlmode
- String ls_unit
- String ls_mtrltype
- Integer li_mtrlorigin
- Integer li_ifselforder
- Long ll_scid_mtrl
- Long ll_wrkgrpid_mtrl
- Long count
- Long ll_j
- Decimal cmpl_qty
- s_pfmx ls_s_pfmx[]
- DECLARE pf_cur CURSOR FOR
- SELECT u_PrdPF.Sonscale ,
- u_PrdPF.SonLoss ,
- u_PrdPF.SonDECLosS ,
- u_PrdPF.SonMtrlid ,
- u_PrdPF.status ,
- u_PrdPF.woodcode ,
- u_PrdPF.pcode ,
- u_PrdPF.wrkGrpid ,
- u_PrdPF.dscrp
- From u_PrdPF Where ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.pfcode = '组装' ) ;
-
- deep ++
- IF deep > 2000 THEN
- arg_msg = "递归太深" + String(deep)
- rslt = 0
- ELSE
- SELECT mtrlcode ,
- mtrlname ,
- mtrlmode ,
- mtrltype ,
- unit ,
- Mtrlorigin
- INTO :ls_mtrlcode,
- :ls_mtrlname,
- :ls_mtrlmode,
- :ls_mtrltype,
- :ls_unit,
- :li_mtrlorigin
- From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询物料资失败," + sqlca.SQLErrText
- rslt = 0
- ELSE
-
- IF deep > 1 THEN
- li_mxt = UpperBound(arg_s_mtrl.mtrlid)
- li_mxt ++
- arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid
- arg_s_mtrl.qty[li_mxt] = arg_qty
- arg_s_mtrl.status[li_mxt] = arg_status
- arg_s_mtrl.woodcode[li_mxt] = arg_woodcode
- arg_s_mtrl.pcode[li_mxt] = arg_pcode
- arg_s_mtrl.cmplqty[li_mxt] = arg_qty
- arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin
- arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode
- arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname
- arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode
- arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype
- arg_s_mtrl.unit[li_mxt] = ls_unit
- arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin
- arg_s_mtrl.produce_scid[li_mxt] = ll_scid_mtrl
- arg_s_mtrl.produce_wrkgrpid[li_mxt] = ll_wrkgrpid_mtrl
- arg_s_mtrl.wrkgrpid_scll[li_mxt] = arg_wrkgrpid_scll
- arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid
- END IF
-
- CHOOSE CASE li_mtrlorigin
- CASE 2, 6
- rslt = 1
- GOTO ext
- CASE 0
-
- IF ll_scid_mtrl <> arg_scid THEN
- rslt = 1
- GOTO ext
- END IF
-
- END CHOOSE
-
- count = 0
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].dscrp ;
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].dscrp ;
- LOOP
-
- count = count - 1
- CLOSE pf_cur;
-
- IF count = 0 THEN
- rslt = 1
- ELSE
-
- FOR ll_j = 1 To count
-
- IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
- cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
- ELSE
- cmpl_qty = 0
- END IF
-
- rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_s_mtrl,arg_msg)
-
- IF rslt = 0 THEN
- EXIT
- END IF
-
- NEXT
-
- END IF
-
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
- Integer rslt = 1
- Long ll_i
- Integer li_ordertype
- String ls_mtrlcode
- Long cnt
- Integer li_ifselforder
- Long ll_mxpkid
- /////////
- Decimal ld_consignedqty,ld_inqty
- SELECT sum(consignedqty),
- sum(inqty)
- INTO :ld_consignedqty,
- :ld_inqty
- FROM u_orderRqMtrl
- WHERE taskid = :arg_s_mtrl.taskid[1]
- AND scid = :arg_s_mtrl.scid[1]
- AND printid = :arg_s_mtrl.printid[1]
- AND plantype = 2 USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
- rslt = 0
- END IF
- IF ld_consignedqty > 0 THEN
- arg_msg = "原用料已有采购已订货数,不能删除"
- rslt = 0
- ELSEIF ld_inqty > 0 THEN
- arg_msg = "原用料已有采购已订货数,不能删除"
- rslt = 0
- END IF
- ld_consignedqty = 0
- ld_inqty = 0
- SELECT sum(consignedqty), sum(inqty)
- INTO :ld_consignedqty, :ld_inqty
- FROM u_orderRqMtrl
- WHERE taskid = :arg_s_mtrl.taskid[1]
- AND scid = :arg_s_mtrl.scid[1]
- AND printid = :arg_s_mtrl.printid[1]
- AND plantype = 3 USING sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
- rslt = 0
- END IF
- IF ld_consignedqty > 0 THEN
- arg_msg = "原用料已有外协已订货数,不能删除"
- rslt = 0
- ELSEIF ld_inqty > 0 THEN
- arg_msg = "原用料已有外协已订货数,不能删除"
- rslt = 0
- END IF
- /////////////////////
- DELETE FROM u_orderRqMtrl
- WHERE taskid = :arg_s_mtrl.taskid[1]
- AND scid = :arg_s_mtrl.scid[1]
- AND printid = :arg_s_mtrl.printid[1] USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除原用料失败," + sqlca.SQLErrText
- rslt = 0
- goto ext
- END IF
- FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
- SELECT u_mtrldef.dftsptid,
- u_mtrldef.mrp_unit,
- u_mtrldef.rate_buy,
- u_mtrldef.rate_scll,
- u_mtrldef.rate_sale
- INTO :arg_s_mtrl.sptid[ll_i],
- :arg_s_mtrl.mrp_unit[ll_i],
- :arg_s_mtrl.rate_buy[ll_i],
- :arg_s_mtrl.rate_scll[ll_i],
- :arg_s_mtrl.rate_sale[ll_i]
- FROM u_mtrldef
- Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
- IF sqlca.SQLCode <> 0 THEN arg_s_mtrl.sptid[ll_i] = 0
-
- CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
- CASE 1
- IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
- END IF
- CASE 2
- IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
- END IF
- CASE 3
- IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
- END IF
- END CHOOSE
-
- UPDATE u_orderRqMtrl
- SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
- truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i]
- WHERE scid = :arg_s_mtrl.scid[ll_i] AND
- taskID = :arg_s_mtrl.taskid[ll_i] AND
- printid = :arg_s_mtrl.printid[ll_i] AND
- MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
- wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
- status = :arg_s_mtrl.status[ll_i] AND
- woodcode = :arg_s_mtrl.woodcode[ll_i] AND
- pcode = :arg_s_mtrl.pcode[ll_i] AND
- plantype = :arg_s_mtrl.plantype[ll_i] USING sqlca;
-
- IF sqlca.SQLCode = 0 THEN
-
- IF sqlca.SQLNRows = 0 THEN
-
-
- ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca)
-
- IF ll_mxpkid <= 0 THEN
- arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
- rslt = 0
- EXIT
- END IF
-
- INSERT INTO u_orderRqMtrl ( scid ,
- taskID ,
- printid,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty,
- otherrqqty,
- minqty,
- wrkgrpid ,
- status ,
- woodcode ,
- pcode ,
- mxpkid ,
- sptid) VALUES (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i],
- :arg_s_mtrl.otherrqqty[ll_i],
- :arg_s_mtrl.minqty[ll_i],
- :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i] ,
- :ll_mxpkid ,
- :arg_s_mtrl.sptid[ll_i]) USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- EXIT
- END IF
-
- END IF
-
- ELSE
- arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- EXIT
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//运算保存
- Integer rslt = 1
- Long ll_i
- DELETE FROM u_orderRqMtrl_tree
- WHERE taskid = :arg_s_mtrl.taskid[1]
- AND scid = :arg_s_mtrl.scid[1]
- AND printid = :arg_s_mtrl.printid[1]
- Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid)
- IF arg_s_mtrl.ifchanged[ll_i] = 0 THEN
- IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
- arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
- rslt = 0
- GOTO ext
- END IF
- END IF
- INSERT INTO u_orderRqMtrl_tree ( scid ,
- taskid ,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty ,
- otherrqqty,
- samerqqty,
- minqty,
- maxqty,
- ckwareqty,
- wrkgrpid ,
- lp ,
- printid ,
- status ,
- woodcode ,
- pcode ,
- ifmainmtrlid ,
- ifchanged ,
- pmtrlid ,
- pfgroup,
- mxpkid,
- promode,
- pfgroupmode,
- pfklmode,
- pfgroupqty
- ) VALUES
- (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i] ,
- :arg_s_mtrl.otherrqqty[ll_i] ,
- :arg_s_mtrl.samerqqty[ll_i] ,
- :arg_s_mtrl.minqty[ll_i] ,
- :arg_s_mtrl.maxqty[ll_i] ,
- :arg_s_mtrl.ckwareqty[ll_i] ,
- :arg_s_mtrl.produce_wrkgrpid[ll_i] ,
- :arg_s_mtrl.lp[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i],
- :arg_s_mtrl.ifmainmtrlid[ll_i] ,
- :arg_s_mtrl.ifchanged[ll_i] ,
- :arg_s_mtrl.pmtrlid[ll_i],
- :arg_s_mtrl.pfgroup[ll_i],
- :arg_s_mtrl.mxpkid[ll_i],
- :arg_s_mtrl.promode[ll_i],
- :arg_s_mtrl.pfgroupmode[ll_i],
- :arg_s_mtrl.pfklmode[ll_i],
- :arg_s_mtrl.pfgroupqty[ll_i]) Using sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK Using sqlca;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT Using sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);
- Integer rslt = 1
- DELETE FROM u_saleRqMtrl_scll
- WHERE taskid = :arg_taskid
- AND scid = :arg_scid
- And printid = :arg_printid Using sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除原领料明细失败," + sqlca.SQLErrText
- rslt = 0
- END IF
- IF rslt = 0 THEN
- ROLLBACK Using sqlca;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT Using sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
- Long i,ls_newid
- DELETE FROM u_saleRqMtrl_scll
- WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND
- u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND
- u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1] USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '删除订单明细的物料领料明细失败'
- GOTO ext
- END IF
- //messagebox("",UpperBound(arg_s_mtrl.taskID))
- FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
- if arg_s_mtrl.ifmainmtrlid[i] = 1 then continue
- if arg_s_mtrl.qty[i] = 0 then continue
-
- ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
- IF ls_newid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- INSERT INTO u_saleRqMtrl_scll
- ( rqmtrlid,
- scid,
- taskID,
- MtrlID,
- printid,
- trueRqqty,
- costamt,
- status,
- woodcode,
- pcode,
- ifchanged )
- VALUES ( :ls_newid,
- :arg_s_mtrl.scid[i],
- :arg_s_mtrl.taskID[i],
- :arg_s_mtrl.MtrlID[i],
- :arg_s_mtrl.printid[i],
- :arg_s_mtrl.qty[i],
- 0,
- :arg_s_mtrl.status[i],
- :arg_s_mtrl.woodcode[i],
- :arg_s_mtrl.pcode[i],
- :arg_s_mtrl.ifchanged[i] ) USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入订单明细的物料领料明细失败'
- GOTO ext
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
- Integer rslt = 1
- Integer li_pfflag
- Long li_mxt
- Long ll_i
- String ls_mtrlcode
- String ls_mtrlname
- String ls_mtrlmode
- String ls_unit
- String ls_mtrltype
- Integer li_mtrlorigin
- Long count
- Long ll_j
- Decimal cmpl_qty
- s_pfmx ls_s_pfmx[]
- DECLARE pf_cur CURSOR FOR
- SELECT u_PrdPF.Sonscale ,
- u_PrdPF.SonLoss ,
- u_PrdPF.SonDECLosS ,
- u_PrdPF.SonMtrlid ,
- u_PrdPF.status ,
- u_PrdPF.woodcode ,
- u_PrdPF.pcode ,
- u_PrdPF.wrkGrpid ,
- u_PrdPF.dscrp
- FROM u_PrdPF
- Where ( u_PrdPF.mtrlid = :arg_mtrlid ) ;
-
- deep ++
- IF deep > 2000 THEN
- arg_msg = "递归太深" + String(deep)
- rslt = 0
- ELSE
- SELECT mtrlcode ,
- mtrlname ,
- mtrlmode ,
- mtrltype ,
- unit ,
- Mtrlorigin
- INTO :ls_mtrlcode,
- :ls_mtrlname,
- :ls_mtrlmode,
- :ls_mtrltype,
- :ls_unit,
- :li_mtrlorigin
- FROM u_mtrldef
- Where mtrlid = :arg_mtrlid USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询物料资失败," + sqlca.SQLErrText
- rslt = 0
- ELSE
-
- IF deep > 1 THEN
- li_mxt = UpperBound(arg_s_mtrl.mtrlid)
- li_mxt ++
- arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid
- arg_s_mtrl.qty[li_mxt] = arg_qty
- arg_s_mtrl.status[li_mxt] = arg_status
- arg_s_mtrl.woodcode[li_mxt] = arg_woodcode
- arg_s_mtrl.pcode[li_mxt] = arg_pcode
- arg_s_mtrl.cmplqty[li_mxt] = arg_qty
- arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin
- arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode
- arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname
- arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode
- arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype
- arg_s_mtrl.unit[li_mxt] = ls_unit
- arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin
- arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid
- END IF
-
- CHOOSE CASE li_mtrlorigin
- CASE 2, 6
- rslt = 1
- GOTO ext
-
- END CHOOSE
-
- count = 0
- 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].status,
- :ls_s_pfmx[count].woodcode,
- :ls_s_pfmx[count].pcode,
- :ls_s_pfmx[count].wrkgrpid,
- :ls_s_pfmx[count].dscrp;
-
- 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].status,
- :ls_s_pfmx[count].woodcode,
- :ls_s_pfmx[count].pcode,
- :ls_s_pfmx[count].wrkgrpid,
- :ls_s_pfmx[count].dscrp;
- LOOP
-
- count = count - 1
- CLOSE pf_cur;
-
- IF count = 0 THEN
- rslt = 1
- ELSE
-
- FOR ll_j = 1 TO count
-
- IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
- cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
- ELSE
- cmpl_qty = 0
- END IF
-
- rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty, arg_s_mtrl,arg_msg)
-
- IF rslt = 0 THEN
- EXIT
- END IF
-
- NEXT
-
- END IF
-
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);
- integer rslt = 1
- DELETE FROM u_saleRqMtrl_scll
- WHERE taskid =:arg_taskid AND scid =:arg_scid
- and dstrqty = 0
- and printid = :arg_printid using sqlca;
- if sqlca.sqlcode <> 0 then
- arg_msg = "删除原领料明细失败," + sqlca.sqlerrtext
- rslt = 0
- end if
- if rslt = 0 then
- rollback using sqlca;
- else
- if rslt = 1 and arg_ifcommit then
- commit using sqlca;
- end if
- end if
- return rslt
- end function
- public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
- Integer rslt = 1
- Long ll_i
- Integer li_ordertype
- String ls_mtrlcode
- Long cnt
- Integer li_ifselforder
- Long ll_mxpkid
- /////////////////// //
- FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid)
- SELECT u_mtrldef.dftsptid,
- u_mtrldef.mrp_unit,
- u_mtrldef.rate_buy,
- u_mtrldef.rate_scll,
- u_mtrldef.rate_sale
- INTO :arg_s_mtrl.sptid[ll_i],
- :arg_s_mtrl.mrp_unit[ll_i],
- :arg_s_mtrl.rate_buy[ll_i],
- :arg_s_mtrl.rate_scll[ll_i],
- :arg_s_mtrl.rate_sale[ll_i]
- FROM u_mtrldef
- Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",查询物料定义失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
- CASE 1
- IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
- END IF
- CASE 2
- IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
- END IF
- CASE 3
- IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
- END IF
- END CHOOSE
-
-
-
-
- UPDATE u_orderRqMtrl
- SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
- truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i]
- WHERE scid = :arg_s_mtrl.scid[ll_i] AND
- taskID = :arg_s_mtrl.taskid[ll_i] AND
- printid = :arg_s_mtrl.printid[ll_i] AND
- MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
- wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
- status = :arg_s_mtrl.status[ll_i] AND
- woodcode = :arg_s_mtrl.woodcode[ll_i] AND
- pcode = :arg_s_mtrl.pcode[ll_i] AND
- plantype = :arg_s_mtrl.plantype[ll_i] AND
- plancode = :arg_s_mtrl.plancode[ll_i]Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
-
-
- IF sqlca.SQLNRows = 0 THEN
-
-
- ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,False,sqlca)
-
- IF ll_mxpkid <= 0 THEN
- arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
- rslt = 0
- GOTO ext
- END IF
- INSERT INTO u_orderRqMtrl ( scid ,
- taskID ,
- printid,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty ,
- wrkgrpid ,
- status ,
- woodcode ,
- pcode ,
- mxpkid ,
- sptid,
- plancode) VALUES (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i],
- :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i] ,
- :ll_mxpkid ,
- :arg_s_mtrl.sptid[ll_i],
- :arg_s_mtrl.plancode[ll_i]) Using sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- END IF
-
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK Using sqlca;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT Using sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
- Integer rslt = 1
- Long ll_i
- Integer li_ordertype
- String ls_mtrlcode
- Long cnt
- Integer li_ifselforder
- Long ll_mxpkid
- Long ll_sptid
- /////////////////// //
- //查找已定义的供应商
- FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
-
- SELECT sptid, mxpkid
- INTO :ll_sptid, :ll_mxpkid
- FROM u_orderRqMtrl
- WHERE scid = :arg_s_mtrl.scid[ll_i] AND
- taskID = :arg_s_mtrl.taskid[ll_i] AND
- printid = :arg_s_mtrl.printid[ll_i] AND
- MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
- wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
- status = :arg_s_mtrl.status[ll_i] AND
- woodcode = :arg_s_mtrl.woodcode[ll_i] AND
- pcode = :arg_s_mtrl.pcode[ll_i] AND
- plantype = :arg_s_mtrl.plantype[ll_i];
- IF sqlca.SQLCode <> 0 THEN
- ll_sptid = 0
- ll_mxpkid = 0
- END IF
- IF IsNull(ll_sptid) THEN ll_sptid = 0
- IF IsNull(ll_mxpkid) THEN ll_mxpkid = 0
-
- arg_s_mtrl.sptid[ll_i] = ll_sptid
- arg_s_mtrl.mxpkid[ll_i] = ll_mxpkid
- NEXT
- DELETE FROM u_orderRqMtrl
- WHERE scid = :arg_s_mtrl.scid[1]
- AND taskid = :arg_s_mtrl.taskid[1]
- AND printid = :arg_s_mtrl.printid[1]
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除原用料失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
- SELECT u_mtrldef.dftsptid,
- u_mtrldef.mrp_unit,
- u_mtrldef.rate_buy,
- u_mtrldef.rate_scll,
- u_mtrldef.rate_sale
- INTO :ll_sptid,
- :arg_s_mtrl.mrp_unit[ll_i],
- :arg_s_mtrl.rate_buy[ll_i],
- :arg_s_mtrl.rate_scll[ll_i],
- :arg_s_mtrl.rate_sale[ll_i]
- FROM u_mtrldef
- Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
- IF sqlca.SQLCode <> 0 THEN
- ll_sptid = 0
- END IF
-
- CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
- CASE 1
- IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
- END IF
- CASE 2
- IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
- END IF
- CASE 3
- IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
- arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
- END IF
- END CHOOSE
-
- IF arg_s_mtrl.sptid[ll_i] = 0 THEN
- arg_s_mtrl.sptid[ll_i] = ll_sptid
- END IF
-
- UPDATE u_orderRqMtrl
- SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
- truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i],
- mxdscrp = :arg_s_mtrl.mxdscrp[ll_i]
- WHERE scid = :arg_s_mtrl.scid[ll_i] AND
- taskID = :arg_s_mtrl.taskid[ll_i] AND
- printid = :arg_s_mtrl.printid[ll_i] AND
- MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
- wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
- status = :arg_s_mtrl.status[ll_i] AND
- woodcode = :arg_s_mtrl.woodcode[ll_i] AND
- pcode = :arg_s_mtrl.pcode[ll_i] AND
- plantype = :arg_s_mtrl.plantype[ll_i] AND
- plancode = :arg_s_mtrl.plancode[ll_i] USING sqlca;
-
- IF sqlca.SQLCode = 0 THEN
-
- IF sqlca.SQLNRows = 0 THEN
- if arg_s_mtrl.mxpkid[ll_i] = 0 then
- ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca)
-
- IF ll_mxpkid <= 0 THEN
- arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
- rslt = 0
- EXIT
- END IF
- else
- ll_mxpkid = arg_s_mtrl.mxpkid[ll_i]
- end if
-
- INSERT INTO u_orderRqMtrl ( scid ,
- taskID ,
- printid,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty ,
- wrkgrpid ,
- status ,
- woodcode ,
- pcode ,
- mxpkid ,
- sptid,
- plancode,
- mxdscrp) VALUES (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i],
- :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i] ,
- :ll_mxpkid ,
- :arg_s_mtrl.sptid[ll_i],
- :arg_s_mtrl.plancode[ll_i],
- :arg_s_mtrl.mxdscrp[ll_i]) USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- EXIT
- END IF
-
- END IF
-
- ELSE
- arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
- rslt = 0
- EXIT
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
- Long i,ls_newid
- FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
- ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
- IF ls_newid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- INSERT INTO u_saleRqMtrl_scll
- ( rqmtrlid,
- scid,
- taskID,
- MtrlID,
- printid,
- trueRqqty,
- costamt,
- status,
- woodcode,
- pcode,
- ifchanged,
- plancode)
- VALUES ( :ls_newid,
- :arg_s_mtrl.scid[i],
- :arg_s_mtrl.taskID[i],
- :arg_s_mtrl.MtrlID[i],
- :arg_s_mtrl.printid[i],
- :arg_s_mtrl.qty[i],
- 0,
- :arg_s_mtrl.status[i],
- :arg_s_mtrl.woodcode[i],
- :arg_s_mtrl.pcode[i],
- :arg_s_mtrl.ifchanged[i] ,
- :arg_s_mtrl.plancode[i] ) USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入订单明细的物料领料明细失败'
- GOTO ext
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
- Long i,ls_newid
- DELETE FROM u_saleRqMtrl_scll
- WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND
- u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND
- u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1]
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '删除订单明细的物料领料明细失败'
- GOTO ext
- END IF
- FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
- ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
- IF ls_newid <= 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- INSERT INTO u_saleRqMtrl_scll
- ( rqmtrlid,
- scid,
- taskID,
- MtrlID,
- printid,
- trueRqqty,
- costamt,
- status,
- woodcode,
- pcode,
- ifchanged,
- plancode,
- mxdscrp)
- VALUES ( :ls_newid,
- :arg_s_mtrl.scid[i],
- :arg_s_mtrl.taskID[i],
- :arg_s_mtrl.MtrlID[i],
- :arg_s_mtrl.printid[i],
- :arg_s_mtrl.qty[i],
- 0,
- :arg_s_mtrl.status[i],
- :arg_s_mtrl.woodcode[i],
- :arg_s_mtrl.pcode[i],
- :arg_s_mtrl.ifchanged[i],
- :arg_s_mtrl.plancode[i],
- :arg_s_mtrl.mxdscrp[i]) USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入订单明细的物料领料明细失败'
- GOTO ext
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//批增料
- Integer rslt = 1
- Long ll_i
- FOR ll_i = 1 To UpperBound(arg_s_mtrl.MtrlID)
-
- IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
- arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
- rslt = 0
- goto ext
- END IF
-
- INSERT INTO u_orderRqMtrl_tree ( scid ,
- taskid ,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty ,
- wrkgrpid ,
- lp ,
- printid ,
- status ,
- woodcode ,
- pcode ,
- ifmainmtrlid ,
- ifchanged ,
- pmtrlid ,
- pfgroup ,
- plancode) VALUES
- (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i] ,
- :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
- :arg_s_mtrl.lp[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i],
- :arg_s_mtrl.ifmainmtrlid[ll_i] ,
- :arg_s_mtrl.ifchanged[ll_i] ,
- :arg_s_mtrl.pmtrlid[ll_i],
- :arg_s_mtrl.pfgroup[ll_i],
- :arg_s_mtrl.plancode[ll_i]
- ) Using sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
- rslt = 0
- goto ext
- END IF
-
- NEXT
- ext:
- IF rslt = 0 THEN
- ROLLBACK Using sqlca;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT Using sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//修改运算结果
- Integer rslt = 1
- Long ll_i
-
- DELETE FROM u_orderRqMtrl_tree
- WHERE u_orderRqMtrl_tree.taskid = :arg_s_mtrl.taskid[1]
- AND u_orderRqMtrl_tree.scid = :arg_s_mtrl.scid[1]
- AND u_orderRqMtrl_tree.printid = :arg_s_mtrl.printid[1]
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText
- rslt = 0
- goto ext
- END IF
-
- FOR ll_i = 1 TO UpperBound(arg_s_mtrl.MtrlID)
-
- IF arg_s_mtrl.qty[ll_i] = 0 AND arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
- arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
- rslt = 0
- EXIT
- END IF
-
- INSERT INTO u_orderRqMtrl_tree ( scid ,
- taskid ,
- mtrlid ,
- rqqty ,
- truerqqty ,
- plantype ,
- mqty ,
- bqty ,
- wqty ,
- pqty ,
- wrkgrpid ,
- lp ,
- printid ,
- status ,
- woodcode ,
- pcode ,
- ifmainmtrlid ,
- ifchanged ,
- pmtrlid ,
- pfgroup,
- plancode,
- mxdscrp,
- promode,
- pfgroupmode,
- pfklmode,
- pfgroupqty) VALUES
- (
- :arg_s_mtrl.scid[ll_i],
- :arg_s_mtrl.taskid[ll_i],
- :arg_s_mtrl.mtrlid[ll_i],
- :arg_s_mtrl.qty[ll_i],
- :arg_s_mtrl.cmplqty[ll_i],
- :arg_s_mtrl.plantype[ll_i],
- :arg_s_mtrl.mqty[ll_i],
- :arg_s_mtrl.bqty[ll_i],
- :arg_s_mtrl.wqty[ll_i],
- :arg_s_mtrl.pqty[ll_i] ,
- :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
- :arg_s_mtrl.lp[ll_i],
- :arg_s_mtrl.printid[ll_i],
- :arg_s_mtrl.status[ll_i],
- :arg_s_mtrl.woodcode[ll_i],
- :arg_s_mtrl.pcode[ll_i],
- :arg_s_mtrl.ifmainmtrlid[ll_i] ,
- :arg_s_mtrl.ifchanged[ll_i] ,
- :arg_s_mtrl.pmtrlid[ll_i],
- :arg_s_mtrl.pfgroup[ll_i],
- :arg_s_mtrl.plancode[ll_i],
- :arg_s_mtrl.mxdscrp[ll_i],
- :arg_s_mtrl.promode[ll_i],
- :arg_s_mtrl.pfgroupmode[ll_i],
- :arg_s_mtrl.pfklmode[ll_i],
- :arg_s_mtrl.pfgroupqty[ll_i]
- ) USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
- rslt = 0
- EXIT
- END IF
-
- NEXT
-
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup);
- Integer rslt = 1
- Integer li_pfflag
- Long ll_mtrlid_order
- Integer li_ifmainmtrlid
- Long arr_mxt
- Long ll_i
- Boolean if_special_notuse = False
- String ls_mtrlcode
- String ls_mtrlname
- String ls_mtrlmode
- String ls_unit
- String ls_mtrltype
- Integer li_mtrlorigin
- Integer li_ifselforder
- Integer li_mtrlprp
- Integer li_statusflag
- Long ll_scid_mtrl
- Long ll_wrkgrpid_mtrl
- Integer li_ordertype
- Decimal ld_cmplqty
- Decimal ld_mqty
- Decimal ld_bqty
- Decimal ld_wqty
- Decimal ld_pqty
- Decimal ld_otherrqqty
- Decimal ld_samerqqty
- Decimal ld_minqty, ld_maxqty
- Long count
- Long ll_j
- Long li_dftsptid
- string ls_promode
- string ls_pfgroupmode
- string ls_pfklmode
- Decimal ld_pfgroupqty
- Decimal cmpl_qty
- s_pfmx ls_s_pfmx[]
- s_mtrlcfg_expr s_mtrlcfg[]
- Long ll_cfg
- Long ll_cnt_s_mtrlcfg
- DECLARE pf_cur CURSOR FOR
- SELECT u_PrdPF.Sonscale ,
- u_PrdPF.SonLoss ,
- u_PrdPF.SonDECLosS ,
- u_PrdPF.SonMtrlid ,
- u_PrdPF.status ,
- u_PrdPF.woodcode ,
- u_PrdPF.pcode ,
- u_PrdPF.wrkGrpid ,
- u_PrdPF.dscrp ,
- u_PrdPF.pfgroup ,
- u_mtrldef.mrp_unit,
- u_mtrldef.rate_buy,
- u_mtrldef.rate_scll,
- u_mtrldef.rate_sale,
- u_PrdPF.promode,
- u_PrdPF.pfgroupmode,
- u_PrdPF.pfklmode,
- u_PrdPF.pfgroupqty
- FROM u_PrdPF ,u_mtrldef
- WHERE ( u_PrdPF.pfcode = '组装' ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
- u_mtrldef.mtrlid = u_PrdPF.SonMtrlid;
-
- deep ++
-
- IF deep > 1000 THEN
- arg_msg = "递归太深" + String(deep)
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_taskid <> -1 THEN
- SELECT u_saletaskmx.mtrlid
- INTO :ll_mtrlid_order
- FROM u_saletaskmx
- WHERE u_saletaskmx.taskid = :arg_taskid
- AND u_saletaskmx.scid = :arg_scid
- And u_saletaskmx.printid = :arg_printid Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询订单明细物料操作失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- ELSE
-
- IF deep = 1 THEN
- ll_mtrlid_order = arg_mtrlid
- ELSE
- ll_mtrlid_order = -1
- END IF
-
- END IF
- SELECT mtrlcode ,
- mtrlname ,
- mtrlmode ,
- mtrltype ,
- unit ,
- Mtrlorigin ,
- mtrlprp ,
- statusflag,
- dftsptid
- INTO :ls_mtrlcode,
- :ls_mtrlname,
- :ls_mtrlmode,
- :ls_mtrltype,
- :ls_unit,
- :li_mtrlorigin,
- :li_mtrlprp,
- :li_statusflag,
- :li_dftsptid
- From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询物料资失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- IF arg_pmtrlid > 0 AND arg_mtrlid > 0 THEN
- SELECT u_PrdPF.promode
- ,u_PrdPF.pfgroupmode
- ,u_PrdPF.pfklmode
- ,u_PrdPF.pfgroupqty
- INTO :ls_promode
- ,:ls_pfgroupmode
- ,:ls_pfklmode
- ,:ld_pfgroupqty
- FROM u_PrdPF
- WHERE u_PrdPF.pfcode = '组装'
- AND u_PrdPF.mtrlid = :arg_pmtrlid
- AND u_PrdPF.SonMtrlid = :arg_mtrlid;
- IF SQLCA.SQLCODE <> 0 THEN
- ls_promode = ""
- ls_pfgroupmode = ""
- ls_pfklmode = ""
- ld_pfgroupqty = 0
- END IF
- END IF
-
- SELECT u_mtrldef_maxminqty.minqty,
- u_mtrldef_maxminqty.maxqty
- INTO :ld_minqty,
- :ld_maxqty
- FROM u_mtrldef_maxminqty
- WHERE mtrlid = :arg_mtrlid
- AND status = :arg_status
- AND woodcode = :arg_woodcode
- And pcode = :arg_pcode Using sqlca;
- IF sqlca.SQLCode = -1 THEN
- arg_msg = "查询物料库存上下限资料失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- ELSEIF sqlca.SQLCode = 100 THEN
- ld_minqty = 0
- ld_maxqty = 99999
- END IF
- IF IsNull(ld_minqty) THEN ld_minqty = 0
- IF IsNull(ld_maxqty) THEN ld_maxqty = 99999
-
-
- arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
- IF arg_mtrlid = ll_mtrlid_order THEN
- ld_cmplqty = arg_qty
- li_ifmainmtrlid = 1
- ELSE
-
- IF arg_if_allowuse = 1 THEN
-
- IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
-
- IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uof_get_qty(4,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uof_get_qty(5,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
-
- END IF
-
-
-
- //找本次运算之前的应用
- IF arr_mxt = 0 THEN
- ld_samerqqty = 0
- ELSE
-
- FOR ll_i = 1 To arr_mxt
- IF arg_s_mtrl.scid[ll_i] = arg_scid &
- And arg_s_mtrl.taskid[ll_i] = arg_taskid &
- And arg_s_mtrl.printid[ll_i] = arg_printid &
- And arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid &
- And arg_s_mtrl.status[ll_i] = arg_status &
- And arg_s_mtrl.woodcode[ll_i] = arg_woodcode &
- And arg_s_mtrl.pcode[ll_i] = arg_pcode THEN
- ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i]
- END IF
-
- NEXT
- END IF
-
- IF arg_if_allowuse = 1 THEN
- IF li_mtrlorigin = 2 And ifbuy_mtrl_not_useqty THEN
- ld_cmplqty = arg_qty
- ELSEIF li_mtrlorigin = 3 And ifwx_mtrl_not_useqty THEN
- ld_cmplqty = arg_qty
- ELSE
- IF ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 THEN //有可用
- ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
- ELSE
- ld_cmplqty = arg_qty
- END IF
- END IF
-
- // If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN
- //
- // IF li_mtrlorigin = 2 THEN
- // IF ifbuy_mtrl_not_useqty THEN
- // ld_cmplqty = arg_qty
- // if_special_notuse = True
- // END IF
- // END IF
- //
- // IF li_mtrlorigin = 3 THEN
- // IF ifwx_mtrl_not_useqty THEN
- // ld_cmplqty = arg_qty
- // if_special_notuse = True
- // END IF
- // END IF
- //
- // END IF
- //
- // IF Not if_special_notuse THEN
- //
- // if ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 then //有可用
- // ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
- // else
- // ld_cmplqty = arg_qty
- // end if
- //
- //// IF ld_samerqqty > 0 THEN
- //// ld_cmplqty = arg_qty
- //// ELSE
- ////
- //// IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN
- //// ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
- //// ELSE
- //// ld_cmplqty = 0
- //// END IF
- ////
- //// END IF
- //
- // END IF
- ELSE
- ld_cmplqty = arg_qty
- END IF
-
- END IF
- arr_mxt ++
- arg_s_mtrl.scid[arr_mxt] = arg_scid
- arg_s_mtrl.taskid[arr_mxt] = arg_taskid
- arg_s_mtrl.printid[arr_mxt] = arg_printid
- arg_s_mtrl.mxpkid[arr_mxt] = arr_mxt
- arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid
- arg_s_mtrl.status[arr_mxt] = arg_status
- arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode
- arg_s_mtrl.pcode[arr_mxt] = arg_pcode
- arg_s_mtrl.qty[arr_mxt] = arg_qty
- arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
- arg_s_mtrl.plantype[arr_mxt] = li_mtrlorigin
- arg_s_mtrl.mqty[arr_mxt] = ld_mqty
- arg_s_mtrl.bqty[arr_mxt] = ld_bqty
- arg_s_mtrl.wqty[arr_mxt] = ld_wqty
- arg_s_mtrl.pqty[arr_mxt] = ld_pqty
- arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
- arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
- arg_s_mtrl.minqty[arr_mxt] = ld_minqty
- arg_s_mtrl.maxqty[arr_mxt] = ld_maxqty
- arg_s_mtrl.ckwareqty[arr_mxt] = ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty - ld_minqty
- arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
- arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
- arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
- arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
- arg_s_mtrl.unit[arr_mxt] = ls_unit
- arg_s_mtrl.Mtrlorigin[arr_mxt] = li_mtrlorigin
- arg_s_mtrl.mtrlprp[arr_mxt] = li_mtrlprp
- arg_s_mtrl.mtrlordertype[arr_mxt] = li_ordertype
- arg_s_mtrl.produce_wrkgrpid[arr_mxt] = arg_wrkgrpid
- arg_s_mtrl.lp[arr_mxt] = arg_lp
- //arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
- arg_s_mtrl.ifmainmtrlid[arr_mxt] = li_ifmainmtrlid
- arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid
- arg_s_mtrl.ifchanged[arr_mxt] = 0
- arg_s_mtrl.pfgroup[arr_mxt] = arg_pfgroup
- arg_s_mtrl.promode[arr_mxt] = ls_promode
- arg_s_mtrl.pfgroupmode[arr_mxt] = ls_pfgroupmode
- arg_s_mtrl.pfklmode[arr_mxt] = ls_pfklmode
- arg_s_mtrl.pfgroupqty[arr_mxt] = ld_pfgroupqty
- arg_s_mtrl.sptid[arr_mxt] = li_dftsptid
- //如果没有要生产的,不需要再计算下一级
- IF ld_cmplqty <= 0 THEN
- rslt = 1
- ELSE
-
- CHOOSE CASE li_mtrlorigin
- CASE 2, 6 //采购,
- rslt = 1
- GOTO ext
- CASE 0 //自制
-
- // IF ll_scid_mtrl <> arg_scid THEN
- // rslt = 1
- // GOTO ext
- // ELSE
- //不排产且不是主计划
- IF li_ifselforder = 1 And li_ifmainmtrlid = 0 THEN
- rslt = 1
- GOTO ext
- END IF
-
- // END IF
-
- END CHOOSE
-
- count = 0
-
-
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].dscrp ,
- :ls_s_pfmx[count].pfgroup ,
- :ls_s_pfmx[count].mrp_unit,
- :ls_s_pfmx[count].rate_buy,
- :ls_s_pfmx[count].rate_scll,
- :ls_s_pfmx[count].rate_sale,
- :ls_s_pfmx[count].promode,
- :ls_s_pfmx[count].pfgroupmode,
- :ls_s_pfmx[count].pfklmode,
- :ls_s_pfmx[count].pfgroupqty;
- 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].status ,
- :ls_s_pfmx[count].woodcode ,
- :ls_s_pfmx[count].pcode ,
- :ls_s_pfmx[count].wrkGrpid ,
- :ls_s_pfmx[count].dscrp ,
- :ls_s_pfmx[count].pfgroup ,
- :ls_s_pfmx[count].mrp_unit,
- :ls_s_pfmx[count].rate_buy,
- :ls_s_pfmx[count].rate_scll,
- :ls_s_pfmx[count].rate_sale,
- :ls_s_pfmx[count].promode,
- :ls_s_pfmx[count].pfgroupmode,
- :ls_s_pfmx[count].pfklmode,
- :ls_s_pfmx[count].pfgroupqty;
- LOOP
-
- count = count - 1
- CLOSE pf_cur;
-
- IF count = 0 THEN
- rslt = 1
- GOTO ext
- END IF
-
- FOR ll_j = 1 To count
- IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
- IF sys_option_sale_order_formula = 0 THEN //销售订单物料运算损耗率计算公式
- cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
- ELSE
- cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) * (1 + ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
- END IF
- ELSE
- cmpl_qty = 0
- END IF
-
- ////////////// //
-
- //按辅助单位补数, ?
- CHOOSE CASE ls_s_pfmx[ll_j].mrp_unit
- CASE 1
- IF ls_s_pfmx[ll_j].rate_buy > 0 THEN
- cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_buy) * ls_s_pfmx[ll_j].rate_buy
- END IF
- CASE 2
- IF ls_s_pfmx[ll_j].rate_scll > 0 THEN
- cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_scll) * ls_s_pfmx[ll_j].rate_scll
- END IF
- CASE 3
- IF ls_s_pfmx[ll_j].rate_sale > 0 THEN
- cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_sale) * ls_s_pfmx[ll_j].rate_sale
- END IF
- END CHOOSE
-
-
- rslt = uof_cmpl_rqmtrl(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg,ls_s_pfmx[ll_j].wrkGrpid,ls_s_pfmx[ll_j].pfgroup )
-
- IF rslt = 0 THEN
- EXIT
- END IF
-
- NEXT
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
- Long i, ll_rowcnt
- String ls_relbuytaskcode, ls_relbuytaskrelcode
- Int li_scllflag
- String ls_taskcode
- Decimal lde_price
- SELECT u_saletaskmx.scllflag, u_saletask.taskcode
- INTO :li_scllflag, :ls_taskcode
- FROM u_saletaskmx INNER join
- u_saletask on u_saletaskmx.scid = u_saletask.scid
- AND u_saletaskmx.taskid = u_saletask.taskid
- WHERE u_saletaskmx.scid = :arg_scid
- AND u_saletaskmx.taskid = :arg_relid
- AND u_saletaskmx.printid = :arg_relprintid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "查询销售订单明细信息操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- IF li_scllflag = 0 THEN
- rslt = 0
- ARG_MSG = "销售订单["+ls_taskcode+"],相关明细还未用料审,不能操作"
- GOTO ext
- END IF
- //查找单号
- if arg_plantype <> 3 then
- datastore ds
- ds = CREATE datastore
- ds.DataObject = "ds_orderrqmtrl_buytask"
- ds.SetTransObject(sqlca)
- ll_rowcnt = ds.Retrieve(arg_mxpkid)
-
- FOR i = 1 TO ll_rowcnt
- ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + ","
- ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + ","
- NEXT
-
- IF ls_relbuytaskcode <> "" THEN
- ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1)
- END IF
-
- IF ls_relbuytaskrelcode <> "" THEN
- ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1)
- END IF
- else //获取外协单号
- select taskcode into :ls_relbuytaskcode
- from u_order_wfjg inner join
- u_order_wfjgmx on u_order_wfjgmx.wfjgID = u_order_wfjg.wfjgID
- AND u_order_wfjgmx.scid = u_order_wfjg.scid
- WHERE u_order_wfjgmx.scid = :arg_scid
- AND u_order_wfjgmx.wfjgID = :arg_relid
- AND u_order_wfjgmx.printid = :arg_relprintid;
- IF sqlca.SQLCode <> 0 THEN
- ls_relbuytaskcode = ''
- END IF
- end if
- IF arg_plantype = 2 THEN
- //查第一张采购订单的单价;
- SELECT top 1 isnull(uprice,0)
- INTO :lde_price
- FROM u_buytaskmx INNER join
- u_buytask on u_buytaskmx.scid = u_buytask.scid
- AND u_buytaskmx.taskid = u_buytask.taskid
- WHERE u_buytaskmx.relid = :arg_relid
- AND u_buytaskmx.relprintid = :arg_relprintid
- AND u_buytaskmx.relid2 = :arg_mxpkid
- AND u_buytask.status <> 0
- Order By u_buytaskmx.taskid ;
- IF sqlca.SQLCode <> 0 THEN
- lde_price = 0
- END IF
- ELSEIF arg_plantype = 3 THEN
- //查外协
-
- END IF
- UPDATE u_OrderRqMtrl
- SET consignedqty = consignedqty + :arg_addqty,
- relbytskcode = :ls_relbuytaskcode,
- relbytskrelcode = :ls_relbuytaskrelcode,
- relbytskprice = :lde_price
- WHERE mxpkid = :arg_mxpkid
- AND scid = :arg_scid
- AND taskID = :arg_relid
- AND printid = :arg_relprintid
- AND plantype = :arg_plantype
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "更新销售订单明细的已订货数操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- ARG_MSG = "销售订单明细的已订货数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
- Long i, ll_rowcnt
- String ls_relbuytaskcode, ls_relbuytaskrelcode
- //查找单号
- datastore ds
- ds = CREATE datastore
- ds.DataObject = "ds_orderrqmtrl_buytask"
- ds.settransobject(sqlca)
- ll_rowcnt = ds.Retrieve(arg_mxpkid)
- FOR i = 1 TO ll_rowcnt
- ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + ","
- ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + ","
- NEXT
- IF ls_relbuytaskcode <> "" THEN
- ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1)
- END IF
- IF ls_relbuytaskrelcode <> "" THEN
- ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1)
- END IF
- UPDATE u_OrderRqMtrl
- SET relbytskcode = :ls_relbuytaskcode,
- relbytskrelcode = :ls_relbuytaskrelcode
- WHERE mxpkid = :arg_mxpkid
- and scid = :arg_scid
- and taskID = :arg_relid
- and printid = :arg_relprintid
- and plantype = :arg_plantype
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- ARG_MSG = "因网络或其它原因导致更新销售订单明细的订货单号操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- elseIF sqlca.SQLNrows = 0 THEN
- rslt = 0
- arg_msg = "销售订单明细的订货单号正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
- Long ll_MtrlID
- String ls_status, ls_woodcode, ls_pcode
- Decimal lde_Dstrqty, lde_truerqqty
- Decimal lde_upscllrate, lde_upscllqty
- SELECT MtrlID,
- status,
- woodcode,
- pcode,
- DstrQty,
- truerqqty
- INTO :ll_MtrlID,
- :ls_status,
- :ls_woodcode,
- :ls_pcode,
- :lde_Dstrqty,
- :lde_truerqqty
- FROM u_saleRqMtrl_scll
- WHERE scid = :arg_scid
- AND taskid = :arg_relid
- AND printid = :arg_relprintid
- AND rqmtrlid = :arg_rqmtrlid
- Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询销售订单明细的已领用数失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- SELECT upscllrate, upscllqty
- INTO :lde_upscllrate, :lde_upscllqty
- FROM u_mtrldef
- WHERE mtrlid = :ll_mtrlid
- Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料明细资料失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF arg_addqty > 0 THEN //增加
- IF lde_truerqqty * (1 + lde_upscllrate) + lde_upscllqty < lde_Dstrqty + arg_addqty THEN
- rslt = 0
- arg_msg = "销售订单需求明细的未领用数不足够更新。"
- GOTO ext
- END IF
- ELSE
- IF lde_Dstrqty < Abs(arg_addqty) THEN
- rslt = 0
- arg_msg = "销售订单需求明细的已领用数不足够更新。"
- GOTO ext
- END IF
- END IF
- UPDATE u_saleRqMtrl_scll
- SET DstrQty = dstrqty + :arg_addqty
- WHERE scid = :arg_scid
- AND taskid = :arg_relid
- AND printid = :arg_relprintid
- AND rqmtrlid = :arg_rqmtrlid
- Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新销售订单明细的已领用数失败,'+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "销售订单明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- //更新uof_add_rqmtrl_dstrqty
- IF uof_add_rqmtrl_dstrqty(arg_scid, arg_relid, arg_relprintid, ll_MtrlID, ls_status, ls_woodcode, ls_pcode, arg_addqty, False, arg_msg) = 0 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK Using sqlca;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT Using sqlca;
- END IF
- RETURN rslt
- end function
- public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
- Long i, ll_rowcnt
- Decimal lde_addqty, lde_restqty, lde_qty
- Long ll_mxpkid
- IF arg_addqty = 0 THEN
- rslt = 1
- GOTO ext
- END IF
- lde_qty = arg_addqty
- //查找单号
- datastore ds
- ds = CREATE datastore
- ds.DataObject = "ds_orderrqmtrl_scll"
- ds.SetTransObject(sqlca)
- ll_rowcnt = ds.Retrieve(arg_scid, arg_relid, arg_relprintid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode)
- IF lde_qty > 0 THEN
- FOR i = 1 TO ll_rowcnt
- lde_addqty = Min(ds.Object.rqqty[i] - ds.Object.dstrqty[i], lde_qty)
- lde_qty -= lde_addqty
-
- ll_mxpkid = ds.Object.mxpkid[i]
-
- UPDATE u_OrderRqMtrl
- SET DstrQty = dstrqty + :lde_addqty
- WHERE scid = :arg_scid
- AND taskid = :arg_relid
- AND printid = :arg_relprintid
- AND mxpkid = :ll_mxpkid
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
-
-
- IF lde_qty <= 0 THEN EXIT
- NEXT
-
- ELSE
- lde_qty = Abs(lde_qty)
- FOR i = 1 TO ll_rowcnt
- IF ds.Object.dstrqty[i] > 0 THEN
- lde_addqty = Min(ds.Object.dstrqty[i], lde_qty)
- lde_qty -= lde_addqty
-
- ll_mxpkid = ds.Object.mxpkid[i]
-
- UPDATE u_OrderRqMtrl
- SET DstrQty = dstrqty - :lde_addqty
- WHERE scid = :arg_scid
- AND taskid = :arg_relid
- AND printid = :arg_relprintid
- AND mxpkid = :ll_mxpkid
- USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
-
-
- IF lde_qty <= 0 THEN EXIT
- END IF
- NEXT
- END IF
- //IF lde_qty > 0 THEN
- // rslt = 0
- // arg_msg = "销售订单需求明细的已领用数不足够更新。"
- // GOTO ext
- //END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- DESTROY ds
- RETURN rslt
- end function
- public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1
- Long ll_i
- String ls_mtrlcode
- Long cnt
- Long ll_mxpkid
- Decimal ld_consignedqty,ld_inqty
- IF arg_s_mtrl.plantype[1] = 2 THEN //检查采购订单;
- SELECT count(*)
- INTO :cnt
- FROM u_buytask INNER join
- u_buytaskmx on u_buytask.scid = u_buytaskmx.scid
- AND u_buytask.taskid = u_buytaskmx.taskid
- Where u_buytaskmx.relid2 = :arg_s_mtrl.mxpkid[1];
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询原用料采购订单信息失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
-
- IF cnt > 0 THEN
- arg_msg = "原用料已建立采购订单,不能操作"
- rslt = 0
- GOTO ext
- END IF
-
- ELSEIF arg_s_mtrl.plantype[1] = 3 THEN //检查外协订单
-
- END IF
- ld_consignedqty = 0
- ld_inqty = 0
- SELECT consignedqty,
- inqty
- INTO :ld_consignedqty,
- :ld_inqty
- FROM u_orderRqMtrl
- WHERE mxpkid = :arg_s_mtrl.mxpkid[1]
- AND scid = :arg_s_mtrl.scid[1]
- AND taskid = :arg_s_mtrl.taskid[1]
- AND printid = :arg_s_mtrl.printid[1]
- AND plantype = :arg_s_mtrl.plantype[1] USING sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- IF arg_s_mtrl.plantype[1] = 2 THEN
- IF ld_consignedqty > 0 THEN
- arg_msg = "原用料已有采购已订货数,不能操作"
- rslt = 0
- GOTO ext
- ELSEIF ld_inqty > 0 THEN
- arg_msg = "原用料已有采购已进仓数,不能操作"
- rslt = 0
- GOTO ext
- END IF
-
- ELSEIF arg_s_mtrl.plantype[1] = 3 THEN
- IF ld_consignedqty > 0 THEN
- arg_msg = "原用料已有外协已订货数,不能操作"
- rslt = 0
- GOTO ext
- ELSEIF ld_inqty > 0 THEN
- arg_msg = "原用料已有外协已进仓数,不能操作"
- rslt = 0
- GOTO ext
- END IF
- END IF
- UPDATE u_orderRqMtrl
- SET RqQty = :arg_s_mtrl.qty[1] ,
- truerqqty = :arg_s_mtrl.cmplqty[1]
- WHERE mxpkid = :arg_s_mtrl.mxpkid[1] AND
- scid = :arg_s_mtrl.scid[1] AND
- taskID = :arg_s_mtrl.taskid[1] AND
- printid = :arg_s_mtrl.printid[1] AND
- plantype = :arg_s_mtrl.plantype[1] USING sqlca;
-
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = "更新销售订单明细的运算结果操作失败"+"~n"+sqlca.SQLErrText
- GOTO ext
- ELSEIF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = "销售订单明细的运算结果正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK USING sqlca;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT USING sqlca;
- END IF
- RETURN rslt
- end function
- on uo_order_ml_mrp.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_order_ml_mrp.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|