uo_order_wfjg.sru 168 KB

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