uo_order_ml.sru 622 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372193731937419375193761937719378193791938019381193821938319384193851938619387193881938919390193911939219393193941939519396193971939819399194001940119402194031940419405194061940719408194091941019411194121941319414194151941619417194181941919420194211942219423194241942519426194271942819429194301943119432194331943419435194361943719438194391944019441194421944319444194451944619447194481944919450194511945219453194541945519456194571945819459194601946119462194631946419465194661946719468194691947019471194721947319474194751947619477194781947919480194811948219483194841948519486194871948819489194901949119492194931949419495194961949719498194991950019501195021950319504195051950619507195081950919510195111951219513195141951519516195171951819519195201952119522195231952419525195261952719528195291953019531195321953319534195351953619537195381953919540195411954219543195441954519546195471954819549195501955119552195531955419555195561955719558195591956019561195621956319564195651956619567195681956919570195711957219573195741957519576195771957819579195801958119582195831958419585195861958719588195891959019591195921959319594195951959619597195981959919600196011960219603196041960519606196071960819609196101961119612196131961419615196161961719618196191962019621196221962319624196251962619627196281962919630196311963219633196341963519636196371963819639196401964119642196431964419645196461964719648196491965019651196521965319654196551965619657196581965919660196611966219663196641966519666196671966819669196701967119672196731967419675196761967719678196791968019681196821968319684196851968619687196881968919690196911969219693196941969519696196971969819699197001970119702197031970419705197061970719708197091971019711197121971319714197151971619717197181971919720197211972219723197241972519726197271972819729197301973119732197331973419735197361973719738197391974019741197421974319744197451974619747197481974919750197511975219753197541975519756197571975819759197601976119762197631976419765197661976719768197691977019771197721977319774197751977619777197781977919780197811978219783197841978519786197871978819789197901979119792197931979419795197961979719798197991980019801198021980319804198051980619807198081980919810198111981219813198141981519816198171981819819198201982119822198231982419825198261982719828198291983019831198321983319834198351983619837198381983919840198411984219843198441984519846198471984819849198501985119852198531985419855198561985719858198591986019861198621986319864198651986619867198681986919870198711987219873198741987519876198771987819879198801988119882198831988419885198861988719888198891989019891198921989319894198951989619897198981989919900199011990219903199041990519906199071990819909199101991119912199131991419915199161991719918199191992019921199221992319924199251992619927199281992919930199311993219933199341993519936199371993819939199401994119942199431994419945199461994719948199491995019951199521995319954199551995619957199581995919960199611996219963199641996519966199671996819969199701997119972199731997419975199761997719978199791998019981199821998319984199851998619987199881998919990199911999219993199941999519996199971999819999200002000120002200032000420005200062000720008200092001020011200122001320014200152001620017200182001920020200212002220023200242002520026200272002820029200302003120032200332003420035200362003720038200392004020041200422004320044200452004620047200482004920050200512005220053200542005520056200572005820059200602006120062200632006420065200662006720068200692007020071200722007320074200752007620077200782007920080200812008220083200842008520086200872008820089200902009120092200932009420095200962009720098200992010020101201022010320104201052010620107201082010920110201112011220113201142011520116201172011820119201202012120122201232012420125201262012720128201292013020131201322013320134201352013620137201382013920140201412014220143201442014520146201472014820149201502015120152201532015420155201562015720158201592016020161201622016320164201652016620167201682016920170201712017220173201742017520176201772017820179201802018120182201832018420185201862018720188201892019020191201922019320194201952019620197201982019920200202012020220203202042020520206202072020820209202102021120212202132021420215202162021720218202192022020221202222022320224202252022620227202282022920230202312023220233202342023520236202372023820239202402024120242202432024420245202462024720248202492025020251202522025320254202552025620257202582025920260202612026220263202642026520266202672026820269202702027120272202732027420275202762027720278202792028020281202822028320284202852028620287202882028920290202912029220293202942029520296202972029820299203002030120302203032030420305203062030720308203092031020311203122031320314203152031620317203182031920320203212032220323203242032520326203272032820329203302033120332203332033420335203362033720338203392034020341203422034320344203452034620347203482034920350203512035220353203542035520356203572035820359203602036120362203632036420365203662036720368203692037020371203722037320374203752037620377203782037920380203812038220383203842038520386203872038820389203902039120392203932039420395203962039720398203992040020401204022040320404204052040620407204082040920410204112041220413204142041520416204172041820419204202042120422204232042420425204262042720428204292043020431204322043320434204352043620437204382043920440204412044220443204442044520446204472044820449204502045120452204532045420455204562045720458204592046020461204622046320464204652046620467204682046920470204712047220473204742047520476204772047820479204802048120482204832048420485204862048720488204892049020491204922049320494204952049620497204982049920500205012050220503205042050520506205072050820509205102051120512205132051420515205162051720518205192052020521205222052320524205252052620527205282052920530205312053220533205342053520536205372053820539205402054120542205432054420545205462054720548205492055020551205522055320554205552055620557205582055920560205612056220563205642056520566205672056820569205702057120572205732057420575205762057720578205792058020581205822058320584205852058620587205882058920590205912059220593205942059520596205972059820599206002060120602206032060420605206062060720608206092061020611206122061320614206152061620617206182061920620206212062220623206242062520626206272062820629206302063120632206332063420635206362063720638206392064020641206422064320644206452064620647206482064920650206512065220653206542065520656206572065820659206602066120662206632066420665206662066720668206692067020671206722067320674206752067620677206782067920680206812068220683206842068520686206872068820689206902069120692206932069420695206962069720698206992070020701207022070320704207052070620707207082070920710207112071220713207142071520716207172071820719207202072120722207232072420725207262072720728207292073020731207322073320734207352073620737207382073920740207412074220743207442074520746207472074820749207502075120752207532075420755207562075720758207592076020761207622076320764207652076620767207682076920770207712077220773207742077520776207772077820779207802078120782207832078420785207862078720788207892079020791207922079320794207952079620797207982079920800208012080220803208042080520806208072080820809208102081120812208132081420815208162081720818208192082020821208222082320824208252082620827208282082920830208312083220833208342083520836208372083820839208402084120842208432084420845208462084720848208492085020851208522085320854208552085620857208582085920860208612086220863208642086520866208672086820869208702087120872208732087420875208762087720878208792088020881208822088320884208852088620887208882088920890208912089220893208942089520896208972089820899209002090120902209032090420905209062090720908209092091020911209122091320914209152091620917209182091920920209212092220923209242092520926209272092820929209302093120932209332093420935209362093720938209392094020941209422094320944209452094620947209482094920950209512095220953209542095520956209572095820959209602096120962209632096420965209662096720968209692097020971209722097320974209752097620977209782097920980209812098220983209842098520986209872098820989209902099120992209932099420995209962099720998209992100021001210022100321004210052100621007210082100921010210112101221013210142101521016210172101821019210202102121022210232102421025210262102721028210292103021031210322103321034210352103621037210382103921040210412104221043210442104521046210472104821049210502105121052210532105421055210562105721058210592106021061210622106321064210652106621067210682106921070210712107221073210742107521076210772107821079210802108121082210832108421085210862108721088210892109021091210922109321094210952109621097210982109921100211012110221103211042110521106211072110821109211102111121112211132111421115211162111721118211192112021121211222112321124211252112621127211282112921130211312113221133211342113521136211372113821139211402114121142211432114421145211462114721148211492115021151211522115321154211552115621157211582115921160211612116221163211642116521166211672116821169211702117121172211732117421175211762117721178211792118021181211822118321184211852118621187211882118921190211912119221193211942119521196211972119821199212002120121202212032120421205212062120721208212092121021211212122121321214212152121621217212182121921220212212122221223212242122521226212272122821229212302123121232212332123421235212362123721238212392124021241212422124321244212452124621247212482124921250212512125221253212542125521256212572125821259212602126121262212632126421265212662126721268212692127021271212722127321274212752127621277212782127921280212812128221283212842128521286212872128821289212902129121292212932129421295212962129721298212992130021301213022130321304213052130621307213082130921310213112131221313213142131521316213172131821319213202132121322213232132421325213262132721328213292133021331213322133321334213352133621337213382133921340213412134221343213442134521346213472134821349213502135121352213532135421355213562135721358213592136021361213622136321364213652136621367213682136921370213712137221373213742137521376213772137821379213802138121382213832138421385213862138721388213892139021391213922139321394213952139621397213982139921400214012140221403214042140521406214072140821409214102141121412214132141421415214162141721418214192142021421214222142321424214252142621427214282142921430214312143221433214342143521436214372143821439214402144121442214432144421445214462144721448214492145021451214522145321454214552145621457214582145921460214612146221463214642146521466214672146821469214702147121472214732147421475214762147721478214792148021481214822148321484214852148621487214882148921490214912149221493214942149521496214972149821499215002150121502215032150421505215062150721508215092151021511215122151321514215152151621517215182151921520215212152221523215242152521526215272152821529215302153121532215332153421535215362153721538215392154021541215422154321544215452154621547215482154921550215512155221553215542155521556215572155821559215602156121562215632156421565215662156721568215692157021571215722157321574215752157621577215782157921580215812158221583215842158521586215872158821589215902159121592215932159421595215962159721598215992160021601216022160321604216052160621607216082160921610216112161221613216142161521616216172161821619216202162121622216232162421625216262162721628216292163021631216322163321634216352163621637216382163921640216412164221643216442164521646216472164821649216502165121652216532165421655216562165721658216592166021661216622166321664216652166621667216682166921670216712167221673216742167521676216772167821679216802168121682216832168421685216862168721688216892169021691216922169321694216952169621697216982169921700217012170221703217042170521706217072170821709217102171121712217132171421715217162171721718217192172021721217222172321724217252172621727217282172921730217312173221733217342173521736217372173821739217402174121742217432174421745217462174721748217492175021751217522175321754217552175621757217582175921760217612176221763217642176521766217672176821769217702177121772217732177421775217762177721778217792178021781217822178321784217852178621787217882178921790217912179221793217942179521796217972179821799218002180121802218032180421805218062180721808218092181021811218122181321814218152181621817218182181921820218212182221823218242182521826218272182821829218302183121832218332183421835218362183721838218392184021841218422184321844218452184621847218482184921850218512185221853218542185521856218572185821859218602186121862218632186421865218662186721868218692187021871218722187321874218752187621877218782187921880218812188221883218842188521886218872188821889218902189121892218932189421895218962189721898218992190021901219022190321904219052190621907219082190921910219112191221913219142191521916219172191821919219202192121922219232192421925219262192721928219292193021931219322193321934219352193621937219382193921940219412194221943219442194521946219472194821949219502195121952219532195421955219562195721958219592196021961219622196321964219652196621967219682196921970219712197221973219742197521976219772197821979219802198121982219832198421985219862198721988219892199021991219922199321994219952199621997219982199922000220012200222003220042200522006220072200822009220102201122012220132201422015220162201722018220192202022021220222202322024220252202622027220282202922030220312203222033220342203522036220372203822039220402204122042220432204422045220462204722048220492205022051220522205322054220552205622057220582205922060220612206222063220642206522066220672206822069220702207122072220732207422075220762207722078220792208022081220822208322084220852208622087220882208922090220912209222093220942209522096220972209822099221002210122102221032210422105221062210722108221092211022111221122211322114221152211622117221182211922120221212212222123221242212522126221272212822129221302213122132221332213422135221362213722138221392214022141221422214322144221452214622147221482214922150221512215222153221542215522156221572215822159221602216122162221632216422165221662216722168221692217022171221722217322174221752217622177221782217922180221812218222183221842218522186221872218822189221902219122192221932219422195221962219722198221992220022201222022220322204222052220622207222082220922210222112221222213222142221522216222172221822219222202222122222222232222422225222262222722228222292223022231222322223322234222352223622237222382223922240222412224222243222442224522246222472224822249222502225122252222532225422255222562225722258222592226022261222622226322264222652226622267222682226922270222712227222273222742227522276222772227822279222802228122282222832228422285222862228722288222892229022291222922229322294222952229622297222982229922300223012230222303223042230522306223072230822309223102231122312223132231422315223162231722318223192232022321223222232322324223252232622327223282232922330223312233222333223342233522336223372233822339223402234122342223432234422345223462234722348223492235022351223522235322354223552235622357223582235922360223612236222363223642236522366223672236822369223702237122372223732237422375223762237722378223792238022381223822238322384223852238622387223882238922390223912239222393223942239522396223972239822399224002240122402224032240422405224062240722408224092241022411224122241322414224152241622417224182241922420224212242222423224242242522426224272242822429224302243122432224332243422435224362243722438224392244022441224422244322444224452244622447224482244922450224512245222453224542245522456224572245822459224602246122462224632246422465224662246722468224692247022471224722247322474224752247622477224782247922480224812248222483224842248522486224872248822489224902249122492224932249422495224962249722498224992250022501225022250322504225052250622507225082250922510225112251222513225142251522516225172251822519225202252122522225232252422525225262252722528225292253022531225322253322534225352253622537225382253922540225412254222543225442254522546225472254822549225502255122552225532255422555225562255722558225592256022561225622256322564225652256622567225682256922570225712257222573225742257522576225772257822579225802258122582225832258422585225862258722588225892259022591225922259322594225952259622597225982259922600226012260222603226042260522606226072260822609226102261122612226132261422615226162261722618226192262022621226222262322624226252262622627226282262922630226312263222633226342263522636226372263822639226402264122642226432264422645226462264722648226492265022651226522265322654226552265622657226582265922660226612266222663226642266522666226672266822669226702267122672226732267422675226762267722678226792268022681226822268322684226852268622687226882268922690226912269222693226942269522696226972269822699227002270122702227032270422705227062270722708227092271022711227122271322714227152271622717227182271922720227212272222723227242272522726227272272822729227302273122732227332273422735227362273722738227392274022741227422274322744227452274622747227482274922750227512275222753227542275522756227572275822759227602276122762227632276422765227662276722768227692277022771227722277322774227752277622777227782277922780227812278222783227842278522786227872278822789227902279122792227932279422795227962279722798227992280022801228022280322804228052280622807228082280922810228112281222813228142281522816228172281822819228202282122822228232282422825228262282722828228292283022831228322283322834228352283622837228382283922840228412284222843228442284522846228472284822849228502285122852228532285422855228562285722858228592286022861228622286322864228652286622867228682286922870228712287222873228742287522876228772287822879228802288122882228832288422885228862288722888228892289022891228922289322894228952289622897228982289922900229012290222903229042290522906229072290822909229102291122912229132291422915229162291722918229192292022921229222292322924229252292622927229282292922930229312293222933229342293522936229372293822939229402294122942229432294422945229462294722948229492295022951229522295322954229552295622957229582295922960229612296222963229642296522966229672296822969229702297122972229732297422975229762297722978229792298022981229822298322984229852298622987229882298922990229912299222993229942299522996229972299822999230002300123002230032300423005230062300723008230092301023011230122301323014230152301623017230182301923020230212302223023230242302523026230272302823029230302303123032230332303423035230362303723038230392304023041230422304323044230452304623047230482304923050230512305223053230542305523056230572305823059230602306123062230632306423065230662306723068230692307023071230722307323074230752307623077230782307923080230812308223083230842308523086230872308823089230902309123092230932309423095230962309723098230992310023101231022310323104231052310623107231082310923110231112311223113231142311523116231172311823119231202312123122231232312423125231262312723128231292313023131231322313323134231352313623137231382313923140231412314223143231442314523146231472314823149231502315123152231532315423155231562315723158231592316023161231622316323164231652316623167231682316923170231712317223173231742317523176231772317823179231802318123182231832318423185231862318723188231892319023191231922319323194231952319623197231982319923200232012320223203232042320523206232072320823209232102321123212232132321423215232162321723218232192322023221232222322323224232252322623227232282322923230232312323223233232342323523236232372323823239232402324123242232432324423245232462324723248232492325023251232522325323254232552325623257232582325923260232612326223263232642326523266232672326823269232702327123272232732327423275232762327723278232792328023281232822328323284232852328623287232882328923290232912329223293232942329523296232972329823299233002330123302233032330423305233062330723308233092331023311233122331323314233152331623317233182331923320233212332223323233242332523326233272332823329233302333123332233332333423335233362333723338233392334023341233422334323344233452334623347233482334923350233512335223353233542335523356233572335823359233602336123362233632336423365233662336723368233692337023371233722337323374233752337623377233782337923380233812338223383233842338523386233872338823389233902339123392233932339423395233962339723398233992340023401234022340323404234052340623407234082340923410234112341223413234142341523416234172341823419234202342123422234232342423425234262342723428234292343023431234322343323434234352343623437234382343923440234412344223443234442344523446234472344823449234502345123452234532345423455234562345723458234592346023461234622346323464234652346623467234682346923470234712347223473234742347523476234772347823479234802348123482234832348423485234862348723488234892349023491234922349323494234952349623497234982349923500235012350223503235042350523506235072350823509
  1. $PBExportHeader$uo_order_ml.sru
  2. forward
  3. global type uo_order_ml from nonvisualobject
  4. end type
  5. type s_order_ml from structure within uo_order_ml
  6. end type
  7. end forward
  8. type s_order_ml from structure
  9. string relcode
  10. datetime orderdate
  11. long taskid
  12. string taskcode
  13. long mtrlid
  14. string status_mode
  15. string woodcode
  16. string pcode
  17. decimal { 10 } orderqty
  18. datetime requiredate
  19. string dscrp
  20. string gydscrp
  21. string assign_emp
  22. integer ordertype
  23. string taskrelcode
  24. long cusid
  25. string pfcode
  26. long taskmxid
  27. string mtrlcode
  28. integer iffp
  29. long porderid
  30. string pordercode
  31. long utid
  32. long wrkgrpid
  33. string pfklmode
  34. long pforderid
  35. string pfordercode
  36. decimal { 10 } pfqty
  37. string secdscrp
  38. string thdscrp
  39. long taskscid
  40. datetime perfinishdate
  41. long storageid
  42. decimal { 5 } capacity
  43. long tmpid
  44. integer level
  45. string typename
  46. string p_taskrelcode
  47. string cusname
  48. integer p_ordertype
  49. long p_cusid
  50. string outtypestr
  51. integer inwareflag
  52. integer outscllflag
  53. long pzlorderid
  54. string saletaskcode
  55. string saletaskrelcode
  56. long upmtrlid
  57. integer iffg
  58. integer ifwforder
  59. integer ifauto
  60. long p_taskid
  61. long p_taskmxid
  62. long p_mtrlid
  63. integer fpkind
  64. long fgid
  65. integer if_inherit
  66. decimal { 10 } addqty
  67. string wpcode
  68. integer pctype
  69. decimal { 10 } notmrpqty
  70. integer ifpban
  71. integer ifupban
  72. end type
  73. global type uo_order_ml from nonvisualobject
  74. end type
  75. global uo_order_ml uo_order_ml
  76. type variables
  77. Public ProtectedWrite Long scid
  78. Public ProtectedWrite Long orderid
  79. Public ProtectedWrite String ordercode
  80. Public ProtectedWrite Int okplan_flag
  81. Public ProtectedWrite Int scllflag
  82. Public ProtectedWrite Int scllsecflag
  83. Public ProtectedWrite Int status
  84. Public ProtectedWrite DateTime accomplishdate
  85. Public ProtectedWrite String Accomplishemp
  86. Public ProtectedWrite String permit_emp
  87. Public ProtectedWrite DateTime permit_date
  88. Public ProtectedWrite String opemp
  89. Public ProtectedWrite DateTime opdate
  90. Public ProtectedWrite String modemp
  91. Public ProtectedWrite DateTime moddate
  92. Public ProtectedWrite String stopemp
  93. Public ProtectedWrite Long ctmint
  94. Public ProtectedWrite Int ifpackpro_mtrl
  95. String billcode
  96. Int ordertype
  97. String relcode
  98. DateTime orderdate
  99. Long mtrlid
  100. String status_mode
  101. String woodcode
  102. String pcode
  103. Decimal orderqty
  104. Decimal AcmpQty
  105. Decimal stopqty
  106. DateTime requiredate
  107. String dscrp
  108. String Assign_emp
  109. String taskrelcode
  110. String pfcode,wpcode
  111. Long taskid
  112. Long taskmxid
  113. String taskcode
  114. Long cusid
  115. Long porderid
  116. String pordercode
  117. Long relrqbuyid
  118. String relrqbuycode
  119. Decimal planqty
  120. Long wrkGrpid
  121. String gydscrp
  122. String pfklmode
  123. Long relrqwfjgid
  124. String relrqwfjgcode
  125. DateTime perfinishdate
  126. int pctype
  127. Decimal addqty
  128. Long pforderid
  129. String pfordercode
  130. Decimal pfqty
  131. String secdscrp
  132. String thdscrp
  133. Long taskscid
  134. Int stopjj
  135. String stopjjemp
  136. DateTime stopjjdate
  137. String stopjjreason
  138. Long storageid
  139. Decimal capacity
  140. String cusname,p_taskrelcode
  141. String outtypestr
  142. Int ifwforder
  143. Int inwareflag,outscllflag
  144. Long pzlorderid
  145. String pzlordercode_tmp //用于生成派生指令单号
  146. Int iffg
  147. Int ifauto
  148. Long fgid
  149. Int ifauto_optype = 1 //对象调用模式, 0:手动, 1:自动
  150. Int if_inherit
  151. int ifpban,ifupban
  152. Long orderid_arr[],orderqty_arr[]
  153. String arg_msg_str = ''
  154. Long audit_buildtype
  155. Int Level
  156. String typename
  157. Boolean if_getid_ture = True
  158. s_aps_orderrqmtrl ins_s_rqmtrl,ins_s_empty
  159. Long it_mx_rq
  160. s_workpricetable ins_s_wp[]
  161. Long it_mx_bomwp
  162. Long deep
  163. Private:
  164. Long it_mxbt = 0
  165. s_order_ml s_order_mx[]
  166. Long it_mxbt_ut = 0
  167. s_order_ml s_order_ut[]
  168. Long it_mxbt_wrk = 0
  169. s_ordermtrl_workgroup_tmp s_wrk_tmp[]
  170. Int uo_option_if_oa_order_ml
  171. Int uo_option_order_ml_secaudit
  172. Int uo_option_if_oa_order_zl
  173. Int uo_option_order_ml_zl_secaudit
  174. Int uo_option_order_bh_use_yc
  175. Int uo_option_def_bom
  176. Int uo_option_order_mtrlware
  177. Int uo_option_inware_mtrlcuscode
  178. Int uo_option_order_ml_save_reccl
  179. Int uo_option_order_ml_add_use_wkp
  180. Int uo_option_ifovertask_cp
  181. Int uo_option_if_taskwork_acmpqty
  182. Int uo_option_ml_wkp
  183. Int uo_option_auto_wrkdate
  184. Int uo_option_use_sc_date
  185. Int uo_option_unite_order_ml
  186. Int uo_option_unite_order_ml_zl
  187. Int uo_option_order_ml_scll_secaudit
  188. Int uo_option_autocreate_buy
  189. Int uo_option_autocreate_wfjg
  190. Int uo_option_def_workprice
  191. Int uo_option_orderrqwp_union
  192. Int uo_option_requestbuy_hz
  193. Int uo_option_requestwfjg_hz
  194. Int uo_option_zlmtrlchange_wx_update_rqwfjg
  195. Int uo_option_scll_rate
  196. Int uo_option_skl_overscll
  197. Int uo_option_skl_overscll_rate
  198. Int uo_option_use_suliao
  199. Int uo_option_management_cost
  200. Int uo_option_ect_price
  201. Int uo_option_order_ml_use_zl
  202. Int uo_option_use_workgroup_tree = 0 //使用工艺路线
  203. Int uo_option_scllaudit_autobuild = 0 //主生产计划用料审核自动生成相关指令单及派工单
  204. Int uo_option_def_mtrlwkp = 0 //生产计划审核前检查工组流程是否定义
  205. Int uo_option_scllaudit_autobuild_tech = 0
  206. Int uo_option_auto_finish_zl
  207. Int uo_option_update_lockdateflag
  208. Int uo_option_packpro2_not_use_pack1
  209. Int uo_option_order_capacity
  210. Int uo_option_order_ml_zl_checkdate
  211. Int uo_option_order_zl_3_day
  212. Long ins_produce_wrkgrpid_bj
  213. Int uo_option_ifpackpro2_if_no_pack2
  214. int uo_option_scll_back_check
  215. int uo_option_autostop_porder
  216. int uo_option_bujian_notmrpqty
  217. int uo_option_orderrqwp_auditgj
  218. int uo_option_order_zl_auto_getbar
  219. int uo_option_canpack_ifzanyong
  220. end variables
  221. forward prototypes
  222. private function integer p_reset ()
  223. public function integer f_distribute_dstrqty (long arg_atid, ref string arg_msg)
  224. public function integer add_dscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg)
  225. public function integer del (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  226. public function integer updatebegin (long arg_scid, long arg_orderid, ref string arg_msg)
  227. public function integer audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  228. public function integer tmpstoporder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  229. public function integer finishorder (integer arg_finishtype, long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  230. public function integer tryfinishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  231. public function integer cancel_finishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  232. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  233. public function integer update (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  234. public function integer addmxcmpl (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  235. private function integer p_getinfo (long arg_scid, long arg_orderid, ref string arg_msg)
  236. private function integer p_clearmx ()
  237. public function integer newbegin (long arg_scid)
  238. public function integer update_bom (long arg_scid, long arg_orderid, string arg_pfcode, ref string arg_msg)
  239. public function integer uof_finish_procode_qty (long arg_scid, long arg_orderid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit)
  240. public function integer addmxcmpl_planqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  241. private subroutine p_replace_mx ()
  242. public function integer getinfo (long arg_scid, long arg_orderid, ref string arg_msg)
  243. public function integer f_assign_inqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, integer arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  244. public function integer uof_pz_change (integer arg_type, string arg_updatestr, long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg)
  245. public function integer audit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit)
  246. public function integer caudit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit)
  247. public function integer uof_check_if_zl (long arg_scid, long arg_orderid, ref string arg_msg)
  248. public function integer uof_get_scllflag (long arg_scid, long arg_orderid, ref integer arg_scllflag, ref string arg_msg)
  249. public function integer uof_check_if_rbuy (long arg_scid, long arg_orderid, ref string arg_msg)
  250. public function integer uof_check_if_wfjg (long arg_scid, long arg_orderid, ref string arg_msg)
  251. public function integer f_add_conpfqty (long arg_scid, long arg_orderid, decimal arg_pfqty, ref string arg_msg, boolean arg_ifcommit)
  252. public function integer f_add_rqbuyqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  253. public function integer f_assign_rqmtrlqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_plantype, ref string arg_msg, boolean arg_ifcommit)
  254. public function integer add_secdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg)
  255. public function integer add_thdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg)
  256. public function integer uof_tryfinish_packorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  257. public function integer mod_perfinishdate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, string arg_reason, ref string arg_msg, boolean arg_ifcommit)
  258. public function integer f_add_dstrqty_ws (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_noallocqty, decimal arg_allocqty, ref string arg_msg, boolean arg_ifcommit)
  259. public function integer f_add_dstrqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit, long arg_relint_1, ref decimal arg_overqty)
  260. public function integer uof_stopjj (long arg_scid, long arg_orderid, string arg_reason, ref string arg_msg, boolean arg_ifcommit)
  261. public function integer uof_add_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit)
  262. public function integer uof_del_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, ref string arg_msg, boolean arg_ifcommit)
  263. public function integer uf_add_taskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, decimal arg_taskqty, ref string arg_msg, boolean arg_ifcommit)
  264. public function integer addmxskl (long arg_scid, long arg_orderid, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit)
  265. public function integer uof_order_cmpcost (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  266. public function integer uof_reccl (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  267. public function integer uof_order_add_wkp_tree (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  268. public function integer addmxcmpl_planqty_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, decimal arg_addqty, datetime arg_bdate, datetime arg_edate, ref string arg_msg, boolean arg_ifcommit)
  269. public function integer acceptmx_wrk (long arg_tmpid, long arg_wrkgrpid, long arg_owrkgrpid, string arg_wkpname, datetime arg_begindate, datetime arg_requiredate, decimal arg_lastdays, decimal arg_lasthour, ref string arg_msg)
  270. public function integer uof_order_add_wkp_tmp (long arg_scid, long arg_orderid, long arg_tmpid, ref string arg_msg, boolean arg_ifcommit)
  271. public function integer uof_auto_order_plan (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  272. public function integer add_newdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg)
  273. public function integer sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  274. public function integer c_sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  275. public function integer uof_add_procode_qty (long arg_scid, long arg_orderid, string arg_procode, datetime arg_billdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  276. public function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  277. public function integer uo_cmp_datediff_wrk (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  278. public function integer uof_add_ordermtrl_tree_acmpqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  279. public function integer uof_add_ordermtrl_tree_sqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  280. public function integer uo_cmp_tree_date (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  281. public function integer uo_cmp_wrk_edate (datetime arg_sdate, long arg_wrkgrpid, decimal arg_lasthour, ref datetime arg_edate, ref decimal arg_resthour_e, ref string arg_msg)
  282. public function integer uof_create_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  283. public function integer uof_delete_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  284. public function integer uof_order_cmp_wrk_date (long arg_scid, long arg_orderid, datetime arg_sdate, ref string arg_msg, boolean arg_ifcommit)
  285. public function integer mod_order_requiredate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, datetime arg_oriredate, datetime arg_newredate, string arg_reason, boolean arg_ifcmpdate, ref string arg_msg, boolean arg_ifcommit)
  286. public function integer uof_update_outtypestr_zl (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean arg_ifcommit)
  287. public function integer uof_tryfinish_packorder2 (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  288. public function integer c_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  289. public function integer uf_add_ftaskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, datetime arg_billdate, decimal arg_ftaskqty, ref string arg_msg, boolean arg_ifcommit)
  290. public function integer uof_okplan (long arg_scid, long arg_orderid, integer arg_okplanflag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  291. public function integer uof_reset_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  292. public function integer uof_order_add_wkp_tree_doing (long arg_scid, long arg_orderid, long arg_this_printid, long arg_next_printid, s_ordermtrl_workgroup_tree arg_s_tree[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit)
  293. public function integer uof_update_minbdate (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  294. public function integer uof_update_orderrqmtrl_zlqty (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_zlqty, ref string arg_msg, boolean arg_ifcommit)
  295. public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  296. public function integer uof_update_mrpcode (long arg_scid, long arg_orderid, string arg_mrpcode, ref string arg_msg, boolean arg_ifcommit)
  297. public function integer stoporder_cancel (long arg_scid, long arg_orderid, integer arg_ifchange, ref string arg_msg, boolean arg_ifcommit)
  298. public function integer plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  299. public function integer c_plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  300. public function integer p_update_orderdate (long arg_scid, long arg_orderid, datetime arg_orderdate, datetime arg_requiredate, string arg_dscrp, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
  301. public function integer uf_createorder_pt (long arg_scid, long arg_orderid, integer arg_pttype, integer arg_bomflag, boolean arg_ifcommit, ref string arg_msg)
  302. public function integer stoporder (long arg_scid, long arg_orderid, integer arg_ifchange, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit)
  303. public function integer f_add_flqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  304. public function integer uof_bom_workprice (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref string arg_msg)
  305. public function integer uof_protype_workprice (long arg_mtrlid, string arg_pfcode, string arg_wpcode, decimal arg_qty, ref string arg_msg)
  306. public function integer add_gydscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg)
  307. public function integer uof_stop_tree (long arg_scid, long arg_orderid, decimal arg_stopqty, integer arg_type, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit)
  308. public function integer uof_mtrl_change (long arg_scid, long arg_orderid, decimal arg_rate, integer arg_type, integer arg_ifchange, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit)
  309. public function integer uof_c_stopjj (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  310. public function integer uof_workprice_parm (long arg_mtrlid, string arg_wpcode, string arg_procode, decimal arg_proqty, string arg_parmstr, integer arg_kind, ref string arg_value_str, ref decimal arg_value_dec)
  311. public function integer uof_tryfinish_packorder_buy (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  312. public function integer uof_reccl_cf (long arg_scid, long arg_orderid, s_order_ml_rqmtrl_scll arg_s_mtrl_scll, ref string arg_msg, boolean arg_ifcommit)
  313. public function integer uof_order_add_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  314. public function integer acceptmx (string arg_relcode, datetime arg_orderdate, long arg_taskid, string arg_taskcode, long arg_cusid, long arg_mtrlid, string arg_status_mode, string arg_woodcode, string arg_pcode, decimal arg_orderqty, string arg_dscrp, string arg_assign_emp, datetime arg_requiredate, integer arg_ordertype, string arg_taskrelcode, string arg_pfcode, long arg_taskmxid, long arg_porderid, long arg_utid, long arg_wrkgrpid, string arg_gydscrp, string arg_pfklmode, long arg_pforderid, string arg_pfordercode, decimal arg_pfqty, string arg_secdscrp, string arg_thdscrp, long arg_taskscid, datetime arg_perfinishdate, long arg_storageid, long arg_tmpid, integer arg_level, string arg_typename, string arg_outtypestr, long arg_pzlorderid, integer arg_iffg, integer arg_ifauto, integer arg_if_inherit, decimal arg_addqty, string arg_wpcode, integer arg_pctype, ref string arg_msg)
  315. public function integer tmp_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit)
  316. public function integer uof_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, boolean arg_ifall, boolean arg_ifupdateprice, integer arg_ifproaudit)
  317. public function integer uof_order_add_wkp (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, integer arg_if_olddate)
  318. public function integer addmxcmpl_rqacmpqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  319. public function integer addmx_sptcheckqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  320. end prototypes
  321. private function integer p_reset ();//int p_reset()
  322. //清除对象及其明细
  323. scid = 0
  324. orderid = 0
  325. ordercode = ''
  326. Accomplishemp = ''
  327. permit_emp = ''
  328. opemp = ''
  329. modemp = ''
  330. stopemp = ''
  331. relcode = ''
  332. mtrlid = 0
  333. status_mode = ''
  334. woodcode = ''
  335. pcode = ''
  336. orderqty = 0
  337. AcmpQty = 0
  338. stopqty = 0
  339. dscrp = ''
  340. Assign_emp = ''
  341. wrkGrpid = 0
  342. gydscrp = ''
  343. secdscrp = ''
  344. thdscrp = ''
  345. stopjj = 0
  346. stopjjemp = ''
  347. stopjjreason = ''
  348. storageid = 0
  349. capacity = 0
  350. arg_msg_str = ''
  351. //清除明细
  352. p_clearmx()
  353. RETURN 1
  354. end function
  355. public function integer f_distribute_dstrqty (long arg_atid, ref string arg_msg);//分摊材料用量
  356. //1.查询时间段副材料用料量
  357. //2.查询时间段生产计划明细完成时间入仓产品用料分摊
  358. //====================================================================
  359. // Function: f_distribute_dstrqty()
  360. //--------------------------------------------------------------------
  361. // Description:
  362. //--------------------------------------------------------------------
  363. // Arguments:
  364. // value long arg_atid
  365. // reference string arg_msg
  366. //--------------------------------------------------------------------
  367. // Returns: integer
  368. //--------------------------------------------------------------------
  369. // Author: yyx Date: 2004.10.04
  370. //--------------------------------------------------------------------
  371. // Modify History:
  372. //
  373. //====================================================================
  374. int rslt = 1
  375. //long count,i,k
  376. //long ls_mtrlid,arr_mtrlid[]
  377. //string ls_mtrlcode,arr_mtrlcode[],ls_mtrlname,arr_mtrlname[]
  378. //decimal ls_outqty,arr_outqty[]
  379. //datetime ls_firstdate,ls_enddate
  380. //datastore ds_dstrqty
  381. //long li_orderid,li_olmtrlid,li_mtrlid
  382. //decimal li_rqqty,li_sumrqqty
  383. //
  384. //select firstdate,enddate
  385. //into :ls_firstdate,:ls_enddate
  386. //from u_apportion_time
  387. //where atid = :arg_atid;
  388. //if sqlca.sqlcode <> 0 then
  389. // rslt =0
  390. // arg_msg = '查询盘点时间失败'
  391. // goto ext
  392. //end if
  393. //
  394. //declare cur_apportion cursor for
  395. // select u_mtrldef.mtrlid,
  396. // u_apportion.orqty + u_apportion.inqty - u_apportion.balcqty,
  397. // u_mtrldef.mtrlcode,
  398. // u_mtrldef.mtrlname
  399. // from u_mtrldef,
  400. // u_apportion
  401. // where ( u_mtrldef.mtrlid = u_apportion.mtrlid )
  402. // and ( u_mtrldef.mtrlkind = 1 )
  403. // and ( u_apportion.atid = :arg_atid );
  404. //open cur_apportion;
  405. //fetch cur_apportion into :ls_mtrlid,:ls_outqty,:ls_mtrlcode,:ls_mtrlname;
  406. //do while sqlca.sqlcode = 0
  407. // count++
  408. // arr_mtrlid[count] = ls_mtrlid
  409. // arr_mtrlcode[count] = ls_mtrlcode
  410. // arr_mtrlname[count] = ls_mtrlname
  411. // arr_outqty[count] = ls_outqty
  412. // fetch cur_apportion into :ls_mtrlid,:ls_outqty,:ls_mtrlcode,:ls_mtrlname;
  413. //loop
  414. //close cur_apportion;
  415. //
  416. //if count <= 0 then
  417. // arg_msg = '该分摊时间还未盘车间数量'
  418. // rslt = 0
  419. // goto ext
  420. //end if
  421. //
  422. //ds_dstrqty = create datastore
  423. //ds_dstrqty.dataobject = 'ds_distribute_dstrqty'
  424. //ds_dstrqty.settransobject(sqlca)
  425. //for i = 1 to count
  426. // li_orderid = 0
  427. // li_olmtrlid = 0
  428. // li_mtrlid = 0
  429. // li_rqqty = 0
  430. // li_sumrqqty = 0
  431. //
  432. // if ds_dstrqty.retrieve(ls_firstdate,ls_enddate,arr_mtrlid[i]) <= 0 then continue
  433. // li_sumrqqty = ds_dstrqty.object.sum_rqqty[1]
  434. //
  435. // ds_dstrqty.accepttext()
  436. // for k = 1 to ds_dstrqty.rowcount()
  437. // li_orderid = ds_dstrqty.object.u_orderrqmtrl_orderid[i]
  438. // li_olmtrlid = ds_dstrqty.object.u_orderrqmtrl_olmtrlid[i]
  439. // li_mtrlid = ds_dstrqty.object.u_orderrqmtrl_mtrlid[i]
  440. // li_rqqty = ds_dstrqty.object.u_orderrqmtrl_rqqty[i]
  441. //
  442. // update u_OrderRqMtrl
  443. // set DstrQty = DstrQty + (:li_rqqty / :li_sumrqqty) * :li_sumrqqty,
  444. // atid = :arg_atid
  445. // where orderid = :li_orderid
  446. // and olmtrlid = :li_olmtrlid
  447. // and mtrlid = :li_mtrlid;
  448. // if sqlca.sqlcode <> 0 then
  449. // rslt = 0
  450. // arg_msg = '分摊物料'+arr_mtrlname[i]+'用料量失败~n'+sqlca.sqlerrtext
  451. // goto ext
  452. // end if
  453. // next
  454. //next
  455. //
  456. //ext:
  457. return rslt
  458. end function
  459. public function integer add_dscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg);
  460. Int rslt = 1
  461. IF arg_newdescppart = '' THEN
  462. rslt = 0
  463. arG_MSG = "要添加内容为空,操作取消"
  464. GOTO ext
  465. END IF
  466. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  467. IF rslt = 0 THEN GOTO ext
  468. IF status = 0 THEN
  469. rslt = 0
  470. arG_MSG = "待审核状态下不可用"
  471. GOTO ext
  472. END IF
  473. UPDATE u_order_ml
  474. SET DSCRP = DSCRP+' '+:arg_newdescppart
  475. WHERE u_order_ml.orderid = :arg_orderid
  476. AND u_order_ml.scid = :arg_scid;
  477. IF SQLCA.SQLCode <> 0 THEN
  478. rslt = 0
  479. arG_MSG = "因网络或其它原因导致添加计划备注操作失败"+"~n"+SQLCA.SQLErrText
  480. ROLLBACK;
  481. GOTO ext
  482. END IF
  483. DSCRP = DSCRP+' '+arg_newdescppart
  484. ext:
  485. IF rslt = 1 THEN
  486. COMMIT;
  487. END IF
  488. p_reset()
  489. RETURN (rslt)
  490. end function
  491. public function integer del (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  492. Long ll_fp
  493. Long i,cnt
  494. Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid
  495. String ls_status,ls_woodcode,ls_pcode
  496. Decimal ld_fpqty
  497. uo_mtrlware_assign uo_fp_plan
  498. uo_fp_plan = Create uo_mtrlware_assign
  499. uo_fp_plan.commit_transaction = sqlca
  500. datastore ds_fp_plan_del
  501. ds_fp_plan_del = Create datastore
  502. ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del'
  503. ds_fp_plan_del.SetTransObject(sqlca)
  504. datastore ds_zl_fp_del
  505. ds_zl_fp_del = Create datastore
  506. ds_zl_fp_del.DataObject = 'ds_zl_scllqty_from_orderrqmtrl_fp_cancel'
  507. ds_zl_fp_del.SetTransObject(sqlca)
  508. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  509. IF rslt = 0 THEN GOTO ext
  510. IF Status <> 0 THEN
  511. rslt = 0
  512. arg_msg = "计划已经审核,不可以删除"
  513. GOTO ext
  514. END IF
  515. DELETE FROM u_OrderRqMtrl
  516. WHERE orderid = :arg_orderid
  517. And scid = :arg_scid;
  518. IF sqlca.SQLCode <> 0 THEN
  519. rslt = 0
  520. arg_msg = "删除计划的计划用料表相应记录操作失败"+"~n"+sqlca.SQLErrText
  521. GOTO ext
  522. END IF
  523. DELETE FROM U_OrderRqwp
  524. WHERE orderid = :arg_orderid
  525. And scid = :arg_scid;
  526. IF sqlca.SQLCode <> 0 THEN
  527. rslt = 0
  528. arg_msg = "删除计划的工序表相应记录操作失败"+"~n"+sqlca.SQLErrText
  529. GOTO ext
  530. END IF
  531. DELETE FROM u_OrderMtrl_workgroup
  532. WHERE orderid = :arg_orderid
  533. And scid = :arg_scid;
  534. IF sqlca.SQLCode <> 0 THEN
  535. rslt = 0
  536. arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  537. GOTO ext
  538. END IF
  539. DELETE FROM u_ordermtrl_wrk_jd
  540. WHERE orderid = :arg_orderid
  541. And scid = :arg_scid;
  542. IF sqlca.SQLCode <> 0 THEN
  543. rslt = 0
  544. arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  545. GOTO ext
  546. END IF
  547. DELETE FROM u_order_ml_perfinishdate_log
  548. WHERE orderid = :arg_orderid
  549. And scid = :arg_scid;
  550. IF sqlca.SQLCode <> 0 THEN
  551. rslt = 0
  552. arg_msg = "删除计划的预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText
  553. GOTO ext
  554. END IF
  555. DELETE FROM u_OrderRqMtrl_tree
  556. WHERE u_OrderRqMtrl_tree.orderid = :arg_orderid
  557. And u_OrderRqMtrl_tree.scid = :arg_scid;
  558. IF sqlca.SQLCode <> 0 THEN
  559. rslt = 0
  560. arg_msg = "删除生产计划运算树操作失败"+"~n"+sqlca.SQLErrText
  561. GOTO ext
  562. END IF
  563. //处理分配占用数
  564. cnt = 0
  565. SELECT count(*) INTO :cnt
  566. FROM u_OrderRqMtrl_scll
  567. WHERE ( u_OrderRqMtrl_scll.scid = :arg_scid ) AND
  568. ( u_OrderRqMtrl_scll.OrderID = :arg_orderid ) AND
  569. ( u_OrderRqMtrl_scll.fpqty > 0 );
  570. IF sqlca.SQLCode <> 0 THEN
  571. arg_msg = '查询指令领料明细是否有已分配数失败,'+sqlca.SQLErrText
  572. rslt = 0
  573. GOTO ext
  574. END IF
  575. //取消分配
  576. IF cnt > 0 THEN
  577. ds_zl_fp_del.Retrieve(arg_scid,arg_orderid)
  578. FOR i = 1 To ds_zl_fp_del.RowCount()
  579. ll_scid = ds_zl_fp_del.Object.scid[i]
  580. ll_orderid = ds_zl_fp_del.Object.orderid[i]
  581. ll_mtrlid = ds_zl_fp_del.Object.mtrlid[i]
  582. ll_wrkgrpid = ds_zl_fp_del.Object.wrkgrpid[i]
  583. ls_status = ds_zl_fp_del.Object.Status[i]
  584. ls_woodcode = ds_zl_fp_del.Object.woodcode[i]
  585. ls_pcode = ds_zl_fp_del.Object.pcode[i]
  586. ld_fpqty = ds_zl_fp_del.Object.fpqty[i]
  587. IF uo_fp_plan.uof_assign_add_to_zl_scll(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,&
  588. ls_status,ls_woodcode,ls_pcode,0 - ld_fpqty,0,0,0,arg_msg,False) = 0 THEN
  589. rslt = 0
  590. GOTO ext
  591. END IF
  592. NEXT
  593. END IF
  594. /////////////////////////////////// //
  595. DELETE FROM u_OrderRqMtrl_scll
  596. WHERE u_OrderRqMtrl_scll.orderid = :arg_orderid
  597. And u_OrderRqMtrl_scll.scid = :arg_scid;
  598. IF sqlca.SQLCode <> 0 THEN
  599. rslt = 0
  600. arg_msg = "删除生产计划用料明细操作失败"+"~n"+sqlca.SQLErrText
  601. GOTO ext
  602. END IF
  603. DELETE FROM u_order_ml_mx
  604. WHERE u_order_ml_mx.orderid = :arg_orderid
  605. And u_order_ml_mx.scid = :arg_scid;
  606. IF sqlca.SQLCode <> 0 THEN
  607. rslt = 0
  608. arg_msg = "删除生产计划明细操作失败"+"~n"+sqlca.SQLErrText
  609. GOTO ext
  610. END IF
  611. //删除原有分配计划明细
  612. ds_fp_plan_del.Retrieve(arg_scid,arg_orderid,1)
  613. IF ds_fp_plan_del.RowCount() > 0 THEN
  614. IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN
  615. rslt = 0
  616. arg_msg = "原分配计划明细已有分配数,操作取消"
  617. GOTO ext
  618. END IF
  619. END IF
  620. FOR ll_fp = 1 To ds_fp_plan_del.RowCount()
  621. IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],&
  622. ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN
  623. arg_msg = '删除分配计划失败,'+arg_msg
  624. rslt = 0
  625. GOTO ext
  626. END IF
  627. NEXT
  628. /////////////////////////////////// //
  629. DELETE FROM u_order_zl_planmx
  630. WHERE u_order_zl_planmx.orderid = :arg_orderid
  631. And u_order_zl_planmx.scid = :arg_scid;
  632. IF sqlca.SQLCode <> 0 THEN
  633. rslt = 0
  634. arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText
  635. GOTO ext
  636. END IF
  637. DELETE FROM u_order_ml
  638. WHERE u_order_ml.orderid = :arg_orderid
  639. And scid = :arg_scid;
  640. IF sqlca.SQLCode <> 0 THEN
  641. rslt = 0
  642. arg_msg = "删除生产计划操作失败"+"~n"+sqlca.SQLErrText
  643. GOTO ext
  644. END IF
  645. //扣减相关部件生产计划的已分配数量
  646. IF pforderid > 0 THEN
  647. IF f_add_conpfqty(arg_scid,pforderid,0 - pfqty,arg_msg,False) = 0 THEN
  648. rslt = 0
  649. GOTO ext
  650. END IF
  651. END IF
  652. //更新主计划自制需求指令单数量yyx20120815
  653. IF ordertype = 4 And pzlorderid = 0 THEN
  654. IF uof_update_orderrqmtrl_zlqty(arg_scid,porderid,mtrlid,wrkgrpid,&
  655. status_mode,woodcode,pcode,0 - orderqty,arg_msg,False) = 0 THEN
  656. rslt = 0
  657. GOTO ext
  658. END IF
  659. END IF
  660. //
  661. ext:
  662. IF rslt = 0 THEN
  663. ROLLBACK;
  664. p_reset()
  665. ELSEIF rslt = 1 And arg_ifcommit THEN
  666. COMMIT;
  667. END IF
  668. Destroy uo_fp_plan
  669. Destroy ds_fp_plan_del
  670. Destroy ds_zl_fp_del
  671. Return (rslt)
  672. end function
  673. public function integer updatebegin (long arg_scid, long arg_orderid, ref string arg_msg);Long rslt = 1
  674. IF uo_option_if_oa_order_ml = -1000 THEN
  675. rslt = 0
  676. arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!'
  677. GOTO ext
  678. END IF
  679. IF uo_option_order_ml_secaudit = -1000 THEN
  680. rslt = 0
  681. arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!'
  682. GOTO ext
  683. END IF
  684. IF uo_option_if_oa_order_zl = -1000 THEN
  685. rslt = 0
  686. arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!'
  687. GOTO ext
  688. END IF
  689. IF uo_option_order_ml_zl_secaudit = -1000 THEN
  690. rslt = 0
  691. arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!'
  692. GOTO ext
  693. END IF
  694. p_reset()
  695. rslt = p_getinfo(arg_scid,arg_orderid,arg_msg)
  696. IF rslt = 0 THEN GOTO ext
  697. IF ordertype <> 4 THEN
  698. IF uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 THEN
  699. IF f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN
  700. rslt = 0
  701. GOTO ext
  702. END IF
  703. END IF
  704. ELSE
  705. IF uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 THEN
  706. IF f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN
  707. rslt = 0
  708. GOTO ext
  709. END IF
  710. END IF
  711. END IF
  712. IF Status <> 0 THEN
  713. rslt = 0
  714. arg_msg = '已经处于审核或完成等状态,不可以修改,如果计划未领料并要修改请先撤销审核'
  715. GOTO ext
  716. END IF
  717. p_clearmx() //清除明细
  718. ext:
  719. IF rslt = 0 THEN p_reset()
  720. RETURN rslt
  721. end function
  722. public function integer audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  723. Long ls_i
  724. String ls_mtrlcode
  725. Int ll_statustype,ll_ordertype,li_ifpackpro,li_ifpack,li_storagetype_mtrl
  726. Long ll_porderid
  727. Int li_ifzl_add0ware
  728. String ls_wpcode
  729. Long ll_mtrlid,ll_wrkid
  730. Int li_mtrlorigin
  731. Decimal ld_packqty_mtrl
  732. String ls_plancode
  733. If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then
  734. rslt = 0
  735. Goto ext
  736. End If
  737. datastore ds_tree
  738. ds_tree = Create datastore
  739. ds_tree.DataObject = 'ds_orderrqmtrl_tree_ifpack2'
  740. ds_tree.SetTransObject(sqlca)
  741. datastore ds_gb_mx
  742. ds_gb_mx = Create datastore
  743. ds_gb_mx.DataObject = 'dw_getbarmx_edit'
  744. ds_gb_mx.SetTransObject(sqlca)
  745. uo_order_ml uo_zl
  746. uo_zl = Create uo_order_ml
  747. uo_getbar uo_get
  748. uo_get = Create uo_getbar
  749. If uo_option_if_oa_order_ml = -1000 Then
  750. rslt = 0
  751. arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!'
  752. Goto ext
  753. End If
  754. If uo_option_order_ml_secaudit = -1000 Then
  755. rslt = 0
  756. arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!'
  757. Goto ext
  758. End If
  759. If uo_option_if_oa_order_zl = -1000 Then
  760. rslt = 0
  761. arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!'
  762. Goto ext
  763. End If
  764. If uo_option_order_ml_zl_secaudit = -1000 Then
  765. rslt = 0
  766. arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!'
  767. Goto ext
  768. End If
  769. If uo_option_order_bh_use_yc = -1000 Then
  770. rslt = 0
  771. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  772. Goto ext
  773. End If
  774. If uo_option_def_bom = -1000 Then
  775. rslt = 0
  776. arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!'
  777. Goto ext
  778. End If
  779. If uo_option_order_mtrlware = -1000 Then
  780. rslt = 0
  781. arg_msg = '选项:[143]生产计划审核增加0库存,读取初始默认值失败,操作取消!'
  782. Goto ext
  783. End If
  784. If uo_option_inware_mtrlcuscode = -1000 Then
  785. rslt = 0
  786. arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!'
  787. Goto ext
  788. End If
  789. If uo_option_use_workgroup_tree = -1000 Then
  790. rslt = 0
  791. arg_msg = '选项:[233]使用工艺路线,读取初始默认值失败,操作取消!'
  792. Goto ext
  793. End If
  794. If uo_option_def_mtrlwkp = -1000 Then
  795. rslt = 0
  796. arg_msg = '选项:[239]生产计划审核时需要检查是否检查工组流程是否定义,读取初始默认值失败,操作取消!'
  797. Goto ext
  798. End If
  799. If uo_option_ifpackpro2_if_no_pack2 = -1000 Then
  800. rslt = 0
  801. arg_msg = '选项:[340]个性包件产品物料清单允许没有个性包件,读取初始默认值失败,操作取消!'
  802. Goto ext
  803. End If
  804. If uo_option_order_zl_auto_getbar = -1000 Then
  805. rslt = 0
  806. arg_msg = '选项:[403]胚板指令单终审是否自动生成条码生成单并审核,读取初始默认值失败,操作取消!'
  807. Goto ext
  808. End If
  809. If uo_option_canpack_ifzanyong = -1000 Then
  810. rslt = 0
  811. arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!'
  812. Goto ext
  813. End If
  814. uo_saletask uo_task
  815. uo_task = Create uo_saletask
  816. uo_task.commit_transaction = sqlca
  817. uo_saletask_ll uo_task_ll
  818. uo_task_ll = Create uo_saletask_ll
  819. uo_task_ll.commit_transaction = sqlca
  820. If arg_orderid = 0 Then
  821. rslt = 0
  822. arg_msg = "没有审核对象"
  823. Goto ext
  824. End If
  825. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  826. rslt = 0
  827. Goto ext
  828. End If
  829. If status <> 0 Then
  830. rslt = 0
  831. arg_msg = "计划只有在待审批状态才可以执行审批,请核对"
  832. Goto ext
  833. End If
  834. If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  835. rslt = 0
  836. Goto ext
  837. End If
  838. //检查是否有相关配置变更单未审
  839. cnt = 0
  840. Select count(*)
  841. Into :cnt
  842. From u_saletaskmx_change Inner JOIN
  843. u_saletaskmx_changemx ON
  844. u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid
  845. Where (u_saletaskmx_change.affirmflag = 0 Or u_saletaskmx_change.flag = 0)
  846. And (u_saletaskmx_changemx.orderid = :arg_orderid)
  847. And (u_saletaskmx_changemx.scid = :arg_scid) ;
  848. If sqlca.SQLCode <> 0 Then
  849. arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText
  850. rslt = 0
  851. Goto ext
  852. End If
  853. If cnt > 0 Then
  854. arg_msg = ordercode + ',有相关配置变更单未审,请先审核'
  855. rslt = 0
  856. Goto ext
  857. End If
  858. Select mtrlcode,
  859. statusflag,
  860. ordertype,
  861. ifpackpro,
  862. ifpack,
  863. storagetype,
  864. mtrlorigin,
  865. packqty
  866. Into :ls_mtrlcode,
  867. :ll_statustype,
  868. :ll_ordertype,
  869. :li_ifpackpro,
  870. :li_ifpack,
  871. :li_storagetype_mtrl,
  872. :li_mtrlorigin,
  873. :ld_packqty_mtrl
  874. From u_mtrldef
  875. Where mtrlid = :mtrlid;
  876. If sqlca.SQLCode <> 0 Then
  877. arg_msg = '查询产品资料失败,'+sqlca.SQLErrText
  878. rslt = 0
  879. Goto ext
  880. End If
  881. //检查是否已建立清单
  882. If ordertype <> 4 Then
  883. If ll_statustype <> 2 Then
  884. If uo_option_def_bom = 1 Then
  885. If li_mtrlorigin <> 2 Then
  886. cnt = 0
  887. Select count(*) Into :cnt
  888. From u_PrdPF,u_Mtrl_pf
  889. Where u_PrdPF.mtrlid = :mtrlid
  890. And u_PrdPF.pfcode = u_Mtrl_pf.pfcode
  891. And u_PrdPF.mtrlid = u_Mtrl_pf.mtrlid
  892. And u_Mtrl_pf.pfcode = :pfcode
  893. And u_Mtrl_pf.flag = 1;
  894. If sqlca.SQLCode <> 0 Then
  895. arg_msg = '查询产品:'+ls_mtrlcode + ',清单:'+ pfcode +',是否已设置物料清单明细失败,'+sqlca.SQLErrText
  896. rslt = 0
  897. Goto ext
  898. End If
  899. If cnt = 0 Then
  900. arg_msg = '产品:'+ls_mtrlcode + ',清单:'+ pfcode +',物料清单用料明细未建立,请检查'
  901. rslt = 0
  902. Goto ext
  903. End If
  904. End If
  905. ElseIf uo_option_def_bom = 2 Then
  906. If f_check_pf_flag(mtrlid,pfcode,0,arg_msg) = 0 Then
  907. rslt = 0
  908. Goto ext
  909. End If
  910. End If
  911. End If
  912. End If
  913. //检查是否已建立工组流程
  914. If uo_option_def_mtrlwkp = 1 Then
  915. cnt = 0
  916. Select count(*) Into :cnt
  917. From u_mtrl_wkp
  918. Where u_mtrl_wkp.mtrlid = :mtrlid;
  919. If sqlca.SQLCode <> 0 Then
  920. arg_msg = '查询产品:'+ls_mtrlcode +',是否已设置工组流程明细失败,'+sqlca.SQLErrText
  921. rslt = 0
  922. Goto ext
  923. End If
  924. If cnt = 0 Then
  925. arg_msg = '产品:'+ls_mtrlcode + ',工组流程明细未建立,请检查'
  926. rslt = 0
  927. Goto ext
  928. End If
  929. End If
  930. If ordertype = 1 Or &
  931. ordertype = 2 Or &
  932. ordertype = 3 Or &
  933. ordertype = 0 And &
  934. uo_option_order_bh_use_yc = 1 Then
  935. If ordertype <> 3 Then
  936. If it_mxbt = 0 Then
  937. rslt = 0
  938. arg_msg = '没有订单明细,操作终止,请检查'
  939. Goto ext
  940. End If
  941. End If
  942. If ordertype = 2 Then
  943. For ls_i = 1 To it_mxbt
  944. If s_order_mx[ls_i].taskid > 0 Then
  945. If uo_task_ll.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,s_order_mx[ls_i].orderqty,arg_msg,False) = 0 Then
  946. rslt = 0
  947. Goto ext
  948. End If
  949. End If
  950. Next
  951. Else
  952. For ls_i = 1 To it_mxbt
  953. If s_order_mx[ls_i].taskid > 0 Then
  954. If uo_task.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,s_order_mx[ls_i].orderqty,arg_msg,False) = 0 Then
  955. rslt = 0
  956. Goto ext
  957. End If
  958. End If
  959. Next
  960. End If
  961. ElseIf ordertype = 4 And pzlorderid = 0 Then
  962. If it_mxbt = 0 Then
  963. rslt = 0
  964. arg_msg = '没有计划明细,操作终止,请检查'
  965. Goto ext
  966. End If
  967. For ls_i = 1 To it_mxbt
  968. If s_order_mx[ls_i].taskid > 0 Then
  969. Int li_plantype
  970. Long ll_wrkGrpid_scll
  971. Select plantype,wrkGrpid
  972. Into :li_plantype,:ll_wrkGrpid_scll
  973. From u_OrderRqMtrl
  974. Where scid = :scid
  975. And orderid = :s_order_mx[ls_i].taskid
  976. And mxpkid = :s_order_mx[ls_i].taskmxid;
  977. If sqlca.SQLCode <> 0 Then
  978. arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText
  979. rslt = 0
  980. Goto ext
  981. End If
  982. If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,&
  983. mtrlid,ls_mtrlcode,status_mode,&
  984. woodcode,pcode,s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then
  985. rslt = 0
  986. Goto ext
  987. End If
  988. End If
  989. Next
  990. End If
  991. Update u_order_ml
  992. Set permit_emp = :publ_operator,
  993. permit_date = getdate(),
  994. status = 7
  995. Where orderid = :arg_orderid
  996. And scid = :scid
  997. And status = 0;
  998. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  999. rslt = 0
  1000. arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText
  1001. Goto ext
  1002. End If
  1003. //====================================================================
  1004. // 更新订单排产数量,加工生产计划工序
  1005. //====================================================================
  1006. If Not (ordertype <> 4 And ll_ordertype = 1) Then
  1007. If outscllflag = 1 And ordertype <> 3 Then
  1008. If uof_order_add_pro(arg_scid,arg_orderid,arg_msg,False,True,False,0) = 0 Then
  1009. rslt = 0
  1010. Goto ext
  1011. End If
  1012. If uof_order_add_wkp(arg_scid,arg_orderid,arg_msg,False,0) = 0 Then
  1013. rslt = 0
  1014. Goto ext
  1015. End If
  1016. If uof_order_add_wkp_tree(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  1017. rslt = 0
  1018. Goto ext
  1019. End If
  1020. End If
  1021. End If
  1022. If uo_option_order_mtrlware > 0 Then
  1023. Long ll_mtrlwareid,ll_storageid_p
  1024. Long ll_mtrlid_p
  1025. String ls_mtrlcuscode
  1026. String ls_taskrelcode_p,ls_ordercode_p
  1027. Long ll_cusid_p
  1028. Int li_balctype
  1029. If uo_option_inware_mtrlcuscode = 0 Or li_ifpackpro = 1 Or li_ifpackpro = 3 Then
  1030. ls_mtrlcuscode = ''
  1031. Else
  1032. ls_mtrlcuscode = ordercode
  1033. End If
  1034. If storageid > 0 Then
  1035. Select balctype
  1036. Into :li_balctype
  1037. From u_storage
  1038. Where storageid = :storageid;
  1039. If sqlca.SQLCode <> 0 Then
  1040. rslt = 0
  1041. arg_msg = "查询仓库是否使用客户库存失败失败,"+sqlca.SQLErrText
  1042. Goto ext
  1043. End If
  1044. End If
  1045. If ordertype <> 4 And ll_ordertype = 0 And storageid > 0 Then //合并排产,生产计划增加0库存,否则相关指令单增加库存
  1046. If (li_ifpackpro = 2 Or li_ifpackpro = 4) And ll_ordertype = 0 Then
  1047. ls_mtrlcuscode = ordercode
  1048. End If
  1049. If li_balctype = 0 Then
  1050. cusid = 0
  1051. Else
  1052. If li_storagetype_mtrl = 1 Then cusid = 0
  1053. End If
  1054. If li_ifpackpro = 1 And uo_option_canpack_ifzanyong = 1 Then
  1055. ls_plancode = ''
  1056. Else
  1057. ls_plancode = taskrelcode
  1058. End If
  1059. Select top 1 mtrlwareid Into :ll_mtrlwareid
  1060. From u_mtrlware
  1061. Where mtrlid = :mtrlid
  1062. And status = :status_mode
  1063. And storageid = :storageid
  1064. And woodcode = :woodcode
  1065. And plancode = :ls_plancode
  1066. And pcode = :pcode
  1067. And sptid = :cusid
  1068. And mtrlcuscode = :ls_mtrlcuscode;
  1069. If sqlca.SQLCode = -1 Then
  1070. arg_msg = '查询产品库存失败,'+sqlca.SQLErrText
  1071. rslt = 0
  1072. Goto ext
  1073. ElseIf sqlca.SQLCode = 100 Then
  1074. ll_mtrlwareid = 0
  1075. ll_mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  1076. If ll_mtrlwareid <= 0 Then
  1077. rslt = 0
  1078. Goto ext
  1079. End If
  1080. Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode)
  1081. Values(:scid,:ll_mtrlwareid,:mtrlid,:storageid,0,:status_mode,:ls_plancode,:woodcode,:pcode,:cusid,:ls_mtrlcuscode);
  1082. If sqlca.SQLCode <> 0 Then
  1083. arg_msg = '主生产计划产品加0库存失败或物料已经有库存,请检查,'+sqlca.SQLErrText
  1084. rslt = 0
  1085. Goto ext
  1086. End If
  1087. End If
  1088. ElseIf ordertype = 4 And porderid > 0 Then
  1089. Select u_order_ml.mtrlid,u_order_ml.taskrelcode,u_order_ml.cusid,u_order_ml.storageid,u_order_ml.ordercode
  1090. Into :ll_mtrlid_p,:ls_taskrelcode_p,:ll_cusid_p,:ll_storageid_p,:ls_ordercode_p
  1091. From u_order_ml
  1092. Where u_order_ml.orderid = :porderid
  1093. And u_order_ml.scid = :arg_scid;
  1094. If sqlca.SQLCode <> 0 Then
  1095. rslt = 0
  1096. arg_msg = "加0库存时,指令单查询上级主生产计划资料失败,"+sqlca.SQLErrText
  1097. Goto ext
  1098. End If
  1099. If ll_storageid_p > 0 Then
  1100. Select balctype
  1101. Into :li_balctype
  1102. From u_storage
  1103. Where storageid = :ll_storageid_p;
  1104. If sqlca.SQLCode <> 0 Then
  1105. rslt = 0
  1106. arg_msg = "查询主生产计划仓库是否使用客户库存失败失败,"+sqlca.SQLErrText
  1107. Goto ext
  1108. End If
  1109. If ll_ordertype = 1 And ll_mtrlid_p = mtrlid Or li_ifpack = 2 Then
  1110. If ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 0 Or li_ifpackpro = 2 Or li_ifpackpro = 4) And pzlorderid = 0 Then
  1111. ls_mtrlcuscode = ordercode
  1112. ls_plancode = ls_taskrelcode_p
  1113. li_ifzl_add0ware = 1
  1114. ElseIf ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 2 Or li_ifpackpro = 4) And pzlorderid > 0 Or li_ifpack = 2 And ll_mtrlid_p <> mtrlid Then
  1115. Select u_order_ml.taskrelcode,u_order_ml.cusid,u_order_ml.ordercode
  1116. Into :ls_taskrelcode_p,:ll_cusid_p,:ls_ordercode_p
  1117. From u_order_ml
  1118. Where u_order_ml.orderid = :pzlorderid
  1119. And u_order_ml.scid = :arg_scid;
  1120. If sqlca.SQLCode <> 0 Then
  1121. rslt = 0
  1122. arg_msg = "加0库存时,查询上级指令资料失败,"+sqlca.SQLErrText
  1123. Goto ext
  1124. End If
  1125. ls_mtrlcuscode = ls_ordercode_p
  1126. If uo_option_order_mtrlware = 1 Then
  1127. li_ifzl_add0ware = 1
  1128. ElseIf uo_option_order_mtrlware = 2 Then
  1129. li_ifzl_add0ware = 0
  1130. End If
  1131. ElseIf ll_ordertype = 1 And li_ifpack = 2 And ll_mtrlid_p = mtrlid Then
  1132. ls_mtrlcuscode = ordercode
  1133. ls_plancode = ls_taskrelcode_p
  1134. If uo_option_order_mtrlware = 1 Then
  1135. li_ifzl_add0ware = 1
  1136. ElseIf uo_option_order_mtrlware = 2 Then
  1137. li_ifzl_add0ware = 0
  1138. End If
  1139. ElseIf ll_ordertype = 1 And ll_mtrlid_p = mtrlid And (li_ifpackpro = 1 Or li_ifpackpro = 3) Then
  1140. ls_mtrlcuscode = ''
  1141. If li_ifpackpro = 1 And uo_option_canpack_ifzanyong = 1 Then
  1142. ls_plancode = ''
  1143. Else
  1144. ls_plancode = ls_taskrelcode_p
  1145. End If
  1146. li_ifzl_add0ware = 1
  1147. End If
  1148. If li_ifzl_add0ware = 1 Then
  1149. If li_balctype = 0 Then
  1150. ll_cusid_p = 0
  1151. Else
  1152. If li_storagetype_mtrl = 1 Then ll_cusid_p = 0
  1153. End If
  1154. Select top 1 mtrlwareid Into :ll_mtrlwareid
  1155. From u_mtrlware
  1156. Where mtrlid = :mtrlid
  1157. And status = :status_mode
  1158. And storageid = :ll_storageid_p
  1159. And woodcode = :woodcode
  1160. And plancode = :ls_plancode
  1161. And pcode = :pcode
  1162. And sptid = :ll_cusid_p
  1163. And mtrlcuscode = :ls_mtrlcuscode;
  1164. If sqlca.SQLCode = -1 Then
  1165. arg_msg = '查询指令单产品是否有库存记录失败,'+sqlca.SQLErrText
  1166. rslt = 0
  1167. Goto ext
  1168. ElseIf sqlca.SQLCode = 100 Then
  1169. ll_mtrlwareid = 0
  1170. ll_mtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  1171. If ll_mtrlwareid <= 0 Then
  1172. rslt = 0
  1173. Goto ext
  1174. End If
  1175. Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode)
  1176. Values(:scid,:ll_mtrlwareid,:mtrlid,:ll_storageid_p,0,:status_mode,:ls_plancode,:woodcode,:pcode,:ll_cusid_p,:ls_mtrlcuscode);
  1177. If sqlca.SQLCode <> 0 Then
  1178. arg_msg = '指令单产品加0库存失败或物料已经有库存,请检查,'+sqlca.SQLErrText
  1179. rslt = 0
  1180. Goto ext
  1181. End If
  1182. End If
  1183. End If
  1184. End If
  1185. End If
  1186. End If
  1187. End If
  1188. Int li_ordertype_p,li_ifpackpro_p
  1189. Long ll_i,ll_j
  1190. Long ll_orderid_tmp
  1191. Long ll_pmtrlid
  1192. String ls_p_status,ls_p_woodcode,ls_p_pcode
  1193. Boolean lb_if_autozl = False
  1194. s_mtrlcfg_expr s_pz[]
  1195. If ordertype <> 4 Then
  1196. If (li_ifpackpro = 4 Or li_ifpackpro = 2 ) And ll_ordertype = 0 Then
  1197. lb_if_autozl = True
  1198. End If
  1199. ll_porderid = arg_orderid
  1200. Else
  1201. If porderid = 0 Then
  1202. lb_if_autozl = False
  1203. Else
  1204. Select u_mtrldef.ordertype,
  1205. u_mtrldef.ifpackpro,
  1206. u_Order_ml.mtrlid,
  1207. u_Order_ml.status_mode,
  1208. u_Order_ml.woodcode,
  1209. u_Order_ml.pcode
  1210. Into :li_ordertype_p,
  1211. :li_ifpackpro_p,
  1212. :ll_pmtrlid,
  1213. :ls_p_status,
  1214. :ls_p_woodcode,
  1215. :ls_p_pcode
  1216. From u_Order_ml Inner JOIN
  1217. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  1218. Where u_Order_ml.orderid = :porderid
  1219. And u_order_ml.scid = :scid;
  1220. If sqlca.SQLCode <> 0 Then
  1221. arg_msg = '查询上级计划产品相关信息失败,'+sqlca.SQLErrText
  1222. rslt = 0
  1223. Goto ext
  1224. End If
  1225. If li_ordertype_p = 1 And &
  1226. mtrlid = ll_pmtrlid And &
  1227. (li_ifpackpro_p = 2 Or li_ifpackpro_p = 4 And status_mode = ls_p_status And woodcode = ls_p_woodcode And pcode = ls_p_pcode And pzlorderid = 0) Then
  1228. lb_if_autozl = True
  1229. End If
  1230. ll_porderid = porderid
  1231. End If
  1232. End If
  1233. Decimal ld_pzqty
  1234. If lb_if_autozl Then
  1235. uo_zl.newbegin(arg_scid)
  1236. If li_ifpackpro = 4 Then
  1237. f_checkpz(status_mode,s_pz[])
  1238. For ll_i = 1 To UpperBound(s_pz)
  1239. ld_pzqty = Dec(s_pz[ll_i].qty)
  1240. If uo_zl.acceptmx(relcode,&
  1241. orderdate,&
  1242. 0,&
  1243. '',&
  1244. 0,&
  1245. mtrlid,&
  1246. s_pz[ll_i].cfgname,&
  1247. woodcode,&
  1248. pcode,&
  1249. orderqty * ld_pzqty,&
  1250. dscrp,&
  1251. publ_operator,&
  1252. requiredate,&
  1253. 4,&
  1254. taskrelcode,&
  1255. pfcode,&
  1256. taskmxid,&
  1257. ll_porderid,&
  1258. ll_i,&
  1259. wrkGrpid,&
  1260. gydscrp,&
  1261. pfklmode,&
  1262. 0,'',0,&
  1263. secdscrp,&
  1264. thdscrp,&
  1265. arg_scid,&
  1266. perfinishdate,&
  1267. 0,&
  1268. 0,&
  1269. Level,&
  1270. typename,&
  1271. outtypestr,&
  1272. arg_orderid,&
  1273. 0,&
  1274. 0,0,addqty,&
  1275. wpcode,0,&
  1276. arg_msg) = 0 Then
  1277. arg_msg = '建立相关生产指令单失败,'+arg_msg
  1278. rslt = 0
  1279. Goto ext
  1280. End If
  1281. Next
  1282. ElseIf li_ifpackpro = 2 Then
  1283. If ll_ordertype = 0 Then
  1284. ds_tree.Retrieve(arg_scid,arg_orderid)
  1285. Else
  1286. ds_tree.Retrieve(arg_scid,ll_porderid)
  1287. End If
  1288. For ll_i = 1 To ds_tree.RowCount()
  1289. ll_mtrlid = ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i]
  1290. ll_wrkid = ds_tree.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i]
  1291. Select top 1 wpcode
  1292. Into :ls_wpcode
  1293. From u_mtrl_workprice
  1294. Where mtrlid = :ll_mtrlid
  1295. And wrkid = :ll_wrkid
  1296. Order By ifdft Desc;
  1297. If sqlca.SQLCode <> 0 Then ls_wpcode = ''
  1298. If uo_zl.acceptmx(relcode,&
  1299. orderdate,&
  1300. 0,&
  1301. '',&
  1302. 0,&
  1303. ds_tree.Object.u_orderrqmtrl_tree_mtrlid[ll_i],&
  1304. ds_tree.Object.u_orderrqmtrl_tree_status[ll_i],&
  1305. ds_tree.Object.u_orderrqmtrl_tree_woodcode[ll_i],&
  1306. ds_tree.Object.u_orderrqmtrl_tree_pcode[ll_i],&
  1307. ds_tree.Object.u_orderrqmtrl_tree_truerqqty[ll_i]*orderqty/ds_tree.Object.u_order_ml_orderqty[ll_i],&
  1308. dscrp,&
  1309. publ_operator,&
  1310. requiredate,&
  1311. 4,&
  1312. taskrelcode,&
  1313. ds_tree.Object.u_orderrqmtrl_tree_pfcode[ll_i],&
  1314. taskmxid,&
  1315. ll_porderid,&
  1316. ll_i,&
  1317. ds_tree.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i],&
  1318. gydscrp,&
  1319. pfklmode,&
  1320. 0,'',0,&
  1321. secdscrp,&
  1322. thdscrp,&
  1323. arg_scid,&
  1324. perfinishdate,&
  1325. 0,&
  1326. 0,&
  1327. Level,&
  1328. typename,&
  1329. outtypestr,&
  1330. arg_orderid,&
  1331. 0,&
  1332. 0,0,0,&
  1333. ls_wpcode,0,&
  1334. arg_msg) = 0 Then
  1335. arg_msg = '建立相关生产指令单失败,'+arg_msg
  1336. rslt = 0
  1337. Goto ext
  1338. End If
  1339. Next
  1340. End If
  1341. uo_zl.pzlordercode_tmp = ordercode
  1342. If ds_tree.RowCount() > 0 And li_ifpackpro = 2 Or UpperBound(s_pz) > 0 And li_ifpackpro = 4 Then
  1343. If uo_zl.Save(arg_msg,False) = 0 Then
  1344. arg_msg = '保存相关生产指令单失败,'+arg_msg
  1345. rslt = 0
  1346. Goto ext
  1347. End If
  1348. uo_zl.pzlordercode_tmp = ''
  1349. If uo_option_ifpackpro2_if_no_pack2 = 0 Then
  1350. If UpperBound(uo_zl.orderid_arr) = 0 Then
  1351. rslt = 0
  1352. arg_msg = '没有生成相关进仓指令单,请检查,可能没有个性包件或组合配置子件'
  1353. Goto ext
  1354. End If
  1355. End If
  1356. For ll_j = 1 To UpperBound(uo_zl.orderid_arr)
  1357. ll_orderid_tmp = uo_zl.orderid_arr[ll_j]
  1358. If uo_zl.audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  1359. rslt = 0
  1360. arg_msg = '审核相关生产指令单失败(初审),'+arg_msg
  1361. Goto ext
  1362. End If
  1363. If uo_zl.plan_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  1364. rslt = 0
  1365. arg_msg = '审核相关生产指令单失败(二审),'+arg_msg
  1366. Goto ext
  1367. End If
  1368. If uo_zl.sec_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  1369. rslt = 0
  1370. arg_msg = '审核相关生产指令单失败(终审),'+arg_msg
  1371. Goto ext
  1372. End If
  1373. Next
  1374. End If
  1375. End If
  1376. If ordertype <> 4 Then
  1377. If uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 Then
  1378. If f_oa(sqlca,False,arg_msg,36,arg_scid,arg_orderid,ordercode,relcode,dscrp) = 0 Then
  1379. rslt = 0
  1380. Goto ext
  1381. End If
  1382. End If
  1383. Else
  1384. If uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 Then
  1385. If f_oa(sqlca,False,arg_msg,1138,arg_scid,arg_orderid,ordercode,relcode,dscrp) = 0 Then
  1386. rslt = 0
  1387. Goto ext
  1388. End If
  1389. End If
  1390. End If
  1391. //yyx20140723
  1392. //胚板指令终审自动建立条码生成单
  1393. If uo_option_order_zl_auto_getbar = 1 And ordertype = 4 And ifpban = 1 Then
  1394. s_getbar arg_s_gb
  1395. Long ll_storageid_wrkgrpid
  1396. Decimal ld_packqty
  1397. Long ll_cnt,child_row,j
  1398. String ls_barcode
  1399. DateTime server_dt
  1400. Select Top 1 getdate() Into :server_dt From u_user;
  1401. If sqlca.SQLCode <> 0 Then
  1402. arg_msg = '查询服务器时间失败,操作取消'
  1403. rslt = 0
  1404. Goto ext
  1405. End If
  1406. Select storageid Into :ll_storageid_wrkgrpid From u_sc_wkp Where wrkGrpid = :wrkGrpid;
  1407. If sqlca.SQLCode <> 0 Then
  1408. arg_msg = '查询胚板指令单车间资料对应仓库失败,操作取消'
  1409. rslt = 0
  1410. Goto ext
  1411. End If
  1412. If ll_storageid_wrkgrpid = 0 Then
  1413. arg_msg = '胚板指令单车间资料对应仓库未设置,操作取消'
  1414. rslt = 0
  1415. Goto ext
  1416. End If
  1417. If ld_packqty_mtrl = 0 Then
  1418. ld_packqty_mtrl = 1
  1419. // arg_msg = '胚板指令单物料未设置包装件数,操作取消'
  1420. // rslt = 0
  1421. // GOTO ext
  1422. End If
  1423. arg_s_gb.scid = arg_scid
  1424. arg_s_gb.getbarid = 0
  1425. arg_s_gb.getbardate = server_dt
  1426. arg_s_gb.ifrel = 1
  1427. arg_s_gb.orderid = arg_orderid
  1428. arg_s_gb.storageid = ll_storageid_wrkgrpid
  1429. arg_s_gb.mtrlid = mtrlid
  1430. arg_s_gb.cusid = 0
  1431. arg_s_gb.plancode = ''
  1432. arg_s_gb.status = status_mode
  1433. arg_s_gb.woodcode = woodcode
  1434. arg_s_gb.pcode = pcode
  1435. arg_s_gb.mtrlcuscode = ''
  1436. arg_s_gb.Location = ''
  1437. arg_s_gb.packqty = ld_packqty_mtrl
  1438. arg_s_gb.qty = orderqty
  1439. arg_s_gb.dscrp = '胚板指令单终审自动建立条码单'
  1440. arg_s_gb.reason = ''
  1441. arg_s_gb.buytaskprintid = 0
  1442. arg_s_gb.packuqty = 0
  1443. arg_s_gb.uqty = 0
  1444. arg_s_gb.rate = 0
  1445. ds_gb_mx.Reset()
  1446. If ld_packqty_mtrl >= 1 Then
  1447. ll_cnt = Ceiling(Truncate(orderqty/ld_packqty_mtrl,10))
  1448. ld_packqty = ld_packqty_mtrl
  1449. Else
  1450. ll_cnt = Ceiling(orderqty*ld_packqty_mtrl)
  1451. ld_packqty = Long(1/ld_packqty_mtrl)
  1452. End If
  1453. For j = 1 To ll_cnt
  1454. ls_barcode = getid(0,"TXM",Date(server_dt),False,sqlca) //取得新单据编号
  1455. If ls_barcode = "err" Then
  1456. ls_barcode = ''
  1457. arg_msg = '胚板指令单无法获取条码,操作取消'
  1458. rslt = 0
  1459. Goto ext
  1460. End If
  1461. child_row = ds_gb_mx.InsertRow(0)
  1462. ds_gb_mx.Object.barcode[child_row] = ls_barcode
  1463. If Mod(orderqty,ld_packqty) = 0 Then
  1464. ds_gb_mx.Object.packqty[child_row] = ld_packqty
  1465. Else
  1466. If j <> ll_cnt Then
  1467. ds_gb_mx.Object.packqty[child_row] = ld_packqty
  1468. Else
  1469. ds_gb_mx.Object.packqty[child_row] = orderqty - ld_packqty * ( ll_cnt - 1 )
  1470. End If
  1471. End If
  1472. Next
  1473. ds_gb_mx.AcceptText()
  1474. For j = 1 To ds_gb_mx.RowCount()
  1475. arg_s_gb.arg_s_mx[j].barcode = ds_gb_mx.Object.barcode[j]
  1476. arg_s_gb.arg_s_mx[j].packqty = ds_gb_mx.Object.packqty[j]
  1477. arg_s_gb.arg_s_mx[j].packuqty = ds_gb_mx.Object.packuqty[j]
  1478. arg_s_gb.arg_s_mx[j].rate = ds_gb_mx.Object.rate[j]
  1479. arg_s_gb.arg_s_mx[j].qty = ds_gb_mx.Object.qty[j]
  1480. arg_s_gb.arg_s_mx[j].mxdscrp = ''
  1481. Next
  1482. If uo_get.Save(arg_s_gb,publ_operator,arg_msg,False) = 0 Then
  1483. arg_msg = '保存胚板指令单终审自动建立条码生成单失败,'+arg_msg
  1484. rslt = 0
  1485. Goto ext
  1486. End If
  1487. If uo_get.auditing(uo_get.uo_getbarid,publ_operator,arg_msg,False) = 0 Then
  1488. arg_msg = '审核胚板指令单终审自动建立条码生成单失败,'+arg_msg
  1489. rslt = 0
  1490. Goto ext
  1491. End If
  1492. End If
  1493. //
  1494. ext:
  1495. If rslt = 0 Then
  1496. Rollback;
  1497. p_reset()
  1498. ElseIf arg_ifcommit And rslt = 1 Then
  1499. Commit;
  1500. End If
  1501. Destroy uo_task
  1502. Destroy uo_task_ll
  1503. Destroy uo_zl
  1504. Destroy uo_get
  1505. Destroy ds_tree
  1506. Destroy ds_gb_mx
  1507. Return rslt
  1508. end function
  1509. public function integer tmpstoporder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1510. If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then
  1511. rslt = 0
  1512. Goto ext
  1513. End If
  1514. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  1515. If rslt = 0 Then Goto ext
  1516. If status <> 1 And status <> 2 Then
  1517. rslt = 0
  1518. arg_msg = "计划只有在进行状态或暂停状态才可以执行暂停/取消暂停操作"
  1519. Goto ext
  1520. End If
  1521. If status = 1 Then
  1522. cnt = 0
  1523. Select count(*) Into :cnt
  1524. From u_inwaremx Inner JOIN
  1525. u_inware ON u_inwaremx.scid = u_inware.scid And
  1526. u_inwaremx.inwareid = u_inware.inwareid
  1527. Where (u_inware.billtype = 3)
  1528. And (u_inware.flag = 0)
  1529. And (u_inwaremx.scid = :arg_scid)
  1530. And (u_inwaremx.relid = :arg_orderid);
  1531. If sqlca.SQLCode <> 0 Then
  1532. rslt = 0
  1533. arg_msg = OrderCode+' 查询是否有相关未审核生产进仓单失败'+sqlca.SQLErrText
  1534. Goto ext
  1535. End If
  1536. If cnt > 0 Then
  1537. rslt = 0
  1538. arg_msg = OrderCode+' 有相关未审核生产进仓单,不能暂停'
  1539. Goto ext
  1540. End If
  1541. Update u_order_ml
  1542. Set status = 2,
  1543. stopemp = :publ_operator
  1544. Where orderid = :arg_orderid
  1545. And scid = :arg_scid;
  1546. If sqlca.SQLCode <> 0 Then
  1547. rslt = 0
  1548. arg_msg = "因网络或其它原因导致暂停计划操作失败"+"~n"+sqlca.SQLErrText
  1549. Goto ext
  1550. End If
  1551. Else
  1552. Update u_order_ml
  1553. Set status = 1,
  1554. stopemp = ''
  1555. Where orderid = :arg_orderid
  1556. And scid = :arg_scid ;
  1557. If sqlca.SQLCode <> 0 Then
  1558. rslt = 0
  1559. arg_msg = "因网络或其它原因导致取消暂停计划操作失败"+"~n"+sqlca.SQLErrText
  1560. Goto ext
  1561. End If
  1562. End If
  1563. ext:
  1564. If rslt = 0 Then
  1565. Rollback;
  1566. p_reset()
  1567. ElseIf arg_ifcommit And rslt = 1 Then
  1568. Commit;
  1569. End If
  1570. Return (rslt)
  1571. end function
  1572. public function integer finishorder (integer arg_finishtype, long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1573. DateTime null_dt
  1574. SetNull(null_dt)
  1575. If uo_option_auto_finish_zl = -1000 Then
  1576. rslt = 0
  1577. arg_msg = '选项:[255]生产计划完成,相关指令单自动完成,读取初始默认值失败,操作取消!'
  1578. Goto ext
  1579. End If
  1580. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  1581. If rslt = 0 Then Goto ext
  1582. If arg_finishtype = 5 Or arg_finishtype = 6 Then
  1583. If status <> 1 Then
  1584. rslt = 0
  1585. arg_msg = "生产计划只有在进行状态才可以执行完成,请核对"
  1586. Goto ext
  1587. End If
  1588. //如果是主计划,下级指令单状态有1,2,4,7,不允许终止主计划
  1589. If ordertype <> 4 Then
  1590. Select count(*) Into :cnt
  1591. From u_order_ml
  1592. Where ordertype = 4
  1593. And porderid = :arg_orderid
  1594. And scid = :arg_scid
  1595. And status In (1,2,4,7);
  1596. If sqlca.SQLCode <> 0 Then
  1597. rslt = 0
  1598. arg_msg = OrderCode+'查询下级指令单状态失败'+sqlca.SQLErrText
  1599. Goto ext
  1600. End If
  1601. If cnt > 0 Then
  1602. rslt = 0
  1603. arg_msg = OrderCode+',有下级指令单处于在进行、暂停、待二审或待终审状态,不能手动完成主计划'
  1604. Goto ext
  1605. End If
  1606. End If
  1607. Else
  1608. If arg_finishtype = 1 Then
  1609. If status <> 6 Then
  1610. rslt = 0
  1611. arg_msg = "生产计划只有在手动完成状态下才可以执行取消手动完成,请核对"
  1612. Goto ext
  1613. End If
  1614. End If
  1615. End If
  1616. If arg_finishtype = 5 Or arg_finishtype = 6 Then
  1617. Update u_order_ml
  1618. Set status = :arg_finishtype,
  1619. accomplishdate = getdate(),
  1620. Accomplishemp = :publ_operator
  1621. Where orderid = :arg_orderid
  1622. And scid = :arg_scid;
  1623. If sqlca.SQLCode <> 0 Then
  1624. rslt = 0
  1625. arg_msg = "因网络或其它原因导致完成生产计划操作失败"+"~n"+sqlca.SQLErrText
  1626. Goto ext
  1627. End If
  1628. Else
  1629. Update u_order_ml
  1630. Set status = :arg_finishtype,
  1631. accomplishdate = :null_dt,
  1632. Accomplishemp = ''
  1633. Where orderid = :arg_orderid
  1634. And scid = :arg_scid;
  1635. If sqlca.SQLCode <> 0 Then
  1636. rslt = 0
  1637. arg_msg = "因网络或其它原因导致取消手动完成生产计划操作失败"+"~n"+sqlca.SQLErrText
  1638. Goto ext
  1639. End If
  1640. End If
  1641. If uo_option_auto_finish_zl = 1 And ordertype <> 4 Then
  1642. If arg_finishtype = 5 Or arg_finishtype = 6 Then
  1643. Update u_order_ml
  1644. Set status = 5
  1645. Where porderid = :arg_orderid
  1646. And scid = :arg_scid
  1647. And ordertype = 4;
  1648. If sqlca.SQLCode <> 0 Then
  1649. rslt = 0
  1650. arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText
  1651. Goto ext
  1652. End If
  1653. Else
  1654. Update u_order_ml
  1655. Set status = 1
  1656. Where porderid = :arg_orderid
  1657. And scid = :arg_scid
  1658. And orderqty > acmpqty
  1659. And ordertype = 4;
  1660. If sqlca.SQLCode <> 0 Then
  1661. rslt = 0
  1662. arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText
  1663. Goto ext
  1664. End If
  1665. End If
  1666. End If
  1667. Int li_ifpack
  1668. If ordertype = 4 Then
  1669. Select u_mtrldef.ifpack Into :li_ifpack
  1670. From u_mtrldef
  1671. Where u_mtrldef.mtrlid = :mtrlid;
  1672. If sqlca.SQLCode <> 0 Then
  1673. rslt = 0
  1674. arg_msg = '查询物料是否属于包件失败'+sqlca.SQLErrText
  1675. Goto ext
  1676. End If
  1677. If li_ifpack = 1 Then
  1678. If uof_tryfinish_packorder(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  1679. rslt = 0
  1680. Goto ext
  1681. End If
  1682. End If
  1683. End If
  1684. If uof_order_cmpcost(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  1685. rslt = 0
  1686. Goto ext
  1687. End If
  1688. ext:
  1689. If rslt = 0 Then
  1690. Rollback;
  1691. ElseIf arg_ifcommit And rslt = 1 Then
  1692. Commit;
  1693. End If
  1694. p_reset()
  1695. Return (rslt)
  1696. end function
  1697. public function integer tryfinishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0
  1698. Decimal ld_not_finishqty
  1699. Boolean if_finish
  1700. DateTime null_dt
  1701. SetNull(null_dt)
  1702. IF uo_option_auto_finish_zl = -1000 THEN
  1703. rslt = 0
  1704. arg_msg = '选项:[255]生产计划完成,相关指令单自动完成,读取初始默认值失败,操作取消!'
  1705. GOTO ext
  1706. END IF
  1707. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  1708. rslt = 0
  1709. GOTO ext
  1710. END IF
  1711. IF status <> 1 And status <> 5 THEN
  1712. rslt = 0
  1713. IF status <> 1 THEN
  1714. arg_msg = "生产计划只有在进行状态下才可以执行设完成状态"
  1715. ELSEIF status <> 5 THEN
  1716. arg_msg = "生产计划只有在完成状态下才可以执行撤消完成状态"
  1717. END IF
  1718. GOTO ext
  1719. END IF
  1720. if_finish = True
  1721. SELECT u_order_ml.orderqty - u_order_ml.acmpqty - u_order_ml.stopqty
  1722. INTO :ld_not_finishqty
  1723. FROM u_order_ml
  1724. WHERE ( u_order_ml.orderid = :arg_orderid )
  1725. And ( u_order_ml.scid = :arg_scid );
  1726. IF sqlca.SQLCode <> 0 THEN
  1727. arg_msg = '查询生产计划未完成数量失败'
  1728. rslt = 0
  1729. GOTO ext
  1730. END IF
  1731. IF if_finish THEN
  1732. IF ld_not_finishqty > 0 THEN if_finish = False
  1733. END IF
  1734. IF status = 1 And if_finish THEN
  1735. UPDATE u_order_ml
  1736. SET status = 5,
  1737. accomplishdate = getdate(),
  1738. accomplishemp = :publ_operator
  1739. WHERE ( u_order_ml.orderid = :arg_orderid )
  1740. And ( u_order_ml.scid = :arg_scid );
  1741. IF sqlca.SQLCode <> 0 THEN
  1742. rslt = 0
  1743. arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  1744. GOTO ext
  1745. END IF
  1746. END IF
  1747. IF status = 5 And Not if_finish THEN
  1748. UPDATE u_order_ml
  1749. SET status = 1,
  1750. accomplishdate = :null_dt,
  1751. accomplishemp = ''
  1752. WHERE ( u_order_ml.orderid = :arg_orderid )
  1753. And ( u_order_ml.scid = :arg_scid );
  1754. IF sqlca.SQLCode <> 0 THEN
  1755. rslt = 0
  1756. arg_msg = "因网络或其他原因导致生产计划撤消完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  1757. GOTO ext
  1758. END IF
  1759. END IF
  1760. IF uo_option_auto_finish_zl = 1 And ordertype <> 4 THEN
  1761. IF if_finish THEN
  1762. UPDATE u_order_ml
  1763. SET status = 5
  1764. WHERE porderid = :arg_orderid
  1765. AND scid = :arg_scid
  1766. And ordertype = 4;
  1767. IF sqlca.SQLCode <> 0 THEN
  1768. rslt = 0
  1769. arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText
  1770. GOTO ext
  1771. END IF
  1772. ELSE
  1773. UPDATE u_order_ml
  1774. SET status = 1
  1775. WHERE porderid = :arg_orderid
  1776. AND scid = :arg_scid
  1777. AND orderqty > acmpqty
  1778. And ordertype = 4;
  1779. IF sqlca.SQLCode <> 0 THEN
  1780. rslt = 0
  1781. arg_msg = "因网络或其他原因导致更新相关指令单状态操作失败"+"~n"+sqlca.SQLErrText
  1782. GOTO ext
  1783. END IF
  1784. END IF
  1785. END IF
  1786. Int li_ifpack,li_ifpackpro
  1787. IF ordertype = 4 THEN
  1788. SELECT u_mtrldef.ifpack,u_mtrldef.ifpackpro
  1789. INTO :li_ifpack,:li_ifpackpro
  1790. FROM u_mtrldef
  1791. Where u_mtrldef.mtrlid = :mtrlid;
  1792. IF sqlca.SQLCode <> 0 THEN
  1793. rslt = 0
  1794. arg_msg = '查询物料是否属于包件失败'+sqlca.SQLErrText
  1795. GOTO ext
  1796. END IF
  1797. IF li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro = 3 THEN
  1798. IF uof_tryfinish_packorder(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  1799. rslt = 0
  1800. GOTO ext
  1801. END IF
  1802. END IF
  1803. IF li_ifpackpro = 4 THEN
  1804. IF uof_tryfinish_packorder2(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  1805. rslt = 0
  1806. GOTO ext
  1807. END IF
  1808. END IF
  1809. END IF
  1810. IF uof_order_cmpcost(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  1811. rslt = 0
  1812. GOTO ext
  1813. END IF
  1814. ext:
  1815. IF rslt = 0 THEN
  1816. ROLLBACK;
  1817. ELSEIF rslt = 1 And arg_ifcommit THEN
  1818. COMMIT;
  1819. END IF
  1820. p_reset()
  1821. Return(rslt)
  1822. end function
  1823. public function integer cancel_finishorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);
  1824. int rslt = 1,cnt = 0
  1825. datetime null_dt
  1826. setnull(null_dt)
  1827. rslt =p_getinfo(arg_scid,arg_orderid,arg_msg)
  1828. if rslt = 0 then goto ext
  1829. update u_order_ml
  1830. set status = 1,
  1831. accomplishdate = :null_dt,
  1832. Accomplishemp = ''
  1833. where orderid = :arg_orderid
  1834. and scid = :arg_scid;
  1835. if sqlca.sqlcode <> 0 then
  1836. rslt = 0
  1837. arg_msg = "因网络或其它原因导致取消完成生产计划操作失败"+"~n"+sqlca.sqlerrtext
  1838. goto ext
  1839. end if
  1840. ext:
  1841. if rslt=0 then
  1842. rollback;
  1843. elseif arg_ifcommit and rslt = 1 then
  1844. commit;
  1845. end if
  1846. p_reset()
  1847. return (rslt)
  1848. end function
  1849. public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  1850. Long ls_i,ls_j,ll_k,ll_m,ll_n,ll_o,ll_p
  1851. DateTime server_dt
  1852. String ls_sccode
  1853. String ls_billcode
  1854. Long ll_orderid[],ll_orderqty_array[],ll_tmp_orderid
  1855. String ls_ordercode[],ls_tmp_ordercode
  1856. Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty
  1857. Long cnt,mx_cnt
  1858. Long ll_taskid
  1859. String ls_taskcode
  1860. Decimal ld_upddrate,ld_upddqty
  1861. Long ll_cnt_code
  1862. String ls_code_find_str
  1863. Long ll_lp,ll_loop
  1864. Long ll_mtrlid
  1865. String ls_status,ls_woodcode,ls_pcode
  1866. Boolean lb_iffind = False
  1867. DateTime ldt_RqDate,ldt_edate,ldt_RqDate_tree,ldt_edate_tree,ldt_rqdate_up,ldt_edate_up
  1868. Decimal ld_buydays,ld_wfjgdays,ld_Relative
  1869. Long ll_mtrlid_tree,ll_wrkgrpid,ll_produce_wrkgrpid,li_plantype
  1870. String ls_status_tree,ls_woodcode_tree,ls_pcode_tree
  1871. // ll_printid
  1872. Long ll_fp_array,ll_fp
  1873. Int li_ifpackpro,li_ordertype
  1874. s_mtrlware_assign_plan s_fp_plan
  1875. datastore ds_tree
  1876. ds_tree = Create datastore
  1877. ds_tree.DataObject = 'ds_orderrqmtrl_tree_stop'
  1878. ds_tree.SetTransObject(sqlca)
  1879. uo_mtrlware_assign uo_fp_plan
  1880. uo_fp_plan = Create uo_mtrlware_assign
  1881. uo_fp_plan.commit_transaction = sqlca
  1882. IF uo_option_order_bh_use_yc = -1000 THEN
  1883. rslt = 0
  1884. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  1885. GOTO ext
  1886. END IF
  1887. IF uo_option_order_ml_save_reccl = -1000 THEN
  1888. rslt = 0
  1889. arg_msg = '选项:[222]生产指令单保存时计算用料,读取初始默认值失败,操作取消!'
  1890. GOTO ext
  1891. END IF
  1892. IF uo_option_order_ml_add_use_wkp = -1000 THEN
  1893. rslt = 0
  1894. arg_msg = '选项:[186]生产计划新建时显示工作量,读取初始默认值失败,操作取消!'
  1895. GOTO ext
  1896. END IF
  1897. IF uo_option_order_zl_3_day = -1000 THEN
  1898. rslt = 0
  1899. arg_msg = '选项:[316]指令单保存时更新相关采购需求明细日期,读取初始默认值失败,操作取消!'
  1900. GOTO ext
  1901. END IF
  1902. IF scid < 0 THEN
  1903. rslt = 0
  1904. arg_msg = '请选择正确的分部'
  1905. GOTO ext
  1906. END IF
  1907. IF it_mxbt = 0 THEN
  1908. arg_msg = '没有计划明细保存'
  1909. rslt = 0
  1910. GOTO ext
  1911. END IF
  1912. FOR ls_i = 1 To it_mxbt
  1913. IF s_order_mx[ls_i].ordertype = 1 THEN //检查主计划
  1914. SELECT u_SaleTaskMx.pqty,
  1915. u_SaleTaskMx.AssignQty,
  1916. u_mtrldef.upddrate,
  1917. u_mtrldef.upddqty
  1918. INTO :ld_SaleQty,
  1919. :ld_AssignQty,
  1920. :ld_upddrate,
  1921. :ld_upddqty
  1922. FROM u_SaleTaskMx,u_mtrldef
  1923. WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid AND
  1924. u_SaleTaskMx.scid = :s_order_mx[ls_i].taskscid AND
  1925. u_SaleTaskMx.taskid = :s_order_mx[ls_i].taskid AND
  1926. u_SaleTaskMx.printid = :s_order_mx[ls_i].taskmxid;
  1927. IF sqlca.SQLCode <> 0 THEN
  1928. arg_msg = '查询销售订单已排产数量失败!'+sqlca.SQLErrText
  1929. rslt = 0
  1930. GOTO ext
  1931. END IF
  1932. cnt = 0
  1933. SELECT count(*) INTO :cnt
  1934. FROM u_order_ml_mx INNER JOIN
  1935. u_Order_ml ON u_order_ml_mx.scid = u_Order_ml.scid AND
  1936. u_order_ml_mx.orderid = u_Order_ml.OrderID
  1937. WHERE u_order_ml_mx.taskid = :s_order_mx[ls_i].taskid AND
  1938. u_order_ml_mx.taskscid = :s_order_mx[ls_i].taskscid AND
  1939. u_order_ml_mx.taskmxid = :s_order_mx[ls_i].taskmxid AND
  1940. u_Order_ml.status = 0 ;
  1941. IF sqlca.SQLCode <> 0 THEN
  1942. arg_msg = '查询是否有未审核生产计划失败,'+sqlca.SQLErrText
  1943. rslt = 0
  1944. GOTO ext
  1945. END IF
  1946. ld_ordermx_qty = 0
  1947. IF cnt > 0 THEN
  1948. SELECT sum(u_order_ml_mx.qty)
  1949. INTO :ld_ordermx_qty
  1950. FROM u_order_ml_mx INNER JOIN
  1951. u_Order_ml ON u_order_ml_mx.scid = u_Order_ml.scid AND
  1952. u_order_ml_mx.orderid = u_Order_ml.OrderID
  1953. WHERE u_order_ml_mx.taskid = :s_order_mx[ls_i].taskid AND
  1954. u_order_ml_mx.taskscid = :s_order_mx[ls_i].taskscid AND
  1955. u_order_ml_mx.taskmxid = :s_order_mx[ls_i].taskmxid AND
  1956. u_Order_ml.status = 0 ;
  1957. IF sqlca.SQLCode <> 0 THEN
  1958. arg_msg = '查询已开生计划未审核数失败,'+sqlca.SQLErrText
  1959. rslt = 0
  1960. GOTO ext
  1961. END IF
  1962. END IF
  1963. IF s_order_mx[ls_i].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty THEN
  1964. arg_msg = '第'+String(ls_i)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_i].orderqty,'#,##0.##########')
  1965. rslt = 0
  1966. GOTO ext
  1967. END IF
  1968. ELSEIF s_order_mx[ls_i].ordertype = 4 THEN //检查指令单
  1969. IF s_order_mx[ls_i].pzlorderid = 0 THEN
  1970. SELECT sum(u_OrderRqMtrl.truerqqty),
  1971. sum(u_OrderRqMtrl.consignedQty),
  1972. u_mtrldef.upddrate,
  1973. u_mtrldef.upddqty
  1974. INTO :ld_SaleQty,
  1975. :ld_AssignQty,
  1976. :ld_upddrate,
  1977. :ld_upddqty
  1978. FROM u_OrderRqMtrl,u_mtrldef
  1979. WHERE u_OrderRqMtrl.mtrlid = u_mtrldef.mtrlid AND
  1980. u_OrderRqMtrl.scid = :scid AND
  1981. u_OrderRqMtrl.orderid = :s_order_mx[ls_i].porderid AND
  1982. u_OrderRqMtrl.mtrlid = :s_order_mx[ls_i].mtrlid AND
  1983. u_OrderRqMtrl.status = :s_order_mx[ls_i].status_mode AND
  1984. u_OrderRqMtrl.woodcode = :s_order_mx[ls_i].woodcode AND
  1985. u_OrderRqMtrl.pcode = :s_order_mx[ls_i].pcode
  1986. GROUP BY u_mtrldef.upddrate,
  1987. u_mtrldef.upddqty;
  1988. IF sqlca.SQLCode <> 0 THEN
  1989. arg_msg = '查询主生产计划已排产数量失败!'+sqlca.SQLErrText
  1990. rslt = 0
  1991. GOTO ext
  1992. END IF
  1993. cnt = 0
  1994. SELECT count(*) INTO :cnt
  1995. FROM u_Order_ml
  1996. WHERE u_Order_ml.scid = :scid AND
  1997. u_Order_ml.porderid = :s_order_mx[ls_i].porderid AND
  1998. u_Order_ml.mtrlid = :s_order_mx[ls_i].mtrlid AND
  1999. u_Order_ml.status_mode = :s_order_mx[ls_i].status_mode AND
  2000. u_Order_ml.woodcode = :s_order_mx[ls_i].woodcode AND
  2001. u_Order_ml.pcode = :s_order_mx[ls_i].pcode AND
  2002. u_Order_ml.status = 0 ;
  2003. IF sqlca.SQLCode <> 0 THEN
  2004. arg_msg = '查询是否有未审核车间生产指令失败,'+sqlca.SQLErrText
  2005. rslt = 0
  2006. GOTO ext
  2007. END IF
  2008. ld_ordermx_qty = 0
  2009. IF cnt > 0 THEN
  2010. SELECT sum(u_Order_ml.orderqty)
  2011. INTO :ld_ordermx_qty
  2012. FROM u_Order_ml
  2013. WHERE u_Order_ml.scid = :scid AND
  2014. u_Order_ml.porderid = :s_order_mx[ls_i].porderid AND
  2015. u_Order_ml.mtrlid = :s_order_mx[ls_i].mtrlid AND
  2016. u_Order_ml.status_mode = :s_order_mx[ls_i].status_mode AND
  2017. u_Order_ml.woodcode = :s_order_mx[ls_i].woodcode AND
  2018. u_Order_ml.pcode = :s_order_mx[ls_i].pcode AND
  2019. u_Order_ml.status = 0 ;
  2020. IF sqlca.SQLCode <> 0 THEN
  2021. arg_msg = '查询已开车间生产指令未审核数失败,'+sqlca.SQLErrText
  2022. rslt = 0
  2023. GOTO ext
  2024. END IF
  2025. END IF
  2026. IF s_order_mx[ls_i].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty THEN
  2027. arg_msg = '第'+String(ls_i)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_i].orderqty,'#,##0.##########')
  2028. rslt = 0
  2029. GOTO ext
  2030. END IF
  2031. END IF
  2032. END IF
  2033. NEXT
  2034. //**合并产品
  2035. p_replace_mx()
  2036. IF it_mxbt_ut = 0 THEN
  2037. arg_msg = '没有计划保存'
  2038. rslt = 0
  2039. GOTO ext
  2040. END IF
  2041. SELECT Top 1 getdate() Into :server_dt From u_user ;
  2042. IF sqlca.SQLCode <> 0 THEN
  2043. rslt = 0
  2044. arg_msg = "查询操作失败,日期 "
  2045. GOTO ext
  2046. END IF
  2047. IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  2048. rslt = 0
  2049. GOTO ext
  2050. END IF
  2051. IF sys_option_if_order_billcode = 1 THEN
  2052. ls_billcode = getid(scid,ls_sccode+"PC",Date(server_dt),if_getid_ture,sqlca)
  2053. IF ls_billcode = "err" THEN
  2054. rslt = 0
  2055. arg_msg = "无法获取排产号"+"~n"+sqlca.SQLErrText
  2056. GOTO ext
  2057. END IF
  2058. ELSE
  2059. ls_billcode = ''
  2060. END IF
  2061. //**取ID,单号
  2062. FOR ls_i = 1 To it_mxbt_ut
  2063. ll_tmp_orderid = f_sys_scidentity(scid,"u_order_ml","orderid",arg_msg,True,id_sqlca)
  2064. IF ll_tmp_orderid <= 0 THEN
  2065. rslt = 0
  2066. GOTO ext
  2067. END IF
  2068. IF s_order_ut[1].ordertype = 4 THEN
  2069. IF s_order_ut[ls_i].pzlorderid = 0 THEN
  2070. ls_tmp_ordercode = getid(scid,ls_sccode+"ZL",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  2071. ELSE
  2072. ls_code_find_str = pzlordercode_tmp+'.%'
  2073. ll_cnt_code = 0
  2074. SELECT COUNT(*)
  2075. INTO :ll_cnt_code
  2076. FROM u_Order_ml
  2077. Where (OrderCode Like :ls_code_find_str);
  2078. IF sqlca.SQLCode <> 0 THEN ll_cnt_code = 0
  2079. ll_cnt_code++
  2080. ls_tmp_ordercode = pzlordercode_tmp + '.'+String(ll_cnt_code,'00')
  2081. FOR ll_k = 1 To UpperBound(ls_ordercode)
  2082. IF ls_tmp_ordercode = ls_ordercode[ll_k] THEN
  2083. ll_cnt_code++
  2084. ls_tmp_ordercode = pzlordercode_tmp + '.'+String(ll_cnt_code,'00')
  2085. ll_k = 0
  2086. END IF
  2087. NEXT
  2088. END IF
  2089. ELSE
  2090. ls_tmp_ordercode = getid(scid,ls_sccode+"SC",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  2091. END IF
  2092. IF ls_tmp_ordercode = "err" THEN
  2093. rslt = 0
  2094. arg_msg = "无法获取计划编号"+"~n"+sqlca.SQLErrText
  2095. GOTO ext
  2096. END IF
  2097. ll_orderid[ls_i] = ll_tmp_orderid
  2098. ls_ordercode[ls_i] = ls_tmp_ordercode
  2099. ll_orderqty_array[ls_i] = s_order_ut[ls_i].orderqty
  2100. NEXT
  2101. FOR ls_i = 1 To it_mxbt_ut
  2102. mx_cnt = 0
  2103. ls_taskcode = s_order_ut[ls_i].taskcode
  2104. IF lena(ls_taskcode) > 255 THEN ls_taskcode = lefta(ls_taskcode,255)
  2105. if isnull(s_order_ut[ls_i].ifpban) then s_order_ut[ls_i].ifpban = 0
  2106. if isnull(s_order_ut[ls_i].ifupban) then s_order_ut[ls_i].ifupban = 0
  2107. INSERT INTO u_order_ml
  2108. (scid,
  2109. orderid,
  2110. ordercode,
  2111. billcode,
  2112. relcode,
  2113. orderdate,
  2114. mtrlid,
  2115. status_mode,
  2116. woodcode,
  2117. pcode,
  2118. requiredate,
  2119. orderqty,
  2120. Opemp,
  2121. opdate,
  2122. dscrp,
  2123. Assign_emp,
  2124. ordertype,
  2125. taskrelcode,
  2126. pfcode,
  2127. taskid,
  2128. taskcode,
  2129. taskmxid,
  2130. cusid,
  2131. porderid,
  2132. pordercode,
  2133. wrkGrpid,
  2134. gydscrp,
  2135. pfklmode,
  2136. pforderid,
  2137. pfordercode,
  2138. pfqty,
  2139. secdscrp,
  2140. thdscrp,
  2141. taskscid,
  2142. perfinishdate,
  2143. storageid,
  2144. capacity,
  2145. level,
  2146. typename,
  2147. p_taskrelcode,
  2148. saletaskcode,
  2149. saletaskrelcode,
  2150. cusname,
  2151. p_ordertype,
  2152. p_cusid,
  2153. p_mtrlid,
  2154. outtypestr,
  2155. pzlorderid,
  2156. inwareflag,
  2157. outscllflag,
  2158. iffg,
  2159. ifauto,
  2160. upmtrlid,
  2161. if_inherit,
  2162. addqty,
  2163. ifwforder,
  2164. wpcode,
  2165. pctype,
  2166. notmrpqty,
  2167. ifpban,
  2168. ifupban)
  2169. VALUES (
  2170. :scid,
  2171. :ll_orderid[ls_i],
  2172. :ls_ordercode[ls_i],
  2173. :ls_billcode,
  2174. :s_order_ut[ls_i].relcode,
  2175. :s_order_ut[ls_i].orderdate,
  2176. :s_order_ut[ls_i].mtrlid,
  2177. :s_order_ut[ls_i].status_mode,
  2178. :s_order_ut[ls_i].woodcode,
  2179. :s_order_ut[ls_i].pcode,
  2180. :s_order_ut[ls_i].requiredate,
  2181. :s_order_ut[ls_i].orderqty,
  2182. :publ_operator,
  2183. :server_dt,
  2184. :s_order_ut[ls_i].dscrp,
  2185. :s_order_ut[ls_i].Assign_emp,
  2186. :s_order_ut[ls_i].ordertype,
  2187. :s_order_ut[ls_i].taskrelcode,
  2188. :s_order_ut[ls_i].pfcode,
  2189. :s_order_ut[ls_i].taskid,
  2190. :ls_taskcode,
  2191. :s_order_ut[ls_i].taskmxid,
  2192. :s_order_ut[ls_i].cusid,
  2193. :s_order_ut[ls_i].porderid,
  2194. :s_order_ut[ls_i].pordercode,
  2195. :s_order_ut[ls_i].wrkGrpid,
  2196. :s_order_ut[ls_i].gydscrp,
  2197. :s_order_ut[ls_i].pfklmode,
  2198. :s_order_ut[ls_i].pforderid,
  2199. :s_order_ut[ls_i].pfordercode,
  2200. :s_order_ut[ls_i].pfqty,
  2201. :s_order_ut[ls_i].secdscrp,
  2202. :s_order_ut[ls_i].thdscrp,
  2203. :s_order_ut[ls_i].taskscid,
  2204. :s_order_ut[ls_i].perfinishdate,
  2205. :s_order_ut[ls_i].storageid,
  2206. :s_order_ut[ls_i].capacity,
  2207. :s_order_ut[ls_i].level,
  2208. :s_order_ut[ls_i].typename,
  2209. :s_order_ut[ls_i].p_taskrelcode,
  2210. :s_order_ut[ls_i].saletaskcode,
  2211. :s_order_ut[ls_i].saletaskrelcode,
  2212. :s_order_ut[ls_i].cusname,
  2213. :s_order_ut[ls_i].p_ordertype,
  2214. :s_order_ut[ls_i].p_cusid,
  2215. :s_order_ut[ls_i].p_mtrlid,
  2216. :s_order_ut[ls_i].outtypestr,
  2217. :s_order_ut[ls_i].pzlorderid,
  2218. :s_order_ut[ls_i].inwareflag,
  2219. :s_order_ut[ls_i].outscllflag,
  2220. :s_order_ut[ls_i].iffg,
  2221. :s_order_ut[ls_i].ifauto,
  2222. :s_order_ut[ls_i].upmtrlid,
  2223. :s_order_ut[ls_i].if_inherit,
  2224. :s_order_ut[ls_i].addqty,
  2225. :s_order_ut[ls_i].ifwforder,
  2226. :s_order_ut[ls_i].wpcode,
  2227. :s_order_ut[ls_i].pctype,
  2228. :s_order_ut[ls_i].notmrpqty,
  2229. :s_order_ut[ls_i].ifpban,
  2230. :s_order_ut[ls_i].ifupban) ;
  2231. IF sqlca.SQLCode <> 0 THEN
  2232. rslt = 0
  2233. arg_msg = "因网络或其它原因导致插入计划操作失败"+"~n"+sqlca.SQLErrText
  2234. GOTO ext
  2235. END IF
  2236. IF s_order_ut[ls_i].ordertype = 1 Or &
  2237. s_order_ut[ls_i].ordertype = 2 Or &
  2238. s_order_ut[ls_i].ordertype = 3 Or &
  2239. s_order_ut[ls_i].ordertype = 4 Or &
  2240. s_order_ut[ls_i].ordertype = 0 And &
  2241. uo_option_order_bh_use_yc = 1 THEN
  2242. FOR ls_j = 1 To it_mxbt
  2243. IF s_order_mx[ls_j].utid = s_order_ut[ls_i].utid THEN
  2244. IF s_order_ut[ls_i].iffp = 1 And s_order_ut[ls_i].inwareflag = 1 And s_order_ut[ls_i].fpkind >= 0 THEN
  2245. IF s_order_ut[ls_i].ordertype = 4 And s_order_mx[ls_j].porderid > 0 THEN
  2246. ll_fp_array++
  2247. s_fp_plan.planid[ll_fp_array] = 0
  2248. IF s_order_ut[ls_i].fpkind = 1 THEN
  2249. s_fp_plan.assigntype[ll_fp_array] = 1
  2250. ELSE
  2251. s_fp_plan.assigntype[ll_fp_array] = 0
  2252. END IF
  2253. s_fp_plan.plantype[ll_fp_array] = 1
  2254. s_fp_plan.plankind[ll_fp_array] = 1
  2255. s_fp_plan.plankind_relbillid[ll_fp_array] = ll_orderid[ls_i]
  2256. s_fp_plan.plankind_relprintid[ll_fp_array] = 0
  2257. s_fp_plan.scid[ll_fp_array] = scid
  2258. s_fp_plan.mtrlwareid[ll_fp_array] = 0
  2259. IF s_order_ut[ls_i].fpkind = 1 THEN
  2260. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].p_taskid
  2261. s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].p_taskmxid
  2262. ELSE
  2263. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid
  2264. s_fp_plan.relprintid[ll_fp_array] = 0
  2265. END IF
  2266. s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty
  2267. s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid
  2268. s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode
  2269. s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode
  2270. s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode
  2271. ELSEIF s_order_ut[ls_i].ordertype = 1 THEN //订单
  2272. ll_fp_array++
  2273. s_fp_plan.planid[ll_fp_array] = 0
  2274. s_fp_plan.assigntype[ll_fp_array] = 1
  2275. s_fp_plan.plantype[ll_fp_array] = 1
  2276. s_fp_plan.plankind[ll_fp_array] = 1
  2277. s_fp_plan.plankind_relbillid[ll_fp_array] = ll_orderid[ls_i]
  2278. s_fp_plan.plankind_relprintid[ll_fp_array] = 0
  2279. s_fp_plan.scid[ll_fp_array] = scid
  2280. s_fp_plan.mtrlwareid[ll_fp_array] = 0
  2281. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].taskid
  2282. s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].taskmxid
  2283. s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty
  2284. s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid
  2285. s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode
  2286. s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode
  2287. s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode
  2288. END IF
  2289. END IF
  2290. IF s_order_ut[ls_i].ordertype = 1 Or &
  2291. s_order_ut[ls_i].ordertype = 2 Or &
  2292. s_order_ut[ls_i].ordertype = 3 Or &
  2293. s_order_ut[ls_i].ordertype = 0 And &
  2294. uo_option_order_bh_use_yc = 1 THEN
  2295. ll_taskid = s_order_mx[ls_j].taskid
  2296. ls_taskcode = s_order_mx[ls_j].taskcode
  2297. ELSE
  2298. ll_taskid = s_order_mx[ls_j].porderid
  2299. ls_taskcode = s_order_mx[ls_j].pordercode
  2300. END IF
  2301. UPDATE u_order_ml_mx
  2302. SET qty = qty + :s_order_mx[ls_j].orderqty
  2303. WHERE scid = :scid
  2304. AND orderid = :ll_orderid[ls_i]
  2305. AND taskid = :ll_taskid
  2306. And taskmxid = :s_order_mx[ls_j].taskmxid;
  2307. IF sqlca.SQLCode = 0 THEN
  2308. IF sqlca.SQLNRows = 0 THEN
  2309. INSERT INTO u_order_ml_mx
  2310. (scid,
  2311. orderid,
  2312. taskid,
  2313. taskmxid,
  2314. taskcode,
  2315. qty,
  2316. cusid,
  2317. taskscid)
  2318. VALUES(
  2319. :scid,
  2320. :ll_orderid[ls_i],
  2321. :ll_taskid,
  2322. :s_order_mx[ls_j].taskmxid,
  2323. :ls_taskcode,
  2324. :s_order_mx[ls_j].orderqty,
  2325. :s_order_mx[ls_j].cusid,
  2326. :s_order_mx[ls_j].taskscid);
  2327. IF sqlca.SQLCode <> 0 THEN
  2328. rslt = 0
  2329. arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+sqlca.SQLErrText
  2330. GOTO ext
  2331. END IF
  2332. mx_cnt++
  2333. END IF
  2334. ELSE
  2335. rslt = 0
  2336. arg_msg = "因网络或其它原因导致更新计划明细操作失败"+"~n"+sqlca.SQLErrText
  2337. GOTO ext
  2338. END IF
  2339. END IF
  2340. NEXT
  2341. IF mx_cnt = 0 THEN
  2342. rslt = 0
  2343. IF s_order_ut[ls_i].ordertype = 4 THEN
  2344. arg_msg = '指令单没有相关计划明细,请检查'
  2345. ELSE
  2346. arg_msg = '主生产计划没有相关订单明细,请检查'
  2347. END IF
  2348. GOTO ext
  2349. END IF
  2350. END IF
  2351. IF uo_option_order_ml_save_reccl = 1 THEN
  2352. IF s_order_ut[ls_i].ordertype = 4 And s_order_ut[ls_i].pzlorderid = 0 THEN
  2353. IF uof_reccl(scid,ll_orderid[ls_i],arg_msg,False) = 0 THEN
  2354. rslt = 0
  2355. arg_msg = '计算领料明细失败,'+arg_msg
  2356. GOTO ext
  2357. END IF
  2358. END IF
  2359. IF uo_option_order_zl_3_day = 1 THEN
  2360. IF s_order_ut[ls_i].ordertype = 4 THEN
  2361. //如果是包件产品并且是分离排产的,下级的采购包件按指令单要求完成日期减7天
  2362. SELECT ifpackpro,ordertype
  2363. INTO :li_ifpackpro,:li_ordertype
  2364. FROM u_mtrldef
  2365. Where mtrlid = :s_order_ut[ls_i].mtrlid;
  2366. IF sqlca.SQLCode <> 0 THEN
  2367. rslt = 0
  2368. arg_msg = '查询产品信息失败,'+sqlca.SQLErrText
  2369. GOTO ext
  2370. END IF
  2371. IF li_ifpackpro > 0 And li_ordertype = 1 THEN
  2372. UPDATE u_OrderRqMtrl
  2373. SET u_orderrqmtrl.RqDate = dateadd(day, -7, u_Order_ml.requiredate),
  2374. u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -7, u_Order_ml.requiredate)),
  2375. u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  2376. u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  2377. FROM u_Order_ml INNER JOIN
  2378. u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND
  2379. u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN
  2380. u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND
  2381. u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN
  2382. u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND
  2383. u_Order_ml_p.scid = u_OrderRqMtrl.scid AND
  2384. u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND
  2385. u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN
  2386. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  2387. WHERE (u_OrderRqMtrl.plantype = 2)
  2388. AND (u_mtrldef.ifpack > 0)
  2389. AND (u_OrderRqMtrl_scll.scid = :scid)
  2390. And (u_OrderRqMtrl_scll.orderid = :ll_orderid[ls_i]) ;
  2391. IF sqlca.SQLCode <> 0 THEN
  2392. rslt = 0
  2393. arg_msg = "因网络或其它原因导致更新需求明细日期操作失败(采购包件)"+"~n"+sqlca.SQLErrText
  2394. GOTO ext
  2395. END IF
  2396. ELSE
  2397. //直接采购下级
  2398. UPDATE u_OrderRqMtrl
  2399. SET u_orderrqmtrl.RqDate = dateadd(day, -3, u_Order_ml.orderdate),
  2400. u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)),
  2401. u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  2402. u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  2403. FROM u_Order_ml INNER JOIN
  2404. u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND
  2405. u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN
  2406. u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND
  2407. u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN
  2408. u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND
  2409. u_Order_ml_p.scid = u_OrderRqMtrl.scid AND
  2410. u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND
  2411. u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN
  2412. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  2413. WHERE (u_OrderRqMtrl.plantype = 2)
  2414. AND (u_OrderRqMtrl_scll.scid = :scid)
  2415. And (u_OrderRqMtrl_scll.orderid = :ll_orderid[ls_i]) ;
  2416. IF sqlca.SQLCode <> 0 THEN
  2417. rslt = 0
  2418. arg_msg = "因网络或其它原因导致更新需求明细日期操作失败"+"~n"+sqlca.SQLErrText
  2419. GOTO ext
  2420. END IF
  2421. //下级外协,以及外协下级的外协或采购
  2422. ds_tree.Retrieve(scid,s_order_ut[ls_i].porderid)
  2423. //定位指令单在运算树中的位置
  2424. FOR ll_m = 1 To ds_tree.RowCount()
  2425. ll_mtrlid = ds_tree.Object.mtrlid[ll_m]
  2426. ls_status = ds_tree.Object.status[ll_m]
  2427. ls_woodcode = ds_tree.Object.woodcode[ll_m]
  2428. ls_pcode = ds_tree.Object.pcode[ll_m]
  2429. IF ll_mtrlid = s_order_ut[ls_i].mtrlid And ls_status = s_order_ut[ls_i].status_mode And ls_woodcode = s_order_ut[ls_i].woodcode And ls_pcode = s_order_ut[ls_i].pcode THEN
  2430. ll_lp = ds_tree.Object.lp[ll_m]
  2431. lb_iffind = True
  2432. EXIT
  2433. END IF
  2434. NEXT
  2435. IF lb_iffind THEN
  2436. FOR ll_n = ll_m + 1 To ds_tree.RowCount()
  2437. IF ds_tree.Object.lp[ll_n] <= ll_lp THEN EXIT
  2438. IF ds_tree.Object.lp[ll_n] = ll_lp + 1 And ds_tree.Object.plantype[ll_n] = 3 THEN
  2439. ld_wfjgdays = ds_tree.Object.u_mtrldef_wfjgdays[ll_n]
  2440. ll_mtrlid_tree = ds_tree.Object.mtrlid[ll_n]
  2441. ll_wrkgrpid = ds_tree.Object.wrkGrpid[ll_n]
  2442. ll_produce_wrkgrpid = ds_tree.Object.produce_wrkgrpid[ll_n]
  2443. li_plantype = ds_tree.Object.plantype[ll_n]
  2444. ls_status_tree = ds_tree.Object.status[ll_n]
  2445. ls_woodcode_tree = ds_tree.Object.woodcode[ll_n]
  2446. ls_pcode_tree = ds_tree.Object.pcode[ll_n]
  2447. ldt_RqDate = DateTime(RelativeDate(Date(s_order_ut[ls_i].orderdate),-3),Time(0))
  2448. ldt_edate = DateTime(RelativeDate(Date(ldt_RqDate),0 - Int(ld_wfjgdays)),Time(0))
  2449. ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_n] = ldt_RqDate
  2450. ds_tree.Object.u_orderrqmtrl_tree_edate[ll_n] = ldt_edate
  2451. ds_tree.AcceptText()
  2452. UPDATE u_orderrqmtrl
  2453. SET u_orderrqmtrl.RqDate = :ldt_RqDate,
  2454. u_orderrqmtrl.edate = :ldt_edate,
  2455. u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  2456. u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  2457. WHERE scid = :scid
  2458. AND orderid = :s_order_ut[ls_i].porderid
  2459. AND mtrlid = :ll_mtrlid_tree
  2460. AND wrkgrpid = :ll_wrkgrpid
  2461. AND status = :ls_status_tree
  2462. AND woodcode = :ls_woodcode_tree
  2463. AND pcode = :ls_pcode_tree
  2464. And plantype = :li_plantype;
  2465. IF sqlca.SQLCode <> 0 THEN
  2466. rslt = 0
  2467. arg_msg = '因网络或其它原因导致更新生产计划用料需求日期失败'+"~n"+sqlca.SQLErrText
  2468. GOTO ext
  2469. END IF
  2470. FOR ll_o = ll_n + 1 To ds_tree.RowCount()
  2471. IF ds_tree.Object.lp[ll_o] <= ll_lp + 1 THEN EXIT
  2472. IF ds_tree.Object.plantype[ll_o] <> 2 And ds_tree.Object.plantype[ll_o] <> 3 THEN EXIT
  2473. ll_mtrlid_tree = ds_tree.Object.mtrlid[ll_o]
  2474. ll_wrkgrpid = ds_tree.Object.wrkGrpid[ll_o]
  2475. ll_produce_wrkgrpid = ds_tree.Object.produce_wrkgrpid[ll_o]
  2476. li_plantype = ds_tree.Object.plantype[ll_o]
  2477. ls_status_tree = ds_tree.Object.status[ll_o]
  2478. ls_woodcode_tree = ds_tree.Object.woodcode[ll_o]
  2479. ls_pcode_tree = ds_tree.Object.pcode[ll_o]
  2480. FOR ll_p = ll_o - 1 To 1 Step -1
  2481. IF ds_tree.Object.lp[ll_p] = ds_tree.Object.lp[ll_o] - 1 THEN
  2482. ldt_rqdate_up = ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_p]
  2483. ldt_edate_up = ds_tree.Object.u_orderrqmtrl_tree_edate[ll_p]
  2484. EXIT
  2485. END IF
  2486. NEXT
  2487. IF ds_tree.Object.plantype[ll_o] = 2 THEN
  2488. ld_Relative = ds_tree.Object.u_mtrldef_buydays[ll_o]
  2489. ELSEIF ds_tree.Object.plantype[ll_o] = 3 THEN
  2490. ld_Relative = ds_tree.Object.u_mtrldef_wfjgdays[ll_o]
  2491. END IF
  2492. ldt_RqDate_tree = DateTime(RelativeDate(Date(ldt_edate_up),-3),Time(0))
  2493. ldt_edate_tree = DateTime(RelativeDate(Date(ldt_RqDate_tree),0 - Int(ld_Relative)),Time(0))
  2494. ds_tree.Object.u_orderrqmtrl_tree_rqdate[ll_o] = ldt_RqDate_tree
  2495. ds_tree.Object.u_orderrqmtrl_tree_edate[ll_o] = ldt_edate_tree
  2496. ds_tree.AcceptText()
  2497. UPDATE u_orderrqmtrl
  2498. SET u_orderrqmtrl.RqDate = :ldt_RqDate_tree,
  2499. u_orderrqmtrl.edate = :ldt_edate_tree,
  2500. u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  2501. u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  2502. WHERE scid = :scid
  2503. AND orderid = :s_order_ut[ls_i].porderid
  2504. AND mtrlid = :ll_mtrlid_tree
  2505. AND wrkgrpid = :ll_wrkgrpid
  2506. AND status = :ls_status_tree
  2507. AND woodcode = :ls_woodcode_tree
  2508. AND pcode = :ls_pcode_tree
  2509. And plantype = :li_plantype;
  2510. IF sqlca.SQLCode <> 0 THEN
  2511. rslt = 0
  2512. arg_msg = '因网络或其它原因导致更新生产计划用料需求日期失败'+"~n"+sqlca.SQLErrText
  2513. GOTO ext
  2514. END IF
  2515. NEXT
  2516. ll_n = ll_o - 1
  2517. END IF
  2518. NEXT
  2519. END IF
  2520. END IF
  2521. END IF
  2522. END IF
  2523. END IF
  2524. IF uo_option_order_ml_add_use_wkp = 1 THEN
  2525. IF s_order_ut[ls_i].ordertype <> 4 THEN
  2526. IF uof_order_add_wkp_tmp(scid,ll_orderid[ls_i],s_order_ut[ls_i].tmpid,arg_msg,False) = 0 THEN
  2527. rslt = 0
  2528. arg_msg = '生成工组进度失败,'+arg_msg
  2529. GOTO ext
  2530. END IF
  2531. END IF
  2532. END IF
  2533. //更新主计划自制需求指令单数量yyx20120815
  2534. IF s_order_ut[ls_i].ordertype = 4 And s_order_ut[ls_i].pzlorderid = 0 THEN
  2535. IF uof_update_orderrqmtrl_zlqty(scid,s_order_ut[ls_i].porderid,s_order_ut[ls_i].mtrlid,&
  2536. s_order_ut[ls_i].wrkGrpid,s_order_ut[ls_i].status_mode,s_order_ut[ls_i].woodcode,&
  2537. s_order_ut[ls_i].pcode,s_order_ut[ls_i].orderqty,arg_msg,False) = 0 THEN
  2538. rslt = 0
  2539. GOTO ext
  2540. END IF
  2541. END IF
  2542. //
  2543. //加入进仓计划
  2544. IF s_order_ut[ls_i].inwareflag = 1 THEN
  2545. INSERT INTO u_order_zl_planmx
  2546. (scid,orderid,aps_plancode,begindate,enddate,orderqty)
  2547. VALUES(:scid,:ll_orderid[ls_i],'',
  2548. :s_order_ut[ls_i].orderdate,
  2549. :s_order_ut[ls_i].requiredate,
  2550. :s_order_ut[ls_i].orderqty);
  2551. IF sqlca.SQLCode <> 0 THEN
  2552. rslt = 0
  2553. arg_msg = "因网络或其它原因导致插入进仓计划操作失败"+"~n"+sqlca.SQLErrText
  2554. GOTO ext
  2555. END IF
  2556. END IF
  2557. NEXT
  2558. FOR ll_fp = 1 To ll_fp_array
  2559. IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],&
  2560. s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],&
  2561. s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],&
  2562. s_fp_plan.planassignqty[ll_fp],&
  2563. '',publ_operator,s_fp_plan.plantype[ll_fp],&
  2564. s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],&
  2565. s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],&
  2566. s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN
  2567. arg_msg = '明细行:'+String(ll_fp)+',保存库存分配计划明细表失败,'+arg_msg
  2568. rslt = 0
  2569. GOTO ext
  2570. END IF
  2571. NEXT
  2572. orderid_arr = ll_orderid
  2573. orderqty_arr = ll_orderqty_array
  2574. ext:
  2575. IF rslt = 0 THEN
  2576. ROLLBACK;
  2577. p_clearmx()
  2578. ELSEIF arg_ifcommit And rslt = 1 THEN
  2579. COMMIT;
  2580. END IF
  2581. Destroy ds_tree
  2582. Destroy uo_fp_plan
  2583. Return(rslt)
  2584. end function
  2585. public function integer update (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  2586. Long cnt = 0,ls_j
  2587. String ls_mtrlcode
  2588. Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty,ld_this_orderqty
  2589. Decimal ld_upddrate,ld_upddqty
  2590. Long ll_fp_array,ll_fp
  2591. Int li_p_ordertype,li_p_ifpackpro,li_ifpack,li_ordertype_mtrldef
  2592. Long ll_p_mtrlid,ll_p_taskid,ll_p_taskmxid
  2593. Long ll_statustype
  2594. Decimal ld_capacity,ld_capacity_zj
  2595. s_mtrlcfg_expr s_pz[]
  2596. String ls_status_zj
  2597. long ll_i
  2598. long ll_p_taskscid
  2599. int li_ifbj
  2600. decimal ld_notmrpqty
  2601. s_mtrlware_assign_plan s_fp_plan
  2602. uo_mtrlware_assign uo_fp_plan
  2603. uo_fp_plan = Create uo_mtrlware_assign
  2604. uo_fp_plan.commit_transaction = sqlca
  2605. datastore ds_fp_plan_del
  2606. ds_fp_plan_del = Create datastore
  2607. ds_fp_plan_del.DataObject = 'ds_fp_plan_plankind_del'
  2608. ds_fp_plan_del.SetTransObject(sqlca)
  2609. IF uo_option_def_bom = -1000 THEN
  2610. rslt = 0
  2611. arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!'
  2612. GOTO ext
  2613. END IF
  2614. If uo_option_order_capacity = -1000 Then
  2615. rslt = 0
  2616. arg_msg = '选项:[304]指令单保存按车间产能总量限制,读取初始默认值失败,操作取消!'
  2617. Goto ext
  2618. End If
  2619. If uo_option_bujian_notmrpqty = -1000 Then
  2620. rslt = 0
  2621. arg_msg = '选项:[388]补件类型主计划下属的半成品不参与其他计划的可用数,读取初始默认值失败,操作取消!'
  2622. Goto ext
  2623. End If
  2624. IF IsNull(billcode) THEN billcode = ''
  2625. IF IsNull(ordertype) THEN ordertype = 0
  2626. IF IsNull(relcode) THEN relcode = ''
  2627. IF IsNull(mtrlid) THEN mtrlid = 0
  2628. IF IsNull(status_mode) THEN status_mode = ''
  2629. IF IsNull(woodcode) THEN woodcode = ''
  2630. IF IsNull(pcode) THEN pcode = ''
  2631. IF IsNull(orderqty) THEN orderqty = 0
  2632. IF IsNull(Assign_emp) THEN Assign_emp = ''
  2633. IF IsNull(pfcode) THEN pfcode = ''
  2634. IF IsNull(taskrelcode) THEN taskrelcode = ''
  2635. IF IsNull(taskcode) THEN taskcode = ''
  2636. IF IsNull(taskid) THEN taskid = 0
  2637. IF IsNull(taskmxid) THEN taskmxid = 0
  2638. IF IsNull(cusid) THEN cusid = 0
  2639. IF IsNull(wrkGrpid) THEN wrkGrpid = 0
  2640. IF IsNull(porderid) THEN porderid = 0
  2641. IF IsNull(pordercode) THEN pordercode = ''
  2642. IF IsNull(gydscrp) THEN gydscrp = ''
  2643. IF IsNull(pfklmode) THEN pfklmode = ''
  2644. IF IsNull(dscrp) THEN dscrp = ''
  2645. IF IsNull(secdscrp) THEN secdscrp = ''
  2646. IF IsNull(thdscrp) THEN thdscrp = ''
  2647. IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp
  2648. IF IsNull(storageid) THEN storageid = 0
  2649. IF IsNull(Level) THEN Level = 2
  2650. IF IsNull(typename) THEN typename = ''
  2651. IF IsNull(p_taskrelcode) THEN p_taskrelcode = ''
  2652. IF IsNull(cusname) THEN cusname = ''
  2653. IF IsNull(outtypestr) THEN outtypestr = ''
  2654. IF IsNull(iffg) THEN iffg = 0
  2655. IF IsNull(ifauto) THEN ifauto = 0
  2656. IF IsNull(fgid) THEN fgid = 0
  2657. if isnull(if_inherit) then if_inherit = 0
  2658. if isnull(addqty) then addqty = 0
  2659. if isnull(wpcode) then wpcode = ''
  2660. if isnull(pctype) then pctype = 0
  2661. IF Assign_emp = '' THEN
  2662. arg_msg = '请输入计划负责人'
  2663. rslt = 0
  2664. GOTO ext
  2665. END IF
  2666. IF IsNull(orderdate) Or Year(Date(orderdate)) < 2001 THEN
  2667. rslt = 0
  2668. arg_msg = "请输入合理计划日期"
  2669. GOTO ext
  2670. END IF
  2671. if wpcode = '' then
  2672. arg_msg = '请选择工价表号'
  2673. rslt = 0
  2674. goto ext
  2675. end if
  2676. SELECT mtrlcode,ifpack,ordertype
  2677. INTO :ls_mtrlcode,:li_ifpack,:li_ordertype_mtrldef
  2678. FROM u_mtrldef
  2679. Where mtrlid = :mtrlid;
  2680. IF sqlca.SQLCode <> 0 THEN
  2681. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  2682. rslt = 0
  2683. GOTO ext
  2684. END IF
  2685. IF uo_option_def_bom = 1 THEN
  2686. IF pfcode = '' THEN
  2687. arg_msg = '物料:'+ls_mtrlcode+'请选择物料清单'
  2688. rslt = 0
  2689. GOTO ext
  2690. END IF
  2691. SELECT count(*) INTO :cnt
  2692. FROM u_mtrl_pf
  2693. WHERE mtrlid = :mtrlid
  2694. And pfcode = :pfcode;
  2695. IF sqlca.SQLCode <> 0 THEN
  2696. arg_msg = '查询物料:'+ls_mtrlcode+'对应物料清单失败,'+sqlca.SQLErrText
  2697. rslt = 0
  2698. GOTO ext
  2699. END IF
  2700. IF cnt <> 1 THEN
  2701. arg_msg = '物料:'+ls_mtrlcode+'不存在或重复物料清单:'+pfcode
  2702. rslt = 0
  2703. GOTO ext
  2704. END IF
  2705. END IF
  2706. Select mtrlcode,
  2707. statusflag,
  2708. capacity * capaparm
  2709. Into :ls_mtrlcode,
  2710. :ll_statustype,
  2711. :ld_capacity
  2712. From u_mtrldef
  2713. Where mtrlid = :mtrlid;
  2714. If sqlca.SQLCode <> 0 Then
  2715. arg_msg = '查询物料编号失败,'+sqlca.SQLErrText
  2716. rslt = 0
  2717. Goto ext
  2718. End If
  2719. If ll_statustype = 2 Then
  2720. ld_capacity = 0
  2721. f_checkpz(status_mode,s_pz[])
  2722. For ll_i = 1 To UpperBound(s_pz)
  2723. ls_status_zj = s_pz[ll_i].cfgname
  2724. Select capacity * capaparm
  2725. Into :ld_capacity_zj
  2726. From u_mtrl_configure
  2727. Where mtrlid = :mtrlid
  2728. And Name = :ls_status_zj;
  2729. If sqlca.SQLCode <> 0 Then
  2730. rslt = 0
  2731. arg_msg = "查询子件 "+ls_status_zj+" 折算套数参数操作失败"
  2732. Goto ext
  2733. End If
  2734. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  2735. Next
  2736. End If
  2737. If uo_option_order_capacity = 1 then //And outscllflag = 1 Then
  2738. DateTime server_dt,ldt_sdate,ldt_edate
  2739. Decimal ld_capatotal,ld_capatotal_ot,ld_capacity_sum
  2740. String ls_wrkgrpname
  2741. Select Top 1 getdate() Into :server_dt From u_user;
  2742. If sqlca.SQLCode <> 0 Then
  2743. rslt = 0
  2744. arg_msg = "查询操作失败,日期 "
  2745. Goto ext
  2746. End If
  2747. ldt_sdate = DateTime(Date(server_dt),Time(0))
  2748. ldt_edate = DateTime(Date(server_dt),Time('23:59:59'))
  2749. Select capatotal,capatotal_ot,wrkgrpname
  2750. Into :ld_capatotal,:ld_capatotal_ot,:ls_wrkgrpname
  2751. From u_sc_wkp
  2752. Where wrkGrpid = :wrkgrpid;
  2753. If sqlca.SQLCode <> 0 Then
  2754. rslt = 0
  2755. arg_msg = '查询车间设定产能总量失败,车间ID:'+String(wrkgrpid)
  2756. Goto ext
  2757. End If
  2758. Select sum(capacity)
  2759. Into :ld_capacity_sum
  2760. From u_order_ml
  2761. Where orderdate >= :ldt_sdate
  2762. And orderdate <= :ldt_edate
  2763. And wrkGrpid = :wrkgrpid
  2764. and orderid <> :orderid;
  2765. If sqlca.SQLCode <> 0 Then
  2766. rslt = 0
  2767. arg_msg = '查询车间当天已排产能失败,车间:'+ls_wrkgrpname
  2768. Goto ext
  2769. End If
  2770. if isnull(ld_capacity_sum) then ld_capacity_sum = 0
  2771. If ld_capacity_sum + ld_capacity * orderqty > ld_capatotal + ld_capatotal_ot Then
  2772. rslt = 0
  2773. arg_msg = '车间:'+ls_wrkgrpname+'当天已排产能:'+String(ld_capacity_sum,'#,##0.##########')+',车间设定产能总量:'+String(ld_capatotal + ld_capatotal_ot,'#,##0.##########')+',不能再排产能:'+String(ld_capacity * orderqty,'#,##0.##########')
  2774. Goto ext
  2775. End If
  2776. End If
  2777. IF ordertype = 1 THEN
  2778. IF it_mxbt = 0 THEN
  2779. arg_msg = '没有计划明细保存'
  2780. rslt = 0
  2781. GOTO ext
  2782. END IF
  2783. IF it_mxbt = 1 THEN
  2784. cnt = 0
  2785. SELECT count(*) INTO :cnt
  2786. FROM u_cust
  2787. Where cusid = :cusid;
  2788. IF sqlca.SQLCode <> 0 THEN
  2789. arg_msg = '查询客户资料失败,'+sqlca.SQLErrText
  2790. rslt = 0
  2791. GOTO ext
  2792. END IF
  2793. IF cnt <> 1 THEN
  2794. arg_msg = '不存在客户资料或客户资料重复'
  2795. rslt = 0
  2796. GOTO ext
  2797. END IF
  2798. SELECT name INTO :cusname
  2799. FROM u_cust
  2800. Where cusid = :cusid;
  2801. IF sqlca.SQLCode <> 0 THEN
  2802. arg_msg = '查询客户资料失败,'+sqlca.SQLErrText
  2803. rslt = 0
  2804. GOTO ext
  2805. END IF
  2806. FOR ls_j = 1 To it_mxbt
  2807. cnt = 0
  2808. SELECT count(*) INTO :cnt
  2809. FROM u_saletaskmx
  2810. WHERE scid = :s_order_mx[ls_j].taskscid
  2811. AND taskid = :s_order_mx[ls_j].taskid
  2812. And printid = :s_order_mx[ls_j].taskmxid;
  2813. IF sqlca.SQLCode <> 0 THEN
  2814. arg_msg = '查询物料:'+ls_mtrlcode+'订单资料失败,'+sqlca.SQLErrText
  2815. rslt = 0
  2816. GOTO ext
  2817. END IF
  2818. IF cnt = 0 THEN
  2819. arg_msg = '不存在订单明细:'+ls_mtrlcode
  2820. rslt = 0
  2821. GOTO ext
  2822. END IF
  2823. SELECT u_SaleTaskMx.pqty,
  2824. u_SaleTaskMx.AssignQty,
  2825. u_mtrldef.upddrate,
  2826. u_mtrldef.upddqty
  2827. INTO :ld_SaleQty,
  2828. :ld_AssignQty,
  2829. :ld_upddrate,
  2830. :ld_upddqty
  2831. FROM u_SaleTaskMx,u_mtrldef
  2832. WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid AND
  2833. u_SaleTaskMx.scid = :s_order_mx[ls_j].taskscid AND
  2834. u_SaleTaskMx.taskid = :s_order_mx[ls_j].taskid AND
  2835. u_saletaskmx.printid = :s_order_mx[ls_j].taskmxid;
  2836. IF sqlca.SQLCode <> 0 THEN
  2837. arg_msg = '查询销售订单已排产数量失败!'+sqlca.SQLErrText
  2838. rslt = 0
  2839. GOTO ext
  2840. END IF
  2841. cnt = 0
  2842. SELECT count(*) INTO :cnt
  2843. FROM u_order_ml_mx
  2844. WHERE u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND
  2845. u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND
  2846. u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid;
  2847. IF sqlca.SQLCode <> 0 THEN
  2848. arg_msg = '查询是否已开生计划失败,'+sqlca.SQLErrText
  2849. rslt = 0
  2850. GOTO ext
  2851. END IF
  2852. ld_ordermx_qty = 0
  2853. ld_this_orderqty = 0
  2854. IF cnt > 0 THEN
  2855. SELECT sum(u_order_ml_mx.qty)
  2856. INTO :ld_ordermx_qty
  2857. FROM u_order_ml_mx
  2858. WHERE u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND
  2859. u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND
  2860. u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid;
  2861. IF sqlca.SQLCode <> 0 THEN
  2862. arg_msg = '查询已开生产计划数失败,'+sqlca.SQLErrText
  2863. rslt = 0
  2864. GOTO ext
  2865. END IF
  2866. SELECT u_order_ml_mx.qty
  2867. INTO :ld_this_orderqty
  2868. FROM u_order_ml_mx
  2869. WHERE u_order_ml_mx.scid = :arg_scid AND
  2870. u_order_ml_mx.orderid = :arg_orderid AND
  2871. u_order_ml_mx.taskid = :s_order_mx[ls_j].taskid AND
  2872. u_order_ml_mx.taskscid = :s_order_mx[ls_j].taskscid AND
  2873. u_order_ml_mx.taskmxid = :s_order_mx[ls_j].taskmxid;
  2874. IF sqlca.SQLCode <> 0 THEN
  2875. arg_msg = '查询修改前的已开生产计划数失败,'+sqlca.SQLErrText
  2876. rslt = 0
  2877. GOTO ext
  2878. END IF
  2879. END IF
  2880. IF s_order_mx[ls_j].orderqty > ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty + ld_this_orderqty THEN
  2881. arg_msg = '第'+String(ls_j)+'行待排产数只有:'+String(ld_SaleQty * (1 + ld_upddrate) + ld_upddqty - ld_AssignQty - ld_ordermx_qty + ld_this_orderqty,'#,##0.##########')+',不能再排产:'+String(s_order_mx[ls_j].orderqty,'#,##0.##########')
  2882. rslt = 0
  2883. GOTO ext
  2884. END IF
  2885. NEXT
  2886. END IF
  2887. ELSEIF ordertype = 4 THEN
  2888. IF porderid = 0 THEN
  2889. arg_msg = '指令单没有主生产计划相关联'
  2890. rslt = 0
  2891. GOTO ext
  2892. END IF
  2893. IF wrkGrpid = 0 THEN
  2894. arg_msg = '指令单没有生产车间'
  2895. rslt = 0
  2896. GOTO ext
  2897. END IF
  2898. SELECT u_order_ml.taskrelcode,
  2899. u_order_ml.cusname,
  2900. u_order_ml.ordertype,
  2901. u_order_ml.mtrlid,
  2902. u_mtrldef.ifpackpro,
  2903. u_order_ml.taskid,
  2904. u_order_ml.taskmxid,
  2905. u_order_ml.taskscid
  2906. INTO :p_taskrelcode,
  2907. :cusname,
  2908. :li_p_ordertype,
  2909. :ll_p_mtrlid,
  2910. :li_p_ifpackpro,
  2911. :ll_p_taskid,
  2912. :ll_p_taskmxid,
  2913. :ll_p_taskscid
  2914. FROM u_order_ml,u_mtrldef
  2915. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  2916. AND u_order_ml.scid = :scid
  2917. And u_order_ml.orderid = :porderid;
  2918. IF sqlca.SQLCode <> 0 THEN
  2919. arg_msg = '查询相关主生产计划信息失败,'+sqlca.SQLErrText
  2920. rslt = 0
  2921. GOTO ext
  2922. END IF
  2923. Select u_saletype.ifbj
  2924. Into :li_ifbj
  2925. From u_SaleTask Inner JOIN
  2926. u_saletype ON u_SaleTask.typeid = u_saletype.typeid
  2927. Where u_SaleTask.scid = :ll_p_taskscid
  2928. And u_saletask.taskid = :ll_p_taskid;
  2929. If sqlca.SQLCode <> 0 Then li_ifbj = 0
  2930. If li_ifbj = 1 And uo_option_bujian_notmrpqty = 1 Then
  2931. ld_notmrpqty = orderqty
  2932. Else
  2933. ld_notmrpqty = 0
  2934. End If
  2935. cnt = 0
  2936. SELECT count(*) INTO :cnt
  2937. FROM u_sc_wkp
  2938. Where wrkGrpid = :wrkGrpid;
  2939. IF sqlca.SQLCode <> 0 THEN
  2940. arg_msg = '查询车间资料失败,'+sqlca.SQLErrText
  2941. rslt = 0
  2942. GOTO ext
  2943. END IF
  2944. END IF
  2945. UPDATE u_order_ml
  2946. SET
  2947. relcode = :relcode,
  2948. orderdate = :orderdate,
  2949. requiredate = :requiredate,
  2950. orderqty = :orderqty,
  2951. modemp = :publ_operator,
  2952. moddate = getdate(),
  2953. dscrp = :dscrp,
  2954. Assign_emp = :Assign_emp,
  2955. taskrelcode = :taskrelcode,
  2956. billcode = :billcode,
  2957. status_mode = :status_mode,
  2958. woodcode = :woodcode,
  2959. pcode = :pcode,
  2960. pfcode = :pfcode,
  2961. taskid = :taskid,
  2962. taskmxid = :taskmxid,
  2963. taskcode = :taskcode,
  2964. cusid = :cusid,
  2965. mtrlid = :mtrlid,
  2966. wrkGrpid = :wrkGrpid,
  2967. gydscrp = :gydscrp,
  2968. pfqty = :pfqty,
  2969. porderid = :porderid,
  2970. pordercode = :pordercode,
  2971. secdscrp = :secdscrp,
  2972. thdscrp = :thdscrp,
  2973. perfinishdate = :perfinishdate,
  2974. storageid = :storageid,
  2975. level = :Level,
  2976. typename = :typename,
  2977. p_taskrelcode = :p_taskrelcode,
  2978. cusname = :cusname,
  2979. outtypestr = :outtypestr,
  2980. iffg = :iffg,
  2981. ifauto = :ifauto,
  2982. if_inherit = :if_inherit,
  2983. addqty = :addqty,
  2984. capacity = :ld_capacity * :orderqty,
  2985. wpcode = :wpcode,
  2986. pctype = :pctype,
  2987. notmrpqty = :ld_notmrpqty
  2988. WHERE u_order_ml.orderid = :arg_orderid
  2989. AND u_order_ml.scid = :arg_scid
  2990. And status = 0 ;
  2991. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  2992. rslt = 0
  2993. arg_msg = "因网络或其它原因导致更新计划操作失败"+"~n"+sqlca.SQLErrText
  2994. GOTO ext
  2995. END IF
  2996. DELETE FROM u_order_ml_mx
  2997. WHERE scid = :arg_scid
  2998. And orderid = :arg_orderid;
  2999. IF sqlca.SQLCode <> 0 THEN
  3000. rslt = 0
  3001. arg_msg = "因网络或其它原因导致删除计划明细操作失败"+"~n"+sqlca.SQLErrText
  3002. GOTO ext
  3003. END IF
  3004. //删除原有分配计划明细
  3005. ds_fp_plan_del.Retrieve(arg_scid,arg_orderid,1)
  3006. IF ds_fp_plan_del.RowCount() > 0 THEN
  3007. IF ds_fp_plan_del.Object.sumassignqty[1] > 0 THEN
  3008. rslt = 0
  3009. arg_msg = "原分配计划明细已有分配数,操作取消"
  3010. GOTO ext
  3011. END IF
  3012. END IF
  3013. FOR ll_fp = 1 To ds_fp_plan_del.RowCount()
  3014. IF uo_fp_plan.uof_plan_del(ds_fp_plan_del.Object.id[ll_fp],&
  3015. ds_fp_plan_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN
  3016. arg_msg = '删除分配计划失败,'+arg_msg
  3017. rslt = 0
  3018. GOTO ext
  3019. END IF
  3020. NEXT
  3021. /////////////////////////////////// //
  3022. FOR ls_j = 1 To it_mxbt
  3023. Long ll_taskid
  3024. String ls_taskcode
  3025. IF ordertype <> 4 THEN
  3026. ll_taskid = s_order_mx[ls_j].taskid
  3027. ls_taskcode = s_order_mx[ls_j].taskcode
  3028. ELSE
  3029. ll_taskid = s_order_mx[ls_j].porderid
  3030. ls_taskcode = s_order_mx[ls_j].pordercode
  3031. END IF
  3032. INSERT INTO u_order_ml_mx
  3033. (scid,
  3034. orderid,
  3035. taskid,
  3036. taskmxid,
  3037. taskcode,
  3038. cusid,
  3039. qty,
  3040. taskscid)
  3041. VALUES(
  3042. :arg_scid,
  3043. :arg_orderid,
  3044. :ll_taskid,
  3045. :s_order_mx[ls_j].taskmxid,
  3046. :ls_taskcode,
  3047. :s_order_mx[ls_j].cusid,
  3048. :s_order_mx[ls_j].orderqty,
  3049. :s_order_mx[ls_j].taskscid);
  3050. IF sqlca.SQLCode <> 0 THEN
  3051. rslt = 0
  3052. arg_msg = "因网络或其它原因导致插入计划明细操作失败"+"~n"+sqlca.SQLErrText
  3053. GOTO ext
  3054. END IF
  3055. IF inwareflag = 1 THEN
  3056. IF ordertype = 4 And li_p_ordertype = 1 THEN
  3057. IF s_order_mx[ls_j].iffp = 1 And s_order_mx[ls_j].porderid > 0 THEN
  3058. ll_fp_array++
  3059. s_fp_plan.planid[ll_fp_array] = 0
  3060. CHOOSE CASE li_p_ifpackpro
  3061. CASE 0,3,4
  3062. IF li_ordertype_mtrldef = 1 And ll_p_mtrlid = mtrlid THEN
  3063. s_fp_plan.assigntype[ll_fp_array] = 1
  3064. s_fp_plan.relbillid[ll_fp_array] = ll_p_taskid
  3065. s_fp_plan.relprintid[ll_fp_array] = ll_p_taskmxid
  3066. ELSE
  3067. s_fp_plan.assigntype[ll_fp_array] = 0
  3068. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid
  3069. s_fp_plan.relprintid[ll_fp_array] = 0
  3070. END IF
  3071. CASE 1,2
  3072. IF li_ifpack > 0 THEN
  3073. s_fp_plan.assigntype[ll_fp_array] = 1
  3074. s_fp_plan.relbillid[ll_fp_array] = ll_p_taskid
  3075. s_fp_plan.relprintid[ll_fp_array] = ll_p_taskmxid
  3076. ELSE
  3077. s_fp_plan.assigntype[ll_fp_array] = 0
  3078. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].porderid
  3079. s_fp_plan.relprintid[ll_fp_array] = 0
  3080. END IF
  3081. END CHOOSE
  3082. s_fp_plan.plantype[ll_fp_array] = 1
  3083. s_fp_plan.plankind[ll_fp_array] = 1
  3084. s_fp_plan.plankind_relbillid[ll_fp_array] = arg_orderid
  3085. s_fp_plan.plankind_relprintid[ll_fp_array] = 0
  3086. s_fp_plan.scid[ll_fp_array] = arg_scid
  3087. s_fp_plan.mtrlwareid[ll_fp_array] = 0
  3088. s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty
  3089. s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid
  3090. s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode
  3091. s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode
  3092. s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode
  3093. END IF
  3094. ELSEIF ordertype = 1 THEN
  3095. IF s_order_mx[ls_j].iffp = 1 And s_order_mx[ls_j].porderid > 0 THEN
  3096. ll_fp_array++
  3097. s_fp_plan.planid[ll_fp_array] = 0
  3098. s_fp_plan.assigntype[ll_fp_array] = 1
  3099. s_fp_plan.plantype[ll_fp_array] = 1
  3100. s_fp_plan.plankind[ll_fp_array] = 1
  3101. s_fp_plan.plankind_relbillid[ll_fp_array] = arg_orderid
  3102. s_fp_plan.plankind_relprintid[ll_fp_array] = 0
  3103. s_fp_plan.scid[ll_fp_array] = arg_scid
  3104. s_fp_plan.mtrlwareid[ll_fp_array] = 0
  3105. s_fp_plan.relbillid[ll_fp_array] = s_order_mx[ls_j].taskid
  3106. s_fp_plan.relprintid[ll_fp_array] = s_order_mx[ls_j].taskmxid
  3107. s_fp_plan.planassignqty[ll_fp_array] = s_order_mx[ls_j].orderqty
  3108. s_fp_plan.mtrlid[ll_fp_array] = s_order_mx[ls_j].mtrlid
  3109. s_fp_plan.status[ll_fp_array] = s_order_mx[ls_j].status_mode
  3110. s_fp_plan.woodcode[ll_fp_array] = s_order_mx[ls_j].woodcode
  3111. s_fp_plan.pcode[ll_fp_array] = s_order_mx[ls_j].pcode
  3112. END IF
  3113. END IF
  3114. END IF
  3115. NEXT
  3116. FOR ll_fp = 1 To ll_fp_array
  3117. IF uo_fp_plan.uof_plan_add(s_fp_plan.scid[ll_fp],&
  3118. s_fp_plan.mtrlwareid[ll_fp],s_fp_plan.assigntype[ll_fp],&
  3119. s_fp_plan.relbillid[ll_fp],s_fp_plan.relprintid[ll_fp],&
  3120. s_fp_plan.planassignqty[ll_fp],&
  3121. '',publ_operator,s_fp_plan.plantype[ll_fp],&
  3122. s_fp_plan.plankind[ll_fp],s_fp_plan.plankind_relbillid[ll_fp],&
  3123. s_fp_plan.plankind_relprintid[ll_fp],2,s_fp_plan.mtrlid[ll_fp],&
  3124. s_fp_plan.status[ll_fp],s_fp_plan.woodcode[ll_fp],s_fp_plan.pcode[ll_fp],arg_msg,False) = 0 THEN
  3125. arg_msg = '明细行:'+String(s_fp_plan.plankind_relprintid[ll_fp])+',保存库存分配计划明细表失败,'+arg_msg
  3126. rslt = 0
  3127. GOTO ext
  3128. END IF
  3129. NEXT
  3130. ext:
  3131. IF rslt = 0 THEN
  3132. ROLLBACK;
  3133. p_clearmx()
  3134. ELSEIF arg_ifcommit And rslt = 1 THEN
  3135. COMMIT;
  3136. END IF
  3137. Destroy uo_fp_plan
  3138. Destroy ds_fp_plan_del
  3139. Return(rslt)
  3140. end function
  3141. public function integer addmxcmpl (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3142. Long cnt = 0,ll_mtrlid,ll_mtrlid_p
  3143. Decimal ld_orderqty,ld_acmpqty,ld_inqty,ld_inqty_update
  3144. Long j
  3145. String ls_aps_plancode
  3146. String ls_mtrlname,ls_mtrlcode
  3147. datastore ds_order_inplanmx
  3148. ds_order_inplanmx = Create datastore
  3149. If arg_addqty > 0 Then
  3150. ds_order_inplanmx.DataObject = 'ds_aps_order_plancode_in'
  3151. Else
  3152. ds_order_inplanmx.DataObject = 'ds_aps_order_plancode_in_cancel'
  3153. End If
  3154. ds_order_inplanmx.SetTransObject(sqlca)
  3155. If uo_option_order_bh_use_yc = -1000 Then
  3156. rslt = 0
  3157. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  3158. Goto ext
  3159. End If
  3160. If uo_option_ifovertask_cp = -1000 Then
  3161. rslt = 0
  3162. arg_msg = '选项:[112]超生产计划进仓,读取初始默认值失败,操作取消!'
  3163. Goto ext
  3164. End If
  3165. uo_saletask uo_task
  3166. uo_task = Create uo_saletask
  3167. uo_task.commit_transaction = sqlca
  3168. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  3169. If rslt = 0 Then Goto ext
  3170. If arg_addqty = 0 Then
  3171. arg_msg = '没有完成数量'
  3172. rslt = 0
  3173. Goto ext
  3174. End If
  3175. If status <> 1 And status <> 5 Then
  3176. rslt = 0
  3177. arg_msg = "计划["+ordercode+"]只有在进行或完成状态下才可以执行操作"
  3178. Goto ext
  3179. End If
  3180. Select mtrlname,mtrlcode,u_order_ml.mtrlid
  3181. Into :ls_mtrlname,:ls_mtrlcode,:ll_mtrlid
  3182. From u_mtrldef,u_order_ml
  3183. Where u_order_ml.orderid = :arg_orderid
  3184. And u_order_ml.scid = :arg_scid
  3185. And u_mtrldef.mtrlid = u_order_ml.mtrlid;
  3186. If sqlca.SQLCode <> 0 Then
  3187. rslt = 0
  3188. arg_msg = "因网络或错误产品唯一码导致查询产品操作失败"
  3189. Goto ext
  3190. End If
  3191. Decimal ld_uprate,ld_upqty
  3192. If uo_option_ifovertask_cp = 1 or uo_option_ifovertask_cp = 4 Then //不允许超收
  3193. //检查是否完成
  3194. Select orderqty - stopqty,acmpqty Into :ld_orderqty,:ld_acmpqty
  3195. From u_order_ml
  3196. Where ( orderid = :arg_orderid )
  3197. And ( scid = :arg_scid );
  3198. If sqlca.SQLCode <> 0 Then
  3199. rslt = 0
  3200. arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败"
  3201. Goto ext
  3202. End If
  3203. If ld_orderqty < arg_addqty + ld_acmpqty Then
  3204. rslt = 0
  3205. arg_msg = '该计划明细产品['+ls_mtrlname+']未完成数量'+String(ld_orderqty - ld_acmpqty,'#,##0.00##' )+'小于本次完成数量'
  3206. Goto ext
  3207. End If
  3208. ElseIf uo_option_ifovertask_cp = 3 Then //允许超收但按比例限制
  3209. Select uprate , upqty
  3210. Into :ld_uprate,:ld_upqty
  3211. From u_mtrldef
  3212. Where mtrlid = :ll_mtrlid;
  3213. If sqlca.SQLCode <> 0 Then
  3214. arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText
  3215. rslt = 0
  3216. Goto ext
  3217. End If
  3218. Select orderqty - stopqty,acmpqty Into :ld_orderqty,:ld_acmpqty
  3219. From u_order_ml
  3220. Where ( orderid = :arg_orderid )
  3221. And ( scid = :arg_scid );
  3222. If sqlca.SQLCode <> 0 Then
  3223. rslt = 0
  3224. arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败"
  3225. Goto ext
  3226. End If
  3227. If ld_orderqty * (1 + ld_uprate) + ld_upqty < arg_addqty + ld_acmpqty Then
  3228. rslt = 0
  3229. arg_msg = '该计划明细产品['+ls_mtrlname+']未完成数量'+String(ld_orderqty - ld_acmpqty,'#,##0.00##' )+',允许超收上限:'+String(ld_orderqty * (1 + ld_uprate) + ld_upqty - ld_acmpqty,'#,##0.00##' )+',小于本次完成数量:'+String(arg_addqty,'#,##0.00##' )
  3230. Goto ext
  3231. End If
  3232. End If
  3233. Update u_order_ml
  3234. Set acmpqty = acmpqty + :arg_addqty
  3235. Where ( orderid = :arg_orderid )
  3236. And ( scid = :arg_scid );
  3237. If sqlca.SQLCode <> 0 Then
  3238. rslt = 0
  3239. arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText
  3240. Goto ext
  3241. End If
  3242. uo_order_ml uo_order
  3243. uo_order = Create uo_order_ml
  3244. Long ls_i
  3245. If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  3246. rslt = 0
  3247. Goto ext
  3248. End If
  3249. Decimal ld_addqty,ld_noinwareqty,ld_addinqty,ld_inwareqty,ld_saleqty
  3250. ld_addqty = arg_addqty
  3251. If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then
  3252. If ld_addqty > 0 Then
  3253. For ls_i = 1 To it_mxbt
  3254. If s_order_mx[ls_i].taskid > 0 Then
  3255. Select SaleQty , inwareQty Into :ld_saleqty,:ld_inwareqty
  3256. From u_saletaskmx
  3257. Where scid = :s_order_mx[ls_i].taskscid
  3258. And taskid = :s_order_mx[ls_i].taskid
  3259. And printid = :s_order_mx[ls_i].taskmxid;
  3260. If sqlca.SQLCode <> 0 Then
  3261. rslt = 0
  3262. arg_msg = '查询相关订单明细未进仓数失败'+"~n"+sqlca.SQLErrText
  3263. Goto ext
  3264. End If
  3265. ld_noinwareqty = ld_saleqty - ld_inwareqty
  3266. If ld_noinwareqty > 0 Then
  3267. If ld_addqty > ld_noinwareqty Then
  3268. ld_addinqty = ld_noinwareqty
  3269. ld_addqty = ld_addqty - ld_noinwareqty
  3270. Else
  3271. ld_addinqty = ld_addqty
  3272. ld_addqty = 0
  3273. End If
  3274. If uo_task.updateinwareqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,ld_addinqty,arg_msg,False) = 0 Then
  3275. rslt = 0
  3276. Goto ext
  3277. End If
  3278. End If
  3279. If uo_task.trycmptask_fore(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,arg_msg,False) = 0 Then
  3280. rslt = 0
  3281. Goto ext
  3282. End If
  3283. If ld_addqty = 0 Then Exit
  3284. End If
  3285. Next
  3286. Else
  3287. For ls_i = it_mxbt To 1 Step -1
  3288. If s_order_mx[ls_i].taskid > 0 Then
  3289. Select SaleQty , inwareQty Into :ld_saleqty,:ld_inwareqty
  3290. From u_saletaskmx
  3291. Where scid = :s_order_mx[ls_i].taskscid
  3292. And taskid = :s_order_mx[ls_i].taskid
  3293. And printid = :s_order_mx[ls_i].taskmxid;
  3294. If sqlca.SQLCode <> 0 Then
  3295. rslt = 0
  3296. arg_msg = '查询相关订单明细未进仓数失败'+"~n"+sqlca.SQLErrText
  3297. Goto ext
  3298. End If
  3299. If ld_inwareqty > 0 Then
  3300. If 0 - ld_addqty > ld_inwareqty Then
  3301. ld_addinqty = 0 - ld_inwareqty
  3302. ld_addqty = ld_addqty + ld_inwareqty
  3303. Else
  3304. ld_addinqty = ld_addqty
  3305. ld_addqty = 0
  3306. End If
  3307. End If
  3308. If uo_task.updateinwareqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,ld_addinqty,arg_msg,False) = 0 Then
  3309. rslt = 0
  3310. Goto ext
  3311. End If
  3312. If uo_task.trycmptask_fore(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,arg_msg,False) = 0 Then
  3313. rslt = 0
  3314. Goto ext
  3315. End If
  3316. If ld_addqty = 0 Then Exit
  3317. End If
  3318. Next
  3319. End If
  3320. End If
  3321. //更新分离排产产品上级计划完成数
  3322. If ordertype = 4 And porderid > 0 And pzlorderid = 0 Then
  3323. Long ll_cnt_order
  3324. Select count(*) Into :ll_cnt_order
  3325. From u_order_ml
  3326. Where scid = :scid
  3327. And orderid = :porderid;
  3328. If sqlca.SQLCode <> 0 Then
  3329. arg_msg = '查询相关生产计划失败,'+sqlca.SQLErrText
  3330. rslt = 0
  3331. Goto ext
  3332. End If
  3333. If ll_cnt_order > 0 Then
  3334. If uo_order.f_assign_inqty(scid,porderid,wrkGrpid,0,&
  3335. mtrlid,ls_mtrlcode,status_mode,&
  3336. woodcode,pcode,arg_addqty,arg_msg,False) = 0 Then
  3337. rslt = 0
  3338. Goto ext
  3339. End If
  3340. Select u_order_ml.mtrlid
  3341. Into :ll_mtrlid_p
  3342. From u_order_ml
  3343. Where u_order_ml.orderid = :porderid
  3344. And u_order_ml.scid = :arg_scid;
  3345. If sqlca.SQLCode <> 0 Then
  3346. rslt = 0
  3347. arg_msg = "查询主生产计划物料ID失败,"+sqlca.SQLErrText
  3348. Goto ext
  3349. End If
  3350. If ll_mtrlid_p = ll_mtrlid Then
  3351. If uo_order.addmxcmpl(arg_scid,porderid,arg_addqty,arg_msg,False) = 0 Then
  3352. rslt = 0
  3353. Goto ext
  3354. End If
  3355. If uo_order.tryfinishorder(arg_scid,porderid,arg_msg,False) = 0 Then
  3356. rslt = 0
  3357. Goto ext
  3358. End If
  3359. End If
  3360. End If
  3361. End If
  3362. //更新进仓计划
  3363. If inwareflag = 1 Then
  3364. ds_order_inplanmx.Retrieve(arg_scid,arg_orderid)
  3365. If arg_addqty > 0 Then
  3366. ld_inqty = arg_addqty
  3367. If ds_order_inplanmx.RowCount() = 0 Then
  3368. arg_msg = '指令单没有排程批次,请检查'
  3369. rslt = 0
  3370. Goto ext
  3371. End If
  3372. For j = 1 To ds_order_inplanmx.RowCount()
  3373. If ld_inqty = 0 Then Exit
  3374. If j = ds_order_inplanmx.RowCount() Then
  3375. ld_inqty_update = ld_inqty
  3376. ld_inqty = 0
  3377. Else
  3378. If ds_order_inplanmx.Object.notinqty[j] <= 0 Then Continue
  3379. If ld_inqty > ds_order_inplanmx.Object.notinqty[j] Then
  3380. ld_inqty_update = ds_order_inplanmx.Object.notinqty[j]
  3381. ld_inqty = ld_inqty - ds_order_inplanmx.Object.notinqty[j]
  3382. Else
  3383. ld_inqty_update = ld_inqty
  3384. ld_inqty = 0
  3385. End If
  3386. End If
  3387. ls_aps_plancode = ds_order_inplanmx.Object.aps_plancode[j]
  3388. Update u_order_zl_planmx
  3389. Set inqty = inqty + :ld_inqty_update
  3390. Where scid = :arg_scid
  3391. And orderid = :arg_orderid
  3392. And aps_plancode = :ls_aps_plancode;
  3393. If sqlca.SQLCode <> 0 Then
  3394. arg_msg = '更新进仓计划已进仓数失败,'+sqlca.SQLErrText
  3395. rslt = 0
  3396. Goto ext
  3397. End If
  3398. Next
  3399. // IF ld_inqty > 0 THEN
  3400. // arg_msg = '进仓计划有余数,请检查'
  3401. // rslt = 0
  3402. // GOTO ext
  3403. // END IF
  3404. Else
  3405. ld_inqty = Abs(arg_addqty)
  3406. If ds_order_inplanmx.RowCount() = 0 Then
  3407. arg_msg = '指令单没有排程批次,请检查'
  3408. rslt = 0
  3409. Goto ext
  3410. End If
  3411. For j = 1 To ds_order_inplanmx.RowCount()
  3412. If ld_inqty = 0 Then Exit
  3413. If ld_inqty > ds_order_inplanmx.Object.inqty[j] Then
  3414. ld_inqty_update = ds_order_inplanmx.Object.inqty[j]
  3415. ld_inqty = ld_inqty - ds_order_inplanmx.Object.inqty[j]
  3416. Else
  3417. ld_inqty_update = ld_inqty
  3418. ld_inqty = 0
  3419. End If
  3420. ls_aps_plancode = ds_order_inplanmx.Object.aps_plancode[j]
  3421. Update u_order_zl_planmx
  3422. Set inqty = inqty - :ld_inqty_update
  3423. Where scid = :arg_scid
  3424. And orderid = :arg_orderid
  3425. And aps_plancode = :ls_aps_plancode;
  3426. If sqlca.SQLCode <> 0 Then
  3427. arg_msg = '更新进仓计划已进仓数失败,'+sqlca.SQLErrText
  3428. rslt = 0
  3429. Goto ext
  3430. End If
  3431. Next
  3432. If ld_inqty > 0 Then
  3433. arg_msg = '进仓计划有余数,请检查'
  3434. rslt = 0
  3435. Goto ext
  3436. End If
  3437. End If
  3438. End If
  3439. ext:
  3440. If rslt = 0 Then
  3441. Rollback;
  3442. ElseIf arg_ifcommit And rslt = 1 Then
  3443. Commit;
  3444. End If
  3445. Destroy uo_order
  3446. p_reset()
  3447. Return (rslt)
  3448. end function
  3449. private function integer p_getinfo (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0
  3450. IF arg_orderid <= 0 THEN
  3451. rslt = 0
  3452. arg_msg = '错误生产计划唯一码'
  3453. GOTO ext
  3454. END IF
  3455. SELECT u_Order_ml.OrderCode,
  3456. u_Order_ml.relcode,
  3457. u_Order_ml.orderdate,
  3458. u_Order_ml.mtrlid,
  3459. u_Order_ml.Status,
  3460. u_Order_ml.status_mode,
  3461. u_Order_ml.woodcode,
  3462. u_Order_ml.pcode,
  3463. u_Order_ml.orderqty,
  3464. u_Order_ml.AcmpQty,
  3465. u_Order_ml.stopqty,
  3466. u_Order_ml.Requiredate,
  3467. u_Order_ml.Accomplishdate,
  3468. u_Order_ml.Accomplishemp,
  3469. u_Order_ml.Opemp,
  3470. u_Order_ml.Permit_emp,
  3471. u_Order_ml.Permit_date,
  3472. u_Order_ml.Opdate,
  3473. u_Order_ml.stopemp,
  3474. u_Order_ml.Dscrp,
  3475. u_Order_ml.Modemp,
  3476. u_Order_ml.moddate,
  3477. u_Order_ml.Assign_emp,
  3478. u_Order_ml.ordertype,
  3479. u_Order_ml.taskrelcode,
  3480. u_Order_ml.pfcode,
  3481. u_Order_ml.taskid,
  3482. u_Order_ml.taskmxid,
  3483. u_Order_ml.taskcode,
  3484. u_Order_ml.cusid,
  3485. u_Order_ml.ctmint,
  3486. u_Order_ml.porderid,
  3487. u_Order_ml.pordercode,
  3488. u_Order_ml.scllflag,
  3489. u_Order_ml.scllsecflag,
  3490. u_Order_ml.relrqbuyid,
  3491. u_Order_ml.relrqbuycode,
  3492. u_Order_ml.planqty,
  3493. u_Order_ml.wrkGrpid,
  3494. u_Order_ml.gydscrp,
  3495. u_Order_ml.pfklmode,
  3496. u_Order_ml.relrqwfjgid,
  3497. u_Order_ml.relrqwfjgcode,
  3498. u_order_ml.pforderid,
  3499. u_order_ml.pfordercode,
  3500. u_order_ml.pfqty,
  3501. u_order_ml.taskscid,
  3502. u_order_ml.perfinishdate,
  3503. u_order_ml.stopjj,
  3504. u_order_ml.stopjjemp,
  3505. u_order_ml.stopjjdate,
  3506. u_order_ml.stopjjreason,
  3507. u_order_ml.storageid,
  3508. u_order_ml.capacity,
  3509. u_order_ml.inwareflag,
  3510. u_order_ml.outscllflag,
  3511. u_order_ml.pzlorderid,
  3512. u_order_ml.secdscrp,
  3513. u_order_ml.thdscrp,
  3514. u_order_ml.Level,
  3515. u_order_ml.typename,
  3516. u_mtrldef.ifpackpro,
  3517. u_order_ml.iffg,
  3518. u_order_ml.ifauto,
  3519. u_order_ml.okplan_flag,
  3520. u_order_ml.if_inherit,
  3521. u_order_ml.addqty,
  3522. u_order_ml.ifwforder,
  3523. u_order_ml.wpcode,
  3524. u_order_ml.pctype,
  3525. u_order_ml.ifpban,
  3526. u_order_ml.ifupban
  3527. INTO :OrderCode,
  3528. :relcode,
  3529. :orderdate,
  3530. :mtrlid,
  3531. :Status,
  3532. :status_mode,
  3533. :woodcode,
  3534. :pcode,
  3535. :orderqty,
  3536. :AcmpQty,
  3537. :stopqty,
  3538. :Requiredate,
  3539. :Accomplishdate,
  3540. :Accomplishemp,
  3541. :Opemp,
  3542. :Permit_emp,
  3543. :Permit_date,
  3544. :Opdate,
  3545. :stopemp,
  3546. :Dscrp,
  3547. :Modemp,
  3548. :moddate,
  3549. :Assign_emp,
  3550. :ordertype,
  3551. :taskrelcode,
  3552. :pfcode,
  3553. :taskid,
  3554. :taskmxid,
  3555. :taskcode,
  3556. :cusid,
  3557. :ctmint,
  3558. :porderid,
  3559. :pordercode,
  3560. :scllflag,
  3561. :scllsecflag,
  3562. :relrqbuyid,
  3563. :relrqbuycode,
  3564. :planqty,
  3565. :wrkGrpid,
  3566. :gydscrp,
  3567. :pfklmode,
  3568. :relrqwfjgid,
  3569. :relrqwfjgcode,
  3570. :pforderid,
  3571. :pfordercode,
  3572. :pfqty,
  3573. :taskscid,
  3574. :perfinishdate,
  3575. :stopjj,
  3576. :stopjjemp,
  3577. :stopjjdate,
  3578. :stopjjreason,
  3579. :storageid,
  3580. :capacity,
  3581. :inwareflag,
  3582. :outscllflag,
  3583. :pzlorderid,
  3584. :secdscrp,
  3585. :thdscrp,
  3586. :Level,
  3587. :typename,
  3588. :ifpackpro_mtrl,
  3589. :iffg,
  3590. :ifauto,
  3591. :okplan_flag,
  3592. :if_inherit,
  3593. :addqty,
  3594. :ifwforder,
  3595. :wpcode,
  3596. :pctype,
  3597. :ifpban,
  3598. :ifupban
  3599. FROM u_Order_ml inner join u_mtrldef on u_Order_ml.mtrlid = u_mtrldef.mtrlid
  3600. WHERE u_order_ml.orderid = :arg_orderid
  3601. AND u_Order_ml.scid = :arg_scid;
  3602. IF sqlca.SQLCode <> 0 THEN
  3603. rslt = 0
  3604. arg_msg = '查询生产计划内容失败(错误生产计划唯一码)'
  3605. GOTO ext
  3606. END IF
  3607. scid = arg_scid
  3608. orderid = arg_orderid
  3609. ext:
  3610. IF rslt = 0 THEN p_reset()
  3611. RETURN rslt
  3612. end function
  3613. private function integer p_clearmx ();//int p_clearmx()
  3614. //清除明细
  3615. it_mxbt = 0
  3616. it_mxbt_ut = 0
  3617. it_mxbt_wrk = 0
  3618. RETURN 1
  3619. end function
  3620. public function integer newbegin (long arg_scid);Long rslt = 1
  3621. p_reset()
  3622. scid = arg_scid
  3623. RETURN rslt
  3624. end function
  3625. public function integer update_bom (long arg_scid, long arg_orderid, string arg_pfcode, ref string arg_msg);
  3626. Int rslt = 1
  3627. Long cnt = 0
  3628. Int li_ifpackpro
  3629. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  3630. IF rslt = 0 THEN GOTO ext
  3631. IF status <> 1 THEN
  3632. rslt = 0
  3633. arG_MSG = "只有在进行状态下才能重选清单"
  3634. GOTO ext
  3635. END IF
  3636. //
  3637. IF scllflag = 1 THEN
  3638. rslt = 0
  3639. arG_MSG = "计划已执行用料初审,不能重选清单"
  3640. GOTO ext
  3641. END IF
  3642. IF scllsecflag = 1 THEN
  3643. rslt = 0
  3644. arG_MSG = "计划已执行用料终审,不能重选清单"
  3645. GOTO ext
  3646. END IF
  3647. //
  3648. //检查是否已开指令单,申购单,外协申请单
  3649. IF uof_check_if_zl(arg_scid,arg_orderid,arG_MSG) = 0 THEN
  3650. rslt = 0
  3651. GOTO ext
  3652. END IF
  3653. IF uof_check_if_rbuy(arg_scid,arg_orderid,arG_MSG) = 0 THEN
  3654. rslt = 0
  3655. GOTO ext
  3656. END IF
  3657. IF uof_check_if_wfjg(arg_scid,arg_orderid,arG_MSG) = 0 THEN
  3658. rslt = 0
  3659. GOTO ext
  3660. END IF
  3661. //
  3662. SELECT count(*) INTO :cnt
  3663. FROM u_mtrl_pf
  3664. WHERE mtrlid = :mtrlid
  3665. And pfcode = :arg_pfcode;
  3666. IF sqlca.SQLCode <> 0 THEN
  3667. arG_MSG = '查询产品BOM资料失败,'+sqlca.SQLErrText
  3668. rslt = 0
  3669. GOTO ext
  3670. END IF
  3671. IF cnt = 0 THEN
  3672. arG_MSG = '产品BOM资料不存在'
  3673. rslt = 0
  3674. GOTO ext
  3675. END IF
  3676. SELECT ifpackpro
  3677. INTO :li_ifpackpro
  3678. FROM u_mtrldef
  3679. Where mtrlid = :mtrlid;
  3680. IF sqlca.SQLCode <> 0 THEN
  3681. arG_MSG = '查询计划物料包件产品属性失败,'+sqlca.SQLErrText
  3682. rslt = 0
  3683. GOTO ext
  3684. END IF
  3685. IF li_ifpackpro = 2 And pfcode <> arg_pfcode THEN
  3686. DELETE FROM u_saletaskmx_pf
  3687. WHERE scid = :arg_scid
  3688. AND taskid = :taskid
  3689. And printid = :taskmxid;
  3690. IF sqlca.SQLCode <> 0 THEN
  3691. arG_MSG = '主生产计划对应销售订单明细删除包件清单明细失败,'+sqlca.SQLErrText
  3692. rslt = 0
  3693. GOTO ext
  3694. END IF
  3695. INSERT INTO u_saletaskmx_pf
  3696. (scid,
  3697. taskid,
  3698. printid,
  3699. mtrlid,
  3700. sonmtrlid,
  3701. status,
  3702. woodcode,
  3703. pcode,
  3704. Sonscale,
  3705. Sonscale_fm)
  3706. SELECT :arg_scid,
  3707. :taskid,
  3708. :taskmxid,
  3709. :MtrlID,
  3710. u_prdpf.sonmtrlid,
  3711. case u_prdpf.ifover when 0 then u_prdpf.status when 1 then case when u_prdpf.dipztype=0 or u_prdpf.dipztype=3 or u_prdpf.dipztype=5 or u_prdpf.dipztype=6 then :status_mode else '' END END,
  3712. case u_prdpf.ifover when 0 then u_prdpf.woodcode when 1 then case when u_prdpf.dipztype=1 or u_prdpf.dipztype=3 or u_prdpf.dipztype=4 or u_prdpf.dipztype=6 then :woodcode else '' END END,
  3713. case u_prdpf.ifover when 0 then u_prdpf.pcode when 1 then case when u_prdpf.dipztype=2 or u_prdpf.dipztype=4 or u_prdpf.dipztype=5 or u_prdpf.dipztype=6 then :pcode else '' END END,
  3714. u_prdpf.sonscale,
  3715. 1
  3716. FROM u_prdpf,u_mtrldef
  3717. WHERE u_prdpf.mtrlid = :MtrlID
  3718. AND u_prdpf.pfcode = :arg_pfcode
  3719. AND u_prdpf.sonmtrlid = u_mtrldef.mtrlid
  3720. AND u_mtrldef.ifpack > 0;
  3721. IF sqlca.SQLCode <> 0 THEN
  3722. arg_msg = '新建主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText
  3723. rslt = 0
  3724. GOTO ext
  3725. END IF
  3726. END if
  3727. UPDATE u_order_ml
  3728. SET pfcode = :arg_pfcode
  3729. WHERE u_order_ml.orderid = :arg_orderid
  3730. And u_order_ml.scid = :arg_scid;
  3731. IF sqlca.SQLCode <> 0 THEN
  3732. rslt = 0
  3733. arG_MSG = "因网络或其它原因导致更新计划BOM失败"+"~n"+sqlca.SQLErrText
  3734. GOTO ext
  3735. END IF
  3736. ext:
  3737. IF rslt = 1 THEN
  3738. COMMIT;
  3739. else
  3740. rollback;
  3741. END IF
  3742. p_reset()
  3743. Return (rslt)
  3744. end function
  3745. public function integer uof_finish_procode_qty (long arg_scid, long arg_orderid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3746. Int li_finishflag
  3747. DateTime null_dt
  3748. SetNull(null_dt)
  3749. IF uo_option_ml_wkp = -1000 THEN
  3750. rslt = 0
  3751. arg_msg = '选项:[047]生产计划直接确认车间完成,读取初始默认值失败,操作取消!'
  3752. GOTO ext
  3753. END IF
  3754. IF uo_option_ml_wkp = 0 THEN
  3755. arg_msg = '系统没有设置为直接确认生产计划车间完成'
  3756. rslt = 0
  3757. GOTO ext
  3758. END IF
  3759. SELECT finishflag INTO :li_finishflag
  3760. FROM U_OrderRqwp
  3761. WHERE scid = :arg_scid
  3762. AND orderid = :arg_orderid
  3763. AND Procode = :arg_procode;
  3764. IF sqlca.SQLCode <> 0 THEN
  3765. arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText
  3766. rslt = 0
  3767. GOTO ext
  3768. END IF
  3769. IF arg_type = 0 THEN
  3770. IF li_finishflag = 1 THEN
  3771. arg_msg = '工序已确认完成,不能再确认'
  3772. rslt = 0
  3773. GOTO ext
  3774. END IF
  3775. UPDATE U_OrderRqwp
  3776. SET finishflag = 1,
  3777. finishdate = getdate(),
  3778. finishqty = proqty
  3779. WHERE scid = :arg_scid
  3780. AND orderid = :arg_orderid
  3781. AND Procode = :arg_procode
  3782. AND finishflag = 0;
  3783. IF sqlca.SQLCode <> 0 THEN
  3784. arg_msg = '确认工序完成失败,'+sqlca.SQLErrText
  3785. rslt = 0
  3786. GOTO ext
  3787. END IF
  3788. ELSE
  3789. IF li_finishflag = 0 THEN
  3790. arg_msg = '工序还未确认,不能取消确认'
  3791. rslt = 0
  3792. GOTO ext
  3793. END IF
  3794. UPDATE U_OrderRqwp
  3795. SET finishflag = 0,
  3796. finishdate = :null_dt,
  3797. finishqty = 0
  3798. WHERE scid = :arg_scid
  3799. AND orderid = :arg_orderid
  3800. AND Procode = :arg_procode
  3801. AND finishflag = 1;
  3802. IF sqlca.SQLCode <> 0 THEN
  3803. arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText
  3804. rslt = 0
  3805. GOTO ext
  3806. END IF
  3807. END IF
  3808. ext:
  3809. IF rslt = 0 THEN
  3810. ROLLBACK;
  3811. ELSEIF rslt = 1 AND arg_ifcommit THEN
  3812. COMMIT;
  3813. END IF
  3814. RETURN rslt
  3815. end function
  3816. public function integer addmxcmpl_planqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3817. long cnt = 0
  3818. Dec ld_orderqty,ld_planqty
  3819. String ls_mtrlname
  3820. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  3821. IF rslt = 0 THEN GOTO ext
  3822. IF arg_addqty = 0 THEN
  3823. arg_msg = '没有完成数量'
  3824. rslt = 0
  3825. GOTO ext
  3826. END IF
  3827. IF status <> 1 THEN
  3828. rslt = 0
  3829. arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作"
  3830. GOTO ext
  3831. END IF
  3832. SELECT mtrlname INTO :ls_mtrlname
  3833. FROM u_mtrldef,u_order_ml
  3834. Where u_order_ml.orderid = :arg_orderid
  3835. and u_order_ml.scid = :arg_scid
  3836. and u_mtrldef.mtrlid = u_order_ml.mtrlid;
  3837. IF sqlca.SQLCode <> 0 THEN
  3838. rslt = 0
  3839. arg_msg = "因网络或错误产品唯一码导致查询产品操作失败"
  3840. GOTO ext
  3841. END IF
  3842. //检查是否完成
  3843. SELECT orderqty,planqty INTO :ld_orderqty,:ld_planqty
  3844. FROM u_order_ml
  3845. WHERE ( orderid = :arg_orderid )
  3846. AND ( scid = :arg_scid );
  3847. IF sqlca.SQLCode <> 0 THEN
  3848. rslt = 0
  3849. arg_msg = "因网络或错误查询产品唯一码或计划计划数和已排程数量操作失败"
  3850. GOTO ext
  3851. END IF
  3852. IF status = 1 THEN
  3853. IF ld_orderqty < arg_addqty + ld_planqty THEN
  3854. rslt = 0
  3855. arg_msg = '该计划明细产品:'+ls_mtrlname+',未排程数'+String(ld_orderqty - ld_planqty,'#,##0.00##' )+'小于本次排程数'
  3856. GOTO ext
  3857. END IF
  3858. END IF
  3859. UPDATE u_order_ml
  3860. SET planqty = planqty + :arg_addqty
  3861. WHERE ( orderid = :arg_orderid )
  3862. AND ( scid = :arg_scid );
  3863. IF sqlca.SQLCode <> 0 THEN
  3864. rslt = 0
  3865. arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText
  3866. GOTO ext
  3867. END IF
  3868. ext:
  3869. IF rslt = 0 THEN
  3870. ROLLBACK;
  3871. ELSEIF arg_ifcommit AND rslt = 1 THEN
  3872. COMMIT;
  3873. END IF
  3874. p_reset()
  3875. RETURN (rslt)
  3876. end function
  3877. private subroutine p_replace_mx ();Long ll_i,ll_j
  3878. FOR ll_i = 1 TO it_mxbt
  3879. If ( s_order_mx[ll_i].ordertype = 1 AND uo_option_unite_order_ml = 1 OR &
  3880. s_order_mx[ll_i].ordertype = 4 AND uo_option_unite_order_ml_zl = 1 OR &
  3881. s_order_mx[ll_i].ordertype = 0 AND uo_option_order_bh_use_yc = 1 ) THEN
  3882. FOR ll_j = 1 TO it_mxbt_ut
  3883. IF s_order_ut[ll_j].utid = s_order_mx[ll_i].utid THEN
  3884. s_order_ut[ll_j].orderqty = s_order_ut[ll_j].orderqty + s_order_mx[ll_i].orderqty
  3885. s_order_ut[ll_j].pfqty = s_order_ut[ll_j].pfqty + s_order_mx[ll_i].pfqty
  3886. s_order_ut[ll_j].capacity = s_order_ut[ll_j].capacity + s_order_mx[ll_i].capacity
  3887. s_order_ut[ll_j].addqty = s_order_ut[ll_j].addqty + s_order_mx[ll_i].addqty
  3888. s_order_ut[ll_j].notmrpqty = s_order_ut[ll_j].notmrpqty + s_order_mx[ll_i].notmrpqty
  3889. s_order_ut[ll_j].taskcode = s_order_ut[ll_j].taskcode + ','+s_order_mx[ll_i].taskcode
  3890. s_order_ut[ll_j].taskrelcode = ''
  3891. s_order_ut[ll_j].cusid = 0
  3892. s_order_ut[ll_j].taskid = 0
  3893. s_order_ut[ll_j].taskmxid = 0
  3894. s_order_ut[ll_j].pzlorderid = 0
  3895. s_order_ut[ll_j].porderid = 0
  3896. s_order_ut[ll_j].pordercode = ''
  3897. s_order_ut[ll_j].p_taskrelcode = ''
  3898. s_order_ut[ll_j].cusname = ''
  3899. s_order_ut[ll_j].outtypestr = ''
  3900. GOTO next_
  3901. END IF
  3902. NEXT
  3903. END IF
  3904. it_mxbt_ut++
  3905. s_order_ut[it_mxbt_ut].relcode = s_order_mx[ll_i].relcode
  3906. s_order_ut[it_mxbt_ut].orderdate = s_order_mx[ll_i].orderdate
  3907. s_order_ut[it_mxbt_ut].mtrlid = s_order_mx[ll_i].mtrlid
  3908. s_order_ut[it_mxbt_ut].status_mode = s_order_mx[ll_i].status_mode
  3909. s_order_ut[it_mxbt_ut].woodcode = s_order_mx[ll_i].woodcode
  3910. s_order_ut[it_mxbt_ut].pcode = s_order_mx[ll_i].pcode
  3911. s_order_ut[it_mxbt_ut].orderqty = s_order_mx[ll_i].orderqty
  3912. s_order_ut[it_mxbt_ut].dscrp = s_order_mx[ll_i].dscrp
  3913. s_order_ut[it_mxbt_ut].assign_emp = s_order_mx[ll_i].assign_emp
  3914. s_order_ut[it_mxbt_ut].requiredate = s_order_mx[ll_i].requiredate
  3915. s_order_ut[it_mxbt_ut].ordertype = s_order_mx[ll_i].ordertype
  3916. s_order_ut[it_mxbt_ut].pfcode = s_order_mx[ll_i].pfcode
  3917. s_order_ut[it_mxbt_ut].taskid = s_order_mx[ll_i].taskid
  3918. s_order_ut[it_mxbt_ut].taskcode = s_order_mx[ll_i].taskcode
  3919. s_order_ut[it_mxbt_ut].taskrelcode = s_order_mx[ll_i].taskrelcode
  3920. s_order_ut[it_mxbt_ut].taskmxid = s_order_mx[ll_i].taskmxid
  3921. s_order_ut[it_mxbt_ut].cusid = s_order_mx[ll_i].cusid
  3922. s_order_ut[it_mxbt_ut].porderid = s_order_mx[ll_i].porderid
  3923. s_order_ut[it_mxbt_ut].pordercode = s_order_mx[ll_i].pordercode
  3924. s_order_ut[it_mxbt_ut].utid = s_order_mx[ll_i].utid
  3925. s_order_ut[it_mxbt_ut].wrkGrpid = s_order_mx[ll_i].wrkGrpid
  3926. s_order_ut[it_mxbt_ut].gydscrp = s_order_mx[ll_i].gydscrp
  3927. s_order_ut[it_mxbt_ut].pfklmode = s_order_mx[ll_i].pfklmode
  3928. s_order_ut[it_mxbt_ut].pforderid = s_order_mx[ll_i].pforderid
  3929. s_order_ut[it_mxbt_ut].pfordercode = s_order_mx[ll_i].pfordercode
  3930. s_order_ut[it_mxbt_ut].pfqty = s_order_mx[ll_i].pfqty
  3931. s_order_ut[it_mxbt_ut].secdscrp = s_order_mx[ll_i].secdscrp
  3932. s_order_ut[it_mxbt_ut].thdscrp = s_order_mx[ll_i].thdscrp
  3933. s_order_ut[it_mxbt_ut].taskscid = s_order_mx[ll_i].taskscid
  3934. s_order_ut[it_mxbt_ut].perfinishdate = s_order_mx[ll_i].perfinishdate
  3935. s_order_ut[it_mxbt_ut].storageid = s_order_mx[ll_i].storageid
  3936. s_order_ut[it_mxbt_ut].capacity = s_order_mx[ll_i].capacity
  3937. s_order_ut[it_mxbt_ut].tmpid = s_order_mx[ll_i].tmpid
  3938. s_order_ut[it_mxbt_ut].level = s_order_mx[ll_i].level
  3939. s_order_ut[it_mxbt_ut].typename = s_order_mx[ll_i].typename
  3940. s_order_ut[it_mxbt_ut].p_taskrelcode = s_order_mx[ll_i].p_taskrelcode
  3941. s_order_ut[it_mxbt_ut].saletaskcode = s_order_mx[ll_i].saletaskcode
  3942. s_order_ut[it_mxbt_ut].saletaskrelcode = s_order_mx[ll_i].saletaskrelcode
  3943. s_order_ut[it_mxbt_ut].cusname = s_order_mx[ll_i].cusname
  3944. s_order_ut[it_mxbt_ut].p_ordertype = s_order_mx[ll_i].p_ordertype
  3945. s_order_ut[it_mxbt_ut].p_cusid = s_order_mx[ll_i].p_cusid
  3946. s_order_ut[it_mxbt_ut].p_mtrlid = s_order_mx[ll_i].p_mtrlid
  3947. s_order_ut[it_mxbt_ut].outtypestr = s_order_mx[ll_i].outtypestr
  3948. s_order_ut[it_mxbt_ut].pzlorderid = s_order_mx[ll_i].pzlorderid
  3949. s_order_ut[it_mxbt_ut].inwareflag = s_order_mx[ll_i].inwareflag
  3950. s_order_ut[it_mxbt_ut].outscllflag = s_order_mx[ll_i].outscllflag
  3951. s_order_ut[it_mxbt_ut].iffg = s_order_mx[ll_i].iffg
  3952. s_order_ut[it_mxbt_ut].ifauto = s_order_mx[ll_i].ifauto
  3953. s_order_ut[it_mxbt_ut].upmtrlid = s_order_mx[ll_i].upmtrlid
  3954. s_order_ut[it_mxbt_ut].iffp = s_order_mx[ll_i].iffp
  3955. s_order_ut[it_mxbt_ut].fpkind = s_order_mx[ll_i].fpkind
  3956. s_order_ut[it_mxbt_ut].p_taskid = s_order_mx[ll_i].p_taskid
  3957. s_order_ut[it_mxbt_ut].p_taskmxid = s_order_mx[ll_i].p_taskmxid
  3958. s_order_ut[it_mxbt_ut].fgid = s_order_mx[ll_i].fgid
  3959. s_order_ut[it_mxbt_ut].if_inherit = s_order_mx[ll_i].if_inherit
  3960. s_order_ut[it_mxbt_ut].addqty = s_order_mx[ll_i].addqty
  3961. s_order_ut[it_mxbt_ut].ifwforder = s_order_mx[ll_i].ifwforder
  3962. s_order_ut[it_mxbt_ut].wpcode = s_order_mx[ll_i].wpcode
  3963. s_order_ut[it_mxbt_ut].pctype = s_order_mx[ll_i].pctype
  3964. s_order_ut[it_mxbt_ut].notmrpqty = s_order_mx[ll_i].notmrpqty
  3965. s_order_ut[it_mxbt_ut].ifpban = s_order_mx[ll_i].ifpban
  3966. s_order_ut[it_mxbt_ut].ifupban = s_order_mx[ll_i].ifupban
  3967. next_:
  3968. NEXT
  3969. end subroutine
  3970. public function integer getinfo (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1
  3971. Long i = 1,no_mxcheck = 0
  3972. IF arg_orderid <= 0 THEN
  3973. rslt = 0
  3974. arg_msg = "非法单据唯一码"
  3975. GOTO ext
  3976. END IF
  3977. //用游标读取明细
  3978. DECLARE cur_ordermx CURSOR FOR
  3979. SELECT u_order_ml_mx.taskid,
  3980. u_order_ml_mx.taskmxid,
  3981. u_order_ml_mx.qty,
  3982. u_order_ml_mx.taskscid
  3983. FROM u_order_ml_mx
  3984. WHERE u_order_ml_mx.orderid = :arg_orderid AND
  3985. u_order_ml_mx.scid = :arg_scid ;
  3986. OPEN cur_ordermx;
  3987. FETCH cur_ordermx INTO :s_order_mx[i].taskid,
  3988. :s_order_mx[i].taskmxid,
  3989. :s_order_mx[i].orderqty,
  3990. :s_order_mx[i].taskscid;
  3991. DO WHILE sqlca.SQLCode = 0
  3992. i++
  3993. FETCH cur_ordermx INTO :s_order_mx[i].taskid,
  3994. :s_order_mx[i].taskmxid,
  3995. :s_order_mx[i].orderqty,
  3996. :s_order_mx[i].taskscid;
  3997. LOOP
  3998. CLOSE cur_ordermx;
  3999. //检验明细是否读入完整
  4000. SELECT count(*) INTO :no_mxcheck
  4001. FROM u_order_ml_mx
  4002. WHERE orderid = :arg_orderid
  4003. AND scid = :arg_scid ;
  4004. IF sqlca.SQLCode <> 0 THEN
  4005. rslt = 0
  4006. arg_msg = "查询操作失败,计划明细数量"
  4007. GOTO ext
  4008. END IF
  4009. IF i <> (no_mxcheck+1) THEN
  4010. rslt = 0
  4011. arg_msg = "查询操作失败,计划明细"
  4012. GOTO ext
  4013. END IF
  4014. it_mxbt = i - 1
  4015. ext:
  4016. IF rslt = 0 THEN p_reset()
  4017. RETURN rslt
  4018. end function
  4019. public function integer f_assign_inqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, integer arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4020. Int li_mtrlkind,li_ifpack,li_ifpackpro,li_ifpackpro2
  4021. Int li_pordermtrl_ordertype
  4022. IF arg_orderid <= 0 THEN
  4023. rslt = 0
  4024. arg_msg = '错误的计划唯一码'
  4025. GOTO ext
  4026. END IF
  4027. IF arg_mtrlid <= 0 THEN
  4028. rslt = 0
  4029. arg_msg = '错误的物料唯一码'
  4030. GOTO ext
  4031. END IF
  4032. SELECT mtrlkind,ifpack,ifpackpro2
  4033. INTO :li_mtrlkind,:li_ifpack,:li_ifpackpro2
  4034. FROM u_mtrldef
  4035. Where mtrlid = :arg_mtrlid;
  4036. IF sqlca.SQLCode <> 0 THEN
  4037. arg_msg = '物料:'+arg_mtrlcode+'查询领料属性失败,'+sqlca.SQLErrText
  4038. rslt = 0
  4039. GOTO ext
  4040. END IF
  4041. IF li_mtrlkind = 1 THEN
  4042. rslt = 1
  4043. GOTO ext
  4044. END IF
  4045. CHOOSE CASE arg_plantype
  4046. CASE 0
  4047. UPDATE u_OrderRqMtrl
  4048. SET inqty = inqty + :arg_qty
  4049. WHERE orderid = :arg_orderid
  4050. AND produce_wrkGrpid = :arg_wrkGrpid
  4051. AND mtrlid = :arg_mtrlid
  4052. AND status = :arg_status
  4053. AND woodcode = :arg_woodcode
  4054. AND pcode = :arg_pcode
  4055. AND scid = :arg_scid
  4056. And plantype = 0;
  4057. CASE 2,3
  4058. UPDATE u_OrderRqMtrl
  4059. SET inqty = inqty + :arg_qty
  4060. WHERE orderid = :arg_orderid
  4061. AND wrkGrpid = :arg_wrkGrpid
  4062. AND mtrlid = :arg_mtrlid
  4063. AND status = :arg_status
  4064. AND woodcode = :arg_woodcode
  4065. AND pcode = :arg_pcode
  4066. AND scid = :arg_scid
  4067. And (plantype = 2 Or plantype = 3);
  4068. END CHOOSE
  4069. IF sqlca.SQLCode = 0 THEN
  4070. IF sqlca.SQLNRows = 0 THEN
  4071. arg_msg = '更新物料:'+arg_mtrlcode + '已进仓数明细失败(更新行数 = 0),'+sqlca.SQLErrText
  4072. rslt = 1
  4073. ELSEIF sqlca.SQLNRows > 1 THEN
  4074. arg_msg = '更新物料:'+arg_mtrlcode + '已进仓数明细失败(更新行数 > 1),'+sqlca.SQLErrText
  4075. rslt = 1
  4076. END IF
  4077. IF Trim(arg_msg) <> '' THEN
  4078. arg_msg_str = arg_msg
  4079. END IF
  4080. ELSE
  4081. rslt = 0
  4082. arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText
  4083. GOTO ext
  4084. END IF
  4085. IF li_ifpack > 0 THEN
  4086. SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype
  4087. INTO :li_ifpackpro,:li_pordermtrl_ordertype
  4088. FROM u_order_ml,u_mtrldef
  4089. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  4090. AND u_order_ml.scid = :arg_scid
  4091. And u_order_ml.orderid = :arg_orderid;
  4092. IF sqlca.SQLCode <> 0 THEN
  4093. rslt = 0
  4094. arg_msg = '查询物料:'+arg_mtrlcode+'对应生产计划产品是否包件产品失败,'+sqlca.SQLErrText
  4095. GOTO ext
  4096. END IF
  4097. END IF
  4098. //当是包件产品生产计划包件进仓时,进仓数自动更新为已领数
  4099. //当是组合配置包件产品生产计划包件进仓时,进仓数自动更新为已领数
  4100. IF arg_plantype = 0 THEN
  4101. IF li_ifpack = 1 And li_ifpackpro = 1 Or li_ifpackpro2 = 1 THEN
  4102. UPDATE u_OrderRqMtrl
  4103. SET DstrQty = DstrQty + :arg_qty
  4104. WHERE orderid = :arg_orderid
  4105. AND produce_wrkGrpid = :arg_wrkGrpid
  4106. AND mtrlid = :arg_mtrlid
  4107. AND status = :arg_status
  4108. AND woodcode = :arg_woodcode
  4109. AND pcode = :arg_pcode
  4110. AND scid = :arg_scid
  4111. And plantype = 0;
  4112. IF sqlca.SQLCode = 0 THEN
  4113. IF sqlca.SQLNRows = 0 THEN
  4114. arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,更新行数 = 0),'+sqlca.SQLErrText
  4115. rslt = 1
  4116. ELSEIF sqlca.SQLNRows > 1 THEN
  4117. arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,行数 > 1),'+sqlca.SQLErrText
  4118. rslt = 1
  4119. END IF
  4120. IF Trim(arg_msg) <> '' THEN
  4121. arg_msg_str = arg_msg
  4122. END IF
  4123. ELSE
  4124. rslt = 0
  4125. arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText
  4126. GOTO ext
  4127. END IF
  4128. END IF
  4129. ELSEIF arg_plantype = 2 THEN //yyx2013-9-3 采购包件进仓完成计划
  4130. IF li_ifpack = 1 And li_ifpackpro = 1 THEN
  4131. UPDATE u_OrderRqMtrl
  4132. SET DstrQty = DstrQty + :arg_qty
  4133. WHERE orderid = :arg_orderid
  4134. AND mtrlid = :arg_mtrlid
  4135. AND status = :arg_status
  4136. AND woodcode = :arg_woodcode
  4137. AND pcode = :arg_pcode
  4138. AND scid = :arg_scid
  4139. And plantype = 2;
  4140. IF sqlca.SQLCode = 0 THEN
  4141. IF sqlca.SQLNRows = 0 THEN
  4142. arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,更新行数 = 0),'+sqlca.SQLErrText
  4143. rslt = 1
  4144. ELSEIF sqlca.SQLNRows > 1 THEN
  4145. arg_msg = '更新物料:'+arg_mtrlcode + '已领数明细失败(包件,行数 > 1),'+sqlca.SQLErrText
  4146. rslt = 1
  4147. END IF
  4148. IF Trim(arg_msg) <> '' THEN
  4149. arg_msg_str = arg_msg
  4150. END IF
  4151. ELSE
  4152. rslt = 0
  4153. arg_msg = '更新物料:'+arg_mtrlcode+'已进仓数量失败,'+sqlca.SQLErrText
  4154. GOTO ext
  4155. END IF
  4156. IF uof_tryfinish_packorder_buy(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  4157. rslt = 0
  4158. GOTO ext
  4159. END IF
  4160. END IF
  4161. END IF
  4162. ext:
  4163. IF rslt = 0 THEN
  4164. ROLLBACK;
  4165. ELSEIF rslt = 1 And arg_ifcommit THEN
  4166. COMMIT;
  4167. END IF
  4168. RETURN rslt
  4169. end function
  4170. public function integer uof_pz_change (integer arg_type, string arg_updatestr, long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg);Int rslt = 1
  4171. CHOOSE CASE arg_type
  4172. CASE 1
  4173. UPDATE u_OrderRqMtrl_scll
  4174. SET status = :arg_updatestr
  4175. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  4176. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  4177. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  4178. AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid
  4179. AND u_OrderRqMtrl_scll.status = :arg_status
  4180. AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode
  4181. And u_OrderRqMtrl_scll.pcode = :arg_pcode;
  4182. IF sqlca.SQLCode <> 0 THEN
  4183. arg_msg = '更新失败,'+sqlca.SQLErrText
  4184. rslt = 0
  4185. GOTO ext
  4186. END IF
  4187. CASE 2
  4188. UPDATE u_OrderRqMtrl_scll
  4189. SET woodcode = :arg_updatestr
  4190. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  4191. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  4192. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  4193. AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid
  4194. AND u_OrderRqMtrl_scll.status = :arg_status
  4195. AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode
  4196. And u_OrderRqMtrl_scll.pcode = :arg_pcode;
  4197. IF sqlca.SQLCode <> 0 THEN
  4198. arg_msg = '更新失败,'+sqlca.SQLErrText
  4199. rslt = 0
  4200. GOTO ext
  4201. END IF
  4202. CASE 3
  4203. UPDATE u_OrderRqMtrl_scll
  4204. SET pcode = :arg_updatestr
  4205. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  4206. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  4207. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  4208. AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid
  4209. AND u_OrderRqMtrl_scll.status = :arg_status
  4210. AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode
  4211. And u_OrderRqMtrl_scll.pcode = :arg_pcode;
  4212. IF sqlca.SQLCode <> 0 THEN
  4213. arg_msg = '更新失败,'+sqlca.SQLErrText
  4214. rslt = 0
  4215. GOTO ext
  4216. END IF
  4217. END CHOOSE
  4218. UPDATE u_OrderRqMtrl
  4219. SET u_OrderRqMtrl.status = u_OrderRqMtrl_scll.status,
  4220. u_OrderRqMtrl.woodcode = u_OrderRqMtrl_scll.woodcode,
  4221. u_OrderRqMtrl.pcode = u_OrderRqMtrl_scll.pcode
  4222. FROM u_OrderRqMtrl INNER JOIN
  4223. u_OrderRqMtrl_scll ON u_OrderRqMtrl.scid = u_OrderRqMtrl_scll.scid AND
  4224. u_OrderRqMtrl.OrderID = u_OrderRqMtrl_scll.OrderID AND
  4225. u_OrderRqMtrl.MtrlID = u_OrderRqMtrl_scll.MtrlID AND
  4226. u_OrderRqMtrl.wrkGrpid = u_OrderRqMtrl_scll.wrkGrpid
  4227. WHERE ((u_OrderRqMtrl.status <> u_OrderRqMtrl_scll.status) OR
  4228. (u_OrderRqMtrl.woodcode <> u_OrderRqMtrl_scll.woodcode) OR
  4229. (u_OrderRqMtrl.pcode <> u_OrderRqMtrl_scll.pcode))
  4230. AND (u_OrderRqMtrl.scid = :arg_scid)
  4231. And (u_OrderRqMtrl.orderid = :arg_orderid);
  4232. IF sqlca.SQLCode <> 0 THEN
  4233. arg_msg = '更新需求表失败,'+sqlca.SQLErrText
  4234. rslt = 0
  4235. GOTO ext
  4236. END IF
  4237. ext:
  4238. IF rslt = 0 THEN
  4239. ROLLBACK;
  4240. ELSE
  4241. COMMIT;
  4242. END IF
  4243. RETURN rslt
  4244. end function
  4245. public function integer audit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit);//arg_scllflag 1 :初审,2:终审
  4246. Int rslt = 1
  4247. Long cnt = 0
  4248. Long ls_i,ll_j,ll_k,ll_sp_cnt,ll_l
  4249. Long ll_orderid_tmp
  4250. Decimal ld_eoq,ld_splitrate,ld_truerqqty,ld_qty
  4251. Long ll_cnt = 0
  4252. Long ll_porderid
  4253. Int li_ifpackpro
  4254. String ls_mtrlcode
  4255. String ls_mtrlsectype
  4256. String ls_zxmtrlmode
  4257. String ls_unit
  4258. Long ll_OrderID
  4259. Long ll_MtrlID
  4260. Decimal ld_noconsignedqty
  4261. String ls_status
  4262. String ls_woodcode
  4263. String ls_pcode
  4264. Long ll_wrkgrpid,ll_wrkid
  4265. Long ll_storageid_last,ll_m
  4266. DateTime ld_rqdate
  4267. String ls_wpcode
  4268. String ls_taskrelcode
  4269. Long ll_cnt_mxt
  4270. Decimal ld_qty_arr[],ld_trueqty_tmp
  4271. Long count = 0
  4272. String ls_plancode
  4273. rslt = 1
  4274. If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then
  4275. rslt = 0
  4276. Goto ext
  4277. End If
  4278. If uo_option_order_ml_scll_secaudit = -1000 Then
  4279. rslt = 0
  4280. arg_msg = '选项:[065]生产计划用料二级审核,读取初始默认值失败,操作取消!'
  4281. Goto ext
  4282. End If
  4283. If uo_option_autocreate_buy = -1000 Then
  4284. rslt = 0
  4285. arg_msg = '选项:[054]生产计划审核自动建立申购单,读取初始默认值失败,操作取消!'
  4286. Goto ext
  4287. End If
  4288. If uo_option_autocreate_wfjg = -1000 Then
  4289. rslt = 0
  4290. arg_msg = '选项:[068]生产计划审核自动建立外协申请单,读取初始默认值失败,操作取消!'
  4291. Goto ext
  4292. End If
  4293. If uo_option_scllaudit_autobuild = -1000 Then
  4294. rslt = 0
  4295. arg_msg = '选项:[234]主生产计划用料审自动生成相关指令单,读取初始默认值失败,操作取消!'
  4296. Goto ext
  4297. End If
  4298. If uo_option_scllaudit_autobuild_tech = -1000 Then
  4299. rslt = 0
  4300. arg_msg = '选项:[245]主生产计划用料审自动生成相关指令单的工组派工单,读取初始默认值失败,操作取消!'
  4301. Goto ext
  4302. End If
  4303. uo_requestbuy uo_rqbuy
  4304. uo_rqbuy = Create uo_requestbuy
  4305. uo_request_wfjg uo_wfjg
  4306. uo_wfjg = Create uo_request_wfjg
  4307. uo_wfjg.commit_transaction = sqlca
  4308. uo_wfjg.if_getid_ture = False
  4309. uo_order_ml uo_ml
  4310. uo_ml = Create uo_order_ml
  4311. uo_ml.if_getid_ture = False
  4312. uo_order_ml_mrp uo_ml_mrp
  4313. uo_ml_mrp = Create uo_order_ml_mrp
  4314. s_order_ml_rqmtrl s_mtrl,s_mtrl_null
  4315. datastore ds_ch_pack
  4316. ds_ch_pack = Create datastore
  4317. ds_ch_pack.DataObject = 'ds_order_ml_mrptree_pack'
  4318. ds_ch_pack.SetTransObject(sqlca)
  4319. datastore ds_orderrqmx
  4320. ds_orderrqmx = Create datastore
  4321. ds_orderrqmx.DataObject = 'dw_order_ml_zl_orderrqmx'
  4322. ds_orderrqmx.SetTransObject(sqlca)
  4323. datastore ds_reqmtrl
  4324. ds_reqmtrl = Create datastore
  4325. ds_reqmtrl.DataObject = 'ds_order_ml_reqmtrl_mx'
  4326. ds_reqmtrl.SetTransObject(sqlca)
  4327. If arg_orderid = 0 Then
  4328. rslt = 0
  4329. arg_msg = "没有审核对象"
  4330. Goto ext
  4331. End If
  4332. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  4333. rslt = 0
  4334. Goto ext
  4335. End If
  4336. If status <> 1 Then
  4337. rslt = 0
  4338. arg_msg = "计划只有在在进行状态才可以执行用料审批,请核对"
  4339. Goto ext
  4340. End If
  4341. //检查是否有相关配置变更单未审
  4342. cnt = 0
  4343. Select count(*)
  4344. Into :cnt
  4345. From u_saletaskmx_change Inner JOIN
  4346. u_saletaskmx_changemx ON
  4347. u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid
  4348. Where (u_saletaskmx_change.affirmflag = 0 Or u_saletaskmx_change.flag = 0)
  4349. And (u_saletaskmx_changemx.orderid = :arg_orderid)
  4350. And (u_saletaskmx_changemx.scid = :arg_scid) ;
  4351. If sqlca.SQLCode <> 0 Then
  4352. arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText
  4353. rslt = 0
  4354. Goto ext
  4355. End If
  4356. If cnt > 0 Then
  4357. arg_msg = ordercode + ',有相关配置变更单未审,请先审核'
  4358. rslt = 0
  4359. Goto ext
  4360. End If
  4361. If uo_option_order_ml_scll_secaudit = 0 Then
  4362. If scllflag = 1 Then
  4363. rslt = 0
  4364. arg_msg = "计划已执行用料审批,请核对"
  4365. Goto ext
  4366. End If
  4367. Else
  4368. If arg_scllflag = 1 Then
  4369. If scllflag = 1 Then
  4370. rslt = 0
  4371. arg_msg = "计划已执行用料初审,请核对"
  4372. Goto ext
  4373. End If
  4374. Else
  4375. If scllflag = 0 Then
  4376. rslt = 0
  4377. arg_msg = "计划未执行用料初审,请核对"
  4378. Goto ext
  4379. End If
  4380. If scllsecflag = 1 Then
  4381. rslt = 0
  4382. arg_msg = "计划已执行用料终审,请核对"
  4383. Goto ext
  4384. End If
  4385. End If
  4386. End If
  4387. If uo_option_order_ml_scll_secaudit = 0 Then
  4388. Update u_order_ml
  4389. Set scllemp = :publ_operator,
  4390. sclldate = getdate(),
  4391. scllflag = 1,
  4392. scllsecemp = :publ_operator,
  4393. scllsecdate = getdate(),
  4394. scllsecflag = 1
  4395. Where orderid = :arg_orderid
  4396. And scid = :arg_scid
  4397. And scllflag = 0
  4398. And scllsecflag = 0
  4399. And status = 1;
  4400. Else
  4401. If arg_scllflag = 1 Then
  4402. Update u_order_ml
  4403. Set scllemp = :publ_operator,
  4404. sclldate = getdate(),
  4405. scllflag = 1
  4406. Where orderid = :arg_orderid
  4407. And scid = :arg_scid
  4408. And scllflag = 0
  4409. And status = 1;
  4410. Else
  4411. Update u_order_ml
  4412. Set scllsecemp = :publ_operator,
  4413. scllsecdate = getdate(),
  4414. scllsecflag = 1
  4415. Where orderid = :arg_orderid
  4416. And scid = :arg_scid
  4417. And scllflag = 1
  4418. And scllsecflag = 0
  4419. And status = 1;
  4420. End If
  4421. End If
  4422. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  4423. rslt = 0
  4424. arg_msg = "因网络或其它原因导致更新计划用料审核标记失败"+"~n"+sqlca.SQLErrText
  4425. Goto ext
  4426. End If
  4427. If uo_option_order_ml_scll_secaudit = 0 Or &
  4428. uo_option_order_ml_scll_secaudit = 1 And arg_scllflag = 2 Then
  4429. //自动建申购单
  4430. If uo_option_autocreate_buy = 1 Then
  4431. cnt = 0
  4432. Select count(*) Into :cnt
  4433. From u_mtrldef,
  4434. u_OrderRqMtrl
  4435. Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And
  4436. ( u_OrderRqMtrl.plantype = 2 ) And
  4437. ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2) And
  4438. ( u_OrderRqMtrl.scid = :arg_scid ) And
  4439. ( u_OrderRqMtrl.orderid = :arg_orderid ) And
  4440. ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0);
  4441. If sqlca.SQLCode <> 0 Then
  4442. arg_msg = '查询自动材料申购单物料明细数目失败,'+sqlca.SQLErrText
  4443. rslt = 0
  4444. Goto ext
  4445. End If
  4446. If cnt > 0 Then
  4447. s_requestbuy arg_s_rqbuy
  4448. arg_s_rqbuy.scid = scid
  4449. arg_s_rqbuy.requestbuyid = 0
  4450. arg_s_rqbuy.requestbuydate = DateTime(Today(),Time(0))
  4451. arg_s_rqbuy.assign_emp = publ_operator
  4452. arg_s_rqbuy.relcode = ''
  4453. arg_s_rqbuy.dscrp = ''
  4454. arg_s_rqbuy.ifauto = 1
  4455. arg_s_rqbuy.billtype = 0
  4456. Declare cur_rqbuy Cursor For
  4457. Select u_mtrldef.mtrlcode,
  4458. u_mtrldef.mtrlsectype,
  4459. u_mtrldef.zxmtrlmode,
  4460. u_OrderRqMtrl.OrderID,
  4461. u_OrderRqMtrl.MtrlID,
  4462. u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty,
  4463. u_OrderRqMtrl.status ,
  4464. u_OrderRqMtrl.woodcode ,
  4465. u_OrderRqMtrl.pcode,
  4466. u_OrderRqMtrl.wrkgrpid,
  4467. u_orderrqmtrl.rqdate,
  4468. u_mtrldef.unit
  4469. From u_mtrldef,
  4470. u_OrderRqMtrl
  4471. Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And
  4472. ( u_OrderRqMtrl.plantype = 2 ) And
  4473. ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2 ) And
  4474. ( u_OrderRqMtrl.scid = :arg_scid ) And
  4475. ( u_OrderRqMtrl.orderid = :arg_orderid ) And
  4476. ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0);
  4477. Open cur_rqbuy;
  4478. Fetch cur_rqbuy Into :ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,
  4479. :ll_OrderID,:ll_MtrlID,:ld_noconsignedqty,:ls_status,
  4480. :ls_woodcode,:ls_pcode,:ll_wrkgrpid,:ld_rqdate,:ls_unit;
  4481. Do While sqlca.SQLCode = 0
  4482. count++
  4483. arg_s_rqbuy.arg_s_rqbuymx[count].mtrlcode = ls_mtrlcode
  4484. arg_s_rqbuy.arg_s_rqbuymx[count].uqty = ld_noconsignedqty
  4485. arg_s_rqbuy.arg_s_rqbuymx[count].unit = ls_unit
  4486. arg_s_rqbuy.arg_s_rqbuymx[count].status = ls_status
  4487. arg_s_rqbuy.arg_s_rqbuymx[count].woodcode = ls_woodcode
  4488. arg_s_rqbuy.arg_s_rqbuymx[count].pcode = ls_pcode
  4489. arg_s_rqbuy.arg_s_rqbuymx[count].mxdscrp = ''
  4490. arg_s_rqbuy.arg_s_rqbuymx[count].MtrlID = ll_MtrlID
  4491. arg_s_rqbuy.arg_s_rqbuymx[count].orderid = ll_OrderID
  4492. arg_s_rqbuy.arg_s_rqbuymx[count].wrkgrpid = ll_wrkgrpid
  4493. arg_s_rqbuy.arg_s_rqbuymx[count].storageid = ll_storageid_last
  4494. arg_s_rqbuy.arg_s_rqbuymx[count].ifrel = 1
  4495. arg_s_rqbuy.arg_s_rqbuymx[count].printid = count
  4496. arg_s_rqbuy.arg_s_rqbuymx[count].rate = 1
  4497. arg_s_rqbuy.arg_s_rqbuymx[count].rqdate = ld_rqdate
  4498. If if_inherit = 1 Then
  4499. arg_s_rqbuy.arg_s_rqbuymx[count].plancode = taskrelcode
  4500. Else
  4501. arg_s_rqbuy.arg_s_rqbuymx[count].plancode = ''
  4502. End If
  4503. Fetch cur_rqbuy Into :ls_mtrlcode,:ls_mtrlsectype,:ls_zxmtrlmode,
  4504. :ll_OrderID,:ll_MtrlID,:ld_noconsignedqty,:ls_status,
  4505. :ls_woodcode,:ls_pcode,:ll_wrkgrpid,:ld_rqdate,:ls_unit;
  4506. Loop
  4507. Close cur_rqbuy;
  4508. //查默认仓库及最近收货仓库
  4509. For ll_m = 1 To count
  4510. arg_s_rqbuy.arg_s_rqbuymx[ll_m].storageid = f_mtrl_storageid(scid,arg_s_rqbuy.arg_s_rqbuymx[ll_m].MtrlID)
  4511. Next
  4512. If uo_rqbuy.Save(arg_s_rqbuy,publ_operator,arg_msg,False) = 0 Then
  4513. rslt = 0
  4514. Goto ext
  4515. End If
  4516. If uo_rqbuy.audit(scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 Then
  4517. rslt = 0
  4518. Goto ext
  4519. End If
  4520. If uo_rqbuy.audit_2(scid,uo_rqbuy.uo_requestbuyid,publ_operator,arg_msg,False) = 0 Then
  4521. rslt = 0
  4522. Goto ext
  4523. End If
  4524. If uo_rqbuy.uo_requestbuyid = 0 Or uo_rqbuy.uo_requestbuycode = '' Then
  4525. arg_msg = '更新计划时获得错误的自动申购单号唯一码'
  4526. rslt = 0
  4527. Goto ext
  4528. End If
  4529. Update u_order_ml
  4530. Set relrqbuyid = :uo_rqbuy.uo_requestbuyid,
  4531. relrqbuycode = :uo_rqbuy.uo_requestbuycode
  4532. Where orderid = :arg_orderid
  4533. And scid = :arg_scid;
  4534. If sqlca.SQLCode <> 0 Then
  4535. arg_msg = '更新计划申购单号失败,'+sqlca.SQLErrText
  4536. rslt = 0
  4537. Goto ext
  4538. End If
  4539. End If
  4540. End If
  4541. //自动建外协申请单
  4542. If uo_option_autocreate_wfjg = 1 Then
  4543. cnt = 0
  4544. Select count(*) Into :cnt
  4545. From u_mtrldef,u_OrderRqMtrl
  4546. Where ( u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid ) And
  4547. ( u_OrderRqMtrl.plantype = 3 ) And
  4548. ( u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 2) And
  4549. ( u_OrderRqMtrl.scid = :arg_scid ) And
  4550. ( u_OrderRqMtrl.orderid = :arg_orderid ) And
  4551. ( u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty > 0);
  4552. If sqlca.SQLCode <> 0 Then
  4553. arg_msg = '查询自动外协申请单物料明细数目失败,'+sqlca.SQLErrText
  4554. rslt = 0
  4555. Goto ext
  4556. End If
  4557. If cnt > 0 Then
  4558. datastore ds_wfjg
  4559. ds_wfjg = Create datastore
  4560. ds_wfjg.DataObject = 'ds_order_ml_rqwfjg'
  4561. ds_wfjg.SetTransObject(sqlca)
  4562. ds_wfjg.Retrieve(arg_orderid,arg_scid)
  4563. If uo_wfjg.newbegin(arg_scid,arg_msg) = 0 Then
  4564. rslt = 0
  4565. Goto ext
  4566. End If
  4567. uo_wfjg.Requiredate = DateTime(Today(),Time(0))
  4568. uo_wfjg.assign_emp = publ_operator
  4569. uo_wfjg.dscrp = ''
  4570. uo_wfjg.ifauto = 1
  4571. If if_inherit = 1 Then
  4572. ls_plancode = taskrelcode
  4573. Else
  4574. ls_plancode = ''
  4575. End If
  4576. For ll_j = 1 To ds_wfjg.RowCount()
  4577. If uo_wfjg.acceptmx(1,&
  4578. arg_orderid,&
  4579. ds_wfjg.Object.u_order_ml_ordercode[ll_j],&
  4580. ds_wfjg.Object.u_orderrqmtrl_mtrlid[ll_j],&
  4581. ds_wfjg.Object.u_orderrqmtrl_truerqqty[ll_j],&
  4582. ds_wfjg.Object.u_orderrqmtrl_gydscrp[ll_j],&
  4583. ds_wfjg.Object.u_mtrldef_mtrlcode[ll_j],&
  4584. arg_msg,&
  4585. ll_j,&
  4586. ds_wfjg.Object.u_orderrqmtrl_rqdate[ll_j],&
  4587. '',&
  4588. ds_wfjg.Object.u_orderrqmtrl_status[ll_j],&
  4589. ds_wfjg.Object.u_orderrqmtrl_woodcode[ll_j],&
  4590. ds_wfjg.Object.u_orderrqmtrl_pcode[ll_j],&
  4591. ds_wfjg.Object.u_orderrqmtrl_wrkgrpid[ll_j],&
  4592. ds_wfjg.Object.u_orderrqmtrl_pfcode[ll_j],&
  4593. ls_plancode,&
  4594. ds_wfjg.Object.u_mtrldef_unit[ll_j],&
  4595. ds_wfjg.Object.u_orderrqmtrl_truerqqty[ll_j],&
  4596. 1) = 0 Then
  4597. rslt = 0
  4598. Goto ext
  4599. End If
  4600. Next
  4601. If uo_wfjg.savesubmit(publ_operator,arg_msg,False) = 0 Then
  4602. rslt = 0
  4603. Goto ext
  4604. End If
  4605. If uo_wfjg.audit(scid,uo_wfjg.wfjgid,publ_operator,arg_msg,False) = 0 Then
  4606. rslt = 0
  4607. Goto ext
  4608. End If
  4609. If uo_wfjg.audit_2(scid,uo_wfjg.wfjgid,publ_operator,arg_msg,False) = 0 Then
  4610. rslt = 0
  4611. Goto ext
  4612. End If
  4613. If uo_wfjg.wfjgid = 0 Or uo_wfjg.taskcode = '' Then
  4614. arg_msg = '更新计划时获得错误的自动外协申请单号唯一码'
  4615. rslt = 0
  4616. Goto ext
  4617. End If
  4618. Update u_order_ml
  4619. Set relrqwfjgid = :uo_wfjg.wfjgid,
  4620. relrqwfjgcode = :uo_wfjg.taskcode
  4621. Where orderid = :arg_orderid
  4622. And scid = :arg_scid;
  4623. If sqlca.SQLCode <> 0 Then
  4624. arg_msg = '更新计划外协申请单号失败,'+sqlca.SQLErrText
  4625. rslt = 0
  4626. Goto ext
  4627. End If
  4628. End If
  4629. End If
  4630. If uo_option_scllaudit_autobuild <> 0 Then
  4631. SELECT u_mtrldef.ifpackpro INTO :li_ifpackpro
  4632. FROM u_mtrldef,u_order_ml
  4633. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  4634. AND u_order_ml.scid = :arg_scid
  4635. And u_order_ml.orderid = :arg_orderid;
  4636. IF sqlca.SQLCode <> 0 THEN
  4637. arg_msg = '查询计划包件产品属性失败,'+sqlca.SQLErrText
  4638. rslt = 0
  4639. GOTO ext
  4640. END IF
  4641. If uo_option_scllaudit_autobuild_tech = 1 Then
  4642. If uof_create_order_plan_tech(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  4643. rslt = 0
  4644. Goto ext
  4645. End If
  4646. End If
  4647. ds_reqmtrl.Retrieve(arg_scid,arg_orderid)
  4648. If ds_reqmtrl.RowCount() > 0 Then
  4649. uo_ml.newbegin(arg_scid)
  4650. End If
  4651. For ll_j = 1 To ds_reqmtrl.RowCount()
  4652. ld_eoq = ds_reqmtrl.Object.u_mtrldef_eoq[ll_j] //最小经济批量
  4653. ld_splitrate = ds_reqmtrl.Object.u_mtrldef_splitrate[ll_j] //最大经济批量
  4654. ld_truerqqty = ds_reqmtrl.Object.u_orderrqmtrl_truerqqty[ll_j]
  4655. ld_trueqty_tmp = ld_truerqqty
  4656. //yyx2014-2-28 //yyx2014-09-17
  4657. // IF pctype = 1 THEN
  4658. // ld_eoq = 1
  4659. // ld_splitrate = 1
  4660. // END IF
  4661. If ld_splitrate > 0 And ld_truerqqty > ld_splitrate Then
  4662. ll_sp_cnt = Ceiling(Truncate(ld_truerqqty / ld_splitrate,10))
  4663. Else
  4664. ll_sp_cnt = 1
  4665. End If
  4666. ll_cnt_mxt = 0
  4667. For ll_k = 1 To ll_sp_cnt
  4668. If ll_k = ll_sp_cnt Then
  4669. ll_cnt_mxt++
  4670. ld_qty_arr[ll_cnt_mxt] = ld_trueqty_tmp
  4671. ld_trueqty_tmp = 0
  4672. Else
  4673. If ld_trueqty_tmp - ld_splitrate < ld_eoq Then
  4674. ll_cnt_mxt++
  4675. ld_qty_arr[ll_cnt_mxt] = ld_trueqty_tmp - ld_eoq
  4676. ld_trueqty_tmp = ld_eoq
  4677. Else
  4678. ll_cnt_mxt++
  4679. ld_qty_arr[ll_cnt_mxt] = ld_splitrate
  4680. ld_trueqty_tmp = ld_trueqty_tmp - ld_splitrate
  4681. End If
  4682. End If
  4683. Next
  4684. For ll_k = 1 To ll_cnt_mxt
  4685. ls_taskrelcode = ''
  4686. If MtrlID = ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j] Or ds_reqmtrl.Object.u_mtrldef_if_inherit[ll_j] = 1 Then
  4687. ls_taskrelcode = taskrelcode
  4688. Else
  4689. ls_taskrelcode = ''
  4690. End If
  4691. ll_MtrlID = ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j]
  4692. ll_wrkid = ds_reqmtrl.Object.u_orderrqmtrl_produce_wrkGrpid[ll_j]
  4693. Select top 1 wpcode
  4694. Into :ls_wpcode
  4695. From u_mtrl_workprice
  4696. Where mtrlid = :ll_mtrlid
  4697. And wrkid = :ll_wrkid
  4698. Order By ifdft Desc;
  4699. If sqlca.SQLCode <> 0 Then ls_wpcode = ''
  4700. ll_cnt++
  4701. If uo_ml.acceptmx(relcode,&
  4702. ds_reqmtrl.Object.u_orderrqmtrl_edate[ll_j],&
  4703. 0,&
  4704. '',&
  4705. 0,&
  4706. ds_reqmtrl.Object.u_orderrqmtrl_mtrlid[ll_j],&
  4707. ds_reqmtrl.Object.u_orderrqmtrl_status[ll_j],&
  4708. ds_reqmtrl.Object.u_orderrqmtrl_woodcode[ll_j],&
  4709. ds_reqmtrl.Object.u_orderrqmtrl_pcode[ll_j],&
  4710. ld_qty_arr[ll_k],&
  4711. dscrp,&
  4712. publ_operator,&
  4713. ds_reqmtrl.Object.u_orderrqmtrl_rqdate[ll_j],&
  4714. 4,&
  4715. ls_taskrelcode,&
  4716. ds_reqmtrl.Object.u_orderrqmtrl_pfcode[ll_j],&
  4717. ds_reqmtrl.Object.u_orderrqmtrl_mxpkid[ll_j],&
  4718. arg_orderid,&
  4719. ll_cnt,&
  4720. ds_reqmtrl.Object.u_orderrqmtrl_produce_wrkGrpid[ll_j],&
  4721. ds_reqmtrl.Object.u_orderrqmtrl_gydscrp[ll_j],&
  4722. ds_reqmtrl.Object.u_orderrqmtrl_pfklmode[ll_j],&
  4723. 0,'',0,&
  4724. secdscrp,&
  4725. thdscrp,&
  4726. arg_scid,&
  4727. ds_reqmtrl.Object.u_orderrqmtrl_rqdate[ll_j],&
  4728. 0,&
  4729. 0,&
  4730. ds_reqmtrl.Object.u_order_ml_level[ll_j],&
  4731. ds_reqmtrl.Object.u_order_ml_typename[ll_j],&
  4732. ds_reqmtrl.Object.u_order_ml_outtypestr[ll_j],&
  4733. 0,&
  4734. 0,&
  4735. 0,0,0,&
  4736. ls_wpcode,0,&
  4737. arg_msg) = 0 Then
  4738. arg_msg = '建立相关生产指令单失败,'+arg_msg
  4739. rslt = 0
  4740. Goto ext
  4741. End If
  4742. Next
  4743. Next
  4744. If ds_reqmtrl.RowCount() > 0 Then
  4745. If uo_ml.Save(arg_msg,False) = 0 Then
  4746. arg_msg = '保存相关生产指令单失败,'+arg_msg
  4747. rslt = 0
  4748. Goto ext
  4749. End If
  4750. If uo_option_scllaudit_autobuild = 1 Then
  4751. For ll_j = 1 To UpperBound(uo_ml.orderid_arr)
  4752. ll_orderid_tmp = uo_ml.orderid_arr[ll_j]
  4753. If uo_ml.audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  4754. rslt = 0
  4755. arg_msg = '审核相关生产指令单失败(初审),'+arg_msg
  4756. Goto ext
  4757. End If
  4758. If uo_ml.plan_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  4759. rslt = 0
  4760. arg_msg = '审核相关生产指令单失败(二审),'+arg_msg
  4761. Goto ext
  4762. End If
  4763. If uo_ml.sec_audit(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  4764. rslt = 0
  4765. arg_msg = '审核相关生产指令单失败(终审),'+arg_msg
  4766. Goto ext
  4767. End If
  4768. If ifpackpro_mtrl = 5 Then
  4769. If uo_ml.uof_order_add_tree_barcode(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  4770. rslt = 0
  4771. arg_msg = '相关生产指令单生成工艺条码失败,'+arg_msg
  4772. Goto ext
  4773. End If
  4774. End If
  4775. If uo_ml_mrp.uof_del_rqmtrl_scll(arg_scid,ll_orderid_tmp,False,arg_msg) = 0 Then
  4776. arg_msg = '删除相关生产指令单用料失败,'+arg_msg
  4777. rslt = 0
  4778. Goto ext
  4779. End If
  4780. ds_orderrqmx.Retrieve(ll_orderid_tmp,arg_scid)
  4781. For ll_l = 1 To ds_orderrqmx.RowCount()
  4782. s_mtrl = s_mtrl_null
  4783. ll_porderid = ds_orderrqmx.Object.u_order_ml_mx_taskid[ll_l]
  4784. If uo_ml_mrp.uof_get_rqmtrl(arg_scid,ll_orderid_tmp,ll_porderid,s_mtrl,arg_msg) = 0 Then
  4785. arg_msg = '计算相关生产指令单用料失败1,'+arg_msg
  4786. rslt = 0
  4787. Goto ext
  4788. End If
  4789. If uo_ml_mrp.uof_add_rqmtrl_scll(s_mtrl,False,arg_msg) = 0 Then
  4790. arg_msg = '计算相关生产指令单用料失败2,'+arg_msg
  4791. rslt = 0
  4792. Goto ext
  4793. End If
  4794. Next
  4795. If uo_option_scllaudit_autobuild_tech = 1 Then
  4796. If uo_ml.uof_create_order_plan_tech(arg_scid,ll_orderid_tmp,arg_msg,False) = 0 Then
  4797. rslt = 0
  4798. Goto ext
  4799. End If
  4800. End If
  4801. Next
  4802. End If
  4803. End If
  4804. End If
  4805. //yyx2-12=10-24
  4806. //删进仓计划
  4807. Delete From u_order_zl_planmx
  4808. Where u_order_zl_planmx.orderid = :arg_orderid
  4809. And u_order_zl_planmx.scid = :arg_scid;
  4810. If sqlca.SQLCode <> 0 Then
  4811. rslt = 0
  4812. arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText
  4813. Goto ext
  4814. End If
  4815. //加入进仓计划
  4816. If inwareflag = 1 Then
  4817. Insert Into u_order_zl_planmx
  4818. (scid,orderid,aps_plancode,begindate,enddate,orderqty)
  4819. Values(:arg_scid,:arg_orderid,'',
  4820. :orderdate,
  4821. :requiredate,
  4822. :orderqty);
  4823. If sqlca.SQLCode <> 0 Then
  4824. rslt = 0
  4825. arg_msg = "因网络或其它原因导致插入进仓计划操作失败"+"~n"+sqlca.SQLErrText
  4826. Goto ext
  4827. End If
  4828. End If
  4829. End If
  4830. //个性包件产品如果有换包件则更新到订单包件明细
  4831. Long k
  4832. Long ll_s_mtrlid
  4833. String ls_s_status,ls_s_woodcode,ls_s_pcode
  4834. Decimal ld_s_soncale,ld_s_soncale_fm
  4835. If arg_scllflag = 1 And ifpackpro_mtrl = 2 Then
  4836. cnt = 0
  4837. Select count(*) Into :cnt
  4838. From u_OrderRqMtrl_tree,u_mtrldef
  4839. Where ( u_OrderRqMtrl_tree.MtrlID = u_mtrldef.mtrlid ) And
  4840. ( u_OrderRqMtrl_tree.scid = :arg_scid ) And
  4841. ( u_OrderRqMtrl_tree.OrderID = :arg_orderid ) And
  4842. ( u_OrderRqMtrl_tree.lp = 1 ) And
  4843. ( u_mtrldef.ifpack > 0 ) And
  4844. ( u_OrderRqMtrl_tree.ifchanged = 1 );
  4845. If sqlca.SQLCode <> 0 Then
  4846. arg_msg = '查询主生产计划是否有换包件失败,'+sqlca.SQLErrText
  4847. rslt = 0
  4848. Goto ext
  4849. End If
  4850. If cnt > 0 Then
  4851. ds_ch_pack.Retrieve(arg_scid,arg_orderid)
  4852. If ds_ch_pack.RowCount() > 0 Then
  4853. Delete From u_saletaskmx_pf
  4854. Where scid = :arg_scid
  4855. And taskid = :taskid
  4856. And printid = :taskmxid;
  4857. If sqlca.SQLCode <> 0 Then
  4858. arg_msg = '主生产计划对应销售订单明细删除包件清单明细失败,'+sqlca.SQLErrText
  4859. rslt = 0
  4860. Goto ext
  4861. End If
  4862. For k = 1 To ds_ch_pack.RowCount()
  4863. ll_s_mtrlid = ds_ch_pack.Object.u_orderrqmtrl_tree_mtrlid[k]
  4864. ls_s_status = ds_ch_pack.Object.u_orderrqmtrl_tree_status[k]
  4865. ls_s_woodcode = ds_ch_pack.Object.u_orderrqmtrl_tree_woodcode[k]
  4866. ls_s_pcode = ds_ch_pack.Object.u_orderrqmtrl_tree_pcode[k]
  4867. ld_s_soncale = ds_ch_pack.Object.u_orderrqmtrl_tree_rqqty[k]
  4868. ld_s_soncale_fm = orderqty
  4869. Insert Into u_saletaskmx_pf
  4870. (scid,taskid,printid,mtrlid,sonmtrlid,status,woodcode,pcode,Sonscale,Sonscale_fm)
  4871. Values(:arg_scid,:taskid,:taskmxid,:MtrlID,:ll_s_mtrlid,:ls_s_status,:ls_s_woodcode,:ls_s_pcode,:ld_s_soncale,:ld_s_soncale_fm);
  4872. If sqlca.SQLCode <> 0 Then
  4873. arg_msg = '新建主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText
  4874. rslt = 0
  4875. Goto ext
  4876. End If
  4877. Next
  4878. End If
  4879. End If
  4880. End If
  4881. ext:
  4882. If rslt = 0 Then
  4883. Rollback;
  4884. p_reset()
  4885. ElseIf arg_ifcommit And rslt = 1 Then
  4886. Commit;
  4887. End If
  4888. Destroy uo_rqbuy
  4889. Destroy uo_wfjg
  4890. Destroy uo_ml
  4891. Destroy ds_reqmtrl
  4892. Destroy ds_wfjg
  4893. Destroy ds_ch_pack
  4894. Return rslt
  4895. end function
  4896. public function integer caudit_scll (long arg_scid, long arg_orderid, integer arg_scllflag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4897. Long cnt
  4898. Long ll_orderid_arr[]
  4899. Long ll_mxbt = 1,ll_i
  4900. Int li_status
  4901. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  4902. rslt = 0
  4903. GOTO ext
  4904. END IF
  4905. IF uo_option_order_ml_scll_secaudit = -1000 THEN
  4906. rslt = 0
  4907. arg_msg = '选项:[065]生产计划用料二级审核,读取初始默认值失败,操作取消!'
  4908. GOTO ext
  4909. END IF
  4910. IF uo_option_autocreate_buy = -1000 THEN
  4911. rslt = 0
  4912. arg_msg = '选项:[054]生产计划审核自动建立申购单,读取初始默认值失败,操作取消!'
  4913. GOTO ext
  4914. END IF
  4915. IF uo_option_autocreate_wfjg = -1000 THEN
  4916. rslt = 0
  4917. arg_msg = '选项:[068]生产计划审核自动建立外协申请单,读取初始默认值失败,操作取消!'
  4918. GOTO ext
  4919. END IF
  4920. IF uo_option_scllaudit_autobuild = -1000 THEN
  4921. rslt = 0
  4922. arg_msg = '选项:[234]主生产计划用料审核自动生成相关指令单及派工单,读取初始默认值失败,操作取消!'
  4923. GOTO ext
  4924. END IF
  4925. uo_requestbuy uo_rqbuy
  4926. uo_rqbuy = Create uo_requestbuy
  4927. uo_request_wfjg uo_wfjg
  4928. uo_wfjg = Create uo_request_wfjg
  4929. uo_wfjg.commit_transaction = sqlca
  4930. uo_order_ml uo_ml
  4931. uo_ml = Create uo_order_ml
  4932. DateTime null_dt
  4933. SetNull(null_dt)
  4934. IF arg_orderid = 0 THEN
  4935. rslt = 0
  4936. arg_msg = "没有审核对象"
  4937. GOTO ext
  4938. END IF
  4939. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  4940. rslt = 0
  4941. GOTO ext
  4942. END IF
  4943. IF status <> 1 THEN
  4944. rslt = 0
  4945. arg_msg = "计划只有在在进行状态才可以执行用料撤审,请核对"
  4946. GOTO ext
  4947. END IF
  4948. IF uo_option_order_ml_scll_secaudit = 0 THEN
  4949. IF scllflag = 0 THEN
  4950. rslt = 0
  4951. arg_msg = "计划还未执行用料审批,请核对"
  4952. GOTO ext
  4953. END IF
  4954. ELSE
  4955. IF arg_scllflag = 1 THEN
  4956. IF scllflag = 0 THEN
  4957. rslt = 0
  4958. arg_msg = "计划还未执行用料初审,请核对"
  4959. GOTO ext
  4960. END IF
  4961. IF scllsecflag = 1 THEN
  4962. rslt = 0
  4963. arg_msg = "计划已执行用料终审,请核对"
  4964. GOTO ext
  4965. END IF
  4966. ELSE
  4967. IF scllsecflag = 0 THEN
  4968. rslt = 0
  4969. arg_msg = "计划还未执行用料终审,请核对"
  4970. GOTO ext
  4971. END IF
  4972. END IF
  4973. END IF
  4974. //检查是否已开指令单
  4975. IF ordertype <> 4 And uo_option_scllaudit_autobuild = 0 THEN
  4976. IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN
  4977. rslt = 0
  4978. GOTO ext
  4979. END IF
  4980. END IF
  4981. //
  4982. IF uo_option_order_ml_scll_secaudit = 0 THEN
  4983. UPDATE u_order_ml
  4984. SET scllemp = '',
  4985. sclldate = :null_dt,
  4986. scllflag = 0,
  4987. scllsecemp = '',
  4988. scllsecdate = :null_dt,
  4989. scllsecflag = 0
  4990. WHERE orderid = :arg_orderid
  4991. AND scid = :scid
  4992. AND scllflag = 1
  4993. AND scllsecflag = 1
  4994. And status = 1;
  4995. ELSE
  4996. IF arg_scllflag = 1 THEN
  4997. UPDATE u_order_ml
  4998. SET scllemp = '',
  4999. sclldate = :null_dt,
  5000. scllflag = 0
  5001. WHERE orderid = :arg_orderid
  5002. AND scid = :scid
  5003. AND scllflag = 1
  5004. AND scllsecflag = 0
  5005. And status = 1;
  5006. ELSE
  5007. UPDATE u_order_ml
  5008. SET scllsecemp = '',
  5009. scllsecdate = :null_dt,
  5010. scllsecflag = 0
  5011. WHERE orderid = :arg_orderid
  5012. AND scid = :scid
  5013. AND scllflag = 1
  5014. AND scllsecflag = 1
  5015. And status = 1;
  5016. END IF
  5017. END IF
  5018. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  5019. rslt = 0
  5020. arg_msg = "因网络或其它原因导致更新计划用料审批标记失败"+"~n"+sqlca.SQLErrText
  5021. GOTO ext
  5022. END IF
  5023. IF uo_option_order_ml_scll_secaudit = 0 Or &
  5024. uo_option_order_ml_scll_secaudit = 1 And arg_scllflag = 2 THEN
  5025. cnt = 0
  5026. IF relrqbuyid > 0 THEN
  5027. SELECT count(*) INTO :cnt
  5028. FROM u_requestbuy
  5029. WHERE scid = :scid AND
  5030. requestbuyid = :relrqbuyid;
  5031. IF sqlca.SQLCode <> 0 THEN
  5032. rslt = 0
  5033. arg_msg = '查询相关申购单是否存在失败,'+sqlca.SQLErrText
  5034. GOTO ext
  5035. END IF
  5036. END IF
  5037. IF uo_option_autocreate_buy = 1 And cnt > 0 THEN
  5038. IF uo_rqbuy.caudit_2(scid,relrqbuyid,0,arg_msg,False) = 0 THEN
  5039. rslt = 0
  5040. GOTO ext
  5041. END IF
  5042. IF uo_rqbuy.caudit(scid,relrqbuyid,0,arg_msg,False) = 0 THEN
  5043. rslt = 0
  5044. GOTO ext
  5045. END IF
  5046. IF uo_rqbuy.del(scid,relrqbuyid,0,arg_msg,False) = 0 THEN
  5047. rslt = 0
  5048. GOTO ext
  5049. END IF
  5050. END IF
  5051. cnt = 0
  5052. IF relrqwfjgid > 0 THEN
  5053. SELECT count(*) INTO :cnt
  5054. FROM u_request_wfjg
  5055. WHERE scid = :scid AND
  5056. wfjgid = :relrqwfjgid;
  5057. IF sqlca.SQLCode <> 0 THEN
  5058. rslt = 0
  5059. arg_msg = '查询相关外协申请单是否存在失败,'+sqlca.SQLErrText
  5060. GOTO ext
  5061. END IF
  5062. END IF
  5063. IF uo_option_autocreate_wfjg = 1 And cnt > 0 THEN
  5064. IF uo_wfjg.caudit_2(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN
  5065. rslt = 0
  5066. GOTO ext
  5067. END IF
  5068. IF uo_wfjg.caudit(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN
  5069. rslt = 0
  5070. GOTO ext
  5071. END IF
  5072. IF uo_wfjg.Cancel(scid,relrqwfjgid,0,arg_msg,False) = 0 THEN
  5073. rslt = 0
  5074. GOTO ext
  5075. END IF
  5076. END IF
  5077. //检查是否已开材料申购单,外协申请单
  5078. IF ordertype <> 4 THEN
  5079. IF uof_check_if_rbuy(arg_scid,arg_orderid,arg_msg) = 0 THEN
  5080. rslt = 0
  5081. GOTO ext
  5082. END IF
  5083. IF uof_check_if_wfjg(arg_scid,arg_orderid,arg_msg) = 0 THEN
  5084. rslt = 0
  5085. GOTO ext
  5086. END IF
  5087. END IF
  5088. UPDATE u_order_ml
  5089. SET relrqwfjgid = 0,
  5090. relrqwfjgcode = '',
  5091. relrqbuyid = 0,
  5092. relrqbuycode = ''
  5093. WHERE orderid = :arg_orderid
  5094. And scid = :scid;
  5095. IF sqlca.SQLCode <> 0 THEN
  5096. rslt = 0
  5097. arg_msg = "因网络或其它原因导致更新相关申购单信息失败"+"~n"+sqlca.SQLErrText
  5098. GOTO ext
  5099. END IF
  5100. IF uo_option_scllaudit_autobuild <> 0 And ordertype <> 4 THEN
  5101. IF uof_delete_order_plan_tech(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  5102. rslt = 0
  5103. GOTO ext
  5104. END IF
  5105. DECLARE cur_porder CURSOR FOR
  5106. SELECT orderid
  5107. FROM u_order_ml
  5108. WHERE porderid = :arg_orderid
  5109. AND scid = :arg_scid
  5110. And pzlorderid = 0;
  5111. OPEN cur_porder;
  5112. FETCH cur_porder Into :ll_orderid_arr[ll_mxbt];
  5113. DO WHILE sqlca.SQLCode = 0
  5114. ll_mxbt++
  5115. FETCH cur_porder Into :ll_orderid_arr[ll_mxbt];
  5116. LOOP
  5117. CLOSE cur_porder;
  5118. ll_mxbt = ll_mxbt - 1
  5119. FOR ll_i = 1 To ll_mxbt
  5120. IF uo_ml.uof_delete_order_plan_tech(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  5121. rslt = 0
  5122. GOTO ext
  5123. END IF
  5124. SELECT status INTO :li_status
  5125. FROM u_order_ml
  5126. WHERE scid = :arg_scid
  5127. And orderid = :ll_orderid_arr[ll_i];
  5128. IF sqlca.SQLCode <> 0 THEN
  5129. rslt = 0
  5130. arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5131. GOTO ext
  5132. END IF
  5133. IF li_status = 1 THEN
  5134. IF uo_ml.c_sec_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  5135. rslt = 0
  5136. arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5137. GOTO ext
  5138. END IF
  5139. END IF
  5140. SELECT status INTO :li_status
  5141. FROM u_order_ml
  5142. WHERE scid = :arg_scid
  5143. And orderid = :ll_orderid_arr[ll_i];
  5144. IF sqlca.SQLCode <> 0 THEN
  5145. rslt = 0
  5146. arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5147. GOTO ext
  5148. END IF
  5149. IF li_status = 4 THEN
  5150. IF uo_ml.c_plan_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  5151. rslt = 0
  5152. arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5153. GOTO ext
  5154. END IF
  5155. END IF
  5156. SELECT status INTO :li_status
  5157. FROM u_order_ml
  5158. WHERE scid = :arg_scid
  5159. And orderid = :ll_orderid_arr[ll_i];
  5160. IF sqlca.SQLCode <> 0 THEN
  5161. rslt = 0
  5162. arg_msg = '查询相关指令单状态失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5163. GOTO ext
  5164. END IF
  5165. IF li_status = 7 THEN
  5166. IF uo_ml.c_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  5167. rslt = 0
  5168. arg_msg = '撤审相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5169. GOTO ext
  5170. END IF
  5171. END IF
  5172. IF uo_ml.del(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  5173. rslt = 0
  5174. arg_msg = '删除相关生产指令单失败,id:'+String(ll_orderid_arr[ll_i])+','+arg_msg
  5175. GOTO ext
  5176. END IF
  5177. NEXT
  5178. END IF
  5179. UPDATE u_order_ml
  5180. SET u_order_ml.plan_flag = 0
  5181. WHERE u_order_ml.scid = :arg_scid
  5182. And u_order_ml.orderid = :arg_orderid;
  5183. IF sqlca.SQLCode <> 0 THEN
  5184. rslt = 0
  5185. arg_msg = '更新主生产计划排程标记失败,'+sqlca.SQLErrText
  5186. GOTO ext
  5187. END IF
  5188. //删进仓计划
  5189. DELETE FROM u_order_zl_planmx
  5190. WHERE u_order_zl_planmx.orderid = :arg_orderid
  5191. And u_order_zl_planmx.scid = :arg_scid;
  5192. IF sqlca.SQLCode <> 0 THEN
  5193. rslt = 0
  5194. arg_msg = "删除生产计划进仓计划操作失败"+"~n"+sqlca.SQLErrText
  5195. GOTO ext
  5196. END IF
  5197. END IF
  5198. //个性包件产品如果有换包件则更新到订单包件明细
  5199. //IF arg_scllflag = 1 And ifpackpro_mtrl = 2 THEN
  5200. // DELETE FROM u_saletaskmx_pf
  5201. // WHERE scid = :arg_scid
  5202. // AND taskid = :taskid
  5203. // And printid = :taskmxid;
  5204. // IF sqlca.SQLCode <> 0 THEN
  5205. // arg_msg = '删除主生产计划对应销售订单明细包件清单失败,'+sqlca.SQLErrText
  5206. // rslt = 0
  5207. // GOTO ext
  5208. // END IF
  5209. //END IF
  5210. ext:
  5211. IF rslt = 0 THEN
  5212. ROLLBACK;
  5213. p_reset()
  5214. ELSEIF arg_ifcommit And rslt = 1 THEN
  5215. COMMIT;
  5216. END IF
  5217. Destroy uo_rqbuy
  5218. Destroy uo_wfjg
  5219. Destroy uo_ml
  5220. RETURN rslt
  5221. end function
  5222. public function integer uof_check_if_zl (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1
  5223. Long cnt
  5224. cnt = 0
  5225. SELECT count(*) INTO :cnt
  5226. FROM u_Order_ml INNER JOIN
  5227. u_order_ml_mx ON u_Order_ml.scid = u_order_ml_mx.scid AND
  5228. u_Order_ml.OrderID = u_order_ml_mx.orderid
  5229. WHERE u_order_ml_mx.scid = :arg_scid
  5230. AND u_order_ml_mx.taskid = :arg_orderid
  5231. AND u_Order_ml.ordertype = 4
  5232. and u_order_ml.pzlorderid = 0 ;
  5233. IF sqlca.SQLCode <> 0 THEN
  5234. arg_msg = '检查生产计划是否已开指令单失败,'+sqlca.SQLErrText
  5235. rslt = 0
  5236. GOTO ext
  5237. END IF
  5238. IF IsNull(cnt) THEN cnt = 0
  5239. IF cnt > 0 THEN
  5240. arg_msg = '生产计划已开指令单,不能撤审或修改用料'
  5241. rslt = 0
  5242. GOTO ext
  5243. END IF
  5244. ext:
  5245. RETURN rslt
  5246. end function
  5247. public function integer uof_get_scllflag (long arg_scid, long arg_orderid, ref integer arg_scllflag, ref string arg_msg);Int rslt = 1
  5248. int li_scllflag
  5249. SELECT scllflag INTO :li_scllflag
  5250. FROM u_order_ml
  5251. WHERE scid = :arg_scid
  5252. AND orderid = :arg_orderid;
  5253. IF sqlca.SQLCode <> 0 THEN
  5254. arg_msg = '检查生产计划是否已用料审失败,'+sqlca.SQLErrText
  5255. rslt = 0
  5256. GOTO ext
  5257. END IF
  5258. arg_scllflag = li_scllflag
  5259. ext:
  5260. RETURN rslt
  5261. end function
  5262. public function integer uof_check_if_rbuy (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1
  5263. Long cnt
  5264. cnt = 0
  5265. SELECT count(*) INTO :cnt
  5266. FROM u_requestbuymx,u_requestbuy
  5267. WHERE u_requestbuymx.scid = :arg_scid
  5268. AND u_requestbuymx.orderid = :arg_orderid
  5269. and u_requestbuymx.scid = u_requestbuy.scid
  5270. and u_requestbuymx.requestbuyid = u_requestbuy.requestbuyid
  5271. and u_requestbuy.billtype = 0 ;
  5272. IF sqlca.SQLCode <> 0 THEN
  5273. arg_msg = '检查生产计划是否已开材料申购单失败,'+sqlca.SQLErrText
  5274. rslt = 0
  5275. GOTO ext
  5276. END IF
  5277. IF IsNull(cnt) THEN cnt = 0
  5278. IF cnt > 0 THEN
  5279. arg_msg = '生产计划已开材料申购单,不能撤审或修改用料'
  5280. rslt = 0
  5281. GOTO ext
  5282. END IF
  5283. cnt = 0
  5284. SELECT count(*) INTO :cnt
  5285. FROM u_requestbuymxmx,u_requestbuy
  5286. WHERE u_requestbuymxmx.scid = :arg_scid
  5287. AND u_requestbuymxmx.orderid = :arg_orderid
  5288. and u_requestbuymxmx.scid = u_requestbuy.scid
  5289. and u_requestbuymxmx.requestbuyid = u_requestbuy.requestbuyid
  5290. and u_requestbuy.billtype = 0 ;
  5291. IF sqlca.SQLCode <> 0 THEN
  5292. arg_msg = '检查生产计划是否已开材料申购单失败,'+sqlca.SQLErrText
  5293. rslt = 0
  5294. GOTO ext
  5295. END IF
  5296. IF IsNull(cnt) THEN cnt = 0
  5297. IF cnt > 0 THEN
  5298. arg_msg = '生产计划已开材料申购单,不能撤审或修改用料'
  5299. rslt = 0
  5300. GOTO ext
  5301. END IF
  5302. ext:
  5303. RETURN rslt
  5304. end function
  5305. public function integer uof_check_if_wfjg (long arg_scid, long arg_orderid, ref string arg_msg);Int rslt = 1
  5306. Long cnt
  5307. cnt = 0
  5308. SELECT count(*) INTO :cnt
  5309. FROM u_request_wfjgMx
  5310. WHERE u_request_wfjgMx.scid = :arg_scid
  5311. AND u_request_wfjgMx.orderid = :arg_orderid;
  5312. IF sqlca.SQLCode <> 0 THEN
  5313. arg_msg = '检查生产计划是否已开外协申请单失败,'+sqlca.SQLErrText
  5314. rslt = 0
  5315. GOTO ext
  5316. END IF
  5317. IF IsNull(cnt) THEN cnt = 0
  5318. IF cnt > 0 THEN
  5319. arg_msg = '生产计划已开外协申请单,不能撤审或修改用料'
  5320. rslt = 0
  5321. GOTO ext
  5322. END IF
  5323. cnt = 0
  5324. SELECT count(*) INTO :cnt
  5325. FROM u_request_wfjgMxmx
  5326. WHERE u_request_wfjgMxmx.scid = :arg_scid
  5327. AND u_request_wfjgMxmx.orderid = :arg_orderid;
  5328. IF sqlca.SQLCode <> 0 THEN
  5329. arg_msg = '检查生产计划是否已开外协申请单失败,'+sqlca.SQLErrText
  5330. rslt = 0
  5331. GOTO ext
  5332. END IF
  5333. IF IsNull(cnt) THEN cnt = 0
  5334. IF cnt > 0 THEN
  5335. arg_msg = '生产计划已开外协申请单,不能撤审或修改用料'
  5336. rslt = 0
  5337. GOTO ext
  5338. END IF
  5339. ext:
  5340. RETURN rslt
  5341. end function
  5342. public function integer f_add_conpfqty (long arg_scid, long arg_orderid, decimal arg_pfqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  5343. Decimal ld_orderqty,ld_conpfqty
  5344. SELECT orderqty,conpfqty
  5345. INTO :ld_orderqty,:ld_conpfqty
  5346. FROM u_order_ml
  5347. WHERE scid = :arg_scid
  5348. AND orderid = :arg_orderid;
  5349. IF sqlca.SQLCode <> 0 THEN
  5350. rslt = 0
  5351. arg_msg = '查询部件生产计划相关信息失败'+sqlca.SQLErrText
  5352. GOTO ext
  5353. END IF
  5354. IF arg_pfqty > ld_orderqty - ld_conpfqty THEN
  5355. rslt = 0
  5356. arg_msg = '部件生产计划未分配数量只有:'+String( ld_orderqty - ld_conpfqty,'#,##0.0###')+',不能再分配:'+String(arg_pfqty,'#,##0.0###')
  5357. GOTO ext
  5358. END IF
  5359. UPDATE u_order_ml
  5360. SET conpfqty = conpfqty + :arg_pfqty
  5361. WHERE scid = :arg_scid
  5362. AND orderid = :arg_orderid;
  5363. IF sqlca.SQLCode <> 0 THEN
  5364. rslt = 0
  5365. arg_msg = '更新部件生产计划已分配数量失败'+sqlca.SQLErrText
  5366. GOTO ext
  5367. END IF
  5368. ext:
  5369. IF rslt = 0 THEN
  5370. ROLLBACK;
  5371. ELSEIF rslt = 1 AND arg_ifcommit THEN
  5372. COMMIT;
  5373. END IF
  5374. RETURN rslt
  5375. end function
  5376. public function integer f_add_rqbuyqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_plantype, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  5377. Int li_mtrlkind
  5378. Decimal ld_consignedqty,ld_truerqqty,ld_adddec
  5379. IF arg_orderid <= 0 THEN
  5380. rslt = 0
  5381. arg_msg = '错误的计划唯一码'
  5382. GOTO ext
  5383. END IF
  5384. IF arg_mtrlid <= 0 THEN
  5385. rslt = 0
  5386. arg_msg = '错误的物料唯一码'
  5387. GOTO ext
  5388. END IF
  5389. SELECT mtrlkind,adddec INTO :li_mtrlkind,:ld_adddec
  5390. FROM u_mtrldef
  5391. Where mtrlid = :arg_mtrlid;
  5392. IF sqlca.SQLCode <> 0 THEN
  5393. arg_msg = '物料:'+arg_mtrlcode+'查询MRP属性失败,'+sqlca.SQLErrText
  5394. rslt = 0
  5395. GOTO ext
  5396. END IF
  5397. IF li_mtrlkind = 1 THEN
  5398. rslt = 1
  5399. GOTO ext
  5400. END IF
  5401. SELECT rqbuyqty,
  5402. truerqqty
  5403. INTO :ld_consignedqty,
  5404. :ld_truerqqty
  5405. FROM u_OrderRqMtrl
  5406. WHERE orderid = :arg_orderid
  5407. AND wrkGrpid = :arg_wrkGrpid
  5408. AND mtrlid = :arg_mtrlid
  5409. AND status = :arg_status
  5410. AND woodcode = :arg_woodcode
  5411. AND pcode = :arg_pcode
  5412. AND scid = :arg_scid
  5413. and plantype = :arg_plantype;
  5414. IF sqlca.SQLCode <> 0 THEN
  5415. arg_msg = '查询物料:'+arg_mtrlcode+'计划已申购数(申请)数失败,'+sqlca.SQLErrText
  5416. rslt = 0
  5417. GOTO ext
  5418. END IF
  5419. IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0
  5420. IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0
  5421. IF ld_consignedqty + arg_qty > ld_truerqqty + ld_adddec THEN
  5422. arg_msg = '物料:'+arg_mtrlcode+'未安排申购(申请)只有:'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#########')+',不能安排:'+String(arg_qty,'#,#0.0#########')
  5423. rslt = 0
  5424. GOTO ext
  5425. END IF
  5426. UPDATE u_OrderRqMtrl
  5427. SET rqbuyqty = rqbuyqty + :arg_qty
  5428. WHERE orderid = :arg_orderid
  5429. AND wrkGrpid = :arg_wrkGrpid
  5430. AND mtrlid = :arg_mtrlid
  5431. AND status = :arg_status
  5432. AND woodcode = :arg_woodcode
  5433. AND pcode = :arg_pcode
  5434. AND scid = :arg_scid
  5435. and plantype = :arg_plantype;
  5436. IF sqlca.SQLCode = 0 THEN
  5437. IF sqlca.SQLNRows = 0 THEN
  5438. arg_msg = '更新物料:'+arg_mtrlcode + '需求申购(申请)明细失败(更新行数 = 0),'+sqlca.SQLErrText
  5439. rslt = 0
  5440. GOTO ext
  5441. ELSEIF sqlca.SQLNRows > 1 THEN
  5442. arg_msg = '更新物料:'+arg_mtrlcode + '需求申购(申请)明细失败(更新行数 > 1),'+sqlca.SQLErrText
  5443. rslt = 0
  5444. GOTO ext
  5445. END IF
  5446. ELSE
  5447. rslt = 0
  5448. arg_msg = '更新物料:'+arg_mtrlcode+'已申购(申请)数量失败,'+sqlca.SQLErrText
  5449. GOTO ext
  5450. END IF
  5451. ext:
  5452. IF rslt = 0 THEN
  5453. ROLLBACK;
  5454. ELSEIF rslt = 1 AND arg_ifcommit THEN
  5455. COMMIT;
  5456. END IF
  5457. RETURN rslt
  5458. end function
  5459. public function integer f_assign_rqmtrlqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_plantype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  5460. Int li_mtrlkind
  5461. Long i
  5462. String ls_ordercode
  5463. DateTime ldt_rqdate,ldt_edate
  5464. Decimal ld_consignedqty,ld_truerqqty,ld_uprate,ld_upqty
  5465. Decimal ld_updateqty,ld_oriqty
  5466. Boolean lb_ifcheck = True
  5467. IF uo_option_requestbuy_hz = -1000 THEN
  5468. rslt = 0
  5469. arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!'
  5470. GOTO ext
  5471. END IF
  5472. IF uo_option_requestwfjg_hz = -1000 THEN
  5473. rslt = 0
  5474. arg_msg = '选项:[121]外协申请单汇总外协,读取初始默认值失败,操作取消!'
  5475. GOTO ext
  5476. END IF
  5477. IF uo_option_zlmtrlchange_wx_update_rqwfjg = -1000 THEN
  5478. rslt = 0
  5479. arg_msg = '选项:[333]指令单外协物料换料单更新外协申请单和外协订单,读取初始默认值失败,操作取消!'
  5480. GOTO ext
  5481. END IF
  5482. datastore ds_update
  5483. ds_update = Create datastore
  5484. IF arg_orderid <= 0 THEN
  5485. rslt = 0
  5486. arg_msg = '错误的计划唯一码'
  5487. GOTO ext
  5488. END IF
  5489. SELECT ordercode
  5490. INTO :ls_ordercode
  5491. FROM u_order_ml
  5492. WHERE scid = :arg_scid
  5493. And orderid = :arg_orderid;
  5494. IF sqlca.SQLCode <> 0 THEN
  5495. arg_msg = '物料:'+arg_mtrlcode+'查询主生产计划编号失败,'+sqlca.SQLErrText
  5496. rslt = 0
  5497. GOTO ext
  5498. END IF
  5499. IF arg_mtrlid <= 0 THEN
  5500. rslt = 0
  5501. arg_msg = '错误的物料唯一码'
  5502. GOTO ext
  5503. END IF
  5504. SELECT mtrlkind,uprate , upqty,mtrlcode
  5505. INTO :li_mtrlkind,:ld_uprate,:ld_upqty,:arg_mtrlcode
  5506. FROM u_mtrldef
  5507. Where mtrlid = :arg_mtrlid;
  5508. IF sqlca.SQLCode <> 0 THEN
  5509. arg_msg = '物料:'+arg_mtrlcode+'查询MRP属性失败,'+sqlca.SQLErrText
  5510. rslt = 0
  5511. GOTO ext
  5512. END IF
  5513. IF li_mtrlkind = 1 THEN
  5514. rslt = 1
  5515. GOTO ext
  5516. END IF
  5517. SELECT sum(consignedqty),
  5518. sum(truerqqty)
  5519. INTO :ld_consignedqty,
  5520. :ld_truerqqty
  5521. FROM u_OrderRqMtrl
  5522. WHERE orderid = :arg_orderid
  5523. AND wrkGrpid = :arg_wrkGrpid
  5524. AND mtrlid = :arg_mtrlid
  5525. AND status = :arg_status
  5526. AND woodcode = :arg_woodcode
  5527. AND pcode = :arg_pcode
  5528. AND scid = :arg_scid
  5529. And plantype = :arg_plantype ;
  5530. IF sqlca.SQLCode <> 0 THEN
  5531. arg_msg = '查询物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数失败,'+sqlca.SQLErrText
  5532. rslt = 0
  5533. GOTO ext
  5534. END IF
  5535. IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0
  5536. IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0
  5537. IF arg_plantype = 0 Or arg_plantype = 6 THEN
  5538. lb_ifcheck = True
  5539. ELSEIF arg_plantype = 2 THEN
  5540. IF uo_option_requestbuy_hz = 0 THEN
  5541. lb_ifcheck = True
  5542. ELSE
  5543. lb_ifcheck = False
  5544. END IF
  5545. ELSEIF arg_plantype = 3 THEN
  5546. IF uo_option_requestwfjg_hz = 0 THEN
  5547. IF uo_option_zlmtrlchange_wx_update_rqwfjg = 0 THEN
  5548. lb_ifcheck = False
  5549. ELSE
  5550. lb_ifcheck = True
  5551. END IF
  5552. ELSE
  5553. lb_ifcheck = False
  5554. END IF
  5555. END IF
  5556. IF lb_ifcheck THEN
  5557. IF arg_qty > 0 THEN
  5558. IF Not f_power_ind(1405,sys_msg_pow) Or sys_power_issuper THEN
  5559. IF ld_truerqqty * (1 + ld_uprate) + ld_upqty < (arg_qty + ld_consignedqty) THEN
  5560. rslt = 0
  5561. arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',需求未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,##0.0####' )+',允许订货上限为:'+String(ld_truerqqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次安排数量:'+String(arg_qty,'#,##0.00##')
  5562. GOTO ext
  5563. END IF
  5564. ELSE
  5565. IF ld_consignedqty + arg_qty > ld_truerqqty THEN
  5566. arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',未安排数只有:'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#')+',不能安排:'+String(arg_qty,'#,#0.0#')
  5567. rslt = 0
  5568. GOTO ext
  5569. END IF
  5570. END IF
  5571. ELSE
  5572. IF ld_consignedqty < Abs( arg_qty ) THEN
  5573. arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数只有:'+String(ld_consignedqty,'#,#0.0#')+',不能取消安排:'+String(Abs(arg_qty),'#,#0.0#')
  5574. rslt = 0
  5575. GOTO ext
  5576. END IF
  5577. END IF
  5578. END IF
  5579. IF arg_plantype = 2 And uo_option_requestbuy_hz = 1 THEN
  5580. IF arg_qty > 0 THEN
  5581. ds_update.DataObject = 'ds_assign_rqmtrlqty1'
  5582. ELSE
  5583. ds_update.DataObject = 'ds_assign_rqmtrlqty2'
  5584. END IF
  5585. ds_update.SetTransObject(sqlca)
  5586. ds_update.Retrieve(arg_scid,arg_orderid,arg_mtrlid,arg_wrkGrpid,arg_status,arg_woodcode,arg_pcode,arg_plantype)
  5587. IF ds_update.RowCount() = 0 THEN
  5588. rslt = 1
  5589. GOTO ext
  5590. // arg_msg = '物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',没有需求明细,请检查主生产计划需求明细'+sqlca.SQLErrText
  5591. // rslt = 0
  5592. // GOTO ext
  5593. END IF
  5594. IF arg_qty > 0 THEN
  5595. ld_oriqty = arg_qty
  5596. FOR i = 1 To ds_update.RowCount()
  5597. ldt_rqdate = ds_update.Object.rqdate[i]
  5598. ldt_edate = ds_update.Object.edate[i]
  5599. IF ld_oriqty > ds_update.Object.notconsignedqty[i] THEN
  5600. ld_updateqty = ds_update.Object.notconsignedqty[i]
  5601. ld_oriqty = ld_oriqty - ds_update.Object.notconsignedqty[i]
  5602. ELSE
  5603. ld_updateqty = ld_oriqty
  5604. ld_oriqty = 0
  5605. END IF
  5606. IF i = ds_update.RowCount() THEN
  5607. //处理超申购特殊情况
  5608. IF ld_oriqty > 0 THEN
  5609. ld_updateqty = ld_updateqty + ld_oriqty
  5610. ld_oriqty = 0
  5611. END IF
  5612. END IF
  5613. UPDATE u_OrderRqMtrl
  5614. SET consignedqty = consignedqty + :ld_updateqty
  5615. WHERE orderid = :arg_orderid
  5616. AND wrkGrpid = :arg_wrkGrpid
  5617. AND mtrlid = :arg_mtrlid
  5618. AND status = :arg_status
  5619. AND woodcode = :arg_woodcode
  5620. AND pcode = :arg_pcode
  5621. AND scid = :arg_scid
  5622. AND plantype = :arg_plantype
  5623. AND rqdate = :ldt_rqdate
  5624. And edate = :ldt_edate;
  5625. IF sqlca.SQLCode = 0 THEN
  5626. IF sqlca.SQLNRows = 0 THEN
  5627. arg_msg = '更新物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)'
  5628. rslt = 0
  5629. GOTO ext
  5630. END IF
  5631. ELSE
  5632. rslt = 0
  5633. arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText
  5634. GOTO ext
  5635. END IF
  5636. NEXT
  5637. IF ld_oriqty > 0 THEN
  5638. rslt = 0
  5639. arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量更新有更新余数:'+String(ld_oriqty)+',操作取消'
  5640. GOTO ext
  5641. END IF
  5642. ELSE
  5643. ld_oriqty = Abs(arg_qty)
  5644. FOR i = 1 To ds_update.RowCount()
  5645. ldt_rqdate = ds_update.Object.rqdate[i]
  5646. ldt_edate = ds_update.Object.edate[i]
  5647. IF ld_oriqty > ds_update.Object.notconsignedqty[i] THEN
  5648. ld_updateqty = ds_update.Object.notconsignedqty[i]
  5649. ld_oriqty = ld_oriqty - ds_update.Object.notconsignedqty[i]
  5650. ELSE
  5651. ld_updateqty = ld_oriqty
  5652. ld_oriqty = 0
  5653. END IF
  5654. UPDATE u_OrderRqMtrl
  5655. SET consignedqty = consignedqty - :ld_updateqty
  5656. WHERE orderid = :arg_orderid
  5657. AND wrkGrpid = :arg_wrkGrpid
  5658. AND mtrlid = :arg_mtrlid
  5659. AND status = :arg_status
  5660. AND woodcode = :arg_woodcode
  5661. AND pcode = :arg_pcode
  5662. AND scid = :arg_scid
  5663. AND plantype = :arg_plantype
  5664. AND rqdate = :ldt_rqdate
  5665. And edate = :ldt_edate;
  5666. IF sqlca.SQLCode = 0 THEN
  5667. IF sqlca.SQLNRows = 0 THEN
  5668. arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)'
  5669. rslt = 0
  5670. GOTO ext
  5671. END IF
  5672. ELSE
  5673. rslt = 0
  5674. arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText
  5675. GOTO ext
  5676. END IF
  5677. NEXT
  5678. // IF ld_oriqty > 0 THEN
  5679. // rslt = 0
  5680. // arg_msg = '物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量更新有更新余数:'+String(ld_oriqty)+',操作取消'
  5681. // GOTO ext
  5682. // END IF
  5683. END IF
  5684. ELSE
  5685. UPDATE u_OrderRqMtrl
  5686. SET consignedqty = consignedqty + :arg_qty
  5687. WHERE orderid = :arg_orderid
  5688. AND wrkGrpid = :arg_wrkGrpid
  5689. AND mtrlid = :arg_mtrlid
  5690. AND status = :arg_status
  5691. AND woodcode = :arg_woodcode
  5692. AND pcode = :arg_pcode
  5693. AND scid = :arg_scid
  5694. And plantype = :arg_plantype;
  5695. IF sqlca.SQLCode = 0 THEN
  5696. IF sqlca.SQLNRows = 0 THEN
  5697. arg_msg = '更新物料:'+arg_mtrlcode +',计划:'+ls_ordercode+',需求明细失败,(没有找到更新行)'
  5698. rslt = 0
  5699. GOTO ext
  5700. END IF
  5701. ELSE
  5702. rslt = 0
  5703. arg_msg = '更新物料:'+arg_mtrlcode+',计划:'+ls_ordercode+',已安排数量失败,'+sqlca.SQLErrText
  5704. GOTO ext
  5705. END IF
  5706. END IF
  5707. UPDATE u_order_ml
  5708. SET u_Order_ml.zlflag = isnull(uv_order_zl_flag.flag,0)
  5709. FROM u_Order_ml LEFT OUTER JOIN
  5710. uv_order_zl_flag ON u_Order_ml.scid = uv_order_zl_flag.scid AND
  5711. u_Order_ml.OrderID = uv_order_zl_flag.OrderID
  5712. WHERE u_order_ml.scid = :arg_scid
  5713. And u_order_ml.orderid = :arg_orderid;
  5714. IF sqlca.SQLCode <> 0 THEN
  5715. rslt = 0
  5716. arg_msg = '更新相关主生产计划指令单状态失败,'+sqlca.SQLErrText
  5717. GOTO ext
  5718. END IF
  5719. ext:
  5720. IF rslt = 0 THEN
  5721. ROLLBACK;
  5722. ELSEIF rslt = 1 And arg_ifcommit THEN
  5723. COMMIT;
  5724. END IF
  5725. Destroy ds_update
  5726. RETURN rslt
  5727. end function
  5728. public function integer add_secdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg);
  5729. Int rslt = 1
  5730. IF arg_newdescppart = '' THEN
  5731. rslt = 0
  5732. arG_MSG = "要添加内容为空,操作取消"
  5733. GOTO ext
  5734. END IF
  5735. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  5736. IF rslt = 0 THEN GOTO ext
  5737. IF status = 0 THEN
  5738. rslt = 0
  5739. arG_MSG = "待审核状态下不可用"
  5740. GOTO ext
  5741. END IF
  5742. UPDATE u_order_ml
  5743. SET secdscrp = :arg_newdescppart
  5744. WHERE u_order_ml.orderid = :arg_orderid
  5745. AND u_order_ml.scid = :arg_scid;
  5746. IF SQLCA.SQLCode <> 0 THEN
  5747. rslt = 0
  5748. arG_MSG = "因网络或其它原因导致修改计划备注2操作失败"+"~n"+SQLCA.SQLErrText
  5749. ROLLBACK;
  5750. GOTO ext
  5751. END IF
  5752. secdscrp = arg_newdescppart
  5753. ext:
  5754. IF rslt = 1 THEN
  5755. COMMIT;
  5756. END IF
  5757. p_reset()
  5758. RETURN (rslt)
  5759. end function
  5760. public function integer add_thdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg);
  5761. Int rslt = 1
  5762. IF arg_newdescppart = '' THEN
  5763. rslt = 0
  5764. arG_MSG = "要添加内容为空,操作取消"
  5765. GOTO ext
  5766. END IF
  5767. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  5768. IF rslt = 0 THEN GOTO ext
  5769. IF status = 0 THEN
  5770. rslt = 0
  5771. arG_MSG = "待审核状态下不可用"
  5772. GOTO ext
  5773. END IF
  5774. UPDATE u_order_ml
  5775. SET thdscrp = :arg_newdescppart
  5776. WHERE u_order_ml.orderid = :arg_orderid
  5777. AND u_order_ml.scid = :arg_scid;
  5778. IF SQLCA.SQLCode <> 0 THEN
  5779. rslt = 0
  5780. arG_MSG = "因网络或其它原因导致修改计划备注3操作失败"+"~n"+SQLCA.SQLErrText
  5781. ROLLBACK;
  5782. GOTO ext
  5783. END IF
  5784. thdscrp = arg_newdescppart
  5785. ext:
  5786. IF rslt = 1 THEN
  5787. COMMIT;
  5788. END IF
  5789. p_reset()
  5790. RETURN (rslt)
  5791. end function
  5792. public function integer uof_tryfinish_packorder (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt
  5793. rslt = 1
  5794. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  5795. IF rslt = 0 THEN GOTO ext
  5796. Decimal ld_qty
  5797. Int li_ifpackpro,li_ifpack,li_pordermtrl_ordertype
  5798. Long ll_porder_mtrlid
  5799. DateTime null_dt
  5800. SetNull(null_dt)
  5801. Long ll_cnt_zl,ll_cnt_zl_finish
  5802. Int ll_pack1_finish
  5803. //如果不是指令单,或者合并指令单的情况不作处理
  5804. IF porderid = 0 THEN
  5805. rslt = 1
  5806. GOTO ext
  5807. END IF
  5808. SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype,u_mtrldef.mtrlid
  5809. INTO :li_ifpackpro,:li_pordermtrl_ordertype,:ll_porder_mtrlid
  5810. FROM u_mtrldef,u_order_ml
  5811. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  5812. AND u_order_ml.orderid = :porderid
  5813. And u_order_ml.scid = :arg_scid;
  5814. IF sqlca.SQLCode <> 0 THEN
  5815. rslt = 0
  5816. arg_msg = '查询相关主计划产品是否全包件产品失败,'+sqlca.SQLErrText
  5817. GOTO ext
  5818. END IF
  5819. IF li_ifpackpro = 0 THEN //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成
  5820. rslt = 1
  5821. GOTO ext
  5822. END IF
  5823. Long ll_cnt,cnt
  5824. ll_cnt = 0
  5825. IF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN
  5826. SELECT count(*) INTO :ll_cnt
  5827. FROM u_orderrqmtrl,u_mtrldef
  5828. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  5829. AND u_orderrqmtrl.orderid = :porderid
  5830. AND u_orderrqmtrl.scid = :arg_scid
  5831. AND ( u_mtrldef.ifpack = 1 OR u_mtrldef.ifpack = 2 )
  5832. And (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2) ;
  5833. IF sqlca.SQLCode <> 0 THEN
  5834. rslt = 0
  5835. arg_msg = '查询包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText
  5836. GOTO ext
  5837. END IF
  5838. ELSEIF li_ifpackpro = 3 THEN
  5839. SELECT count(*) INTO :ll_cnt
  5840. FROM u_orderrqmtrl,u_order_ml
  5841. WHERE u_orderrqmtrl.scid = u_order_ml.scid
  5842. AND u_orderrqmtrl.orderid = u_order_ml.orderid
  5843. AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid
  5844. AND u_orderrqmtrl.orderid = :porderid
  5845. AND u_orderrqmtrl.scid = :arg_scid
  5846. And u_orderrqmtrl.plantype = 0 ;
  5847. IF sqlca.SQLCode <> 0 THEN
  5848. rslt = 0
  5849. arg_msg = '查询组合配置包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText
  5850. GOTO ext
  5851. END IF
  5852. END IF
  5853. //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例
  5854. //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量
  5855. IF li_ifpackpro = 1 Or li_ifpackpro = 3 THEN
  5856. IF ll_cnt > 0 THEN
  5857. cnt = 0
  5858. IF li_ifpackpro = 1 THEN
  5859. SELECT count(*) INTO :cnt
  5860. FROM u_orderrqmtrl,u_mtrldef
  5861. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  5862. AND ( u_mtrldef.ifpack = 1 )
  5863. AND u_orderrqmtrl.orderid = :porderid
  5864. AND u_orderrqmtrl.scid = :arg_scid
  5865. AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty
  5866. And (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2) ;
  5867. IF sqlca.SQLCode <> 0 THEN
  5868. rslt = 0
  5869. arg_msg = '查询包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText
  5870. GOTO ext
  5871. END IF
  5872. ELSEIF li_ifpackpro = 3 THEN
  5873. SELECT count(*) INTO :cnt
  5874. FROM u_orderrqmtrl,u_order_ml
  5875. WHERE u_orderrqmtrl.scid = u_order_ml.scid
  5876. AND u_orderrqmtrl.orderid = u_order_ml.orderid
  5877. AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid
  5878. AND u_orderrqmtrl.orderid = :porderid
  5879. AND u_orderrqmtrl.scid = :arg_scid
  5880. AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty
  5881. And u_orderrqmtrl.plantype = 0 ;
  5882. IF sqlca.SQLCode <> 0 THEN
  5883. rslt = 0
  5884. arg_msg = '查询组合配置包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText
  5885. GOTO ext
  5886. END IF
  5887. END IF
  5888. IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态
  5889. UPDATE u_order_ml
  5890. SET status = 5,
  5891. accomplishdate = getdate(),
  5892. accomplishemp = :publ_operator,
  5893. acmpqty = orderqty
  5894. WHERE ( u_order_ml.orderid = :porderid )
  5895. And (u_order_ml.scid = :arg_scid);
  5896. IF sqlca.SQLCode <> 0 THEN
  5897. rslt = 0
  5898. arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  5899. GOTO ext
  5900. END IF
  5901. //更新分离排产包件产品指令完成数
  5902. IF li_ifpackpro = 1 And li_pordermtrl_ordertype = 1 THEN
  5903. UPDATE u_order_ml
  5904. SET status = 5,
  5905. accomplishdate = getdate(),
  5906. accomplishemp = :publ_operator,
  5907. acmpqty = orderqty
  5908. FROM u_order_ml
  5909. WHERE (u_order_ml.scid = :arg_scid)
  5910. AND (u_order_ml.porderid = :porderid)
  5911. And (u_order_ml.mtrlid = :ll_porder_mtrlid);
  5912. IF sqlca.SQLCode <> 0 THEN
  5913. rslt = 0
  5914. arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText
  5915. GOTO ext
  5916. END IF
  5917. END IF
  5918. ELSE
  5919. //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数
  5920. Decimal ld_minrate
  5921. IF li_ifpackpro = 1 THEN
  5922. SELECT min(inqty / truerqqty) INTO :ld_minrate
  5923. FROM u_orderrqmtrl,u_mtrldef
  5924. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  5925. AND u_orderrqmtrl.orderid = :porderid
  5926. AND u_orderrqmtrl.scid = :arg_scid
  5927. AND ( u_mtrldef.ifpack = 1 )
  5928. AND (u_orderrqmtrl.plantype = 0 or u_orderrqmtrl.plantype = 2)
  5929. And u_orderrqmtrl.truerqqty > 0 ;
  5930. IF sqlca.SQLCode <> 0 THEN
  5931. rslt = 0
  5932. arg_msg = '查询相关包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText
  5933. GOTO ext
  5934. END IF
  5935. ElseIf ( li_ifpackpro = 3 ) THEN
  5936. SELECT min(inqty / truerqqty) INTO :ld_minrate
  5937. FROM u_orderrqmtrl,u_order_ml
  5938. WHERE u_orderrqmtrl.scid = u_order_ml.scid
  5939. AND u_orderrqmtrl.orderid = u_order_ml.orderid
  5940. AND u_orderrqmtrl.mtrlid = u_order_ml.mtrlid
  5941. AND u_orderrqmtrl.orderid = :porderid
  5942. AND u_orderrqmtrl.scid = :arg_scid
  5943. AND u_orderrqmtrl.plantype = 0
  5944. And u_orderrqmtrl.truerqqty > 0 ;
  5945. IF sqlca.SQLCode <> 0 THEN
  5946. rslt = 0
  5947. arg_msg = '查询相关组合配置包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText
  5948. GOTO ext
  5949. END IF
  5950. END IF
  5951. UPDATE u_order_ml
  5952. SET status = 1,
  5953. accomplishdate = :null_dt,
  5954. accomplishemp = '',
  5955. acmpqty = orderqty * :ld_minrate
  5956. WHERE ( u_order_ml.orderid = :porderid )
  5957. And (u_order_ml.scid = :arg_scid);
  5958. IF sqlca.SQLCode <> 0 THEN
  5959. rslt = 0
  5960. arg_msg = "更新包件产品主生产计划状态操作失败"+"~n"+sqlca.SQLErrText
  5961. GOTO ext
  5962. END IF
  5963. //更新分离排产包件产品指令完成数
  5964. IF li_ifpackpro = 1 And li_pordermtrl_ordertype = 1 THEN
  5965. UPDATE u_order_ml
  5966. SET status = 1,
  5967. accomplishdate = :null_dt,
  5968. accomplishemp = '',
  5969. acmpqty = orderqty * :ld_minrate
  5970. WHERE (u_order_ml.scid = :arg_scid)
  5971. AND (u_order_ml.porderid = :porderid)
  5972. And (u_order_ml.mtrlid = :ll_porder_mtrlid);
  5973. IF sqlca.SQLCode <> 0 THEN
  5974. rslt = 0
  5975. arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText
  5976. GOTO ext
  5977. END IF
  5978. END IF
  5979. END IF
  5980. END IF
  5981. ELSE
  5982. //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例
  5983. //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量
  5984. SELECT count(*)
  5985. INTO :ll_cnt_zl
  5986. FROM u_order_ml,u_mtrldef
  5987. WHERE (u_order_ml.mtrlid = u_mtrldef.mtrlid)
  5988. AND ( u_order_ml.porderid = :porderid )
  5989. AND ( u_order_ml.scid = :arg_scid )
  5990. AND ( u_order_ml.pzlorderid > 0 )
  5991. And ( u_mtrldef.ifpack = 2 );
  5992. IF sqlca.SQLCode <> 0 THEN
  5993. arg_msg = '查询包件产品主生产计划个性包件指令状态失败,'+sqlca.SQLErrText
  5994. rslt = 0
  5995. GOTO ext
  5996. END IF
  5997. IF ll_cnt_zl = 0 THEN
  5998. arg_msg = '错误的个性包件指令数量,请检查'
  5999. rslt = 0
  6000. GOTO ext
  6001. END IF
  6002. SELECT count(*) INTO :cnt
  6003. FROM u_order_ml
  6004. WHERE u_order_ml.pzlorderid = :pzlorderid
  6005. AND u_order_ml.scid = :arg_scid
  6006. AND u_order_ml.AcmpQty < u_order_ml.orderqty - u_order_ml.stopqty
  6007. And u_order_ml.ordertype = 4;
  6008. IF sqlca.SQLCode <> 0 THEN
  6009. rslt = 0
  6010. arg_msg = '查询个性包件产品主生产计划【分离指令】相关个性包件指令是否全部完成或终止失败'+sqlca.SQLErrText
  6011. GOTO ext
  6012. END IF
  6013. IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态
  6014. IF pzlorderid = 0 THEN
  6015. UPDATE u_order_ml
  6016. SET status = 5,
  6017. accomplishdate = getdate(),
  6018. accomplishemp = :publ_operator,
  6019. acmpqty = orderqty
  6020. WHERE ( u_order_ml.porderid = :porderid )
  6021. AND (u_order_ml.scid = :arg_scid)
  6022. And (u_order_ml.mtrlid = :ll_porder_mtrlid);
  6023. IF sqlca.SQLCode <> 0 THEN
  6024. rslt = 0
  6025. arg_msg = "通用包件指令更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText
  6026. GOTO ext
  6027. END IF
  6028. ELSE
  6029. UPDATE u_order_ml
  6030. SET status = 5,
  6031. accomplishdate = getdate(),
  6032. accomplishemp = :publ_operator,
  6033. acmpqty = orderqty
  6034. WHERE ( u_order_ml.orderid = :pzlorderid )
  6035. And (u_order_ml.scid = :arg_scid);
  6036. IF sqlca.SQLCode <> 0 THEN
  6037. rslt = 0
  6038. arg_msg = "个性包件指令更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText
  6039. GOTO ext
  6040. END IF
  6041. END IF
  6042. ELSE
  6043. //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数
  6044. IF pzlorderid > 0 THEN
  6045. SELECT min(AcmpQty/orderqty) INTO :ld_minrate
  6046. FROM u_order_ml
  6047. WHERE u_order_ml.pzlorderid = :pzlorderid
  6048. AND u_order_ml.scid = :arg_scid
  6049. And u_order_ml.ordertype = 4;
  6050. IF sqlca.SQLCode <> 0 THEN
  6051. rslt = 0
  6052. arg_msg = '查询个性包件产品主生产计划【分离指令】相关个性包件指令完成率失败'+"~n"+sqlca.SQLErrText
  6053. GOTO ext
  6054. END IF
  6055. UPDATE u_order_ml
  6056. SET status = 1,
  6057. accomplishdate = :null_dt,
  6058. accomplishemp = '',
  6059. acmpqty = orderqty * :ld_minrate
  6060. WHERE ( u_order_ml.orderid = :pzlorderid )
  6061. And (u_order_ml.scid = :arg_scid);
  6062. IF sqlca.SQLCode <> 0 THEN
  6063. rslt = 0
  6064. arg_msg = "更新个性包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText
  6065. GOTO ext
  6066. END IF
  6067. END IF
  6068. END IF
  6069. IF ll_cnt > 0 THEN
  6070. IF uo_option_packpro2_not_use_pack1 = 1 THEN
  6071. ll_pack1_finish = 1
  6072. ELSE
  6073. cnt = 0
  6074. SELECT count(*) INTO :cnt
  6075. FROM u_orderrqmtrl,u_mtrldef
  6076. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  6077. AND ( u_mtrldef.ifpack = 1 )
  6078. AND u_orderrqmtrl.orderid = :porderid
  6079. AND u_orderrqmtrl.scid = :arg_scid
  6080. AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty
  6081. AND u_orderrqmtrl.plantype = 0
  6082. And u_mtrldef.ifpack = 1;
  6083. IF sqlca.SQLCode <> 0 THEN
  6084. rslt = 0
  6085. arg_msg = '查询个性包件产品主生产计划自制需求通用包件是否全部完成失败'+sqlca.SQLErrText
  6086. GOTO ext
  6087. END IF
  6088. IF cnt > 0 THEN
  6089. ll_pack1_finish = 0
  6090. ELSE
  6091. ll_pack1_finish = 1
  6092. END IF
  6093. END IF
  6094. ELSE
  6095. ll_pack1_finish = 1
  6096. END IF
  6097. ld_qty = 0
  6098. SELECT isnull(sum(AcmpQty),0)
  6099. INTO :ld_qty
  6100. FROM u_order_ml
  6101. WHERE u_order_ml.porderid = :porderid
  6102. AND u_order_ml.ordertype = 4
  6103. AND u_order_ml.pzlorderid = 0
  6104. And u_order_ml.mtrlid = :ll_porder_mtrlid;
  6105. IF sqlca.SQLCode <> 0 THEN
  6106. rslt = 0
  6107. arg_msg = '查询相关相关个性包件产品主生产计划【分离指令】完成数失败'+"~n"+sqlca.SQLErrText
  6108. GOTO ext
  6109. END IF
  6110. UPDATE u_order_ml
  6111. SET status = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then 5 else 1 END,
  6112. accomplishdate = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then getdate() else :null_dt END,
  6113. accomplishemp = case when :ll_pack1_finish = 1 AND u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then :publ_operator else '' END,
  6114. acmpqty = :ld_qty
  6115. WHERE ( u_order_ml.orderid = :porderid )
  6116. And (u_order_ml.scid = :arg_scid);
  6117. IF sqlca.SQLCode <> 0 THEN
  6118. rslt = 0
  6119. arg_msg = "更新个性包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText
  6120. GOTO ext
  6121. END IF
  6122. END IF
  6123. ext:
  6124. IF rslt = 0 THEN
  6125. ROLLBACK;
  6126. ELSEIF rslt = 1 And arg_ifcommit THEN
  6127. COMMIT;
  6128. END IF
  6129. RETURN rslt
  6130. end function
  6131. public function integer mod_perfinishdate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, string arg_reason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  6132. DateTime server_dt
  6133. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  6134. rslt = 0
  6135. GOTO ext
  6136. END IF
  6137. IF Date(arg_oridate) = Date(arg_newdate) THEN
  6138. rslt = 0
  6139. arg_msg = '新预计完成日期与原日期相同,无须更新,操作取消'
  6140. GOTO ext
  6141. END IF
  6142. IF Date(arg_newdate) < Date(orderdate) THEN
  6143. rslt = 0
  6144. arg_msg = '不合理的新预计完成日期(新预计完成日期早于生产计划日期)'
  6145. GOTO ext
  6146. END IF
  6147. arg_reason = Trim(arg_reason)
  6148. Long cnt
  6149. Long ll_printid
  6150. cnt = 0
  6151. SELECT count(*) INTO :cnt
  6152. FROM u_order_ml_perfinishdate_log
  6153. WHERE scid = :arg_scid
  6154. AND orderid = :arg_orderid
  6155. and logtype = 0 ;
  6156. IF sqlca.SQLCode <> 0 THEN
  6157. rslt = 0
  6158. arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText
  6159. GOTO ext
  6160. END IF
  6161. IF cnt = 0 THEN
  6162. ll_printid = 0
  6163. ELSE
  6164. SELECT max(printid) INTO :ll_printid
  6165. FROM u_order_ml_perfinishdate_log
  6166. WHERE scid = :arg_scid
  6167. AND orderid = :arg_orderid
  6168. and logtype = 0 ;
  6169. IF sqlca.SQLCode <> 0 THEN
  6170. rslt = 0
  6171. arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText
  6172. GOTO ext
  6173. END IF
  6174. END IF
  6175. ll_printid++
  6176. SELECT Top 1 getdate() INTO :server_dt FROM u_user ;
  6177. IF sqlca.SQLCode <> 0 THEN
  6178. rslt = 0
  6179. arg_msg = "查询操作失败,日期 "
  6180. GOTO ext
  6181. END IF
  6182. INSERT INTO u_order_ml_perfinishdate_log
  6183. (scid,
  6184. orderid,
  6185. printid,
  6186. logtype,
  6187. oridate,
  6188. newdate,
  6189. reason,
  6190. modemp,
  6191. moddate)
  6192. VALUES
  6193. (:arg_scid,
  6194. :arg_orderid,
  6195. :ll_printid,
  6196. 0,
  6197. :arg_oridate,
  6198. :arg_newdate,
  6199. :arg_reason,
  6200. :publ_operator,
  6201. :server_dt);
  6202. IF sqlca.SQLCode <> 0 THEN
  6203. rslt = 0
  6204. arg_msg = "因网络或其它原因导致插入预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText
  6205. GOTO ext
  6206. END IF
  6207. UPDATE u_order_ml
  6208. SET perfinishdate = :arg_newdate
  6209. WHERE scid = :arg_scid
  6210. AND orderid = :arg_orderid;
  6211. IF sqlca.SQLCode <> 0 THEN
  6212. rslt = 0
  6213. arg_msg = '更新预计完成日期失败'+'~n'+sqlca.SQLErrText
  6214. GOTO ext
  6215. END IF
  6216. ext:
  6217. IF rslt = 0 THEN
  6218. ROLLBACK;
  6219. ELSEIF arg_ifcommit AND rslt = 1 THEN
  6220. COMMIT;
  6221. END IF
  6222. Return(rslt)
  6223. end function
  6224. public function integer f_add_dstrqty_ws (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_noallocqty, decimal arg_allocqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  6225. Int li_ordertype
  6226. Long cnt
  6227. Long ll_taskid[]
  6228. Decimal ld_qty_tmp,ld_rqqty_tmp,ld_dstrqty_tmp,ld_update_qty
  6229. Long ll_porderid
  6230. Long i
  6231. Boolean lb_iffind
  6232. Long ll_i,ll_cnt
  6233. Long ll_issuliao
  6234. Long ll_wrkGrpid,ll_storageid
  6235. Decimal ld_price
  6236. IF arg_orderid <= 0 THEN
  6237. rslt = 0
  6238. arg_msg = '错误的指令单唯一码'
  6239. GOTO ext
  6240. END IF
  6241. IF arg_wrkGrpid <= 0 THEN
  6242. rslt = 0
  6243. arg_msg = '错误的工作组唯一码'
  6244. GOTO ext
  6245. END IF
  6246. IF arg_mtrlid <= 0 THEN
  6247. rslt = 0
  6248. arg_msg = '错误的物料唯一码'
  6249. GOTO ext
  6250. END IF
  6251. SELECT issuliao
  6252. INTO :ll_issuliao
  6253. FROM u_mtrldef
  6254. Where mtrlid = :arg_mtrlid;
  6255. IF sqlca.SQLCode <> 0 THEN
  6256. arg_msg = '查询物料领料属性失败,'+sqlca.SQLErrText
  6257. rslt = 0
  6258. GOTO ext
  6259. END IF
  6260. IF ll_issuliao = 2 Or ll_issuliao = 3 THEN
  6261. Decimal ld_slscllweight,ld_orderweight
  6262. UPDATE u_order_ml
  6263. SET slscllweight = slscllweight + :arg_noallocqty
  6264. FROM u_order_ml
  6265. WHERE orderid = :arg_orderid
  6266. And scid = :arg_scid;
  6267. IF sqlca.SQLCode <> 0 THEN
  6268. arg_msg = '更新塑料领料总重失败,'+sqlca.SQLErrText
  6269. rslt = 0
  6270. GOTO ext
  6271. END IF
  6272. END IF
  6273. SELECT wrkGrpid INTO :ll_wrkGrpid
  6274. FROM u_order_ml
  6275. WHERE orderid = :arg_orderid
  6276. And scid = :arg_scid;
  6277. IF sqlca.SQLCode <> 0 THEN
  6278. arg_msg = '查询指令单所属车间失败,'+sqlca.SQLErrText
  6279. rslt = 0
  6280. GOTO ext
  6281. END IF
  6282. SELECT u_sc_wkp.storageid
  6283. INTO :ll_storageid
  6284. FROM u_storage,u_sc_wkp
  6285. WHERE u_sc_wkp.wrkgrpid = :ll_wrkgrpid
  6286. And u_sc_wkp.storageid = u_storage.storageid;
  6287. IF sqlca.SQLCode <> 0 THEN
  6288. arg_msg = '查询车间对应仓库属性失败'+sqlca.SQLErrText
  6289. rslt = 0
  6290. GOTO ext
  6291. END IF
  6292. SELECT top 1 u_mtrlware.cost
  6293. INTO :ld_price
  6294. FROM u_mtrlware,u_mtrldef
  6295. WHERE u_mtrlware.storageid = :ll_storageid
  6296. AND u_mtrlware.mtrlid = :arg_mtrlid
  6297. AND u_mtrlware.status = :arg_status
  6298. AND u_mtrlware.woodcode = :arg_woodcode
  6299. AND u_mtrlware.pcode = :arg_pcode
  6300. And u_mtrlware.mtrlid = u_mtrldef.mtrlid;
  6301. IF sqlca.SQLCode <> 0 THEN
  6302. // arg_msg = '查询库存成本价失败,'+string(arg_mtrlid)+sqlca.SQLErrText
  6303. // rslt = 0
  6304. // GOTO ext
  6305. ld_price = 0
  6306. END IF
  6307. IF IsNull(ld_price) THEN ld_price = 0
  6308. UPDATE u_orderrqmtrl_scll
  6309. SET DstrQty = DstrQty + :arg_noallocqty,
  6310. wsdstrqty = wsdstrqty + :arg_noallocqty + :arg_allocqty,
  6311. costamt = costamt + :arg_noallocqty * :ld_price
  6312. WHERE orderid = :arg_orderid
  6313. AND mtrlid = :arg_mtrlid
  6314. AND wrkGrpid = :arg_wrkGrpid
  6315. AND scid = :arg_scid
  6316. AND status = :arg_status
  6317. AND woodcode = :arg_woodcode
  6318. And pcode = :arg_pcode;
  6319. IF sqlca.SQLCode <> 0 THEN
  6320. rslt = 0
  6321. arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6322. GOTO ext
  6323. END IF
  6324. cnt = 0
  6325. SELECT count(*) INTO :cnt
  6326. FROM u_order_ml_mx
  6327. WHERE orderid = :arg_orderid
  6328. And scid = :arg_scid;
  6329. IF sqlca.SQLCode <> 0 THEN
  6330. rslt = 0
  6331. arg_msg = '查询计划明细失败,'+sqlca.SQLErrText
  6332. GOTO ext
  6333. END IF
  6334. SELECT ordertype,porderid
  6335. INTO :li_ordertype,:ll_porderid
  6336. FROM u_order_ml
  6337. WHERE scid = :arg_scid
  6338. And orderid = :arg_orderid;
  6339. IF sqlca.SQLCode <> 0 THEN
  6340. arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText
  6341. rslt = 0
  6342. GOTO ext
  6343. END IF
  6344. IF cnt = 1 THEN
  6345. IF li_ordertype = 4 And ll_porderid = 0 THEN
  6346. arg_msg = '错误的计划资料,计划类型为指令单,但没有上级生产计划'
  6347. rslt = 0
  6348. GOTO ext
  6349. END IF
  6350. ELSE
  6351. IF li_ordertype = 4 THEN
  6352. IF arg_noallocqty > 0 THEN
  6353. DECLARE cur_mx CURSOR FOR
  6354. SELECT taskid
  6355. FROM u_order_ml_mx
  6356. WHERE scid = :arg_scid
  6357. AND orderid = :arg_orderid
  6358. Order By taskid ;
  6359. OPEN cur_mx ;
  6360. FETCH cur_mx Into :ll_taskid[i];
  6361. DO WHILE sqlca.SQLCode = 0
  6362. i++
  6363. FETCH cur_mx Into :ll_taskid[i];
  6364. LOOP
  6365. CLOSE cur_mx;
  6366. ELSE
  6367. DECLARE cur_mx_2 CURSOR FOR
  6368. SELECT taskid
  6369. FROM u_order_ml_mx
  6370. WHERE scid = :arg_scid
  6371. AND orderid = :arg_orderid
  6372. Order By taskid Desc;
  6373. OPEN cur_mx_2 ;
  6374. FETCH cur_mx_2 Into :ll_taskid[i];
  6375. DO WHILE sqlca.SQLCode = 0
  6376. i++
  6377. FETCH cur_mx_2 Into :ll_taskid[i];
  6378. LOOP
  6379. CLOSE cur_mx_2;
  6380. END IF
  6381. END IF
  6382. END IF
  6383. //更新需求表
  6384. Long ll_orderid_update
  6385. IF cnt = 1 THEN
  6386. IF li_ordertype = 4 THEN
  6387. ll_orderid_update = ll_porderid
  6388. ELSE
  6389. ll_orderid_update = arg_orderid
  6390. END IF
  6391. UPDATE u_orderrqmtrl
  6392. SET DstrQty = DstrQty + :arg_noallocqty
  6393. WHERE orderid = :ll_orderid_update
  6394. AND mtrlid = :arg_mtrlid
  6395. AND wrkGrpid = :arg_wrkgrpid
  6396. AND scid = :arg_scid
  6397. AND status = :arg_status
  6398. AND woodcode = :arg_woodcode
  6399. And pcode = :arg_pcode;
  6400. IF sqlca.SQLCode <> 0 THEN
  6401. rslt = 0
  6402. arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6403. GOTO ext
  6404. END IF
  6405. ELSE
  6406. IF li_ordertype <> 4 THEN //如果是主计划,直接更新
  6407. UPDATE u_orderrqmtrl
  6408. SET DstrQty = DstrQty + :arg_noallocqty
  6409. WHERE orderid = :arg_orderid
  6410. AND mtrlid = :arg_mtrlid
  6411. AND wrkGrpid = :arg_wrkgrpid
  6412. AND scid = :arg_scid
  6413. AND status = :arg_status
  6414. AND woodcode = :arg_woodcode
  6415. And pcode = :arg_pcode;
  6416. IF sqlca.SQLCode <> 0 THEN
  6417. rslt = 0
  6418. arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6419. GOTO ext
  6420. END IF
  6421. ELSE
  6422. ld_qty_tmp = arg_noallocqty
  6423. lb_iffind = False
  6424. FOR ll_i = 1 To cnt
  6425. ll_cnt = 0
  6426. SELECT count(*) INTO :ll_cnt
  6427. FROM u_orderrqmtrl
  6428. WHERE orderid = :ll_taskid[ll_i]
  6429. AND mtrlid = :arg_mtrlid
  6430. AND wrkGrpid = :arg_wrkgrpid
  6431. AND scid = :arg_scid
  6432. AND status = :arg_status
  6433. AND woodcode = :arg_woodcode
  6434. And pcode = :arg_pcode;
  6435. IF sqlca.SQLCode <> 0 THEN
  6436. rslt = 0
  6437. arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6438. GOTO ext
  6439. END IF
  6440. IF ll_cnt = 0 THEN
  6441. IF ll_i = cnt And lb_iffind = False THEN
  6442. rslt = 0
  6443. arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6444. GOTO ext
  6445. ELSE
  6446. CONTINUE
  6447. END IF
  6448. ELSE
  6449. lb_iffind = True
  6450. END IF
  6451. SELECT rqqty,DstrQty INTO :ld_rqqty_tmp,:ld_dstrqty_tmp
  6452. FROM u_orderrqmtrl
  6453. WHERE orderid = :ll_taskid[ll_i]
  6454. AND mtrlid = :arg_mtrlid
  6455. AND wrkGrpid = :arg_wrkgrpid
  6456. AND scid = :arg_scid
  6457. AND status = :arg_status
  6458. AND woodcode = :arg_woodcode
  6459. And pcode = :arg_pcode;
  6460. IF sqlca.SQLCode <> 0 THEN
  6461. rslt = 0
  6462. arg_msg = '查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6463. GOTO ext
  6464. END IF
  6465. IF arg_noallocqty > 0 THEN //领料单审核
  6466. IF ld_qty_tmp > ld_rqqty_tmp - ld_dstrqty_tmp THEN
  6467. IF ll_i = cnt THEN
  6468. ld_update_qty = ld_qty_tmp
  6469. ld_qty_tmp = 0
  6470. ELSE
  6471. ld_update_qty = ld_rqqty_tmp - ld_dstrqty_tmp
  6472. ld_qty_tmp = ld_qty_tmp - (ld_rqqty_tmp - ld_dstrqty_tmp)
  6473. END IF
  6474. ELSE
  6475. ld_update_qty = ld_qty_tmp
  6476. ld_qty_tmp = 0
  6477. END IF
  6478. ELSEIF arg_noallocqty < 0 THEN //领料单撤审
  6479. IF 0 - ld_qty_tmp > ld_dstrqty_tmp THEN
  6480. IF ll_i = cnt THEN
  6481. ld_update_qty = 0 - ld_dstrqty_tmp
  6482. ld_qty_tmp = 0
  6483. ELSE
  6484. ld_update_qty = 0 - ld_dstrqty_tmp
  6485. ld_qty_tmp = ld_qty_tmp + ld_dstrqty_tmp
  6486. END IF
  6487. ELSE
  6488. ld_update_qty = ld_qty_tmp
  6489. ld_qty_tmp = 0
  6490. END IF
  6491. END IF
  6492. UPDATE u_orderrqmtrl
  6493. SET DstrQty = DstrQty + :ld_update_qty
  6494. WHERE orderid = :ll_taskid[ll_i]
  6495. AND mtrlid = :arg_mtrlid
  6496. AND wrkGrpid = :arg_wrkgrpid
  6497. AND scid = :arg_scid
  6498. AND status = :arg_status
  6499. AND woodcode = :arg_woodcode
  6500. And pcode = :arg_pcode;
  6501. IF sqlca.SQLCode <> 0 THEN
  6502. rslt = 0
  6503. arg_msg = '更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6504. GOTO ext
  6505. END IF
  6506. IF ld_qty_tmp = 0 THEN EXIT
  6507. NEXT
  6508. END IF
  6509. END IF
  6510. ext:
  6511. IF rslt = 0 THEN
  6512. ROLLBACK;
  6513. ELSEIF rslt = 1 And arg_ifcommit THEN
  6514. COMMIT;
  6515. END IF
  6516. RETURN rslt
  6517. end function
  6518. public function integer f_add_dstrqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit, long arg_relint_1, ref decimal arg_overqty);Int rslt = 1
  6519. Long ll_wrkgrpid,ll_porderid
  6520. Decimal ld_rqqty,ld_dstrqty
  6521. Int li_ordertype
  6522. Long cnt
  6523. Long ll_taskid[]
  6524. String ls_taskcode[]
  6525. Long i = 1
  6526. Long ll_i
  6527. Decimal ld_qty_tmp,ld_rqqty_tmp,ld_dstrqty_tmp,ld_update_qty
  6528. Long ll_cnt
  6529. Boolean lb_iffind = False
  6530. Decimal ld_update_qty_scll,ld_update_amt_scll
  6531. Long ll_mtrlkind,ll_issuliao
  6532. Decimal ld_scllrate,ld_scllqty
  6533. String ls_ordercode,ls_pordercode
  6534. If uo_option_scll_back_check = -1000 Then
  6535. rslt = 0
  6536. arg_msg = '选项:[379]退料单检查允许退料数量,读取初始默认值失败,操作取消!'
  6537. Goto ext
  6538. End If
  6539. it_mx_rq = 0
  6540. ins_s_rqmtrl = ins_s_empty
  6541. If arg_orderid <= 0 Then
  6542. rslt = 0
  6543. arg_msg = '错误的计划唯一码'
  6544. Goto ext
  6545. End If
  6546. cnt = 0
  6547. Select count(*) Into :cnt
  6548. From u_order_ml_mx
  6549. Where orderid = :arg_orderid
  6550. And scid = :arg_scid;
  6551. If sqlca.SQLCode <> 0 Then
  6552. rslt = 0
  6553. arg_msg = '查询计划明细失败,'+sqlca.SQLErrText
  6554. Goto ext
  6555. End If
  6556. Select ordertype,porderid,ordercode,pordercode
  6557. Into :li_ordertype,:ll_porderid,:ls_ordercode,:ls_pordercode
  6558. From u_order_ml
  6559. Where scid = :arg_scid
  6560. And orderid = :arg_orderid;
  6561. If sqlca.SQLCode <> 0 Then
  6562. arg_msg = '查询生产计划资料失败,'+sqlca.SQLErrText
  6563. rslt = 0
  6564. Goto ext
  6565. End If
  6566. If cnt = 1 Then
  6567. If li_ordertype = 4 And ll_porderid = 0 Then
  6568. arg_msg = '错误的计划资料,计划类型为指令单,但没有上级生产计划'
  6569. rslt = 0
  6570. Goto ext
  6571. End If
  6572. Else
  6573. If li_ordertype = 4 Then
  6574. If arg_qty > 0 Then
  6575. Declare cur_mx Cursor For
  6576. Select taskid,taskcode
  6577. From u_order_ml_mx
  6578. Where scid = :arg_scid
  6579. And orderid = :arg_orderid
  6580. Order By taskid ;
  6581. Open cur_mx ;
  6582. Fetch cur_mx Into :ll_taskid[i],:ls_taskcode[i];
  6583. Do While sqlca.SQLCode = 0
  6584. i++
  6585. Fetch cur_mx Into :ll_taskid[i],:ls_taskcode[i];
  6586. Loop
  6587. Close cur_mx;
  6588. Else
  6589. Declare cur_mx_2 Cursor For
  6590. Select taskid,taskcode
  6591. From u_order_ml_mx
  6592. Where scid = :arg_scid
  6593. And orderid = :arg_orderid
  6594. Order By taskid Desc;
  6595. Open cur_mx_2 ;
  6596. Fetch cur_mx_2 Into :ll_taskid[i],:ls_taskcode[i];
  6597. Do While sqlca.SQLCode = 0
  6598. i++
  6599. Fetch cur_mx_2 Into :ll_taskid[i],:ls_taskcode[i];
  6600. Loop
  6601. Close cur_mx_2;
  6602. End If
  6603. End If
  6604. End If
  6605. //后面增加top 1 处理 2013.06.18
  6606. //If arg_wrkGrpid <= 0 Then
  6607. // rslt = 0
  6608. // arg_msg = '错误的工作中心唯一码'
  6609. // Goto ext
  6610. //End If
  6611. If arg_mtrlid <= 0 Then
  6612. rslt = 0
  6613. arg_msg = '错误的物料唯一码'
  6614. Goto ext
  6615. End If
  6616. Select mtrlkind,
  6617. issuliao,
  6618. scllrate,
  6619. scllqty
  6620. Into :ll_mtrlkind,
  6621. :ll_issuliao,
  6622. :ld_scllrate,
  6623. :ld_scllqty
  6624. From u_mtrldef
  6625. Where mtrlid = :arg_mtrlid;
  6626. If sqlca.SQLCode <> 0 Then
  6627. arg_msg = '指令单:'+ls_ordercode+'查询物料领料属性失败,ID'+String(arg_mtrlid) +' ' +sqlca.SQLErrText
  6628. rslt = 0
  6629. Goto ext
  6630. End If
  6631. //后面增加top 1 处理 2013.06.18
  6632. If arg_wrkGrpid > 0 Then
  6633. Select wrkGrpid
  6634. Into :ll_wrkgrpid
  6635. From u_workgroup
  6636. Where workgroupid = :arg_wrkGrpid;
  6637. If sqlca.SQLCode <> 0 Then
  6638. arg_msg = '指令单:'+ls_ordercode+'查询工作中心所属工组失败,ID:'+String(arg_wrkGrpid) +' ' +sqlca.SQLErrText
  6639. rslt = 0
  6640. Goto ext
  6641. End If
  6642. Else
  6643. ll_wrkgrpid = 0
  6644. End If
  6645. If ll_issuliao = 2 Or ll_issuliao = 3 Then
  6646. Decimal ld_slscllweight,ld_orderweight
  6647. Update u_order_ml
  6648. Set slscllweight = slscllweight + :arg_qty
  6649. From u_order_ml
  6650. Where orderid = :arg_orderid;
  6651. If sqlca.SQLCode <> 0 Then
  6652. arg_msg = '更新塑料领料总重失败,'+sqlca.SQLErrText
  6653. rslt = 0
  6654. Goto ext
  6655. End If
  6656. End If
  6657. If arg_relint_1 = 0 Or arg_relint_1 = 2 Or arg_relint_1 = 5 Then //领料单 or 退料单
  6658. Select truerqqty,dstrqty
  6659. Into :ld_rqqty,:ld_dstrqty
  6660. From u_orderrqmtrl_scll
  6661. Where orderid = :arg_orderid
  6662. And mtrlid = :arg_mtrlid
  6663. And wrkGrpid = :ll_wrkgrpid
  6664. And scid = :arg_scid
  6665. And status = :arg_status
  6666. And woodcode = :arg_woodcode
  6667. And pcode = :arg_pcode;
  6668. If sqlca.SQLCode <> 0 Then
  6669. arg_msg = '指令单:'+ls_ordercode+'查询物料:'+arg_mtrlcode+'已领料数失败,'+sqlca.SQLErrText
  6670. rslt = 0
  6671. Goto ext
  6672. End If
  6673. If IsNull(ld_rqqty) Then ld_rqqty = 0
  6674. If IsNull(ld_dstrqty) Then ld_dstrqty = 0
  6675. If arg_relint_1 = 0 Or arg_relint_1 = 5 Then
  6676. If ll_mtrlkind = 0 Then
  6677. If ld_dstrqty + arg_qty > ld_rqqty * (1 + ld_scllrate) + ld_scllqty Then
  6678. arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode+'未领料数只有:'+String(ld_rqqty - ld_dstrqty,'#,#0.0#') + ',可领数只有:' +String(ld_rqqty * (1 + ld_scllrate) + ld_scllqty - ld_dstrqty,'#,#0.0#')+',不能领料:'+String(arg_qty,'#,#0.0#')
  6679. rslt = 0
  6680. Goto ext
  6681. End If
  6682. ld_update_qty_scll = arg_qty
  6683. ld_update_amt_scll = arg_costamt
  6684. arg_overqty = 0
  6685. Else
  6686. If arg_qty > 0 Then
  6687. If ld_dstrqty + arg_qty > ld_rqqty Then
  6688. ld_update_qty_scll = ld_rqqty - ld_dstrqty
  6689. ld_update_amt_scll = (arg_costamt / arg_qty) * (ld_rqqty - ld_dstrqty)
  6690. arg_overqty = ld_dstrqty + arg_qty - ld_rqqty
  6691. Else
  6692. ld_update_qty_scll = arg_qty
  6693. ld_update_amt_scll = arg_costamt
  6694. arg_overqty = 0
  6695. End If
  6696. Else
  6697. If ld_dstrqty + arg_qty < 0 Then
  6698. ld_update_qty_scll = 0 - ld_dstrqty
  6699. ld_update_amt_scll = (arg_costamt / arg_qty) * (0 - ld_dstrqty)
  6700. arg_overqty = ld_dstrqty + arg_qty
  6701. Else
  6702. ld_update_qty_scll = arg_qty
  6703. ld_update_amt_scll = arg_costamt
  6704. arg_overqty = 0
  6705. End If
  6706. End If
  6707. End If
  6708. ElseIf arg_relint_1 = 2 Then
  6709. If arg_qty < 0 Then //审核还料单时检查,撤审时不检查
  6710. If ld_dstrqty < Abs(arg_qty) Then
  6711. arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode+'已领料数只有:'+String(ld_dstrqty,'#,#0.0#')+',不能退料:'+String(arg_qty,'#,#0.0#')
  6712. rslt = 0
  6713. Goto ext
  6714. End If
  6715. If uo_option_scll_back_check = 1 Then
  6716. Decimal ld_orderqty,ld_acmpqty
  6717. Decimal ld_blrate,ld_canbackqty
  6718. Select orderqty,acmpqty
  6719. Into :ld_orderqty,:ld_acmpqty
  6720. From u_order_ml
  6721. Where scid = :arg_scid
  6722. And orderid = :arg_orderid;
  6723. If sqlca.SQLCode <> 0 Then
  6724. rslt = 0
  6725. arg_msg = '查询指令单:'+ls_ordercode+'已进仓数失败,'+sqlca.SQLErrText
  6726. Goto ext
  6727. End If
  6728. If ld_orderqty > 0 Then
  6729. ld_blrate = ld_rqqty / ld_orderqty
  6730. ld_canbackqty = ld_dstrqty - ld_blrate * ld_acmpqty
  6731. If Abs(arg_qty) > ld_canbackqty Then
  6732. arg_msg = '指令单:'+ls_ordercode+'已进仓数:'+string(ld_acmpqty,'#,#0.0#')+',物料:'+arg_mtrlcode+'对应已用料数量:'+string(ld_blrate * ld_acmpqty,'#,#0.0#')+',已领数:'+string(ld_dstrqty,'#,#0.0#')+',可退料数只有:'+String(ld_canbackqty,'#,#0.0#')+',不能退料:'+String(arg_qty,'#,#0.0#')
  6733. rslt = 0
  6734. Goto ext
  6735. End If
  6736. End If
  6737. End If
  6738. End If
  6739. ld_update_qty_scll = arg_qty
  6740. ld_update_amt_scll = arg_costamt
  6741. End If
  6742. ElseIf arg_relint_1 = -1 Then
  6743. ld_update_qty_scll = arg_qty
  6744. ld_update_amt_scll = arg_costamt
  6745. End If
  6746. If Not (arg_relint_1 = -1 And li_ordertype <> 3) Then
  6747. Update u_orderrqmtrl_scll
  6748. Set DstrQty = DstrQty + :ld_update_qty_scll,
  6749. costamt = costamt + :ld_update_amt_scll
  6750. Where orderid = :arg_orderid
  6751. And mtrlid = :arg_mtrlid
  6752. And wrkGrpid = :ll_wrkgrpid
  6753. And scid = :arg_scid
  6754. And status = :arg_status
  6755. And woodcode = :arg_woodcode
  6756. And pcode = :arg_pcode;
  6757. If sqlca.SQLCode = 0 Then
  6758. If sqlca.SQLNRows = 0 Then
  6759. Insert Into u_orderrqmtrl_scll
  6760. (scid,
  6761. OrderID,
  6762. MtrlID,
  6763. wrkGrpid,
  6764. truerqqty,
  6765. DstrQty,
  6766. costamt,
  6767. status,
  6768. woodcode,
  6769. pcode)
  6770. Values
  6771. (:arg_scid,
  6772. :arg_orderid,
  6773. :arg_mtrlid,
  6774. :ll_wrkgrpid,
  6775. :arg_Qty,
  6776. 0,
  6777. :arg_costamt,
  6778. :arg_status,
  6779. :arg_woodcode,
  6780. :arg_pcode);
  6781. If sqlca.SQLCode <> 0 Then
  6782. arg_msg = '指令单:'+ls_ordercode+'物料:'+arg_mtrlcode + '新建领料明细失败,'+sqlca.SQLErrText
  6783. rslt = 0
  6784. Goto ext
  6785. End If
  6786. End If
  6787. datastore ds_sl
  6788. ds_sl = Create datastore
  6789. ds_sl.DataObject = "ds_slcost"
  6790. ds_sl.SetTransObject(sqlca)
  6791. ds_sl.Retrieve(arg_scid,arg_orderid)
  6792. Long ll_row
  6793. Decimal ld_slcost = 0,ld_planslcost = 0
  6794. ll_row = ds_sl.RowCount()
  6795. If ll_row > 0 Then
  6796. For ll_i = 1 To ll_row
  6797. If ds_sl.Object.u_mtrldef_issuliao[ll_i] = 2 Or ds_sl.Object.u_mtrldef_issuliao[ll_i] = 3 Then
  6798. ld_slcost = ld_slcost + ds_sl.Object.u_orderrqmtrl_scll_costamt[ll_i] //ds_sl.Object.u_orderrqmtrl_truerqqty[ll_i] * ds_sl.Object.price[ll_i]
  6799. ld_planslcost = ld_planslcost + ds_sl.Object.u_orderrqmtrl_scll_truerqqty[ll_i] * ds_sl.Object.price[ll_i]
  6800. End If
  6801. Next
  6802. End If
  6803. Update u_order_ml
  6804. Set u_order_ml.slcost = :ld_slcost,
  6805. u_order_ml.planslcost = :ld_planslcost
  6806. Where orderid = :arg_orderid
  6807. And scid = :arg_scid;
  6808. If sqlca.SQLCode <> 0 Then
  6809. rslt = 0
  6810. arg_msg = '指令单:'+ls_ordercode+'更新计划塑料成本失败,'+sqlca.SQLErrText
  6811. Goto ext
  6812. End If
  6813. Else
  6814. rslt = 0
  6815. arg_msg = '指令单:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',领料数失败>>'+sqlca.SQLErrText
  6816. Goto ext
  6817. End If
  6818. End If
  6819. //更新需求表
  6820. Long ll_orderid_update
  6821. String ls_ordercode_update
  6822. If cnt = 1 Then
  6823. If li_ordertype = 4 Then
  6824. ll_orderid_update = ll_porderid
  6825. ls_ordercode_update = ls_pordercode
  6826. Else
  6827. ll_orderid_update = arg_orderid
  6828. ls_ordercode_update = ls_ordercode
  6829. End If
  6830. Update u_orderrqmtrl
  6831. Set DstrQty = DstrQty + :arg_qty
  6832. Where orderid = :ll_orderid_update
  6833. And mtrlid = :arg_mtrlid
  6834. And wrkGrpid = :ll_wrkgrpid
  6835. And scid = :arg_scid
  6836. And status = :arg_status
  6837. And woodcode = :arg_woodcode
  6838. And pcode = :arg_pcode;
  6839. If sqlca.SQLCode <> 0 Then
  6840. rslt = 0
  6841. arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6842. Goto ext
  6843. ElseIf sqlca.SQLNRows = 0 Then
  6844. Select top 1 wrkgrpid Into :ll_wrkgrpid
  6845. From u_orderrqmtrl
  6846. Where orderid = :ll_orderid_update
  6847. And mtrlid = :arg_mtrlid
  6848. And scid = :arg_scid
  6849. And status = :arg_status
  6850. And woodcode = :arg_woodcode
  6851. And pcode = :arg_pcode;
  6852. If sqlca.SQLCode <> 0 Then
  6853. rslt = 0
  6854. arg_msg = '生产计划:'+ls_ordercode_update +',物料:'+arg_mtrlcode+',查询物料需求明细失败(领料组)>>'+sqlca.SQLErrText
  6855. Goto ext
  6856. ElseIf sqlca.SQLNRows = 0 Then
  6857. rslt = 0
  6858. arg_msg = '生产计划:'+ls_ordercode_update +',物料:'+arg_mtrlcode+',查询物料需求明细失败(领料组)>>找不到相关行'
  6859. Goto ext
  6860. End If
  6861. Update u_orderrqmtrl
  6862. Set DstrQty = DstrQty + :arg_qty
  6863. Where orderid = :ll_orderid_update
  6864. And mtrlid = :arg_mtrlid
  6865. And wrkGrpid = :ll_wrkgrpid
  6866. And scid = :arg_scid
  6867. And status = :arg_status
  6868. And woodcode = :arg_woodcode
  6869. And pcode = :arg_pcode;
  6870. If sqlca.SQLCode <> 0 Then
  6871. rslt = 0
  6872. arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6873. Goto ext
  6874. ElseIf sqlca.SQLNRows = 0 Then
  6875. rslt = 0
  6876. arg_msg = '生产计划:'+ls_ordercode_update +',更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行'
  6877. Goto ext
  6878. End If
  6879. End If
  6880. it_mx_rq++
  6881. ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid
  6882. ins_s_rqmtrl.status[it_mx_rq] = arg_status
  6883. ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode
  6884. ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode
  6885. ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid
  6886. ins_s_rqmtrl.orderid[it_mx_rq] = ll_orderid_update
  6887. ins_s_rqmtrl.qty[it_mx_rq] = arg_qty
  6888. ins_s_rqmtrl.scid[it_mx_rq] = arg_scid
  6889. Else
  6890. If li_ordertype <> 4 Then //如果是主计划,直接更新
  6891. Update u_orderrqmtrl
  6892. Set DstrQty = DstrQty + :arg_qty
  6893. Where orderid = :arg_orderid
  6894. And mtrlid = :arg_mtrlid
  6895. And wrkGrpid = :ll_wrkgrpid
  6896. And scid = :arg_scid
  6897. And status = :arg_status
  6898. And woodcode = :arg_woodcode
  6899. And pcode = :arg_pcode;
  6900. If sqlca.SQLCode <> 0 Then
  6901. rslt = 0
  6902. arg_msg = '生产计划:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6903. Goto ext
  6904. ElseIf sqlca.SQLNRows = 0 Then
  6905. rslt = 0
  6906. arg_msg = '生产计划:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行'
  6907. Goto ext
  6908. End If
  6909. it_mx_rq++
  6910. ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid
  6911. ins_s_rqmtrl.status[it_mx_rq] = arg_status
  6912. ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode
  6913. ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode
  6914. ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid
  6915. ins_s_rqmtrl.orderid[it_mx_rq] = arg_orderid
  6916. ins_s_rqmtrl.qty[it_mx_rq] = arg_qty
  6917. ins_s_rqmtrl.scid[it_mx_rq] = arg_scid
  6918. Else
  6919. ld_qty_tmp = arg_qty
  6920. lb_iffind = False
  6921. For ll_i = 1 To cnt
  6922. ll_cnt = 0
  6923. Select count(*) Into :ll_cnt
  6924. From u_orderrqmtrl
  6925. Where orderid = :ll_taskid[ll_i]
  6926. And mtrlid = :arg_mtrlid
  6927. And wrkGrpid = :ll_wrkgrpid
  6928. And scid = :arg_scid
  6929. And status = :arg_status
  6930. And woodcode = :arg_woodcode
  6931. And pcode = :arg_pcode;
  6932. If sqlca.SQLCode <> 0 Then
  6933. rslt = 0
  6934. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6935. Goto ext
  6936. End If
  6937. If ll_cnt = 0 Then
  6938. If ll_i = cnt And lb_iffind = False Then
  6939. rslt = 0
  6940. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关行'
  6941. Goto ext
  6942. Else
  6943. Continue
  6944. End If
  6945. Else
  6946. lb_iffind = True
  6947. End If
  6948. Select rqqty,DstrQty Into :ld_rqqty_tmp,:ld_dstrqty_tmp
  6949. From u_orderrqmtrl
  6950. Where orderid = :ll_taskid[ll_i]
  6951. And mtrlid = :arg_mtrlid
  6952. And wrkGrpid = :ll_wrkgrpid
  6953. And scid = :arg_scid
  6954. And status = :arg_status
  6955. And woodcode = :arg_woodcode
  6956. And pcode = :arg_pcode;
  6957. If sqlca.SQLCode <> 0 Then
  6958. rslt = 0
  6959. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  6960. Goto ext
  6961. ElseIf sqlca.SQLNRows = 0 Then
  6962. rslt = 0
  6963. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',查询物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关行'
  6964. Goto ext
  6965. End If
  6966. If arg_qty > 0 Then //领料单审核
  6967. If ld_qty_tmp > ld_rqqty_tmp - ld_dstrqty_tmp Then
  6968. If ll_i = cnt Then
  6969. ld_update_qty = ld_qty_tmp
  6970. ld_qty_tmp = 0
  6971. Else
  6972. ld_update_qty = ld_rqqty_tmp - ld_dstrqty_tmp
  6973. ld_qty_tmp = ld_qty_tmp - (ld_rqqty_tmp - ld_dstrqty_tmp)
  6974. End If
  6975. Else
  6976. ld_update_qty = ld_qty_tmp
  6977. ld_qty_tmp = 0
  6978. End If
  6979. ElseIf arg_qty < 0 Then //领料单撤审
  6980. If 0 - ld_qty_tmp > ld_dstrqty_tmp Then
  6981. If ll_i = cnt Then
  6982. ld_update_qty = 0 - ld_dstrqty_tmp
  6983. ld_qty_tmp = 0
  6984. Else
  6985. ld_update_qty = 0 - ld_dstrqty_tmp
  6986. ld_qty_tmp = ld_qty_tmp + ld_dstrqty_tmp
  6987. End If
  6988. Else
  6989. ld_update_qty = ld_qty_tmp
  6990. ld_qty_tmp = 0
  6991. End If
  6992. End If
  6993. Update u_orderrqmtrl
  6994. Set DstrQty = DstrQty + :ld_update_qty
  6995. Where orderid = :ll_taskid[ll_i]
  6996. And mtrlid = :arg_mtrlid
  6997. And wrkGrpid = :ll_wrkgrpid
  6998. And scid = :arg_scid
  6999. And status = :arg_status
  7000. And woodcode = :arg_woodcode
  7001. And pcode = :arg_pcode;
  7002. If sqlca.SQLCode <> 0 Then
  7003. rslt = 0
  7004. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',更新物料:'+arg_mtrlcode+',计划需求明细失败>>'+sqlca.SQLErrText
  7005. Goto ext
  7006. ElseIf sqlca.SQLNRows = 0 Then
  7007. rslt = 0
  7008. arg_msg = '生产计划:'+ls_taskcode[ll_i]+',更新物料:'+arg_mtrlcode+',计划需求明细失败>>找不到相关更新行'
  7009. Goto ext
  7010. End If
  7011. it_mx_rq++
  7012. ins_s_rqmtrl.mtrlid[it_mx_rq] = arg_mtrlid
  7013. ins_s_rqmtrl.status[it_mx_rq] = arg_status
  7014. ins_s_rqmtrl.woodcode[it_mx_rq] = arg_woodcode
  7015. ins_s_rqmtrl.pcode[it_mx_rq] = arg_pcode
  7016. ins_s_rqmtrl.wrkGrpid[it_mx_rq] = ll_wrkgrpid
  7017. ins_s_rqmtrl.orderid[it_mx_rq] = ll_taskid[ll_i]
  7018. ins_s_rqmtrl.qty[it_mx_rq] = ld_update_qty
  7019. ins_s_rqmtrl.scid[it_mx_rq] = arg_scid
  7020. If ld_qty_tmp = 0 Then Exit
  7021. Next
  7022. End If
  7023. End If
  7024. //
  7025. ext:
  7026. If rslt = 0 Then
  7027. Rollback;
  7028. ElseIf rslt = 1 And arg_ifcommit Then
  7029. Commit;
  7030. End If
  7031. Return rslt
  7032. end function
  7033. public function integer uof_stopjj (long arg_scid, long arg_orderid, string arg_reason, ref string arg_msg, boolean arg_ifcommit);
  7034. Int rslt = 1
  7035. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  7036. IF rslt = 0 THEN GOTO ext
  7037. IF status = 0 THEN
  7038. rslt = 0
  7039. arg_msg = "待审核状态下不能执行终止计件操作,请核对"
  7040. GOTO ext
  7041. END IF
  7042. IF stopjj = 1 THEN
  7043. rslt = 0
  7044. arg_msg = '已执行过终止计件操作,不能重复执行'
  7045. GOTO ext
  7046. END IF
  7047. IF Trim(arg_reason) = '' THEN
  7048. rslt = 0
  7049. arg_msg = '请说明终止计件的原因'
  7050. GOTO ext
  7051. END IF
  7052. UPDATE u_order_ml
  7053. SET stopjj = 1,
  7054. stopjjemp = :publ_operator,
  7055. stopjjdate = getdate(),
  7056. stopjjreason = :arg_reason
  7057. WHERE orderid = :arg_orderid
  7058. AND scid = :arg_scid
  7059. and stopjj = 0;
  7060. IF sqlca.SQLCode <> 0 THEN
  7061. rslt = 0
  7062. arg_msg = "因网络或其它原因导致终止计件操作失败"+"~n"+sqlca.SQLErrText
  7063. GOTO ext
  7064. END IF
  7065. ext:
  7066. IF rslt = 0 THEN
  7067. ROLLBACK;
  7068. p_reset()
  7069. ELSEIF arg_ifcommit AND rslt = 1 THEN
  7070. COMMIT;
  7071. END IF
  7072. Return (rslt)
  7073. end function
  7074. public function integer uof_add_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  7075. Long cnt
  7076. String ls_ordercode
  7077. String ls_fpdscrp
  7078. IF IsNull(arg_scid) THEN arg_scid = 0
  7079. IF IsNull(arg_orderid) THEN arg_orderid = 0
  7080. IF IsNull(arg_fpscid) THEN arg_fpscid = 0
  7081. IF IsNull(arg_fporderid) THEN arg_fporderid = 0
  7082. IF IsNull(arg_fpqty) THEN arg_fpqty = 0
  7083. IF arg_fpqty <= 0 THEN
  7084. rslt = 0
  7085. arg_msg = '不合理的分配数量'
  7086. GOTO ext
  7087. END IF
  7088. SELECT count(*) INTO :cnt
  7089. FROM u_order_ml
  7090. WHERE scid = :arg_scid
  7091. AND orderid = :arg_orderid;
  7092. IF sqlca.SQLCode <> 0 THEN
  7093. rslt = 0
  7094. arg_msg = '查询主计划资料失败,'+sqlca.SQLErrText
  7095. GOTO ext
  7096. END IF
  7097. IF cnt = 0 THEN
  7098. rslt = 0
  7099. arg_msg = '主计划资料不存在'
  7100. GOTO ext
  7101. END IF
  7102. SELECT count(*) INTO :cnt
  7103. FROM u_order_ml
  7104. WHERE scid = :arg_fpscid
  7105. AND orderid = :arg_fporderid;
  7106. IF sqlca.SQLCode <> 0 THEN
  7107. rslt = 0
  7108. arg_msg = '查询被分配主计划资料失败,'+sqlca.SQLErrText
  7109. GOTO ext
  7110. END IF
  7111. IF cnt = 0 THEN
  7112. rslt = 0
  7113. arg_msg = '被分配计划资料不存在'
  7114. GOTO ext
  7115. END IF
  7116. Decimal ld_fpqty
  7117. Decimal ld_orderqty
  7118. SELECT orderqty,fpqty
  7119. INTO :ld_orderqty,:ld_fpqty
  7120. FROM u_order_ml
  7121. WHERE scid = :arg_fpscid
  7122. AND orderid = :arg_fporderid;
  7123. IF sqlca.SQLCode <> 0 THEN
  7124. rslt = 0
  7125. arg_msg = '查询被分配计划信息失败'+sqlca.SQLErrText
  7126. GOTO ext
  7127. END IF
  7128. IF ld_fpqty + arg_fpqty > ld_orderqty THEN
  7129. rslt = 0
  7130. arg_msg = '分配数量'+String(arg_fpqty,'#,##0.##########')+' 不能大于被分配计划的未分配数量'+String(ld_orderqty - ld_fpqty,'#,##0.##########')
  7131. GOTO ext
  7132. END IF
  7133. INSERT INTO u_order_fpmx
  7134. (scid,
  7135. orderid,
  7136. fpscid,
  7137. fporderid,
  7138. fpqty)
  7139. VALUES
  7140. (:arg_scid,
  7141. :arg_orderid,
  7142. :arg_fpscid,
  7143. :arg_fporderid,
  7144. :arg_fpqty);
  7145. IF sqlca.SQLCode <> 0 THEN
  7146. rslt = 0
  7147. arg_msg = '插入分配明细表失败'+sqlca.SQLErrText
  7148. GOTO ext
  7149. END IF
  7150. SELECT ordercode
  7151. INTO :ls_ordercode
  7152. FROM u_order_ml
  7153. WHERE scid = :arg_scid
  7154. AND orderid = :arg_orderid;
  7155. IF sqlca.SQLCode <> 0 THEN
  7156. rslt = 0
  7157. arg_msg = '查询主计划号失败'+sqlca.SQLErrText
  7158. GOTO ext
  7159. END IF
  7160. ls_fpdscrp = ls_ordercode+'/'+String(arg_fpqty,'#,##0.##########')+';'
  7161. UPDATE u_order_ml
  7162. SET fpqty = fpqty + :arg_fpqty,
  7163. fpdscrp = fpdscrp + :ls_fpdscrp
  7164. WHERE scid = :arg_fpscid
  7165. AND orderid = :arg_fporderid;
  7166. IF sqlca.SQLCode <> 0 THEN
  7167. rslt = 0
  7168. arg_msg = '查询被分配计划的分配数量失败'+sqlca.SQLErrText
  7169. GOTO ext
  7170. END IF
  7171. ext:
  7172. IF rslt = 0 THEN
  7173. ROLLBACK;
  7174. ELSEIF rslt = 1 AND arg_ifcommit THEN
  7175. COMMIT;
  7176. END IF
  7177. RETURN rslt
  7178. end function
  7179. public function integer uof_del_fpqty (long arg_scid, long arg_orderid, long arg_fpscid, long arg_fporderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  7180. Long cnt
  7181. String ls_ordercode
  7182. String ls_fpdscrp
  7183. IF IsNull(arg_scid) THEN arg_scid = 0
  7184. IF IsNull(arg_orderid) THEN arg_orderid = 0
  7185. IF IsNull(arg_fpscid) THEN arg_fpscid = 0
  7186. IF IsNull(arg_fporderid) THEN arg_fporderid = 0
  7187. SELECT count(*) INTO :cnt
  7188. FROM u_order_ml
  7189. WHERE scid = :arg_scid
  7190. AND orderid = :arg_orderid;
  7191. IF sqlca.SQLCode <> 0 THEN
  7192. rslt = 0
  7193. arg_msg = '查询主计划资料失败,'+sqlca.SQLErrText
  7194. GOTO ext
  7195. END IF
  7196. IF cnt = 0 THEN
  7197. rslt = 0
  7198. arg_msg = '主计划资料不存在'
  7199. GOTO ext
  7200. END IF
  7201. SELECT count(*) INTO :cnt
  7202. FROM u_order_ml
  7203. WHERE scid = :arg_fpscid
  7204. AND orderid = :arg_fporderid;
  7205. IF sqlca.SQLCode <> 0 THEN
  7206. rslt = 0
  7207. arg_msg = '查询被分配主计划资料失败,'+sqlca.SQLErrText
  7208. GOTO ext
  7209. END IF
  7210. IF cnt = 0 THEN
  7211. rslt = 0
  7212. arg_msg = '被分配计划资料不存在'
  7213. GOTO ext
  7214. END IF
  7215. Decimal ld_fpqty
  7216. SELECT fpqty
  7217. INTO :ld_fpqty
  7218. FROM u_order_fpmx
  7219. WHERE scid = :arg_scid
  7220. AND orderid = :arg_orderid
  7221. AND fpscid = :arg_fpscid
  7222. AND fporderid = :arg_fporderid;
  7223. IF sqlca.SQLCode <> 0 THEN
  7224. rslt = 0
  7225. arg_msg = '查询分配数量失败'+sqlca.SQLErrText
  7226. GOTO ext
  7227. END IF
  7228. SELECT ordercode
  7229. INTO :ls_ordercode
  7230. FROM u_order_ml
  7231. WHERE scid = :arg_scid
  7232. AND orderid = :arg_orderid;
  7233. IF sqlca.SQLCode <> 0 THEN
  7234. rslt = 0
  7235. arg_msg = '查询主计划号失败'+sqlca.SQLErrText
  7236. GOTO ext
  7237. END IF
  7238. ls_fpdscrp = ls_ordercode+'/'+String(ld_fpqty,'#,##0.##########')+';'
  7239. UPDATE u_order_ml
  7240. SET fpqty = fpqty - :ld_fpqty,
  7241. fpdscrp = replace(fpdscrp,:ls_fpdscrp,'')
  7242. WHERE scid = :arg_fpscid
  7243. AND orderid = :arg_fporderid;
  7244. IF sqlca.SQLCode <> 0 THEN
  7245. rslt = 0
  7246. arg_msg = '查询被分配计划的分配数量失败'+sqlca.SQLErrText
  7247. GOTO ext
  7248. END IF
  7249. DELETE FROM u_order_fpmx
  7250. WHERE orderid = :arg_orderid
  7251. AND scid = :arg_scid
  7252. and fpscid = :arg_fpscid
  7253. and fporderid = :arg_fporderid;
  7254. IF sqlca.SQLCode <> 0 THEN
  7255. rslt = 0
  7256. arg_msg = "删除计划分配明细操作失败"+"~n"+sqlca.SQLErrText
  7257. GOTO ext
  7258. END IF
  7259. ext:
  7260. IF rslt = 0 THEN
  7261. ROLLBACK;
  7262. ELSEIF rslt = 1 AND arg_ifcommit THEN
  7263. COMMIT;
  7264. END IF
  7265. RETURN rslt
  7266. end function
  7267. public function integer uf_add_taskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, decimal arg_taskqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  7268. If arg_orderid <= 0 Then
  7269. rslt = 0
  7270. arg_msg = '错误的计划唯一码'
  7271. Goto ext
  7272. End If
  7273. If arg_mtrlid <= 0 Then
  7274. rslt = 0
  7275. arg_msg = '错误的物料ID唯一码'
  7276. Goto ext
  7277. End If
  7278. If arg_procode = '' Or IsNull(arg_procode) Then
  7279. rslt = 0
  7280. arg_msg = '错误的工序序号'
  7281. Goto ext
  7282. End If
  7283. Int li_status,li_finish_scflag
  7284. Select status,finish_scflag
  7285. Into :li_status,:li_finish_scflag
  7286. From u_order_ml
  7287. Where orderid = :arg_orderid
  7288. And scid = :arg_scid;
  7289. If sqlca.SQLCode <> 0 Then
  7290. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  7291. rslt = 0
  7292. Goto ext
  7293. End If
  7294. //IF li_status <> 1 and li_status <> 5 and li_status <> 6 THEN
  7295. // rslt = 0
  7296. // arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对"
  7297. // GOTO ext
  7298. //END IF
  7299. If li_status = 0 Then
  7300. rslt = 0
  7301. arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对"
  7302. Goto ext
  7303. End If
  7304. If li_finish_scflag = 1 Then
  7305. rslt = 0
  7306. arg_msg = '生产计划/指令单已完成派工,请核对'
  7307. Goto ext
  7308. End If
  7309. Update u_orderrqwp
  7310. Set taskqty = taskqty + :arg_taskqty
  7311. Where orderid = :arg_orderid
  7312. And mtrlid = :arg_mtrlid
  7313. And procode = :arg_procode
  7314. And scid = :arg_scid;
  7315. If sqlca.SQLCode <> 0 Then
  7316. rslt = 0
  7317. arg_msg = '因网络或其他原因导致更新已安排时数失败'+sqlca.SQLErrText
  7318. Goto ext
  7319. Else
  7320. If sqlca.SQLNRows = 0 Then
  7321. rslt = 0
  7322. arg_msg = '没有找到可更新的指令单工序进度'
  7323. Goto ext
  7324. End If
  7325. End If
  7326. ext:
  7327. If rslt = 0 Then
  7328. Rollback;
  7329. ElseIf rslt = 1 And arg_ifcommit Then
  7330. Commit;
  7331. End If
  7332. Return rslt
  7333. end function
  7334. public function integer addmxskl (long arg_scid, long arg_orderid, decimal arg_qty, decimal arg_costamt, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  7335. Decimal ld_slweight,ld_sklweight,ld_slscllweight
  7336. String ls_mtrlname
  7337. IF uo_option_skl_overscll = -1000 THEN
  7338. rslt = 0
  7339. arg_msg = '选项:[160]是否允许水口料超领料数入库,读取初始默认值失败,操作取消!'
  7340. GOTO ext
  7341. END IF
  7342. IF uo_option_skl_overscll_rate = -1000 THEN
  7343. rslt = 0
  7344. arg_msg = '选项:[197]水口料超计划回收比例,读取初始默认值失败,操作取消!'
  7345. GOTO ext
  7346. END IF
  7347. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  7348. IF rslt = 0 THEN GOTO ext
  7349. IF arg_qty = 0 THEN
  7350. rslt = 0
  7351. arg_msg = "没有水口料回收数量"
  7352. GOTO ext
  7353. END IF
  7354. SELECT u_mtrldef.mtrlname
  7355. INTO :ls_mtrlname
  7356. FROM u_Order_ml INNER JOIN
  7357. u_mtrldef_sl ON u_Order_ml.mtrlid = u_mtrldef_sl.mtrlid INNER JOIN
  7358. u_mtrldef ON u_mtrldef_sl.sk_mtrlid = u_mtrldef.mtrlid
  7359. Where u_Order_ml.orderid = :arg_orderid ;
  7360. IF sqlca.SQLCode <> 0 THEN
  7361. rslt = 0
  7362. arg_msg = "因网络或错误产品唯一码导致查询水口料操作失败"
  7363. GOTO ext
  7364. END IF
  7365. IF uo_option_skl_overscll = 0 THEN //不允许超计划
  7366. SELECT slweight,sklweight,slscllweight INTO :ld_slweight,:ld_sklweight,:ld_slscllweight
  7367. FROM u_order_ml
  7368. WHERE ( orderid = :arg_orderid )
  7369. And ( scid = :arg_scid );
  7370. IF sqlca.SQLCode <> 0 THEN
  7371. rslt = 0
  7372. arg_msg = "因网络或错误查询生产计划塑料成品总重或水口料总重操作失败"
  7373. GOTO ext
  7374. END IF
  7375. IF ld_slscllweight < ld_sklweight + ld_slweight + arg_qty THEN
  7376. rslt = 0
  7377. arg_msg = '该计划明细对应的水口料['+ls_mtrlname+']'+'~r~n'+'本次回收数量大于本计划水口料可回收数:'+String(ld_slscllweight - ld_slweight - ld_sklweight,'0.####')+'~r~n' +'塑料成品总重:'+String(ld_slweight,'0.####')+',塑料领料总重:'+String(ld_slscllweight,'0.####')+', 已回收水口料重量:'+String(ld_sklweight,'0.####')
  7378. GOTO ext
  7379. END IF
  7380. ELSEIF uo_option_skl_overscll = 2 THEN //允许但按比例限制
  7381. SELECT slweight,sklweight,slscllweight INTO :ld_slweight,:ld_sklweight,:ld_slscllweight
  7382. FROM u_order_ml
  7383. WHERE ( orderid = :arg_orderid )
  7384. And ( scid = :arg_scid );
  7385. IF sqlca.SQLCode <> 0 THEN
  7386. rslt = 0
  7387. arg_msg = "因网络或错误查询生产计划塑料成品总重或水口料总重操作失败"
  7388. GOTO ext
  7389. END IF
  7390. IF (ld_slscllweight - ld_slweight) * (1 + uo_option_skl_overscll_rate) < ld_sklweight + arg_qty THEN
  7391. rslt = 0
  7392. arg_msg = '该计划明细对应的水口料['+ls_mtrlname+']'+'~r~n'+'本次回收数量大于本计划水口料可回收数:'+String( (ld_slscllweight - ld_slweight) * (1 + uo_option_skl_overscll_rate) - ld_sklweight,'0.####')+'~r~n' +'塑料成品总重:'+String(ld_slweight,'0.####')+',塑料领料总重:'+String(ld_slscllweight,'0.####')+', 已回收水口料重量:'+String(ld_sklweight,'0.####')
  7393. GOTO ext
  7394. END IF
  7395. END IF
  7396. UPDATE u_order_ml
  7397. SET sklweight = sklweight + :arg_qty,
  7398. slcost = slcost - :arg_costamt
  7399. WHERE ( orderid = :arg_orderid )
  7400. And ( scid = :arg_scid );
  7401. IF sqlca.SQLCode <> 0 THEN
  7402. rslt = 0
  7403. arg_msg = "因网络或错误产品唯一码导致更新生产计划水口料重量操作失败"+"~n"+sqlca.SQLErrText
  7404. GOTO ext
  7405. END IF
  7406. ext:
  7407. IF rslt = 0 THEN
  7408. ROLLBACK;
  7409. ELSEIF arg_ifcommit AND rslt = 1 THEN
  7410. COMMIT;
  7411. END IF
  7412. p_reset()
  7413. Return (rslt)
  7414. end function
  7415. public function integer uof_order_cmpcost (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);
  7416. Int rslt = 1
  7417. Long ll_issuliao
  7418. Long ll_mtrlid
  7419. IF uo_option_use_suliao = -1000 THEN
  7420. rslt = 0
  7421. arg_msg = '选项:[159]启用注塑模块,读取初始默认值失败,操作取消!'
  7422. GOTO ext
  7423. END IF
  7424. IF uo_option_management_cost = -1000 THEN
  7425. rslt = 0
  7426. arg_msg = '选项:[161]月设备总管理费,读取初始默认值失败,操作取消!'
  7427. GOTO ext
  7428. END IF
  7429. IF uo_option_ect_price = -1000 THEN
  7430. rslt = 0
  7431. arg_msg = '选项:[162]电费单价,读取初始默认值失败,操作取消!'
  7432. GOTO ext
  7433. END IF
  7434. IF uo_option_use_suliao = 0 THEN RETURN 1
  7435. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  7436. rslt = 0
  7437. GOTO ext
  7438. END IF
  7439. SELECT u_mtrldef.mtrlid,issuliao INTO :ll_mtrlid,:ll_issuliao
  7440. FROM u_mtrldef,u_order_ml
  7441. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  7442. AND u_order_ml.orderid = :arg_orderid
  7443. And u_order_ml.scid = :arg_scid;
  7444. IF sqlca.SQLCode <> 0 THEN
  7445. rslt = 0
  7446. arg_msg = '查询物料属性失败,'+sqlca.SQLErrText
  7447. GOTO ext
  7448. END IF
  7449. IF ll_issuliao = 1 THEN //如果是塑料件,则计算注塑成本
  7450. Decimal ld_ysamt,ld_bgamt,ld_kcamt,ld_bxamt,ld_bzamt,ld_wfjgamt,ld_qtamt
  7451. Decimal ld_ftqty
  7452. Decimal ld_ftcost
  7453. Long ll_macnt,ll_wage_rowcnt,ll_i,ll_sb_rowcnt,ll_j
  7454. Decimal ld_award,ld_stantby,ld_zxcost,ld_cp,ld_bcp,ld_rlcost
  7455. Decimal ld_time,ld_ect,ld_sbcost,ld_glcost,ld_ectcost
  7456. //查询分滩成本
  7457. SELECT ysamt,
  7458. bgamt,
  7459. kcamt,
  7460. bxamt,
  7461. bzamt,
  7462. ftqty,
  7463. wfjgamt,
  7464. qtamt
  7465. INTO :ld_ysamt,
  7466. :ld_bgamt,
  7467. :ld_kcamt,
  7468. :ld_bxamt,
  7469. :ld_bzamt,
  7470. :ld_ftqty ,
  7471. :ld_wfjgamt,
  7472. :ld_qtamt
  7473. FROM u_order_ml
  7474. WHERE orderid = :arg_orderid
  7475. And scid = :arg_scid;
  7476. IF sqlca.SQLCode <> 0 THEN
  7477. rslt = 0
  7478. arg_msg = '查询分滩数量失败,'+sqlca.SQLErrText
  7479. GOTO ext
  7480. END IF
  7481. IF ld_ftqty > 0 THEN
  7482. ld_ftcost = (ld_ysamt + ld_bgamt + ld_kcamt + ld_bxamt + ld_bzamt + ld_qtamt) / ld_ftqty
  7483. ELSE
  7484. ld_ftcost = 0
  7485. END IF
  7486. //查询本厂机台数量,用于计算管理成本
  7487. SELECT count(*) INTO :ll_macnt
  7488. FROM u_workgroup
  7489. WHERE mode = 1
  7490. And ifm = 1;
  7491. IF sqlca.SQLCode <> 0 THEN
  7492. rslt = 0
  7493. arg_msg = '查询机台数量失败,'+sqlca.SQLErrText
  7494. GOTO ext
  7495. END IF
  7496. //计算工资成本,数据来源于相关质检单的工资明细
  7497. datastore ds_wage
  7498. ds_wage = Create datastore
  7499. ds_wage.DataObject = "ds_data_wage"
  7500. ds_wage.SetTransObject(sqlca)
  7501. ds_wage.Retrieve(arg_scid,arg_orderid)
  7502. ll_wage_rowcnt = ds_wage.RowCount()
  7503. IF ll_wage_rowcnt > 0 THEN
  7504. FOR ll_i = 1 To ll_wage_rowcnt
  7505. ld_award = ds_wage.Object.awardprice[ll_i]
  7506. ld_stantby = ds_wage.Object.stantby_price[ll_i]
  7507. ld_zxcost = ds_wage.Object.zx_price[ll_i] * ds_wage.Object.zx_qty[ll_i]
  7508. ld_cp = ds_wage.Object.cp_price[ll_i]
  7509. ld_bcp = ds_wage.Object.bcp_price[ll_i]
  7510. ld_rlcost = ld_rlcost + ld_award + ld_stantby + ld_cp + ld_bcp //+ ld_zxcost
  7511. NEXT
  7512. END IF
  7513. //设备成本 -电费,管理费,设备耗损费,数据源于质检单"生产现场数据"及设备定义
  7514. datastore ds_sb
  7515. ds_sb = Create datastore
  7516. ds_sb.DataObject = "ds_sbcost"
  7517. ds_sb.SetTransObject(sqlca)
  7518. ds_sb.Retrieve(arg_orderid)
  7519. ll_sb_rowcnt = ds_sb.RowCount()
  7520. IF ll_sb_rowcnt > 0 THEN
  7521. FOR ll_j = 1 To ll_sb_rowcnt
  7522. ld_time = ds_sb.Object.u_data_collect_stantby_time[ll_j] + ds_sb.Object.u_data_collect_worktime[ll_j]
  7523. ld_ect = ds_sb.Object.u_data_collect_ammeter_end[ll_j] - ds_sb.Object.u_data_collect_ammeter_start[ll_j]
  7524. ld_sbcost = ld_sbcost + ld_time * ds_sb.Object.u_equipment_manage_depreciation_cost[ll_j]
  7525. ld_glcost = ld_glcost + (uo_option_management_cost / 30 / ll_macnt / 24 ) * ld_time
  7526. ld_ectcost = ld_ectcost + ld_ect * uo_option_ect_price
  7527. NEXT
  7528. END IF
  7529. //更新生产计划成本
  7530. UPDATE u_order_ml
  7531. SET rlcost = :ld_rlcost,
  7532. sbcost = :ld_sbcost,
  7533. glcost = :ld_glcost,
  7534. ectcost = :ld_ectcost
  7535. WHERE orderid = :arg_orderid
  7536. And scid = :arg_scid;
  7537. IF sqlca.SQLCode <> 0 THEN
  7538. rslt = 0
  7539. arg_msg = '更新成本失败,'+sqlca.SQLErrText
  7540. GOTO ext
  7541. END IF
  7542. END IF
  7543. //重算所有相关成本,得出生产计划成本
  7544. //ds_slcost - 本生产计划领料明细
  7545. datastore ds_sl,ds_son
  7546. ds_sl = Create datastore
  7547. ds_sl.DataObject = "ds_slcost"
  7548. ds_sl.SetTransObject(sqlca)
  7549. ds_sl.Retrieve(arg_scid,arg_orderid)
  7550. Long ll_row,ll_sonrow,i
  7551. Decimal ld_slcost = 0,ld_planslcost = 0
  7552. Decimal ld_slmtrlcost = 0,ld_slqty
  7553. ll_row = ds_sl.RowCount()
  7554. //计算产品材料成本.如果下级物料有子生产计划,则取子生产计划的成本作为下级物料的领料成本,否则按领料单.
  7555. IF ll_row > 0 THEN
  7556. FOR ll_i = 1 To ll_row
  7557. IF ds_sl.Object.u_mtrldef_issuliao[ll_i] = 0 Or ds_sl.Object.u_mtrldef_issuliao[ll_i] = 1 THEN
  7558. ld_slcost = ld_slcost + ds_sl.Object.u_orderrqmtrl_scll_costamt[ll_i]
  7559. END IF
  7560. NEXT
  7561. END IF
  7562. UPDATE u_order_ml
  7563. SET u_order_ml.sumclcost = :ld_slcost
  7564. WHERE orderid = :arg_orderid
  7565. And scid = :arg_scid;
  7566. IF sqlca.SQLCode <> 0 THEN
  7567. rslt = 0
  7568. arg_msg = '更新非塑料材料成本失败,'+sqlca.SQLErrText
  7569. GOTO ext
  7570. END IF
  7571. Decimal ld_sumrlcost
  7572. Decimal ld_taskworkcost,ld_scwg_cost,ld_scwg_day_cost
  7573. SELECT isnull(sum(Workprice * Amount),0) INTO :ld_taskworkcost
  7574. FROM u_sc_taskworkmx INNER JOIN
  7575. u_sc_taskwork ON u_sc_taskworkmx.Billid = u_sc_taskwork.billid
  7576. WHERE u_sc_taskwork.orderid = :arg_orderid
  7577. And u_sc_taskwork.scid = :arg_scid;
  7578. IF sqlca.SQLCode = -1 THEN
  7579. rslt = 0
  7580. arg_msg = '查询生产计划相关产品个人计件单失败,'+sqlca.SQLErrText
  7581. GOTO ext
  7582. END IF
  7583. IF IsNull(ld_taskworkcost) THEN ld_taskworkcost = 0
  7584. SELECT isnull(sum(u_scwg_taskwork_2_mx.qty * u_scwg_taskwork_2_mx.price),0)
  7585. INTO :ld_scwg_cost
  7586. FROM u_scwg_taskwork_2 INNER JOIN
  7587. u_scwg_taskwork_2_mx ON
  7588. u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid
  7589. WHERE u_scwg_taskwork_2.scid = :arg_scid
  7590. And u_scwg_taskwork_2_mx.orderid = :arg_orderid;
  7591. IF sqlca.SQLCode = -1 THEN
  7592. rslt = 0
  7593. arg_msg = '查询生产计划相关工组月计件单失败,'+sqlca.SQLErrText
  7594. GOTO ext
  7595. END IF
  7596. IF IsNull(ld_scwg_cost) THEN ld_scwg_cost = 0
  7597. SELECT isnull(sum(u_scwg_taskwork_day_mx.qty * u_scwg_taskwork_day_mx.price),0)
  7598. INTO :ld_scwg_day_cost
  7599. FROM u_scwg_taskwork_day INNER JOIN
  7600. u_scwg_taskwork_day_mx ON
  7601. u_scwg_taskwork_day.billid = u_scwg_taskwork_day_mx.billid
  7602. WHERE u_scwg_taskwork_day.scid = :arg_scid
  7603. And u_scwg_taskwork_day_mx.orderid = :arg_orderid;
  7604. IF sqlca.SQLCode = -1 THEN
  7605. rslt = 0
  7606. arg_msg = "查询生产计划相关工组日计件单失败,"+sqlca.SQLErrText
  7607. GOTO ext
  7608. END IF
  7609. IF IsNull(ld_scwg_day_cost) THEN ld_scwg_day_cost = 0
  7610. ld_sumrlcost = ld_taskworkcost + ld_scwg_cost + ld_scwg_day_cost
  7611. UPDATE u_order_ml
  7612. SET sumrlcost = :ld_sumrlcost
  7613. Where u_order_ml.orderid = :arg_orderid;
  7614. IF sqlca.SQLCode <> 0 THEN
  7615. rslt = 0
  7616. arg_msg = "更新非塑料人力成本失败,"+sqlca.SQLErrText
  7617. GOTO ext
  7618. END IF
  7619. SELECT ysamt,bgamt,kcamt,bxamt,bzamt,ftqty,wfjgamt,qtamt INTO :ld_ysamt,:ld_bgamt,:ld_kcamt,:ld_bxamt,:ld_bzamt,:ld_ftqty , :ld_wfjgamt , :ld_qtamt
  7620. FROM u_order_ml
  7621. Where orderid = :arg_orderid;
  7622. IF sqlca.SQLCode <> 0 THEN
  7623. rslt = 0
  7624. arg_msg = "查询分滩费用/加工费失败,"+sqlca.SQLErrText
  7625. GOTO ext
  7626. END IF
  7627. IF ld_ftqty > 0 THEN
  7628. ld_ftcost = (ld_ysamt + ld_bgamt + ld_kcamt + ld_bxamt + ld_bzamt + ld_qtamt) / ld_ftqty
  7629. ELSE
  7630. ld_ftcost = 0
  7631. END IF
  7632. UPDATE u_order_ml
  7633. SET sumcost = :ld_ftcost * acmpqty + sumrlcost + sumclcost + slcost + rlcost + sbcost + glcost + ectcost + :ld_wfjgamt
  7634. WHERE orderid = :arg_orderid
  7635. And scid = :arg_scid;
  7636. IF sqlca.SQLCode <> 0 THEN
  7637. rslt = 0
  7638. arg_msg = "更新生产计划总成本失败,"+sqlca.SQLErrText
  7639. GOTO ext
  7640. END IF
  7641. //计算单产品成本 :生产计划总成本 / 生产数量
  7642. Decimal ld_latest_pdcode
  7643. SELECT CASE u_order_ml.acmpqty when 0 THEN 0 ELSE u_order_ml.sumcost / u_order_ml.acmpqty END
  7644. Into :ld_latest_pdcode
  7645. From u_order_ml
  7646. Where u_order_ml.orderid = :arg_orderid
  7647. And scid = :arg_scid;
  7648. IF sqlca.SQLCode <> 0 THEN
  7649. rslt = 0
  7650. arg_msg = "更新生产计划单产品成本失败,"+sqlca.SQLErrText
  7651. GOTO ext
  7652. END IF
  7653. IF ld_latest_pdcode > 0 THEN
  7654. // UPDATE u_mtrldef
  7655. // SET u_mtrldef.planprice = case u_mtrldef.latest_pdcost when 0 then u_mtrldef.planprice else u_mtrldef.latest_pdcost end ,
  7656. // u_mtrldef.latest_pdcost = :ld_latest_pdcode
  7657. // Where u_mtrldef.mtrlid = :ll_mtrlid ;
  7658. // IF sqlca.SQLCode <> 0 THEN
  7659. // rslt = 0
  7660. // arg_msg = "更新产品最新成本价失败,"+sqlca.SQLErrText
  7661. // GOTO ext
  7662. // END IF
  7663. IF f_update_planprice(ll_mtrlid,status_mode,woodcode,pcode,1,ld_latest_pdcode,arg_msg,False,sqlca) = 0 THEN
  7664. rslt = 0
  7665. arg_msg = '更新产品计划成本价失败'+arg_msg
  7666. GOTO ext
  7667. END IF
  7668. END IF
  7669. ext:
  7670. IF rslt = 0 THEN
  7671. ROLLBACK;
  7672. ELSEIF rslt = 1 And arg_ifcommit THEN
  7673. COMMIT;
  7674. END IF
  7675. RETURN rslt
  7676. end function
  7677. public function integer uof_reccl (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  7678. Long ll_scid
  7679. Long ll_orderid,ll_porderid
  7680. String ls_ordercode,ls_pordercode
  7681. Long cnt
  7682. cnt = 0
  7683. SELECT count(*) INTO :cnt
  7684. FROM u_OrderRqMtrl_scll
  7685. WHERE orderid = :ll_orderid
  7686. AND scid = :ll_scid
  7687. AND u_OrderRqMtrl_scll.DstrQty > 0 ;
  7688. IF sqlca.SQLCode <> 0 THEN
  7689. rslt = 0
  7690. arg_msg = '查询是否有已领数失败'+sqlca.SQLErrText
  7691. GOTO ext
  7692. END IF
  7693. IF cnt > 0 THEN
  7694. rslt = 0
  7695. arg_msg = '已有已领料,不能重新计算用料'
  7696. GOTO ext
  7697. END IF
  7698. uo_order_ml_mrp uo_ml_mrp
  7699. uo_ml_mrp = CREATE uo_order_ml_mrp
  7700. IF uo_ml_mrp.uof_del_rqmtrl_scll(arg_scid,arg_orderid,FALSE,arg_msg) = 0 THEN
  7701. // arg_msg = ls_ordercode+','+arg_msg
  7702. rslt = 0
  7703. GOTO ext
  7704. END IF
  7705. Long ll_i
  7706. Boolean if_commit
  7707. //20080715改,方便批操作调用而改成用datastore
  7708. datastore ds_orderrqmx
  7709. ds_orderrqmx = CREATE datastore
  7710. ds_orderrqmx.DataObject = 'dw_order_ml_zl_orderrqmx'
  7711. ds_orderrqmx.SetTransObject(sqlca)
  7712. ds_orderrqmx.Retrieve(arg_orderid,arg_scid)
  7713. s_order_ml_rqmtrl s_mtrl,s_mtrl_null
  7714. FOR ll_i = 1 TO ds_orderrqmx.RowCount()
  7715. s_mtrl = s_mtrl_null
  7716. ll_porderid = ds_orderrqmx.Object.u_order_ml_mx_taskid[ll_i]
  7717. ls_pordercode = ds_orderrqmx.Object.u_order_ml_mx_taskcode[ll_i]
  7718. IF uo_ml_mrp.uof_get_rqmtrl(arg_scid,arg_orderid,ll_porderid,s_mtrl,arg_msg) = 0 THEN
  7719. arg_msg = '上级计划:'+ls_pordercode+','+arg_msg
  7720. rslt = 0
  7721. GOTO ext
  7722. END IF
  7723. IF uo_ml_mrp.uof_add_rqmtrl_scll(s_mtrl,arg_ifcommit,arg_msg) = 0 THEN
  7724. arg_msg = '上级计划:'+ls_pordercode+','+arg_msg
  7725. rslt = 0
  7726. GOTO ext
  7727. END IF
  7728. NEXT
  7729. DESTROY uo_ml_mrp
  7730. DESTROY ds_orderrqmx
  7731. ext:
  7732. IF rslt = 0 THEN
  7733. ROLLBACK;
  7734. ELSEIF arg_ifcommit AND rslt = 1 THEN
  7735. COMMIT;
  7736. END IF
  7737. Return(rslt)
  7738. end function
  7739. public function integer uof_order_add_wkp_tree (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  7740. Decimal ld_finishqty,ld_sqty,ld_oqty
  7741. Long ll_dftwrkgrpid
  7742. Int li_if_tree_wkp
  7743. DateTime ldt_tmp
  7744. Long ll_statusflag,ll_ordertype,ll_printid
  7745. Long ll_swkpid,ll_owkpid
  7746. String ls_partname,ls_relname
  7747. Long ll_lp
  7748. Int li_if_inherit
  7749. String ls_partname_inherit
  7750. Long ll_parentid,ll_workgroupid
  7751. Decimal ld_minlasthour,ld_lasthour,ld_eoq,ld_splitrate,ld_waittime,ld_beforehour,ld_afterhour,ld_eq_empnum,ld_eqworkhour
  7752. Int li_if_barcode
  7753. Long ll_equipmenttypeid
  7754. Int li_ifaccept
  7755. Decimal ld_baseqty
  7756. Int li_if_follow,li_ifgroup
  7757. Decimal ld_workhour_minute,ld_workhour
  7758. Long ll_printid_mx
  7759. Long ll_j
  7760. Long ll_mtrlid
  7761. Decimal ld_orderqty
  7762. Long printid,iflast,lp
  7763. Decimal lasthour,workhour
  7764. Long workgroupid
  7765. DateTime begindate,enddate
  7766. String ls_pfgroup,ls_promode,ls_pfklmode,ls_pfgroupmode,ls_gydscrp
  7767. Decimal ld_pfgroupqty
  7768. String ls_relname_up
  7769. Int li_ifsj_ban
  7770. String ls_wenli, ls_fengbian, ls_paikong, ls_luoji, ls_penyou
  7771. Long ll_sonmtrlid
  7772. datastore ds_tree_hz
  7773. ds_tree_hz = Create datastore
  7774. ds_tree_hz.DataObject = 'ds_ordermtrl_workgroup_tree_hz'
  7775. ds_tree_hz.SetTransObject(sqlca)
  7776. datastore ds_tech_mx
  7777. ds_tech_mx = Create datastore
  7778. ds_tech_mx.DataObject = 'ds_mtrl_wkp_tech_mx'
  7779. ds_tech_mx.SetTransObject(sqlca)
  7780. datastore ds_modle_pf
  7781. ds_modle_pf = Create datastore
  7782. ds_modle_pf.DataObject = 'ds_mtrl_wkp_tech_modle_pf'
  7783. ds_modle_pf.SetTransObject(sqlca)
  7784. If arg_orderid = 0 Then
  7785. rslt = 0
  7786. arg_msg = "没有审核对象"
  7787. Goto ext
  7788. End If
  7789. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  7790. rslt = 0
  7791. Goto ext
  7792. End If
  7793. If wrkGrpid = 0 Then
  7794. rslt = 1
  7795. Goto ext
  7796. End If
  7797. Select ordertype Into :ll_ordertype
  7798. From u_mtrldef
  7799. Where mtrlid = :mtrlid;
  7800. If sqlca.SQLCode <> 0 Then
  7801. rslt = 0
  7802. arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText
  7803. Goto ext
  7804. End If
  7805. If (ordertype <> 4 And ll_ordertype = 1) Then
  7806. rslt = 1
  7807. Goto ext
  7808. End If
  7809. If status <> 4 And status <> 1 And status <> 7 Then
  7810. rslt = 0
  7811. arg_msg = "计划只有在已审核状态才可以执行生成工组进度,请核对"
  7812. Goto ext
  7813. End If
  7814. Select dftwrkgrpid,statusflag
  7815. Into :ll_dftwrkgrpid,:ll_statusflag
  7816. From u_mtrldef
  7817. Where mtrlid = :mtrlid;
  7818. If sqlca.SQLCode <> 0 Then
  7819. rslt = 0
  7820. arg_msg = '查询物料默认生产车间失败'+'~n'+sqlca.SQLErrText
  7821. Goto ext
  7822. End If
  7823. If wrkGrpid <> ll_dftwrkgrpid Then
  7824. rslt = 1
  7825. arg_msg = '生产指令单或生产计划的车间与计划物料默认的生产车间不一致,不能生成工组进度'
  7826. Goto ext
  7827. End If
  7828. Select if_tree_wkp Into :li_if_tree_wkp
  7829. From u_sc_wkp
  7830. Where wrkGrpid = :wrkGrpid;
  7831. If sqlca.SQLCode <> 0 Then
  7832. rslt = 0
  7833. arg_msg = '查询生产车间排程属性失败'+'~n'+sqlca.SQLErrText
  7834. Goto ext
  7835. End If
  7836. Select sum(sqty),sum(oqty)
  7837. Into :ld_sqty,:ld_oqty
  7838. From u_OrderMtrl_workgroup_tree
  7839. Where orderid = :arg_orderid
  7840. And scid = :arg_scid;
  7841. If sqlca.SQLCode <> 0 Then
  7842. rslt = 0
  7843. arg_msg = "查询计划是否已交接操作失败"+"~n"+sqlca.SQLErrText
  7844. Goto ext
  7845. End If
  7846. If IsNull(ld_sqty) Then ld_sqty = 0
  7847. If IsNull(ld_oqty) Then ld_oqty = 0
  7848. If ld_sqty > 0 Then
  7849. arg_msg = '计划已有完成数,不能重新生成条码工组进度'
  7850. rslt = 0
  7851. Goto ext
  7852. End If
  7853. If ld_oqty > 0 Then
  7854. arg_msg = '计划已有接收数,不能重新生成条码工组进度'
  7855. rslt = 0
  7856. Goto ext
  7857. End If
  7858. Long ll_wrkgrpid[],ll_owrkgrpid[]
  7859. String ls_wkpname[]
  7860. Long ll_ifjd[]
  7861. DateTime ld_requiredate[],ld_begindate[]
  7862. String ls_dscrp[]
  7863. Decimal ll_lastdays[]
  7864. Long i,cnt
  7865. Long ll_i
  7866. s_mtrlcfg_expr s_pz[]
  7867. String ls_status_zj
  7868. Decimal ld_qty_zj
  7869. Int li_ifpackpro_p
  7870. If ordertype = 4 And porderid > 0 Then
  7871. Select ifpackpro
  7872. Into :li_ifpackpro_p
  7873. From u_Order_ml Inner JOIN
  7874. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  7875. Where u_order_ml.orderid = :porderid
  7876. And u_Order_ml.scid = :scid;
  7877. If sqlca.SQLCode <> 0 Then li_ifpackpro_p = 0
  7878. Else
  7879. li_ifpackpro_p = 0
  7880. End If
  7881. Delete From u_OrderMtrl_workgroup_tree
  7882. Where orderid = :arg_orderid
  7883. And scid = :arg_scid;
  7884. If sqlca.SQLCode <> 0 Then
  7885. rslt = 0
  7886. arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  7887. Goto ext
  7888. End If
  7889. If li_ifpackpro_p <> 5 Then
  7890. Insert Into u_OrderMtrl_workgroup_tree
  7891. (scid,
  7892. orderid,
  7893. printid,
  7894. swkpid,
  7895. owkpid,
  7896. partname,
  7897. lp,
  7898. iflast,
  7899. relname,
  7900. orderqty,
  7901. sqty,
  7902. oqty,
  7903. if_inherit,
  7904. partname_inherit,
  7905. parentid,
  7906. workgroupid,
  7907. lasthour,
  7908. workhour,
  7909. if_barcode,
  7910. eoq,
  7911. splitrate,
  7912. waittime,
  7913. beforehour,
  7914. afterhour,
  7915. eq_empnum,
  7916. eqworkhour,
  7917. equipmenttypeid,
  7918. ifaccept,
  7919. baseqty,
  7920. if_follow,
  7921. printid_sort,
  7922. ifgroup,
  7923. ifsj_ban)
  7924. Select u_order_ml.scid,
  7925. u_order_ml.orderid,
  7926. u_mtrl_wkp_tech.printid,
  7927. u_mtrl_wkp_tech.swkpid,
  7928. u_mtrl_wkp_tech.owkpid,
  7929. u_mtrl_wkp_tech.partname,
  7930. u_mtrl_wkp_tech.lp,
  7931. u_mtrl_wkp_tech.iflast,
  7932. u_mtrl_wkp_tech.relname,
  7933. :orderqty,
  7934. 0,
  7935. 0,
  7936. u_mtrl_wkp_tech.if_inherit,
  7937. u_mtrl_wkp_tech.partname_inherit,
  7938. u_mtrl_wkp_tech.parentid,
  7939. u_mtrl_wkp_tech.workgroupid,
  7940. case when :Level = 0 then u_mtrl_wkp_tech.minlasthour else u_mtrl_wkp_tech.lasthour End ,
  7941. u_mtrl_wkp_tech.workhour,
  7942. u_mtrl_wkp_tech.if_barcode,
  7943. u_mtrl_wkp_tech.eoq,
  7944. u_mtrl_wkp_tech.splitrate,
  7945. u_mtrl_wkp_tech.waittime,
  7946. u_mtrl_wkp_tech.beforehour,
  7947. u_mtrl_wkp_tech.afterhour,
  7948. u_mtrl_wkp_tech.eq_empnum,
  7949. u_mtrl_wkp_tech.eqworkhour,
  7950. u_mtrl_wkp_tech.equipmenttypeid,
  7951. u_mtrl_wkp_tech.ifaccept,
  7952. case u_mtrl_wkp_tech.baseqty when 0 then :orderqty else u_mtrl_wkp_tech.baseqty End,
  7953. u_mtrl_wkp_tech.if_follow,
  7954. u_mtrl_wkp_tech.printid * 10,
  7955. u_mtrl_wkp_tech.ifgroup,
  7956. u_mtrl_wkp_tech.ifsj_ban
  7957. From u_mtrl_wkp_tech,u_order_ml
  7958. Where u_order_ml.orderid = :arg_orderid
  7959. And u_order_ml.scid = :arg_scid
  7960. And u_mtrl_wkp_tech.mtrlid = u_Order_ml.mtrlid;
  7961. If sqlca.SQLCode <> 0 Then
  7962. rslt = 0
  7963. arg_msg = '从产品工艺流程加入生产计划工艺进度失败,原因:'+sqlca.SQLErrText
  7964. Goto ext
  7965. End If
  7966. If ll_statusflag = 2 Then
  7967. f_checkpz(status_mode,s_pz[])
  7968. For ll_i = 1 To UpperBound(s_pz)
  7969. ls_status_zj = s_pz[ll_i].cfgname
  7970. ld_qty_zj = Dec(s_pz[ll_i].qty)
  7971. ds_tech_mx.Retrieve(mtrlid,ls_status_zj)
  7972. For ll_j = 1 To ds_tech_mx.RowCount()
  7973. ll_printid_mx = ds_tech_mx.Object.printid[ll_j]
  7974. ld_workhour_minute = ds_tech_mx.Object.workhour_minute[ll_j]
  7975. ld_workhour = ds_tech_mx.Object.workhour[ll_j]
  7976. ld_beforehour = ds_tech_mx.Object.beforehour[ll_j]
  7977. ld_afterhour = ds_tech_mx.Object.afterhour[ll_j]
  7978. ld_eq_empnum = ds_tech_mx.Object.eq_empnum[ll_j]
  7979. ld_eqworkhour = ds_tech_mx.Object.eqworkhour[ll_j]
  7980. Update u_OrderMtrl_workgroup_tree
  7981. Set workhour = workhour + :ld_workhour * :ld_qty_zj,
  7982. beforehour = beforehour + :ld_beforehour * :ld_qty_zj,
  7983. afterhour = afterhour + :ld_afterhour * :ld_qty_zj,
  7984. eq_empnum = eq_empnum + :ld_eq_empnum * :ld_qty_zj,
  7985. eqworkhour = eqworkhour + :ld_eqworkhour * :ld_qty_zj
  7986. Where scid = :arg_scid
  7987. And orderid = :arg_orderid
  7988. And printid = :ll_printid_mx;
  7989. If sqlca.SQLCode <> 0 Then
  7990. rslt = 0
  7991. arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText
  7992. Goto ext
  7993. End If
  7994. Next
  7995. Next
  7996. End If
  7997. Else
  7998. ds_modle_pf.Retrieve(mtrlid,pfcode)
  7999. ll_printid = 1
  8000. Insert Into u_OrderMtrl_workgroup_tree
  8001. (scid,
  8002. orderid,
  8003. printid,
  8004. partname,
  8005. lp,
  8006. iflast,
  8007. relname,
  8008. orderqty)
  8009. Values
  8010. (:arg_scid,
  8011. :arg_orderid,
  8012. :ll_printid,
  8013. '成品',
  8014. 0,
  8015. 1,
  8016. '成品',
  8017. :orderqty);
  8018. If sqlca.SQLCode <> 0 Then
  8019. rslt = 0
  8020. arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText
  8021. Goto ext
  8022. End If
  8023. For ll_i = 1 To ds_modle_pf.RowCount()
  8024. ll_printid++
  8025. ll_swkpid = ds_modle_pf.Object.u_mtrl_wkp_tech_swkpid[ll_i]
  8026. ll_owkpid = ds_modle_pf.Object.u_mtrl_wkp_tech_owkpid[ll_i]
  8027. ll_lp = ds_modle_pf.Object.u_mtrl_wkp_tech_lp[ll_i]
  8028. li_if_inherit = ds_modle_pf.Object.u_mtrl_wkp_tech_if_inherit[ll_i]
  8029. ls_partname_inherit = ds_modle_pf.Object.u_mtrl_wkp_tech_partname_inherit[ll_i]
  8030. ll_parentid = ds_modle_pf.Object.u_mtrl_wkp_tech_parentid[ll_i]
  8031. ll_workgroupid = ds_modle_pf.Object.u_mtrl_wkp_tech_workgroupid[ll_i]
  8032. ld_minlasthour = ds_modle_pf.Object.u_mtrl_wkp_tech_minlasthour[ll_i]
  8033. ld_lasthour = ds_modle_pf.Object.u_mtrl_wkp_tech_lasthour[ll_i]
  8034. ld_workhour = ds_modle_pf.Object.u_mtrl_wkp_tech_workhour[ll_i]
  8035. li_if_barcode = ds_modle_pf.Object.u_mtrl_wkp_tech_if_barcode[ll_i]
  8036. ld_eoq = ds_modle_pf.Object.u_mtrl_wkp_tech_eoq[ll_i]
  8037. ld_splitrate = ds_modle_pf.Object.u_mtrl_wkp_tech_splitrate[ll_i]
  8038. ld_waittime = ds_modle_pf.Object.u_mtrl_wkp_tech_waittime[ll_i]
  8039. ld_beforehour = ds_modle_pf.Object.u_mtrl_wkp_tech_beforehour[ll_i]
  8040. ld_afterhour = ds_modle_pf.Object.u_mtrl_wkp_tech_afterhour[ll_i]
  8041. ld_eq_empnum = ds_modle_pf.Object.u_mtrl_wkp_tech_eq_empnum[ll_i]
  8042. ld_eqworkhour = ds_modle_pf.Object.u_mtrl_wkp_tech_eqworkhour[ll_i]
  8043. ll_equipmenttypeid = ds_modle_pf.Object.u_mtrl_wkp_tech_equipmenttypeid[ll_i]
  8044. li_ifaccept = ds_modle_pf.Object.u_mtrl_wkp_tech_ifaccept[ll_i]
  8045. ld_baseqty = ds_modle_pf.Object.u_mtrl_wkp_tech_baseqty[ll_i]
  8046. li_if_follow = ds_modle_pf.Object.u_mtrl_wkp_tech_if_follow[ll_i]
  8047. li_ifgroup = ds_modle_pf.Object.u_mtrl_wkp_tech_ifgroup[ll_i]
  8048. ld_pfgroupqty = ds_modle_pf.Object.u_prdpf_pfgroupqty[ll_i]
  8049. ls_pfgroupmode = ds_modle_pf.Object.u_prdpf_pfgroupmode[ll_i]
  8050. ls_gydscrp = ds_modle_pf.Object.u_prdpf_dscrp[ll_i]
  8051. ls_pfgroup = ds_modle_pf.Object.u_prdpf_pfgroup[ll_i]
  8052. ls_promode = ds_modle_pf.Object.u_prdpf_promode[ll_i]
  8053. ls_pfklmode = ds_modle_pf.Object.u_prdpf_pfklmode[ll_i]
  8054. li_ifsj_ban = ds_modle_pf.Object.u_mtrl_wkp_tech_ifsj_ban[ll_i]
  8055. ls_partname = ds_modle_pf.Object.u_mtrl_wkp_tech_partname[ll_i]
  8056. ls_wenli = ds_modle_pf.Object.u_prdpf_wenli[ll_i]
  8057. ls_fengbian = ds_modle_pf.Object.u_prdpf_fengbian[ll_i]
  8058. ls_paikong = ds_modle_pf.Object.u_prdpf_paikong[ll_i]
  8059. ls_luoji = ds_modle_pf.Object.u_prdpf_luoji[ll_i]
  8060. ls_penyou = ds_modle_pf.Object.u_prdpf_penyou[ll_i]
  8061. ll_sonmtrlid = ds_modle_pf.Object.u_prdpf_sonmtrlid[ll_i]
  8062. If IsNull(ll_swkpid) Then ll_swkpid = 0
  8063. If IsNull(ll_owkpid) Then ll_owkpid = 0
  8064. If IsNull(ll_lp) Then ll_lp = 0
  8065. If IsNull(li_if_inherit) Then li_if_inherit = 0
  8066. If IsNull(ls_partname_inherit) Then ls_partname_inherit = ''
  8067. If IsNull(ll_parentid) Then ll_parentid = 0
  8068. If IsNull(ll_workgroupid) Then ll_workgroupid = 0
  8069. If IsNull(ld_minlasthour) Then ld_minlasthour = 0
  8070. If IsNull(ld_lasthour) Then ld_lasthour = 0
  8071. If IsNull(ld_workhour) Then ld_workhour = 0
  8072. If IsNull(li_if_barcode) Then li_if_barcode = 1
  8073. If IsNull(ld_eoq) Then ld_eoq = 0
  8074. If IsNull(ld_splitrate) Then ld_splitrate = 0
  8075. If IsNull(ld_waittime) Then ld_waittime = 0
  8076. If IsNull(ld_beforehour) Then ld_beforehour = 0
  8077. If IsNull(ld_afterhour) Then ld_afterhour = 0
  8078. If IsNull(ld_eq_empnum) Then ld_eq_empnum = 0
  8079. If IsNull(ld_eqworkhour) Then ld_eqworkhour = 0
  8080. If IsNull(ll_equipmenttypeid) Then ll_equipmenttypeid = 0
  8081. If IsNull(li_ifaccept) Then li_ifaccept = 0
  8082. If IsNull(ld_baseqty) Then ld_baseqty = 0
  8083. If IsNull(li_if_follow) Then li_if_follow = 0
  8084. If IsNull(li_ifgroup) Then li_ifgroup = 0
  8085. If IsNull(ld_pfgroupqty) Then ld_pfgroupqty = 1
  8086. If IsNull(ls_pfgroupmode) Then ls_pfgroupmode = ''
  8087. If IsNull(ls_gydscrp) Then ls_gydscrp = ''
  8088. If IsNull(ls_pfgroup) Then ls_pfgroup = ''
  8089. If IsNull(ls_promode) Then ls_promode = ''
  8090. If IsNull(ls_pfklmode) Then ls_pfklmode = ''
  8091. If IsNull(ls_partname) Then ls_partname = ''
  8092. If IsNull(li_ifsj_ban) Then li_ifsj_ban = 0
  8093. If IsNull(ls_wenli) Then ls_wenli = ''
  8094. If IsNull(ls_fengbian) Then ls_fengbian = ''
  8095. If IsNull(ls_paikong) Then ls_paikong = ''
  8096. If IsNull(ls_luoji) Then ls_luoji = ''
  8097. If IsNull(ls_penyou) Then ls_penyou = ''
  8098. If IsNull(ll_sonmtrlid) Then ll_sonmtrlid = 0
  8099. If ll_lp = 0 Then
  8100. If li_ifsj_ban = 0 Then
  8101. ls_partname = ls_pfgroup + '('+ls_pfklmode+')'
  8102. ls_relname = ls_pfgroup + '('+ls_pfklmode+')'
  8103. ls_relname_up = ls_relname
  8104. Else
  8105. ls_partname = ls_pfgroup + '['+ ls_partname + ']'
  8106. ls_relname = ls_partname
  8107. ls_relname_up = ls_relname
  8108. End If
  8109. Else
  8110. ls_partname = ds_modle_pf.Object.u_mtrl_wkp_tech_partname[ll_i]
  8111. ls_relname = ls_relname_up //ds_modle_pf.Object.u_mtrl_wkp_tech_relname[ll_i]
  8112. End If
  8113. Insert Into u_OrderMtrl_workgroup_tree
  8114. (scid,
  8115. orderid,
  8116. printid,
  8117. swkpid,
  8118. owkpid,
  8119. partname,
  8120. lp,
  8121. iflast,
  8122. relname,
  8123. orderqty,
  8124. sqty,
  8125. oqty,
  8126. if_inherit,
  8127. partname_inherit,
  8128. parentid,
  8129. workgroupid,
  8130. lasthour,
  8131. workhour,
  8132. if_barcode,
  8133. eoq,
  8134. splitrate,
  8135. waittime,
  8136. beforehour,
  8137. afterhour,
  8138. eq_empnum,
  8139. eqworkhour,
  8140. equipmenttypeid,
  8141. ifaccept,
  8142. baseqty,
  8143. if_follow,
  8144. printid_sort,
  8145. ifgroup,
  8146. pfgroup,
  8147. promode,
  8148. pfgroupmode,
  8149. pfklmode,
  8150. gydscrp,
  8151. ifsj_ban,
  8152. wenli,
  8153. fengbian,
  8154. paikong,
  8155. luoji,
  8156. penyou,
  8157. sonmtrlid)
  8158. Values
  8159. (:arg_scid,
  8160. :arg_orderid,
  8161. :ll_printid,
  8162. :ll_swkpid,
  8163. :ll_owkpid,
  8164. :ls_partname,
  8165. :ll_lp + 1,
  8166. 0,
  8167. :ls_relname,
  8168. :orderqty * :ld_pfgroupqty,
  8169. 0,
  8170. 0,
  8171. :li_if_inherit,
  8172. :ls_partname_inherit,
  8173. :ll_parentid,
  8174. :ll_workgroupid,
  8175. case when :Level = 0 then :ld_minlasthour else :ld_lasthour End ,
  8176. :ld_workhour,
  8177. :li_if_barcode,
  8178. :ld_eoq,
  8179. :ld_splitrate,
  8180. :ld_waittime,
  8181. :ld_beforehour,
  8182. :ld_afterhour,
  8183. :ld_eq_empnum,
  8184. :ld_eqworkhour,
  8185. :ll_equipmenttypeid,
  8186. :li_ifaccept,
  8187. case :ld_baseqty when 0 then :orderqty else :ld_baseqty End ,
  8188. :li_if_follow,
  8189. :ll_printid * 10,
  8190. :li_ifgroup,
  8191. :ls_pfgroup,
  8192. :ls_promode,
  8193. :ls_pfgroupmode,
  8194. :ls_pfklmode,
  8195. :ls_gydscrp,
  8196. :li_ifsj_ban,
  8197. :ls_wenli,
  8198. :ls_fengbian,
  8199. :ls_paikong,
  8200. :ls_luoji,
  8201. :ls_penyou,
  8202. :ll_sonmtrlid);
  8203. If sqlca.SQLCode <> 0 Then
  8204. rslt = 0
  8205. arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText + '~r~n'
  8206. Goto ext
  8207. End If
  8208. Next
  8209. End If
  8210. //根据公式刷新工时及周期
  8211. String ls_workhour_formula,ls_lasthour_formula
  8212. Long ll_printid_tree
  8213. Decimal ld_orderqty_tree
  8214. String s_rtn
  8215. Decimal ld_workhour_str,ld_lasthour_str
  8216. datastore ds_tree
  8217. ds_tree = Create datastore
  8218. ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_cmp'
  8219. ds_tree.SetTransObject(sqlca)
  8220. ds_tree.Retrieve(arg_scid,arg_orderid)
  8221. datastore ds_pricestr
  8222. ds_pricestr = Create datastore
  8223. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  8224. ds_pricestr.SetTransObject(sqlca)
  8225. For ll_i = 1 To ds_tree.RowCount()
  8226. ls_workhour_formula = ds_tree.Object.u_mtrl_wkp_tech_workhour_formula[ll_i]
  8227. ls_lasthour_formula = ds_tree.Object.u_mtrl_wkp_tech_lasthour_formula[ll_i]
  8228. ll_printid_tree = ds_tree.Object.printid[ll_i]
  8229. ld_orderqty_tree = ds_tree.Object.orderqty[ll_i]
  8230. If Trim(ls_workhour_formula) <> '' Then
  8231. Select Top 1 Replace( :ls_workhour_formula,'不包含',' not like ') Into :ls_workhour_formula From u_user;
  8232. Select Top 1 Replace( :ls_workhour_formula,'不等于','<>') Into :ls_workhour_formula From u_user;
  8233. Select Top 1 Replace( :ls_workhour_formula,'包含',' like ') Into :ls_workhour_formula From u_user;
  8234. Select Top 1 Replace( :ls_workhour_formula,'数量',:ld_orderqty_tree) Into :ls_workhour_formula From u_user;
  8235. Select Top 1 Replace( :ls_workhour_formula,'等于',' = ') Into :ls_workhour_formula From u_user;
  8236. Select Top 1 Replace( :ls_workhour_formula,'大于',' > ') Into :ls_workhour_formula From u_user;
  8237. Select Top 1 Replace( :ls_workhour_formula,'小于',' < ') Into :ls_workhour_formula From u_user;
  8238. If Pos(ls_workhour_formula,'配置2') > 0 Then
  8239. Select Top 1 Replace( :ls_workhour_formula,'配置2',"'"+:pcode+"'") Into :ls_workhour_formula From u_user;
  8240. End If
  8241. If Pos(ls_workhour_formula,'配置1') > 0 Then
  8242. Select Top 1 Replace( :ls_workhour_formula,'配置1',"'"+:woodcode+"'") Into :ls_workhour_formula From u_user;
  8243. End If
  8244. If Pos(ls_workhour_formula,'配置') > 0 Then
  8245. Select Top 1 Replace( :ls_workhour_formula,'配置',"'"+:status_mode+"'") Into :ls_workhour_formula From u_user;
  8246. End If
  8247. ds_pricestr.Retrieve()
  8248. ds_pricestr.Modify('cmpl.expression= "'+ls_workhour_formula+'"')
  8249. s_rtn = String(ds_pricestr.Object.cmpl[1])
  8250. If s_rtn = 'false' Then
  8251. Goto _lasthour
  8252. Else
  8253. ld_workhour_str = Round(Dec(s_rtn),5)
  8254. End If
  8255. Update u_OrderMtrl_workgroup_tree
  8256. Set workhour = :ld_workhour_str / 60
  8257. Where scid = :arg_scid
  8258. And orderid = :arg_orderid
  8259. And printid = :ll_printid_tree;
  8260. If sqlca.SQLCode <> 0 Then
  8261. rslt = 0
  8262. arg_msg = '按公式更新工时失败,'+sqlca.SQLErrText
  8263. Goto ext
  8264. End If
  8265. End If
  8266. _lasthour:
  8267. If Trim(ls_lasthour_formula) <> '' Then
  8268. Select Top 1 Replace( :ls_lasthour_formula,'不包含',' not like ') Into :ls_lasthour_formula From u_user;
  8269. Select Top 1 Replace( :ls_lasthour_formula,'不等于','<>') Into :ls_lasthour_formula From u_user;
  8270. Select Top 1 Replace( :ls_lasthour_formula,'包含',' like ') Into :ls_lasthour_formula From u_user;
  8271. Select Top 1 Replace( :ls_lasthour_formula,'数量',:ld_orderqty_tree) Into :ls_lasthour_formula From u_user;
  8272. Select Top 1 Replace( :ls_lasthour_formula,'等于',' = ') Into :ls_lasthour_formula From u_user;
  8273. Select Top 1 Replace( :ls_lasthour_formula,'大于',' > ') Into :ls_lasthour_formula From u_user;
  8274. Select Top 1 Replace( :ls_lasthour_formula,'小于',' < ') Into :ls_lasthour_formula From u_user;
  8275. If Pos(ls_lasthour_formula,'配置2') > 0 Then
  8276. Select Top 1 Replace( :ls_lasthour_formula,'配置2',"'"+:pcode+"'") Into :ls_lasthour_formula From u_user;
  8277. End If
  8278. If Pos(ls_lasthour_formula,'配置1') > 0 Then
  8279. Select Top 1 Replace( :ls_lasthour_formula,'配置1',"'"+:woodcode+"'") Into :ls_lasthour_formula From u_user;
  8280. End If
  8281. If Pos(ls_lasthour_formula,'配置') > 0 Then
  8282. Select Top 1 Replace( :ls_lasthour_formula,'配置',"'"+:status_mode+"'") Into :ls_lasthour_formula From u_user;
  8283. End If
  8284. ds_pricestr.Retrieve()
  8285. ds_pricestr.Modify('cmpl.expression= "'+ls_lasthour_formula+'"')
  8286. s_rtn = String(ds_pricestr.Object.cmpl[1])
  8287. If s_rtn = 'false' Then
  8288. Continue
  8289. Else
  8290. ld_lasthour_str = Round(Dec(s_rtn),5)
  8291. End If
  8292. Update u_OrderMtrl_workgroup_tree
  8293. Set lasthour = :ld_lasthour_str
  8294. Where scid = :arg_scid
  8295. And orderid = :arg_orderid
  8296. And printid = :ll_printid_tree;
  8297. If sqlca.SQLCode <> 0 Then
  8298. rslt = 0
  8299. arg_msg = '按公式更新交接周期失败,'+sqlca.SQLErrText
  8300. Goto ext
  8301. End If
  8302. End If
  8303. Next
  8304. If uo_cmp_tree_date(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  8305. rslt = 0
  8306. Goto ext
  8307. End If
  8308. Delete From u_ordermtrl_workgroup_barcode
  8309. Where orderid = :arg_orderid
  8310. And scid = :arg_scid;
  8311. If sqlca.SQLCode <> 0 Then
  8312. rslt = 0
  8313. arg_msg = "删除计划已生成的工组条码操作失败"+"~n"+sqlca.SQLErrText
  8314. Goto ext
  8315. End If
  8316. If li_if_tree_wkp = 1 Then
  8317. Delete From u_OrderMtrl_workgroup
  8318. Where orderid = :arg_orderid
  8319. And scid = :arg_scid;
  8320. If sqlca.SQLCode <> 0 Then
  8321. rslt = 0
  8322. arg_msg = "删除计划已工组进度操作失败"+"~n"+sqlca.SQLErrText
  8323. Goto ext
  8324. End If
  8325. ds_tree_hz.Retrieve(arg_scid,arg_orderid)
  8326. For ll_i = 1 To ds_tree_hz.RowCount()
  8327. ll_mtrlid = ds_tree_hz.Object.mtrlid[ll_i]
  8328. ll_swkpid = ds_tree_hz.Object.swkpid[ll_i]
  8329. ll_owkpid = ds_tree_hz.Object.owkpid[ll_i]
  8330. ld_orderqty = ds_tree_hz.Object.min_orderqty[ll_i]
  8331. iflast = ds_tree_hz.Object.iflast[ll_i]
  8332. lp = ds_tree_hz.Object.max_lp[ll_i]
  8333. lasthour = ds_tree_hz.Object.lasthour[ll_i]
  8334. workhour = ds_tree_hz.Object.workhour[ll_i]
  8335. workgroupid = ds_tree_hz.Object.workgroupid[ll_i]
  8336. begindate = ds_tree_hz.Object.begindate[ll_i]
  8337. enddate = ds_tree_hz.Object.enddate[ll_i]
  8338. Insert Into u_ordermtrl_workgroup
  8339. (scid,
  8340. orderid,
  8341. mtrlid,
  8342. wrkgrpid,
  8343. owrkgrpid,
  8344. orderqty,
  8345. lastdays,
  8346. ifjd,
  8347. wkpname,
  8348. printid,
  8349. iflast,
  8350. groupstr,
  8351. lp,
  8352. printlp,
  8353. lasthour,
  8354. workgroupid,
  8355. begindate,
  8356. requiredate,
  8357. workhour)
  8358. Values
  8359. (:arg_scid,
  8360. :arg_orderid,
  8361. :ll_mtrlid,
  8362. :ll_swkpid,
  8363. :ll_owkpid,
  8364. :ld_orderqty,
  8365. :lasthour / 8,
  8366. 1,
  8367. '',
  8368. :ll_i,
  8369. :iflast,
  8370. '',
  8371. :lp,
  8372. 0,
  8373. :lasthour,
  8374. :workgroupid,
  8375. :begindate,
  8376. :enddate,
  8377. :workhour);
  8378. If sqlca.SQLCode <> 0 Then
  8379. rslt = 0
  8380. arg_msg = '从工艺流程进度加入生产计划工组进度失败,原因:'+sqlca.SQLErrText
  8381. Goto ext
  8382. End If
  8383. Next
  8384. If uof_update_minbdate(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  8385. rslt = 0
  8386. Goto ext
  8387. End If
  8388. End If
  8389. ////按APS结果更新工艺进度开始结束时间 2014-09-22
  8390. Update u_OrderMtrl_workgroup_tree
  8391. Set u_OrderMtrl_workgroup_tree.begindate = u_OrderRqMtrl_tech.begindate,
  8392. u_OrderMtrl_workgroup_tree.enddate = u_OrderRqMtrl_tech.enddate,
  8393. u_OrderMtrl_workgroup_tree.workhour = u_OrderRqMtrl_tech.workhour,
  8394. u_OrderMtrl_workgroup_tree.beforehour = u_OrderRqMtrl_tech.beforehour,
  8395. u_OrderMtrl_workgroup_tree.afterhour = u_OrderRqMtrl_tech.afterhour
  8396. From u_OrderMtrl_workgroup_tree Inner JOIN
  8397. u_Order_ml ON u_OrderMtrl_workgroup_tree.scid = u_Order_ml.scid And
  8398. u_OrderMtrl_workgroup_tree.orderid = u_Order_ml.OrderID Inner JOIN
  8399. u_OrderRqMtrl_tech ON u_Order_ml.scid = u_OrderRqMtrl_tech.scid And
  8400. u_Order_ml.mtrlid = u_OrderRqMtrl_tech.MtrlID And
  8401. u_Order_ml.status_mode = u_OrderRqMtrl_tech.status And
  8402. u_Order_ml.woodcode = u_OrderRqMtrl_tech.woodcode And
  8403. u_Order_ml.pcode = u_OrderRqMtrl_tech.pcode And
  8404. u_Order_ml.wrkGrpid = u_OrderRqMtrl_tech.wrkGrpid And
  8405. u_OrderMtrl_workgroup_tree.swkpid = u_OrderRqMtrl_tech.swkpid And
  8406. u_OrderMtrl_workgroup_tree.owkpid = u_OrderRqMtrl_tech.owkpid And
  8407. u_OrderMtrl_workgroup_tree.lp = u_OrderRqMtrl_tech.lp And
  8408. u_OrderMtrl_workgroup_tree.partname = u_OrderRqMtrl_tech.partname And
  8409. u_OrderMtrl_workgroup_tree.relname = u_OrderRqMtrl_tech.relname
  8410. Where (u_Order_ml.porderid = u_OrderRqMtrl_tech.OrderID And u_order_ml.ordertype = 4
  8411. Or u_Order_ml.orderid = u_OrderRqMtrl_tech.OrderID And u_order_ml.ordertype <> 4)
  8412. And (u_order_ml.scid = :arg_scid)
  8413. And (u_Order_ml.orderid = :arg_orderid);
  8414. If sqlca.SQLCode <> 0 Then
  8415. rslt = 0
  8416. arg_msg = '按APS结果更新工艺进度开始结束时间失败,原因:'+sqlca.SQLErrText
  8417. Goto ext
  8418. End If
  8419. ////
  8420. ext:
  8421. If rslt = 0 Then
  8422. Rollback;
  8423. p_reset()
  8424. ElseIf arg_ifcommit And rslt = 1 Then
  8425. Commit;
  8426. End If
  8427. Destroy ds_tree_hz
  8428. Destroy ds_tech_mx
  8429. Destroy ds_tree
  8430. Destroy ds_pricestr
  8431. Destroy ds_modle_pf
  8432. Return rslt
  8433. end function
  8434. public function integer addmxcmpl_planqty_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, decimal arg_addqty, datetime arg_bdate, datetime arg_edate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  8435. Long cnt = 0
  8436. Dec ld_orderqty,ld_planqty
  8437. String ls_mtrlname
  8438. IF uo_option_update_lockdateflag = -1000 THEN
  8439. rslt = 0
  8440. arg_msg = '选项:[270]工组派工单审核完毕自动写排程审核状态为最高级审核(全锁),读取初始默认值失败,操作取消!'
  8441. GOTO ext
  8442. END IF
  8443. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  8444. IF rslt = 0 THEN GOTO ext
  8445. IF arg_addqty = 0 THEN
  8446. arg_msg = '没有完成数量'
  8447. rslt = 0
  8448. GOTO ext
  8449. END IF
  8450. IF status <> 1 THEN
  8451. rslt = 0
  8452. arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作"
  8453. GOTO ext
  8454. END IF
  8455. SELECT mtrlname INTO :ls_mtrlname
  8456. FROM u_mtrldef,u_order_ml
  8457. WHERE u_order_ml.orderid = :arg_orderid
  8458. AND u_order_ml.scid = :arg_scid
  8459. And u_mtrldef.mtrlid = u_order_ml.mtrlid;
  8460. IF sqlca.SQLCode <> 0 THEN
  8461. rslt = 0
  8462. arg_msg = "因网络或错误产品唯一码导致查询产品操作失败"
  8463. GOTO ext
  8464. END IF
  8465. //检查是否完成
  8466. SELECT orderqty,taskqty INTO :ld_orderqty,:ld_planqty
  8467. FROM u_OrderMtrl_workgroup
  8468. WHERE ( u_OrderMtrl_workgroup.orderid = :arg_orderid )
  8469. AND ( u_OrderMtrl_workgroup.scid = :arg_scid )
  8470. AND ( u_OrderMtrl_workgroup.wkpname = :arg_wkpname )
  8471. AND ( u_OrderMtrl_workgroup.wrkgrpid = :arg_wrkgrpid )
  8472. And ( u_OrderMtrl_workgroup.owrkgrpid = :arg_owrkgrpid );
  8473. IF sqlca.SQLCode <> 0 THEN
  8474. rslt = 0
  8475. arg_msg = "因网络或错误查询产品唯一码或计划计划数和已排程数量操作失败"
  8476. GOTO ext
  8477. END IF
  8478. IF status = 1 THEN
  8479. IF ld_orderqty < arg_addqty + ld_planqty THEN
  8480. rslt = 0
  8481. arg_msg = '该计划明细产品:'+ls_mtrlname+',未派工数'+String(ld_orderqty - ld_planqty,'#,##0.00##' )+'小于本次排程数'
  8482. GOTO ext
  8483. END IF
  8484. END IF
  8485. IF arg_addqty < 0 THEN
  8486. SetNull(arg_bdate)
  8487. SetNull(arg_edate)
  8488. END IF
  8489. UPDATE u_OrderMtrl_workgroup
  8490. SET u_OrderMtrl_workgroup.taskqty = u_OrderMtrl_workgroup.taskqty + :arg_addqty,
  8491. u_OrderMtrl_workgroup.bdate = :arg_bdate,
  8492. u_OrderMtrl_workgroup.edate = :arg_edate
  8493. WHERE ( u_OrderMtrl_workgroup.orderid = :arg_orderid )
  8494. AND ( u_OrderMtrl_workgroup.scid = :arg_scid )
  8495. AND ( u_OrderMtrl_workgroup.wkpname = :arg_wkpname )
  8496. AND ( u_OrderMtrl_workgroup.wrkgrpid = :arg_wrkgrpid )
  8497. And ( u_OrderMtrl_workgroup.owrkgrpid = :arg_owrkgrpid );
  8498. IF sqlca.SQLCode <> 0 THEN
  8499. rslt = 0
  8500. arg_msg = "因网络或错误产品唯一码导致更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText
  8501. GOTO ext
  8502. END IF
  8503. IF uo_option_update_lockdateflag = 1 THEN
  8504. SELECT count(*)
  8505. INTO :cnt
  8506. FROM u_OrderMtrl_workgroup
  8507. WHERE orderqty > taskqty
  8508. AND scid = :arg_scid
  8509. And orderid = :arg_orderid;
  8510. IF sqlca.SQLCode <> 0 THEN
  8511. rslt = 0
  8512. arg_msg = '查询指令单工组是否完成派工失败,'+sqlca.SQLErrText
  8513. GOTO ext
  8514. END IF
  8515. IF cnt > 0 THEN
  8516. UPDATE u_order_ml
  8517. SET lockdateflag = 0
  8518. WHERE scid = :arg_scid
  8519. And orderid = :arg_orderid;
  8520. ELSE
  8521. UPDATE u_order_ml
  8522. SET lockdateflag = 3
  8523. WHERE scid = :arg_scid
  8524. And orderid = :arg_orderid;
  8525. END IF
  8526. IF sqlca.SQLCode <> 0 THEN
  8527. rslt = 0
  8528. arg_msg = '更新指令单排程状态失败,'+sqlca.SQLErrText
  8529. GOTO ext
  8530. END IF
  8531. END IF
  8532. ext:
  8533. IF rslt = 0 THEN
  8534. ROLLBACK;
  8535. ELSEIF arg_ifcommit And rslt = 1 THEN
  8536. COMMIT;
  8537. END IF
  8538. p_reset()
  8539. Return (rslt)
  8540. end function
  8541. public function integer acceptmx_wrk (long arg_tmpid, long arg_wrkgrpid, long arg_owrkgrpid, string arg_wkpname, datetime arg_begindate, datetime arg_requiredate, decimal arg_lastdays, decimal arg_lasthour, ref string arg_msg);Int rslt = 1
  8542. IF IsNull(arg_tmpid) THEN arg_tmpid = 0
  8543. IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0
  8544. IF IsNull(arg_owrkgrpid) THEN arg_owrkgrpid = 0
  8545. IF IsNull(arg_wkpname) THEN arg_wkpname = ''
  8546. IF IsNull(arg_lastdays) THEN arg_lastdays = 0
  8547. IF IsNull(arg_lasthour) THEN arg_lasthour = 0
  8548. it_mxbt_wrk++
  8549. s_wrk_tmp[it_mxbt_wrk].tmpid = arg_tmpid
  8550. s_wrk_tmp[it_mxbt_wrk].wrkgrpid = arg_wrkgrpid
  8551. s_wrk_tmp[it_mxbt_wrk].owrkgrpid = arg_owrkgrpid
  8552. s_wrk_tmp[it_mxbt_wrk].wkpname = arg_wkpname
  8553. s_wrk_tmp[it_mxbt_wrk].begindate = arg_begindate
  8554. s_wrk_tmp[it_mxbt_wrk].requiredate = arg_requiredate
  8555. s_wrk_tmp[it_mxbt_wrk].lastdays = arg_lastdays
  8556. s_wrk_tmp[it_mxbt_wrk].lasthour = arg_lasthour
  8557. RETURN rslt
  8558. end function
  8559. public function integer uof_order_add_wkp_tmp (long arg_scid, long arg_orderid, long arg_tmpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  8560. Decimal ld_finishqty
  8561. Long ll_dftwrkgrpid
  8562. DateTime ldt_tmp
  8563. IF arg_orderid = 0 THEN
  8564. rslt = 0
  8565. arg_msg = "没有建立对象"
  8566. GOTO ext
  8567. END IF
  8568. Long ll_wrkgrpid[],ll_owrkgrpid[]
  8569. String ls_wkpname[]
  8570. Long ll_ifjd[]
  8571. DateTime ld_requiredate[],ld_begindate[]
  8572. String ls_dscrp[]
  8573. Decimal ll_lastdays[],ld_lasthour[]
  8574. Decimal ld_orderqty[]
  8575. Long i,cnt
  8576. Long ll_i
  8577. i = 1
  8578. DELETE FROM u_OrderMtrl_workgroup
  8579. WHERE orderid = :arg_orderid
  8580. AND scid = :arg_scid;
  8581. IF sqlca.SQLCode <> 0 THEN
  8582. rslt = 0
  8583. arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  8584. GOTO ext
  8585. END IF
  8586. INSERT INTO u_ordermtrl_workgroup
  8587. (scid,
  8588. orderid,
  8589. mtrlid,
  8590. wrkgrpid,
  8591. owrkgrpid,
  8592. orderqty,
  8593. lastdays,
  8594. ifjd,
  8595. wkpname,
  8596. printid,
  8597. iflast,
  8598. groupstr,
  8599. lp,
  8600. printlp,
  8601. lasthour,
  8602. workgroupid)
  8603. SELECT u_order_ml.scid,
  8604. u_order_ml.orderid,
  8605. u_order_ml.mtrlid,
  8606. u_mtrl_wkp.swkpid,
  8607. u_mtrl_wkp.owkpid,
  8608. u_order_ml.orderqty,
  8609. u_mtrl_wkp.lastdays,
  8610. 1,
  8611. u_mtrl_wkp.wkpname,
  8612. u_mtrl_wkp.printid,
  8613. u_mtrl_wkp.iflast,
  8614. u_mtrl_wkp.groupstr,
  8615. u_mtrl_wkp.lp,
  8616. u_mtrl_wkp.printlp,
  8617. u_mtrl_wkp.lasthour,
  8618. u_mtrl_wkp.workgroupid
  8619. FROM u_mtrl_wkp,u_order_ml
  8620. WHERE u_order_ml.orderid = :arg_orderid
  8621. AND u_order_ml.scid = :arg_scid
  8622. AND u_mtrl_wkp.mtrlid = u_order_ml.mtrlid;
  8623. IF sqlca.SQLCode <> 0 THEN
  8624. rslt = 0
  8625. arg_msg = '从物料生产流程加入生产计划车间失败,原因:'+sqlca.SQLErrText
  8626. GOTO ext
  8627. END IF
  8628. IF ordertype <> 4 THEN
  8629. INSERT INTO u_ordermtrl_workgroup
  8630. (scid,
  8631. orderid,
  8632. mtrlid,
  8633. wrkgrpid,
  8634. owrkgrpid,
  8635. orderqty,
  8636. lastdays,
  8637. ifjd,
  8638. printid,
  8639. groupstr,
  8640. lp,
  8641. printlp)
  8642. SELECT u_order_ml.scid,
  8643. u_order_ml.orderid,
  8644. u_order_ml.mtrlid,
  8645. u_sc_workgroup.wrkgrpid,
  8646. 0,
  8647. u_order_ml.orderqty,
  8648. 0,0,1000,'',0,0
  8649. FROM u_sc_workgroup,u_order_ml
  8650. WHERE u_order_ml.orderid = :arg_orderid
  8651. AND u_order_ml.scid = :arg_scid
  8652. AND u_sc_workgroup.ifprint = 1
  8653. AND u_sc_workgroup.ifjj = 1
  8654. AND u_sc_workgroup.wrkgrpid NOT In (SELECT u_mtrl_wkp.swkpid FROM u_mtrl_wkp Where u_mtrl_wkp.mtrlid = :mtrlid) ;
  8655. IF sqlca.SQLCode <> 0 THEN
  8656. rslt = 0
  8657. arg_msg = '从车间资料加入工生产计划车间失败,原因:'+sqlca.SQLErrText
  8658. GOTO ext
  8659. END IF
  8660. END IF
  8661. Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[]
  8662. Decimal l_lastdays[],l_lasthour[]
  8663. String l_wkpname[],l_groupstr[]
  8664. Long j,cnt_2,ll_count,ll_j
  8665. DateTime ld_sdate,ld_edate,ld_update_edate
  8666. DateTime ld_sdate_max
  8667. Decimal ld_resthour,ld_workhour,ld_resthour_e
  8668. Int li_timehour
  8669. Int li_rdate
  8670. Decimal ld_resthour_tmp
  8671. DateTime ld_workdate_tmp
  8672. Long l_printid_gr[]
  8673. String l_groupstr_gr[]
  8674. Long cnt_gr
  8675. DateTime ld_sdate_gr[]
  8676. Long ll_workgroupid[]
  8677. Long k
  8678. Boolean lb_if_find = FALSE
  8679. String ls_arg_date
  8680. IF uo_option_auto_wrkdate = -1000 THEN
  8681. rslt = 0
  8682. arg_msg = '选项:[126]生产计划,生产指令自动计算工组开始日期,结束日期,读取初始默认值失败,操作取消!'
  8683. GOTO ext
  8684. END IF
  8685. IF uo_option_use_sc_date = -1000 THEN
  8686. rslt = 0
  8687. arg_msg = '选项:[180]工组进度按小时统计,读取初始默认值失败,操作取消!'
  8688. GOTO ext
  8689. END IF
  8690. IF uo_option_auto_wrkdate = 1 THEN
  8691. SELECT orderdate
  8692. INTO :ld_sdate_max
  8693. FROM u_order_ml
  8694. WHERE orderid = :arg_orderid
  8695. AND scid = :arg_scid;
  8696. IF sqlca.SQLCode <> 0 THEN
  8697. rslt = 0
  8698. arg_msg = '查询生产计划或指令单计划开始日期失败'+sqlca.SQLErrText
  8699. GOTO ext
  8700. END IF
  8701. ld_sdate_max = DateTime(Date(ld_sdate_max),Time('8:00:00'))
  8702. IF uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 THEN
  8703. arg_msg = '计算工组日期失败,'+arg_msg
  8704. rslt = 0
  8705. GOTO ext
  8706. END IF
  8707. // j = 1
  8708. //
  8709. // DECLARE cur_wrkmx_2 CURSOR FOR
  8710. // SELECT wrkgrpid,
  8711. // owrkgrpid,
  8712. // wkpname,
  8713. // ifjd,
  8714. // printid,
  8715. // lastdays,
  8716. // groupstr,
  8717. // lasthour
  8718. // FROM u_OrderMtrl_workgroup
  8719. // WHERE orderid = :arg_orderid
  8720. // AND scid = :arg_scid
  8721. // Order By printid;
  8722. //
  8723. // OPEN cur_wrkmx_2;
  8724. // FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j],
  8725. // :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j],
  8726. // :l_groupstr[j],:l_lasthour[j];
  8727. //
  8728. // DO WHILE sqlca.SQLCode = 0
  8729. // j++
  8730. // FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j],
  8731. // :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j],
  8732. // :l_groupstr[j],:l_lasthour[j];
  8733. // LOOP
  8734. // CLOSE cur_wrkmx_2;
  8735. // cnt_2 = j - 1
  8736. //
  8737. // FOR ll_i = 1 TO cnt_2
  8738. // ll_count = 0
  8739. // IF l_ifjd[ll_i] = 1 THEN
  8740. //
  8741. // IF l_groupstr[ll_i] <> '' THEN
  8742. // lb_if_find = FALSE
  8743. // FOR k = 1 TO cnt_gr
  8744. // IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN
  8745. // ld_sdate = ld_sdate_gr[k]
  8746. // lb_if_find = TRUE
  8747. // EXIT
  8748. // END IF
  8749. // NEXT
  8750. //
  8751. // IF lb_if_find = FALSE THEN
  8752. // ld_sdate = ld_sdate_max
  8753. // END IF
  8754. // ELSE
  8755. // ld_sdate = ld_sdate_max
  8756. // END IF
  8757. //
  8758. // ls_arg_date = String(ld_sdate,'yyyy-mm-dd')
  8759. //
  8760. // IF uo_option_use_sc_date = 1 THEN
  8761. // SELECT sum(banhour) INTO :ld_workhour
  8762. // FROM u_sc_date
  8763. // WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date
  8764. // AND Proid = :l_wrkgrpid[ll_i];
  8765. // IF sqlca.SQLCode <> 0 THEN
  8766. // rslt = 0
  8767. // arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  8768. // GOTO ext
  8769. // END IF
  8770. // ELSE
  8771. // ld_workhour = 8
  8772. // END IF
  8773. //
  8774. // li_timehour = Hour(Time(ld_sdate))
  8775. //
  8776. // IF li_timehour <= 12 THEN
  8777. // ld_resthour = ld_workhour - (li_timehour - 8)
  8778. // ELSEIF li_timehour > 12 AND li_timehour <= 18 THEN
  8779. // ld_resthour = ld_workhour - (li_timehour - 14 + 4)
  8780. // ELSEIF li_timehour > 18 THEN
  8781. // ld_resthour = ld_workhour - (li_timehour - 19 + 8)
  8782. // END IF
  8783. //
  8784. // IF ld_resthour >= l_lasthour[ll_i] THEN
  8785. // IF li_timehour + l_lasthour[ll_i] <= 12 THEN
  8786. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00'))
  8787. // ELSEIF li_timehour + l_lasthour[ll_i] <= 18 THEN
  8788. // IF li_timehour < 12 THEN
  8789. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 2) + ':00:00'))
  8790. // ELSE
  8791. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00'))
  8792. // END IF
  8793. // ELSE
  8794. // IF li_timehour < 12 THEN
  8795. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 3) + ':00:00'))
  8796. // ELSEIF li_timehour < 18 THEN
  8797. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i] + 1) + ':00:00'))
  8798. // ELSE
  8799. // ld_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_i]) + ':00:00'))
  8800. // END IF
  8801. // END IF
  8802. // ld_resthour_e = ld_resthour - l_lasthour[ll_i]
  8803. // ELSE
  8804. // IF uo_option_use_sc_date = 0 THEN
  8805. // li_rdate = Int((l_lasthour[ll_i] - ld_resthour) / 8 )
  8806. // ld_resthour_tmp = Mod((l_lasthour[ll_i] - ld_resthour),8)
  8807. //
  8808. //
  8809. // IF ld_resthour_tmp = 0 THEN
  8810. // ld_resthour_tmp = 8
  8811. // li_rdate = li_rdate
  8812. // ELSE
  8813. // li_rdate = li_rdate + 1
  8814. // END IF
  8815. //
  8816. // IF 8 + ld_resthour_tmp <= 12 THEN
  8817. // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  8818. // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  8819. // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  8820. // ELSE
  8821. // ld_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  8822. // END IF
  8823. // ld_resthour_e = ld_workhour - ld_resthour_tmp
  8824. // ELSE
  8825. // ld_resthour_tmp = l_lasthour[ll_i] - ld_resthour
  8826. //
  8827. // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  8828. // FROM u_sc_date
  8829. // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  8830. // AND Proid = :l_wrkgrpid[ll_i]
  8831. // group by workdate
  8832. // Order By Workdate;
  8833. // DO WHILE ld_resthour_tmp > ld_workhour AND sqlca.SQLCode = 0
  8834. //
  8835. // ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd')
  8836. // ld_resthour_tmp = ld_resthour_tmp - ld_workhour
  8837. // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  8838. // FROM u_sc_date
  8839. // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  8840. // AND Proid = :l_wrkgrpid[ll_i]
  8841. // group by workdate
  8842. // Order By Workdate;
  8843. // LOOP
  8844. // IF sqlca.SQLCode <> 0 THEN
  8845. // rslt = 0
  8846. // arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  8847. // GOTO ext
  8848. // END IF
  8849. // IF 8 + ld_resthour_tmp <= 12 THEN
  8850. // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  8851. // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  8852. // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  8853. // ELSE
  8854. // ld_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  8855. // END IF
  8856. //
  8857. // ld_resthour_e = ld_workhour - ld_resthour_tmp
  8858. // END IF
  8859. //
  8860. // END IF
  8861. //
  8862. // UPDATE u_ordermtrl_workgroup
  8863. // SET begindate = :ld_sdate,
  8864. // requiredate = :ld_edate
  8865. // WHERE orderid = :arg_orderid
  8866. // AND scid = :arg_scid
  8867. // AND wrkGrpid = :l_wrkgrpid[ll_i]
  8868. // AND owrkgrpid = :l_owrkgrpid[ll_i]
  8869. // AND wkpname = :l_wkpname[ll_i];
  8870. // IF sqlca.SQLCode <> 0 THEN
  8871. // rslt = 0
  8872. // arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText
  8873. // GOTO ext
  8874. // END IF
  8875. //
  8876. // IF l_groupstr[ll_i] <> '' THEN
  8877. // lb_if_find = FALSE
  8878. //
  8879. // IF ld_resthour_e > 0 THEN
  8880. // IF Hour(Time(ld_edate)) = 12 THEN
  8881. // ld_sdate = DateTime(Date(ld_edate),Time('14:00:00'))
  8882. // ELSEIF Hour(Time(ld_edate)) = 18 THEN
  8883. // ld_sdate = DateTime(Date(ld_edate),Time('19:00:00'))
  8884. // ELSE
  8885. // ld_sdate = ld_edate
  8886. // END IF
  8887. // ELSE
  8888. // ld_sdate = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00'))
  8889. // END IF
  8890. //
  8891. // FOR k = 1 TO cnt_gr
  8892. // IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN
  8893. // ld_sdate_gr[k] = ld_sdate
  8894. // l_printid_gr[k] = l_printid[ll_i]
  8895. // lb_if_find = TRUE
  8896. // EXIT
  8897. // END IF
  8898. // NEXT
  8899. //
  8900. // IF lb_if_find = FALSE THEN
  8901. // cnt_gr++
  8902. // l_printid_gr[cnt_gr] = l_printid[ll_i]
  8903. // l_groupstr_gr[cnt_gr] = l_groupstr[ll_i]
  8904. // ld_sdate_gr[cnt_gr] = ld_sdate
  8905. // END IF
  8906. // END IF
  8907. //
  8908. // FOR ll_j = ll_i + 1 TO cnt_2
  8909. // IF l_ifjd[ll_j] = 1 AND &
  8910. // l_printid[ll_j] = l_printid[ll_i] THEN
  8911. //
  8912. //
  8913. // IF l_groupstr[ll_j] <> '' THEN
  8914. // lb_if_find = FALSE
  8915. // FOR k = 1 TO cnt_gr
  8916. // IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN
  8917. // ld_sdate = ld_sdate_gr[k]
  8918. // lb_if_find = TRUE
  8919. // EXIT
  8920. // END IF
  8921. // NEXT
  8922. //
  8923. // IF lb_if_find = FALSE THEN
  8924. // ld_sdate = ld_sdate_max
  8925. // END IF
  8926. // ELSE
  8927. // ld_sdate = ld_sdate_max
  8928. // END IF
  8929. //
  8930. // ls_arg_date = String(ld_sdate,'yyyy-mm-dd')
  8931. //
  8932. // IF uo_option_use_sc_date = 1 THEN
  8933. // SELECT sum(banhour) INTO :ld_workhour
  8934. // FROM u_sc_date
  8935. // WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date
  8936. // AND Proid = :l_wrkgrpid[ll_j];
  8937. // IF sqlca.SQLCode <> 0 THEN
  8938. // rslt = 0
  8939. // arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  8940. // GOTO ext
  8941. // END IF
  8942. // ELSE
  8943. // ld_workhour = 8
  8944. // END IF
  8945. //
  8946. // li_timehour = Hour(Time(ld_sdate))
  8947. //
  8948. // IF li_timehour <= 12 THEN
  8949. // ld_resthour = ld_workhour - (li_timehour - 8)
  8950. // ELSEIF li_timehour > 12 AND li_timehour <= 18 THEN
  8951. // ld_resthour = ld_workhour - (li_timehour - 14 + 4)
  8952. // ELSEIF li_timehour > 18 THEN
  8953. // ld_resthour = ld_workhour - (li_timehour - 19 + 8)
  8954. // END IF
  8955. //
  8956. // IF ld_resthour >= l_lasthour[ll_j] THEN
  8957. // IF li_timehour + l_lasthour[ll_j] <= 12 THEN
  8958. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00'))
  8959. // ELSEIF li_timehour + l_lasthour[ll_j] <= 18 THEN
  8960. // IF li_timehour < 12 THEN
  8961. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 2) + ':00:00'))
  8962. // ELSE
  8963. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00'))
  8964. // END IF
  8965. // ELSE
  8966. // IF li_timehour < 12 THEN
  8967. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 3) + ':00:00'))
  8968. // ELSEIF li_timehour < 18 THEN
  8969. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j] + 1) + ':00:00'))
  8970. // ELSE
  8971. // ld_update_edate = DateTime(Date(ld_sdate),Time(String(li_timehour + l_lasthour[ll_j]) + ':00:00'))
  8972. // END IF
  8973. // END IF
  8974. // ld_resthour_e = ld_resthour - l_lasthour[ll_j]
  8975. // ELSE
  8976. // IF uo_option_use_sc_date = 0 THEN
  8977. // li_rdate = Int((l_lasthour[ll_j] - ld_resthour) / 8 )
  8978. // ld_resthour_tmp = Mod((l_lasthour[ll_j] - ld_resthour),8)
  8979. //
  8980. // IF ld_resthour_tmp = 0 THEN
  8981. // ld_resthour_tmp = 8
  8982. // li_rdate = li_rdate
  8983. // ELSE
  8984. // li_rdate = li_rdate + 1
  8985. // END IF
  8986. //
  8987. // IF 8 + ld_resthour_tmp <= 12 THEN
  8988. // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  8989. // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  8990. // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  8991. // ELSE
  8992. // ld_update_edate = DateTime(RelativeDate(Date(ld_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  8993. // END IF
  8994. // ld_resthour_e = ld_workhour - ld_resthour_tmp
  8995. // ELSE
  8996. // ld_resthour_tmp = l_lasthour[ll_j] - ld_resthour
  8997. //
  8998. // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  8999. // FROM u_sc_date
  9000. // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  9001. // AND Proid = :l_wrkgrpid[ll_j]
  9002. // group by workdate
  9003. // Order By Workdate;
  9004. // DO WHILE ld_resthour_tmp > ld_workhour AND sqlca.SQLCode = 0
  9005. //
  9006. // ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd')
  9007. // ld_resthour_tmp = ld_resthour_tmp - ld_workhour
  9008. // SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  9009. // FROM u_sc_date
  9010. // WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  9011. // AND Proid = :l_wrkgrpid[ll_j]
  9012. // group by workdate
  9013. // Order By Workdate;
  9014. // LOOP
  9015. //
  9016. // IF sqlca.SQLCode <> 0 THEN
  9017. // rslt = 0
  9018. // arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  9019. // GOTO ext
  9020. // END IF
  9021. //
  9022. // IF 8 + ld_resthour_tmp <= 12 THEN
  9023. // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  9024. // ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  9025. // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  9026. // ELSE
  9027. // ld_update_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  9028. // END IF
  9029. // END IF
  9030. // END IF
  9031. //
  9032. // UPDATE u_ordermtrl_workgroup
  9033. // SET begindate = :ld_sdate,
  9034. // requiredate = :ld_update_edate
  9035. // WHERE orderid = :arg_orderid
  9036. // AND scid = :arg_scid
  9037. // AND wrkGrpid = :l_wrkgrpid[ll_j]
  9038. // AND owrkgrpid = :l_owrkgrpid[ll_j]
  9039. // AND wkpname = :l_wkpname[ll_j];
  9040. // IF sqlca.SQLCode <> 0 THEN
  9041. // rslt = 0
  9042. // arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText
  9043. // GOTO ext
  9044. // END IF
  9045. //
  9046. // IF l_groupstr[ll_j] <> '' THEN
  9047. // lb_if_find = FALSE
  9048. //
  9049. // IF ld_resthour_e > 0 THEN
  9050. // IF Hour(Time(ld_update_edate)) = 12 THEN
  9051. // ld_sdate = DateTime(Date(ld_update_edate),Time('14:00:00'))
  9052. // ELSEIF Hour(Time(ld_edate)) = 18 THEN
  9053. // ld_sdate = DateTime(Date(ld_update_edate),Time('19:00:00'))
  9054. // ELSE
  9055. // ld_sdate = ld_update_edate
  9056. // END IF
  9057. //
  9058. // ELSE
  9059. // ld_sdate = DateTime(RelativeDate(Date(ld_update_edate),1),Time('8:00:00'))
  9060. // END IF
  9061. //
  9062. // FOR k = 1 TO cnt_gr
  9063. // IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN
  9064. // ld_sdate_gr[k] = ld_sdate
  9065. // l_printid_gr[k] = l_printid[ll_j]
  9066. // lb_if_find = TRUE
  9067. // EXIT
  9068. // END IF
  9069. // NEXT
  9070. //
  9071. // IF lb_if_find = FALSE THEN
  9072. // cnt_gr++
  9073. // l_printid_gr[cnt_gr] = l_printid[ll_j]
  9074. // l_groupstr_gr[cnt_gr] = l_groupstr[ll_j]
  9075. // ld_sdate_gr[cnt_gr] = ld_sdate
  9076. // END IF
  9077. // END IF
  9078. //
  9079. // IF ld_edate < ld_update_edate THEN
  9080. // ld_edate = ld_update_edate
  9081. // END IF
  9082. // ll_count++
  9083. // END IF
  9084. // NEXT
  9085. // ll_i = ll_i + ll_count
  9086. //
  9087. // IF Hour(Time(ld_edate)) = 18 THEN
  9088. // ldt_tmp = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00'))
  9089. // ELSEIF Hour(Time(ld_edate)) = 12 THEN
  9090. // ldt_tmp = DateTime(Date(ld_edate),Time('14:00:00'))
  9091. // ELSE
  9092. // ldt_tmp = ld_edate
  9093. // END IF
  9094. //
  9095. // IF ld_sdate_max < ldt_tmp THEN
  9096. // ld_sdate_max = ldt_tmp
  9097. // END IF
  9098. // END IF
  9099. // NEXT
  9100. END IF
  9101. //更新要求完成日期
  9102. DECLARE cur_wrk_tmp CURSOR FOR
  9103. SELECT requiredate,
  9104. begindate,
  9105. lastdays,
  9106. lasthour,
  9107. workgroupid,
  9108. wrkgrpid,
  9109. owrkgrpid,
  9110. wkpname
  9111. FROM u_OrderMtrl_workgroup_tmp
  9112. Where tmpid = :arg_tmpid;
  9113. OPEN cur_wrk_tmp;
  9114. j = 1
  9115. FETCH cur_wrk_tmp INTO :ld_requiredate[j],:ld_begindate[j],:ll_lastdays[j],:ld_lasthour[j],:ll_workgroupid[j],
  9116. :ll_wrkgrpid[j],:ll_owrkgrpid[j],:ls_wkpname[j];
  9117. DO WHILE sqlca.SQLCode = 0
  9118. j++
  9119. FETCH cur_wrk_tmp INTO :ld_requiredate[j],:ld_begindate[j],:ll_lastdays[j],:ld_lasthour[j],:ll_workgroupid[j],
  9120. :ll_wrkgrpid[j],:ll_owrkgrpid[j],:ls_wkpname[j];
  9121. LOOP
  9122. CLOSE cur_wrk_tmp;
  9123. cnt = j - 1
  9124. FOR ll_i = 1 TO cnt
  9125. UPDATE u_ordermtrl_workgroup
  9126. SET requiredate = :ld_requiredate[ll_i],
  9127. begindate = :ld_begindate[ll_i],
  9128. lastdays = :ll_lastdays[ll_i],
  9129. lasthour = :ld_lasthour[ll_i],
  9130. workgroupid = :ll_workgroupid[ll_i]
  9131. WHERE orderid = :arg_orderid
  9132. AND scid = :arg_scid
  9133. AND wrkgrpid = :ll_wrkgrpid[ll_i]
  9134. AND owrkgrpid = :ll_owrkgrpid[ll_i]
  9135. AND wkpname = :ls_wkpname[ll_i];
  9136. IF sqlca.SQLCode <> 0 THEN
  9137. rslt = 0
  9138. arg_msg = '更新要求完成时间失败,原因:'+sqlca.SQLErrText
  9139. GOTO ext
  9140. END IF
  9141. NEXT
  9142. //按日期加入进度表
  9143. DELETE FROM u_ordermtrl_wrk_jd
  9144. WHERE orderid = :arg_orderid
  9145. AND scid = :arg_scid;
  9146. IF sqlca.SQLCode <> 0 THEN
  9147. rslt = 0
  9148. arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  9149. GOTO ext
  9150. END IF
  9151. j = 1
  9152. DECLARE cur_wrkmx_jd CURSOR FOR
  9153. SELECT wrkgrpid,
  9154. owrkgrpid,
  9155. wkpname,
  9156. requiredate,
  9157. begindate,
  9158. orderqty,
  9159. workgroupid
  9160. FROM u_OrderMtrl_workgroup
  9161. WHERE orderid = :arg_orderid
  9162. AND scid = :arg_scid;
  9163. OPEN cur_wrkmx_jd;
  9164. FETCH cur_wrkmx_jd INTO :ll_wrkgrpid[j],:ll_owrkgrpid[j],
  9165. :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],:ll_workgroupid[j];
  9166. DO WHILE sqlca.SQLCode = 0
  9167. j++
  9168. FETCH cur_wrkmx_jd INTO :ll_wrkgrpid[j],:ll_owrkgrpid[j],
  9169. :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],:ll_workgroupid[j];
  9170. LOOP
  9171. CLOSE cur_wrkmx_jd;
  9172. cnt = j - 1
  9173. Long ll_DaysAfter
  9174. DateTime ldt_wrkdate
  9175. Decimal ld_order_wrk
  9176. FOR ll_i = 1 TO cnt
  9177. ll_DaysAfter = DaysAfter(Date(ld_begindate[ll_i]), Date(ld_requiredate[ll_i]))
  9178. IF ll_DaysAfter + 1 <> 0 THEN
  9179. ld_order_wrk = ld_orderqty[ll_i] / (ll_DaysAfter + 1)
  9180. FOR ll_j = 1 TO ll_DaysAfter + 1
  9181. ldt_wrkdate = DateTime(RelativeDate(Date(ld_begindate[ll_i]),ll_j - 1 ),Time(0))
  9182. INSERT INTO u_ordermtrl_wrk_jd
  9183. (scid,
  9184. orderid,
  9185. wrkgrpid,
  9186. owrkgrpid,
  9187. wkpname,
  9188. wrkdate,
  9189. orderqty,
  9190. workgroupid)
  9191. VALUES
  9192. (:arg_scid,
  9193. :arg_orderid,
  9194. :ll_wrkgrpid[ll_i],
  9195. :ll_owrkgrpid[ll_i],
  9196. :ls_wkpname[ll_i],
  9197. :ldt_wrkdate,
  9198. :ld_order_wrk,
  9199. :ll_workgroupid[ll_i]);
  9200. IF sqlca.SQLCode <> 0 THEN
  9201. rslt = 0
  9202. arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText
  9203. GOTO ext
  9204. END IF
  9205. NEXT
  9206. END IF
  9207. NEXT
  9208. ext:
  9209. IF rslt = 0 THEN
  9210. ROLLBACK;
  9211. p_reset()
  9212. ELSEIF arg_ifcommit AND rslt = 1 THEN
  9213. COMMIT;
  9214. END IF
  9215. RETURN rslt
  9216. end function
  9217. public function integer uof_auto_order_plan (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  9218. s_order_plan arg_s_plan,arg_s_empty
  9219. Long ll_wrkgrpid[],ll_owrkgrpid[]
  9220. String ls_mtrlcode[]
  9221. Decimal ld_orderqty[]
  9222. DateTime ldt_requiredate[],ldt_begindate[]
  9223. String ls_wkpname[]
  9224. Long ll_workgroupid[],ll_rel_planid[],ll_rel_planprintid[]
  9225. Long ll_mxbt
  9226. Long ll_i
  9227. Long cnt
  9228. Long ll_planid,ll_printid
  9229. Int li_flag,li_secflag
  9230. uo_order_Plan uo_plan
  9231. uo_plan = CREATE uo_order_Plan
  9232. ll_mxbt = 1
  9233. DECLARE cur_ordermtrl CURSOR FOR
  9234. SELECT u_OrderMtrl_workgroup.wrkGrpid,
  9235. u_OrderMtrl_workgroup.owrkGrpid,
  9236. u_mtrldef.mtrlcode,
  9237. u_OrderMtrl_workgroup.orderqty,
  9238. u_OrderMtrl_workgroup.begindate,
  9239. u_OrderMtrl_workgroup.requiredate,
  9240. u_OrderMtrl_workgroup.wkpname,
  9241. u_OrderMtrl_workgroup.workgroupid,
  9242. u_OrderMtrl_workgroup.rel_planid,
  9243. u_OrderMtrl_workgroup.rel_planprintid
  9244. FROM u_OrderMtrl_workgroup INNER JOIN
  9245. u_mtrldef ON u_OrderMtrl_workgroup.mtrlid = u_mtrldef.mtrlid
  9246. WHERE u_OrderMtrl_workgroup.scid = :arg_scid
  9247. AND u_OrderMtrl_workgroup.orderid = :arg_orderid
  9248. Order By u_OrderMtrl_workgroup.printid,u_OrderMtrl_workgroup.groupstr;
  9249. OPEN cur_ordermtrl;
  9250. FETCH cur_ordermtrl INTO
  9251. :ll_wrkgrpid[ll_mxbt],
  9252. :ll_owrkgrpid[ll_mxbt],
  9253. :ls_mtrlcode[ll_mxbt],
  9254. :ld_orderqty[ll_mxbt],
  9255. :ldt_begindate[ll_mxbt],
  9256. :ldt_requiredate[ll_mxbt],
  9257. :ls_wkpname[ll_mxbt],
  9258. :ll_workgroupid[ll_mxbt],
  9259. :ll_rel_planid[ll_mxbt],
  9260. :ll_rel_planprintid[ll_mxbt];
  9261. DO WHILE sqlca.SQLCode = 0
  9262. ll_mxbt++
  9263. FETCH cur_ordermtrl INTO
  9264. :ll_wrkgrpid[ll_mxbt],
  9265. :ll_owrkgrpid[ll_mxbt],
  9266. :ls_mtrlcode[ll_mxbt],
  9267. :ld_orderqty[ll_mxbt],
  9268. :ldt_begindate[ll_mxbt],
  9269. :ldt_requiredate[ll_mxbt],
  9270. :ls_wkpname[ll_mxbt],
  9271. :ll_workgroupid[ll_mxbt],
  9272. :ll_rel_planid[ll_mxbt],
  9273. :ll_rel_planprintid[ll_mxbt];
  9274. LOOP
  9275. CLOSE cur_ordermtrl;
  9276. ll_mxbt = ll_mxbt - 1
  9277. FOR ll_i = 1 TO ll_mxbt
  9278. IF ll_rel_planid[ll_i] > 0 AND ll_rel_planprintid[ll_i] > 0 THEN
  9279. cnt = 0
  9280. SELECT count(*) INTO :cnt
  9281. FROM u_order_planmx
  9282. WHERE scid = :arg_scid
  9283. AND oplanid = :ll_rel_planid[ll_i]
  9284. AND printid = :ll_rel_planprintid[ll_i];
  9285. IF sqlca.SQLCode <> 0 THEN
  9286. rslt = 0
  9287. arg_msg = '查询是否已有派工单失败,'+sqlca.SQLErrText
  9288. GOTO ext
  9289. END IF
  9290. IF cnt = 0 THEN
  9291. ll_planid = 0
  9292. ll_printid = 0
  9293. ELSE
  9294. ll_planid = ll_rel_planid[ll_i]
  9295. ll_printid = ll_rel_planprintid[ll_i]
  9296. SELECT flag,secflag
  9297. INTO :li_flag,:li_secflag
  9298. FROM u_order_plan
  9299. WHERE scid = :arg_scid
  9300. AND oplanid = :ll_planid;
  9301. IF sqlca.SQLCode <> 0 THEN
  9302. rslt = 0
  9303. arg_msg = '查询相关派工单状态失败,'+sqlca.SQLErrText
  9304. GOTO ext
  9305. END IF
  9306. END IF
  9307. ELSE
  9308. ll_planid = 0
  9309. ll_printid = 0
  9310. END IF
  9311. IF li_secflag = 1 THEN
  9312. IF uo_plan.caudit_2(arg_scid,ll_planid,arg_msg,FALSE) = 0 THEN
  9313. arg_msg = '相关派工单撤二审失败,'+arg_msg
  9314. rslt = 0
  9315. GOTO ext
  9316. END IF
  9317. END IF
  9318. IF li_flag = 1 THEN
  9319. IF uo_plan.caudit(arg_scid,ll_planid,arg_msg,FALSE) = 0 THEN
  9320. arg_msg = '相关派工单撤审失败,'+arg_msg
  9321. rslt = 0
  9322. GOTO ext
  9323. END IF
  9324. END IF
  9325. arg_s_plan = arg_s_empty
  9326. arg_s_plan.scid = arg_scid
  9327. arg_s_plan.oplanid = ll_planid
  9328. arg_s_plan.oplandate = ldt_begindate[ll_i]
  9329. arg_s_plan.assign_emp = publ_operator
  9330. arg_s_plan.relcode = ''
  9331. arg_s_plan.dscrp = ''
  9332. arg_s_plan.workgroupid = ll_workgroupid[ll_i]
  9333. arg_s_plan.wrkGrpid = ll_wrkgrpid[ll_i]
  9334. arg_s_plan.arg_s_planmx[1].mtrlcode = ls_mtrlcode[ll_i]
  9335. arg_s_plan.arg_s_planmx[1].qty = ld_orderqty[ll_i]
  9336. arg_s_plan.arg_s_planmx[1].mxdscrp = ''
  9337. arg_s_plan.arg_s_planmx[1].orderid = arg_orderid
  9338. arg_s_plan.arg_s_planmx[1].requiredate = ldt_requiredate[ll_i]
  9339. arg_s_plan.arg_s_planmx[1].wkpname = ls_wkpname[ll_i]
  9340. arg_s_plan.arg_s_planmx[1].owrkGrpid = ll_owrkgrpid[ll_i]
  9341. arg_s_plan.arg_s_planmx[1].printid = 1
  9342. IF uo_plan.Save(arg_s_plan,publ_operator,arg_msg,FALSE) = 0 THEN
  9343. arg_msg = '相关派工单保存失败,'+arg_msg
  9344. rslt = 0
  9345. GOTO ext
  9346. END IF
  9347. IF uo_plan.audit(arg_scid,uo_plan.uo_oplanid,publ_operator,arg_msg,FALSE) = 0 THEN
  9348. arg_msg = '相关派工单审核失败,'+arg_msg
  9349. rslt = 0
  9350. GOTO ext
  9351. END IF
  9352. IF uo_plan.audit_2(arg_scid,uo_plan.uo_oplanid,publ_operator,arg_msg,FALSE) = 0 THEN
  9353. arg_msg = '相关派工单二审失败,'+arg_msg
  9354. rslt = 0
  9355. GOTO ext
  9356. END IF
  9357. UPDATE u_OrderMtrl_workgroup
  9358. SET rel_planid = :uo_plan.uo_oplanid,
  9359. rel_planprintid = 1
  9360. WHERE scid = :arg_scid
  9361. AND orderid = :arg_orderid
  9362. AND wrkgrpid = :ll_wrkgrpid[ll_i]
  9363. AND owrkGrpid = :ll_owrkgrpid[ll_i]
  9364. AND wkpname = :ls_wkpname[ll_i];
  9365. IF sqlca.SQLCode <> 0 THEN
  9366. rslt = 0
  9367. arg_msg = '更新相关单据唯一码失败,'+sqlca.SQLErrText
  9368. GOTO ext
  9369. END IF
  9370. NEXT
  9371. ext:
  9372. IF rslt = 0 THEN
  9373. ROLLBACK;
  9374. ELSEIF arg_ifcommit AND rslt = 1 THEN
  9375. COMMIT;
  9376. END IF
  9377. RETURN rslt
  9378. end function
  9379. public function integer add_newdscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg);
  9380. Int rslt = 1
  9381. IF arg_newdescppart = '' THEN
  9382. rslt = 0
  9383. arG_MSG = "要添加内容为空,操作取消"
  9384. GOTO ext
  9385. END IF
  9386. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  9387. IF rslt = 0 THEN GOTO ext
  9388. IF status = 0 THEN
  9389. rslt = 0
  9390. arG_MSG = "待审核状态下不可用"
  9391. GOTO ext
  9392. END IF
  9393. UPDATE u_order_ml
  9394. SET DSCRP = :arg_newdescppart
  9395. WHERE u_order_ml.orderid = :arg_orderid
  9396. AND u_order_ml.scid = :arg_scid;
  9397. IF SQLCA.SQLCode <> 0 THEN
  9398. rslt = 0
  9399. arG_MSG = "因网络或其它原因导致添加计划备注操作失败"+"~n"+SQLCA.SQLErrText
  9400. ROLLBACK;
  9401. GOTO ext
  9402. END IF
  9403. DSCRP = arg_newdescppart
  9404. ext:
  9405. IF rslt = 1 THEN
  9406. COMMIT;
  9407. END IF
  9408. p_reset()
  9409. RETURN (rslt)
  9410. end function
  9411. public function integer sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  9412. Long ls_i
  9413. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  9414. rslt = 0
  9415. GOTO ext
  9416. END IF
  9417. IF uo_option_if_oa_order_ml = -1000 THEN
  9418. rslt = 0
  9419. arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!'
  9420. GOTO ext
  9421. END IF
  9422. IF uo_option_order_ml_secaudit = -1000 THEN
  9423. rslt = 0
  9424. arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!'
  9425. GOTO ext
  9426. END IF
  9427. IF uo_option_if_oa_order_zl = -1000 THEN
  9428. rslt = 0
  9429. arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!'
  9430. GOTO ext
  9431. END IF
  9432. IF uo_option_order_ml_zl_secaudit = -1000 THEN
  9433. rslt = 0
  9434. arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!'
  9435. GOTO ext
  9436. END IF
  9437. IF arg_orderid = 0 THEN
  9438. rslt = 0
  9439. arg_msg = "没有审核对象"
  9440. GOTO ext
  9441. END IF
  9442. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  9443. rslt = 0
  9444. GOTO ext
  9445. END IF
  9446. //检查是否有相关配置变更单未审
  9447. cnt = 0
  9448. SELECT count(*)
  9449. INTO :cnt
  9450. FROM u_saletaskmx_change INNER JOIN
  9451. u_saletaskmx_changemx ON
  9452. u_saletaskmx_change.Billid = u_saletaskmx_changemx.billid
  9453. WHERE (u_saletaskmx_change.affirmflag = 0 OR u_saletaskmx_change.flag = 0)
  9454. AND (u_saletaskmx_changemx.orderid = :arg_orderid)
  9455. And (u_saletaskmx_changemx.scid = :arg_scid) ;
  9456. IF sqlca.SQLCode <> 0 THEN
  9457. arg_msg = ordercode + ',查询是否有相关配置变更单未审失败,'+sqlca.SQLErrText
  9458. rslt = 0
  9459. GOTO ext
  9460. END IF
  9461. IF cnt > 0 THEN
  9462. arg_msg = ordercode + ',有相关配置变更单未审,请先审核'
  9463. rslt = 0
  9464. GOTO ext
  9465. END IF
  9466. IF ordertype <> 4 THEN
  9467. IF uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 THEN
  9468. IF f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN
  9469. rslt = 0
  9470. GOTO ext
  9471. END IF
  9472. END IF
  9473. ELSE
  9474. IF uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 THEN
  9475. IF f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN
  9476. rslt = 0
  9477. GOTO ext
  9478. END IF
  9479. END IF
  9480. END IF
  9481. IF status <> 4 THEN
  9482. rslt = 0
  9483. arg_msg = "计划只有在待终审状态才可以执行终审,请核对"
  9484. GOTO ext
  9485. END IF
  9486. UPDATE u_order_ml
  9487. SET sec_permit_emp = :publ_operator,
  9488. sec_permit_date = getdate(),
  9489. status = 1
  9490. WHERE orderid = :arg_orderid
  9491. AND scid = :scid
  9492. And status = 4;
  9493. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  9494. rslt = 0
  9495. arg_msg = "因网络或其它原因导致计划终审操作失败"+"~n"+sqlca.SQLErrText
  9496. GOTO ext
  9497. END IF
  9498. ext:
  9499. IF rslt = 0 THEN
  9500. ROLLBACK;
  9501. p_reset()
  9502. ELSEIF arg_ifcommit And rslt = 1 THEN
  9503. COMMIT;
  9504. END IF
  9505. RETURN rslt
  9506. end function
  9507. public function integer c_sec_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  9508. Long ls_i
  9509. String ls_mtrlcode
  9510. Decimal finishqty,ld_sqty,ld_oqty
  9511. DateTime null_dt
  9512. SetNull(null_dt)
  9513. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  9514. rslt = 0
  9515. GOTO ext
  9516. END IF
  9517. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  9518. IF rslt = 0 THEN GOTO ext
  9519. IF ctmint > 0 THEN
  9520. arg_msg = '单据已截数,不能操作'
  9521. rslt = 0
  9522. GOTO ext
  9523. END IF
  9524. //IF pzlorderid > 0 THEN
  9525. // arg_msg = '自动生成的指令,不能操作'
  9526. // rslt = 0
  9527. // GOTO ext
  9528. //END IF
  9529. IF status <> 1 THEN
  9530. rslt = 0
  9531. arg_msg = "只有在已审核状态才可以执行撤消审核,请核对"
  9532. GOTO ext
  9533. END IF
  9534. IF scllflag = 1 THEN
  9535. rslt = 0
  9536. arg_msg = "计划已执行用料审批,请先用料撤审"
  9537. GOTO ext
  9538. END IF
  9539. IF ordertype = 4 THEN
  9540. IF ifauto_optype = 0 THEN
  9541. IF iffg = 1 And ifauto = 1 THEN
  9542. arg_msg = '自动生成的返工指令,不能手动撤审,需撤审相应返工物料运算批'
  9543. rslt = 0
  9544. GOTO ext
  9545. END IF
  9546. END IF
  9547. END IF
  9548. //查询是否已开生产指令单终止单
  9549. cnt = 0
  9550. SELECT count(*)
  9551. INTO :cnt
  9552. FROM u_order_ml_stop
  9553. WHERE scid = :arg_scid
  9554. And orderid = :arg_orderid;
  9555. IF sqlca.SQLCode <> 0 THEN
  9556. arg_msg = '查询是否有相关的生产指令单终止单失败'
  9557. rslt = 0
  9558. GOTO ext
  9559. END IF
  9560. IF cnt > 0 THEN
  9561. rslt = 0
  9562. arg_msg = '本生产计划已开了相关的生产指令单终止单,不能撤审'
  9563. GOTO ext
  9564. END IF
  9565. //
  9566. //查询是否有相关的成品生产计划
  9567. cnt = 0
  9568. SELECT count(*)
  9569. INTO :cnt
  9570. FROM u_order_ml
  9571. WHERE scid = :arg_scid
  9572. And pforderid = :arg_orderid;
  9573. IF sqlca.SQLCode <> 0 THEN
  9574. arg_msg = '查询是否有相关的成品生产计划失败'
  9575. rslt = 0
  9576. GOTO ext
  9577. END IF
  9578. IF cnt > 0 THEN
  9579. rslt = 0
  9580. arg_msg = '本生产计划已开了相关的成品生产计划,不能撤审'
  9581. GOTO ext
  9582. END IF
  9583. //
  9584. SELECT mtrlcode INTO :ls_mtrlcode
  9585. FROM u_mtrldef
  9586. Where mtrlid = :mtrlid;
  9587. IF sqlca.SQLCode <> 0 THEN
  9588. arg_msg = '查询产品编号失败'
  9589. rslt = 0
  9590. GOTO ext
  9591. END IF
  9592. IF getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  9593. rslt = 0
  9594. GOTO ext
  9595. END IF
  9596. //检查报数单
  9597. SELECT sum(finishqty) INTO :finishqty
  9598. FROM u_OrderMtrl_workgroup
  9599. WHERE orderid = :arg_orderid
  9600. And scid = :scid;
  9601. IF sqlca.SQLCode <> 0 THEN
  9602. arg_msg = '查询生产计划工组报数失败'
  9603. rslt = 0
  9604. GOTO ext
  9605. END IF
  9606. IF finishqty > 0 THEN
  9607. arg_msg = '生产计划已有工组报数,不能撤审'
  9608. rslt = 0
  9609. GOTO ext
  9610. END IF
  9611. //条码进度
  9612. SELECT sum(sqty),sum(oqty) INTO :ld_sqty,:ld_oqty
  9613. FROM u_OrderMtrl_workgroup_tree
  9614. WHERE orderid = :arg_orderid
  9615. And scid = :scid;
  9616. IF sqlca.SQLCode <> 0 THEN
  9617. arg_msg = '查询生产计划工组报数失败'
  9618. rslt = 0
  9619. GOTO ext
  9620. END IF
  9621. IF ld_sqty > 0 THEN
  9622. arg_msg = '生产计划已有工组完成数,不能撤审'
  9623. rslt = 0
  9624. GOTO ext
  9625. END IF
  9626. IF ld_oqty > 0 THEN
  9627. arg_msg = '生产计划已有工组接收数,不能撤审'
  9628. rslt = 0
  9629. GOTO ext
  9630. END IF
  9631. //检查已完成数量
  9632. IF AcmpQty > 0 THEN
  9633. arg_msg = '生产计划已有进仓数,不能撤审'
  9634. rslt = 0
  9635. GOTO ext
  9636. END IF
  9637. IF planqty > 0 THEN
  9638. arg_msg = '生产计划已有排程数,不能撤审'
  9639. rslt = 0
  9640. GOTO ext
  9641. END IF
  9642. //检查工序已开单数,已确认完成数
  9643. Decimal ld_amount
  9644. Decimal ld_finishqty
  9645. ld_amount = 0
  9646. SELECT sum(isnull(v_order_procode.amount,0)) INTO :ld_amount
  9647. FROM v_order_procode
  9648. WHERE v_order_procode.orderid = :arg_orderid
  9649. And v_order_procode.scid = :scid;
  9650. IF sqlca.SQLCode <> 0 THEN
  9651. rslt = 0
  9652. arg_msg = "因网络或其它原因导致查询工序已开单数操作失败"+"~n"+sqlca.SQLErrText
  9653. GOTO ext
  9654. END IF
  9655. IF ld_amount > 0 THEN
  9656. arg_msg = '生产计划工序已有开单数,不能撤审'
  9657. rslt = 0
  9658. GOTO ext
  9659. END IF
  9660. ld_finishqty = 0
  9661. SELECT sum(U_OrderRqwp.finishqty) INTO :ld_finishqty
  9662. FROM U_OrderRqwp
  9663. WHERE ( U_OrderRqwp.scid = :scid ) AND
  9664. ( U_OrderRqwp.orderid = :arg_orderid ) ;
  9665. IF sqlca.SQLCode <> 0 THEN
  9666. rslt = 0
  9667. arg_msg = "因网络或其它原因导致查询工序已确认完成数操作失败"+"~n"+sqlca.SQLErrText
  9668. GOTO ext
  9669. END IF
  9670. IF ld_finishqty > 0 THEN
  9671. arg_msg = '生产计划工序已确认完成数,不能撤审'
  9672. rslt = 0
  9673. GOTO ext
  9674. END IF
  9675. //检查派工数量
  9676. cnt = 0
  9677. SELECT count(*)
  9678. INTO :cnt
  9679. FROM u_order_planmx
  9680. WHERE ( u_order_planmx.orderid = :arg_orderid ) AND
  9681. ( u_order_planmx.scid = :arg_scid );
  9682. IF sqlca.SQLCode <> 0 THEN
  9683. rslt = 0
  9684. arg_msg = "因网络或其它原因导致查询计划是否已开生产派工单操作失败"+"~n"+sqlca.SQLErrText
  9685. GOTO ext
  9686. END IF
  9687. IF cnt > 0 THEN
  9688. rslt = 0
  9689. arg_msg = "生产计划已经有相关派工单,不可以撤消审核,请先删除相关单据再撤审"
  9690. GOTO ext
  9691. END IF
  9692. //检查指令单
  9693. IF ordertype <> 4 THEN
  9694. IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN
  9695. rslt = 0
  9696. GOTO ext
  9697. END IF
  9698. END IF
  9699. //检查进数量
  9700. cnt = 0
  9701. SELECT count(*)
  9702. INTO :cnt
  9703. FROM u_inware,u_inwaremx
  9704. WHERE ( u_inware.billtype = 3 ) AND
  9705. ( u_inware.scid = u_inwaremx.scid ) AND
  9706. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  9707. ( u_inwaremx.relid = :arg_orderid ) AND
  9708. ( u_inwaremx.scid = :arg_scid );
  9709. IF sqlca.SQLCode <> 0 THEN
  9710. rslt = 0
  9711. arg_msg = "因网络或其它原因导致查询计划是否已开生产进仓单操作失败"+"~n"+sqlca.SQLErrText
  9712. GOTO ext
  9713. END IF
  9714. IF cnt > 0 THEN
  9715. rslt = 0
  9716. arg_msg = "生产计划已经有相关生产进仓单据,不可以撤消审核,请先删除相关单据再撤审"
  9717. GOTO ext
  9718. END IF
  9719. //检查领料数量
  9720. SELECT count(*)
  9721. INTO :cnt
  9722. FROM u_outware,u_outwaremx
  9723. WHERE ( u_outware.billtype = 3 ) AND
  9724. ( u_outware.scid = u_outwaremx.scid ) AND
  9725. ( u_outware.outwareid = u_outwaremx.outwareid ) AND
  9726. ( u_outwaremx.relid = :arg_orderid ) AND
  9727. ( u_outwaremx.scid = :arg_scid );
  9728. IF sqlca.SQLCode <> 0 THEN
  9729. rslt = 0
  9730. arg_msg = "因网络或其它原因导致查询计划领料数量操作失败"+"~n"+sqlca.SQLErrText
  9731. GOTO ext
  9732. END IF
  9733. IF cnt > 0 THEN
  9734. rslt = 0
  9735. arg_msg = "生产计划已经有相关领料出仓单据,不可以撤消审核,请先删除相关单据再撤审"
  9736. GOTO ext
  9737. END IF
  9738. //检查工序派工单
  9739. SELECT count(*)
  9740. INTO :cnt
  9741. FROM u_sc_task
  9742. WHERE scid = :arg_scid
  9743. And orderid = :arg_orderid;
  9744. IF sqlca.SQLCode <> 0 THEN
  9745. rslt = 0
  9746. arg_msg = "因网络或其它原因导致查询相关工序派工单操作失败"+"~n"+sqlca.SQLErrText
  9747. GOTO ext
  9748. END IF
  9749. IF cnt > 0 THEN
  9750. rslt = 0
  9751. arg_msg = "生产计划已经有相关工序派工单,不可以撤消审核,请先删除相关单据再撤审"
  9752. GOTO ext
  9753. END IF
  9754. //检查是否已开发料通知单
  9755. cnt = 0
  9756. SELECT count(*)
  9757. INTO :cnt
  9758. FROM u_outware_scllplan_mx,u_outware_scllplan
  9759. WHERE ( u_outware_scllplan.outwareid = u_outware_scllplan_mx.outwareid ) AND
  9760. ( u_outware_scllplan_mx.orderid = :arg_orderid ) AND
  9761. ( u_outware_scllplan.scid = :arg_scid );
  9762. IF sqlca.SQLCode <> 0 THEN
  9763. rslt = 0
  9764. arg_msg = "因网络或其它原因导致查询指令单是否已开发料通知单操作失败"+"~n"+sqlca.SQLErrText
  9765. GOTO ext
  9766. END IF
  9767. IF cnt > 0 THEN
  9768. rslt = 0
  9769. arg_msg = "指令单已经有相关发料通知单,不可以撤消审核,请先删除相关单据再撤审"
  9770. GOTO ext
  9771. END IF
  9772. UPDATE u_order_ml
  9773. SET status = 4,
  9774. sec_Permit_emp = '',
  9775. sec_Permit_date = :null_dt
  9776. WHERE orderid = :arg_orderid
  9777. AND scid = :arg_scid
  9778. And status = 1;
  9779. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  9780. rslt = 0
  9781. arg_msg = "因网络或其它原因导致计划撤消审核操作失败"+"~n"+sqlca.SQLErrText
  9782. GOTO ext
  9783. END IF
  9784. ext:
  9785. IF rslt = 0 THEN
  9786. ROLLBACK;
  9787. p_reset()
  9788. ELSEIF rslt = 1 And arg_ifcommit THEN
  9789. COMMIT;
  9790. END IF
  9791. Return (rslt)
  9792. end function
  9793. public function integer uof_add_procode_qty (long arg_scid, long arg_orderid, string arg_procode, datetime arg_billdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工序进度完成数
  9794. Int rslt = 1
  9795. String ls_ordercode
  9796. String ls_mtrlcode
  9797. Decimal ld_orderqty,ld_acmpqty,ld_trueqty
  9798. DateTime null_dt
  9799. Long cnt
  9800. SetNull(null_dt)
  9801. If uo_option_if_taskwork_acmpqty = -1000 Then
  9802. rslt = 0
  9803. arg_msg = '选项:[202]计件单选生产计划时按已进仓数限制,读取初始默认值失败,操作取消!'
  9804. Goto ext
  9805. End If
  9806. If arg_orderid <= 0 Then
  9807. rslt = 0
  9808. arg_msg = '错误的计划唯一码'
  9809. Goto ext
  9810. End If
  9811. Select ordercode Into :ls_ordercode
  9812. From u_Order_ml
  9813. Where OrderID = :arg_orderid
  9814. And scid = :arg_scid;
  9815. If sqlca.SQLCode <> 0 Then
  9816. arg_msg = '查询生产计划编号失败'
  9817. rslt = 0
  9818. Goto ext
  9819. End If
  9820. Select u_mtrldef.mtrlcode ,
  9821. u_order_ml.orderqty,
  9822. u_order_ml.acmpqty
  9823. Into :ls_mtrlcode,
  9824. :ld_orderqty,
  9825. :ld_acmpqty
  9826. From u_mtrldef,u_order_ml
  9827. Where u_order_ml.mtrlid = u_mtrldef.mtrlid
  9828. And u_order_ml.scid = :arg_scid
  9829. And u_Order_ml.OrderID = :arg_orderid;
  9830. If sqlca.SQLCode <> 0 Then
  9831. arg_msg = '查询物料编号失败'
  9832. rslt = 0
  9833. Goto ext
  9834. End If
  9835. If uo_option_if_taskwork_acmpqty = 1 Then
  9836. ld_trueqty = ld_acmpqty
  9837. Else
  9838. ld_trueqty = ld_orderqty
  9839. End If
  9840. Decimal ld_nofinqty
  9841. Long ll_mtrlid
  9842. Select (U_OrderRqwp.proqty / :ld_orderqty) * :ld_trueqty - U_OrderRqwp.finishqty, mtrlid
  9843. Into :ld_nofinqty, :ll_mtrlid
  9844. From U_OrderRqwp
  9845. Where orderid = :arg_orderid
  9846. And scid = :arg_scid
  9847. And Procode = :arg_procode;
  9848. If sqlca.SQLCode <> 0 Then
  9849. rslt = 0
  9850. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量失败>>'+sqlca.SQLErrText
  9851. Goto ext
  9852. End If
  9853. If arg_qty > ld_nofinqty Then
  9854. rslt = 0
  9855. arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量为:'+String(ld_nofinqty,'#,##0.##########')+',不能再完成:'+String(arg_qty,'#,##0.##########')
  9856. Goto ext
  9857. End If
  9858. Update U_OrderRqwp
  9859. Set finishqty = finishqty + :arg_qty
  9860. Where orderid = :arg_orderid
  9861. And scid = :arg_scid
  9862. And Procode = :arg_procode;
  9863. If sqlca.SQLCode <> 0 Then
  9864. rslt = 0
  9865. arg_msg = '更新生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量失败>>'+sqlca.SQLErrText
  9866. Goto ext
  9867. End If
  9868. //如果工组进度解决方案为[按末工序计件确认数更新工组完成数],且工组末工序,更新工组完成数
  9869. //////////////////////////////////////////////// //
  9870. Long ll_wrkGrpid, ll_proorder_max, ll_proorder
  9871. Select wrkGrpid, proorder
  9872. Into :ll_wrkGrpid, :ll_proorder
  9873. From U_OrderRqwp
  9874. Where orderid = :arg_orderid
  9875. And scid = :arg_scid
  9876. And Procode = :arg_procode;
  9877. If sqlca.SQLCode <> 0 Then
  9878. rslt = 0
  9879. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',对应工组失败>>'+sqlca.SQLErrText
  9880. Goto ext
  9881. End If
  9882. //检查工组,工组进度解决方案 110527
  9883. Int li_jdtype
  9884. Select jdtype
  9885. Into :li_jdtype
  9886. From u_sc_workgroup
  9887. Where wrkGrpid = :ll_wrkGrpid Using sqlca;
  9888. If sqlca.SQLCode <> 0 Then
  9889. rslt = 0
  9890. arg_msg = "查询工组进度解决方案操作失败"+"~n"+sqlca.SQLErrText
  9891. Goto ext
  9892. End If
  9893. If li_jdtype = 2 Then
  9894. Select max(proorder)
  9895. Into :ll_proorder_max
  9896. From U_OrderRqwp
  9897. Where orderid = :arg_orderid
  9898. And scid = :arg_scid
  9899. And wrkGrpid = :ll_wrkGrpid;
  9900. If sqlca.SQLCode <> 0 Then
  9901. rslt = 0
  9902. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组最后工序失败>>'+sqlca.SQLErrText
  9903. Goto ext
  9904. End If
  9905. Select count(*)
  9906. Into :cnt
  9907. From U_OrderRqwp
  9908. Where orderid = :arg_orderid
  9909. And scid = :arg_scid
  9910. And proorder = :ll_proorder_max;
  9911. If sqlca.SQLCode <> 0 Then
  9912. rslt = 0
  9913. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',最大工序号:'+String(ll_proorder_max)+'是否唯一失败>>'+sqlca.SQLErrText
  9914. Goto ext
  9915. End If
  9916. If cnt > 1 Then
  9917. rslt = 0
  9918. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',存在多个工序设了相同的最大工序号,请检查'
  9919. Goto ext
  9920. End If
  9921. If ll_proorder = ll_proorder_max Then //当前工序为最后工序
  9922. If uof_add_workgroup_qty(arg_scid, arg_orderid , ll_wrkGrpid, ll_mtrlid, arg_billdate, arg_qty, arg_msg, False) = 0 Then
  9923. rslt = 0
  9924. arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组更新完成数失败>>'+arg_msg
  9925. Goto ext
  9926. End If
  9927. End If
  9928. End If
  9929. //////////////////////////////////////////////// //
  9930. ext:
  9931. If rslt = 0 Then
  9932. Rollback;
  9933. ElseIf rslt = 1 And arg_ifcommit Then
  9934. Commit;
  9935. End If
  9936. Return rslt
  9937. end function
  9938. public function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数
  9939. Int rslt = 1
  9940. String ls_ordercode
  9941. String ls_mtrlcode
  9942. Decimal ld_orderqty,ld_acmpqty,ld_trueqty
  9943. DateTime null_dt
  9944. SetNull(null_dt)
  9945. DateTime dt_fdate
  9946. uo_order_wkp_jd uo_jd
  9947. uo_jd = Create uo_order_wkp_jd
  9948. IF arg_orderid <= 0 THEN
  9949. rslt = 0
  9950. arg_msg = '错误的计划唯一码'
  9951. GOTO ext
  9952. END IF
  9953. SELECT ordercode INTO :ls_ordercode
  9954. FROM u_Order_ml
  9955. WHERE OrderID = :arg_orderid
  9956. And scid = :arg_scid;
  9957. IF sqlca.SQLCode <> 0 THEN
  9958. arg_msg = '查询生产计划编号失败'
  9959. rslt = 0
  9960. GOTO ext
  9961. END IF
  9962. SELECT u_mtrldef.mtrlcode ,
  9963. u_order_ml.orderqty,
  9964. u_order_ml.acmpqty
  9965. INTO :ls_mtrlcode,
  9966. :ld_orderqty,
  9967. :ld_acmpqty
  9968. FROM u_mtrldef,u_order_ml
  9969. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  9970. AND u_order_ml.scid = :arg_scid
  9971. And u_Order_ml.OrderID = :arg_orderid;
  9972. IF sqlca.SQLCode <> 0 THEN
  9973. arg_msg = '查询物料编号失败'
  9974. rslt = 0
  9975. GOTO ext
  9976. END IF
  9977. //arg_wrkgrpid:源工组;
  9978. Decimal not_finishqty
  9979. SELECT orderqty - finishqty - stopqty INTO :not_finishqty
  9980. FROM u_OrderMtrl_workgroup
  9981. WHERE orderid = :arg_orderid
  9982. AND wrkGrpid = :arg_wrkgrpid
  9983. AND owrkGrpid > 0
  9984. and scid = :arg_scid
  9985. and ifjd = 1
  9986. Using sqlca;
  9987. IF sqlca.SQLCode <> 0 THEN
  9988. arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  9989. rslt = 0
  9990. GOTO ext
  9991. END IF
  9992. IF arg_qty > not_finishqty THEN
  9993. arg_msg = '物料:'+ls_mtrlcode+'当前数量'+String(arg_qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核'
  9994. rslt = 0
  9995. GOTO ext
  9996. END IF
  9997. UPDATE u_OrderMtrl_workgroup
  9998. SET finishqty = finishqty + :arg_qty,
  9999. finishflag = case when orderqty <= finishqty + :arg_qty + stopqty then 1 else 0 END ,
  10000. finishdate = case when orderqty <= finishqty + :arg_qty + stopqty then :arg_finishdate else :null_dt END
  10001. WHERE orderid = :arg_orderid
  10002. AND wrkGrpid = :arg_wrkgrpid
  10003. AND owrkGrpid > 0
  10004. and ifjd = 1
  10005. and scid = :arg_scid
  10006. Using sqlca;
  10007. IF sqlca.SQLCode <> 0 THEN
  10008. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  10009. rslt = 0
  10010. GOTO ext
  10011. END IF
  10012. Long ll_cnt
  10013. SELECT count(0)
  10014. INTO :ll_cnt
  10015. FROM u_OrderMtrl_workgroup
  10016. WHERE scid = :arg_scid
  10017. AND orderid = :arg_orderid
  10018. And finishflag = 0;
  10019. IF sqlca.SQLCode <> 0 THEN
  10020. rslt = 0
  10021. arg_msg = '查询指令单是否派工完成失败,' + sqlca.SQLErrText
  10022. GOTO ext
  10023. END IF
  10024. IF ll_cnt = 0 THEN
  10025. UPDATE u_Order_ml
  10026. SET finish_scflag = 1
  10027. WHERE scid = :arg_scid
  10028. And OrderID = :arg_orderid;
  10029. IF sqlca.SQLCode <> 0 THEN
  10030. rslt = 0
  10031. arg_msg = '更新指令单派工完成标记失败,' + sqlca.SQLErrText
  10032. GOTO ext
  10033. END IF
  10034. else
  10035. UPDATE u_Order_ml
  10036. SET finish_scflag = 0
  10037. WHERE scid = :arg_scid
  10038. And OrderID = :arg_orderid;
  10039. IF sqlca.SQLCode <> 0 THEN
  10040. rslt = 0
  10041. arg_msg = '更新指令单派工完成标记失败,' + sqlca.SQLErrText
  10042. GOTO ext
  10043. END IF
  10044. END IF
  10045. IF uo_jd.uof_order_add_wrk_jd(arg_scid,arg_orderid,arg_msg,False) = 0 THEN
  10046. rslt = 0
  10047. GOTO ext
  10048. END IF
  10049. dt_fdate = DateTime(Date(arg_finishdate), Time(0))
  10050. UPDATE u_OrderMtrl_workgroup_date
  10051. SET fqty = fqty + :arg_qty
  10052. WHERE scid = :arg_scid
  10053. AND orderid = :arg_orderid
  10054. AND wrkgrpid = :arg_wrkgrpid
  10055. And fdate = :dt_fdate;
  10056. IF sqlca.SQLCode = 0 THEN
  10057. IF sqlca.SQLNRows = 0 THEN
  10058. INSERT INTO u_OrderMtrl_workgroup_date
  10059. (scid,orderid,wrkgrpid,fdate,fqty)
  10060. VALUES
  10061. (:arg_scid,:arg_orderid,:arg_wrkgrpid,:dt_fdate,:arg_qty);
  10062. IF sqlca.SQLCode <> 0 THEN
  10063. rslt = 0
  10064. arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
  10065. GOTO ext
  10066. END IF
  10067. END IF
  10068. ELSE
  10069. rslt = 0
  10070. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  10071. GOTO ext
  10072. END IF
  10073. ext:
  10074. IF rslt = 0 THEN
  10075. ROLLBACK;
  10076. ELSEIF rslt = 1 And arg_ifcommit THEN
  10077. COMMIT;
  10078. END IF
  10079. Destroy uo_jd
  10080. RETURN rslt
  10081. end function
  10082. public function integer uo_cmp_datediff_wrk (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10083. datastore ds_diff
  10084. ds_diff = Create datastore
  10085. ds_diff.DataObject = 'ds_order_ml_wkp_datediff'
  10086. ds_diff.SetTransObject(sqlca)
  10087. ds_diff.Retrieve(arg_scid,arg_orderid)
  10088. ds_diff.AcceptText()
  10089. ds_diff.SetSort('u_ordermtrl_workgroup_printid A ,u_ordermtrl_workgroup_groupstr A,u_ordermtrl_workgroup_wkpname A')
  10090. ds_diff.Sort()
  10091. Long ll_i,ll_j
  10092. Long ll_owrkgrpid
  10093. String ls_groupstr
  10094. DateTime ldt_bdate,ldt_edate
  10095. DateTime ldt_begindate,ldt_requiredate
  10096. Decimal ld_hourdiffdef,ld_hourdiff
  10097. Int li_datediff
  10098. Int li_bhour,li_ehour
  10099. Long ll_daysaffter
  10100. Int li_diffhour
  10101. DateTime ldt_nextbdate,ldt_nextedate
  10102. Decimal ld_hourdiff_update,ld_hourdiffdef_update
  10103. Long ll_wrkgrpid
  10104. String ls_wkpname
  10105. ds_diff.AcceptText()
  10106. FOR ll_i = 1 To ds_diff.RowCount()
  10107. IF ds_diff.Object.ifjd[ll_i] = 1 THEN
  10108. ll_owrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_owrkgrpid[ll_i]
  10109. ldt_requiredate = ds_diff.Object.u_ordermtrl_workgroup_requiredate[ll_i]
  10110. FOR ll_j = ll_i + 1 To ds_diff.RowCount()
  10111. IF ds_diff.Object.u_ordermtrl_workgroup_wrkgrpid[ll_j] = ll_owrkgrpid And &
  10112. ds_diff.Object.ifjd[ll_j] = 1 THEN
  10113. ldt_edate = ds_diff.Object.u_ordermtrl_workgroup_requiredate[ll_j]
  10114. ld_hourdiffdef = ds_diff.Object.lasthour[ll_j]
  10115. IF Hour(Time(ldt_requiredate)) = 12 THEN
  10116. ldt_bdate = DateTime(Date(ldt_requiredate),Time('14:00:00'))
  10117. ELSEIF Hour(Time(ldt_requiredate)) = 18 THEN
  10118. ldt_bdate = DateTime(RelativeDate(Date(ldt_requiredate),1),Time('8:00:00'))
  10119. ELSE
  10120. ldt_bdate = ldt_requiredate
  10121. END IF
  10122. ds_diff.Object.nextbdate[ll_i] = ldt_bdate
  10123. ds_diff.Object.nextedate[ll_i] = ldt_edate
  10124. //
  10125. ll_daysaffter = DaysAfter(Date(ldt_bdate),Date(ldt_edate))
  10126. li_bhour = Hour(Time(ldt_bdate))
  10127. li_ehour = Hour(Time(ldt_edate))
  10128. IF li_bhour <= 12 And li_ehour <= 12 THEN
  10129. li_diffhour = li_ehour - li_bhour
  10130. li_datediff = ll_daysaffter * 8 +li_diffhour
  10131. ELSEIF li_bhour >= 14 And li_ehour >= 14 THEN
  10132. li_diffhour = li_ehour - li_bhour
  10133. li_datediff = ll_daysaffter * 8 +li_diffhour
  10134. ELSEIF li_bhour >= 8 And li_bhour <= 12 And li_ehour >= 14 THEN
  10135. li_diffhour = li_ehour - li_bhour - 2
  10136. li_datediff = ll_daysaffter * 8 +li_diffhour
  10137. ELSE
  10138. li_diffhour = 10 + li_ehour - li_bhour
  10139. li_datediff = (ll_daysaffter - 1) * 8 + li_diffhour
  10140. END IF
  10141. ld_hourdiff = li_datediff
  10142. ds_diff.Object.hourdiff[ll_i] = ld_hourdiff
  10143. ds_diff.Object.hourdiffdef[ll_i] = ld_hourdiffdef
  10144. EXIT
  10145. END IF
  10146. NEXT
  10147. END IF
  10148. NEXT
  10149. ds_diff.AcceptText()
  10150. FOR ll_i = 1 To ds_diff.RowCount()
  10151. IF ds_diff.Object.ifjd[ll_i] = 1 THEN
  10152. ldt_nextbdate = ds_diff.Object.nextbdate[ll_i]
  10153. ldt_nextedate = ds_diff.Object.nextedate[ll_i]
  10154. ld_hourdiff_update = ds_diff.Object.hourdiff[ll_i]
  10155. ld_hourdiffdef_update = ds_diff.Object.hourdiffdef[ll_i]
  10156. ll_owrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_owrkgrpid[ll_i]
  10157. ll_wrkgrpid = ds_diff.Object.u_ordermtrl_workgroup_wrkgrpid[ll_i]
  10158. ls_wkpname = ds_diff.Object.u_ordermtrl_workgroup_wkpname[ll_i]
  10159. UPDATE u_ordermtrl_workgroup
  10160. SET nextbdate = :ldt_nextbdate,
  10161. nextedate = :ldt_nextedate,
  10162. hourdiff = :ld_hourdiff_update,
  10163. hourdiffdef = :ld_hourdiffdef_update
  10164. WHERE scid = :arg_scid
  10165. AND orderid = :arg_orderid
  10166. AND wrkgrpid = :ll_wrkgrpid
  10167. AND owrkgrpid = :ll_owrkgrpid
  10168. And wkpname = :ls_wkpname;
  10169. IF sqlca.SQLCode <> 0 THEN
  10170. rslt = 0
  10171. arg_msg = '更新下工组完成时间失败,'+sqlca.SQLErrText
  10172. GOTO ext
  10173. END IF
  10174. END IF
  10175. NEXT
  10176. ext:
  10177. IF rslt = 0 THEN
  10178. ROLLBACK;
  10179. ELSEIF rslt = 1 And arg_ifcommit THEN
  10180. COMMIT;
  10181. END IF
  10182. destroy ds_diff
  10183. RETURN rslt
  10184. end function
  10185. public function integer uof_add_ordermtrl_tree_acmpqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数
  10186. Int rslt = 1
  10187. String ls_ordercode
  10188. String ls_mtrlcode
  10189. Decimal ld_orderqty,ld_acmpqty
  10190. String ls_relname,ls_partname
  10191. String ls_treename
  10192. DateTime null_dt
  10193. SetNull(null_dt)
  10194. IF arg_orderid <= 0 THEN
  10195. rslt = 0
  10196. arg_msg = '错误的计划唯一码'
  10197. GOTO ext
  10198. END IF
  10199. SELECT ordercode INTO :ls_ordercode
  10200. FROM u_Order_ml
  10201. WHERE OrderID = :arg_orderid
  10202. And scid = :arg_scid;
  10203. IF sqlca.SQLCode <> 0 THEN
  10204. arg_msg = '查询生产计划编号失败'
  10205. rslt = 0
  10206. GOTO ext
  10207. END IF
  10208. SELECT relname,partname
  10209. INTO :ls_relname,:ls_partname
  10210. FROM u_OrderMtrl_workgroup_tree
  10211. WHERE scid = :arg_scid
  10212. AND orderid = :arg_orderid
  10213. AND printid = :arg_printid
  10214. Using sqlca;
  10215. IF sqlca.SQLCode <> 0 THEN
  10216. arg_msg = '查询指令单:'+ls_ordercode+'工艺路线信息失败,原因:'+sqlca.SQLErrText
  10217. rslt = 0
  10218. GOTO ext
  10219. END IF
  10220. IF ls_relname = ls_partname THEN
  10221. ls_treename = ls_relname
  10222. ELSE
  10223. ls_treename = ls_relname + '-'+ls_partname
  10224. END IF
  10225. Decimal not_finishqty
  10226. SELECT orderqty - acmpqty INTO :not_finishqty
  10227. FROM u_OrderMtrl_workgroup_tree
  10228. WHERE scid = :arg_scid
  10229. AND orderid = :arg_orderid
  10230. AND printid = :arg_printid
  10231. Using sqlca;
  10232. IF sqlca.SQLCode <> 0 THEN
  10233. arg_msg = '查询指令单:'+ls_ordercode+'工艺路线:'+ls_treename +'未派工数量失败,原因:'+sqlca.SQLErrText
  10234. rslt = 0
  10235. GOTO ext
  10236. END IF
  10237. IF arg_addqty > not_finishqty THEN
  10238. arg_msg = '指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'未派工数量只有 '+String(not_finishqty,'#,##0.##########')+','+'不能派工'+String(arg_addqty,'#,##0.##########')
  10239. rslt = 0
  10240. GOTO ext
  10241. END IF
  10242. UPDATE u_OrderMtrl_workgroup_tree
  10243. SET acmpqty = acmpqty + :arg_addqty
  10244. WHERE scid = :arg_scid
  10245. AND orderid = :arg_orderid
  10246. AND printid = :arg_printid
  10247. Using sqlca;
  10248. IF sqlca.SQLCode <> 0 THEN
  10249. arg_msg = '更新指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'已派工数量失败,原因:'+sqlca.SQLErrText
  10250. rslt = 0
  10251. GOTO ext
  10252. END IF
  10253. ext:
  10254. IF rslt = 0 THEN
  10255. ROLLBACK;
  10256. ELSEIF rslt = 1 And arg_ifcommit THEN
  10257. COMMIT;
  10258. END IF
  10259. RETURN rslt
  10260. end function
  10261. public function integer uof_add_ordermtrl_tree_sqty (long arg_scid, long arg_orderid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数
  10262. Int rslt = 1
  10263. String ls_ordercode
  10264. String ls_mtrlcode
  10265. Decimal ld_orderqty,ld_acmpqty
  10266. String ls_relname,ls_partname
  10267. String ls_treename
  10268. DateTime null_dt
  10269. SetNull(null_dt)
  10270. IF arg_orderid <= 0 THEN
  10271. rslt = 0
  10272. arg_msg = '错误的计划唯一码'
  10273. GOTO ext
  10274. END IF
  10275. SELECT ordercode INTO :ls_ordercode
  10276. FROM u_Order_ml
  10277. WHERE OrderID = :arg_orderid
  10278. And scid = :arg_scid;
  10279. IF sqlca.SQLCode <> 0 THEN
  10280. arg_msg = '查询生产计划编号失败'
  10281. rslt = 0
  10282. GOTO ext
  10283. END IF
  10284. SELECT relname,partname
  10285. INTO :ls_relname,:ls_partname
  10286. FROM u_OrderMtrl_workgroup_tree
  10287. WHERE scid = :arg_scid
  10288. AND orderid = :arg_orderid
  10289. AND printid = :arg_printid
  10290. Using sqlca;
  10291. IF sqlca.SQLCode <> 0 THEN
  10292. arg_msg = '查询指令单:'+ls_ordercode+'工艺路线信息失败,原因:'+sqlca.SQLErrText
  10293. rslt = 0
  10294. GOTO ext
  10295. END IF
  10296. IF ls_relname = ls_partname THEN
  10297. ls_treename = ls_relname
  10298. ELSE
  10299. ls_treename = ls_relname + '-'+ls_partname
  10300. END IF
  10301. Decimal not_finishqty
  10302. SELECT orderqty - sqty INTO :not_finishqty
  10303. FROM u_OrderMtrl_workgroup_tree
  10304. WHERE scid = :arg_scid
  10305. AND orderid = :arg_orderid
  10306. AND printid = :arg_printid
  10307. Using sqlca;
  10308. IF sqlca.SQLCode <> 0 THEN
  10309. arg_msg = '查询指令单:'+ls_ordercode+'工艺路线:'+ls_treename +'未完工数量失败,原因:'+sqlca.SQLErrText
  10310. rslt = 0
  10311. GOTO ext
  10312. END IF
  10313. IF arg_addqty > not_finishqty THEN
  10314. arg_msg = '指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'未完工数量只有 '+String(not_finishqty,'#,##0.##########')+','+'不能完工'+String(arg_addqty,'#,##0.##########')
  10315. rslt = 0
  10316. GOTO ext
  10317. END IF
  10318. UPDATE u_OrderMtrl_workgroup_tree
  10319. SET sqty = sqty + :arg_addqty,
  10320. sdate = case when sqty + :arg_addqty = 0 then :null_dt else getdate() end
  10321. WHERE scid = :arg_scid
  10322. AND orderid = :arg_orderid
  10323. AND printid = :arg_printid
  10324. Using sqlca;
  10325. IF sqlca.SQLCode <> 0 THEN
  10326. arg_msg = '更新指令单:'+ls_ordercode+'工艺路线:'+ls_treename+'已完工数量失败,原因:'+sqlca.SQLErrText
  10327. rslt = 0
  10328. GOTO ext
  10329. END IF
  10330. ext:
  10331. IF rslt = 0 THEN
  10332. ROLLBACK;
  10333. ELSEIF rslt = 1 And arg_ifcommit THEN
  10334. COMMIT;
  10335. END IF
  10336. RETURN rslt
  10337. end function
  10338. public function integer uo_cmp_tree_date (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10339. Long ll_i,ll_j
  10340. Long ll_lp[],ll_mxbt = 1
  10341. DateTime ldt_sdate,ldt_edate,ldt_sdate_order,ldt_edate_before
  10342. Long ll_row,ll_printid
  10343. String ls_arg_date
  10344. Long ll_wrkgrpid
  10345. Decimal ld_workhour,ld_resthour,ld_lasthour,ld_resthour_tmp
  10346. Int li_timehour,li_rdate
  10347. Decimal ld_workdate_tmp
  10348. Decimal ld_resthour_e
  10349. SELECT orderdate INTO :ldt_sdate_order
  10350. FROM u_order_ml
  10351. WHERE scid = :arg_scid
  10352. And orderid = :arg_orderid;
  10353. IF sqlca.SQLCode <> 0 THEN
  10354. rslt = 0
  10355. arg_msg = '查询指令单开始日期失败,'+sqlca.SQLErrText
  10356. GOTO ext
  10357. END IF
  10358. DECLARE cur_lp CURSOR FOR
  10359. SELECT DISTINCT lp
  10360. FROM u_OrderMtrl_workgroup_tree
  10361. WHERE (scid = :arg_scid)
  10362. AND (orderid = :arg_orderid)
  10363. Order By lp Desc;
  10364. OPEN cur_lp;
  10365. FETCH cur_lp Into :ll_lp[ll_mxbt];
  10366. DO WHILE sqlca.SQLCode = 0
  10367. ll_mxbt++
  10368. FETCH cur_lp Into :ll_lp[ll_mxbt];
  10369. LOOP
  10370. CLOSE cur_lp;
  10371. ll_mxbt = ll_mxbt - 1
  10372. datastore ds_tree
  10373. ds_tree = Create datastore
  10374. ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_date'
  10375. ds_tree.SetTransObject(sqlca)
  10376. ds_tree.Retrieve(arg_scid,arg_orderid)
  10377. FOR ll_i = 1 To ll_mxbt
  10378. FOR ll_j = 1 To ds_tree.RowCount()
  10379. IF ds_tree.Object.lp[ll_j] = ll_lp[ll_i] THEN
  10380. ll_printid = ds_tree.Object.printid[ll_j]
  10381. ld_lasthour = ds_tree.Object.lasthour[ll_j]
  10382. ll_wrkgrpid = ds_tree.Object.swkpid[ll_j]
  10383. ll_row = ds_tree.Find('parentid = '+String(ll_printid),1,ds_tree.RowCount())
  10384. IF ll_row = 0 THEN
  10385. ldt_sdate = DateTime(Date(ldt_sdate_order),Time('8:00:00'))
  10386. ELSE
  10387. ldt_edate_before = ds_tree.Object.enddate[ll_row]
  10388. IF Hour(Time(ldt_edate_before)) = 18 THEN
  10389. ldt_sdate = DateTime(RelativeDate(Date(ldt_edate_before),1),Time('8:00:00'))
  10390. ELSEIF Hour(Time(ldt_edate_before)) = 12 THEN
  10391. ldt_sdate = DateTime(Date(ldt_edate_before),Time('14:00:00'))
  10392. ELSE
  10393. ldt_sdate = ldt_edate_before
  10394. END IF
  10395. END IF
  10396. IF uo_cmp_wrk_edate(ldt_sdate,ll_wrkgrpid,ld_lasthour,ldt_edate,ld_resthour_e,arg_msg) = 0 THEN
  10397. rslt = 0
  10398. GOTO ext
  10399. END IF
  10400. ds_tree.Object.begindate[ll_j] = ldt_sdate
  10401. ds_tree.Object.enddate[ll_j] = ldt_edate
  10402. ds_tree.AcceptText()
  10403. UPDATE u_OrderMtrl_workgroup_tree
  10404. SET begindate = :ldt_sdate,
  10405. enddate = :ldt_edate
  10406. WHERE scid = :arg_scid
  10407. AND orderid = :arg_orderid
  10408. And printid = :ll_printid;
  10409. IF sqlca.SQLCode <> 0 THEN
  10410. rslt = 0
  10411. arg_msg = '更新日期失败,'+sqlca.SQLErrText
  10412. GOTO ext
  10413. END IF
  10414. END IF
  10415. NEXT
  10416. NEXT
  10417. ext:
  10418. IF rslt = 0 THEN
  10419. ROLLBACK;
  10420. ELSEIF rslt = 1 And arg_ifcommit THEN
  10421. COMMIT;
  10422. END IF
  10423. RETURN rslt
  10424. end function
  10425. public function integer uo_cmp_wrk_edate (datetime arg_sdate, long arg_wrkgrpid, decimal arg_lasthour, ref datetime arg_edate, ref decimal arg_resthour_e, ref string arg_msg);Int rslt = 1
  10426. String ls_arg_date
  10427. Decimal ld_workhour,ld_resthour
  10428. Int li_timehour,li_rdate
  10429. Decimal ld_resthour_tmp
  10430. DateTime ld_workdate_tmp
  10431. ls_arg_date = String(arg_sdate,'yyyy-mm-dd')
  10432. IF uo_option_use_sc_date = 1 THEN
  10433. SELECT sum(banhour) INTO :ld_workhour
  10434. FROM u_sc_date
  10435. WHERE CONVERT(CHAR(10), Workdate, 120) = :ls_arg_date
  10436. And Proid = :arg_wrkgrpid;
  10437. IF sqlca.SQLCode <> 0 THEN
  10438. rslt = 0
  10439. arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  10440. GOTO ext
  10441. END IF
  10442. ELSE
  10443. ld_workhour = 8
  10444. END IF
  10445. li_timehour = Hour(Time(arg_sdate))
  10446. IF li_timehour <= 12 THEN
  10447. ld_resthour = ld_workhour - (li_timehour - 8)
  10448. ELSEIF li_timehour > 12 And li_timehour <= 18 THEN
  10449. ld_resthour = ld_workhour - (li_timehour - 14 + 4)
  10450. ELSEIF li_timehour > 18 THEN
  10451. ld_resthour = ld_workhour - (li_timehour - 19 + 8)
  10452. END IF
  10453. IF ld_resthour >= arg_lasthour THEN
  10454. IF li_timehour + arg_lasthour <= 12 THEN
  10455. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00'))
  10456. ELSEIF li_timehour + arg_lasthour <= 18 THEN
  10457. IF li_timehour < 12 THEN
  10458. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 2) + ':00:00'))
  10459. ELSE
  10460. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00'))
  10461. END IF
  10462. ELSE
  10463. IF li_timehour < 12 THEN
  10464. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 3) + ':00:00'))
  10465. ELSEIF li_timehour < 18 THEN
  10466. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour + 1) + ':00:00'))
  10467. ELSE
  10468. arg_edate = DateTime(Date(arg_sdate),Time(String(li_timehour + arg_lasthour) + ':00:00'))
  10469. END IF
  10470. END IF
  10471. arg_resthour_e = ld_resthour - arg_lasthour
  10472. ELSE
  10473. IF uo_option_use_sc_date = 0 THEN
  10474. li_rdate = Int((arg_lasthour - ld_resthour) / 8 )
  10475. ld_resthour_tmp = Mod((arg_lasthour - ld_resthour),8)
  10476. IF ld_resthour_tmp = 0 THEN
  10477. ld_resthour_tmp = 8
  10478. li_rdate = li_rdate
  10479. ELSE
  10480. li_rdate = li_rdate + 1
  10481. END IF
  10482. IF 8 + ld_resthour_tmp <= 12 THEN
  10483. arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  10484. ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  10485. arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  10486. ELSE
  10487. arg_edate = DateTime(RelativeDate(Date(arg_sdate),li_rdate),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  10488. END IF
  10489. arg_resthour_e = ld_workhour - ld_resthour_tmp
  10490. ELSE
  10491. ld_resthour_tmp = arg_lasthour - ld_resthour
  10492. SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  10493. FROM u_sc_date
  10494. WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  10495. AND Proid = :arg_wrkgrpid
  10496. GROUP BY workdate
  10497. Order By Workdate;
  10498. DO WHILE ld_resthour_tmp > ld_workhour And sqlca.SQLCode = 0
  10499. ls_arg_date = String(ld_workdate_tmp,'yyyy-mm-dd')
  10500. ld_resthour_tmp = ld_resthour_tmp - ld_workhour
  10501. SELECT top 1 sum(banhour),workdate INTO :ld_workhour,:ld_workdate_tmp
  10502. FROM u_sc_date
  10503. WHERE CONVERT(CHAR(10), Workdate, 120) > :ls_arg_date
  10504. AND Proid = :arg_wrkgrpid
  10505. GROUP BY workdate
  10506. Order By Workdate;
  10507. LOOP
  10508. IF sqlca.SQLCode <> 0 THEN
  10509. rslt = 0
  10510. arg_msg = '查询工组日历失败'+sqlca.SQLErrText
  10511. GOTO ext
  10512. END IF
  10513. IF 8 + ld_resthour_tmp <= 12 THEN
  10514. arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp) + ':00:00'))
  10515. ELSEIF 8 + ld_resthour_tmp + 2 <= 18 THEN
  10516. arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 2) + ':00:00'))
  10517. ELSE
  10518. arg_edate = DateTime(Date(ld_workdate_tmp),Time(String(8 + ld_resthour_tmp + 3) + ':00:00'))
  10519. END IF
  10520. arg_resthour_e = ld_workhour - ld_resthour_tmp
  10521. END IF
  10522. END IF
  10523. ext:
  10524. RETURN rslt
  10525. end function
  10526. public function integer uof_create_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10527. Long ll_i
  10528. datetime server_dt
  10529. s_order_plan_tech arg_s_tech
  10530. uo_order_plan_tech uo_tech
  10531. uo_tech = Create uo_order_plan_tech
  10532. datastore ds_tree
  10533. ds_tree = Create datastore
  10534. ds_tree.DataObject = 'ds_ordermtrl_workgroup_tree_date'
  10535. ds_tree.SetTransObject(sqlca)
  10536. SELECT Top 1 getdate() Into :server_dt From u_user ;
  10537. IF sqlca.SQLCode <> 0 THEN
  10538. rslt = 0
  10539. arg_msg = "查询操作失败,日期 "
  10540. GOTO ext
  10541. END IF
  10542. ds_tree.Retrieve(arg_scid,arg_orderid)
  10543. ds_tree.setsort('printid desc')
  10544. ds_tree.sort()
  10545. FOR ll_i = 1 To ds_tree.RowCount()
  10546. arg_s_tech.scid = ds_tree.Object.scid[ll_i]
  10547. arg_s_tech.orderid = ds_tree.Object.orderid[ll_i]
  10548. arg_s_tech.billid = 0
  10549. arg_s_tech.rep = publ_operator
  10550. arg_s_tech.wrkgrpid = ds_tree.Object.swkpid[ll_i]
  10551. arg_s_tech.workgroupid = ds_tree.Object.workgroupid[ll_i]
  10552. arg_s_tech.printid = ds_tree.Object.printid[ll_i]
  10553. arg_s_tech.parentid = ds_tree.Object.parentid[ll_i]
  10554. arg_s_tech.qty = ds_tree.Object.orderqty[ll_i]
  10555. arg_s_tech.begindate = ds_tree.Object.begindate[ll_i]
  10556. arg_s_tech.enddate = ds_tree.Object.enddate[ll_i]
  10557. arg_s_tech.billdate = server_dt
  10558. IF uo_tech.Save(arg_s_tech,publ_operator,arg_msg,False) = 0 THEN
  10559. arg_msg = '建立相关派工单失败,'+arg_msg
  10560. rslt = 0
  10561. GOTO ext
  10562. END IF
  10563. IF uo_tech.audit(uo_tech.uo_billid,publ_operator,arg_msg,False) = 0 THEN
  10564. arg_msg = '审核相关派工单失败,'+arg_msg
  10565. rslt = 0
  10566. GOTO ext
  10567. END IF
  10568. NEXT
  10569. ext:
  10570. IF rslt = 0 THEN
  10571. ROLLBACK;
  10572. ELSEIF rslt = 1 And arg_ifcommit THEN
  10573. COMMIT;
  10574. END IF
  10575. Destroy uo_tech
  10576. Destroy ds_tree
  10577. RETURN rslt
  10578. end function
  10579. public function integer uof_delete_order_plan_tech (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10580. Long cnt
  10581. String ls_ordercode
  10582. Long ll_billid[]
  10583. Int li_flag[]
  10584. Long ll_mxbt = 1,ll_i
  10585. uo_order_plan_tech uo_tech
  10586. uo_tech = Create uo_order_plan_tech
  10587. //SELECT ordercode INTO :ls_ordercode
  10588. // FROM u_order_ml
  10589. // WHERE scid = :arg_scid
  10590. // And orderid = :arg_orderid;
  10591. //IF sqlca.SQLCode <> 0 THEN
  10592. // rslt = 0
  10593. // arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText
  10594. // GOTO ext
  10595. //END IF
  10596. //
  10597. //SELECT count(*)
  10598. // INTO :cnt
  10599. // FROM u_order_plan_tech
  10600. // WHERE scid = :arg_scid
  10601. // AND orderid = :arg_orderid
  10602. // And flag = 1;
  10603. //IF sqlca.SQLCode <> 0 THEN
  10604. // rslt = 0
  10605. // arg_msg = '查询指令单:'+ls_ordercode+'相关已审工艺派工单失败,'+sqlca.SQLErrText
  10606. // GOTO ext
  10607. //END IF
  10608. //
  10609. //IF cnt > 0 THEN
  10610. // rslt = 0
  10611. // arg_msg = '指令单:'+ls_ordercode+'已有相关已审工艺派工单,不能删除相关工艺派工单'
  10612. // GOTO ext
  10613. //END IF
  10614. DECLARE cur_plan CURSOR FOR
  10615. SELECT billid,flag
  10616. FROM u_order_plan_tech
  10617. WHERE scid = :arg_scid
  10618. And orderid = :arg_orderid;
  10619. OPEN cur_plan;
  10620. FETCH cur_plan Into :ll_billid[ll_mxbt],:li_flag[ll_mxbt];
  10621. DO WHILE sqlca.SQLCode = 0
  10622. ll_mxbt++
  10623. FETCH cur_plan Into :ll_billid[ll_mxbt],:li_flag[ll_mxbt];
  10624. LOOP
  10625. CLOSE cur_plan;
  10626. ll_mxbt = ll_mxbt - 1
  10627. FOR ll_i = 1 To ll_mxbt
  10628. IF li_flag[ll_i] = 1 THEN
  10629. IF uo_tech.caudit(ll_billid[ll_i],arg_msg,False) = 0 THEN
  10630. rslt = 0
  10631. arg_msg = '撤审相关工艺派工单失败,'+arg_msg
  10632. GOTO ext
  10633. END IF
  10634. END IF
  10635. IF uo_tech.del(ll_billid[ll_i],arg_msg,False) = 0 THEN
  10636. rslt = 0
  10637. arg_msg = '删除相关工艺派工单失败,'+arg_msg
  10638. GOTO ext
  10639. END IF
  10640. NEXT
  10641. ext:
  10642. IF rslt = 0 THEN
  10643. ROLLBACK;
  10644. ELSEIF rslt = 1 And arg_ifcommit THEN
  10645. COMMIT;
  10646. END IF
  10647. Destroy uo_tech
  10648. RETURN rslt
  10649. end function
  10650. public function integer uof_order_cmp_wrk_date (long arg_scid, long arg_orderid, datetime arg_sdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10651. Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[]
  10652. Decimal l_lastdays[],l_lasthour[]
  10653. String l_wkpname[],l_groupstr[]
  10654. Long j,cnt_2,ll_count,ll_j
  10655. DateTime ld_sdate,ld_edate,ld_update_edate
  10656. DateTime ld_sdate_max
  10657. Decimal ld_resthour,ld_workhour,ld_resthour_e
  10658. Int li_timehour
  10659. Int li_rdate
  10660. Decimal ld_resthour_tmp
  10661. DateTime ld_workdate_tmp
  10662. Long l_printid_gr[]
  10663. String l_groupstr_gr[]
  10664. Long cnt_gr
  10665. DateTime ld_sdate_gr[]
  10666. Long k
  10667. Boolean lb_if_find = False
  10668. String ls_arg_date
  10669. DateTime ldt_tmp
  10670. Long ll_i
  10671. ld_sdate_max = arg_sdate
  10672. j = 1
  10673. DECLARE cur_wrkmx_2 CURSOR FOR
  10674. SELECT wrkgrpid,
  10675. owrkgrpid,
  10676. wkpname,
  10677. ifjd,
  10678. printid,
  10679. lastdays,
  10680. groupstr,
  10681. lasthour
  10682. FROM u_OrderMtrl_workgroup
  10683. WHERE orderid = :arg_orderid
  10684. AND scid = :arg_scid
  10685. Order By printid;
  10686. OPEN cur_wrkmx_2;
  10687. FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j],
  10688. :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j],
  10689. :l_groupstr[j],:l_lasthour[j];
  10690. DO WHILE sqlca.SQLCode = 0
  10691. j++
  10692. FETCH cur_wrkmx_2 INTO :l_wrkgrpid[j],:l_owrkgrpid[j],
  10693. :l_wkpname[j],:l_ifjd[j],:l_printid[j],:l_lastdays[j],
  10694. :l_groupstr[j],:l_lasthour[j];
  10695. LOOP
  10696. CLOSE cur_wrkmx_2;
  10697. cnt_2 = j - 1
  10698. FOR ll_i = 1 To cnt_2
  10699. ll_count = 0
  10700. IF l_ifjd[ll_i] = 1 THEN
  10701. IF l_groupstr[ll_i] <> '' THEN
  10702. lb_if_find = False
  10703. FOR k = 1 To cnt_gr
  10704. IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN
  10705. ld_sdate = ld_sdate_gr[k]
  10706. lb_if_find = True
  10707. EXIT
  10708. END IF
  10709. NEXT
  10710. IF lb_if_find = False THEN
  10711. ld_sdate = ld_sdate_max
  10712. END IF
  10713. ELSE
  10714. ld_sdate = ld_sdate_max
  10715. END IF
  10716. IF uo_cmp_wrk_edate(ld_sdate,l_wrkgrpid[ll_i],l_lasthour[ll_i],ld_edate,ld_resthour_e,arg_msg) = 0 THEN
  10717. rslt = 0
  10718. GOTO ext
  10719. END IF
  10720. UPDATE u_ordermtrl_workgroup
  10721. SET begindate = :ld_sdate,
  10722. requiredate = :ld_edate
  10723. WHERE orderid = :arg_orderid
  10724. AND scid = :arg_scid
  10725. AND wrkGrpid = :l_wrkgrpid[ll_i]
  10726. AND owrkgrpid = :l_owrkgrpid[ll_i]
  10727. And wkpname = :l_wkpname[ll_i];
  10728. IF sqlca.SQLCode <> 0 THEN
  10729. rslt = 0
  10730. arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText
  10731. GOTO ext
  10732. END IF
  10733. IF l_groupstr[ll_i] <> '' THEN
  10734. lb_if_find = False
  10735. IF ld_resthour_e > 0 THEN
  10736. IF Hour(Time(ld_edate)) = 12 THEN
  10737. ld_sdate = DateTime(Date(ld_edate),Time('14:00:00'))
  10738. ELSEIF Hour(Time(ld_edate)) = 18 THEN
  10739. ld_sdate = DateTime(Date(ld_edate),Time('19:00:00'))
  10740. ELSE
  10741. ld_sdate = ld_edate
  10742. END IF
  10743. ELSE
  10744. ld_sdate = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00'))
  10745. END IF
  10746. FOR k = 1 To cnt_gr
  10747. IF l_groupstr_gr[k] = l_groupstr[ll_i] THEN
  10748. ld_sdate_gr[k] = ld_sdate
  10749. l_printid_gr[k] = l_printid[ll_i]
  10750. lb_if_find = True
  10751. EXIT
  10752. END IF
  10753. NEXT
  10754. IF lb_if_find = False THEN
  10755. cnt_gr++
  10756. l_printid_gr[cnt_gr] = l_printid[ll_i]
  10757. l_groupstr_gr[cnt_gr] = l_groupstr[ll_i]
  10758. ld_sdate_gr[cnt_gr] = ld_sdate
  10759. END IF
  10760. END IF
  10761. FOR ll_j = ll_i + 1 To cnt_2
  10762. IF l_ifjd[ll_j] = 1 And &
  10763. l_printid[ll_j] = l_printid[ll_i] THEN
  10764. IF l_groupstr[ll_j] <> '' THEN
  10765. lb_if_find = False
  10766. FOR k = 1 To cnt_gr
  10767. IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN
  10768. ld_sdate = ld_sdate_gr[k]
  10769. lb_if_find = True
  10770. EXIT
  10771. END IF
  10772. NEXT
  10773. IF lb_if_find = False THEN
  10774. ld_sdate = ld_sdate_max
  10775. END IF
  10776. ELSE
  10777. ld_sdate = ld_sdate_max
  10778. END IF
  10779. IF uo_cmp_wrk_edate(ld_sdate,l_wrkgrpid[ll_i],l_lasthour[ll_i],ld_update_edate,ld_resthour_e,arg_msg) = 0 THEN
  10780. rslt = 0
  10781. GOTO ext
  10782. END IF
  10783. UPDATE u_ordermtrl_workgroup
  10784. SET begindate = :ld_sdate,
  10785. requiredate = :ld_update_edate
  10786. WHERE orderid = :arg_orderid
  10787. AND scid = :arg_scid
  10788. AND wrkGrpid = :l_wrkgrpid[ll_j]
  10789. AND owrkgrpid = :l_owrkgrpid[ll_j]
  10790. And wkpname = :l_wkpname[ll_j];
  10791. IF sqlca.SQLCode <> 0 THEN
  10792. rslt = 0
  10793. arg_msg = '更新工组开始及完成时间失败'+sqlca.SQLErrText
  10794. GOTO ext
  10795. END IF
  10796. IF l_groupstr[ll_j] <> '' THEN
  10797. lb_if_find = False
  10798. IF ld_resthour_e > 0 THEN
  10799. IF Hour(Time(ld_update_edate)) = 12 THEN
  10800. ld_sdate = DateTime(Date(ld_update_edate),Time('14:00:00'))
  10801. ELSEIF Hour(Time(ld_edate)) = 18 THEN
  10802. ld_sdate = DateTime(Date(ld_update_edate),Time('19:00:00'))
  10803. ELSE
  10804. ld_sdate = ld_update_edate
  10805. END IF
  10806. ELSE
  10807. ld_sdate = DateTime(RelativeDate(Date(ld_update_edate),1),Time('8:00:00'))
  10808. END IF
  10809. FOR k = 1 To cnt_gr
  10810. IF l_groupstr_gr[k] = l_groupstr[ll_j] THEN
  10811. ld_sdate_gr[k] = ld_sdate
  10812. l_printid_gr[k] = l_printid[ll_j]
  10813. lb_if_find = True
  10814. EXIT
  10815. END IF
  10816. NEXT
  10817. IF lb_if_find = False THEN
  10818. cnt_gr++
  10819. l_printid_gr[cnt_gr] = l_printid[ll_j]
  10820. l_groupstr_gr[cnt_gr] = l_groupstr[ll_j]
  10821. ld_sdate_gr[cnt_gr] = ld_sdate
  10822. END IF
  10823. END IF
  10824. IF ld_edate < ld_update_edate THEN
  10825. ld_edate = ld_update_edate
  10826. END IF
  10827. ll_count++
  10828. END IF
  10829. NEXT
  10830. ll_i = ll_i + ll_count
  10831. IF Hour(Time(ld_edate)) = 18 THEN
  10832. ldt_tmp = DateTime(RelativeDate(Date(ld_edate),1),Time('8:00:00'))
  10833. ELSEIF Hour(Time(ld_edate)) = 12 THEN
  10834. ldt_tmp = DateTime(Date(ld_edate),Time('14:00:00'))
  10835. ELSE
  10836. ldt_tmp = ld_edate
  10837. END IF
  10838. IF ld_sdate_max < ldt_tmp THEN
  10839. ld_sdate_max = ldt_tmp
  10840. END IF
  10841. END IF
  10842. NEXT
  10843. ext:
  10844. IF rslt = 0 THEN
  10845. ROLLBACK;
  10846. ELSEIF rslt = 1 And arg_ifcommit THEN
  10847. COMMIT;
  10848. END IF
  10849. RETURN rslt
  10850. end function
  10851. public function integer mod_order_requiredate (long arg_scid, long arg_orderid, datetime arg_oridate, datetime arg_newdate, datetime arg_oriredate, datetime arg_newredate, string arg_reason, boolean arg_ifcmpdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10852. DateTime server_dt
  10853. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  10854. rslt = 0
  10855. GOTO ext
  10856. END IF
  10857. IF Date(arg_oridate) = Date(arg_newdate) And Date(arg_oriredate) = Date(arg_newredate) THEN
  10858. rslt = 0
  10859. arg_msg = '新日期与原日期相同,无须更新,操作取消'
  10860. GOTO ext
  10861. END IF
  10862. arg_reason = Trim(arg_reason)
  10863. Long cnt
  10864. Long ll_printid
  10865. cnt = 0
  10866. SELECT count(*) INTO :cnt
  10867. FROM u_order_ml_perfinishdate_log
  10868. WHERE scid = :arg_scid
  10869. AND orderid = :arg_orderid
  10870. And logtype = 1;
  10871. IF sqlca.SQLCode <> 0 THEN
  10872. rslt = 0
  10873. arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText
  10874. GOTO ext
  10875. END IF
  10876. IF cnt = 0 THEN
  10877. ll_printid = 0
  10878. ELSE
  10879. SELECT max(printid) INTO :ll_printid
  10880. FROM u_order_ml_perfinishdate_log
  10881. WHERE scid = :arg_scid
  10882. AND orderid = :arg_orderid
  10883. And logtype = 1 ;
  10884. IF sqlca.SQLCode <> 0 THEN
  10885. rslt = 0
  10886. arg_msg = '查询预计完成日期修改日志失败'+'~n'+sqlca.SQLErrText
  10887. GOTO ext
  10888. END IF
  10889. END IF
  10890. ll_printid++
  10891. SELECT Top 1 getdate() Into :server_dt From u_user ;
  10892. IF sqlca.SQLCode <> 0 THEN
  10893. rslt = 0
  10894. arg_msg = "查询操作失败,日期 "
  10895. GOTO ext
  10896. END IF
  10897. INSERT INTO u_order_ml_perfinishdate_log
  10898. (scid,
  10899. orderid,
  10900. printid,
  10901. logtype,
  10902. oridate,
  10903. newdate,
  10904. oriredate,
  10905. newredate,
  10906. reason,
  10907. modemp,
  10908. moddate)
  10909. VALUES
  10910. (:arg_scid,
  10911. :arg_orderid,
  10912. :ll_printid,
  10913. 1,
  10914. :arg_oridate,
  10915. :arg_newdate,
  10916. :arg_oriredate,
  10917. :arg_newredate,
  10918. :arg_reason,
  10919. :publ_operator,
  10920. :server_dt);
  10921. IF sqlca.SQLCode <> 0 THEN
  10922. rslt = 0
  10923. arg_msg = "因网络或其它原因导致插入预计完成日期修改日志操作失败"+"~n"+sqlca.SQLErrText
  10924. GOTO ext
  10925. END IF
  10926. UPDATE u_order_ml
  10927. SET orderdate = :arg_newdate,
  10928. requiredate = :arg_newredate
  10929. WHERE scid = :arg_scid
  10930. And orderid = :arg_orderid;
  10931. IF sqlca.SQLCode <> 0 THEN
  10932. rslt = 0
  10933. arg_msg = '更新预计完成日期失败'+'~n'+sqlca.SQLErrText
  10934. GOTO ext
  10935. END IF
  10936. IF arg_ifcmpdate THEN
  10937. DateTime ld_sdate_max
  10938. ld_sdate_max = DateTime(Date(arg_newdate),Time('8:00:00'))
  10939. IF uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 THEN
  10940. arg_msg = '计算工组日期失败,'+arg_msg
  10941. rslt = 0
  10942. GOTO ext
  10943. END IF
  10944. END IF
  10945. ext:
  10946. IF rslt = 0 THEN
  10947. ROLLBACK;
  10948. ELSEIF arg_ifcommit And rslt = 1 THEN
  10949. COMMIT;
  10950. END IF
  10951. Return(rslt)
  10952. end function
  10953. public function integer uof_update_outtypestr_zl (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  10954. Long ll_scid
  10955. Long ll_i,ll_j,ll_k,ll_l
  10956. Long ll_mxbt
  10957. String ls_outtypestr_p
  10958. String ls_outtypestr[],ls_empty[]
  10959. Long ll_mtrlid,ll_orderid_mx,ll_porderid_mx
  10960. String ls_status,ls_woodcode,ls_pcode
  10961. String ls_outtypestr_zl
  10962. DateTime server_dt
  10963. IF UpperBound(arg_orderid) <= 0 THEN
  10964. rslt = 1
  10965. GOTO ext
  10966. END IF
  10967. SELECT Top 1 getdate() Into :server_dt From u_user ;
  10968. IF sqlca.SQLCode <> 0 THEN
  10969. rslt = 0
  10970. arg_msg = "查询操作失败,日期 "
  10971. GOTO ext
  10972. END IF
  10973. ll_scid = arg_scid[1]
  10974. datastore ds_outtype,ds_mtrlid,ds_mx
  10975. ds_outtype = Create datastore
  10976. ds_outtype.DataObject = 'ds_order_zl_outtypestr_cnt'
  10977. ds_outtype.SetTransObject(sqlca)
  10978. ds_mtrlid = Create datastore
  10979. ds_mtrlid.DataObject = 'ds_order_zl_outtypestr_mtrlid'
  10980. ds_mtrlid.SetTransObject(sqlca)
  10981. ds_mx = Create datastore
  10982. ds_mx.DataObject = 'ds_order_zl_outtypestr_mx'
  10983. ds_mx.SetTransObject(sqlca)
  10984. ds_outtype.Retrieve(ll_scid,arg_orderid)
  10985. FOR ll_i = 1 To ds_outtype.RowCount()
  10986. ls_outtypestr_p = ds_outtype.Object.outtypestr[ll_i]
  10987. ls_outtypestr = ls_empty
  10988. ll_mxbt = 0
  10989. FOR ll_j = 1 To ds_outtype.Object.maxcnt[ll_i]
  10990. //取组号
  10991. ls_outtypestr_zl = getid(0,'OUT',Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  10992. IF ls_outtypestr_zl = "err" THEN
  10993. rslt = 0
  10994. arg_msg = "无法获取组号"+"~n"+sqlca.SQLErrText
  10995. GOTO ext
  10996. END IF
  10997. //
  10998. ll_mxbt++
  10999. ls_outtypestr[ll_mxbt] = ls_outtypestr_zl
  11000. NEXT
  11001. ds_mtrlid.Retrieve(ll_scid,arg_orderid,ls_outtypestr_p)
  11002. FOR ll_k = 1 To ds_mtrlid.RowCount()
  11003. ll_mtrlid = ds_mtrlid.Object.u_order_ml_mtrlid[ll_k]
  11004. ls_status = ds_mtrlid.Object.u_order_ml_status_mode[ll_k]
  11005. ls_woodcode = ds_mtrlid.Object.u_order_ml_woodcode[ll_k]
  11006. ls_pcode = ds_mtrlid.Object.u_order_ml_pcode[ll_k]
  11007. ll_porderid_mx = ds_mtrlid.Object.u_order_ml_porderid[ll_k]
  11008. ds_mx.Retrieve(ll_scid,ll_porderid_mx,ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ls_outtypestr_p)
  11009. FOR ll_l = 1 To ds_mx.RowCount()
  11010. IF ll_l > ll_mxbt THEN EXIT
  11011. ll_orderid_mx = ds_mx.Object.u_order_ml_orderid[ll_l]
  11012. UPDATE u_order_ml
  11013. SET outtypestr = :ls_outtypestr[ll_l]
  11014. WHERE scid = :ll_scid
  11015. And orderid = :ll_orderid_mx;
  11016. IF sqlca.SQLCode <> 0 THEN
  11017. rslt = 0
  11018. arg_msg = '更新指令单组号失败,'+sqlca.SQLErrText
  11019. GOTO ext
  11020. END IF
  11021. NEXT
  11022. NEXT
  11023. NEXT
  11024. ext:
  11025. IF rslt = 0 THEN
  11026. ROLLBACK;
  11027. ELSEIF rslt = 1 And arg_ifcommit THEN
  11028. COMMIT;
  11029. END IF
  11030. RETURN rslt
  11031. end function
  11032. public function integer uof_tryfinish_packorder2 (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt
  11033. rslt = 1
  11034. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  11035. IF rslt = 0 THEN GOTO ext
  11036. Int li_ifpackpro,li_orderype_mtrl
  11037. Long ll_porderid,cnt
  11038. Decimal ld_minrate,ld_qty
  11039. DateTime null_dt
  11040. SetNull(null_dt)
  11041. //如果不是指令单,或者合并指令单的情况不作处理
  11042. IF porderid = 0 THEN
  11043. rslt = 1
  11044. GOTO ext
  11045. END IF
  11046. SELECT u_mtrldef.ordertype,u_mtrldef.ifpackpro,u_order_ml.porderid
  11047. INTO :li_orderype_mtrl,:li_ifpackpro,:ll_porderid
  11048. FROM u_mtrldef,u_order_ml
  11049. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  11050. AND u_order_ml.orderid = :pzlorderid
  11051. And u_order_ml.scid = :arg_scid;
  11052. IF sqlca.SQLCode <> 0 THEN
  11053. rslt = 0
  11054. arg_msg = '查询组合配置整排指令是否指令单分离属性失败,'+sqlca.SQLErrText
  11055. GOTO ext
  11056. END IF
  11057. IF li_ifpackpro <> 4 THEN //不是整排散进组合配置包件产品,退出函数,否则检查主计划相关指令单是否全部完成
  11058. rslt = 1
  11059. GOTO ext
  11060. END IF
  11061. //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例
  11062. //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量
  11063. SELECT count(*) INTO :cnt
  11064. FROM u_order_ml
  11065. WHERE u_order_ml.pzlorderid = :pzlorderid
  11066. AND u_order_ml.scid = :arg_scid
  11067. AND u_order_ml.AcmpQty < u_order_ml.orderqty
  11068. And u_order_ml.ordertype = 4;
  11069. IF sqlca.SQLCode <> 0 THEN
  11070. rslt = 0
  11071. IF li_orderype_mtrl = 0 THEN
  11072. arg_msg = '查询组合配置包件产品主生产计划相关分子件指令单是否全部完成失败'+sqlca.SQLErrText
  11073. ELSE
  11074. arg_msg = '查询组合配置包件产品主生产计划【分离指令】相关子件指令单是否全部完成失败'+sqlca.SQLErrText
  11075. END IF
  11076. GOTO ext
  11077. END IF
  11078. IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态
  11079. UPDATE u_order_ml
  11080. SET status = 5,
  11081. accomplishdate = getdate(),
  11082. accomplishemp = :publ_operator,
  11083. acmpqty = orderqty
  11084. WHERE ( u_order_ml.orderid = :pzlorderid )
  11085. And (u_order_ml.scid = :arg_scid);
  11086. IF sqlca.SQLCode <> 0 THEN
  11087. rslt = 0
  11088. IF li_orderype_mtrl = 0 THEN
  11089. arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText
  11090. ELSE
  11091. arg_msg = "更新组合配置包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText
  11092. END IF
  11093. GOTO ext
  11094. END IF
  11095. ELSE
  11096. //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数
  11097. SELECT min(AcmpQty/orderqty) INTO :ld_minrate
  11098. FROM u_order_ml
  11099. WHERE u_order_ml.pzlorderid = :pzlorderid
  11100. AND u_order_ml.scid = :arg_scid
  11101. And u_order_ml.ordertype = 4;
  11102. IF sqlca.SQLCode <> 0 THEN
  11103. rslt = 0
  11104. IF li_orderype_mtrl = 0 THEN
  11105. arg_msg = '查询相关组合配置包件产品主生产计划子件指令完成率失败'+"~n"+sqlca.SQLErrText
  11106. ELSE
  11107. arg_msg = '查询相关组合配置包件产品主生产计划【分离指令】子件指令完成率失败'+"~n"+sqlca.SQLErrText
  11108. END IF
  11109. GOTO ext
  11110. END IF
  11111. UPDATE u_order_ml
  11112. SET status = 1,
  11113. accomplishdate = :null_dt,
  11114. accomplishemp = '',
  11115. acmpqty = orderqty * :ld_minrate
  11116. WHERE ( u_order_ml.orderid = :pzlorderid )
  11117. And (u_order_ml.scid = :arg_scid);
  11118. IF sqlca.SQLCode <> 0 THEN
  11119. rslt = 0
  11120. IF li_orderype_mtrl = 0 THEN
  11121. arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText
  11122. ELSE
  11123. arg_msg = "更新组合配置包件产品主生产计划【分离指令】完成状态失败"+"~n"+sqlca.SQLErrText
  11124. END IF
  11125. GOTO ext
  11126. END IF
  11127. END IF
  11128. IF li_orderype_mtrl = 1 THEN
  11129. SELECT isnull(sum(AcmpQty),0) INTO :ld_qty
  11130. FROM u_order_ml
  11131. WHERE u_order_ml.porderid = :ll_porderid
  11132. AND u_order_ml.ordertype = 4
  11133. AND u_order_ml.pzlorderid = 0
  11134. And u_order_ml.mtrlid = :mtrlid;
  11135. IF sqlca.SQLCode <> 0 THEN
  11136. rslt = 0
  11137. arg_msg = '查询组合配置包件产品主生产计划相关【分离指令】完数失败'+"~n"+sqlca.SQLErrText
  11138. GOTO ext
  11139. END IF
  11140. UPDATE u_order_ml
  11141. SET status = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then 5 else 1 END,
  11142. accomplishdate = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then getdate() else :null_dt END,
  11143. accomplishemp = case when u_order_ml.orderqty - u_order_ml.stopqty = :ld_qty then :publ_operator else '' END,
  11144. acmpqty = :ld_qty
  11145. WHERE ( u_order_ml.orderid = :ll_porderid )
  11146. And (u_order_ml.scid = :arg_scid);
  11147. IF sqlca.SQLCode <> 0 THEN
  11148. rslt = 0
  11149. arg_msg = "更新组合配置包件产品主生产计划完成状态失败"+"~n"+sqlca.SQLErrText
  11150. GOTO ext
  11151. END IF
  11152. END IF
  11153. ext:
  11154. IF rslt = 0 THEN
  11155. ROLLBACK;
  11156. ELSEIF rslt = 1 And arg_ifcommit THEN
  11157. COMMIT;
  11158. END IF
  11159. RETURN rslt
  11160. end function
  11161. public function integer c_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  11162. Long ls_i,ll_fp
  11163. String ls_mtrlcode
  11164. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  11165. rslt = 0
  11166. GOTO ext
  11167. END IF
  11168. uo_saletask uo_task
  11169. uo_task = Create uo_saletask
  11170. uo_task.commit_transaction = sqlca
  11171. uo_saletask_ll uo_task_ll
  11172. uo_task_ll = Create uo_saletask_ll
  11173. uo_task_ll.commit_transaction = sqlca
  11174. uo_mtrlware_assign uo_mtrlware_fp
  11175. uo_mtrlware_fp = Create uo_mtrlware_assign
  11176. uo_mtrlware_fp.commit_transaction = sqlca
  11177. uo_getbar uo_get
  11178. uo_get = Create uo_getbar
  11179. datastore ds_fp_del
  11180. ds_fp_del = Create datastore
  11181. ds_fp_del.DataObject = 'ds_order_fp_del'
  11182. ds_fp_del.SetTransObject(sqlca)
  11183. Decimal finishqty,ld_sqty,ld_oqty
  11184. DateTime null_dt
  11185. SetNull(null_dt)
  11186. IF uo_option_if_oa_order_ml = -1000 THEN
  11187. rslt = 0
  11188. arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!'
  11189. GOTO ext
  11190. END IF
  11191. IF uo_option_order_ml_secaudit = -1000 THEN
  11192. rslt = 0
  11193. arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!'
  11194. GOTO ext
  11195. END IF
  11196. IF uo_option_if_oa_order_zl = -1000 THEN
  11197. rslt = 0
  11198. arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!'
  11199. GOTO ext
  11200. END IF
  11201. IF uo_option_order_ml_zl_secaudit = -1000 THEN
  11202. rslt = 0
  11203. arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!'
  11204. GOTO ext
  11205. END IF
  11206. IF uo_option_order_bh_use_yc = -1000 THEN
  11207. rslt = 0
  11208. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  11209. GOTO ext
  11210. END IF
  11211. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  11212. IF rslt = 0 THEN GOTO ext
  11213. IF ctmint > 0 THEN
  11214. arg_msg = '单据已截数,不能操作'
  11215. rslt = 0
  11216. GOTO ext
  11217. END IF
  11218. //IF pzlorderid > 0 THEN
  11219. // arg_msg = '自动生成的指令,不能操作'
  11220. // rslt = 0
  11221. // GOTO ext
  11222. //END IF
  11223. //yyx20140723
  11224. //胚板指令终审自动建立条码生成单
  11225. IF uo_option_order_zl_auto_getbar = 1 And ordertype = 4 And ifpban = 1 THEN
  11226. Long ll_getbarid
  11227. SELECT getbarid Into :ll_getbarid From u_getbar Where ifrel = 1 And orderid = :arg_orderid And scid = :arg_scid;
  11228. IF sqlca.SQLCode = -1 THEN
  11229. arg_msg = '查询胚板指令单自动建立的条码生成单失败,'+sqlca.SQLErrText
  11230. rslt = 0
  11231. GOTO ext
  11232. ELSEIF sqlca.SQLCode = 100 THEN
  11233. ll_getbarid = 0
  11234. END IF
  11235. IF ll_getbarid > 0 THEN
  11236. IF uo_get.c_auditing(ll_getbarid,False,arg_msg,False) = 0 THEN
  11237. arg_msg = '撤审胚板指令单自动建立的条码生成单失败,'+arg_msg
  11238. rslt = 0
  11239. GOTO ext
  11240. END IF
  11241. IF uo_get.del(ll_getbarid,arg_msg,False) = 0 THEN
  11242. arg_msg = '删除胚板指令单自动建立的条码生成单失败,'+arg_msg
  11243. rslt = 0
  11244. GOTO ext
  11245. END IF
  11246. END IF
  11247. END IF
  11248. //end_yyx20140723
  11249. IF ordertype = 4 THEN
  11250. IF ifauto_optype = 0 THEN
  11251. IF iffg = 1 And ifauto = 1 THEN
  11252. arg_msg = '自动生成的返工指令,不能手动撤审,需撤审相应返工物料运算批'
  11253. rslt = 0
  11254. GOTO ext
  11255. END IF
  11256. END IF
  11257. END IF
  11258. IF ordertype <> 4 THEN
  11259. IF uo_option_order_ml_secaudit = 1 And uo_option_if_oa_order_ml = 1 And audit_buildtype = 0 THEN
  11260. IF f_check_if_oaflow_caudit(arg_scid,arg_orderid,36,arg_msg ) = 0 THEN
  11261. rslt = 0
  11262. GOTO ext
  11263. END IF
  11264. END IF
  11265. ELSE
  11266. IF uo_option_order_ml_zl_secaudit = 1 And uo_option_if_oa_order_zl = 1 And audit_buildtype = 0 THEN
  11267. IF f_check_if_oaflow_caudit(arg_scid,arg_orderid,1138,arg_msg ) = 0 THEN
  11268. rslt = 0
  11269. GOTO ext
  11270. END IF
  11271. END IF
  11272. END IF
  11273. IF Status <> 7 THEN
  11274. rslt = 0
  11275. arg_msg = "生产计划只有在待二审状态才可以执行撤消审核,请核对"
  11276. GOTO ext
  11277. END IF
  11278. IF scllflag = 1 THEN
  11279. rslt = 0
  11280. arg_msg = "计划已执行用料审批,请先用料撤审"
  11281. GOTO ext
  11282. END IF
  11283. //查询是否已开生产指令单终止单
  11284. cnt = 0
  11285. SELECT count(*)
  11286. INTO :cnt
  11287. FROM u_order_ml_stop
  11288. WHERE scid = :arg_scid
  11289. And orderid = :arg_orderid;
  11290. IF sqlca.SQLCode <> 0 THEN
  11291. arg_msg = '查询是否有相关的生产指令单终止单失败'
  11292. rslt = 0
  11293. GOTO ext
  11294. END IF
  11295. IF cnt > 0 THEN
  11296. rslt = 0
  11297. arg_msg = '本生产计划已开了相关的生产指令单终止单,不能撤审'
  11298. GOTO ext
  11299. END IF
  11300. //
  11301. //查询是否有相关的成品生产计划
  11302. cnt = 0
  11303. SELECT count(*)
  11304. INTO :cnt
  11305. FROM u_order_ml
  11306. WHERE scid = :arg_scid
  11307. And pforderid = :arg_orderid;
  11308. IF sqlca.SQLCode <> 0 THEN
  11309. arg_msg = '查询是否有相关的成品生产计划失败'
  11310. rslt = 0
  11311. GOTO ext
  11312. END IF
  11313. IF cnt > 0 THEN
  11314. rslt = 0
  11315. arg_msg = '本生产计划已开了相关的成品生产计划,不能撤审'
  11316. GOTO ext
  11317. END IF
  11318. //
  11319. SELECT mtrlcode INTO :ls_mtrlcode
  11320. FROM u_mtrldef
  11321. Where mtrlid = :mtrlid;
  11322. IF sqlca.SQLCode <> 0 THEN
  11323. arg_msg = '查询产品编号失败'
  11324. rslt = 0
  11325. GOTO ext
  11326. END IF
  11327. IF getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  11328. rslt = 0
  11329. GOTO ext
  11330. END IF
  11331. //检查报数单
  11332. SELECT sum(finishqty) INTO :finishqty
  11333. FROM u_OrderMtrl_workgroup
  11334. WHERE orderid = :arg_orderid
  11335. And scid = :scid;
  11336. IF sqlca.SQLCode <> 0 THEN
  11337. arg_msg = '查询生产计划工组报数失败'
  11338. rslt = 0
  11339. GOTO ext
  11340. END IF
  11341. IF finishqty > 0 THEN
  11342. arg_msg = '生产计划已有工组报数,不能撤审'
  11343. rslt = 0
  11344. GOTO ext
  11345. END IF
  11346. //条码进度
  11347. SELECT sum(sqty),sum(oqty) INTO :ld_sqty,:ld_oqty
  11348. FROM u_OrderMtrl_workgroup_tree
  11349. WHERE orderid = :arg_orderid
  11350. And scid = :scid;
  11351. IF sqlca.SQLCode <> 0 THEN
  11352. arg_msg = '查询生产计划工组报数失败'
  11353. rslt = 0
  11354. GOTO ext
  11355. END IF
  11356. IF ld_sqty > 0 THEN
  11357. arg_msg = '生产计划已有工组完成数,不能撤审'
  11358. rslt = 0
  11359. GOTO ext
  11360. END IF
  11361. IF ld_oqty > 0 THEN
  11362. arg_msg = '生产计划已有工组接收数,不能撤审'
  11363. rslt = 0
  11364. GOTO ext
  11365. END IF
  11366. //检查已完成数量
  11367. IF AcmpQty > 0 THEN
  11368. arg_msg = '生产计划已有进仓数,不能撤审'
  11369. rslt = 0
  11370. GOTO ext
  11371. END IF
  11372. IF planqty > 0 THEN
  11373. arg_msg = '生产计划已有排程数,不能撤审'
  11374. rslt = 0
  11375. GOTO ext
  11376. END IF
  11377. //检查工序已开单数,已确认完成数
  11378. Decimal ld_amount
  11379. Decimal ld_finishqty
  11380. ld_amount = 0
  11381. SELECT sum(isnull(v_order_procode.amount,0)) INTO :ld_amount
  11382. FROM v_order_procode
  11383. WHERE v_order_procode.orderid = :arg_orderid
  11384. And v_order_procode.scid = :scid;
  11385. IF sqlca.SQLCode <> 0 THEN
  11386. rslt = 0
  11387. arg_msg = "因网络或其它原因导致查询工序已开单数操作失败"+"~n"+sqlca.SQLErrText
  11388. GOTO ext
  11389. END IF
  11390. IF ld_amount > 0 THEN
  11391. arg_msg = '生产计划工序已有开单数,不能撤审'
  11392. rslt = 0
  11393. GOTO ext
  11394. END IF
  11395. ld_finishqty = 0
  11396. SELECT sum(U_OrderRqwp.finishqty) INTO :ld_finishqty
  11397. FROM U_OrderRqwp
  11398. WHERE ( U_OrderRqwp.scid = :scid ) AND
  11399. ( U_OrderRqwp.orderid = :arg_orderid ) ;
  11400. IF sqlca.SQLCode <> 0 THEN
  11401. rslt = 0
  11402. arg_msg = "因网络或其它原因导致查询工序已确认完成数操作失败"+"~n"+sqlca.SQLErrText
  11403. GOTO ext
  11404. END IF
  11405. IF ld_finishqty > 0 THEN
  11406. arg_msg = '生产计划工序已确认完成数,不能撤审'
  11407. rslt = 0
  11408. GOTO ext
  11409. END IF
  11410. //检查派工数量
  11411. cnt = 0
  11412. SELECT count(*)
  11413. INTO :cnt
  11414. FROM u_order_planmx
  11415. WHERE ( u_order_planmx.orderid = :arg_orderid ) AND
  11416. ( u_order_planmx.scid = :arg_scid );
  11417. IF sqlca.SQLCode <> 0 THEN
  11418. rslt = 0
  11419. arg_msg = "因网络或其它原因导致查询计划是否已开生产派工单操作失败"+"~n"+sqlca.SQLErrText
  11420. GOTO ext
  11421. END IF
  11422. IF cnt > 0 THEN
  11423. rslt = 0
  11424. arg_msg = "生产计划已经有相关派工单,不可以撤消审核,请先删除相关单据再撤审"
  11425. GOTO ext
  11426. END IF
  11427. //检查指令单
  11428. IF ordertype <> 4 THEN
  11429. IF uof_check_if_zl(arg_scid,arg_orderid,arg_msg) = 0 THEN
  11430. rslt = 0
  11431. GOTO ext
  11432. END IF
  11433. END IF
  11434. //检查进数量
  11435. cnt = 0
  11436. SELECT count(*)
  11437. INTO :cnt
  11438. FROM u_inware,u_inwaremx
  11439. WHERE ( u_inware.billtype = 3 ) AND
  11440. ( u_inware.scid = u_inwaremx.scid ) AND
  11441. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  11442. ( u_inwaremx.relid = :arg_orderid ) AND
  11443. ( u_inwaremx.scid = :arg_scid );
  11444. IF sqlca.SQLCode <> 0 THEN
  11445. rslt = 0
  11446. arg_msg = "因网络或其它原因导致查询计划是否已开生产进仓单操作失败"+"~n"+sqlca.SQLErrText
  11447. GOTO ext
  11448. END IF
  11449. IF cnt > 0 THEN
  11450. rslt = 0
  11451. arg_msg = "生产计划已经有相关生产进仓单据,不可以撤消审核,请先删除相关单据再撤审"
  11452. GOTO ext
  11453. END IF
  11454. //检查领料数量
  11455. cnt = 0
  11456. SELECT count(*)
  11457. INTO :cnt
  11458. FROM u_outware,u_outwaremx
  11459. WHERE ( u_outware.billtype = 3 ) AND
  11460. ( u_outware.scid = u_outwaremx.scid ) AND
  11461. ( u_outware.outwareid = u_outwaremx.outwareid ) AND
  11462. ( u_outwaremx.relid = :arg_orderid ) AND
  11463. ( u_outwaremx.scid = :arg_scid );
  11464. IF sqlca.SQLCode <> 0 THEN
  11465. rslt = 0
  11466. arg_msg = "因网络或其它原因导致查询计划领料数量操作失败"+"~n"+sqlca.SQLErrText
  11467. GOTO ext
  11468. END IF
  11469. IF cnt > 0 THEN
  11470. String ls_rel_scllcode,ls_msg_scllcode
  11471. DECLARE cur_check_code CURSOR FOR
  11472. SELECT u_outware.outwarecode
  11473. FROM u_outware,u_outwaremx
  11474. WHERE ( u_outware.billtype = 3 ) AND
  11475. ( u_outware.scid = u_outwaremx.scid ) AND
  11476. ( u_outware.outwareid = u_outwaremx.outwareid ) AND
  11477. ( u_outwaremx.relid = :arg_orderid ) AND
  11478. ( u_outwaremx.scid = :arg_scid );
  11479. OPEN cur_check_code;
  11480. FETCH cur_check_code Into :ls_rel_scllcode;
  11481. DO WHILE sqlca.SQLCode = 0
  11482. IF Trim(ls_msg_scllcode) = '' THEN
  11483. ls_msg_scllcode = ls_rel_scllcode
  11484. ELSE
  11485. ls_msg_scllcode = ls_msg_scllcode +',' + ls_rel_scllcode
  11486. END IF
  11487. FETCH cur_check_code Into :ls_rel_scllcode;
  11488. LOOP
  11489. CLOSE cur_check_code;
  11490. rslt = 0
  11491. arg_msg = "指令单已经有相关领料出仓单据,不可以撤消审核,请先删除相关单据再撤审"+'~r~n' + '相关领料单号:'+ls_msg_scllcode
  11492. GOTO ext
  11493. END IF
  11494. //检查是否已开发料通知单
  11495. cnt = 0
  11496. SELECT count(*)
  11497. INTO :cnt
  11498. FROM u_outware_scllplan_mx,u_outware_scllplan
  11499. WHERE ( u_outware_scllplan.outwareid = u_outware_scllplan_mx.outwareid ) AND
  11500. ( u_outware_scllplan_mx.orderid = :arg_orderid ) AND
  11501. ( u_outware_scllplan.scid = :arg_scid );
  11502. IF sqlca.SQLCode <> 0 THEN
  11503. rslt = 0
  11504. arg_msg = "因网络或其它原因导致查询指令单是否已开发料通知单操作失败"+"~n"+sqlca.SQLErrText
  11505. GOTO ext
  11506. END IF
  11507. IF cnt > 0 THEN
  11508. rslt = 0
  11509. arg_msg = "指令单已经有相关发料通知单,不可以撤消审核,请先删除相关单据再撤审"
  11510. GOTO ext
  11511. END IF
  11512. //检查工序派工单
  11513. cnt = 0
  11514. SELECT count(*)
  11515. INTO :cnt
  11516. FROM u_sc_task
  11517. WHERE scid = :arg_scid
  11518. And orderid = :arg_orderid;
  11519. IF sqlca.SQLCode <> 0 THEN
  11520. rslt = 0
  11521. arg_msg = "因网络或其它原因导致查询相关工序派工单操作失败"+"~n"+sqlca.SQLErrText
  11522. GOTO ext
  11523. END IF
  11524. IF cnt > 0 THEN
  11525. rslt = 0
  11526. arg_msg = "指令单已经有相关工序派工单,不可以撤消审核,请先删除相关单据再撤审"
  11527. GOTO ext
  11528. END IF
  11529. //检查工艺派工单
  11530. cnt = 0
  11531. SELECT count(*)
  11532. INTO :cnt
  11533. FROM u_order_plan_tech
  11534. WHERE scid = :arg_scid
  11535. And orderid = :arg_orderid;
  11536. IF sqlca.SQLCode <> 0 THEN
  11537. rslt = 0
  11538. arg_msg = "因网络或其它原因导致查询相关工艺派工单操作失败"+"~n"+sqlca.SQLErrText
  11539. GOTO ext
  11540. END IF
  11541. IF cnt > 0 THEN
  11542. rslt = 0
  11543. arg_msg = "指令单已经有相关工艺派工单,不可以撤消审核,请先删除相关单据再撤审"
  11544. GOTO ext
  11545. END IF
  11546. //检查条码生成单
  11547. cnt = 0
  11548. SELECT count(*)
  11549. INTO :cnt
  11550. FROM u_getbar
  11551. WHERE scid = :arg_scid
  11552. AND orderid = :arg_orderid
  11553. And ifrel = 1;
  11554. IF sqlca.SQLCode <> 0 THEN
  11555. rslt = 0
  11556. arg_msg = "因网络或其它原因导致查询相关条码生成单操作失败"+"~n"+sqlca.SQLErrText
  11557. GOTO ext
  11558. END IF
  11559. IF cnt > 0 THEN
  11560. rslt = 0
  11561. arg_msg = "主计划或指令单已经有相关条码生成单,不可以撤消审核,请先删除相关单据再撤审"
  11562. GOTO ext
  11563. END IF
  11564. //====================================================================
  11565. // 删除工序明细/工组明细
  11566. //====================================================================
  11567. DELETE FROM U_OrderRqwp
  11568. WHERE orderid = :arg_orderid
  11569. And scid = :arg_scid;
  11570. IF sqlca.SQLCode <> 0 THEN
  11571. rslt = 0
  11572. arg_msg = '删除指令单工序明细失败,原因>>'+sqlca.SQLErrText
  11573. GOTO ext
  11574. END IF
  11575. DELETE FROM u_OrderRqMtrl
  11576. WHERE orderid = :arg_orderid
  11577. And scid = :arg_scid;
  11578. IF sqlca.SQLCode <> 0 THEN
  11579. rslt = 0
  11580. arg_msg = "删除计划的计划用料表相应记录操作失败"+"~n"+sqlca.SQLErrText
  11581. GOTO ext
  11582. END IF
  11583. DELETE FROM u_OrderRqMtrl_tree
  11584. WHERE u_OrderRqMtrl_tree.orderid = :arg_orderid
  11585. And u_OrderRqMtrl_tree.scid = :arg_scid;
  11586. IF sqlca.SQLCode <> 0 THEN
  11587. rslt = 0
  11588. arg_msg = "删除生产计划运算树操作失败"+"~n"+sqlca.SQLErrText
  11589. GOTO ext
  11590. END IF
  11591. DELETE FROM u_OrderMtrl_workgroup
  11592. WHERE u_OrderMtrl_workgroup.orderid = :arg_orderid
  11593. And u_OrderMtrl_workgroup.scid = :arg_scid;
  11594. IF sqlca.SQLCode <> 0 THEN
  11595. rslt = 0
  11596. arg_msg = "删除生产计划工组进度操作失败"+"~n"+sqlca.SQLErrText
  11597. GOTO ext
  11598. END IF
  11599. DELETE FROM u_OrderMtrl_workgroup_tree
  11600. WHERE u_OrderMtrl_workgroup_tree.orderid = :arg_orderid
  11601. And u_OrderMtrl_workgroup_tree.scid = :arg_scid;
  11602. IF sqlca.SQLCode <> 0 THEN
  11603. rslt = 0
  11604. arg_msg = "删除生产计划条码工组进度操作失败"+"~n"+sqlca.SQLErrText
  11605. GOTO ext
  11606. END IF
  11607. DELETE FROM u_ordermtrl_workgroup_barcode
  11608. WHERE u_ordermtrl_workgroup_barcode.orderid = :arg_orderid
  11609. And u_ordermtrl_workgroup_barcode.scid = :arg_scid;
  11610. IF sqlca.SQLCode <> 0 THEN
  11611. rslt = 0
  11612. arg_msg = "删除相关工组条码明细操作失败"+"~n"+sqlca.SQLErrText
  11613. GOTO ext
  11614. END IF
  11615. DELETE FROM u_order_ml_barcode
  11616. WHERE u_order_ml_barcode.orderid = :arg_orderid
  11617. And u_order_ml_barcode.scid = :arg_scid;
  11618. IF sqlca.SQLCode <> 0 THEN
  11619. rslt = 0
  11620. arg_msg = "删除相关条码明细操作失败"+"~n"+sqlca.SQLErrText
  11621. GOTO ext
  11622. END IF
  11623. DELETE FROM u_ordermtrl_wrk_jd
  11624. WHERE orderid = :arg_orderid
  11625. And scid = :arg_scid;
  11626. IF sqlca.SQLCode <> 0 THEN
  11627. rslt = 0
  11628. arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  11629. GOTO ext
  11630. END IF
  11631. DELETE FROM u_order_ml_stop_mtrl_his
  11632. WHERE orderid = :arg_orderid
  11633. And scid = :arg_scid;
  11634. IF sqlca.SQLCode <> 0 THEN
  11635. rslt = 0
  11636. arg_msg = "删除变更记录操作失败"+"~n"+sqlca.SQLErrText
  11637. GOTO ext
  11638. END IF
  11639. IF ordertype = 1 Or &
  11640. ordertype = 2 Or &
  11641. ordertype = 3 Or &
  11642. ordertype = 0 And &
  11643. uo_option_order_bh_use_yc = 1 THEN
  11644. IF ordertype = 2 THEN
  11645. FOR ls_i = 1 To it_mxbt
  11646. IF s_order_mx[ls_i].taskid > 0 THEN
  11647. IF uo_task_ll.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,0 - s_order_mx[ls_i].orderqty,arg_msg,False) = 0 THEN
  11648. rslt = 0
  11649. GOTO ext
  11650. END IF
  11651. END IF
  11652. NEXT
  11653. ELSE
  11654. FOR ls_i = 1 To it_mxbt
  11655. IF s_order_mx[ls_i].taskid > 0 THEN
  11656. IF uo_task.updateassignqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,0 - s_order_mx[ls_i].orderqty,arg_msg,False) = 0 THEN
  11657. rslt = 0
  11658. GOTO ext
  11659. END IF
  11660. END IF
  11661. NEXT
  11662. END IF
  11663. ELSEIF ordertype = 4 And pzlorderid = 0 THEN
  11664. FOR ls_i = 1 To it_mxbt
  11665. IF s_order_mx[ls_i].taskid > 0 THEN
  11666. Int li_plantype
  11667. Long ll_wrkGrpid_scll
  11668. SELECT plantype,wrkGrpid
  11669. INTO :li_plantype,:ll_wrkGrpid_scll
  11670. FROM u_OrderRqMtrl
  11671. WHERE scid = :scid
  11672. AND orderid = :s_order_mx[ls_i].taskid
  11673. And mxpkid = :s_order_mx[ls_i].taskmxid;
  11674. IF sqlca.SQLCode <> 0 THEN
  11675. arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText
  11676. rslt = 0
  11677. GOTO ext
  11678. END IF
  11679. IF f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,&
  11680. mtrlid,ls_mtrlcode,status_mode,&
  11681. woodcode,pcode,0 - s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 THEN
  11682. rslt = 0
  11683. GOTO ext
  11684. END IF
  11685. END IF
  11686. NEXT
  11687. END IF
  11688. IF ordertype <> 4 THEN
  11689. //删除原分配
  11690. ds_fp_del.Retrieve(arg_scid,arg_orderid)
  11691. FOR ll_fp = 1 To ds_fp_del.RowCount()
  11692. IF ds_fp_del.Object.fptype[ll_fp] = 0 THEN
  11693. IF uo_mtrlware_fp.uof_assign_del(ds_fp_del.Object.id[ll_fp],&
  11694. ds_fp_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN
  11695. arg_msg = '删除分配失败,'+arg_msg
  11696. rslt = 0
  11697. GOTO ext
  11698. END IF
  11699. ELSE
  11700. IF uo_mtrlware_fp.uof_plan_del(ds_fp_del.Object.id[ll_fp],&
  11701. ds_fp_del.Object.qty[ll_fp],arg_msg,False) = 0 THEN
  11702. arg_msg = '删除分配计划失败,'+arg_msg
  11703. rslt = 0
  11704. GOTO ext
  11705. END IF
  11706. END IF
  11707. NEXT
  11708. //
  11709. END IF
  11710. /// //
  11711. Long ll_mxbt = 1,ll_i,ll_orderid_arr[]
  11712. Int li_status
  11713. uo_order_ml uo_ml
  11714. uo_ml = Create uo_order_ml
  11715. DECLARE cur_porder CURSOR FOR
  11716. SELECT orderid
  11717. FROM u_order_ml
  11718. WHERE pzlorderid = :arg_orderid
  11719. And scid = :arg_scid;
  11720. OPEN cur_porder;
  11721. FETCH cur_porder Into :ll_orderid_arr[ll_mxbt];
  11722. DO WHILE sqlca.SQLCode = 0
  11723. ll_mxbt++
  11724. FETCH cur_porder Into :ll_orderid_arr[ll_mxbt];
  11725. LOOP
  11726. CLOSE cur_porder;
  11727. ll_mxbt = ll_mxbt - 1
  11728. FOR ll_i = 1 To ll_mxbt
  11729. IF uo_ml.uof_delete_order_plan_tech(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  11730. rslt = 0
  11731. GOTO ext
  11732. END IF
  11733. SELECT status INTO :li_status
  11734. FROM u_order_ml
  11735. WHERE scid = :arg_scid
  11736. And orderid = :ll_orderid_arr[ll_i];
  11737. IF sqlca.SQLCode <> 0 THEN
  11738. rslt = 0
  11739. arg_msg = '查询相关指令单状态失败,'+arg_msg
  11740. GOTO ext
  11741. END IF
  11742. IF li_status = 1 THEN
  11743. IF uo_ml.c_sec_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  11744. rslt = 0
  11745. arg_msg = '撤审相关生产指令单失败,'+arg_msg
  11746. GOTO ext
  11747. END IF
  11748. END IF
  11749. SELECT status INTO :li_status
  11750. FROM u_order_ml
  11751. WHERE scid = :arg_scid
  11752. And orderid = :ll_orderid_arr[ll_i];
  11753. IF sqlca.SQLCode <> 0 THEN
  11754. rslt = 0
  11755. arg_msg = '查询相关指令单状态失败,'+arg_msg
  11756. GOTO ext
  11757. END IF
  11758. IF li_status = 4 THEN
  11759. IF uo_ml.c_plan_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  11760. rslt = 0
  11761. arg_msg = '撤审相关生产指令单失败,'+arg_msg
  11762. GOTO ext
  11763. END IF
  11764. END IF
  11765. SELECT status INTO :li_status
  11766. FROM u_order_ml
  11767. WHERE scid = :arg_scid
  11768. And orderid = :ll_orderid_arr[ll_i];
  11769. IF sqlca.SQLCode <> 0 THEN
  11770. rslt = 0
  11771. arg_msg = '查询相关指令单状态失败,'+arg_msg
  11772. GOTO ext
  11773. END IF
  11774. IF li_status = 7 THEN
  11775. IF uo_ml.c_audit(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  11776. rslt = 0
  11777. arg_msg = '撤审相关生产指令单失败,'+arg_msg
  11778. GOTO ext
  11779. END IF
  11780. END IF
  11781. IF uo_ml.del(arg_scid,ll_orderid_arr[ll_i],arg_msg,False) = 0 THEN
  11782. rslt = 0
  11783. arg_msg = '删除相关生产指令单失败,'+arg_msg
  11784. GOTO ext
  11785. END IF
  11786. NEXT
  11787. // //
  11788. UPDATE u_order_ml
  11789. SET status = 0,
  11790. Permit_emp = '',
  11791. Permit_date = :null_dt
  11792. WHERE orderid = :arg_orderid
  11793. AND scid = :arg_scid
  11794. And Status = 7;
  11795. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  11796. rslt = 0
  11797. arg_msg = "因网络或其它原因导致计划撤消审核操作失败"+"~n"+sqlca.SQLErrText
  11798. GOTO ext
  11799. END IF
  11800. ext:
  11801. IF rslt = 0 THEN
  11802. ROLLBACK;
  11803. p_reset()
  11804. ELSEIF rslt = 1 And arg_ifcommit THEN
  11805. COMMIT;
  11806. END IF
  11807. Destroy uo_task
  11808. Destroy uo_task_ll
  11809. Destroy uo_mtrlware_fp
  11810. Destroy ds_fp_del
  11811. Destroy uo_ml
  11812. Destroy uo_get
  11813. Return (rslt)
  11814. end function
  11815. public function integer uf_add_ftaskqty (long arg_scid, long arg_orderid, long arg_mtrlid, string arg_procode, datetime arg_billdate, decimal arg_ftaskqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  11816. IF arg_orderid <= 0 THEN
  11817. rslt = 0
  11818. arg_msg = '错误的计划唯一码'
  11819. GOTO ext
  11820. END IF
  11821. IF arg_mtrlid <= 0 THEN
  11822. rslt = 0
  11823. arg_msg = '错误的物料ID唯一码'
  11824. GOTO ext
  11825. END IF
  11826. IF arg_procode = '' OR IsNull(arg_procode) THEN
  11827. rslt = 0
  11828. arg_msg = '错误的工序序号'
  11829. GOTO ext
  11830. END IF
  11831. Int li_status
  11832. string ls_mtrlcode,ls_ordercode
  11833. long ll_mtrlid
  11834. SELECT u_order_ml.status,
  11835. u_mtrldef.mtrlcode,
  11836. u_order_ml.ordercode,
  11837. u_order_ml.mtrlid
  11838. INTO :li_status,
  11839. :ls_mtrlcode,
  11840. :ls_ordercode,
  11841. :ll_mtrlid
  11842. FROM u_mtrldef,u_order_ml
  11843. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  11844. and u_order_ml.orderid = :arg_orderid
  11845. AND u_order_ml.scid = :arg_scid;
  11846. IF sqlca.SQLCode <> 0 THEN
  11847. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  11848. rslt = 0
  11849. GOTO ext
  11850. END IF
  11851. //IF li_status <> 1 and li_status <> 5 and li_status <> 6 THEN
  11852. // rslt = 0
  11853. // arg_msg = "计划只有在进行或已完成状态才可以执行操作,请核对"
  11854. // GOTO ext
  11855. //END IF
  11856. UPDATE u_orderrqwp
  11857. SET ftaskqty = ftaskqty + :arg_ftaskqty
  11858. WHERE orderid = :arg_orderid
  11859. AND mtrlid = :arg_mtrlid
  11860. AND procode = :arg_procode
  11861. AND scid = :arg_scid;
  11862. IF sqlca.SQLCode <> 0 THEN
  11863. rslt = 0
  11864. arg_msg = '因网络或其他原因导致更新已安排时数失败'+sqlca.SQLErrText
  11865. GOTO ext
  11866. END IF
  11867. //如果工组进度解决方案为[按末工序计件确认数更新工组完成数],且工组末工序,更新工组完成数
  11868. //////////////////////////////////////////////// //
  11869. Long ll_wrkGrpid, ll_proorder_max, ll_proorder
  11870. SELECT wrkGrpid, proorder
  11871. INTO :ll_wrkGrpid, :ll_proorder
  11872. FROM U_OrderRqwp
  11873. WHERE orderid = :arg_orderid
  11874. AND scid = :arg_scid
  11875. And Procode = :arg_procode;
  11876. IF sqlca.SQLCode <> 0 THEN
  11877. rslt = 0
  11878. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',对应工组失败>>'+sqlca.SQLErrText
  11879. GOTO ext
  11880. END IF
  11881. //检查工组,工组进度解决方案 110527
  11882. Int li_jdtype
  11883. SELECT jdtype
  11884. INTO :li_jdtype
  11885. FROM u_sc_workgroup
  11886. Where wrkGrpid = :ll_wrkGrpid Using sqlca;
  11887. IF sqlca.SQLCode <> 0 THEN
  11888. rslt = 0
  11889. arg_msg = "查询工组进度解决方案操作失败"+"~n"+sqlca.SQLErrText
  11890. GOTO ext
  11891. END IF
  11892. IF li_jdtype = 3 or li_jdtype = 4 THEN
  11893. SELECT max(proorder)
  11894. INTO :ll_proorder_max
  11895. FROM U_OrderRqwp
  11896. WHERE orderid = :arg_orderid
  11897. AND scid = :arg_scid
  11898. And wrkGrpid = :ll_wrkGrpid;
  11899. IF sqlca.SQLCode <> 0 THEN
  11900. rslt = 0
  11901. arg_msg = '查询生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组最后工序失败>>'+sqlca.SQLErrText
  11902. GOTO ext
  11903. END IF
  11904. IF ll_proorder = ll_proorder_max THEN //当前工序为最后工序
  11905. IF uof_add_workgroup_qty(arg_scid, arg_orderid , ll_wrkGrpid, ll_mtrlid, arg_billdate, arg_ftaskqty, arg_msg, False) = 0 THEN
  11906. rslt = 0
  11907. arg_msg = '生产计划:'+ls_ordercode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',所属工组更新完成数失败>>'+arg_msg
  11908. GOTO ext
  11909. END IF
  11910. END IF
  11911. END IF
  11912. //////////////////////////////////////////////// //
  11913. ext:
  11914. IF rslt = 0 THEN
  11915. ROLLBACK;
  11916. ELSEIF rslt = 1 AND arg_ifcommit THEN
  11917. COMMIT;
  11918. END IF
  11919. RETURN rslt
  11920. end function
  11921. public function integer uof_okplan (long arg_scid, long arg_orderid, integer arg_okplanflag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  11922. DateTime null_dt
  11923. SetNull(null_dt)
  11924. rslt = p_getinfo(arg_scid,arg_orderid,arg_msg)
  11925. IF rslt = 0 THEN GOTO ext
  11926. IF ctmint > 0 THEN
  11927. arg_msg = '单据已截数,不能操作'
  11928. rslt = 0
  11929. GOTO ext
  11930. END IF
  11931. IF arg_okplanflag = 1 THEN
  11932. IF okplan_flag = 1 THEN
  11933. rslt = 1
  11934. GOTO ext
  11935. END IF
  11936. UPDATE u_order_ml
  11937. SET okplan_flag = 1,
  11938. okplan_emp = :arg_opemp,
  11939. okplan_date = getdate()
  11940. WHERE orderid = :arg_orderid
  11941. And scid = :arg_scid;
  11942. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  11943. rslt = 0
  11944. arg_msg = "更新可排程标记失败"+"~n"+sqlca.SQLErrText
  11945. GOTO ext
  11946. END IF
  11947. ELSE
  11948. IF okplan_flag = 0 THEN
  11949. rslt = 1
  11950. GOTO ext
  11951. END IF
  11952. UPDATE u_order_ml
  11953. SET okplan_flag = 0,
  11954. okplan_emp = '',
  11955. okplan_date = :null_dt
  11956. WHERE orderid = :arg_orderid
  11957. And scid = :arg_scid;
  11958. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  11959. rslt = 0
  11960. arg_msg = "更新可排程标记失败"+"~n"+sqlca.SQLErrText
  11961. GOTO ext
  11962. END IF
  11963. END IF
  11964. ext:
  11965. IF rslt = 0 THEN
  11966. ROLLBACK;
  11967. p_reset()
  11968. ELSEIF rslt = 1 And arg_ifcommit THEN
  11969. COMMIT;
  11970. END IF
  11971. Return (rslt)
  11972. end function
  11973. public function integer uof_reset_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  11974. DateTime ldt_null
  11975. Long cnt
  11976. SetNull(ldt_null)
  11977. //1.删除PDA扫描记录
  11978. DELETE FROM u_order_wkp_barcode_pda
  11979. WHERE (barcode IN
  11980. (SELECT barcode
  11981. FROM u_ordermtrl_workgroup_barcode
  11982. Where (orderid = :arg_orderid) And (scid = :arg_scid)));
  11983. IF sqlca.SQLCode <> 0 THEN
  11984. rslt = 0
  11985. arg_msg = '删除PDA扫描记录失败,'+sqlca.SQLErrText
  11986. GOTO ext
  11987. END IF
  11988. //2.删除条码扫描更新工组每天进度记录
  11989. DELETE FROM u_OrderMtrl_workgroup_date
  11990. WHERE scid = :arg_scid
  11991. And orderid = :arg_orderid;
  11992. IF sqlca.SQLCode <> 0 THEN
  11993. rslt = 0
  11994. arg_msg = '删除工组每天进度记录失败,'+sqlca.SQLErrText
  11995. GOTO ext
  11996. END IF
  11997. //3.删除部件条码
  11998. DELETE FROM u_ordermtrl_workgroup_barcode
  11999. Where (orderid = :arg_orderid) And (scid = :arg_scid);
  12000. IF sqlca.SQLCode <> 0 THEN
  12001. rslt = 0
  12002. arg_msg = '删除部件条码失败,'+sqlca.SQLErrText
  12003. GOTO ext
  12004. END IF
  12005. //4.清空工艺进度数量
  12006. UPDATE u_OrderMtrl_workgroup_tree
  12007. SET sqty = 0,
  12008. oqty = 0,
  12009. sdate = :ldt_null,
  12010. odate = :ldt_null
  12011. WHERE scid = :arg_scid
  12012. And orderid = :arg_orderid;
  12013. IF sqlca.SQLCode <> 0 THEN
  12014. rslt = 0
  12015. arg_msg = '清空工艺进度数量失败,'+sqlca.SQLErrText
  12016. GOTO ext
  12017. END IF
  12018. //5.清空使用条码更新模式的工组进度
  12019. UPDATE u_OrderMtrl_workgroup
  12020. SET u_OrderMtrl_workgroup.finishqty = 0,
  12021. u_OrderMtrl_workgroup.finishdate = :ldt_null,
  12022. u_OrderMtrl_workgroup.finishflag = 0
  12023. FROM u_OrderMtrl_workgroup INNER JOIN
  12024. u_sc_workgroup ON
  12025. u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid
  12026. WHERE (u_sc_workgroup.jdtype = 6)
  12027. AND (u_OrderMtrl_workgroup.scid = :arg_scid)
  12028. And (u_OrderMtrl_workgroup.orderid = :arg_orderid);
  12029. IF sqlca.SQLCode <> 0 THEN
  12030. rslt = 0
  12031. arg_msg = '清空使用条码更新模式的工组进度失败,'+sqlca.SQLErrText
  12032. GOTO ext
  12033. END IF
  12034. //6.清空工艺派工单的完成数
  12035. SELECT count(*)
  12036. INTO :cnt
  12037. FROM u_finish_tech_mx
  12038. WHERE relid IN (
  12039. SELECT billid
  12040. FROM u_order_plan_tech
  12041. WHERE scid = :arg_scid
  12042. And orderid = :arg_orderid);
  12043. IF sqlca.SQLCode <> 0 THEN
  12044. rslt = 0
  12045. arg_msg = "查询相关是否已开相关工艺完工单失败"+"~n"+sqlca.SQLErrText
  12046. GOTO ext
  12047. END IF
  12048. IF cnt > 0 THEN
  12049. rslt = 0
  12050. arg_msg = "已开相关工艺完工单,请先删除"
  12051. GOTO ext
  12052. END IF
  12053. UPDATE u_order_plan_tech
  12054. SET fqty = 0
  12055. WHERE scid = :arg_scid
  12056. And orderid = :arg_orderid;
  12057. IF sqlca.SQLCode <> 0 THEN
  12058. rslt = 0
  12059. arg_msg = "因网络或错误产品唯一码导致更新派工单完成数量操作失败"+"~n"+sqlca.SQLErrText
  12060. GOTO ext
  12061. END IF
  12062. ext:
  12063. IF rslt = 0 THEN
  12064. ROLLBACK;
  12065. ELSEIF rslt = 1 And arg_ifcommit THEN
  12066. COMMIT;
  12067. END IF
  12068. RETURN rslt
  12069. end function
  12070. public function integer uof_order_add_wkp_tree_doing (long arg_scid, long arg_orderid, long arg_this_printid, long arg_next_printid, s_ordermtrl_workgroup_tree arg_s_tree[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  12071. // 修改:工艺进度插入并生成相关资料
  12072. //--------------------------------------------------------------------
  12073. // 作者: Dyy 日期: 2012年06月30日
  12074. //====================================================================
  12075. /*名称解释:
  12076. A-本级(arg_this_printid) B-下级(arg_next_printid) C-新增级
  12077. 情况1: A与B之间插入C (arg_kind : 1~4)
  12078. 情况2: A加入下级C (arg_kind: 5,6)
  12079. arg_kind 使用说明:
  12080. (A与B之间插入C)
  12081. 1.A本身继承B,新增的C必须继承B,A改为继承C(a,b,c)
  12082. 2.A不是继承B,新增的C继承B(a,c)
  12083. 3.A不是继承B,A继承新增的C(a,b,d)
  12084. 4.A不是继承B,新增的C不存在继承关系(a,e)
  12085. (A加入下级C)
  12086. 5.A继承C(b,d)
  12087. 6.A不继承C(e)
  12088. 处理方法列表:
  12089. a.更改B的parentid (1,2,3,4)
  12090. b.更改A的继承关系(A条码要改继承属性) (1,3,5)
  12091. c.增加C的条码(复制B条码) (1,2)
  12092. d.增加C的条码(复制A条码)(A条码要改继承属性) (3,5)
  12093. e.增加C的条码(新建条码) (4,6)
  12094. **刷新printid_sort
  12095. */
  12096. Int rslt = 1
  12097. Long ll_mxbt,ll_i
  12098. Long swkpid ,owkpid ,printid
  12099. String partname
  12100. Long lp ,iflast
  12101. String relname
  12102. Decimal ld_orderqty
  12103. String partname_inherit
  12104. DateTime begindate ,enddate
  12105. Long parentid ,workgroupid
  12106. Decimal lasthour ,workhour ,eoq
  12107. Long if_barcode
  12108. Decimal splitrate ,waittime
  12109. Long li_if_inherit ,ifaccept
  12110. Decimal baseqty
  12111. Long printid_sort
  12112. DateTime server_dt
  12113. Long ll_max_pid,ll_pid,ll_cnt
  12114. String ls_barcode
  12115. Decimal ld_qty
  12116. Long ll_printid
  12117. Long ll_lp_this,ll_lp_min,ll_printid_min
  12118. datastore ds_barcode
  12119. ds_barcode = Create datastore
  12120. ds_barcode.DataObject = 'ds_ordermtrl_workgroup_barcode_doing'
  12121. ds_barcode.SetTransObject(sqlca)
  12122. datastore ds_tree
  12123. ds_tree = Create datastore
  12124. ds_tree.DataObject = 'ds_OrderMtrl_workgroup_tree_sort'
  12125. ds_tree.SetTransObject(sqlca)
  12126. IF uo_option_scllaudit_autobuild_tech = -1000 THEN
  12127. rslt = 0
  12128. arg_msg = '选项:[245]主生产计划用料审自动生成相关指令单的工组派工单,读取初始默认值失败,操作取消!'
  12129. GOTO ext
  12130. END IF
  12131. s_order_plan_tech arg_s_tech
  12132. uo_order_plan_tech uo_tech
  12133. uo_tech = Create uo_order_plan_tech
  12134. SELECT Top 1 getdate() Into :server_dt From u_user ;
  12135. IF sqlca.SQLCode <> 0 THEN
  12136. rslt = 0
  12137. arg_msg = "查询操作失败,日期 "
  12138. GOTO ext
  12139. END IF
  12140. ll_mxbt = UpperBound(arg_s_tree)
  12141. IF ll_mxbt <> 1 THEN
  12142. rslt = 0
  12143. arg_msg = '没有正确的新增工艺资料'
  12144. GOTO ext
  12145. END IF
  12146. //更新A下级的层级lp
  12147. IF arg_kind = 1 Or arg_kind = 2 Or arg_kind = 3 Or arg_kind = 4 THEN
  12148. SELECT lp
  12149. INTO :ll_lp_this
  12150. FROM u_ordermtrl_workgroup_tree
  12151. WHERE scid = :arg_scid
  12152. AND orderid = :arg_orderid
  12153. And printid = :arg_this_printid;
  12154. IF sqlca.SQLCode <> 0 THEN
  12155. rslt = 0
  12156. arg_msg = '查询本级层级数值失败,'+sqlca.SQLErrText
  12157. GOTO ext
  12158. END IF
  12159. SELECT top 1 printid
  12160. INTO :ll_printid_min
  12161. FROM u_ordermtrl_workgroup_tree
  12162. WHERE scid = :arg_scid
  12163. AND orderid = :arg_orderid
  12164. AND lp <= :ll_lp_this
  12165. AND printid > :arg_this_printid
  12166. Order By printid_sort;
  12167. IF sqlca.SQLCode <> 0 THEN
  12168. IF sqlca.SQLCode = 100 THEN
  12169. ll_printid_min = 0
  12170. ELSE
  12171. rslt = 0
  12172. arg_msg = '查询本级所有层级数值失败,'+sqlca.SQLErrText
  12173. GOTO ext
  12174. END IF
  12175. END IF
  12176. UPDATE u_ordermtrl_workgroup_tree
  12177. SET lp = lp + 1
  12178. WHERE (scid = :arg_scid)
  12179. AND (orderid = :arg_orderid)
  12180. AND (printid > :arg_this_printid)
  12181. And (printid < :ll_printid_min Or :ll_printid_min = 0 );
  12182. IF sqlca.SQLCode <> 0 THEN
  12183. rslt = 0
  12184. arg_msg = '更新本级下级的层级数值失败,'+sqlca.SQLErrText
  12185. GOTO ext
  12186. END IF
  12187. END IF
  12188. printid = arg_s_tree[1].printid
  12189. swkpid = arg_s_tree[1].swkpid
  12190. owkpid = arg_s_tree[1].owkpid
  12191. partname = arg_s_tree[1].partname
  12192. lp = arg_s_tree[1].lp
  12193. iflast = arg_s_tree[1].iflast
  12194. relname = arg_s_tree[1].relname
  12195. ld_orderqty = arg_s_tree[1].orderqty
  12196. partname_inherit = arg_s_tree[1].partname_inherit
  12197. begindate = arg_s_tree[1].begindate
  12198. enddate = arg_s_tree[1].enddate
  12199. parentid = arg_s_tree[1].parentid
  12200. workgroupid = arg_s_tree[1].workgroupid
  12201. lasthour = arg_s_tree[1].lasthour
  12202. workhour = arg_s_tree[1].workhour
  12203. eoq = arg_s_tree[1].eoq
  12204. if_barcode = arg_s_tree[1].if_barcode
  12205. splitrate = arg_s_tree[1].splitrate
  12206. waittime = arg_s_tree[1].waittime
  12207. li_if_inherit = arg_s_tree[1].if_inherit
  12208. ifaccept = arg_s_tree[1].ifaccept
  12209. baseqty = arg_s_tree[1].baseqty
  12210. printid_sort = arg_s_tree[1].printid_sort
  12211. INSERT INTO u_ordermtrl_workgroup_tree
  12212. (
  12213. scid,
  12214. orderid,
  12215. printid,
  12216. swkpid ,
  12217. owkpid ,
  12218. partname ,
  12219. lp ,
  12220. iflast ,
  12221. relname ,
  12222. orderqty ,
  12223. partname_inherit ,
  12224. begindate ,
  12225. enddate ,
  12226. parentid ,
  12227. workgroupid ,
  12228. lasthour ,
  12229. workhour ,
  12230. eoq ,
  12231. if_barcode ,
  12232. splitrate ,
  12233. waittime ,
  12234. if_inherit ,
  12235. ifaccept ,
  12236. baseqty ,
  12237. printid_sort)
  12238. VALUES
  12239. (
  12240. :arg_scid,
  12241. :arg_orderid,
  12242. :printid,
  12243. :swkpid ,
  12244. :owkpid ,
  12245. :partname ,
  12246. :lp ,
  12247. :iflast ,
  12248. :relname ,
  12249. :ld_orderqty ,
  12250. :partname_inherit ,
  12251. :begindate ,
  12252. :enddate ,
  12253. :parentid ,
  12254. :workgroupid ,
  12255. :lasthour ,
  12256. :workhour ,
  12257. :eoq ,
  12258. :if_barcode ,
  12259. :splitrate ,
  12260. :waittime ,
  12261. :li_if_inherit ,
  12262. :ifaccept ,
  12263. :baseqty ,
  12264. :printid_sort);
  12265. IF sqlca.SQLCode <> 0 THEN
  12266. rslt = 0
  12267. arg_msg = '插入工艺进度失败,'+sqlca.SQLErrText
  12268. GOTO ext
  12269. END IF
  12270. Int li_scllsecflag,li_ordertype
  12271. SELECT scllsecflag,ordertype
  12272. INTO :li_scllsecflag,:li_ordertype
  12273. FROM u_order_ml
  12274. WHERE scid = :arg_scid
  12275. And orderid = :arg_orderid;
  12276. IF sqlca.SQLCode <> 0 THEN
  12277. rslt = 0
  12278. arg_msg = '查询指令单/生产计划属性失败,'+sqlca.SQLErrText
  12279. GOTO ext
  12280. END IF
  12281. IF li_ordertype = 4 Or (li_ordertype <> 4 And li_scllsecflag = 1 ) THEN
  12282. IF uo_option_scllaudit_autobuild_tech = 1 THEN
  12283. arg_s_tech.scid = arg_scid
  12284. arg_s_tech.orderid = arg_orderid
  12285. arg_s_tech.billid = 0
  12286. arg_s_tech.rep = publ_operator
  12287. arg_s_tech.wrkgrpid = swkpid
  12288. arg_s_tech.workgroupid = workgroupid
  12289. arg_s_tech.printid = printid
  12290. arg_s_tech.parentid = parentid
  12291. arg_s_tech.qty = ld_orderqty
  12292. arg_s_tech.begindate = begindate
  12293. arg_s_tech.enddate = enddate
  12294. arg_s_tech.billdate = server_dt
  12295. IF uo_tech.Save(arg_s_tech,publ_operator,arg_msg,False) = 0 THEN
  12296. arg_msg = '建立相关派工单失败,'+arg_msg
  12297. rslt = 0
  12298. GOTO ext
  12299. END IF
  12300. IF uo_tech.audit(uo_tech.uo_billid,publ_operator,arg_msg,False) = 0 THEN
  12301. arg_msg = '审核相关派工单失败,'+arg_msg
  12302. rslt = 0
  12303. GOTO ext
  12304. END IF
  12305. END IF
  12306. END IF
  12307. //根据arg_kind执行不同的操作
  12308. //更改B的parentid
  12309. IF arg_kind = 1 Or arg_kind = 2 Or arg_kind = 3 Or arg_kind = 4 THEN
  12310. UPDATE u_ordermtrl_workgroup_tree
  12311. SET parentid = :printid
  12312. WHERE scid = :arg_scid
  12313. AND orderid = :arg_orderid
  12314. And printid = :arg_next_printid;
  12315. IF sqlca.SQLCode <> 0 THEN
  12316. rslt = 0
  12317. arg_msg = '更新下级的相关parentid失败,'+sqlca.SQLErrText
  12318. GOTO ext
  12319. END IF
  12320. END IF
  12321. //更改A的继承关系
  12322. IF arg_kind = 1 Or arg_kind = 3 Or arg_kind = 5 THEN
  12323. UPDATE u_ordermtrl_workgroup_tree
  12324. SET partname_inherit = :partname,
  12325. if_inherit = 1
  12326. WHERE scid = :arg_scid
  12327. AND orderid = :arg_orderid
  12328. And printid = :arg_this_printid;
  12329. IF sqlca.SQLCode <> 0 THEN
  12330. rslt = 0
  12331. arg_msg = '更新本级继承关系失败,'+sqlca.SQLErrText
  12332. GOTO ext
  12333. END IF
  12334. UPDATE u_ordermtrl_workgroup_barcode
  12335. SET partname_inherit = :partname
  12336. WHERE scid = :arg_scid
  12337. AND orderid = :arg_orderid
  12338. And printid = :arg_this_printid;
  12339. IF sqlca.SQLCode <> 0 THEN
  12340. rslt = 0
  12341. arg_msg = '更新本级相关条码继承关系失败,'+sqlca.SQLErrText
  12342. GOTO ext
  12343. END IF
  12344. END IF
  12345. //增加C的条码(复制B条码)
  12346. IF if_barcode = 1 THEN
  12347. IF arg_kind = 1 Or arg_kind = 2 THEN
  12348. ds_barcode.Retrieve(arg_scid,arg_orderid,arg_next_printid)
  12349. SELECT max(pid)
  12350. INTO :ll_max_pid
  12351. FROM u_ordermtrl_workgroup_barcode
  12352. WHERE scid = :arg_scid
  12353. And orderid = :arg_orderid;
  12354. IF sqlca.SQLCode <> 0 THEN
  12355. rslt = 0
  12356. arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText
  12357. GOTO ext
  12358. END IF
  12359. ll_cnt = 0
  12360. FOR ll_i = 1 To ds_barcode.RowCount()
  12361. ll_cnt++
  12362. ll_pid = ll_max_pid + ll_cnt
  12363. ls_barcode = ds_barcode.Object.barcode[ll_i]
  12364. ld_qty = ds_barcode.Object.qty[ll_i]
  12365. INSERT INTO u_ordermtrl_workgroup_barcode
  12366. (scid,
  12367. orderid,
  12368. printid,
  12369. pid,
  12370. barcode,
  12371. qty,
  12372. swkpid,
  12373. owkpid,
  12374. relname,
  12375. partname,
  12376. if_inherit,
  12377. partname_inherit,
  12378. workgroupid)
  12379. VALUES (:arg_scid,
  12380. :arg_orderid,
  12381. :printid,
  12382. :ll_pid,
  12383. :ls_barcode,
  12384. :ld_qty,
  12385. :swkpid,
  12386. :owkpid,
  12387. :relname,
  12388. :partname,
  12389. :li_if_inherit,
  12390. :partname_inherit,
  12391. :workgroupid);
  12392. IF sqlca.SQLCode <> 0 THEN
  12393. rslt = 0
  12394. arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText
  12395. GOTO ext
  12396. END IF
  12397. NEXT
  12398. END IF
  12399. END IF
  12400. //增加C的条码(复制A条码)
  12401. IF if_barcode = 1 THEN
  12402. IF arg_kind = 3 Or arg_kind = 5 THEN
  12403. ds_barcode.Retrieve(arg_scid,arg_orderid,arg_this_printid)
  12404. SELECT max(pid)
  12405. INTO :ll_max_pid
  12406. FROM u_ordermtrl_workgroup_barcode
  12407. WHERE scid = :arg_scid
  12408. And orderid = :arg_orderid;
  12409. IF sqlca.SQLCode <> 0 THEN
  12410. rslt = 0
  12411. arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText
  12412. GOTO ext
  12413. END IF
  12414. ll_cnt = 0
  12415. FOR ll_i = 1 To ds_barcode.RowCount()
  12416. ll_cnt++
  12417. ll_pid = ll_max_pid + ll_cnt
  12418. ls_barcode = ds_barcode.Object.barcode[ll_i]
  12419. ld_qty = ds_barcode.Object.qty[ll_i]
  12420. INSERT INTO u_ordermtrl_workgroup_barcode
  12421. (scid,
  12422. orderid,
  12423. printid,
  12424. pid,
  12425. barcode,
  12426. qty,
  12427. swkpid,
  12428. owkpid,
  12429. relname,
  12430. partname,
  12431. if_inherit,
  12432. partname_inherit,
  12433. workgroupid)
  12434. VALUES (:arg_scid,
  12435. :arg_orderid,
  12436. :printid,
  12437. :ll_pid,
  12438. :ls_barcode,
  12439. :ld_qty,
  12440. :swkpid,
  12441. :owkpid,
  12442. :relname,
  12443. :partname,
  12444. :li_if_inherit,
  12445. :partname_inherit,
  12446. :workgroupid);
  12447. IF sqlca.SQLCode <> 0 THEN
  12448. rslt = 0
  12449. arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText
  12450. GOTO ext
  12451. END IF
  12452. NEXT
  12453. UPDATE u_ordermtrl_workgroup_barcode
  12454. SET if_inherit = 1
  12455. WHERE scid = :arg_scid
  12456. AND orderid = :arg_orderid
  12457. And printid = :arg_this_printid;
  12458. IF sqlca.SQLCode <> 0 THEN
  12459. rslt = 0
  12460. arg_msg = '更新本级条码继承属性失败,'+sqlca.SQLErrText
  12461. GOTO ext
  12462. END IF
  12463. END IF
  12464. END IF
  12465. //增加C的条码(新建)
  12466. IF if_barcode = 1 THEN
  12467. IF arg_kind = 4 Or arg_kind = 6 THEN
  12468. FOR ll_i = 1 To Ceiling(Round(ld_orderqty/baseqty,10))
  12469. IF ll_i = Ceiling(Round(ld_orderqty/baseqty,10)) THEN
  12470. ld_qty = ld_orderqty - (ll_i - 1) * baseqty
  12471. ELSE
  12472. ld_qty = baseqty
  12473. END IF
  12474. SELECT max(pid)
  12475. INTO :ll_max_pid
  12476. FROM u_ordermtrl_workgroup_barcode
  12477. WHERE scid = :arg_scid
  12478. And orderid = :arg_orderid;
  12479. IF sqlca.SQLCode <> 0 THEN
  12480. rslt = 0
  12481. arg_msg = '查询工艺条码信息失败,'+sqlca.SQLErrText
  12482. GOTO ext
  12483. END IF
  12484. ll_cnt = 0
  12485. ll_cnt++
  12486. ll_pid = ll_max_pid + ll_cnt
  12487. ls_barcode = getid(0,"BARCODE1",Date(server_dt),True,sqlca)
  12488. INSERT INTO u_ordermtrl_workgroup_barcode
  12489. (scid,
  12490. orderid,
  12491. printid,
  12492. pid,
  12493. barcode,
  12494. qty,
  12495. swkpid,
  12496. owkpid,
  12497. relname,
  12498. partname,
  12499. if_inherit,
  12500. partname_inherit,
  12501. workgroupid)
  12502. VALUES (:arg_scid,
  12503. :arg_orderid,
  12504. :printid,
  12505. :ll_pid,
  12506. :ls_barcode,
  12507. :ld_qty,
  12508. :swkpid,
  12509. :owkpid,
  12510. :relname,
  12511. :partname,
  12512. :li_if_inherit,
  12513. :partname_inherit,
  12514. :workgroupid);
  12515. IF sqlca.SQLCode <> 0 THEN
  12516. rslt = 0
  12517. arg_msg = '生成新增工艺的条码失败,'+sqlca.SQLErrText
  12518. GOTO ext
  12519. END IF
  12520. NEXT
  12521. END IF
  12522. END IF
  12523. //更新工艺路线的printid_sort
  12524. ds_tree.Retrieve(arg_scid,arg_orderid)
  12525. FOR ll_i = 1 To ds_tree.RowCount()
  12526. ll_printid = ds_tree.Object.printid[ll_i]
  12527. UPDATE u_OrderMtrl_workgroup_tree
  12528. SET printid_sort = :ll_i * 10
  12529. WHERE scid = :arg_scid
  12530. AND orderid = :arg_orderid
  12531. And printid = :ll_printid;
  12532. IF sqlca.SQLCode <> 0 THEN
  12533. rslt = 0
  12534. arg_msg = '更新工艺进度排序失败,'+sqlca.SQLErrText
  12535. GOTO ext
  12536. END IF
  12537. NEXT
  12538. ext:
  12539. IF rslt = 0 THEN
  12540. ROLLBACK;
  12541. ELSEIF rslt = 1 And arg_ifcommit THEN
  12542. COMMIT;
  12543. END IF
  12544. Destroy uo_tech
  12545. Destroy ds_barcode
  12546. RETURN rslt
  12547. end function
  12548. public function integer uof_update_minbdate (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  12549. Int li_ordertype
  12550. Long ll_porderid
  12551. Long ll_orderid_tree
  12552. SELECT ordertype,porderid INTO :li_ordertype,:ll_porderid
  12553. FROM u_order_ml
  12554. WHERE scid = :arg_scid
  12555. And orderid = :arg_orderid;
  12556. IF sqlca.SQLCode <> 0 THEN
  12557. rslt = 0
  12558. arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText
  12559. GOTO ext
  12560. END IF
  12561. IF li_ordertype <> 4 THEN
  12562. ll_orderid_tree = arg_orderid
  12563. ELSE
  12564. ll_orderid_tree = ll_porderid
  12565. END IF
  12566. UPDATE u_OrderMtrl_workgroup
  12567. SET u_OrderMtrl_workgroup.minbdate = DATEADD(dd,ISNULL(v_minbdate.dayadd, 0), GETDATE())
  12568. FROM u_OrderMtrl_workgroup LEFT OUTER JOIN
  12569. (SELECT wrkGrpid, MAX(dayadd) AS dayadd
  12570. FROM (SELECT u_OrderRqMtrl_tree.wrkGrpid,
  12571. CASE u_mtrldef.Mtrlorigin WHEN 2 THEN u_mtrldef.buydays WHEN 3 THEN
  12572. u_mtrldef.wfjgdays WHEN 6 THEN u_mtrldef.aheaddays when 0 then u_mtrldef.expday END AS dayadd
  12573. FROM u_OrderRqMtrl_tree INNER JOIN
  12574. u_mtrldef ON u_OrderRqMtrl_tree.MtrlID = u_mtrldef.mtrlid
  12575. WHERE (u_OrderRqMtrl_tree.OrderID = :ll_orderid_tree) AND
  12576. (u_OrderRqMtrl_tree.scid = :arg_scid) AND
  12577. (u_OrderRqMtrl_tree.truerqqty > 0) AND
  12578. ((u_mtrldef.Mtrlorigin <> 0) or (u_mtrldef.Mtrlorigin = 0 and u_mtrldef.ifselforder = 1)))
  12579. v_tree
  12580. GROUP BY wrkGrpid) v_minbdate ON
  12581. u_OrderMtrl_workgroup.wrkGrpid = v_minbdate.wrkGrpid
  12582. WHERE u_OrderMtrl_workgroup.scid = :arg_scid
  12583. And u_OrderMtrl_workgroup.orderid = :arg_orderid;
  12584. IF sqlca.SQLCode <> 0 THEN
  12585. rslt = 0
  12586. arg_msg = '更新工组理论最早齐料启产日期失败,'+sqlca.SQLErrText
  12587. GOTO ext
  12588. END IF
  12589. ext:
  12590. IF rslt = 0 THEN
  12591. ROLLBACK;
  12592. ELSEIF rslt = 1 And arg_ifcommit THEN
  12593. COMMIT;
  12594. END IF
  12595. RETURN rslt
  12596. end function
  12597. public function integer uof_update_orderrqmtrl_zlqty (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_zlqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  12598. UPDATE u_OrderRqMtrl
  12599. SET u_OrderRqMtrl.zlqty = u_OrderRqMtrl.zlqty + :arg_zlqty
  12600. FROM u_OrderRqMtrl
  12601. WHERE u_OrderRqMtrl.produce_wrkGrpid = :arg_wrkgrpid
  12602. AND u_OrderRqMtrl.status = :arg_status
  12603. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  12604. AND u_OrderRqMtrl.pcode = :arg_pcode
  12605. AND u_OrderRqMtrl.plantype = 0
  12606. AND u_OrderRqMtrl.scid = :arg_scid
  12607. AND u_OrderRqMtrl.orderid = :arg_orderid
  12608. And u_OrderRqMtrl.mtrlid = :arg_mtrlid;
  12609. IF sqlca.SQLCode <> 0 THEN
  12610. rslt = 0
  12611. arg_msg = '更新相关主生产计划自制需求指令单数量失败,'+sqlca.SQLErrText
  12612. GOTO ext
  12613. END IF
  12614. UPDATE u_order_ml
  12615. SET u_Order_ml.zlflag = isnull(uv_order_zl_flag.flag,0)
  12616. FROM u_Order_ml LEFT OUTER JOIN
  12617. uv_order_zl_flag ON u_Order_ml.scid = uv_order_zl_flag.scid AND
  12618. u_Order_ml.OrderID = uv_order_zl_flag.OrderID
  12619. WHERE u_order_ml.scid = :arg_scid
  12620. And u_order_ml.orderid = :arg_orderid;
  12621. IF sqlca.SQLCode <> 0 THEN
  12622. rslt = 0
  12623. arg_msg = '更新相关主生产计划指令单状态失败,'+sqlca.SQLErrText
  12624. GOTO ext
  12625. END IF
  12626. ext:
  12627. IF rslt = 0 THEN
  12628. ROLLBACK;
  12629. ELSEIF rslt = 1 And arg_ifcommit THEN
  12630. COMMIT;
  12631. END IF
  12632. RETURN rslt
  12633. end function
  12634. public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);// 部件条码自动配套
  12635. Int rslt = 1
  12636. Decimal ld_minsqty
  12637. Decimal ld_finishqty
  12638. Decimal ld_addqty
  12639. Long ll_printid, arr_printid[]
  12640. Long ll_cnt = 0
  12641. Long i, j
  12642. Long ll_pid, arr_pid[]
  12643. Long ll_ptflag, arr_ptflag[]
  12644. Decimal ld_qty, arr_qty[]
  12645. Long ll_bar_cnt = 0
  12646. Decimal ld_ptqty
  12647. DateTime dt_server
  12648. Long ll_jdtype
  12649. SELECT jdtype
  12650. INTO :ll_jdtype
  12651. FROM u_sc_workgroup
  12652. Where wrkgrpid = :arg_wrkgrpid;
  12653. IF sqlca.SQLCode <> 0 THEN
  12654. rslt = 0
  12655. arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
  12656. GOTO ext
  12657. END IF
  12658. IF ll_jdtype <> 6 THEN
  12659. GOTO ext
  12660. END IF
  12661. SELECT top 1 GETDATE()
  12662. INTO :dt_server
  12663. From u_user;
  12664. IF sqlca.SQLCode <> 0 THEN
  12665. rslt = 0
  12666. arg_msg = '查询服务器日期失败,' + sqlca.SQLErrText
  12667. GOTO ext
  12668. END IF
  12669. ld_minsqty = 0
  12670. SELECT MIN(sqty)
  12671. INTO :ld_minsqty
  12672. FROM (SELECT scid, orderid, swkpid, SUM(qty) AS sqty, printid
  12673. FROM u_ordermtrl_workgroup_barcode
  12674. WHERE scid = :arg_scid
  12675. AND orderid = :arg_orderid
  12676. AND swkpid = :arg_wrkgrpid
  12677. AND sflag = 1
  12678. Group By scid, orderid, swkpid, printid) a;
  12679. IF sqlca.SQLCode <> 0 THEN
  12680. rslt = 0
  12681. arg_msg = '查询指令单可配套数失败,' + sqlca.SQLErrText
  12682. GOTO ext
  12683. END IF
  12684. IF IsNull(ld_minsqty) THEN ld_minsqty = 0
  12685. ld_finishqty = 0
  12686. SELECT MIN(ptcnt)
  12687. INTO :ld_finishqty
  12688. FROM (SELECT scid, orderid, swkpid, printid, SUM(qty) AS ptcnt
  12689. FROM u_ordermtrl_workgroup_barcode
  12690. WHERE (scid = :arg_scid)
  12691. AND (orderid = :arg_orderid)
  12692. AND (swkpid = :arg_wrkgrpid)
  12693. AND sflag = 1 AND ptflag = 1
  12694. Group By scid, orderid, swkpid, printid) b;
  12695. IF sqlca.SQLCode <> 0 THEN
  12696. rslt = 0
  12697. arg_msg = '查询指令单已配套数失败,' + sqlca.SQLErrText
  12698. GOTO ext
  12699. END IF
  12700. IF IsNull(ld_finishqty) THEN ld_finishqty = 0
  12701. ld_addqty = ld_minsqty - ld_finishqty
  12702. IF ld_addqty > 0 THEN
  12703. ll_cnt = 0
  12704. DECLARE cur1 CURSOR FOR
  12705. SELECT printid
  12706. FROM u_OrderMtrl_workgroup_tree
  12707. WHERE (scid = :arg_scid)
  12708. AND (orderid = :arg_orderid)
  12709. And (swkpid = :arg_wrkgrpid);
  12710. OPEN cur1;
  12711. FETCH cur1 Into :ll_printid;
  12712. DO WHILE sqlca.SQLCode = 0
  12713. ll_cnt++
  12714. arr_printid[ll_cnt] = ll_printid
  12715. FETCH cur1 Into :ll_printid;
  12716. LOOP
  12717. CLOSE cur1;
  12718. FOR i = 1 To ll_cnt
  12719. ll_printid = arr_printid[i]
  12720. ll_bar_cnt = 0
  12721. DECLARE cur2 CURSOR FOR
  12722. SELECT pid, ptflag, qty
  12723. FROM u_ordermtrl_workgroup_barcode
  12724. WHERE (scid = :arg_scid)
  12725. AND (orderid = :arg_orderid)
  12726. AND (printid = :ll_printid)
  12727. AND (sflag = 1)
  12728. Order By ptflag Desc, sdate;
  12729. OPEN cur2;
  12730. FETCH cur2 Into :ll_pid, :ll_ptflag, :ld_qty;
  12731. DO WHILE sqlca.SQLCode = 0
  12732. ll_bar_cnt++
  12733. arr_pid[ll_bar_cnt] = ll_pid
  12734. arr_ptflag[ll_bar_cnt] = ll_ptflag
  12735. arr_qty[ll_bar_cnt] = ld_qty
  12736. FETCH cur2 Into :ll_pid, :ll_ptflag, :ld_qty;
  12737. LOOP
  12738. CLOSE cur2;
  12739. j = 0
  12740. ld_ptqty = ld_minsqty
  12741. DO WHILE j < ll_bar_cnt And ld_ptqty > 0
  12742. j++
  12743. ll_pid = arr_pid[j]
  12744. ll_ptflag = arr_ptflag[j]
  12745. ld_qty = arr_qty[j]
  12746. IF ll_ptflag <> 1 THEN
  12747. UPDATE u_ordermtrl_workgroup_barcode
  12748. SET ptflag = 1,
  12749. ptdate = :dt_server
  12750. WHERE scid = :arg_scid
  12751. AND orderid = :arg_orderid
  12752. AND printid = :ll_printid
  12753. And pid = :ll_pid;
  12754. IF sqlca.SQLCode <> 0 THEN
  12755. rslt = 0
  12756. arg_msg = '更新配套标记失败,' + sqlca.SQLErrText
  12757. GOTO ext
  12758. END IF
  12759. IF sqlca.SQLNRows = 0 THEN
  12760. rslt = 0
  12761. arg_msg = '更新配套标记失败,部件条码已经不存在'
  12762. GOTO ext
  12763. END IF
  12764. END IF
  12765. ld_ptqty = ld_ptqty - ld_qty
  12766. LOOP
  12767. NEXT
  12768. IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_wrkgrpid, 0, dt_server, ld_addqty, arg_msg, False) <> 1 THEN
  12769. rslt = 0
  12770. GOTO ext
  12771. END IF
  12772. END IF
  12773. ext:
  12774. IF arg_ifcommit THEN
  12775. IF rslt = 1 THEN
  12776. COMMIT;
  12777. ELSE
  12778. ROLLBACK;
  12779. END IF
  12780. END IF
  12781. RETURN rslt
  12782. end function
  12783. public function integer uof_update_mrpcode (long arg_scid, long arg_orderid, string arg_mrpcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  12784. UPDATE u_order_ml
  12785. SET u_order_ml.mrpcode = :arg_mrpcode
  12786. WHERE u_order_ml.orderid = :arg_orderid
  12787. And u_order_ml.scid = :arg_scid;
  12788. IF sqlca.SQLCode <> 0 THEN
  12789. rslt = 0
  12790. arg_msg = '主生产计划更新运算批号失败,'+sqlca.SQLErrText
  12791. GOTO ext
  12792. END IF
  12793. ext:
  12794. IF rslt = 0 THEN
  12795. ROLLBACK;
  12796. ELSE
  12797. IF arg_ifcommit THEN
  12798. COMMIT;
  12799. END IF
  12800. END IF
  12801. RETURN rslt
  12802. end function
  12803. public function integer stoporder_cancel (long arg_scid, long arg_orderid, integer arg_ifchange, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,ll_rslt
  12804. Int li_ifpackpro,li_ordertype,li_ifpack
  12805. Long ll_porderid,ll_mtrlid_p,ls_i
  12806. String ls_status_p,ls_woodcode_p,ls_pcode_p
  12807. DateTime ld_nulldt
  12808. SetNull(ld_nulldt)
  12809. Decimal ld_stopqty_ori,ld_stopqty
  12810. uo_saletask uo_task
  12811. uo_task = Create uo_saletask
  12812. uo_task.commit_transaction = sqlca
  12813. If uo_option_order_bh_use_yc = -1000 Then
  12814. rslt = 0
  12815. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  12816. Goto ext
  12817. End If
  12818. If uo_option_autostop_porder = -1000 Then
  12819. rslt = 0
  12820. arg_msg = '选项:[383]终止分离排产指令单自动终止相关主生产计划,读取初始默认值失败,操作取消!'
  12821. Goto ext
  12822. End If
  12823. If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then
  12824. rslt = 0
  12825. Goto ext
  12826. End If
  12827. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  12828. If rslt = 0 Then Goto ext
  12829. If status <> 3 Then
  12830. rslt = 0
  12831. arg_msg = "计划或指令单只有在终止状态才可以执行撤消终止,请核对"
  12832. Goto ext
  12833. End If
  12834. If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  12835. rslt = 0
  12836. Goto ext
  12837. End If
  12838. If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then
  12839. For ls_i = 1 To it_mxbt
  12840. If s_order_mx[ls_i].taskid > 0 Then
  12841. Select stopqty
  12842. Into :ld_stopqty_ori
  12843. From u_saletaskmx
  12844. Where scid = :s_order_mx[ls_i].taskscid
  12845. And taskid = :s_order_mx[ls_i].taskid
  12846. And printid = :s_order_mx[ls_i].taskmxid;
  12847. If sqlca.SQLCode <> 0 Then
  12848. rslt = 0
  12849. arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText
  12850. Goto ext
  12851. End If
  12852. ld_stopqty = ld_stopqty_ori - s_order_mx[ls_i].orderqty
  12853. If uo_task.stopqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 Then
  12854. rslt = 0
  12855. Goto ext
  12856. End If
  12857. End If
  12858. Next
  12859. End If
  12860. //扣减相关部件生产计划的已分配数量
  12861. If pforderid > 0 Then
  12862. If f_add_conpfqty(arg_scid,pforderid, 0 - (pfqty * (acmpqty - orderqty)) / orderqty ,arg_msg,False) = 0 Then
  12863. rslt = 0
  12864. Goto ext
  12865. End If
  12866. End If
  12867. //是否终止用料
  12868. If arg_ifchange = 1 Or arg_ifchange = 2 Then
  12869. ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,1,arg_ifchange,1,arg_msg,False)
  12870. If ll_rslt = 0 Then
  12871. rslt = 0
  12872. Goto ext
  12873. End If
  12874. End If
  12875. //yyx2013-11-9
  12876. String ls_mtrlcode
  12877. If ordertype = 4 And pzlorderid = 0 And (arg_ifchange = 1 Or arg_ifchange = 2) Then
  12878. If it_mxbt = 0 Then
  12879. rslt = 0
  12880. arg_msg = '没有计划明细,操作终止,请检查'
  12881. Goto ext
  12882. End If
  12883. For ls_i = 1 To it_mxbt
  12884. If s_order_mx[ls_i].taskid > 0 Then
  12885. Int li_plantype
  12886. Long ll_wrkGrpid_scll
  12887. Select plantype,wrkGrpid
  12888. Into :li_plantype,:ll_wrkGrpid_scll
  12889. From u_OrderRqMtrl
  12890. Where scid = :scid
  12891. And orderid = :s_order_mx[ls_i].taskid
  12892. And mxpkid = :s_order_mx[ls_i].taskmxid;
  12893. If sqlca.SQLCode <> 0 Then
  12894. arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText
  12895. rslt = 0
  12896. Goto ext
  12897. End If
  12898. If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,&
  12899. mtrlid,ls_mtrlcode,status_mode,&
  12900. woodcode,pcode,s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then
  12901. rslt = 0
  12902. Goto ext
  12903. End If
  12904. End If
  12905. Next
  12906. End If
  12907. //yyx2013-11-9_end
  12908. //如果是通用包件产品,检查相关包件指令是否终止
  12909. //如果是分离排产的指令单,要终止相关主生产计划
  12910. If ordertype = 4 And porderid > 0 Then
  12911. Select ifpack Into :li_ifpack
  12912. From u_mtrldef
  12913. Where mtrlid = :mtrlid;
  12914. If sqlca.SQLCode <> 0 Then
  12915. arg_msg = '查询指令单物料资料包件属性失败,'+sqlca.SQLErrText
  12916. rslt = 0
  12917. Goto ext
  12918. End If
  12919. Select u_mtrldef.ifpackpro,
  12920. u_mtrldef.ordertype,
  12921. u_order_ml.mtrlid,
  12922. u_order_ml.status_mode,
  12923. u_order_ml.woodcode,
  12924. u_order_ml.pcode
  12925. Into :li_ifpackpro,
  12926. :li_ordertype,
  12927. :ll_mtrlid_p,
  12928. :ls_status_p,
  12929. :ls_woodcode_p,
  12930. :ls_pcode_p
  12931. From u_Order_ml Inner JOIN
  12932. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  12933. Where u_Order_ml.scid = :scid
  12934. And u_order_ml.orderid = :porderid;
  12935. If sqlca.SQLCode <> 0 Then
  12936. rslt = 0
  12937. arg_msg = '查询相关主生产计划产品属性失败,'+sqlca.SQLErrText
  12938. Goto ext
  12939. End If
  12940. ll_porderid = porderid
  12941. If li_ifpackpro = 1 And li_ifpack = 1 Then
  12942. Update u_order_ml
  12943. Set status = 1,
  12944. stopemp = '',
  12945. Accomplishdate = :ld_nulldt,
  12946. stopreason = ''
  12947. Where u_order_ml.scid = :scid
  12948. And u_order_ml.orderid = :porderid;
  12949. If sqlca.SQLCode <> 0 Then
  12950. rslt = 0
  12951. arg_msg = '自动取消终止包件产品主生产计划失败,'+arg_msg
  12952. Goto ext
  12953. End If
  12954. End If
  12955. //如果是分离排产,还要同时终止主生产计划对应的指令单(非包件产品)
  12956. If uo_option_autostop_porder = 1 Then
  12957. If li_ordertype = 1 And &
  12958. ll_mtrlid_p = mtrlid And &
  12959. ls_status_p = status_mode And &
  12960. ls_woodcode_p = woodcode And &
  12961. ls_pcode_p = pcode And &
  12962. li_ifpackpro = 0 Then
  12963. Update u_order_ml
  12964. Set stopqty = stopqty - (:orderqty - :acmpqty - :stopqty),
  12965. status = 1,
  12966. stopemp = '',
  12967. Accomplishdate = :ld_nulldt,
  12968. stopreason = ''
  12969. Where u_order_ml.scid = :scid
  12970. And u_order_ml.orderid = :porderid;
  12971. If sqlca.SQLCode <> 0 Then
  12972. rslt = 0
  12973. arg_msg = '更新分离排产对应主生产计划终止数量失败,'+arg_msg
  12974. Goto ext
  12975. End If
  12976. End If
  12977. End If
  12978. End If
  12979. Update u_order_ml
  12980. Set status = 1,
  12981. stopemp = '',
  12982. Accomplishdate = :ld_nulldt,
  12983. stopreason = '',
  12984. stopqty = 0
  12985. Where orderid = :arg_orderid
  12986. And scid = :arg_scid
  12987. And status = 3;
  12988. If sqlca.SQLCode <> 0 Then
  12989. rslt = 0
  12990. arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText
  12991. Goto ext
  12992. ElseIf sqlca.SQLNRows = 0 Then
  12993. rslt = 0
  12994. arg_msg = "正在终止生产计划,请稍后重试"
  12995. Goto ext
  12996. End If
  12997. ext:
  12998. If rslt = 0 Then
  12999. Rollback;
  13000. p_reset()
  13001. ElseIf arg_ifcommit And rslt = 1 Then
  13002. Commit;
  13003. End If
  13004. Destroy uo_task
  13005. Return (rslt)
  13006. end function
  13007. public function integer plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0,li_ptflag
  13008. Long ls_i
  13009. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  13010. rslt = 0
  13011. GOTO ext
  13012. END IF
  13013. IF arg_orderid = 0 THEN
  13014. rslt = 0
  13015. arg_msg = "没有审核对象"
  13016. GOTO ext
  13017. END IF
  13018. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  13019. rslt = 0
  13020. GOTO ext
  13021. END IF
  13022. IF status <> 7 THEN
  13023. rslt = 0
  13024. arg_msg = "计划只有在待二审状态才可以执行二审,请核对"
  13025. GOTO ext
  13026. END IF
  13027. IF ordertype = 4 THEN
  13028. SELECT ptflag
  13029. INTO :li_ptflag
  13030. FROM u_sc_wkp
  13031. Where wrkGrpid = :wrkGrpid;
  13032. IF sqlca.SQLCode <> 0 THEN
  13033. rslt = 0
  13034. arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText
  13035. GOTO ext
  13036. END IF
  13037. IF li_ptflag = 1 THEN
  13038. cnt = 0
  13039. SELECT count(*) INTO :cnt
  13040. FROM u_orderrqmtrl_scll
  13041. WHERE u_orderrqmtrl_scll.scid = :arg_scid
  13042. AND u_orderrqmtrl_scll.orderid = :arg_orderid
  13043. And u_orderrqmtrl_scll.wareqty > 0;
  13044. IF sqlca.SQLCode <> 0 THEN
  13045. arg_msg = '查询指令单领料明细是否有配套材料失败,请检查,'+sqlca.SQLErrText
  13046. rslt = 0
  13047. GOTO ext
  13048. END IF
  13049. IF cnt = 0 THEN
  13050. arg_msg = OrderCode+'计划由于至少没有找到任何一种材料配套,不能审核'+sqlca.SQLErrText
  13051. rslt = 0
  13052. GOTO ext
  13053. END IF
  13054. UPDATE u_order_ml
  13055. SET ptflag = 5
  13056. WHERE orderid = :arg_orderid
  13057. AND scid = :arg_scid
  13058. And status = 7;
  13059. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  13060. rslt = 0
  13061. arg_msg = OrderCode+"更新指令单配套状态操作失败"+"~n"+sqlca.SQLErrText
  13062. GOTO ext
  13063. END IF
  13064. END IF
  13065. END IF
  13066. UPDATE u_order_ml
  13067. SET plan_emp = :publ_operator,
  13068. plan_auditdate = getdate(),
  13069. status = 4
  13070. WHERE orderid = :arg_orderid
  13071. AND scid = :scid
  13072. And status = 7;
  13073. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  13074. rslt = 0
  13075. arg_msg = "因网络或其它原因导致计划二审操作失败"+"~n"+sqlca.SQLErrText
  13076. GOTO ext
  13077. END IF
  13078. ext:
  13079. IF rslt = 0 THEN
  13080. ROLLBACK;
  13081. p_reset()
  13082. ELSEIF arg_ifcommit And rslt = 1 THEN
  13083. COMMIT;
  13084. END IF
  13085. RETURN rslt
  13086. end function
  13087. public function integer c_plan_audit (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  13088. Long ls_i,li_ptflag
  13089. String ls_mtrlcode
  13090. Decimal finishqty,ld_sqty,ld_oqty
  13091. DateTime null_dt
  13092. SetNull(null_dt)
  13093. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  13094. rslt = 0
  13095. GOTO ext
  13096. END IF
  13097. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  13098. IF rslt = 0 THEN GOTO ext
  13099. IF ctmint > 0 THEN
  13100. arg_msg = '单据已截数,不能操作'
  13101. rslt = 0
  13102. GOTO ext
  13103. END IF
  13104. IF status <> 4 THEN
  13105. rslt = 0
  13106. arg_msg = "只有在待终审状态才可以执行撤消二审,请核对"
  13107. GOTO ext
  13108. END IF
  13109. IF ordertype = 4 THEN
  13110. SELECT ptflag
  13111. INTO :li_ptflag
  13112. FROM u_sc_wkp
  13113. Where wrkGrpid = :wrkGrpid;
  13114. IF sqlca.SQLCode <> 0 THEN
  13115. rslt = 0
  13116. arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText
  13117. GOTO ext
  13118. END IF
  13119. IF li_ptflag = 1 THEN
  13120. UPDATE u_order_ml
  13121. SET ptflag = 1
  13122. WHERE orderid = :arg_orderid
  13123. And scid = :arg_scid;
  13124. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  13125. rslt = 0
  13126. arg_msg = OrderCode+"更新指令单配套状态操作失败"+"~n"+sqlca.SQLErrText
  13127. GOTO ext
  13128. END IF
  13129. END IF
  13130. END IF
  13131. UPDATE u_order_ml
  13132. SET status = 7,
  13133. plan_emp = '',
  13134. plan_auditdate = :null_dt
  13135. WHERE orderid = :arg_orderid
  13136. AND scid = :arg_scid
  13137. And status = 4;
  13138. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows = 0 THEN
  13139. rslt = 0
  13140. arg_msg = "因网络或其它原因导致计划撤消二审操作失败"+"~n"+sqlca.SQLErrText
  13141. GOTO ext
  13142. END IF
  13143. ext:
  13144. IF rslt = 0 THEN
  13145. ROLLBACK;
  13146. p_reset()
  13147. ELSEIF rslt = 1 And arg_ifcommit THEN
  13148. COMMIT;
  13149. END IF
  13150. Return (rslt)
  13151. end function
  13152. public function integer p_update_orderdate (long arg_scid, long arg_orderid, datetime arg_orderdate, datetime arg_requiredate, string arg_dscrp, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  13153. IF uo_option_order_zl_3_day = -1000 THEN
  13154. rslt = 0
  13155. arg_msg = '选项:[316]指令单保存时更新相关采购需求明细日期,读取初始默认值失败,操作取消!'
  13156. GOTO ext
  13157. END IF
  13158. UPDATE u_order_ml
  13159. SET orderdate = :arg_orderdate,
  13160. requiredate = :arg_requiredate,
  13161. dscrp = :arg_dscrp,
  13162. modemp = :publ_operator,
  13163. moddate = getdate(),
  13164. addqty = :arg_addqty
  13165. WHERE orderid = :arg_orderid
  13166. And scid = :arg_scid;
  13167. IF sqlca.SQLCode <> 0 THEN
  13168. arg_msg = "更新指令单信息失败!"+sqlca.SQLErrText
  13169. rslt = 0
  13170. GOTO ext
  13171. END IF
  13172. IF uo_option_order_zl_3_day = 1 THEN
  13173. Int li_ordertype
  13174. Long ll_porderid,cnt
  13175. SELECT ordertype,porderid
  13176. INTO :li_ordertype,:ll_porderid
  13177. FROM u_order_ml
  13178. WHERE scid = :arg_scid
  13179. And orderid = :arg_orderid;
  13180. IF sqlca.SQLCode <> 0 THEN
  13181. arg_msg = "查询指令信息失败!"+sqlca.SQLErrText
  13182. rslt = 0
  13183. GOTO ext
  13184. END IF
  13185. IF li_ordertype = 4 THEN
  13186. SELECT count(*)
  13187. INTO :cnt
  13188. FROM u_requestbuymxmx
  13189. WHERE scid = :arg_scid
  13190. And orderid = :ll_porderid;
  13191. IF sqlca.SQLCode <> 0 THEN
  13192. arg_msg = "查询指令指相关主生产计划需求是否已开申购单失败!"+sqlca.SQLErrText
  13193. rslt = 0
  13194. GOTO ext
  13195. END IF
  13196. IF cnt = 0 THEN
  13197. UPDATE u_OrderRqMtrl
  13198. SET u_orderrqmtrl.RqDate = dateadd(day, -3, u_Order_ml.orderdate),
  13199. u_orderrqmtrl.edate = dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)),
  13200. u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  13201. u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  13202. FROM u_Order_ml INNER JOIN
  13203. u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND
  13204. u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN
  13205. u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND
  13206. u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN
  13207. u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND
  13208. u_Order_ml_p.scid = u_OrderRqMtrl.scid AND
  13209. u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND
  13210. u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN
  13211. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  13212. WHERE (u_OrderRqMtrl.plantype = 2)
  13213. AND (u_OrderRqMtrl_scll.scid = :arg_scid)
  13214. And (u_OrderRqMtrl_scll.orderid = :arg_orderid) ;
  13215. // UPDATE u_OrderRqMtrl
  13216. // SET u_orderrqmtrl.RqDate = case when u_orderrqmtrl.rqdate_ori is NULL then dateadd(day, -3, u_Order_ml.orderdate) else case when dateadd(day, -3, u_Order_ml.orderdate) < u_orderrqmtrl.RqDate then dateadd(day, -3, u_Order_ml.orderdate) else u_orderrqmtrl.RqDate END END,
  13217. // u_orderrqmtrl.edate = case when u_orderrqmtrl.rqdate_ori is NULL then dateadd(day, 0 - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)) else case when dateadd(day, -3, u_Order_ml.orderdate) < u_orderrqmtrl.RqDate then dateadd(day, - u_mtrldef.buydays, dateadd(day, -3, u_Order_ml.orderdate)) else u_orderrqmtrl.edate END END ,
  13218. // u_orderrqmtrl.rqdate_ori = case when u_orderrqmtrl.rqdate_ori is NULL then u_orderrqmtrl.RqDate else u_orderrqmtrl.rqdate_ori END ,
  13219. // u_orderrqmtrl.edate_ori = case when u_orderrqmtrl.edate_ori is NULL then u_orderrqmtrl.edate else u_orderrqmtrl.edate_ori END
  13220. // FROM u_Order_ml INNER JOIN
  13221. // u_OrderRqMtrl_scll ON u_Order_ml.OrderID = u_OrderRqMtrl_scll.OrderID AND
  13222. // u_Order_ml.scid = u_OrderRqMtrl_scll.scid INNER JOIN
  13223. // u_Order_ml u_Order_ml_p ON u_Order_ml.porderid = u_Order_ml_p.OrderID AND
  13224. // u_Order_ml.scid = u_Order_ml_p.scid INNER JOIN
  13225. // u_OrderRqMtrl ON u_Order_ml_p.OrderID = u_OrderRqMtrl.OrderID AND
  13226. // u_Order_ml_p.scid = u_OrderRqMtrl.scid AND
  13227. // u_OrderRqMtrl_scll.MtrlID = u_OrderRqMtrl.MtrlID AND
  13228. // u_OrderRqMtrl_scll.wrkGrpid = u_OrderRqMtrl.wrkGrpid INNER JOIN
  13229. // u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  13230. // WHERE (u_OrderRqMtrl.plantype = 2)
  13231. // AND (u_OrderRqMtrl_scll.scid = :arg_scid)
  13232. // And (u_OrderRqMtrl_scll.orderid = :arg_orderid) ;
  13233. IF sqlca.SQLCode <> 0 THEN
  13234. rslt = 0
  13235. arg_msg = "因网络或其它原因导致更新需求明细日期操作失败"+"~n"+sqlca.SQLErrText
  13236. GOTO ext
  13237. END IF
  13238. END IF
  13239. END IF
  13240. END IF
  13241. ext:
  13242. IF rslt = 0 THEN
  13243. ROLLBACK;
  13244. ELSEIF rslt = 1 And arg_ifcommit THEN
  13245. COMMIT;
  13246. END IF
  13247. RETURN rslt
  13248. end function
  13249. public function integer uf_createorder_pt (long arg_scid, long arg_orderid, integer arg_pttype, integer arg_bomflag, boolean arg_ifcommit, ref string arg_msg);
  13250. //检测配套数
  13251. Int rslt = 1
  13252. Int ls_ptflag
  13253. Long ls_remtrl_cnt,ls_ware_cnt,ls_mtrlid
  13254. Long i,j,d,k
  13255. Decimal ls_wareqty,ld_qty,ld_standqty
  13256. Long cus_c = 0,fai_c = 0,count
  13257. String mtrlname,mtrlcode
  13258. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  13259. If rslt = 0 Then Goto ext
  13260. IF status <> 7 THEN
  13261. rslt = 0
  13262. arg_msg = '指令单只有在待二审状态下才能进行配套计算,失败'
  13263. GOTO ext
  13264. END IF
  13265. //IF status = 0 THEN
  13266. //
  13267. // IF arg_pttype = 0 THEN arg_bomflag = -1
  13268. //
  13269. // IF f_cmpl_rqmtrl(orderid,arg_bomflag,TRUE,arg_msg) = 0 THEN
  13270. // rslt = 0
  13271. // GOTO ext
  13272. // END IF
  13273. //
  13274. //END IF
  13275. //
  13276. s_mtrlware_noalloc_array ls_mtrl_array
  13277. s_pfmx ls_pfmx[]
  13278. s_mtrlware_noalloc_array s_array
  13279. s_mtrlware_noalloc_array s_mx
  13280. Decimal ls_sonscale,ls_stopqty
  13281. Long ls_sonmtrlid
  13282. DECLARE pf_cur CURSOR FOR
  13283. SELECT u_orderrqmtrl_scll.mtrlid ,
  13284. u_orderrqmtrl_scll.truerqqty/u_order_ml.orderqty,0
  13285. FROM u_OrderRqMtrl_scll INNER JOIN
  13286. u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID AND
  13287. u_OrderRqMtrl_scll.scid = u_Order_ml.scid
  13288. WHERE u_orderrqmtrl_scll.orderid = :arg_orderid
  13289. AND u_orderrqmtrl_scll.scid = :arg_scid
  13290. And u_order_ml.orderqty > 0;
  13291. OPEN pf_cur;
  13292. count = 1
  13293. FETCH pf_cur INTO :ls_sonmtrlid,&
  13294. :ls_sonscale,:ls_stopqty;
  13295. DO WHILE sqlca.SQLCode = 0 //循环读取明细数据
  13296. ls_sonscale = Truncate(ls_sonscale,5)
  13297. ls_pfmx[count].sonmtrlid = ls_sonmtrlid
  13298. ls_pfmx[count].sonscale = ls_sonscale
  13299. ls_pfmx[count].addqty = ls_stopqty
  13300. count++
  13301. FETCH pf_cur INTO :ls_sonmtrlid,&
  13302. :ls_sonscale,:ls_stopqty;
  13303. LOOP
  13304. count = count - 1
  13305. CLOSE pf_cur;
  13306. //
  13307. SELECT ptflag INTO :ls_ptflag
  13308. FROM u_sc_wkp
  13309. Where wrkGrpid = :wrkGrpid;
  13310. IF sqlca.SQLCode <> 0 THEN
  13311. rslt = 0
  13312. arg_msg = '查询生产车间配置属性失败'+sqlca.SQLErrText
  13313. GOTO ext
  13314. END IF
  13315. IF ls_ptflag = 0 THEN
  13316. rslt = 0
  13317. arg_msg = '车间没有设置配套属性,不能配套'
  13318. GOTO ext
  13319. END IF
  13320. IF count = 0 THEN
  13321. rslt = 1
  13322. GOTO ext
  13323. END IF
  13324. SELECT u_mtrldef.mtrlcode,u_mtrldef.mtrlname INTO :mtrlcode,:mtrlname
  13325. FROM u_mtrldef INNER JOIN
  13326. u_Order_ml ON u_mtrldef.mtrlid = u_Order_ml.mtrlid
  13327. WHERE u_Order_ml.orderid = :arg_orderid
  13328. And u_order_ml.scid = :arg_scid;
  13329. IF sqlca.SQLCode <> 0 THEN
  13330. rslt = 0
  13331. arg_msg = '查询生产指令物料名称失败'+sqlca.SQLErrText
  13332. GOTO ext
  13333. END IF
  13334. Decimal ld_freeqty,ld_notdstrqty
  13335. String ls_mtrlcode,ls_mtrlname
  13336. Decimal ld_noallocqty,ld_allqty,ld_maxqty,ld_wareqty,ls_TrueRqQty
  13337. Long ll_storageid_err[]
  13338. Long ls_storageid,ll_i
  13339. Boolean bl_free = False
  13340. ld_maxqty = 1000000
  13341. IF arg_pttype = 0 THEN //单指令
  13342. FOR ll_i = 1 To count
  13343. ls_pfmx[ll_i].sonscale = Truncate(ls_pfmx[ll_i].sonscale,5)
  13344. IF ls_pfmx[ll_i].sonscale = 0 THEN CONTINUE
  13345. SELECT mtrlcode,
  13346. mtrlname
  13347. INTO :ls_mtrlcode,
  13348. :ls_mtrlname
  13349. FROM u_mtrldef
  13350. Where mtrlid = :ls_pfmx[ll_i].sonmtrlid;
  13351. IF sqlca.SQLCode <> 0 THEN
  13352. arg_msg = arg_msg+'~r~n'+'查询物料编码失败'+String(ls_pfmx[ll_i].sonmtrlid)
  13353. //bl_free = TRUE
  13354. CONTINUE
  13355. END IF
  13356. IF Pos(ls_mtrlname ,'胶水') > 0 Or Pos(ls_mtrlname ,'安装图') > 0 THEN CONTINUE
  13357. IF Pos(Upper(mtrlcode),'B2060') > 0 And Pos(ls_mtrlname ,'胶袋') > 0 THEN CONTINUE
  13358. ld_freeqty = 0
  13359. ld_noallocqty = 0
  13360. ld_notdstrqty = 0
  13361. ld_allqty = 0
  13362. //查找可用数量=库存数量-冻结数量
  13363. SELECT freeqty,noallocqty,notdstrqty
  13364. INTO :ld_freeqty,:ld_noallocqty,:ld_notdstrqty
  13365. FROM uv_Order_ml_RqMtrl_freeqty
  13366. Where mtrlid = :ls_pfmx[ll_i].sonmtrlid;
  13367. IF sqlca.SQLCode <> 0 THEN
  13368. //bl_free = TRUE
  13369. //CONTINUE
  13370. END IF
  13371. IF ld_freeqty < 0 THEN
  13372. ld_freeqty = 0
  13373. END IF
  13374. ld_allqty = ld_freeqty/ls_pfmx[ll_i].sonscale
  13375. // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_allqty)
  13376. // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_notdstrqty)
  13377. ld_maxqty = Min(ld_maxqty,ld_allqty)
  13378. IF IsNull(ld_maxqty) THEN ld_maxqty = 0
  13379. IF ld_maxqty = 0 THEN
  13380. //bl_free = TRUE
  13381. CONTINUE
  13382. END IF
  13383. NEXT
  13384. ld_qty = Truncate ( ld_maxqty, 0 )
  13385. d = 0
  13386. FOR i = 1 To count
  13387. ls_mtrlid = ls_pfmx[i].sonmtrlid
  13388. IF ls_mtrlid = 0 THEN CONTINUE
  13389. d++
  13390. s_mx.mtrlid[d] = ls_mtrlid
  13391. s_mx.sonscale[d] = ls_pfmx[i].sonscale
  13392. s_mx.order_mtrlid[d] = mtrlid
  13393. s_mx.qty [d] = ld_qty
  13394. s_mx.mtrlwareid[d] = arg_orderid
  13395. s_mx.scid[d] = arg_scid
  13396. NEXT
  13397. // OpenWithParm(w_createorder_pt2,s_mx)
  13398. s_array = Message.PowerObjectParm
  13399. IF UpperBound(s_array.mtrlid) > 0 THEN
  13400. s_mx = s_array
  13401. ld_qty = s_array.allocqty[1]
  13402. d = UpperBound(s_array.mtrlid)
  13403. ELSE
  13404. arg_ifcommit = False
  13405. rslt = 0
  13406. arg_msg = '审核取消'
  13407. GOTO ext
  13408. END IF
  13409. ELSE //多指令
  13410. FOR ll_i = 1 To count
  13411. ld_wareqty = 0
  13412. ld_freeqty = 0
  13413. ld_noallocqty = 0
  13414. ld_notdstrqty = 0
  13415. ld_allqty = 0
  13416. ls_TrueRqQty = 0
  13417. ld_standqty = 0
  13418. SELECT mtrlcode,
  13419. mtrlname
  13420. INTO :ls_mtrlcode,
  13421. :ls_mtrlname
  13422. FROM u_mtrldef
  13423. Where mtrlid = :ls_pfmx[ll_i].sonmtrlid;
  13424. IF sqlca.SQLCode <> 0 THEN
  13425. arg_msg = arg_msg+'~r~n'+'查询物料编码失败'+String(ls_pfmx[ll_i].sonmtrlid)
  13426. bl_free = True
  13427. CONTINUE
  13428. END IF
  13429. SELECT wareqty INTO :ld_wareqty
  13430. FROM u_orderrqmtrl_scll
  13431. WHERE orderid = :arg_orderid
  13432. AND mtrlid = :ls_pfmx[ll_i].sonmtrlid
  13433. And ( scid = :arg_scid );
  13434. IF sqlca.SQLCode <> 0 THEN
  13435. //continue
  13436. END IF
  13437. SELECT freeqty,noallocqty,notdstrqty
  13438. INTO :ld_freeqty,:ld_noallocqty,:ld_notdstrqty
  13439. FROM
  13440. uv_Order_ml_RqMtrl_freeqty
  13441. Where mtrlid = :ls_pfmx[ll_i].sonmtrlid;
  13442. IF sqlca.SQLCode <> 0 THEN
  13443. //continue
  13444. END IF
  13445. ls_pfmx[ll_i].sonscale = Truncate(ls_pfmx[ll_i].sonscale,5)
  13446. ld_standqty = ls_pfmx[ll_i].sonscale* orderqty - ls_pfmx[ll_i].addqty //配套需求数量
  13447. // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_standqty )
  13448. // f_round_qty(ls_pfmx[ll_i].sonmtrlid, ld_notdstrqty)
  13449. ld_maxqty = ld_noallocqty - (ld_notdstrqty - ld_wareqty ) //本次指令计划冻结数
  13450. IF ld_maxqty <= 0 THEN ld_maxqty = 0
  13451. IF ld_maxqty >= ld_standqty THEN
  13452. ld_wareqty = ld_standqty
  13453. ELSE
  13454. ld_wareqty = ld_maxqty
  13455. END IF
  13456. s_mx.mtrlid[ll_i] = ls_pfmx[ll_i].sonmtrlid
  13457. s_mx.qty[ll_i] = ld_wareqty
  13458. s_mx.u_mtrldef_mtrlname[ll_i] = ls_mtrlname
  13459. NEXT
  13460. ld_qty = orderqty
  13461. d = UpperBound(s_mx.mtrlid)
  13462. END IF
  13463. UPDATE u_OrderRqMtrl_scll
  13464. SET wareqty = 0
  13465. WHERE ( u_OrderRqMtrl_scll.orderid = :arg_orderid )
  13466. And ( u_orderrqmtrl_scll.scid = :arg_scid );
  13467. IF sqlca.SQLCode <> 0 THEN
  13468. arg_msg = '更新生产指令领料配套数量失败'
  13469. rslt = 0
  13470. GOTO ext
  13471. END IF
  13472. FOR i = 1 To d
  13473. IF Pos(s_mx.u_mtrldef_mtrlname[i] ,'胶水') > 0 Or Pos(s_mx.u_mtrldef_mtrlname[i] ,'安装图') > 0 THEN CONTINUE
  13474. IF Pos(Upper(mtrlcode),'B2060') > 0 And Pos(s_mx.u_mtrldef_mtrlname[i] ,'胶袋') > 0 THEN CONTINUE
  13475. UPDATE u_OrderRqMtrl_scll
  13476. SET wareqty = wareqty + :s_mx.qty[i]
  13477. WHERE ( orderid = :arg_orderid )
  13478. AND (mtrlid = :s_mx.mtrlid[i])
  13479. And (scid = :arg_scid);
  13480. IF sqlca.SQLCode <> 0 THEN
  13481. arg_msg = '更新生产指令领料配套数量失败'
  13482. rslt = 0
  13483. GOTO ext
  13484. END IF
  13485. NEXT
  13486. UPDATE u_order_ml
  13487. SET ptqty = :ld_qty,
  13488. ptflag = 1,
  13489. ptdate = getdate(),
  13490. ptemp = :publ_operator
  13491. Where OrderID = :arg_orderid
  13492. and scid = :arg_scid;
  13493. IF sqlca.SQLCode <> 0 THEN
  13494. arg_msg = '更新生产指令领料配套数量失败,'+sqlca.SQLErrText
  13495. rslt = 0
  13496. GOTO ext
  13497. END IF
  13498. ext:
  13499. IF arg_ifcommit THEN
  13500. IF rslt = 1 THEN
  13501. COMMIT;
  13502. ELSE
  13503. ROLLBACK;
  13504. END IF
  13505. END IF
  13506. RETURN rslt
  13507. end function
  13508. public function integer stoporder (long arg_scid, long arg_orderid, integer arg_ifchange, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Long cnt
  13509. Int rslt = 1,li_ptflag,ll_rslt
  13510. Int li_ifpackpro,li_ordertype,li_ifpack,li_status
  13511. Long ll_porderid,ll_mtrlid_p
  13512. String ls_status_p,ls_woodcode_p,ls_pcode_p
  13513. Decimal ld_notinqty_p
  13514. Long ll_orderid_arr[]
  13515. Int li_mxbt
  13516. Long ll_i,ls_i
  13517. Decimal ld_stopqty_ori,ld_stopqty
  13518. String ls_mtrlcode
  13519. li_mxbt = 1
  13520. datastore ds_stop_zl
  13521. ds_stop_zl = Create datastore
  13522. ds_stop_zl.DataObject = 'ds_order_ml_stop_p_zl'
  13523. ds_stop_zl.SetTransObject(sqlca)
  13524. uo_saletask uo_task
  13525. uo_task = Create uo_saletask
  13526. uo_task.commit_transaction = sqlca
  13527. If f_aps_mrp_cklock(arg_scid,arg_msg) = 0 Then
  13528. rslt = 0
  13529. Goto ext
  13530. End If
  13531. If uo_option_order_bh_use_yc = -1000 Then
  13532. rslt = 0
  13533. arg_msg = '选项:[074]备货生产计划选销售预测单,读取初始默认值失败,操作取消!'
  13534. Goto ext
  13535. End If
  13536. If uo_option_if_oa_order_ml = -1000 Then
  13537. rslt = 0
  13538. arg_msg = '选项:[230]生产计划使用审批流程,读取初始默认值失败,操作取消!'
  13539. Goto ext
  13540. End If
  13541. If uo_option_order_ml_secaudit = -1000 Then
  13542. rslt = 0
  13543. arg_msg = '选项:[225]生产计划使用二级审核,读取初始默认值失败,操作取消!'
  13544. Goto ext
  13545. End If
  13546. If uo_option_if_oa_order_zl = -1000 Then
  13547. rslt = 0
  13548. arg_msg = '选项:[231]生产指令单使用审批流程,读取初始默认值失败,操作取消!'
  13549. Goto ext
  13550. End If
  13551. If uo_option_order_ml_zl_secaudit = -1000 Then
  13552. rslt = 0
  13553. arg_msg = '选项:[226]生产指令单使用二级审核,读取初始默认值失败,操作取消!'
  13554. Goto ext
  13555. End If
  13556. If uo_option_autostop_porder = -1000 Then
  13557. rslt = 0
  13558. arg_msg = '选项:[383]终止分离排产指令单自动终止相关主生产计划,读取初始默认值失败,操作取消!'
  13559. Goto ext
  13560. End If
  13561. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  13562. If rslt = 0 Then Goto ext
  13563. If ordertype <> 4 Then
  13564. If uo_option_if_oa_order_ml = 1 And uo_option_order_ml_secaudit = 1 And audit_buildtype = 0 Then
  13565. If f_check_if_oaflow(arg_scid,arg_orderid,36,arg_msg ) = 0 Then
  13566. rslt = 0
  13567. Goto ext
  13568. End If
  13569. End If
  13570. Else
  13571. If uo_option_if_oa_order_zl = 1 And uo_option_order_ml_zl_secaudit = 1 And audit_buildtype = 0 Then
  13572. If f_check_if_oaflow(arg_scid,arg_orderid,1138,arg_msg ) = 0 Then
  13573. rslt = 0
  13574. Goto ext
  13575. End If
  13576. End If
  13577. End If
  13578. If ordertype = 4 And porderid > 0 Then
  13579. Select u_mtrldef.ifpackpro,
  13580. u_mtrldef.ordertype,
  13581. u_order_ml.mtrlid,
  13582. u_order_ml.status_mode,
  13583. u_order_ml.woodcode,
  13584. u_order_ml.pcode,
  13585. u_order_ml.orderqty - u_order_ml.acmpqty - u_order_ml.stopqty,
  13586. u_order_ml.status
  13587. Into :li_ifpackpro,
  13588. :li_ordertype,
  13589. :ll_mtrlid_p,
  13590. :ls_status_p,
  13591. :ls_woodcode_p,
  13592. :ls_pcode_p,
  13593. :ld_notinqty_p,
  13594. :li_status
  13595. From u_Order_ml Inner JOIN
  13596. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  13597. Where u_Order_ml.scid = :scid
  13598. And u_order_ml.orderid = :porderid;
  13599. If sqlca.SQLCode <> 0 Then
  13600. rslt = 0
  13601. arg_msg = '查询相关主生产计划产品属性失败,'+sqlca.SQLErrText
  13602. Goto ext
  13603. End If
  13604. End If
  13605. //如果是包件产品生产计划分离的指令单,终止时不考虑状态(雅舍需求, 2014-06-24)
  13606. If Not (ordertype = 4 And li_ifpackpro = 1 And &
  13607. ll_mtrlid_p = mtrlid And &
  13608. ls_status_p = status_mode And &
  13609. ls_woodcode_p = woodcode And &
  13610. ls_pcode_p = pcode) Then
  13611. If status <> 1 Then
  13612. rslt = 0
  13613. arg_msg = "计划只有在进行状态才可以执行终止,请核对"
  13614. Goto ext
  13615. End If
  13616. End If
  13617. If getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  13618. rslt = 0
  13619. Goto ext
  13620. End If
  13621. If Trim(arg_stopreason) = '' Then
  13622. rslt = 0
  13623. arg_msg = '请输入终止原因'
  13624. Goto ext
  13625. End If
  13626. //如果是主计划,下级指令单状态有1,2,4,7,不允许终止主计划
  13627. If ordertype <> 4 Then
  13628. Select count(*) Into :cnt
  13629. From u_order_ml
  13630. Where ordertype = 4
  13631. And porderid = :arg_orderid
  13632. And scid = :arg_scid
  13633. And status In (1,2,4,7);
  13634. If sqlca.SQLCode <> 0 Then
  13635. rslt = 0
  13636. arg_msg = OrderCode+'查询下级指令单状态失败'+sqlca.SQLErrText
  13637. Goto ext
  13638. End If
  13639. If cnt > 0 Then
  13640. rslt = 0
  13641. arg_msg = OrderCode+',有下级指令单处于在进行、暂停、待二审或待终审状态,不能终止主计划'
  13642. Goto ext
  13643. End If
  13644. End If
  13645. If ordertype = 4 Then
  13646. Select ptflag
  13647. Into :li_ptflag
  13648. From u_sc_wkp
  13649. Where wrkGrpid = :wrkGrpid;
  13650. If sqlca.SQLCode <> 0 Then
  13651. rslt = 0
  13652. arg_msg = OrderCode+'查询生产车间配置属性失败'+sqlca.SQLErrText
  13653. Goto ext
  13654. End If
  13655. End If
  13656. //
  13657. cnt = 0
  13658. Select count(*) Into :cnt
  13659. From u_inwaremx Inner JOIN
  13660. u_inware ON u_inwaremx.scid = u_inware.scid And
  13661. u_inwaremx.inwareid = u_inware.inwareid
  13662. Where (u_inware.billtype = 3)
  13663. And (u_inware.flag = 0)
  13664. And (u_inwaremx.scid = :arg_scid)
  13665. And (u_inwaremx.relid = :arg_orderid);
  13666. If sqlca.SQLCode <> 0 Then
  13667. rslt = 0
  13668. arg_msg = OrderCode+' 查询是否有相关未审核生产进仓单失败'+sqlca.SQLErrText
  13669. Goto ext
  13670. End If
  13671. If cnt > 0 Then
  13672. rslt = 0
  13673. arg_msg = OrderCode+' 有相关未审核生产进仓单,不能终止'
  13674. Goto ext
  13675. End If
  13676. If ordertype = 0 And uo_option_order_bh_use_yc = 1 Then
  13677. For ls_i = 1 To it_mxbt
  13678. If s_order_mx[ls_i].taskid > 0 Then
  13679. Select stopqty
  13680. Into :ld_stopqty_ori
  13681. From u_saletaskmx
  13682. Where scid = :s_order_mx[ls_i].taskscid
  13683. And taskid = :s_order_mx[ls_i].taskid
  13684. And printid = :s_order_mx[ls_i].taskmxid;
  13685. If sqlca.SQLCode <> 0 Then
  13686. rslt = 0
  13687. arg_msg = '查询生产计划相关销售预测单信息失败'+sqlca.SQLErrText
  13688. Goto ext
  13689. End If
  13690. ld_stopqty = ld_stopqty_ori + s_order_mx[ls_i].orderqty
  13691. If uo_task.stopqty(s_order_mx[ls_i].taskscid,s_order_mx[ls_i].taskid,s_order_mx[ls_i].taskmxid,'',ld_stopqty,'',arg_msg,False) = 0 Then
  13692. rslt = 0
  13693. Goto ext
  13694. End If
  13695. End If
  13696. Next
  13697. End If
  13698. //扣减相关部件生产计划的已分配数量
  13699. If pforderid > 0 Then
  13700. If f_add_conpfqty(arg_scid,pforderid, (pfqty * (acmpqty - orderqty)) / orderqty ,arg_msg,False) = 0 Then
  13701. rslt = 0
  13702. Goto ext
  13703. End If
  13704. End If
  13705. //是否终止用料
  13706. If arg_ifchange = 1 Then
  13707. ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,0,arg_ifchange,1,arg_msg,False)
  13708. If ll_rslt = 0 Then
  13709. rslt = 0
  13710. Goto ext
  13711. ElseIf rslt = 2 Then
  13712. Update u_order_ml
  13713. Set stopreason = rtrim(stopreason) + ','+'已开申购单,不能终止物料需求'
  13714. Where orderid = :arg_orderid
  13715. And scid = :arg_scid;
  13716. If sqlca.SQLCode <> 0 Then
  13717. rslt = 0
  13718. arg_msg = "因网络或其它原因导致补充生产计划终止原因失败"+"~n"+sqlca.SQLErrText
  13719. Goto ext
  13720. End If
  13721. End If
  13722. ElseIf arg_ifchange = 2 Then
  13723. ll_rslt = uof_mtrl_change(arg_scid,arg_orderid,0,0,arg_ifchange,1,arg_msg,False)
  13724. If ll_rslt = 0 Then
  13725. rslt = 0
  13726. Goto ext
  13727. End If
  13728. End If
  13729. //yyx2013-11-9
  13730. If ordertype = 4 And pzlorderid = 0 And (arg_ifchange = 1 Or arg_ifchange = 2) and status = 1 Then
  13731. If it_mxbt = 0 Then
  13732. rslt = 0
  13733. arg_msg = '没有计划明细,操作终止,请检查'
  13734. Goto ext
  13735. End If
  13736. For ls_i = 1 To it_mxbt
  13737. If s_order_mx[ls_i].taskid > 0 Then
  13738. Int li_plantype
  13739. Long ll_wrkGrpid_scll
  13740. Select plantype,wrkGrpid
  13741. Into :li_plantype,:ll_wrkGrpid_scll
  13742. From u_OrderRqMtrl
  13743. Where scid = :scid
  13744. And orderid = :s_order_mx[ls_i].taskid
  13745. And mxpkid = :s_order_mx[ls_i].taskmxid;
  13746. If sqlca.SQLCode <> 0 Then
  13747. arg_msg = '查询生产自制需求资料失败,'+sqlca.SQLErrText
  13748. rslt = 0
  13749. Goto ext
  13750. End If
  13751. If f_assign_rqmtrlqty(scid,s_order_mx[ls_i].taskid,ll_wrkGrpid_scll,&
  13752. mtrlid,ls_mtrlcode,status_mode,&
  13753. woodcode,pcode,0 - s_order_mx[ls_i].orderqty,0,arg_msg,False) = 0 Then
  13754. rslt = 0
  13755. Goto ext
  13756. End If
  13757. End If
  13758. Next
  13759. End If
  13760. //yyx2013-11-9_end
  13761. If ordertype = 4 And li_ptflag = 1 Then
  13762. Update u_orderrqmtrl_scll
  13763. Set u_orderrqmtrl_scll.wareqty = u_orderrqmtrl_scll.dstrqty
  13764. From u_orderrqmtrl_scll
  13765. Where u_orderrqmtrl_scll.scid = :arg_scid
  13766. And u_orderrqmtrl_scll.orderid = :arg_orderid
  13767. And u_orderrqmtrl_scll.wareqty > u_orderrqmtrl_scll.dstrqty;
  13768. If sqlca.SQLCode <> 0 Then
  13769. arg_msg = '更新指令单配套数量失败,'+sqlca.SQLErrText
  13770. rslt = 0
  13771. Goto ext
  13772. End If
  13773. End If
  13774. //如果是通用包件产品,检查相关包件指令是否终止
  13775. //如果是分离排产的指令单,要终止相关主生产计划
  13776. If ordertype = 4 And porderid > 0 Then
  13777. Select ifpack Into :li_ifpack
  13778. From u_mtrldef
  13779. Where mtrlid = :mtrlid;
  13780. If sqlca.SQLCode <> 0 Then
  13781. arg_msg = '查询指令单物料资料包件属性失败,'+sqlca.SQLErrText
  13782. rslt = 0
  13783. Goto ext
  13784. End If
  13785. ll_porderid = porderid
  13786. li_mxbt = 1
  13787. If li_ifpackpro = 1 And li_ifpack = 1 Then
  13788. ds_stop_zl.Retrieve(scid,porderid)
  13789. If ds_stop_zl.RowCount() > 0 Then
  13790. If ds_stop_zl.Find('u_orderrqmtrl_truerqqty > stopqty',1,ds_stop_zl.RowCount()) = 0 Then
  13791. Declare cur_zl_p Cursor For
  13792. Select orderid
  13793. From u_order_ml
  13794. Where scid = :arg_scid
  13795. And porderid = :ll_porderid
  13796. And mtrlid = :ll_mtrlid_p
  13797. And status_mode = :ls_status_p
  13798. And woodcode = :ls_woodcode_p
  13799. And pcode = :ls_pcode_p
  13800. And ordertype = 4;
  13801. Open cur_zl_p;
  13802. Fetch cur_zl_p Into :ll_orderid_arr[li_mxbt];
  13803. Do While sqlca.SQLCode = 0
  13804. li_mxbt++
  13805. Fetch cur_zl_p Into :ll_orderid_arr[li_mxbt];
  13806. Loop
  13807. Close cur_zl_p;
  13808. For ll_i = 1 To li_mxbt - 1
  13809. If stoporder(scid,ll_orderid_arr[ll_i],arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 Then
  13810. rslt = 0
  13811. arg_msg = '自动终止包件产品主生产计划对应的分离指令单失败,'+arg_msg
  13812. Goto ext
  13813. End If
  13814. Next
  13815. // If stoporder(scid,porderid,arg_ifchange,'终止包件指令自动终止主计划',arg_msg,False) = 0 Then
  13816. // rslt = 0
  13817. // arg_msg = '自动终止包件产品主生产计划失败,'+arg_msg
  13818. // Goto ext
  13819. // End If
  13820. End If
  13821. End If
  13822. End If
  13823. //如果是分离排产,还要同时终止主生产计划对应的指令单(非包件产品)
  13824. If uo_option_autostop_porder = 1 Then
  13825. If li_ordertype = 1 And &
  13826. ll_mtrlid_p = mtrlid And &
  13827. ls_status_p = status_mode And &
  13828. ls_woodcode_p = woodcode And &
  13829. ls_pcode_p = pcode And &
  13830. li_ifpackpro = 0 And &
  13831. li_status <> 3 Then
  13832. Update u_order_ml
  13833. Set stopqty = stopqty + (:orderqty - :acmpqty - :stopqty)
  13834. Where u_order_ml.scid = :scid
  13835. And u_order_ml.orderid = :porderid;
  13836. If sqlca.SQLCode <> 0 Then
  13837. rslt = 0
  13838. arg_msg = '更新分离排产对应主生产计划终止数量失败,'+arg_msg
  13839. Goto ext
  13840. End If
  13841. If ld_notinqty_p = orderqty - acmpqty - stopqty Then
  13842. If stoporder(scid,porderid,arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 Then
  13843. rslt = 0
  13844. arg_msg = '自动终止分离排产对应主生产计划失败,'+arg_msg
  13845. Goto ext
  13846. End If
  13847. End If
  13848. End If
  13849. // DECLARE cur_zl_p CURSOR FOR
  13850. // SELECT orderid
  13851. // FROM u_order_ml
  13852. // WHERE scid = :arg_scid
  13853. // AND porderid = :ll_porderid
  13854. // AND mtrlid = :ll_mtrlid_p
  13855. // AND status_mode = :ls_status_p
  13856. // AND woodcode = :ls_woodcode_p
  13857. // And pcode = :ls_pcode_p;
  13858. //
  13859. // OPEN cur_zl_p;
  13860. //
  13861. // FETCH cur_zl_p Into :ll_orderid_arr[li_mxbt];
  13862. //
  13863. // DO WHILE sqlca.SQLCode = 0
  13864. // li_mxbt++
  13865. // FETCH cur_zl_p Into :ll_orderid_arr[li_mxbt];
  13866. // LOOP
  13867. //
  13868. // CLOSE cur_zl_p;
  13869. //
  13870. // FOR ll_i = 1 To li_mxbt - 1
  13871. // IF stoporder(scid,ll_orderid_arr[ll_i],arg_ifchange,'终止包件指令自动终止',arg_msg,False) = 0 THEN
  13872. // rslt = 0
  13873. // arg_msg = '自动终止包件产品主生产计划对应的分离指令单失败,'+arg_msg
  13874. // GOTO ext
  13875. // END IF
  13876. // NEXT
  13877. End If
  13878. End If
  13879. Update u_order_ml
  13880. Set status = 3,
  13881. stopemp = :publ_operator,
  13882. Accomplishdate = getdate(),
  13883. stopreason = :arg_stopreason,
  13884. stopqty = orderqty - acmpqty
  13885. Where orderid = :arg_orderid
  13886. And scid = :arg_scid;
  13887. If sqlca.SQLCode <> 0 Then
  13888. rslt = 0
  13889. arg_msg = "因网络或其它原因导致终止生产计划操作失败"+"~n"+sqlca.SQLErrText
  13890. Goto ext
  13891. End If
  13892. ext:
  13893. If rslt = 0 Then
  13894. Rollback;
  13895. p_reset()
  13896. ElseIf arg_ifcommit And rslt = 1 Then
  13897. Commit;
  13898. End If
  13899. Destroy uo_task
  13900. Destroy ds_stop_zl
  13901. Return (rslt)
  13902. end function
  13903. public function integer f_add_flqty (long arg_scid, long arg_orderid, long arg_wrkgrpid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt
  13904. rslt = 1
  13905. String ls_ordercode
  13906. SELECT ordercode INTO :ls_ordercode
  13907. FROM u_order_ml
  13908. WHERE scid = :arg_scid
  13909. And orderid = :arg_orderid;
  13910. IF sqlca.SQLCode <> 0 THEN
  13911. rslt = 0
  13912. arg_msg = '查询指令单信息失败,scid:'+String(arg_scid)+',orderid:'+String(arg_orderid)+','+sqlca.SQLErrText
  13913. GOTO ext
  13914. END IF
  13915. UPDATE u_OrderRqMtrl_scll
  13916. SET flqty = flqty + :arg_addqty
  13917. WHERE scid = :arg_scid
  13918. AND orderid = :arg_orderid
  13919. AND wrkgrpid = :arg_wrkgrpid
  13920. AND mtrlid = :arg_mtrlid
  13921. AND status = :arg_status
  13922. AND woodcode = :arg_woodcode
  13923. And pcode = :arg_pcode;
  13924. IF sqlca.SQLCode <> 0 THEN
  13925. rslt = 0
  13926. arg_msg = '指令单:'+ls_ordercode+'更新物料:'+arg_mtrlcode+',发料通知单数失败>>'+sqlca.SQLErrText
  13927. GOTO ext
  13928. END IF
  13929. ext:
  13930. IF rslt = 0 THEN
  13931. ROLLBACK;
  13932. ELSEIF rslt = 1 And arg_ifcommit THEN
  13933. COMMIT;
  13934. END IF
  13935. RETURN rslt
  13936. end function
  13937. public function integer uof_bom_workprice (long arg_mtrlid, string arg_pfcode, decimal arg_qty, ref string arg_msg);Int rslt = 1
  13938. Int li_mtrlorigin
  13939. Long count = 0,cnt
  13940. Long ll_i
  13941. s_pfmx ls_s_pfmx[]
  13942. Decimal ld_cmpqty
  13943. Decimal ld_qty,ld_bom_qty
  13944. Long tem_long
  13945. String ls_wpcode
  13946. String ls_pricestr_value
  13947. Decimal ld_workprice_str
  13948. deep++
  13949. If deep > 1000 Then
  13950. arg_msg = '递归太深'+String(deep)
  13951. rslt = 0
  13952. Goto ext
  13953. End If
  13954. Select cmpqty Into :ld_cmpqty
  13955. From u_mtrldef
  13956. Where mtrlid = :arg_mtrlid;
  13957. If sqlca.SQLCode <> 0 Then
  13958. arg_msg = '查询物料清单基数失败,'+sqlca.SQLErrText
  13959. rslt = 0
  13960. Goto ext
  13961. End If
  13962. Declare pf_cur Cursor For
  13963. Select u_PrdPF.Sonscale,
  13964. u_PrdPF.SonLoss,
  13965. u_PrdPF.SonDECLosS,
  13966. u_PrdPF.SonMtrlid,
  13967. u_PrdPF.sonpfcode,
  13968. u_mtrldef.mtrlcode,
  13969. u_mtrldef.mrptype,
  13970. u_mtrldef.mrparg
  13971. From u_PrdPF Inner JOIN
  13972. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  13973. Where (u_mtrldef.ifselforder = 0)
  13974. And (u_mtrldef.mtrlorigin = 0)
  13975. And ( u_PrdPF.mtrlid = :arg_mtrlid ) And
  13976. ( u_PrdPF.pfcode = :arg_pfcode )
  13977. Order By u_PrdPF.printid;
  13978. Open pf_cur;
  13979. count = 1
  13980. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  13981. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode,&
  13982. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  13983. :ls_s_pfmx[count].u_mtrldef_mrparg;
  13984. Do While sqlca.SQLCode = 0
  13985. count++
  13986. Fetch pf_cur Into :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  13987. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode,&
  13988. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  13989. :ls_s_pfmx[count].u_mtrldef_mrparg;
  13990. Loop
  13991. count = count - 1
  13992. Close pf_cur;
  13993. For ll_i = 1 To count
  13994. If ls_s_pfmx[ll_i].u_mtrldef_mrptype = 0 Then
  13995. ld_qty = Round(arg_qty * (ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ll_i].u_mtrldef_mrparg)
  13996. ld_bom_qty = Round((ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ll_i].u_mtrldef_mrparg)
  13997. Else
  13998. If ls_s_pfmx[ll_i].u_mtrldef_mrparg = 0 Then
  13999. ld_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty)
  14000. ld_bom_qty = Ceiling(Truncate(ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty)
  14001. Else
  14002. tem_long = 10^ls_s_pfmx[ll_i].u_mtrldef_mrparg
  14003. ld_qty = Ceiling((Truncate(arg_qty * ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) * tem_long)/tem_long
  14004. ld_qty = Round(ld_qty , ls_s_pfmx[ll_i].u_mtrldef_mrparg)
  14005. ld_bom_qty = Ceiling((Truncate(ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS,10)/ld_cmpqty) * tem_long)/tem_long
  14006. ld_bom_qty = Round(ld_bom_qty , ls_s_pfmx[ll_i].u_mtrldef_mrparg)
  14007. End If
  14008. End If
  14009. ls_wpcode = f_get_dft_wp(ls_s_pfmx[ll_i].SonMtrlid)
  14010. If ls_wpcode = '' Then
  14011. rslt = 0
  14012. arg_msg = '查询部件:'+ls_s_pfmx[count].mtrlcode+' 默认工价表号失败'
  14013. Goto ext
  14014. End If
  14015. cnt = 0
  14016. Select COUNT(*)
  14017. Into :cnt
  14018. From (Select rpcode, SUM(ifdftpg) AS ifdftpg
  14019. From u_sc_workprice
  14020. Where (Mtrlid = :ls_s_pfmx[ll_i].SonMtrlid)
  14021. And (rpcode <> '')
  14022. And (u_sc_workprice.wpcode = :ls_wpcode)
  14023. Group By rpcode
  14024. Having (SUM(ifdftpg) <> 1)) v_rpcode;
  14025. If sqlca.SQLCode <> 0 Then
  14026. rslt = 0
  14027. arg_msg = '查询部件:'+ls_s_pfmx[count].mtrlcode+' 替代工序默认派工属性是否设置正确失败'
  14028. Goto ext
  14029. End If
  14030. If cnt > 0 Then
  14031. rslt = 0
  14032. arg_msg = '部件:'+ls_s_pfmx[count].mtrlcode+' 替代工序默认派工属性必须设置且必须唯一'
  14033. Goto ext
  14034. End If
  14035. Declare cur_wpmx Cursor For
  14036. Select u_sc_workprice.procode,
  14037. u_sc_workprice.proname,
  14038. u_sc_workprice.proorder,
  14039. u_sc_workprice.workqty * :ld_qty,
  14040. u_sc_workprice.wrkgrpid,
  14041. u_sc_workprice.lsxtype,
  14042. u_sc_workprice.workprice,
  14043. u_sc_workprice.status,
  14044. u_sc_workprice.ifjd,
  14045. u_sc_workprice.lastflag,
  14046. u_sc_workprice.sctype,
  14047. u_sc_workprice.equipmentid,
  14048. u_sc_workprice.partname,
  14049. u_sc_workprice.eqworkhour,
  14050. u_sc_workprice.Workhour,
  14051. u_sc_workprice.beforehour,
  14052. u_sc_workprice.afterhour,
  14053. u_sc_workprice.workprice,
  14054. u_sc_workprice.worktype,
  14055. u_sc_workprice.eq_empnum,
  14056. u_sc_workprice.ifgroup,
  14057. u_sc_workprice.u_workqty * :ld_qty,
  14058. u_sc_workprice.u_workprice,
  14059. :ls_s_pfmx[ll_i].mtrlcode,
  14060. u_sc_workprice.workprice * :ld_bom_qty,
  14061. u_sc_workprice.pricestr,
  14062. '['+ltrim(rtrim(u_mtrldef.mtrlcode))+']' + ltrim(rtrim(u_mtrldef.mtrlname)) + '('+ltrim(rtrim(u_mtrldef.mtrlmode))+')',
  14063. u_sc_workprice.replacestr,
  14064. u_sc_workprice.mtrlid,
  14065. u_sc_workprice.rpcode,
  14066. u_sc_workprice.auditflag_gj
  14067. From u_sc_workprice Inner JOIN
  14068. u_mtrldef ON u_sc_workprice.Mtrlid = u_mtrldef.mtrlid
  14069. Where u_sc_workprice.mtrlid = :ls_s_pfmx[ll_i].SonMtrlid
  14070. And u_sc_workprice.ifownpro = 0
  14071. And u_sc_workprice.lsxtype <> 0
  14072. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  14073. And u_sc_workprice.wpcode = :ls_wpcode;
  14074. Open cur_wpmx;
  14075. it_mx_bomwp++
  14076. Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,&
  14077. :ins_s_wp[it_mx_bomwp].proname,&
  14078. :ins_s_wp[it_mx_bomwp].proorder,&
  14079. :ins_s_wp[it_mx_bomwp].workqty,&
  14080. :ins_s_wp[it_mx_bomwp].wrkgrpid,&
  14081. :ins_s_wp[it_mx_bomwp].lsxtype,&
  14082. :ins_s_wp[it_mx_bomwp].workprice,&
  14083. :ins_s_wp[it_mx_bomwp].status,&
  14084. :ins_s_wp[it_mx_bomwp].ifjd,&
  14085. :ins_s_wp[it_mx_bomwp].lastflag,&
  14086. :ins_s_wp[it_mx_bomwp].sctype,&
  14087. :ins_s_wp[it_mx_bomwp].equipmentid,&
  14088. :ins_s_wp[it_mx_bomwp].partname,&
  14089. :ins_s_wp[it_mx_bomwp].eqworkhour,&
  14090. :ins_s_wp[it_mx_bomwp].Workhour,&
  14091. :ins_s_wp[it_mx_bomwp].beforehour,&
  14092. :ins_s_wp[it_mx_bomwp].afterhour,&
  14093. :ins_s_wp[it_mx_bomwp].workprice,&
  14094. :ins_s_wp[it_mx_bomwp].worktype,&
  14095. :ins_s_wp[it_mx_bomwp].eq_empnum,&
  14096. :ins_s_wp[it_mx_bomwp].ifgroup,&
  14097. :ins_s_wp[it_mx_bomwp].u_workqty,&
  14098. :ins_s_wp[it_mx_bomwp].u_workprice,&
  14099. :ins_s_wp[it_mx_bomwp].mtrlcode,&
  14100. :ins_s_wp[it_mx_bomwp].workprice_bom,&
  14101. :ins_s_wp[it_mx_bomwp].pricestr,&
  14102. :ins_s_wp[it_mx_bomwp].pro_dscrp,&
  14103. :ins_s_wp[it_mx_bomwp].replacestr,&
  14104. :ins_s_wp[it_mx_bomwp].sonmtrlid,&
  14105. :ins_s_wp[it_mx_bomwp].rpcode,&
  14106. :ins_s_wp[it_mx_bomwp].auditflag_gj;
  14107. Do While sqlca.SQLCode = 0
  14108. //套入公式
  14109. If ins_s_wp[it_mx_bomwp].pricestr <> '' Then
  14110. If uof_workprice_parm(ls_s_pfmx[ll_i].SonMtrlid,ls_wpcode,ins_s_wp[it_mx_bomwp].procode,ins_s_wp[it_mx_bomwp].workqty,ins_s_wp[it_mx_bomwp].pricestr,0,ls_pricestr_value,ld_workprice_str) <> 0 Then
  14111. ins_s_wp[it_mx_bomwp].workprice_bom = ld_workprice_str
  14112. ins_s_wp[it_mx_bomwp].workprice = ld_workprice_str
  14113. ins_s_wp[it_mx_bomwp].pricestr_value = ls_pricestr_value
  14114. End If
  14115. End If
  14116. it_mx_bomwp++
  14117. Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,&
  14118. :ins_s_wp[it_mx_bomwp].proname,&
  14119. :ins_s_wp[it_mx_bomwp].proorder,&
  14120. :ins_s_wp[it_mx_bomwp].workqty,&
  14121. :ins_s_wp[it_mx_bomwp].wrkgrpid,&
  14122. :ins_s_wp[it_mx_bomwp].lsxtype,&
  14123. :ins_s_wp[it_mx_bomwp].workprice,&
  14124. :ins_s_wp[it_mx_bomwp].status,&
  14125. :ins_s_wp[it_mx_bomwp].ifjd,&
  14126. :ins_s_wp[it_mx_bomwp].lastflag,&
  14127. :ins_s_wp[it_mx_bomwp].sctype,&
  14128. :ins_s_wp[it_mx_bomwp].equipmentid,&
  14129. :ins_s_wp[it_mx_bomwp].partname,&
  14130. :ins_s_wp[it_mx_bomwp].eqworkhour,&
  14131. :ins_s_wp[it_mx_bomwp].Workhour,&
  14132. :ins_s_wp[it_mx_bomwp].beforehour,&
  14133. :ins_s_wp[it_mx_bomwp].afterhour,&
  14134. :ins_s_wp[it_mx_bomwp].workprice,&
  14135. :ins_s_wp[it_mx_bomwp].worktype,&
  14136. :ins_s_wp[it_mx_bomwp].eq_empnum,&
  14137. :ins_s_wp[it_mx_bomwp].ifgroup,&
  14138. :ins_s_wp[it_mx_bomwp].u_workqty,&
  14139. :ins_s_wp[it_mx_bomwp].u_workprice,&
  14140. :ins_s_wp[it_mx_bomwp].mtrlcode,&
  14141. :ins_s_wp[it_mx_bomwp].workprice_bom,&
  14142. :ins_s_wp[it_mx_bomwp].pricestr,&
  14143. :ins_s_wp[it_mx_bomwp].pro_dscrp,&
  14144. :ins_s_wp[it_mx_bomwp].replacestr,&
  14145. :ins_s_wp[it_mx_bomwp].sonmtrlid,&
  14146. :ins_s_wp[it_mx_bomwp].rpcode,&
  14147. :ins_s_wp[it_mx_bomwp].auditflag_gj;
  14148. Loop
  14149. Close cur_wpmx;
  14150. it_mx_bomwp = it_mx_bomwp - 1
  14151. If uof_bom_workprice(ls_s_pfmx[ll_i].SonMtrlid,ls_s_pfmx[ll_i].sonpfcode,ld_qty,arg_msg) = 0 Then
  14152. rslt = 0
  14153. Goto ext
  14154. End If
  14155. Next
  14156. ext:
  14157. Return rslt
  14158. end function
  14159. public function integer uof_protype_workprice (long arg_mtrlid, string arg_pfcode, string arg_wpcode, decimal arg_qty, ref string arg_msg);Int rslt
  14160. String ls_pricestr_value
  14161. Decimal ld_workprice_str
  14162. rslt = 1
  14163. Declare cur_wpmx Cursor For
  14164. Select u_sc_workprice.procode,
  14165. u_sc_workprice.proname,
  14166. u_sc_workprice.proorder,
  14167. u_sc_workprice.workqty * :arg_qty,
  14168. u_sc_workprice.wrkgrpid,
  14169. u_sc_workprice.lsxtype,
  14170. u_sc_workprice.workprice,
  14171. u_sc_workprice.status,
  14172. u_sc_workprice.ifjd,
  14173. u_sc_workprice.lastflag,
  14174. u_sc_workprice.sctype,
  14175. u_sc_workprice.equipmentid,
  14176. u_sc_workprice.partname,
  14177. u_sc_workprice.eqworkhour,
  14178. u_sc_workprice.Workhour,
  14179. u_sc_workprice.beforehour,
  14180. u_sc_workprice.afterhour,
  14181. u_sc_workprice.workprice,
  14182. u_sc_workprice.worktype,
  14183. u_sc_workprice.eq_empnum,
  14184. u_sc_workprice.ifgroup,
  14185. u_sc_workprice.u_workqty * :arg_qty,
  14186. u_sc_workprice.u_workprice,
  14187. u_mtrldef.mtrlcode,
  14188. u_sc_workprice.workprice,
  14189. u_sc_workprice.pricestr,
  14190. '['+ltrim(rtrim(u_mtrldef.mtrlcode))+']' + ltrim(rtrim(u_mtrldef.mtrlname)) + '('+ltrim(rtrim(u_mtrldef.mtrlmode))+')',
  14191. u_sc_workprice.replacestr,
  14192. u_sc_workprice.mtrlid,
  14193. u_sc_workprice.rpcode,
  14194. u_sc_workprice.auditflag_gj
  14195. From u_sc_workprice Inner JOIN
  14196. u_mtrldef ON u_sc_workprice.Mtrlid = u_mtrldef.mtrlid
  14197. Where u_sc_workprice.mtrlid = :arg_mtrlid
  14198. And u_sc_workprice.ifownpro = 0
  14199. And u_sc_workprice.lsxtype <> 0
  14200. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  14201. And u_sc_workprice.wpcode = :arg_wpcode;
  14202. Open cur_wpmx;
  14203. it_mx_bomwp++
  14204. Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,&
  14205. :ins_s_wp[it_mx_bomwp].proname,&
  14206. :ins_s_wp[it_mx_bomwp].proorder,&
  14207. :ins_s_wp[it_mx_bomwp].workqty,&
  14208. :ins_s_wp[it_mx_bomwp].wrkgrpid,&
  14209. :ins_s_wp[it_mx_bomwp].lsxtype,&
  14210. :ins_s_wp[it_mx_bomwp].workprice,&
  14211. :ins_s_wp[it_mx_bomwp].status,&
  14212. :ins_s_wp[it_mx_bomwp].ifjd,&
  14213. :ins_s_wp[it_mx_bomwp].lastflag,&
  14214. :ins_s_wp[it_mx_bomwp].sctype,&
  14215. :ins_s_wp[it_mx_bomwp].equipmentid,&
  14216. :ins_s_wp[it_mx_bomwp].partname,&
  14217. :ins_s_wp[it_mx_bomwp].eqworkhour,&
  14218. :ins_s_wp[it_mx_bomwp].Workhour,&
  14219. :ins_s_wp[it_mx_bomwp].beforehour,&
  14220. :ins_s_wp[it_mx_bomwp].afterhour,&
  14221. :ins_s_wp[it_mx_bomwp].workprice,&
  14222. :ins_s_wp[it_mx_bomwp].worktype,&
  14223. :ins_s_wp[it_mx_bomwp].eq_empnum,&
  14224. :ins_s_wp[it_mx_bomwp].ifgroup,&
  14225. :ins_s_wp[it_mx_bomwp].u_workqty,&
  14226. :ins_s_wp[it_mx_bomwp].u_workprice,&
  14227. :ins_s_wp[it_mx_bomwp].mtrlcode,&
  14228. :ins_s_wp[it_mx_bomwp].workprice_bom,&
  14229. :ins_s_wp[it_mx_bomwp].pricestr,&
  14230. :ins_s_wp[it_mx_bomwp].pro_dscrp,&
  14231. :ins_s_wp[it_mx_bomwp].replacestr,&
  14232. :ins_s_wp[it_mx_bomwp].sonmtrlid,&
  14233. :ins_s_wp[it_mx_bomwp].rpcode,&
  14234. :ins_s_wp[it_mx_bomwp].auditflag_gj;
  14235. Do While sqlca.SQLCode = 0
  14236. //套入公式
  14237. If ins_s_wp[it_mx_bomwp].pricestr <> '' Then
  14238. If uof_workprice_parm(arg_mtrlid,arg_wpcode,ins_s_wp[it_mx_bomwp].procode,ins_s_wp[it_mx_bomwp].workqty,ins_s_wp[it_mx_bomwp].pricestr,0,ls_pricestr_value,ld_workprice_str) <> 0 Then
  14239. ins_s_wp[it_mx_bomwp].workprice_bom = ld_workprice_str
  14240. ins_s_wp[it_mx_bomwp].workprice = ld_workprice_str
  14241. ins_s_wp[it_mx_bomwp].pricestr_value = ls_pricestr_value
  14242. End If
  14243. End If
  14244. it_mx_bomwp++
  14245. Fetch cur_wpmx Into :ins_s_wp[it_mx_bomwp].procode,&
  14246. :ins_s_wp[it_mx_bomwp].proname,&
  14247. :ins_s_wp[it_mx_bomwp].proorder,&
  14248. :ins_s_wp[it_mx_bomwp].workqty,&
  14249. :ins_s_wp[it_mx_bomwp].wrkgrpid,&
  14250. :ins_s_wp[it_mx_bomwp].lsxtype,&
  14251. :ins_s_wp[it_mx_bomwp].workprice,&
  14252. :ins_s_wp[it_mx_bomwp].status,&
  14253. :ins_s_wp[it_mx_bomwp].ifjd,&
  14254. :ins_s_wp[it_mx_bomwp].lastflag,&
  14255. :ins_s_wp[it_mx_bomwp].sctype,&
  14256. :ins_s_wp[it_mx_bomwp].equipmentid,&
  14257. :ins_s_wp[it_mx_bomwp].partname,&
  14258. :ins_s_wp[it_mx_bomwp].eqworkhour,&
  14259. :ins_s_wp[it_mx_bomwp].Workhour,&
  14260. :ins_s_wp[it_mx_bomwp].beforehour,&
  14261. :ins_s_wp[it_mx_bomwp].afterhour,&
  14262. :ins_s_wp[it_mx_bomwp].workprice,&
  14263. :ins_s_wp[it_mx_bomwp].worktype,&
  14264. :ins_s_wp[it_mx_bomwp].eq_empnum,&
  14265. :ins_s_wp[it_mx_bomwp].ifgroup,&
  14266. :ins_s_wp[it_mx_bomwp].u_workqty,&
  14267. :ins_s_wp[it_mx_bomwp].u_workprice,&
  14268. :ins_s_wp[it_mx_bomwp].mtrlcode,&
  14269. :ins_s_wp[it_mx_bomwp].workprice_bom,&
  14270. :ins_s_wp[it_mx_bomwp].pricestr,&
  14271. :ins_s_wp[it_mx_bomwp].pro_dscrp,&
  14272. :ins_s_wp[it_mx_bomwp].replacestr,&
  14273. :ins_s_wp[it_mx_bomwp].sonmtrlid,&
  14274. :ins_s_wp[it_mx_bomwp].rpcode,&
  14275. :ins_s_wp[it_mx_bomwp].auditflag_gj;
  14276. Loop
  14277. Close cur_wpmx;
  14278. it_mx_bomwp = it_mx_bomwp - 1
  14279. If uof_bom_workprice(arg_mtrlid,arg_pfcode,arg_qty,arg_msg) = 0 Then
  14280. rslt = 0
  14281. Goto ext
  14282. End If
  14283. ext:
  14284. Return rslt
  14285. end function
  14286. public function integer add_gydscrp (long arg_scid, long arg_orderid, string arg_newdescppart, ref string arg_msg);
  14287. Int rslt = 1
  14288. IF arg_newdescppart = '' THEN
  14289. rslt = 0
  14290. arG_MSG = "要添加内容为空,操作取消"
  14291. GOTO ext
  14292. END IF
  14293. rslt = p_getinfo(arg_scid,arg_orderid, arG_MSG)
  14294. IF rslt = 0 THEN GOTO ext
  14295. IF status = 0 THEN
  14296. rslt = 0
  14297. arG_MSG = "待审核状态下不可用"
  14298. GOTO ext
  14299. END IF
  14300. UPDATE u_order_ml
  14301. SET gydscrp = :arg_newdescppart
  14302. WHERE u_order_ml.orderid = :arg_orderid
  14303. AND u_order_ml.scid = :arg_scid;
  14304. IF SQLCA.SQLCode <> 0 THEN
  14305. rslt = 0
  14306. arG_MSG = "因网络或其它原因导致修改工艺说明操作失败"+"~n"+SQLCA.SQLErrText
  14307. ROLLBACK;
  14308. GOTO ext
  14309. END IF
  14310. gydscrp = arg_newdescppart
  14311. ext:
  14312. IF rslt = 1 THEN
  14313. COMMIT;
  14314. END IF
  14315. p_reset()
  14316. RETURN (rslt)
  14317. end function
  14318. public function integer uof_stop_tree (long arg_scid, long arg_orderid, decimal arg_stopqty, integer arg_type, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit);Int rslt
  14319. rslt = 1
  14320. Long ll_i,ll_j,ll_k
  14321. Long ll_porderid,ll_printid
  14322. Decimal ld_stopqty,ld_standardrqqty,ld_rate
  14323. Long ll_mtrlid,ll_wrkgrpid,ll_produce_wrkgrpid,ll_wrkgrpid_zl
  14324. Int li_plantype
  14325. String ls_status,ls_woodcode,ls_pcode
  14326. Decimal ld_rqqty_tree
  14327. Long ll_lp,ll_mtrlid_zl,ll_printid_tree
  14328. String ls_status_zl,ls_woodcode_zl,ls_pcode_zl
  14329. Decimal ld_stopqty_sum,ld_stopqty_tmp
  14330. Int li_ifwfjgup,li_ordertype_zl
  14331. ld_stopqty_sum = arg_stopqty
  14332. datastore ds_tree
  14333. ds_tree = Create datastore
  14334. ds_tree.DataObject = 'ds_orderrqmtrl_tree_stop'
  14335. ds_tree.SetTransObject(sqlca)
  14336. datastore ds_stop_his
  14337. ds_stop_his = Create datastore
  14338. ds_stop_his.DataObject = 'ds_order_ml_stop_mtrl_his'
  14339. ds_stop_his.SetTransObject(sqlca)
  14340. If arg_type = 0 Then
  14341. //终止
  14342. Select mtrlid,status_mode,woodcode,pcode,porderid,wrkgrpid,ordertype
  14343. Into :ll_mtrlid_zl,:ls_status_zl,:ls_woodcode_zl,:ls_pcode_zl,:ll_porderid,:ll_wrkgrpid_zl,:li_ordertype_zl
  14344. From u_order_ml
  14345. Where scid = :arg_scid
  14346. And orderid = :arg_orderid;
  14347. If sqlca.SQLCode <> 0 Then
  14348. rslt = 0
  14349. arg_msg = '查询指令单信息失败'+"~n"+sqlca.SQLErrText
  14350. Goto ext
  14351. End If
  14352. //yyx2014-8-14主计划也是指令单
  14353. if li_ordertype_zl <> 4 then
  14354. ll_porderid = arg_orderid
  14355. end if
  14356. //end_yyx2014-8-14主计划也是指令单
  14357. Delete From u_order_ml_stop_mtrl_his
  14358. Where scid = :arg_scid
  14359. And orderid = :arg_orderid;
  14360. If sqlca.SQLCode <> 0 Then
  14361. rslt = 0
  14362. arg_msg = "删除旧终止记录操作失败"+"~n"+sqlca.SQLErrText
  14363. Goto ext
  14364. End If
  14365. ds_tree.Retrieve(arg_scid,ll_porderid)
  14366. If ds_tree.RowCount() <= 0 Then
  14367. rslt = 1
  14368. Goto ext
  14369. End If
  14370. For ll_i = 1 To ds_tree.RowCount()
  14371. If ld_stopqty_sum <= 0 Then Exit
  14372. ll_mtrlid = ds_tree.Object.mtrlid[ll_i]
  14373. ls_status = ds_tree.Object.status[ll_i]
  14374. ls_woodcode = ds_tree.Object.woodcode[ll_i]
  14375. ls_pcode = ds_tree.Object.pcode[ll_i]
  14376. //1.定位指令单在运算树中的位置
  14377. If ll_mtrlid = ll_mtrlid_zl And ls_status = ls_status_zl And ls_woodcode = ls_woodcode_zl And ls_pcode = ls_pcode_zl Then
  14378. ll_lp = ds_tree.Object.lp[ll_i]
  14379. ll_printid_tree = ds_tree.Object.printid[ll_i]
  14380. ld_standardrqqty = ds_tree.Object.standardrqqty[ll_i]
  14381. If ld_standardrqqty = 0 Then
  14382. ld_standardrqqty = ds_tree.Object.rqqty[ll_i]
  14383. End If
  14384. If ld_stopqty_sum > ld_standardrqqty Then
  14385. ld_stopqty_tmp = ld_standardrqqty
  14386. ld_stopqty_sum = ld_stopqty_sum - ld_stopqty_tmp
  14387. Else
  14388. ld_stopqty_tmp = ld_stopqty_sum
  14389. ld_stopqty_sum = 0
  14390. End If
  14391. If ld_standardrqqty = 0 Then
  14392. ld_rate = 1
  14393. Else
  14394. ld_rate = ld_stopqty_tmp / ld_standardrqqty
  14395. End If
  14396. //1.1 终止指令单在运算树中的数量
  14397. // UPDATE u_orderrqmtrl_tree
  14398. // SET rqqty = rqqty - :ld_stopqty_tmp,
  14399. // truerqqty = truerqqty- :ld_stopqty_tmp,
  14400. // scllqty = scllqty - :ld_stopqty_tmp
  14401. // WHERE scid = :arg_scid
  14402. // AND orderid = :ll_porderid
  14403. // And printid = :ll_printid_tree;
  14404. // IF sqlca.SQLCode <> 0 THEN
  14405. // rslt = 0
  14406. // arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText
  14407. // GOTO ext
  14408. // END IF
  14409. //yyx2013-10-31
  14410. Update u_orderrqmtrl_tree
  14411. Set truerqqty = truerqqty - :ld_stopqty_tmp
  14412. Where scid = :arg_scid
  14413. And orderid = :ll_porderid
  14414. And printid = :ll_printid_tree;
  14415. If sqlca.SQLCode <> 0 Then
  14416. rslt = 0
  14417. arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText
  14418. Goto ext
  14419. End If
  14420. Update u_orderrqmtrl
  14421. Set truerqqty = truerqqty - :ld_stopqty_tmp
  14422. Where scid = :arg_scid
  14423. And orderid = :ll_porderid
  14424. And mtrlid = :ll_mtrlid_zl
  14425. And produce_wrkGrpid = :ll_wrkgrpid_zl
  14426. And status = :ls_status_zl
  14427. And woodcode = :ls_woodcode_zl
  14428. And pcode = :ls_pcode_zl
  14429. And plantype = 0;
  14430. If sqlca.SQLCode <> 0 Then
  14431. rslt = 0
  14432. arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText
  14433. Goto ext
  14434. End If
  14435. //
  14436. If arg_ifaddhis = 1 Then
  14437. Update u_order_ml_stop_mtrl_his
  14438. Set stopqty = stopqty + :ld_stopqty_tmp
  14439. Where scid = :arg_scid
  14440. And orderid = :arg_orderid
  14441. And porderid = :ll_porderid
  14442. And printid = :ll_printid_tree;
  14443. If sqlca.SQLCode = 0 Then
  14444. If sqlca.SQLNRows = 0 Then
  14445. Insert Into u_order_ml_stop_mtrl_his
  14446. (scid,
  14447. orderid,
  14448. porderid,
  14449. printid,
  14450. stopqty)
  14451. Values (:arg_scid,
  14452. :arg_orderid,
  14453. :ll_porderid,
  14454. :ll_printid_tree,
  14455. :ld_stopqty_tmp);
  14456. If sqlca.SQLCode <> 0 Then
  14457. rslt = 0
  14458. arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText
  14459. Goto ext
  14460. End If
  14461. End If
  14462. Else
  14463. rslt = 0
  14464. arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText
  14465. Goto ext
  14466. End If
  14467. End If
  14468. // //1.1 end
  14469. //2.如果直接上级是外协,终止相应数量
  14470. For ll_j = ll_i - 1 To 1 Step -1
  14471. If ds_tree.Object.lp[ll_j] <= ll_lp - 2 Then Exit
  14472. If ds_tree.Object.lp[ll_j] = ll_lp - 1 Then
  14473. If ds_tree.Object.plantype[ll_j] <> 3 Then Exit
  14474. ll_mtrlid = ds_tree.Object.mtrlid[ll_j]
  14475. ll_wrkgrpid = ds_tree.Object.wrkgrpid[ll_j]
  14476. ll_produce_wrkgrpid = ds_tree.Object.produce_wrkGrpid[ll_j]
  14477. li_plantype = ds_tree.Object.plantype[ll_j]
  14478. ls_status = ds_tree.Object.status[ll_j]
  14479. ls_woodcode = ds_tree.Object.woodcode[ll_j]
  14480. ls_pcode = ds_tree.Object.pcode[ll_j]
  14481. ld_rqqty_tree = ds_tree.Object.u_orderrqmtrl_tree_truerqqty[ll_j]
  14482. ll_printid = ds_tree.Object.printid[ll_j]
  14483. //上级是外协,只终止净需求数(上层的自制仍需领料)
  14484. Update u_orderrqmtrl
  14485. Set truerqqty = truerqqty - :ld_rqqty_tree * :ld_rate
  14486. Where scid = :arg_scid
  14487. And orderid = :ll_porderid
  14488. And mtrlid = :ll_mtrlid
  14489. And wrkgrpid = :ll_wrkgrpid
  14490. And status = :ls_status
  14491. And woodcode = :ls_woodcode
  14492. And pcode = :ls_pcode
  14493. And plantype = :li_plantype;
  14494. If sqlca.SQLCode <> 0 Then
  14495. rslt = 0
  14496. arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText
  14497. Goto ext
  14498. End If
  14499. Update u_orderrqmtrl_tree
  14500. Set truerqqty = truerqqty- :ld_rqqty_tree * :ld_rate
  14501. Where scid = :arg_scid
  14502. And orderid = :ll_porderid
  14503. And printid = :ll_printid;
  14504. If sqlca.SQLCode <> 0 Then
  14505. rslt = 0
  14506. arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText
  14507. Goto ext
  14508. End If
  14509. If arg_ifaddhis = 1 Then
  14510. Update u_order_ml_stop_mtrl_his
  14511. Set stopqty = stopqty + :ld_rqqty_tree * :ld_rate
  14512. Where scid = :arg_scid
  14513. And orderid = :arg_orderid
  14514. And porderid = :ll_porderid
  14515. And printid = :ll_printid;
  14516. If sqlca.SQLCode = 0 Then
  14517. If sqlca.SQLNRows = 0 Then
  14518. Insert Into u_order_ml_stop_mtrl_his
  14519. (scid,
  14520. orderid,
  14521. porderid,
  14522. printid,
  14523. stopqty,
  14524. ifwfjgup)
  14525. Values (:arg_scid,
  14526. :arg_orderid,
  14527. :ll_porderid,
  14528. :ll_printid,
  14529. :ld_rqqty_tree * :ld_rate,
  14530. 1);
  14531. If sqlca.SQLCode <> 0 Then
  14532. rslt = 0
  14533. arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText
  14534. Goto ext
  14535. End If
  14536. End If
  14537. Else
  14538. rslt = 0
  14539. arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText
  14540. Goto ext
  14541. End If
  14542. End If
  14543. Exit
  14544. End If
  14545. Next
  14546. //3.下级外协件的采购数量按相应数量终止
  14547. For ll_j = ll_i + 1 To ds_tree.RowCount()
  14548. If ds_tree.Object.lp[ll_j] <= ll_lp Then Exit
  14549. If ds_tree.Object.lp[ll_j] = ll_lp + 1 And ds_tree.Object.plantype[ll_j] = 3 Then
  14550. For ll_k = ll_j + 1 To ds_tree.RowCount()
  14551. If ds_tree.Object.lp[ll_k] <= ll_lp + 1 Then Exit
  14552. If ds_tree.Object.lp[ll_k] = ll_lp + 2 And ds_tree.Object.plantype[ll_k] = 2 Then
  14553. ll_mtrlid = ds_tree.Object.mtrlid[ll_k]
  14554. ll_wrkgrpid = ds_tree.Object.wrkgrpid[ll_k]
  14555. ll_produce_wrkgrpid = ds_tree.Object.produce_wrkGrpid[ll_k]
  14556. li_plantype = ds_tree.Object.plantype[ll_k]
  14557. ls_status = ds_tree.Object.status[ll_k]
  14558. ls_woodcode = ds_tree.Object.woodcode[ll_k]
  14559. ls_pcode = ds_tree.Object.pcode[ll_k]
  14560. ld_rqqty_tree = ds_tree.Object.rqqty[ll_k]
  14561. ll_printid = ds_tree.Object.printid[ll_k]
  14562. Update u_orderrqmtrl
  14563. Set RqQty = RqQty - :ld_rqqty_tree * :ld_rate,
  14564. truerqqty = truerqqty- :ld_rqqty_tree * :ld_rate,
  14565. scllqty = scllqty - :ld_rqqty_tree * :ld_rate
  14566. Where scid = :arg_scid
  14567. And orderid = :ll_porderid
  14568. And mtrlid = :ll_mtrlid
  14569. And wrkgrpid = :ll_wrkgrpid
  14570. And status = :ls_status
  14571. And woodcode = :ls_woodcode
  14572. And pcode = :ls_pcode
  14573. And plantype = :li_plantype;
  14574. If sqlca.SQLCode <> 0 Then
  14575. rslt = 0
  14576. arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText
  14577. Goto ext
  14578. End If
  14579. Update u_orderrqmtrl_tree
  14580. Set rqqty = rqqty - :ld_rqqty_tree * :ld_rate,
  14581. truerqqty = truerqqty - :ld_rqqty_tree * :ld_rate,
  14582. scllqty = scllqty - :ld_rqqty_tree * :ld_rate
  14583. Where scid = :arg_scid
  14584. And orderid = :ll_porderid
  14585. And printid = :ll_printid;
  14586. If sqlca.SQLCode <> 0 Then
  14587. rslt = 0
  14588. arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText
  14589. Goto ext
  14590. End If
  14591. If arg_ifaddhis = 1 Then
  14592. Update u_order_ml_stop_mtrl_his
  14593. Set stopqty = stopqty + :ld_rqqty_tree * :ld_rate
  14594. Where scid = :arg_scid
  14595. And orderid = :arg_orderid
  14596. And porderid = :ll_porderid
  14597. And printid = :ll_printid;
  14598. If sqlca.SQLCode = 0 Then
  14599. If sqlca.SQLNRows = 0 Then
  14600. Insert Into u_order_ml_stop_mtrl_his
  14601. (scid,
  14602. orderid,
  14603. porderid,
  14604. printid,
  14605. stopqty,
  14606. ifwfjgup)
  14607. Values (:arg_scid,
  14608. :arg_orderid,
  14609. :ll_porderid,
  14610. :ll_printid,
  14611. :ld_rqqty_tree * :ld_rate,
  14612. 2);
  14613. If sqlca.SQLCode <> 0 Then
  14614. rslt = 0
  14615. arg_msg = '因网络或其它原因导致插入终止历史失败'+"~n"+sqlca.SQLErrText
  14616. Goto ext
  14617. End If
  14618. End If
  14619. Else
  14620. rslt = 0
  14621. arg_msg = '因网络或其它原因导致更新终止历史失败'+"~n"+sqlca.SQLErrText
  14622. Goto ext
  14623. End If
  14624. End If
  14625. End If
  14626. Next
  14627. ll_j = ll_k - 1
  14628. End If
  14629. Next
  14630. End If
  14631. Next
  14632. Else
  14633. //取消终止
  14634. ds_stop_his.Retrieve(arg_scid,arg_orderid)
  14635. For ll_i = 1 To ds_stop_his.RowCount()
  14636. ll_porderid = ds_stop_his.Object.porderid[ll_i]
  14637. ll_printid = ds_stop_his.Object.printid[ll_i]
  14638. ld_stopqty = ds_stop_his.Object.stopqty[ll_i]
  14639. ll_mtrlid = ds_stop_his.Object.u_orderrqmtrl_tree_mtrlid[ll_i]
  14640. ll_wrkgrpid = ds_stop_his.Object.u_orderrqmtrl_tree_wrkgrpid[ll_i]
  14641. ll_produce_wrkgrpid = ds_stop_his.Object.u_orderrqmtrl_tree_produce_wrkgrpid[ll_i]
  14642. li_plantype = ds_stop_his.Object.u_orderrqmtrl_tree_plantype[ll_i]
  14643. ls_status = ds_stop_his.Object.u_orderrqmtrl_tree_status[ll_i]
  14644. ls_woodcode = ds_stop_his.Object.u_orderrqmtrl_tree_woodcode[ll_i]
  14645. ls_pcode = ds_stop_his.Object.u_orderrqmtrl_tree_pcode[ll_i]
  14646. li_ifwfjgup = ds_stop_his.Object.u_order_ml_stop_mtrl_his_ifwfjgup[ll_i]
  14647. Update u_orderrqmtrl
  14648. Set truerqqty = truerqqty + :ld_stopqty,
  14649. RqQty = RqQty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End ,
  14650. scllqty = scllqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End
  14651. Where scid = :arg_scid
  14652. And orderid = :ll_porderid
  14653. And mtrlid = :ll_mtrlid
  14654. And wrkgrpid = :ll_wrkgrpid
  14655. And status = :ls_status
  14656. And woodcode = :ls_woodcode
  14657. And pcode = :ls_pcode
  14658. And plantype = :li_plantype;
  14659. If sqlca.SQLCode <> 0 Then
  14660. rslt = 0
  14661. arg_msg = '因网络或其它原因导致更新生产计划用料需求失败'+"~n"+sqlca.SQLErrText
  14662. Goto ext
  14663. End If
  14664. Update u_orderrqmtrl_tree
  14665. Set truerqqty = truerqqty + :ld_stopqty,
  14666. rqqty = rqqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End,
  14667. scllqty = scllqty + case :li_ifwfjgup when 2 then :ld_stopqty else 0 End
  14668. Where scid = :arg_scid
  14669. And orderid = :ll_porderid
  14670. And printid = :ll_printid;
  14671. If sqlca.SQLCode <> 0 Then
  14672. rslt = 0
  14673. arg_msg = '因网络或其它原因导致更新生产计划运算数据失败'+"~n"+sqlca.SQLErrText
  14674. Goto ext
  14675. End If
  14676. Delete From u_order_ml_stop_mtrl_his
  14677. Where scid = :arg_scid
  14678. And orderid = :arg_orderid
  14679. And porderid = :ll_porderid
  14680. And printid = :ll_printid;
  14681. If sqlca.SQLCode <> 0 Then
  14682. rslt = 0
  14683. arg_msg = "删除终止记录操作失败"+"~n"+sqlca.SQLErrText
  14684. Goto ext
  14685. End If
  14686. Next
  14687. End If
  14688. ext:
  14689. Destroy ds_tree
  14690. Destroy ds_stop_his
  14691. If rslt = 0 Then
  14692. Rollback;
  14693. ElseIf rslt = 1 And arg_ifcommit Then
  14694. Commit;
  14695. End If
  14696. Return rslt
  14697. end function
  14698. public function integer uof_mtrl_change (long arg_scid, long arg_orderid, decimal arg_rate, integer arg_type, integer arg_ifchange, integer arg_ifaddhis, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  14699. Long ll_i,cnt,ll_Ordertype,ll_porderid
  14700. Long ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid
  14701. String ls_status,ls_woodcode,ls_pcode
  14702. Decimal ld_sqty,ld_dqty,ld_orderqty
  14703. String ls_mtrlcode
  14704. uo_order_ml_mtrl_change uo_mtrl_ch
  14705. uo_mtrl_ch = Create uo_order_ml_mtrl_change
  14706. s_order_ml_mtrl_change arg_s_mtrl_ch
  14707. s_order_ml_mtrl_change_mx arg_s_mx[],arg_s_empty_mx[]
  14708. SELECT ordertype,porderid,orderqty
  14709. INTO :ll_Ordertype,:ll_porderid,:ld_orderqty
  14710. FROM u_order_ml
  14711. WHERE u_order_ml.scid = :arg_scid
  14712. And u_order_ml.orderid = :arg_orderid;
  14713. IF sqlca.SQLCode <> 0 THEN
  14714. arg_msg = '查询指令单类型失败,'+sqlca.SQLErrText
  14715. rslt = 0
  14716. GOTO ext
  14717. END IF
  14718. //yyx2014-8-14注释,主计划为指令单
  14719. //IF ll_Ordertype <> 4 THEN
  14720. // rslt = 1
  14721. // GOTO ext
  14722. //END IF
  14723. IF arg_ifchange = 1 THEN
  14724. IF ll_Ordertype = 4 THEN
  14725. SELECT count(*) INTO :cnt
  14726. FROM u_requestbuymxmx
  14727. WHERE u_requestbuymxmx.scid = :arg_scid
  14728. And u_requestbuymxmx.orderid = :ll_porderid;
  14729. IF sqlca.SQLCode <> 0 THEN
  14730. arg_msg = '查询指令单相关主计划是否已开申购单失败,'+sqlca.SQLErrText
  14731. rslt = 0
  14732. GOTO ext
  14733. END IF
  14734. IF cnt > 0 THEN
  14735. rslt = 2
  14736. GOTO ext
  14737. END IF
  14738. ELSE
  14739. SELECT count(*) INTO :cnt
  14740. FROM u_requestbuymxmx
  14741. WHERE u_requestbuymxmx.scid = :arg_scid
  14742. And u_requestbuymxmx.orderid = :arg_orderid;
  14743. IF sqlca.SQLCode <> 0 THEN
  14744. arg_msg = '查询指令单相关主计划是否已开申购单失败,'+sqlca.SQLErrText
  14745. rslt = 0
  14746. GOTO ext
  14747. END IF
  14748. IF cnt > 0 THEN
  14749. rslt = 2
  14750. GOTO ext
  14751. END IF
  14752. END IF
  14753. END IF
  14754. datastore ds_scll
  14755. ds_scll = Create datastore
  14756. ds_scll.DataObject = 'ds_order_stop_mtrl_change'
  14757. ds_scll.SetTransObject(sqlca)
  14758. ds_scll.Retrieve(arg_scid,arg_orderid,arg_type)
  14759. FOR ll_i = 1 To ds_scll.RowCount()
  14760. ll_scid = ds_scll.Object.u_orderrqmtrl_scll_scid[ll_i]
  14761. ll_orderid = ds_scll.Object.u_orderrqmtrl_scll_orderid[ll_i]
  14762. ll_mtrlid = ds_scll.Object.u_orderrqmtrl_scll_mtrlid[ll_i]
  14763. ll_wrkgrpid = ds_scll.Object.u_orderrqmtrl_scll_wrkgrpid[ll_i]
  14764. ls_status = ds_scll.Object.u_orderrqmtrl_scll_status[ll_i]
  14765. ls_woodcode = ds_scll.Object.u_orderrqmtrl_scll_woodcode[ll_i]
  14766. ls_pcode = ds_scll.Object.u_orderrqmtrl_scll_pcode[ll_i]
  14767. IF arg_type = 0 THEN
  14768. ld_sqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i]
  14769. IF arg_rate * ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i] > ds_scll.Object.dstrqty[ll_i] THEN
  14770. ld_dqty = arg_rate * ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i]
  14771. ELSE
  14772. ld_dqty = ds_scll.Object.dstrqty[ll_i]
  14773. END IF
  14774. ELSE
  14775. ld_sqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty[ll_i]
  14776. ld_dqty = ds_scll.Object.u_orderrqmtrl_scll_truerqqty_ori[ll_i]
  14777. END IF
  14778. ls_mtrlcode = ds_scll.Object.u_mtrldef_mtrlcode[ll_i]
  14779. arg_s_mtrl_ch.scid = ll_scid
  14780. arg_s_mtrl_ch.billid = 0
  14781. arg_s_mtrl_ch.billdate = DateTime(Today(),Time(0))
  14782. arg_s_mtrl_ch.billemp = publ_operator
  14783. arg_s_mtrl_ch.relcode = ''
  14784. arg_s_mtrl_ch.dscrp = '指令单终止自动生成' //注意修改时这里时要修改uo_order_ml_mtrl_change.audit
  14785. arg_s_mtrl_ch.orderid = ll_orderid
  14786. arg_s_mtrl_ch.smtrlid = ll_mtrlid
  14787. arg_s_mtrl_ch.wrkgrpid = ll_wrkgrpid
  14788. arg_s_mtrl_ch.status = ls_status
  14789. arg_s_mtrl_ch.woodcode = ls_woodcode
  14790. arg_s_mtrl_ch.pcode = ls_pcode
  14791. arg_s_mtrl_ch.dmtrlid = ll_mtrlid
  14792. arg_s_mtrl_ch.sqty = ld_sqty
  14793. arg_s_mtrl_ch.dqty = ld_dqty
  14794. arg_s_mtrl_ch.billtype = 1
  14795. arg_s_mtrl_ch.ifchange = 1
  14796. //加明细
  14797. arg_s_mx = arg_s_empty_mx
  14798. IF f_addmx_mtrl_change(ll_scid,ll_orderid,ll_mtrlid,ll_wrkgrpid,ls_status,ls_woodcode,ls_pcode,ld_sqty,ld_dqty,arg_s_mx,arg_msg) = 0 THEN
  14799. rslt = 0
  14800. arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',生成生产指令单换料单失败,原因:计算单据明细失败.'+arg_msg
  14801. GOTO ext
  14802. END IF
  14803. arg_s_mtrl_ch.arg_s_mx = arg_s_mx
  14804. IF uo_mtrl_ch.Save(arg_s_mtrl_ch,publ_operator,arg_msg,False) = 0 THEN
  14805. rslt = 0
  14806. arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',生成生产指令单换料单失败,'+arg_msg
  14807. GOTO ext
  14808. END IF
  14809. IF uo_mtrl_ch.audit(uo_mtrl_ch.uo_billid,publ_operator,arg_msg,False) = 0 THEN
  14810. rslt = 0
  14811. arg_msg = '需求明细第'+String(ll_i)+'行,物料:'+ls_mtrlcode+',审核相关生产指令单换料单失败,'+arg_msg
  14812. GOTO ext
  14813. END IF
  14814. NEXT
  14815. IF uof_stop_tree (arg_scid,arg_orderid,ld_orderqty * (1 - arg_rate),arg_type,arg_ifaddhis,arg_msg,False) = 0 THEN
  14816. rslt = 0
  14817. arg_msg = '终止相关外协上下级需求失败,'+arg_msg
  14818. GOTO ext
  14819. END IF
  14820. ext:
  14821. Destroy uo_mtrl_ch
  14822. Destroy ds_scll
  14823. IF rslt = 0 THEN
  14824. ROLLBACK;
  14825. ELSEIF rslt = 1 And arg_ifcommit THEN
  14826. COMMIT;
  14827. END IF
  14828. RETURN rslt
  14829. end function
  14830. public function integer uof_c_stopjj (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);
  14831. Int rslt = 1
  14832. datetime null_dt
  14833. setnull(null_dt)
  14834. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  14835. IF rslt = 0 THEN GOTO ext
  14836. IF stopjj = 0 THEN
  14837. rslt = 0
  14838. arg_msg = '没有执行过终止计件操作,不能取消终止'
  14839. GOTO ext
  14840. END IF
  14841. UPDATE u_order_ml
  14842. SET stopjj = 0,
  14843. stopjjemp = '',
  14844. stopjjdate = :null_dt,
  14845. stopjjreason = ''
  14846. WHERE orderid = :arg_orderid
  14847. AND scid = :arg_scid
  14848. and stopjj = 1;
  14849. IF sqlca.SQLCode <> 0 THEN
  14850. rslt = 0
  14851. arg_msg = "因网络或其它原因导致取消终止计件操作失败"+"~n"+sqlca.SQLErrText
  14852. GOTO ext
  14853. END IF
  14854. ext:
  14855. IF rslt = 0 THEN
  14856. ROLLBACK;
  14857. p_reset()
  14858. ELSEIF arg_ifcommit AND rslt = 1 THEN
  14859. COMMIT;
  14860. END IF
  14861. Return (rslt)
  14862. end function
  14863. public function integer uof_workprice_parm (long arg_mtrlid, string arg_wpcode, string arg_procode, decimal arg_proqty, string arg_parmstr, integer arg_kind, ref string arg_value_str, ref decimal arg_value_dec);//arg_kind 0-单价, 1 -数量
  14864. //如果外部调用,必须先执行 p_getinfo 获取指令单信息
  14865. Int rslt = 1
  14866. Decimal ld_splitrate
  14867. String ls_mtrlsectype,ls_zxmtrlmode,ls_usermtrlmode,ls_mtrlmode
  14868. Decimal arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9
  14869. Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum
  14870. String ls_parmname
  14871. Decimal ld_parmvalue,ld_hourpay_cmp,ld_workprice,ld_workqty_ori,ld_hourpay,ld_workprice_def
  14872. Long ll_j
  14873. String s_rtn
  14874. String ls_ban_gydscrp,ls_ban_pfklmode
  14875. string ls_mtrltype
  14876. datastore ds_pricestr
  14877. ds_pricestr = Create datastore
  14878. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  14879. ds_pricestr.SetTransObject(sqlca)
  14880. datastore ds_parm
  14881. ds_parm = Create datastore
  14882. ds_parm.DataObject = 'ds_workprice_parm_def'
  14883. ds_parm.SetTransObject(sqlca)
  14884. ds_parm.Retrieve()
  14885. Select splitrate,
  14886. mtrlsectype,
  14887. zxmtrlmode,
  14888. usermtrlmode,
  14889. mtrlmode,
  14890. mtrltype
  14891. Into :ld_splitrate,
  14892. :ls_mtrlsectype,
  14893. :ls_zxmtrlmode,
  14894. :ls_usermtrlmode,
  14895. :ls_mtrlmode,
  14896. :ls_mtrltype
  14897. From u_mtrldef
  14898. Where mtrlid = :arg_mtrlid;
  14899. If sqlca.SQLCode <> 0 Then
  14900. rslt = 0
  14901. Goto ext
  14902. End If
  14903. Select gydscrp,pfklmode
  14904. Into :ls_ban_gydscrp,:ls_ban_pfklmode
  14905. From u_mtrldef_ban
  14906. Where mtrlid = :arg_mtrlid;
  14907. If sqlca.SQLCode <> 0 Then
  14908. ls_ban_gydscrp = ''
  14909. ls_ban_pfklmode = ''
  14910. End If
  14911. Select workprice
  14912. Into :ld_workprice_def
  14913. From u_sc_workprocedure
  14914. Where code = :arg_procode;
  14915. If sqlca.SQLCode <> 0 Then
  14916. rslt = 0
  14917. Goto ext
  14918. End If
  14919. Select u_sc_workprice.eqworkhour,
  14920. u_sc_workprice.Workhour,
  14921. u_sc_workprice.beforehour,
  14922. u_sc_workprice.afterhour,
  14923. u_sc_workprice.eq_empnum,
  14924. u_sc_workprice.arg1,
  14925. u_sc_workprice.arg2,
  14926. u_sc_workprice.arg3,
  14927. u_sc_workprice.arg4,
  14928. u_sc_workprice.arg5,
  14929. u_sc_workprice.arg6,
  14930. u_sc_workprice.arg7,
  14931. u_sc_workprice.arg8,
  14932. u_sc_workprice.arg9,
  14933. u_sc_workprice.workprice,
  14934. u_sc_workprice.workqty,
  14935. isnull(u_worktype.hourpay,0) as hourpay
  14936. Into :ld_eqworkhour,
  14937. :ld_Workhour,
  14938. :ld_beforehour,
  14939. :ld_afterhour,
  14940. :ld_eq_empnum,
  14941. :arg1,
  14942. :arg2,
  14943. :arg3,
  14944. :arg4,
  14945. :arg5,
  14946. :arg6,
  14947. :arg7,
  14948. :arg8,
  14949. :arg9,
  14950. :ld_workprice,
  14951. :ld_workqty_ori,
  14952. :ld_hourpay
  14953. From u_sc_workprice LEFT Outer JOIN
  14954. u_worktype ON u_sc_workprice.worktype = u_worktype.worktype
  14955. Where u_sc_workprice.mtrlid = :arg_mtrlid
  14956. And u_sc_workprice.procode = :arg_procode
  14957. And u_sc_workprice.wpcode = :arg_wpcode;
  14958. If sqlca.SQLCode <> 0 Then
  14959. rslt = 0
  14960. Goto ext
  14961. End If
  14962. //替换自定义参数
  14963. For ll_j = 1 To ds_parm.RowCount()
  14964. ls_parmname = ds_parm.Object.parmname[ll_j]
  14965. ld_parmvalue = ds_parm.Object.parmvalue[ll_j]
  14966. ld_parmvalue = Dec(String(ld_parmvalue,'#,##0.##########'))
  14967. ls_parmname = '['+ls_parmname+']'
  14968. Select Top 1 Replace( :arg_parmstr,:ls_parmname,:ld_parmvalue) Into :arg_parmstr From u_user;
  14969. Next
  14970. Select Top 1 Replace( :arg_parmstr,'不包含',' not like ') Into :arg_parmstr From u_user;
  14971. Select Top 1 Replace( :arg_parmstr,'不等于','<>') Into :arg_parmstr From u_user;
  14972. Select Top 1 Replace( :arg_parmstr,'包含',' like ') Into :arg_parmstr From u_user;
  14973. orderqty = Dec(String(orderqty,'#,##0.##########'))
  14974. Select Top 1 Replace( :arg_parmstr,'指令单数量',:orderqty) Into :arg_parmstr From u_user;
  14975. arg_proqty = Dec(String(arg_proqty,'#,##0.##########'))
  14976. Select Top 1 Replace( :arg_parmstr,'数量',:arg_proqty) Into :arg_parmstr From u_user;
  14977. Select Top 1 Replace( :arg_parmstr,'等于',' = ') Into :arg_parmstr From u_user;
  14978. Select Top 1 Replace( :arg_parmstr,'大于',' > ') Into :arg_parmstr From u_user;
  14979. Select Top 1 Replace( :arg_parmstr,'小于',' < ') Into :arg_parmstr From u_user;
  14980. If arg_proqty > ld_splitrate And ld_splitrate <> 0 Then
  14981. ld_hourpay_cmp = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay
  14982. Else
  14983. ld_hourpay_cmp = (arg_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / arg_proqty * ld_hourpay
  14984. End If
  14985. ld_hourpay_cmp = Dec(String(ld_hourpay_cmp,'#,##0.##########'))
  14986. Select Top 1 Replace( :arg_parmstr,'按时薪计算',:ld_hourpay_cmp) Into :arg_parmstr From u_user;
  14987. Select Top 1 Replace( :arg_parmstr,'物料类别',"'"+:ls_mtrltype+"'") Into :arg_parmstr From u_user;
  14988. If Pos(arg_parmstr,'配置2') > 0 Then
  14989. Select Top 1 Replace( :arg_parmstr,'配置2',"'"+:pcode+"'") Into :arg_parmstr From u_user;
  14990. End If
  14991. If Pos(arg_parmstr,'配置1') > 0 Then
  14992. Select Top 1 Replace( :arg_parmstr,'配置1',"'"+:woodcode+"'") Into :arg_parmstr From u_user;
  14993. End If
  14994. If Pos(arg_parmstr,'配置') > 0 Then
  14995. Select Top 1 Replace( :arg_parmstr,'配置',"'"+:status_mode+"'") Into :arg_parmstr From u_user;
  14996. End If
  14997. Select Top 1 Replace( :arg_parmstr,'物料开料规格',"'"+:ls_ban_pfklmode+"'") Into :arg_parmstr From u_user;
  14998. Select Top 1 Replace( :arg_parmstr,'指令单开料规格',"'"+:pfklmode+"'") Into :arg_parmstr From u_user;
  14999. Select Top 1 Replace( :arg_parmstr,'工艺说明',"'"+:gydscrp+"'") Into :arg_parmstr From u_user;
  15000. Select Top 1 Replace( :arg_parmstr,'物料工艺备注',"'"+:ls_ban_gydscrp+"'") Into :arg_parmstr From u_user;
  15001. Select Top 1 Replace( :arg_parmstr,'自定义1',"'"+:ls_mtrlsectype+"'") Into :arg_parmstr From u_user;
  15002. Select Top 1 Replace( :arg_parmstr,'自定义2',"'"+:ls_zxmtrlmode+"'") Into :arg_parmstr From u_user;
  15003. Select Top 1 Replace( :arg_parmstr,'自定义3',"'"+:ls_usermtrlmode+"'") Into :arg_parmstr From u_user;
  15004. Select Top 1 Replace( :arg_parmstr,'物料规格',"'"+:ls_mtrlmode+"'") Into :arg_parmstr From u_user;
  15005. ld_workprice = Dec(String(ld_workprice,'#,##0.##########'))
  15006. Select Top 1 Replace( :arg_parmstr,'工价表工价',:ld_workprice) Into :arg_parmstr From u_user;
  15007. ld_workprice_def = Dec(String(ld_workprice_def,'#,##0.##########'))
  15008. Select Top 1 Replace( :arg_parmstr,'工序工价',:ld_workprice_def) Into :arg_parmstr From u_user;
  15009. Select Top 1 Replace( :arg_parmstr,'生产批号',"'"+:taskrelcode+"'") Into :arg_parmstr From u_user;
  15010. arg1 = Dec(String(arg1,'#,##0.##########'))
  15011. Select Top 1 Replace( :arg_parmstr,'参数1',:arg1) Into :arg_parmstr From u_user;
  15012. arg2 = Dec(String(arg2,'#,##0.##########'))
  15013. Select Top 1 Replace( :arg_parmstr,'参数2',:arg2) Into :arg_parmstr From u_user;
  15014. arg3 = Dec(String(arg3,'#,##0.##########'))
  15015. Select Top 1 Replace( :arg_parmstr,'参数3',:arg3) Into :arg_parmstr From u_user;
  15016. arg4 = Dec(String(arg4,'#,##0.##########'))
  15017. Select Top 1 Replace( :arg_parmstr,'参数4',:arg4) Into :arg_parmstr From u_user;
  15018. arg5 = Dec(String(arg5,'#,##0.##########'))
  15019. Select Top 1 Replace( :arg_parmstr,'参数5',:arg5) Into :arg_parmstr From u_user;
  15020. arg6 = Dec(String(arg6,'#,##0.##########'))
  15021. Select Top 1 Replace( :arg_parmstr,'参数6',:arg6) Into :arg_parmstr From u_user;
  15022. arg7 = Dec(String(arg7,'#,##0.##########'))
  15023. Select Top 1 Replace( :arg_parmstr,'参数7',:arg7) Into :arg_parmstr From u_user;
  15024. arg8 = Dec(String(arg8,'#,##0.##########'))
  15025. Select Top 1 Replace( :arg_parmstr,'参数8',:arg8) Into :arg_parmstr From u_user;
  15026. arg9 = Dec(String(arg9,'#,##0.##########'))
  15027. Select Top 1 Replace( :arg_parmstr,'参数9',:arg9) Into :arg_parmstr From u_user;
  15028. arg_value_str = arg_parmstr
  15029. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  15030. ds_pricestr.SetTransObject(sqlca)
  15031. ds_pricestr.Retrieve()
  15032. ds_pricestr.Modify('cmpl.expression= "'+arg_parmstr+'"')
  15033. s_rtn = String(ds_pricestr.Object.cmpl[1])
  15034. If arg_kind = 0 Then
  15035. If s_rtn = 'false' Then
  15036. arg_value_dec = 0
  15037. Else
  15038. arg_value_dec = Round(Dec(s_rtn),5)
  15039. End If
  15040. ElseIf arg_kind = 1 Then
  15041. If s_rtn = 'false' Then
  15042. arg_value_dec = arg_proqty
  15043. Else
  15044. arg_value_dec = Round(Dec(s_rtn),5) * (arg_proqty / ld_workqty_ori)
  15045. End If
  15046. End If
  15047. ext:
  15048. Destroy ds_pricestr
  15049. Destroy ds_parm
  15050. Return rslt
  15051. end function
  15052. public function integer uof_tryfinish_packorder_buy (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt
  15053. rslt = 1
  15054. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  15055. IF rslt = 0 THEN GOTO ext
  15056. Decimal ld_qty
  15057. Int li_ifpackpro,li_ifpack,li_pordermtrl_ordertype
  15058. Long ll_porder_mtrlid
  15059. DateTime null_dt
  15060. SetNull(null_dt)
  15061. Long ll_cnt_zl,ll_cnt_zl_finish
  15062. Int ll_pack1_finish
  15063. SELECT u_mtrldef.ifpackpro,u_mtrldef.ordertype,u_mtrldef.mtrlid
  15064. INTO :li_ifpackpro,:li_pordermtrl_ordertype,:ll_porder_mtrlid
  15065. FROM u_mtrldef,u_order_ml
  15066. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  15067. AND u_order_ml.orderid = :arg_orderid
  15068. And u_order_ml.scid = :arg_scid;
  15069. IF sqlca.SQLCode <> 0 THEN
  15070. rslt = 0
  15071. arg_msg = '查询相关主计划产品是否全包件产品失败,'+sqlca.SQLErrText
  15072. GOTO ext
  15073. END IF
  15074. IF li_ifpackpro = 0 THEN //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成
  15075. rslt = 1
  15076. GOTO ext
  15077. END IF
  15078. Long ll_cnt,cnt
  15079. ll_cnt = 0
  15080. IF li_ifpackpro = 1 THEN
  15081. SELECT count(*) INTO :ll_cnt
  15082. FROM u_orderrqmtrl,u_mtrldef
  15083. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  15084. AND u_orderrqmtrl.orderid = :arg_orderid
  15085. AND u_orderrqmtrl.scid = :arg_scid
  15086. AND ( u_mtrldef.ifpack = 1 )
  15087. And (u_orderrqmtrl.plantype = 0 Or u_orderrqmtrl.plantype = 2) ;
  15088. IF sqlca.SQLCode <> 0 THEN
  15089. rslt = 0
  15090. arg_msg = '查询包件产品主生产计划相关生产需求失败'+sqlca.SQLErrText
  15091. GOTO ext
  15092. END IF
  15093. //1.先检查主生产计划自制需求,需求数是否等于用料数,不等即说明有分配库存,跳过判断完成比例
  15094. //2.查询相应部件的完成情况,按需求量对比后得出主计划物料的完成数量
  15095. IF ll_cnt > 0 THEN
  15096. cnt = 0
  15097. SELECT count(*) INTO :cnt
  15098. FROM u_orderrqmtrl,u_mtrldef
  15099. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  15100. AND ( u_mtrldef.ifpack = 1 )
  15101. AND u_orderrqmtrl.orderid = :arg_orderid
  15102. AND u_orderrqmtrl.scid = :arg_scid
  15103. AND u_orderrqmtrl.inqty < u_orderrqmtrl.truerqqty
  15104. And (u_orderrqmtrl.plantype = 0 Or u_orderrqmtrl.plantype = 2) ;
  15105. IF sqlca.SQLCode <> 0 THEN
  15106. rslt = 0
  15107. arg_msg = '查询包件产品主生产计划相关指令单是否全部完成失败'+sqlca.SQLErrText
  15108. GOTO ext
  15109. END IF
  15110. IF cnt = 0 THEN //相关自制需求全部完成,更新主生产计划已完成数及状态
  15111. UPDATE u_order_ml
  15112. SET status = 5,
  15113. accomplishdate = getdate(),
  15114. accomplishemp = :publ_operator,
  15115. acmpqty = orderqty
  15116. WHERE ( u_order_ml.orderid = :arg_orderid )
  15117. And (u_order_ml.scid = :arg_scid);
  15118. IF sqlca.SQLCode <> 0 THEN
  15119. rslt = 0
  15120. arg_msg = "因网络或其他原因导致生产计划完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  15121. GOTO ext
  15122. END IF
  15123. //更新分离排产包件产品指令完成数
  15124. IF li_pordermtrl_ordertype = 1 THEN
  15125. UPDATE u_order_ml
  15126. SET status = 5,
  15127. accomplishdate = getdate(),
  15128. accomplishemp = :publ_operator,
  15129. acmpqty = orderqty
  15130. FROM u_order_ml
  15131. WHERE (u_order_ml.scid = :arg_scid)
  15132. AND (u_order_ml.porderid = :arg_orderid)
  15133. And (u_order_ml.mtrlid = :ll_porder_mtrlid);
  15134. IF sqlca.SQLCode <> 0 THEN
  15135. rslt = 0
  15136. arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText
  15137. GOTO ext
  15138. END IF
  15139. END IF
  15140. ELSE
  15141. //如果没有全部完成,则取自制需求的最小完成率去计算主生产计划的完成数
  15142. Decimal ld_minrate
  15143. SELECT min(inqty / truerqqty) INTO :ld_minrate
  15144. FROM u_orderrqmtrl,u_mtrldef
  15145. WHERE u_orderrqmtrl.mtrlid = u_mtrldef.mtrlid
  15146. AND u_orderrqmtrl.orderid = :arg_orderid
  15147. AND u_orderrqmtrl.scid = :arg_scid
  15148. AND ( u_mtrldef.ifpack = 1 )
  15149. AND (u_orderrqmtrl.plantype = 0 OR u_orderrqmtrl.plantype = 2)
  15150. And u_orderrqmtrl.truerqqty > 0 ;
  15151. IF sqlca.SQLCode <> 0 THEN
  15152. rslt = 0
  15153. arg_msg = '查询相关包件产品主生产计划自制需求完成率失败'+"~n"+sqlca.SQLErrText
  15154. GOTO ext
  15155. END IF
  15156. UPDATE u_order_ml
  15157. SET status = 1,
  15158. accomplishdate = :null_dt,
  15159. accomplishemp = '',
  15160. acmpqty = orderqty * :ld_minrate
  15161. WHERE ( u_order_ml.orderid = :arg_orderid )
  15162. And (u_order_ml.scid = :arg_scid);
  15163. IF sqlca.SQLCode <> 0 THEN
  15164. rslt = 0
  15165. arg_msg = "更新包件产品主生产计划状态操作失败"+"~n"+sqlca.SQLErrText
  15166. GOTO ext
  15167. END IF
  15168. //更新分离排产包件产品指令完成数
  15169. IF li_pordermtrl_ordertype = 1 THEN
  15170. UPDATE u_order_ml
  15171. SET status = 1,
  15172. accomplishdate = :null_dt,
  15173. accomplishemp = '',
  15174. acmpqty = orderqty * :ld_minrate
  15175. WHERE (u_order_ml.scid = :arg_scid)
  15176. AND (u_order_ml.porderid = :arg_orderid)
  15177. And (u_order_ml.mtrlid = :ll_porder_mtrlid);
  15178. IF sqlca.SQLCode <> 0 THEN
  15179. rslt = 0
  15180. arg_msg = "更新包件产品主生产计划对应【指令单分离】相关对应产品指令单状态操作失败"+"~n"+sqlca.SQLErrText
  15181. GOTO ext
  15182. END IF
  15183. END IF
  15184. END IF
  15185. END IF
  15186. END IF
  15187. ext:
  15188. IF rslt = 0 THEN
  15189. ROLLBACK;
  15190. ELSEIF rslt = 1 And arg_ifcommit THEN
  15191. COMMIT;
  15192. END IF
  15193. RETURN rslt
  15194. end function
  15195. public function integer uof_reccl_cf (long arg_scid, long arg_orderid, s_order_ml_rqmtrl_scll arg_s_mtrl_scll, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  15196. Long ll_i
  15197. DELETE FROM u_OrderRqMtrl_scll
  15198. WHERE orderid = :arg_orderid
  15199. And scid = :arg_scid;
  15200. IF sqlca.SQLCode <> 0 THEN
  15201. arg_msg = '删除原领料明细失败,'+sqlca.SQLErrText
  15202. rslt = 0
  15203. GOTO ext
  15204. END IF
  15205. FOR ll_i = 1 To UpperBound(arg_s_mtrl_scll.mtrlid)
  15206. INSERT INTO u_OrderRqMtrl_scll
  15207. (scid,
  15208. orderid,
  15209. mtrlid,
  15210. status,
  15211. woodcode,
  15212. pcode,
  15213. truerqqty,
  15214. wrkGrpid,
  15215. ifchanged,
  15216. truerqqty_ori,
  15217. stopemp,
  15218. stopdate,
  15219. ifchmtrlbillstop,
  15220. stopreason,
  15221. sclldate)
  15222. VALUES
  15223. (:arg_scid,
  15224. :arg_orderid,
  15225. :arg_s_mtrl_scll.mtrlid[ll_i],
  15226. :arg_s_mtrl_scll.status[ll_i],
  15227. :arg_s_mtrl_scll.woodcode[ll_i],
  15228. :arg_s_mtrl_scll.pcode[ll_i],
  15229. :arg_s_mtrl_scll.truerqqty[ll_i],
  15230. :arg_s_mtrl_scll.wrkGrpid[ll_i],
  15231. :arg_s_mtrl_scll.ifchanged[ll_i],
  15232. :arg_s_mtrl_scll.truerqqty_ori[ll_i],
  15233. :arg_s_mtrl_scll.stopemp[ll_i],
  15234. :arg_s_mtrl_scll.stopdate[ll_i],
  15235. :arg_s_mtrl_scll.ifchmtrlbillstop[ll_i],
  15236. :arg_s_mtrl_scll.stopreason[ll_i],
  15237. :arg_s_mtrl_scll.sclldate[ll_i]);
  15238. IF sqlca.SQLCode <> 0 THEN
  15239. arg_msg = '建立生产计划物料领料明细失败,'+sqlca.SQLErrText
  15240. rslt = 0
  15241. GOTO ext
  15242. END IF
  15243. NEXT
  15244. ext:
  15245. IF rslt = 0 THEN
  15246. ROLLBACK;
  15247. ELSEIF arg_ifcommit And rslt = 1 THEN
  15248. COMMIT;
  15249. END IF
  15250. Return(rslt)
  15251. end function
  15252. public function integer uof_order_add_tree_barcode (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  15253. Long ll_row,ll_i,ll_j,ll_m,ll_n
  15254. Long cnt
  15255. DateTime server_dt
  15256. Long ll_pid
  15257. Long ll_fail = 0,ll_suc = 0
  15258. Long ll_cnt_lp = 0
  15259. String arg_msg_tmp = '',ls_ordercode
  15260. Long ll_swkpid,ll_owkpid,ll_printid,ll_workgroupid
  15261. Decimal ld_orderqty,ld_qty
  15262. String ls_barcode
  15263. String ls_relname,ls_partname
  15264. Int li_if_inherit
  15265. String ls_partname_inherit
  15266. String ls_str
  15267. Long ll_cnt
  15268. Long ll_k
  15269. Long ll_orderid_f[],ll_scid_f[],ll_f_cnt = 0,ll_l
  15270. String ls_ordercode_f[]
  15271. Long ll_workgroupid_arr[],ll_empty_id[]
  15272. Decimal ld_minqty_arr[],ld_maxqty_arr[],ll_empty_qty[]
  15273. Decimal ld_qty_total
  15274. Long ll_workgroupid_update,ll_mxbt_wgid
  15275. Decimal ld_baseqty
  15276. datastore ds_tree
  15277. ds_tree = Create datastore
  15278. ds_tree.DataObject = 'ds_OrderMtrl_workgroup_tree'
  15279. ds_tree.SetTransObject(sqlca)
  15280. datastore ds_workgroupid
  15281. ds_workgroupid = Create datastore
  15282. ds_workgroupid.DataObject = 'ds_find_ordermtrl_workgroupid'
  15283. ds_workgroupid.SetTransObject(sqlca)
  15284. datastore ds_inherit
  15285. ds_inherit = Create datastore
  15286. ds_inherit.DataObject = 'ds_find_inherit_barcode'
  15287. ds_inherit.SetTransObject(sqlca)
  15288. Select Top 1 getdate() Into :server_dt From u_user ;
  15289. If sqlca.SQLCode <> 0 Then
  15290. rslt = 0
  15291. arg_msg = "查询操作失败,日期 "
  15292. Goto ext
  15293. End If
  15294. Select count(*) Into :cnt
  15295. From u_OrderMtrl_workgroup_tree
  15296. Where scid = :arg_scid
  15297. And orderid = :arg_orderid;
  15298. If sqlca.SQLCode <> 0 Then
  15299. rslt = 0
  15300. arg_msg = '查询生产指令单是否已生成条码工组进度失败,'+sqlca.SQLErrText
  15301. Goto ext
  15302. End If
  15303. If cnt = 0 Then
  15304. If uof_order_add_wkp_tree(arg_scid,arg_orderid,arg_msg,True) = 0 Then
  15305. rslt = 0
  15306. Goto ext
  15307. End If
  15308. End If
  15309. Select count(*) Into :cnt
  15310. From u_OrderMtrl_workgroup_tree
  15311. Where scid = :arg_scid
  15312. And orderid = :arg_orderid;
  15313. If sqlca.SQLCode <> 0 Then
  15314. rslt = 0
  15315. arg_msg = '查询生产指令单是否已生成条码工组进度失败,'+sqlca.SQLErrText
  15316. Goto ext
  15317. End If
  15318. If cnt = 0 Then
  15319. rslt = 0
  15320. arg_msg = '生产指令单没有生成条码工组进度,不能执行生成条码操作'
  15321. Goto ext
  15322. End If
  15323. Select count(*) Into :cnt
  15324. From u_ordermtrl_workgroup_barcode
  15325. Where scid = :arg_scid
  15326. And orderid = :arg_orderid;
  15327. If sqlca.SQLCode <> 0 Then
  15328. rslt = 0
  15329. arg_msg = '查询生产指令单是否已生成条码失败,'+sqlca.SQLErrText
  15330. Goto ext
  15331. End If
  15332. If cnt > 0 Then
  15333. rslt = 0
  15334. arg_msg = '生产指令单已生成过条码,不能重复生成'
  15335. Goto ext
  15336. End If
  15337. ds_tree.Retrieve(arg_scid,arg_orderid)
  15338. //Open(w_sys_wait_2jdt) //初始化进度条
  15339. //w_sys_wait_2jdt.Show()
  15340. //w_sys_wait_2jdt.wf_accepttol(ds_tree.RowCount())
  15341. For ll_i = 1 To ds_tree.RowCount()
  15342. // w_sys_wait_2jdt.wf_inc(ll_i)
  15343. If ds_tree.Object.if_barcode[ll_i] <> 1 Then Continue
  15344. ll_swkpid = ds_tree.Object.swkpid[ll_i]
  15345. ll_owkpid = ds_tree.Object.owkpid[ll_i]
  15346. ld_orderqty = ds_tree.Object.orderqty[ll_i]
  15347. ll_printid = ds_tree.Object.printid[ll_i]
  15348. ls_relname = ds_tree.Object.relname[ll_i]
  15349. ls_partname = ds_tree.Object.partname[ll_i]
  15350. li_if_inherit = ds_tree.Object.if_inherit[ll_i]
  15351. ls_partname_inherit = ds_tree.Object.partname_inherit[ll_i]
  15352. ll_workgroupid = ds_tree.Object.workgroupid[ll_i]
  15353. ld_baseqty = ds_tree.Object.baseqty[ll_i]
  15354. If ld_baseqty = 0 Then ld_baseqty = 1
  15355. If Trim(ls_relname) = Trim(ls_partname) Then
  15356. ls_str = Trim(ls_partname)
  15357. Else
  15358. ls_str = Trim(ls_relname) +'-'+ Trim(ls_partname)
  15359. End If
  15360. // w_sys_wait_2jdt.st_msg.Text = "正在生成条码:"+ls_str //进度信息
  15361. // w_sys_wait_2jdt.wf_accepttol2(Ceiling(ld_orderqty))
  15362. ds_workgroupid.Retrieve(arg_scid,arg_orderid,ll_swkpid,ll_owkpid)
  15363. ll_workgroupid_arr = ll_empty_id
  15364. ld_minqty_arr = ll_empty_qty
  15365. ld_maxqty_arr = ll_empty_qty
  15366. ll_mxbt_wgid = 0
  15367. For ll_m = 1 To ds_workgroupid.RowCount()
  15368. ll_mxbt_wgid++
  15369. ll_workgroupid_arr[ll_mxbt_wgid] = ds_workgroupid.Object.workgroupid[ll_m]
  15370. If ll_m = 1 Then
  15371. ld_minqty_arr[ll_mxbt_wgid] = 1
  15372. ld_maxqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m]
  15373. Else
  15374. ld_minqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m - 1] + 1
  15375. ld_maxqty_arr[ll_mxbt_wgid] = ds_workgroupid.Object.orderqty[ll_m] + ds_workgroupid.Object.orderqty[ll_m - 1]
  15376. End If
  15377. Next
  15378. ld_qty_total = 0
  15379. If li_if_inherit = 1 Then
  15380. If ls_relname <> '成品' Then
  15381. ds_inherit.Retrieve(arg_scid,arg_orderid,ls_relname,ls_partname_inherit)
  15382. Else
  15383. ds_inherit.Retrieve(arg_scid,arg_orderid,ls_partname_inherit,ls_partname_inherit)
  15384. End If
  15385. If ds_inherit.RowCount() <> Ceiling(Round(ld_orderqty/ld_baseqty,10)) Then
  15386. // Close(w_sys_wait_2jdt)
  15387. Rollback;
  15388. Destroy ds_tree
  15389. Destroy ds_workgroupid
  15390. Destroy ds_inherit
  15391. ll_f_cnt++
  15392. ll_scid_f[ll_f_cnt] = arg_scid
  15393. ll_orderid_f[ll_f_cnt] = arg_orderid
  15394. ls_ordercode_f[ll_f_cnt] = ls_ordercode
  15395. rslt = 0
  15396. arg_msg = '生成条码失败,继承条码数量与被继承条码数量不一致 '+ls_partname_inherit + '~r~n'
  15397. Goto _del_tmp
  15398. End If
  15399. End If
  15400. For ll_j = 1 To Ceiling(Round(ld_orderqty/ld_baseqty,10))
  15401. If ll_j = Ceiling(Round(ld_orderqty/ld_baseqty,10)) Then
  15402. ld_qty = ld_orderqty - (ll_j - 1)* ld_baseqty
  15403. Else
  15404. ld_qty = ld_baseqty
  15405. End If
  15406. ld_qty_total = ld_qty_total + ld_qty
  15407. ll_workgroupid_update = 0
  15408. If ll_mxbt_wgid = 0 Then
  15409. ll_workgroupid_update = ll_workgroupid
  15410. Else
  15411. For ll_n = 1 To ll_mxbt_wgid
  15412. If ld_qty_total >= ld_minqty_arr[ll_n] And ld_qty_total <= ld_maxqty_arr[ll_n] Then
  15413. ll_workgroupid_update = ll_workgroupid_arr[ll_n]
  15414. Exit
  15415. End If
  15416. Next
  15417. End If
  15418. If ll_workgroupid_update = 0 Then
  15419. ll_workgroupid_update = ll_workgroupid
  15420. End If
  15421. If li_if_inherit = 1 Then
  15422. ls_barcode = ds_inherit.Object.barcode[ll_j]
  15423. Else
  15424. ls_barcode = getid(0,"BARCODE1",Date(server_dt),True,sqlca)
  15425. End If
  15426. ll_pid++
  15427. Insert Into u_ordermtrl_workgroup_barcode
  15428. (scid,
  15429. orderid,
  15430. printid,
  15431. pid,
  15432. barcode,
  15433. qty,
  15434. swkpid,
  15435. owkpid,
  15436. relname,
  15437. partname,
  15438. if_inherit,
  15439. partname_inherit,
  15440. workgroupid)
  15441. Values (:arg_scid,
  15442. :arg_orderid,
  15443. :ll_printid,
  15444. :ll_pid,
  15445. :ls_barcode,
  15446. :ld_qty,
  15447. :ll_swkpid,
  15448. :ll_owkpid,
  15449. :ls_relname,
  15450. :ls_partname,
  15451. :li_if_inherit,
  15452. :ls_partname_inherit,
  15453. :ll_workgroupid_update);
  15454. If sqlca.SQLCode <> 0 Then
  15455. // Close(w_sys_wait_2jdt)
  15456. Rollback;
  15457. Destroy ds_tree
  15458. ll_f_cnt++
  15459. ll_scid_f[ll_f_cnt] = arg_scid
  15460. ll_orderid_f[ll_f_cnt] = arg_orderid
  15461. ls_ordercode_f[ll_f_cnt] = ls_ordercode
  15462. rslt = 0
  15463. arg_msg = '生成条码失败_2,'+sqlca.SQLErrText + '~r~n'
  15464. Goto _del_tmp
  15465. End If
  15466. If arg_ifcommit Then
  15467. Commit;
  15468. End If
  15469. // w_sys_wait_2jdt.wf_inc2(ll_j)
  15470. Next
  15471. // w_sys_wait_2jdt.wf_inc(ll_i)
  15472. Next
  15473. //Close(w_sys_wait_2jdt)
  15474. _del_tmp:
  15475. For ll_l = 1 To ll_f_cnt
  15476. Delete From u_ordermtrl_workgroup_barcode
  15477. Where scid = :ll_scid_f[ll_l]
  15478. And orderid = :ll_orderid_f[ll_l];
  15479. If sqlca.SQLCode <> 0 Then
  15480. Rollback;
  15481. rslt = 0
  15482. arg_msg = arg_msg + ls_ordercode_f[ll_l]+ ' ' +'删除临时生成条码失败,'+sqlca.SQLErrText
  15483. Continue
  15484. End If
  15485. If arg_ifcommit Then
  15486. Commit;
  15487. End If
  15488. Next
  15489. ext:
  15490. Return rslt
  15491. end function
  15492. public function integer acceptmx (string arg_relcode, datetime arg_orderdate, long arg_taskid, string arg_taskcode, long arg_cusid, long arg_mtrlid, string arg_status_mode, string arg_woodcode, string arg_pcode, decimal arg_orderqty, string arg_dscrp, string arg_assign_emp, datetime arg_requiredate, integer arg_ordertype, string arg_taskrelcode, string arg_pfcode, long arg_taskmxid, long arg_porderid, long arg_utid, long arg_wrkgrpid, string arg_gydscrp, string arg_pfklmode, long arg_pforderid, string arg_pfordercode, decimal arg_pfqty, string arg_secdscrp, string arg_thdscrp, long arg_taskscid, datetime arg_perfinishdate, long arg_storageid, long arg_tmpid, integer arg_level, string arg_typename, string arg_outtypestr, long arg_pzlorderid, integer arg_iffg, integer arg_ifauto, integer arg_if_inherit, decimal arg_addqty, string arg_wpcode, integer arg_pctype, ref string arg_msg);Integer rslt = 1,cnt = 0
  15493. String ls_mtrlcode,ls_pordercode,ls_mtrlname
  15494. Long ls_i
  15495. Long ll_statustype,li_mtrlorigin_mtrl
  15496. Int li_bantype_mtrl
  15497. Int li_ifpban_save,li_ifupban_save
  15498. Decimal ld_capacity,ld_capacity_zj
  15499. s_mtrlcfg_expr s_pz[]
  15500. String ls_status_zj
  15501. Long ll_i
  15502. String ls_cusname,ls_p_taskrelcode,ls_saletaskcode,ls_saletaskrelcode
  15503. Long ll_p_cusid,ll_p_taskid,ll_p_taskmxid,ll_p_ordertype
  15504. Int li_ordertype,li_ifpackpro,li_ifpack,li_ifselforder,li_iffp
  15505. Int li_p_ordertype_mtrldef,li_p_ifpackpro,li_p_ifpack
  15506. Int li_ifmrppackpf //检查下级有无非包件【是否包件清单分离】
  15507. Long ll_pf_cnt_pack0,ll_pf_cnt_packin
  15508. Int li_inwareflag,li_outscllflag
  15509. Decimal ld_SaleQty,ld_AssignQty,ld_ordermx_qty
  15510. Long ll_p_mtrlid,ll_upmtrlid
  15511. String ls_p_status,ls_p_woodcode,ls_p_pcode,ls_p_pfcode
  15512. Long ll_typeid
  15513. Int li_ifbj
  15514. Long ll_lp,ll_printid,ll_lp_tmp
  15515. Int li_fpkind
  15516. Boolean lb_cd = True
  15517. Int li_ifwforder
  15518. Decimal ld_notmrpqty = 0
  15519. Long ll_p_taskscid
  15520. datastore ds_find_pmtrlid
  15521. ds_find_pmtrlid = Create datastore
  15522. ds_find_pmtrlid.DataObject = 'ds_orderrqmtrl_tree_find_pmtrlid'
  15523. ds_find_pmtrlid.SetTransObject(sqlca)
  15524. IF uo_option_def_bom = -1000 THEN
  15525. rslt = 0
  15526. arg_msg = '选项:[013]生产计划审核时需要检查是否已定义物料清单,读取初始默认值失败,操作取消!'
  15527. GOTO ext
  15528. END IF
  15529. IF uo_option_order_ml_use_zl = -1000 THEN
  15530. rslt = 0
  15531. arg_msg = '选项:[073]系统使用指令单排产,读取初始默认值失败,操作取消!'
  15532. GOTO ext
  15533. END IF
  15534. IF uo_option_order_mtrlware = -1000 THEN
  15535. rslt = 0
  15536. arg_msg = '选项:[143]生产计划审核增加0库存,读取初始默认值失败,操作取消!'
  15537. GOTO ext
  15538. END IF
  15539. IF uo_option_inware_mtrlcuscode = -1000 THEN
  15540. rslt = 0
  15541. arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!'
  15542. GOTO ext
  15543. END IF
  15544. IF uo_option_order_capacity = -1000 THEN
  15545. rslt = 0
  15546. arg_msg = '选项:[304]指令单保存按车间产能总量限制,读取初始默认值失败,操作取消!'
  15547. GOTO ext
  15548. END IF
  15549. IF uo_option_order_ml_zl_checkdate = -1000 THEN
  15550. rslt = 0
  15551. arg_msg = '选项:[313]指令单保存不检查交货日期,读取初始默认值失败,操作取消!'
  15552. GOTO ext
  15553. END IF
  15554. IF uo_option_bujian_notmrpqty = -1000 THEN
  15555. rslt = 0
  15556. arg_msg = '选项:[388]补件类型主计划下属的半成品不参与其他计划的可用数,读取初始默认值失败,操作取消!'
  15557. GOTO ext
  15558. END IF
  15559. IF IsNull(arg_relcode) THEN arg_relcode = ''
  15560. IF IsNull(arg_taskid) THEN arg_taskid = 0
  15561. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  15562. IF IsNull(arg_cusid) THEN arg_cusid = 0
  15563. IF IsNull(arg_status_mode) THEN arg_status_mode = ''
  15564. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  15565. IF IsNull(arg_pcode) THEN arg_pcode = ''
  15566. IF IsNull(arg_orderqty) THEN arg_orderqty = 0
  15567. IF IsNull(arg_Assign_emp) THEN arg_Assign_emp = ''
  15568. IF IsNull(arg_taskcode) THEN arg_taskcode = ''
  15569. IF IsNull(arg_taskrelcode) THEN arg_taskrelcode = ''
  15570. IF IsNull(arg_pfcode) THEN arg_pfcode = ''
  15571. IF IsNull(arg_ordertype) THEN arg_ordertype = 0
  15572. IF IsNull(arg_taskmxid) THEN arg_taskmxid = 0
  15573. IF IsNull(arg_porderid) THEN arg_porderid = 0
  15574. IF IsNull(arg_utid) THEN arg_utid = 0
  15575. IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0
  15576. IF IsNull(arg_taskscid) THEN arg_taskscid = 0
  15577. IF IsNull(arg_outtypestr) THEN arg_outtypestr = ''
  15578. IF IsNull(arg_gydscrp) THEN arg_gydscrp = ''
  15579. IF IsNull(arg_pfklmode) THEN arg_pfklmode = ''
  15580. IF IsNull(arg_pforderid) THEN arg_pforderid = 0
  15581. IF IsNull(arg_pfordercode) THEN arg_pfordercode = ''
  15582. IF IsNull(arg_pfqty) THEN arg_pfqty = 0
  15583. IF IsNull(arg_secdscrp) THEN arg_secdscrp = ''
  15584. IF IsNull(arg_thdscrp) THEN arg_thdscrp = ''
  15585. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  15586. IF Len(arg_dscrp) > 0 THEN arg_dscrp = ' ' + arg_dscrp
  15587. IF IsNull(arg_storageid) THEN arg_storageid = 0
  15588. IF IsNull(arg_tmpid) THEN arg_tmpid = 0
  15589. IF IsNull(arg_level) THEN arg_level = 2
  15590. IF IsNull(arg_typename) THEN arg_typename = ''
  15591. IF IsNull(arg_iffg) THEN arg_iffg = 0
  15592. IF IsNull(arg_ifauto) THEN arg_ifauto = 0
  15593. IF IsNull(arg_addqty) THEN arg_addqty = 0
  15594. IF IsNull(arg_wpcode) THEN arg_wpcode = ''
  15595. IF arg_orderqty <= 0 THEN
  15596. rslt = 1
  15597. GOTO ext
  15598. END IF
  15599. IF arg_Assign_emp = '' THEN
  15600. arg_msg = '请输入计划负责人'
  15601. rslt = 0
  15602. GOTO ext
  15603. END IF
  15604. IF IsNull(arg_orderdate) Or Year(Date(arg_orderdate)) < 2001 THEN
  15605. rslt = 0
  15606. arg_msg = "请输入合理计划日期"
  15607. GOTO ext
  15608. END IF
  15609. IF uo_option_order_ml_zl_checkdate = 1 THEN
  15610. lb_cd = False
  15611. END IF
  15612. IF lb_cd THEN
  15613. IF Date(arg_orderdate) > Date(arg_requiredate) THEN
  15614. rslt = 0
  15615. arg_msg = "计划日期大于要求完成日期"
  15616. GOTO ext
  15617. END IF
  15618. END IF
  15619. SELECT mtrlcode,
  15620. mtrlname,
  15621. statusflag,
  15622. capacity * capaparm,
  15623. ifpack,
  15624. ifpackpro,
  15625. ordertype,
  15626. ifselforder,
  15627. iffp,
  15628. mtrlorigin,
  15629. bantype
  15630. INTO :ls_mtrlcode,
  15631. :ls_mtrlname,
  15632. :ll_statustype,
  15633. :ld_capacity,
  15634. :li_ifpack,
  15635. :li_ifpackpro,
  15636. :li_ordertype,
  15637. :li_ifselforder,
  15638. :li_iffp,
  15639. :li_mtrlorigin_mtrl,
  15640. :li_bantype_mtrl
  15641. FROM u_mtrldef
  15642. Where mtrlid = :arg_mtrlid;
  15643. IF sqlca.SQLCode <> 0 THEN
  15644. arg_msg = '查询物料编号失败,'+sqlca.SQLErrText
  15645. rslt = 0
  15646. GOTO ext
  15647. END IF
  15648. IF arg_ordertype <> 4 THEN //主生产计划
  15649. IF li_ifpackpro = 2 Or li_ifpackpro = 4 THEN
  15650. IF uo_option_order_mtrlware = 0 THEN
  15651. rslt = 0
  15652. arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,选项:[143]生产计划审核增加0库存必须开启,请检查'
  15653. GOTO ext
  15654. END IF
  15655. IF uo_option_inware_mtrlcuscode = 0 THEN
  15656. rslt = 0
  15657. arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,选项:[138]生产进仓单产品批号策略按指令单号必须开启,请检查'
  15658. GOTO ext
  15659. END IF
  15660. IF arg_storageid = 0 THEN
  15661. rslt = 0
  15662. arg_msg = '产品是个性包件产品或组合配置整排散进包件产品,仓库未选择,请检查'
  15663. GOTO ext
  15664. END IF
  15665. END IF
  15666. END IF
  15667. IF uo_option_def_bom = 1 And ll_statustype <> 2 THEN
  15668. IF arg_pfcode = '' THEN
  15669. arg_msg = '物料:'+ls_mtrlcode+'请选择物料清单'
  15670. rslt = 0
  15671. GOTO ext
  15672. END IF
  15673. SELECT count(*) INTO :cnt
  15674. FROM u_mtrl_pf
  15675. WHERE mtrlid = :arg_mtrlid
  15676. And pfcode = :arg_pfcode;
  15677. IF sqlca.SQLCode <> 0 THEN
  15678. arg_msg = '查询物料:'+ls_mtrlcode+'对应物料清单失败,'+sqlca.SQLErrText
  15679. rslt = 0
  15680. GOTO ext
  15681. END IF
  15682. IF cnt <> 1 THEN
  15683. arg_msg = '物料:'+ls_mtrlcode+'不存在或重复物料清单:'+arg_pfcode
  15684. rslt = 0
  15685. GOTO ext
  15686. END IF
  15687. END IF
  15688. IF ll_statustype = 2 THEN
  15689. ld_capacity = 0
  15690. f_checkpz(arg_status_mode,s_pz[])
  15691. FOR ll_i = 1 To UpperBound(s_pz)
  15692. ls_status_zj = s_pz[ll_i].cfgname
  15693. SELECT capacity * capaparm
  15694. INTO :ld_capacity_zj
  15695. FROM u_mtrl_configure
  15696. WHERE mtrlid = :arg_mtrlid
  15697. And Name = :ls_status_zj;
  15698. IF sqlca.SQLCode <> 0 THEN
  15699. rslt = 0
  15700. arg_msg = "查询子件 "+ls_status_zj+" 折算套数参数操作失败"
  15701. GOTO ext
  15702. END IF
  15703. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  15704. NEXT
  15705. END IF
  15706. IF arg_ordertype = 0 And uo_option_order_bh_use_yc = 1 THEN
  15707. SELECT taskcode,relcode
  15708. INTO :ls_saletaskcode,:ls_saletaskrelcode
  15709. FROM u_saletask
  15710. WHERE scid = :arg_taskscid
  15711. And taskid = :arg_taskid;
  15712. IF sqlca.SQLCode <> 0 THEN
  15713. arg_msg = '查询物料:'+ls_mtrlcode+'预测订单编号失败,'+sqlca.SQLErrText
  15714. rslt = 0
  15715. GOTO ext
  15716. END IF
  15717. cnt = 0
  15718. SELECT count(*) INTO :cnt
  15719. FROM u_saletaskmx
  15720. WHERE scid = :arg_taskscid
  15721. AND taskid = :arg_taskid
  15722. And printid = :arg_taskmxid;
  15723. IF sqlca.SQLCode <> 0 THEN
  15724. arg_msg = '查询物料:'+ls_mtrlcode+'预测订单明细资料失败,'+sqlca.SQLErrText
  15725. rslt = 0
  15726. GOTO ext
  15727. END IF
  15728. IF cnt = 0 THEN
  15729. arg_msg = '不存在订单明细:'+ls_mtrlcode
  15730. rslt = 0
  15731. GOTO ext
  15732. END IF
  15733. ELSEIF arg_ordertype = 1 THEN
  15734. SELECT name INTO :ls_cusname
  15735. FROM u_cust
  15736. Where cusid = :arg_cusid;
  15737. IF sqlca.SQLCode <> 0 THEN
  15738. arg_msg = '查询客户资料失败,'+sqlca.SQLErrText
  15739. rslt = 0
  15740. GOTO ext
  15741. END IF
  15742. SELECT taskcode,relcode,typeid
  15743. INTO :ls_saletaskcode,:ls_saletaskrelcode,:ll_typeid
  15744. FROM u_saletask
  15745. WHERE scid = :arg_taskscid
  15746. And taskid = :arg_taskid;
  15747. IF sqlca.SQLCode <> 0 THEN
  15748. arg_msg = '查询物料:'+ls_mtrlcode+'订单编号失败,'+sqlca.SQLErrText
  15749. rslt = 0
  15750. GOTO ext
  15751. END IF
  15752. IF ll_typeid > 0 THEN
  15753. SELECT ifbj INTO :li_ifbj
  15754. FROM u_saletype
  15755. Where typeid = :ll_typeid;
  15756. IF sqlca.SQLCode <> 0 THEN
  15757. arg_msg = '查询物料:'+ls_mtrlcode+'相关订单的订单分类是否补件信息失败,'+sqlca.SQLErrText
  15758. rslt = 0
  15759. GOTO ext
  15760. END IF
  15761. IF li_ifbj = 1 THEN
  15762. arg_wrkgrpid = ins_produce_wrkgrpid_bj
  15763. IF uo_option_bujian_notmrpqty = 1 THEN
  15764. ld_notmrpqty = arg_orderqty
  15765. ELSE
  15766. ld_notmrpqty = 0
  15767. END IF
  15768. END IF
  15769. END IF
  15770. cnt = 0
  15771. SELECT count(*) INTO :cnt
  15772. FROM u_saletaskmx
  15773. WHERE scid = :arg_taskscid
  15774. AND taskid = :arg_taskid
  15775. And printid = :arg_taskmxid;
  15776. IF sqlca.SQLCode <> 0 THEN
  15777. arg_msg = '查询物料:'+ls_mtrlcode+'订单明细资料失败,'+sqlca.SQLErrText
  15778. rslt = 0
  15779. GOTO ext
  15780. END IF
  15781. IF cnt = 0 THEN
  15782. arg_msg = '不存在订单明细:'+ls_mtrlcode
  15783. rslt = 0
  15784. GOTO ext
  15785. END IF
  15786. ll_p_cusid = arg_cusid
  15787. ELSEIF arg_ordertype = 4 THEN
  15788. IF arg_porderid = 0 THEN
  15789. arg_msg = '指令单没有上级计划'
  15790. rslt = 0
  15791. GOTO ext
  15792. END IF
  15793. SELECT u_Order_ml.ordercode,
  15794. u_Order_ml.taskrelcode,
  15795. u_Order_ml.cusname,
  15796. u_Order_ml.cusid,
  15797. u_Order_ml.saletaskcode,
  15798. u_Order_ml.saletaskrelcode,
  15799. u_Order_ml.taskid,
  15800. u_Order_ml.taskscid,
  15801. u_Order_ml.taskmxid,
  15802. u_Order_ml.ordertype,
  15803. u_mtrldef.ordertype,
  15804. u_mtrldef.ifpackpro,
  15805. u_mtrldef.ifpack,
  15806. u_Order_ml.mtrlid,
  15807. u_Order_ml.status_mode,
  15808. u_Order_ml.woodcode,
  15809. u_Order_ml.pcode,
  15810. u_Order_ml.pfcode
  15811. INTO :ls_pordercode,
  15812. :ls_p_taskrelcode,
  15813. :ls_cusname,
  15814. :ll_p_cusid,
  15815. :ls_saletaskcode,
  15816. :ls_saletaskrelcode,
  15817. :ll_p_taskid,
  15818. :ll_p_taskscid,
  15819. :ll_p_taskmxid,
  15820. :ll_p_ordertype,
  15821. :li_p_ordertype_mtrldef,
  15822. :li_p_ifpackpro,
  15823. :li_p_ifpack,
  15824. :ll_p_mtrlid,
  15825. :ls_p_status,
  15826. :ls_p_woodcode,
  15827. :ls_p_pcode,
  15828. :ls_p_pfcode
  15829. FROM u_Order_ml INNER JOIN
  15830. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  15831. WHERE u_Order_ml.orderid = :arg_porderid
  15832. And u_Order_ml.scid = :scid;
  15833. IF sqlca.SQLCode <> 0 THEN
  15834. arg_msg = '查询上级计划编号失败,请检查,'+sqlca.SQLErrText
  15835. rslt = 0
  15836. GOTO ext
  15837. END IF
  15838. SELECT u_saletype.ifbj
  15839. INTO :li_ifbj
  15840. FROM u_SaleTask INNER JOIN
  15841. u_saletype ON u_SaleTask.typeid = u_saletype.typeid
  15842. WHERE u_SaleTask.scid = :ll_p_taskscid
  15843. And u_saletask.taskid = :ll_p_taskid;
  15844. IF sqlca.SQLCode <> 0 THEN li_ifbj = 0
  15845. IF li_ifbj = 1 And uo_option_bujian_notmrpqty = 1 THEN
  15846. ld_notmrpqty = arg_orderqty
  15847. ELSE
  15848. ld_notmrpqty = 0
  15849. END IF
  15850. IF arg_pzlorderid = 0 THEN
  15851. IF arg_taskmxid = 0 THEN
  15852. arg_msg = '错误的计划:'+ls_pordercode+',自制需求明细'
  15853. rslt = 0
  15854. GOTO ext
  15855. END IF
  15856. cnt = 0
  15857. SELECT count(*) INTO :cnt
  15858. FROM u_OrderRqMtrl
  15859. WHERE scid = :scid
  15860. AND orderid = :arg_porderid
  15861. And mxpkid = :arg_taskmxid;
  15862. IF sqlca.SQLCode <> 0 THEN
  15863. arg_msg = '查询计划:'+ls_pordercode+',自制需求明细失败,'+sqlca.SQLErrText
  15864. rslt = 0
  15865. GOTO ext
  15866. END IF
  15867. END IF
  15868. SELECT top 1 lp,printid
  15869. INTO :ll_lp,:ll_printid
  15870. FROM u_orderrqmtrl_tree
  15871. WHERE u_orderrqmtrl_tree.scid = :scid
  15872. AND u_orderrqmtrl_tree.orderid = :arg_porderid
  15873. AND u_orderrqmtrl_tree.mtrlid = :arg_mtrlid
  15874. Order By u_orderrqmtrl_tree.printid;
  15875. IF sqlca.SQLCode <> 0 THEN
  15876. arg_msg = '查询指令单所属上级自制物料失败,'+sqlca.SQLErrText
  15877. rslt = 0
  15878. GOTO ext
  15879. END IF
  15880. ll_upmtrlid = 0
  15881. ds_find_pmtrlid.Retrieve(scid,arg_porderid,ll_lp,ll_printid)
  15882. FOR ll_i = ds_find_pmtrlid.RowCount() To 1 Step -1
  15883. IF ll_i <> ds_find_pmtrlid.RowCount() THEN
  15884. IF ds_find_pmtrlid.Object.u_orderrqmtrl_tree_lp[ll_i] >= ll_lp_tmp THEN CONTINUE
  15885. END IF
  15886. IF ds_find_pmtrlid.Object.u_mtrldef_mtrlorigin[ll_i] = 0 THEN
  15887. ll_upmtrlid = ds_find_pmtrlid.Object.u_orderrqmtrl_tree_mtrlid[ll_i]
  15888. EXIT
  15889. ELSE
  15890. ll_lp_tmp = ds_find_pmtrlid.Object.u_orderrqmtrl_tree_lp[ll_i]
  15891. END IF
  15892. NEXT
  15893. END IF
  15894. IF arg_ordertype <> 4 And uo_option_order_ml_use_zl = 1 Or &
  15895. arg_ordertype = 4 THEN
  15896. IF arg_wrkgrpid = 0 THEN
  15897. arg_msg = '计划或指令单没有生产车间'
  15898. rslt = 0
  15899. GOTO ext
  15900. END IF
  15901. cnt = 0
  15902. SELECT count(*) INTO :cnt
  15903. FROM u_sc_wkp
  15904. Where wrkGrpid = :arg_wrkgrpid;
  15905. IF sqlca.SQLCode <> 0 THEN
  15906. arg_msg = '查询车间资料失败,'+sqlca.SQLErrText
  15907. rslt = 0
  15908. GOTO ext
  15909. END IF
  15910. END IF
  15911. IF arg_ordertype <> 4 THEN //主生产计划
  15912. IF li_ifbj = 1 And li_mtrlorigin_mtrl = 2 THEN
  15913. li_inwareflag = 1
  15914. li_outscllflag = 1
  15915. ELSE
  15916. IF li_ifpackpro = 1 Or li_ifpackpro = 2 Or li_ifpackpro = 5 THEN
  15917. //yyx20120820加强检查进仓包件指令
  15918. // SELECT count(*)
  15919. // INTO :cnt
  15920. // FROM u_PrdPF INNER JOIN
  15921. // u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  15922. // WHERE u_PrdPF.mtrlid = :arg_mtrlid
  15923. // AND u_PrdPF.pfcode = :arg_pfcode
  15924. // and u_mtrldef.ifpack = 0;
  15925. // IF cnt > 0 THEN
  15926. // li_ifmrppackpf = 1
  15927. // ELSE
  15928. // li_ifmrppackpf = 0
  15929. // END IF
  15930. SELECT count(*),
  15931. sum(case when u_mtrldef.ifpack = 0 then 1 else 0 END),
  15932. sum(case when u_mtrldef.ifpack > 0 AND (u_mtrldef.mtrlorigin = 2 OR u_mtrldef.mtrlorigin = 3) then 1
  15933. when u_mtrldef.ifpack > 0 AND u_mtrldef.mtrlorigin = 0 AND u_mtrldef.ifselforder = 3 then 1 else 0 END)
  15934. INTO :cnt,:ll_pf_cnt_pack0,:ll_pf_cnt_packin
  15935. FROM u_PrdPF INNER JOIN
  15936. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  15937. WHERE u_PrdPF.mtrlid = :arg_mtrlid
  15938. And u_PrdPF.pfcode = :arg_pfcode;
  15939. IF sqlca.SQLCode <> 0 THEN
  15940. arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText
  15941. rslt = 0
  15942. GOTO ext
  15943. END IF
  15944. IF ll_pf_cnt_pack0 > 0 THEN
  15945. li_ifmrppackpf = 1
  15946. ELSE
  15947. IF cnt = ll_pf_cnt_packin THEN
  15948. li_ifmrppackpf = 1
  15949. ELSE
  15950. li_ifmrppackpf = 0
  15951. END IF
  15952. END IF
  15953. //
  15954. ELSE
  15955. li_ifmrppackpf = 0
  15956. END IF
  15957. IF li_ifpackpro = 0 And li_ordertype = 0 THEN
  15958. li_inwareflag = 1
  15959. li_outscllflag = 1
  15960. ELSEIF li_ifpackpro = 0 And li_ordertype = 1 THEN
  15961. li_inwareflag = 0
  15962. li_outscllflag = 0
  15963. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 0 And li_ifmrppackpf = 0 THEN
  15964. li_inwareflag = 0
  15965. li_outscllflag = 0
  15966. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 0 And li_ifmrppackpf = 1 THEN
  15967. li_inwareflag = 0
  15968. li_outscllflag = 1
  15969. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 1 And li_ifmrppackpf = 0 THEN
  15970. li_inwareflag = 0
  15971. li_outscllflag = 0
  15972. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 5) And li_ordertype = 1 And li_ifmrppackpf = 1 THEN
  15973. li_inwareflag = 0
  15974. li_outscllflag = 0
  15975. ELSEIF li_ifpackpro = 2 And li_ordertype = 1 THEN
  15976. li_inwareflag = 0
  15977. li_outscllflag = 0
  15978. ELSEIF li_ifpackpro = 3 And li_ordertype = 0 THEN
  15979. li_inwareflag = 0
  15980. li_outscllflag = 0
  15981. ELSEIF li_ifpackpro = 4 And li_ordertype = 0 THEN
  15982. li_inwareflag = 0
  15983. li_outscllflag = 1
  15984. ELSEIF li_ifpackpro = 4 And li_ordertype = 1 THEN
  15985. li_inwareflag = 0
  15986. li_outscllflag = 0
  15987. END IF
  15988. END IF
  15989. ELSE
  15990. // //合并在上面代码yyx20120815
  15991. // SELECT u_mtrldef.ordertype,
  15992. // u_mtrldef.ifpackpro,
  15993. // u_Order_ml.mtrlid,
  15994. // u_Order_ml.status_mode,
  15995. // u_Order_ml.woodcode,
  15996. // u_Order_ml.pcode
  15997. // INTO :li_p_ordertype_mtrldef,
  15998. // :li_p_ifpackpro,
  15999. // :ll_p_mtrlid,
  16000. // :ls_p_status,
  16001. // :ls_p_woodcode,
  16002. // :ls_p_pcode
  16003. // FROM u_Order_ml INNER JOIN
  16004. // u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  16005. // WHERE u_Order_ml.orderid = :arg_porderid
  16006. // And u_order_ml.scid = :scid;
  16007. // IF sqlca.SQLCode <> 0 THEN
  16008. // arg_msg = '查询上级主计划产品相关信息失败,'+sqlca.SQLErrText
  16009. // rslt = 0
  16010. // GOTO ext
  16011. // END IF
  16012. IF li_p_ifpackpro = 1 Or li_p_ifpackpro = 2 Or li_p_ifpackpro = 5 THEN
  16013. //yyx20120820加强检查进仓包件指令
  16014. // SELECT count(*)
  16015. // INTO :cnt
  16016. // FROM u_PrdPF INNER JOIN
  16017. // u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  16018. // WHERE u_PrdPF.mtrlid = :ll_p_mtrlid
  16019. // AND u_PrdPF.pfcode = :arg_pfcode
  16020. // And u_mtrldef.ifpack = 0 ;
  16021. // IF sqlca.SQLCode <> 0 THEN
  16022. // arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText
  16023. // rslt = 0
  16024. // GOTO ext
  16025. // END IF
  16026. //
  16027. // IF cnt > 0 THEN
  16028. // li_ifmrppackpf = 1
  16029. // ELSE
  16030. // li_ifmrppackpf = 0
  16031. // END IF
  16032. SELECT count(*),
  16033. sum(case when u_mtrldef.ifpack = 0 then 1 else 0 END),
  16034. sum(case when u_mtrldef.ifpack > 0 AND (u_mtrldef.mtrlorigin = 2 OR u_mtrldef.mtrlorigin = 3) then 1
  16035. when u_mtrldef.ifpack > 0 AND u_mtrldef.mtrlorigin = 0 AND u_mtrldef.ifselforder = 3 then 1 else 0 END)
  16036. INTO :cnt,:ll_pf_cnt_pack0,:ll_pf_cnt_packin
  16037. FROM u_PrdPF INNER JOIN
  16038. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  16039. WHERE u_PrdPF.mtrlid = :ll_p_mtrlid
  16040. And u_PrdPF.pfcode = :arg_pfcode;
  16041. IF sqlca.SQLCode <> 0 THEN
  16042. arg_msg = '查询物料清单是否存在非包件失败,'+sqlca.SQLErrText
  16043. rslt = 0
  16044. GOTO ext
  16045. END IF
  16046. IF ll_pf_cnt_pack0 > 0 THEN
  16047. li_ifmrppackpf = 1
  16048. ELSE
  16049. IF cnt = ll_pf_cnt_packin THEN
  16050. li_ifmrppackpf = 1
  16051. ELSE
  16052. li_ifmrppackpf = 0
  16053. END IF
  16054. END IF
  16055. ELSE
  16056. li_ifmrppackpf = 0
  16057. END IF
  16058. IF arg_pzlorderid > 0 THEN
  16059. li_inwareflag = 1
  16060. li_outscllflag = 0
  16061. ELSE
  16062. IF li_p_ifpackpro = 0 THEN
  16063. li_inwareflag = 1
  16064. li_outscllflag = 1
  16065. ElseIf (li_p_ifpackpro = 1 Or li_p_ifpackpro = 5) And li_p_ordertype_mtrldef = 0 THEN
  16066. IF li_ifmrppackpf = 0 THEN
  16067. li_inwareflag = 1
  16068. li_outscllflag = 1
  16069. ELSE
  16070. IF li_ifpack = 1 THEN
  16071. li_inwareflag = 1
  16072. li_outscllflag = 0
  16073. ELSE
  16074. li_inwareflag = 1
  16075. li_outscllflag = 1
  16076. END IF
  16077. END IF
  16078. ElseIf (li_p_ifpackpro = 1 Or li_p_ifpackpro = 5) And li_p_ordertype_mtrldef = 1 THEN
  16079. IF li_ifpackpro = 1 THEN
  16080. IF li_ifmrppackpf = 0 THEN
  16081. li_inwareflag = 0
  16082. li_outscllflag = 0
  16083. ELSE
  16084. li_inwareflag = 0
  16085. li_outscllflag = 1
  16086. END IF
  16087. ELSEIF li_ifpack = 1 THEN
  16088. IF li_ifmrppackpf = 0 THEN
  16089. li_inwareflag = 1
  16090. li_outscllflag = 1
  16091. ELSE
  16092. li_inwareflag = 1
  16093. li_outscllflag = 0
  16094. END IF
  16095. ELSE
  16096. li_inwareflag = 1
  16097. li_outscllflag = 1
  16098. END IF
  16099. ELSEIF li_p_ifpackpro = 2 And li_p_ordertype_mtrldef = 1 THEN
  16100. IF li_ifpackpro = 2 THEN
  16101. li_inwareflag = 0
  16102. li_outscllflag = 1
  16103. ELSE
  16104. IF li_ifpack = 2 THEN
  16105. li_inwareflag = 1
  16106. li_outscllflag = 0
  16107. ELSEIF li_ifpack = 1 THEN
  16108. IF li_ifselforder = 3 THEN
  16109. li_inwareflag = 1
  16110. li_outscllflag = 0
  16111. ELSE
  16112. li_inwareflag = 1
  16113. li_outscllflag = 1
  16114. END IF
  16115. ELSE
  16116. li_inwareflag = 1
  16117. li_outscllflag = 1
  16118. END IF
  16119. END IF
  16120. ELSEIF li_p_ifpackpro = 3 And li_p_ordertype_mtrldef = 0 THEN
  16121. li_inwareflag = 1
  16122. li_outscllflag = 1
  16123. ELSEIF li_p_ifpackpro = 4 And li_p_ordertype_mtrldef = 0 THEN
  16124. IF ll_p_mtrlid = arg_mtrlid THEN
  16125. li_inwareflag = 1
  16126. li_outscllflag = 0
  16127. ELSE
  16128. li_inwareflag = 1
  16129. li_outscllflag = 1
  16130. END IF
  16131. ELSEIF li_p_ifpackpro = 4 And li_p_ordertype_mtrldef = 1 THEN
  16132. IF ll_p_mtrlid = arg_mtrlid And ls_p_status = arg_status_mode And ls_p_woodcode = arg_woodcode And ls_p_pcode = arg_pcode THEN
  16133. li_inwareflag = 0
  16134. li_outscllflag = 1
  16135. ELSE
  16136. IF ll_p_mtrlid = arg_mtrlid THEN
  16137. li_inwareflag = 1
  16138. li_outscllflag = 0
  16139. ELSE
  16140. li_inwareflag = 1
  16141. li_outscllflag = 1
  16142. END IF
  16143. END IF
  16144. END IF
  16145. END IF
  16146. //检查指令是否分离排产计划
  16147. IF li_inwareflag = 1 THEN
  16148. IF ll_p_ordertype = 1 THEN
  16149. CHOOSE CASE li_p_ifpackpro
  16150. CASE 0,3,4
  16151. IF li_p_ordertype_mtrldef = 1 And ll_p_mtrlid = arg_mtrlid THEN
  16152. li_fpkind = 1
  16153. END IF
  16154. CASE 1,2
  16155. IF li_ifpack > 0 THEN
  16156. li_fpkind = 1
  16157. END IF
  16158. END CHOOSE
  16159. ELSE
  16160. IF li_p_ordertype_mtrldef = 1 And ll_p_mtrlid = arg_mtrlid THEN
  16161. li_fpkind = -1 //不分配
  16162. END IF
  16163. END IF
  16164. END IF
  16165. END IF
  16166. IF Not (li_mtrlorigin_mtrl = 3 Or ordertype = 3 Or li_mtrlorigin_mtrl = 2 ) THEN
  16167. IF li_outscllflag = 1 THEN
  16168. IF arg_wpcode = '' THEN
  16169. arg_msg = '请选择工价表号,产品编码:'+ls_mtrlcode+',产品名称:'+ls_mtrlname+',可能没有指定默认工价表'
  16170. rslt = 0
  16171. GOTO ext
  16172. END IF
  16173. END IF
  16174. END IF
  16175. IF uo_option_order_capacity = 1 And orderid = 0 THEN //And li_outscllflag = 1 Then
  16176. DateTime server_dt,ldt_sdate,ldt_edate
  16177. Decimal ld_capatotal,ld_capatotal_ot,ld_capacity_sum
  16178. String ls_wrkgrpname
  16179. SELECT Top 1 getdate() Into :server_dt From u_user;
  16180. IF sqlca.SQLCode <> 0 THEN
  16181. rslt = 0
  16182. arg_msg = "查询操作失败,日期 "
  16183. GOTO ext
  16184. END IF
  16185. ldt_sdate = DateTime(Date(server_dt),Time(0))
  16186. ldt_edate = DateTime(Date(server_dt),Time('23:59:59'))
  16187. SELECT capatotal,capatotal_ot,wrkgrpname
  16188. INTO :ld_capatotal,:ld_capatotal_ot,:ls_wrkgrpname
  16189. FROM u_sc_wkp
  16190. Where wrkGrpid = :arg_wrkgrpid;
  16191. IF sqlca.SQLCode <> 0 THEN
  16192. rslt = 0
  16193. arg_msg = '查询车间设定产能总量失败,车间ID:'+String(arg_wrkgrpid)
  16194. GOTO ext
  16195. END IF
  16196. SELECT sum(capacity)
  16197. INTO :ld_capacity_sum
  16198. FROM u_order_ml
  16199. WHERE orderdate >= :ldt_sdate
  16200. AND orderdate <= :ldt_edate
  16201. And wrkGrpid = :arg_wrkgrpid;
  16202. IF sqlca.SQLCode <> 0 THEN
  16203. rslt = 0
  16204. arg_msg = '查询车间当天已排产能失败,车间:'+ls_wrkgrpname
  16205. GOTO ext
  16206. END IF
  16207. IF IsNull(ld_capacity_sum) THEN ld_capacity_sum = 0
  16208. IF ld_capacity_sum + ld_capacity * arg_orderqty > ld_capatotal + ld_capatotal_ot THEN
  16209. rslt = 0
  16210. arg_msg = '车间:'+ls_wrkgrpname+'当天已排产能:'+String(ld_capacity_sum,'#,##0.##########')+',车间设定产能总量:'+String(ld_capatotal + ld_capatotal_ot,'#,##0.##########')+',不能再排产能:'+String(ld_capacity * arg_orderqty,'#,##0.##########')
  16211. GOTO ext
  16212. END IF
  16213. END IF
  16214. IF arg_ordertype = 3 THEN li_inwareflag = 0
  16215. it_mxbt++
  16216. s_order_mx[it_mxbt].relcode = arg_relcode
  16217. s_order_mx[it_mxbt].orderdate = arg_orderdate
  16218. s_order_mx[it_mxbt].taskid = arg_taskid
  16219. s_order_mx[it_mxbt].mtrlid = arg_mtrlid
  16220. s_order_mx[it_mxbt].status_mode = arg_status_mode
  16221. s_order_mx[it_mxbt].woodcode = arg_woodcode
  16222. s_order_mx[it_mxbt].pcode = arg_pcode
  16223. s_order_mx[it_mxbt].orderqty = arg_orderqty
  16224. s_order_mx[it_mxbt].dscrp = arg_dscrp
  16225. s_order_mx[it_mxbt].assign_emp = arg_Assign_emp
  16226. s_order_mx[it_mxbt].requiredate = arg_requiredate
  16227. s_order_mx[it_mxbt].ordertype = arg_ordertype
  16228. IF arg_ordertype = 4 THEN
  16229. s_order_mx[it_mxbt].taskcode = ls_pordercode
  16230. ELSE
  16231. s_order_mx[it_mxbt].taskcode = arg_taskcode
  16232. END IF
  16233. s_order_mx[it_mxbt].taskrelcode = arg_taskrelcode
  16234. s_order_mx[it_mxbt].taskmxid = arg_taskmxid
  16235. s_order_mx[it_mxbt].pfcode = arg_pfcode
  16236. s_order_mx[it_mxbt].cusid = arg_cusid
  16237. s_order_mx[it_mxbt].porderid = arg_porderid
  16238. s_order_mx[it_mxbt].pordercode = ls_pordercode
  16239. s_order_mx[it_mxbt].utid = arg_utid
  16240. s_order_mx[it_mxbt].wrkGrpid = arg_wrkgrpid
  16241. s_order_mx[it_mxbt].gydscrp = arg_gydscrp
  16242. s_order_mx[it_mxbt].pfklmode = arg_pfklmode
  16243. s_order_mx[it_mxbt].pforderid = arg_pforderid
  16244. s_order_mx[it_mxbt].pfordercode = arg_pfordercode
  16245. s_order_mx[it_mxbt].pfqty = arg_pfqty
  16246. s_order_mx[it_mxbt].secdscrp = arg_secdscrp
  16247. s_order_mx[it_mxbt].thdscrp = arg_thdscrp
  16248. s_order_mx[it_mxbt].taskscid = arg_taskscid
  16249. s_order_mx[it_mxbt].perfinishdate = arg_perfinishdate
  16250. s_order_mx[it_mxbt].storageid = arg_storageid
  16251. s_order_mx[it_mxbt].capacity = ld_capacity * arg_orderqty
  16252. s_order_mx[it_mxbt].typename = arg_typename
  16253. s_order_mx[it_mxbt].tmpid = arg_tmpid
  16254. s_order_mx[it_mxbt].Level = arg_level
  16255. s_order_mx[it_mxbt].p_taskrelcode = ls_p_taskrelcode
  16256. s_order_mx[it_mxbt].saletaskcode = ls_saletaskcode
  16257. s_order_mx[it_mxbt].saletaskrelcode = ls_saletaskrelcode
  16258. s_order_mx[it_mxbt].cusname = ls_cusname
  16259. s_order_mx[it_mxbt].p_ordertype = li_p_ordertype_mtrldef
  16260. s_order_mx[it_mxbt].p_cusid = ll_p_cusid
  16261. s_order_mx[it_mxbt].p_mtrlid = ll_p_mtrlid
  16262. s_order_mx[it_mxbt].outtypestr = arg_outtypestr
  16263. s_order_mx[it_mxbt].pzlorderid = arg_pzlorderid
  16264. s_order_mx[it_mxbt].inwareflag = li_inwareflag
  16265. s_order_mx[it_mxbt].outscllflag = li_outscllflag
  16266. s_order_mx[it_mxbt].iffg = arg_iffg
  16267. s_order_mx[it_mxbt].ifauto = arg_ifauto
  16268. s_order_mx[it_mxbt].upmtrlid = ll_upmtrlid
  16269. s_order_mx[it_mxbt].iffp = li_iffp
  16270. s_order_mx[it_mxbt].fpkind = li_fpkind
  16271. s_order_mx[it_mxbt].if_inherit = arg_if_inherit
  16272. s_order_mx[it_mxbt].addqty = arg_addqty
  16273. IF li_mtrlorigin_mtrl = 3 THEN
  16274. s_order_mx[it_mxbt].ifwforder = 1
  16275. ELSE
  16276. s_order_mx[it_mxbt].ifwforder = 0
  16277. END IF
  16278. s_order_mx[it_mxbt].wpcode = arg_wpcode
  16279. s_order_mx[it_mxbt].pctype = arg_pctype
  16280. s_order_mx[it_mxbt].notmrpqty = ld_notmrpqty
  16281. //yyx2014-7-22
  16282. IF li_inwareflag = 0 THEN
  16283. li_ifpban_save = 0
  16284. li_ifupban_save = 0
  16285. ELSE
  16286. IF arg_ordertype = 4 THEN
  16287. IF li_p_ifpack = 1 THEN //主计划为包件
  16288. IF li_bantype_mtrl = 0 THEN
  16289. li_ifpban_save = 0
  16290. li_ifupban_save = 0
  16291. ELSEIF li_bantype_mtrl = 1 THEN
  16292. li_ifpban_save = 1
  16293. cnt = 0
  16294. SELECT count(*) INTO :cnt FROM u_prdpf
  16295. WHERE u_prdpf.mtrlid = :ll_p_mtrlid
  16296. AND u_prdpf.pfcode = :ls_p_pfcode
  16297. And u_PrdPF.SonMtrlid = :arg_mtrlid;
  16298. IF sqlca.SQLCode <> 0 THEN
  16299. cnt = 0
  16300. END IF
  16301. IF cnt = 0 THEN
  16302. li_ifupban_save = 0
  16303. ELSE
  16304. li_ifupban_save = 1
  16305. END IF
  16306. ELSEIF li_bantype_mtrl = 2 THEN
  16307. li_ifpban_save = 0
  16308. li_ifupban_save = 1
  16309. END IF
  16310. END IF
  16311. IF li_p_ifpackpro = 1 THEN //主计划为包件产品
  16312. IF li_bantype_mtrl = 0 THEN
  16313. li_ifpban_save = 0
  16314. li_ifupban_save = 0
  16315. ELSEIF li_bantype_mtrl = 1 THEN
  16316. li_ifpban_save = 1
  16317. cnt = 0
  16318. SELECT count(*) INTO :cnt FROM u_prdpf,u_prdpf u_prdpf_p,u_mtrldef
  16319. WHERE u_prdpf_p.mtrlid = :ll_p_mtrlid
  16320. AND u_prdpf_p.pfcode = :ls_p_pfcode
  16321. and u_prdpf_p.sonmtrlid = u_mtrldef.mtrlid
  16322. and u_mtrldef.ifpack = 1
  16323. and u_prdpf_p.sonmtrlid = u_prdpf.mtrlid
  16324. and u_prdpf_p.sonpfcode = u_prdpf.pfcode
  16325. And u_prdpf.SonMtrlid = :arg_mtrlid;
  16326. IF sqlca.SQLCode <> 0 THEN
  16327. cnt = 0
  16328. END IF
  16329. IF cnt = 0 THEN
  16330. li_ifupban_save = 0
  16331. ELSE
  16332. li_ifupban_save = 1
  16333. END IF
  16334. ELSEIF li_bantype_mtrl = 2 THEN
  16335. li_ifpban_save = 0
  16336. li_ifupban_save = 1
  16337. END IF
  16338. END IF
  16339. IF li_p_ifpack = 0 And li_p_ifpackpro <> 1 THEN //主计划非包件产品非包件
  16340. IF li_bantype_mtrl = 0 THEN
  16341. li_ifpban_save = 0
  16342. li_ifupban_save = 0
  16343. ELSEIF li_bantype_mtrl = 1 THEN
  16344. li_ifpban_save = 1
  16345. cnt = 0
  16346. SELECT count(*) INTO :cnt FROM u_prdpf
  16347. WHERE u_prdpf.mtrlid = :ll_p_mtrlid
  16348. AND u_prdpf.pfcode = :ls_p_pfcode
  16349. And u_PrdPF.SonMtrlid = :arg_mtrlid;
  16350. IF sqlca.SQLCode <> 0 THEN
  16351. cnt = 0
  16352. END IF
  16353. IF cnt = 0 THEN
  16354. li_ifupban_save = 0
  16355. ELSE
  16356. li_ifupban_save = 1
  16357. END IF
  16358. ELSEIF li_bantype_mtrl = 2 THEN
  16359. li_ifpban_save = 0
  16360. li_ifupban_save = 1
  16361. END IF
  16362. END IF
  16363. ELSE
  16364. IF li_bantype_mtrl = 0 THEN
  16365. li_ifpban_save = 0
  16366. li_ifupban_save = 0
  16367. ELSEIF li_bantype_mtrl = 1 THEN
  16368. li_ifpban_save = 1
  16369. li_ifupban_save = 1
  16370. ELSEIF li_bantype_mtrl = 2 THEN
  16371. li_ifpban_save = 0
  16372. li_ifupban_save = 1
  16373. END IF
  16374. END IF
  16375. END IF
  16376. s_order_mx[it_mxbt].ifpban = li_ifpban_save
  16377. s_order_mx[it_mxbt].ifupban = li_ifupban_save
  16378. ext:
  16379. Destroy ds_find_pmtrlid
  16380. Return(rslt)
  16381. end function
  16382. public function integer tmp_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit);//YS危险功能,勿删 2014-03-19
  16383. Int rslt = 1
  16384. Long cnt
  16385. String ls_partname
  16386. Long li_ordertype_mtrldef
  16387. Long ll_statusflag,li_ifpackpro
  16388. Decimal lde_price
  16389. s_mtrlcfg_expr s_pz[],s_empty[]
  16390. Long ll_i,ll_j
  16391. String ls_status_zj
  16392. Decimal ld_qty_zj
  16393. String ls_utcode[]
  16394. Long cnt_ut = 0
  16395. Decimal ld_workprice,ld_workqty,ld_workprice_sum
  16396. String ls_procode,ls_proname
  16397. Long ll_proorder,ll_wrkgrpid,ll_lsxtype,ll_ifjd,ll_lastflag
  16398. Int li_sctype
  16399. Long ll_equipmentid
  16400. Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum
  16401. String ls_worktype
  16402. Int li_if_hourpay
  16403. Decimal ld_eoq,ld_splitrate
  16404. Decimal ld_hourpay
  16405. String ls_mtrlsectype,ls_usermtrlmode,ls_zxmtrlmode,ls_mtrlmode
  16406. Int li_ifgroup
  16407. Decimal ld_u_workqty,ld_u_workprice,ld_u_workprice_sum
  16408. Int li_protype
  16409. Long ll_mtrlid
  16410. String ls_pricestr,s_rtn
  16411. Decimal ld_workprice_str,ld_workqty_str,ld_workqty_ori
  16412. Decimal ld_proqty,ld_hourpay_cmp
  16413. String ls_pricestr_ori,ls_pricestr_value
  16414. String ls_parmname
  16415. Decimal ld_parmvalue
  16416. String ls_workqtystr_ori,ls_workqtystr_value,ls_workqtystr
  16417. Decimal ld_u_workqty_str,ld_u_workprice_str
  16418. String ls_u_workqtystr,ls_u_workqtystr_value,ls_u_pricestr,ls_u_pricestr_value
  16419. String ls_u_workqtystr_ori,ls_u_pricestr_ori
  16420. datastore ds_orderrqwp
  16421. ds_orderrqwp = Create datastore
  16422. ds_orderrqwp.DataObject = 'ds_orderrqwp_workprice'
  16423. ds_orderrqwp.SetTransObject(sqlca)
  16424. datastore ds_pricestr
  16425. ds_pricestr = Create datastore
  16426. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  16427. ds_pricestr.SetTransObject(sqlca)
  16428. datastore ds_parm
  16429. ds_parm = Create datastore
  16430. ds_parm.DataObject = 'ds_workprice_parm_def'
  16431. ds_parm.SetTransObject(sqlca)
  16432. ds_parm.Retrieve()
  16433. If uo_option_def_workprice = -1000 Then
  16434. rslt = 0
  16435. arg_msg = '选项:[012]生产计划审核时需要检查是否已定义工价表,读取初始默认值失败,操作取消!'
  16436. Goto ext
  16437. End If
  16438. If uo_option_orderrqwp_union = -1000 Then
  16439. rslt = 0
  16440. arg_msg = '选项:[148]生产计划工序明细按工价表配置及组号合并,读取初始默认值失败,操作取消!'
  16441. Goto ext
  16442. End If
  16443. If arg_orderid = 0 Then
  16444. rslt = 0
  16445. arg_msg = "没有审核对象"
  16446. Goto ext
  16447. End If
  16448. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  16449. rslt = 0
  16450. Goto ext
  16451. End If
  16452. If ordertype = 3 Or ifwforder = 1 Then
  16453. rslt = 1
  16454. Goto ext
  16455. End If
  16456. Select ordertype,
  16457. statusflag,
  16458. ifpackpro,
  16459. if_hourpay,
  16460. eoq,
  16461. splitrate,
  16462. mtrlsectype,
  16463. zxmtrlmode,
  16464. usermtrlmode,
  16465. mtrlmode,
  16466. protype
  16467. Into :li_ordertype_mtrldef,
  16468. :ll_statusflag,
  16469. :li_ifpackpro,
  16470. :li_if_hourpay,
  16471. :ld_eoq,
  16472. :ld_splitrate,
  16473. :ls_mtrlsectype,
  16474. :ls_zxmtrlmode,
  16475. :ls_usermtrlmode,
  16476. :ls_mtrlmode,
  16477. :li_protype
  16478. From u_mtrldef
  16479. Where mtrlid = :mtrlid;
  16480. If sqlca.SQLCode <> 0 Then
  16481. rslt = 0
  16482. arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText
  16483. Goto ext
  16484. End If
  16485. If (ordertype <> 4 And li_ordertype_mtrldef = 1) Then
  16486. rslt = 1
  16487. Goto ext
  16488. End If
  16489. If status <> 1 And status <> 4 And status <> 7 And status <> 5 And status <> 6 Then
  16490. rslt = 0
  16491. arg_msg = "计划只有在(已审核,完成)状态才可以执行重新生成工序,请核对"
  16492. Goto ext
  16493. End If
  16494. //IF uo_option_def_workprice = 0 THEN
  16495. // rslt = 1
  16496. // GOTO ext
  16497. //END IF
  16498. If li_protype = 0 Then
  16499. If li_ifpackpro = 0 Then
  16500. If ll_statusflag <> 2 Then
  16501. If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then
  16502. cnt = 0
  16503. Select count(*)
  16504. Into :cnt
  16505. From u_sc_workprice
  16506. Where u_sc_workprice.mtrlid = :mtrlid
  16507. And u_sc_workprice.wpcode = :wpcode
  16508. And u_sc_workprice.ifownpro = 0
  16509. And u_sc_workprice.lsxtype <> 0;
  16510. If sqlca.SQLCode <> 0 Then
  16511. arg_msg = '查询产品工价表失败,'+sqlca.SQLErrText
  16512. rslt = 0
  16513. Goto ext
  16514. End If
  16515. If cnt = 0 Then
  16516. arg_msg = '产品对应车间的工价表未建立,请先建立工价表'
  16517. rslt = 0
  16518. Goto ext
  16519. End If
  16520. End If
  16521. If uo_option_def_workprice = 2 Then
  16522. cnt = 0
  16523. Select count(*)
  16524. Into :cnt
  16525. From u_sc_workprice
  16526. Where u_sc_workprice.mtrlid = :mtrlid
  16527. And u_sc_workprice.wpcode = :wpcode
  16528. And u_sc_workprice.auditflag = 0
  16529. And u_sc_workprice.ifownpro = 0
  16530. And u_sc_workprice.lsxtype <> 0;
  16531. If sqlca.SQLCode <> 0 Then
  16532. arg_msg = '查询产品工价表是否有未审核失败,'+sqlca.SQLErrText
  16533. rslt = 0
  16534. Goto ext
  16535. End If
  16536. If cnt > 0 Then
  16537. arg_msg = '产品对应车间的工价表存在未审核工价,请检查'
  16538. rslt = 0
  16539. Goto ext
  16540. End If
  16541. End If
  16542. Else
  16543. // f_checkpz(status_mode,s_pz[])
  16544. f_checkpz_general(mtrlid,status_mode,s_pz[])
  16545. For ll_i = 1 To UpperBound(s_pz)
  16546. ls_status_zj = s_pz[ll_i].cfgname
  16547. If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then
  16548. cnt = 0
  16549. Select count(*)
  16550. Into :cnt
  16551. From u_sc_workprice
  16552. Where u_sc_workprice.mtrlid = :mtrlid
  16553. And u_sc_workprice.wpcode = :wpcode
  16554. And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '')
  16555. And u_sc_workprice.ifownpro = 0
  16556. And u_sc_workprice.lsxtype <> 0;
  16557. If sqlca.SQLCode <> 0 Then
  16558. arg_msg = '查询产品子件:'+ls_status_zj+'工价表失败,'+sqlca.SQLErrText
  16559. rslt = 0
  16560. Goto ext
  16561. End If
  16562. If cnt = 0 Then
  16563. arg_msg = '产品对应车间的子件:'+ls_status_zj+'工价表未建立,请先建立工价表'
  16564. rslt = 0
  16565. Goto ext
  16566. End If
  16567. End If
  16568. If uo_option_def_workprice = 2 Then
  16569. cnt = 0
  16570. Select count(*)
  16571. Into :cnt
  16572. From u_sc_workprice
  16573. Where u_sc_workprice.mtrlid = :mtrlid
  16574. And u_sc_workprice.wpcode = :wpcode
  16575. And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '')
  16576. And u_sc_workprice.auditflag = 0
  16577. And u_sc_workprice.ifownpro = 0
  16578. And u_sc_workprice.lsxtype <> 0;
  16579. If sqlca.SQLCode <> 0 Then
  16580. arg_msg = '查询产品工价表子件:'+ls_status_zj+'是否有未审核失败,'+sqlca.SQLErrText
  16581. rslt = 0
  16582. Goto ext
  16583. End If
  16584. If cnt > 0 Then
  16585. arg_msg = '产品对应车间的工价表子件:'+ls_status_zj+'存在未审核工价,请检查'
  16586. rslt = 0
  16587. Goto ext
  16588. End If
  16589. End If
  16590. Next
  16591. End If
  16592. End If
  16593. // cnt = 0
  16594. // Select count(*) Into :cnt
  16595. // From u_orderrqwp
  16596. // Where (finishqty > 0 Or taskqty > 0 )
  16597. // And orderid = :arg_orderid
  16598. // And scid = :arg_scid;
  16599. // If sqlca.SQLCode <> 0 Then
  16600. // arg_msg = '查询计划工序明细是否有完成数量失败,'+sqlca.SQLErrText
  16601. // rslt = 0
  16602. // Goto ext
  16603. // End If
  16604. //
  16605. // If cnt > 0 Then
  16606. // arg_msg = '计划工序明细已有完成数量或已派工数,不能生成计划工序明细'
  16607. // rslt = 0
  16608. // Goto ext
  16609. // End If
  16610. Select count(*) Into :cnt
  16611. From v_order_procode
  16612. Where scid = :arg_scid
  16613. And orderid = :arg_orderid;
  16614. If sqlca.SQLCode <> 0 Then
  16615. arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText
  16616. rslt = 0
  16617. Goto ext
  16618. End If
  16619. If cnt > 0 Then
  16620. arg_msg = '计划工序明细已开计件单,不能生成计划工序明细'
  16621. rslt = 0
  16622. Goto ext
  16623. End If
  16624. // Select count(*) Into :cnt
  16625. // From u_sc_task
  16626. // Where scid = :arg_scid
  16627. // And orderid = :arg_orderid;
  16628. // If sqlca.SQLCode <> 0 Then
  16629. // arg_msg = '查询计划工序明细是否已开工序派工单失败,'+sqlca.SQLErrText
  16630. // rslt = 0
  16631. // Goto ext
  16632. // End If
  16633. //
  16634. // If cnt > 0 Then
  16635. // arg_msg = '计划工序明细开工序派工单,不能生成计划工序明细'
  16636. // rslt = 0
  16637. // Goto ext
  16638. // End If
  16639. Delete From u_orderrqwp
  16640. Where orderid = :arg_orderid
  16641. And scid = :arg_scid;
  16642. If sqlca.SQLCode <> 0 Then
  16643. rslt = 0
  16644. arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  16645. Goto ext
  16646. End If
  16647. s_pz = s_empty
  16648. If ll_statusflag <> 2 Then //非组合配置产品
  16649. cnt = 0
  16650. Select count(*) Into :cnt
  16651. From u_sc_workprice
  16652. Where mtrlid = :mtrlid
  16653. And ltrim(rtrim(utcode)) <> ''
  16654. And u_sc_workprice.ifownpro = 0
  16655. And u_sc_workprice.lsxtype <> 0;
  16656. If sqlca.SQLCode <> 0 Then
  16657. rslt = 0
  16658. arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText
  16659. Goto ext
  16660. End If
  16661. If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 Or cnt = 0 Then
  16662. Insert Into u_orderrqwp(scid,
  16663. orderid,
  16664. mtrlid,
  16665. procode,
  16666. proname,
  16667. proorder,
  16668. proqty,
  16669. wrkgrpid,
  16670. lsxtype,
  16671. workprice,
  16672. status,
  16673. ifjd,
  16674. lastflag,
  16675. sctype,
  16676. equipmentid,
  16677. partname,
  16678. eqworkhour,
  16679. Workhour,
  16680. beforehour,
  16681. afterhour,
  16682. ori_workprice,
  16683. worktype,
  16684. eq_empnum,
  16685. ifgroup,
  16686. u_workqty,
  16687. u_workprice)
  16688. Select u_order_ml.scid,
  16689. u_order_ml.orderid,
  16690. u_order_ml.mtrlid,
  16691. u_sc_workprice.procode,
  16692. u_sc_workprice.proname,
  16693. u_sc_workprice.proorder,
  16694. u_sc_workprice.workqty * u_order_ml.orderqty,
  16695. u_sc_workprice.wrkgrpid,
  16696. u_sc_workprice.lsxtype,
  16697. u_sc_workprice.workprice,
  16698. u_sc_workprice.status,
  16699. u_sc_workprice.ifjd,
  16700. u_sc_workprice.lastflag,
  16701. u_sc_workprice.sctype,
  16702. u_sc_workprice.equipmentid,
  16703. u_sc_workprice.partname,
  16704. u_sc_workprice.eqworkhour,
  16705. u_sc_workprice.Workhour,
  16706. u_sc_workprice.beforehour,
  16707. u_sc_workprice.afterhour,
  16708. u_sc_workprice.workprice,
  16709. u_sc_workprice.worktype,
  16710. u_sc_workprice.eq_empnum,
  16711. u_sc_workprice.ifgroup,
  16712. u_sc_workprice.u_workqty * u_order_ml.orderqty,
  16713. u_sc_workprice.u_workprice
  16714. From u_sc_workprice,u_order_ml
  16715. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  16716. And u_order_ml.orderid = :arg_orderid
  16717. And u_order_ml.scid = :arg_scid
  16718. And u_sc_workprice.ifownpro = 0
  16719. And u_sc_workprice.lsxtype <> 0
  16720. And u_sc_workprice.wpcode = :wpcode;
  16721. If sqlca.SQLCode <> 0 Then
  16722. rslt = 0
  16723. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  16724. Goto ext
  16725. End If
  16726. Else
  16727. cnt_ut = 1
  16728. Declare cur_ut2 Cursor For
  16729. Select distinct utcode
  16730. From u_sc_workprice
  16731. Where mtrlid = :mtrlid
  16732. And lTrim(rtrim(utcode)) <> ''
  16733. And u_sc_workprice.ifownpro = 0
  16734. And u_sc_workprice.lsxtype <> 0
  16735. And u_sc_workprice.wpcode = :wpcode;
  16736. Open cur_ut2;
  16737. Fetch cur_ut2 Into :ls_utcode[cnt_ut];
  16738. Do While sqlca.SQLCode = 0
  16739. cnt_ut++
  16740. Fetch cur_ut2 Into :ls_utcode[cnt_ut];
  16741. Loop
  16742. Close cur_ut2;
  16743. cnt_ut = cnt_ut - 1
  16744. For ll_i = 1 To cnt_ut
  16745. ld_workprice = 0
  16746. ld_workqty = 0
  16747. Select sum(workprice),sum(workqty),sum(u_workprice),sum(u_workqty)
  16748. Into :ld_workprice,:ld_workqty,:ld_u_workprice,:ld_u_workqty
  16749. From u_sc_workprice
  16750. Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i]
  16751. And mtrlid = :mtrlid
  16752. And u_sc_workprice.wpcode = :wpcode;
  16753. If sqlca.SQLCode <> 0 Then
  16754. rslt = 0
  16755. arg_msg = '查询组号:'+ls_utcode[ll_i]+' 合计工价,数量失败,'+sqlca.SQLErrText
  16756. Goto ext
  16757. End If
  16758. Select top 1 u_sc_workprice.procode,
  16759. u_sc_workprice.proname,
  16760. u_sc_workprice.proorder,
  16761. u_sc_workprice.wrkgrpid,
  16762. u_sc_workprice.lsxtype,
  16763. u_sc_workprice.ifjd,
  16764. u_sc_workprice.lastflag,
  16765. u_sc_workprice.sctype,
  16766. u_sc_workprice.equipmentid,
  16767. u_sc_workprice.partname,
  16768. u_sc_workprice.eqworkhour,
  16769. u_sc_workprice.Workhour,
  16770. u_sc_workprice.beforehour,
  16771. u_sc_workprice.afterhour,
  16772. u_sc_workprice.worktype,
  16773. u_sc_workprice.eq_empnum,
  16774. u_sc_workprice.ifgroup
  16775. Into :ls_procode,
  16776. :ls_proname,
  16777. :ll_proorder,
  16778. :ll_wrkgrpid,
  16779. :ll_lsxtype,
  16780. :ll_ifjd,
  16781. :ll_lastflag,
  16782. :li_sctype,
  16783. :ll_equipmentid,
  16784. :ls_partname,
  16785. :ld_eqworkhour,
  16786. :ld_Workhour,
  16787. :ld_beforehour,
  16788. :ld_afterhour,
  16789. :ls_worktype,
  16790. :ld_eq_empnum,
  16791. :li_ifgroup
  16792. From u_sc_workprice
  16793. Where mtrlid = :mtrlid
  16794. And utcode = :ls_utcode[ll_i]
  16795. And u_sc_workprice.wpcode = :wpcode
  16796. Order By lastflag Desc,u_sc_workprice.proorder Desc;
  16797. If sqlca.SQLCode <> 0 Then
  16798. rslt = 0
  16799. arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'末工序相关信息失败'+sqlca.SQLErrText
  16800. Goto ext
  16801. End If
  16802. ls_proname = '工序:(组:'+Trim(ls_utcode[ll_i])+')'
  16803. Insert Into u_orderrqwp
  16804. (scid,
  16805. orderid,
  16806. mtrlid,
  16807. procode,
  16808. proname,
  16809. proorder,
  16810. proqty,
  16811. wrkgrpid,
  16812. lsxtype,
  16813. workprice,
  16814. status,
  16815. ifjd,
  16816. lastflag,
  16817. sctype,
  16818. equipmentid,
  16819. partname,
  16820. eqworkhour,
  16821. Workhour,
  16822. beforehour,
  16823. afterhour,
  16824. ori_workprice,
  16825. worktype,
  16826. eq_empnum,
  16827. ifgroup,
  16828. u_workprice,
  16829. u_workqty)
  16830. Values (:arg_scid,
  16831. :arg_orderid,
  16832. :mtrlid,
  16833. :ls_procode,
  16834. :ls_proname,
  16835. :ll_proorder,
  16836. :orderqty,
  16837. :ll_wrkgrpid,
  16838. :ll_lsxtype,
  16839. :ld_workprice,
  16840. :status_mode,
  16841. :ll_ifjd,
  16842. :ll_lastflag,
  16843. :li_sctype,
  16844. :ll_equipmentid,
  16845. :ls_partname,
  16846. :ld_eqworkhour,
  16847. :ld_Workhour,
  16848. :ld_beforehour,
  16849. :ld_afterhour,
  16850. :ld_workprice_sum,
  16851. :ls_worktype,
  16852. :ld_eq_empnum,
  16853. :li_ifgroup,
  16854. :ld_u_workprice,
  16855. :ld_u_workqty);
  16856. If sqlca.SQLCode <> 0 Then
  16857. rslt = 0
  16858. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  16859. Goto ext
  16860. End If
  16861. Next
  16862. //加空组号工序
  16863. Insert Into u_orderrqwp(scid,
  16864. orderid,
  16865. mtrlid,
  16866. procode,
  16867. proname,
  16868. proorder,
  16869. proqty,
  16870. wrkgrpid,
  16871. lsxtype,
  16872. workprice,
  16873. status,
  16874. ifjd,
  16875. lastflag,
  16876. sctype,
  16877. equipmentid,
  16878. partname,
  16879. eqworkhour,
  16880. Workhour,
  16881. beforehour,
  16882. afterhour,
  16883. ori_workprice,
  16884. worktype,
  16885. eq_empnum,
  16886. ifgroup,
  16887. u_workprice,
  16888. u_workqty)
  16889. Select u_order_ml.scid,
  16890. u_order_ml.orderid,
  16891. u_order_ml.mtrlid,
  16892. u_sc_workprice.procode,
  16893. u_sc_workprice.proname,
  16894. u_sc_workprice.proorder,
  16895. u_sc_workprice.workqty * u_order_ml.orderqty,
  16896. u_sc_workprice.wrkgrpid,
  16897. u_sc_workprice.lsxtype,
  16898. u_sc_workprice.workprice,
  16899. u_sc_workprice.status,
  16900. u_sc_workprice.ifjd,
  16901. u_sc_workprice.lastflag,
  16902. u_sc_workprice.sctype,
  16903. u_sc_workprice.equipmentid,
  16904. u_sc_workprice.partname,
  16905. u_sc_workprice.eqworkhour,
  16906. u_sc_workprice.Workhour,
  16907. u_sc_workprice.beforehour,
  16908. u_sc_workprice.afterhour,
  16909. u_sc_workprice.workprice,
  16910. u_sc_workprice.worktype,
  16911. u_sc_workprice.eq_empnum,
  16912. u_sc_workprice.ifgroup,
  16913. u_sc_workprice.u_workprice,
  16914. u_sc_workprice.u_workqty * u_order_ml.orderqty
  16915. From u_sc_workprice,u_order_ml
  16916. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  16917. And u_order_ml.orderid = :arg_orderid
  16918. And u_order_ml.scid = :arg_scid
  16919. And u_sc_workprice.ifownpro = 0
  16920. And u_sc_workprice.lsxtype <> 0
  16921. And u_sc_workprice.utcode = ''
  16922. And u_sc_workprice.wpcode = :wpcode;
  16923. If sqlca.SQLCode <> 0 Then
  16924. rslt = 0
  16925. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  16926. Goto ext
  16927. End If
  16928. End If
  16929. Else
  16930. cnt = 0
  16931. Select count(*) Into :cnt
  16932. From u_sc_workprice
  16933. Where mtrlid = :mtrlid
  16934. And ltrim(rtrim(utcode)) <> ''
  16935. And u_sc_workprice.ifownpro = 0
  16936. And u_sc_workprice.lsxtype <> 0;
  16937. If sqlca.SQLCode <> 0 Then
  16938. rslt = 0
  16939. arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText
  16940. Goto ext
  16941. End If
  16942. If uo_option_orderrqwp_union = 0 Or cnt = 0 Then
  16943. // f_checkpz(status_mode,s_pz[])
  16944. f_checkpz_general(mtrlid,status_mode,s_pz[])
  16945. For ll_i = 1 To UpperBound(s_pz)
  16946. ls_status_zj = s_pz[ll_i].cfgname
  16947. ld_qty_zj = Dec(s_pz[ll_i].qty)
  16948. Insert Into u_orderrqwp(scid,
  16949. orderid,
  16950. mtrlid,
  16951. procode,
  16952. proname,
  16953. proorder,
  16954. proqty,
  16955. wrkgrpid,
  16956. lsxtype,
  16957. workprice,
  16958. status,
  16959. ifjd,
  16960. lastflag,
  16961. sctype,
  16962. equipmentid,
  16963. partname,
  16964. eqworkhour,
  16965. Workhour,
  16966. beforehour,
  16967. afterhour,
  16968. ori_workprice,
  16969. worktype,
  16970. eq_empnum,
  16971. ifgroup,
  16972. u_workprice,
  16973. u_workqty)
  16974. Select u_order_ml.scid,
  16975. u_order_ml.orderid,
  16976. u_order_ml.mtrlid,
  16977. u_sc_workprice.procode,
  16978. u_sc_workprice.proname,
  16979. u_sc_workprice.proorder,
  16980. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  16981. u_sc_workprice.wrkgrpid,
  16982. u_sc_workprice.lsxtype,
  16983. u_sc_workprice.workprice,
  16984. u_sc_workprice.status,
  16985. u_sc_workprice.ifjd,
  16986. u_sc_workprice.lastflag,
  16987. u_sc_workprice.sctype,
  16988. u_sc_workprice.equipmentid,
  16989. u_sc_workprice.partname,
  16990. u_sc_workprice.eqworkhour,
  16991. u_sc_workprice.Workhour,
  16992. u_sc_workprice.beforehour,
  16993. u_sc_workprice.afterhour,
  16994. u_sc_workprice.workprice,
  16995. u_sc_workprice.worktype,
  16996. u_sc_workprice.eq_empnum,
  16997. u_sc_workprice.ifgroup,
  16998. u_sc_workprice.u_workprice,
  16999. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj
  17000. From u_sc_workprice,u_order_ml
  17001. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  17002. And u_order_ml.orderid = :arg_orderid
  17003. And u_order_ml.scid = :arg_scid
  17004. And u_sc_workprice.ifownpro = 0
  17005. And u_sc_workprice.lsxtype <> 0
  17006. And (u_sc_workprice.status = :ls_status_zj)
  17007. And u_sc_workprice.wpcode = :wpcode;
  17008. If sqlca.SQLCode <> 0 Then
  17009. rslt = 0
  17010. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  17011. Goto ext
  17012. End If
  17013. Next
  17014. //加空子件工序(公共)
  17015. Insert Into u_orderrqwp(scid,
  17016. orderid,
  17017. mtrlid,
  17018. procode,
  17019. proname,
  17020. proorder,
  17021. proqty,
  17022. wrkgrpid,
  17023. lsxtype,
  17024. workprice,
  17025. status,
  17026. ifjd,
  17027. lastflag,
  17028. sctype,
  17029. equipmentid,
  17030. partname,
  17031. eqworkhour,
  17032. Workhour,
  17033. beforehour,
  17034. afterhour,
  17035. ori_workprice,
  17036. worktype,
  17037. eq_empnum,
  17038. ifgroup,
  17039. u_workprice,
  17040. u_workqty)
  17041. Select u_order_ml.scid,
  17042. u_order_ml.orderid,
  17043. u_order_ml.mtrlid,
  17044. u_sc_workprice.procode,
  17045. u_sc_workprice.proname,
  17046. u_sc_workprice.proorder,
  17047. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  17048. u_sc_workprice.wrkgrpid,
  17049. u_sc_workprice.lsxtype,
  17050. u_sc_workprice.workprice,
  17051. u_sc_workprice.status,
  17052. u_sc_workprice.ifjd,
  17053. u_sc_workprice.lastflag,
  17054. u_sc_workprice.sctype,
  17055. u_sc_workprice.equipmentid,
  17056. u_sc_workprice.partname,
  17057. u_sc_workprice.eqworkhour,
  17058. u_sc_workprice.Workhour,
  17059. u_sc_workprice.beforehour,
  17060. u_sc_workprice.afterhour,
  17061. u_sc_workprice.workprice,
  17062. u_sc_workprice.worktype,
  17063. u_sc_workprice.eq_empnum,
  17064. u_sc_workprice.ifgroup,
  17065. u_sc_workprice.u_workprice,
  17066. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj
  17067. From u_sc_workprice,u_order_ml
  17068. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  17069. And u_order_ml.orderid = :arg_orderid
  17070. And u_order_ml.scid = :arg_scid
  17071. And u_sc_workprice.ifownpro = 0
  17072. And u_sc_workprice.lsxtype <> 0
  17073. And (u_sc_workprice.status = '')
  17074. And u_sc_workprice.wpcode = :wpcode;
  17075. If sqlca.SQLCode <> 0 Then
  17076. rslt = 0
  17077. arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText
  17078. Goto ext
  17079. End If
  17080. Else
  17081. // f_checkpz(status_mode,s_pz[])
  17082. cnt_ut = 1
  17083. f_checkpz_general(mtrlid,status_mode,s_pz[])
  17084. Declare cur_ut Cursor For
  17085. Select distinct utcode
  17086. From u_sc_workprice
  17087. Where mtrlid = :mtrlid
  17088. And lTrim(rtrim(utcode)) <> ''
  17089. And u_sc_workprice.ifownpro = 0
  17090. And u_sc_workprice.lsxtype <> 0
  17091. And u_sc_workprice.wpcode = :wpcode;
  17092. Open cur_ut;
  17093. Fetch cur_ut Into :ls_utcode[cnt_ut];
  17094. Do While sqlca.SQLCode = 0
  17095. cnt_ut++
  17096. Fetch cur_ut Into :ls_utcode[cnt_ut];
  17097. Loop
  17098. Close cur_ut;
  17099. cnt_ut = cnt_ut - 1
  17100. For ll_i = 1 To cnt_ut
  17101. ld_workprice_sum = 0
  17102. For ll_j = 1 To UpperBound(s_pz)
  17103. ls_status_zj = s_pz[ll_j].cfgname
  17104. ld_qty_zj = Dec(s_pz[ll_j].qty)
  17105. ld_workprice = 0
  17106. ld_workqty = 0
  17107. ld_u_workprice = 0
  17108. ld_u_workqty = 0
  17109. Select workprice,
  17110. workqty,
  17111. u_workprice,
  17112. u_workqty,pricestr,
  17113. workqtystr,
  17114. u_pricestr,
  17115. u_workqtystr,
  17116. procode
  17117. Into :ld_workprice,
  17118. :ld_workqty,
  17119. :ld_u_workprice,
  17120. :ld_u_workqty,
  17121. :ls_pricestr,
  17122. :ls_workqtystr,
  17123. :ls_u_pricestr,
  17124. :ls_u_workqtystr,
  17125. :ls_procode
  17126. From u_sc_workprice
  17127. Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i]
  17128. And lTrim(rtrim(status)) = :ls_status_zj
  17129. And mtrlid = :mtrlid
  17130. And u_sc_workprice.wpcode = :wpcode;
  17131. If sqlca.SQLCode <> 0 Then
  17132. rslt = 0
  17133. arg_msg = '查询组号:'+ls_utcode[ll_i]+' 配置:'+ls_status_zj+' 工价失败,'+sqlca.SQLErrText
  17134. Goto ext
  17135. End If
  17136. If Trim(ls_workqtystr) <> '' Then
  17137. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) = 1 Then
  17138. ld_workqty = ld_workqty_str
  17139. End If
  17140. End If
  17141. If Trim(ls_pricestr) <> '' Then
  17142. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) = 1 Then
  17143. ld_workprice = ld_workprice_str
  17144. End If
  17145. End If
  17146. If Trim(ls_u_workqtystr) <> '' Then
  17147. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) = 1 Then
  17148. ld_u_workqty = ld_u_workqty_str
  17149. End If
  17150. End If
  17151. If Trim(ls_u_pricestr) <> '' Then
  17152. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) = 1 Then
  17153. ld_u_workprice = ld_u_workprice_str
  17154. End If
  17155. End If
  17156. ld_workprice_sum = ld_workprice_sum + ld_workprice * ld_workqty * ld_qty_zj
  17157. ld_u_workprice_sum = ld_u_workprice_sum + ld_u_workprice * ld_u_workqty * ld_qty_zj
  17158. Next
  17159. Select top 1 u_sc_workprice.procode,
  17160. u_sc_workprice.proname,
  17161. u_sc_workprice.proorder,
  17162. u_sc_workprice.wrkgrpid,
  17163. u_sc_workprice.lsxtype,
  17164. u_sc_workprice.ifjd,
  17165. u_sc_workprice.lastflag,
  17166. u_sc_workprice.sctype,
  17167. u_sc_workprice.equipmentid,
  17168. u_sc_workprice.partname,
  17169. u_sc_workprice.eqworkhour,
  17170. u_sc_workprice.Workhour,
  17171. u_sc_workprice.beforehour,
  17172. u_sc_workprice.afterhour,
  17173. u_sc_workprice.worktype,
  17174. u_sc_workprice.eq_empnum,
  17175. u_sc_workprice.ifgroup
  17176. Into :ls_procode,
  17177. :ls_proname,
  17178. :ll_proorder,
  17179. :ll_wrkgrpid,
  17180. :ll_lsxtype,
  17181. :ll_ifjd,
  17182. :ll_lastflag,
  17183. :li_sctype,
  17184. :ll_equipmentid,
  17185. :ls_partname,
  17186. :ld_eqworkhour,
  17187. :ld_Workhour,
  17188. :ld_beforehour,
  17189. :ld_afterhour,
  17190. :ls_worktype,
  17191. :ld_eq_empnum,
  17192. :li_ifgroup
  17193. From u_sc_workprice
  17194. Where mtrlid = :mtrlid
  17195. And utcode = :ls_utcode[ll_i]
  17196. And u_sc_workprice.wpcode = :wpcode
  17197. Order By lastflag Desc;
  17198. If sqlca.SQLCode <> 0 Then
  17199. rslt = 0
  17200. arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'相关信息失败'+sqlca.SQLErrText
  17201. Goto ext
  17202. End If
  17203. Insert Into u_orderrqwp
  17204. (scid,
  17205. orderid,
  17206. mtrlid,
  17207. procode,
  17208. proname,
  17209. proorder,
  17210. proqty,
  17211. wrkgrpid,
  17212. lsxtype,
  17213. workprice,
  17214. status,
  17215. ifjd,
  17216. lastflag,
  17217. sctype,
  17218. equipmentid,
  17219. partname,
  17220. eqworkhour,
  17221. Workhour,
  17222. beforehour,
  17223. afterhour,
  17224. ori_workprice,
  17225. worktype,
  17226. eq_empnum,
  17227. ifgroup,
  17228. u_workprice,
  17229. u_workqty)
  17230. Values (:arg_scid,
  17231. :arg_orderid,
  17232. :mtrlid,
  17233. :ls_procode,
  17234. :ls_proname,
  17235. :ll_proorder,
  17236. :orderqty,
  17237. :ll_wrkgrpid,
  17238. :ll_lsxtype,
  17239. :ld_workprice_sum,
  17240. :status_mode,
  17241. :ll_ifjd,
  17242. :ll_lastflag,
  17243. :li_sctype,
  17244. :ll_equipmentid,
  17245. :ls_partname,
  17246. :ld_eqworkhour,
  17247. :ld_Workhour,
  17248. :ld_beforehour,
  17249. :ld_afterhour,
  17250. :ld_workprice_sum,
  17251. :ls_worktype,
  17252. :ld_eq_empnum,
  17253. :li_ifgroup,
  17254. :ld_u_workprice_sum,
  17255. :orderqty);
  17256. If sqlca.SQLCode <> 0 Then
  17257. rslt = 0
  17258. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  17259. Goto ext
  17260. End If
  17261. Next
  17262. //加空组号工序
  17263. For ll_i = 1 To UpperBound(s_pz)
  17264. ls_status_zj = s_pz[ll_i].cfgname
  17265. ld_qty_zj = Dec(s_pz[ll_i].qty)
  17266. Insert Into u_orderrqwp(scid,
  17267. orderid,
  17268. mtrlid,
  17269. procode,
  17270. proname,
  17271. proorder,
  17272. proqty,
  17273. wrkgrpid,
  17274. lsxtype,
  17275. workprice,
  17276. status,
  17277. ifjd,
  17278. lastflag,
  17279. sctype,
  17280. equipmentid,
  17281. partname,
  17282. eqworkhour,
  17283. Workhour,
  17284. beforehour,
  17285. afterhour,
  17286. ori_workprice,
  17287. worktype,
  17288. eq_empnum,
  17289. u_workprice,
  17290. u_workqty)
  17291. Select u_order_ml.scid,
  17292. u_order_ml.orderid,
  17293. u_order_ml.mtrlid,
  17294. u_sc_workprice.procode,
  17295. u_sc_workprice.proname,
  17296. u_sc_workprice.proorder,
  17297. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  17298. u_sc_workprice.wrkgrpid,
  17299. u_sc_workprice.lsxtype,
  17300. u_sc_workprice.workprice,
  17301. u_sc_workprice.status,
  17302. u_sc_workprice.ifjd,
  17303. u_sc_workprice.lastflag,
  17304. u_sc_workprice.sctype,
  17305. u_sc_workprice.equipmentid,
  17306. u_sc_workprice.partname,
  17307. u_sc_workprice.eqworkhour,
  17308. u_sc_workprice.Workhour,
  17309. u_sc_workprice.beforehour,
  17310. u_sc_workprice.afterhour,
  17311. u_sc_workprice.workprice,
  17312. u_sc_workprice.worktype,
  17313. u_sc_workprice.eq_empnum,
  17314. u_sc_workprice.u_workprice,
  17315. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj
  17316. From u_sc_workprice,u_order_ml
  17317. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  17318. And u_order_ml.orderid = :arg_orderid
  17319. And u_order_ml.scid = :arg_scid
  17320. And u_sc_workprice.ifownpro = 0
  17321. And u_sc_workprice.lsxtype <> 0
  17322. And (u_sc_workprice.status = :ls_status_zj)
  17323. And u_sc_workprice.utcode = ''
  17324. And u_sc_workprice.wpcode = :wpcode;
  17325. If sqlca.SQLCode <> 0 Then
  17326. rslt = 0
  17327. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  17328. Goto ext
  17329. End If
  17330. Next
  17331. //加空子件工序
  17332. Insert Into u_orderrqwp(scid,
  17333. orderid,
  17334. mtrlid,
  17335. procode,
  17336. proname,
  17337. proorder,
  17338. proqty,
  17339. wrkgrpid,
  17340. lsxtype,
  17341. workprice,
  17342. status,
  17343. ifjd,
  17344. lastflag,
  17345. sctype,
  17346. equipmentid,
  17347. partname,
  17348. eqworkhour,
  17349. Workhour,
  17350. beforehour,
  17351. afterhour,
  17352. ori_workprice,
  17353. worktype,
  17354. eq_empnum,
  17355. u_workprice,
  17356. u_workqty)
  17357. Select u_order_ml.scid,
  17358. u_order_ml.orderid,
  17359. u_order_ml.mtrlid,
  17360. u_sc_workprice.procode,
  17361. u_sc_workprice.proname,
  17362. u_sc_workprice.proorder,
  17363. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  17364. u_sc_workprice.wrkgrpid,
  17365. u_sc_workprice.lsxtype,
  17366. u_sc_workprice.workprice,
  17367. u_sc_workprice.status,
  17368. u_sc_workprice.ifjd,
  17369. u_sc_workprice.lastflag,
  17370. u_sc_workprice.sctype,
  17371. u_sc_workprice.equipmentid,
  17372. u_sc_workprice.partname,
  17373. u_sc_workprice.eqworkhour,
  17374. u_sc_workprice.Workhour,
  17375. u_sc_workprice.beforehour,
  17376. u_sc_workprice.afterhour,
  17377. u_sc_workprice.workprice,
  17378. u_sc_workprice.worktype,
  17379. u_sc_workprice.eq_empnum,
  17380. u_sc_workprice.u_workprice,
  17381. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj
  17382. From u_sc_workprice,u_order_ml
  17383. Where u_sc_workprice.mtrlid = u_order_ml.mtrlid
  17384. And u_order_ml.orderid = :arg_orderid
  17385. And u_order_ml.scid = :arg_scid
  17386. And u_sc_workprice.ifownpro = 0
  17387. And u_sc_workprice.lsxtype <> 0
  17388. And (u_sc_workprice.status = '')
  17389. And u_sc_workprice.utcode = ''
  17390. And u_sc_workprice.wpcode = :wpcode;
  17391. If sqlca.SQLCode <> 0 Then
  17392. rslt = 0
  17393. arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText
  17394. Goto ext
  17395. End If
  17396. Update U_OrderRqwp
  17397. Set U_OrderRqwp.workPrice = u_sc_workprice.workPrice,
  17398. U_OrderRqwp.ori_workPrice = u_sc_workprice.workPrice
  17399. From U_OrderRqwp Inner JOIN
  17400. u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid And
  17401. U_OrderRqwp.orderid = u_Order_ml.OrderID Inner JOIN
  17402. u_sc_workprice ON u_Order_ml.mtrlid = u_sc_workprice.Mtrlid And
  17403. u_Order_ml.status_mode = u_sc_workprice.status And
  17404. U_OrderRqwp.Proname = u_sc_workprice.Proname And
  17405. u_Order_ml.wpcode = u_sc_workprice.wpcode
  17406. Where U_OrderRqwp.scid = :arg_scid
  17407. And u_orderrqwp.orderid = :arg_orderid;
  17408. If sqlca.SQLCode <> 0 Then
  17409. rslt = 0
  17410. arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText
  17411. Goto ext
  17412. End If
  17413. End If
  17414. End If
  17415. //如果按组号合并,则不再执行公式
  17416. If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 And cnt_ut = 0 Then
  17417. ds_orderrqwp.Retrieve(arg_scid,arg_orderid,wpcode)
  17418. For ll_i = 1 To ds_orderrqwp.RowCount()
  17419. ls_pricestr = ds_orderrqwp.Object.u_sc_workprice_pricestr[ll_i]
  17420. ll_mtrlid = ds_orderrqwp.Object.u_orderrqwp_mtrlid[ll_i]
  17421. ls_procode = ds_orderrqwp.Object.u_orderrqwp_procode[ll_i]
  17422. ls_worktype = ds_orderrqwp.Object.u_orderrqwp_worktype[ll_i]
  17423. ld_hourpay = ds_orderrqwp.Object.hourpay[ll_i]
  17424. ld_proqty = ds_orderrqwp.Object.u_orderrqwp_proqty[ll_i]
  17425. ld_Workhour = ds_orderrqwp.Object.u_orderrqwp_workhour[ll_i]
  17426. ld_beforehour = ds_orderrqwp.Object.u_orderrqwp_beforehour[ll_i]
  17427. ld_afterhour = ds_orderrqwp.Object.u_orderrqwp_afterhour[ll_i]
  17428. ld_eq_empnum = ds_orderrqwp.Object.u_orderrqwp_eq_empnum[ll_i]
  17429. ld_eqworkhour = ds_orderrqwp.Object.u_orderrqwp_eqworkhour[ll_i]
  17430. ls_workqtystr = ds_orderrqwp.Object.u_sc_workprice_workqtystr[ll_i]
  17431. ld_workqty_ori = ds_orderrqwp.Object.u_sc_workprice_workqty[ll_i]
  17432. ld_workprice_str = ds_orderrqwp.Object.u_orderrqwp_workprice[ll_i]
  17433. ld_u_workqty_str = ds_orderrqwp.Object.u_orderrqwp_u_workqty[ll_i]
  17434. ld_u_workprice_str = ds_orderrqwp.Object.u_orderrqwp_u_workprice[ll_i]
  17435. ls_u_workqtystr = ds_orderrqwp.Object.u_sc_workprice_u_workqtystr[ll_i]
  17436. ls_u_pricestr = ds_orderrqwp.Object.u_sc_workprice_u_pricestr[ll_i]
  17437. ld_workqty_str = ld_proqty
  17438. If ld_workqty_ori = 0 Then ld_workqty_ori = 1
  17439. ls_pricestr_ori = ''
  17440. ls_pricestr_value = ''
  17441. ls_workqtystr_ori = ''
  17442. ls_workqtystr_value = ''
  17443. //1.数量公式
  17444. If Trim(ls_workqtystr) <> '' Then
  17445. ls_workqtystr_ori = ls_workqtystr
  17446. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str)
  17447. ld_proqty = ld_workqty_str
  17448. End If
  17449. //2.单价公式
  17450. If Trim(ls_pricestr) <> '' Then
  17451. ls_pricestr_ori = ls_pricestr
  17452. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_pricestr,0,ls_pricestr_value,ld_workprice_str)
  17453. Else
  17454. If li_if_hourpay = 2 Then
  17455. If ld_proqty > ld_splitrate And ld_splitrate <> 0 Then
  17456. ld_workprice_str = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay
  17457. Else
  17458. ld_workprice_str = (ld_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_proqty * ld_hourpay
  17459. End If
  17460. Else
  17461. Goto _u_workqty
  17462. End If
  17463. End If
  17464. //3.折算数量
  17465. _u_workqty:
  17466. If Trim(ls_u_workqtystr) <> '' Then
  17467. ls_u_workqtystr_ori = ls_u_workqtystr
  17468. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str)
  17469. End If
  17470. //4.折算单价
  17471. If Trim(ls_u_pricestr) <> '' Then
  17472. ls_u_pricestr_ori = ls_u_pricestr
  17473. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str)
  17474. End If
  17475. Update u_orderrqwp
  17476. Set workprice = :ld_workprice_str,
  17477. ori_workprice = :ld_workprice_str,
  17478. pricestr = :ls_pricestr_ori,
  17479. pricestr_value = :ls_pricestr_value,
  17480. proqty = :ld_workqty_str,
  17481. workqtystr = :ls_workqtystr_ori,
  17482. workqtystr_value = :ls_workqtystr_value,
  17483. u_workqty = :ld_u_workqty_str,
  17484. u_workqtystr = :ls_u_workqtystr_ori,
  17485. u_workqtystr_value = :ls_u_workqtystr_value,
  17486. u_workprice = :ld_u_workprice_str,
  17487. u_pricestr = :ls_u_pricestr_ori,
  17488. u_pricestr_value = :ls_u_pricestr_value
  17489. Where scid = :arg_scid
  17490. And orderid = :arg_orderid
  17491. And mtrlid = :ll_mtrlid
  17492. And procode = :ls_procode;
  17493. If sqlca.SQLCode <> 0 Then
  17494. rslt = 0
  17495. arg_msg = '按单价公式更新工序单价失败,'+sqlca.SQLErrText
  17496. Goto ext
  17497. End If
  17498. Next
  17499. End If
  17500. Else
  17501. it_mx_bomwp = 0
  17502. deep = 0
  17503. If uof_protype_workprice(mtrlid,pfcode,wpcode,orderqty,arg_msg) = 0 Then
  17504. rslt = 0
  17505. arg_msg = '计算下级虚拟部件工价表失败,'+arg_msg
  17506. Goto ext
  17507. End If
  17508. Delete From u_orderrqwp
  17509. Where orderid = :arg_orderid
  17510. And scid = :arg_scid;
  17511. If sqlca.SQLCode <> 0 Then
  17512. rslt = 0
  17513. arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  17514. Goto ext
  17515. End If
  17516. If li_protype = 1 Then
  17517. For ll_i = 1 To it_mx_bomwp
  17518. Update u_orderrqwp
  17519. Set proqty = proqty + :ins_s_wp[ll_i].workqty,
  17520. u_workqty = u_workqty + :ins_s_wp[ll_i].u_workqty,
  17521. pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End
  17522. Where scid = :arg_scid
  17523. And orderid = :arg_orderid
  17524. And mtrlid = :mtrlid
  17525. And procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode;
  17526. If sqlca.SQLCode = 0 Then
  17527. If sqlca.SQLNRows = 0 Then
  17528. Insert Into u_orderrqwp(scid,
  17529. orderid,
  17530. mtrlid,
  17531. procode,
  17532. proname,
  17533. proorder,
  17534. proqty,
  17535. wrkgrpid,
  17536. lsxtype,
  17537. workprice,
  17538. status,
  17539. ifjd,
  17540. lastflag,
  17541. sctype,
  17542. equipmentid,
  17543. partname,
  17544. eqworkhour,
  17545. Workhour,
  17546. beforehour,
  17547. afterhour,
  17548. ori_workprice,
  17549. worktype,
  17550. eq_empnum,
  17551. ifgroup,
  17552. u_workqty,
  17553. u_workprice,
  17554. pricestr,
  17555. pricestr_value,
  17556. procode_ori,
  17557. pro_dscrp,
  17558. sonmtrlid)
  17559. Values (:arg_scid,
  17560. :arg_orderid,
  17561. :mtrlid,
  17562. :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode,
  17563. :ins_s_wp[ll_i].proname,
  17564. :ins_s_wp[ll_i].proorder,
  17565. :ins_s_wp[ll_i].workqty,
  17566. :ins_s_wp[ll_i].wrkgrpid,
  17567. :ins_s_wp[ll_i].lsxtype,
  17568. :ins_s_wp[ll_i].workprice,
  17569. :ins_s_wp[ll_i].status,
  17570. :ins_s_wp[ll_i].ifjd,
  17571. :ins_s_wp[ll_i].lastflag,
  17572. :ins_s_wp[ll_i].sctype,
  17573. :ins_s_wp[ll_i].equipmentid,
  17574. :ins_s_wp[ll_i].partname,
  17575. :ins_s_wp[ll_i].eqworkhour,
  17576. :ins_s_wp[ll_i].Workhour,
  17577. :ins_s_wp[ll_i].beforehour,
  17578. :ins_s_wp[ll_i].afterhour,
  17579. :ins_s_wp[ll_i].workprice,
  17580. :ins_s_wp[ll_i].worktype,
  17581. :ins_s_wp[ll_i].eq_empnum,
  17582. :ins_s_wp[ll_i].ifgroup,
  17583. :ins_s_wp[ll_i].u_workqty,
  17584. :ins_s_wp[ll_i].u_workprice,
  17585. :ins_s_wp[ll_i].pricestr,
  17586. :ins_s_wp[ll_i].pricestr_value,
  17587. :ins_s_wp[ll_i].procode,
  17588. :ins_s_wp[ll_i].pro_dscrp,
  17589. :ins_s_wp[ll_i].sonmtrlid);
  17590. If sqlca.SQLCode <> 0 Then
  17591. rslt = 0
  17592. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  17593. Goto ext
  17594. End If
  17595. End If
  17596. Else
  17597. If sqlca.SQLCode <> 0 Then
  17598. rslt = 0
  17599. arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText
  17600. Goto ext
  17601. End If
  17602. End If
  17603. Next
  17604. // ElseIf li_protype = 2 Then
  17605. //
  17606. // s_workpricetable s_wp_union[]
  17607. // Long ll_wp_union
  17608. //
  17609. // For ll_i = 1 To it_mx_bomwp
  17610. // For ll_j = 1 To ll_wp_union
  17611. // If ins_s_wp[ll_i].procode = s_wp_union[ll_j].procode Then
  17612. // s_wp_union[ll_j].workprice_bom = s_wp_union[ll_j].workprice_bom + ins_s_wp[ll_i].workprice_bom
  17613. //
  17614. // If lena(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp) > 255 Then
  17615. // s_wp_union[ll_j].pro_dscrp = leftA(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp,255)
  17616. // Else
  17617. // s_wp_union[ll_j].pro_dscrp = s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp
  17618. // End If
  17619. // Goto _next_wp
  17620. // End If
  17621. // Next
  17622. //
  17623. // ll_wp_union++
  17624. //
  17625. // s_wp_union[ll_wp_union].procode = ins_s_wp[ll_i].procode
  17626. // s_wp_union[ll_wp_union].proname = ins_s_wp[ll_i].proname
  17627. // s_wp_union[ll_wp_union].proorder = ins_s_wp[ll_i].proorder
  17628. // s_wp_union[ll_wp_union].workqty = ins_s_wp[ll_i].workqty
  17629. // s_wp_union[ll_wp_union].wrkgrpid = ins_s_wp[ll_i].wrkgrpid
  17630. // s_wp_union[ll_wp_union].lsxtype = ins_s_wp[ll_i].lsxtype
  17631. // s_wp_union[ll_wp_union].workprice = ins_s_wp[ll_i].workprice
  17632. // s_wp_union[ll_wp_union].status = ins_s_wp[ll_i].status
  17633. // s_wp_union[ll_wp_union].ifjd = ins_s_wp[ll_i].ifjd
  17634. // s_wp_union[ll_wp_union].lastflag = ins_s_wp[ll_i].lastflag
  17635. // s_wp_union[ll_wp_union].sctype = ins_s_wp[ll_i].sctype
  17636. // s_wp_union[ll_wp_union].equipmentid = ins_s_wp[ll_i].equipmentid
  17637. // s_wp_union[ll_wp_union].partname = ins_s_wp[ll_i].partname
  17638. // s_wp_union[ll_wp_union].eqworkhour = ins_s_wp[ll_i].eqworkhour
  17639. // s_wp_union[ll_wp_union].Workhour = ins_s_wp[ll_i].Workhour
  17640. // s_wp_union[ll_wp_union].beforehour = ins_s_wp[ll_i].beforehour
  17641. // s_wp_union[ll_wp_union].afterhour = ins_s_wp[ll_i].afterhour
  17642. // s_wp_union[ll_wp_union].workprice = ins_s_wp[ll_i].workprice
  17643. // s_wp_union[ll_wp_union].worktype = ins_s_wp[ll_i].worktype
  17644. // s_wp_union[ll_wp_union].eq_empnum = ins_s_wp[ll_i].eq_empnum
  17645. // s_wp_union[ll_wp_union].ifgroup = ins_s_wp[ll_i].ifgroup
  17646. // s_wp_union[ll_wp_union].u_workqty = ins_s_wp[ll_i].u_workqty
  17647. // s_wp_union[ll_wp_union].u_workprice = ins_s_wp[ll_i].u_workprice
  17648. // s_wp_union[ll_wp_union].workprice_bom = ins_s_wp[ll_i].workprice_bom
  17649. // s_wp_union[ll_wp_union].pricestr = ''
  17650. // s_wp_union[ll_wp_union].pricestr_value = ''
  17651. // s_wp_union[ll_wp_union].pro_dscrp = ins_s_wp[ll_i].pro_dscrp
  17652. //
  17653. //
  17654. // _next_wp:
  17655. // Next
  17656. //
  17657. // For ll_i = 1 To ll_wp_union
  17658. //
  17659. // Insert Into u_orderrqwp(scid,
  17660. // orderid,
  17661. // mtrlid,
  17662. // procode,
  17663. // proname,
  17664. // proorder,
  17665. // proqty,
  17666. // wrkgrpid,
  17667. // lsxtype,
  17668. // workprice,
  17669. // status,
  17670. // ifjd,
  17671. // lastflag,
  17672. // sctype,
  17673. // equipmentid,
  17674. // partname,
  17675. // eqworkhour,
  17676. // Workhour,
  17677. // beforehour,
  17678. // afterhour,
  17679. // ori_workprice,
  17680. // worktype,
  17681. // eq_empnum,
  17682. // ifgroup,
  17683. // u_workqty,
  17684. // u_workprice,
  17685. // pricestr,
  17686. // pricestr_value,
  17687. // procode_ori,
  17688. // pro_dscrp)
  17689. // Values ( :arg_scid,
  17690. // :arg_orderid,
  17691. // :mtrlid,
  17692. // :s_wp_union[ll_i].procode,
  17693. // :s_wp_union[ll_i].proname,
  17694. // :s_wp_union[ll_i].proorder,
  17695. // :orderqty,
  17696. // :s_wp_union[ll_i].wrkgrpid,
  17697. // :s_wp_union[ll_i].lsxtype,
  17698. // :s_wp_union[ll_i].workprice_bom,
  17699. // :s_wp_union[ll_i].status,
  17700. // :s_wp_union[ll_i].ifjd,
  17701. // :s_wp_union[ll_i].lastflag,
  17702. // :s_wp_union[ll_i].sctype,
  17703. // :s_wp_union[ll_i].equipmentid,
  17704. // :s_wp_union[ll_i].partname,
  17705. // :s_wp_union[ll_i].eqworkhour,
  17706. // :s_wp_union[ll_i].Workhour,
  17707. // :s_wp_union[ll_i].beforehour,
  17708. // :s_wp_union[ll_i].afterhour,
  17709. // :s_wp_union[ll_i].workprice_bom,
  17710. // :s_wp_union[ll_i].worktype,
  17711. // :s_wp_union[ll_i].eq_empnum,
  17712. // :s_wp_union[ll_i].ifgroup,
  17713. // :orderqty,
  17714. // :s_wp_union[ll_i].workprice_bom,
  17715. // :s_wp_union[ll_i].pricestr,
  17716. // :s_wp_union[ll_i].pricestr_value,
  17717. // :s_wp_union[ll_i].procode,
  17718. // :s_wp_union[ll_i].pro_dscrp);
  17719. // If sqlca.SQLCode <> 0 Then
  17720. // rslt = 0
  17721. // arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  17722. // Goto ext
  17723. // End If
  17724. // Next
  17725. End If
  17726. End If
  17727. Update u_order_ml
  17728. Set u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '')
  17729. From u_Order_ml LEFT Outer JOIN
  17730. uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid And
  17731. u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID
  17732. Where u_Order_ml.scid = :arg_scid
  17733. And u_order_ml.orderid = :arg_orderid;
  17734. If sqlca.SQLCode <> 0 Then
  17735. rslt = 0
  17736. arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText
  17737. Goto ext
  17738. End If
  17739. ext:
  17740. If rslt = 0 Then
  17741. Rollback;
  17742. p_reset()
  17743. ElseIf arg_ifcommit And rslt = 1 Then
  17744. Commit;
  17745. End If
  17746. Destroy ds_pricestr
  17747. Destroy ds_orderrqwp
  17748. Destroy ds_parm
  17749. Return rslt
  17750. end function
  17751. public function integer uof_order_add_pro (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, boolean arg_ifall, boolean arg_ifupdateprice, integer arg_ifproaudit);Int rslt = 1
  17752. Long cnt
  17753. String ls_partname,ls_mtrlcode
  17754. Long li_ordertype_mtrldef
  17755. Long ll_statusflag,li_ifpackpro
  17756. Decimal lde_price
  17757. s_mtrlcfg_expr s_pz[],s_empty[]
  17758. Long ll_i,ll_j
  17759. String ls_status_zj
  17760. Decimal ld_qty_zj
  17761. String ls_utcode[]
  17762. Long cnt_ut = 0
  17763. Decimal ld_workprice,ld_workqty,ld_workprice_sum
  17764. String ls_rpcode
  17765. String ls_procode,ls_proname
  17766. Long ll_proorder,ll_wrkgrpid,ll_lsxtype,ll_ifjd,ll_lastflag
  17767. Int li_sctype
  17768. Long ll_equipmentid
  17769. Decimal ld_eqworkhour,ld_Workhour,ld_beforehour,ld_afterhour,ld_eq_empnum
  17770. String ls_worktype
  17771. Int li_if_hourpay
  17772. Decimal ld_eoq,ld_splitrate
  17773. Decimal ld_hourpay
  17774. String ls_mtrlsectype,ls_usermtrlmode,ls_zxmtrlmode,ls_mtrlmode
  17775. Int li_ifgroup
  17776. Decimal ld_u_workqty,ld_u_workprice,ld_u_workprice_sum
  17777. Int li_protype
  17778. String ls_replacestr
  17779. Long ll_mtrlid
  17780. String ls_pricestr,s_rtn
  17781. Decimal ld_workprice_str,ld_workqty_str,ld_workqty_ori
  17782. Decimal ld_proqty,ld_hourpay_cmp
  17783. String ls_pricestr_ori,ls_pricestr_value
  17784. String ls_parmname
  17785. Decimal ld_parmvalue
  17786. String ls_workqtystr_ori,ls_workqtystr_value,ls_workqtystr
  17787. Decimal ld_u_workqty_str,ld_u_workprice_str
  17788. String ls_u_workqtystr,ls_u_workqtystr_value,ls_u_pricestr,ls_u_pricestr_value
  17789. String ls_u_workqtystr_ori,ls_u_pricestr_ori
  17790. datastore ds_orderrqwp
  17791. ds_orderrqwp = Create datastore
  17792. ds_orderrqwp.DataObject = 'ds_orderrqwp_workprice'
  17793. ds_orderrqwp.SetTransObject(sqlca)
  17794. datastore ds_pricestr
  17795. ds_pricestr = Create datastore
  17796. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  17797. ds_pricestr.SetTransObject(sqlca)
  17798. datastore ds_replacestr
  17799. ds_replacestr = Create datastore
  17800. ds_replacestr.DataObject = 'ds_orderrqwp_replacestr'
  17801. ds_replacestr.SetTransObject(sqlca)
  17802. datastore ds_parm
  17803. ds_parm = Create datastore
  17804. ds_parm.DataObject = 'ds_workprice_parm_def'
  17805. ds_parm.SetTransObject(sqlca)
  17806. ds_parm.Retrieve()
  17807. If uo_option_def_workprice = -1000 Then
  17808. rslt = 0
  17809. arg_msg = '选项:[012]生产计划审核时需要检查是否已定义工价表,读取初始默认值失败,操作取消!'
  17810. Goto ext
  17811. End If
  17812. If uo_option_orderrqwp_union = -1000 Then
  17813. rslt = 0
  17814. arg_msg = '选项:[148]生产计划工序明细按工价表配置及组号合并,读取初始默认值失败,操作取消!'
  17815. Goto ext
  17816. End If
  17817. If uo_option_orderrqwp_auditgj = -1000 Then
  17818. rslt = 0
  17819. arg_msg = '选项:[398]工价表如果未进行工价审,指令单工序明细生成时对应工序工价为0,读取初始默认值失败,操作取消!'
  17820. Goto ext
  17821. End If
  17822. If arg_orderid = 0 Then
  17823. rslt = 0
  17824. arg_msg = "没有审核对象"
  17825. Goto ext
  17826. End If
  17827. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  17828. rslt = 0
  17829. Goto ext
  17830. End If
  17831. If ordertype = 3 Or ifwforder = 1 Then
  17832. rslt = 1
  17833. Goto ext
  17834. End If
  17835. Select ordertype,
  17836. statusflag,
  17837. ifpackpro,
  17838. if_hourpay,
  17839. eoq,
  17840. splitrate,
  17841. mtrlsectype,
  17842. zxmtrlmode,
  17843. usermtrlmode,
  17844. mtrlmode,
  17845. protype,
  17846. mtrlcode
  17847. Into :li_ordertype_mtrldef,
  17848. :ll_statusflag,
  17849. :li_ifpackpro,
  17850. :li_if_hourpay,
  17851. :ld_eoq,
  17852. :ld_splitrate,
  17853. :ls_mtrlsectype,
  17854. :ls_zxmtrlmode,
  17855. :ls_usermtrlmode,
  17856. :ls_mtrlmode,
  17857. :li_protype,
  17858. :ls_mtrlcode
  17859. From u_mtrldef
  17860. Where mtrlid = :mtrlid;
  17861. If sqlca.SQLCode <> 0 Then
  17862. rslt = 0
  17863. arg_msg = '查询物料计划属性失败,'+sqlca.SQLErrText
  17864. Goto ext
  17865. End If
  17866. If (ordertype <> 4 And li_ordertype_mtrldef = 1) Then
  17867. rslt = 1
  17868. Goto ext
  17869. End If
  17870. If status <> 1 And status <> 4 And status <> 7 And status <> 5 And status <> 6 Then
  17871. rslt = 0
  17872. arg_msg = "计划只有在(已审核,完成)状态才可以执行重新生成工序,请核对"
  17873. Goto ext
  17874. End If
  17875. //IF uo_option_def_workprice = 0 THEN
  17876. // rslt = 1
  17877. // GOTO ext
  17878. //END IF
  17879. //====================================================================
  17880. // 处理前检查
  17881. //====================================================================
  17882. cnt = 0
  17883. Select COUNT(*)
  17884. Into :cnt
  17885. From (Select rpcode, SUM(ifdftpg) AS ifdftpg
  17886. From u_sc_workprice
  17887. Where (Mtrlid = :mtrlid)
  17888. And (rpcode <> '')
  17889. And (u_sc_workprice.wpcode = :wpcode)
  17890. Group By rpcode
  17891. Having (SUM(ifdftpg) <> 1)) v_rpcode;
  17892. If sqlca.SQLCode <> 0 Then
  17893. rslt = 0
  17894. arg_msg = '查询产品:'+ls_mtrlcode+' 替代工序默认派工属性是否设置正确失败'
  17895. Goto ext
  17896. End If
  17897. If cnt > 0 Then
  17898. rslt = 0
  17899. arg_msg = '产品:'+ls_mtrlcode+' 替代工序默认派工属性必须设置且必须唯一'
  17900. Goto ext
  17901. End If
  17902. If li_protype = 0 Then
  17903. If li_ifpackpro = 0 Then
  17904. If ll_statusflag <> 2 Then
  17905. If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then
  17906. cnt = 0
  17907. Select count(*)
  17908. Into :cnt
  17909. From u_sc_workprice
  17910. Where u_sc_workprice.mtrlid = :mtrlid
  17911. And u_sc_workprice.wpcode = :wpcode
  17912. And u_sc_workprice.ifownpro = 0
  17913. And u_sc_workprice.lsxtype <> 0;
  17914. If sqlca.SQLCode <> 0 Then
  17915. arg_msg = '查询产品工价表失败,'+sqlca.SQLErrText
  17916. rslt = 0
  17917. Goto ext
  17918. End If
  17919. If cnt = 0 Then
  17920. arg_msg = '产品对应车间的工价表未建立,请先建立工价表'
  17921. rslt = 0
  17922. Goto ext
  17923. End If
  17924. End If
  17925. If uo_option_def_workprice = 2 Then
  17926. cnt = 0
  17927. Select count(*)
  17928. Into :cnt
  17929. From u_sc_workprice
  17930. Where u_sc_workprice.mtrlid = :mtrlid
  17931. And u_sc_workprice.wpcode = :wpcode
  17932. And u_sc_workprice.auditflag = 0
  17933. And u_sc_workprice.ifownpro = 0
  17934. And u_sc_workprice.lsxtype <> 0;
  17935. If sqlca.SQLCode <> 0 Then
  17936. arg_msg = '查询产品工价表是否有未审核失败,'+sqlca.SQLErrText
  17937. rslt = 0
  17938. Goto ext
  17939. End If
  17940. If cnt > 0 Then
  17941. arg_msg = '产品对应车间的工价表存在未审核工价,请检查'
  17942. rslt = 0
  17943. Goto ext
  17944. End If
  17945. End If
  17946. Else
  17947. // f_checkpz(status_mode,s_pz[])
  17948. f_checkpz_general(mtrlid,status_mode,s_pz[])
  17949. For ll_i = 1 To UpperBound(s_pz)
  17950. ls_status_zj = s_pz[ll_i].cfgname
  17951. If uo_option_def_workprice = 1 Or uo_option_def_workprice = 2 Then
  17952. cnt = 0
  17953. Select count(*)
  17954. Into :cnt
  17955. From u_sc_workprice
  17956. Where u_sc_workprice.mtrlid = :mtrlid
  17957. And u_sc_workprice.wpcode = :wpcode
  17958. And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '')
  17959. And u_sc_workprice.ifownpro = 0
  17960. And u_sc_workprice.lsxtype <> 0;
  17961. If sqlca.SQLCode <> 0 Then
  17962. arg_msg = '查询产品子件:'+ls_status_zj+'工价表失败,'+sqlca.SQLErrText
  17963. rslt = 0
  17964. Goto ext
  17965. End If
  17966. If cnt = 0 Then
  17967. arg_msg = '产品对应车间的子件:'+ls_status_zj+'工价表未建立,请先建立工价表'
  17968. rslt = 0
  17969. Goto ext
  17970. End If
  17971. End If
  17972. If uo_option_def_workprice = 2 Then
  17973. cnt = 0
  17974. Select count(*)
  17975. Into :cnt
  17976. From u_sc_workprice
  17977. Where u_sc_workprice.mtrlid = :mtrlid
  17978. And u_sc_workprice.wpcode = :wpcode
  17979. And (u_sc_workprice.status = :ls_status_zj Or u_sc_workprice.status = '')
  17980. And u_sc_workprice.auditflag = 0
  17981. And u_sc_workprice.ifownpro = 0
  17982. And u_sc_workprice.lsxtype <> 0;
  17983. If sqlca.SQLCode <> 0 Then
  17984. arg_msg = '查询产品工价表子件:'+ls_status_zj+'是否有未审核失败,'+sqlca.SQLErrText
  17985. rslt = 0
  17986. Goto ext
  17987. End If
  17988. If cnt > 0 Then
  17989. arg_msg = '产品对应车间的工价表子件:'+ls_status_zj+'存在未审核工价,请检查'
  17990. rslt = 0
  17991. Goto ext
  17992. End If
  17993. End If
  17994. Next
  17995. End If
  17996. End If
  17997. End If
  17998. //====================================================================
  17999. // 删除旧工序
  18000. //====================================================================
  18001. If arg_ifall Then // 全部重新生成
  18002. cnt = 0
  18003. Select count(*) Into :cnt
  18004. From u_orderrqwp
  18005. Where (finishqty > 0 Or taskqty > 0 )
  18006. And orderid = :arg_orderid
  18007. And scid = :arg_scid;
  18008. If sqlca.SQLCode <> 0 Then
  18009. arg_msg = '查询计划工序明细是否有完成数量失败,'+sqlca.SQLErrText
  18010. rslt = 0
  18011. Goto ext
  18012. End If
  18013. If cnt > 0 Then
  18014. arg_msg = '计划工序明细已有完成数量或已派工数,不能生成计划工序明细'
  18015. rslt = 0
  18016. Goto ext
  18017. End If
  18018. Select count(*) Into :cnt
  18019. From v_order_procode
  18020. Where scid = :arg_scid
  18021. And orderid = :arg_orderid;
  18022. If sqlca.SQLCode <> 0 Then
  18023. arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText
  18024. rslt = 0
  18025. Goto ext
  18026. End If
  18027. If cnt > 0 Then
  18028. arg_msg = '计划工序明细已开计件单,不能生成计划工序明细'
  18029. rslt = 0
  18030. Goto ext
  18031. End If
  18032. Select count(*) Into :cnt
  18033. From u_sc_task
  18034. Where scid = :arg_scid
  18035. And orderid = :arg_orderid;
  18036. If sqlca.SQLCode <> 0 Then
  18037. arg_msg = '查询计划工序明细是否已开工序派工单失败,'+sqlca.SQLErrText
  18038. rslt = 0
  18039. Goto ext
  18040. End If
  18041. If cnt > 0 Then
  18042. arg_msg = '计划工序明细开工序派工单,不能生成计划工序明细'
  18043. rslt = 0
  18044. Goto ext
  18045. End If
  18046. Delete From u_orderrqwp
  18047. Where orderid = :arg_orderid
  18048. And scid = :arg_scid
  18049. And finishqty = 0
  18050. And taskqty = 0;
  18051. If sqlca.SQLCode <> 0 Then
  18052. rslt = 0
  18053. arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  18054. Goto ext
  18055. End If
  18056. Else // 部分重新生成
  18057. If arg_ifupdateprice Then
  18058. Select count(0) Into :cnt
  18059. From v_order_procode
  18060. Where scid = :arg_scid
  18061. And orderid = :arg_orderid;
  18062. If sqlca.SQLCode <> 0 Then
  18063. arg_msg = '查询计划工序明细是否已开计件单失败,'+sqlca.SQLErrText
  18064. rslt = 0
  18065. Goto ext
  18066. End If
  18067. If cnt > 0 Then
  18068. arg_msg = '计划工序明细已开计件单,不能更新工价'
  18069. rslt = 0
  18070. Goto ext
  18071. End If
  18072. End If
  18073. Delete From u_sc_task
  18074. From U_OrderRqwp Inner JOIN
  18075. u_sc_task ON U_OrderRqwp.scid = u_sc_task.scid And U_OrderRqwp.orderid = u_sc_task.orderid And U_OrderRqwp.Procode = u_sc_task.procode And
  18076. U_OrderRqwp.Mtrlid = u_sc_task.mtrlid
  18077. Where (U_OrderRqwp.finishqty = 0)
  18078. And (U_OrderRqwp.taskqty = 0)
  18079. And (u_sc_task.scid = :arg_scid)
  18080. And (u_sc_task.orderid = :arg_orderid)
  18081. And (u_sc_task.flag = 0);
  18082. If sqlca.SQLCode <> 0 Then
  18083. rslt = 0
  18084. arg_msg = '删除未审工序派工单失败,' + sqlca.SQLErrText
  18085. Goto ext
  18086. End If
  18087. Delete From u_orderrqwp
  18088. Where orderid = :arg_orderid
  18089. And scid = :arg_scid
  18090. And finishqty = 0
  18091. And taskqty = 0
  18092. And Not Exists (Select 1 From u_sc_task
  18093. Where flag = 1
  18094. And scid = u_orderrqwp.scid
  18095. And orderid = u_orderrqwp.orderid
  18096. And mtrlid = u_orderrqwp.mtrlid
  18097. And Procode = u_orderrqwp.Procode);
  18098. If sqlca.SQLCode <> 0 Then
  18099. rslt = 0
  18100. arg_msg = "删除未派工工序进度失败"+"~n"+sqlca.SQLErrText
  18101. Goto ext
  18102. End If
  18103. End If
  18104. If li_protype = 0 Then
  18105. s_pz = s_empty
  18106. If ll_statusflag <> 2 Then //非组合配置产品
  18107. cnt = 0
  18108. Select count(*) Into :cnt
  18109. From u_sc_workprice
  18110. Where mtrlid = :mtrlid
  18111. And ltrim(rtrim(utcode)) <> ''
  18112. And u_sc_workprice.ifownpro = 0
  18113. And u_sc_workprice.lsxtype <> 0;
  18114. If sqlca.SQLCode <> 0 Then
  18115. rslt = 0
  18116. arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText
  18117. Goto ext
  18118. End If
  18119. If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 Or cnt = 0 Then
  18120. If Not arg_ifall And arg_ifupdateprice Then
  18121. Update U_OrderRqwp
  18122. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  18123. From u_sc_workprice Inner JOIN
  18124. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  18125. Where (u_sc_workprice.ifownpro = 0)
  18126. And (u_sc_workprice.lsxtype <> 0)
  18127. And (u_sc_workprice.wpcode = :wpcode)
  18128. And (U_OrderRqwp.scid = :arg_scid)
  18129. And (u_orderrqwp.orderid = :arg_orderid);
  18130. If sqlca.SQLCode <> 0 Then
  18131. rslt = 0
  18132. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  18133. Goto ext
  18134. End If
  18135. End If
  18136. Insert Into u_orderrqwp(scid,
  18137. orderid,
  18138. mtrlid,
  18139. procode,
  18140. proname,
  18141. proorder,
  18142. proqty,
  18143. wrkgrpid,
  18144. lsxtype,
  18145. workprice,
  18146. status,
  18147. ifjd,
  18148. lastflag,
  18149. sctype,
  18150. equipmentid,
  18151. partname,
  18152. eqworkhour,
  18153. Workhour,
  18154. beforehour,
  18155. afterhour,
  18156. ori_workprice,
  18157. worktype,
  18158. eq_empnum,
  18159. ifgroup,
  18160. u_workqty,
  18161. u_workprice,
  18162. replacestr,
  18163. procode_ori,
  18164. rpcode,
  18165. auditflag_gj)
  18166. Select u_order_ml.scid,
  18167. u_order_ml.orderid,
  18168. u_order_ml.mtrlid,
  18169. u_sc_workprice.procode,
  18170. u_sc_workprice.proname,
  18171. u_sc_workprice.proorder,
  18172. u_sc_workprice.workqty * u_order_ml.orderqty,
  18173. u_sc_workprice.wrkgrpid,
  18174. u_sc_workprice.lsxtype,
  18175. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18176. u_sc_workprice.status,
  18177. u_sc_workprice.ifjd,
  18178. u_sc_workprice.lastflag,
  18179. u_sc_workprice.sctype,
  18180. u_sc_workprice.equipmentid,
  18181. u_sc_workprice.partname,
  18182. u_sc_workprice.eqworkhour,
  18183. u_sc_workprice.Workhour,
  18184. u_sc_workprice.beforehour,
  18185. u_sc_workprice.afterhour,
  18186. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18187. u_sc_workprice.worktype,
  18188. u_sc_workprice.eq_empnum,
  18189. u_sc_workprice.ifgroup,
  18190. u_sc_workprice.u_workqty * u_order_ml.orderqty,
  18191. u_sc_workprice.u_workprice,
  18192. u_sc_workprice.replacestr,
  18193. u_sc_workprice.procode,
  18194. u_sc_workprice.rpcode,
  18195. u_sc_workprice.auditflag_gj
  18196. From u_sc_workprice Inner JOIN
  18197. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  18198. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  18199. u_sc_workprice.procode = U_OrderPro.Procode
  18200. Where u_order_ml.orderid = :arg_orderid
  18201. And u_order_ml.scid = :arg_scid
  18202. And u_sc_workprice.ifownpro = 0
  18203. And u_sc_workprice.lsxtype <> 0
  18204. And u_sc_workprice.wpcode = :wpcode
  18205. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18206. And U_OrderPro.scid Is Null;
  18207. If sqlca.SQLCode <> 0 Then
  18208. rslt = 0
  18209. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  18210. Goto ext
  18211. End If
  18212. Else
  18213. cnt_ut = 1
  18214. Declare cur_ut2 Cursor For
  18215. Select distinct utcode
  18216. From u_sc_workprice
  18217. Where mtrlid = :mtrlid
  18218. And lTrim(rtrim(utcode)) <> ''
  18219. And u_sc_workprice.ifownpro = 0
  18220. And u_sc_workprice.lsxtype <> 0
  18221. And u_sc_workprice.wpcode = :wpcode;
  18222. Open cur_ut2;
  18223. Fetch cur_ut2 Into :ls_utcode[cnt_ut];
  18224. Do While sqlca.SQLCode = 0
  18225. cnt_ut++
  18226. Fetch cur_ut2 Into :ls_utcode[cnt_ut];
  18227. Loop
  18228. Close cur_ut2;
  18229. cnt_ut = cnt_ut - 1
  18230. For ll_i = 1 To cnt_ut
  18231. ld_workprice = 0
  18232. ld_workqty = 0
  18233. Select sum(workprice),sum(workqty),sum(u_workprice),sum(u_workqty)
  18234. Into :ld_workprice,:ld_workqty,:ld_u_workprice,:ld_u_workqty
  18235. From u_sc_workprice
  18236. Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i]
  18237. And mtrlid = :mtrlid
  18238. And u_sc_workprice.wpcode = :wpcode;
  18239. If sqlca.SQLCode <> 0 Then
  18240. rslt = 0
  18241. arg_msg = '查询组号:'+ls_utcode[ll_i]+' 合计工价,数量失败,'+sqlca.SQLErrText
  18242. Goto ext
  18243. End If
  18244. Select top 1 u_sc_workprice.procode,
  18245. u_sc_workprice.proname,
  18246. u_sc_workprice.proorder,
  18247. u_sc_workprice.wrkgrpid,
  18248. u_sc_workprice.lsxtype,
  18249. u_sc_workprice.ifjd,
  18250. u_sc_workprice.lastflag,
  18251. u_sc_workprice.sctype,
  18252. u_sc_workprice.equipmentid,
  18253. u_sc_workprice.partname,
  18254. u_sc_workprice.eqworkhour,
  18255. u_sc_workprice.Workhour,
  18256. u_sc_workprice.beforehour,
  18257. u_sc_workprice.afterhour,
  18258. u_sc_workprice.worktype,
  18259. u_sc_workprice.eq_empnum,
  18260. u_sc_workprice.ifgroup,
  18261. u_sc_workprice.replacestr,
  18262. u_sc_workprice.rpcode
  18263. Into :ls_procode,
  18264. :ls_proname,
  18265. :ll_proorder,
  18266. :ll_wrkgrpid,
  18267. :ll_lsxtype,
  18268. :ll_ifjd,
  18269. :ll_lastflag,
  18270. :li_sctype,
  18271. :ll_equipmentid,
  18272. :ls_partname,
  18273. :ld_eqworkhour,
  18274. :ld_Workhour,
  18275. :ld_beforehour,
  18276. :ld_afterhour,
  18277. :ls_worktype,
  18278. :ld_eq_empnum,
  18279. :li_ifgroup,
  18280. :ls_replacestr,
  18281. :ls_rpcode
  18282. From u_sc_workprice
  18283. Where mtrlid = :mtrlid
  18284. And utcode = :ls_utcode[ll_i]
  18285. And u_sc_workprice.wpcode = :wpcode
  18286. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18287. Order By lastflag Desc,u_sc_workprice.proorder Desc;
  18288. If sqlca.SQLCode <> 0 Then
  18289. rslt = 0
  18290. arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'末工序相关信息失败'+sqlca.SQLErrText
  18291. Goto ext
  18292. End If
  18293. ls_proname = '工序:(组:'+Trim(ls_utcode[ll_i])+')'
  18294. cnt = 0
  18295. Select COUNT(0) Into :cnt
  18296. From u_orderrqwp
  18297. Where scid = :arg_scid
  18298. And orderid = :arg_orderid
  18299. And mtrlid = :mtrlid
  18300. And Procode = :ls_procode;
  18301. If sqlca.SQLCode <> 0 Then
  18302. rslt = 0
  18303. arg_msg = '查询现有工序进度失败,' + sqlca.SQLErrText
  18304. Goto ext
  18305. End If
  18306. If cnt = 0 Then
  18307. Insert Into u_orderrqwp
  18308. (scid,
  18309. orderid,
  18310. mtrlid,
  18311. procode,
  18312. proname,
  18313. proorder,
  18314. proqty,
  18315. wrkgrpid,
  18316. lsxtype,
  18317. workprice,
  18318. status,
  18319. ifjd,
  18320. lastflag,
  18321. sctype,
  18322. equipmentid,
  18323. partname,
  18324. eqworkhour,
  18325. Workhour,
  18326. beforehour,
  18327. afterhour,
  18328. ori_workprice,
  18329. worktype,
  18330. eq_empnum,
  18331. ifgroup,
  18332. u_workprice,
  18333. u_workqty,
  18334. replacestr,
  18335. procode_ori,
  18336. rpcode)
  18337. Values (:arg_scid,
  18338. :arg_orderid,
  18339. :mtrlid,
  18340. :ls_procode,
  18341. :ls_proname,
  18342. :ll_proorder,
  18343. :orderqty,
  18344. :ll_wrkgrpid,
  18345. :ll_lsxtype,
  18346. :ld_workprice,
  18347. :status_mode,
  18348. :ll_ifjd,
  18349. :ll_lastflag,
  18350. :li_sctype,
  18351. :ll_equipmentid,
  18352. :ls_partname,
  18353. :ld_eqworkhour,
  18354. :ld_Workhour,
  18355. :ld_beforehour,
  18356. :ld_afterhour,
  18357. :ld_workprice_sum,
  18358. :ls_worktype,
  18359. :ld_eq_empnum,
  18360. :li_ifgroup,
  18361. :ld_u_workprice,
  18362. :ld_u_workqty,
  18363. :ls_replacestr,
  18364. :ls_procode,
  18365. :ls_rpcode);
  18366. If sqlca.SQLCode <> 0 Then
  18367. rslt = 0
  18368. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  18369. Goto ext
  18370. End If
  18371. Else
  18372. If arg_ifupdateprice Then
  18373. Update u_OrderRqwp Set workprice = :ld_workprice, ori_workprice = :ld_workprice_sum
  18374. Where scid = :arg_scid
  18375. And orderid = :arg_orderid
  18376. And mtrlid = :mtrlid
  18377. And Procode = :ls_procode;
  18378. If sqlca.SQLCode <> 0 Then
  18379. rslt = 0
  18380. arg_msg = '更新工序进度工价失败,' + sqlca.SQLErrText
  18381. Goto ext
  18382. End If
  18383. End If
  18384. End If
  18385. Next
  18386. //加空组号工序
  18387. If Not arg_ifall And arg_ifupdateprice Then
  18388. Update U_OrderRqwp
  18389. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  18390. From u_sc_workprice Inner JOIN
  18391. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  18392. Where U_OrderRqwp.orderid = :arg_orderid
  18393. And U_OrderRqwp.scid = :arg_scid
  18394. And u_sc_workprice.ifownpro = 0
  18395. And u_sc_workprice.lsxtype <> 0
  18396. And u_sc_workprice.utcode = ''
  18397. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18398. And u_sc_workprice.wpcode = :wpcode;
  18399. If sqlca.SQLCode <> 0 Then
  18400. rslt = 0
  18401. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  18402. Goto ext
  18403. End If
  18404. End If
  18405. Insert Into u_orderrqwp(scid,
  18406. orderid,
  18407. mtrlid,
  18408. procode,
  18409. proname,
  18410. proorder,
  18411. proqty,
  18412. wrkgrpid,
  18413. lsxtype,
  18414. workprice,
  18415. status,
  18416. ifjd,
  18417. lastflag,
  18418. sctype,
  18419. equipmentid,
  18420. partname,
  18421. eqworkhour,
  18422. Workhour,
  18423. beforehour,
  18424. afterhour,
  18425. ori_workprice,
  18426. worktype,
  18427. eq_empnum,
  18428. ifgroup,
  18429. u_workprice,
  18430. u_workqty,
  18431. replacestr,
  18432. procode_ori,
  18433. rpcode)
  18434. Select u_order_ml.scid,
  18435. u_order_ml.orderid,
  18436. u_order_ml.mtrlid,
  18437. u_sc_workprice.procode,
  18438. u_sc_workprice.proname,
  18439. u_sc_workprice.proorder,
  18440. u_sc_workprice.workqty * u_order_ml.orderqty,
  18441. u_sc_workprice.wrkgrpid,
  18442. u_sc_workprice.lsxtype,
  18443. u_sc_workprice.workprice,
  18444. u_sc_workprice.status,
  18445. u_sc_workprice.ifjd,
  18446. u_sc_workprice.lastflag,
  18447. u_sc_workprice.sctype,
  18448. u_sc_workprice.equipmentid,
  18449. u_sc_workprice.partname,
  18450. u_sc_workprice.eqworkhour,
  18451. u_sc_workprice.Workhour,
  18452. u_sc_workprice.beforehour,
  18453. u_sc_workprice.afterhour,
  18454. u_sc_workprice.workprice,
  18455. u_sc_workprice.worktype,
  18456. u_sc_workprice.eq_empnum,
  18457. u_sc_workprice.ifgroup,
  18458. u_sc_workprice.u_workprice,
  18459. u_sc_workprice.u_workqty * u_order_ml.orderqty,
  18460. u_sc_workprice.replacestr,
  18461. u_sc_workprice.procode,
  18462. u_sc_workprice.rpcode
  18463. From u_sc_workprice Inner JOIN
  18464. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  18465. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  18466. u_sc_workprice.procode = U_OrderPro.Procode
  18467. Where u_order_ml.orderid = :arg_orderid
  18468. And u_order_ml.scid = :arg_scid
  18469. And u_sc_workprice.ifownpro = 0
  18470. And u_sc_workprice.lsxtype <> 0
  18471. And u_sc_workprice.utcode = ''
  18472. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18473. And u_sc_workprice.wpcode = :wpcode
  18474. And U_OrderPro.scid Is Null;
  18475. If sqlca.SQLCode <> 0 Then
  18476. rslt = 0
  18477. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  18478. Goto ext
  18479. End If
  18480. End If
  18481. Else
  18482. //组合配置产品
  18483. cnt = 0
  18484. Select count(*) Into :cnt
  18485. From u_sc_workprice
  18486. Where mtrlid = :mtrlid
  18487. And ltrim(rtrim(utcode)) <> ''
  18488. And u_sc_workprice.ifownpro = 0
  18489. And u_sc_workprice.lsxtype <> 0;
  18490. If sqlca.SQLCode <> 0 Then
  18491. rslt = 0
  18492. arg_msg = '查询产品价格表是否有组号失败'+sqlca.SQLErrText
  18493. Goto ext
  18494. End If
  18495. If uo_option_orderrqwp_union = 0 Or cnt = 0 Then
  18496. // f_checkpz(status_mode,s_pz[])
  18497. f_checkpz_general(mtrlid,status_mode,s_pz[])
  18498. For ll_i = 1 To UpperBound(s_pz)
  18499. ls_status_zj = s_pz[ll_i].cfgname
  18500. ld_qty_zj = Dec(s_pz[ll_i].qty)
  18501. If Not arg_ifall And arg_ifupdateprice Then
  18502. Update U_OrderRqwp
  18503. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  18504. From u_sc_workprice Inner JOIN
  18505. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  18506. Where U_OrderRqwp.orderid = :arg_orderid
  18507. And U_OrderRqwp.scid = :arg_scid
  18508. And u_sc_workprice.ifownpro = 0
  18509. And u_sc_workprice.lsxtype <> 0
  18510. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18511. And (u_sc_workprice.status = :ls_status_zj)
  18512. And u_sc_workprice.wpcode = :wpcode;
  18513. If sqlca.SQLCode <> 0 Then
  18514. rslt = 0
  18515. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  18516. Goto ext
  18517. End If
  18518. End If
  18519. Insert Into u_orderrqwp(scid,
  18520. orderid,
  18521. mtrlid,
  18522. procode,
  18523. proname,
  18524. proorder,
  18525. proqty,
  18526. wrkgrpid,
  18527. lsxtype,
  18528. workprice,
  18529. status,
  18530. ifjd,
  18531. lastflag,
  18532. sctype,
  18533. equipmentid,
  18534. partname,
  18535. eqworkhour,
  18536. Workhour,
  18537. beforehour,
  18538. afterhour,
  18539. ori_workprice,
  18540. worktype,
  18541. eq_empnum,
  18542. ifgroup,
  18543. u_workprice,
  18544. u_workqty,
  18545. replacestr,
  18546. procode_ori,
  18547. rpcode,
  18548. auditflag_gj)
  18549. Select u_order_ml.scid,
  18550. u_order_ml.orderid,
  18551. u_order_ml.mtrlid,
  18552. u_sc_workprice.procode,
  18553. u_sc_workprice.proname,
  18554. u_sc_workprice.proorder,
  18555. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  18556. u_sc_workprice.wrkgrpid,
  18557. u_sc_workprice.lsxtype,
  18558. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18559. u_sc_workprice.status,
  18560. u_sc_workprice.ifjd,
  18561. u_sc_workprice.lastflag,
  18562. u_sc_workprice.sctype,
  18563. u_sc_workprice.equipmentid,
  18564. u_sc_workprice.partname,
  18565. u_sc_workprice.eqworkhour,
  18566. u_sc_workprice.Workhour,
  18567. u_sc_workprice.beforehour,
  18568. u_sc_workprice.afterhour,
  18569. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18570. u_sc_workprice.worktype,
  18571. u_sc_workprice.eq_empnum,
  18572. u_sc_workprice.ifgroup,
  18573. u_sc_workprice.u_workprice,
  18574. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj,
  18575. u_sc_workprice.replacestr,
  18576. u_sc_workprice.procode,
  18577. u_sc_workprice.rpcode,
  18578. u_sc_workprice.auditflag_gj
  18579. From u_sc_workprice Inner JOIN
  18580. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  18581. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  18582. u_sc_workprice.procode = U_OrderPro.Procode
  18583. Where u_order_ml.orderid = :arg_orderid
  18584. And u_order_ml.scid = :arg_scid
  18585. And u_sc_workprice.ifownpro = 0
  18586. And u_sc_workprice.lsxtype <> 0
  18587. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18588. And (u_sc_workprice.status = :ls_status_zj)
  18589. And u_sc_workprice.wpcode = :wpcode
  18590. And U_OrderPro.scid Is Null;
  18591. If sqlca.SQLCode <> 0 Then
  18592. rslt = 0
  18593. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  18594. Goto ext
  18595. End If
  18596. Next
  18597. //加空子件工序(公共)
  18598. If Not arg_ifall And arg_ifupdateprice Then
  18599. Update U_OrderRqwp
  18600. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  18601. From u_sc_workprice Inner JOIN
  18602. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  18603. Where U_OrderRqwp.orderid = :arg_orderid
  18604. And U_OrderRqwp.scid = :arg_scid
  18605. And u_sc_workprice.ifownpro = 0
  18606. And u_sc_workprice.lsxtype <> 0
  18607. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18608. And (u_sc_workprice.status = '')
  18609. And u_sc_workprice.wpcode = :wpcode;
  18610. If sqlca.SQLCode <> 0 Then
  18611. rslt = 0
  18612. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  18613. Goto ext
  18614. End If
  18615. End If
  18616. Insert Into u_orderrqwp(scid,
  18617. orderid,
  18618. mtrlid,
  18619. procode,
  18620. proname,
  18621. proorder,
  18622. proqty,
  18623. wrkgrpid,
  18624. lsxtype,
  18625. workprice,
  18626. status,
  18627. ifjd,
  18628. lastflag,
  18629. sctype,
  18630. equipmentid,
  18631. partname,
  18632. eqworkhour,
  18633. Workhour,
  18634. beforehour,
  18635. afterhour,
  18636. ori_workprice,
  18637. worktype,
  18638. eq_empnum,
  18639. ifgroup,
  18640. u_workprice,
  18641. u_workqty,
  18642. replacestr,
  18643. procode_ori,
  18644. rpcode,
  18645. auditflag_gj)
  18646. Select u_order_ml.scid,
  18647. u_order_ml.orderid,
  18648. u_order_ml.mtrlid,
  18649. u_sc_workprice.procode,
  18650. u_sc_workprice.proname,
  18651. u_sc_workprice.proorder,
  18652. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  18653. u_sc_workprice.wrkgrpid,
  18654. u_sc_workprice.lsxtype,
  18655. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18656. u_sc_workprice.status,
  18657. u_sc_workprice.ifjd,
  18658. u_sc_workprice.lastflag,
  18659. u_sc_workprice.sctype,
  18660. u_sc_workprice.equipmentid,
  18661. u_sc_workprice.partname,
  18662. u_sc_workprice.eqworkhour,
  18663. u_sc_workprice.Workhour,
  18664. u_sc_workprice.beforehour,
  18665. u_sc_workprice.afterhour,
  18666. case :uo_option_orderrqwp_auditgj when 0 then u_sc_workprice.workprice else (case u_sc_workprice.auditflag_gj when 0 then 0 else u_sc_workprice.workprice end ) end ,
  18667. u_sc_workprice.worktype,
  18668. u_sc_workprice.eq_empnum,
  18669. u_sc_workprice.ifgroup,
  18670. u_sc_workprice.u_workprice,
  18671. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj,
  18672. u_sc_workprice.replacestr,
  18673. u_sc_workprice.procode,
  18674. u_sc_workprice.rpcode,
  18675. u_sc_workprice.auditflag_gj
  18676. From u_sc_workprice Inner JOIN
  18677. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  18678. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  18679. u_sc_workprice.procode = U_OrderPro.Procode
  18680. Where u_order_ml.orderid = :arg_orderid
  18681. And u_order_ml.scid = :arg_scid
  18682. And u_sc_workprice.ifownpro = 0
  18683. And u_sc_workprice.lsxtype <> 0
  18684. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  18685. And (u_sc_workprice.status = '')
  18686. And u_sc_workprice.wpcode = :wpcode
  18687. And U_OrderPro.scid Is Null;
  18688. If sqlca.SQLCode <> 0 Then
  18689. rslt = 0
  18690. arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText
  18691. Goto ext
  18692. End If
  18693. Else
  18694. // f_checkpz(status_mode,s_pz[])
  18695. cnt_ut = 1
  18696. f_checkpz_general(mtrlid,status_mode,s_pz[])
  18697. Declare cur_ut Cursor For
  18698. Select distinct utcode
  18699. From u_sc_workprice
  18700. Where mtrlid = :mtrlid
  18701. And lTrim(rtrim(utcode)) <> ''
  18702. And u_sc_workprice.ifownpro = 0
  18703. And u_sc_workprice.lsxtype <> 0
  18704. And u_sc_workprice.wpcode = :wpcode;
  18705. Open cur_ut;
  18706. Fetch cur_ut Into :ls_utcode[cnt_ut];
  18707. Do While sqlca.SQLCode = 0
  18708. cnt_ut++
  18709. Fetch cur_ut Into :ls_utcode[cnt_ut];
  18710. Loop
  18711. Close cur_ut;
  18712. cnt_ut = cnt_ut - 1
  18713. For ll_i = 1 To cnt_ut
  18714. ld_workprice_sum = 0
  18715. For ll_j = 1 To UpperBound(s_pz)
  18716. ls_status_zj = s_pz[ll_j].cfgname
  18717. ld_qty_zj = Dec(s_pz[ll_j].qty)
  18718. ld_workprice = 0
  18719. ld_workqty = 0
  18720. ld_u_workprice = 0
  18721. ld_u_workqty = 0
  18722. Select workprice,
  18723. workqty,
  18724. u_workprice,
  18725. u_workqty,pricestr,
  18726. workqtystr,
  18727. u_pricestr,
  18728. u_workqtystr,
  18729. procode
  18730. Into :ld_workprice,
  18731. :ld_workqty,
  18732. :ld_u_workprice,
  18733. :ld_u_workqty,
  18734. :ls_pricestr,
  18735. :ls_workqtystr,
  18736. :ls_u_pricestr,
  18737. :ls_u_workqtystr,
  18738. :ls_procode
  18739. From u_sc_workprice
  18740. Where lTrim(rtrim(utcode)) = :ls_utcode[ll_i]
  18741. And lTrim(rtrim(status)) = :ls_status_zj
  18742. And mtrlid = :mtrlid
  18743. And u_sc_workprice.wpcode = :wpcode;
  18744. If sqlca.SQLCode <> 0 Then
  18745. rslt = 0
  18746. arg_msg = '查询组号:'+ls_utcode[ll_i]+' 配置:'+ls_status_zj+' 工价失败,'+sqlca.SQLErrText
  18747. Goto ext
  18748. End If
  18749. If Trim(ls_workqtystr) <> '' Then
  18750. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str) = 1 Then
  18751. ld_workqty = ld_workqty_str
  18752. End If
  18753. End If
  18754. If Trim(ls_pricestr) <> '' Then
  18755. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_pricestr,0,ls_pricestr_value,ld_workprice_str) = 1 Then
  18756. ld_workprice = ld_workprice_str
  18757. End If
  18758. End If
  18759. If Trim(ls_u_workqtystr) <> '' Then
  18760. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str) = 1 Then
  18761. ld_u_workqty = ld_u_workqty_str
  18762. End If
  18763. End If
  18764. If Trim(ls_u_pricestr) <> '' Then
  18765. If uof_workprice_parm(mtrlid,wpcode,ls_procode,ld_workqty * ld_qty_zj,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str) = 1 Then
  18766. ld_u_workprice = ld_u_workprice_str
  18767. End If
  18768. End If
  18769. ld_workprice_sum = ld_workprice_sum + ld_workprice * ld_workqty * ld_qty_zj
  18770. ld_u_workprice_sum = ld_u_workprice_sum + ld_u_workprice * ld_u_workqty * ld_qty_zj
  18771. Next
  18772. Select top 1 u_sc_workprice.procode,
  18773. u_sc_workprice.proname,
  18774. u_sc_workprice.proorder,
  18775. u_sc_workprice.wrkgrpid,
  18776. u_sc_workprice.lsxtype,
  18777. u_sc_workprice.ifjd,
  18778. u_sc_workprice.lastflag,
  18779. u_sc_workprice.sctype,
  18780. u_sc_workprice.equipmentid,
  18781. u_sc_workprice.partname,
  18782. u_sc_workprice.eqworkhour,
  18783. u_sc_workprice.Workhour,
  18784. u_sc_workprice.beforehour,
  18785. u_sc_workprice.afterhour,
  18786. u_sc_workprice.worktype,
  18787. u_sc_workprice.eq_empnum,
  18788. u_sc_workprice.ifgroup,
  18789. u_sc_workprice.replacestr,
  18790. u_sc_workprice.rpcode
  18791. Into :ls_procode,
  18792. :ls_proname,
  18793. :ll_proorder,
  18794. :ll_wrkgrpid,
  18795. :ll_lsxtype,
  18796. :ll_ifjd,
  18797. :ll_lastflag,
  18798. :li_sctype,
  18799. :ll_equipmentid,
  18800. :ls_partname,
  18801. :ld_eqworkhour,
  18802. :ld_Workhour,
  18803. :ld_beforehour,
  18804. :ld_afterhour,
  18805. :ls_worktype,
  18806. :ld_eq_empnum,
  18807. :li_ifgroup,
  18808. :ls_replacestr,
  18809. :ls_rpcode
  18810. From u_sc_workprice
  18811. Where mtrlid = :mtrlid
  18812. And utcode = :ls_utcode[ll_i]
  18813. And u_sc_workprice.wpcode = :wpcode
  18814. Order By lastflag Desc;
  18815. If sqlca.SQLCode <> 0 Then
  18816. rslt = 0
  18817. arg_msg = '查询工价表组号:'+ls_utcode[ll_i]+'相关信息失败'+sqlca.SQLErrText
  18818. Goto ext
  18819. End If
  18820. cnt = 0
  18821. Select count(0) Into :cnt
  18822. From u_orderrqwp
  18823. Where scid = :arg_scid
  18824. And orderid = :arg_orderid
  18825. And mtrlid = :mtrlid
  18826. And Procode = :ls_procode;
  18827. If sqlca.SQLCode <> 0 Then
  18828. rslt = 0
  18829. arg_msg = '查询旧工序进度失败,' + sqlca.SQLErrText
  18830. Goto ext
  18831. End If
  18832. If cnt = 0 Then
  18833. Insert Into u_orderrqwp
  18834. (scid,
  18835. orderid,
  18836. mtrlid,
  18837. procode,
  18838. proname,
  18839. proorder,
  18840. proqty,
  18841. wrkgrpid,
  18842. lsxtype,
  18843. workprice,
  18844. status,
  18845. ifjd,
  18846. lastflag,
  18847. sctype,
  18848. equipmentid,
  18849. partname,
  18850. eqworkhour,
  18851. Workhour,
  18852. beforehour,
  18853. afterhour,
  18854. ori_workprice,
  18855. worktype,
  18856. eq_empnum,
  18857. ifgroup,
  18858. u_workprice,
  18859. u_workqty,
  18860. replacestr,
  18861. procode_ori,
  18862. rpcode)
  18863. Values (:arg_scid,
  18864. :arg_orderid,
  18865. :mtrlid,
  18866. :ls_procode,
  18867. :ls_proname,
  18868. :ll_proorder,
  18869. :orderqty,
  18870. :ll_wrkgrpid,
  18871. :ll_lsxtype,
  18872. :ld_workprice_sum,
  18873. :status_mode,
  18874. :ll_ifjd,
  18875. :ll_lastflag,
  18876. :li_sctype,
  18877. :ll_equipmentid,
  18878. :ls_partname,
  18879. :ld_eqworkhour,
  18880. :ld_Workhour,
  18881. :ld_beforehour,
  18882. :ld_afterhour,
  18883. :ld_workprice_sum,
  18884. :ls_worktype,
  18885. :ld_eq_empnum,
  18886. :li_ifgroup,
  18887. :ld_u_workprice_sum,
  18888. :orderqty,
  18889. :ls_replacestr,
  18890. :ls_procode,
  18891. :ls_rpcode);
  18892. If sqlca.SQLCode <> 0 Then
  18893. rslt = 0
  18894. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  18895. Goto ext
  18896. End If
  18897. Else
  18898. If Not arg_ifall And arg_ifupdateprice Then
  18899. Update u_orderrqwp
  18900. Set workprice = :ld_workprice_sum, ori_workprice = :ld_workprice_sum
  18901. Where scid = :arg_scid
  18902. And orderid = :arg_orderid
  18903. And mtrlid = :mtrlid
  18904. And Procode = :ls_procode;
  18905. If sqlca.SQLCode <> 0 Then
  18906. rslt = 0
  18907. arg_msg = '更新旧工序进度工价失败,' + sqlca.SQLErrText
  18908. Goto ext
  18909. End If
  18910. End If
  18911. End If
  18912. Next
  18913. //加空组号工序
  18914. For ll_i = 1 To UpperBound(s_pz)
  18915. ls_status_zj = s_pz[ll_i].cfgname
  18916. ld_qty_zj = Dec(s_pz[ll_i].qty)
  18917. If Not arg_ifall And arg_ifupdateprice Then
  18918. Update U_OrderRqwp
  18919. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  18920. From u_sc_workprice Inner JOIN
  18921. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  18922. Where U_OrderRqwp.orderid = :arg_orderid
  18923. And U_OrderRqwp.scid = :arg_scid
  18924. And u_sc_workprice.ifownpro = 0
  18925. And u_sc_workprice.lsxtype <> 0
  18926. And (u_sc_workprice.status = :ls_status_zj)
  18927. And u_sc_workprice.utcode = ''
  18928. And u_sc_workprice.wpcode = :wpcode;
  18929. If sqlca.SQLCode <> 0 Then
  18930. rslt = 0
  18931. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  18932. Goto ext
  18933. End If
  18934. End If
  18935. Insert Into u_orderrqwp(scid,
  18936. orderid,
  18937. mtrlid,
  18938. procode,
  18939. proname,
  18940. proorder,
  18941. proqty,
  18942. wrkgrpid,
  18943. lsxtype,
  18944. workprice,
  18945. status,
  18946. ifjd,
  18947. lastflag,
  18948. sctype,
  18949. equipmentid,
  18950. partname,
  18951. eqworkhour,
  18952. Workhour,
  18953. beforehour,
  18954. afterhour,
  18955. ori_workprice,
  18956. worktype,
  18957. eq_empnum,
  18958. u_workprice,
  18959. u_workqty,
  18960. replacestr,
  18961. procode_ori,
  18962. rpcode)
  18963. Select u_order_ml.scid,
  18964. u_order_ml.orderid,
  18965. u_order_ml.mtrlid,
  18966. u_sc_workprice.procode,
  18967. u_sc_workprice.proname,
  18968. u_sc_workprice.proorder,
  18969. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  18970. u_sc_workprice.wrkgrpid,
  18971. u_sc_workprice.lsxtype,
  18972. u_sc_workprice.workprice,
  18973. u_sc_workprice.status,
  18974. u_sc_workprice.ifjd,
  18975. u_sc_workprice.lastflag,
  18976. u_sc_workprice.sctype,
  18977. u_sc_workprice.equipmentid,
  18978. u_sc_workprice.partname,
  18979. u_sc_workprice.eqworkhour,
  18980. u_sc_workprice.Workhour,
  18981. u_sc_workprice.beforehour,
  18982. u_sc_workprice.afterhour,
  18983. u_sc_workprice.workprice,
  18984. u_sc_workprice.worktype,
  18985. u_sc_workprice.eq_empnum,
  18986. u_sc_workprice.u_workprice,
  18987. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj,
  18988. u_sc_workprice.replacestr,
  18989. u_sc_workprice.procode,
  18990. u_sc_workprice.rpcode
  18991. From u_sc_workprice Inner JOIN
  18992. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  18993. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  18994. u_sc_workprice.procode = U_OrderPro.Procode
  18995. Where u_order_ml.orderid = :arg_orderid
  18996. And u_order_ml.scid = :arg_scid
  18997. And u_sc_workprice.ifownpro = 0
  18998. And u_sc_workprice.lsxtype <> 0
  18999. And (u_sc_workprice.status = :ls_status_zj)
  19000. And u_sc_workprice.utcode = ''
  19001. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  19002. And u_sc_workprice.wpcode = :wpcode
  19003. And U_OrderPro.scid Is Null;
  19004. If sqlca.SQLCode <> 0 Then
  19005. rslt = 0
  19006. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  19007. Goto ext
  19008. End If
  19009. Next
  19010. //加空子件工序
  19011. If Not arg_ifall And arg_ifupdateprice Then
  19012. Update U_OrderRqwp
  19013. Set workPrice = u_sc_workprice.workPrice, ori_workprice = u_sc_workprice.workPrice
  19014. From u_sc_workprice Inner JOIN
  19015. U_OrderRqwp ON u_sc_workprice.Mtrlid = U_OrderRqwp.Mtrlid And u_sc_workprice.procode = U_OrderRqwp.Procode
  19016. Where U_OrderRqwp.orderid = :arg_orderid
  19017. And U_OrderRqwp.scid = :arg_scid
  19018. And u_sc_workprice.ifownpro = 0
  19019. And u_sc_workprice.lsxtype <> 0
  19020. And (u_sc_workprice.status = '')
  19021. And u_sc_workprice.utcode = ''
  19022. And u_sc_workprice.wpcode = :wpcode;
  19023. If sqlca.SQLCode <> 0 Then
  19024. rslt = 0
  19025. arg_msg = '更新工价失败,' + sqlca.SQLErrText
  19026. Goto ext
  19027. End If
  19028. End If
  19029. Insert Into u_orderrqwp(scid,
  19030. orderid,
  19031. mtrlid,
  19032. procode,
  19033. proname,
  19034. proorder,
  19035. proqty,
  19036. wrkgrpid,
  19037. lsxtype,
  19038. workprice,
  19039. status,
  19040. ifjd,
  19041. lastflag,
  19042. sctype,
  19043. equipmentid,
  19044. partname,
  19045. eqworkhour,
  19046. Workhour,
  19047. beforehour,
  19048. afterhour,
  19049. ori_workprice,
  19050. worktype,
  19051. eq_empnum,
  19052. u_workprice,
  19053. u_workqty,
  19054. replacestr,
  19055. procode_ori,
  19056. rpcode)
  19057. Select u_order_ml.scid,
  19058. u_order_ml.orderid,
  19059. u_order_ml.mtrlid,
  19060. u_sc_workprice.procode,
  19061. u_sc_workprice.proname,
  19062. u_sc_workprice.proorder,
  19063. u_sc_workprice.workqty * u_order_ml.orderqty * :ld_qty_zj,
  19064. u_sc_workprice.wrkgrpid,
  19065. u_sc_workprice.lsxtype,
  19066. u_sc_workprice.workprice,
  19067. u_sc_workprice.status,
  19068. u_sc_workprice.ifjd,
  19069. u_sc_workprice.lastflag,
  19070. u_sc_workprice.sctype,
  19071. u_sc_workprice.equipmentid,
  19072. u_sc_workprice.partname,
  19073. u_sc_workprice.eqworkhour,
  19074. u_sc_workprice.Workhour,
  19075. u_sc_workprice.beforehour,
  19076. u_sc_workprice.afterhour,
  19077. u_sc_workprice.workprice,
  19078. u_sc_workprice.worktype,
  19079. u_sc_workprice.eq_empnum,
  19080. u_sc_workprice.u_workprice,
  19081. u_sc_workprice.u_workqty * u_order_ml.orderqty * :ld_qty_zj,
  19082. u_sc_workprice.replacestr,
  19083. u_sc_workprice.procode,
  19084. u_sc_workprice.rpcode
  19085. From u_sc_workprice Inner JOIN
  19086. u_Order_ml ON u_sc_workprice.Mtrlid = u_Order_ml.mtrlid LEFT Outer JOIN
  19087. U_OrderRqwp AS U_OrderPro ON u_Order_ml.scid = U_OrderPro.scid And u_Order_ml.OrderID = U_OrderPro.orderid And u_Order_ml.mtrlid = U_OrderPro.Mtrlid And
  19088. u_sc_workprice.procode = U_OrderPro.Procode
  19089. Where u_order_ml.orderid = :arg_orderid
  19090. And u_order_ml.scid = :arg_scid
  19091. And u_sc_workprice.ifownpro = 0
  19092. And u_sc_workprice.lsxtype <> 0
  19093. And (u_sc_workprice.status = '')
  19094. And u_sc_workprice.utcode = ''
  19095. And (ltrim(rtrim(u_sc_workprice.rpcode)) <> '' And u_sc_workprice.ifdftpg = 1 Or ltrim(rtrim(u_sc_workprice.rpcode)) = '')
  19096. And u_sc_workprice.wpcode = :wpcode
  19097. And U_OrderPro.scid Is Null;
  19098. If sqlca.SQLCode <> 0 Then
  19099. rslt = 0
  19100. arg_msg = '增加生产计划工序[空子件]失败,原因:'+sqlca.SQLErrText
  19101. Goto ext
  19102. End If
  19103. Update U_OrderRqwp
  19104. Set U_OrderRqwp.workPrice = u_sc_workprice.workPrice,
  19105. U_OrderRqwp.ori_workPrice = u_sc_workprice.workPrice
  19106. From U_OrderRqwp Inner JOIN
  19107. u_Order_ml ON U_OrderRqwp.scid = u_Order_ml.scid And
  19108. U_OrderRqwp.orderid = u_Order_ml.OrderID Inner JOIN
  19109. u_sc_workprice ON u_Order_ml.mtrlid = u_sc_workprice.Mtrlid And
  19110. u_Order_ml.status_mode = u_sc_workprice.status And
  19111. U_OrderRqwp.Proname = u_sc_workprice.Proname And
  19112. u_Order_ml.wpcode = u_sc_workprice.wpcode
  19113. Where U_OrderRqwp.scid = :arg_scid
  19114. And u_orderrqwp.orderid = :arg_orderid;
  19115. If sqlca.SQLCode <> 0 Then
  19116. rslt = 0
  19117. arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText
  19118. Goto ext
  19119. End If
  19120. End If
  19121. End If
  19122. //如果按组号合并,则不再执行公式
  19123. If uo_option_orderrqwp_union = 0 Or uo_option_orderrqwp_union = 1 And cnt_ut = 0 Then
  19124. ds_orderrqwp.Retrieve(arg_scid,arg_orderid,wpcode)
  19125. For ll_i = 1 To ds_orderrqwp.RowCount()
  19126. ls_pricestr = ds_orderrqwp.Object.u_sc_workprice_pricestr[ll_i]
  19127. ll_mtrlid = ds_orderrqwp.Object.u_orderrqwp_mtrlid[ll_i]
  19128. ls_procode = ds_orderrqwp.Object.u_orderrqwp_procode[ll_i]
  19129. ls_worktype = ds_orderrqwp.Object.u_orderrqwp_worktype[ll_i]
  19130. ld_hourpay = ds_orderrqwp.Object.hourpay[ll_i]
  19131. ld_proqty = ds_orderrqwp.Object.u_orderrqwp_proqty[ll_i]
  19132. ld_Workhour = ds_orderrqwp.Object.u_orderrqwp_workhour[ll_i]
  19133. ld_beforehour = ds_orderrqwp.Object.u_orderrqwp_beforehour[ll_i]
  19134. ld_afterhour = ds_orderrqwp.Object.u_orderrqwp_afterhour[ll_i]
  19135. ld_eq_empnum = ds_orderrqwp.Object.u_orderrqwp_eq_empnum[ll_i]
  19136. ld_eqworkhour = ds_orderrqwp.Object.u_orderrqwp_eqworkhour[ll_i]
  19137. ls_workqtystr = ds_orderrqwp.Object.u_sc_workprice_workqtystr[ll_i]
  19138. ld_workqty_ori = ds_orderrqwp.Object.u_sc_workprice_workqty[ll_i]
  19139. ld_workprice_str = ds_orderrqwp.Object.u_orderrqwp_workprice[ll_i]
  19140. ld_u_workqty_str = ds_orderrqwp.Object.u_orderrqwp_u_workqty[ll_i]
  19141. ld_u_workprice_str = ds_orderrqwp.Object.u_orderrqwp_u_workprice[ll_i]
  19142. ls_u_workqtystr = ds_orderrqwp.Object.u_sc_workprice_u_workqtystr[ll_i]
  19143. ls_u_pricestr = ds_orderrqwp.Object.u_sc_workprice_u_pricestr[ll_i]
  19144. ld_workqty_str = ld_proqty
  19145. If ld_workqty_ori = 0 Then ld_workqty_ori = 1
  19146. ls_pricestr_ori = ''
  19147. ls_pricestr_value = ''
  19148. ls_workqtystr_ori = ''
  19149. ls_workqtystr_value = ''
  19150. //1.数量公式
  19151. If Trim(ls_workqtystr) <> '' Then
  19152. ls_workqtystr_ori = ls_workqtystr
  19153. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_workqtystr,1,ls_workqtystr_value,ld_workqty_str)
  19154. ld_proqty = ld_workqty_str
  19155. End If
  19156. //2.单价公式
  19157. If Trim(ls_pricestr) <> '' Then
  19158. ls_pricestr_ori = ls_pricestr
  19159. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_pricestr,0,ls_pricestr_value,ld_workprice_str)
  19160. Else
  19161. If li_if_hourpay = 2 Then
  19162. If ld_proqty > ld_splitrate And ld_splitrate <> 0 Then
  19163. ld_workprice_str = (ld_splitrate * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_splitrate * ld_hourpay
  19164. Else
  19165. ld_workprice_str = (ld_proqty * (ld_Workhour + ld_eqworkhour * ld_eq_empnum) + ld_beforehour + ld_afterhour) / ld_proqty * ld_hourpay
  19166. End If
  19167. Else
  19168. Goto _u_workqty
  19169. End If
  19170. End If
  19171. //3.折算数量
  19172. _u_workqty:
  19173. If Trim(ls_u_workqtystr) <> '' Then
  19174. ls_u_workqtystr_ori = ls_u_workqtystr
  19175. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_workqtystr,1,ls_u_workqtystr_value,ld_u_workqty_str)
  19176. End If
  19177. //4.折算单价
  19178. If Trim(ls_u_pricestr) <> '' Then
  19179. ls_u_pricestr_ori = ls_u_pricestr
  19180. uof_workprice_parm(ll_mtrlid,wpcode,ls_procode,ld_proqty,ls_u_pricestr,0,ls_u_pricestr_value,ld_u_workprice_str)
  19181. End If
  19182. Update u_orderrqwp
  19183. Set workprice = :ld_workprice_str,
  19184. ori_workprice = :ld_workprice_str,
  19185. pricestr = :ls_pricestr_ori,
  19186. pricestr_value = :ls_pricestr_value,
  19187. proqty = :ld_workqty_str,
  19188. workqtystr = :ls_workqtystr_ori,
  19189. workqtystr_value = :ls_workqtystr_value,
  19190. u_workqty = :ld_u_workqty_str,
  19191. u_workqtystr = :ls_u_workqtystr_ori,
  19192. u_workqtystr_value = :ls_u_workqtystr_value,
  19193. u_workprice = :ld_u_workprice_str,
  19194. u_pricestr = :ls_u_pricestr_ori,
  19195. u_pricestr_value = :ls_u_pricestr_value
  19196. Where scid = :arg_scid
  19197. And orderid = :arg_orderid
  19198. And mtrlid = :ll_mtrlid
  19199. And Procode = :ls_procode;
  19200. If sqlca.SQLCode <> 0 Then
  19201. rslt = 0
  19202. arg_msg = '按单价公式更新工序单价失败,'+sqlca.SQLErrText
  19203. Goto ext
  19204. End If
  19205. Next
  19206. End If
  19207. Else
  19208. it_mx_bomwp = 0
  19209. deep = 0
  19210. If uof_protype_workprice(mtrlid,pfcode,wpcode,orderqty,arg_msg) = 0 Then
  19211. rslt = 0
  19212. arg_msg = '计算下级虚拟部件工价表失败,'+arg_msg
  19213. Goto ext
  19214. End If
  19215. // DELETE FROM u_orderrqwp
  19216. // WHERE orderid = :arg_orderid
  19217. // And scid = :arg_scid;
  19218. // IF sqlca.SQLCode <> 0 THEN
  19219. // rslt = 0
  19220. // arg_msg = "删除计划的工序明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  19221. // GOTO ext
  19222. // END IF
  19223. //
  19224. If li_protype = 1 Then
  19225. // 清空原工序的工序合并说明、原工序号
  19226. Update u_orderrqwp
  19227. Set pro_dscrp = '', procode_ori = ''
  19228. Where scid = :arg_scid
  19229. And orderid = :arg_orderid;
  19230. If sqlca.SQLCode <> 0 Then
  19231. rslt = 0
  19232. arg_msg = '清空原工序的工序合并说明、原工序号失败,' + sqlca.SQLErrText
  19233. Goto ext
  19234. End If
  19235. For ll_i = 1 To it_mx_bomwp
  19236. // 更新原工序的工序合并说明、原工序号
  19237. Update u_orderrqwp
  19238. Set pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End,
  19239. procode_ori = :ins_s_wp[ll_i].procode
  19240. Where scid = :arg_scid
  19241. And orderid = :arg_orderid
  19242. And mtrlid = :mtrlid
  19243. And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode
  19244. And (finishqty > 0 Or taskqty > 0);
  19245. If sqlca.SQLCode <> 0 Then
  19246. rslt = 0
  19247. arg_msg = '更新原工序的工序合并说明、原工序号失败,' + sqlca.SQLErrText
  19248. Goto ext
  19249. End If
  19250. If sqlca.SQLNRows = 0 Then
  19251. Update u_orderrqwp
  19252. Set proqty = proqty + :ins_s_wp[ll_i].workqty,
  19253. u_workqty = u_workqty + :ins_s_wp[ll_i].u_workqty,
  19254. pro_dscrp = case when len(pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp) < 255 then pro_dscrp + ',' + :ins_s_wp[ll_i].pro_dscrp else pro_dscrp End
  19255. Where scid = :arg_scid
  19256. And orderid = :arg_orderid
  19257. And mtrlid = :mtrlid
  19258. And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode;
  19259. If sqlca.SQLCode = 0 Then
  19260. If sqlca.SQLNRows = 0 Then
  19261. Insert Into u_orderrqwp(scid,
  19262. orderid,
  19263. mtrlid,
  19264. procode,
  19265. proname,
  19266. proorder,
  19267. proqty,
  19268. wrkgrpid,
  19269. lsxtype,
  19270. workprice,
  19271. status,
  19272. ifjd,
  19273. lastflag,
  19274. sctype,
  19275. equipmentid,
  19276. partname,
  19277. eqworkhour,
  19278. Workhour,
  19279. beforehour,
  19280. afterhour,
  19281. ori_workprice,
  19282. worktype,
  19283. eq_empnum,
  19284. ifgroup,
  19285. u_workqty,
  19286. u_workprice,
  19287. pricestr,
  19288. pricestr_value,
  19289. procode_ori,
  19290. pro_dscrp,
  19291. replacestr,
  19292. sonmtrlid,
  19293. rpcode,
  19294. auditflag_gj)
  19295. Values (:arg_scid,
  19296. :arg_orderid,
  19297. :mtrlid,
  19298. :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].procode,
  19299. :ins_s_wp[ll_i].proname,
  19300. :ins_s_wp[ll_i].proorder,
  19301. :ins_s_wp[ll_i].workqty,
  19302. :ins_s_wp[ll_i].wrkgrpid,
  19303. :ins_s_wp[ll_i].lsxtype,
  19304. case :uo_option_orderrqwp_auditgj when 0 then :ins_s_wp[ll_i].workprice else (case :ins_s_wp[ll_i].auditflag_gj when 0 then 0 else :ins_s_wp[ll_i].workprice end ) end ,
  19305. :ins_s_wp[ll_i].status,
  19306. :ins_s_wp[ll_i].ifjd,
  19307. :ins_s_wp[ll_i].lastflag,
  19308. :ins_s_wp[ll_i].sctype,
  19309. :ins_s_wp[ll_i].equipmentid,
  19310. :ins_s_wp[ll_i].partname,
  19311. :ins_s_wp[ll_i].eqworkhour,
  19312. :ins_s_wp[ll_i].Workhour,
  19313. :ins_s_wp[ll_i].beforehour,
  19314. :ins_s_wp[ll_i].afterhour,
  19315. case :uo_option_orderrqwp_auditgj when 0 then :ins_s_wp[ll_i].workprice else (case :ins_s_wp[ll_i].auditflag_gj when 0 then 0 else :ins_s_wp[ll_i].workprice end ) end ,
  19316. :ins_s_wp[ll_i].worktype,
  19317. :ins_s_wp[ll_i].eq_empnum,
  19318. :ins_s_wp[ll_i].ifgroup,
  19319. :ins_s_wp[ll_i].u_workqty,
  19320. :ins_s_wp[ll_i].u_workprice,
  19321. :ins_s_wp[ll_i].pricestr,
  19322. :ins_s_wp[ll_i].pricestr_value,
  19323. :ins_s_wp[ll_i].procode,
  19324. :ins_s_wp[ll_i].pro_dscrp,
  19325. :ins_s_wp[ll_i].replacestr,
  19326. :ins_s_wp[ll_i].sonmtrlid,
  19327. :ins_s_wp[ll_i].rpcode,
  19328. :ins_s_wp[ll_i].auditflag_gj);
  19329. If sqlca.SQLCode <> 0 Then
  19330. rslt = 0
  19331. arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  19332. Goto ext
  19333. End If
  19334. End If
  19335. Else
  19336. If sqlca.SQLCode <> 0 Then
  19337. rslt = 0
  19338. arg_msg = '更新生产计划工序失败,原因:'+sqlca.SQLErrText
  19339. Goto ext
  19340. End If
  19341. End If
  19342. Else
  19343. If Not arg_ifall And arg_ifupdateprice Then
  19344. Update u_orderrqwp
  19345. Set workprice = :ins_s_wp[ll_i].workprice,
  19346. ori_workprice = :ins_s_wp[ll_i].workprice,
  19347. auditflag_gj = :ins_s_wp[ll_i].auditflag_gj
  19348. Where scid = :arg_scid
  19349. And orderid = :arg_orderid
  19350. And mtrlid = :mtrlid
  19351. And Procode = :ins_s_wp[ll_i].mtrlcode + '_' + :ins_s_wp[ll_i].Procode;
  19352. If sqlca.SQLCode <> 0 Then
  19353. rslt = 0
  19354. arg_msg = '更新旧工序进度工价失败,' + sqlca.SQLErrText
  19355. Goto ext
  19356. End If
  19357. End If
  19358. End If
  19359. Next
  19360. ElseIf li_protype = 2 Then
  19361. // s_workpricetable s_wp_union[]
  19362. // Long ll_wp_union
  19363. //
  19364. // FOR ll_i = 1 To it_mx_bomwp
  19365. // FOR ll_j = 1 To ll_wp_union
  19366. // IF ins_s_wp[ll_i].Procode = s_wp_union[ll_j].Procode THEN
  19367. // s_wp_union[ll_j].workprice_bom = s_wp_union[ll_j].workprice_bom + ins_s_wp[ll_i].workprice_bom
  19368. // IF lena(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp) > 255 THEN
  19369. // s_wp_union[ll_j].pro_dscrp = leftA(s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp,255)
  19370. // ELSE
  19371. // s_wp_union[ll_j].pro_dscrp = s_wp_union[ll_j].pro_dscrp + ',' + ins_s_wp[ll_i].pro_dscrp
  19372. // END IF
  19373. // GOTO _next_wp
  19374. // END IF
  19375. // NEXT
  19376. //
  19377. // ll_wp_union++
  19378. //
  19379. // s_wp_union[ll_wp_union].Procode = ins_s_wp[ll_i].Procode
  19380. // s_wp_union[ll_wp_union].proname = ins_s_wp[ll_i].proname
  19381. // s_wp_union[ll_wp_union].proorder = ins_s_wp[ll_i].proorder
  19382. // s_wp_union[ll_wp_union].workqty = ins_s_wp[ll_i].workqty
  19383. // s_wp_union[ll_wp_union].wrkgrpid = ins_s_wp[ll_i].wrkgrpid
  19384. // s_wp_union[ll_wp_union].lsxtype = ins_s_wp[ll_i].lsxtype
  19385. // s_wp_union[ll_wp_union].workPrice = ins_s_wp[ll_i].workPrice
  19386. // s_wp_union[ll_wp_union].status = ins_s_wp[ll_i].status
  19387. // s_wp_union[ll_wp_union].ifjd = ins_s_wp[ll_i].ifjd
  19388. // s_wp_union[ll_wp_union].lastflag = ins_s_wp[ll_i].lastflag
  19389. // s_wp_union[ll_wp_union].sctype = ins_s_wp[ll_i].sctype
  19390. // s_wp_union[ll_wp_union].equipmentid = ins_s_wp[ll_i].equipmentid
  19391. // s_wp_union[ll_wp_union].partname = ins_s_wp[ll_i].partname
  19392. // s_wp_union[ll_wp_union].eqworkhour = ins_s_wp[ll_i].eqworkhour
  19393. // s_wp_union[ll_wp_union].Workhour = ins_s_wp[ll_i].Workhour
  19394. // s_wp_union[ll_wp_union].beforehour = ins_s_wp[ll_i].beforehour
  19395. // s_wp_union[ll_wp_union].afterhour = ins_s_wp[ll_i].afterhour
  19396. // s_wp_union[ll_wp_union].workPrice = ins_s_wp[ll_i].workPrice
  19397. // s_wp_union[ll_wp_union].worktype = ins_s_wp[ll_i].worktype
  19398. // s_wp_union[ll_wp_union].eq_empnum = ins_s_wp[ll_i].eq_empnum
  19399. // s_wp_union[ll_wp_union].ifgroup = ins_s_wp[ll_i].ifgroup
  19400. // s_wp_union[ll_wp_union].u_workqty = ins_s_wp[ll_i].u_workqty
  19401. // s_wp_union[ll_wp_union].u_workprice = ins_s_wp[ll_i].u_workprice
  19402. // s_wp_union[ll_wp_union].workprice_bom = ins_s_wp[ll_i].workprice_bom
  19403. // s_wp_union[ll_wp_union].pricestr = ''
  19404. // s_wp_union[ll_wp_union].pricestr_value = ''
  19405. // s_wp_union[ll_wp_union].pro_dscrp = ins_s_wp[ll_i].pro_dscrp
  19406. // s_wp_union[ll_wp_union].replacestr = ins_s_wp[ll_i].replacestr
  19407. //
  19408. // _next_wp:
  19409. // NEXT
  19410. //
  19411. // FOR ll_i = 1 To ll_wp_union
  19412. //
  19413. // UPDATE u_orderrqwp
  19414. // SET procode_ori = :s_wp_union[ll_i].procode,
  19415. // pro_dscrp = :s_wp_union[ll_i].pro_dscrp
  19416. // WHERE scid = :arg_scid
  19417. // AND orderid = :arg_orderid
  19418. // AND mtrlid = :mtrlid
  19419. // And Procode = :s_wp_union[ll_i].Procode;
  19420. // IF sqlca.SQLCode <> 0 THEN
  19421. // rslt = 0
  19422. // arg_msg = '更新原工序进度工序合并说明、原工序号失败' + sqlca.SQLErrText
  19423. // GOTO ext
  19424. // END IF
  19425. // IF sqlca.SQLNRows = 0 THEN
  19426. // INSERT INTO u_orderrqwp(scid,
  19427. // orderid,
  19428. // mtrlid,
  19429. // procode,
  19430. // proname,
  19431. // proorder,
  19432. // proqty,
  19433. // wrkgrpid,
  19434. // lsxtype,
  19435. // workprice,
  19436. // status,
  19437. // ifjd,
  19438. // lastflag,
  19439. // sctype,
  19440. // equipmentid,
  19441. // partname,
  19442. // eqworkhour,
  19443. // Workhour,
  19444. // beforehour,
  19445. // afterhour,
  19446. // ori_workprice,
  19447. // worktype,
  19448. // eq_empnum,
  19449. // ifgroup,
  19450. // u_workqty,
  19451. // u_workprice,
  19452. // pricestr,
  19453. // pricestr_value,
  19454. // procode_ori,
  19455. // pro_dscrp,
  19456. // replacestr)
  19457. // VALUES ( :arg_scid,
  19458. // :arg_orderid,
  19459. // :mtrlid,
  19460. // :s_wp_union[ll_i].procode,
  19461. // :s_wp_union[ll_i].proname,
  19462. // :s_wp_union[ll_i].proorder,
  19463. // :orderqty,
  19464. // :s_wp_union[ll_i].wrkgrpid,
  19465. // :s_wp_union[ll_i].lsxtype,
  19466. // :s_wp_union[ll_i].workprice_bom,
  19467. // :s_wp_union[ll_i].status,
  19468. // :s_wp_union[ll_i].ifjd,
  19469. // :s_wp_union[ll_i].lastflag,
  19470. // :s_wp_union[ll_i].sctype,
  19471. // :s_wp_union[ll_i].equipmentid,
  19472. // :s_wp_union[ll_i].partname,
  19473. // :s_wp_union[ll_i].eqworkhour,
  19474. // :s_wp_union[ll_i].Workhour,
  19475. // :s_wp_union[ll_i].beforehour,
  19476. // :s_wp_union[ll_i].afterhour,
  19477. // :s_wp_union[ll_i].workprice_bom,
  19478. // :s_wp_union[ll_i].worktype,
  19479. // :s_wp_union[ll_i].eq_empnum,
  19480. // :s_wp_union[ll_i].ifgroup,
  19481. // :orderqty,
  19482. // :s_wp_union[ll_i].workprice_bom,
  19483. // :s_wp_union[ll_i].pricestr,
  19484. // :s_wp_union[ll_i].pricestr_value,
  19485. // :s_wp_union[ll_i].procode,
  19486. // :s_wp_union[ll_i].pro_dscrp,
  19487. // :s_wp_union[ll_i].replacestr);
  19488. // IF sqlca.SQLCode <> 0 THEN
  19489. // rslt = 0
  19490. // arg_msg = '增加生产计划工序失败,原因:'+sqlca.SQLErrText
  19491. // GOTO ext
  19492. // END IF
  19493. // ELSE
  19494. // IF Not arg_ifall And arg_ifupdateprice THEN
  19495. // UPDATE u_orderrqwp
  19496. // SET workprice = :s_wp_union[ll_i].workprice_bom,
  19497. // ori_workprice = :s_wp_union[ll_i].workprice_bom
  19498. // WHERE scid = :arg_scid
  19499. // AND orderid = :arg_orderid
  19500. // AND mtrlid = :mtrlid
  19501. // And Procode = :s_wp_union[ll_i].Procode;
  19502. // IF sqlca.SQLCode <> 0 THEN
  19503. // rslt = 0
  19504. // arg_msg = '更新原工序进度工价失败' + sqlca.SQLErrText
  19505. // GOTO ext
  19506. // END IF
  19507. // END IF
  19508. // END IF
  19509. // NEXT
  19510. End If
  19511. End If
  19512. //更新默认替代工序
  19513. String arg_replacestr,ls_str_dft,ls_price
  19514. Decimal ld_price
  19515. ds_replacestr.Retrieve(arg_scid,arg_orderid)
  19516. For ll_i = 1 To ds_replacestr.RowCount()
  19517. ll_mtrlid = ds_replacestr.Object.u_orderrqwp_mtrlid[ll_i]
  19518. ls_procode = ds_replacestr.Object.u_orderrqwp_procode[ll_i]
  19519. arg_replacestr = ds_replacestr.Object.u_orderrqwp_replacestr[ll_i]
  19520. ls_str_dft = Mid(arg_replacestr,Pos(arg_replacestr,'(默认)') + Len('(默认)'), Pos(arg_replacestr,':',Pos(arg_replacestr,'(默认)')) - (Pos(arg_replacestr,'(默认)') + Len('(默认)') ))
  19521. ls_price = Mid(arg_replacestr,Pos(arg_replacestr,ls_str_dft)+Len(ls_str_dft) + 1, Pos(arg_replacestr,';',Pos(arg_replacestr,ls_str_dft)) - Pos(arg_replacestr,':',Pos(arg_replacestr,ls_str_dft)) - 1)
  19522. If Trim(ls_str_dft) = '' Then Continue
  19523. If IsNumber(ls_price) = False Then Continue
  19524. ld_price = Dec(ls_price)
  19525. Update u_orderrqwp
  19526. Set replace_proname = :ls_str_dft,
  19527. workprice = :ld_price
  19528. Where scid = :arg_scid
  19529. And orderid = :arg_orderid
  19530. And mtrlid = :ll_mtrlid
  19531. And Procode = :ls_procode;
  19532. If sqlca.SQLCode <> 0 Then
  19533. rslt = 0
  19534. arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText
  19535. Goto ext
  19536. End If
  19537. Next
  19538. Update u_order_ml
  19539. Set u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '')
  19540. From u_Order_ml LEFT Outer JOIN
  19541. uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid And
  19542. u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID
  19543. Where u_Order_ml.scid = :arg_scid
  19544. And u_order_ml.orderid = :arg_orderid;
  19545. If sqlca.SQLCode <> 0 Then
  19546. rslt = 0
  19547. arg_msg = '更新派工状态失败,原因:'+sqlca.SQLErrText
  19548. Goto ext
  19549. End If
  19550. //
  19551. If arg_ifproaudit = 1 Then
  19552. Update u_order_ml
  19553. Set proauditflag = 1,
  19554. proauditemp = :publ_operator,
  19555. proauditdate = getdate()
  19556. Where scid = :arg_scid
  19557. And orderid = :arg_orderid;
  19558. If sqlca.SQLCode <> 0 Then
  19559. rslt = 0
  19560. arg_msg = '工序进度确认标志失败,' + sqlca.SQLErrText
  19561. Goto ext
  19562. End If
  19563. End If
  19564. ext:
  19565. If rslt = 0 Then
  19566. Rollback;
  19567. p_reset()
  19568. ElseIf arg_ifcommit And rslt = 1 Then
  19569. Commit;
  19570. End If
  19571. Destroy ds_pricestr
  19572. Destroy ds_orderrqwp
  19573. Destroy ds_parm
  19574. Return rslt
  19575. end function
  19576. public function integer uof_order_add_wkp (long arg_scid, long arg_orderid, ref string arg_msg, boolean arg_ifcommit, integer arg_if_olddate);Int rslt = 1
  19577. Decimal ld_finishqty
  19578. Long ll_dftwrkgrpid,ll_ordertype
  19579. DateTime ldt_tmp
  19580. Long ll_wrkgrpid[],ll_owrkgrpid[]
  19581. String ls_wkpname[]
  19582. Long ll_ifjd[],ll_workgroupid[]
  19583. DateTime ld_requiredate[],ld_begindate[]
  19584. String ls_dscrp[]
  19585. Decimal ll_lastdays[],ld_lasthour[]
  19586. Decimal ld_orderqty[],ld_uprate[]
  19587. Long ll_rel_planid[],ll_rel_planprintid[]
  19588. DateTime ld_minbdate[]
  19589. Long i,cnt
  19590. Long ll_i,ll_j
  19591. s_mtrlcfg_expr s_pz[]
  19592. String ls_status_zj
  19593. Decimal ld_qty_zj
  19594. Long ll_statusflag
  19595. Long ll_swkpid,ll_owkpid
  19596. String ls_wkpname_s
  19597. Decimal ld_workhour,ld_beforehour,ld_afterhour
  19598. uo_order_wkp_jd uo_jd
  19599. uo_jd = Create uo_order_wkp_jd
  19600. datastore ds_mx
  19601. ds_mx = Create datastore
  19602. ds_mx.DataObject = 'ds_mtrl_wkp_mx'
  19603. ds_mx.SetTransObject(sqlca)
  19604. If uo_option_order_ml_add_use_wkp = -1000 Then
  19605. rslt = 0
  19606. arg_msg = '选项:[186]生产计划新建时显示工作量,读取初始默认值失败,操作取消!'
  19607. Goto ext
  19608. End If
  19609. If uo_option_auto_wrkdate = -1000 Then
  19610. rslt = 0
  19611. arg_msg = '选项:[126]生产计划,生产指令自动计算工组开始日期,结束日期,读取初始默认值失败,操作取消!'
  19612. Goto ext
  19613. End If
  19614. If uo_option_use_sc_date = -1000 Then
  19615. rslt = 0
  19616. arg_msg = '选项:[180]工组进度按小时统计,读取初始默认值失败,操作取消!'
  19617. Goto ext
  19618. End If
  19619. If arg_orderid = 0 Then
  19620. rslt = 0
  19621. arg_msg = "没有审核对象"
  19622. Goto ext
  19623. End If
  19624. If p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 Then
  19625. rslt = 0
  19626. Goto ext
  19627. End If
  19628. Select ordertype,
  19629. dftwrkgrpid,
  19630. statusflag
  19631. Into :ll_ordertype,
  19632. :ll_dftwrkgrpid,
  19633. :ll_statusflag
  19634. From u_mtrldef
  19635. Where mtrlid = :mtrlid;
  19636. If sqlca.SQLCode <> 0 Then
  19637. rslt = 0
  19638. arg_msg = '查询物料信息失败,'+sqlca.SQLErrText
  19639. Goto ext
  19640. End If
  19641. If (ordertype <> 4 And ll_ordertype = 1) Then
  19642. rslt = 1
  19643. Goto ext
  19644. End If
  19645. //yyx20120912
  19646. If outscllflag = 0 Then
  19647. rslt = 1
  19648. Goto ext
  19649. End If
  19650. //
  19651. If uo_option_order_ml_add_use_wkp = 0 Then
  19652. If status <> 1 And status <> 4 And status <> 7 Then
  19653. rslt = 0
  19654. arg_msg = "计划只有在在进行状态才可以执行重新生成工组进度,请核对"
  19655. Goto ext
  19656. End If
  19657. End If
  19658. If wrkGrpid <> ll_dftwrkgrpid Then
  19659. rslt = 1
  19660. arg_msg = '生产指令单或生产计划的车间与计划物料默认的生产车间不一致,不能生成工组进度'
  19661. Goto ext
  19662. End If
  19663. Select sum(finishqty)
  19664. Into :ld_finishqty
  19665. From u_OrderMtrl_workgroup
  19666. Where orderid = :arg_orderid
  19667. And scid = :arg_scid;
  19668. If sqlca.SQLCode <> 0 Then
  19669. rslt = 0
  19670. arg_msg = "查询计划是否已交接操作失败"+"~n"+sqlca.SQLErrText
  19671. Goto ext
  19672. End If
  19673. If IsNull(ld_finishqty) Then ld_finishqty = 0
  19674. If ld_finishqty > 0 Then
  19675. arg_msg = '计划已有交接数,不能重新生成工组进度'
  19676. rslt = 0
  19677. Goto ext
  19678. End If
  19679. Select count(*)
  19680. Into :cnt
  19681. From u_order_planmx
  19682. Where scid = :arg_scid
  19683. And orderid = :arg_orderid;
  19684. If sqlca.SQLCode <> 0 Then
  19685. rslt = 0
  19686. arg_msg = "查询计划是否已开工组派工单操作失败"+"~n"+sqlca.SQLErrText
  19687. Goto ext
  19688. End If
  19689. If cnt > 0 Then
  19690. rslt = 0
  19691. arg_msg = "计划已开工组派工单操作,不能重新生成工组进度"
  19692. Goto ext
  19693. End If
  19694. i = 1
  19695. //arg_if_olddate 是否保留原开始结束日期及周期参数 0-保留 1-清空,重新生成
  19696. If arg_if_olddate = 1 Then
  19697. Declare cur_wrkmx Cursor For
  19698. Select wrkgrpid,
  19699. owrkgrpid,
  19700. wkpname,
  19701. ifjd,
  19702. lastdays,
  19703. lasthour,
  19704. requiredate,
  19705. dscrp,
  19706. begindate,
  19707. workgroupid,
  19708. rel_planid,
  19709. rel_planprintid,
  19710. uprate,
  19711. minbdate
  19712. From u_OrderMtrl_workgroup
  19713. Where orderid = :arg_orderid
  19714. And scid = :arg_scid;
  19715. Open cur_wrkmx;
  19716. Fetch cur_wrkmx Into :ll_wrkgrpid[i],:ll_owrkgrpid[i],
  19717. :ls_wkpname[i],:ll_ifjd[i],:ll_lastdays[i],:ld_lasthour[i],:ld_requiredate[i],
  19718. :ls_dscrp[i],:ld_begindate[i],:ll_workgroupid[i],
  19719. :ll_rel_planid[i],:ll_rel_planprintid[i],:ld_uprate[i],:ld_minbdate[i];
  19720. Do While sqlca.SQLCode = 0
  19721. i++
  19722. Fetch cur_wrkmx Into :ll_wrkgrpid[i],:ll_owrkgrpid[i],
  19723. :ls_wkpname[i],:ll_ifjd[i],:ll_lastdays[i],:ld_lasthour[i],:ld_requiredate[i],
  19724. :ls_dscrp[i],:ld_begindate[i],:ll_workgroupid[i],
  19725. :ll_rel_planid[i],:ll_rel_planprintid[i],:ld_uprate[i],:ld_minbdate[i];
  19726. Loop
  19727. Close cur_wrkmx;
  19728. cnt = i - 1
  19729. End If
  19730. Delete From u_OrderMtrl_workgroup
  19731. Where orderid = :arg_orderid
  19732. And scid = :arg_scid;
  19733. If sqlca.SQLCode <> 0 Then
  19734. rslt = 0
  19735. arg_msg = "删除计划的交接明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  19736. Goto ext
  19737. End If
  19738. Insert Into u_ordermtrl_workgroup
  19739. (scid,
  19740. orderid,
  19741. mtrlid,
  19742. wrkgrpid,
  19743. owrkgrpid,
  19744. orderqty,
  19745. lastdays,
  19746. ifjd,
  19747. wkpname,
  19748. printid,
  19749. iflast,
  19750. groupstr,
  19751. lp,
  19752. printlp,
  19753. lasthour,
  19754. workgroupid,
  19755. beforehour,
  19756. afterhour,
  19757. workhour,
  19758. gydscrp,
  19759. uprate,
  19760. ifgroup)
  19761. Select u_order_ml.scid,
  19762. u_order_ml.orderid,
  19763. u_order_ml.mtrlid,
  19764. u_mtrl_wkp.swkpid,
  19765. u_mtrl_wkp.owkpid,
  19766. u_order_ml.orderqty,
  19767. case when :Level = 0 then u_mtrl_wkp.minlasthour / 8 else u_mtrl_wkp.lastdays End ,
  19768. 1,
  19769. u_mtrl_wkp.wkpname,
  19770. u_mtrl_wkp.printid,
  19771. u_mtrl_wkp.iflast,
  19772. u_mtrl_wkp.groupstr,
  19773. u_mtrl_wkp.lp,
  19774. u_mtrl_wkp.printlp,
  19775. case when :Level = 0 then u_mtrl_wkp.minlasthour else u_mtrl_wkp.lasthour End ,
  19776. u_mtrl_wkp.workgroupid,
  19777. u_mtrl_wkp.beforehour,
  19778. u_mtrl_wkp.afterhour,
  19779. u_mtrl_wkp.workhour,
  19780. u_mtrl_wkp.gydscrp,
  19781. u_mtrl_wkp.uprate,
  19782. u_mtrl_wkp.ifgroup
  19783. From u_mtrl_wkp,u_order_ml
  19784. Where u_order_ml.orderid = :arg_orderid
  19785. And u_order_ml.scid = :arg_scid
  19786. And u_mtrl_wkp.mtrlid = u_order_ml.mtrlid;
  19787. If sqlca.SQLCode <> 0 Then
  19788. rslt = 0
  19789. arg_msg = '从物料生产流程加入生产计划车间失败,原因:'+sqlca.SQLErrText
  19790. Goto ext
  19791. End If
  19792. If ordertype <> 4 Then
  19793. Insert Into u_ordermtrl_workgroup
  19794. (scid,
  19795. orderid,
  19796. mtrlid,
  19797. wrkgrpid,
  19798. owrkgrpid,
  19799. orderqty,
  19800. lastdays,
  19801. ifjd,
  19802. printid,
  19803. groupstr,
  19804. lp,
  19805. printlp,
  19806. uprate,
  19807. ifgroup)
  19808. Select u_order_ml.scid,
  19809. u_order_ml.orderid,
  19810. u_order_ml.mtrlid,
  19811. u_sc_workgroup.wrkgrpid,
  19812. 0,
  19813. u_order_ml.orderqty,
  19814. 0,0,1000,'',0,0,0,0
  19815. From u_sc_workgroup,u_order_ml
  19816. Where u_order_ml.orderid = :arg_orderid
  19817. And u_order_ml.scid = :arg_scid
  19818. And u_sc_workgroup.ifprint = 1
  19819. And u_sc_workgroup.ifjj = 1
  19820. And u_sc_workgroup.wrkGrpid Not In (Select u_mtrl_wkp.swkpid From u_mtrl_wkp Where u_mtrl_wkp.mtrlid = :mtrlid) ;
  19821. If sqlca.SQLCode <> 0 Then
  19822. rslt = 0
  19823. arg_msg = '从车间资料加入工生产计划车间失败,原因:'+sqlca.SQLErrText
  19824. Goto ext
  19825. End If
  19826. End If
  19827. If ll_statusflag = 2 Then
  19828. f_checkpz(status_mode,s_pz[])
  19829. For ll_i = 1 To UpperBound(s_pz)
  19830. ls_status_zj = s_pz[ll_i].cfgname
  19831. ld_qty_zj = Dec(s_pz[ll_i].qty)
  19832. ds_mx.Retrieve(mtrlid,ls_status_zj)
  19833. For ll_j = 1 To ds_mx.RowCount()
  19834. ll_owkpid = ds_mx.Object.u_mtrl_wkp_mx_owkpid[ll_j]
  19835. ll_swkpid = ds_mx.Object.u_mtrl_wkp_mx_swkpid[ll_j]
  19836. ls_wkpname_s = ds_mx.Object.u_mtrl_wkp_mx_wkpname[ll_j]
  19837. ld_workhour = ds_mx.Object.u_mtrl_wkp_mx_workhour[ll_j]
  19838. ld_beforehour = ds_mx.Object.u_mtrl_wkp_mx_beforehour[ll_j]
  19839. ld_afterhour = ds_mx.Object.u_mtrl_wkp_mx_afterhour[ll_j]
  19840. Update u_OrderMtrl_workgroup
  19841. Set workhour = workhour + :ld_workhour * :ld_qty_zj,
  19842. beforehour = beforehour + :ld_beforehour * :ld_qty_zj,
  19843. afterhour = afterhour + :ld_afterhour * :ld_qty_zj
  19844. Where orderid = :arg_orderid
  19845. And scid = :arg_scid
  19846. And wrkgrpid = :ll_swkpid
  19847. And owrkgrpid = :ll_owkpid
  19848. And wkpname = :ls_wkpname_s;
  19849. If sqlca.SQLCode <> 0 Then
  19850. rslt = 0
  19851. arg_msg = '从工艺流程配置明细更新生产计划工艺进度失败,原因:'+sqlca.SQLErrText
  19852. Goto ext
  19853. End If
  19854. Next
  19855. Next
  19856. End If
  19857. If uof_update_minbdate(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  19858. rslt = 0
  19859. Goto ext
  19860. End If
  19861. Long l_wrkgrpid[],l_owrkgrpid[],l_ifjd[],l_printid[]
  19862. Decimal l_lastdays[],l_lasthour[]
  19863. String l_wkpname[],l_groupstr[]
  19864. Long j,cnt_2,ll_count
  19865. DateTime ld_sdate,ld_edate,ld_update_edate
  19866. DateTime ld_sdate_max
  19867. Decimal ld_resthour,ld_resthour_e
  19868. Int li_timehour
  19869. Int li_rdate
  19870. Decimal ld_resthour_tmp
  19871. DateTime ld_workdate_tmp
  19872. Long l_printid_gr[]
  19873. String l_groupstr_gr[]
  19874. Long cnt_gr
  19875. DateTime ld_sdate_gr[]
  19876. Long k
  19877. Boolean lb_if_find = False
  19878. String ls_arg_date
  19879. If uo_option_auto_wrkdate = 1 Then
  19880. Select orderdate
  19881. Into :ld_sdate_max
  19882. From u_order_ml
  19883. Where orderid = :arg_orderid
  19884. And scid = :arg_scid;
  19885. If sqlca.SQLCode <> 0 Then
  19886. rslt = 0
  19887. arg_msg = '查询生产计划或指令单计划开始日期失败'+sqlca.SQLErrText
  19888. Goto ext
  19889. End If
  19890. ld_sdate_max = DateTime(Date(ld_sdate_max),Time('8:00:00'))
  19891. If uof_order_cmp_wrk_date(arg_scid,arg_orderid,ld_sdate_max,arg_msg,False) = 0 Then
  19892. arg_msg = '计算工组日期失败,'+arg_msg
  19893. rslt = 0
  19894. Goto ext
  19895. End If
  19896. End If
  19897. //更新要求完成日期
  19898. If arg_if_olddate = 1 Then
  19899. For ll_i = 1 To cnt
  19900. Update u_ordermtrl_workgroup
  19901. Set ifjd = :ll_ifjd[ll_i],
  19902. requiredate = :ld_requiredate[ll_i],
  19903. begindate = :ld_begindate[ll_i],
  19904. OriBegindate = :ld_begindate[ll_i],
  19905. OriRequiredate = :ld_requiredate[ll_i],
  19906. lastdays = :ll_lastdays[ll_i],
  19907. lasthour = :ld_lasthour[ll_i],
  19908. dscrp = :ls_dscrp[ll_i],
  19909. rel_planid = :ll_rel_planid[ll_i],
  19910. rel_planprintid = :ll_rel_planprintid[ll_i]
  19911. Where orderid = :arg_orderid
  19912. And scid = :arg_scid
  19913. And wrkgrpid = :ll_wrkgrpid[ll_i]
  19914. And owrkgrpid = :ll_owrkgrpid[ll_i]
  19915. And wkpname = :ls_wkpname[ll_i];
  19916. If sqlca.SQLCode <> 0 Then
  19917. rslt = 0
  19918. arg_msg = '更新要求完成时间失败,原因:'+sqlca.SQLErrText
  19919. Goto ext
  19920. End If
  19921. Next
  19922. End If
  19923. If uo_cmp_datediff_wrk(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  19924. rslt = 0
  19925. Goto ext
  19926. End If
  19927. //按日期加入进度表
  19928. Delete From u_ordermtrl_wrk_jd
  19929. Where orderid = :arg_orderid
  19930. And scid = :arg_scid;
  19931. If sqlca.SQLCode <> 0 Then
  19932. rslt = 0
  19933. arg_msg = "删除工组工作量明细表相应记录操作失败"+"~n"+sqlca.SQLErrText
  19934. Goto ext
  19935. End If
  19936. j = 1
  19937. Declare cur_wrkmx_jd Cursor For
  19938. Select wrkgrpid,
  19939. owrkgrpid,
  19940. wkpname,
  19941. requiredate,
  19942. begindate,
  19943. orderqty,
  19944. workgroupid
  19945. From u_OrderMtrl_workgroup
  19946. Where orderid = :arg_orderid
  19947. And scid = :arg_scid;
  19948. Open cur_wrkmx_jd;
  19949. Fetch cur_wrkmx_jd Into :ll_wrkgrpid[j],:ll_owrkgrpid[j],
  19950. :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],
  19951. :ll_workgroupid[j];
  19952. Do While sqlca.SQLCode = 0
  19953. j++
  19954. Fetch cur_wrkmx_jd Into :ll_wrkgrpid[j],:ll_owrkgrpid[j],
  19955. :ls_wkpname[j],:ld_requiredate[j],:ld_begindate[j],:ld_orderqty[j],
  19956. :ll_workgroupid[j];
  19957. Loop
  19958. Close cur_wrkmx_jd;
  19959. cnt = j - 1
  19960. Long ll_DaysAfter
  19961. DateTime ldt_wrkdate
  19962. Decimal ld_order_wrk
  19963. For ll_i = 1 To cnt
  19964. ll_DaysAfter = DaysAfter(Date(ld_begindate[ll_i]), Date(ld_requiredate[ll_i]))
  19965. If ll_DaysAfter + 1 <> 0 Then
  19966. ld_order_wrk = ld_orderqty[ll_i] / (ll_DaysAfter + 1)
  19967. For ll_j = 1 To ll_DaysAfter + 1
  19968. ldt_wrkdate = DateTime(RelativeDate(Date(ld_begindate[ll_i]),ll_j - 1 ),Time(0))
  19969. Insert Into u_ordermtrl_wrk_jd
  19970. (scid,
  19971. orderid,
  19972. wrkgrpid,
  19973. owrkgrpid,
  19974. wkpname,
  19975. wrkdate,
  19976. orderqty,
  19977. workgroupid)
  19978. Values
  19979. (:arg_scid,
  19980. :arg_orderid,
  19981. :ll_wrkgrpid[ll_i],
  19982. :ll_owrkgrpid[ll_i],
  19983. :ls_wkpname[ll_i],
  19984. :ldt_wrkdate,
  19985. :ld_order_wrk,
  19986. :ll_workgroupid[ll_i]);
  19987. If sqlca.SQLCode <> 0 Then
  19988. rslt = 0
  19989. arg_msg = "插入工组工作量明细表失败"+"~n"+sqlca.SQLErrText
  19990. Goto ext
  19991. End If
  19992. Next
  19993. End If
  19994. Next
  19995. //if uof_auto_order_plan(arg_scid,arg_orderid,arg_msg,false) = 0 then
  19996. // rslt = 0
  19997. // goto ext
  19998. //end if
  19999. If uo_jd.uof_order_add_wrk_jd(arg_scid,arg_orderid,arg_msg,False) = 0 Then
  20000. rslt = 0
  20001. Goto ext
  20002. End If
  20003. ext:
  20004. If rslt = 0 Then
  20005. Rollback;
  20006. p_reset()
  20007. ElseIf arg_ifcommit And rslt = 1 Then
  20008. Commit;
  20009. End If
  20010. Destroy uo_jd
  20011. Destroy ds_mx
  20012. Return rslt
  20013. end function
  20014. public function integer addmxcmpl_rqacmpqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  20015. Long cnt = 0
  20016. Dec ld_orderqty,ld_rqacmpqty
  20017. String ls_mtrlname
  20018. rslt = p_getinfo(arg_scid,arg_orderid, arg_msg)
  20019. IF rslt = 0 THEN GOTO ext
  20020. IF arg_addqty = 0 THEN
  20021. arg_msg = '没有完成数量'
  20022. rslt = 0
  20023. GOTO ext
  20024. END IF
  20025. IF status <> 1 THEN
  20026. rslt = 0
  20027. arg_msg = "计划["+ordercode+"]只有在进行状态下才可以执行操作"
  20028. GOTO ext
  20029. END IF
  20030. SELECT mtrlname INTO :ls_mtrlname
  20031. FROM u_mtrldef,u_order_ml
  20032. WHERE u_order_ml.orderid = :arg_orderid
  20033. AND u_order_ml.scid = :arg_scid
  20034. And u_mtrldef.mtrlid = u_order_ml.mtrlid;
  20035. IF sqlca.SQLCode <> 0 THEN
  20036. rslt = 0
  20037. arg_msg = "查询产品操作失败"
  20038. GOTO ext
  20039. END IF
  20040. //检查是否完成
  20041. SELECT orderqty,rqacmpqty INTO :ld_orderqty,:ld_rqacmpqty
  20042. FROM u_order_ml
  20043. WHERE ( orderid = :arg_orderid )
  20044. And ( scid = :arg_scid );
  20045. IF sqlca.SQLCode <> 0 THEN
  20046. rslt = 0
  20047. arg_msg = "查询计划数和已申购数量操作失败"
  20048. GOTO ext
  20049. END IF
  20050. IF status = 1 THEN
  20051. IF ld_orderqty < arg_addqty + ld_rqacmpqty THEN
  20052. rslt = 0
  20053. arg_msg = '该计划明细产品:'+ls_mtrlname+',未申购数'+String(ld_orderqty - ld_rqacmpqty,'#,##0.00##' )+'小于本次申购数'
  20054. GOTO ext
  20055. END IF
  20056. END IF
  20057. UPDATE u_order_ml
  20058. SET rqacmpqty = rqacmpqty + :arg_addqty
  20059. WHERE ( orderid = :arg_orderid )
  20060. And ( scid = :arg_scid );
  20061. IF sqlca.SQLCode <> 0 THEN
  20062. rslt = 0
  20063. arg_msg = "更新生产计划完成数量操作失败"+"~n"+sqlca.SQLErrText
  20064. GOTO ext
  20065. END IF
  20066. ext:
  20067. IF rslt = 0 THEN
  20068. ROLLBACK;
  20069. ELSEIF arg_ifcommit And rslt = 1 THEN
  20070. COMMIT;
  20071. END IF
  20072. p_reset()
  20073. Return (rslt)
  20074. end function
  20075. public function integer addmx_sptcheckqty (long arg_scid, long arg_orderid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  20076. Long cnt = 0
  20077. //IF uo_option_ifovertask = -1000 THEN
  20078. // rslt = 0
  20079. // arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!'
  20080. // GOTO ext
  20081. //END IF
  20082. IF arg_orderid <= 0 THEN
  20083. rslt = 0
  20084. arg_msg = '错误指令单唯一码'
  20085. GOTO ext
  20086. END IF
  20087. IF arg_addqty = 0 THEN
  20088. rslt = 1
  20089. GOTO ext
  20090. END IF
  20091. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  20092. rslt = 0
  20093. GOTO ext
  20094. END IF
  20095. IF status <> 1 And status <> 5 THEN
  20096. rslt = 0
  20097. IF status <> 1 THEN
  20098. arg_msg = "指令单只有在进行状态下才可以执行质检"
  20099. ELSEIF status <> 5 THEN
  20100. arg_msg = "指令单只有在完成状态下才可以撤销质检"
  20101. END IF
  20102. GOTO ext
  20103. END IF
  20104. Decimal ld_qty,ld_sptcheckqty
  20105. Long ll_mtrlid
  20106. String ls_mtrlcode
  20107. Decimal ld_uprate,ld_upqty,ld_stopqty
  20108. SELECT u_mtrldef.mtrlcode,
  20109. u_order_ml.orderqty,
  20110. u_order_ml.sptcheckqty,
  20111. u_order_ml.stopqty,
  20112. u_order_ml.mtrlid
  20113. INTO :ls_mtrlcode,
  20114. :ld_qty,
  20115. :ld_sptcheckqty,
  20116. :ld_stopqty,
  20117. :ll_mtrlid
  20118. FROM u_mtrldef,u_order_ml
  20119. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  20120. AND u_order_ml.scid = :arg_scid
  20121. AND u_order_ml.orderid = :arg_orderid
  20122. Using sqlca;
  20123. IF sqlca.SQLCode <> 0 THEN
  20124. rslt = 0
  20125. arg_msg = '查询明细物料编码失败,'+sqlca.SQLErrText
  20126. GOTO ext
  20127. END IF
  20128. //IF uo_option_ifovertask = 1 THEN //不允许超收
  20129. IF ld_qty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN
  20130. rslt = 0
  20131. arg_msg = "物料:"+ls_mtrlcode+"未质检数量只有"+String(ld_qty - ld_sptcheckqty - ld_stopqty,'#,##0.0#########')+",不能质检"+String(arg_addqty,'#,##0.0#########')
  20132. GOTO ext
  20133. END IF
  20134. //ELSEIF uo_option_ifovertask = 3 THEN //允许超收但按比例限制
  20135. // SELECT uprate , upqty
  20136. // INTO :ld_uprate,:ld_upqty
  20137. // FROM u_mtrldef
  20138. // Where mtrlid = :ll_mtrlid;
  20139. // IF sqlca.SQLCode <> 0 THEN
  20140. // arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText
  20141. // rslt = 0
  20142. // GOTO ext
  20143. // END IF
  20144. //
  20145. // IF ld_qty * (1 + ld_uprate) + ld_upqty < ld_sptcheckqty + arg_addqty + ld_stopqty THEN
  20146. // rslt = 0
  20147. // 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#########')
  20148. // GOTO ext
  20149. // END IF
  20150. //
  20151. //END IF
  20152. IF arg_addqty < 0 And arg_addqty + ld_sptcheckqty < 0 THEN
  20153. rslt = 0
  20154. arg_msg = "物料:"+ls_mtrlcode+"已质检数量只有"+String(ld_sptcheckqty, '#,##0.0###')+",不能撤审质检数量"+String(arg_addqty,'#,##0.0#########')
  20155. GOTO ext
  20156. END IF
  20157. UPDATE u_order_ml
  20158. SET sptcheckqty = sptcheckqty + :arg_addqty
  20159. WHERE ( u_order_ml.orderid = :arg_orderid ) AND
  20160. ( u_order_ml.scid = :arg_scid) Using sqlca;
  20161. IF sqlca.SQLCode <> 0 THEN
  20162. rslt = 0
  20163. arg_msg = "因网络或错误产品唯一码导致指令单完成数量操作失败"+"~n"+sqlca.SQLErrText
  20164. GOTO ext
  20165. END IF
  20166. ext:
  20167. IF rslt = 0 THEN
  20168. ROLLBACK Using sqlca;
  20169. ELSEIF arg_ifcommit THEN
  20170. COMMIT Using sqlca;
  20171. END IF
  20172. p_reset()
  20173. Return (rslt)
  20174. end function
  20175. on uo_order_ml.create
  20176. call super::create
  20177. TriggerEvent( this, "constructor" )
  20178. end on
  20179. on uo_order_ml.destroy
  20180. TriggerEvent( this, "destructor" )
  20181. call super::destroy
  20182. end on
  20183. event constructor;arg_msg_str = ''
  20184. String str_optionvalue,arg_msg
  20185. f_get_sys_option_value('230',str_optionvalue,arg_msg)
  20186. uo_option_if_oa_order_ml = Long(str_optionvalue)
  20187. f_get_sys_option_value('225',str_optionvalue,arg_msg)
  20188. uo_option_order_ml_secaudit = Long(str_optionvalue)
  20189. f_get_sys_option_value('231',str_optionvalue,arg_msg)
  20190. uo_option_if_oa_order_zl = Long(str_optionvalue)
  20191. f_get_sys_option_value('226',str_optionvalue,arg_msg)
  20192. uo_option_order_ml_zl_secaudit = Long(str_optionvalue)
  20193. f_get_sys_option_value('074',str_optionvalue,arg_msg)
  20194. uo_option_order_bh_use_yc = Long(str_optionvalue)
  20195. f_get_sys_option_value('013',str_optionvalue,arg_msg)
  20196. uo_option_def_bom = Long(str_optionvalue)
  20197. f_get_sys_option_value('143',str_optionvalue,arg_msg)
  20198. uo_option_order_mtrlware = Long(str_optionvalue)
  20199. f_get_sys_option_value('138',str_optionvalue,arg_msg)
  20200. uo_option_inware_mtrlcuscode = Long(str_optionvalue)
  20201. f_get_sys_option_value('222',str_optionvalue,arg_msg)
  20202. uo_option_order_ml_save_reccl = Long(str_optionvalue)
  20203. f_get_sys_option_value('186',str_optionvalue,arg_msg)
  20204. uo_option_order_ml_add_use_wkp = Long(str_optionvalue)
  20205. f_get_sys_option_value('112',str_optionvalue,arg_msg)
  20206. uo_option_ifovertask_cp = Long(str_optionvalue)
  20207. f_get_sys_option_value('202',str_optionvalue,arg_msg)
  20208. uo_option_if_taskwork_acmpqty = Long(str_optionvalue)
  20209. f_get_sys_option_value('047',str_optionvalue,arg_msg)
  20210. uo_option_ml_wkp = Long(str_optionvalue)
  20211. f_get_sys_option_value('126',str_optionvalue,arg_msg)
  20212. uo_option_auto_wrkdate = Long(str_optionvalue)
  20213. f_get_sys_option_value('180',str_optionvalue,arg_msg)
  20214. uo_option_use_sc_date = Long(str_optionvalue)
  20215. f_get_sys_option_value('061',str_optionvalue,arg_msg)
  20216. uo_option_unite_order_ml = Long(str_optionvalue)
  20217. f_get_sys_option_value('071',str_optionvalue,arg_msg)
  20218. uo_option_unite_order_ml_zl = Long(str_optionvalue)
  20219. f_get_sys_option_value('065',str_optionvalue,arg_msg)
  20220. uo_option_order_ml_scll_secaudit = Long(str_optionvalue)
  20221. f_get_sys_option_value('054',str_optionvalue,arg_msg)
  20222. uo_option_autocreate_buy = Long(str_optionvalue)
  20223. f_get_sys_option_value('068',str_optionvalue,arg_msg)
  20224. uo_option_autocreate_wfjg = Long(str_optionvalue)
  20225. f_get_sys_option_value('012',str_optionvalue,arg_msg)
  20226. uo_option_def_workprice = Long(str_optionvalue)
  20227. f_get_sys_option_value('148',str_optionvalue,arg_msg)
  20228. uo_option_orderrqwp_union = Long(str_optionvalue)
  20229. f_get_sys_option_value('111',str_optionvalue,arg_msg)
  20230. uo_option_requestbuy_hz = Long(str_optionvalue)
  20231. //f_get_sys_option_value('080',str_optionvalue,arg_msg)
  20232. //uo_option_scll_rate = Long(str_optionvalue)
  20233. //
  20234. f_get_sys_option_value('160',str_optionvalue,arg_msg)
  20235. uo_option_skl_overscll = Long(str_optionvalue)
  20236. f_get_sys_option_value('197',str_optionvalue,arg_msg)
  20237. uo_option_skl_overscll_rate = Long(str_optionvalue)
  20238. f_get_sys_option_value('159',str_optionvalue,arg_msg)
  20239. uo_option_use_suliao = Long(str_optionvalue)
  20240. f_get_sys_option_value('161',str_optionvalue,arg_msg)
  20241. uo_option_management_cost = Long(str_optionvalue)
  20242. f_get_sys_option_value('162',str_optionvalue,arg_msg)
  20243. uo_option_ect_price = Long(str_optionvalue)
  20244. f_get_sys_option_value('073',str_optionvalue,arg_msg)
  20245. uo_option_order_ml_use_zl = Long(str_optionvalue)
  20246. f_get_sys_option_value('233',str_optionvalue,arg_msg)
  20247. uo_option_use_workgroup_tree = Long(str_optionvalue)
  20248. f_get_sys_option_value('234',str_optionvalue,arg_msg)
  20249. uo_option_scllaudit_autobuild = Long(str_optionvalue)
  20250. f_get_sys_option_value('239',str_optionvalue,arg_msg)
  20251. uo_option_def_mtrlwkp = Long(str_optionvalue)
  20252. f_get_sys_option_value('245',str_optionvalue,arg_msg)
  20253. uo_option_scllaudit_autobuild_tech = Long(str_optionvalue)
  20254. f_get_sys_option_value('255',str_optionvalue,arg_msg)
  20255. uo_option_auto_finish_zl = Long(str_optionvalue)
  20256. f_get_sys_option_value('270',str_optionvalue,arg_msg)
  20257. uo_option_update_lockdateflag = Long(str_optionvalue)
  20258. f_get_sys_option_value('289',str_optionvalue,arg_msg)
  20259. uo_option_packpro2_not_use_pack1 = Long(str_optionvalue)
  20260. f_get_sys_option_value('304',str_optionvalue,arg_msg)
  20261. uo_option_order_capacity = Long(str_optionvalue)
  20262. str_optionvalue = ''
  20263. f_get_sys_option_value('313',str_optionvalue,arg_msg)
  20264. uo_option_order_ml_zl_checkdate = Long(str_optionvalue)
  20265. str_optionvalue = ''
  20266. f_get_sys_option_value('316',str_optionvalue,arg_msg)
  20267. uo_option_order_zl_3_day = Long(str_optionvalue)
  20268. str_optionvalue = ''
  20269. f_get_sys_option_value('121',str_optionvalue,arg_msg)
  20270. uo_option_requestwfjg_hz = Long(str_optionvalue)
  20271. str_optionvalue = ''
  20272. f_get_sys_option_value('333',str_optionvalue,arg_msg)
  20273. uo_option_zlmtrlchange_wx_update_rqwfjg = Long(str_optionvalue)
  20274. str_optionvalue = ''
  20275. f_get_sys_option_value('340',str_optionvalue,arg_msg)
  20276. uo_option_ifpackpro2_if_no_pack2 = Long(str_optionvalue)
  20277. SELECT wrkgrpid INTO :ins_produce_wrkgrpid_bj
  20278. FROM u_sc_wkp
  20279. Where ifbj = 1;
  20280. IF sqlca.SQLCode <> 0 THEN
  20281. ins_produce_wrkgrpid_bj = 0
  20282. END IF
  20283. str_optionvalue = ''
  20284. f_get_sys_option_value('379',str_optionvalue,arg_msg)
  20285. uo_option_scll_back_check = Long(str_optionvalue)
  20286. str_optionvalue = ''
  20287. f_get_sys_option_value('383',str_optionvalue,arg_msg)
  20288. uo_option_autostop_porder = Long(str_optionvalue)
  20289. str_optionvalue = ''
  20290. f_get_sys_option_value('388',str_optionvalue,arg_msg)
  20291. uo_option_bujian_notmrpqty = Long(str_optionvalue)
  20292. str_optionvalue = ''
  20293. f_get_sys_option_value('398',str_optionvalue,arg_msg)
  20294. uo_option_orderrqwp_auditgj = Long(str_optionvalue)
  20295. str_optionvalue = ''
  20296. f_get_sys_option_value('403',str_optionvalue,arg_msg)
  20297. uo_option_order_zl_auto_getbar = Long(str_optionvalue)
  20298. str_optionvalue = ''
  20299. f_get_sys_option_value('417',str_optionvalue,arg_msg)
  20300. uo_option_canpack_ifzanyong = Long(str_optionvalue)
  20301. end event