uo_order_ml_mrp.sru 186 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916
  1. $PBExportHeader$uo_order_ml_mrp.sru
  2. forward
  3. global type uo_order_ml_mrp from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_ml_mrp from nonvisualobject
  7. end type
  8. global uo_order_ml_mrp uo_order_ml_mrp
  9. type variables
  10. Long deep,deep_scll
  11. Boolean ifzl_mtrl_not_useqty,ifzl_mtrl_pwx_not_useqty,ifwx_mtrl_not_useqty,if_pqty_not_zl,ifpack_mtrl_not_useqty
  12. Boolean if_rqwfjg_useqty,if_rqbuy_useqty
  13. Boolean if_qty_dscrp = False
  14. Boolean if_uof_add_rqmtrl_del_old = True
  15. Int if_otherrq_mrpaudit = 1
  16. Int uo_option_packpro2_pf_pack2_useifover
  17. Int uo_option_ifpackpro2_if_no_pack2
  18. Int uo_option_produce_dec
  19. Long ins_produce_wrkgrpid_bj,ins_wrkGrpid_scll_bj
  20. int uo_option_scll_ifchanged
  21. end variables
  22. forward prototypes
  23. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  24. public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  25. public function integer uof_check_dstrqty (long arg_scid, long arg_orderid, ref string arg_msg)
  26. public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  27. public function integer uof_get_qty (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg)
  28. public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg)
  29. public function integer uof_get_other_rqqty (long arg_scid, long arg_orderid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, integer arg_ifdate, datetime arg_date, ref string arg_msg)
  30. public function integer uof_get_rqmtrl (long arg_scid, long arg_orderid, long arg_porderid, ref s_order_ml_rqmtrl arg_ref_s_rqmtrl, ref string arg_msg)
  31. public function integer uof_pfcode_check (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, ref string arg_msg)
  32. private function integer uof_get_max_advancetime (long arg_mtrlid, string arg_pfcode, ref decimal arg_ref_advancetime, ref string arg_msg)
  33. public function integer uof_get_prdpf_dytype (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref integer arg_ref_dytype, ref string arg_msg)
  34. public function integer uof_get_prdpf_replace (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref s_prdpf_replace arg_ref_s_replace, ref string arg_msg)
  35. public subroutine uof_cmpl_rqmtrl_dy_mx (long arg_begin_i, integer arg_dy, ref s_order_ml_rqmtrl arg_s_mtrl, s_prdpf_replace arg_pf_dy)
  36. 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, string arg_pfcode, decimal arg_qty, long arg_wrkgrpid_scll, datetime arg_rqdate, string arg_gydscrp, string arg_pfklmode, string arg_pfgroup, string arg_pfgroupmode, decimal arg_advancetime, decimal arg_sonloss, decimal arg_sondecloss, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  37. public function integer uof_get_prdpf_sonloss (string arg_sonlossstr, decimal arg_qty, ref decimal arg_sonloss)
  38. public function integer uof_get_qty_dscrp (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_ref_dscrp, ref string arg_msg)
  39. private function integer uof_get_max_advancetime2 (long arg_mtrlid, string arg_status, ref decimal arg_ref_advancetime, ref string arg_msg)
  40. public function integer uof_cmpl_rqmtrl_fp (long arg_scid, long arg_orderid, integer arg_if_allowuse, integer arg_ifdate, datetime arg_enddate, s_order_ml_rqmtrl arg_s_mtrl, ref s_mtrlware_assign_plan arg_ref_s_assign_plan, ref string arg_msg)
  41. public function integer uof_cmpl_rqmtrl_dy (integer arg_ifdate, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  42. public function integer uof_aps_update_date (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg)
  43. public function integer uof_cmpl_rqmtrl (long arg_lp, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  44. public function integer uof_cmpl_rqmtrl_re (long arg_lp, integer arg_plantype, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  45. public function integer uof_saletaskmx_pf_add (s_saletaskmx_pf arg_s_stpf, ref string arg_msg, boolean arg_ifcommit)
  46. public function integer uof_saletaskmx_pf_del (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  47. public function integer uof_add_rqmtrl_scll_find (long arg_p, long arg_p_mtrlid, integer arg_ifpackpro, string arg_status, string arg_woodcode, string arg_pcode, s_order_ml_rqmtrl arg_s_mtrl, ref s_order_ml_rqmtrl_scll arg_s_mtrl_scll, long arg_e, ref string arg_msg)
  48. end prototypes
  49. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存领料明细
  50. Int rslt = 1
  51. Long ll_i,cnt,i
  52. Long ll_mtrlid,ll_porderid,ll_mxid,ll_mtrlid_p
  53. Long ll_scid,ll_orderid
  54. String ls_mtrlcode
  55. Decimal ld_orderqty_zl,ld_orderqty_p
  56. Int li_ordertype,li_ifpackpro,li_ifpack,li_ordertype_mtrldef,li_mtrlorigin_mtrldef,li_ifselforder_mtrldef
  57. Decimal ld_rate,ld_zlmxqty,ld_rqmxqty
  58. Int li_outscllflag,li_iffp
  59. String ls_status,ls_woodcode,ls_pcode
  60. Decimal ld_assignqty_order,ld_fpqty_zl,ld_assignqty_update
  61. Int li_iffg,li_ifauto
  62. s_order_ml_rqmtrl_scll arg_s_mtrl_scll
  63. ll_scid = arg_s_mtrl.scid[1]
  64. ll_orderid = arg_s_mtrl.orderid[1]
  65. uo_mtrlware_assign uo_scll_fp
  66. uo_scll_fp = Create uo_mtrlware_assign
  67. uo_scll_fp.commit_transaction = sqlca
  68. datastore ds_order_mtrl_fp_2_zl
  69. ds_order_mtrl_fp_2_zl = Create datastore
  70. ds_order_mtrl_fp_2_zl.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp'
  71. ds_order_mtrl_fp_2_zl.SetTransObject(sqlca)
  72. SELECT u_order_ml.mtrlid,
  73. u_order_ml.orderqty,
  74. u_order_ml.ordertype,
  75. u_order_ml.outscllflag,
  76. u_mtrldef.ifpackpro,
  77. u_mtrldef.mtrlorigin,
  78. u_mtrldef.ordertype,
  79. u_order_ml.status_mode,
  80. u_order_ml.woodcode,
  81. u_order_ml.pcode,
  82. u_order_ml.iffg,
  83. u_order_ml.ifauto,
  84. u_mtrldef.ifselforder
  85. INTO :ll_mtrlid,
  86. :ld_orderqty_zl,
  87. :li_ordertype,
  88. :li_outscllflag,
  89. :li_ifpackpro,
  90. :li_mtrlorigin_mtrldef,
  91. :li_ordertype_mtrldef,
  92. :ls_status,
  93. :ls_woodcode,
  94. :ls_pcode,
  95. :li_iffg,
  96. :li_ifauto,
  97. :li_ifselforder_mtrldef
  98. FROM u_order_ml,u_mtrldef
  99. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  100. AND u_order_ml.orderid = :ll_orderid
  101. And u_order_ml.scid = :ll_scid;
  102. IF sqlca.SQLCode <> 0 THEN
  103. arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText
  104. rslt = 0
  105. GOTO ext
  106. END IF
  107. DELETE FROM u_ordermtrl_wrk_mtrl
  108. Where scid = :ll_scid And orderid = :ll_orderid;
  109. IF sqlca.SQLCode <> 0 THEN
  110. arg_msg = '删除指令工组足料提示表工组资料失败,操作取消'+sqlca.SQLErrText
  111. rslt = 0
  112. GOTO ext
  113. END IF
  114. //不是领料
  115. IF li_outscllflag = 0 THEN
  116. rslt = 1
  117. GOTO ext
  118. END IF
  119. //非包件产品,指令单分离的主生产计划
  120. //IF li_ifpackpro = 0 And li_ordertype_mtrldef = 1 And li_ordertype <> 4 THEN
  121. // rslt = 1
  122. // GOTO ext
  123. //END IF
  124. //包件产品,不使用包件清单的主生产计划
  125. //IF li_ifpackpro = 1 And li_ifmrppackpf = 0 And li_ordertype <> 4 THEN
  126. // rslt = 1
  127. // GOTO ext
  128. //END IF
  129. IF li_mtrlorigin_mtrldef = 2 THEN
  130. arg_s_mtrl_scll.mtrlid[1] = ll_mtrlid
  131. arg_s_mtrl_scll.wrkgrpid[1] = ins_wrkGrpid_scll_bj
  132. arg_s_mtrl_scll.status[1] = ls_status
  133. arg_s_mtrl_scll.woodcode[1] = ls_woodcode
  134. arg_s_mtrl_scll.pcode[1] = ls_pcode
  135. arg_s_mtrl_scll.truerqqty[1] = ld_orderqty_zl
  136. ELSE
  137. IF uof_add_rqmtrl_scll_find(1,ll_mtrlid,li_ifpackpro,ls_status,ls_woodcode,ls_pcode,arg_s_mtrl,arg_s_mtrl_scll,UpperBound(arg_s_mtrl.mtrlid),arg_msg) = 0 THEN
  138. rslt = 0
  139. GOTO ext
  140. END IF
  141. END IF
  142. //yyx 090409 指令分数量排产
  143. IF li_ordertype = 4 And Not (li_iffg = 1 And li_ifauto = 1 ) THEN
  144. ll_porderid = arg_s_mtrl.porderid[1]
  145. SELECT qty,taskmxid
  146. INTO :ld_zlmxqty,:ll_mxid
  147. FROM u_order_ml_mx
  148. WHERE scid = :ll_scid
  149. AND orderid = :ll_orderid
  150. And taskid = :ll_porderid;
  151. IF sqlca.SQLCode <> 0 THEN
  152. arg_msg = '查询指令明细排产数量失败,'+sqlca.SQLErrText
  153. rslt = 0
  154. GOTO ext
  155. END IF
  156. IF ld_zlmxqty = 0 THEN
  157. arg_msg = '错误的指令明细排产数'
  158. rslt = 0
  159. GOTO ext
  160. END IF
  161. SELECT mtrlid,orderqty
  162. INTO :ll_mtrlid_p,:ld_orderqty_p
  163. FROM u_order_ml
  164. WHERE scid = :ll_scid
  165. And orderid = :ll_porderid;
  166. IF sqlca.SQLCode <> 0 THEN
  167. arg_msg = '查询指令所属主生产计划物料id失败,'+sqlca.SQLErrText
  168. rslt = 0
  169. GOTO ext
  170. END IF
  171. SELECT truerqqty INTO :ld_rqmxqty
  172. FROM u_orderrqmtrl
  173. WHERE scid = :ll_scid
  174. And mxpkid = :ll_mxid;
  175. IF sqlca.SQLCode <> 0 THEN
  176. arg_msg = '查询上级计划需求明细需求数量失败,'+sqlca.SQLErrText
  177. rslt = 0
  178. GOTO ext
  179. END IF
  180. IF ld_rqmxqty = 0 THEN
  181. arg_msg = '错误的上级计划需求明细需求数'
  182. rslt = 0
  183. GOTO ext
  184. END IF
  185. IF li_ordertype_mtrldef = 1 And ll_mtrlid_p = ll_mtrlid THEN
  186. ld_rate = Round(ld_orderqty_zl/ld_orderqty_p,10)
  187. ELSE
  188. ld_rate = Round(ld_zlmxqty/ld_rqmxqty,10)
  189. END IF
  190. ELSE
  191. ld_rate = 1
  192. END IF
  193. //yyx 090409
  194. FOR ll_i = 1 To UpperBound(arg_s_mtrl_scll.mtrlid)
  195. IF arg_s_mtrl_scll.truerqqty[ll_i] = 0 THEN CONTINUE
  196. SELECT mtrlcode,ifpack,iffp
  197. INTO :ls_mtrlcode,:li_ifpack,:li_iffp
  198. FROM u_mtrldef
  199. Where mtrlid = :arg_s_mtrl_scll.mtrlid[ll_i];
  200. IF sqlca.SQLCode <> 0 THEN
  201. arg_msg = '查询物料资料失败,'+sqlca.SQLErrText
  202. rslt = 0
  203. GOTO ext
  204. END IF
  205. IF li_ifpackpro = 1 And li_ifpack = 1 THEN CONTINUE
  206. IF li_ifpackpro = 2 And li_ifselforder_mtrldef = 3 THEN CONTINUE
  207. UPDATE u_OrderRqMtrl_scll
  208. SET truerqqty = truerqqty + round(:arg_s_mtrl_scll.truerqqty[ll_i] * :ld_rate,:uo_option_produce_dec)
  209. WHERE orderid = :ll_orderid
  210. AND scid = :ll_scid
  211. AND mtrlid = :arg_s_mtrl_scll.mtrlid[ll_i]
  212. AND status = :arg_s_mtrl_scll.status[ll_i]
  213. AND woodcode = :arg_s_mtrl_scll.woodcode[ll_i]
  214. AND pcode = :arg_s_mtrl_scll.pcode[ll_i]
  215. And wrkgrpid = :arg_s_mtrl_scll.wrkgrpid[ll_i];
  216. IF sqlca.SQLCode = 0 THEN
  217. IF sqlca.SQLNRows = 0 THEN
  218. INSERT INTO u_OrderRqMtrl_scll
  219. (scid,
  220. orderid,
  221. mtrlid,
  222. status,
  223. woodcode,
  224. pcode,
  225. truerqqty,
  226. DstrQty,
  227. wrkGrpid)
  228. VALUES
  229. (:ll_scid,
  230. :ll_orderid,
  231. :arg_s_mtrl_scll.mtrlid[ll_i],
  232. :arg_s_mtrl_scll.status[ll_i],
  233. :arg_s_mtrl_scll.woodcode[ll_i],
  234. :arg_s_mtrl_scll.pcode[ll_i],
  235. round(:arg_s_mtrl_scll.truerqqty[ll_i] * :ld_rate,:sys_option_produce_dec),
  236. 0,
  237. :arg_s_mtrl_scll.wrkgrpid[ll_i]);
  238. IF sqlca.SQLCode <> 0 THEN
  239. arg_msg = '物料:'+ls_mtrlcode+',建立生产计划物料领料明细失败,'+sqlca.SQLErrText
  240. rslt = 0
  241. GOTO ext
  242. END IF
  243. END IF
  244. ELSE
  245. arg_msg = '物料:'+ls_mtrlcode+',更新物料用料明细表失败,'+sqlca.SQLErrText
  246. rslt = 0
  247. GOTO ext
  248. END IF
  249. //工组是否足料表
  250. cnt = 0
  251. SELECT count(*) INTO :cnt
  252. FROM u_ordermtrl_wrk_mtrl
  253. WHERE scid = :ll_scid
  254. AND orderid = :ll_orderid
  255. And wrkgrpid = :arg_s_mtrl_scll.wrkgrpid[ll_i];
  256. IF sqlca.SQLCode <> 0 THEN
  257. arg_msg = '查询指令工组足料提示表是否存在工组id:'+String(arg_s_mtrl_scll.wrkgrpid[ll_i])+' 失败,操作取消'+sqlca.SQLErrText
  258. rslt = 0
  259. GOTO ext
  260. END IF
  261. IF cnt = 0 THEN
  262. INSERT INTO u_ordermtrl_wrk_mtrl(scid,orderid,wrkGrpid)
  263. Values(:ll_scid,:ll_orderid,:arg_s_mtrl_scll.wrkgrpid[ll_i]);
  264. IF sqlca.SQLCode <> 0 THEN
  265. arg_msg = '增加指令工组足料提示表工组id:'+String(arg_s_mtrl_scll.wrkgrpid[ll_i])+' 失败,操作取消'+sqlca.SQLErrText
  266. rslt = 0
  267. GOTO ext
  268. END IF
  269. END IF
  270. //分配
  271. IF ll_porderid > 0 And li_iffp = 1 THEN
  272. ds_order_mtrl_fp_2_zl.Retrieve(ll_scid,ll_porderid,arg_s_mtrl_scll.mtrlid[ll_i],arg_s_mtrl_scll.status[ll_i],arg_s_mtrl_scll.woodcode[ll_i],arg_s_mtrl_scll.pcode[ll_i],arg_s_mtrl_scll.wrkgrpid[ll_i])
  273. ld_assignqty_order = arg_s_mtrl_scll.truerqqty[ll_i] * ld_rate
  274. FOR i = 1 To ds_order_mtrl_fp_2_zl.RowCount()
  275. IF ld_assignqty_order > 0 THEN
  276. ld_fpqty_zl = ds_order_mtrl_fp_2_zl.Object.notfpqty[i]
  277. IF ld_fpqty_zl > ld_assignqty_order THEN
  278. ld_assignqty_update = ld_assignqty_order
  279. ld_assignqty_order = 0
  280. ELSE
  281. ld_assignqty_update = ld_fpqty_zl
  282. ld_assignqty_order = ld_assignqty_order - ld_fpqty_zl
  283. END IF
  284. IF uo_scll_fp.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,arg_s_mtrl_scll.mtrlid[ll_i],&
  285. arg_s_mtrl_scll.wrkgrpid[ll_i],arg_s_mtrl_scll.status[ll_i],arg_s_mtrl_scll.woodcode[ll_i],&
  286. arg_s_mtrl_scll.pcode[ll_i],ld_assignqty_update,&
  287. 0,0,0,arg_msg,False) = 0 THEN
  288. arg_msg = '物料:'+ls_mtrlcode+',建立指令单用料分配数失败,'+arg_msg
  289. rslt = 0
  290. GOTO ext
  291. END IF
  292. END IF
  293. NEXT
  294. END IF
  295. NEXT
  296. ext:
  297. IF rslt = 0 THEN
  298. ROLLBACK;
  299. ELSEIF rslt = 1 And arg_ifcommit THEN
  300. COMMIT;
  301. END IF
  302. Destroy uo_scll_fp
  303. Destroy ds_order_mtrl_fp_2_zl
  304. RETURN rslt
  305. end function
  306. public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存需求明细
  307. Int rslt = 1
  308. Long ll_i,ll_mtrlid_order
  309. Int li_ordertype_order_ml,li_ifwforder
  310. Int li_ordertype
  311. String ls_mtrlcode
  312. Long cnt
  313. Int li_ifselforder,li_statusflag,li_mtrlorigin
  314. IF if_uof_add_rqmtrl_del_old THEN
  315. DELETE FROM u_orderRqMtrl
  316. WHERE orderid = :arg_s_mtrl.orderid[1]
  317. And scid = :arg_s_mtrl.scid[1];
  318. IF sqlca.SQLCode <> 0 THEN
  319. arg_msg = '删除原用料失败,'+sqlca.SQLErrText
  320. rslt = 0
  321. GOTO ext
  322. END IF
  323. END IF
  324. SELECT mtrlid INTO :ll_mtrlid_order
  325. FROM u_order_ml
  326. WHERE orderid = :arg_s_mtrl.orderid[1]
  327. And scid = :arg_s_mtrl.scid[1];
  328. IF sqlca.SQLCode <> 0 THEN
  329. arg_msg = '删除主生产计划物料id失败,'+sqlca.SQLErrText
  330. rslt = 0
  331. GOTO ext
  332. END IF
  333. FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid)
  334. SELECT mtrlcode,ifselforder,statusflag,ordertype,mtrlorigin
  335. INTO :ls_mtrlcode,:li_ifselforder,:li_statusflag,:li_ordertype,:li_mtrlorigin
  336. FROM u_mtrldef
  337. Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
  338. IF sqlca.SQLCode <> 0 THEN
  339. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料资料失败,'+sqlca.SQLErrText
  340. rslt = 0
  341. GOTO ext
  342. END IF
  343. //个性包件不加入需求表
  344. IF arg_s_mtrl.ifpack[ll_i] = 2 And arg_s_mtrl.mtrlid[ll_i] <> ll_mtrlid_order THEN CONTINUE
  345. //检查组合配置包件产品
  346. IF arg_s_mtrl.ifcfg[ll_i] = 1 THEN //子件
  347. IF arg_s_mtrl.ifpackpro[ll_i] <> 3 THEN CONTINUE
  348. END IF
  349. IF arg_s_mtrl.ifcfg[ll_i] = 0 THEN
  350. IF arg_s_mtrl.ifpackpro[ll_i] = 3 THEN CONTINUE
  351. END IF
  352. IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 THEN
  353. //更新计划开始日期
  354. IF sys_option_ifuse_ordersdate = 1 THEN
  355. UPDATE u_order_ml
  356. SET orderdate = :arg_s_mtrl.edate[1]
  357. WHERE orderid = :arg_s_mtrl.orderid[1]
  358. And scid = :arg_s_mtrl.scid[1];
  359. IF sqlca.SQLCode <> 0 THEN
  360. arg_msg = '更新主生产计划的计划开始日期失败,'+sqlca.SQLErrText
  361. rslt = 0
  362. GOTO ext
  363. END IF
  364. END IF
  365. IF arg_s_mtrl.ifpackpro[ll_i] = 1 And li_ordertype = 0 THEN CONTINUE //通用包件产品指令单合并
  366. IF arg_s_mtrl.ifpackpro[ll_i] = 2 And li_ordertype = 0 THEN CONTINUE //个性包件产品指令单合并
  367. IF arg_s_mtrl.ifmainmtrlid[ll_i] = 0 And arg_s_mtrl.ifpack[ll_i] = 2 THEN CONTINUE //个性包件
  368. //yyx20101012 --外协计划
  369. SELECT ordertype,ifwforder INTO :li_ordertype_order_ml,:li_ifwforder
  370. FROM u_order_ml
  371. WHERE orderid = :arg_s_mtrl.orderid[ll_i]
  372. And scid = :arg_s_mtrl.scid[ll_i];
  373. IF sqlca.SQLCode <> 0 THEN
  374. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询计划类型失败,'+sqlca.SQLErrText
  375. rslt = 0
  376. GOTO ext
  377. END IF
  378. IF li_ordertype = 0 And not (li_ordertype_order_ml = 3 or li_ifwforder = 1) THEN CONTINUE
  379. //
  380. END IF
  381. cnt = 0
  382. SELECT count(*) INTO :cnt
  383. FROM u_scdef
  384. Where scid = :arg_s_mtrl.produce_scid[ll_i];
  385. IF sqlca.SQLCode <> 0 THEN
  386. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询清单物料生产分部资料失败,'+sqlca.SQLErrText
  387. rslt = 0
  388. GOTO ext
  389. END IF
  390. IF cnt = 0 THEN
  391. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',清单物料生产分部未定义,请检查'
  392. rslt = 0
  393. GOTO ext
  394. END IF
  395. IF arg_s_mtrl.plantype[ll_i] = 0 THEN
  396. IF li_ifselforder = 0 And arg_s_mtrl.ifpackpro[ll_i] <> 3 And arg_s_mtrl.ifpackpro[ll_i] <> 4 and ll_i <> 1 THEN CONTINUE
  397. IF arg_s_mtrl.scid[ll_i] = arg_s_mtrl.produce_scid[ll_i] And &
  398. arg_s_mtrl.produce_wrkgrpid[ll_i] = 0 THEN
  399. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择生产车间'
  400. rslt = 0
  401. GOTO ext
  402. END IF
  403. cnt = 0
  404. SELECT count(*) INTO :cnt
  405. FROM u_sc_wkp
  406. Where wrkgrpid = :arg_s_mtrl.produce_wrkgrpid[ll_i];
  407. IF sqlca.SQLCode <> 0 THEN
  408. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询车间资料失败,'+sqlca.SQLErrText
  409. rslt = 0
  410. GOTO ext
  411. END IF
  412. IF cnt <> 1 THEN
  413. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',车间资料不存在或重复'
  414. rslt = 0
  415. GOTO ext
  416. END IF
  417. IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 And li_statusflag = 2 THEN
  418. ELSE
  419. IF arg_s_mtrl.pfcode[ll_i] = '' THEN
  420. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择物料清单'
  421. rslt = 0
  422. GOTO ext
  423. END IF
  424. cnt = 0
  425. SELECT count(*) INTO :cnt
  426. FROM u_mtrl_pf
  427. WHERE mtrlid = :arg_s_mtrl.mtrlid[ll_i]
  428. And pfcode = :arg_s_mtrl.pfcode[ll_i];
  429. IF sqlca.SQLCode <> 0 THEN
  430. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料:'+ls_mtrlcode+' 物料清单失败,'+sqlca.SQLErrText
  431. rslt = 0
  432. GOTO ext
  433. END IF
  434. IF cnt <> 1 THEN
  435. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',查询物料:'+ls_mtrlcode+' 物料清单不存在或重复'
  436. rslt = 0
  437. GOTO ext
  438. END IF
  439. END IF
  440. ELSE
  441. arg_s_mtrl.produce_wrkgrpid[ll_i] = 0
  442. IF arg_s_mtrl.plantype[ll_i] = 2 Or arg_s_mtrl.plantype[ll_i] = 6 THEN
  443. IF arg_s_mtrl.scid[ll_i] <> arg_s_mtrl.produce_scid[ll_i] THEN
  444. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料:'+ls_mtrlcode+' 请选择正确的分部'
  445. rslt = 0
  446. GOTO ext
  447. END IF
  448. END IF
  449. END IF
  450. Decimal ld_RqQty,ld_truerqqty,ld_scllqty
  451. ld_truerqqty = arg_s_mtrl.cmplqty[ll_i]
  452. ld_scllqty = arg_s_mtrl.scllqty[ll_i]
  453. IF arg_s_mtrl.ifmainmtrlid[ll_i] = 1 THEN
  454. IF li_ordertype = 1 Or li_ordertype_order_ml = 3 or li_ifwforder = 1 THEN
  455. ld_RqQty = 0
  456. ELSE
  457. ld_RqQty = arg_s_mtrl.qty[ll_i]
  458. END IF
  459. ELSE
  460. ld_RqQty = arg_s_mtrl.qty[ll_i]
  461. END IF
  462. UPDATE u_orderRqMtrl
  463. SET RqQty = RqQty + :ld_RqQty,
  464. truerqqty = truerqqty + :ld_truerqqty,
  465. scllqty = scllqty + :ld_scllqty
  466. WHERE scid = :arg_s_mtrl.scid[ll_i]
  467. AND OrderID = :arg_s_mtrl.OrderID[ll_i]
  468. AND MtrlID = :arg_s_mtrl.MtrlID[ll_i]
  469. AND wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i]
  470. AND status = :arg_s_mtrl.status[ll_i]
  471. AND woodcode = :arg_s_mtrl.woodcode[ll_i]
  472. AND pcode = :arg_s_mtrl.pcode[ll_i]
  473. AND plantype = :arg_s_mtrl.plantype[ll_i]
  474. And produce_wrkgrpid = :arg_s_mtrl.produce_wrkgrpid[ll_i];
  475. IF sqlca.SQLCode = 0 THEN
  476. IF sqlca.SQLNRows = 0 THEN
  477. Long ll_mxpkid
  478. IF arg_s_mtrl.plantype[ll_i] = 0 THEN
  479. ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,True,id_sqlca)
  480. IF ll_mxpkid <= 0 THEN
  481. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',取id失败,'+arg_msg
  482. rslt = 0
  483. GOTO ext
  484. END IF
  485. ELSE
  486. ll_mxpkid = 0
  487. END IF
  488. INSERT INTO u_orderRqMtrl
  489. (scid,
  490. orderid,
  491. mtrlid,
  492. rqqty,
  493. truerqqty,
  494. plantype,
  495. mqty,
  496. wmqty,
  497. bqty,
  498. wqty,
  499. pqty,
  500. pqty2,
  501. rqwfjgqty,
  502. rqbuyqty2,
  503. otherrqqty,
  504. otherrqqty_wx,
  505. otherrqqty_sale,
  506. rqdate,
  507. edate,
  508. wrkgrpid,
  509. produce_scid,
  510. produce_wrkgrpid,
  511. pfcode,
  512. status,
  513. woodcode,
  514. pcode,
  515. gydscrp,
  516. pfklmode,
  517. mxpkid,
  518. scllqty)
  519. VALUES
  520. (:arg_s_mtrl.scid[ll_i],
  521. :arg_s_mtrl.orderid[ll_i],
  522. :arg_s_mtrl.mtrlid[ll_i],
  523. :ld_RqQty,
  524. :ld_truerqqty,
  525. :arg_s_mtrl.plantype[ll_i],
  526. :arg_s_mtrl.mqty[ll_i],
  527. :arg_s_mtrl.wmqty[ll_i],
  528. :arg_s_mtrl.bqty[ll_i],
  529. :arg_s_mtrl.wqty[ll_i],
  530. :arg_s_mtrl.pqty[ll_i],
  531. :arg_s_mtrl.pqty2[ll_i],
  532. :arg_s_mtrl.rqwfjgqty[ll_i],
  533. :arg_s_mtrl.rqbuyqty[ll_i],
  534. :arg_s_mtrl.otherrqqty[ll_i],
  535. :arg_s_mtrl.otherrqqty_wx[ll_i],
  536. :arg_s_mtrl.otherrqqty_sale[ll_i],
  537. :arg_s_mtrl.sdate[ll_i],
  538. :arg_s_mtrl.edate[ll_i],
  539. :arg_s_mtrl.wrkgrpid_scll[ll_i],
  540. :arg_s_mtrl.produce_scid[ll_i],
  541. :arg_s_mtrl.produce_wrkgrpid[ll_i],
  542. :arg_s_mtrl.pfcode[ll_i],
  543. :arg_s_mtrl.status[ll_i],
  544. :arg_s_mtrl.woodcode[ll_i],
  545. :arg_s_mtrl.pcode[ll_i],
  546. :arg_s_mtrl.gydscrp[ll_i],
  547. :arg_s_mtrl.pfklmode[ll_i],
  548. :ll_mxpkid,
  549. :arg_s_mtrl.scllqty[ll_i]);
  550. IF sqlca.SQLCode <> 0 THEN
  551. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',建立物料需求表失败,'+sqlca.SQLErrText
  552. rslt = 0
  553. GOTO ext
  554. END IF
  555. END IF
  556. ELSE
  557. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',更新物料需求表失败,'+sqlca.SQLErrText
  558. rslt = 0
  559. GOTO ext
  560. END IF
  561. NEXT
  562. ext:
  563. IF rslt = 0 THEN
  564. ROLLBACK;
  565. ELSEIF rslt = 1 And arg_ifcommit THEN
  566. COMMIT;
  567. END IF
  568. RETURN rslt
  569. end function
  570. public function integer uof_check_dstrqty (long arg_scid, long arg_orderid, ref string arg_msg);//检查已领数
  571. Int rslt = 1
  572. Int li_status,li_scllflag,li_scllsecflag
  573. SELECT status,scllflag,scllsecflag
  574. INTO :li_status,:li_scllflag,:li_scllsecflag
  575. FROM u_order_ml
  576. WHERE scid = :arg_scid
  577. AND orderid = :arg_orderid;
  578. IF sqlca.SQLCode <> 0 THEN
  579. arg_msg = '查询生产计划状态失败,'+sqlca.SQLErrText
  580. rslt = 0
  581. GOTO ext
  582. END IF
  583. IF li_status <> 1 THEN
  584. arg_msg = '生产计划不是在进行状态,不能计算用料'
  585. rslt = 0
  586. GOTO ext
  587. END IF
  588. IF sys_option_order_ml_scll_secaudit = 0 THEN
  589. IF li_scllflag = 1 THEN
  590. arg_msg = '生产计划已用料审核,不能计算用料'
  591. rslt = 0
  592. GOTO ext
  593. END IF
  594. ELSE
  595. IF li_scllsecflag = 1 THEN
  596. arg_msg = '生产计划已用料终审,不能计算用料'
  597. rslt = 0
  598. GOTO ext
  599. END IF
  600. END IF
  601. //检查已领料数
  602. Decimal ld_DstrQty
  603. SELECT sum(DstrQty) INTO :ld_DstrQty
  604. FROM u_OrderRqMtrl
  605. WHERE u_orderrqmtrl.orderid = :arg_orderid
  606. AND u_OrderRqMtrl.scid = :arg_scid;
  607. IF sqlca.SQLCode <> 0 THEN
  608. arg_msg = '查询计划已领料数失败,'+sqlca.SQLErrText
  609. rslt = 0
  610. GOTO ext
  611. END IF
  612. IF ld_DstrQty > 0 THEN
  613. arg_msg = '计划已有领料数,不能计算'
  614. rslt = 0
  615. GOTO ext
  616. END IF
  617. ext:
  618. RETURN rslt
  619. end function
  620. public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//保存运算结果树
  621. Int rslt = 1
  622. Long ll_i
  623. DELETE FROM u_orderRqMtrl_tree
  624. WHERE orderid = :arg_s_mtrl.orderid[1]
  625. AND scid = :arg_s_mtrl.scid[1];
  626. IF sqlca.SQLCode <> 0 THEN
  627. arg_msg = '删除物料需求结构失败,'+sqlca.SQLErrText
  628. rslt = 0
  629. GOTO ext
  630. END IF
  631. FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
  632. IF arg_s_mtrl.qty[ll_i] = 0 AND arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
  633. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料有需求数,无领料数,请检查'
  634. rslt = 0
  635. GOTO ext
  636. END IF
  637. IF ll_i > 1 AND arg_s_mtrl.wrkgrpid_scll[ll_i] = 0 AND arg_s_mtrl.ifpack[ll_i] = 0 THEN
  638. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',物料没有领用工组,请检查相关物料清单'
  639. rslt = 0
  640. GOTO ext
  641. END IF
  642. //if isnull(arg_s_mtrl.addcmplqty[ll_i]) then arg_s_mtrl.addcmplqty[ll_i] = 0
  643. //standardrqqty 作为对上一级该生产的标准领料数记录, 即和毛需求数(rqqty)、原毛需求数(rqqty_ori)同义 lhd 20140919
  644. //替换为: arg_s_mtrl.standardrqqty[ll_i] = arg_s_mtrl.qty[ll_i]
  645. arg_s_mtrl.standardrqqty[ll_i] = arg_s_mtrl.qty[ll_i]
  646. INSERT INTO u_orderRqMtrl_tree
  647. (scid,
  648. orderid,
  649. mtrlid,
  650. rqqty,
  651. truerqqty,
  652. plantype,
  653. mqty,
  654. wmqty,
  655. bqty,
  656. wqty,
  657. pqty,
  658. pqty2,
  659. rqwfjgqty,
  660. rqbuyqty,
  661. otherrqqty,
  662. otherrqqty_wx,
  663. otherrqqty_sale,
  664. ckwareqty,
  665. rqdate,
  666. edate,
  667. wrkgrpid,
  668. produce_scid,
  669. produce_wrkgrpid,
  670. pfcode,
  671. lp,
  672. printid,
  673. status,
  674. woodcode,
  675. pcode,
  676. ifmainmtrlid,
  677. samerqqty,
  678. ifchanged,
  679. pmtrlid,
  680. gydscrp,
  681. pfklmode,
  682. pfgroup,
  683. pfgroupmode,
  684. ifcfg,
  685. standardrqqty,
  686. sonloss,
  687. sondecloss,
  688. scllloss,
  689. sclldecloss,
  690. scllqtytype,
  691. scllqty,
  692. if_follow,
  693. lasthour,
  694. Sonscale,
  695. pdscrp,
  696. addcmplqty)
  697. VALUES
  698. (:arg_s_mtrl.scid[ll_i],
  699. :arg_s_mtrl.orderid[ll_i],
  700. :arg_s_mtrl.mtrlid[ll_i],
  701. :arg_s_mtrl.qty[ll_i],
  702. :arg_s_mtrl.cmplqty[ll_i],
  703. :arg_s_mtrl.plantype[ll_i],
  704. :arg_s_mtrl.mqty[ll_i],
  705. :arg_s_mtrl.wmqty[ll_i],
  706. :arg_s_mtrl.bqty[ll_i],
  707. :arg_s_mtrl.wqty[ll_i],
  708. :arg_s_mtrl.pqty[ll_i],
  709. :arg_s_mtrl.pqty2[ll_i],
  710. :arg_s_mtrl.rqwfjgqty[ll_i],
  711. :arg_s_mtrl.rqbuyqty[ll_i],
  712. :arg_s_mtrl.otherrqqty[ll_i],
  713. :arg_s_mtrl.otherrqqty_wx[ll_i],
  714. :arg_s_mtrl.otherrqqty_sale[ll_i],
  715. :arg_s_mtrl.ckwareqty[ll_i],
  716. :arg_s_mtrl.sdate[ll_i],
  717. :arg_s_mtrl.edate[ll_i],
  718. :arg_s_mtrl.wrkgrpid_scll[ll_i],
  719. :arg_s_mtrl.produce_scid[ll_i],
  720. :arg_s_mtrl.produce_wrkgrpid[ll_i],
  721. :arg_s_mtrl.pfcode[ll_i],
  722. :arg_s_mtrl.lp[ll_i],
  723. :arg_s_mtrl.printid[ll_i],
  724. :arg_s_mtrl.status[ll_i],
  725. :arg_s_mtrl.woodcode[ll_i],
  726. :arg_s_mtrl.pcode[ll_i],
  727. :arg_s_mtrl.ifmainmtrlid[ll_i],
  728. :arg_s_mtrl.samerqqty[ll_i],
  729. :arg_s_mtrl.ifchanged[ll_i],
  730. :arg_s_mtrl.pmtrlid[ll_i],
  731. :arg_s_mtrl.gydscrp[ll_i],
  732. :arg_s_mtrl.pfklmode[ll_i],
  733. :arg_s_mtrl.pfgroup[ll_i],
  734. :arg_s_mtrl.pfgroupmode[ll_i],
  735. :arg_s_mtrl.ifcfg[ll_i],
  736. :arg_s_mtrl.standardrqqty[ll_i],
  737. :arg_s_mtrl.sonloss[ll_i],
  738. :arg_s_mtrl.sondecloss[ll_i],
  739. :arg_s_mtrl.scllloss[ll_i],
  740. :arg_s_mtrl.sclldecloss[ll_i],
  741. :arg_s_mtrl.scllqtytype[ll_i],
  742. :arg_s_mtrl.scllqty[ll_i],
  743. :arg_s_mtrl.if_follow[ll_i],
  744. :arg_s_mtrl.lasthour[ll_i],
  745. :arg_s_mtrl.Sonscale[ll_i],
  746. :arg_s_mtrl.pdscrp[ll_i],
  747. :arg_s_mtrl.addcmplqty[ll_i]);
  748. IF sqlca.SQLCode <> 0 THEN
  749. arg_msg = '行:'+String(arg_s_mtrl.printid[ll_i])+',建立物料需求结构表失败,'+sqlca.SQLErrText
  750. rslt = 0
  751. GOTO ext
  752. END IF
  753. NEXT
  754. ext:
  755. IF rslt = 0 THEN
  756. ROLLBACK;
  757. ELSEIF rslt = 1 AND arg_ifcommit THEN
  758. COMMIT;
  759. END IF
  760. RETURN rslt
  761. end function
  762. public function integer uof_get_qty (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg);//取相关数量
  763. Int rslt = 1
  764. Decimal ld_qty
  765. String ls_mtrlcode
  766. Int li_ordertype
  767. Int li_iffp
  768. //int li_mrparg
  769. //SELECT mtrlcode,ordertype,mrparg
  770. // INTO :ls_mtrlcode,:li_ordertype,:li_mrparg
  771. // FROM u_mtrldef
  772. // Where mtrlid = :arg_mtrlid;
  773. //IF sqlca.SQLCode <> 0 THEN
  774. // arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  775. // rslt = 0
  776. // GOTO ext
  777. //END IF
  778. CHOOSE CASE arg_type
  779. CASE 1 //采购未进仓数
  780. SELECT isnull(sum(case when u_mtrldef.iffp = 0
  781. then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)
  782. else case when (u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)) <= u_buytaskmx.qty - u_buytaskmx.fpqty
  783. then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)
  784. else u_buytaskmx.qty - u_buytaskmx.fpqty END END),0)
  785. INTO :ld_qty
  786. FROM u_buytaskmx,u_buytask,u_mtrldef
  787. WHERE u_buytaskmx.mtrlid = u_mtrldef.mtrlid
  788. AND u_buytaskmx.scid = :arg_scid
  789. AND u_buytaskmx.mtrlid = :arg_mtrlid
  790. AND u_buytaskmx.status = :arg_status
  791. AND u_buytaskmx.woodcode = :arg_woodcode
  792. AND u_buytaskmx.pcode = :arg_pcode
  793. AND u_buytaskmx.scid = u_buytask.scid
  794. AND u_buytaskmx.taskid = u_buytask.taskid
  795. AND u_buytaskmx.stopflag = 0
  796. AND u_buytask.status = 1
  797. AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_buytaskmx.requiredate <= :arg_enddate )
  798. AND ( case when u_mtrldef.iffp = 0
  799. then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)
  800. else case when (u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)) <= u_buytaskmx.qty - u_buytaskmx.fpqty
  801. then u_buytaskmx.qty - round(u_buytaskmx.consignedqty * u_buytaskmx.rate,u_mtrldef.mrparg)
  802. ELSE u_buytaskmx.qty - u_buytaskmx.fpqty END END ) > 0;
  803. IF sqlca.SQLCode = -1 THEN
  804. arg_msg = '查询物料:'+ls_mtrlcode+' 采购未进仓数失败,'+sqlca.SQLErrText
  805. rslt = 0
  806. GOTO ext
  807. END IF
  808. CASE 2 //生产未进仓数
  809. SELECT isnull(sum(case when u_mtrldef.iffp = 0
  810. then u_Order_ml.orderqty - u_Order_ml.acmpqty
  811. else case when (u_Order_ml.orderqty - u_Order_ml.acmpqty) <= u_Order_ml.orderqty - u_Order_ml.fpqty
  812. then u_Order_ml.orderqty - u_Order_ml.acmpqty
  813. else u_Order_ml.orderqty - u_Order_ml.fpqty END END ),0)
  814. INTO :ld_qty
  815. FROM u_Order_ml,u_mtrldef
  816. WHERE u_Order_ml.mtrlid = u_mtrldef.mtrlid
  817. AND u_Order_ml.mtrlid = :arg_mtrlid
  818. AND u_Order_ml.scid = :arg_scid
  819. AND u_Order_ml.status_mode = :arg_status
  820. AND u_Order_ml.woodcode = :arg_woodcode
  821. AND u_Order_ml.pcode = :arg_pcode
  822. AND u_Order_ml.status = 1
  823. AND u_Order_ml.orderid <> :arg_orderid
  824. and u_Order_ml.inwareflag = 1
  825. // AND ( u_mtrldef.ordertype = 0 OR u_mtrldef.ordertype = 1 AND u_Order_ml.ordertype = 4 )
  826. AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_Order_ml.requiredate <= :arg_enddate )
  827. AND (case when u_mtrldef.iffp = 0
  828. then u_Order_ml.orderqty - u_Order_ml.acmpqty
  829. else case when (u_Order_ml.orderqty - u_Order_ml.acmpqty) <= u_Order_ml.orderqty - u_Order_ml.fpqty
  830. then u_Order_ml.orderqty - u_Order_ml.acmpqty
  831. ELSE u_Order_ml.orderqty - u_Order_ml.fpqty END END ) > 0;
  832. IF sqlca.SQLCode = -1 THEN
  833. arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未进仓数失败,'+sqlca.SQLErrText
  834. rslt = 0
  835. GOTO ext
  836. END IF
  837. CASE 3 //外协未进仓数
  838. SELECT isnull(sum(case when u_mtrldef.iffp = 0
  839. then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)
  840. else case when (u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)) <= u_order_wfjgMx.qty - u_order_wfjgMx.fpqty
  841. then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)
  842. else u_order_wfjgMx.qty - u_order_wfjgMx.fpqty END END ),0)
  843. INTO :ld_qty
  844. FROM u_order_wfjgMx,u_order_wfjg,u_mtrldef
  845. WHERE u_order_wfjgMx.mtrlid = u_mtrldef.mtrlid
  846. AND u_order_wfjgMx.scid = :arg_scid
  847. AND u_order_wfjgMx.mtrlid = :arg_mtrlid
  848. AND u_order_wfjgMx.status = :arg_status
  849. AND u_order_wfjgMx.woodcode = :arg_woodcode
  850. AND u_order_wfjgMx.pcode = :arg_pcode
  851. AND u_order_wfjgMx.scid = u_order_wfjg.scid
  852. AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID
  853. AND u_order_wfjg.status = 1
  854. AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_order_wfjgMx.requiredate <= :arg_enddate )
  855. AND (case when u_mtrldef.iffp = 0
  856. then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)
  857. else case when (u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)) <= u_order_wfjgMx.qty - u_order_wfjgMx.fpqty
  858. then u_order_wfjgMx.qty - round(u_order_wfjgMx.consignedqty * u_order_wfjgMx.rate,u_mtrldef.mrparg)
  859. ELSE u_order_wfjgMx.qty - u_order_wfjgMx.fpqty END END ) > 0;
  860. IF sqlca.SQLCode = -1 THEN
  861. arg_msg = '查询物料:'+ls_mtrlcode+' 外协未进仓数失败,'+sqlca.SQLErrText
  862. rslt = 0
  863. GOTO ext
  864. END IF
  865. CASE 4 //库存数
  866. SELECT isnull(sum(u_Mtrlware.noallocqty - case when u_mtrldef.iffp = 1 then u_Mtrlware.allocqty * u_mtrldef.iffp else u_Mtrlware.noauditingqty end),0)
  867. INTO :ld_qty
  868. FROM u_Mtrlware,u_storage,u_mtrldef
  869. WHERE u_Mtrlware.storageid = u_storage.storageid
  870. AND u_Mtrlware.mtrlid = u_mtrldef.mtrlid
  871. AND u_storage.ifmrp = 1
  872. AND u_Mtrlware.scid = :arg_scid
  873. AND u_Mtrlware.mtrlid = :arg_mtrlid
  874. AND u_Mtrlware.status = :arg_status
  875. AND u_Mtrlware.woodcode = :arg_woodcode
  876. And u_Mtrlware.pcode = :arg_pcode;
  877. IF sqlca.SQLCode = -1 THEN
  878. arg_msg = '查询物料:'+ls_mtrlcode+' 库存数失败,'+sqlca.SQLErrText
  879. rslt = 0
  880. GOTO ext
  881. END IF
  882. CASE 5 //生产计划未排指令当生产未进仓数
  883. SELECT isnull(sum(u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty),0)
  884. INTO :ld_qty
  885. FROM u_Order_ml,u_OrderRqMtrl
  886. WHERE u_Order_ml.scid = u_OrderRqMtrl.scid
  887. AND u_Order_ml.orderid = u_OrderRqMtrl.orderid
  888. AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  889. AND u_OrderRqMtrl.scid = :arg_scid
  890. AND u_OrderRqMtrl.status = :arg_status
  891. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  892. AND u_OrderRqMtrl.pcode = :arg_pcode
  893. AND u_OrderRqMtrl.plantype = 0
  894. AND u_Order_ml.status = 1
  895. AND u_Order_ml.orderid <> :arg_orderid
  896. AND ( u_Order_ml.ordertype <> 4 )
  897. And ( :arg_ifdate = 0 Or :arg_ifdate = 1 And u_OrderRqMtrl.rqdate <= :arg_enddate );
  898. IF sqlca.SQLCode = -1 THEN
  899. arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未排指令当生产未进仓数失败,'+sqlca.SQLErrText
  900. rslt = 0
  901. GOTO ext
  902. END IF
  903. CASE 6 //外协库存数
  904. SELECT isnull(sum(ow_wfjgware.noallocqty),0)
  905. INTO :ld_qty
  906. FROM ow_wfjgware
  907. WHERE ow_wfjgware.scid = :arg_scid
  908. AND ow_wfjgware.mtrlid = :arg_mtrlid
  909. AND ow_wfjgware.status = :arg_status
  910. AND ow_wfjgware.woodcode = :arg_woodcode
  911. And ow_wfjgware.pcode = :arg_pcode;
  912. IF sqlca.SQLCode = -1 THEN
  913. arg_msg = '查询物料:'+ls_mtrlcode+' 外协库存数失败,'+sqlca.SQLErrText
  914. rslt = 0
  915. GOTO ext
  916. END IF
  917. CASE 7 //外协需求数
  918. SELECT isnull(sum(u_order_wfjgMx_out.qty - u_order_wfjgMx_out.DstrQty),0)
  919. INTO :ld_qty
  920. FROM u_order_wfjgMx_out,u_order_wfjg
  921. WHERE u_order_wfjgMx_out.wfjgID = u_order_wfjg.wfjgID
  922. AND u_order_wfjgMx_out.scid = u_order_wfjg.scid
  923. AND u_order_wfjg.status = 1
  924. AND u_order_wfjgMx_out.scid = :arg_scid
  925. AND u_order_wfjgMx_out.mtrlid = :arg_mtrlid
  926. AND u_order_wfjgMx_out.status = :arg_status
  927. AND u_order_wfjgMx_out.woodcode = :arg_woodcode
  928. AND u_order_wfjgMx_out.pcode = :arg_pcode
  929. And u_order_wfjgMx_out.qty - u_order_wfjgMx_out.DstrQty > 0;
  930. IF sqlca.SQLCode = -1 THEN
  931. arg_msg = '查询物料:'+ls_mtrlcode+' 外协需求数失败,'+sqlca.SQLErrText
  932. rslt = 0
  933. GOTO ext
  934. END IF
  935. END CHOOSE
  936. IF IsNull(ld_qty) THEN ld_qty = 0
  937. ext:
  938. arg_ref_qty = ld_qty
  939. RETURN rslt
  940. end function
  941. public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg);//删除领料明细
  942. Int rslt = 1
  943. Long i,cnt
  944. Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid
  945. String ls_status,ls_woodcode,ls_pcode
  946. Decimal ld_fpqty
  947. uo_mtrlware_assign uo_scll_del_cancel_fp
  948. uo_scll_del_cancel_fp = Create uo_mtrlware_assign
  949. uo_scll_del_cancel_fp.commit_transaction = sqlca
  950. datastore ds_zl_fp_del
  951. ds_zl_fp_del = Create datastore
  952. ds_zl_fp_del.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp_cancel'
  953. ds_zl_fp_del.SetTransObject(sqlca)
  954. cnt = 0
  955. SELECT count(*) INTO :cnt
  956. FROM u_OrderRqMtrl_scll,u_mtrldef
  957. WHERE ( u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid ) and
  958. ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND
  959. ( u_OrderRqMtrl_scll.OrderID = :arg_orderid ) AND
  960. ( u_OrderRqMtrl_scll.fpqty > 0 ) AND
  961. ( u_mtrldef.iffp = 1 );
  962. IF sqlca.SQLCode <> 0 THEN
  963. arg_msg = '查询指令领料明细是否有已分配数失败,'+sqlca.SQLErrText
  964. rslt = 0
  965. GOTO ext
  966. END IF
  967. //取消分配
  968. IF cnt > 0 THEN
  969. ds_zl_fp_del.Retrieve(arg_scid,arg_orderid)
  970. FOR i = 1 To ds_zl_fp_del.RowCount()
  971. ll_scid = ds_zl_fp_del.Object.scid[i]
  972. ll_orderid = ds_zl_fp_del.Object.OrderID[i]
  973. ll_mtrlid = ds_zl_fp_del.Object.mtrlid[i]
  974. ll_wrkgrpid = ds_zl_fp_del.Object.wrkgrpid[i]
  975. ls_status = ds_zl_fp_del.Object.status[i]
  976. ls_woodcode = ds_zl_fp_del.Object.woodcode[i]
  977. ls_pcode = ds_zl_fp_del.Object.pcode[i]
  978. ld_fpqty = ds_zl_fp_del.Object.fpqty[i]
  979. IF uo_scll_del_cancel_fp.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,&
  980. ls_status,ls_woodcode,ls_pcode,0 - ld_fpqty,0,0,0,arg_msg,False) = 0 THEN
  981. rslt = 0
  982. GOTO ext
  983. END IF
  984. NEXT
  985. END IF
  986. DELETE FROM u_OrderRqMtrl_scll
  987. WHERE orderid = :arg_orderid
  988. And scid = :arg_scid;
  989. IF sqlca.SQLCode <> 0 THEN
  990. arg_msg = '删除原领料明细失败,'+sqlca.SQLErrText
  991. rslt = 0
  992. GOTO ext
  993. END IF
  994. ext:
  995. IF rslt = 0 THEN
  996. ROLLBACK;
  997. ELSEIF rslt = 1 And arg_ifcommit THEN
  998. COMMIT;
  999. END IF
  1000. Destroy uo_scll_del_cancel_fp
  1001. Destroy ds_zl_fp_del
  1002. RETURN rslt
  1003. end function
  1004. public function integer uof_get_other_rqqty (long arg_scid, long arg_orderid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, integer arg_ifdate, datetime arg_date, ref string arg_msg);//取其它计划需求数
  1005. Int rslt = 1
  1006. Decimal ld_qty
  1007. String ls_mtrlcode
  1008. //SELECT mtrlcode INTO :ls_mtrlcode
  1009. // FROM u_mtrldef
  1010. // Where mtrlid = :arg_mtrlid;
  1011. //IF sqlca.SQLCode <> 0 THEN
  1012. // arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  1013. // rslt = 0
  1014. // GOTO ext
  1015. //END IF
  1016. SELECT isnull(sum(case when u_mtrldef.iffp = 0
  1017. then u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.DstrQty
  1018. else u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.fpqty END ),0)
  1019. INTO :ld_qty
  1020. FROM u_OrderRqMtrl,u_order_ml,u_mtrldef
  1021. WHERE u_OrderRqMtrl.orderid = u_order_ml.orderid
  1022. AND u_OrderRqMtrl.scid = u_order_ml.scid
  1023. AND u_OrderRqMtrl.mtrlid = u_mtrldef.mtrlid
  1024. AND u_order_ml.status = 1
  1025. AND (:if_otherrq_mrpaudit = 1 AND (:arg_plantype = 0 AND u_order_ml.scllflag = 1
  1026. OR :arg_plantype <> 0 AND u_order_ml.scllsecflag = 1) OR :if_otherrq_mrpaudit = 0 )
  1027. AND u_OrderRqMtrl.scid = :arg_scid
  1028. AND u_OrderRqMtrl.orderid <> :arg_orderid
  1029. AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  1030. AND u_OrderRqMtrl.status = :arg_status
  1031. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  1032. AND u_OrderRqMtrl.pcode = :arg_pcode
  1033. AND (case when u_mtrldef.iffp = 0
  1034. then u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.DstrQty
  1035. else u_OrderRqMtrl.Rqqty - u_OrderRqMtrl.fpqty END ) > 0 ;
  1036. // and ( :arg_ifdate = 0 or :arg_ifdate = 1 and u_OrderRqMtrl.rqdate <= :arg_date );
  1037. IF sqlca.SQLCode = -1 THEN
  1038. arg_msg = '查询物料:'+ls_mtrlcode+' 其它计划需求数失败,'+sqlca.SQLErrText
  1039. rslt = 0
  1040. GOTO ext
  1041. END IF
  1042. IF IsNull(ld_qty) THEN ld_qty = 0
  1043. ext:
  1044. arg_ref_qty = ld_qty
  1045. RETURN rslt
  1046. end function
  1047. public function integer uof_get_rqmtrl (long arg_scid, long arg_orderid, long arg_porderid, ref s_order_ml_rqmtrl arg_ref_s_rqmtrl, ref string arg_msg);//重新读取运算明细
  1048. Int rslt = 1
  1049. Long cnt
  1050. Long ll_mtrlid,ll_wrkgrpid,ll_pmtrlid
  1051. String ls_status,ls_woodcode,ls_pcode
  1052. Decimal ld_rqqty,ld_cmplqty,ld_scllqty
  1053. Int li_ifcfg,li_ifpackpro,li_ifpack
  1054. Int li_ifselforder,li_mtrlorigin
  1055. String ls_mtrlcode
  1056. Long ll_lp
  1057. IF uo_option_scll_ifchanged = -1000 THEN
  1058. arg_msg = '选项:[356]车间指令单领料明细带出运算结果中"修改"的用料,读取初始默认值失败,操作取消!'
  1059. rslt = 0
  1060. GOTO ext
  1061. END IF
  1062. DECLARE cur_ml CURSOR FOR
  1063. SELECT u_orderrqmtrl_tree.mtrlid,
  1064. u_orderrqmtrl_tree.wrkgrpid,
  1065. u_orderrqmtrl_tree.status,
  1066. u_orderrqmtrl_tree.woodcode,
  1067. u_orderrqmtrl_tree.pcode,
  1068. u_orderrqmtrl_tree.rqqty,
  1069. u_orderrqmtrl_tree.truerqqty,
  1070. u_orderrqmtrl_tree.scllqty,
  1071. u_orderrqmtrl_tree.pmtrlid,
  1072. u_orderrqmtrl_tree.ifcfg,
  1073. u_orderrqmtrl_tree.lp,
  1074. u_mtrldef.ifpackpro,
  1075. u_mtrldef.ifpack,
  1076. u_mtrldef.mtrlcode,
  1077. u_mtrldef.ifselforder,
  1078. u_mtrldef.mtrlorigin
  1079. FROM u_orderrqmtrl_tree INNER join u_mtrldef on
  1080. u_orderrqmtrl_tree.mtrlid = u_mtrldef.mtrlid
  1081. WHERE u_orderrqmtrl_tree.scid = :arg_scid
  1082. AND u_orderrqmtrl_tree.orderid = :arg_porderid
  1083. AND (u_orderrqmtrl_tree.ifchanged = 0 OR :uo_option_scll_ifchanged = 1)
  1084. Order By u_orderrqmtrl_tree.printid;
  1085. OPEN cur_ml;
  1086. FETCH cur_ml INTO :ll_mtrlid,:ll_wrkgrpid,
  1087. :ls_status,:ls_woodcode,:ls_pcode,:ld_rqqty,
  1088. :ld_cmplqty,:ld_scllqty,:ll_pmtrlid,:li_ifcfg,
  1089. :ll_lp,:li_ifpackpro,:li_ifpack,:ls_mtrlcode,:li_ifselforder,:li_mtrlorigin;
  1090. DO WHILE sqlca.SQLCode = 0
  1091. IF ld_rqqty > 0 THEN
  1092. cnt++
  1093. arg_ref_s_rqmtrl.scid[cnt] = arg_scid
  1094. arg_ref_s_rqmtrl.orderid[cnt] = arg_orderid
  1095. arg_ref_s_rqmtrl.porderid[cnt] = arg_porderid
  1096. arg_ref_s_rqmtrl.mtrlid[cnt] = ll_mtrlid
  1097. arg_ref_s_rqmtrl.wrkgrpid_scll[cnt] = ll_wrkgrpid
  1098. arg_ref_s_rqmtrl.status[cnt] = ls_status
  1099. arg_ref_s_rqmtrl.woodcode[cnt] = ls_woodcode
  1100. arg_ref_s_rqmtrl.pcode[cnt] = ls_pcode
  1101. arg_ref_s_rqmtrl.qty[cnt] = ld_rqqty
  1102. arg_ref_s_rqmtrl.scllqty[cnt] = ld_scllqty
  1103. arg_ref_s_rqmtrl.cmplqty[cnt] = ld_cmplqty
  1104. arg_ref_s_rqmtrl.pmtrlid[cnt] = ll_pmtrlid
  1105. arg_ref_s_rqmtrl.ifcfg[cnt] = li_ifcfg
  1106. arg_ref_s_rqmtrl.lp[cnt] = ll_lp
  1107. arg_ref_s_rqmtrl.ifpackpro[cnt] = li_ifpackpro
  1108. arg_ref_s_rqmtrl.ifpack[cnt] = li_ifpack
  1109. arg_ref_s_rqmtrl.mtrlcode[cnt] = ls_mtrlcode
  1110. arg_ref_s_rqmtrl.ifselforder[cnt] = li_ifselforder
  1111. arg_ref_s_rqmtrl.mtrlorigin[cnt] = li_mtrlorigin
  1112. END IF
  1113. FETCH cur_ml INTO :ll_mtrlid,:ll_wrkgrpid,
  1114. :ls_status,:ls_woodcode,:ls_pcode,:ld_rqqty,
  1115. :ld_cmplqty,:ld_scllqty,:ll_pmtrlid,:li_ifcfg,
  1116. :ll_lp,:li_ifpackpro,:li_ifpack,:ls_mtrlcode,:li_ifselforder,:li_mtrlorigin;
  1117. LOOP
  1118. CLOSE cur_ml;
  1119. IF cnt = 0 THEN
  1120. arg_msg = '查询上级计划需求明细失败,上级计划可能没有运算结果,请检查'
  1121. rslt = 0
  1122. GOTO ext
  1123. END IF
  1124. ext:
  1125. RETURN rslt
  1126. end function
  1127. public function integer uof_pfcode_check (long arg_mtrlid, string arg_mtrlcode, string arg_pfcode, ref string arg_msg);//检查清单审核标记
  1128. Int rslt = 1
  1129. Int li_pfflag
  1130. SELECT flag INTO :li_pfflag
  1131. FROM u_mtrl_pf
  1132. WHERE mtrlid = :arg_mtrlid
  1133. AND pfcode = :arg_pfcode;
  1134. IF sqlca.SQLCode <> 0 THEN
  1135. arg_msg = '查询物料:'+arg_mtrlcode+'物料清单:'+arg_pfcode+' 审核标记失败,'+sqlca.SQLErrText
  1136. rslt = 0
  1137. GOTO ext
  1138. END IF
  1139. IF li_pfflag = 0 THEN
  1140. arg_msg = '物料:'+arg_mtrlcode+'物料清单:'+arg_pfcode+' 未审核,不能计算'
  1141. rslt = 0
  1142. GOTO ext
  1143. END IF
  1144. ext:
  1145. RETURN rslt
  1146. end function
  1147. private function integer uof_get_max_advancetime (long arg_mtrlid, string arg_pfcode, ref decimal arg_ref_advancetime, ref string arg_msg);//取下级最大提前期
  1148. Int rslt = 1
  1149. Long cnt
  1150. SELECT count(*) INTO :cnt
  1151. FROM u_prdpf
  1152. WHERE mtrlid = :arg_mtrlid
  1153. AND pfcode = :arg_pfcode;
  1154. IF sqlca.SQLCode <> 0 THEN
  1155. arg_msg = '查询物料是否已设置下级用料失败,'+sqlca.SQLErrText
  1156. rslt = 0
  1157. GOTO ext
  1158. END IF
  1159. IF cnt = 0 THEN
  1160. arg_ref_advancetime = 0
  1161. ELSE
  1162. SELECT max(advancetime) INTO :arg_ref_advancetime
  1163. FROM u_prdpf
  1164. WHERE mtrlid = :arg_mtrlid
  1165. AND pfcode = :arg_pfcode;
  1166. IF sqlca.SQLCode <> 0 THEN
  1167. arg_msg = '查询物料下级用料最大提前期失败,'+sqlca.SQLErrText
  1168. rslt = 0
  1169. GOTO ext
  1170. END IF
  1171. END IF
  1172. ext:
  1173. RETURN rslt
  1174. end function
  1175. public function integer uof_get_prdpf_dytype (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref integer arg_ref_dytype, ref string arg_msg);//查询代用类型
  1176. Int rslt = 1
  1177. SELECT dytype INTO :arg_ref_dytype
  1178. FROM u_prdpf
  1179. WHERE mtrlid = :arg_mtrlid
  1180. AND pfcode = :arg_pfcode
  1181. AND pfgroup = :arg_pfgroup
  1182. AND SonMtrlid = :arg_SonMtrlid
  1183. AND wrkgrpid = :arg_wrkgrpid
  1184. And sonpfcode = :arg_sonpfcode;
  1185. IF sqlca.SQLCode = -1 THEN
  1186. arg_msg = '查询物料代用标记失败,上级清单:'+arg_pfcode+',部件名称:'+arg_pfgroup+',下级清单:'+arg_sonpfcode+','+String(sqlca.SQLCode)+','+sqlca.SQLErrText
  1187. rslt = 0
  1188. GOTO ext
  1189. ELSEIF sqlca.SQLCode = 100 THEN
  1190. arg_ref_dytype = 0
  1191. END IF
  1192. ext:
  1193. RETURN rslt
  1194. end function
  1195. public function integer uof_get_prdpf_replace (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref s_prdpf_replace arg_ref_s_replace, ref string arg_msg);//取代用明细
  1196. Int rslt = 1
  1197. Long m
  1198. Long ll_dymtrlid
  1199. Decimal ld_sonscale,ld_sonloss,ld_scllloss
  1200. String ls_dscrp,ls_status,ls_woodcode,ls_pcode
  1201. String ls_mtrlcode,ls_mtrlname,ls_mtrlmode,ls_unit,ls_mtrltype
  1202. Int li_mtrlorigin,li_mtrlprp,li_ifselforder,li_ifpack,li_ifpackpro
  1203. Int li_ordertype,li_ifpackpz
  1204. Long ll_produce_scid,ll_produce_wrkgrpid
  1205. DECLARE cur_dy CURSOR FOR
  1206. SELECT u_prdpf_dymx.dymtrlid,
  1207. u_prdpf_dymx.sonscale,
  1208. u_prdpf_dymx.sonloss,
  1209. u_prdpf_dymx.scllloss,
  1210. u_prdpf_dymx.dscrp,
  1211. u_prdpf_dymx.status,
  1212. u_prdpf_dymx.woodcode,
  1213. u_prdpf_dymx.pcode,
  1214. u_mtrldef.mtrlcode,
  1215. u_mtrldef.mtrlname,
  1216. u_mtrldef.mtrlmode,
  1217. u_mtrldef.unit,
  1218. u_mtrldef.mtrltype,
  1219. u_mtrldef.mtrlorigin,
  1220. u_mtrldef.mtrlprp,
  1221. u_mtrldef.ifselforder,
  1222. u_mtrldef.ifpack,
  1223. u_mtrldef.ifpackpro,
  1224. u_mtrldef.ordertype,
  1225. u_mtrldef.ifpackpz,
  1226. u_mtrldef.scid,
  1227. u_mtrldef.dftwrkgrpid
  1228. FROM u_prdpf_dymx,u_mtrldef
  1229. WHERE u_prdpf_dymx.dymtrlid = u_mtrldef.mtrlid
  1230. AND u_prdpf_dymx.mtrlid = :arg_mtrlid
  1231. AND u_prdpf_dymx.pfcode = :arg_pfcode
  1232. AND u_prdpf_dymx.pfgroup = :arg_pfgroup
  1233. AND u_prdpf_dymx.SonMtrlid = :arg_SonMtrlid
  1234. AND u_prdpf_dymx.wrkgrpid = :arg_wrkgrpid
  1235. AND u_prdpf_dymx.sonpfcode = :arg_sonpfcode
  1236. Order By printid;
  1237. OPEN cur_dy;
  1238. FETCH cur_dy INTO :ll_dymtrlid,
  1239. :ld_sonscale,:ld_sonloss,:ld_scllloss,
  1240. :ls_dscrp,:ls_status,:ls_woodcode,:ls_pcode,
  1241. :ls_mtrlcode,:ls_mtrlname,:ls_mtrlmode,:ls_unit,:ls_mtrltype,
  1242. :li_mtrlorigin,:li_mtrlprp,:li_ifselforder,:li_ifpack,:li_ifpackpro,
  1243. :li_ordertype,:li_ifpackpz,:ll_produce_scid,:ll_produce_wrkgrpid;
  1244. DO WHILE sqlca.SQLCode = 0
  1245. m++
  1246. arg_ref_s_replace.dymtrlid[m] = ll_dymtrlid
  1247. arg_ref_s_replace.sonscale[m] = ld_sonscale
  1248. arg_ref_s_replace.sonloss[m] = ld_sonloss
  1249. arg_ref_s_replace.scllloss[m] = ld_scllloss
  1250. arg_ref_s_replace.dscrp[m] = ls_dscrp
  1251. arg_ref_s_replace.status[m] = ls_status
  1252. arg_ref_s_replace.woodcode[m] = ls_woodcode
  1253. arg_ref_s_replace.pcode[m] = ls_pcode
  1254. arg_ref_s_replace.mtrlcode[m] = ls_mtrlcode
  1255. arg_ref_s_replace.mtrlname[m] = ls_mtrlname
  1256. arg_ref_s_replace.mtrlmode[m] = ls_mtrlmode
  1257. arg_ref_s_replace.unit[m] = ls_unit
  1258. arg_ref_s_replace.mtrlorigin[m] = li_mtrlorigin
  1259. arg_ref_s_replace.mtrltype[m] = ls_mtrltype
  1260. arg_ref_s_replace.mtrlprp[m] = li_mtrlprp
  1261. arg_ref_s_replace.ifselforder[m] = li_ifselforder
  1262. arg_ref_s_replace.ifpack[m] = li_ifpack
  1263. arg_ref_s_replace.ifpackpro[m] = li_ifpackpro
  1264. arg_ref_s_replace.ordertype[m] = li_ordertype
  1265. arg_ref_s_replace.ifpackpz[m] = li_ifpackpz
  1266. arg_ref_s_replace.produce_scid[m] = ll_produce_scid
  1267. arg_ref_s_replace.produce_wrkgrpid[m] = ll_produce_wrkgrpid
  1268. FETCH cur_dy INTO :ll_dymtrlid,
  1269. :ld_sonscale,:ld_sonloss,:ld_scllloss,
  1270. :ls_dscrp,:ls_status,:ls_woodcode,:ls_pcode,
  1271. :ls_mtrlcode,:ls_mtrlname,:ls_mtrlmode,:ls_unit,:ls_mtrltype,
  1272. :li_mtrlorigin,:li_mtrlprp,:li_ifselforder,:li_ifpack,:li_ifpackpro,
  1273. :li_ordertype,:li_ifpackpz,:ll_produce_scid,:ll_produce_wrkgrpid;
  1274. LOOP
  1275. CLOSE cur_dy;
  1276. RETURN rslt
  1277. end function
  1278. public subroutine uof_cmpl_rqmtrl_dy_mx (long arg_begin_i, integer arg_dy, ref s_order_ml_rqmtrl arg_s_mtrl, s_prdpf_replace arg_pf_dy);//加代用明细入数组
  1279. Long ll_arr_dy,ll_arr_rq
  1280. Long ll_arr_add,ll_arr_max
  1281. Long i,k
  1282. ll_arr_dy = UpperBound(arg_pf_dy.dymtrlid)
  1283. ll_arr_rq = UpperBound(arg_s_mtrl.mtrlid)
  1284. IF arg_dy = 0 THEN
  1285. ll_arr_add = ll_arr_dy - 1
  1286. ELSE
  1287. ll_arr_add = ll_arr_dy
  1288. END IF
  1289. ll_arr_max = ll_arr_rq + ll_arr_add
  1290. FOR i = ll_arr_max TO arg_begin_i + 1 STEP -1
  1291. IF i > arg_begin_i + 1 THEN
  1292. arg_s_mtrl.scid[i] = arg_s_mtrl.scid[i - ll_arr_add]
  1293. arg_s_mtrl.orderid[i] = arg_s_mtrl.orderid[i - ll_arr_add]
  1294. arg_s_mtrl.mtrlid[i] = arg_s_mtrl.mtrlid[i - ll_arr_add]
  1295. arg_s_mtrl.status[i] = arg_s_mtrl.status[i - ll_arr_add]
  1296. arg_s_mtrl.woodcode[i] = arg_s_mtrl.woodcode[i - ll_arr_add]
  1297. arg_s_mtrl.pcode[i] = arg_s_mtrl.pcode[i - ll_arr_add]
  1298. arg_s_mtrl.pfcode[i] = arg_s_mtrl.pfcode[i - ll_arr_add]
  1299. arg_s_mtrl.qty[i] = arg_s_mtrl.qty[i - ll_arr_add]
  1300. arg_s_mtrl.cmplqty[i] = arg_s_mtrl.cmplqty[i - ll_arr_add]
  1301. arg_s_mtrl.plantype[i] = arg_s_mtrl.plantype[i - ll_arr_add]
  1302. arg_s_mtrl.mqty[i] = arg_s_mtrl.mqty[i - ll_arr_add]
  1303. arg_s_mtrl.bqty[i] = arg_s_mtrl.bqty[i - ll_arr_add]
  1304. arg_s_mtrl.wqty[i] = arg_s_mtrl.wqty[i - ll_arr_add]
  1305. arg_s_mtrl.pqty[i] = arg_s_mtrl.pqty[i - ll_arr_add]
  1306. arg_s_mtrl.otherrqqty[i] = arg_s_mtrl.otherrqqty[i - ll_arr_add]
  1307. arg_s_mtrl.samerqqty[i] = arg_s_mtrl.samerqqty[i - ll_arr_add]
  1308. arg_s_mtrl.sdate[i] = arg_s_mtrl.sdate[i - ll_arr_add]
  1309. arg_s_mtrl.edate[i] = arg_s_mtrl.edate[i - ll_arr_add]
  1310. arg_s_mtrl.mtrlcode[i] = arg_s_mtrl.mtrlcode[i - ll_arr_add]
  1311. arg_s_mtrl.mtrlname[i] = arg_s_mtrl.mtrlname[i - ll_arr_add]
  1312. arg_s_mtrl.mtrlmode[i] = arg_s_mtrl.mtrlmode[i - ll_arr_add]
  1313. arg_s_mtrl.mtrltype[i] = arg_s_mtrl.mtrltype[i - ll_arr_add]
  1314. arg_s_mtrl.unit[i] = arg_s_mtrl.unit[i - ll_arr_add]
  1315. arg_s_mtrl.Mtrlorigin[i] = arg_s_mtrl.Mtrlorigin[i - ll_arr_add]
  1316. arg_s_mtrl.mtrlprp[i] = arg_s_mtrl.mtrlprp[i - ll_arr_add]
  1317. arg_s_mtrl.ifselforder[i] = arg_s_mtrl.ifselforder[i - ll_arr_add]
  1318. arg_s_mtrl.gydscrp[i] = arg_s_mtrl.gydscrp[i - ll_arr_add]
  1319. arg_s_mtrl.pfklmode[i] = arg_s_mtrl.pfklmode[i - ll_arr_add]
  1320. arg_s_mtrl.pfgroup[i] = arg_s_mtrl.pfgroup[i - ll_arr_add]
  1321. arg_s_mtrl.pfgroupmode[i] = arg_s_mtrl.pfgroupmode[i - ll_arr_add]
  1322. arg_s_mtrl.ifcfg[i] = arg_s_mtrl.ifcfg[i - ll_arr_add]
  1323. arg_s_mtrl.ifpack[i] = arg_s_mtrl.ifpack[i - ll_arr_add]
  1324. arg_s_mtrl.ifpackpro[i] = arg_s_mtrl.ifpackpro[i - ll_arr_add]
  1325. arg_s_mtrl.mtrlordertype[i] = arg_s_mtrl.mtrlordertype[i - ll_arr_add]
  1326. arg_s_mtrl.ifpackpz[i] = arg_s_mtrl.ifpackpz[i - ll_arr_add]
  1327. arg_s_mtrl.dytype[i] = arg_s_mtrl.dytype[i - ll_arr_add]
  1328. arg_s_mtrl.ppfcode[i] = arg_s_mtrl.ppfcode[i - ll_arr_add]
  1329. arg_s_mtrl.pcmplqty[i] = arg_s_mtrl.pcmplqty[i - ll_arr_add]
  1330. arg_s_mtrl.produce_scid[i] = arg_s_mtrl.produce_scid[i - ll_arr_add]
  1331. arg_s_mtrl.produce_wrkgrpid[i] = arg_s_mtrl.produce_wrkgrpid[i - ll_arr_add]
  1332. arg_s_mtrl.wrkGrpid_scll[i] = arg_s_mtrl.wrkGrpid_scll[i - ll_arr_add]
  1333. arg_s_mtrl.lp[i] = arg_s_mtrl.lp[i - ll_arr_add]
  1334. arg_s_mtrl.ifmainmtrlid[i] = arg_s_mtrl.ifmainmtrlid[i - ll_arr_add]
  1335. arg_s_mtrl.pmtrlid[i] = arg_s_mtrl.pmtrlid[i - ll_arr_add]
  1336. arg_s_mtrl.ifchanged[i] = arg_s_mtrl.ifchanged[i - ll_arr_add]
  1337. ELSE
  1338. arg_s_mtrl.scid[i] = arg_s_mtrl.scid[arg_begin_i]
  1339. arg_s_mtrl.orderid[i] = arg_s_mtrl.orderid[arg_begin_i]
  1340. arg_s_mtrl.mtrlid[i] = arg_s_mtrl.mtrlid[arg_begin_i]
  1341. arg_s_mtrl.status[i] = arg_s_mtrl.status[arg_begin_i]
  1342. arg_s_mtrl.woodcode[i] = arg_s_mtrl.woodcode[arg_begin_i]
  1343. arg_s_mtrl.pcode[i] = arg_s_mtrl.pcode[arg_begin_i]
  1344. arg_s_mtrl.pfcode[i] = arg_s_mtrl.pfcode[arg_begin_i]
  1345. arg_s_mtrl.qty[i] = arg_s_mtrl.qty[arg_begin_i]
  1346. arg_s_mtrl.cmplqty[i] = arg_s_mtrl.cmplqty[arg_begin_i]
  1347. arg_s_mtrl.plantype[i] = arg_s_mtrl.plantype[arg_begin_i]
  1348. arg_s_mtrl.mqty[i] = arg_s_mtrl.mqty[arg_begin_i]
  1349. arg_s_mtrl.bqty[i] = arg_s_mtrl.bqty[arg_begin_i]
  1350. arg_s_mtrl.wqty[i] = arg_s_mtrl.wqty[arg_begin_i]
  1351. arg_s_mtrl.pqty[i] = arg_s_mtrl.pqty[arg_begin_i]
  1352. arg_s_mtrl.otherrqqty[i] = arg_s_mtrl.otherrqqty[arg_begin_i]
  1353. arg_s_mtrl.samerqqty[i] = arg_s_mtrl.samerqqty[arg_begin_i]
  1354. arg_s_mtrl.sdate[i] = arg_s_mtrl.sdate[arg_begin_i]
  1355. arg_s_mtrl.edate[i] = arg_s_mtrl.edate[arg_begin_i]
  1356. arg_s_mtrl.mtrlcode[i] = arg_s_mtrl.mtrlcode[arg_begin_i]
  1357. arg_s_mtrl.mtrlname[i] = arg_s_mtrl.mtrlname[arg_begin_i]
  1358. arg_s_mtrl.mtrlmode[i] = arg_s_mtrl.mtrlmode[arg_begin_i]
  1359. arg_s_mtrl.mtrltype[i] = arg_s_mtrl.mtrltype[arg_begin_i]
  1360. arg_s_mtrl.unit[i] = arg_s_mtrl.unit[arg_begin_i]
  1361. arg_s_mtrl.Mtrlorigin[i] = arg_s_mtrl.Mtrlorigin[arg_begin_i]
  1362. arg_s_mtrl.mtrlprp[i] = arg_s_mtrl.mtrlprp[arg_begin_i]
  1363. arg_s_mtrl.ifselforder[i] = arg_s_mtrl.ifselforder[arg_begin_i]
  1364. arg_s_mtrl.gydscrp[i] = arg_s_mtrl.gydscrp[arg_begin_i]
  1365. arg_s_mtrl.pfklmode[i] = arg_s_mtrl.pfklmode[arg_begin_i]
  1366. arg_s_mtrl.pfgroup[i] = arg_s_mtrl.pfgroup[arg_begin_i]
  1367. arg_s_mtrl.pfgroupmode[i] = arg_s_mtrl.pfgroupmode[arg_begin_i]
  1368. arg_s_mtrl.ifcfg[i] = arg_s_mtrl.ifcfg[arg_begin_i]
  1369. arg_s_mtrl.ifpack[i] = arg_s_mtrl.ifpack[arg_begin_i]
  1370. arg_s_mtrl.ifpackpro[i] = arg_s_mtrl.ifpackpro[arg_begin_i]
  1371. arg_s_mtrl.mtrlordertype[i] = arg_s_mtrl.mtrlordertype[arg_begin_i]
  1372. arg_s_mtrl.ifpackpz[i] = arg_s_mtrl.ifpackpz[arg_begin_i]
  1373. arg_s_mtrl.dytype[i] = arg_s_mtrl.dytype[arg_begin_i]
  1374. arg_s_mtrl.ppfcode[i] = arg_s_mtrl.ppfcode[arg_begin_i]
  1375. arg_s_mtrl.pcmplqty[i] = arg_s_mtrl.pcmplqty[arg_begin_i]
  1376. arg_s_mtrl.produce_scid[i] = arg_s_mtrl.produce_scid[arg_begin_i]
  1377. arg_s_mtrl.produce_wrkgrpid[i] = arg_s_mtrl.produce_wrkgrpid[arg_begin_i]
  1378. arg_s_mtrl.wrkGrpid_scll[i] = arg_s_mtrl.wrkGrpid_scll[arg_begin_i]
  1379. arg_s_mtrl.lp[i] = arg_s_mtrl.lp[arg_begin_i]
  1380. arg_s_mtrl.ifmainmtrlid[i] = arg_s_mtrl.ifmainmtrlid[arg_begin_i]
  1381. arg_s_mtrl.pmtrlid[i] = arg_s_mtrl.pmtrlid[arg_begin_i]
  1382. arg_s_mtrl.ifchanged[i] = arg_s_mtrl.ifchanged[arg_begin_i]
  1383. END IF
  1384. NEXT
  1385. FOR i = arg_begin_i TO arg_begin_i + ll_arr_add
  1386. IF i = arg_begin_i AND arg_dy = 1 THEN
  1387. arg_s_mtrl.qty[i] = arg_s_mtrl.qty[i] - arg_s_mtrl.cmplqty[i]
  1388. arg_s_mtrl.cmplqty[i] = 0
  1389. ELSE
  1390. k++
  1391. arg_s_mtrl.mtrlid[i] = arg_pf_dy.dymtrlid[k]
  1392. arg_s_mtrl.status[i] = arg_pf_dy.status[k]
  1393. arg_s_mtrl.woodcode[i] = arg_pf_dy.woodcode[k]
  1394. arg_s_mtrl.pcode[i] = arg_pf_dy.pcode[k]
  1395. arg_s_mtrl.mtrlcode[i] = arg_pf_dy.mtrlcode[k]
  1396. arg_s_mtrl.mtrlname[i] = arg_pf_dy.mtrlname[k]
  1397. arg_s_mtrl.mtrlmode[i] = arg_pf_dy.mtrlmode[k]
  1398. arg_s_mtrl.unit[i] = arg_pf_dy.unit[k]
  1399. arg_s_mtrl.Mtrlorigin[i] = arg_pf_dy.Mtrlorigin[k]
  1400. arg_s_mtrl.mtrltype[i] = arg_pf_dy.mtrltype[k]
  1401. arg_s_mtrl.mtrlprp[i] = arg_pf_dy.mtrlprp[k]
  1402. arg_s_mtrl.ifselforder[i] = arg_pf_dy.ifselforder[k]
  1403. arg_s_mtrl.ifpack[i] = arg_pf_dy.ifpack[k]
  1404. arg_s_mtrl.ifpackpro[i] = arg_pf_dy.ifpackpro[k]
  1405. arg_s_mtrl.mtrlordertype[i] = arg_pf_dy.ordertype[k]
  1406. arg_s_mtrl.ifpackpz[i] = arg_pf_dy.ifpackpz[k]
  1407. arg_s_mtrl.produce_scid[i] = arg_pf_dy.produce_scid[k]
  1408. arg_s_mtrl.produce_wrkgrpid[i] = arg_pf_dy.produce_wrkgrpid[k]
  1409. arg_s_mtrl.qty[i] = arg_pf_dy.dyqty[k]
  1410. arg_s_mtrl.cmplqty[i] = 0
  1411. arg_s_mtrl.mqty[i] = arg_pf_dy.mqty[k]
  1412. arg_s_mtrl.bqty[i] = arg_pf_dy.bqty[k]
  1413. arg_s_mtrl.wqty[i] = arg_pf_dy.wqty[k]
  1414. arg_s_mtrl.pqty[i] = arg_pf_dy.pqty[k]
  1415. arg_s_mtrl.otherrqqty[i] = arg_pf_dy.otherrqqty[k]
  1416. arg_s_mtrl.samerqqty[i] = arg_pf_dy.samerqqty[k]
  1417. END IF
  1418. NEXT
  1419. end subroutine
  1420. 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, string arg_pfcode, decimal arg_qty, long arg_wrkgrpid_scll, datetime arg_rqdate, string arg_gydscrp, string arg_pfklmode, string arg_pfgroup, string arg_pfgroupmode, decimal arg_advancetime, decimal arg_sonloss, decimal arg_sondecloss, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//解锁修改数量
  1421. Int rslt = 1
  1422. Int li_pfflag
  1423. Long li_mxt
  1424. Long ll_i
  1425. String ls_mtrlcode,ls_mtrlname,ls_mtrlmode
  1426. String ls_unit,ls_mtrltype
  1427. Int li_mtrlorigin,li_ifselforder,li_mtrlprp
  1428. Long ll_scid_mtrl,ll_wrkgrpid_mtrl
  1429. Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays
  1430. Date ld_sdate,ld_edate,ld_rqdate
  1431. DateTime ldt_sdate,ldt_edate
  1432. Decimal ld_cmpqty
  1433. String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
  1434. deep++
  1435. If deep > 2000 Then
  1436. arg_msg = '递归太深'+String(deep)
  1437. rslt = 0
  1438. Goto ext
  1439. End If
  1440. Select mtrlcode,
  1441. mtrlname,
  1442. mtrlmode,
  1443. mtrltype,
  1444. unit,
  1445. Mtrlorigin,
  1446. scid,
  1447. dftwrkgrpid,
  1448. buydays,
  1449. orderdays,
  1450. wfjgdays,
  1451. aheaddays,
  1452. ifselforder,
  1453. mtrlprp,
  1454. cmpqty,
  1455. mtrlsectype,
  1456. zxmtrlmode,
  1457. usermtrlmode
  1458. Into :ls_mtrlcode,
  1459. :ls_mtrlname,
  1460. :ls_mtrlmode,
  1461. :ls_mtrltype,
  1462. :ls_unit,
  1463. :li_mtrlorigin,
  1464. :ll_scid_mtrl,
  1465. :ll_wrkgrpid_mtrl,
  1466. :ld_buydays,
  1467. :ld_orderdays,
  1468. :ld_wfjgdays,
  1469. :ld_aheaddays,
  1470. :li_ifselforder,
  1471. :li_mtrlprp,
  1472. :ld_cmpqty,
  1473. :ls_mtrlsectype,
  1474. :ls_zxmtrlmode,
  1475. :ls_usermtrlmode
  1476. From u_mtrldef
  1477. Where mtrlid = :arg_mtrlid;
  1478. If sqlca.SQLCode <> 0 Then
  1479. arg_msg = '查询物料资失败,'+sqlca.SQLErrText
  1480. rslt = 0
  1481. Goto ext
  1482. End If
  1483. If ld_cmpqty = 0 Then ld_cmpqty = 1
  1484. If uof_pfcode_check(arg_mtrlid,ls_mtrlcode,arg_pfcode,arg_msg) = 0 Then
  1485. rslt = 0
  1486. Goto ext
  1487. End If
  1488. Decimal ld_advancetime_max_next //自制下级最大提前期
  1489. //计算需求日期
  1490. ld_rqdate = Date(String(arg_rqdate,'yyyy-mm-dd'))
  1491. If li_mtrlorigin = 0 Then
  1492. ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_advancetime )
  1493. //取下级最大提前期
  1494. If uof_get_max_advancetime(arg_mtrlid,arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then
  1495. arg_msg = ls_mtrlcode + arg_msg
  1496. rslt = 0
  1497. Goto ext
  1498. End If
  1499. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  1500. ElseIf li_mtrlorigin = 2 Then
  1501. ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime )
  1502. ld_sdate = RelativeDate ( ld_rqdate, 0 - ld_buydays - arg_advancetime )
  1503. ElseIf li_mtrlorigin = 3 Then
  1504. ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime )
  1505. ld_sdate = RelativeDate ( ld_rqdate, 0 - ld_wfjgdays - arg_advancetime )
  1506. ElseIf li_mtrlorigin = 6 Then
  1507. ld_edate = RelativeDate( ld_rqdate,0 - arg_advancetime )
  1508. ld_sdate = RelativeDate ( ld_edate, 0 - ld_aheaddays - arg_advancetime )
  1509. End If
  1510. ldt_sdate = DateTime(ld_sdate,Time(0))
  1511. ldt_edate = DateTime(ld_edate,Time(0))
  1512. //
  1513. If deep > 1 Then
  1514. li_mxt = UpperBound(arg_s_mtrl.mtrlid)
  1515. li_mxt++
  1516. arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid
  1517. arg_s_mtrl.pfcode[li_mxt] = arg_pfcode
  1518. arg_s_mtrl.qty[li_mxt] = arg_qty
  1519. arg_s_mtrl.status[li_mxt] = arg_status
  1520. arg_s_mtrl.woodcode[li_mxt] = arg_woodcode
  1521. arg_s_mtrl.pcode[li_mxt] = arg_pcode
  1522. arg_s_mtrl.cmplqty[li_mxt] = arg_qty
  1523. arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin
  1524. arg_s_mtrl.sdate[li_mxt] = ldt_sdate
  1525. arg_s_mtrl.edate[li_mxt] = ldt_edate
  1526. arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode
  1527. arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname
  1528. arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode
  1529. arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype
  1530. arg_s_mtrl.unit[li_mxt] = ls_unit
  1531. arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin
  1532. arg_s_mtrl.produce_scid[li_mxt] = ll_scid_mtrl
  1533. arg_s_mtrl.produce_wrkgrpid[li_mxt] = ll_wrkgrpid_mtrl
  1534. arg_s_mtrl.wrkGrpid_scll[li_mxt] = arg_wrkGrpid_scll
  1535. arg_s_mtrl.mtrlsectype[li_mxt] = ls_mtrlsectype
  1536. arg_s_mtrl.zxmtrlmode[li_mxt] = ls_zxmtrlmode
  1537. arg_s_mtrl.usermtrlmode[li_mxt] = ls_usermtrlmode
  1538. arg_s_mtrl.gydscrp[li_mxt] = arg_gydscrp
  1539. arg_s_mtrl.pfklmode[li_mxt] = arg_pfklmode
  1540. arg_s_mtrl.pfgroup[li_mxt] = arg_pfgroup
  1541. arg_s_mtrl.pfgroupmode[li_mxt] = arg_pfgroupmode
  1542. arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid
  1543. arg_s_mtrl.sonloss[li_mxt] = arg_sonloss
  1544. arg_s_mtrl.sondecloss[li_mxt] = arg_sondecloss
  1545. arg_s_mtrl.standardrqqty[li_mxt] = Round((arg_qty - arg_sondecloss) * (1 - arg_sonloss),uo_option_produce_dec)
  1546. End If
  1547. Choose Case li_mtrlorigin
  1548. Case 2
  1549. rslt = 1
  1550. Goto ext
  1551. Case 6
  1552. If li_mtrlprp = 2 Or li_mtrlprp = 8 Then
  1553. rslt = 1
  1554. Goto ext
  1555. End If
  1556. Case 0
  1557. If ll_scid_mtrl <> arg_scid Then
  1558. rslt = 1
  1559. Goto ext
  1560. Else
  1561. If li_ifselforder = 1 Then
  1562. rslt = 1
  1563. Goto ext
  1564. End If
  1565. End If
  1566. Case 3
  1567. If ll_scid_mtrl <> arg_scid Then
  1568. rslt = 1
  1569. Goto ext
  1570. Else
  1571. If li_ifselforder = 1 Then
  1572. rslt = 1
  1573. Goto ext
  1574. End If
  1575. End If
  1576. End Choose
  1577. Long count,ll_j
  1578. Decimal cmpl_qty
  1579. s_pfmx ls_s_pfmx[]
  1580. count = 0
  1581. Declare pf_cur Cursor For
  1582. Select u_PrdPF.Sonscale,
  1583. u_PrdPF.SonLoss,
  1584. u_PrdPF.SonDECLosS,
  1585. u_PrdPF.SonMtrlid,
  1586. u_PrdPF.sonpfcode,
  1587. u_PrdPF.status,
  1588. u_PrdPF.woodcode,
  1589. u_PrdPF.pcode,
  1590. u_PrdPF.wrkGrpid,
  1591. u_PrdPF.dscrp,
  1592. u_PrdPF.pfklmode,
  1593. u_PrdPF.pfgroup,
  1594. u_PrdPF.pfgroupmode,
  1595. u_PrdPF.advancetime,
  1596. u_PrdPF.baseqty,
  1597. u_PrdPF.buyarg,
  1598. u_mtrldef.mrptype,
  1599. u_mtrldef.mrparg,
  1600. u_prdpf.ifover,
  1601. u_prdpf.dipztype
  1602. From u_PrdPF,u_mtrldef
  1603. Where ( u_PrdPF.mtrlid = :arg_mtrlid )
  1604. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  1605. And ( u_PrdPF.pfcode = :arg_pfcode )
  1606. And ( u_mtrldef.ifmrp = 1 )
  1607. Order By u_PrdPF.printid;
  1608. Open pf_cur;
  1609. count = 1
  1610. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  1611. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  1612. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  1613. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  1614. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  1615. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  1616. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].advancetime,&
  1617. :ls_s_pfmx[count].baseqty,&
  1618. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  1619. :ls_s_pfmx[count].u_mtrldef_mrparg,&
  1620. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype;
  1621. Do While sqlca.SQLCode = 0
  1622. count++
  1623. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  1624. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  1625. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  1626. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  1627. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  1628. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  1629. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].advancetime,&
  1630. :ls_s_pfmx[count].baseqty,&
  1631. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  1632. :ls_s_pfmx[count].u_mtrldef_mrparg,&
  1633. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype;
  1634. Loop
  1635. count = count - 1
  1636. Close pf_cur;
  1637. If count = 0 Then
  1638. rslt = 1
  1639. Goto ext
  1640. End If
  1641. String ls_status_son,ls_woodcode_son,ls_pcode_son
  1642. Long tem_long
  1643. //物料清单基数
  1644. arg_qty = arg_qty/ld_cmpqty
  1645. For ll_j = 1 To count
  1646. If ls_s_pfmx[ll_j].sonloss <> 1 Then
  1647. If ls_s_pfmx[ll_j].baseqty > 1 Then
  1648. cmpl_qty = Ceiling(Truncate(arg_qty/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss)+ls_s_pfmx[ll_j].sondecloss,10))
  1649. Else
  1650. If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then
  1651. cmpl_qty = Round(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss)+ls_s_pfmx[ll_j].sondecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  1652. Else
  1653. If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then
  1654. cmpl_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss) + ls_s_pfmx[ll_j].sondecloss,10))
  1655. Else
  1656. tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg
  1657. cmpl_qty = Ceiling((Truncate(arg_qty * ls_s_pfmx[ll_j].Sonscale/(1 - ls_s_pfmx[ll_j].sonloss) + ls_s_pfmx[ll_j].sondecloss,10)) * tem_long)/tem_long
  1658. cmpl_qty = Round(cmpl_qty , ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  1659. End If
  1660. End If
  1661. End If
  1662. Else
  1663. cmpl_qty = 0
  1664. End If
  1665. If ls_s_pfmx[ll_j].ifover = 1 Then
  1666. Choose Case ls_s_pfmx[ll_j].dipztype
  1667. Case 0
  1668. ls_status_son = arg_status
  1669. ls_woodcode_son = ''
  1670. ls_pcode_son = ''
  1671. Case 1
  1672. ls_status_son = ''
  1673. ls_woodcode_son = arg_woodcode
  1674. ls_pcode_son = ''
  1675. Case 2
  1676. ls_status_son = ''
  1677. ls_woodcode_son = ''
  1678. ls_pcode_son = arg_pcode
  1679. Case 3
  1680. ls_status_son = arg_status
  1681. ls_woodcode_son = arg_woodcode
  1682. ls_pcode_son = ''
  1683. Case 4
  1684. ls_status_son = ''
  1685. ls_woodcode_son = arg_woodcode
  1686. ls_pcode_son = arg_pcode
  1687. Case 5
  1688. ls_status_son = arg_status
  1689. ls_woodcode_son = ''
  1690. ls_pcode_son = arg_pcode
  1691. Case 6
  1692. ls_status_son = arg_status
  1693. ls_woodcode_son = arg_woodcode
  1694. ls_pcode_son = arg_pcode
  1695. End Choose
  1696. Else
  1697. ls_status_son = ls_s_pfmx[ll_j].status
  1698. ls_woodcode_son = ls_s_pfmx[ll_j].woodcode
  1699. ls_pcode_son = ls_s_pfmx[ll_j].pcode
  1700. End If
  1701. rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,&
  1702. ls_status_son,ls_woodcode_son,ls_pcode_son,&
  1703. ls_s_pfmx[ll_j].sonpfcode,&
  1704. cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,ldt_edate,ls_s_pfmx[ll_j].dscrp,&
  1705. ls_s_pfmx[ll_j].pfklmode,ls_s_pfmx[ll_j].pfgroup,&
  1706. ls_s_pfmx[ll_j].pfgroupmode,ls_s_pfmx[ll_j].advancetime,&
  1707. ls_s_pfmx[ll_j].sonloss,ls_s_pfmx[ll_j].sondecloss,&
  1708. arg_s_mtrl,arg_msg) //递归处理下级
  1709. If rslt = 0 Then
  1710. Goto ext
  1711. End If
  1712. Next
  1713. ext:
  1714. Return rslt
  1715. end function
  1716. public function integer uof_get_prdpf_sonloss (string arg_sonlossstr, decimal arg_qty, ref decimal arg_sonloss);//查询损耗率
  1717. Int rslt = 1
  1718. Int ll_rst
  1719. Long i,ll_pos,ll_row
  1720. String ls_conditionstr,ls_conditionstr_l,ls_conditionstr_r
  1721. String ls_modstr,ls_sonloss
  1722. Boolean lb_f = FALSE
  1723. s_pf_sonlossstr_array arg_s_sonlossstr_array
  1724. datastore ds_cmpl
  1725. ds_cmpl = CREATE datastore
  1726. IF Trim(arg_sonlossstr) = '' THEN
  1727. rslt = 0
  1728. GOTO ext
  1729. END IF
  1730. f_pf_sonlossstr(arg_sonlossstr,arg_s_sonlossstr_array)
  1731. FOR i = 1 TO UpperBound(arg_s_sonlossstr_array.conditionstr)
  1732. ll_pos = Pos(arg_s_sonlossstr_array.conditionstr[i],',')
  1733. IF ll_pos > 0 THEN
  1734. ls_conditionstr_l = Left( arg_s_sonlossstr_array.conditionstr[i], ll_pos - 1)
  1735. ls_conditionstr_r = Right( arg_s_sonlossstr_array.conditionstr[i],Len(arg_s_sonlossstr_array.conditionstr[i]) - ll_pos )
  1736. ls_modstr = String(arg_qty,'###0.##########') + ls_conditionstr_l + ' and ' + String(arg_qty,'###0.##########') + ls_conditionstr_r
  1737. ELSE
  1738. ls_modstr = String(arg_qty,'###0.##########') + arg_s_sonlossstr_array.conditionstr[i]
  1739. END IF
  1740. ds_cmpl.DataObject = 'ds_pf_sonlossstr_cmpl'
  1741. ll_row = ds_cmpl.InsertRow(0)
  1742. ls_modstr = 'if('+ls_modstr+',1,0)'
  1743. // messagebox('',ls_modstr)
  1744. ds_cmpl.Modify("cmpl.expression='"+ls_modstr+"'")
  1745. ll_rst = ds_cmpl.Object.cmpl[ll_row]
  1746. ds_cmpl.Reset()
  1747. IF ll_rst = 0 THEN CONTINUE
  1748. ls_sonloss = arg_s_sonlossstr_array.sonlossstr[i]
  1749. IF Pos(ls_sonloss,'数量') > 0 THEN
  1750. ll_row = ds_cmpl.InsertRow(0)
  1751. ls_modstr = Replace ( ls_sonloss, Pos(ls_sonloss,'数量'), 4, String(arg_qty,'#,##0.0#########') )
  1752. ds_cmpl.Modify("cmpl.expression='"+ls_modstr+"'")
  1753. arg_sonloss = ds_cmpl.Object.cmpl[ll_row]
  1754. ds_cmpl.Reset()
  1755. ELSE
  1756. arg_sonloss = Dec(ls_sonloss)
  1757. END IF
  1758. lb_f = TRUE
  1759. EXIT
  1760. NEXT
  1761. IF NOT lb_f THEN rslt = 0
  1762. ext:
  1763. RETURN rslt
  1764. end function
  1765. public function integer uof_get_qty_dscrp (integer arg_type, integer arg_ifdate, datetime arg_enddate, long arg_scid, long arg_orderid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_ref_dscrp, ref string arg_msg);//取相关数量
  1766. Int rslt = 1
  1767. Decimal ld_qty
  1768. String ls_mtrlcode,ls_ordercode
  1769. Int li_ordertype
  1770. SELECT mtrlcode,ordertype
  1771. INTO :ls_mtrlcode,:li_ordertype
  1772. FROM u_mtrldef
  1773. Where mtrlid = :arg_mtrlid;
  1774. IF sqlca.SQLCode <> 0 THEN
  1775. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  1776. rslt = 0
  1777. GOTO ext
  1778. END IF
  1779. CHOOSE CASE arg_type
  1780. CASE 1 //采购未进仓数
  1781. // SELECT sum(u_buytaskmx.qty - u_buytaskmx.consignedqty)
  1782. // INTO :ld_qty
  1783. // FROM u_buytaskmx,u_buytask
  1784. // WHERE u_buytaskmx.scid = :arg_scid
  1785. // AND u_buytaskmx.mtrlid = :arg_mtrlid
  1786. // AND u_buytaskmx.status = :arg_status
  1787. // AND u_buytaskmx.woodcode = :arg_woodcode
  1788. // AND u_buytaskmx.pcode = :arg_pcode
  1789. // AND u_buytaskmx.scid = u_buytask.scid
  1790. // AND u_buytaskmx.taskid = u_buytask.taskid
  1791. // AND u_buytaskmx.stopflag = 0
  1792. // AND u_buytask.status = 1
  1793. // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_buytaskmx.requiredate <= :arg_enddate );
  1794. // IF sqlca.SQLCode = -1 THEN
  1795. // arg_msg = '查询物料:'+ls_mtrlcode+' 采购未进仓数失败,'+sqlca.SQLErrText
  1796. // rslt = 0
  1797. // GOTO ext
  1798. // END IF
  1799. CASE 2 //生产未进仓数
  1800. DECLARE cur_pqty_dscrp CURSOR FOR
  1801. SELECT u_Order_ml.orderqty - u_Order_ml.acmpqty,
  1802. u_Order_ml.ordercode
  1803. FROM u_Order_ml
  1804. WHERE u_Order_ml.mtrlid = :arg_mtrlid
  1805. AND u_Order_ml.scid = :arg_scid
  1806. AND u_Order_ml.status_mode = :arg_status
  1807. AND u_Order_ml.woodcode = :arg_woodcode
  1808. AND u_Order_ml.pcode = :arg_pcode
  1809. AND u_Order_ml.status = 1
  1810. AND u_Order_ml.orderid <> :arg_orderid
  1811. AND ( :li_ordertype = 0 OR :li_ordertype = 1 AND u_Order_ml.ordertype = 4 )
  1812. AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_Order_ml.requiredate <= :arg_enddate )
  1813. AND u_Order_ml.orderqty - u_Order_ml.acmpqty > 0;
  1814. OPEN cur_pqty_dscrp;
  1815. FETCH cur_pqty_dscrp INTO :ld_qty,:ls_ordercode;
  1816. DO WHILE sqlca.SQLCode = 0
  1817. arg_ref_dscrp += ls_ordercode + ':'+String(ld_qty,'#,0.##########') + '|'
  1818. FETCH cur_pqty_dscrp INTO :ld_qty,:ls_ordercode;
  1819. LOOP
  1820. CLOSE cur_pqty_dscrp;
  1821. IF Len(arg_ref_dscrp) = 0 THEN
  1822. arg_msg = '查询物料:'+ls_mtrlcode+' 指令未进仓数失败,'+sqlca.SQLErrText
  1823. rslt = 0
  1824. GOTO ext
  1825. END IF
  1826. CASE 3 //外协未进仓数
  1827. // SELECT sum(u_order_wfjgMx.qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty)
  1828. // INTO :ld_qty
  1829. // FROM u_order_wfjgMx,u_order_wfjg
  1830. // WHERE u_order_wfjgMx.scid = :arg_scid
  1831. // AND u_order_wfjgMx.mtrlid = :arg_mtrlid
  1832. // AND u_order_wfjgMx.status = :arg_status
  1833. // AND u_order_wfjgMx.woodcode = :arg_woodcode
  1834. // AND u_order_wfjgMx.pcode = :arg_pcode
  1835. // AND u_order_wfjgMx.scid = u_order_wfjg.scid
  1836. // AND u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID
  1837. // AND u_order_wfjg.status = 1
  1838. // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_order_wfjgMx.requiredate <= :arg_enddate );
  1839. // IF sqlca.SQLCode = -1 THEN
  1840. // arg_msg = '查询物料:'+ls_mtrlcode+' 外协未进仓数失败,'+sqlca.SQLErrText
  1841. // rslt = 0
  1842. // GOTO ext
  1843. // END IF
  1844. CASE 5 //生产计划未排指令当生产未进仓数
  1845. // SELECT isnull(sum(u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty),0)
  1846. // INTO :ld_qty
  1847. // FROM u_Order_ml,u_OrderRqMtrl
  1848. // WHERE u_Order_ml.scid = u_OrderRqMtrl.scid
  1849. // AND u_Order_ml.orderid = u_OrderRqMtrl.orderid
  1850. // AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  1851. // AND u_OrderRqMtrl.scid = :arg_scid
  1852. // AND u_OrderRqMtrl.status = :arg_status
  1853. // AND u_OrderRqMtrl.woodcode = :arg_woodcode
  1854. // AND u_OrderRqMtrl.pcode = :arg_pcode
  1855. // AND u_Order_ml.status = 1
  1856. // AND u_Order_ml.orderid <> :arg_orderid
  1857. // AND ( u_Order_ml.ordertype <> 4 )
  1858. // AND ( :arg_ifdate = 0 OR :arg_ifdate = 1 AND u_OrderRqMtrl.rqdate <= :arg_enddate );
  1859. // IF sqlca.SQLCode = -1 THEN
  1860. // arg_msg = '查询物料:'+ls_mtrlcode+' 生产计划未排指令当生产未进仓数失败,'+sqlca.SQLErrText
  1861. // rslt = 0
  1862. // GOTO ext
  1863. // END IF
  1864. END CHOOSE
  1865. IF Len(arg_ref_dscrp) > 0 THEN
  1866. arg_ref_dscrp = Left(arg_ref_dscrp,Len(arg_ref_dscrp) - 1)
  1867. END IF
  1868. ext:
  1869. RETURN rslt
  1870. end function
  1871. private function integer uof_get_max_advancetime2 (long arg_mtrlid, string arg_status, ref decimal arg_ref_advancetime, ref string arg_msg);//取下级最大提前期(组合配置)
  1872. Int rslt = 1
  1873. Long cnt,i
  1874. s_mtrlcfg_expr s_mtrlcfg[]
  1875. Long ll_cnt_s_mtrlcfg
  1876. Decimal ld_advancetime
  1877. IF arg_status = '' THEN
  1878. arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查'
  1879. rslt = 0
  1880. GOTO ext
  1881. END IF
  1882. //分解配置
  1883. f_checkpz(arg_status,s_mtrlcfg)
  1884. //
  1885. ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg)
  1886. IF ll_cnt_s_mtrlcfg = 0 THEN
  1887. arg_msg = '产品分拆配置失败'
  1888. rslt = 0
  1889. GOTO ext
  1890. END IF
  1891. FOR i = 1 To ll_cnt_s_mtrlcfg
  1892. SELECT count(*) INTO :cnt
  1893. FROM u_prdpf
  1894. WHERE mtrlid = :arg_mtrlid
  1895. And pfcode = :s_mtrlcfg[i].cfgname;
  1896. IF sqlca.SQLCode <> 0 THEN
  1897. arg_msg = '查询产品子件清单是否已设置下级用料失败,'+sqlca.SQLErrText
  1898. rslt = 0
  1899. GOTO ext
  1900. END IF
  1901. IF cnt = 0 THEN
  1902. arg_ref_advancetime = 0
  1903. // rslt = 0
  1904. // arg_msg = '产品子件清单没有设置下级用料,请检查'
  1905. // GOTO ext
  1906. ELSE
  1907. SELECT max(advancetime) INTO :ld_advancetime
  1908. FROM u_prdpf
  1909. WHERE mtrlid = :arg_mtrlid
  1910. And pfcode = :s_mtrlcfg[i].cfgname;
  1911. IF sqlca.SQLCode <> 0 THEN
  1912. arg_msg = '查询物料下级用料最大提前期失败,'+sqlca.SQLErrText
  1913. rslt = 0
  1914. GOTO ext
  1915. END IF
  1916. END IF
  1917. IF ld_advancetime > arg_ref_advancetime THEN
  1918. arg_ref_advancetime = ld_advancetime
  1919. END IF
  1920. NEXT
  1921. ext:
  1922. RETURN rslt
  1923. end function
  1924. public function integer uof_cmpl_rqmtrl_fp (long arg_scid, long arg_orderid, integer arg_if_allowuse, integer arg_ifdate, datetime arg_enddate, s_order_ml_rqmtrl arg_s_mtrl, ref s_mtrlware_assign_plan arg_ref_s_assign_plan, ref string arg_msg);Int rslt = 1
  1925. Long ll_fp_array,ll_hz_array
  1926. s_order_ml_rqmtrl l_s_rqmtrl_hz
  1927. Long i,j,ll_f,k
  1928. Decimal ld_fpqty_need
  1929. Decimal ld_fpqty_m,ld_fpqty_b,ld_fpqty_p,ld_fpqty_w
  1930. Long ll_m,ll_b,ll_p,ll_w
  1931. datastore ds_plan_m,ds_plan_b,ds_plan_p,ds_plan_w
  1932. ds_plan_m = Create datastore
  1933. ds_plan_m.DataObject = 'ds_mtrlware_assign_plan_m'
  1934. ds_plan_m.SetTransObject(sqlca)
  1935. ds_plan_b = Create datastore
  1936. ds_plan_b.DataObject = 'ds_mtrlware_assign_plan_b'
  1937. ds_plan_b.SetTransObject(sqlca)
  1938. ds_plan_p = Create datastore
  1939. ds_plan_p.DataObject = 'ds_mtrlware_assign_plan_p'
  1940. ds_plan_p.SetTransObject(sqlca)
  1941. ds_plan_w = Create datastore
  1942. ds_plan_w.DataObject = 'ds_mtrlware_assign_plan_w'
  1943. ds_plan_w.SetTransObject(sqlca)
  1944. IF arg_if_allowuse = 0 THEN
  1945. rslt = 1
  1946. GOTO ext
  1947. END IF
  1948. FOR i = 1 To UpperBound(arg_s_mtrl.mtrlid)
  1949. ll_f = 0
  1950. //过滤
  1951. IF arg_s_mtrl.iffp[i] = 0 THEN CONTINUE
  1952. //只处理自制yyx20120824
  1953. // If ( arg_s_mtrl.ifselforder[i] > 0 And arg_s_mtrl.mtrlorigin[i] = 0 Or arg_s_mtrl.mtrlorigin[i] > 0 ) THEN
  1954. If ( arg_s_mtrl.ifselforder[i] > 0 And arg_s_mtrl.mtrlorigin[i] = 0 ) THEN
  1955. IF ifzl_mtrl_not_useqty Or ifwx_mtrl_not_useqty THEN
  1956. IF arg_s_mtrl.mtrlorigin[i] = 0 THEN
  1957. IF arg_s_mtrl.ifselforder[i] = 2 THEN
  1958. IF ifzl_mtrl_not_useqty THEN
  1959. CONTINUE
  1960. END IF
  1961. END IF
  1962. ELSEIF arg_s_mtrl.mtrlorigin[i] = 3 THEN
  1963. IF ifwx_mtrl_not_useqty THEN
  1964. CONTINUE
  1965. END IF
  1966. END IF
  1967. END IF
  1968. IF arg_s_mtrl.otherrqqty[i] >= arg_s_mtrl.mqty[i] + arg_s_mtrl.bqty[i] + arg_s_mtrl.wqty[i] + arg_s_mtrl.pqty[i] + arg_s_mtrl.pqty2[i] THEN
  1969. CONTINUE
  1970. ELSE
  1971. ll_f = 0
  1972. FOR j = 1 To ll_hz_array
  1973. IF arg_s_mtrl.mtrlid[i] = l_s_rqmtrl_hz.mtrlid[j] And &
  1974. arg_s_mtrl.status[i] = l_s_rqmtrl_hz.status[j] And &
  1975. arg_s_mtrl.woodcode[i] = l_s_rqmtrl_hz.woodcode[j] And &
  1976. arg_s_mtrl.pcode[i] = l_s_rqmtrl_hz.pcode[j] THEN
  1977. ll_f = j
  1978. EXIT
  1979. END IF
  1980. NEXT
  1981. IF ll_f = 0 THEN
  1982. ll_hz_array++
  1983. l_s_rqmtrl_hz.mtrlid[ll_hz_array] = arg_s_mtrl.mtrlid[i]
  1984. l_s_rqmtrl_hz.status[ll_hz_array] = arg_s_mtrl.status[i]
  1985. l_s_rqmtrl_hz.woodcode[ll_hz_array] = arg_s_mtrl.woodcode[i]
  1986. l_s_rqmtrl_hz.pcode[ll_hz_array] = arg_s_mtrl.pcode[i]
  1987. l_s_rqmtrl_hz.mtrlorigin[ll_hz_array] = arg_s_mtrl.mtrlorigin[i]
  1988. l_s_rqmtrl_hz.ifselforder[ll_hz_array] = arg_s_mtrl.ifselforder[i]
  1989. l_s_rqmtrl_hz.qty[ll_hz_array] = arg_s_mtrl.qty[i]
  1990. l_s_rqmtrl_hz.mqty[ll_hz_array] = arg_s_mtrl.mqty[i]
  1991. l_s_rqmtrl_hz.bqty[ll_hz_array] = arg_s_mtrl.bqty[i]
  1992. l_s_rqmtrl_hz.pqty[ll_hz_array] = arg_s_mtrl.pqty[i]
  1993. l_s_rqmtrl_hz.pqty2[ll_hz_array] = arg_s_mtrl.pqty2[i]
  1994. l_s_rqmtrl_hz.wqty[ll_hz_array] = arg_s_mtrl.wqty[i]
  1995. l_s_rqmtrl_hz.otherrqqty[ll_hz_array] = arg_s_mtrl.otherrqqty[i]
  1996. ELSE
  1997. l_s_rqmtrl_hz.qty[ll_f] += arg_s_mtrl.qty[i]
  1998. END IF
  1999. END IF
  2000. ELSE
  2001. CONTINUE
  2002. END IF
  2003. //过滤完毕
  2004. NEXT
  2005. //计算分配类型
  2006. FOR k = 1 To ll_hz_array
  2007. ld_fpqty_m = 0
  2008. ld_fpqty_b = 0
  2009. ld_fpqty_p = 0
  2010. ld_fpqty_w = 0
  2011. ld_fpqty_need = l_s_rqmtrl_hz.qty[k]
  2012. IF l_s_rqmtrl_hz.mtrlorigin[k] = 0 THEN
  2013. IF if_pqty_not_zl THEN
  2014. IF l_s_rqmtrl_hz.pqty2[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN
  2015. l_s_rqmtrl_hz.otherrqqty[k] = 0
  2016. ELSE
  2017. l_s_rqmtrl_hz.otherrqqty[k] = l_s_rqmtrl_hz.otherrqqty[k] - l_s_rqmtrl_hz.pqty2[k]
  2018. END IF
  2019. END IF
  2020. END IF
  2021. IF l_s_rqmtrl_hz.mqty[k] > l_s_rqmtrl_hz.otherrqqty[k] THEN
  2022. IF l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN
  2023. ld_fpqty_m = ld_fpqty_need
  2024. ld_fpqty_b = 0
  2025. ld_fpqty_p = 0
  2026. ld_fpqty_w = 0
  2027. ELSE
  2028. ld_fpqty_m = l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k]
  2029. ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] - l_s_rqmtrl_hz.otherrqqty[k])
  2030. IF l_s_rqmtrl_hz.bqty[k] > 0 And ld_fpqty_need > 0 THEN
  2031. IF l_s_rqmtrl_hz.bqty[k] >= ld_fpqty_need THEN
  2032. ld_fpqty_b = ld_fpqty_need
  2033. ld_fpqty_p = 0
  2034. ld_fpqty_w = 0
  2035. ELSE
  2036. ld_fpqty_b = l_s_rqmtrl_hz.bqty[k]
  2037. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.bqty[k]
  2038. END IF
  2039. END IF
  2040. IF l_s_rqmtrl_hz.pqty[k] > 0 And ld_fpqty_need > 0 THEN
  2041. IF l_s_rqmtrl_hz.pqty[k] >= ld_fpqty_need THEN
  2042. ld_fpqty_p = ld_fpqty_need
  2043. ld_fpqty_w = 0
  2044. ELSE
  2045. ld_fpqty_p = l_s_rqmtrl_hz.pqty[k]
  2046. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.pqty[k]
  2047. END IF
  2048. END IF
  2049. IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN
  2050. IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN
  2051. ld_fpqty_w = ld_fpqty_need
  2052. ELSE
  2053. ld_fpqty_w = l_s_rqmtrl_hz.wqty[k]
  2054. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k]
  2055. END IF
  2056. END IF
  2057. END IF
  2058. ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] > l_s_rqmtrl_hz.otherrqqty[k] THEN
  2059. ld_fpqty_m = 0
  2060. IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN
  2061. ld_fpqty_b = ld_fpqty_need
  2062. ld_fpqty_p = 0
  2063. ld_fpqty_w = 0
  2064. ELSE
  2065. ld_fpqty_b = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k]
  2066. ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] - l_s_rqmtrl_hz.otherrqqty[k])
  2067. IF l_s_rqmtrl_hz.pqty[k] > 0 And ld_fpqty_need > 0 THEN
  2068. IF l_s_rqmtrl_hz.pqty[k] >= ld_fpqty_need THEN
  2069. ld_fpqty_p = ld_fpqty_need
  2070. ld_fpqty_w = 0
  2071. ELSE
  2072. ld_fpqty_p = l_s_rqmtrl_hz.pqty[k]
  2073. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.pqty[k]
  2074. END IF
  2075. END IF
  2076. IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN
  2077. IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN
  2078. ld_fpqty_w = ld_fpqty_need
  2079. ELSE
  2080. ld_fpqty_w = l_s_rqmtrl_hz.wqty[k]
  2081. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k]
  2082. END IF
  2083. END IF
  2084. END IF
  2085. ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN
  2086. ld_fpqty_m = 0
  2087. ld_fpqty_b = 0
  2088. IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN
  2089. ld_fpqty_p = ld_fpqty_need
  2090. ld_fpqty_w = 0
  2091. ELSE
  2092. ld_fpqty_p = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k]
  2093. ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] - l_s_rqmtrl_hz.otherrqqty[k])
  2094. IF l_s_rqmtrl_hz.wqty[k] > 0 And ld_fpqty_need > 0 THEN
  2095. IF l_s_rqmtrl_hz.wqty[k] >= ld_fpqty_need THEN
  2096. ld_fpqty_w = ld_fpqty_need
  2097. ELSE
  2098. ld_fpqty_w = l_s_rqmtrl_hz.wqty[k]
  2099. ld_fpqty_need = ld_fpqty_need - l_s_rqmtrl_hz.wqty[k]
  2100. END IF
  2101. END IF
  2102. END IF
  2103. ELSEIF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] >= l_s_rqmtrl_hz.otherrqqty[k] THEN
  2104. ld_fpqty_m = 0
  2105. ld_fpqty_b = 0
  2106. ld_fpqty_p = 0
  2107. IF l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k] >= ld_fpqty_need THEN
  2108. ld_fpqty_w = ld_fpqty_need
  2109. ELSE
  2110. ld_fpqty_w = l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k]
  2111. ld_fpqty_need = ld_fpqty_need - (l_s_rqmtrl_hz.mqty[k] + l_s_rqmtrl_hz.bqty[k] + l_s_rqmtrl_hz.pqty[k] + l_s_rqmtrl_hz.wqty[k] - l_s_rqmtrl_hz.otherrqqty[k])
  2112. END IF
  2113. END IF
  2114. //库存分配
  2115. IF ld_fpqty_m > 0 THEN
  2116. ds_plan_m.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k])
  2117. ds_plan_m.AcceptText()
  2118. FOR ll_m = 1 To ds_plan_m.RowCount()
  2119. IF ld_fpqty_m = 0 THEN EXIT
  2120. IF ld_fpqty_m <= ds_plan_m.Object.notfpqty[ll_m] THEN
  2121. ll_fp_array++
  2122. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2123. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2124. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 0
  2125. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 0
  2126. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = 0
  2127. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0
  2128. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2129. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = ds_plan_m.Object.u_mtrlware_mtrlwareid[ll_m]
  2130. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2131. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2132. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_m
  2133. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2134. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2135. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2136. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2137. ld_fpqty_m = 0
  2138. ELSE
  2139. ll_fp_array++
  2140. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2141. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2142. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 0
  2143. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 0
  2144. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = 0
  2145. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0
  2146. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2147. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = ds_plan_m.Object.u_mtrlware_mtrlwareid[ll_m]
  2148. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2149. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2150. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_m.Object.notfpqty[ll_m]
  2151. ld_fpqty_m = ld_fpqty_m - ds_plan_m.Object.notfpqty[ll_m]
  2152. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2153. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2154. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2155. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2156. END IF
  2157. NEXT
  2158. IF ld_fpqty_m > 0 THEN
  2159. arg_msg = '库存分配数错误,运'
  2160. rslt = 0
  2161. GOTO ext
  2162. END IF
  2163. END IF
  2164. //采购订单分配
  2165. IF ld_fpqty_b > 0 THEN
  2166. ds_plan_b.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate)
  2167. ds_plan_b.AcceptText()
  2168. FOR ll_b = 1 To ds_plan_b.RowCount()
  2169. IF ld_fpqty_b = 0 THEN EXIT
  2170. IF ld_fpqty_b <= ds_plan_b.Object.notfpqty[ll_b] THEN
  2171. ll_fp_array++
  2172. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2173. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2174. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2175. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 2
  2176. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_taskid[ll_b]
  2177. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_printid[ll_b]
  2178. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2179. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2180. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2181. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2182. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_b
  2183. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2184. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2185. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2186. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2187. ld_fpqty_b = 0
  2188. ELSE
  2189. ll_fp_array++
  2190. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2191. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2192. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2193. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 2
  2194. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_taskid[ll_b]
  2195. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_b.Object.u_buytaskmx_printid[ll_b]
  2196. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2197. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2198. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2199. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2200. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_b.Object.notfpqty[ll_b]
  2201. ld_fpqty_b = ld_fpqty_b - ds_plan_b.Object.notfpqty[ll_b]
  2202. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2203. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2204. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2205. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2206. END IF
  2207. NEXT
  2208. IF ld_fpqty_b > 0 THEN
  2209. arg_msg = '采购分配计划数错误'
  2210. rslt = 0
  2211. GOTO ext
  2212. END IF
  2213. END IF
  2214. //指令单分配
  2215. IF ld_fpqty_p > 0 THEN
  2216. ds_plan_p.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate)
  2217. ds_plan_p.AcceptText()
  2218. FOR ll_p = 1 To ds_plan_p.RowCount()
  2219. IF ld_fpqty_p = 0 THEN EXIT
  2220. IF ld_fpqty_p <= ds_plan_p.Object.notfpqty[ll_p] THEN
  2221. ll_fp_array++
  2222. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2223. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2224. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2225. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 1
  2226. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_p.Object.u_order_ml_orderid[ll_p]
  2227. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0
  2228. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2229. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2230. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2231. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2232. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_p
  2233. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2234. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2235. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2236. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2237. ld_fpqty_p = 0
  2238. ELSE
  2239. ll_fp_array++
  2240. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2241. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2242. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2243. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 1
  2244. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_p.Object.u_order_ml_orderid[ll_p]
  2245. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = 0
  2246. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2247. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2248. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2249. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2250. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_p.Object.notfpqty[ll_p]
  2251. ld_fpqty_p = ld_fpqty_p - ds_plan_p.Object.notfpqty[ll_p]
  2252. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2253. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2254. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2255. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2256. END IF
  2257. NEXT
  2258. IF ld_fpqty_p > 0 THEN
  2259. arg_msg = '指令分配计划数错误'
  2260. rslt = 0
  2261. GOTO ext
  2262. END IF
  2263. END IF
  2264. //外协单分配
  2265. IF ld_fpqty_w > 0 THEN
  2266. ds_plan_w.Retrieve(arg_scid,l_s_rqmtrl_hz.mtrlid[k],l_s_rqmtrl_hz.status[k],l_s_rqmtrl_hz.woodcode[k],l_s_rqmtrl_hz.pcode[k],arg_ifdate,arg_enddate)
  2267. ds_plan_w.AcceptText()
  2268. FOR ll_w = 1 To ds_plan_w.RowCount()
  2269. IF ld_fpqty_w = 0 THEN EXIT
  2270. IF ld_fpqty_w <= ds_plan_w.Object.notfpqty[ll_w] THEN
  2271. ll_fp_array++
  2272. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2273. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2274. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2275. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 3
  2276. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_orderid[ll_w]
  2277. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_printid[ll_w]
  2278. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2279. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2280. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2281. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2282. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ld_fpqty_w
  2283. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2284. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2285. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2286. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2287. ld_fpqty_w = 0
  2288. ELSE
  2289. ll_fp_array++
  2290. arg_ref_s_assign_plan.planid[ll_fp_array] = 0
  2291. arg_ref_s_assign_plan.assigntype[ll_fp_array] = 0
  2292. arg_ref_s_assign_plan.Plantype[ll_fp_array] = 1
  2293. arg_ref_s_assign_plan.Plankind[ll_fp_array] = 3
  2294. arg_ref_s_assign_plan.Plankind_relbillid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_orderid[ll_w]
  2295. arg_ref_s_assign_plan.Plankind_relprintid[ll_fp_array] = ds_plan_w.Object.u_order_wfjgmx_printid[ll_w]
  2296. arg_ref_s_assign_plan.Scid[ll_fp_array] = 0
  2297. arg_ref_s_assign_plan.Mtrlwareid[ll_fp_array] = 0
  2298. arg_ref_s_assign_plan.Relbillid[ll_fp_array] = arg_orderid
  2299. arg_ref_s_assign_plan.Relprintid[ll_fp_array] = 0
  2300. arg_ref_s_assign_plan.planassignqty[ll_fp_array] = ds_plan_w.Object.notfpqty[ll_w]
  2301. ld_fpqty_w = ld_fpqty_w - ds_plan_w.Object.notfpqty[ll_w]
  2302. arg_ref_s_assign_plan.mtrlid[ll_fp_array] = l_s_rqmtrl_hz.mtrlid[k]
  2303. arg_ref_s_assign_plan.status[ll_fp_array] = l_s_rqmtrl_hz.status[k]
  2304. arg_ref_s_assign_plan.woodcode[ll_fp_array] = l_s_rqmtrl_hz.woodcode[k]
  2305. arg_ref_s_assign_plan.pcode[ll_fp_array] = l_s_rqmtrl_hz.pcode[k]
  2306. END IF
  2307. NEXT
  2308. IF ld_fpqty_w > 0 THEN
  2309. arg_msg = '外协分配计划数错误'
  2310. rslt = 0
  2311. GOTO ext
  2312. END IF
  2313. END IF
  2314. NEXT
  2315. ext:
  2316. Destroy ds_plan_m
  2317. Destroy ds_plan_b
  2318. Destroy ds_plan_p
  2319. Destroy ds_plan_w
  2320. RETURN rslt
  2321. end function
  2322. public function integer uof_cmpl_rqmtrl_dy (integer arg_ifdate, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);Int rslt = 1
  2323. Long i,ch,l,arr_mxt,j,ll_dycnt,dy_arr_mxt
  2324. Long ll_begin_i
  2325. Decimal ld_pcmplqty,ld_cmplqty,ld_rate,ld_cqty,ld_cmplqty_old
  2326. Decimal ld_dyqty
  2327. Decimal ld_mqty
  2328. Decimal ld_bqty
  2329. Decimal ld_wqty
  2330. Decimal ld_pqty
  2331. Decimal ld_otherrqqty,ld_samerqqty
  2332. s_prdpf_replace arg_pf_dy,arg_pf_dy_t,arg_pf_dy_tmp
  2333. FOR i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
  2334. IF arg_s_mtrl.dytype[i] > 0 THEN
  2335. ch++
  2336. END IF
  2337. NEXT
  2338. IF ch = 0 THEN
  2339. rslt = 1
  2340. GOTO ext
  2341. END IF
  2342. ll_begin_i = 1
  2343. re_for:
  2344. FOR i = ll_begin_i TO UpperBound(arg_s_mtrl.mtrlid)
  2345. arg_pf_dy = arg_pf_dy_tmp
  2346. arg_pf_dy_t = arg_pf_dy_tmp
  2347. ll_dycnt = 0
  2348. dy_arr_mxt = 0
  2349. IF arg_s_mtrl.dytype[i] = 0 THEN CONTINUE
  2350. IF NOT arg_s_mtrl.cmplqty[i] > 0 THEN CONTINUE
  2351. ld_pcmplqty = arg_s_mtrl.pcmplqty[i]
  2352. IF uof_get_prdpf_replace(arg_s_mtrl.pmtrlid[i],&
  2353. arg_s_mtrl.ppfcode[i],&
  2354. arg_s_mtrl.pfgroup[i],&
  2355. arg_s_mtrl.mtrlid[i],&
  2356. arg_s_mtrl.wrkgrpid_scll[i],&
  2357. arg_s_mtrl.pfcode[i],&
  2358. arg_pf_dy,arg_msg) = 0 THEN
  2359. rslt = 0
  2360. GOTO ext
  2361. END IF
  2362. IF arg_s_mtrl.dytype[i] = 1 THEN
  2363. ld_cqty = 0
  2364. ld_cqty = arg_s_mtrl.cmplqty[i]
  2365. FOR l = 1 TO UpperBound(arg_pf_dy.dymtrlid)
  2366. ld_mqty = 0
  2367. ld_bqty = 0
  2368. ld_wqty = 0
  2369. ld_pqty = 0
  2370. ld_otherrqqty = 0
  2371. ld_samerqqty = 0
  2372. ld_dyqty = 0
  2373. IF ld_cqty = 0 THEN EXIT
  2374. IF arg_pf_dy.SonLoss[l] = 1 THEN CONTINUE
  2375. ld_cmplqty = 0
  2376. ld_cmplqty = Round(ld_pcmplqty * arg_pf_dy.Sonscale[l]/(1 - arg_pf_dy.SonLoss[l]),uo_option_produce_dec)
  2377. ld_rate = Round(ld_cmplqty/arg_s_mtrl.qty[i],2)
  2378. ld_cqty = ld_cqty * ld_rate
  2379. IF uof_get_qty(1,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2380. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2381. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2382. arg_pf_dy.pcode[l],ld_bqty,arg_msg) = 0 THEN
  2383. rslt = 0
  2384. GOTO ext
  2385. END IF
  2386. IF uof_get_qty(2,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2387. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2388. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2389. arg_pf_dy.pcode[l],ld_pqty,arg_msg) = 0 THEN
  2390. rslt = 0
  2391. GOTO ext
  2392. END IF
  2393. IF uof_get_qty(3,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2394. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2395. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2396. arg_pf_dy.pcode[l],ld_wqty,arg_msg) = 0 THEN
  2397. rslt = 0
  2398. GOTO ext
  2399. END IF
  2400. IF uof_get_qty(4,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2401. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2402. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2403. arg_pf_dy.pcode[l],ld_mqty,arg_msg) = 0 THEN
  2404. rslt = 0
  2405. GOTO ext
  2406. END IF
  2407. IF uof_get_other_rqqty(arg_s_mtrl.scid[i],arg_s_mtrl.orderid[i],&
  2408. arg_pf_dy.dymtrlid[l],arg_s_mtrl.mtrlorigin[i],arg_pf_dy.status[l],&
  2409. arg_pf_dy.woodcode[l],arg_pf_dy.pcode[l],ld_otherrqqty,&
  2410. arg_ifdate,arg_s_mtrl.edate[i],arg_msg) = 0 THEN
  2411. rslt = 0
  2412. GOTO ext
  2413. END IF
  2414. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  2415. IF arr_mxt = 0 THEN
  2416. ld_samerqqty = 0
  2417. ELSE
  2418. FOR j = 1 TO arr_mxt
  2419. IF arg_s_mtrl.scid[j] = arg_s_mtrl.scid[i] AND &
  2420. arg_s_mtrl.orderid[j] = arg_s_mtrl.orderid[i] AND &
  2421. arg_s_mtrl.mtrlid[j] = arg_pf_dy.dymtrlid[l] AND &
  2422. arg_s_mtrl.sdate[j] = arg_s_mtrl.sdate[i] AND &
  2423. arg_s_mtrl.edate[j] = arg_s_mtrl.edate[i] AND &
  2424. arg_s_mtrl.status[j] = arg_pf_dy.status[l] AND &
  2425. arg_s_mtrl.woodcode[j] = arg_pf_dy.woodcode[l] AND &
  2426. arg_s_mtrl.pcode[j] = arg_pf_dy.pcode[l] AND &
  2427. arg_s_mtrl.wrkgrpid_scll[j] = arg_s_mtrl.wrkgrpid_scll[i] THEN
  2428. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[j]
  2429. END IF
  2430. NEXT
  2431. END IF
  2432. IF ( ld_samerqqty + ld_otherrqqty ) >= ( ld_mqty + ld_bqty + ld_wqty + ld_pqty ) THEN
  2433. CONTINUE
  2434. END IF
  2435. IF ld_cqty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty ) THEN
  2436. ld_dyqty = ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty )
  2437. ld_cqty = ld_cqty - ( ld_mqty + ld_bqty + ld_wqty + ld_pqty - ( ld_samerqqty + ld_otherrqqty ) )
  2438. ld_cqty = Round(ld_cqty/ld_rate,2)
  2439. ELSE
  2440. ld_dyqty = ld_cqty
  2441. ld_cqty = 0
  2442. END IF
  2443. dy_arr_mxt++
  2444. arg_pf_dy_t.dymtrlid[dy_arr_mxt] = arg_pf_dy.dymtrlid[l]
  2445. arg_pf_dy_t.Sonscale[dy_arr_mxt] = arg_pf_dy.Sonscale[l]
  2446. arg_pf_dy_t.SonLoss[dy_arr_mxt] = arg_pf_dy.SonLoss[l]
  2447. arg_pf_dy_t.scllloss[dy_arr_mxt] = arg_pf_dy.scllloss[l]
  2448. arg_pf_dy_t.dscrp[dy_arr_mxt] = arg_pf_dy.dscrp[l]
  2449. arg_pf_dy_t.status[dy_arr_mxt] = arg_pf_dy.status[l]
  2450. arg_pf_dy_t.woodcode[dy_arr_mxt] = arg_pf_dy.woodcode[l]
  2451. arg_pf_dy_t.pcode[dy_arr_mxt] = arg_pf_dy.pcode[l]
  2452. arg_pf_dy_t.mtrlcode[dy_arr_mxt] = arg_pf_dy.mtrlcode[l]
  2453. arg_pf_dy_t.mtrlname[dy_arr_mxt] = arg_pf_dy.mtrlname[l]
  2454. arg_pf_dy_t.mtrlmode[dy_arr_mxt] = arg_pf_dy.mtrlmode[l]
  2455. arg_pf_dy_t.unit[dy_arr_mxt] = arg_pf_dy.unit[l]
  2456. arg_pf_dy_t.mtrlorigin[dy_arr_mxt] = arg_pf_dy.mtrlorigin[l]
  2457. arg_pf_dy_t.mtrltype[dy_arr_mxt] = arg_pf_dy.mtrltype[l]
  2458. arg_pf_dy_t.mtrlprp[dy_arr_mxt] = arg_pf_dy.mtrlprp[l]
  2459. arg_pf_dy_t.ifselforder[dy_arr_mxt] = arg_pf_dy.ifselforder[l]
  2460. arg_pf_dy_t.ifpack[dy_arr_mxt] = arg_pf_dy.ifpack[l]
  2461. arg_pf_dy_t.ifpackpro[dy_arr_mxt] = arg_pf_dy.ifpackpro[l]
  2462. arg_pf_dy_t.produce_scid[dy_arr_mxt] = arg_pf_dy.produce_scid[l]
  2463. arg_pf_dy_t.produce_wrkgrpid[dy_arr_mxt] = arg_pf_dy.produce_wrkgrpid[l]
  2464. arg_pf_dy_t.ordertype[dy_arr_mxt] = arg_pf_dy.ordertype[l]
  2465. arg_pf_dy_t.ifpackpz[dy_arr_mxt] = arg_pf_dy.ifpackpz[l]
  2466. arg_pf_dy_t.dyqty[dy_arr_mxt] = ld_dyqty
  2467. arg_pf_dy_t.mqty[dy_arr_mxt] = ld_mqty
  2468. arg_pf_dy_t.bqty[dy_arr_mxt] = ld_bqty
  2469. arg_pf_dy_t.wqty[dy_arr_mxt] = ld_wqty
  2470. arg_pf_dy_t.pqty[dy_arr_mxt] = ld_pqty
  2471. arg_pf_dy_t.otherrqqty[dy_arr_mxt] = ld_otherrqqty
  2472. arg_pf_dy_t.samerqqty[dy_arr_mxt] = ld_samerqqty
  2473. NEXT
  2474. ll_dycnt = UpperBound(arg_pf_dy_t.dymtrlid)
  2475. //代用
  2476. IF ll_dycnt > 0 and ld_cqty = 0 THEN
  2477. IF arg_s_mtrl.qty[i] > arg_s_mtrl.cmplqty[i] THEN
  2478. uof_cmpl_rqmtrl_dy_mx(i,1,arg_s_mtrl,arg_pf_dy_t)
  2479. ll_begin_i = i + ll_dycnt
  2480. ELSEIF arg_s_mtrl.qty[i] = arg_s_mtrl.cmplqty[i] THEN
  2481. uof_cmpl_rqmtrl_dy_mx(i,0,arg_s_mtrl,arg_pf_dy_t)
  2482. ll_begin_i = i + ll_dycnt - 1
  2483. END IF
  2484. ll_begin_i = ll_begin_i + 1
  2485. GOTO re_for
  2486. END IF
  2487. ELSEIF arg_s_mtrl.dytype[i] = 2 THEN
  2488. FOR l = 1 TO UpperBound(arg_pf_dy.dymtrlid)
  2489. IF arg_pf_dy.SonLoss[l] = 1 THEN CONTINUE
  2490. ld_cmplqty = 0
  2491. ld_cmplqty = Round(ld_pcmplqty * arg_pf_dy.Sonscale[l]/(1 - arg_pf_dy.SonLoss[l]),uo_option_produce_dec)
  2492. IF uof_get_qty(1,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2493. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2494. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2495. arg_pf_dy.pcode[l],ld_bqty,arg_msg) = 0 THEN
  2496. rslt = 0
  2497. GOTO ext
  2498. END IF
  2499. IF uof_get_qty(2,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2500. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2501. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2502. arg_pf_dy.pcode[l],ld_pqty,arg_msg) = 0 THEN
  2503. rslt = 0
  2504. GOTO ext
  2505. END IF
  2506. IF uof_get_qty(3,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2507. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2508. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2509. arg_pf_dy.pcode[l],ld_wqty,arg_msg) = 0 THEN
  2510. rslt = 0
  2511. GOTO ext
  2512. END IF
  2513. IF uof_get_qty(4,arg_ifdate,arg_s_mtrl.edate[i],arg_s_mtrl.scid[i],&
  2514. arg_s_mtrl.orderid[i],arg_pf_dy.dymtrlid[l],&
  2515. arg_pf_dy.status[l],arg_pf_dy.woodcode[l],&
  2516. arg_pf_dy.pcode[l],ld_mqty,arg_msg) = 0 THEN
  2517. rslt = 0
  2518. GOTO ext
  2519. END IF
  2520. IF uof_get_other_rqqty(arg_s_mtrl.scid[i],arg_s_mtrl.orderid[i],&
  2521. arg_pf_dy.dymtrlid[l],arg_s_mtrl.mtrlorigin[i],arg_pf_dy.status[l],&
  2522. arg_pf_dy.woodcode[l],arg_pf_dy.pcode[l],ld_otherrqqty,&
  2523. arg_ifdate,arg_s_mtrl.edate[i],arg_msg) = 0 THEN
  2524. rslt = 0
  2525. GOTO ext
  2526. END IF
  2527. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  2528. IF arr_mxt = 0 THEN
  2529. ld_samerqqty = 0
  2530. ELSE
  2531. FOR j = 1 TO arr_mxt
  2532. IF arg_s_mtrl.scid[j] = arg_s_mtrl.scid[i] AND &
  2533. arg_s_mtrl.orderid[j] = arg_s_mtrl.orderid[i] AND &
  2534. arg_s_mtrl.mtrlid[j] = arg_pf_dy.dymtrlid[l] AND &
  2535. arg_s_mtrl.sdate[j] = arg_s_mtrl.sdate[i] AND &
  2536. arg_s_mtrl.edate[j] = arg_s_mtrl.edate[i] AND &
  2537. arg_s_mtrl.status[j] = arg_pf_dy.status[l] AND &
  2538. arg_s_mtrl.woodcode[j] = arg_pf_dy.woodcode[l] AND &
  2539. arg_s_mtrl.pcode[j] = arg_pf_dy.pcode[l] AND &
  2540. arg_s_mtrl.wrkgrpid_scll[j] = arg_s_mtrl.wrkgrpid_scll[i] THEN
  2541. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[j]
  2542. END IF
  2543. NEXT
  2544. END IF
  2545. IF ld_cmplqty < ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN
  2546. arg_s_mtrl.mtrlid[i] = arg_pf_dy.dymtrlid[l]
  2547. arg_s_mtrl.status[i] = arg_pf_dy.status[l]
  2548. arg_s_mtrl.woodcode[i] = arg_pf_dy.woodcode[l]
  2549. arg_s_mtrl.pcode[i] = arg_pf_dy.pcode[l]
  2550. arg_s_mtrl.mtrlcode[i] = arg_pf_dy.mtrlcode[l]
  2551. arg_s_mtrl.mtrlname[i] = arg_pf_dy.mtrlname[l]
  2552. arg_s_mtrl.mtrlmode[i] = arg_pf_dy.mtrlmode[l]
  2553. arg_s_mtrl.unit[i] = arg_pf_dy.unit[l]
  2554. arg_s_mtrl.mtrlorigin[i] = arg_pf_dy.mtrlorigin[l]
  2555. arg_s_mtrl.mtrltype[i] = arg_pf_dy.mtrltype[l]
  2556. arg_s_mtrl.mtrlprp[i] = arg_pf_dy.mtrlprp[l]
  2557. arg_s_mtrl.ifselforder[i] = arg_pf_dy.ifselforder[l]
  2558. arg_s_mtrl.ifpack[i] = arg_pf_dy.ifpack[l]
  2559. arg_s_mtrl.ifpackpro[i] = arg_pf_dy.ifpackpro[l]
  2560. arg_s_mtrl.mtrlordertype[i] = arg_pf_dy.ordertype[l]
  2561. arg_s_mtrl.ifpackpz[i] = arg_pf_dy.ifpackpz[l]
  2562. arg_s_mtrl.produce_scid[i] = arg_pf_dy.produce_scid[l]
  2563. arg_s_mtrl.produce_wrkgrpid[i] = arg_pf_dy.produce_wrkgrpid[l]
  2564. arg_s_mtrl.qty[i] = ld_cmplqty
  2565. arg_s_mtrl.cmplqty[i] = 0
  2566. arg_s_mtrl.mqty[i] = ld_mqty
  2567. arg_s_mtrl.bqty[i] = ld_bqty
  2568. arg_s_mtrl.wqty[i] = ld_wqty
  2569. arg_s_mtrl.pqty[i] = ld_pqty
  2570. arg_s_mtrl.otherrqqty[i] = ld_otherrqqty
  2571. arg_s_mtrl.samerqqty[i] = ld_samerqqty
  2572. EXIT
  2573. END IF
  2574. NEXT
  2575. END IF
  2576. NEXT
  2577. ext:
  2578. RETURN rslt
  2579. end function
  2580. public function integer uof_aps_update_date (long arg_scid, long arg_orderid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2581. Int li_flag
  2582. SELECT plan_flag INTO :li_flag
  2583. FROM u_order_ml
  2584. WHERE scid = :arg_scid
  2585. And orderid = :arg_orderid;
  2586. IF sqlca.SQLCode <> 0 THEN
  2587. rslt = 0
  2588. arg_msg = '查询生产计划排程标记失败,'+sqlca.SQLErrText
  2589. GOTO ext
  2590. END IF
  2591. IF li_flag = 0 THEN
  2592. rslt = 1
  2593. GOTO ext
  2594. END IF
  2595. UPDATE u_OrderRqMtrl
  2596. SET u_OrderRqMtrl.RqDate = v_update_rqmtrl.new_rqdate,
  2597. u_OrderRqMtrl.edate = v_update_rqmtrl.new_edate
  2598. FROM u_OrderRqMtrl INNER JOIN
  2599. (SELECT v_workgroup.mindate AS new_rqdate, DATEADD(dd, DATEDIFF(dd,
  2600. u_OrderRqMtrl.RqDate, v_workgroup.mindate), u_OrderRqMtrl.edate)
  2601. AS new_edate, u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID,
  2602. u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.wrkGrpid, u_OrderRqMtrl.status,
  2603. u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode, u_OrderRqMtrl.plantype,
  2604. u_OrderRqMtrl.produce_wrkGrpid
  2605. FROM u_OrderRqMtrl INNER JOIN
  2606. (SELECT wrkGrpid, MIN(begindate) AS mindate, scid, orderid
  2607. FROM u_OrderMtrl_workgroup
  2608. WHERE (begindate IS NOT NULL)
  2609. GROUP BY wrkGrpid, scid, orderid) v_workgroup ON
  2610. u_OrderRqMtrl.scid = v_workgroup.scid AND
  2611. u_OrderRqMtrl.OrderID = v_workgroup.orderid AND
  2612. u_OrderRqMtrl.wrkGrpid = v_workgroup.wrkGrpid) v_update_rqmtrl ON
  2613. u_OrderRqMtrl.scid = v_update_rqmtrl.scid AND
  2614. u_OrderRqMtrl.OrderID = v_update_rqmtrl.OrderID AND
  2615. u_OrderRqMtrl.MtrlID = v_update_rqmtrl.MtrlID AND
  2616. u_OrderRqMtrl.wrkGrpid = v_update_rqmtrl.wrkGrpid AND
  2617. u_OrderRqMtrl.status = v_update_rqmtrl.status COLLATE Chinese_PRC_CI_AS AND
  2618. u_OrderRqMtrl.woodcode = v_update_rqmtrl.woodcode COLLATE Chinese_PRC_CI_AS AND
  2619. u_OrderRqMtrl.pcode = v_update_rqmtrl.pcode COLLATE Chinese_PRC_CI_AS AND
  2620. u_OrderRqMtrl.plantype = v_update_rqmtrl.plantype AND
  2621. u_OrderRqMtrl.produce_wrkGrpid = v_update_rqmtrl.produce_wrkGrpid
  2622. WHERE u_OrderRqMtrl.scid = :arg_scid
  2623. And u_OrderRqMtrl.orderid = :arg_orderid;
  2624. IF sqlca.SQLCode <> 0 THEN
  2625. rslt = 0
  2626. arg_msg = '更新用料需求日期失败,'+sqlca.SQLErrText
  2627. GOTO ext
  2628. END IF
  2629. UPDATE u_OrderRqMtrl_tree
  2630. SET u_OrderRqMtrl_tree.RqDate = v_updaet_date.new_rqdate,
  2631. u_OrderRqMtrl_tree.edate = v_updaet_date.new_edate
  2632. FROM u_OrderRqMtrl_tree INNER JOIN
  2633. (SELECT u_OrderRqMtrl_tree.scid, u_OrderRqMtrl_tree.OrderID,
  2634. u_OrderRqMtrl_tree.printid, v_workgroup.mindate AS new_rqdate,
  2635. DATEADD(dd, DATEDIFF(dd, u_OrderRqMtrl_tree.RqDate,
  2636. v_workgroup.mindate), u_OrderRqMtrl_tree.edate) AS new_edate
  2637. FROM u_OrderRqMtrl_tree INNER JOIN
  2638. (SELECT wrkGrpid, MIN(begindate) AS mindate, scid, orderid
  2639. FROM u_OrderMtrl_workgroup
  2640. WHERE (begindate IS NOT NULL)
  2641. GROUP BY wrkGrpid, scid, orderid) v_workgroup ON
  2642. u_OrderRqMtrl_tree.scid = v_workgroup.scid AND
  2643. u_OrderRqMtrl_tree.OrderID = v_workgroup.orderid AND
  2644. u_OrderRqMtrl_tree.wrkGrpid = v_workgroup.wrkGrpid) v_updaet_date ON
  2645. u_OrderRqMtrl_tree.scid = v_updaet_date.scid AND
  2646. u_OrderRqMtrl_tree.OrderID = v_updaet_date.OrderID AND
  2647. u_OrderRqMtrl_tree.printid = v_updaet_date.printid
  2648. WHERE u_OrderRqMtrl_tree.scid = :arg_scid
  2649. And u_OrderRqMtrl_tree.orderid = :arg_orderid;
  2650. IF sqlca.SQLCode <> 0 THEN
  2651. rslt = 0
  2652. arg_msg = '更新物料需求结构表日期失败,'+sqlca.SQLErrText
  2653. GOTO ext
  2654. END IF
  2655. ext:
  2656. RETURN rslt
  2657. end function
  2658. public function integer uof_cmpl_rqmtrl (long arg_lp, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//主MRP运算
  2659. Int rslt = 1
  2660. Int li_pfflag
  2661. Long ll_mtrlid_order,ll_ordertype_order,ll_saletaskmx_pf_cnt
  2662. Long ll_taskid_order,ll_taskmxid_order
  2663. DateTime ldt_orderdate,ldt_orderrqdate
  2664. Int li_order_ifpackpro
  2665. Int li_ifmainmtrlid
  2666. Long arr_mxt
  2667. Long ll_i,cnt
  2668. Boolean if_special_notuse = False
  2669. Int li_ifpzpf
  2670. Long ll_pzpfcnt
  2671. String ls_pfcode_local
  2672. Long ll_ifbj_task
  2673. int li_multtype
  2674. decimal lde_eoq, lde_maxqty, lde_minqty
  2675. decimal lde_addcmplqty, lde_sameaddcmplqty
  2676. string ls_pdscrp
  2677. If uo_option_packpro2_pf_pack2_useifover = -1000 Then
  2678. rslt = 0
  2679. arg_msg = '选项:[274]个性包件产品清单明细个性包件必须使用按配置拆装,读取初始默认值失败,操作取消!'
  2680. Goto ext
  2681. End If
  2682. If uo_option_ifpackpro2_if_no_pack2 = -1000 Then
  2683. rslt = 0
  2684. arg_msg = '选项:[340]个性包件产品物料清单允许没有个性包件,读取初始默认值失败,操作取消!'
  2685. Goto ext
  2686. End If
  2687. deep++
  2688. If deep > 1000 Then
  2689. arg_msg = '递归太深'+String(deep)
  2690. rslt = 0
  2691. Goto ext
  2692. End If
  2693. ls_pfcode_local = arg_s_mrp.arg_pfcode
  2694. If arg_s_mrp.arg_orderid <> -1 Then
  2695. Select u_order_ml.mtrlid,
  2696. u_order_ml.orderdate,
  2697. u_order_ml.requiredate,
  2698. u_mtrldef.ifpackpro,
  2699. u_order_ml.ordertype,
  2700. u_order_ml.taskid,
  2701. u_order_ml.taskmxid
  2702. Into :ll_mtrlid_order,
  2703. :ldt_orderdate,
  2704. :ldt_orderrqdate,
  2705. :li_order_ifpackpro,
  2706. :ll_ordertype_order,
  2707. :ll_taskid_order,
  2708. :ll_taskmxid_order
  2709. From u_order_ml Inner join u_mtrldef on u_order_ml.mtrlid = u_mtrldef.mtrlid
  2710. Where u_order_ml.orderid = :arg_s_mrp.arg_orderid
  2711. And u_order_ml.scid = :arg_s_mrp.arg_scid;
  2712. If sqlca.SQLCode <> 0 Then
  2713. arg_msg = '查询生产计划生产物料操作失败,'+sqlca.SQLErrText
  2714. rslt = 0
  2715. Goto ext
  2716. End If
  2717. Select u_saletype.ifbj
  2718. Into :ll_ifbj_task
  2719. From u_SaleTask Inner JOIN
  2720. u_saletype ON u_SaleTask.typeid = u_saletype.typeid
  2721. Where u_SaleTask.scid = :arg_s_mrp.arg_scid
  2722. And u_SaleTask.taskid = :ll_taskid_order;
  2723. If sqlca.SQLCode <> 0 Then
  2724. ll_ifbj_task = 0
  2725. End If
  2726. Else
  2727. If deep = 1 Then
  2728. ll_mtrlid_order = arg_s_mrp.arg_mtrlid
  2729. Else
  2730. ll_mtrlid_order = -1
  2731. End If
  2732. End If
  2733. String ls_mtrlcode,ls_mtrlname,ls_mtrlmode
  2734. String ls_unit,ls_mtrltype
  2735. Int li_mtrlorigin,li_ifselforder,li_mtrlprp,li_statusflag,li_mtrlorigin_p
  2736. Long ll_scid_mtrl,ll_wrkgrpid_mtrl
  2737. Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays
  2738. Date ld_sdate,ld_edate,ld_rqdate,ld_up_sdate
  2739. DateTime ldt_sdate,ldt_edate
  2740. Int li_ifpack,li_ifpackpro,li_ordertype,li_ifpackpz,li_iffp
  2741. Decimal ld_cmpqty
  2742. String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
  2743. Select u_mtrldef.mtrlcode,
  2744. u_mtrldef.mtrlname,
  2745. u_mtrldef.mtrlmode,
  2746. u_mtrldef.mtrltype,
  2747. u_mtrldef.unit,
  2748. u_mtrldef.Mtrlorigin,
  2749. u_mtrldef.scid,
  2750. u_mtrldef.dftwrkgrpid,
  2751. u_mtrldef.buydays,
  2752. u_mtrldef.orderdays,
  2753. u_mtrldef.wfjgdays,
  2754. u_mtrldef.aheaddays,
  2755. u_mtrldef.ifselforder,
  2756. u_mtrldef.mtrlprp,
  2757. u_mtrldef.statusflag,
  2758. u_mtrldef.ifpack,
  2759. u_mtrldef.ifpackpro,
  2760. u_mtrldef.ordertype,
  2761. u_mtrldef.ifpackpz,
  2762. u_mtrldef.cmpqty,
  2763. u_mtrldef.mtrlsectype,
  2764. u_mtrldef.zxmtrlmode,
  2765. u_mtrldef.usermtrlmode,
  2766. u_mtrldef.iffp,
  2767. u_mtrldef.multtype,
  2768. u_mtrldef.eoq,
  2769. u_mtrldef.maxqty,
  2770. u_mtrldef.minqty
  2771. Into :ls_mtrlcode,
  2772. :ls_mtrlname,
  2773. :ls_mtrlmode,
  2774. :ls_mtrltype,
  2775. :ls_unit,
  2776. :li_mtrlorigin,
  2777. :ll_scid_mtrl,
  2778. :ll_wrkgrpid_mtrl,
  2779. :ld_buydays,
  2780. :ld_orderdays,
  2781. :ld_wfjgdays,
  2782. :ld_aheaddays,
  2783. :li_ifselforder,
  2784. :li_mtrlprp,
  2785. :li_statusflag,
  2786. :li_ifpack,
  2787. :li_ifpackpro,
  2788. :li_ordertype,
  2789. :li_ifpackpz,
  2790. :ld_cmpqty,
  2791. :ls_mtrlsectype,
  2792. :ls_zxmtrlmode,
  2793. :ls_usermtrlmode,
  2794. :li_iffp,
  2795. :li_multtype,
  2796. :lde_eoq,
  2797. :lde_maxqty,
  2798. :lde_minqty
  2799. From u_mtrldef
  2800. Where mtrlid = :arg_s_mrp.arg_mtrlid;
  2801. If sqlca.SQLCode <> 0 Then
  2802. arg_msg = '查询物料资料失败,'+sqlca.SQLErrText
  2803. rslt = 0
  2804. Goto ext
  2805. End If
  2806. //yyx20120523
  2807. If deep = 1 Then
  2808. If li_ifpackpro = 1 Then
  2809. cnt = 0
  2810. Select count(*) Into :cnt
  2811. From u_PrdPF,u_mtrldef,u_mtrl_pf
  2812. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  2813. And ( u_mtrl_pf.ifdi = 0 )
  2814. And ( u_mtrl_pf.ifdft = 1 )
  2815. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  2816. And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  2817. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  2818. And ( u_mtrldef.ifpack = 2 );
  2819. If sqlca.SQLCode <> 0 Then
  2820. arg_msg = '查询通用包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText
  2821. rslt = 0
  2822. Goto ext
  2823. End If
  2824. If cnt > 0 Then
  2825. arg_msg = '通用包件产品下级有个性包件,操作取消,请检查物料清单'
  2826. rslt = 0
  2827. Goto ext
  2828. End If
  2829. End If
  2830. If li_ifpackpro = 2 Then
  2831. If uo_option_ifpackpro2_if_no_pack2 = 0 Then
  2832. cnt = 0
  2833. Select count(*) Into :cnt
  2834. From u_PrdPF,u_mtrldef,u_mtrl_pf
  2835. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  2836. And ( u_mtrl_pf.ifdi = 0 )
  2837. And ( u_mtrl_pf.ifdft = 1 )
  2838. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  2839. And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  2840. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  2841. And ( u_mtrldef.ifpack = 2 );
  2842. If sqlca.SQLCode <> 0 Then
  2843. arg_msg = '查询个性包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText
  2844. rslt = 0
  2845. Goto ext
  2846. End If
  2847. If cnt = 0 Then
  2848. arg_msg = '个性包件产品下级没有个性包件,操作取消,请检查物料清单'
  2849. rslt = 0
  2850. Goto ext
  2851. End If
  2852. End If
  2853. //检查订单生产计划相关订单明细是否设置了个性清单yyx120823
  2854. If ll_ordertype_order = 1 And ll_taskid_order > 0 Then
  2855. Select count(*)
  2856. Into :ll_saletaskmx_pf_cnt
  2857. From u_saletaskmx_pf
  2858. Where u_saletaskmx_pf.scid = :arg_s_mrp.arg_scid
  2859. And u_saletaskmx_pf.taskid = :ll_taskid_order
  2860. And u_saletaskmx_pf.printid = :ll_taskmxid_order;
  2861. If sqlca.SQLCode <> 0 Then
  2862. arg_msg = '查询主计划产品对应销售订单明细是否设置了个性清单失败,'+sqlca.SQLErrText
  2863. rslt = 0
  2864. Goto ext
  2865. End If
  2866. End If
  2867. //
  2868. End If
  2869. If uo_option_packpro2_pf_pack2_useifover = 1 Then
  2870. If li_ifpackpro = 2 Then
  2871. cnt = 0
  2872. Select count(*) Into :cnt
  2873. From u_PrdPF,u_mtrldef,u_mtrl_pf
  2874. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  2875. And ( u_mtrl_pf.ifdi = 0 )
  2876. And ( u_mtrl_pf.ifdft = 1 )
  2877. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  2878. And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  2879. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  2880. And ( u_PrdPF.ifover = 0 )
  2881. And ( u_mtrldef.ifpack = 2 );
  2882. If sqlca.SQLCode <> 0 Then
  2883. arg_msg = '查询个性包件产品下级个性包件清单明细是否有未设<按配置拆装>属性失败,'+sqlca.SQLErrText
  2884. rslt = 0
  2885. Goto ext
  2886. End If
  2887. If cnt > 0 Then
  2888. arg_msg = '个性包件产品下级个性包件清单明细有未设<按配置拆装>属性,操作取消,请检查物料清单'
  2889. rslt = 0
  2890. Goto ext
  2891. End If
  2892. End If
  2893. End If
  2894. cnt = 0
  2895. Select count(*) Into :cnt
  2896. From u_PrdPF,u_mtrldef,u_mtrl_pf
  2897. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  2898. And ( u_mtrl_pf.ifdi = 0 )
  2899. And ( u_mtrl_pf.ifdft = 1 )
  2900. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  2901. And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  2902. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  2903. And ( u_PrdPF.ifover = 1 )
  2904. And ( u_PrdPF.dipztype = -1 );
  2905. If sqlca.SQLCode <> 0 Then
  2906. arg_msg = '查询产品下级清单明细是否有未设<配置拆装类型>属性失败,'+sqlca.SQLErrText
  2907. rslt = 0
  2908. Goto ext
  2909. End If
  2910. If cnt > 0 Then
  2911. arg_msg = '产品下级清单明细有未设<配置拆装类型>属性,操作取消,请检查物料清单'
  2912. rslt = 0
  2913. Goto ext
  2914. End If
  2915. End If
  2916. //
  2917. If arg_s_mrp.arg_pmtrlid > 0 Then
  2918. Select mtrlorigin Into :li_mtrlorigin_p
  2919. From u_mtrldef
  2920. Where mtrlid = :arg_s_mrp.arg_pmtrlid;
  2921. If sqlca.SQLCode <> 0 Then
  2922. arg_msg = '查询上级物料资料失败,'+sqlca.SQLErrText
  2923. rslt = 0
  2924. Goto ext
  2925. End If
  2926. End If
  2927. If ld_cmpqty = 0 Then ld_cmpqty = 1
  2928. //检查组合配置是否使用组合配置清单
  2929. If li_statusflag = 2 And arg_s_mrp.arg_ifcfg = 0 Then
  2930. If arg_s_mrp.arg_status = '' Then
  2931. arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查'
  2932. rslt = 0
  2933. Goto ext
  2934. End If
  2935. arg_s_mrp.arg_pfcode = arg_s_mrp.arg_status
  2936. ll_pzpfcnt = 0
  2937. Select count(*) Into :ll_pzpfcnt
  2938. From u_mtrl_pf
  2939. Where mtrlid = :arg_s_mrp.arg_mtrlid
  2940. And pfcode = :arg_s_mrp.arg_pfcode
  2941. And ifpzpf = 1;
  2942. If sqlca.SQLCode <> 0 Then
  2943. arg_msg = '查询物料是否启用组合配置清单失败,'+sqlca.SQLErrText
  2944. rslt = 0
  2945. Goto ext
  2946. End If
  2947. If ll_pzpfcnt > 0 Then
  2948. li_ifpzpf = 1
  2949. If uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 Then
  2950. rslt = 0
  2951. Goto ext
  2952. End If
  2953. Else
  2954. li_ifpzpf = 0
  2955. End If
  2956. Else
  2957. li_ifpzpf = 0
  2958. End If
  2959. //如果不是组合配置或则检查物料清单审核标记
  2960. If li_statusflag <> 2 Or arg_s_mrp.arg_ifcfg = 1 Then
  2961. If uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 Then
  2962. rslt = 0
  2963. Goto ext
  2964. End If
  2965. End If
  2966. Decimal ld_cmplqty
  2967. Decimal ld_mqty
  2968. Decimal ld_wmqty
  2969. Decimal ld_bqty
  2970. Decimal ld_wqty
  2971. Decimal ld_pqty
  2972. Decimal ld_ckwareqty, ld_ckwareqty_af
  2973. Decimal ld_pqty2,ld_pqty2_cmpl
  2974. Decimal ld_rqwfjgqty,ld_rqwfjgqty_cmpl
  2975. Decimal ld_rqbuyqty,ld_rqbuyqty_cmpl
  2976. Decimal ld_otherrqqty,ld_otherrqqty_wx,ld_otherrqqty_sale,ld_samerqqty
  2977. Decimal ld_advancetime_max_next //自制下级最大提前期
  2978. Int li_dytype
  2979. String ld_qty_dscrp //未进仓明细摘要
  2980. //计算需求日期
  2981. ld_rqdate = Date(String(arg_s_mrp.arg_up_rqdate,'yyyy-mm-dd'))
  2982. ld_up_sdate = Date(String(arg_s_mrp.arg_up_sdate,'yyyy-mm-dd'))
  2983. If li_mtrlorigin = 0 Then
  2984. If deep = 1 Then
  2985. ld_edate = ld_rqdate
  2986. If li_ifpackpro > 0 Then
  2987. If sys_option_ifuse_ordersdate = 0 Then
  2988. ld_sdate = Date(ldt_orderdate)
  2989. Else
  2990. If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then
  2991. arg_msg = ls_mtrlcode + arg_msg
  2992. rslt = 0
  2993. Goto ext
  2994. End If
  2995. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  2996. End If
  2997. Else
  2998. If li_ordertype = 0 Then
  2999. If sys_option_ifuse_ordersdate = 0 Then
  3000. ld_sdate = Date(ldt_orderdate)
  3001. Else
  3002. If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then
  3003. arg_msg = ls_mtrlcode + arg_msg
  3004. rslt = 0
  3005. Goto ext
  3006. End If
  3007. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  3008. End If
  3009. Else
  3010. If li_statusflag = 2 And li_ifpzpf = 0 Then
  3011. If sys_option_ifuse_ordersdate = 0 Then
  3012. ld_sdate = Date(ldt_orderdate)
  3013. Else
  3014. If uof_get_max_advancetime2(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,ld_advancetime_max_next,arg_msg) = 0 Then
  3015. arg_msg = ls_mtrlcode + arg_msg
  3016. rslt = 0
  3017. Goto ext
  3018. End If
  3019. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  3020. End If
  3021. Else
  3022. If sys_option_ifuse_ordersdate = 0 Then
  3023. ld_sdate = Date(ldt_orderdate)
  3024. Else
  3025. If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then
  3026. arg_msg = ls_mtrlcode + arg_msg
  3027. rslt = 0
  3028. Goto ext
  3029. End If
  3030. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  3031. End If
  3032. End If
  3033. End If
  3034. End If
  3035. Else
  3036. If li_ifpack > 0 And sys_option_ifuse_ordersdate = 0 Then
  3037. ld_edate = Date(ldt_orderrqdate)
  3038. ld_sdate = Date(ldt_orderdate)
  3039. ElseIf (li_ifpackpro = 3 Or li_ifpackpro = 4) And sys_option_ifuse_ordersdate = 0 Then
  3040. ld_edate = Date(ldt_orderrqdate)
  3041. ld_sdate = Date(ldt_orderdate)
  3042. Else
  3043. If li_mtrlorigin_p = 3 Then
  3044. ld_edate = ld_up_sdate
  3045. Else
  3046. ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_s_mrp.arg_advancetime )
  3047. End If
  3048. //取下级最大提前期
  3049. If li_statusflag = 2 And ll_mtrlid_order = arg_s_mrp.arg_mtrlid Then
  3050. If sys_option_ifuse_ordersdate = 0 Then
  3051. ld_sdate = Date(ldt_orderdate)
  3052. Else
  3053. ld_advancetime_max_next = 0
  3054. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  3055. End If
  3056. Else
  3057. If uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 Then
  3058. arg_msg = ls_mtrlcode + arg_msg
  3059. rslt = 0
  3060. Goto ext
  3061. End If
  3062. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  3063. End If
  3064. End If
  3065. End If
  3066. ElseIf li_mtrlorigin = 2 Then
  3067. If li_mtrlorigin_p = 3 Then
  3068. ld_edate = ld_up_sdate
  3069. Else
  3070. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  3071. End If
  3072. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  3073. ld_sdate = RelativeDate ( ld_edate, 0 - ld_buydays )
  3074. ElseIf li_mtrlorigin = 3 Then
  3075. If li_mtrlorigin_p = 3 Then
  3076. ld_edate = ld_up_sdate
  3077. Else
  3078. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  3079. End If
  3080. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  3081. ld_sdate = RelativeDate ( ld_edate, 0 - ld_wfjgdays )
  3082. ElseIf li_mtrlorigin = 6 Then
  3083. If li_mtrlorigin_p = 3 Then
  3084. ld_edate = ld_up_sdate
  3085. Else
  3086. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  3087. End If
  3088. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  3089. ld_sdate = RelativeDate( ld_edate, 0 - ld_aheaddays )
  3090. End If
  3091. ldt_sdate = DateTime(ld_sdate,Time(0))
  3092. ldt_edate = DateTime(ld_edate,Time(0))
  3093. //-----------------------------------------
  3094. //代用物料
  3095. If li_mtrlorigin = 0 Then
  3096. li_dytype = 0
  3097. ElseIf li_mtrlorigin = 2 Then
  3098. If arg_s_mrp.arg_if_allowuse = 1 Then
  3099. If uof_get_prdpf_dytype(arg_s_mrp.arg_pmtrlid,arg_s_mrp.arg_ppfcode,arg_s_mrp.arg_pfgroup,arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_wrkgrpid_scll,arg_s_mrp.arg_pfcode,li_dytype,arg_msg) = 0 Then
  3100. arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3101. rslt = 0
  3102. Goto ext
  3103. End If
  3104. Else
  3105. li_dytype = 0
  3106. End If
  3107. ElseIf li_mtrlorigin = 3 Then
  3108. li_dytype = 0
  3109. ElseIf li_mtrlorigin = 6 Then
  3110. li_dytype = 0
  3111. End If
  3112. //
  3113. If arg_s_mrp.arg_ifcfg = 1 Then
  3114. li_ifmainmtrlid = 0
  3115. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3116. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  3117. ld_samerqqty = 0
  3118. Else
  3119. If arg_s_mrp.arg_mtrlid = ll_mtrlid_order Then
  3120. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3121. li_ifmainmtrlid = 1
  3122. Else
  3123. li_ifmainmtrlid = 0
  3124. If arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) Then
  3125. //改写存储过程
  3126. If sys_option_if_newmrp = 0 Then
  3127. Declare sp_qty Procedure For sp_order_ml_mrp_qty
  3128. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  3129. @arg_enddate = :ldt_edate,
  3130. @arg_scid = :arg_s_mrp.arg_scid,
  3131. @arg_orderid = :arg_s_mrp.arg_orderid,
  3132. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  3133. @arg_status = :arg_s_mrp.arg_status,
  3134. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  3135. @arg_pcode = :arg_s_mrp.arg_pcode,
  3136. @arg_if_otherrq_mrpaudit = :if_otherrq_mrpaudit,
  3137. @arg_if_wqty_norq = :sys_option_if_wqty_norq,
  3138. @arg_plantype = :li_mtrlorigin,
  3139. @arg_ref_bqty = :ld_bqty output,
  3140. @arg_ref_pqty = :ld_pqty output,
  3141. @arg_ref_wqty = :ld_wqty output,
  3142. @arg_ref_mqty = :ld_mqty output,
  3143. @arg_ref_wmqty = :ld_wmqty output,
  3144. @arg_ref_pqty_nozl = :ld_pqty2 output,
  3145. @arg_ref_otherrqqty = :ld_otherrqqty output,
  3146. @arg_ref_rqwfjgqty = :ld_rqwfjgqty output,
  3147. @arg_ref_rqbuyqty = :ld_rqbuyqty output,
  3148. @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output,
  3149. @arg_ref_otherrqqty_sale = :ld_otherrqqty_sale output;
  3150. Execute sp_qty;
  3151. If sqlca.SQLCode <> 0 Then
  3152. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+sqlca.SQLErrText
  3153. rslt = 0
  3154. Goto ext
  3155. End If
  3156. Fetch sp_qty Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_mqty,:ld_wmqty,:ld_pqty2,:ld_otherrqqty,:ld_rqwfjgqty,:ld_rqbuyqty,:ld_otherrqqty_wx,:ld_otherrqqty_sale;
  3157. If sqlca.SQLCode <> 0 Then
  3158. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+sqlca.SQLErrText
  3159. rslt = 0
  3160. Goto ext
  3161. End If
  3162. Close sp_qty;
  3163. If sqlca.SQLCode <> 0 Then
  3164. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+sqlca.SQLErrText
  3165. rslt = 0
  3166. Goto ext
  3167. End If
  3168. Else
  3169. Declare sp_qty1 Procedure For sp_order_ml_mrp_qty_new
  3170. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  3171. @arg_enddate = :ldt_edate,
  3172. @arg_scid = :arg_s_mrp.arg_scid,
  3173. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  3174. @arg_status = :arg_s_mrp.arg_status,
  3175. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  3176. @arg_pcode = :arg_s_mrp.arg_pcode,
  3177. @arg_ref_bqty = :ld_bqty output,
  3178. @arg_ref_pqty = :ld_pqty output,
  3179. @arg_ref_wqty = :ld_wqty output,
  3180. @arg_ref_pqty_nozl = :ld_pqty2 output,
  3181. @arg_ref_otherrqqty = :ld_otherrqqty output,
  3182. @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output Using mrp_sqlca;
  3183. Execute sp_qty1;
  3184. If mrp_sqlca.SQLCode <> 0 Then
  3185. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+mrp_sqlca.SQLErrText
  3186. rslt = 0
  3187. Goto ext
  3188. End If
  3189. Fetch sp_qty1 Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_pqty2,:ld_otherrqqty,:ld_otherrqqty_wx;
  3190. If mrp_sqlca.SQLCode <> 0 Then
  3191. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText
  3192. rslt = 0
  3193. Goto ext
  3194. End If
  3195. Close sp_qty1;
  3196. If mrp_sqlca.SQLCode <> 0 Then
  3197. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+mrp_sqlca.SQLErrText
  3198. rslt = 0
  3199. Goto ext
  3200. End If
  3201. Declare sp_qty2 Procedure For sp_order_ml_mrp_qty_new2
  3202. @arg_scid = :arg_s_mrp.arg_scid,
  3203. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  3204. @arg_status = :arg_s_mrp.arg_status,
  3205. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  3206. @arg_pcode = :arg_s_mrp.arg_pcode,
  3207. @arg_ref_mqty = :ld_mqty output,
  3208. @arg_ref_wmqty = :ld_wmqty output;
  3209. Execute sp_qty2;
  3210. If sqlca.SQLCode <> 0 Then
  3211. arg_msg = '物料:'+ls_mtrlcode+',调用查询库存数量储存过程失败,'+sqlca.SQLErrText
  3212. rslt = 0
  3213. Goto ext
  3214. End If
  3215. Fetch sp_qty2 Into :ld_mqty,:ld_wmqty;
  3216. If sqlca.SQLCode <> 0 Then
  3217. arg_msg = '物料:'+ls_mtrlcode+',库存数量储存过程赋值变量失败,'+sqlca.SQLErrText
  3218. rslt = 0
  3219. Goto ext
  3220. End If
  3221. Close sp_qty2;
  3222. If sqlca.SQLCode <> 0 Then
  3223. arg_msg = '物料:'+ls_mtrlcode+',关闭查询库存数量储存过程失败,'+sqlca.SQLErrText
  3224. rslt = 0
  3225. Goto ext
  3226. End If
  3227. End If
  3228. // IF uof_get_qty(1,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
  3229. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3230. // rslt = 0
  3231. // GOTO ext
  3232. // END IF
  3233. //
  3234. // IF uof_get_qty(2,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN
  3235. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3236. // rslt = 0
  3237. // GOTO ext
  3238. // END IF
  3239. If if_qty_dscrp And ld_pqty > 0 Then //查生产未进仓明细
  3240. If uof_get_qty_dscrp(2,arg_s_mrp.arg_ifdate,ldt_edate,arg_s_mrp.arg_scid,arg_s_mrp.arg_orderid,arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,arg_s_mrp.arg_woodcode,arg_s_mrp.arg_pcode,ld_qty_dscrp,arg_msg) = 0 Then
  3241. arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3242. rslt = 0
  3243. Goto ext
  3244. End If
  3245. End If
  3246. // IF uof_get_qty(3,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
  3247. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3248. // rslt = 0
  3249. // GOTO ext
  3250. // END IF
  3251. //
  3252. // IF uof_get_qty(4,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN
  3253. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3254. // rslt = 0
  3255. // GOTO ext
  3256. // END IF
  3257. //
  3258. // IF uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_edate,arg_msg) = 0 THEN
  3259. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3260. // rslt = 0
  3261. // GOTO ext
  3262. // END IF
  3263. // IF if_pqty_not_zl And li_mtrlorigin = 0 THEN
  3264. // IF uof_get_qty(5,arg_ifdate,ldt_edate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty2,arg_msg) = 0 THEN
  3265. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  3266. // rslt = 0
  3267. // GOTO ext
  3268. // END IF
  3269. // END IF
  3270. End If
  3271. if sys_option_if_mrp_dscrp = 1 then
  3272. Declare sp_pdscrp Procedure For Sp_order_ml_mrp_qty_pdscrp
  3273. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  3274. @arg_enddate = :ldt_edate,
  3275. @arg_scid = :arg_s_mrp.arg_scid,
  3276. @arg_orderid = :arg_s_mrp.arg_orderid,
  3277. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  3278. @arg_status = :arg_s_mrp.arg_status,
  3279. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  3280. @arg_pcode = :arg_s_mrp.arg_pcode,
  3281. @arg_pdscrp = :ls_pdscrp output Using mrp_sqlca;
  3282. Execute sp_pdscrp;
  3283. If mrp_sqlca.SQLCode <> 0 Then
  3284. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText
  3285. rslt = 0
  3286. Goto ext
  3287. End If
  3288. Fetch sp_pdscrp Into :ls_pdscrp;
  3289. If mrp_sqlca.SQLCode <> 0 Then
  3290. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText
  3291. rslt = 0
  3292. Goto ext
  3293. End If
  3294. Close sp_pdscrp;
  3295. If mrp_sqlca.SQLCode <> 0 Then
  3296. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText
  3297. rslt = 0
  3298. Goto ext
  3299. End If
  3300. end if
  3301. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  3302. If arr_mxt = 0 Then
  3303. ld_samerqqty = 0
  3304. lde_sameaddcmplqty = 0
  3305. Else
  3306. For ll_i = 1 To arr_mxt
  3307. // Date(arg_s_mtrl.sdate[ll_i]) = Date(ldt_sdate) AND &
  3308. // Date(arg_s_mtrl.edate[ll_i]) = Date(ldt_edate) AND &
  3309. If arg_s_mtrl.scid[ll_i] = arg_s_mrp.arg_scid And &
  3310. arg_s_mtrl.orderid[ll_i] = arg_s_mrp.arg_orderid And &
  3311. arg_s_mtrl.mtrlid[ll_i] = arg_s_mrp.arg_mtrlid And &
  3312. arg_s_mtrl.status[ll_i] = arg_s_mrp.arg_status And &
  3313. arg_s_mtrl.woodcode[ll_i] = arg_s_mrp.arg_woodcode And &
  3314. arg_s_mtrl.pcode[ll_i] = arg_s_mrp.arg_pcode And &
  3315. arg_s_mtrl.wrkGrpid_scll[ll_i] = arg_s_mrp.arg_wrkgrpid_scll Then
  3316. If arg_s_mtrl.ifselforder[ll_i] > 0 And arg_s_mtrl.Mtrlorigin[ll_i] = 0 Or arg_s_mtrl.Mtrlorigin[ll_i] > 0 Then
  3317. if ((li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) ) and li_multtype > 0 then
  3318. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i]
  3319. else
  3320. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i]
  3321. end if
  3322. lde_sameaddcmplqty = lde_sameaddcmplqty + arg_s_mtrl.addcmplqty[ll_i]
  3323. End If
  3324. End If
  3325. Next
  3326. End If
  3327. If arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) Then
  3328. If ifzl_mtrl_not_useqty Or ifzl_mtrl_pwx_not_useqty Or ifwx_mtrl_not_useqty Or ifpack_mtrl_not_useqty Then
  3329. If li_mtrlorigin = 0 Then
  3330. If li_ifpack > 0 Then
  3331. If ifpack_mtrl_not_useqty Then
  3332. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3333. if_special_notuse = True
  3334. End If
  3335. End If
  3336. If li_ifselforder = 2 And li_ifpack = 0 Then
  3337. If ifzl_mtrl_not_useqty Then
  3338. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3339. if_special_notuse = True
  3340. End If
  3341. End If
  3342. If li_mtrlorigin_p = 3 And ifzl_mtrl_pwx_not_useqty Then
  3343. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3344. if_special_notuse = True
  3345. End If
  3346. ElseIf li_mtrlorigin = 2 Then
  3347. If li_ifpack > 0 Then
  3348. If ifpack_mtrl_not_useqty Then
  3349. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3350. if_special_notuse = True
  3351. End If
  3352. End If
  3353. ElseIf li_mtrlorigin = 3 Then
  3354. If ifwx_mtrl_not_useqty Then
  3355. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3356. if_special_notuse = True
  3357. End If
  3358. End If
  3359. End If
  3360. If if_pqty_not_zl Then
  3361. ld_pqty2_cmpl = ld_pqty2
  3362. Else
  3363. ld_pqty2_cmpl = 0
  3364. End If
  3365. If if_rqwfjg_useqty Then
  3366. ld_rqwfjgqty_cmpl = ld_rqwfjgqty
  3367. Else
  3368. ld_rqwfjgqty_cmpl = 0
  3369. End If
  3370. If if_rqbuy_useqty Then
  3371. ld_rqbuyqty_cmpl = ld_rqbuyqty
  3372. Else
  3373. ld_rqbuyqty_cmpl = 0
  3374. End If
  3375. //可用数, 不考虑本次的生产
  3376. //if li_ifselforder > 0 And li_mtrlorigin = 0 and li_multtype > 0 then 是考虑了本次的生产
  3377. //否则 是不考虑本次生产
  3378. //
  3379. ld_ckwareqty = (ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl) - (ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale + ld_samerqqty)
  3380. If Not if_special_notuse Then
  3381. if ld_ckwareqty > 0 then
  3382. if ld_ckwareqty > arg_s_mrp.arg_cmplqty then
  3383. ld_cmplqty = 0
  3384. ld_ckwareqty_af = ld_ckwareqty - arg_s_mrp.arg_cmplqty
  3385. else
  3386. ld_cmplqty = arg_s_mrp.arg_cmplqty - ld_ckwareqty
  3387. ld_ckwareqty_af = 0
  3388. end if
  3389. else
  3390. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3391. ld_ckwareqty_af = 0
  3392. end if
  3393. // If ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale >= ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl Then
  3394. // ld_cmplqty = arg_s_mrp.arg_cmplqty
  3395. // Else
  3396. // If ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty > 0 Then
  3397. // If arg_s_mrp.arg_cmplqty > ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty Then
  3398. // ld_cmplqty = arg_s_mrp.arg_cmplqty - ( ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty )
  3399. // Else
  3400. // ld_cmplqty = 0
  3401. // End If
  3402. // Else
  3403. // ld_cmplqty = arg_s_mrp.arg_cmplqty
  3404. // End If
  3405. // End If
  3406. End If
  3407. //如果有设置‘物料运算倍数基数’, 按倍数生产
  3408. //自制需求补足批量模式:
  3409. //0- 不增补
  3410. //1- 补足到最小经济生产批量
  3411. //2- 补足到最小经济生产批量的整倍数
  3412. //3- (现库存减需求后的可用数少于库存下限时)补足到库存上限且不少于最小经济批量
  3413. if (li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) then
  3414. choose case li_multtype
  3415. case 0
  3416. case 1
  3417. if ld_cmplqty > 0 then
  3418. if ld_cmplqty < lde_eoq then
  3419. lde_addcmplqty = lde_eoq - ld_cmplqty
  3420. ld_cmplqty = lde_eoq
  3421. end if
  3422. end if
  3423. case 2
  3424. if ld_cmplqty > 0 then
  3425. if mod(ld_cmplqty, lde_eoq) > 0 then
  3426. lde_addcmplqty = lde_eoq - mod(ld_cmplqty, lde_eoq)
  3427. ld_cmplqty = ld_cmplqty + (lde_eoq - mod(ld_cmplqty, lde_eoq))
  3428. end if
  3429. end if
  3430. case 3
  3431. if ld_cmplqty > 0 then
  3432. if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产
  3433. if lde_eoq > lde_maxqty + ld_cmplqty then
  3434. lde_addcmplqty = lde_eoq - ld_cmplqty
  3435. else
  3436. lde_addcmplqty = lde_maxqty
  3437. end if
  3438. else //不小于的只考虑经济批量
  3439. if lde_eoq > ld_cmplqty then //不足经济批量的补足
  3440. lde_addcmplqty = lde_eoq - ld_cmplqty
  3441. else
  3442. lde_addcmplqty = 0
  3443. end if
  3444. end if
  3445. ld_cmplqty = ld_cmplqty + lde_addcmplqty
  3446. //ld_cmplqty = max(lde_eoq, lde_maxqty + ld_cmplqty)
  3447. else
  3448. if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产
  3449. if lde_eoq > lde_maxqty then
  3450. lde_addcmplqty = lde_eoq
  3451. else
  3452. lde_addcmplqty = lde_maxqty
  3453. end if
  3454. ld_cmplqty = ld_cmplqty + lde_addcmplqty
  3455. end if
  3456. end if
  3457. end choose
  3458. end if
  3459. Else
  3460. ld_cmplqty = arg_s_mrp.arg_cmplqty
  3461. End If
  3462. End If
  3463. End If
  3464. //运算结果
  3465. arr_mxt++
  3466. arg_s_mtrl.scid[arr_mxt] = arg_s_mrp.arg_scid
  3467. arg_s_mtrl.orderid[arr_mxt] = arg_s_mrp.arg_orderid
  3468. arg_s_mtrl.mtrlid[arr_mxt] = arg_s_mrp.arg_mtrlid
  3469. arg_s_mtrl.status[arr_mxt] = arg_s_mrp.arg_status
  3470. arg_s_mtrl.woodcode[arr_mxt] = arg_s_mrp.arg_woodcode
  3471. arg_s_mtrl.pcode[arr_mxt] = arg_s_mrp.arg_pcode
  3472. arg_s_mtrl.pfcode[arr_mxt] = ls_pfcode_local //arg_pfcode
  3473. arg_s_mtrl.qty[arr_mxt] = arg_s_mrp.arg_qty
  3474. arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
  3475. arg_s_mtrl.plantype[arr_mxt] = li_mtrlorigin
  3476. arg_s_mtrl.mqty[arr_mxt] = ld_mqty
  3477. arg_s_mtrl.wmqty[arr_mxt] = ld_wmqty
  3478. arg_s_mtrl.bqty[arr_mxt] = ld_bqty
  3479. arg_s_mtrl.wqty[arr_mxt] = ld_wqty
  3480. arg_s_mtrl.pqty[arr_mxt] = ld_pqty
  3481. arg_s_mtrl.pqty2[arr_mxt] = ld_pqty2
  3482. arg_s_mtrl.rqwfjgqty[arr_mxt] = ld_rqwfjgqty
  3483. arg_s_mtrl.rqbuyqty[arr_mxt] = ld_rqbuyqty
  3484. //arg_s_mtrl.pqtydscrp[arr_mxt] = ld_qty_dscrp
  3485. arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
  3486. arg_s_mtrl.otherrqqty_wx[arr_mxt] = ld_otherrqqty_wx
  3487. arg_s_mtrl.otherrqqty_sale[arr_mxt] = ld_otherrqqty_sale
  3488. arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  3489. arg_s_mtrl.ckwareqty[arr_mxt] = ld_ckwareqty
  3490. arg_s_mtrl.addcmplqty[arr_mxt] = lde_addcmplqty //由补足方式额外增加的数
  3491. arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp
  3492. //有可用数不用计算开始日期
  3493. If ld_cmplqty = 0 Then
  3494. arg_s_mtrl.sdate[arr_mxt] = ldt_edate
  3495. Else
  3496. arg_s_mtrl.sdate[arr_mxt] = ldt_sdate
  3497. End If
  3498. arg_s_mtrl.edate[arr_mxt] = ldt_edate
  3499. arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
  3500. arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
  3501. arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
  3502. arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
  3503. arg_s_mtrl.unit[arr_mxt] = ls_unit
  3504. arg_s_mtrl.Mtrlorigin[arr_mxt] = li_mtrlorigin
  3505. arg_s_mtrl.iffp[arr_mxt] = li_iffp
  3506. arg_s_mtrl.mtrlprp[arr_mxt] = li_mtrlprp
  3507. arg_s_mtrl.ifselforder[arr_mxt] = li_ifselforder
  3508. arg_s_mtrl.gydscrp[arr_mxt] = arg_s_mrp.arg_gydscrp
  3509. arg_s_mtrl.pfklmode[arr_mxt] = arg_s_mrp.arg_pfklmode
  3510. arg_s_mtrl.pfgroup[arr_mxt] = arg_s_mrp.arg_pfgroup
  3511. arg_s_mtrl.pfgroupmode[arr_mxt] = arg_s_mrp.arg_pfgroupmode
  3512. arg_s_mtrl.ifcfg[arr_mxt] = arg_s_mrp.arg_ifcfg
  3513. arg_s_mtrl.ifpack[arr_mxt] = li_ifpack
  3514. arg_s_mtrl.ifpackpro[arr_mxt] = li_ifpackpro
  3515. arg_s_mtrl.mtrlordertype[arr_mxt] = li_ordertype
  3516. arg_s_mtrl.ifpackpz[arr_mxt] = li_ifpackpz
  3517. arg_s_mtrl.mtrlsectype[arr_mxt] = ls_mtrlsectype
  3518. arg_s_mtrl.zxmtrlmode[arr_mxt] = ls_zxmtrlmode
  3519. arg_s_mtrl.usermtrlmode[arr_mxt] = ls_usermtrlmode
  3520. arg_s_mtrl.dytype[arr_mxt] = li_dytype
  3521. arg_s_mtrl.ppfcode[arr_mxt] = arg_s_mrp.arg_ppfcode
  3522. arg_s_mtrl.pcmplqty[arr_mxt] = arg_s_mrp.arg_pqty
  3523. arg_s_mtrl.SonLoss[arr_mxt] = arg_s_mrp.arg_SonLoss
  3524. arg_s_mtrl.SonDECLoss[arr_mxt] = arg_s_mrp.arg_SonDECLoss
  3525. arg_s_mtrl.scllLoss[arr_mxt] = arg_s_mrp.arg_scllLoss
  3526. arg_s_mtrl.scllDECLoss[arr_mxt] = arg_s_mrp.arg_scllDECLoss
  3527. arg_s_mtrl.scllqtytype[arr_mxt] = arg_s_mrp.arg_scllqtytype
  3528. arg_s_mtrl.standardrqqty[arr_mxt] = arg_s_mrp.arg_strandqty
  3529. arg_s_mtrl.scllqty[arr_mxt] = arg_s_mrp.arg_scllqty
  3530. arg_s_mtrl.if_follow[arr_mxt] = arg_s_mrp.arg_if_follow
  3531. arg_s_mtrl.lasthour[arr_mxt] = arg_s_mrp.arg_lasthour
  3532. If IsNull(arg_s_mrp.arg_Sonscale) Then arg_s_mrp.arg_Sonscale = 0
  3533. arg_s_mtrl.Sonscale[arr_mxt] = arg_s_mrp.arg_Sonscale
  3534. If li_mtrlorigin = 2 Or li_mtrlorigin = 6 Then
  3535. arg_s_mtrl.produce_scid[arr_mxt] = arg_s_mrp.arg_scid
  3536. Else
  3537. arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl
  3538. End If
  3539. If ll_ifbj_task = 0 Then
  3540. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl
  3541. arg_s_mtrl.wrkGrpid_scll[arr_mxt] = arg_s_mrp.arg_wrkgrpid_scll
  3542. Else
  3543. If ll_wrkgrpid_mtrl > 0 Then
  3544. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ins_produce_wrkgrpid_bj
  3545. End If
  3546. If li_mtrlorigin = 2 Then
  3547. If deep = 1 Then
  3548. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ins_produce_wrkgrpid_bj
  3549. Else
  3550. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = 0
  3551. End If
  3552. End If
  3553. arg_s_mtrl.wrkGrpid_scll[arr_mxt] = ins_wrkGrpid_scll_bj
  3554. End If
  3555. arg_s_mtrl.lp[arr_mxt] = arg_lp
  3556. arg_s_mtrl.ifmainmtrlid[arr_mxt] = li_ifmainmtrlid
  3557. arg_s_mtrl.pmtrlid[arr_mxt] = arg_s_mrp.arg_pmtrlid
  3558. arg_s_mtrl.ifchanged[arr_mxt] = 0
  3559. //yyx 20110617
  3560. If ld_cmplqty < 0 Then ld_cmplqty = 0
  3561. //IF ld_cmplqty <= 0 THEN
  3562. // rslt = 1
  3563. // GOTO ext
  3564. //END IF
  3565. Choose Case li_mtrlorigin
  3566. //采购或客户来料
  3567. Case 2
  3568. rslt = 1
  3569. Goto ext
  3570. Case 6
  3571. If li_mtrlprp = 2 Or li_mtrlprp = 8 Then
  3572. rslt = 1
  3573. Goto ext
  3574. End If
  3575. Case 0
  3576. If ll_scid_mtrl <> arg_s_mrp.arg_scid And ll_ifbj_task = 0 Then
  3577. rslt = 1
  3578. Goto ext
  3579. Else
  3580. If arg_s_mrp.arg_ifcfg = 0 And (li_ifselforder = 1 Or li_ifselforder = 3) And li_ifmainmtrlid = 0 Then
  3581. rslt = 1
  3582. Goto ext
  3583. End If
  3584. End If
  3585. Case 3
  3586. If ll_scid_mtrl <> arg_s_mrp.arg_scid And ll_ifbj_task = 0 Then
  3587. rslt = 1
  3588. Goto ext
  3589. Else
  3590. If arg_s_mrp.arg_ifcfg = 0 And li_ifselforder = 1 And li_ifmainmtrlid = 0 Then
  3591. rslt = 1
  3592. Goto ext
  3593. End If
  3594. End If
  3595. End Choose
  3596. Long count,ll_j
  3597. Decimal cmpl_qty,ld_cmpl_qty_p
  3598. s_pfmx ls_s_pfmx[]
  3599. s_mtrlcfg_expr s_mtrlcfg[]
  3600. Long ll_cfg,ll_cnt_s_mtrlcfg
  3601. count = 0
  3602. //配置运算
  3603. If li_statusflag = 2 And arg_s_mrp.arg_ifcfg = 0 And li_ifpzpf = 0 Then
  3604. If arg_s_mrp.arg_status = '' Then
  3605. arg_msg = '计划产品设置为使用组合配置属性,但计划配置内容非法,请检查'
  3606. rslt = 0
  3607. Goto ext
  3608. End If
  3609. //分解配置
  3610. f_checkpz_general(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_status,s_mtrlcfg)
  3611. // f_checkpz(arg_s_mrp.arg_status,s_mtrlcfg)
  3612. //
  3613. ll_cnt_s_mtrlcfg = UpperBound(s_mtrlcfg)
  3614. If ll_cnt_s_mtrlcfg = 0 Then
  3615. count = 0
  3616. Else
  3617. For ll_cfg = 1 To ll_cnt_s_mtrlcfg
  3618. count++
  3619. ls_s_pfmx[count].sonmtrlid = arg_s_mrp.arg_mtrlid
  3620. ls_s_pfmx[count].status = s_mtrlcfg[ll_cfg].cfgname
  3621. ls_s_pfmx[count].woodcode = arg_s_mrp.arg_woodcode
  3622. ls_s_pfmx[count].pcode = arg_s_mrp.arg_pcode
  3623. ls_s_pfmx[count].sonpfcode = s_mtrlcfg[ll_cfg].cfgname
  3624. ls_s_pfmx[count].ifcfg = 1
  3625. ls_s_pfmx[count].wrkGrpid = ll_wrkgrpid_mtrl
  3626. ls_s_pfmx[count].pfklmode = ''
  3627. ls_s_pfmx[count].pfgroup = ''
  3628. ls_s_pfmx[count].pfgroupmode = ''
  3629. ls_s_pfmx[count].Sonscale = Dec(s_mtrlcfg[ll_cfg].qty) * ld_cmplqty
  3630. ls_s_pfmx[count].baseqty = 1
  3631. ls_s_pfmx[count].buyarg = 1
  3632. ls_s_pfmx[count].SonLoss = 0
  3633. ls_s_pfmx[count].ifover = 0
  3634. ls_s_pfmx[count].dipztype = 0
  3635. ls_s_pfmx[count].mrp_unit = 0
  3636. ls_s_pfmx[count].scllLoss = 0
  3637. ls_s_pfmx[count].scllDECLoss = 0
  3638. ls_s_pfmx[count].scllqtytype = 0
  3639. ls_s_pfmx[count].if_follow = 0
  3640. ls_s_pfmx[count].lasthour = 0
  3641. Next
  3642. End If
  3643. If count = 0 Then
  3644. arg_msg = '物料分拆配置失败,请检查配置内容'
  3645. rslt = 0
  3646. Goto ext
  3647. End If
  3648. //查询附加常规清单
  3649. cnt = 0
  3650. Select count(*) Into :cnt
  3651. From u_mtrl_pf
  3652. Where ( u_mtrl_pf.mtrlid = :arg_s_mrp.arg_mtrlid )
  3653. And ( u_mtrl_pf.ifdi = 0 )
  3654. And ( u_mtrl_pf.ifdft = 1 );
  3655. If sqlca.SQLCode <> 0 Then
  3656. arg_msg = '查询组合配置产品附加默认清单失败,请检查是否已建立默认清单'
  3657. rslt = 0
  3658. Goto ext
  3659. End If
  3660. If cnt > 1 Then
  3661. arg_msg = '组合配置产品附加默认清单只能设置1个,请检查资料'
  3662. rslt = 0
  3663. Goto ext
  3664. End If
  3665. If cnt = 1 Then
  3666. Declare pf_cur_dft Cursor For
  3667. Select u_PrdPF.Sonscale,
  3668. u_PrdPF.SonLoss,
  3669. u_PrdPF.SonDECLosS,
  3670. u_PrdPF.SonMtrlid,
  3671. u_PrdPF.sonpfcode,
  3672. u_PrdPF.status,
  3673. u_PrdPF.woodcode,
  3674. u_PrdPF.pcode,
  3675. u_PrdPF.wrkGrpid,
  3676. u_PrdPF.dscrp,
  3677. u_PrdPF.pfklmode,
  3678. u_PrdPF.pfgroup,
  3679. u_PrdPF.pfgroupmode,
  3680. 0,
  3681. u_PrdPF.advancetime,
  3682. u_PrdPF.baseqty,
  3683. u_PrdPF.buyarg,
  3684. u_mtrldef.mrptype,
  3685. u_mtrldef.mrparg,
  3686. u_PrdPF.sonlossstr,
  3687. u_prdpf.ifover,
  3688. u_prdpf.dipztype,
  3689. u_mtrldef.mrp_unit,
  3690. u_mtrldef.rate_buy,
  3691. u_mtrldef.rate_sale,
  3692. u_mtrldef.rate_scll,
  3693. u_prdpf.scllloss,
  3694. u_prdpf.sclldecloss,
  3695. u_prdpf.scllqtytype,
  3696. u_prdpf.if_follow,
  3697. u_prdpf.lasthour
  3698. From u_PrdPF,u_mtrldef,u_mtrl_pf
  3699. Where ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  3700. And ( u_mtrl_pf.ifdi = 0 )
  3701. And ( u_mtrl_pf.ifdft = 1 )
  3702. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  3703. And ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  3704. And ( u_PrdPF.mtrlid = u_mtrldef.mtrlid ) Order By u_PrdPF.printid;
  3705. Open pf_cur_dft;
  3706. count++
  3707. Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3708. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3709. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3710. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3711. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3712. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3713. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3714. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3715. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3716. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3717. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3718. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3719. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3720. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3721. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3722. Do While sqlca.SQLCode = 0
  3723. count++
  3724. Fetch pf_cur_dft Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3725. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3726. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3727. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3728. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3729. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3730. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3731. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3732. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3733. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3734. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3735. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3736. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3737. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3738. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3739. Loop
  3740. count = count - 1
  3741. Close pf_cur_dft;
  3742. End If
  3743. Else
  3744. //使用个性清单yyx20120823
  3745. If ll_saletaskmx_pf_cnt > 0 Then
  3746. Declare saletaskmxpf_cur Cursor For
  3747. Select u_saletaskmx_pf.Sonscale/u_saletaskmx_pf.Sonscale_fm,
  3748. 0,
  3749. 0,
  3750. u_saletaskmx_pf.SonMtrlid,
  3751. isnull(u_mtrl_pf.pfcode,'[常规]'),
  3752. u_saletaskmx_pf.status,
  3753. u_saletaskmx_pf.woodcode,
  3754. u_saletaskmx_pf.pcode,
  3755. 0,
  3756. '',
  3757. '',
  3758. '',
  3759. '',
  3760. 0,
  3761. 0,
  3762. 1,
  3763. 0,
  3764. u_mtrldef.mrptype,
  3765. u_mtrldef.mrparg,
  3766. '',
  3767. 0,
  3768. 0,
  3769. u_mtrldef.mrp_unit,
  3770. u_mtrldef.rate_buy,
  3771. u_mtrldef.rate_sale,
  3772. u_mtrldef.rate_scll,
  3773. 0,
  3774. 0,
  3775. 0,
  3776. 0,
  3777. 0
  3778. From u_saletaskmx_pf left Outer join u_mtrl_pf on u_saletaskmx_pf.sonmtrlid = u_mtrl_pf.mtrlid And
  3779. u_mtrl_pf.ifdft = 1,
  3780. u_mtrldef
  3781. Where ( u_saletaskmx_pf.scid = :arg_s_mrp.arg_scid )
  3782. And ( u_saletaskmx_pf.taskid = :ll_taskid_order )
  3783. And ( u_saletaskmx_pf.printid = :ll_taskmxid_order )
  3784. And ( u_saletaskmx_pf.sonmtrlid = u_mtrldef.mtrlid )
  3785. Order By u_saletaskmx_pf.sonmtrlid;
  3786. Open saletaskmxpf_cur;
  3787. count++
  3788. Fetch saletaskmxpf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3789. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3790. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3791. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3792. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3793. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3794. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3795. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3796. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3797. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3798. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3799. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3800. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3801. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3802. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3803. Do While sqlca.SQLCode = 0
  3804. count++
  3805. Fetch saletaskmxpf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3806. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3807. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3808. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3809. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3810. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3811. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3812. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3813. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3814. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3815. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3816. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3817. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3818. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3819. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3820. Loop
  3821. count = count - 1
  3822. Close saletaskmxpf_cur;
  3823. End If
  3824. Declare pf_cur Cursor For
  3825. Select u_PrdPF.Sonscale,
  3826. u_PrdPF.SonLoss,
  3827. u_PrdPF.SonDECLosS,
  3828. u_PrdPF.SonMtrlid,
  3829. u_PrdPF.sonpfcode,
  3830. u_PrdPF.status,
  3831. u_PrdPF.woodcode,
  3832. u_PrdPF.pcode,
  3833. u_PrdPF.wrkGrpid,
  3834. u_PrdPF.dscrp,
  3835. u_PrdPF.pfklmode,
  3836. u_PrdPF.pfgroup,
  3837. u_PrdPF.pfgroupmode,
  3838. 0,
  3839. u_PrdPF.advancetime,
  3840. u_PrdPF.baseqty,
  3841. u_PrdPF.buyarg,
  3842. u_mtrldef.mrptype,
  3843. u_mtrldef.mrparg,
  3844. u_PrdPF.sonlossstr,
  3845. u_prdpf.ifover,
  3846. u_prdpf.dipztype,
  3847. u_mtrldef.mrp_unit,
  3848. u_mtrldef.rate_buy,
  3849. u_mtrldef.rate_sale,
  3850. u_mtrldef.rate_scll,
  3851. u_prdpf.scllloss,
  3852. u_prdpf.sclldecloss,
  3853. u_prdpf.scllqtytype,
  3854. u_prdpf.if_follow,
  3855. u_prdpf.lasthour
  3856. From u_PrdPF,u_mtrldef,u_mtrl_pf
  3857. Where ( u_mtrl_pf.pfcode = :arg_s_mrp.arg_pfcode )
  3858. And ( u_mtrl_pf.mtrlid = :arg_s_mrp.arg_mtrlid )
  3859. And ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  3860. And ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  3861. And ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  3862. And ( u_mtrldef.ifmrp = 1 )
  3863. And ( :ll_saletaskmx_pf_cnt = 0 Or :ll_saletaskmx_pf_cnt > 0 And u_mtrldef.ifpack = 0 )
  3864. Order By u_PrdPF.printid;
  3865. Open pf_cur;
  3866. count++
  3867. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3868. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3869. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3870. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3871. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3872. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3873. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3874. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3875. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3876. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3877. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3878. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3879. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3880. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3881. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3882. Do While sqlca.SQLCode = 0
  3883. count++
  3884. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  3885. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  3886. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  3887. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  3888. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].dscrp,&
  3889. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].pfgroup,&
  3890. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].ifcfg,&
  3891. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  3892. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  3893. :ls_s_pfmx[count].u_mtrldef_mrparg,:ls_s_pfmx[count].sonlossstr,&
  3894. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  3895. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  3896. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  3897. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  3898. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  3899. Loop
  3900. count = count - 1
  3901. Close pf_cur;
  3902. If count = 0 Then
  3903. rslt = 1
  3904. Goto ext
  3905. End If
  3906. End If
  3907. Decimal ld_qty_scll,ld_qty_cmpl,ld_qty_standard,ld_qty_cmpl_sonloss
  3908. Decimal ld_sonloss
  3909. String ls_status_son,ls_woodcode_son,ls_pcode_son
  3910. Long tem_long
  3911. s_mrp_arg s_mrp_arg1
  3912. For ll_j = 1 To count
  3913. ld_qty_scll = 0
  3914. ld_qty_cmpl = 0
  3915. ld_sonloss = 0
  3916. ld_qty_standard = 0
  3917. ld_qty_cmpl_sonloss = 0
  3918. If ls_s_pfmx[ll_j].ifcfg = 0 Then
  3919. ld_qty_standard = (ld_cmplqty/ld_cmpqty)/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale
  3920. ld_qty_cmpl_sonloss = ld_cmplqty //yyx20110802 计算损耗率用上级数量计算
  3921. If Trim(ls_s_pfmx[ll_j].sonlossstr) = '' Then
  3922. ld_sonloss = ls_s_pfmx[ll_j].SonLoss
  3923. Else
  3924. If uof_get_prdpf_sonloss(Trim(ls_s_pfmx[ll_j].sonlossstr),ld_qty_cmpl_sonloss,ld_sonloss) = 0 Then
  3925. ld_sonloss = 100 //非法
  3926. rslt = 0
  3927. arg_msg = '非法的损耗率,可能损耗率公式有问题,请检查'
  3928. Goto ext
  3929. End If
  3930. If ld_sonloss > 1 Or ld_sonloss < 0 Then
  3931. ld_sonloss = 100 //非法
  3932. rslt = 0
  3933. arg_msg = '非法的损耗率,可能损耗率公式有问题,请检查'
  3934. Goto ext
  3935. End If
  3936. End If
  3937. If ld_sonloss < 1 Then
  3938. If ls_s_pfmx[ll_j].baseqty > 1 Then
  3939. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10))
  3940. Else
  3941. If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then
  3942. ld_qty_scll = Round(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  3943. Else
  3944. If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then
  3945. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10))
  3946. Else
  3947. tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg
  3948. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss)+ls_s_pfmx[ll_j].SonDECLoss,10) * tem_long)/tem_long
  3949. ld_qty_scll = Round(ld_qty_scll , ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  3950. End If
  3951. End If
  3952. End If
  3953. If ls_s_pfmx[ll_j].buyarg = 0 Then ls_s_pfmx[ll_j].buyarg = 1
  3954. ld_qty_cmpl = ld_qty_scll * ls_s_pfmx[ll_j].buyarg
  3955. ld_cmpl_qty_p = ld_cmplqty
  3956. //按辅助单位补数
  3957. Choose Case ls_s_pfmx[ll_j].mrp_unit
  3958. Case 1
  3959. If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then
  3960. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_buy) * ls_s_pfmx[ll_j].rate_unit_buy
  3961. End If
  3962. Case 2
  3963. If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then
  3964. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_scll) * ls_s_pfmx[ll_j].rate_unit_scll
  3965. End If
  3966. Case 3
  3967. If ls_s_pfmx[ll_j].rate_unit_buy > 0 Then
  3968. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_sale) * ls_s_pfmx[ll_j].rate_unit_sale
  3969. End If
  3970. End Choose
  3971. Else
  3972. ld_qty_scll = 0
  3973. ld_qty_cmpl = 0
  3974. ld_cmpl_qty_p = 0
  3975. ld_sonloss = 0
  3976. End If
  3977. Else
  3978. ld_qty_scll = ls_s_pfmx[ll_j].Sonscale
  3979. ld_qty_cmpl = ld_qty_scll
  3980. ld_cmpl_qty_p = ld_cmplqty
  3981. ld_sonloss = ls_s_pfmx[ll_j].SonLoss
  3982. End If
  3983. Choose Case ls_s_pfmx[ll_j].scllqtytype
  3984. Case 0
  3985. ls_s_pfmx[ll_j].scllqty = ld_qty_scll
  3986. Case 1
  3987. ls_s_pfmx[ll_j].scllqty = ld_qty_standard
  3988. Case 2
  3989. If ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 Then
  3990. ls_s_pfmx[ll_j].scllqty = Round(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  3991. Else
  3992. If ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 Then
  3993. ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,10))
  3994. Else
  3995. tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg
  3996. ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllLoss)+ls_s_pfmx[ll_j].scllDECLoss,10) * tem_long)/tem_long
  3997. ls_s_pfmx[ll_j].scllqty = Round(ls_s_pfmx[ll_j].scllqty , ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  3998. End If
  3999. End If
  4000. End Choose
  4001. If ls_s_pfmx[ll_j].ifover = 1 Then
  4002. Choose Case ls_s_pfmx[ll_j].dipztype
  4003. Case 0
  4004. ls_status_son = arg_s_mrp.arg_status
  4005. ls_woodcode_son = ''
  4006. ls_pcode_son = ''
  4007. Case 1
  4008. ls_status_son = ''
  4009. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4010. ls_pcode_son = ''
  4011. Case 2
  4012. ls_status_son = ''
  4013. ls_woodcode_son = ''
  4014. ls_pcode_son = arg_s_mrp.arg_pcode
  4015. Case 3
  4016. ls_status_son = arg_s_mrp.arg_status
  4017. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4018. ls_pcode_son = ''
  4019. Case 4
  4020. ls_status_son = ''
  4021. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4022. ls_pcode_son = arg_s_mrp.arg_pcode
  4023. Case 5
  4024. ls_status_son = arg_s_mrp.arg_status
  4025. ls_woodcode_son = ''
  4026. ls_pcode_son = arg_s_mrp.arg_pcode
  4027. Case 6
  4028. ls_status_son = arg_s_mrp.arg_status
  4029. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4030. ls_pcode_son = arg_s_mrp.arg_pcode
  4031. End Choose
  4032. Else
  4033. ls_status_son = ls_s_pfmx[ll_j].status
  4034. ls_woodcode_son = ls_s_pfmx[ll_j].woodcode
  4035. ls_pcode_son = ls_s_pfmx[ll_j].pcode
  4036. End If
  4037. s_mrp_arg1.arg_scid = arg_s_mrp.arg_scid
  4038. s_mrp_arg1.arg_orderid = arg_s_mrp.arg_orderid
  4039. s_mrp_arg1.arg_ifdate = arg_s_mrp.arg_ifdate
  4040. s_mrp_arg1.arg_pmtrlid = arg_s_mrp.arg_mtrlid
  4041. s_mrp_arg1.arg_mtrlid = ls_s_pfmx[ll_j].sonmtrlid
  4042. s_mrp_arg1.arg_status = ls_status_son
  4043. s_mrp_arg1.arg_woodcode = ls_woodcode_son
  4044. s_mrp_arg1.arg_pcode = ls_pcode_son
  4045. s_mrp_arg1.arg_pfcode = ls_s_pfmx[ll_j].sonpfcode
  4046. s_mrp_arg1.arg_qty = ld_qty_scll
  4047. s_mrp_arg1.arg_cmplqty = ld_qty_cmpl
  4048. s_mrp_arg1.arg_ppfcode = arg_s_mrp.arg_pfcode
  4049. s_mrp_arg1.arg_pqty = ld_cmpl_qty_p
  4050. s_mrp_arg1.arg_wrkgrpid_scll = ls_s_pfmx[ll_j].wrkGrpid
  4051. s_mrp_arg1.arg_up_sdate = ldt_sdate
  4052. s_mrp_arg1.arg_up_rqdate = ldt_edate
  4053. s_mrp_arg1.arg_if_allowuse = arg_s_mrp.arg_if_allowuse
  4054. s_mrp_arg1.arg_gydscrp = ls_s_pfmx[ll_j].dscrp
  4055. s_mrp_arg1.arg_pfklmode = ls_s_pfmx[ll_j].pfklmode
  4056. s_mrp_arg1.arg_pfgroup = ls_s_pfmx[ll_j].pfgroup
  4057. s_mrp_arg1.arg_pfgroupmode = ls_s_pfmx[ll_j].pfgroupmode
  4058. s_mrp_arg1.arg_ifcfg = ls_s_pfmx[ll_j].ifcfg
  4059. s_mrp_arg1.arg_advancetime = ls_s_pfmx[ll_j].advancetime
  4060. s_mrp_arg1.arg_Sonscale = ls_s_pfmx[ll_j].Sonscale
  4061. s_mrp_arg1.arg_SonLoss = ld_sonloss
  4062. s_mrp_arg1.arg_SonDECLoss = ls_s_pfmx[ll_j].SonDECLoss
  4063. s_mrp_arg1.arg_scllLoss = ls_s_pfmx[ll_j].scllLoss
  4064. s_mrp_arg1.arg_scllDECLoss = ls_s_pfmx[ll_j].scllDECLoss
  4065. s_mrp_arg1.arg_scllqtytype = ls_s_pfmx[ll_j].scllqtytype
  4066. s_mrp_arg1.arg_scllqty = ls_s_pfmx[ll_j].scllqty
  4067. s_mrp_arg1.arg_if_follow = ls_s_pfmx[ll_j].if_follow
  4068. s_mrp_arg1.arg_lasthour = ls_s_pfmx[ll_j].lasthour
  4069. s_mrp_arg1.arg_strandqty = ld_qty_standard
  4070. rslt = uof_cmpl_rqmtrl(arg_lp + 1,s_mrp_arg1,arg_s_mtrl,arg_msg) //递归处理下级
  4071. If rslt = 0 Then
  4072. Goto ext
  4073. End If
  4074. Next
  4075. ext:
  4076. Return rslt
  4077. end function
  4078. public function integer uof_cmpl_rqmtrl_re (long arg_lp, integer arg_plantype, s_mrp_arg arg_s_mrp, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);//解锁修改重算
  4079. Int rslt = 1
  4080. Int li_pfflag
  4081. Long arr_mxt
  4082. Long ll_i
  4083. Boolean if_special_notuse = False
  4084. Int li_ifpzpf
  4085. Long ll_pzpfcnt
  4086. String ls_pfcode_local
  4087. Long ll_ifbj_task
  4088. int li_multtype
  4089. decimal lde_eoq, lde_maxqty, lde_minqty
  4090. decimal lde_addcmplqty, lde_sameaddcmplqty
  4091. string ls_pdscrp
  4092. deep++
  4093. IF deep > 5000 THEN
  4094. arg_msg = '递归太深'+String(deep)
  4095. rslt = 0
  4096. GOTO ext
  4097. END IF
  4098. String ls_mtrlcode,ls_mtrlname,ls_mtrlmode
  4099. String ls_unit,ls_mtrltype
  4100. Int li_mtrlorigin,li_ifselforder,li_mtrlprp,li_statusflag,li_mtrlorigin_p
  4101. Long ll_scid_mtrl,ll_wrkgrpid_mtrl
  4102. Decimal ld_buydays,ld_orderdays,ld_wfjgdays,ld_aheaddays
  4103. Date ld_sdate,ld_edate,ld_rqdate,ld_up_sdate
  4104. DateTime ldt_sdate,ldt_edate
  4105. Int li_ifpack,li_ifpackpro,li_ordertype,li_ifpackpz,li_iffp
  4106. Decimal ld_cmpqty
  4107. String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode
  4108. Select u_mtrldef.mtrlcode,
  4109. u_mtrldef.mtrlname,
  4110. u_mtrldef.mtrlmode,
  4111. u_mtrldef.mtrltype,
  4112. u_mtrldef.unit,
  4113. u_mtrldef.Mtrlorigin,
  4114. u_mtrldef.scid,
  4115. u_mtrldef.dftwrkgrpid,
  4116. u_mtrldef.buydays,
  4117. u_mtrldef.orderdays,
  4118. u_mtrldef.wfjgdays,
  4119. u_mtrldef.aheaddays,
  4120. u_mtrldef.ifselforder,
  4121. u_mtrldef.mtrlprp,
  4122. u_mtrldef.statusflag,
  4123. u_mtrldef.ifpack,
  4124. u_mtrldef.ifpackpro,
  4125. u_mtrldef.ordertype,
  4126. u_mtrldef.ifpackpz,
  4127. u_mtrldef.cmpqty,
  4128. u_mtrldef.mtrlsectype,
  4129. u_mtrldef.zxmtrlmode,
  4130. u_mtrldef.usermtrlmode,
  4131. u_mtrldef.iffp,
  4132. u_mtrldef.multtype,
  4133. u_mtrldef.eoq,
  4134. u_mtrldef.maxqty,
  4135. u_mtrldef.minqty
  4136. Into :ls_mtrlcode,
  4137. :ls_mtrlname,
  4138. :ls_mtrlmode,
  4139. :ls_mtrltype,
  4140. :ls_unit,
  4141. :li_mtrlorigin,
  4142. :ll_scid_mtrl,
  4143. :ll_wrkgrpid_mtrl,
  4144. :ld_buydays,
  4145. :ld_orderdays,
  4146. :ld_wfjgdays,
  4147. :ld_aheaddays,
  4148. :li_ifselforder,
  4149. :li_mtrlprp,
  4150. :li_statusflag,
  4151. :li_ifpack,
  4152. :li_ifpackpro,
  4153. :li_ordertype,
  4154. :li_ifpackpz,
  4155. :ld_cmpqty,
  4156. :ls_mtrlsectype,
  4157. :ls_zxmtrlmode,
  4158. :ls_usermtrlmode,
  4159. :li_iffp,
  4160. :li_multtype,
  4161. :lde_eoq,
  4162. :lde_maxqty,
  4163. :lde_minqty
  4164. From u_mtrldef
  4165. Where mtrlid = :arg_s_mrp.arg_mtrlid;
  4166. If sqlca.SQLCode <> 0 Then
  4167. arg_msg = '查询物料资料失败,'+sqlca.SQLErrText
  4168. rslt = 0
  4169. Goto ext
  4170. End If
  4171. IF arg_s_mrp.arg_pmtrlid > 0 THEN
  4172. SELECT mtrlorigin INTO :li_mtrlorigin_p
  4173. FROM u_mtrldef
  4174. Where mtrlid = :arg_s_mrp.arg_pmtrlid;
  4175. IF sqlca.SQLCode <> 0 THEN
  4176. arg_msg = '查询上级物料资料失败,'+sqlca.SQLErrText
  4177. rslt = 0
  4178. GOTO ext
  4179. END IF
  4180. END IF
  4181. IF ld_cmpqty = 0 THEN ld_cmpqty = 1
  4182. IF uof_pfcode_check(arg_s_mrp.arg_mtrlid,ls_mtrlcode,arg_s_mrp.arg_pfcode,arg_msg) = 0 THEN
  4183. rslt = 0
  4184. GOTO ext
  4185. END IF
  4186. Decimal ld_advancetime_max_next //自制下级最大提前期
  4187. //计算需求日期
  4188. ld_rqdate = Date(String(arg_s_mrp.arg_up_rqdate,'yyyy-mm-dd'))
  4189. ld_up_sdate = Date(String(arg_s_mrp.arg_up_sdate,'yyyy-mm-dd'))
  4190. IF arg_plantype = 0 THEN
  4191. IF li_mtrlorigin_p = 3 THEN
  4192. ld_edate = ld_up_sdate
  4193. ELSE
  4194. ld_edate = RelativeDate( ld_rqdate,0 - ld_orderdays - arg_s_mrp.arg_advancetime )
  4195. END IF
  4196. //取下级最大提前期
  4197. IF uof_get_max_advancetime(arg_s_mrp.arg_mtrlid,arg_s_mrp.arg_pfcode,ld_advancetime_max_next,arg_msg) = 0 THEN
  4198. arg_msg = ls_mtrlcode + arg_msg
  4199. rslt = 0
  4200. GOTO ext
  4201. END IF
  4202. ld_sdate = RelativeDate( ld_edate, 0 - ld_advancetime_max_next )
  4203. ELSEIF arg_plantype = 2 THEN
  4204. IF li_mtrlorigin_p = 3 THEN
  4205. ld_edate = ld_up_sdate
  4206. ELSE
  4207. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  4208. END IF
  4209. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  4210. ld_sdate = RelativeDate ( ld_edate, 0 - ld_buydays )
  4211. ELSEIF arg_plantype = 3 THEN
  4212. IF li_mtrlorigin_p = 3 THEN
  4213. ld_edate = ld_up_sdate
  4214. ELSE
  4215. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  4216. END IF
  4217. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  4218. ld_sdate = RelativeDate ( ld_edate, 0 - ld_wfjgdays )
  4219. ELSEIF arg_plantype = 6 THEN
  4220. IF li_mtrlorigin_p = 3 THEN
  4221. ld_edate = ld_up_sdate
  4222. ELSE
  4223. ld_edate = RelativeDate( ld_rqdate,0 - arg_s_mrp.arg_advancetime )
  4224. END IF
  4225. ld_edate = RelativeDate( ld_edate,0 - ld_orderdays )
  4226. ld_sdate = RelativeDate ( ld_edate, 0 - ld_aheaddays )
  4227. END IF
  4228. ldt_sdate = DateTime(ld_sdate,Time(0))
  4229. ldt_edate = DateTime(ld_edate,Time(0))
  4230. //
  4231. Decimal ld_cmplqty
  4232. Decimal ld_mqty
  4233. Decimal ld_wmqty
  4234. Decimal ld_bqty
  4235. Decimal ld_wqty
  4236. Decimal ld_pqty
  4237. Decimal ld_ckwareqty, ld_ckwareqty_af
  4238. Decimal ld_pqty2,ld_pqty2_cmpl
  4239. Decimal ld_rqwfjgqty,ld_rqwfjgqty_cmpl
  4240. Decimal ld_rqbuyqty,ld_rqbuyqty_cmpl
  4241. Decimal ld_otherrqqty,ld_otherrqqty_wx,ld_otherrqqty_sale,ld_samerqqty
  4242. IF arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) THEN
  4243. //改写存储过程
  4244. IF sys_option_if_newmrp = 0 THEN
  4245. DECLARE sp_qty PROCEDURE FOR sp_order_ml_mrp_qty
  4246. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  4247. @arg_enddate = :ldt_edate,
  4248. @arg_scid = :arg_s_mrp.arg_scid,
  4249. @arg_orderid = :arg_s_mrp.arg_orderid,
  4250. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  4251. @arg_status = :arg_s_mrp.arg_status,
  4252. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  4253. @arg_pcode = :arg_s_mrp.arg_pcode,
  4254. @arg_if_otherrq_mrpaudit = :if_otherrq_mrpaudit,
  4255. @arg_if_wqty_norq = :sys_option_if_wqty_norq,
  4256. @arg_plantype = :li_mtrlorigin,
  4257. @arg_ref_bqty = :ld_bqty output,
  4258. @arg_ref_pqty = :ld_pqty output,
  4259. @arg_ref_wqty = :ld_wqty output,
  4260. @arg_ref_mqty = :ld_mqty output,
  4261. @arg_ref_wmqty = :ld_wmqty output,
  4262. @arg_ref_pqty_nozl = :ld_pqty2 output,
  4263. @arg_ref_otherrqqty = :ld_otherrqqty output,
  4264. @arg_ref_rqwfjgqty = :ld_rqwfjgqty output,
  4265. @arg_ref_rqbuyqty = :ld_rqbuyqty output,
  4266. @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output,
  4267. @arg_ref_otherrqqty_sale = :ld_otherrqqty_sale output;
  4268. EXECUTE sp_qty;
  4269. IF sqlca.SQLCode <> 0 THEN
  4270. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+sqlca.SQLErrText
  4271. rslt = 0
  4272. GOTO ext
  4273. END IF
  4274. FETCH sp_qty Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_mqty,:ld_wmqty,:ld_pqty2,:ld_otherrqqty,:ld_rqwfjgqty,:ld_rqbuyqty,:ld_otherrqqty_wx,:ld_otherrqqty_sale;
  4275. IF sqlca.SQLCode <> 0 THEN
  4276. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+sqlca.SQLErrText
  4277. rslt = 0
  4278. GOTO ext
  4279. END IF
  4280. CLOSE sp_qty;
  4281. IF sqlca.SQLCode <> 0 THEN
  4282. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+sqlca.SQLErrText
  4283. rslt = 0
  4284. GOTO ext
  4285. END IF
  4286. ELSE
  4287. DECLARE sp_qty1 PROCEDURE FOR sp_order_ml_mrp_qty_new
  4288. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  4289. @arg_enddate = :ldt_edate,
  4290. @arg_scid = :arg_s_mrp.arg_scid,
  4291. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  4292. @arg_status = :arg_s_mrp.arg_status,
  4293. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  4294. @arg_pcode = :arg_s_mrp.arg_pcode,
  4295. @arg_ref_bqty = :ld_bqty output,
  4296. @arg_ref_pqty = :ld_pqty output,
  4297. @arg_ref_wqty = :ld_wqty output,
  4298. @arg_ref_pqty_nozl = :ld_pqty2 output,
  4299. @arg_ref_otherrqqty = :ld_otherrqqty output,
  4300. @arg_ref_otherrqqty_wx = :ld_otherrqqty_wx output Using mrp_sqlca;
  4301. EXECUTE sp_qty1;
  4302. IF mrp_sqlca.SQLCode <> 0 THEN
  4303. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量储存过程失败,'+mrp_sqlca.SQLErrText
  4304. rslt = 0
  4305. GOTO ext
  4306. END IF
  4307. FETCH sp_qty1 Into :ld_bqty,:ld_pqty,:ld_wqty,:ld_pqty2,:ld_otherrqqty,:ld_otherrqqty_wx;
  4308. IF mrp_sqlca.SQLCode <> 0 THEN
  4309. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText
  4310. rslt = 0
  4311. GOTO ext
  4312. END IF
  4313. CLOSE sp_qty1;
  4314. IF mrp_sqlca.SQLCode <> 0 THEN
  4315. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量储存过程失败,'+mrp_sqlca.SQLErrText
  4316. rslt = 0
  4317. GOTO ext
  4318. END IF
  4319. DECLARE sp_qty2 PROCEDURE FOR sp_order_ml_mrp_qty_new2
  4320. @arg_scid = :arg_s_mrp.arg_scid,
  4321. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  4322. @arg_status = :arg_s_mrp.arg_status,
  4323. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  4324. @arg_pcode = :arg_s_mrp.arg_pcode,
  4325. @arg_ref_mqty = :ld_mqty output,
  4326. @arg_ref_wmqty = :ld_wmqty output;
  4327. EXECUTE sp_qty2;
  4328. IF sqlca.SQLCode <> 0 THEN
  4329. arg_msg = '物料:'+ls_mtrlcode+',调用查询库存数量储存过程失败,'+sqlca.SQLErrText
  4330. rslt = 0
  4331. GOTO ext
  4332. END IF
  4333. FETCH sp_qty2 Into :ld_mqty,:ld_wmqty;
  4334. IF sqlca.SQLCode <> 0 THEN
  4335. arg_msg = '物料:'+ls_mtrlcode+',库存数量储存过程赋值变量失败,'+sqlca.SQLErrText
  4336. rslt = 0
  4337. GOTO ext
  4338. END IF
  4339. CLOSE sp_qty2;
  4340. IF sqlca.SQLCode <> 0 THEN
  4341. arg_msg = '物料:'+ls_mtrlcode+',关闭查询库存数量储存过程失败,'+sqlca.SQLErrText
  4342. rslt = 0
  4343. GOTO ext
  4344. END IF
  4345. END IF
  4346. // IF uof_get_qty(1,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
  4347. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4348. // rslt = 0
  4349. // GOTO ext
  4350. // END IF
  4351. //
  4352. // IF uof_get_qty(2,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN
  4353. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4354. // rslt = 0
  4355. // GOTO ext
  4356. // END IF
  4357. //
  4358. // IF uof_get_qty(3,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
  4359. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4360. // rslt = 0
  4361. // GOTO ext
  4362. // END IF
  4363. //
  4364. // 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
  4365. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4366. // rslt = 0
  4367. // GOTO ext
  4368. // END IF
  4369. //
  4370. // IF uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_edate,arg_msg) = 0 THEN
  4371. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4372. // rslt = 0
  4373. // GOTO ext
  4374. // END IF
  4375. //
  4376. // IF if_pqty_not_zl And li_mtrlorigin = 0 THEN
  4377. // IF uof_get_qty(5,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty2,arg_msg) = 0 THEN
  4378. // arg_msg = '物料:'+ls_mtrlcode + ',' + arg_msg
  4379. // rslt = 0
  4380. // GOTO ext
  4381. // END IF
  4382. // END IF
  4383. if sys_option_if_mrp_dscrp = 1 then
  4384. Declare sp_pdscrp Procedure For Sp_order_ml_mrp_qty_pdscrp
  4385. @arg_ifdate = :arg_s_mrp.arg_ifdate,
  4386. @arg_enddate = :ldt_edate,
  4387. @arg_scid = :arg_s_mrp.arg_scid,
  4388. @arg_orderid = :arg_s_mrp.arg_orderid,
  4389. @arg_mtrlid = :arg_s_mrp.arg_mtrlid,
  4390. @arg_status = :arg_s_mrp.arg_status,
  4391. @arg_woodcode = :arg_s_mrp.arg_woodcode,
  4392. @arg_pcode = :arg_s_mrp.arg_pcode,
  4393. @arg_pdscrp = :ls_pdscrp output Using mrp_sqlca;
  4394. Execute sp_pdscrp;
  4395. If mrp_sqlca.SQLCode <> 0 Then
  4396. arg_msg = '物料:'+ls_mtrlcode+',调用查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText
  4397. rslt = 0
  4398. Goto ext
  4399. End If
  4400. Fetch sp_pdscrp Into :ls_pdscrp;
  4401. If mrp_sqlca.SQLCode <> 0 Then
  4402. arg_msg = '物料:'+ls_mtrlcode+',储存过程赋值变量失败,'+mrp_sqlca.SQLErrText
  4403. rslt = 0
  4404. Goto ext
  4405. End If
  4406. Close sp_pdscrp;
  4407. If mrp_sqlca.SQLCode <> 0 Then
  4408. arg_msg = '物料:'+ls_mtrlcode+',关闭查询数量明细备注储存过程失败,'+mrp_sqlca.SQLErrText
  4409. rslt = 0
  4410. Goto ext
  4411. End If
  4412. end if
  4413. END IF
  4414. IF deep = 1 THEN
  4415. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4416. ELSE
  4417. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  4418. IF arr_mxt = 0 THEN
  4419. ld_samerqqty = 0
  4420. lde_sameaddcmplqty = 0
  4421. ELSE
  4422. FOR ll_i = 1 To arr_mxt
  4423. IF arg_s_mtrl.scid[ll_i] = arg_s_mrp.arg_scid And &
  4424. arg_s_mtrl.orderid[ll_i] = arg_s_mrp.arg_orderid And &
  4425. arg_s_mtrl.mtrlid[ll_i] = arg_s_mrp.arg_mtrlid And &
  4426. arg_s_mtrl.status[ll_i] = arg_s_mrp.arg_status And &
  4427. arg_s_mtrl.woodcode[ll_i] = arg_s_mrp.arg_woodcode And &
  4428. arg_s_mtrl.pcode[ll_i] = arg_s_mrp.arg_pcode And &
  4429. arg_s_mtrl.wrkgrpid_scll[ll_i] = arg_s_mrp.arg_wrkgrpid_scll THEN
  4430. IF arg_s_mtrl.ifselforder[ll_i] > 0 And arg_s_mtrl.mtrlorigin[ll_i] = 0 Or arg_s_mtrl.mtrlorigin[ll_i] > 0 THEN
  4431. if ((li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) ) and li_multtype > 0 then
  4432. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i]
  4433. else
  4434. ld_samerqqty = ld_samerqqty + arg_s_mtrl.qty[ll_i]
  4435. end if
  4436. lde_sameaddcmplqty = lde_sameaddcmplqty + arg_s_mtrl.addcmplqty[ll_i]
  4437. END IF
  4438. END IF
  4439. NEXT
  4440. END IF
  4441. IF arg_s_mrp.arg_if_allowuse = 1 And ( li_ifselforder > 0 And li_mtrlorigin = 0 Or li_mtrlorigin > 0 ) THEN
  4442. IF ifzl_mtrl_not_useqty Or ifzl_mtrl_pwx_not_useqty Or ifwx_mtrl_not_useqty Or ifpack_mtrl_not_useqty THEN
  4443. IF li_mtrlorigin = 0 THEN
  4444. IF li_ifpack > 0 THEN
  4445. IF ifpack_mtrl_not_useqty THEN
  4446. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4447. if_special_notuse = True
  4448. END IF
  4449. END IF
  4450. IF li_ifselforder = 2 And li_ifpack = 0 THEN
  4451. IF ifzl_mtrl_not_useqty THEN
  4452. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4453. if_special_notuse = True
  4454. END IF
  4455. END IF
  4456. IF li_mtrlorigin_p = 3 And ifzl_mtrl_pwx_not_useqty THEN
  4457. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4458. if_special_notuse = True
  4459. END IF
  4460. ELSEIF li_mtrlorigin = 2 THEN
  4461. IF li_ifpack > 0 THEN
  4462. IF ifpack_mtrl_not_useqty THEN
  4463. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4464. if_special_notuse = True
  4465. END IF
  4466. END IF
  4467. ELSEIF li_mtrlorigin = 3 THEN
  4468. IF ifwx_mtrl_not_useqty THEN
  4469. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4470. if_special_notuse = True
  4471. END IF
  4472. END IF
  4473. END IF
  4474. IF if_pqty_not_zl THEN
  4475. ld_pqty2_cmpl = ld_pqty2
  4476. ELSE
  4477. ld_pqty2_cmpl = 0
  4478. END IF
  4479. IF if_rqwfjg_useqty THEN
  4480. ld_rqwfjgqty_cmpl = ld_rqwfjgqty
  4481. ELSE
  4482. ld_rqwfjgqty_cmpl = 0
  4483. END IF
  4484. IF if_rqbuy_useqty THEN
  4485. ld_rqbuyqty_cmpl = ld_rqbuyqty
  4486. ELSE
  4487. ld_rqbuyqty_cmpl = 0
  4488. END IF
  4489. ld_ckwareqty = (ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl) - (ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale + ld_samerqqty)
  4490. IF Not if_special_notuse THEN
  4491. if ld_ckwareqty > 0 then
  4492. if ld_ckwareqty > arg_s_mrp.arg_cmplqty then
  4493. ld_cmplqty = 0
  4494. ld_ckwareqty_af = ld_ckwareqty - arg_s_mrp.arg_cmplqty
  4495. else
  4496. ld_cmplqty = arg_s_mrp.arg_cmplqty - ld_ckwareqty
  4497. ld_ckwareqty_af = 0
  4498. end if
  4499. else
  4500. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4501. ld_ckwareqty_af = 0
  4502. end if
  4503. //如果有设置‘物料运算倍数基数’, 按倍数生产
  4504. //自制需求补足批量模式:
  4505. //0- 不增补
  4506. //1- 补足到最小经济生产批量
  4507. //2- 补足到最小经济生产批量的整倍数
  4508. //3- (现库存减需求后的可用数少于库存下限时)补足到库存上限且不少于最小经济批量
  4509. if (li_ifselforder > 0 And li_mtrlorigin = 0) or (sys_option_if_wqty_norq = 1 and li_mtrlorigin = 3) then
  4510. choose case li_multtype
  4511. case 0
  4512. case 1
  4513. if ld_cmplqty > 0 then
  4514. if ld_cmplqty < lde_eoq then
  4515. lde_addcmplqty = lde_eoq - ld_cmplqty
  4516. ld_cmplqty = lde_eoq
  4517. end if
  4518. end if
  4519. case 2
  4520. if ld_cmplqty > 0 then
  4521. if mod(ld_cmplqty, lde_eoq) > 0 then
  4522. lde_addcmplqty = lde_eoq - mod(ld_cmplqty, lde_eoq)
  4523. ld_cmplqty = ld_cmplqty + (lde_eoq - mod(ld_cmplqty, lde_eoq))
  4524. end if
  4525. end if
  4526. case 3
  4527. if ld_cmplqty > 0 then
  4528. if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产
  4529. if lde_eoq > lde_maxqty + ld_cmplqty then
  4530. lde_addcmplqty = lde_eoq - ld_cmplqty
  4531. else
  4532. lde_addcmplqty = lde_maxqty
  4533. end if
  4534. else //不小于的只考虑经济批量
  4535. if lde_eoq > ld_cmplqty then //不足经济批量的补足
  4536. lde_addcmplqty = lde_eoq - ld_cmplqty
  4537. else
  4538. lde_addcmplqty = 0
  4539. end if
  4540. end if
  4541. ld_cmplqty = ld_cmplqty + lde_addcmplqty
  4542. //ld_cmplqty = max(lde_eoq, lde_maxqty + ld_cmplqty)
  4543. else
  4544. if ld_ckwareqty_af < lde_minqty then //小于库存下限的才按库存上限生产
  4545. if lde_eoq > lde_maxqty then
  4546. lde_addcmplqty = lde_eoq
  4547. else
  4548. lde_addcmplqty = lde_maxqty
  4549. end if
  4550. ld_cmplqty = ld_cmplqty + lde_addcmplqty
  4551. end if
  4552. end if
  4553. end choose
  4554. end if
  4555. // IF ld_otherrqqty + ld_otherrqqty_wx + ld_otherrqqty_sale >= ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl THEN
  4556. // ld_cmplqty = arg_s_mrp.arg_cmplqty
  4557. // ELSE
  4558. // IF ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty > 0 THEN
  4559. // IF arg_s_mrp.arg_cmplqty > ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty THEN
  4560. // ld_cmplqty = arg_s_mrp.arg_cmplqty - ( ld_mqty + ld_wmqty + ld_bqty + ld_wqty + ld_pqty + ld_pqty2_cmpl + ld_rqwfjgqty_cmpl + ld_rqbuyqty_cmpl - ld_otherrqqty - ld_otherrqqty_wx - ld_otherrqqty_sale - ld_samerqqty )
  4561. // ELSE
  4562. // ld_cmplqty = 0
  4563. // END IF
  4564. // ELSE
  4565. // ld_cmplqty = arg_s_mrp.arg_cmplqty
  4566. // END IF
  4567. // END IF
  4568. END IF
  4569. ELSE
  4570. ld_cmplqty = arg_s_mrp.arg_cmplqty
  4571. END IF
  4572. arr_mxt++
  4573. arg_s_mtrl.scid[arr_mxt] = arg_s_mrp.arg_scid
  4574. arg_s_mtrl.orderid[arr_mxt] = arg_s_mrp.arg_orderid
  4575. arg_s_mtrl.mtrlid[arr_mxt] = arg_s_mrp.arg_mtrlid
  4576. arg_s_mtrl.status[arr_mxt] = arg_s_mrp.arg_status
  4577. arg_s_mtrl.woodcode[arr_mxt] = arg_s_mrp.arg_woodcode
  4578. arg_s_mtrl.pcode[arr_mxt] = arg_s_mrp.arg_pcode
  4579. arg_s_mtrl.pfcode[arr_mxt] = arg_s_mrp.arg_pfcode
  4580. arg_s_mtrl.qty[arr_mxt] = arg_s_mrp.arg_qty
  4581. arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
  4582. arg_s_mtrl.plantype[arr_mxt] = arg_plantype
  4583. arg_s_mtrl.mqty[arr_mxt] = ld_mqty
  4584. arg_s_mtrl.wmqty[arr_mxt] = ld_wmqty
  4585. arg_s_mtrl.bqty[arr_mxt] = ld_bqty
  4586. arg_s_mtrl.wqty[arr_mxt] = ld_wqty
  4587. arg_s_mtrl.pqty[arr_mxt] = ld_pqty
  4588. arg_s_mtrl.pqty2[arr_mxt] = ld_pqty2
  4589. arg_s_mtrl.rqwfjgqty[arr_mxt] = ld_rqwfjgqty
  4590. arg_s_mtrl.rqbuyqty[arr_mxt] = ld_rqbuyqty
  4591. arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
  4592. arg_s_mtrl.otherrqqty_wx[arr_mxt] = ld_otherrqqty_wx
  4593. arg_s_mtrl.otherrqqty_sale[arr_mxt] = ld_otherrqqty_sale
  4594. arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  4595. arg_s_mtrl.ckwareqty[arr_mxt] = ld_ckwareqty
  4596. arg_s_mtrl.addcmplqty[arr_mxt] = lde_addcmplqty //由补足方式额外增加的数
  4597. arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp
  4598. //有可用数不用计算开始日期
  4599. IF ld_cmplqty = 0 THEN
  4600. arg_s_mtrl.sdate[arr_mxt] = ldt_edate
  4601. ELSE
  4602. arg_s_mtrl.sdate[arr_mxt] = ldt_sdate
  4603. END IF
  4604. arg_s_mtrl.edate[arr_mxt] = ldt_edate
  4605. arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
  4606. arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
  4607. arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
  4608. arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
  4609. arg_s_mtrl.unit[arr_mxt] = ls_unit
  4610. arg_s_mtrl.mtrlorigin[arr_mxt] = arg_plantype
  4611. arg_s_mtrl.iffp[arr_mxt] = li_iffp
  4612. arg_s_mtrl.ifselforder[arr_mxt] = li_ifselforder
  4613. arg_s_mtrl.gydscrp[arr_mxt] = arg_s_mrp.arg_gydscrp
  4614. arg_s_mtrl.pfklmode[arr_mxt] = arg_s_mrp.arg_pfklmode
  4615. arg_s_mtrl.pfgroup[arr_mxt] = arg_s_mrp.arg_pfgroup
  4616. arg_s_mtrl.pfgroupmode[arr_mxt] = arg_s_mrp.arg_pfgroupmode
  4617. arg_s_mtrl.ifpack[arr_mxt] = li_ifpack
  4618. arg_s_mtrl.ifpackpro[arr_mxt] = li_ifpackpro
  4619. arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl
  4620. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl
  4621. arg_s_mtrl.wrkgrpid_scll[arr_mxt] = arg_s_mrp.arg_wrkgrpid_scll
  4622. arg_s_mtrl.mtrlsectype[arr_mxt] = ls_mtrlsectype
  4623. arg_s_mtrl.zxmtrlmode[arr_mxt] = ls_zxmtrlmode
  4624. arg_s_mtrl.usermtrlmode[arr_mxt] = ls_usermtrlmode
  4625. arg_s_mtrl.sonloss[arr_mxt] = arg_s_mrp.arg_sonloss
  4626. arg_s_mtrl.sondecloss[arr_mxt] = arg_s_mrp.arg_sondecloss
  4627. arg_s_mtrl.scllloss[arr_mxt] = arg_s_mrp.arg_scllloss
  4628. arg_s_mtrl.sclldecloss[arr_mxt] = arg_s_mrp.arg_sclldecloss
  4629. arg_s_mtrl.scllqtytype[arr_mxt] = arg_s_mrp.arg_scllqtytype
  4630. arg_s_mtrl.standardrqqty[arr_mxt] = arg_s_mrp.arg_strandqty
  4631. arg_s_mtrl.scllqty[arr_mxt] = arg_s_mrp.arg_scllqty
  4632. arg_s_mtrl.if_follow[arr_mxt] = arg_s_mrp.arg_if_follow
  4633. arg_s_mtrl.lasthour[arr_mxt] = arg_s_mrp.arg_lasthour
  4634. if isnull(arg_s_mrp.arg_Sonscale) then arg_s_mrp.arg_Sonscale = 0
  4635. arg_s_mtrl.Sonscale[arr_mxt] = arg_s_mrp.arg_Sonscale
  4636. arg_s_mtrl.lp[arr_mxt] = arg_lp
  4637. arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  4638. arg_s_mtrl.ifmainmtrlid[arr_mxt] = 0
  4639. arg_s_mtrl.pmtrlid[arr_mxt] = arg_s_mrp.arg_pmtrlid
  4640. arg_s_mtrl.ifchanged[arr_mxt] = 0
  4641. arg_s_mtrl.pdscrp[arr_mxt] = ls_pdscrp
  4642. IF arg_plantype = 0 THEN
  4643. IF ll_scid_mtrl <> arg_s_mrp.arg_scid THEN
  4644. rslt = 1
  4645. GOTO ext
  4646. ELSE
  4647. IF li_ifselforder = 1 THEN
  4648. rslt = 1
  4649. GOTO ext
  4650. END IF
  4651. END IF
  4652. END IF
  4653. IF arg_plantype = 2 THEN
  4654. rslt = 1
  4655. GOTO ext
  4656. END IF
  4657. IF arg_plantype = 3 THEN
  4658. IF ll_scid_mtrl <> arg_s_mrp.arg_scid THEN
  4659. rslt = 1
  4660. GOTO ext
  4661. ELSE
  4662. IF li_ifselforder = 1 THEN
  4663. rslt = 1
  4664. GOTO ext
  4665. END IF
  4666. END IF
  4667. END IF
  4668. IF arg_plantype = 6 THEN
  4669. IF li_mtrlprp = 2 Or li_mtrlprp = 8 THEN
  4670. rslt = 1
  4671. GOTO ext
  4672. END IF
  4673. END IF
  4674. END IF
  4675. IF ld_cmplqty <= 0 THEN
  4676. rslt = 1
  4677. GOTO ext
  4678. END IF
  4679. Long count,ll_j
  4680. s_pfmx ls_s_pfmx[]
  4681. count = 0
  4682. DECLARE pf_cur CURSOR FOR
  4683. SELECT u_PrdPF.Sonscale,
  4684. u_PrdPF.SonLoss,
  4685. u_PrdPF.SonDECLosS,
  4686. u_PrdPF.SonMtrlid,
  4687. u_PrdPF.sonpfcode,
  4688. u_PrdPF.status,
  4689. u_PrdPF.woodcode,
  4690. u_PrdPF.pcode,
  4691. u_PrdPF.wrkGrpid,
  4692. u_mtrldef.mtrlorigin,
  4693. u_PrdPF.dscrp,
  4694. u_PrdPF.pfklmode,
  4695. u_PrdPF.pfgroup,
  4696. u_PrdPF.pfgroupmode,
  4697. u_PrdPF.advancetime,
  4698. u_PrdPF.baseqty,
  4699. u_PrdPF.buyarg,
  4700. u_mtrldef.mrptype,
  4701. u_mtrldef.mrparg,
  4702. u_prdpf.ifover,
  4703. u_prdpf.dipztype,
  4704. u_mtrldef.mrp_unit,
  4705. u_mtrldef.rate_buy,
  4706. u_mtrldef.rate_sale,
  4707. u_mtrldef.rate_scll,
  4708. u_prdpf.scllloss,
  4709. u_prdpf.sclldecloss,
  4710. u_prdpf.scllqtytype,
  4711. u_prdpf.if_follow,
  4712. u_prdpf.lasthour
  4713. FROM u_PrdPF,u_mtrldef
  4714. WHERE ( u_PrdPF.mtrlid = :arg_s_mrp.arg_mtrlid )
  4715. AND ( u_PrdPF.pfcode = :arg_s_mrp.arg_pfcode )
  4716. AND ( u_mtrldef.ifmrp = 1 )
  4717. AND ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid )
  4718. Order By u_PrdPF.printid;
  4719. OPEN pf_cur;
  4720. count = 1
  4721. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  4722. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  4723. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  4724. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  4725. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].Mtrlorigin,&
  4726. :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].pfklmode,&
  4727. :ls_s_pfmx[count].pfgroup,:ls_s_pfmx[count].pfgroupmode,&
  4728. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  4729. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  4730. :ls_s_pfmx[count].u_mtrldef_mrparg,&
  4731. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  4732. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  4733. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  4734. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  4735. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  4736. DO WHILE sqlca.SQLCode = 0
  4737. count++
  4738. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  4739. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  4740. :ls_s_pfmx[count].sonpfcode,:ls_s_pfmx[count].status,&
  4741. :ls_s_pfmx[count].woodcode,:ls_s_pfmx[count].pcode,&
  4742. :ls_s_pfmx[count].wrkGrpid,:ls_s_pfmx[count].Mtrlorigin,&
  4743. :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].pfklmode,&
  4744. :ls_s_pfmx[count].pfgroup,:ls_s_pfmx[count].pfgroupmode,&
  4745. :ls_s_pfmx[count].advancetime,:ls_s_pfmx[count].baseqty,&
  4746. :ls_s_pfmx[count].buyarg,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  4747. :ls_s_pfmx[count].u_mtrldef_mrparg,&
  4748. :ls_s_pfmx[count].ifover,:ls_s_pfmx[count].dipztype,&
  4749. :ls_s_pfmx[count].mrp_unit,:ls_s_pfmx[count].rate_unit_buy,&
  4750. :ls_s_pfmx[count].rate_unit_sale,:ls_s_pfmx[count].rate_unit_scll,&
  4751. :ls_s_pfmx[count].scllloss,:ls_s_pfmx[count].sclldecloss,&
  4752. :ls_s_pfmx[count].scllqtytype,:ls_s_pfmx[count].if_follow,:ls_s_pfmx[count].lasthour;
  4753. LOOP
  4754. count = count - 1
  4755. CLOSE pf_cur;
  4756. IF count = 0 THEN
  4757. rslt = 1
  4758. GOTO ext
  4759. END IF
  4760. Decimal ld_qty_scll,ld_qty_cmpl,ld_qty_standard
  4761. Decimal ld_sonloss
  4762. String ls_status_son,ls_woodcode_son,ls_pcode_son
  4763. Long tem_long
  4764. s_mrp_arg s_mrp_arg1
  4765. FOR ll_j = 1 To count
  4766. ld_qty_scll = 0
  4767. ld_qty_cmpl = 0
  4768. ld_sonloss = 0
  4769. ld_qty_standard = 0
  4770. ld_qty_standard = (ld_cmplqty/ld_cmpqty)/ls_s_pfmx[ll_j].baseqty * ls_s_pfmx[ll_j].Sonscale
  4771. IF Trim(ls_s_pfmx[ll_j].sonlossstr) = '' THEN
  4772. ld_sonloss = ls_s_pfmx[ll_j].sonloss
  4773. ELSE
  4774. IF uof_get_prdpf_sonloss(Trim(ls_s_pfmx[ll_j].sonlossstr),ld_qty_standard,ld_sonloss) = 0 THEN
  4775. ld_sonloss = 100 //非法
  4776. END IF
  4777. IF ld_sonloss > 1 Or ld_sonloss < 0 THEN
  4778. ld_sonloss = 100 //非法
  4779. END IF
  4780. END IF
  4781. IF ld_sonloss < 1 THEN
  4782. IF ls_s_pfmx[ll_j].baseqty > 1 THEN
  4783. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10))
  4784. ELSE
  4785. IF ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 THEN
  4786. ld_qty_scll = Round(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  4787. ELSE
  4788. IF ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 THEN
  4789. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10))
  4790. ELSE
  4791. tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg
  4792. ld_qty_scll = Ceiling(Truncate(ld_qty_standard/(1 - ld_sonloss) + ls_s_pfmx[ll_j].sondecloss,10) * tem_long)/tem_long
  4793. ld_qty_scll = Round(ld_qty_scll , ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  4794. END IF
  4795. END IF
  4796. END IF
  4797. IF ls_s_pfmx[ll_j].buyarg = 0 THEN ls_s_pfmx[ll_j].buyarg = 1
  4798. ld_qty_cmpl = ld_qty_scll * ls_s_pfmx[ll_j].buyarg
  4799. //按辅助单位补数
  4800. CHOOSE CASE ls_s_pfmx[ll_j].mrp_unit
  4801. CASE 1
  4802. IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN
  4803. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_buy) * ls_s_pfmx[ll_j].rate_unit_buy
  4804. END IF
  4805. CASE 2
  4806. IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN
  4807. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_scll) * ls_s_pfmx[ll_j].rate_unit_scll
  4808. END IF
  4809. CASE 3
  4810. IF ls_s_pfmx[ll_j].rate_unit_buy > 0 THEN
  4811. ld_qty_cmpl = Ceiling(ld_qty_cmpl/ls_s_pfmx[ll_j].rate_unit_sale) * ls_s_pfmx[ll_j].rate_unit_sale
  4812. END IF
  4813. END CHOOSE
  4814. ELSE
  4815. ld_qty_scll = 0
  4816. ld_qty_cmpl = 0
  4817. ld_sonloss = 0
  4818. END IF
  4819. CHOOSE CASE ls_s_pfmx[ll_j].scllqtytype
  4820. CASE 0
  4821. ls_s_pfmx[ll_j].scllqty = ld_qty_scll
  4822. CASE 1
  4823. ls_s_pfmx[ll_j].scllqty = ld_qty_standard
  4824. CASE 2
  4825. IF ls_s_pfmx[ll_j].u_mtrldef_mrptype = 0 THEN
  4826. ls_s_pfmx[ll_j].scllqty = Round(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,ls_s_pfmx[ll_j].u_mtrldef_mrparg)
  4827. ELSE
  4828. IF ls_s_pfmx[ll_j].u_mtrldef_mrparg = 0 THEN
  4829. ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,10))
  4830. ELSE
  4831. tem_long = 10^ls_s_pfmx[ll_j].u_mtrldef_mrparg
  4832. ls_s_pfmx[ll_j].scllqty = Ceiling(Truncate(ld_qty_standard/(1 - ls_s_pfmx[ll_j].scllloss)+ls_s_pfmx[ll_j].sclldecloss,10) * tem_long)/tem_long
  4833. ls_s_pfmx[ll_j].scllqty = Round(ls_s_pfmx[ll_j].scllqty , ls_s_pfmx[ll_j].u_mtrldef_mrparg )
  4834. END IF
  4835. END IF
  4836. END CHOOSE
  4837. IF ls_s_pfmx[ll_j].ifover = 1 THEN
  4838. CHOOSE CASE ls_s_pfmx[ll_j].dipztype
  4839. CASE 0
  4840. ls_status_son = arg_s_mrp.arg_status
  4841. ls_woodcode_son = ''
  4842. ls_pcode_son = ''
  4843. CASE 1
  4844. ls_status_son = ''
  4845. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4846. ls_pcode_son = ''
  4847. CASE 2
  4848. ls_status_son = ''
  4849. ls_woodcode_son = ''
  4850. ls_pcode_son = arg_s_mrp.arg_pcode
  4851. CASE 3
  4852. ls_status_son = arg_s_mrp.arg_status
  4853. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4854. ls_pcode_son = ''
  4855. CASE 4
  4856. ls_status_son = ''
  4857. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4858. ls_pcode_son = arg_s_mrp.arg_pcode
  4859. CASE 5
  4860. ls_status_son = arg_s_mrp.arg_status
  4861. ls_woodcode_son = ''
  4862. ls_pcode_son = arg_s_mrp.arg_pcode
  4863. CASE 6
  4864. ls_status_son = arg_s_mrp.arg_status
  4865. ls_woodcode_son = arg_s_mrp.arg_woodcode
  4866. ls_pcode_son = arg_s_mrp.arg_pcode
  4867. END CHOOSE
  4868. ELSE
  4869. ls_status_son = ls_s_pfmx[ll_j].status
  4870. ls_woodcode_son = ls_s_pfmx[ll_j].woodcode
  4871. ls_pcode_son = ls_s_pfmx[ll_j].pcode
  4872. END IF
  4873. s_mrp_arg1.arg_scid = arg_s_mrp.arg_scid
  4874. s_mrp_arg1.arg_orderid = arg_s_mrp.arg_orderid
  4875. s_mrp_arg1.arg_ifdate = arg_s_mrp.arg_ifdate
  4876. s_mrp_arg1.arg_pmtrlid = arg_s_mrp.arg_mtrlid
  4877. s_mrp_arg1.arg_mtrlid = ls_s_pfmx[ll_j].SonMtrlid
  4878. s_mrp_arg1.arg_status = ls_status_son
  4879. s_mrp_arg1.arg_woodcode = ls_woodcode_son
  4880. s_mrp_arg1.arg_pcode = ls_pcode_son
  4881. s_mrp_arg1.arg_pfcode = ls_s_pfmx[ll_j].sonpfcode
  4882. s_mrp_arg1.arg_qty = ld_qty_scll
  4883. s_mrp_arg1.arg_cmplqty = ld_qty_cmpl
  4884. s_mrp_arg1.arg_wrkgrpid_scll = ls_s_pfmx[ll_j].wrkGrpid
  4885. s_mrp_arg1.arg_up_sdate = ldt_sdate
  4886. s_mrp_arg1.arg_up_rqdate = ldt_edate
  4887. s_mrp_arg1.arg_if_allowuse = arg_s_mrp.arg_if_allowuse
  4888. s_mrp_arg1.arg_gydscrp = ls_s_pfmx[ll_j].dscrp
  4889. s_mrp_arg1.arg_pfklmode = ls_s_pfmx[ll_j].pfklmode
  4890. s_mrp_arg1.arg_pfgroup = ls_s_pfmx[ll_j].pfgroup
  4891. s_mrp_arg1.arg_pfgroupmode = ls_s_pfmx[ll_j].pfgroupmode
  4892. s_mrp_arg1.arg_advancetime = ls_s_pfmx[ll_j].advancetime
  4893. s_mrp_arg1.arg_Sonscale = ls_s_pfmx[ll_j].Sonscale
  4894. s_mrp_arg1.arg_sonloss = ld_sonloss
  4895. s_mrp_arg1.arg_sondecloss = ls_s_pfmx[ll_j].sondecloss
  4896. s_mrp_arg1.arg_scllloss = ls_s_pfmx[ll_j].scllloss
  4897. s_mrp_arg1.arg_sclldecloss = ls_s_pfmx[ll_j].sclldecloss
  4898. s_mrp_arg1.arg_scllqtytype = ls_s_pfmx[ll_j].scllqtytype
  4899. s_mrp_arg1.arg_scllqty = ls_s_pfmx[ll_j].scllqty
  4900. s_mrp_arg1.arg_if_follow = ls_s_pfmx[ll_j].if_follow
  4901. s_mrp_arg1.arg_lasthour = ls_s_pfmx[ll_j].lasthour
  4902. s_mrp_arg1.arg_strandqty = ld_qty_standard
  4903. rslt = uof_cmpl_rqmtrl_re(arg_lp + 1,ls_s_pfmx[ll_j].mtrlorigin,s_mrp_arg1,arg_s_mtrl,arg_msg) //递归处理下级
  4904. IF rslt = 0 THEN
  4905. GOTO ext
  4906. END IF
  4907. NEXT
  4908. ext:
  4909. RETURN rslt
  4910. end function
  4911. public function integer uof_saletaskmx_pf_add (s_saletaskmx_pf arg_s_stpf, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4912. Long i
  4913. IF UpperBound(arg_s_stpf.scid) > 0 THEN
  4914. FOR i = 1 To UpperBound(arg_s_stpf.scid)
  4915. INSERT INTO u_saletaskmx_pf(scid,taskid,printid,mtrlid,sonmtrlid,status,woodcode,pcode,sonscale)
  4916. VALUES (:arg_s_stpf.scid[i],
  4917. :arg_s_stpf.taskid[i],
  4918. :arg_s_stpf.printid[i],
  4919. :arg_s_stpf.mtrlid[i],
  4920. :arg_s_stpf.sonmtrlid[i],
  4921. :arg_s_stpf.status[i],
  4922. :arg_s_stpf.woodcode[i],
  4923. :arg_s_stpf.pcode[i],
  4924. :arg_s_stpf.sonscale[i]);
  4925. IF sqlca.SQLCode <> 0 THEN
  4926. arg_msg = '建立销售订单明细个性清单失败,'+sqlca.SQLErrText
  4927. rslt = 0
  4928. GOTO ext
  4929. END IF
  4930. NEXT
  4931. END IF
  4932. ext:
  4933. IF rslt = 0 THEN
  4934. ROLLBACK;
  4935. ELSEIF rslt = 1 And arg_ifcommit THEN
  4936. COMMIT;
  4937. END IF
  4938. RETURN rslt
  4939. end function
  4940. public function integer uof_saletaskmx_pf_del (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4941. DELETE FROM u_saletaskmx_pf
  4942. WHERE u_saletaskmx_pf.scid = :arg_scid
  4943. AND u_saletaskmx_pf.taskid = :arg_taskid
  4944. And u_saletaskmx_pf.printid = :arg_printid;
  4945. IF sqlca.SQLCode <> 0 THEN
  4946. arg_msg = '删除销售订单明细原个性清单失败,'+sqlca.SQLErrText
  4947. rslt = 0
  4948. GOTO ext
  4949. END IF
  4950. ext:
  4951. IF rslt = 0 THEN
  4952. ROLLBACK;
  4953. ELSEIF rslt = 1 And arg_ifcommit THEN
  4954. COMMIT;
  4955. END IF
  4956. RETURN rslt
  4957. end function
  4958. public function integer uof_add_rqmtrl_scll_find (long arg_p, long arg_p_mtrlid, integer arg_ifpackpro, string arg_status, string arg_woodcode, string arg_pcode, s_order_ml_rqmtrl arg_s_mtrl, ref s_order_ml_rqmtrl_scll arg_s_mtrl_scll, long arg_e, ref string arg_msg);Int rslt = 1
  4959. Long ll_i,i
  4960. Long ll_p
  4961. Long ll_lp_f
  4962. Long ll_p_end,ll_p_start
  4963. Boolean lb_f
  4964. Boolean lb_f_lb = False
  4965. Int li_ft
  4966. DO WHILE arg_p <> -1
  4967. ll_p_start = 0
  4968. ll_p_end = 0
  4969. lb_f = False
  4970. lb_f_lb = False
  4971. li_ft = 0
  4972. ll_lp_f = 0
  4973. FOR i = arg_p To arg_e //UpperBound(arg_s_mtrl.mtrlid)
  4974. // IF i = UpperBound(arg_s_mtrl.mtrlid) THEN
  4975. IF i = arg_e THEN
  4976. IF Not lb_f THEN
  4977. ll_p_start = arg_e
  4978. END IF
  4979. ll_p_end = arg_e //UpperBound(arg_s_mtrl.mtrlid)
  4980. EXIT
  4981. END IF
  4982. IF arg_s_mtrl.qty[i] = 0 THEN CONTINUE
  4983. // IF arg_ifpackpro = 4 And arg_s_mtrl.ifcfg[i] = 1 THEN CONTINUE
  4984. IF arg_s_mtrl.ifcfg[i] = 1 THEN CONTINUE
  4985. //找下级最后行
  4986. IF lb_f THEN
  4987. IF li_ft = 1 And arg_s_mtrl.lp[i] < ll_lp_f THEN
  4988. lb_f_lb = True
  4989. ll_p_end = i
  4990. EXIT
  4991. ELSEIF li_ft = 2 And arg_s_mtrl.lp[i] <= ll_lp_f THEN
  4992. lb_f_lb = True
  4993. ll_p_end = i
  4994. EXIT
  4995. END IF
  4996. END IF
  4997. //找开始级别
  4998. IF Not lb_f And arg_s_mtrl.pmtrlid[i] = arg_p_mtrlid THEN
  4999. IF arg_ifpackpro <> 3 And arg_ifpackpro <> 4 THEN
  5000. lb_f = True
  5001. ll_lp_f = arg_s_mtrl.lp[i]
  5002. ll_p_start = i
  5003. li_ft = 1
  5004. ELSEIF arg_ifpackpro = 3 And Trim(arg_s_mtrl.status[i]) = Trim(arg_status) And Trim(arg_s_mtrl.woodcode[i]) = Trim(arg_woodcode) And Trim(arg_s_mtrl.pcode[i]) = Trim(arg_pcode) THEN
  5005. lb_f = True
  5006. ll_lp_f = arg_s_mtrl.lp[i]
  5007. ll_p_start = i + 1
  5008. li_ft = 2
  5009. ELSEIF arg_ifpackpro = 4 THEN
  5010. lb_f = True
  5011. ll_lp_f = arg_s_mtrl.lp[i]
  5012. ll_p_start = i
  5013. li_ft = 2
  5014. END IF
  5015. END IF
  5016. NEXT
  5017. IF lb_f_lb THEN
  5018. ll_p_end = ll_p_end - 1
  5019. ELSE
  5020. ll_p_end = ll_p_end
  5021. END IF
  5022. IF ll_p_start = 0 THEN
  5023. ll_p_start += 1
  5024. END IF
  5025. IF ll_p_start > ll_p_end THEN
  5026. rslt = 1
  5027. GOTO ext
  5028. END IF
  5029. //yyx2012-11-14
  5030. // IF upperbound(arg_s_mtrl_scll.mtrlid) > 0 And ll_p_start = 1 And ll_p_end = UpperBound(arg_s_mtrl.mtrlid) then
  5031. IF UpperBound(arg_s_mtrl_scll.mtrlid) > 0 And ll_p_start = 1 And ll_p_end = arg_e THEN
  5032. rslt = 1
  5033. GOTO ext
  5034. END IF
  5035. //yyx2012-11-14_end
  5036. // IF ll_p_end = UpperBound(arg_s_mtrl.mtrlid) THEN
  5037. IF ll_p_end = arg_e THEN
  5038. arg_p = -1
  5039. ELSE
  5040. arg_p = ll_p_end + 1
  5041. END IF
  5042. FOR ll_i = ll_p_start To ll_p_end
  5043. IF arg_s_mtrl.qty[ll_i] = 0 THEN CONTINUE
  5044. // IF arg_ifpackpro = 4 And arg_s_mtrl.ifcfg[ll_i] = 1 THEN CONTINUE
  5045. IF arg_s_mtrl.ifcfg[ll_i] = 1 THEN CONTINUE
  5046. If (arg_ifpackpro = 1 Or arg_ifpackpro = 2) And arg_s_mtrl.ifpack[ll_i] > 0 THEN CONTINUE
  5047. IF arg_s_mtrl.pmtrlid[ll_i] = arg_p_mtrlid THEN
  5048. Int li_ifselforder,li_mtrlorigin
  5049. String ls_mtrlcode
  5050. SELECT mtrlcode,
  5051. ifselforder,
  5052. mtrlorigin
  5053. INTO :ls_mtrlcode,
  5054. :li_ifselforder,
  5055. :li_mtrlorigin
  5056. FROM u_mtrldef
  5057. Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
  5058. IF sqlca.SQLCode <> 0 THEN
  5059. arg_msg = '查询物料:'+ls_mtrlcode+'资料失败,'+sqlca.SQLErrText
  5060. rslt = 0
  5061. GOTO ext
  5062. END IF
  5063. Long ll_p_mtrlid
  5064. Long ll_arr
  5065. ll_arr = UpperBound(arg_s_mtrl_scll.mtrlid)
  5066. IF li_ifselforder = 0 And li_mtrlorigin = 0 THEN //自制虚拟件
  5067. // IF arg_s_mtrl.ifselforder[ll_i] = 0 And arg_s_mtrl.mtrlorigin[ll_i] = 0 THEN //自制虚拟件
  5068. // IF ll_i = UpperBound(arg_s_mtrl.mtrlid) THEN
  5069. IF ll_i = arg_e THEN
  5070. ll_arr++
  5071. arg_s_mtrl_scll.mtrlid[ll_arr] = arg_s_mtrl.mtrlid[ll_i]
  5072. arg_s_mtrl_scll.wrkgrpid[ll_arr] = arg_s_mtrl.wrkgrpid_scll[ll_i]
  5073. arg_s_mtrl_scll.status[ll_arr] = arg_s_mtrl.status[ll_i]
  5074. arg_s_mtrl_scll.woodcode[ll_arr] = arg_s_mtrl.woodcode[ll_i]
  5075. arg_s_mtrl_scll.pcode[ll_arr] = arg_s_mtrl.pcode[ll_i]
  5076. arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.scllqty[ll_i]
  5077. rslt = 1
  5078. GOTO ext
  5079. ELSE
  5080. ll_p = ll_i
  5081. IF arg_s_mtrl.qty[ll_i] > arg_s_mtrl.cmplqty[ll_i] THEN
  5082. // arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.qty[ll_i] - arg_s_mtrl.cmplqty[ll_i]
  5083. IF arg_s_mtrl.cmplqty[ll_i] > 0 THEN
  5084. ll_p_mtrlid = arg_s_mtrl.mtrlid[ll_i]
  5085. IF uof_add_rqmtrl_scll_find(ll_p,ll_p_mtrlid,arg_s_mtrl.ifpackpro[ll_i],&
  5086. arg_s_mtrl.status[ll_i],arg_s_mtrl.woodcode[ll_i],arg_s_mtrl.pcode[ll_i],&
  5087. arg_s_mtrl,arg_s_mtrl_scll,ll_p_end,arg_msg) = 0 THEN
  5088. rslt = 0
  5089. GOTO ext
  5090. END IF
  5091. ELSE
  5092. rslt = 1
  5093. GOTO ext
  5094. END IF
  5095. ELSE
  5096. ll_p_mtrlid = arg_s_mtrl.mtrlid[ll_i]
  5097. IF uof_add_rqmtrl_scll_find(ll_p,ll_p_mtrlid,arg_s_mtrl.ifpackpro[ll_i],&
  5098. arg_s_mtrl.status[ll_i],arg_s_mtrl.woodcode[ll_i],arg_s_mtrl.pcode[ll_i],&
  5099. arg_s_mtrl,arg_s_mtrl_scll,ll_p_end,arg_msg) = 0 THEN
  5100. rslt = 0
  5101. GOTO ext
  5102. END IF
  5103. END IF
  5104. END IF
  5105. ELSE
  5106. ll_arr++
  5107. arg_s_mtrl_scll.mtrlid[ll_arr] = arg_s_mtrl.mtrlid[ll_i]
  5108. arg_s_mtrl_scll.wrkgrpid[ll_arr] = arg_s_mtrl.wrkgrpid_scll[ll_i]
  5109. arg_s_mtrl_scll.status[ll_arr] = arg_s_mtrl.status[ll_i]
  5110. arg_s_mtrl_scll.woodcode[ll_arr] = arg_s_mtrl.woodcode[ll_i]
  5111. arg_s_mtrl_scll.pcode[ll_arr] = arg_s_mtrl.pcode[ll_i]
  5112. arg_s_mtrl_scll.truerqqty[ll_arr] = arg_s_mtrl.scllqty[ll_i]
  5113. END IF
  5114. END IF
  5115. NEXT
  5116. LOOP
  5117. ext:
  5118. RETURN rslt
  5119. end function
  5120. on uo_order_ml_mrp.create
  5121. call super::create
  5122. TriggerEvent( this, "constructor" )
  5123. end on
  5124. on uo_order_ml_mrp.destroy
  5125. TriggerEvent( this, "destructor" )
  5126. call super::destroy
  5127. end on
  5128. event constructor;String str_optionvalue,arg_msg
  5129. f_get_sys_option_value('274',str_optionvalue,arg_msg)
  5130. uo_option_packpro2_pf_pack2_useifover = Long(str_optionvalue)
  5131. f_get_sys_option_value('340',str_optionvalue,arg_msg)
  5132. uo_option_ifpackpro2_if_no_pack2 = Long(str_optionvalue)
  5133. f_get_sys_option_value('356',str_optionvalue,arg_msg)
  5134. uo_option_scll_ifchanged = Long(str_optionvalue)
  5135. f_get_sys_option_value('089',str_optionvalue,arg_msg)
  5136. uo_option_produce_dec = Long(str_optionvalue)
  5137. SELECT wrkgrpid INTO :ins_produce_wrkgrpid_bj
  5138. FROM u_sc_wkp
  5139. Where ifbj = 1;
  5140. IF sqlca.SQLCode <> 0 THEN
  5141. ins_produce_wrkgrpid_bj = 0
  5142. END IF
  5143. SELECT wrkgrpid INTO :ins_wrkGrpid_scll_bj
  5144. FROM u_sc_workgroup
  5145. Where ifbj = 1;
  5146. IF sqlca.SQLCode <> 0 THEN
  5147. ins_wrkGrpid_scll_bj = 0
  5148. END IF
  5149. end event