uo_checkpda.sru 132 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875
  1. $PBExportHeader$uo_checkpda.sru
  2. forward
  3. global type uo_checkpda from uo_transactionobject
  4. end type
  5. type s_p_barcode_pda from structure within uo_checkpda
  6. end type
  7. end forward
  8. type s_p_barcode_pda from structure
  9. string barcode
  10. long wrkgrpid
  11. long kind
  12. long flag
  13. string opemp
  14. datetime opdate
  15. long workgroupid
  16. end type
  17. global type uo_checkpda from uo_transactionobject
  18. end type
  19. global uo_checkpda uo_checkpda
  20. forward prototypes
  21. public function integer uof_outware_sale_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  22. public function integer uof_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg)
  23. public function integer uof_ordermtrl_workgroup_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg)
  24. public function integer uof_reallocqty_ifpack_bak (long arg_fpgrade, ref string arg_msg)
  25. public function integer uof_reallocqty_ifpack (long arg_fpgrade, long arg_datenum, ref string arg_msg)
  26. public function integer uof_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg)
  27. public subroutine uf_audit_getbar (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg)
  28. public subroutine uf_audit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg)
  29. public subroutine uf_secaudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg)
  30. public subroutine uf_thraudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg)
  31. public subroutine uof_recmpl_mtrlware_ifpackpro_capacity (ref string arg_msg)
  32. public function integer uof_inware_cp_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  33. public function integer uof_outware_scll_secaudit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  34. public function integer uof_ordermtrl_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  35. public function integer uof_ordermtrl_workgroup_barcode_pt_auto (long arg_days, ref string arg_msg)
  36. private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  37. public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  38. public function integer uof_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
  39. public function integer uof_reallocqty (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg)
  40. public function integer uof_inware_cp_uof_auto_scll_p (ref string arg_msg)
  41. public function integer uof_reconnect (ref string arg_msg)
  42. public subroutine uof_send_buytask_jd (ref string arg_msg)
  43. public function integer uof_order_wkp_barcode_pda_bak (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  44. public function integer uof_order_wkp_barcode_pda (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  45. private function integer pf_get_barcodes_notflag (ref s_p_barcode_pda arg_bars[], ref string arg_msg)
  46. public function integer uf_cmpl_cost_balcdateint (ref string arg_msg)
  47. public function integer uof_cmpl_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg)
  48. public function integer uof_cmpl_mtrlcost_planprice (long arr_mtrlid[], string arr_pfcode[], string arr_status[], string arr_woodcode[], string arr_pcode[], long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string ls_msg)
  49. private function integer pf_outware_to_inwarebuy (string ls_sn, datetime dt_server, ref string arg_msg)
  50. public function integer uof_outware_to_inwarebuy (ref string ls_msg)
  51. end prototypes
  52. public function integer uof_outware_sale_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);
  53. uo_outware_sale uo_ware
  54. uo_ware = Create uo_outware_sale
  55. uo_ware.commit_transaction = commit_transaction
  56. datastore ds_outware
  57. ds_outware = Create datastore
  58. ds_outware.DataObject = 'ds_outware_sale_noaudit_pda'
  59. ds_outware.SetTransObject(commit_transaction)
  60. ds_outware.Retrieve()
  61. Long ll_i
  62. String ls_outwarecode
  63. Long ll_scid,ll_outwareid
  64. String ls_msg
  65. Long ll_fail,ll_suc
  66. FOR ll_i = 1 To ds_outware.RowCount()
  67. ll_scid = ds_outware.Object.scid[ll_i]
  68. ll_outwareid = ds_outware.Object.outwareid[ll_i]
  69. ls_outwarecode = ds_outware.Object.outwarecode[ll_i]
  70. IF uo_ware.getinfo(ll_scid,ll_outwareid,ls_msg) = 0 THEN
  71. ROLLBACK;
  72. arg_msg = arg_msg + ls_outwarecode + ' 审核失败,'+ls_msg + '~r~n'
  73. ll_fail++
  74. CONTINUE
  75. END IF
  76. IF uo_ware.auditing(True,ls_msg) = 0 THEN
  77. ROLLBACK;
  78. arg_msg = arg_msg + ls_outwarecode + ' 审核失败,'+ls_msg + '~r~n'
  79. ll_fail++
  80. CONTINUE
  81. END IF
  82. ll_suc++
  83. NEXT
  84. arg_cnt = ll_suc
  85. arg_failcnt = ll_fail
  86. Destroy uo_ware
  87. Destroy ds_outware
  88. RETURN 1
  89. end function
  90. public function integer uof_reallocqty_for_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg);Int rslt = 1
  91. uo_mtrlware_assign uo_assign
  92. uo_assign = Create uo_mtrlware_assign
  93. uo_assign.commit_transaction = commit_transaction
  94. Long ll_cnt
  95. SELECT COUNT(0) Into :ll_cnt From u_mtrldef Where mtrlid = :arg_mtrlid Using commit_transaction;
  96. IF commit_transaction.SQLCode <> 0 THEN
  97. rslt = 0
  98. arg_msg = '检测物料是否存在失败,' + commit_transaction.SQLErrText
  99. GOTO ext
  100. END IF
  101. IF ll_cnt = 0 THEN
  102. rslt = 0
  103. arg_msg = '物料不存在,mtrlid=' + String(arg_mtrlid)
  104. GOTO ext
  105. END IF
  106. IF uo_assign.uof_adjust_order_by_mtrlid(arg_mtrlid, arg_fpgrade, Ref arg_msg) <> 1 THEN
  107. rslt = 0
  108. GOTO ext
  109. END IF
  110. ext:
  111. Destroy uo_assign
  112. IF rslt = 1 THEN
  113. COMMIT Using commit_transaction;
  114. ELSE
  115. ROLLBACK Using commit_transaction;
  116. END IF
  117. RETURN rslt
  118. end function
  119. public function integer uof_ordermtrl_workgroup_changed (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg);Int rslt = 1
  120. uo_ordermtrl_workgroup uo_omw
  121. uo_omw = Create uo_ordermtrl_workgroup
  122. uo_omw.commit_transaction = commit_transaction
  123. IF uo_omw.uf_begindate_changed(arg_scid, arg_orderid, arg_wrkgrpid, Ref arg_msg, False) <> 1 THEN
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. GOTO ext
  128. ext:
  129. Destroy uo_omw
  130. IF rslt = 1 THEN
  131. COMMIT Using commit_transaction;
  132. ELSE
  133. ROLLBACK Using commit_transaction;
  134. END IF
  135. RETURN rslt
  136. end function
  137. public function integer uof_reallocqty_ifpack_bak (long arg_fpgrade, ref string arg_msg);Int rslt = 1
  138. uo_mtrlware_assign uo_mtrlware_fp
  139. uo_mtrlware_fp = Create uo_mtrlware_assign
  140. uo_mtrlware_fp.commit_transaction = commit_transaction
  141. Long c_assignid[], ll_c_assignid
  142. Decimal c_fpqty[], ld_c_fpqty
  143. Long ll_c_cnt = 0
  144. // 取消分配
  145. DECLARE cur1 CURSOR FOR SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS fpqty
  146. FROM u_mtrlware_assign INNER JOIN
  147. u_mtrldef ON u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid
  148. WHERE (u_mtrlware_assign.fpgrade <= :arg_fpgrade) AND (u_mtrldef.ifpack = 1) AND (u_mtrlware_assign.assigntype = 1) AND
  149. (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND (NOT EXISTS
  150. (SELECT TOP 1 1 AS Expr1
  151. FROM u_outware INNER JOIN
  152. u_outwaremx ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  153. WHERE (u_outware.billtype = 1) AND (u_outwaremx.relid = u_mtrlware_assign.Relbillid) AND
  154. (u_outwaremx.relprintid = u_mtrlware_assign.relprintid) And (u_outware.flag = 0))) Using commit_transaction;
  155. OPEN cur1;
  156. FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty;
  157. DO WHILE commit_transaction.SQLCode = 0
  158. ll_c_cnt ++
  159. c_assignid[ll_c_cnt] = ll_c_assignid
  160. c_fpqty[ll_c_cnt] = ld_c_fpqty
  161. FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty;
  162. LOOP
  163. CLOSE cur1;
  164. Long ll_i
  165. FOR ll_i = 1 To ll_c_cnt
  166. IF uo_mtrlware_fp.uof_assign_del(c_assignid[ll_i],&
  167. c_fpqty[ll_i],arg_msg,False) = 0 THEN
  168. rslt = 0
  169. GOTO ext
  170. END IF
  171. NEXT
  172. COMMIT Using commit_transaction;
  173. Long ll_scid, arr_scid[]
  174. Long ll_TaskID, arr_TaskID[]
  175. Long ll_printid, arr_printid[]
  176. Decimal ld_notfpqty, arr_notfpqty[]
  177. Long ll_MtrlID, arr_MtrlID[]
  178. String ls_status, arr_status[]
  179. String ls_woodcode, arr_woodcode[]
  180. String ls_pcode, arr_pcode[]
  181. Long ll_cnt = 0
  182. // 重新分配订单明细
  183. DECLARE cur2 CURSOR FOR SELECT u_SaleTaskMx.scid, u_SaleTaskMx.TaskID, u_SaleTaskMx.printid, u_SaleTaskMx.SaleQty - u_SaleTaskMx.stopqty - u_SaleTaskMx.fpqty AS notfpqty,
  184. u_SaleTaskMx.MtrlID, u_SaleTaskMx.status, u_SaleTaskMx.woodcode, u_SaleTaskMx.pcode
  185. FROM u_SaleTaskMx INNER JOIN
  186. u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN
  187. u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND u_SaleTaskMx.TaskID = u_SaleTask.TaskID
  188. WHERE (u_SaleTaskMx.SaleQty - u_SaleTaskMx.stopqty - u_SaleTaskMx.fpqty > 0) AND (u_mtrldef.ifpack = 1) AND (u_SaleTask.Status = 1)
  189. Order By u_SaleTaskMx.requiredate Using commit_transaction;
  190. OPEN cur2;
  191. FETCH cur2 INTO :ll_scid,
  192. :ll_TaskID,
  193. :ll_printid,
  194. :ld_notfpqty,
  195. :ll_MtrlID,
  196. :ls_status,
  197. :ls_woodcode,
  198. :ls_pcode;
  199. DO WHILE commit_transaction.SQLCode = 0
  200. ll_cnt++
  201. arr_scid[ll_cnt] = ll_scid
  202. arr_TaskID[ll_cnt] = ll_TaskID
  203. arr_printid[ll_cnt] = ll_printid
  204. arr_notfpqty[ll_cnt] = ld_notfpqty
  205. arr_MtrlID[ll_cnt] = ll_MtrlID
  206. arr_status[ll_cnt] = ls_status
  207. arr_woodcode[ll_cnt] = ls_woodcode
  208. arr_pcode[ll_cnt] = ls_pcode
  209. FETCH cur2 INTO :ll_scid,
  210. :ll_TaskID,
  211. :ll_printid,
  212. :ld_notfpqty,
  213. :ll_MtrlID,
  214. :ls_status,
  215. :ls_woodcode,
  216. :ls_pcode;
  217. LOOP
  218. CLOSE cur2;
  219. Long ware_l_scid, ware__scid[]
  220. Long ware_l_mtrlwareid, ware__mtrlwareid[]
  221. Decimal ware_d_notfpqty, ware__notfpqty[]
  222. Long ware_cnt = 0
  223. Long ll_j
  224. Decimal ld_curqty
  225. String arg_log = ''
  226. Long ml_cnt = 0
  227. FOR ll_i = 1 To ll_cnt
  228. // 主计划未用料审的跳过
  229. ml_cnt = 0
  230. SELECT COUNT(0)
  231. INTO :ml_cnt
  232. FROM u_order_ml
  233. WHERE taskscid = :arr_scid[ll_i]
  234. AND taskid = :arr_TaskID[ll_i]
  235. AND taskmxid = :arr_printid[ll_i]
  236. Using commit_transaction;
  237. IF commit_transaction.SQLCode <> 0 THEN
  238. rslt = 0
  239. arg_msg = '查询订单明细是否有主计划失败,' + commit_transaction.SQLErrText
  240. GOTO ext
  241. END IF
  242. IF ml_cnt <= 0 THEN // 未有主计划跳过
  243. CONTINUE
  244. END IF
  245. ml_cnt = 0
  246. SELECT count(0)
  247. INTO :ml_cnt
  248. FROM u_order_ml
  249. WHERE taskscid = :arr_scid[ll_i]
  250. AND taskid = :arr_TaskID[ll_i]
  251. AND taskmxid = :arr_printid[ll_i]
  252. AND (scllflag = 0 OR scllsecflag = 0)
  253. Using commit_transaction;
  254. IF commit_transaction.SQLCode <> 0 THEN
  255. rslt = 0
  256. arg_msg = '查询订单明细未用料审主计划失败,' + commit_transaction.SQLErrText
  257. GOTO ext
  258. END IF
  259. IF ml_cnt > 0 THEN // 主计划未用料审
  260. CONTINUE
  261. END IF
  262. // 查询可分配库存
  263. ware_cnt = 0
  264. DECLARE cur3 CURSOR FOR SELECT u_mtrlware.scid, u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS notfpqty
  265. FROM u_mtrlware INNER JOIN
  266. u_storage ON u_mtrlware.storageid = u_storage.storageid
  267. WHERE (u_storage.inuse = 1) AND (u_storage.storagetype = 1) AND (u_mtrlware.scid = :arr_scid[ll_i]) AND (u_mtrlware.mtrlid = :arr_mtrlid[ll_i]) AND
  268. (u_mtrlware.status = :arr_status[ll_i]) And (u_mtrlware.woodcode = :arr_woodcode[ll_i]) And (u_mtrlware.pcode = :arr_pcode[ll_i]) Using commit_transaction;
  269. OPEN cur3;
  270. FETCH cur3 INTO :ware_l_scid,
  271. :ware_l_mtrlwareid,
  272. :ware_d_notfpqty;
  273. DO WHILE commit_transaction.SQLCode = 0
  274. ware_cnt ++
  275. ware__scid[ware_cnt] = ware_l_scid
  276. ware__mtrlwareid[ware_cnt] = ware_l_mtrlwareid
  277. ware__notfpqty[ware_cnt] = ware_d_notfpqty
  278. FETCH cur3 INTO :ware_l_scid,
  279. :ware_l_mtrlwareid,
  280. :ware_d_notfpqty;
  281. LOOP
  282. CLOSE cur3;
  283. ld_notfpqty = arr_notfpqty[ll_i]
  284. FOR ll_j = 1 To ware_cnt
  285. IF ld_notfpqty <= 0 THEN EXIT
  286. IF ld_notfpqty > ware__notfpqty[ll_j] THEN
  287. ld_curqty = ware__notfpqty[ll_j]
  288. ELSE
  289. ld_curqty = ld_notfpqty
  290. END IF
  291. IF ld_curqty > 0 THEN
  292. IF uo_mtrlware_fp.uof_assign_add(ware__scid[ll_j],ware__mtrlwareid[ll_j],1,arr_TaskID[ll_i],arr_printid[ll_i],&
  293. ld_curqty,0,'','','',0,2,publ_operator,arg_msg,False) = 0 THEN
  294. arg_log += '分配失败,' + arg_msg + '~r~n'
  295. GOTO _next
  296. END IF
  297. ld_notfpqty -= ld_curqty
  298. END IF
  299. _next:
  300. NEXT
  301. NEXT
  302. ext:
  303. Destroy uo_mtrlware_fp
  304. IF rslt = 1 THEN
  305. COMMIT Using commit_transaction;
  306. ELSE
  307. ROLLBACK Using commit_transaction;
  308. END IF
  309. RETURN rslt
  310. end function
  311. public function integer uof_reallocqty_ifpack (long arg_fpgrade, long arg_datenum, ref string arg_msg);Int rslt = 1
  312. Long ll_i
  313. uo_mtrlware_assign uo_mtrlware_fp
  314. uo_mtrlware_fp = Create uo_mtrlware_assign
  315. uo_mtrlware_fp.commit_transaction = commit_transaction
  316. datastore ds_refp_pack1
  317. ds_refp_pack1 = Create datastore
  318. ds_refp_pack1.DataObject = 'ds_pack1_refp_task'
  319. ds_refp_pack1.SetTransObject(commit_transaction)
  320. datastore ds_refp_pack_mx
  321. ds_refp_pack_mx = Create datastore
  322. ds_refp_pack_mx.DataObject = 'ds_pack1_refp_mx'
  323. ds_refp_pack_mx.SetTransObject(commit_transaction)
  324. Long c_assignid[], ll_c_assignid
  325. Decimal c_fpqty[], ld_c_fpqty
  326. Long ll_c_cnt = 0
  327. // 取消分配
  328. DECLARE cur1 CURSOR FOR
  329. SELECT u_mtrlware_assign.assignid,
  330. u_mtrlware_assign.assignqty - u_mtrlware_assign.outqty as fpqty
  331. FROM u_mtrlware_assign INNER join
  332. u_mtrldef on u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid
  333. WHERE ( u_mtrlware_assign.fpgrade <= :arg_fpgrade )
  334. AND ( u_mtrldef.ifpack = 1 )
  335. AND ( u_mtrlware_assign.assigntype = 1 )
  336. AND ( u_mtrlware_assign.assignqty > u_mtrlware_assign.outqty )
  337. AND (NOT EXISTS
  338. (SELECT top 1 1 as expr1
  339. FROM u_outware INNER join
  340. u_outwaremx on u_outware.scid = u_outwaremx.scid
  341. AND u_outware.outwareid = u_outwaremx.outwareid
  342. WHERE ( u_outware.billtype = 1 )
  343. AND ( u_outwaremx.scid = u_mtrlware_assign.scid )
  344. AND ( u_outwaremx.relid = u_mtrlware_assign.relbillid )
  345. AND ( u_outwaremx.relprintid = u_mtrlware_assign.relprintid )
  346. And ( u_outware.flag = 0))) Using commit_transaction;
  347. OPEN cur1;
  348. FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty;
  349. DO WHILE commit_transaction.SQLCode = 0
  350. ll_c_cnt ++
  351. c_assignid[ll_c_cnt] = ll_c_assignid
  352. c_fpqty[ll_c_cnt] = ld_c_fpqty
  353. FETCH cur1 Into :ll_c_assignid, :ld_c_fpqty;
  354. LOOP
  355. CLOSE cur1;
  356. FOR ll_i = 1 To ll_c_cnt
  357. IF uo_mtrlware_fp.uof_assign_del(c_assignid[ll_i],&
  358. c_fpqty[ll_i],arg_msg,False) = 0 THEN
  359. rslt = 0
  360. GOTO ext
  361. END IF
  362. NEXT
  363. COMMIT Using commit_transaction;
  364. arg_msg = arg_msg + '取消分配成功:' + String(ll_c_cnt)
  365. //订单明细用
  366. Long ll_scid
  367. Long ll_taskid
  368. Long ll_printid
  369. Decimal ld_notfpqty
  370. Long ll_mtrlid
  371. String ls_status
  372. String ls_woodcode
  373. String ls_pcode
  374. Long ll_cnt
  375. //库存用
  376. Long ware_l_scid, ware_scid[]
  377. Long ware_l_mtrlwareid, ware_mtrlwareid[]
  378. Decimal ware_d_notfpqty, ware_notfpqty[]
  379. Long ware_cnt = 0
  380. Long ll_j
  381. Decimal ld_curqty
  382. String arg_log = ''
  383. Long ml_cnt = 0
  384. Boolean if_enough
  385. Long k
  386. // 重新分配订单明细
  387. ll_cnt = ds_refp_pack1.Retrieve(arg_datenum)
  388. IF ll_cnt = -1 THEN
  389. rslt = 0
  390. arg_msg += ';获取重新分配订单明细失败,' + commit_transaction.SQLErrText
  391. GOTO ext
  392. END IF
  393. ll_cnt = ds_refp_pack1.RowCount()
  394. arg_msg = arg_msg + ';正在执行分配' + String(ll_cnt)
  395. FOR ll_i = 1 To ll_cnt
  396. ll_scid = ds_refp_pack1.Object.u_saletaskmx_scid[ll_i]
  397. ll_taskid = ds_refp_pack1.Object.u_saletaskmx_taskid[ll_i]
  398. ds_refp_pack_mx.Retrieve(ll_scid,ll_taskid)
  399. IF ds_refp_pack_mx.RowCount() = 0 THEN
  400. //不齐货
  401. // arg_log += '分配失败,没有明细'
  402. // f_task_writelog(ll_scid,ll_taskid,arg_log)
  403. CONTINUE
  404. ELSE
  405. if_enough = True
  406. FOR k = 1 To ds_refp_pack_mx.RowCount()
  407. IF ds_refp_pack_mx.Object.notfpqty[k] > ds_refp_pack_mx.Object.warenotfpqty[k] THEN
  408. if_enough = False
  409. EXIT
  410. END IF
  411. NEXT
  412. IF Not if_enough THEN
  413. CONTINUE
  414. ELSE
  415. FOR k = 1 To ds_refp_pack_mx.RowCount()
  416. ll_printid = ds_refp_pack_mx.Object.u_saletaskmx_printid[k]
  417. ll_mtrlid = ds_refp_pack_mx.Object.u_saletaskmx_mtrlid[k]
  418. ls_status = ds_refp_pack_mx.Object.u_saletaskmx_status[k]
  419. ls_woodcode = ds_refp_pack_mx.Object.u_saletaskmx_woodcode[k]
  420. ls_pcode = ds_refp_pack_mx.Object.u_saletaskmx_pcode[k]
  421. ld_notfpqty = ds_refp_pack_mx.Object.notfpqty[k]
  422. arg_msg = arg_msg + ',' + String(ll_taskid)
  423. // 主计划未用料审的跳过
  424. ml_cnt = 0
  425. SELECT count(0)
  426. INTO :ml_cnt
  427. FROM u_order_ml
  428. WHERE u_order_ml.taskscid = :ll_scid
  429. AND u_order_ml.taskid = :ll_taskid
  430. AND u_order_ml.taskmxid = :ll_printid
  431. Using commit_transaction;
  432. IF commit_transaction.SQLCode <> 0 THEN
  433. rslt = 0
  434. arg_msg += '查询订单明细是否有主计划失败,' + commit_transaction.SQLErrText
  435. GOTO ext
  436. END IF
  437. IF ml_cnt <= 0 THEN // 未有主计划跳过
  438. // If ll_taskid = 8835 Then
  439. // arg_msg = arg_msg + '未有主计划跳过'
  440. // End If
  441. CONTINUE
  442. END IF
  443. ml_cnt = 0
  444. SELECT count(0)
  445. INTO :ml_cnt
  446. FROM u_order_ml
  447. WHERE u_order_ml.taskscid = :ll_scid
  448. AND u_order_ml.taskid = :ll_taskid
  449. AND u_order_ml.taskmxid = :ll_printid
  450. AND (u_order_ml.scllflag = 0 OR u_order_ml.scllsecflag = 0)
  451. Using commit_transaction;
  452. IF commit_transaction.SQLCode <> 0 THEN
  453. rslt = 0
  454. arg_msg += '查询订单明细未用料审主计划失败,' + commit_transaction.SQLErrText
  455. GOTO ext
  456. END IF
  457. IF ml_cnt > 0 THEN // 主计划未用料审
  458. // If ll_taskid = 8835 Then
  459. // arg_msg = arg_msg + '主计划未用料审'
  460. // End If
  461. CONTINUE
  462. END IF
  463. // If ll_taskid = 8835 Then
  464. // arg_msg = arg_msg + '正在分配'
  465. // End If
  466. //查询可分配库存
  467. ware_cnt = 0
  468. DECLARE cur3 CURSOR FOR
  469. SELECT u_mtrlware.scid,
  470. u_mtrlware.mtrlwareid,
  471. u_mtrlware.noallocqty - u_mtrlware.allocqty as notfpqty
  472. FROM u_mtrlware INNER join
  473. u_storage on u_mtrlware.storageid = u_storage.storageid
  474. WHERE (u_storage.inuse = 1)
  475. AND (u_storage.storagetype = 1)
  476. AND (u_mtrlware.scid = :ll_scid)
  477. AND (u_mtrlware.mtrlid = :ll_mtrlid)
  478. AND (u_mtrlware.status = :ls_status)
  479. AND (u_mtrlware.woodcode = :ls_woodcode)
  480. AND (u_mtrlware.pcode = :ls_pcode)
  481. And (u_mtrlware.noallocqty - u_mtrlware.allocqty > 0 ) Using commit_transaction;
  482. OPEN cur3;
  483. FETCH cur3 INTO :ware_l_scid,
  484. :ware_l_mtrlwareid,
  485. :ware_d_notfpqty;
  486. DO WHILE commit_transaction.SQLCode = 0
  487. ware_cnt ++
  488. ware_scid[ware_cnt] = ware_l_scid
  489. ware_mtrlwareid[ware_cnt] = ware_l_mtrlwareid
  490. ware_notfpqty[ware_cnt] = ware_d_notfpqty
  491. FETCH cur3 INTO :ware_l_scid,
  492. :ware_l_mtrlwareid,
  493. :ware_d_notfpqty;
  494. LOOP
  495. CLOSE cur3;
  496. FOR ll_j = 1 To ware_cnt
  497. IF ld_notfpqty <= 0 THEN EXIT
  498. IF ld_notfpqty > ware_notfpqty[ll_j] THEN
  499. ld_curqty = ware_notfpqty[ll_j]
  500. ld_notfpqty = ld_notfpqty - ld_curqty
  501. ELSE
  502. ld_curqty = ld_notfpqty
  503. ld_notfpqty = 0
  504. END IF
  505. IF ld_curqty > 0 THEN
  506. // If ll_taskid = 8835 Then
  507. // arg_msg = arg_msg + '分配数量' + String(ld_curqty)
  508. // End If
  509. IF uo_mtrlware_fp.uof_assign_add(ll_scid,&
  510. ware_mtrlwareid[ll_j],&
  511. 1,&
  512. ll_taskid,&
  513. ll_printid,&
  514. ld_curqty,&
  515. 0,'','','',0,2,publ_operator,arg_log,False) = 0 THEN
  516. arg_msg += ';分配失败,' + arg_log + '~r~n'
  517. GOTO _next
  518. END IF
  519. END IF
  520. _next:
  521. NEXT
  522. NEXT
  523. END IF
  524. END IF
  525. NEXT
  526. ext:
  527. Destroy uo_mtrlware_fp
  528. Destroy ds_refp_pack1
  529. Destroy ds_refp_pack_mx
  530. IF rslt = 1 THEN
  531. COMMIT Using commit_transaction;
  532. ELSE
  533. ROLLBACK Using commit_transaction;
  534. END IF
  535. RETURN rslt
  536. end function
  537. public function integer uof_delallocqty (decimal arg_assignday, decimal arg_outday, ref string arg_msg);return f_delallocqty(arg_assignday, arg_outday, ref arg_msg)
  538. end function
  539. public subroutine uf_audit_getbar (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);//====================================================================
  540. // 事件: uo_db_ys.uf_audit_getbar()
  541. //--------------------------------------------------------------------
  542. // 描述: 自动审核未审的条码生成单
  543. //--------------------------------------------------------------------
  544. // 参数:
  545. // ref long arg_sec
  546. // ref long arg_fail
  547. // ref string arg_msg
  548. //--------------------------------------------------------------------
  549. // 返回: (none)
  550. //--------------------------------------------------------------------
  551. // 作者: lwl 日期: 2012年06月04日
  552. //--------------------------------------------------------------------
  553. // LONGJOE
  554. //--------------------------------------------------------------------
  555. // 修改历史:
  556. //
  557. //====================================================================
  558. arg_sec = 0
  559. arg_fail = 0
  560. arg_msg = ''
  561. String ls_msg = ''
  562. uo_getbar uo_get
  563. uo_get = Create uo_getbar
  564. Long ll_billids[], ll_billid
  565. String ls_billcodes[], ls_billcode
  566. Long ll_i, ll_cnt = 0
  567. Long ll_ifpdaonly
  568. IF arg_ifpdaonly THEN
  569. ll_ifpdaonly = 1
  570. ELSE
  571. ll_ifpdaonly = 0
  572. END IF
  573. DECLARE cur1 CURSOR FOR
  574. SELECT getbarid, getbarcode From u_getbar Where flag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成');
  575. OPEN cur1;
  576. FETCH cur1 Into :ll_billid, :ls_billcode;
  577. DO WHILE sqlca.SQLCode = 0
  578. ll_cnt ++
  579. ll_billids[ll_cnt] = ll_billid
  580. ls_billcodes[ll_cnt] = ls_billcode
  581. FETCH cur1 Into :ll_billid, :ls_billcode;
  582. LOOP
  583. CLOSE cur1;
  584. FOR ll_i = 1 To ll_cnt
  585. ls_msg = ''
  586. IF uo_get.auditing(ll_billids[ll_i],publ_operator,Ref ls_msg,True) = 1 THEN
  587. arg_sec++
  588. ELSE
  589. ROLLBACK;
  590. arg_fail++
  591. ls_msg = '[' + ls_billcodes[ll_i] + ']审核失败:' + ls_msg
  592. IF arg_msg <> '' THEN
  593. ls_msg = ls_msg + '~r~n'
  594. END IF
  595. arg_msg = ls_msg + arg_msg
  596. END IF
  597. NEXT
  598. Destroy uo_get
  599. end subroutine
  600. public subroutine uf_audit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg
  601. uo_finish_wg = Create uo_finish
  602. arg_sec = 0
  603. arg_fail = 0
  604. arg_msg = ''
  605. String ls_msg = ''
  606. Long ll_billid, ll_billids[]
  607. String ls_billcode, ls_billcodes[]
  608. Long ll_i, ll_cnt = 0
  609. Long ll_ifpdaonly
  610. IF arg_ifpdaonly THEN
  611. ll_ifpdaonly = 1
  612. ELSE
  613. ll_ifpdaonly = 0
  614. END IF
  615. DECLARE cur1 CURSOR FOR
  616. SELECT finishid, finishcode From u_finish Where flag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成');
  617. OPEN cur1;
  618. FETCH cur1 Into :ll_billid, :ls_billcode;
  619. DO WHILE sqlca.SQLCode = 0
  620. ll_cnt++
  621. ll_billids[ll_cnt] = ll_billid
  622. ls_billcodes[ll_cnt] = ls_billcode
  623. FETCH cur1 Into :ll_billid, :ls_billcode;
  624. LOOP
  625. CLOSE cur1;
  626. FOR ll_i = 1 To ll_cnt
  627. IF uo_finish_wg.audit(ll_billids[ll_i], Ref ls_msg, True) = 1 THEN
  628. arg_sec++
  629. ELSE
  630. ROLLBACK;
  631. arg_fail++
  632. ls_msg = '[' + ls_billcodes[ll_i] + ']确认失败:' + ls_msg
  633. IF arg_msg <> '' THEN
  634. ls_msg = ls_msg + '~r~n'
  635. END IF
  636. arg_msg = ls_msg + arg_msg
  637. END IF
  638. NEXT
  639. Destroy uo_finish_wg
  640. end subroutine
  641. public subroutine uf_secaudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg
  642. uo_finish_wg = Create uo_finish
  643. arg_sec = 0
  644. arg_fail = 0
  645. arg_msg = ''
  646. String ls_msg = ''
  647. Long ll_billid, ll_billids[]
  648. String ls_billcode, ls_billcodes[]
  649. Long ll_i, ll_cnt = 0
  650. Long ll_ifpdaonly
  651. IF arg_ifpdaonly THEN
  652. ll_ifpdaonly = 1
  653. ELSE
  654. ll_ifpdaonly = 0
  655. END IF
  656. DECLARE cur1 CURSOR FOR
  657. SELECT finishid, finishcode From u_finish Where flag = 1 AND secflag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成');
  658. OPEN cur1;
  659. FETCH cur1 Into :ll_billid, :ls_billcode;
  660. DO WHILE sqlca.SQLCode = 0
  661. ll_cnt++
  662. ll_billids[ll_cnt] = ll_billid
  663. ls_billcodes[ll_cnt] = ls_billcode
  664. FETCH cur1 Into :ll_billid, :ls_billcode;
  665. LOOP
  666. CLOSE cur1;
  667. FOR ll_i = 1 To ll_cnt
  668. IF uo_finish_wg.secauditing(ll_billids[ll_i], Ref ls_msg, True) = 1 THEN
  669. arg_sec++
  670. ELSE
  671. ROLLBACK;
  672. arg_fail++
  673. ls_msg = '[' + ls_billcodes[ll_i] + ']仓审失败:' + ls_msg
  674. IF arg_msg <> '' THEN
  675. ls_msg = ls_msg + '~r~n'
  676. END IF
  677. arg_msg = ls_msg + arg_msg
  678. END IF
  679. NEXT
  680. Destroy uo_finish_wg
  681. end subroutine
  682. public subroutine uf_thraudit_finish (boolean arg_ifpdaonly, ref long arg_sec, ref long arg_fail, ref string arg_msg);uo_finish uo_finish_wg
  683. uo_finish_wg = Create uo_finish
  684. arg_sec = 0
  685. arg_fail = 0
  686. arg_msg = ''
  687. String ls_msg = ''
  688. Long ll_billid, ll_billids[]
  689. String ls_billcode, ls_billcodes[]
  690. Long ll_i, ll_cnt = 0
  691. Long ll_ifpdaonly
  692. IF arg_ifpdaonly THEN
  693. ll_ifpdaonly = 1
  694. ELSE
  695. ll_ifpdaonly = 0
  696. END IF
  697. DECLARE cur1 CURSOR FOR
  698. SELECT finishid, finishcode From u_finish Where flag = 1 AND secflag = 1 AND thrflag = 0 And (:ll_ifpdaonly = 0 Or :ll_ifpdaonly = 1 And dscrp = '系统自动生成');
  699. OPEN cur1;
  700. FETCH cur1 Into :ll_billid, :ls_billcode;
  701. DO WHILE sqlca.SQLCode = 0
  702. ll_cnt++
  703. ll_billids[ll_cnt] = ll_billid
  704. ls_billcodes[ll_cnt] = ls_billcode
  705. FETCH cur1 Into :ll_billid, :ls_billcode;
  706. LOOP
  707. CLOSE cur1;
  708. FOR ll_i = 1 To ll_cnt
  709. IF uo_finish_wg.thrauditing(ll_billids[ll_i], Ref ls_msg, True,0) = 1 THEN
  710. arg_sec++
  711. ELSE
  712. ROLLBACK;
  713. arg_fail++
  714. ls_msg = '[' + ls_billcodes[ll_i] + ']计审失败:' + ls_msg
  715. IF arg_msg <> '' THEN
  716. ls_msg = ls_msg + '~r~n'
  717. END IF
  718. arg_msg = ls_msg + arg_msg
  719. END IF
  720. NEXT
  721. Destroy uo_finish_wg
  722. end subroutine
  723. public subroutine uof_recmpl_mtrlware_ifpackpro_capacity (ref string arg_msg);datastore dw_pageretr
  724. Long ll_mtrlid,ll_storageid,ll_mtrlwareid
  725. String ls_status
  726. Decimal ld_ref_qty
  727. Long ll_i,ll_j,ll_scid
  728. Int li_statusflag,li_ifpackpro
  729. Decimal ld_capacity,ld_capacity_zj
  730. s_mtrlcfg_expr s_pz[]
  731. String ls_status_zj
  732. Long ll_fail = 0,ll_suc = 0
  733. String ls_mtrlcode
  734. dw_pageretr = Create datastore
  735. dw_pageretr.DataObject = 'ds_recmpl_mtrlware_capacity'
  736. dw_pageretr.SetTransObject(sqlca)
  737. dw_pageretr.Retrieve()
  738. dw_pageretr.AcceptText()
  739. FOR ll_i = 1 To dw_pageretr.RowCount()
  740. ll_mtrlid = dw_pageretr.Object.u_mtrlware_mtrlid[ll_i]
  741. ll_mtrlwareid = dw_pageretr.Object.u_mtrlware_mtrlwareid[ll_i]
  742. ls_status = dw_pageretr.Object.u_mtrlware_status[ll_i]
  743. ls_mtrlcode = dw_pageretr.Object.u_mtrldef_mtrlcode[ll_i]
  744. ll_scid = dw_pageretr.Object.u_mtrlware_scid[ll_i]
  745. SELECT capacity,statusflag,ifpackpro
  746. INTO :ld_capacity,:li_statusflag,:li_ifpackpro
  747. FROM u_mtrldef
  748. Where mtrlid = :ll_mtrlid ;
  749. IF sqlca.SQLCode <> 0 THEN
  750. arg_msg = arg_msg + '物料编码:'+ls_mtrlcode+' 查询资料失败,'+sqlca.SQLErrText + '~r~n'
  751. ll_fail++
  752. CONTINUE
  753. END IF
  754. IF li_statusflag = 2 THEN
  755. ld_capacity = 0
  756. f_checkpz(ls_status,s_pz[])
  757. FOR ll_j = 1 To UpperBound(s_pz)
  758. ls_status_zj = s_pz[ll_j].cfgname
  759. SELECT capacity
  760. INTO :ld_capacity_zj
  761. FROM u_mtrl_configure
  762. WHERE mtrlid = :ll_mtrlid
  763. And Name = :ls_status_zj;
  764. IF sqlca.SQLCode <> 0 THEN
  765. ld_capacity_zj = 0
  766. END IF
  767. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_j].qty)
  768. NEXT
  769. END IF
  770. IF li_ifpackpro = 0 THEN
  771. UPDATE u_mtrlware
  772. SET u_mtrlware.capacity = u_mtrlware.noallocqty * :ld_capacity
  773. WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid
  774. And u_mtrlware.scid = :ll_scid;
  775. ELSEIF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN
  776. UPDATE u_mtrlware
  777. SET u_mtrlware.capacity = u_mtrlware.canuseqty * :ld_capacity
  778. WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid
  779. And u_mtrlware.scid = :ll_scid;
  780. ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN
  781. IF Pos(ls_status,'+') > 0 Or Pos(ls_status,'*') > 0 THEN
  782. UPDATE u_mtrlware
  783. SET u_mtrlware.capacity = u_mtrlware.canuseqty * :ld_capacity
  784. WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid
  785. And u_mtrlware.scid = :ll_scid;
  786. ELSE
  787. UPDATE u_mtrlware
  788. SET u_mtrlware.capacity = u_mtrlware.noallocqty * :ld_capacity
  789. WHERE u_mtrlware.mtrlwareid = :ll_mtrlwareid
  790. And u_mtrlware.scid = :ll_scid;
  791. END IF
  792. END IF
  793. IF sqlca.SQLCode <> 0 THEN
  794. ROLLBACK;
  795. arg_msg = arg_msg + '编码:'+ls_mtrlcode+' 失败,~n'
  796. ll_fail++
  797. CONTINUE
  798. END IF
  799. ll_suc++
  800. COMMIT;
  801. NEXT
  802. IF ll_fail > 0 THEN
  803. arg_msg = '重算包件产品折算套数~n'+arg_msg
  804. ELSE
  805. arg_msg = '重算包件产品折算套数成功:'+string(ll_suc)
  806. END IF
  807. end subroutine
  808. public function integer uof_inware_cp_audit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);Int rslt = 1
  809. uo_inware_cp uo_ware
  810. uo_ware = Create uo_inware_cp
  811. datastore ds_inware
  812. ds_inware = Create datastore
  813. Long ll_cnt
  814. SELECT count(0) INTO :ll_cnt
  815. FROM u_inware
  816. Where (billtype = 3) And (flag = 0) Using commit_transaction;
  817. IF commit_transaction.SQLCode <> 0 THEN
  818. rslt = 0
  819. arg_msg = '查询共需要处理数据失败,' + commit_transaction.SQLErrText
  820. GOTO ext
  821. END IF
  822. arg_msg = '共有' + String(ll_cnt) + '条语句需要处理'
  823. uo_ware.commit_transaction = commit_transaction
  824. ds_inware.DataObject = 'ds_inware_cp_noaudit_pda'
  825. ds_inware.SetTransObject(commit_transaction)
  826. IF ds_inware.Retrieve() < 0 THEN
  827. rslt = 0
  828. arg_msg = arg_msg + '查询未审生产进仓单失败'
  829. GOTO ext
  830. END IF
  831. Long ll_i
  832. String ls_inwarecode
  833. Long ll_scid,ll_inwareid
  834. String ls_msg
  835. Long ll_fail,ll_suc
  836. FOR ll_i = 1 To ds_inware.RowCount()
  837. ll_scid = ds_inware.Object.scid[ll_i]
  838. ll_inwareid = ds_inware.Object.inwareid[ll_i]
  839. ls_inwarecode = ds_inware.Object.inwarecode[ll_i]
  840. IF uo_ware.getinfo(ll_scid,ll_inwareid,ls_msg) = 0 THEN
  841. ROLLBACK;
  842. arg_msg = arg_msg + ls_inwarecode + ' 审核失败,'+ls_msg + '~r~n'
  843. ll_fail++
  844. CONTINUE
  845. END IF
  846. IF uo_ware.auditing(True,ls_msg) = 0 THEN
  847. ROLLBACK;
  848. arg_msg = arg_msg + ls_inwarecode + ' 审核失败,'+ls_msg + '~r~n'
  849. ll_fail++
  850. CONTINUE
  851. END IF
  852. ll_suc++
  853. NEXT
  854. arg_cnt = ll_suc
  855. arg_failcnt = ll_fail
  856. ext:
  857. Destroy uo_ware
  858. Destroy ds_inware
  859. RETURN rslt
  860. end function
  861. public function integer uof_outware_scll_secaudit (ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);Int rslt = 1
  862. uo_outware_scll uo_ware
  863. uo_ware = Create uo_outware_scll
  864. Long ll_cnt
  865. SELECT count(0)
  866. INTO :ll_cnt
  867. FROM u_outware
  868. Where (billtype = 3) And (flag = 1) And (secflag = 0) Using commit_transaction;
  869. IF commit_transaction.SQLCode <> 0 THEN
  870. rslt = 0
  871. arg_msg = '查询共需要处理数据失败,' + commit_transaction.SQLErrText
  872. GOTO ext
  873. END IF
  874. arg_msg = '共有' + String(ll_cnt) + '条语句需要处理'
  875. uo_ware.commit_transaction = commit_transaction
  876. Long ll_scid, ll_outwareid
  877. Long arr_scid[], arr_outwareid[]
  878. String ls_outwarecode
  879. String arr_outwarecode[]
  880. ll_cnt = 0
  881. DECLARE cur1 CURSOR FOR
  882. SELECT scid, outwareid, outwarecode
  883. FROM u_outware
  884. Where (billtype = 3) And (flag = 1) And (secflag = 0) Using commit_transaction;
  885. OPEN cur1;
  886. FETCH cur1 Into :ll_scid, :ll_outwareid, :ls_outwarecode;
  887. DO WHILE commit_transaction.SQLCode = 0
  888. ll_cnt++
  889. arr_scid[ll_cnt] = ll_scid
  890. arr_outwareid[ll_cnt] = ll_outwareid
  891. arr_outwarecode[ll_cnt] = ls_outwarecode
  892. FETCH cur1 Into :ll_scid, :ll_outwareid, :ls_outwarecode;
  893. LOOP
  894. CLOSE cur1;
  895. Long ll_i
  896. String ls_msg
  897. Long ll_fail,ll_suc
  898. FOR ll_i = 1 To ll_cnt
  899. ll_scid = arr_scid[ll_i]
  900. ll_outwareid = arr_outwareid[ll_i]
  901. ls_outwarecode = arr_outwarecode[ll_i]
  902. IF uo_ware.getinfo(ll_scid,ll_outwareid,ls_msg) = 0 THEN
  903. ROLLBACK;
  904. arg_msg = arg_msg + ls_outwarecode + ' 查询失败,'+ls_msg + '~r~n'
  905. ll_fail++
  906. CONTINUE
  907. END IF
  908. IF uo_ware.uof_auto_secaudit(ls_msg) = 0 THEN
  909. ROLLBACK;
  910. arg_msg = arg_msg + ls_outwarecode + ' 二审失败,'+ls_msg + '~r~n'
  911. ll_fail++
  912. CONTINUE
  913. END IF
  914. ll_suc++
  915. NEXT
  916. arg_cnt = ll_suc
  917. arg_failcnt = ll_fail
  918. ext:
  919. Destroy uo_ware
  920. RETURN rslt
  921. end function
  922. public function integer uof_ordermtrl_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  923. Long ll_cnt = 0
  924. DateTime ld_sdate, arr_sdate[]
  925. Long ll_jdtype
  926. SELECT jdtype
  927. INTO :ll_jdtype
  928. FROM u_sc_workgroup
  929. Where wrkgrpid = :arg_wrkgrpid;
  930. IF sqlca.SQLCode <> 0 THEN
  931. rslt = 0
  932. arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
  933. GOTO ext
  934. END IF
  935. IF ll_jdtype <> 6 THEN
  936. GOTO ext
  937. END IF
  938. UPDATE u_OrderMtrl_workgroup
  939. SET finishqty = 0,
  940. finishflag = 0,
  941. finishdate = NULL
  942. WHERE scid = :arg_scid
  943. AND orderid = :arg_orderid
  944. And wrkgrpid = :arg_wrkgrpid;
  945. IF sqlca.SQLCode <> 0 THEN
  946. rslt = 0
  947. arg_msg = '1.更新工组进度失败,' + sqlca.SQLErrText
  948. GOTO ext
  949. END IF
  950. UPDATE u_ordermtrl_workgroup_barcode
  951. SET ptflag = 0,
  952. ptdate = NULL
  953. WHERE scid = :arg_scid
  954. AND orderid = :arg_orderid
  955. And swkpid = :arg_wrkgrpid;
  956. IF sqlca.SQLCode <> 0 THEN
  957. rslt = 0
  958. arg_msg = '2.更新配套标记失败,' + sqlca.SQLErrText
  959. GOTO ext
  960. END IF
  961. DELETE FROM u_OrderMtrl_workgroup_date
  962. WHERE scid = :arg_scid
  963. AND orderid = :arg_orderid
  964. And wrkgrpid = :arg_wrkgrpid;
  965. IF sqlca.SQLCode <> 0 THEN
  966. rslt = 0
  967. arg_msg = '3.删除工组日进度失败,' + sqlca.SQLErrText
  968. GOTO ext
  969. END IF
  970. IF uof_workgroup_barcode_pt(arg_scid, arg_orderid, arg_wrkgrpid, arg_msg, False) <> 1 THEN
  971. rslt = 0
  972. GOTO ext
  973. END IF
  974. GOTO ext
  975. ext:
  976. IF arg_ifcommit THEN
  977. IF rslt = 1 THEN
  978. COMMIT;
  979. ELSE
  980. ROLLBACK;
  981. END IF
  982. END IF
  983. RETURN rslt
  984. end function
  985. public function integer uof_ordermtrl_workgroup_barcode_pt_auto (long arg_days, ref string arg_msg);Int rslt = 1
  986. Long ll_scid, arr_scid[]
  987. Long ll_orderid, arr_orderid[]
  988. Long ll_wrkgrpid, arr_wrkgrpid[]
  989. Long ll_cnt = 0
  990. DateTime dt_server
  991. SELECT top 1 getdate()
  992. INTO :dt_server
  993. From u_user;
  994. IF sqlca.SQLCode <> 0 THEN
  995. rslt = 0
  996. arg_msg = '查询服务器时间失败,' + sqlca.SQLErrText
  997. GOTO ext
  998. END IF
  999. dt_server = DateTime(Date(dt_server), Time(0))
  1000. dt_server = DateTime(RelativeDate(Date(dt_server), - arg_days), Time(0))
  1001. DECLARE cur1 CURSOR FOR
  1002. SELECT DISTINCT u_ordermtrl_workgroup_barcode.scid, u_ordermtrl_workgroup_barcode.orderid, u_ordermtrl_workgroup_barcode.swkpid
  1003. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1004. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1005. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1006. u_OrderMtrl_workgroup_tree ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup_tree.scid AND
  1007. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup_tree.orderid AND
  1008. u_ordermtrl_workgroup_barcode.printid = u_OrderMtrl_workgroup_tree.printid INNER JOIN
  1009. u_OrderMtrl_workgroup ON u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1010. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid AND
  1011. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid
  1012. Where (u_ordermtrl_workgroup_barcode.sflag = 1) And (u_ordermtrl_workgroup_barcode.sdate >= :dt_server) And (u_OrderMtrl_workgroup_tree.iflast = 0);
  1013. OPEN cur1;
  1014. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_wrkgrpid;
  1015. DO WHILE sqlca.SQLCode = 0
  1016. ll_cnt++
  1017. arr_scid[ll_cnt] = ll_scid
  1018. arr_orderid[ll_cnt] = ll_orderid
  1019. arr_wrkgrpid[ll_cnt] = ll_wrkgrpid
  1020. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_wrkgrpid;
  1021. LOOP
  1022. CLOSE cur1;
  1023. Long i
  1024. String ls_msg
  1025. arg_msg = ''
  1026. FOR i = 1 To ll_cnt
  1027. IF uof_ordermtrl_workgroup_barcode_pt(arr_scid[i], arr_orderid[i], arr_wrkgrpid[i], ls_msg, True) <> 1 THEN
  1028. arg_msg = arg_msg + ls_msg + '~r~n'
  1029. END IF
  1030. NEXT
  1031. IF arg_msg <> '' THEN
  1032. rslt = 0
  1033. END IF
  1034. ext:
  1035. RETURN rslt
  1036. end function
  1037. private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数
  1038. Int rslt = 1
  1039. String ls_ordercode
  1040. String ls_mtrlcode
  1041. Decimal ld_orderqty,ld_acmpqty,ld_trueqty
  1042. DateTime null_dt
  1043. SetNull(null_dt)
  1044. DateTime dt_fdate
  1045. IF arg_orderid <= 0 THEN
  1046. rslt = 0
  1047. arg_msg = '错误的计划唯一码'
  1048. GOTO ext
  1049. END IF
  1050. SELECT ordercode INTO :ls_ordercode
  1051. FROM u_Order_ml
  1052. WHERE OrderID = :arg_orderid
  1053. And scid = :arg_scid;
  1054. IF sqlca.SQLCode <> 0 THEN
  1055. arg_msg = '查询生产计划编号失败'
  1056. rslt = 0
  1057. GOTO ext
  1058. END IF
  1059. SELECT u_mtrldef.mtrlcode ,
  1060. u_order_ml.orderqty,
  1061. u_order_ml.acmpqty
  1062. INTO :ls_mtrlcode,
  1063. :ld_orderqty,
  1064. :ld_acmpqty
  1065. FROM u_mtrldef,u_order_ml
  1066. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  1067. AND u_order_ml.scid = :arg_scid
  1068. And u_Order_ml.OrderID = :arg_orderid;
  1069. IF sqlca.SQLCode <> 0 THEN
  1070. arg_msg = '查询物料编号失败'
  1071. rslt = 0
  1072. GOTO ext
  1073. END IF
  1074. //arg_wrkgrpid:源工组;
  1075. Decimal not_finishqty
  1076. SELECT isnull(sum(orderqty - finishqty - stopqty),0)
  1077. INTO :not_finishqty
  1078. FROM u_OrderMtrl_workgroup
  1079. WHERE scid = :arg_scid
  1080. AND orderid = :arg_orderid
  1081. AND wrkGrpid = :arg_wrkgrpid
  1082. Using sqlca;
  1083. IF sqlca.SQLCode <> 0 THEN
  1084. arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  1085. rslt = 0
  1086. GOTO ext
  1087. END IF
  1088. IF arg_qty > not_finishqty THEN
  1089. // arg_msg = '物料:'+ls_mtrlcode+'当前数量'+String(arg_qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核'
  1090. // rslt = 0
  1091. // GOTO ext
  1092. arg_qty = not_finishqty
  1093. END IF
  1094. Long ll_owrkgrpid, arr_owrkgrpid[]
  1095. String ls_wkpname, arr_wkpname[]
  1096. Long ll_workgroupid, arr_workgroupid[]
  1097. Decimal ld_ufqty, arr_ufqty[]
  1098. Long ll_cnt = 0
  1099. DECLARE cur1 CURSOR FOR
  1100. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty
  1101. FROM u_OrderMtrl_workgroup
  1102. WHERE scid = :arg_scid
  1103. AND orderid = :arg_orderid
  1104. AND wrkGrpid = :arg_wrkgrpid
  1105. AND workgroupid = :arg_workgroupid
  1106. UNION
  1107. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty
  1108. FROM u_OrderMtrl_workgroup
  1109. WHERE scid = :arg_scid
  1110. AND orderid = :arg_orderid
  1111. AND wrkGrpid = :arg_wrkgrpid
  1112. And workgroupid <> :arg_workgroupid;
  1113. OPEN cur1;
  1114. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty;
  1115. DO WHILE sqlca.SQLCode = 0
  1116. ll_cnt++
  1117. arr_owrkgrpid[ll_cnt] = ll_owrkgrpid
  1118. arr_wkpname[ll_cnt] = ls_wkpname
  1119. arr_workgroupid[ll_cnt] = ll_workgroupid
  1120. arr_ufqty[ll_cnt] = ld_ufqty
  1121. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty;
  1122. LOOP
  1123. CLOSE cur1;
  1124. Long i
  1125. Decimal ld_addqty
  1126. ld_addqty = arg_qty
  1127. FOR i = 1 To ll_cnt
  1128. ll_owrkgrpid = arr_owrkgrpid[i]
  1129. ls_wkpname = arr_wkpname[i]
  1130. ll_workgroupid = arr_workgroupid[i]
  1131. ld_ufqty = arr_ufqty[i]
  1132. IF ld_addqty <= 0 THEN
  1133. EXIT
  1134. END IF
  1135. IF ld_addqty >= ld_ufqty THEN
  1136. UPDATE u_OrderMtrl_workgroup
  1137. SET finishqty = finishqty + :ld_ufqty,
  1138. finishflag = 1,
  1139. finishdate = :arg_finishdate
  1140. WHERE scid = :arg_scid
  1141. AND orderid = :arg_orderid
  1142. AND wrkgrpid = :arg_wrkgrpid
  1143. AND owrkgrpid = :ll_owrkgrpid
  1144. AND wkpname = :ls_wkpname
  1145. And workgroupid = :ll_workgroupid;
  1146. IF sqlca.SQLCode <> 0 THEN
  1147. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  1148. rslt = 0
  1149. GOTO ext
  1150. END IF
  1151. ld_addqty = ld_addqty - ld_ufqty
  1152. ELSE
  1153. UPDATE u_OrderMtrl_workgroup
  1154. SET finishqty = finishqty + :ld_addqty
  1155. WHERE scid = :arg_scid
  1156. AND orderid = :arg_orderid
  1157. AND wrkgrpid = :arg_wrkgrpid
  1158. AND owrkgrpid = :ll_owrkgrpid
  1159. AND wkpname = :ls_wkpname
  1160. And workgroupid = :ll_workgroupid;
  1161. IF sqlca.SQLCode <> 0 THEN
  1162. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  1163. rslt = 0
  1164. GOTO ext
  1165. END IF
  1166. ld_addqty = 0
  1167. END IF
  1168. NEXT
  1169. Decimal ld_sumorderqty
  1170. SELECT isnull(sum(orderqty),0)
  1171. INTO :ld_sumorderqty
  1172. FROM u_OrderMtrl_workgroup
  1173. WHERE scid = :arg_scid
  1174. AND orderid = :arg_orderid
  1175. And wrkGrpid = :arg_wrkgrpid;
  1176. IF sqlca.SQLCode <> 0 THEN
  1177. rslt = 0
  1178. arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText
  1179. GOTO ext
  1180. END IF
  1181. Decimal ld_sumfqty
  1182. SELECT isnull(sum(fqty),0)
  1183. INTO :ld_sumfqty
  1184. FROM u_OrderMtrl_workgroup_date
  1185. WHERE scid = :arg_scid
  1186. AND orderid = :arg_orderid
  1187. And wrkGrpid = :arg_wrkgrpid;
  1188. IF sqlca.SQLCode <> 0 THEN
  1189. rslt = 0
  1190. arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText
  1191. GOTO ext
  1192. END IF
  1193. ld_addqty = arg_qty
  1194. IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN
  1195. ld_addqty = ld_sumorderqty - ld_sumfqty
  1196. END IF
  1197. dt_fdate = DateTime(Date(arg_finishdate), Time(0))
  1198. UPDATE u_OrderMtrl_workgroup_date
  1199. SET fqty = fqty + :ld_addqty
  1200. WHERE scid = :arg_scid
  1201. AND orderid = :arg_orderid
  1202. AND wrkgrpid = :arg_wrkgrpid
  1203. And fdate = :dt_fdate;
  1204. IF sqlca.SQLCode = 0 THEN
  1205. IF sqlca.SQLNRows = 0 THEN
  1206. INSERT INTO u_OrderMtrl_workgroup_date
  1207. (scid,orderid,wrkgrpid,fdate,fqty)
  1208. VALUES
  1209. (:arg_scid,:arg_orderid,:arg_wrkgrpid,:dt_fdate,:ld_addqty);
  1210. IF sqlca.SQLCode <> 0 THEN
  1211. rslt = 0
  1212. arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
  1213. GOTO ext
  1214. END IF
  1215. END IF
  1216. ELSE
  1217. rslt = 0
  1218. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  1219. GOTO ext
  1220. END IF
  1221. ext:
  1222. IF rslt = 0 THEN
  1223. ROLLBACK;
  1224. ELSEIF rslt = 1 And arg_ifcommit THEN
  1225. COMMIT;
  1226. END IF
  1227. RETURN rslt
  1228. end function
  1229. public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1230. Long ll_cnt = 0
  1231. DateTime ld_sdate, arr_sdate[]
  1232. Long ll_jdtype
  1233. SELECT jdtype
  1234. INTO :ll_jdtype
  1235. FROM u_sc_workgroup
  1236. Where wrkgrpid = :arg_wrkgrpid;
  1237. IF sqlca.SQLCode <> 0 THEN
  1238. rslt = 0
  1239. arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
  1240. GOTO ext
  1241. END IF
  1242. IF ll_jdtype <> 6 THEN
  1243. GOTO ext
  1244. END IF
  1245. UPDATE u_OrderMtrl_workgroup
  1246. SET finishqty = finishqty
  1247. WHERE scid = :arg_scid
  1248. AND orderid = :arg_orderid
  1249. And wrkgrpid = :arg_wrkgrpid;
  1250. IF sqlca.SQLCode <> 0 THEN
  1251. rslt = 0
  1252. arg_msg = '锁住工组进度失败,' + sqlca.SQLErrText
  1253. GOTO ext
  1254. END IF
  1255. DECLARE cur1 CURSOR FOR
  1256. SELECT DISTINCT CAST(CONVERT(varchar(10), sdate, 120) AS datetime) AS sdate
  1257. FROM u_ordermtrl_workgroup_barcode
  1258. WHERE (scid = :arg_scid)
  1259. AND (orderid = :arg_orderid)
  1260. AND (swkpid = :arg_wrkgrpid)
  1261. AND (sflag = 1)
  1262. AND (ptflag = 0)
  1263. Order By sdate;
  1264. OPEN cur1;
  1265. FETCH cur1 Into :ld_sdate;
  1266. DO WHILE sqlca.SQLCode = 0
  1267. ll_cnt++
  1268. arr_sdate[ll_cnt] = ld_sdate
  1269. FETCH cur1 Into :ld_sdate;
  1270. LOOP
  1271. CLOSE cur1;
  1272. Long i,j,k
  1273. Decimal ld_qty1, ld_qty2, ld_addqty
  1274. Long ll_printid, arr_printid[]
  1275. Long ll_gycnt
  1276. Long ll_pid, arr_pid[]
  1277. Decimal ld_qty, arr_qty[]
  1278. Long ll_ptflag, arr_ptflag[]
  1279. Long ll_bcnt
  1280. FOR i = 1 To ll_cnt
  1281. ld_sdate = DateTime(RelativeDate(Date(arr_sdate[i]), 1))
  1282. ld_qty1 = 0
  1283. ld_qty2 = 0
  1284. SELECT ISNULL(MIN(sqty),0)
  1285. INTO :ld_qty1
  1286. FROM (SELECT SUM(CASE WHEN (ptflag = 1) AND (ptdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
  1287. FROM u_ordermtrl_workgroup_barcode
  1288. WHERE (scid = :arg_scid)
  1289. AND (orderid = :arg_orderid)
  1290. AND (swkpid = :arg_wrkgrpid)
  1291. Group By printid) AS vvv;
  1292. IF sqlca.SQLCode <> 0 THEN
  1293. rslt = 0
  1294. arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
  1295. GOTO ext
  1296. END IF
  1297. SELECT ISNULL(MIN(sqty),0)
  1298. INTO :ld_qty2
  1299. FROM (SELECT SUM(CASE WHEN (sflag = 1) AND (sdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
  1300. FROM u_ordermtrl_workgroup_barcode
  1301. WHERE (scid = :arg_scid)
  1302. AND (orderid = :arg_orderid)
  1303. AND (swkpid = :arg_wrkgrpid)
  1304. Group By printid) AS vvv;
  1305. IF sqlca.SQLCode <> 0 THEN
  1306. rslt = 0
  1307. arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
  1308. GOTO ext
  1309. END IF
  1310. IF ld_qty2 - ld_qty1 > 0 THEN
  1311. ll_gycnt = 0
  1312. DECLARE cur2 CURSOR FOR
  1313. SELECT printid
  1314. FROM u_OrderMtrl_workgroup_tree
  1315. WHERE scid = :arg_scid
  1316. AND orderid = :arg_orderid
  1317. And swkpid = :arg_wrkgrpid;
  1318. OPEN cur2;
  1319. FETCH cur2 Into :ll_printid;
  1320. DO WHILE sqlca.SQLCode = 0
  1321. ll_gycnt++
  1322. arr_printid[ll_gycnt] = ll_printid
  1323. FETCH cur2 Into :ll_printid;
  1324. LOOP
  1325. CLOSE cur2;
  1326. FOR j = 1 To ll_gycnt
  1327. ld_addqty = ld_qty2
  1328. ll_bcnt = 0
  1329. DECLARE cur3 CURSOR FOR
  1330. SELECT pid, qty, ptflag
  1331. FROM u_ordermtrl_workgroup_barcode
  1332. WHERE scid = :arg_scid
  1333. AND orderid = :arg_orderid
  1334. AND printid = :arr_printid[j]
  1335. AND sflag = 1
  1336. AND sdate < :ld_sdate
  1337. Order By ptflag Desc, sdate;
  1338. OPEN cur3;
  1339. FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
  1340. DO WHILE sqlca.SQLCode = 0
  1341. ll_bcnt++
  1342. arr_pid[ll_bcnt] = ll_pid
  1343. arr_qty[ll_bcnt] = ld_qty
  1344. arr_ptflag[ll_bcnt] = ll_ptflag
  1345. FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
  1346. LOOP
  1347. CLOSE cur3;
  1348. FOR k = 1 To ll_bcnt
  1349. IF ld_addqty <= 0 THEN
  1350. EXIT
  1351. END IF
  1352. ld_addqty -= arr_qty[k]
  1353. IF arr_ptflag[k] = 0 THEN
  1354. UPDATE u_ordermtrl_workgroup_barcode
  1355. SET ptflag = 1, ptdate = :arr_sdate[i]
  1356. WHERE scid = :arg_scid
  1357. AND orderid = :arg_orderid
  1358. AND printid = :arr_printid[j]
  1359. And pid = :arr_pid[k];
  1360. IF sqlca.SQLCode <> 0 THEN
  1361. rslt = 0
  1362. arg_msg = '更新配套标记失败,' + sqlca.SQLErrText
  1363. GOTO ext
  1364. END IF
  1365. END IF
  1366. NEXT
  1367. NEXT
  1368. ld_addqty = ld_qty2 - ld_qty1
  1369. IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_wrkgrpid, 0, arr_sdate[i], ld_addqty, arg_msg, False) <> 1 THEN
  1370. rslt = 0
  1371. GOTO ext
  1372. END IF
  1373. END IF
  1374. NEXT
  1375. GOTO ext
  1376. ext:
  1377. IF arg_ifcommit THEN
  1378. IF rslt = 1 THEN
  1379. COMMIT;
  1380. ELSE
  1381. ROLLBACK;
  1382. END IF
  1383. END IF
  1384. RETURN rslt
  1385. end function
  1386. public function integer uof_update_saleoutcodestr (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);return f_update_saleoutcodestr(arg_scid, arg_taskid, arg_printid, true, arg_msg)
  1387. end function
  1388. public function integer uof_reallocqty (boolean arg_reallocall, boolean arg_ignorout, long arg_fpgrade, ref string arg_msg);TRY
  1389. RETURN f_reallocqty_yyx(arg_reallocall, arg_ignorout, arg_fpgrade, Ref arg_msg)
  1390. Catch (throwable ex)
  1391. arg_msg = ex.Text
  1392. RETURN 0
  1393. END TRY
  1394. end function
  1395. public function integer uof_inware_cp_uof_auto_scll_p (ref string arg_msg);Int rslt = 1
  1396. uo_inware_cp uo_ware
  1397. uo_ware = Create uo_inware_cp
  1398. uo_ware.commit_transaction = commit_transaction
  1399. IF uo_ware.uof_auto_scll_p(Ref arg_msg) <> 1 THEN
  1400. rslt = 0
  1401. GOTO ext
  1402. END IF
  1403. ext:
  1404. Destroy uo_ware
  1405. RETURN rslt
  1406. end function
  1407. public function integer uof_reconnect (ref string arg_msg);Int rslt = 1
  1408. DISCONNECT Using id_sqlca;
  1409. CONNECT Using id_sqlca;
  1410. IF id_sqlca.SQLCode < 0 THEN
  1411. rslt = 0
  1412. arg_msg = 'ID连接数据库失败,' + id_sqlca.SQLErrText
  1413. GOTO ext
  1414. END IF
  1415. DISCONNECT;
  1416. CONNECT;
  1417. IF sqlca.SQLCode < 0 THEN
  1418. rslt = 0
  1419. arg_msg = '连接数据库失败,' + sqlca.SQLErrText
  1420. GOTO ext
  1421. END IF
  1422. ext:
  1423. RETURN rslt
  1424. end function
  1425. public subroutine uof_send_buytask_jd (ref string arg_msg);uo_saletask_jdbll uo_bll
  1426. uo_bll = create uo_saletask_jdbll
  1427. uo_bll.uf_send_buytask_jd(arg_msg)
  1428. destroy uo_bll
  1429. end subroutine
  1430. public function integer uof_order_wkp_barcode_pda_bak (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);//====================================================================
  1431. // 事件: .f_order_wkp_barcode_pda()
  1432. //--------------------------------------------------------------------
  1433. // 描述:
  1434. //--------------------------------------------------------------------
  1435. // 参数:
  1436. // value boolean arg_replace 优先完成时间较早的计划
  1437. // reference string arg_msg
  1438. // reference long arg_cnt
  1439. // reference long arg_failcnt
  1440. //--------------------------------------------------------------------
  1441. // 返回: integer
  1442. //--------------------------------------------------------------------
  1443. // 作者: lwl 日期: 2012年02月24日
  1444. //--------------------------------------------------------------------
  1445. // LONGJOE
  1446. //--------------------------------------------------------------------
  1447. // 修改历史:
  1448. //
  1449. //====================================================================
  1450. Int rslt = 1
  1451. Long ll_i,ll_j,ll_k,ll_l,ll_m
  1452. Long ll_wrkgrpid
  1453. String ls_barcode
  1454. Long ll_swkpid,ll_owkpid
  1455. Int li_sflag,li_oflag
  1456. Long ll_scid,ll_orderid,ll_printid
  1457. Long ll_printid_tree
  1458. Int li_kind
  1459. Long ll_pid
  1460. DateTime ldt_opdate
  1461. String ls_opemp
  1462. Decimal ld_packqty
  1463. Long ll_row
  1464. DateTime server_dt,ldt_fdate
  1465. Decimal ld_addqty
  1466. String ls_wkpname
  1467. String ls_relname,ls_partname
  1468. String ls_p_barcode
  1469. Decimal ld_min_orderqty,ld_sum_fqty
  1470. Decimal ld_maxqty, ld_finishqty
  1471. String ls_bar_relname, ls_bar_partname
  1472. Long ll_f_mtrlid
  1473. String ls_f_status ,ls_f_woodcode,ls_f_pcode
  1474. Long ll_f_swkpid, ll_f_owkpid
  1475. String ls_f_relname,ls_f_partname
  1476. Long ll_f_scid,ll_f_orderid
  1477. DateTime ld_f_requiredate
  1478. Long cnt
  1479. Long ll_ifrel, ll_storageid, ll_cusid
  1480. String ls_plancode, ls_mtrlcuscode, ls_location
  1481. Long ll_f_printid,ll_f_pid
  1482. Long ll_r_scid,ll_r_orderid,ll_r_printid,ll_r_pid
  1483. String ls_r_barcode
  1484. Long ll_scid_tmp
  1485. Long ll_orderid_tmp
  1486. Long ll_suc,ll_fail
  1487. Long ll_sqty,ll_oqty
  1488. Long ll_getbarid
  1489. Long ll_r_getbarid
  1490. Long ll_workgroupid
  1491. Long ll_scid_ds,ll_orderid_ds,ll_swkpid_ds,ll_workgroupid_ds
  1492. Decimal ld_minsqty_ds
  1493. Long ll_workgroupid_up,ll_owrkGrpid_up
  1494. String ls_wkpname_up
  1495. Decimal ld_update_qty,ld_orderqty_ds,ld_stopqty_ds,ld_finishqty_ds
  1496. Long ll_row_wkp
  1497. String ls_orderstr_arr[]
  1498. Long ll_rowcnt
  1499. Long ll_mxbt
  1500. Long ls_p
  1501. Long ll_mxbt_wrk
  1502. Long ll_scid_arr[],ll_orderid_arr[],ll_wrkgrpid_arr[],ll_scid_wkp[],ll_orderid_wkp[]
  1503. Decimal ld_minsqty
  1504. Long ll_workgroupid_p
  1505. Int li_barcode_check
  1506. Decimal ld_qty
  1507. String arg_barcode[]
  1508. Long arg_wrkgrpid[]
  1509. DateTime arg_opdate[]
  1510. Long arg_mxbt = 0
  1511. Decimal ld_ld_minsqty
  1512. Long ls_printid
  1513. String ls_msg
  1514. ll_mxbt = 0
  1515. ll_mxbt_wrk = 0
  1516. ll_suc = 0
  1517. ll_fail = 0
  1518. Int ll_oldfail = 0
  1519. uo_sc_task_finish sc_task
  1520. sc_task = Create uo_sc_task_finish
  1521. datastore ds_pda
  1522. ds_pda = Create datastore
  1523. ds_pda.DataObject = 'ds_order_wkp_barcode_pda'
  1524. ds_pda.SetTransObject(sqlca)
  1525. datastore ds_update_wrk
  1526. ds_update_wrk = Create datastore
  1527. ds_update_wrk.DataObject = 'ds_barcode_update_ordermtrl_workgroup_id'
  1528. ds_update_wrk.SetTransObject(sqlca)
  1529. datastore ds_order_wkp
  1530. ds_order_wkp = Create datastore
  1531. ds_order_wkp.DataObject = 'ds_barcode_order_wkp_workgroupid'
  1532. ds_order_wkp.SetTransObject(sqlca)
  1533. datastore ds_relname
  1534. ds_relname = Create datastore
  1535. ds_relname.DataObject = 'ds_cmp_date_barcode_relname'
  1536. ds_relname.SetTransObject(sqlca)
  1537. datastore ds_mx
  1538. ds_mx = Create datastore
  1539. ds_mx.DataObject = 'ds_cmp_date_barcode_mx'
  1540. ds_mx.SetTransObject(sqlca)
  1541. ll_row = ds_pda.Retrieve()
  1542. IF ll_row = -1 THEN
  1543. IF f_re_conect(arg_msg) = 0 THEN
  1544. rslt = 0
  1545. arg_msg = '重库数据库失败,' + arg_msg
  1546. GOTO ext
  1547. END IF
  1548. ll_row = ds_pda.Retrieve()
  1549. IF ll_row = -1 THEN
  1550. arg_msg = '查询未处理条码失败,' + sqlca.SQLErrText
  1551. rslt = 0
  1552. GOTO ext
  1553. END IF
  1554. END IF
  1555. SELECT Top 1 getdate() Into :server_dt From u_user;
  1556. //取得系统时间,借用操作员表
  1557. IF sqlca.SQLCode <> 0 THEN
  1558. arg_msg = '查询日期失败,'+sqlca.SQLErrText
  1559. ROLLBACK;
  1560. rslt = 0
  1561. GOTO ext
  1562. END IF
  1563. ldt_fdate = DateTime(Date(server_dt),Time(0))
  1564. FOR ll_i = 1 To ll_row
  1565. // 临时处理 重连数据库
  1566. IF ll_fail - ll_oldfail >= 5 THEN
  1567. DISCONNECT;
  1568. CONNECT;
  1569. END IF
  1570. ls_barcode = ds_pda.Object.barcode[ll_i]
  1571. ll_wrkgrpid = ds_pda.Object.wrkgrpid[ll_i]
  1572. li_kind = ds_pda.Object.Kind[ll_i]
  1573. ldt_opdate = ds_pda.Object.opdate[ll_i]
  1574. ls_opemp = ds_pda.Object.opemp[ll_i]
  1575. ll_workgroupid = ds_pda.Object.workgroupid[ll_i]
  1576. UPDATE u_order_wkp_barcode_pda
  1577. SET flag = 1
  1578. WHERE barcode = :ls_barcode
  1579. AND wrkgrpid = :ll_wrkgrpid
  1580. AND Kind = :li_kind
  1581. And flag <> 1;
  1582. IF sqlca.SQLCode <> 0 THEN
  1583. arg_msg += '更新条码状态失败,'+sqlca.SQLErrText
  1584. GOTO _failandnext
  1585. END IF
  1586. IF sqlca.SQLNRows = 0 THEN
  1587. CONTINUE
  1588. END IF
  1589. SELECT barcode_check
  1590. INTO :li_barcode_check
  1591. FROM u_sc_workgroup
  1592. Where wrkgrpid = :ll_wrkgrpid;
  1593. IF sqlca.SQLCode <> 0 THEN li_barcode_check = 0
  1594. ll_r_orderid = 0
  1595. IF li_kind = 0 THEN // 完工模式
  1596. //按顺序查找同工的最早条码
  1597. SELECT u_Order_ml.mtrlid,
  1598. u_Order_ml.status_mode,
  1599. u_Order_ml.woodcode,
  1600. u_Order_ml.pcode,
  1601. u_ordermtrl_workgroup_barcode.swkpid,
  1602. u_ordermtrl_workgroup_barcode.owkpid,
  1603. u_ordermtrl_workgroup_barcode.relname,
  1604. u_ordermtrl_workgroup_barcode.partname,
  1605. u_ordermtrl_workgroup_barcode.scid,
  1606. u_ordermtrl_workgroup_barcode.orderid,
  1607. u_OrderMtrl_workgroup.requiredate,
  1608. u_ordermtrl_workgroup_barcode.printid,
  1609. u_ordermtrl_workgroup_barcode.pid
  1610. INTO :ll_f_mtrlid,
  1611. :ls_f_status,
  1612. :ls_f_woodcode,
  1613. :ls_f_pcode,
  1614. :ll_f_swkpid,
  1615. :ll_f_owkpid,
  1616. :ls_f_relname,
  1617. :ls_f_partname,
  1618. :ll_f_scid,
  1619. :ll_f_orderid,
  1620. :ld_f_requiredate,
  1621. :ll_f_printid,
  1622. :ll_f_pid
  1623. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1624. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1625. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1626. u_OrderMtrl_workgroup ON
  1627. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1628. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  1629. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  1630. WHERE u_ordermtrl_workgroup_barcode.barcode = :ls_barcode
  1631. And u_ordermtrl_workgroup_barcode.swkpid = :ll_wrkgrpid;
  1632. IF sqlca.SQLCode <> 0 THEN
  1633. // ROLLBACK;
  1634. // arg_msg = '查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  1635. // ll_fail++
  1636. // CONTINUE
  1637. GOTO _update_data
  1638. END IF
  1639. cnt = 0
  1640. SELECT count(0) INTO :cnt
  1641. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1642. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1643. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1644. u_OrderMtrl_workgroup ON
  1645. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1646. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  1647. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  1648. WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND
  1649. u_Order_ml.status_mode = :ls_f_status AND
  1650. u_Order_ml.woodcode = :ls_f_woodcode AND
  1651. u_Order_ml.pcode = :ls_f_pcode AND
  1652. u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND
  1653. u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND
  1654. u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND
  1655. u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND
  1656. u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND
  1657. u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND
  1658. u_ordermtrl_workgroup_barcode.sflag = 0 AND
  1659. u_Order_ml.status = 1 ;
  1660. IF sqlca.SQLCode <> 0 THEN
  1661. ROLLBACK;
  1662. // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败,'+sqlca.SQLErrText
  1663. // ll_fail++
  1664. // CONTINUE
  1665. ll_r_scid = 0
  1666. ll_r_orderid = 0
  1667. ll_r_printid = 0
  1668. ll_r_pid = 0
  1669. GOTO _update_data
  1670. END IF
  1671. IF cnt > 0 And arg_replace THEN
  1672. SELECT top 1 u_ordermtrl_workgroup_barcode.scid,
  1673. u_ordermtrl_workgroup_barcode.orderid,
  1674. u_ordermtrl_workgroup_barcode.printid,
  1675. u_ordermtrl_workgroup_barcode.pid,
  1676. u_ordermtrl_workgroup_barcode.barcode
  1677. INTO :ll_r_scid,
  1678. :ll_r_orderid,
  1679. :ll_r_printid,
  1680. :ll_r_pid,
  1681. :ls_r_barcode
  1682. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1683. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1684. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1685. u_OrderMtrl_workgroup ON
  1686. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1687. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  1688. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  1689. WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND
  1690. u_Order_ml.status_mode = :ls_f_status AND
  1691. u_Order_ml.woodcode = :ls_f_woodcode AND
  1692. u_Order_ml.pcode = :ls_f_pcode AND
  1693. u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND
  1694. u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND
  1695. u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND
  1696. u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND
  1697. u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND
  1698. u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND
  1699. u_ordermtrl_workgroup_barcode.sflag = 0 AND
  1700. u_Order_ml.status = 1
  1701. Order By u_OrderMtrl_workgroup.requiredate;
  1702. IF sqlca.SQLCode <> 0 THEN
  1703. ROLLBACK;
  1704. // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败2,'+sqlca.SQLErrText
  1705. // ll_fail++
  1706. // CONTINUE
  1707. ll_r_scid = 0
  1708. ll_r_orderid = 0
  1709. ll_r_printid = 0
  1710. ll_r_pid = 0
  1711. GOTO _update_data
  1712. END IF
  1713. ll_scid_tmp = ll_r_scid - 100000000
  1714. ll_orderid_tmp = ll_r_orderid - 100000000
  1715. UPDATE u_ordermtrl_workgroup_barcode
  1716. SET scid = :ll_scid_tmp,
  1717. orderid = :ll_orderid_tmp
  1718. WHERE scid = :ll_r_scid
  1719. AND orderid = :ll_r_orderid
  1720. AND barcode = :ls_r_barcode
  1721. And pid = :ll_r_pid;
  1722. IF sqlca.SQLCode <> 0 THEN
  1723. ROLLBACK;
  1724. // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText
  1725. // ll_fail++
  1726. // CONTINUE
  1727. ll_r_scid = 0
  1728. ll_r_orderid = 0
  1729. ll_r_printid = 0
  1730. ll_r_pid = 0
  1731. GOTO _update_data
  1732. END IF
  1733. // UPDATE u_ordermtrl_workgroup_barcode
  1734. // SET barcode = :ls_barcode
  1735. // WHERE scid = :ll_r_scid
  1736. // AND orderid = :ll_r_orderid
  1737. // AND barcode = :ls_r_barcode;
  1738. // IF sqlca.SQLCode <> 0 THEN
  1739. // ROLLBACK;
  1740. // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText
  1741. // ll_fail++
  1742. // CONTINUE
  1743. // END IF
  1744. UPDATE u_ordermtrl_workgroup_barcode
  1745. SET scid = :ll_r_scid,
  1746. orderid = :ll_r_orderid,
  1747. pid = :ll_r_pid
  1748. WHERE scid = :ll_f_scid
  1749. AND orderid = :ll_f_orderid
  1750. AND barcode = :ls_barcode
  1751. And pid = :ll_f_pid;
  1752. IF sqlca.SQLCode <> 0 THEN
  1753. ROLLBACK;
  1754. // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_1,'+sqlca.SQLErrText
  1755. // ll_fail++
  1756. // CONTINUE
  1757. ll_r_scid = 0
  1758. ll_r_orderid = 0
  1759. ll_r_printid = 0
  1760. ll_r_pid = 0
  1761. GOTO _update_data
  1762. END IF
  1763. UPDATE u_ordermtrl_workgroup_barcode
  1764. SET scid = :ll_f_scid,
  1765. orderid = :ll_f_orderid,
  1766. pid = :ll_f_pid
  1767. WHERE scid = :ll_scid_tmp
  1768. And orderid = :ll_orderid_tmp;
  1769. IF sqlca.SQLCode <> 0 THEN
  1770. ROLLBACK;
  1771. // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_2,'+sqlca.SQLErrText
  1772. // ll_fail++
  1773. // CONTINUE
  1774. ll_r_scid = 0
  1775. ll_r_orderid = 0
  1776. ll_r_printid = 0
  1777. ll_r_pid = 0
  1778. GOTO _update_data
  1779. END IF
  1780. END IF
  1781. _update_data:
  1782. SELECT COUNT(0)
  1783. INTO :cnt
  1784. FROM u_ordermtrl_workgroup_barcode
  1785. WHERE barcode = :ls_barcode
  1786. AND swkpid = :ll_wrkgrpid
  1787. And sflag = 0;
  1788. IF sqlca.SQLCode <> 0 THEN
  1789. arg_msg += '1.0查询条码 '+ls_barcode+' 未完成数失败,'+sqlca.SQLErrText
  1790. GOTO _failandnext
  1791. END IF
  1792. IF cnt <= 0 THEN
  1793. GOTO _okandnext
  1794. END IF
  1795. SELECT top 1 scid,
  1796. orderid,
  1797. printid,
  1798. swkpid,
  1799. owkpid,
  1800. sflag,
  1801. oflag,
  1802. pid,
  1803. relname,
  1804. partname,
  1805. workgroupid,
  1806. qty
  1807. INTO :ll_scid,
  1808. :ll_orderid,
  1809. :ll_printid,
  1810. :ll_swkpid,
  1811. :ll_owkpid,
  1812. :li_sflag,
  1813. :li_oflag,
  1814. :ll_pid,
  1815. :ls_bar_relname,
  1816. :ls_bar_partname,
  1817. :ll_workgroupid_p,
  1818. :ld_qty
  1819. FROM u_ordermtrl_workgroup_barcode
  1820. WHERE barcode = :ls_barcode
  1821. AND swkpid = :ll_wrkgrpid
  1822. AND sflag = 0
  1823. Order By printid Desc;
  1824. IF sqlca.SQLCode <> 0 THEN
  1825. arg_msg += '1.0查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  1826. GOTO _failandnext
  1827. END IF
  1828. //不严格限制工作中心或条码本身没有指定工作中心,则程序为条码匹配工作中心
  1829. IF li_barcode_check = 0 Or ll_workgroupid_p = 0 THEN
  1830. //20111013 应急处理
  1831. UPDATE u_OrderMtrl_workgroup_barcode
  1832. SET u_ordermtrl_workgroup_barcode.workgroupid = u_OrderMtrl_workgroup.workgroupid
  1833. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1834. u_OrderMtrl_workgroup ON
  1835. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1836. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid AND
  1837. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  1838. u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid
  1839. WHERE u_ordermtrl_workgroup_barcode.scid = :ll_scid
  1840. AND u_ordermtrl_workgroup_barcode.orderid = :ll_orderid
  1841. And u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid;
  1842. //
  1843. SELECT count(*) INTO :cnt
  1844. FROM u_OrderMtrl_workgroup
  1845. WHERE scid = :ll_scid
  1846. AND orderid = :ll_orderid
  1847. AND wrkgrpid = :ll_swkpid
  1848. And workgroupid = :ll_workgroupid;
  1849. IF sqlca.SQLCode <> 0 THEN
  1850. cnt = 0
  1851. END IF
  1852. IF cnt = 0 THEN
  1853. SELECT COUNT(0)
  1854. INTO :cnt
  1855. FROM u_OrderMtrl_workgroup
  1856. WHERE scid = :ll_scid
  1857. AND orderid = :ll_orderid
  1858. And wrkgrpid = :ll_swkpid;
  1859. IF sqlca.SQLCode <> 0 THEN
  1860. arg_msg += '2.查询条码 '+ls_barcode+' 相关生产计划工组数量失败,'+sqlca.SQLErrText
  1861. GOTO _failandnext
  1862. END IF
  1863. IF cnt = 0 THEN
  1864. GOTO _okandnext
  1865. END IF
  1866. SELECT top 1 workgroupid
  1867. INTO :ll_workgroupid
  1868. FROM u_OrderMtrl_workgroup
  1869. WHERE scid = :ll_scid
  1870. AND orderid = :ll_orderid
  1871. And wrkgrpid = :ll_swkpid;
  1872. IF sqlca.SQLCode <> 0 THEN
  1873. arg_msg += '2.查询条码 '+ls_barcode+' 相关生产计划工组进度信息失败,'+sqlca.SQLErrText
  1874. GOTO _failandnext
  1875. END IF
  1876. END IF
  1877. ELSE
  1878. IF ll_workgroupid_p <> ll_workgroupid THEN
  1879. arg_msg += '条码 '+ls_barcode+' 所属工作中心与当前选择的工作中心不符,'+sqlca.SQLErrText
  1880. GOTO _failandnext
  1881. END IF
  1882. END IF
  1883. UPDATE u_ordermtrl_workgroup_barcode
  1884. SET sflag = 1,
  1885. sdate = :ldt_opdate,
  1886. semp = :ls_opemp,
  1887. workgroupid = :ll_workgroupid
  1888. WHERE scid = :ll_scid
  1889. AND orderid = :ll_orderid
  1890. AND printid = :ll_printid
  1891. And pid = :ll_pid;
  1892. IF sqlca.SQLCode <> 0 THEN
  1893. arg_msg += '更新条码完成状态失败,'+sqlca.SQLErrText
  1894. GOTO _failandnext
  1895. END IF
  1896. // SELECT sum(sflag*qty),sum(oflag*qty)
  1897. // INTO :ll_sqty,:ll_oqty
  1898. // FROM u_ordermtrl_workgroup_barcode
  1899. // WHERE scid = :ll_scid
  1900. // AND orderid = :ll_orderid
  1901. // And printid = :ll_printid;
  1902. // IF sqlca.SQLCode <> 0 THEN
  1903. // ROLLBACK;
  1904. // arg_msg = '查询工组完成进度失败,'+sqlca.SQLErrText
  1905. // ll_fail++
  1906. // CONTINUE
  1907. // END IF
  1908. SELECT printid INTO :ll_printid_tree
  1909. FROM u_OrderMtrl_workgroup_tree
  1910. WHERE scid = :ll_scid
  1911. AND orderid = :ll_orderid
  1912. AND relname = :ls_bar_relname
  1913. AND partname = :ls_bar_partname
  1914. AND workgroupid = :ll_workgroupid
  1915. And orderqty > sqty ;
  1916. IF sqlca.SQLCode <> 0 THEN
  1917. SELECT top 1 printid
  1918. INTO :ll_printid_tree
  1919. FROM u_OrderMtrl_workgroup_tree
  1920. WHERE scid = :ll_scid
  1921. AND orderid = :ll_orderid
  1922. AND relname = :ls_bar_relname
  1923. AND partname = :ls_bar_partname
  1924. And orderqty > sqty ;
  1925. IF sqlca.SQLCode <> 0 THEN
  1926. ll_printid_tree = ll_printid
  1927. END IF
  1928. END IF
  1929. UPDATE u_OrderMtrl_workgroup_tree
  1930. SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_qty END,
  1931. u_ordermtrl_workgroup_tree.sdate = :ldt_opdate
  1932. WHERE scid = :ll_scid
  1933. AND orderid = :ll_orderid
  1934. And printid = :ll_printid_tree;
  1935. IF sqlca.SQLCode <> 0 THEN
  1936. arg_msg += '更新工组条码进度已完成数失败,'+sqlca.SQLErrText
  1937. GOTO _failandnext
  1938. END IF
  1939. IF ll_r_orderid > 0 THEN
  1940. UPDATE u_OrderMtrl_workgroup_tree
  1941. SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END,
  1942. u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END
  1943. FROM u_OrderMtrl_workgroup_tree INNER JOIN
  1944. (SELECT SUM(sflag*qty) AS sqty, SUM(oflag*qty) AS oqty, scid, orderid, printid
  1945. FROM u_ordermtrl_workgroup_barcode
  1946. WHERE scid = :ll_f_scid
  1947. AND orderid = :ll_f_orderid
  1948. GROUP BY scid, orderid, printid) a ON
  1949. u_OrderMtrl_workgroup_tree.scid = a.scid AND
  1950. u_OrderMtrl_workgroup_tree.orderid = a.orderid AND
  1951. u_OrderMtrl_workgroup_tree.printid = a.printid
  1952. WHERE u_OrderMtrl_workgroup_tree.scid = :ll_f_scid
  1953. And u_OrderMtrl_workgroup_tree.orderid = :ll_f_orderid;
  1954. IF sqlca.SQLCode <> 0 THEN
  1955. arg_msg += '更新工组条码进度已完成数失败(原计划),'+sqlca.SQLErrText
  1956. GOTO _failandnext
  1957. END IF
  1958. UPDATE u_OrderMtrl_workgroup_tree
  1959. SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END,
  1960. u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END
  1961. FROM u_OrderMtrl_workgroup_tree INNER JOIN
  1962. (SELECT SUM(sflag*qty) AS sqty, SUM(oflag*qty) AS oqty, scid, orderid, printid
  1963. FROM u_ordermtrl_workgroup_barcode
  1964. WHERE scid = :ll_f_scid
  1965. AND orderid = :ll_f_orderid
  1966. GROUP BY scid, orderid, printid) a ON
  1967. u_OrderMtrl_workgroup_tree.scid = a.scid AND
  1968. u_OrderMtrl_workgroup_tree.orderid = a.orderid AND
  1969. u_OrderMtrl_workgroup_tree.printid = a.printid
  1970. WHERE u_OrderMtrl_workgroup_tree.scid = :ll_r_scid
  1971. And u_OrderMtrl_workgroup_tree.orderid = :ll_r_orderid;
  1972. IF sqlca.SQLCode <> 0 THEN
  1973. arg_msg += '更新工组条码进度已完成数失败(新替换计划),'+sqlca.SQLErrText
  1974. GOTO _failandnext
  1975. END IF
  1976. END IF
  1977. arg_mxbt++
  1978. arg_barcode[arg_mxbt] = ls_barcode
  1979. arg_wrkgrpid[arg_mxbt] = ll_wrkgrpid
  1980. arg_opdate[arg_mxbt] = ldt_opdate
  1981. ELSEIF li_kind = 1 THEN // 接收模式
  1982. SELECT scid,
  1983. orderid,
  1984. printid,
  1985. swkpid,
  1986. owkpid,
  1987. sflag,
  1988. oflag,
  1989. pid,
  1990. relname,
  1991. partname,
  1992. qty
  1993. INTO :ll_scid,
  1994. :ll_orderid,
  1995. :ll_printid,
  1996. :ll_swkpid,
  1997. :ll_owkpid,
  1998. :li_sflag,
  1999. :li_oflag,
  2000. :ll_pid,
  2001. :ls_bar_relname,
  2002. :ls_bar_partname,
  2003. :ld_qty
  2004. FROM u_ordermtrl_workgroup_barcode
  2005. WHERE barcode = :ls_barcode
  2006. And owkpid = :ll_wrkgrpid;
  2007. IF sqlca.SQLCode <> 0 THEN
  2008. arg_msg += '3.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  2009. GOTO _failandnext
  2010. END IF
  2011. UPDATE u_ordermtrl_workgroup_barcode
  2012. SET oflag = 1,
  2013. odate = :ldt_opdate,
  2014. oemp = :ls_opemp
  2015. WHERE scid = :ll_scid
  2016. AND orderid = :ll_orderid
  2017. AND printid = :ll_printid
  2018. And pid = :ll_pid;
  2019. IF sqlca.SQLCode <> 0 THEN
  2020. arg_msg += '更新条码接收状态失败,'+sqlca.SQLErrText
  2021. GOTO _failandnext
  2022. END IF
  2023. SELECT top 1 printid
  2024. INTO :ll_printid_tree
  2025. FROM u_OrderMtrl_workgroup_tree
  2026. WHERE scid = :ll_scid
  2027. AND orderid = :ll_orderid
  2028. AND relname = :ls_bar_relname
  2029. AND partname = :ls_bar_partname
  2030. And sqty > oqty ;
  2031. IF sqlca.SQLCode <> 0 THEN
  2032. ll_printid_tree = ll_printid
  2033. END IF
  2034. UPDATE u_OrderMtrl_workgroup_tree
  2035. SET u_ordermtrl_workgroup_tree.oqty = case when u_ordermtrl_workgroup_tree.oqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.oqty + :ld_qty END ,
  2036. u_ordermtrl_workgroup_tree.odate = :ldt_opdate
  2037. WHERE scid = :ll_scid
  2038. AND orderid = :ll_orderid
  2039. AND printid = :ll_printid_tree
  2040. And u_OrderMtrl_workgroup_tree.oqty < u_OrderMtrl_workgroup_tree.orderqty;
  2041. IF sqlca.SQLCode <> 0 THEN
  2042. arg_msg += '更新工组条码进度已接收数失败,'+sqlca.SQLErrText
  2043. GOTO _failandnext
  2044. END IF
  2045. ELSE // Marker: 最后工组完工
  2046. SELECT u_mtrlware_mx.getbarid,
  2047. u_getbar.orderid,
  2048. u_Order_ml.mtrlid,
  2049. u_Order_ml.status_mode,
  2050. u_Order_ml.woodcode,
  2051. u_Order_ml.pcode,
  2052. u_OrderMtrl_workgroup.wrkGrpid,
  2053. u_OrderMtrl_workgroup.wkpname,
  2054. u_OrderMtrl_workgroup.requiredate,
  2055. u_getbar.scid,
  2056. u_mtrlware_mx.packqty * u_mtrlware_mx.qty AS packqty,
  2057. u_getbar.ifrel,
  2058. u_getbar.storageid,
  2059. u_getbar.cusid,
  2060. u_getbar.plancode,
  2061. u_getbar.mtrlcuscode,
  2062. u_getbar.location
  2063. INTO :ll_getbarid,
  2064. :ll_orderid,
  2065. :ll_f_mtrlid,
  2066. :ls_f_status,
  2067. :ls_f_woodcode,
  2068. :ls_f_pcode,
  2069. :ll_wrkgrpid,
  2070. :ls_wkpname,
  2071. :ld_f_requiredate,
  2072. :ll_scid,
  2073. :ld_packqty,
  2074. :ll_ifrel,
  2075. :ll_storageid,
  2076. :ll_cusid,
  2077. :ls_plancode,
  2078. :ls_mtrlcuscode,
  2079. :ls_location
  2080. FROM u_mtrlware_mx INNER JOIN
  2081. u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN
  2082. u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN
  2083. u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND
  2084. u_OrderMtrl_workgroup.iflast = 1
  2085. Where (u_mtrlware_mx.barcode = :ls_barcode);
  2086. IF sqlca.SQLCode <> 0 THEN
  2087. arg_msg += '4.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  2088. GOTO _failandnext
  2089. END IF
  2090. IF arg_replace THEN
  2091. SELECT COUNT(0)
  2092. INTO :cnt
  2093. FROM u_mtrlware_mx INNER JOIN
  2094. u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN
  2095. u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN
  2096. u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND
  2097. u_OrderMtrl_workgroup.iflast = 1
  2098. WHERE (u_mtrlware_mx.getbarid <> :ll_getbarid)
  2099. AND (u_Order_ml.status_mode = :ls_f_status)
  2100. AND (u_OrderMtrl_workgroup.wkpname = :ls_wkpname)
  2101. AND (u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid)
  2102. AND (u_Order_ml.pcode = :ls_f_pcode)
  2103. AND (u_Order_ml.woodcode = :ls_f_woodcode)
  2104. AND (u_Order_ml.mtrlid = :ll_f_mtrlid)
  2105. AND (NOT EXISTS
  2106. (SELECT 1
  2107. FROM u_order_wkp_barcode_pda
  2108. WHERE (barcode = u_mtrlware_mx.barcode) AND (kind = 2)))
  2109. AND (u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate)
  2110. AND (u_getbar.orderid <> :ll_orderid)
  2111. AND (u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :ld_packqty)
  2112. AND (u_getbar.ifrel = :ll_ifrel)
  2113. AND (u_getbar.storageid = :ll_storageid)
  2114. AND (u_getbar.cusid = :ll_cusid)
  2115. AND (u_getbar.plancode = :ls_plancode)
  2116. AND (u_getbar.mtrlcuscode = :ls_mtrlcuscode)
  2117. AND (u_getbar.Location = :ls_location)
  2118. And (u_mtrlware_mx.inflag = 0);
  2119. IF sqlca.SQLCode <> 0 THEN
  2120. arg_msg += '查询可替换最后工组失败,'+sqlca.SQLErrText
  2121. GOTO _failandnext
  2122. END IF
  2123. IF cnt > 0 THEN
  2124. SELECT TOP 1 u_mtrlware_mx.getbarid,
  2125. u_mtrlware_mx.barcode,
  2126. u_getbar.scid,
  2127. u_getbar.orderid
  2128. INTO :ll_r_getbarid,
  2129. :ls_r_barcode,
  2130. :ll_r_scid,
  2131. :ll_r_orderid
  2132. FROM u_mtrlware_mx INNER JOIN
  2133. u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN
  2134. u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN
  2135. u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND
  2136. u_OrderMtrl_workgroup.iflast = 1
  2137. WHERE (u_mtrlware_mx.getbarid <> :ll_getbarid)
  2138. AND (u_Order_ml.status_mode = :ls_f_status)
  2139. AND (u_OrderMtrl_workgroup.wkpname = :ls_wkpname)
  2140. AND (u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid)
  2141. AND (u_Order_ml.pcode = :ls_f_pcode)
  2142. AND (u_Order_ml.woodcode = :ls_f_woodcode)
  2143. AND (u_Order_ml.mtrlid = :ll_f_mtrlid)
  2144. AND (NOT EXISTS
  2145. (SELECT 1
  2146. FROM u_order_wkp_barcode_pda
  2147. WHERE (barcode = u_mtrlware_mx.barcode) AND (kind = 2)))
  2148. AND (u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate)
  2149. AND (u_getbar.orderid <> :ll_orderid)
  2150. AND (u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :ld_packqty)
  2151. AND (u_getbar.ifrel = :ll_ifrel)
  2152. AND (u_getbar.storageid = :ll_storageid)
  2153. AND (u_getbar.cusid = :ll_cusid)
  2154. AND (u_getbar.plancode = :ls_plancode)
  2155. AND (u_getbar.mtrlcuscode = :ls_mtrlcuscode)
  2156. AND (u_getbar.Location = :ls_location)
  2157. And (u_mtrlware_mx.inflag = 0);
  2158. IF sqlca.SQLCode <> 0 THEN
  2159. arg_msg += '查询可替换信息失败,'+sqlca.SQLErrText
  2160. GOTO _failandnext
  2161. END IF
  2162. UPDATE u_mtrlware_mx SET
  2163. getbarid = :ll_r_getbarid,
  2164. scid = :ll_r_scid,
  2165. orderid = :ll_r_orderid
  2166. Where barcode = :ls_barcode;
  2167. IF sqlca.SQLCode <> 0 THEN
  2168. arg_msg += '更改当前条码的条码生成单失败,'+sqlca.SQLErrText
  2169. GOTO _failandnext
  2170. END IF
  2171. UPDATE u_mtrlware_mx SET
  2172. getbarid = :ll_getbarid,
  2173. scid = :ll_scid,
  2174. orderid = :ll_orderid
  2175. Where barcode = :ls_r_barcode;
  2176. IF sqlca.SQLCode <> 0 THEN
  2177. arg_msg += '更改被替换条码的条码生成单失败,'+sqlca.SQLErrText
  2178. GOTO _failandnext
  2179. END IF
  2180. ll_scid = ll_r_scid
  2181. ll_orderid = ll_r_orderid
  2182. END IF
  2183. END IF
  2184. // SELECT TOP 1 u_ordermtrl_workgroup_barcode.barcode
  2185. // INTO :ls_p_barcode
  2186. // FROM u_ordermtrl_workgroup_barcode INNER JOIN
  2187. // u_ordermtrl_workgroup_barcode AS u_ordermtrl_workgroup_barcode_p ON
  2188. // u_ordermtrl_workgroup_barcode.scid = u_ordermtrl_workgroup_barcode_p.scid AND
  2189. // u_ordermtrl_workgroup_barcode.orderid = u_ordermtrl_workgroup_barcode_p.orderid AND
  2190. // u_ordermtrl_workgroup_barcode.swkpid = u_ordermtrl_workgroup_barcode_p.owkpid AND
  2191. // u_ordermtrl_workgroup_barcode.barcode = u_ordermtrl_workgroup_barcode_p.barcode
  2192. // WHERE (u_ordermtrl_workgroup_barcode_p.oflag = 1)
  2193. // AND (u_ordermtrl_workgroup_barcode_p.ptflag = 1)
  2194. // AND (u_ordermtrl_workgroup_barcode.swkpid = :ll_wrkgrpid)
  2195. // AND (u_ordermtrl_workgroup_barcode.scid = :ll_scid)
  2196. // AND (u_ordermtrl_workgroup_barcode.orderid = :ll_orderid)
  2197. // And (u_ordermtrl_workgroup_barcode.ptflag = 0);
  2198. // IF sqlca.SQLCode <> 0 THEN
  2199. // arg_msg += '查询最后工组未配对部件条码失败,'+sqlca.SQLErrText
  2200. // GOTO _failandnext
  2201. // END IF
  2202. //
  2203. // UPDATE u_ordermtrl_workgroup_barcode SET sflag = 1, ptflag = 1
  2204. // WHERE barcode = :ls_p_barcode
  2205. // AND swkpid = :ll_wrkgrpid
  2206. // AND orderid = :ll_orderid
  2207. // AND scid = :ll_scid
  2208. // And ptflag = 0;
  2209. // IF sqlca.SQLCode <> 0 THEN
  2210. // arg_msg += '更新最后工组未配对部件条码失败,'+sqlca.SQLErrText
  2211. // GOTO _failandnext
  2212. // END IF
  2213. //
  2214. // IF sqlca.SQLNRows <> 1 THEN
  2215. // arg_msg += '更新最后工组未配对部件条码失败,条码已被更新'
  2216. // GOTO _failandnext
  2217. // END IF
  2218. SELECT isnull(MIN(finishqty),0)
  2219. INTO :ld_maxqty
  2220. FROM u_OrderMtrl_workgroup
  2221. WHERE (scid = :ll_scid)
  2222. AND (orderid = :ll_orderid)
  2223. And (owrkGrpid = :ll_wrkgrpid);
  2224. IF sqlca.SQLCode <> 0 THEN
  2225. arg_msg += '查询最后工组可完成数失败,'+sqlca.SQLErrText
  2226. GOTO _failandnext
  2227. END IF
  2228. IF ld_maxqty > 0 THEN
  2229. SELECT finishqty
  2230. INTO :ld_finishqty
  2231. FROM u_OrderMtrl_workgroup
  2232. WHERE scid = :ll_scid
  2233. AND orderid = :ll_orderid
  2234. AND wrkgrpid = :ll_wrkgrpid
  2235. And iflast = 1;
  2236. IF sqlca.SQLCode <> 0 THEN
  2237. arg_msg += '查询最后工组已完成数失败,'+sqlca.SQLErrText
  2238. GOTO _failandnext
  2239. END IF
  2240. IF ld_finishqty + ld_packqty > ld_maxqty THEN
  2241. arg_msg += '上工组未配套,上工组配套数:' + String(ld_maxqty,'#,##0.#####') + ',已完成数:' + String(ld_finishqty,'#,##0.#####') + ',本次完成数:' + String(ld_packqty,'#,##0.#####')
  2242. GOTO _failandnext
  2243. END IF
  2244. END IF
  2245. UPDATE u_OrderMtrl_workgroup_tree
  2246. SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_packqty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_packqty END ,
  2247. u_ordermtrl_workgroup_tree.sdate = :ldt_opdate
  2248. WHERE scid = :ll_scid
  2249. AND orderid = :ll_orderid
  2250. AND iflast = 1
  2251. And u_OrderMtrl_workgroup_tree.sqty < u_OrderMtrl_workgroup_tree.orderqty;
  2252. IF sqlca.SQLCode <> 0 THEN
  2253. arg_msg += '更新最后工组已完成数失败,'+sqlca.SQLErrText
  2254. GOTO _failandnext
  2255. END IF
  2256. arg_mxbt++
  2257. arg_barcode[arg_mxbt] = ls_barcode
  2258. arg_wrkgrpid[arg_mxbt] = ll_wrkgrpid
  2259. arg_opdate[arg_mxbt] = ldt_opdate
  2260. END IF
  2261. _okandnext:
  2262. IF li_kind <> 2 THEN
  2263. // SELECT sum(s_qty.minsqty)
  2264. // INTO :ld_addqty
  2265. // FROM u_OrderMtrl_workgroup INNER JOIN
  2266. // (SELECT scid, orderid, swkpid, MIN(sqty) AS minsqty
  2267. // FROM (SELECT scid, orderid, swkpid, SUM(sflag) AS sqty, relname,
  2268. // partname
  2269. // FROM u_ordermtrl_workgroup_barcode
  2270. // WHERE sflag = 1
  2271. // AND CONVERT(varchar(10), sdate, 120) = CONVERT(varchar(10), :ldt_fdate, 120)
  2272. // GROUP BY scid, orderid, swkpid, relname, partname) a
  2273. // GROUP BY scid, orderid, swkpid) s_qty ON
  2274. // u_OrderMtrl_workgroup.scid = s_qty.scid AND
  2275. // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND
  2276. // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid
  2277. // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  2278. // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  2279. // AND (u_OrderMtrl_workgroup.wrkgrpid = :ll_wrkgrpid)
  2280. // And (u_OrderMtrl_workgroup.iflast = 0);
  2281. // IF sqlca.SQLCode <> 0 THEN
  2282. // ld_addqty = 0
  2283. // END IF
  2284. //
  2285. // IF ld_addqty > 0 THEN
  2286. // UPDATE u_OrderMtrl_workgroup_date
  2287. // SET fqty = :ld_addqty
  2288. // WHERE scid = :ll_scid
  2289. // AND orderid = :ll_orderid
  2290. // AND wrkgrpid = :ll_wrkgrpid
  2291. // And fdate = :ldt_fdate;
  2292. // IF sqlca.SQLCode = 0 THEN
  2293. // IF sqlca.SQLNRows = 0 THEN
  2294. // INSERT INTO u_OrderMtrl_workgroup_date
  2295. // (scid,orderid,wrkgrpid,fdate,fqty)
  2296. // VALUES
  2297. // (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_addqty);
  2298. // IF sqlca.SQLCode <> 0 THEN
  2299. // ROLLBACK;
  2300. // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  2301. // ll_fail++
  2302. // CONTINUE
  2303. // END IF
  2304. // END IF
  2305. // ELSE
  2306. // ROLLBACK;
  2307. // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  2308. // ll_fail++
  2309. // CONTINUE
  2310. // END IF
  2311. // END IF
  2312. IF li_kind = 0 THEN
  2313. FOR ls_p = 1 To ll_mxbt
  2314. IF ll_orderid = ll_orderid_arr[ls_p] And ll_scid = ll_scid_arr[ls_p] THEN
  2315. GOTO _find_wrk
  2316. END IF
  2317. NEXT
  2318. ll_mxbt++
  2319. ls_orderstr_arr[ll_mxbt] = String(ll_orderid)+'_'+String(ll_scid)
  2320. ll_orderid_arr[ll_mxbt] = ll_orderid
  2321. ll_scid_arr[ll_mxbt] = ll_scid
  2322. _find_wrk:
  2323. FOR ls_p = 1 To ll_mxbt_wrk
  2324. IF ll_orderid = ll_orderid_wkp[ls_p] And ll_scid = ll_scid_wkp[ls_p] And ll_wrkgrpid = ll_wrkgrpid_arr[ls_p] THEN
  2325. GOTO _find_end
  2326. END IF
  2327. NEXT
  2328. ll_mxbt_wrk++
  2329. ll_orderid_wkp[ll_mxbt_wrk] = ll_orderid
  2330. ll_scid_wkp[ll_mxbt_wrk] = ll_scid
  2331. ll_wrkgrpid_arr[ll_mxbt_wrk] = ll_wrkgrpid
  2332. _find_end:
  2333. END IF
  2334. //
  2335. // UPDATE u_OrderMtrl_workgroup
  2336. // SET u_OrderMtrl_workgroup.finishqty = s_qty.minsqty
  2337. // FROM u_OrderMtrl_workgroup INNER JOIN
  2338. // (SELECT scid, orderid, swkpid, workgroupid,MIN(sqty) AS minsqty
  2339. // FROM (SELECT scid, orderid, swkpid,workgroupid, SUM(sflag) AS sqty, relname,
  2340. // partname
  2341. // FROM u_ordermtrl_workgroup_barcode
  2342. // GROUP BY scid, orderid, swkpid, relname, partname,workgroupid) a
  2343. // GROUP BY scid, orderid, swkpid,workgroupid) s_qty ON
  2344. // u_OrderMtrl_workgroup.scid = s_qty.scid AND
  2345. // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND
  2346. // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid and
  2347. // u_OrderMtrl_workgroup.workgroupid = s_qty.workgroupid
  2348. // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  2349. // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  2350. // And (u_OrderMtrl_workgroup.iflast = 0);
  2351. // IF sqlca.SQLCode <> 0 THEN
  2352. // ROLLBACK;
  2353. // arg_msg = '更新工组进度失败,'+sqlca.SQLErrText
  2354. // ll_fail++
  2355. // CONTINUE
  2356. // END IF
  2357. ELSE
  2358. IF ld_packqty > 0 THEN
  2359. UPDATE u_OrderMtrl_workgroup_date
  2360. SET fqty = fqty + :ld_packqty
  2361. WHERE scid = :ll_scid
  2362. AND orderid = :ll_orderid
  2363. AND wrkgrpid = :ll_wrkgrpid
  2364. And fdate = :ldt_fdate;
  2365. IF sqlca.SQLCode = 0 THEN
  2366. IF sqlca.SQLNRows = 0 THEN
  2367. INSERT INTO u_OrderMtrl_workgroup_date
  2368. (scid,orderid,wrkgrpid,fdate,fqty)
  2369. VALUES
  2370. (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_packqty);
  2371. IF sqlca.SQLCode <> 0 THEN
  2372. arg_msg += '更新工组当天进度失败,'+sqlca.SQLErrText
  2373. GOTO _failandnext
  2374. END IF
  2375. END IF
  2376. ELSE
  2377. arg_msg += '更新工组当天进度失败,'+sqlca.SQLErrText
  2378. GOTO _failandnext
  2379. END IF
  2380. END IF
  2381. UPDATE u_OrderMtrl_workgroup
  2382. SET u_OrderMtrl_workgroup.finishqty = case when u_OrderMtrl_workgroup.finishqty + :ld_packqty > u_OrderMtrl_workgroup.orderqty then u_OrderMtrl_workgroup.orderqty else u_OrderMtrl_workgroup.finishqty + :ld_packqty END
  2383. FROM u_OrderMtrl_workgroup INNER JOIN
  2384. u_sc_workgroup ON
  2385. u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid
  2386. WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  2387. AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  2388. AND (u_OrderMtrl_workgroup.iflast = 1)
  2389. AND (u_sc_workgroup.jdtype = 6)
  2390. And (u_OrderMtrl_workgroup.finishqty < u_OrderMtrl_workgroup.orderqty);
  2391. IF sqlca.SQLCode <> 0 THEN
  2392. arg_msg += '更新工组进度失败,'+sqlca.SQLErrText
  2393. GOTO _failandnext
  2394. END IF
  2395. END IF
  2396. UPDATE u_OrderMtrl_workgroup
  2397. SET finishflag = 1,finishdate = :server_dt
  2398. WHERE orderid = :ll_orderid
  2399. AND scid = :ll_scid
  2400. And orderqty <= finishqty + stopqty;
  2401. IF sqlca.SQLCode <> 0 THEN
  2402. arg_msg += '更新工组完成状态失败,'+sqlca.SQLErrText
  2403. GOTO _failandnext
  2404. END IF
  2405. COMMIT;
  2406. ll_suc++
  2407. CONTINUE
  2408. _failandnext:
  2409. ROLLBACK;
  2410. ll_fail++
  2411. UPDATE u_order_wkp_barcode_pda
  2412. SET flag = 2
  2413. WHERE barcode = :ls_barcode
  2414. AND wrkgrpid = :ll_wrkgrpid
  2415. And Kind = :li_kind;
  2416. IF sqlca.SQLCode <> 0 THEN
  2417. arg_msg += '更新条码错误状态失败,'+sqlca.SQLErrText
  2418. ROLLBACK;
  2419. ELSE
  2420. COMMIT;
  2421. END IF
  2422. CONTINUE
  2423. NEXT
  2424. FOR ll_k = 1 To ll_mxbt_wrk
  2425. IF uof_workgroup_barcode_pt(ll_scid_wkp[ll_k], ll_orderid_wkp[ll_k], ll_wrkgrpid_arr[ll_k], ls_msg, True) <> 1 THEN
  2426. arg_msg += '工组自动配套失败,' + ls_msg
  2427. END IF
  2428. NEXT
  2429. IF arg_finishbarcode THEN
  2430. IF sc_task.uf_finishbarcode(arg_wrkgrpid, arg_barcode, arg_opdate, ls_msg) <> 1 THEN
  2431. rslt = 0
  2432. arg_msg += '生成工序完工单失败,' + ls_msg
  2433. GOTO ext
  2434. END IF
  2435. END IF
  2436. ext:
  2437. Destroy sc_task
  2438. Destroy ds_order_wkp
  2439. Destroy ds_update_wrk
  2440. Destroy ds_relname
  2441. Destroy ds_mx
  2442. Destroy ds_pda
  2443. arg_cnt = ll_suc
  2444. arg_failcnt = ll_fail
  2445. RETURN rslt
  2446. end function
  2447. public function integer uof_order_wkp_barcode_pda (boolean arg_replace, boolean arg_finishbarcode, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);//====================================================================
  2448. // 事件: .f_order_wkp_barcode_pda()
  2449. //--------------------------------------------------------------------
  2450. // 描述:
  2451. //--------------------------------------------------------------------
  2452. // 参数:
  2453. // value boolean arg_replace 优先完成时间较早的计划
  2454. // reference string arg_msg
  2455. // reference long arg_cnt
  2456. // reference long arg_failcnt
  2457. //--------------------------------------------------------------------
  2458. // 返回: integer
  2459. //--------------------------------------------------------------------
  2460. // 作者: lwl 日期: 2012年02月24日
  2461. //--------------------------------------------------------------------
  2462. // LONGJOE
  2463. //--------------------------------------------------------------------
  2464. // 修改历史:
  2465. //
  2466. //====================================================================
  2467. Int rslt = 1
  2468. s_p_barcode_pda arr_bars[]
  2469. String arg_barcode[]
  2470. Long arg_wrkgrpid[]
  2471. DateTime arg_opdate[]
  2472. Long j = 0
  2473. uo_partbarcode uo_bar
  2474. uo_bar = Create uo_partbarcode
  2475. uo_sc_task_finish sc_task
  2476. sc_task = Create uo_sc_task_finish
  2477. IF pf_get_barcodes_notflag(Ref arr_bars, Ref arg_msg) <> 1 THEN
  2478. rslt = 0
  2479. GOTO ext
  2480. END IF
  2481. arg_cnt = 0
  2482. arg_failcnt = 0
  2483. Long i
  2484. String ls_msg
  2485. FOR i = 1 To UpperBound(arr_bars)
  2486. UPDATE u_order_wkp_barcode_pda
  2487. SET flag = 1
  2488. WHERE barcode = :arr_bars[i].barcode
  2489. AND wrkgrpid = :arr_bars[i].wrkgrpid
  2490. AND kind = :arr_bars[i].kind
  2491. And flag = :arr_bars[i].flag;
  2492. IF sqlca.SQLCode <> 0 THEN
  2493. ls_msg = '更新PDA部件条码标记失败,' + sqlca.SQLErrText
  2494. GOTO _failt
  2495. END IF
  2496. IF sqlca.SQLNRows <= 0 THEN
  2497. ls_msg = '条码被其它任务占用,本任务终止'
  2498. GOTO _failt
  2499. END IF
  2500. IF arr_bars[i].Kind = 0 THEN
  2501. IF uo_bar.uf_finish_barcode(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opemp, arr_bars[i].opdate, arr_bars[i].workgroupid, arg_replace, Ref ls_msg, False) <> 1 THEN
  2502. GOTO _failt
  2503. END IF
  2504. ELSEIF arr_bars[i].Kind = 1 THEN
  2505. IF uo_bar.uf_o_barcode(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opemp, arr_bars[i].opdate, Ref ls_msg, False) <> 1 THEN
  2506. GOTO _failt
  2507. END IF
  2508. ELSEIF arr_bars[i].Kind = 2 THEN
  2509. IF uo_bar.uf_finish_barcode_last(arr_bars[i].wrkgrpid, arr_bars[i].barcode, arr_bars[i].opdate, arg_replace, Ref ls_msg, False) <> 1 THEN
  2510. GOTO _failt
  2511. END IF
  2512. END IF
  2513. arg_cnt++
  2514. COMMIT;
  2515. IF sqlca.SQLCode <> 0 THEN
  2516. rslt = 0
  2517. arg_msg = '事务提交失败,' + sqlca.SQLErrText
  2518. GOTO ext
  2519. END IF
  2520. IF arg_finishbarcode And (arr_bars[i].Kind = 0 Or arr_bars[i].Kind = 2) THEN
  2521. j++
  2522. arg_barcode[j] = arr_bars[i].barcode
  2523. arg_wrkgrpid[j] = arr_bars[i].wrkgrpid
  2524. arg_opdate[j] = arr_bars[i].opdate
  2525. END IF
  2526. CONTINUE
  2527. _failt:
  2528. arg_failcnt ++
  2529. ROLLBACK;
  2530. IF sqlca.SQLCode <> 0 THEN
  2531. rslt = 0
  2532. arg_msg = '事务回滚失败,' + sqlca.SQLErrText
  2533. GOTO ext
  2534. END IF
  2535. arg_msg += ls_msg
  2536. UPDATE u_order_wkp_barcode_pda
  2537. SET errmsg = :ls_msg,
  2538. flag = 2
  2539. WHERE barcode = :arr_bars[i].barcode
  2540. AND wrkgrpid = :arr_bars[i].wrkgrpid
  2541. And Kind = :arr_bars[i].Kind
  2542. And flag = :arr_bars[i].flag;
  2543. IF sqlca.SQLCode <> 0 THEN
  2544. rslt = 0
  2545. arg_msg = '更新PDA部件条码错误信息失败,' + sqlca.SQLErrText
  2546. GOTO ext
  2547. END IF
  2548. COMMIT;
  2549. IF sqlca.SQLCode <> 0 THEN
  2550. rslt = 0
  2551. arg_msg = '事务提交失败,' + sqlca.SQLErrText
  2552. GOTO ext
  2553. END IF
  2554. NEXT
  2555. ext:
  2556. IF arg_finishbarcode AND UpperBound(arg_barcode) > 0 THEN
  2557. IF sc_task.uf_finishbarcode(arg_wrkgrpid, arg_barcode, arg_opdate, ls_msg) <> 1 THEN
  2558. rslt = 0
  2559. arg_msg = '生成工序完工单失败,' + ls_msg
  2560. END IF
  2561. END IF
  2562. Destroy uo_bar
  2563. Destroy sc_task
  2564. RETURN rslt
  2565. end function
  2566. private function integer pf_get_barcodes_notflag (ref s_p_barcode_pda arg_bars[], ref string arg_msg);// 获取所有未处理的条码
  2567. Int rslt = 1
  2568. s_p_barcode_pda arr_bars[]
  2569. Long i = 0
  2570. String barcode,opemp
  2571. Long wrkgrpid,Kind,flag,workgroupid
  2572. DateTime opdate
  2573. DECLARE cur1 CURSOR FOR SELECT barcode,wrkgrpid,kind,flag,opemp,opdate,workgroupid
  2574. FROM u_order_wkp_barcode_pda
  2575. Where flag <> 1;
  2576. OPEN cur1;
  2577. FETCH cur1 Into :barcode,:wrkgrpid,:Kind,:flag,:opemp,:opdate,:workgroupid;
  2578. DO WHILE sqlca.SQLCode = 0
  2579. i++
  2580. arr_bars[i].barcode = barcode
  2581. arr_bars[i].wrkgrpid = wrkgrpid
  2582. arr_bars[i].Kind = Kind
  2583. arr_bars[i].flag = flag
  2584. arr_bars[i].opemp = opemp
  2585. arr_bars[i].opdate = opdate
  2586. arr_bars[i].workgroupid = workgroupid
  2587. FETCH cur1 Into :barcode,:wrkgrpid,:Kind,:flag,:opemp,:opdate,:workgroupid;
  2588. LOOP
  2589. CLOSE cur1;
  2590. arg_bars = arr_bars
  2591. RETURN rslt
  2592. end function
  2593. public function integer uf_cmpl_cost_balcdateint (ref string arg_msg);//If MessageBox('确认','本功能将按各仓库最近一次结存数据为目标重算,为确保重算成本的准确,请尽量把各仓库同时结存'+'~r~n'+'确定要继续执行本功能?',question!,yesno!) = 2 Then Return
  2594. datastore ds_warebalc
  2595. ds_warebalc = Create datastore
  2596. ds_warebalc.DataObject = 'ds_cmpl_cost_balcdateint_warebalc'
  2597. ds_warebalc.SetTransObject(sqlca)
  2598. datastore ds_mtrlcost
  2599. ds_mtrlcost = Create datastore
  2600. ds_mtrlcost.DataObject = 'ds_rp_mtrlprice'
  2601. ds_mtrlcost.SetTransObject(sqlca)
  2602. datastore ds_inwaremx
  2603. ds_inwaremx = Create datastore
  2604. ds_inwaremx.DataObject = 'ds_inwaremx_cmpl_balcdateint'
  2605. ds_inwaremx.SetTransObject(sqlca)
  2606. Int li_status_step = 0 //当前步骤
  2607. s_mtrlprice_mx arg_s_mx[],arg_s_empty[]
  2608. Long ll_i,ll_j
  2609. Long ll_storageid,ll_balcdateint,ll_mtrlid,ll_sptid,ll_scid,ll_mtrlwareid
  2610. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location
  2611. Decimal ld_inqty,ld_inamt,ld_cost,ld_bgqty,ld_bgamt
  2612. Decimal ld_inqty_sum,ld_inamt_sum
  2613. String ls_storagename,ls_mtrlcode,ls_mtrlname
  2614. //String arg_msg
  2615. Int rslt
  2616. Int li_statusflag,li_woodcodeflag,li_pcodeflag
  2617. String ls_status_config,ls_woodcode_config,ls_pcode_config
  2618. String ls_pfcode
  2619. Decimal ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_otherprice,ld_eqprice,ld_outcost_self
  2620. Long sumdate
  2621. Int li_dec
  2622. String ls_msg
  2623. Long ll_fail
  2624. Long ll_row
  2625. String ls_findstr
  2626. //开始
  2627. //ins_ifstart = 1
  2628. //p_1.PictureName = 'waiting.jpg'
  2629. //st_per_1.Visible = False
  2630. //hpb_1.Visible = False
  2631. //st_msg_1.Visible = False
  2632. //p_2.PictureName = 'waiting.jpg'
  2633. //st_per_2.Visible = False
  2634. //hpb_2.Visible = False
  2635. //st_msg_2.Visible = False
  2636. //p_3.PictureName = 'waiting.jpg'
  2637. //st_per_3.Visible = False
  2638. //st_msg_3.Visible = False
  2639. //p_4.PictureName = 'waiting.jpg'
  2640. //st_per_4.Visible = False
  2641. //hpb_4.Visible = False
  2642. //st_msg_4.Visible = False
  2643. //
  2644. //p_5.PictureName = 'waiting.jpg'
  2645. //st_per_5.Visible = False
  2646. //st_msg_5.Visible = False
  2647. li_dec = 2
  2648. uo_cmplcost uo_cmpl
  2649. uo_cmpl = Create uo_cmplcost
  2650. rslt = 1
  2651. //1.计算采购物料成本价
  2652. li_status_step = 1
  2653. ds_warebalc.Retrieve(2)
  2654. ds_inwaremx.Retrieve(2)
  2655. //p_1.PictureName = 'doing.jpg'
  2656. //hpb_1.MinPosition = 0
  2657. //hpb_1.MaxPosition = ds_warebalc.RowCount()
  2658. //hpb_1.Position = 0
  2659. //
  2660. //hpb_1.Visible = True
  2661. //st_per_1.Visible = True
  2662. For ll_i = 1 To ds_warebalc.RowCount()
  2663. ll_storageid = ds_warebalc.Object.storageid[ll_i]
  2664. ll_balcdateint = ds_warebalc.Object.balcdateint[ll_i]
  2665. ll_mtrlid = ds_warebalc.Object.mtrlid[ll_i]
  2666. ll_sptid = ds_warebalc.Object.sptid[ll_i]
  2667. ls_status = ds_warebalc.Object.status[ll_i]
  2668. ls_woodcode = ds_warebalc.Object.woodcode[ll_i]
  2669. ls_pcode = ds_warebalc.Object.pcode[ll_i]
  2670. ls_plancode = ds_warebalc.Object.plancode[ll_i]
  2671. ls_mtrlcuscode = ds_warebalc.Object.mtrlcuscode[ll_i]
  2672. ls_location = ds_warebalc.Object.Location[ll_i]
  2673. ld_bgqty = ds_warebalc.Object.bgqty[ll_i]
  2674. ld_bgamt = ds_warebalc.Object.bgamt[ll_i]
  2675. ll_scid = ds_warebalc.Object.scid[ll_i]
  2676. ls_storagename = ds_warebalc.Object.storagename[ll_i]
  2677. ls_mtrlcode = ds_warebalc.Object.mtrlcode[ll_i]
  2678. ls_mtrlname = ds_warebalc.Object.mtrlname[ll_i]
  2679. ll_mtrlwareid = ds_warebalc.Object.mtrlwareid[ll_i]
  2680. ls_findstr = 'balcdateint = '+String(ll_balcdateint) + ' and storageid = '+String(ll_storageid)
  2681. ls_findstr = ls_findstr + ' and mtrlid = '+String(ll_mtrlid) + ' and status = "'+ls_status+'" '
  2682. ls_findstr = ls_findstr + ' and woodcode = "'+ ls_woodcode + '" and pcode = "'+ls_pcode+'" '
  2683. ls_findstr = ls_findstr + ' and plancode = "'+ ls_plancode + '" and mtrlcuscode = "'+ls_mtrlcuscode+'" '
  2684. ls_findstr = ls_findstr + ' and location = "'+ ls_location + '" and scid = '+String(ll_scid)
  2685. ll_row = ds_inwaremx.Find(ls_findstr,1,ds_inwaremx.RowCount())
  2686. If ll_row > 0 Then
  2687. ld_inamt = ds_inwaremx.Object.inamt[ll_row]
  2688. ld_inqty = ds_inwaremx.Object.inqty[ll_row]
  2689. ds_inwaremx.DeleteRow(ll_row)
  2690. Else
  2691. ld_inamt = 0
  2692. ld_inqty = 0
  2693. End If
  2694. // SELECT sum(u_inwaremx.cost * u_inwaremx.qty),
  2695. // sum(u_inwaremx.qty)
  2696. // INTO :ld_inamt,
  2697. // :ld_inqty
  2698. // FROM u_inware INNER JOIN
  2699. // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND
  2700. // u_inware.inwareid = u_inwaremx.inwareid
  2701. // WHERE (u_inware.balcdateint = :ll_balcdateint)
  2702. // AND (u_inware.thflag = 0)
  2703. // AND (u_inware.storageid = :ll_storageid)
  2704. // AND (u_inwaremx.mtrlid = :ll_mtrlid)
  2705. // AND (u_inwaremx.status = :ls_status)
  2706. // AND (u_inwaremx.woodcode = :ls_woodcode)
  2707. // AND (u_inwaremx.pcode = :ls_pcode)
  2708. // AND (u_inwaremx.plancode = :ls_plancode)
  2709. // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode)
  2710. // AND (u_inwaremx.Location = :ls_location)
  2711. // And (u_inware.scid = :ll_scid);
  2712. // IF sqlca.SQLCode <> 0 THEN
  2713. // ld_inamt = 0
  2714. // ld_inqty = 0
  2715. // END IF
  2716. If IsNull(ld_inamt) Then ld_inamt = 0
  2717. If IsNull(ld_inqty) Then ld_inqty = 0
  2718. If ld_bgamt < 0 Then
  2719. If ld_inqty > 0 Then
  2720. ld_bgamt = ld_bgqty * (ld_inamt / ld_inqty)
  2721. Else
  2722. Select top 1 cost
  2723. Into :ld_cost
  2724. From u_mtrlware
  2725. Where scid = :ll_scid
  2726. And mtrlwareid = :ll_mtrlwareid;
  2727. If sqlca.SQLCode <> 0 Then
  2728. ld_cost = 0
  2729. End If
  2730. ld_bgamt = ld_bgqty * ld_cost
  2731. End If
  2732. End If
  2733. If ld_bgqty + ld_inqty <> 0 Then
  2734. ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty)
  2735. End If
  2736. If ld_bgqty + ld_inqty <> 0 Then
  2737. ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty)
  2738. End If
  2739. If (ld_bgqty + ld_inqty = 0) Or ld_cost < 0 Then
  2740. Select top 1 cost
  2741. Into :ld_cost
  2742. From u_mtrlware
  2743. Where scid = :ll_scid
  2744. And mtrlwareid = :ll_mtrlwareid;
  2745. If sqlca.SQLCode <> 0 Then
  2746. ld_cost = 0
  2747. End If
  2748. End If
  2749. If IsNull(ld_cost) Then ld_cost = 0
  2750. Update u_inwaremx
  2751. Set u_inwaremx.cost = :ld_cost
  2752. From u_inware Inner JOIN
  2753. u_inwaremx ON u_inware.scid = u_inwaremx.scid And
  2754. u_inware.inwareid = u_inwaremx.inwareid
  2755. Where (u_inware.balcdateint = :ll_balcdateint)
  2756. And (u_inware.thflag = 1)
  2757. And (u_inware.storageid = :ll_storageid)
  2758. And (u_inwaremx.mtrlid = :ll_mtrlid)
  2759. And (u_inwaremx.status = :ls_status)
  2760. And (u_inwaremx.woodcode = :ls_woodcode)
  2761. And (u_inwaremx.pcode = :ls_pcode)
  2762. And (u_inwaremx.plancode = :ls_plancode)
  2763. And (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode)
  2764. And (u_inwaremx.Location = :ls_location)
  2765. And (u_inware.scid = :ll_scid);
  2766. If sqlca.SQLCode <> 0 Then
  2767. rslt = 0
  2768. arg_msg = '更新退货单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2769. Goto ext
  2770. End If
  2771. //更新当前仓库结存表的期间进仓
  2772. Select isnull(sum(u_inwaremx.qty),0),
  2773. isnull(sum(round(u_inwaremx.cost * u_inwaremx.qty,2)),0)
  2774. Into :ld_inqty_sum,
  2775. :ld_inamt_sum
  2776. From u_inware Inner JOIN
  2777. u_inwaremx ON u_inware.scid = u_inwaremx.scid And
  2778. u_inware.inwareid = u_inwaremx.inwareid
  2779. Where (u_inware.balcdateint = :ll_balcdateint)
  2780. And (u_inware.storageid = :ll_storageid)
  2781. And (u_inwaremx.mtrlid = :ll_mtrlid)
  2782. And (u_inwaremx.status = :ls_status)
  2783. And (u_inwaremx.woodcode = :ls_woodcode)
  2784. And (u_inwaremx.pcode = :ls_pcode)
  2785. And (u_inwaremx.plancode = :ls_plancode)
  2786. And (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode)
  2787. And (u_inwaremx.Location = :ls_location)
  2788. And (u_inware.scid = :ll_scid);
  2789. If sqlca.SQLCode = -1 Then
  2790. rslt = 0
  2791. arg_msg = '查询期间进仓失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2792. Goto ext
  2793. End If
  2794. // ld_inamt_sum = Round(ld_inqty * ld_cost,2)
  2795. // ld_inqty_sum = ld_inqty
  2796. If IsNull(ld_inqty_sum) Then ld_inqty_sum = 0
  2797. If IsNull(ld_inamt_sum) Then ld_inamt_sum = 0
  2798. Update u_warebalc
  2799. Set u_warebalc.incqty = :ld_inqty_sum,
  2800. u_warebalc.incamt = :ld_inamt_sum,
  2801. u_warebalc.bgamt = :ld_bgamt
  2802. Where u_warebalc.scid = :ll_scid
  2803. And u_warebalc.balcdateint = :ll_balcdateint
  2804. And u_warebalc.mtrlwareid = :ll_mtrlwareid;
  2805. If sqlca.SQLCode = -1 Then
  2806. rslt = 0
  2807. arg_msg = '更新结存表期间进数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2808. Goto ext
  2809. End If
  2810. If ld_bgqty + ld_inqty_sum <> 0 Then
  2811. ld_cost = (ld_bgamt + ld_inamt_sum) / (ld_bgqty + ld_inqty_sum)
  2812. If ld_cost > 0 Then
  2813. Update u_mtrlware
  2814. Set cost = :ld_cost,
  2815. wareamt = :ld_cost * noallocqty
  2816. Where scid = :ll_scid
  2817. And mtrlwareid = :ll_mtrlwareid;
  2818. If sqlca.SQLCode = -1 Then
  2819. rslt = 0
  2820. arg_msg = '更新库存成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2821. Goto ext
  2822. End If
  2823. End If
  2824. End If
  2825. //更新当前仓库所有出仓明细的成本价
  2826. Update u_outwaremx
  2827. Set u_outwaremx.cost = :ld_cost,
  2828. u_outwaremx.costamt = :ld_cost * qty
  2829. From u_outwaremx Inner JOIN
  2830. u_outware ON u_outwaremx.scid = u_outware.scid And
  2831. u_outwaremx.outwareid = u_outware.outwareid
  2832. Where u_outwaremx.scid = :ll_scid
  2833. And u_outwaremx.mtrlwareid = :ll_mtrlwareid
  2834. And u_outware.balcdateint = :ll_balcdateint;
  2835. If sqlca.SQLCode = -1 Then
  2836. rslt = 0
  2837. arg_msg = '更新出仓单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2838. Goto ext
  2839. End If
  2840. Update u_warebalc
  2841. Set u_warebalc.desamt = v_outwaremx.desamt
  2842. From u_warebalc Inner JOIN
  2843. (Select u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint,
  2844. SUM(u_outwaremx.costamt) AS desamt
  2845. From u_outware Inner JOIN
  2846. u_outwaremx ON u_outware.scid = u_outwaremx.scid And
  2847. u_outware.outwareid = u_outwaremx.outwareid
  2848. Where u_outwaremx.scid = :ll_scid
  2849. And u_outwaremx.mtrlwareid = :ll_mtrlwareid
  2850. And u_outware.balcdateint = :ll_balcdateint
  2851. Group By u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint)
  2852. v_outwaremx ON u_warebalc.scid = v_outwaremx.scid And
  2853. u_warebalc.balcdateint = v_outwaremx.balcdateint And
  2854. u_warebalc.mtrlwareid = v_outwaremx.mtrlwareid;
  2855. If sqlca.SQLCode = -1 Then
  2856. rslt = 0
  2857. arg_msg = '更新结存表期间出金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2858. Goto ext
  2859. End If
  2860. //重算一次结余数量,结余金额,并得出新的成本价
  2861. Update u_warebalc
  2862. Set balcqty = bgqty + incqty - desqty,
  2863. balcamt = bgamt + incamt - desamt
  2864. Where u_warebalc.scid = :ll_scid
  2865. And u_warebalc.balcdateint = :ll_balcdateint
  2866. And u_warebalc.mtrlwareid = :ll_mtrlwareid;
  2867. If sqlca.SQLCode = -1 Then
  2868. rslt = 0
  2869. arg_msg = '更新结存表结余数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  2870. Goto ext
  2871. End If
  2872. Commit;
  2873. // hpb_1.Position = ll_i
  2874. // st_per_1.Text = String(ll_i/ds_warebalc.RowCount(),'0.0%')
  2875. Next
  2876. //hpb_1.Visible = False
  2877. //st_per_1.Visible = False
  2878. //p_1.PictureName = 'done.jpg'
  2879. //2.统计产品最新成本
  2880. li_status_step = 2
  2881. //p_2.PictureName = 'doing.jpg'
  2882. Insert Into u_mtrlprice_sum
  2883. (mtrlid,
  2884. status,
  2885. woodcode,
  2886. pcode,
  2887. pfcode,
  2888. sumdate)
  2889. Select u_mtrl_configure.Mtrlid,
  2890. u_mtrl_configure.name,
  2891. '' AS woodcode,
  2892. '' AS pcode,
  2893. u_mtrl_configure.name ,
  2894. 0
  2895. From u_mtrl_configure Inner JOIN
  2896. u_mtrldef ON u_mtrl_configure.Mtrlid = u_mtrldef.mtrlid
  2897. Where (u_mtrldef.statusflag = 2) And (Not Exists
  2898. (Select *
  2899. From u_mtrlprice_sum
  2900. Where mtrlid = u_mtrl_configure.mtrlid And status = u_mtrl_configure.name And
  2901. woodcode = '' And pcode = ''));
  2902. If sqlca.SQLCode = -1 Then
  2903. rslt = 0
  2904. arg_msg = '插入新增的组合配置到统计列表失败,'+sqlca.SQLErrText
  2905. Goto ext
  2906. End If
  2907. Insert Into u_mtrlprice_sum
  2908. (mtrlid,
  2909. status,
  2910. woodcode,
  2911. pcode,
  2912. pfcode,
  2913. sumdate)
  2914. Select u_mtrldef.mtrlid,
  2915. CASE statusflag WHEN 4 THEN status_config ELSE '' End AS status,
  2916. CASE woodcodeflag WHEN 4 THEN woodcode_config ELSE '' End AS woodcode,
  2917. CASE pcodeflag WHEN 4 THEN pcode_config ELSE '' End AS pcode,
  2918. u_mtrl_pf.pfcode,
  2919. 0
  2920. From u_mtrldef Inner JOIN
  2921. u_mtrl_pf ON u_mtrldef.mtrlid = u_mtrl_pf.Mtrlid
  2922. Where (u_mtrldef.statusflag <> 2) And (u_mtrl_pf.Ifdft = 1) And (Not Exists
  2923. (Select *
  2924. From u_mtrlprice_sum
  2925. Where mtrlid = u_mtrldef.mtrlid And
  2926. status = CASE statusflag WHEN 4 THEN status_config ELSE '' End And
  2927. woodcode = CASE woodcodeflag WHEN 4 THEN woodcode_config ELSE '' End
  2928. And pcode = Case pcodeflag WHEN 4 Then pcode_config Else '' End));
  2929. If sqlca.SQLCode <> 0 Then
  2930. rslt = 0
  2931. arg_msg = '插入新增的产品及物料到统计列表失败,'+sqlca.SQLErrText
  2932. Goto ext
  2933. End If
  2934. Insert Into u_mtrlprice_sum
  2935. (mtrlid,
  2936. status,
  2937. woodcode,
  2938. pcode,
  2939. pfcode,
  2940. sumdate)
  2941. Select DISTINCT
  2942. u_Order_ml.mtrlid,
  2943. u_Order_ml.status_mode,
  2944. u_Order_ml.woodcode,
  2945. u_Order_ml.pcode,
  2946. CASE u_mtrldef.statusflag WHEN 2 THEN u_Order_ml.status_mode ELSE u_order_ml.pfcode
  2947. End AS pfcode,
  2948. 0
  2949. From u_Order_ml Inner JOIN
  2950. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  2951. Where (Not Exists
  2952. (Select *
  2953. From u_mtrlprice_sum
  2954. Where mtrlid = u_order_ml.mtrlid And status = u_Order_ml.status_mode And
  2955. woodcode = u_Order_ml.woodcode And pcode = u_Order_ml.pcode)) And
  2956. (u_Order_ml.status <> 0) And (u_mtrldef.statusflag = 4 Or u_mtrldef.woodcodeflag = 4 Or u_mtrldef.pcodeflag = 4);
  2957. If sqlca.SQLCode <> 0 Then
  2958. rslt = 0
  2959. arg_msg = '插入生产中涉及到的新部件选配产品到统计列表失败,'+sqlca.SQLErrText
  2960. Goto ext
  2961. End If
  2962. Commit;
  2963. ds_mtrlcost.Retrieve(0,'',1)
  2964. sumdate = Year(Date(Today())) * 10000 + Month(Date(Today())) * 100 + Day(Date(Today()))
  2965. /// //
  2966. //hpb_2.MinPosition = 0
  2967. //hpb_2.MaxPosition = ds_mtrlcost.RowCount()
  2968. //hpb_2.Position = 0
  2969. //
  2970. //hpb_2.Visible = True
  2971. //st_per_2.Visible = True
  2972. //
  2973. For ll_i = 1 To ds_mtrlcost.RowCount()
  2974. // hpb_2.Position = ll_i
  2975. // st_per_2.Text = String(ll_i/ds_mtrlcost.RowCount(),'0.0%')
  2976. ll_mtrlid = ds_mtrlcost.Object.mtrlid[ll_i]
  2977. ls_mtrlcode = ds_mtrlcost.Object.mtrlcode[ll_i]
  2978. ls_pfcode = ds_mtrlcost.Object.u_mtrlprice_sum_pfcode[ll_i]
  2979. ll_scid = ds_mtrlcost.Object.u_mtrldef_scid[ll_i]
  2980. ls_status = ds_mtrlcost.Object.status[ll_i]
  2981. ls_woodcode = ds_mtrlcost.Object.woodcode[ll_i]
  2982. ls_pcode = ds_mtrlcost.Object.pcode[ll_i]
  2983. li_statusflag = ds_mtrlcost.Object.statusflag[ll_i]
  2984. li_woodcodeflag = ds_mtrlcost.Object.woodcodeflag[ll_i]
  2985. li_pcodeflag = ds_mtrlcost.Object.pcodeflag[ll_i]
  2986. ls_status_config = ds_mtrlcost.Object.status_config[ll_i]
  2987. ls_woodcode_config = ds_mtrlcost.Object.woodcode_config[ll_i]
  2988. ls_pcode_config = ds_mtrlcost.Object.pcode_config[ll_i]
  2989. If ls_pfcode = '' Then Continue
  2990. ld_price = 0
  2991. ld_wfjgprice = 0
  2992. ld_outcost_self = 0
  2993. ld_outcost = 0
  2994. ld_wageprice = 0
  2995. ld_otherprice = 0
  2996. ld_eqprice = 0
  2997. arg_msg = ''
  2998. uo_cmpl.deep = 0
  2999. uo_cmpl.ifcmpl_1 = True
  3000. uo_cmpl.ins_cnt = 0
  3001. arg_s_mx = arg_s_empty
  3002. If (li_statusflag = 4 And ls_status <> ls_status_config Or &
  3003. li_woodcodeflag = 4 And ls_woodcode <> ls_woodcode_config Or &
  3004. li_pcodeflag = 4 And ls_pcode <> ls_pcode_config) Then
  3005. If uo_cmpl.uof_get_cost_dz(1,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,arg_msg,arg_s_mx) = 0 Then
  3006. arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
  3007. ls_msg = ls_msg + arg_msg + '~n'
  3008. ll_fail++
  3009. Continue
  3010. ld_price = 0
  3011. ld_wfjgprice = 0
  3012. ld_outcost = 0
  3013. ld_wageprice = 0
  3014. ld_eqprice = 0
  3015. End If
  3016. Else
  3017. If uo_cmpl.uof_get_cost(1,ll_scid,ll_mtrlid,ls_mtrlcode,ls_pfcode,1,1,ld_price,ld_wfjgprice,ld_outcost,ld_wageprice,ld_eqprice,0,arg_msg,arg_s_mx,1) = 0 Then
  3018. arg_msg = '物料:'+ls_mtrlcode+'取成本失败,'+arg_msg
  3019. ls_msg = ls_msg + arg_msg + '~n'
  3020. ll_fail++
  3021. Continue
  3022. ld_price = 0
  3023. ld_wfjgprice = 0
  3024. ld_outcost = 0
  3025. ld_wageprice = 0
  3026. ld_eqprice = 0
  3027. End If
  3028. End If
  3029. ld_price = Round(ld_price,li_dec)
  3030. ld_wfjgprice = Round(ld_wfjgprice,li_dec)
  3031. ld_outcost = Round(ld_outcost,li_dec)
  3032. ld_wageprice = Round(ld_wageprice,li_dec)
  3033. ld_eqprice = Round(ld_eqprice,li_dec)
  3034. Select top 1 otherprice Into :ld_otherprice
  3035. From u_mtrlprice_sum
  3036. Where mtrlid = :ll_mtrlid
  3037. And pfcode = :ls_pfcode
  3038. And sumdate < :sumdate
  3039. And status = :ls_status
  3040. And woodcode = :ls_woodcode
  3041. And pcode = :ls_pcode
  3042. Order By sumdate Desc;
  3043. If sqlca.SQLCode <> 0 Then
  3044. arg_msg = '物料:'+ls_mtrlcode+'取上次附加成本失败,'+arg_msg
  3045. ls_msg = ls_msg + arg_msg + '~n'
  3046. ll_fail++
  3047. Continue
  3048. End If
  3049. If IsNull(ld_otherprice) Then ld_otherprice = 0
  3050. Update u_mtrlprice_sum
  3051. Set price = :ld_price,
  3052. cost = :ld_price + :ld_wfjgprice + :ld_wageprice + :ld_outcost + :ld_otherprice + :ld_eqprice,
  3053. wfjgprice = :ld_wfjgprice,
  3054. jgprice = :ld_wageprice,
  3055. outcost = :ld_outcost,
  3056. otherprice = :ld_otherprice,
  3057. eqprice = :ld_eqprice,
  3058. dscrp = :arg_msg,
  3059. sumdate = :sumdate
  3060. Where mtrlid = :ll_mtrlid
  3061. And pfcode = :ls_pfcode
  3062. And (sumdate = :sumdate Or sumdate = 0 )
  3063. And status = :ls_status
  3064. And woodcode = :ls_woodcode
  3065. And pcode = :ls_pcode;
  3066. If sqlca.SQLCode = 0 Then
  3067. If sqlca.SQLNRows = 0 Then
  3068. Insert Into u_mtrlprice_sum
  3069. (sumdate,
  3070. pfcode,
  3071. mtrlid,
  3072. price,
  3073. cost,
  3074. wfjgprice,
  3075. jgprice,
  3076. eqprice,
  3077. outcost,
  3078. otherprice,
  3079. dscrp,
  3080. status,
  3081. woodcode,
  3082. pcode)
  3083. Values(:sumdate,
  3084. :ls_pfcode,
  3085. :ll_mtrlid,
  3086. :ld_price,
  3087. :ld_price + :ld_wfjgprice + :ld_wageprice + :ld_outcost + :ld_eqprice,
  3088. :ld_wfjgprice,
  3089. :ld_wageprice,
  3090. :ld_eqprice,
  3091. :ld_outcost,
  3092. :ld_otherprice,
  3093. :arg_msg,
  3094. :ls_status,
  3095. :ls_woodcode,
  3096. :ls_pcode);
  3097. If sqlca.SQLCode <> 0 Then
  3098. arg_msg = '新增物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
  3099. ls_msg = ls_msg + arg_msg + '~n'
  3100. ll_fail++
  3101. Continue
  3102. End If
  3103. End If
  3104. Else
  3105. arg_msg = '更新物料:'+ls_mtrlcode+'成本失败,'+sqlca.SQLErrText
  3106. ls_msg = ls_msg + arg_msg + '~n'
  3107. ll_fail++
  3108. Continue
  3109. End If
  3110. Delete From u_mtrlprice_mx
  3111. Where mtrlid = :ll_mtrlid
  3112. And pfcode = :ls_pfcode
  3113. And status = :ls_status
  3114. And woodcode = :ls_woodcode
  3115. And pcode = :ls_pcode;
  3116. If sqlca.SQLCode <> 0 Then
  3117. Rollback;
  3118. arg_msg = '删除物料:'+ls_mtrlcode+'原成本组成明细失败,'+sqlca.SQLErrText
  3119. ls_msg = ls_msg + arg_msg + '~n'
  3120. ll_fail++
  3121. Continue
  3122. End If
  3123. For ll_j = 1 To UpperBound(arg_s_mx)
  3124. Update u_mtrlprice_mx
  3125. Set price = price + :arg_s_mx[ll_j].price,
  3126. wfjgprice = wfjgprice + :arg_s_mx[ll_j].wfjgprice,
  3127. jgprice = jgprice + :arg_s_mx[ll_j].jgprice,
  3128. outcost = outcost + :arg_s_mx[ll_j].outcost,
  3129. eqprice = eqprice + :arg_s_mx[ll_j].eqprice,
  3130. qty = qty + :arg_s_mx[ll_j].qty
  3131. Where mtrlid = :ll_mtrlid
  3132. And pfcode = :ls_pfcode
  3133. And status = :ls_status
  3134. And woodcode = :ls_woodcode
  3135. And pcode = :ls_pcode
  3136. And sonmtrlid = :arg_s_mx[ll_j].sonmtrlid;
  3137. If sqlca.SQLCode = 0 Then
  3138. If sqlca.SQLNRows = 0 Then
  3139. Insert Into u_mtrlprice_mx
  3140. (mtrlid,
  3141. pfcode,
  3142. status,
  3143. woodcode,
  3144. pcode,
  3145. sonmtrlid,
  3146. price,
  3147. wfjgprice,
  3148. jgprice,
  3149. outcost,
  3150. eqprice,
  3151. qty)
  3152. Values (:ll_mtrlid,
  3153. :ls_pfcode,
  3154. :ls_status,
  3155. :ls_woodcode,
  3156. :ls_pcode,
  3157. :arg_s_mx[ll_j].sonmtrlid,
  3158. :arg_s_mx[ll_j].price,
  3159. :arg_s_mx[ll_j].wfjgprice,
  3160. :arg_s_mx[ll_j].jgprice,
  3161. :arg_s_mx[ll_j].outcost,
  3162. :arg_s_mx[ll_j].eqprice,
  3163. :arg_s_mx[ll_j].qty);
  3164. If sqlca.SQLCode <> 0 Then
  3165. Rollback;
  3166. arg_msg = '物料:'+ls_mtrlcode+'插入成本组成明细失败,'+sqlca.SQLErrText
  3167. ls_msg = ls_msg + arg_msg + '~n'
  3168. ll_fail++
  3169. Goto _next
  3170. End If
  3171. End If
  3172. Else
  3173. Rollback;
  3174. arg_msg = '更新物料:'+ls_mtrlcode+'成本组成明细失败,'+sqlca.SQLErrText
  3175. ls_msg = ls_msg + arg_msg + '~n'
  3176. ll_fail++
  3177. Goto _next
  3178. End If
  3179. Next
  3180. Commit;
  3181. _next:
  3182. Next
  3183. //hpb_2.Visible = False
  3184. //st_per_2.Visible = False
  3185. //p_2.PictureName = 'done.jpg'
  3186. //3.更新成品进仓单成本价
  3187. li_status_step = 3
  3188. //p_3.PictureName = 'doing.jpg'
  3189. //st_per_3.Visible = True
  3190. Update u_inwaremx
  3191. Set u_inwaremx.cost = isnull(v_cost.cost,0),
  3192. u_inwaremx.fprice = isnull(v_cost.cost,0),
  3193. u_inwaremx.uprice = isnull(v_cost.cost,0),
  3194. u_inwaremx.enprice = isnull(v_cost.cost,0),
  3195. u_inwaremx.enprice_tax = isnull(v_cost.cost,0),
  3196. u_inwaremx.enprice_notax = isnull(v_cost.cost,0),
  3197. u_inwaremx.price = isnull(v_cost.cost,0)
  3198. From u_inwaremx Inner JOIN
  3199. u_inware ON u_inwaremx.scid = u_inware.scid And
  3200. u_inwaremx.inwareid = u_inware.inwareid Inner JOIN
  3201. (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint
  3202. From u_warebalc
  3203. Where (balcdateint > 0)
  3204. Group By Storageid) v_balcint ON u_inware.storageid = v_balcint.Storageid And
  3205. u_inware.balcdateint = v_balcint.balcdateint Inner JOIN
  3206. (Select u_mtrlprice_sum.mtrlid, u_mtrlprice_sum.status,
  3207. u_mtrlprice_sum.woodcode, u_mtrlprice_sum.pcode,
  3208. MAX(u_mtrlprice_sum.cost) AS cost
  3209. From u_mtrlprice_sum Inner JOIN
  3210. (Select MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode,pcode
  3211. From u_mtrlprice_sum
  3212. Group By mtrlid, pfcode, status, woodcode, pcode) v_mtrlid_sumdate ON
  3213. u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode COLLATE Chinese_PRC_CI_AS
  3214. And
  3215. u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode COLLATE Chinese_PRC_CI_AS
  3216. And
  3217. u_mtrlprice_sum.status = v_mtrlid_sumdate.status COLLATE Chinese_PRC_CI_AS
  3218. And u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid And
  3219. u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode And
  3220. u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate
  3221. Group By u_mtrlprice_sum.mtrlid, u_mtrlprice_sum.status,
  3222. u_mtrlprice_sum.woodcode, u_mtrlprice_sum.pcode) v_cost ON
  3223. u_inwaremx.mtrlid = v_cost.mtrlid And u_inwaremx.status = v_cost.status And
  3224. u_inwaremx.woodcode = v_cost.woodcode And
  3225. u_inwaremx.pcode = v_cost.pcode
  3226. Where (u_inware.billtype <> 1);
  3227. If sqlca.SQLCode <> 0 Then
  3228. rslt = 0
  3229. arg_msg = '更新生产进仓单单价及成本价失败,'+sqlca.SQLErrText
  3230. Goto ext
  3231. End If
  3232. Commit;
  3233. //st_per_3.Visible = False
  3234. //p_3.PictureName = 'done.jpg'
  3235. //4.更新产品结存表成本价,库存成本价
  3236. li_status_step = 4
  3237. ds_warebalc.Retrieve(30)
  3238. ds_inwaremx.Retrieve(30)
  3239. //p_4.PictureName = 'doing.jpg'
  3240. //hpb_4.MinPosition = 0
  3241. //hpb_4.MaxPosition = ds_warebalc.RowCount()
  3242. //hpb_4.Position = 0
  3243. //
  3244. //hpb_4.Visible = True
  3245. //st_per_4.Visible = True
  3246. For ll_i = 1 To ds_warebalc.RowCount()
  3247. ll_storageid = ds_warebalc.Object.storageid[ll_i]
  3248. ll_balcdateint = ds_warebalc.Object.balcdateint[ll_i]
  3249. ll_mtrlid = ds_warebalc.Object.mtrlid[ll_i]
  3250. ll_sptid = ds_warebalc.Object.sptid[ll_i]
  3251. ls_status = ds_warebalc.Object.status[ll_i]
  3252. ls_woodcode = ds_warebalc.Object.woodcode[ll_i]
  3253. ls_pcode = ds_warebalc.Object.pcode[ll_i]
  3254. ls_plancode = ds_warebalc.Object.plancode[ll_i]
  3255. ls_mtrlcuscode = ds_warebalc.Object.mtrlcuscode[ll_i]
  3256. ls_location = ds_warebalc.Object.Location[ll_i]
  3257. ld_bgqty = ds_warebalc.Object.bgqty[ll_i]
  3258. ld_bgamt = ds_warebalc.Object.bgamt[ll_i]
  3259. ll_scid = ds_warebalc.Object.scid[ll_i]
  3260. ls_storagename = ds_warebalc.Object.storagename[ll_i]
  3261. ls_mtrlcode = ds_warebalc.Object.mtrlcode[ll_i]
  3262. ls_mtrlname = ds_warebalc.Object.mtrlname[ll_i]
  3263. ll_mtrlwareid = ds_warebalc.Object.mtrlwareid[ll_i]
  3264. // SELECT sum(u_inwaremx.cost * u_inwaremx.qty),
  3265. // sum(u_inwaremx.qty)
  3266. // INTO :ld_inamt,
  3267. // :ld_inqty
  3268. // FROM u_inware INNER JOIN
  3269. // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND
  3270. // u_inware.inwareid = u_inwaremx.inwareid
  3271. // WHERE (u_inware.balcdateint = :ll_balcdateint)
  3272. // AND (u_inware.storageid = :ll_storageid)
  3273. // AND (u_inwaremx.mtrlid = :ll_mtrlid)
  3274. // AND (u_inwaremx.status = :ls_status)
  3275. // AND (u_inwaremx.woodcode = :ls_woodcode)
  3276. // AND (u_inwaremx.pcode = :ls_pcode)
  3277. // AND (u_inwaremx.plancode = :ls_plancode)
  3278. // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode)
  3279. // AND (u_inwaremx.Location = :ls_location)
  3280. // And (u_inware.scid = :ll_scid);
  3281. // IF sqlca.SQLCode <> 0 THEN
  3282. // ld_inamt = 0
  3283. // ld_inqty = 0
  3284. // END IF
  3285. ls_findstr = 'balcdateint = '+String(ll_balcdateint) + ' and storageid = '+String(ll_storageid)
  3286. ls_findstr = ls_findstr + ' and mtrlid = '+String(ll_mtrlid) + ' and status = "'+ls_status+'" '
  3287. ls_findstr = ls_findstr + ' and woodcode = "'+ ls_woodcode + '" and pcode = "'+ls_pcode+'" '
  3288. ls_findstr = ls_findstr + ' and plancode = "'+ ls_plancode + '" and mtrlcuscode = "'+ls_mtrlcuscode+'" '
  3289. ls_findstr = ls_findstr + ' and location = "'+ ls_location + '" and scid = '+String(ll_scid)
  3290. ll_row = ds_inwaremx.Find(ls_findstr,1,ds_inwaremx.RowCount())
  3291. If ll_row > 0 Then
  3292. ld_inamt = ds_inwaremx.Object.inamt[ll_row]
  3293. ld_inqty = ds_inwaremx.Object.inqty[ll_row]
  3294. ds_inwaremx.DeleteRow(ll_row)
  3295. Else
  3296. ld_inamt = 0
  3297. ld_inqty = 0
  3298. End If
  3299. If IsNull(ld_inamt) Then ld_inamt = 0
  3300. If IsNull(ld_inqty) Then ld_inqty = 0
  3301. If ld_bgamt < 0 Then
  3302. If ld_inqty > 0 Then
  3303. ld_bgamt = ld_bgqty * (ld_inamt / ld_inqty)
  3304. Else
  3305. Select top 1 cost
  3306. Into :ld_cost
  3307. From u_mtrlware
  3308. Where scid = :ll_scid
  3309. And mtrlwareid = :ll_mtrlwareid;
  3310. If sqlca.SQLCode <> 0 Then
  3311. ld_cost = 0
  3312. End If
  3313. ld_bgamt = ld_bgqty * ld_cost
  3314. End If
  3315. End If
  3316. If ld_bgqty + ld_inqty <> 0 Then
  3317. ld_cost = (ld_bgamt + ld_inamt) / (ld_bgqty + ld_inqty)
  3318. End If
  3319. If (ld_bgqty + ld_inqty = 0) Or ld_cost < 0 Then
  3320. Select top 1 cost
  3321. Into :ld_cost
  3322. From u_mtrlware
  3323. Where scid = :ll_scid
  3324. And mtrlwareid = :ll_mtrlwareid;
  3325. If sqlca.SQLCode <> 0 Then
  3326. ld_cost = 0
  3327. End If
  3328. End If
  3329. If IsNull(ld_cost) Then ld_cost = 0
  3330. //更新当前仓库结存表的期间进仓
  3331. // SELECT isnull(sum(u_inwaremx.qty),0),
  3332. // isnull(sum(round(u_inwaremx.cost * u_inwaremx.qty,2)),0)
  3333. // INTO :ld_inqty_sum,
  3334. // :ld_inamt_sum
  3335. // FROM u_inware INNER JOIN
  3336. // u_inwaremx ON u_inware.scid = u_inwaremx.scid AND
  3337. // u_inware.inwareid = u_inwaremx.inwareid
  3338. // WHERE (u_inware.balcdateint = :ll_balcdateint)
  3339. // AND (u_inware.storageid = :ll_storageid)
  3340. // AND (u_inwaremx.mtrlid = :ll_mtrlid)
  3341. // AND (u_inwaremx.status = :ls_status)
  3342. // AND (u_inwaremx.woodcode = :ls_woodcode)
  3343. // AND (u_inwaremx.pcode = :ls_pcode)
  3344. // AND (u_inwaremx.plancode = :ls_plancode)
  3345. // AND (u_inwaremx.mtrlcuscode = :ls_mtrlcuscode)
  3346. // AND (u_inwaremx.Location = :ls_location)
  3347. // And (u_inware.scid = :ll_scid);
  3348. // IF sqlca.SQLCode = -1 THEN
  3349. // rslt = 0
  3350. // arg_msg = '查询期间进仓失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3351. // GOTO ext
  3352. // END IF
  3353. ld_inqty_sum = ld_inqty
  3354. ld_inamt_sum = ld_inamt
  3355. If IsNull(ld_inqty_sum) Then ld_inqty_sum = 0
  3356. If IsNull(ld_inamt_sum) Then ld_inamt_sum = 0
  3357. Update u_warebalc
  3358. Set u_warebalc.incqty = :ld_inqty_sum,
  3359. u_warebalc.incamt = :ld_inamt_sum,
  3360. u_warebalc.bgamt = :ld_bgamt
  3361. Where u_warebalc.scid = :ll_scid
  3362. And u_warebalc.balcdateint = :ll_balcdateint
  3363. And u_warebalc.mtrlwareid = :ll_mtrlwareid;
  3364. If sqlca.SQLCode = -1 Then
  3365. rslt = 0
  3366. arg_msg = '更新结存表期间进数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3367. Goto ext
  3368. End If
  3369. //更新当前仓库所有出仓明细的成本价
  3370. Update u_outwaremx
  3371. Set u_outwaremx.cost = :ld_cost,
  3372. u_outwaremx.costamt = :ld_cost * qty
  3373. From u_outwaremx Inner JOIN
  3374. u_outware ON u_outwaremx.scid = u_outware.scid And
  3375. u_outwaremx.outwareid = u_outware.outwareid
  3376. Where u_outwaremx.scid = :ll_scid
  3377. And u_outwaremx.mtrlwareid = :ll_mtrlwareid
  3378. And u_outware.balcdateint = :ll_balcdateint;
  3379. If sqlca.SQLCode = -1 Then
  3380. rslt = 0
  3381. arg_msg = '更新出仓单成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3382. Goto ext
  3383. End If
  3384. Update u_warebalc
  3385. Set u_warebalc.desamt = v_outwaremx.desamt
  3386. From u_warebalc Inner JOIN
  3387. (Select u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint,
  3388. SUM(u_outwaremx.costamt) AS desamt
  3389. From u_outware Inner JOIN
  3390. u_outwaremx ON u_outware.scid = u_outwaremx.scid And
  3391. u_outware.outwareid = u_outwaremx.outwareid
  3392. Where u_outwaremx.scid = :ll_scid
  3393. And u_outwaremx.mtrlwareid = :ll_mtrlwareid
  3394. And u_outware.balcdateint = :ll_balcdateint
  3395. Group By u_outwaremx.scid, u_outwaremx.mtrlwareid, u_outware.balcdateint)
  3396. v_outwaremx ON u_warebalc.scid = v_outwaremx.scid And
  3397. u_warebalc.balcdateint = v_outwaremx.balcdateint And
  3398. u_warebalc.mtrlwareid = v_outwaremx.mtrlwareid;
  3399. If sqlca.SQLCode = -1 Then
  3400. rslt = 0
  3401. arg_msg = '更新结存表期间出金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3402. Goto ext
  3403. End If
  3404. //重算一次结余数量,结余金额,并得出新的成本价
  3405. Update u_warebalc
  3406. Set balcqty = bgqty + incqty - desqty,
  3407. balcamt = bgamt + incamt - desamt
  3408. Where u_warebalc.scid = :ll_scid
  3409. And u_warebalc.balcdateint = :ll_balcdateint
  3410. And u_warebalc.mtrlwareid = :ll_mtrlwareid;
  3411. If sqlca.SQLCode = -1 Then
  3412. rslt = 0
  3413. arg_msg = '更新结存表结余数量金额失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3414. Goto ext
  3415. End If
  3416. If ld_bgqty + ld_inqty_sum <> 0 Then
  3417. ld_cost = (ld_bgamt + ld_inamt_sum) / (ld_bgqty + ld_inqty_sum)
  3418. If ld_cost > 0 Then
  3419. Update u_mtrlware
  3420. Set cost = :ld_cost,
  3421. wareamt = :ld_cost * noallocqty
  3422. Where scid = :ll_scid
  3423. And mtrlwareid = :ll_mtrlwareid;
  3424. If sqlca.SQLCode = -1 Then
  3425. rslt = 0
  3426. arg_msg = '更新库存成本价失败,仓库:'+ls_storagename+',物料:['+ls_mtrlcode+']'+ls_mtrlname + '~r~n' +sqlca.SQLErrText
  3427. Goto ext
  3428. End If
  3429. End If
  3430. End If
  3431. Commit;
  3432. // hpb_4.Position = ll_i
  3433. // st_per_4.Text = String(ll_i/ds_warebalc.RowCount(),'0.0%')
  3434. Next
  3435. //hpb_4.Visible = False
  3436. //st_per_4.Visible = False
  3437. //p_4.PictureName = 'done.jpg'
  3438. //5.按最近结存的结余金额更新本期期初
  3439. li_status_step = 5
  3440. //p_5.PictureName = 'doing.jpg'
  3441. //st_per_5.Visible = True
  3442. Update u_warebalc
  3443. Set u_warebalc.bgqty = v_last.balcqty,
  3444. u_warebalc.bgamt = v_last.balcamt
  3445. From u_warebalc Inner JOIN
  3446. (Select u_warebalc.scid, u_warebalc.balcdateint, u_warebalc.mtrlwareid,
  3447. u_warebalc.balcqty, u_warebalc.balcamt
  3448. From u_warebalc Inner JOIN
  3449. (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint
  3450. From u_warebalc
  3451. Where (balcdateint > 0)
  3452. Group By Storageid) v_balcint ON
  3453. u_warebalc.Storageid = v_balcint.Storageid And
  3454. u_warebalc.balcdateint = v_balcint.balcdateint) v_last ON
  3455. u_warebalc.scid = v_last.scid And
  3456. u_warebalc.mtrlwareid = v_last.mtrlwareid Inner JOIN
  3457. u_mtrldef ON u_warebalc.mtrlid = u_mtrldef.mtrlid Inner JOIN
  3458. u_storage ON u_warebalc.Storageid = u_storage.storageid
  3459. Where (u_warebalc.balcdateint = 0)
  3460. And ( u_warebalc.bgqty <> v_last.balcqty Or u_warebalc.bgamt <> v_last.balcamt);
  3461. If sqlca.SQLCode <> 0 Then
  3462. rslt = 0
  3463. arg_msg = '按最近结存的结余金额更新本期期初失败,'+sqlca.SQLErrText
  3464. Goto ext
  3465. End If
  3466. Update u_warebalc
  3467. Set balcqty = bgqty + incqty - desqty,
  3468. balcamt = bgamt + incamt - desamt
  3469. Where (balcdateint = 0)
  3470. And (balcqty <> bgqty + incqty - desqty Or balcamt <> bgamt + incamt - desamt);
  3471. If sqlca.SQLCode <> 0 Then
  3472. rslt = 0
  3473. arg_msg = '按最近结存的结余金额更新本期结余失败,'+sqlca.SQLErrText
  3474. Goto ext
  3475. End If
  3476. //更新指令单领用明细金额
  3477. Update u_OrderRqMtrl_scll
  3478. Set u_OrderRqMtrl_scll.costamt = v_outware.cost * u_OrderRqMtrl_scll.DstrQty
  3479. From u_OrderRqMtrl_scll Inner JOIN
  3480. (Select u_outware.scid, u_outwaremx.relid AS orderid,
  3481. u_outware.relid AS wrkgrpid, u_outwaremx.mtrlid, u_outwaremx.status,
  3482. u_outwaremx.woodcode, u_outwaremx.pcode, SUM(u_outwaremx.costamt)
  3483. / SUM(u_outwaremx.qty) AS cost
  3484. From u_outwaremx Inner JOIN
  3485. u_outware ON u_outwaremx.scid = u_outware.scid And
  3486. u_outwaremx.outwareid = u_outware.outwareid Inner JOIN
  3487. (Select DISTINCT Storageid, MAX(balcdateint) AS balcdateint
  3488. From u_warebalc
  3489. Where (balcdateint > 0)
  3490. Group By Storageid) v_balcint ON
  3491. u_outware.StorageID = v_balcint.Storageid And
  3492. u_outware.balcdateint = v_balcint.balcdateint
  3493. Where (u_outware.billtype = 3) And (u_outwaremx.relid > 0) And
  3494. (u_outwaremx.qty > 0) And (u_outwaremx.cost > 0)
  3495. Group By u_outware.scid, u_outwaremx.relid, u_outware.relid,
  3496. u_outwaremx.mtrlid, u_outwaremx.status, u_outwaremx.woodcode,
  3497. u_outwaremx.pcode
  3498. Having (SUM(u_outwaremx.qty) > 0)) v_outware ON
  3499. u_OrderRqMtrl_scll.scid = v_outware.scid And
  3500. u_OrderRqMtrl_scll.OrderID = v_outware.orderid And
  3501. u_OrderRqMtrl_scll.MtrlID = v_outware.mtrlid And
  3502. u_OrderRqMtrl_scll.wrkGrpid = v_outware.wrkgrpid And
  3503. u_OrderRqMtrl_scll.status = v_outware.status COLLATE Chinese_PRC_CI_AS And
  3504. u_OrderRqMtrl_scll.woodcode = v_outware.woodcode COLLATE Chinese_PRC_CI_AS And
  3505. u_OrderRqMtrl_scll.pcode = v_outware.pcode COLLATE Chinese_PRC_CI_AS
  3506. Where v_outware.cost > 0
  3507. And u_OrderRqMtrl_scll.costamt <> v_outware.cost * u_OrderRqMtrl_scll.DstrQty ;
  3508. If sqlca.SQLCode <> 0 Then
  3509. rslt = 0
  3510. arg_msg = '更新指令单领用明细金额失败,'+sqlca.SQLErrText
  3511. Goto ext
  3512. End If
  3513. Commit;
  3514. //st_per_5.Visible = False
  3515. //p_5.PictureName = 'done.jpg'
  3516. ext:
  3517. Destroy ds_warebalc
  3518. Destroy ds_mtrlcost
  3519. Destroy ds_inwaremx
  3520. Destroy uo_cmpl
  3521. If rslt = 0 Then
  3522. Rollback;
  3523. // If li_status_step = 1 Then
  3524. // p_1.PictureName = 'wrong.jpg'
  3525. // st_per_1.Visible = False
  3526. // hpb_1.Visible = False
  3527. // st_msg_1.Text = arg_msg
  3528. // ElseIf li_status_step = 2 Then
  3529. // p_2.PictureName = 'wrong.jpg'
  3530. // st_per_2.Visible = False
  3531. // hpb_2.Visible = False
  3532. // st_msg_2.Text = arg_msg
  3533. // ElseIf li_status_step = 3 Then
  3534. // p_3.PictureName = 'wrong.jpg'
  3535. // st_per_3.Visible = False
  3536. // st_msg_3.Text = arg_msg
  3537. // ElseIf li_status_step = 4 Then
  3538. // p_4.PictureName = 'wrong.jpg'
  3539. // st_per_4.Visible = False
  3540. // hpb_4.Visible = False
  3541. // st_msg_4.Text = arg_msg
  3542. // ElseIf li_status_step = 5 Then
  3543. // p_5.PictureName = 'wrong.jpg'
  3544. // st_per_5.Visible = False
  3545. // st_msg_5.Text = arg_msg
  3546. // End If
  3547. f_setsysoplog('按月重算产品成本','按月重算产品成本失败,原因:'+arg_msg,ls_msg,True)
  3548. Else
  3549. f_setsysoplog('按月重算产品成本','按月重算产品成本成功',ls_msg,True)
  3550. // MessageBox('系统提示','重算完成')
  3551. End If
  3552. //ins_ifstart = 0
  3553. return rslt
  3554. end function
  3555. public function integer uof_cmpl_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg);uo_warebalc_cmpl uo_cmpl
  3556. uo_cmpl = Create uo_warebalc_cmpl
  3557. Int rslt = 1
  3558. rslt = uo_cmpl.uof_cmpl_warebalc_amt(arg_storageid, arg_balcdateint, Ref arg_msg)
  3559. Destroy uo_cmpl
  3560. RETURN rslt
  3561. end function
  3562. public function integer uof_cmpl_mtrlcost_planprice (long arr_mtrlid[], string arr_pfcode[], string arr_status[], string arr_woodcode[], string arr_pcode[], long li_dec, boolean if_auto_copy, integer ifprice, integer ifwfjgprice, integer ifjgprice, integer ifoutcost, integer ifotherprice, integer ifeqprice, ref string ls_msg);Int rslt = 1
  3563. Long ll_fail = 0
  3564. Long i
  3565. ls_msg = ''
  3566. String arg_msg
  3567. uo_cmplcost uo_cmpl
  3568. uo_cmpl = Create uo_cmplcost
  3569. FOR i = 1 To UpperBound(arr_mtrlid)
  3570. IF arr_pfcode[i] = '' THEN CONTINUE
  3571. arg_msg = ''
  3572. IF uo_cmpl.uof_cmpl_mtrlcost(arr_mtrlid[i], arr_pfcode[i], arr_status[i], arr_woodcode[i], arr_pcode[i], li_dec, if_auto_copy,&
  3573. ifprice, ifwfjgprice, ifjgprice, ifoutcost, ifotherprice, ifeqprice, Ref arg_msg) <> 1 THEN
  3574. ls_msg = ls_msg + arg_msg + '~r~n'
  3575. ll_fail++
  3576. CONTINUE
  3577. END IF
  3578. NEXT
  3579. Destroy uo_cmpl
  3580. IF ll_fail > 0 THEN
  3581. rslt = 0
  3582. ls_msg = "统计失败:~r~n" + ls_msg
  3583. ELSE
  3584. ls_msg = "统计成功"
  3585. END IF
  3586. RETURN rslt
  3587. end function
  3588. private function integer pf_outware_to_inwarebuy (string ls_sn, datetime dt_server, ref string arg_msg);Int rslt = 1
  3589. Long ll_scid
  3590. String ls_sccode, ls_outwarecode, ls_banktypename, ls_moneyname
  3591. Long ll_banktypeid, ll_moneyid
  3592. String ls_cuscode, ls_sendsccode // 供应商
  3593. Long ll_sptid // 供应商
  3594. Long ll_storageid = 0
  3595. Long ll_printid, arr_printid[], arr_ll_empty[]
  3596. Long j = 0, cnt = 0, i = 0
  3597. String ls_sptmtrlcode, ls_status, ls_woodcode, ls_pcode, ls_plancode, ls_unit, ls_mtrlcuscode
  3598. String ls_fiebrelcode
  3599. Long ll_mtrlid
  3600. Long ll_ifrel, ll_relid, ll_relprintid
  3601. String ls_mtrlcode
  3602. Decimal ld_qty, ld_enprice, ld_rebate
  3603. Decimal ld_amt
  3604. String ls_itemname, ls_itemcode, ls_mxdscrp
  3605. Long ll_itemid
  3606. String ls_inwarecode
  3607. Long ll_inwareid
  3608. s_getbar arg_s_gb, s_empty
  3609. Long ll_sptmtrlid, arr_sptmtrlid[]
  3610. String arr_status[], arr_woodcode[], arr_pcode[]
  3611. Dec ld_packqty, arr_packqty[], ld_num, arr_num[]
  3612. String ls_barcode
  3613. uo_inware_buy uo_ware
  3614. uo_ware = Create uo_inware_buy
  3615. uo_ware.commit_transaction = sqlca
  3616. uo_getbar uo_get
  3617. uo_get = Create uo_getbar
  3618. SELECT LJFIEB_packet.ReceiveSCcode,
  3619. LJFIEB_tempoutware.outwarecode,
  3620. cuscomm_s.CusCode,
  3621. LJFIEB_packet.SendSCcode,
  3622. LJFIEB_tempoutware.banktypename,
  3623. LJFIEB_tempoutware.moneyname
  3624. INTO :ls_sccode, :ls_outwarecode, :ls_cuscode, :ls_sendsccode, :ls_banktypename, :ls_moneyname
  3625. FROM LJFIEB_packet INNER JOIN
  3626. LJFIEB_tempoutware ON LJFIEB_packet.SerialNum = LJFIEB_tempoutware.serialnum INNER JOIN
  3627. LJFIEB_CusComm AS cuscomm_s ON LJFIEB_packet.SendCusCommID = cuscomm_s.CusCommID
  3628. WHERE LJFIEB_packet.SerialNum = :ls_sn
  3629. Using sys_email_sqlca;
  3630. IF sys_email_sqlca.SQLCode <> 0 THEN
  3631. rslt = 0
  3632. arg_msg = '查询接收分部编码失败,' + sys_email_sqlca.SQLErrText
  3633. GOTO ext
  3634. END IF
  3635. SELECT scid
  3636. INTO :ll_scid
  3637. FROM u_scdef
  3638. Where sccode = :ls_sccode;
  3639. IF sqlca.SQLCode <> 0 THEN
  3640. rslt = 0
  3641. arg_msg = '查询接收分部失败,编码['+ls_sccode+'],' + sqlca.SQLErrText
  3642. GOTO ext
  3643. END IF
  3644. SELECT sptid, banktypeid
  3645. INTO :ll_sptid, :ll_banktypeid
  3646. FROM u_spt
  3647. WHERE commcode = :ls_cuscode
  3648. And commsccode = :ls_sendsccode;
  3649. IF sqlca.SQLCode <> 0 THEN
  3650. rslt = 0
  3651. arg_msg = '查询发送供应商['+ls_cuscode+']['+ls_sendsccode+']失败,' + sqlca.SQLErrText
  3652. GOTO ext
  3653. END IF
  3654. //SELECT banktypeid
  3655. // INTO :ll_banktypeid
  3656. // FROM cw_banktype
  3657. // Where inuse = 1 And banktype = 1 And banktypename = :ls_banktypename;
  3658. //IF sqlca.SQLCode <> 0 THEN
  3659. // rslt = 0
  3660. // arg_msg = '查询结算方式['+ls_banktypename+']失败,' + sqlca.SQLErrText
  3661. // GOTO ext
  3662. //END IF
  3663. SELECT moneyid INTO :ll_moneyid
  3664. FROM cw_currency
  3665. Where Name = :ls_moneyname;
  3666. IF sqlca.SQLCode <> 0 THEN
  3667. rslt = 0
  3668. arg_msg = '查询币种['+ls_moneyname+']失败,' + sqlca.SQLErrText
  3669. GOTO ext
  3670. END IF
  3671. IF uo_ware.newbegin(ll_scid,1,arg_msg) = 0 THEN
  3672. rslt = 0
  3673. GOTO ext
  3674. END IF
  3675. uo_ware.indate = dt_server // 发生时间
  3676. uo_ware.inrep = publ_operator // 经手人
  3677. uo_ware.part = ls_outwarecode
  3678. uo_ware.dscrp = ''
  3679. uo_ware.storageid = ll_storageid // DONE: dw_uc.Object.storageid[uc_row]
  3680. uo_ware.sptid = ll_sptid
  3681. uo_ware.otheramt = 0
  3682. uo_ware.relint_1 = ll_banktypeid
  3683. uo_ware.relid = 0
  3684. uo_ware.thflag = 0
  3685. uo_ware.moneyid = ll_moneyid
  3686. uo_ware.mrate = f_get_mrate(ll_moneyid)
  3687. arr_printid = arr_ll_empty
  3688. j = 0
  3689. DECLARE cur2 CURSOR FOR
  3690. SELECT printid
  3691. FROM LJFIEB_tempoutwaremx
  3692. WHERE (serialnum = :ls_sn)
  3693. ORDER BY printid
  3694. Using sys_email_sqlca;
  3695. OPEN cur2;
  3696. FETCH cur2 Into :ll_printid;
  3697. DO WHILE sys_email_sqlca.SQLCode = 0
  3698. j++
  3699. arr_printid[j] = ll_printid
  3700. FETCH cur2 Into :ll_printid;
  3701. LOOP
  3702. CLOSE cur2;
  3703. FOR j = 1 To UpperBound(arr_printid)
  3704. ll_printid = arr_printid[j]
  3705. SELECT sptmtrlcode, status, woodcode, pcode, plancode, unit, qty, enprice, rebate, fiebrelcode, mtrlcuscode
  3706. INTO :ls_sptmtrlcode, :ls_status, :ls_woodcode, :ls_pcode, :ls_plancode, :ls_unit, :ld_qty, :ld_enprice, :ld_rebate, :ls_fiebrelcode, :ls_mtrlcuscode
  3707. FROM LJFIEB_tempoutwaremx
  3708. WHERE (serialnum = :ls_sn)
  3709. AND (printid = :ll_printid)
  3710. Using sys_email_sqlca;
  3711. IF sys_email_sqlca.SQLCode <> 0 THEN
  3712. rslt = 0
  3713. arg_msg = '查询对方发货单明细失败,' + sys_email_sqlca.SQLErrText
  3714. GOTO ext
  3715. END IF
  3716. SELECT u_sptmtrlname.mtrlid,
  3717. u_mtrldef.mtrlcode
  3718. INTO :ll_mtrlid,
  3719. :ls_mtrlcode
  3720. FROM u_sptmtrlname INNER JOIN
  3721. u_mtrldef ON u_sptmtrlname.mtrlid = u_mtrldef.mtrlid
  3722. WHERE u_sptmtrlname.sptid = :ll_sptid
  3723. And u_sptmtrlname.sptmtrlcode = :ls_sptmtrlcode;
  3724. IF sqlca.SQLCode <> 0 THEN
  3725. rslt = 0
  3726. arg_msg = '查询供应商物料['+ls_sptmtrlcode+']本地对应物料失败,' + sqlca.SQLErrText
  3727. GOTO ext
  3728. END IF
  3729. ll_ifrel = 0
  3730. ll_relid = 0
  3731. ll_relprintid = 0
  3732. IF ls_fiebrelcode <> '' And ll_mtrlid > 0 THEN
  3733. SELECT top 1 u_buyTaskMx.TaskID, u_buyTaskMx.printid
  3734. INTO :ll_relid,:ll_relprintid
  3735. FROM u_buyTask INNER JOIN
  3736. u_buyTaskMx ON u_buyTask.scid = u_buyTaskMx.scid AND
  3737. u_buyTask.TaskID = u_buyTaskMx.TaskID
  3738. WHERE u_buyTask.taskcode = :ls_fiebrelcode
  3739. AND u_buyTaskMx.mtrlid = :ll_mtrlid
  3740. AND u_buyTaskMx.status = :ls_status
  3741. AND u_buyTaskMx.woodcode = :ls_woodcode
  3742. And u_buyTaskMx.pcode = :ls_pcode;
  3743. IF sqlca.SQLCode <> 0 THEN
  3744. ll_ifrel = 0
  3745. ll_relid = 0
  3746. ll_relprintid = 0
  3747. ELSE
  3748. ll_ifrel = 1
  3749. END IF
  3750. END IF
  3751. IF ll_storageid = 0 THEN // 取第一个物料的默认存放仓库
  3752. SELECT top 1 storageid
  3753. INTO :ll_storageid
  3754. FROM u_mtrl_storage
  3755. WHERE mtrlid = :ll_mtrlid
  3756. Order By dft Desc;
  3757. IF sqlca.SQLCode <> 0 THEN
  3758. ll_storageid = 0
  3759. ELSE
  3760. uo_ware.storageid = ll_storageid
  3761. END IF
  3762. END IF
  3763. IF uo_ware.acceptmx(j,&
  3764. ll_mtrlid,&
  3765. ls_mtrlcode,&
  3766. ls_plancode,&
  3767. ls_status,&
  3768. ld_qty,&
  3769. ld_enprice,&
  3770. ld_rebate,&
  3771. '',&
  3772. arg_msg,0,&
  3773. ll_relid,&
  3774. ll_ifrel,&
  3775. ls_woodcode,&
  3776. ls_pcode,&
  3777. 0,&
  3778. ls_unit,&
  3779. 1,&
  3780. ld_qty,&
  3781. ll_relprintid,&
  3782. ld_qty,&
  3783. '','',&
  3784. 0,&
  3785. 0,&
  3786. ls_mtrlcuscode,&
  3787. '',&
  3788. ld_qty,&
  3789. 0) = 0 THEN
  3790. rslt = 0
  3791. GOTO ext
  3792. END IF
  3793. NEXT
  3794. IF uo_ware.uf_cmp_mxmx(arg_msg) <> 1 THEN
  3795. rslt = 0
  3796. GOTO ext
  3797. END IF
  3798. arr_printid = arr_ll_empty
  3799. j = 0
  3800. DECLARE cur3 CURSOR FOR
  3801. SELECT printid
  3802. FROM LJFIEB_tempoutware_itemmx
  3803. WHERE (serialnum = :ls_sn)
  3804. ORDER BY printid
  3805. Using sys_email_sqlca;
  3806. FETCH cur3 Into :ll_printid;
  3807. DO WHILE sys_email_sqlca.SQLCode = 0
  3808. j++
  3809. arr_printid[j] = ll_printid
  3810. FETCH cur3 Into :ll_printid;
  3811. LOOP
  3812. CLOSE cur3;
  3813. FOR j = 1 To UpperBound(arr_printid)
  3814. ll_printid = arr_printid[j]
  3815. SELECT amt, itemname, mxdscrp
  3816. INTO :ld_amt, :ls_itemname, :ls_mxdscrp
  3817. FROM LJFIEB_tempoutware_itemmx
  3818. WHERE (serialnum = :ls_sn)
  3819. AND (printid = :ll_printid)
  3820. Using sys_email_sqlca;
  3821. IF sys_email_sqlca.SQLCode <> 0 THEN
  3822. rslt = 0
  3823. arg_msg = '查询对方销售发货单费用明细失败,' + sys_email_sqlca.SQLErrText
  3824. GOTO ext
  3825. END IF
  3826. SELECT itemid,
  3827. itemcode
  3828. INTO :ll_itemid,
  3829. :ls_itemcode
  3830. FROM u_itemdef
  3831. Where itemname = :ls_itemname;
  3832. IF sqlca.SQLCode <> 0 THEN
  3833. rslt = 0
  3834. arg_msg = '查询费用明细项目['+ls_itemname+']对应本地收支项目失败,' + sqlca.SQLErrText
  3835. GOTO ext
  3836. END IF
  3837. IF uo_ware.acceptmx_item(j,&
  3838. ll_itemid,&
  3839. ld_amt,&
  3840. ls_mxdscrp,&
  3841. arg_msg) = 0 THEN
  3842. rslt = 0
  3843. GOTO ext
  3844. END IF
  3845. NEXT
  3846. IF uo_ware.Save(False,arg_msg) = 0 THEN
  3847. rslt = 0
  3848. GOTO ext
  3849. END IF
  3850. ls_inwarecode = uo_ware.inwarecode
  3851. ll_inwareid = uo_ware.inwareid
  3852. UPDATE LJFIEB_tempoutware
  3853. SET relreissuecode = :ls_inwarecode,
  3854. flag = 1,
  3855. ConfirmTime = getdate(),
  3856. ConfirmUser = :publ_operator
  3857. Where SerialNum = :ls_sn Using sys_email_sqlca;
  3858. IF sys_email_sqlca.SQLCode <> 0 THEN
  3859. rslt = 0
  3860. arg_msg = '更新相关单号失败,'+sys_email_sqlca.SQLErrText
  3861. GOTO ext
  3862. END IF
  3863. //更新本地通信记录
  3864. UPDATE LJFIEB_packet
  3865. SET status = 6,
  3866. Complete = 1,
  3867. ConfirmTime = getdate(),
  3868. ConfirmUser = :publ_operator
  3869. Where SerialNum = :ls_sn Using sys_email_sqlca;
  3870. IF sys_email_sqlca.SQLCode <> 0 THEN
  3871. rslt = 0
  3872. arg_msg = '更新本地通信记录失败,'+sys_email_sqlca.SQLErrText
  3873. GOTO ext
  3874. END IF
  3875. // DONE: 如果有条码,则生成条码生成单
  3876. SELECT count(0)
  3877. INTO :cnt
  3878. FROM LJFIEB_tempoutwaremx_mx_barcode
  3879. WHERE serialnum = :ls_sn
  3880. Using sys_email_sqlca;
  3881. IF sys_email_sqlca.SQLCode <> 0 THEN
  3882. rslt = 0
  3883. arg_msg = '查询接收条码数量失败,' + sys_email_sqlca.SQLErrText
  3884. GOTO ext
  3885. END IF
  3886. IF cnt > 0 THEN
  3887. i = 0
  3888. arg_s_gb = s_empty
  3889. DECLARE cur4 CURSOR FOR
  3890. SELECT qty, mtrlid, status, woodcode, pcode, COUNT(0)
  3891. FROM LJFIEB_tempoutwaremx_mx_barcode
  3892. WHERE serialnum = :ls_sn
  3893. GROUP BY qty, mtrlid, status, woodcode, pcode
  3894. Using sys_email_sqlca;
  3895. OPEN cur4;
  3896. FETCH cur4 Into :ld_packqty, :ll_sptmtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_num;
  3897. DO WHILE sys_email_sqlca.SQLCode = 0
  3898. i++
  3899. arr_packqty[i] = ld_packqty
  3900. arr_sptmtrlid[i] = ll_sptmtrlid
  3901. arr_status[i] = ls_status
  3902. arr_woodcode[i] = ls_woodcode
  3903. arr_pcode[i] = ls_pcode
  3904. arr_num[i] = ld_num
  3905. FETCH cur4 Into :ld_packqty, :ll_sptmtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_num;
  3906. LOOP
  3907. CLOSE cur4;
  3908. FOR i = 1 To UpperBound(arr_sptmtrlid)
  3909. ld_packqty = arr_packqty[i]
  3910. ll_sptmtrlid = arr_sptmtrlid[i]
  3911. ls_status = arr_status[i]
  3912. ls_woodcode = arr_woodcode[i]
  3913. ls_pcode = arr_pcode[i]
  3914. ld_num = arr_num[i]
  3915. SELECT top 1 sptmtrlcode
  3916. INTO :ls_sptmtrlcode
  3917. FROM LJFIEB_tempoutwaremx
  3918. WHERE serialnum = :ls_sn
  3919. AND mtrlid = :ll_sptmtrlid
  3920. Using sys_email_sqlca;
  3921. IF sys_email_sqlca.SQLCode <> 0 THEN
  3922. SELECT top 1 sptmtrlcode
  3923. INTO :ls_sptmtrlcode
  3924. FROM LJFIEB_tempoutwaremx_mx
  3925. WHERE serialnum = :ls_sn
  3926. AND mtrlid = :ll_sptmtrlid
  3927. Using sys_email_sqlca;
  3928. IF sys_email_sqlca.SQLCode <> 0 THEN
  3929. rslt = 0
  3930. arg_msg = '查询条码对应的供应商物料编码失败'
  3931. GOTO ext
  3932. END IF
  3933. END IF
  3934. SELECT u_sptmtrlname.mtrlid,
  3935. u_mtrldef.mtrlcode
  3936. INTO :ll_mtrlid,
  3937. :ls_mtrlcode
  3938. FROM u_sptmtrlname INNER JOIN
  3939. u_mtrldef ON u_sptmtrlname.mtrlid = u_mtrldef.mtrlid
  3940. WHERE u_sptmtrlname.sptid = :ll_sptid
  3941. And u_sptmtrlname.sptmtrlcode = :ls_sptmtrlcode;
  3942. IF sqlca.SQLCode <> 0 THEN
  3943. rslt = 0
  3944. arg_msg = '2.查询供应商物料['+ls_sptmtrlcode+']本地对应物料失败,' + sqlca.SQLErrText
  3945. GOTO ext
  3946. END IF
  3947. arg_s_gb.scid = ll_scid
  3948. arg_s_gb.getbarid = 0
  3949. arg_s_gb.getbardate = DateTime(Today(), Now())
  3950. arg_s_gb.ifrel = 3
  3951. arg_s_gb.orderid = 0
  3952. arg_s_gb.storageid = ll_storageid
  3953. arg_s_gb.mtrlid = ll_mtrlid
  3954. arg_s_gb.cusid = 0
  3955. arg_s_gb.plancode = ''
  3956. arg_s_gb.status = ls_status
  3957. arg_s_gb.woodcode = ls_woodcode
  3958. arg_s_gb.pcode = ls_pcode
  3959. arg_s_gb.mtrlcuscode = ''
  3960. arg_s_gb.Location = ''
  3961. arg_s_gb.packqty = ld_packqty
  3962. arg_s_gb.qty = ld_packqty * ld_num
  3963. arg_s_gb.dscrp = ''
  3964. arg_s_gb.dscrp2 = ''
  3965. arg_s_gb.reason = ''
  3966. arg_s_gb.buytaskprintid = 0
  3967. arg_s_gb.uqty = 0
  3968. arg_s_gb.packuqty = 0
  3969. arg_s_gb.rate = 0
  3970. j = 0
  3971. DECLARE cur5 CURSOR FOR
  3972. SELECT barcode
  3973. FROM LJFIEB_tempoutwaremx_mx_barcode
  3974. WHERE serialnum = :ls_sn
  3975. AND qty = :ld_packqty
  3976. AND mtrlid = :ll_sptmtrlid
  3977. AND status = :ls_status
  3978. AND woodcode = :ls_woodcode
  3979. AND pcode = :ls_pcode
  3980. Using sys_email_sqlca;
  3981. OPEN cur5;
  3982. FETCH cur5 Into :ls_barcode;
  3983. DO WHILE sys_email_sqlca.SQLCode = 0
  3984. j++
  3985. arg_s_gb.arg_s_mx[j].barcode = ls_barcode
  3986. arg_s_gb.arg_s_mx[j].packqty = ld_packqty
  3987. arg_s_gb.arg_s_mx[j].packuqty = 0
  3988. arg_s_gb.arg_s_mx[j].rate = 0
  3989. arg_s_gb.arg_s_mx[j].qty = 0
  3990. arg_s_gb.arg_s_mx[j].mxdscrp = ''
  3991. arg_s_gb.arg_s_mx[j].mxdscrp2 = ''
  3992. arg_s_gb.arg_s_mx[j].mxdscrp3 = ''
  3993. arg_s_gb.arg_s_mx[j].mxdscrp4 = ''
  3994. INSERT INTO U_inwaremx_mx_barcode
  3995. (billtype
  3996. ,scid
  3997. ,inwareid
  3998. ,barcode
  3999. ,qty)
  4000. VALUES
  4001. (1
  4002. ,:ll_scid
  4003. ,:ll_inwareid
  4004. ,:ls_barcode
  4005. ,:ld_packqty);
  4006. IF sqlca.SQLCode <> 0 THEN
  4007. rslt = 0
  4008. arg_msg = '插入采购收货单条码明细失败,' + sqlca.SQLErrText
  4009. GOTO ext
  4010. END IF
  4011. FETCH cur5 Into :ls_barcode;
  4012. LOOP
  4013. CLOSE cur5;
  4014. IF uo_get.Save(arg_s_gb,publ_operator,arg_msg,False) = 0 THEN
  4015. rslt = 0
  4016. GOTO ext
  4017. END IF
  4018. IF uo_get.auditing(uo_get.uo_getbarid, publ_operator,arg_msg, False) = 0 THEN
  4019. rslt = 0
  4020. GOTO ext
  4021. END IF
  4022. NEXT
  4023. END IF
  4024. // 生成采购收货单并审核
  4025. IF uo_ware.getinfo(ll_scid,ll_inwareid,arg_msg) = 0 THEN
  4026. rslt = 0
  4027. GOTO ext
  4028. END IF
  4029. IF uo_ware.auditing(True,arg_msg) = 0 THEN
  4030. rslt = 0
  4031. GOTO ext
  4032. END IF
  4033. ext:
  4034. Destroy uo_ware
  4035. Destroy uo_get
  4036. IF rslt = 1 THEN
  4037. COMMIT;
  4038. COMMIT Using sys_email_sqlca;
  4039. ELSE
  4040. ROLLBACK;
  4041. ROLLBACK Using sys_email_sqlca;
  4042. IF IsNull(arg_msg) THEN
  4043. arg_msg = 'pf_outware_to_inwarebuy错误信息为null'
  4044. END IF
  4045. END IF
  4046. RETURN rslt
  4047. end function
  4048. public function integer uof_outware_to_inwarebuy (ref string ls_msg);// DONE: 将未接收的发货单转成采购收货单
  4049. Int rslt = 1
  4050. String arr_sn[], ls_sn
  4051. Long i = 0
  4052. DateTime dt_server
  4053. ls_msg = ''
  4054. IF IsNull(sys_email_sqlca) THEN
  4055. rslt = 0
  4056. ls_msg = '请设置邮件数据库'
  4057. GOTO ext
  4058. END IF
  4059. IF sys_email_sqlca.DBHandle() <= 0 THEN
  4060. rslt = 0
  4061. ls_msg = '邮件数据库连接失败,请检查'
  4062. GOTO ext
  4063. END IF
  4064. DECLARE cur1 CURSOR FOR
  4065. SELECT LJFIEB_packet.SerialNum
  4066. FROM LJFIEB_packet INNER JOIN
  4067. LJFIEB_CusComm AS cuscomm_s ON LJFIEB_packet.SendCusCommID = cuscomm_s.CusCommID INNER JOIN
  4068. LJFIEB_CusComm AS CusComm_r ON LJFIEB_packet.ReceiveCusCommID = CusComm_r.CusCommID INNER JOIN
  4069. LJFIEB_tempoutware ON LJFIEB_packet.SerialNum = LJFIEB_tempoutware.serialnum
  4070. WHERE (CusComm_r.CusType = 0)
  4071. AND (LJFIEB_packet.BillType = 4)
  4072. AND (LJFIEB_packet.Complete = 0)
  4073. Using sys_email_sqlca;
  4074. OPEN cur1;
  4075. FETCH cur1 Into :ls_sn;
  4076. DO WHILE sys_email_sqlca.SQLCode = 0
  4077. i++
  4078. arr_sn[i] = ls_sn
  4079. FETCH cur1 Into :ls_sn;
  4080. LOOP
  4081. CLOSE cur1;
  4082. SELECT top 1 getdate()
  4083. INTO :dt_server
  4084. From u_user;
  4085. IF sqlca.SQLCode <> 0 THEN
  4086. ls_msg = '查询服务器时间失败,' + sqlca.SQLErrText
  4087. GOTO ext
  4088. END IF
  4089. String arg_msg = ''
  4090. Long sec = 0, fail = 0
  4091. FOR i = 1 To UpperBound(arr_sn)
  4092. ls_sn = arr_sn[i]
  4093. arg_msg = ''
  4094. TRY
  4095. IF pf_outware_to_inwarebuy(ls_sn, dt_server, Ref arg_msg) <> 1 THEN
  4096. ls_msg = ls_msg + arg_msg + '~r~n'
  4097. fail ++
  4098. ELSE
  4099. sec ++
  4100. END IF
  4101. Catch (RuntimeError ex)
  4102. ls_msg = ls_msg + ex.Text + '~r~n'
  4103. fail ++
  4104. END TRY
  4105. NEXT
  4106. ls_msg = '成功:'+String(sec)+'失败:'+String(fail)+',' + ls_msg
  4107. ext:
  4108. IF IsNull(ls_msg) THEN
  4109. ls_msg = 'uof_outware_to_inwarebuy未知错误导至错误信息为null'
  4110. END IF
  4111. RETURN rslt
  4112. end function
  4113. on uo_checkpda.create
  4114. call super::create
  4115. end on
  4116. on uo_checkpda.destroy
  4117. call super::destroy
  4118. end on