uo_inware.sru 239 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378
  1. $PBExportHeader$uo_inware.sru
  2. forward
  3. global type uo_inware from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_inware from nonvisualobject
  7. end type
  8. global uo_inware uo_inware
  9. type variables
  10. Public ProtectedWrite Long scid = 0 //分部id
  11. Public ProtectedWrite Long inwareid //进仓单表自动增量id
  12. Public ProtectedWrite String inwarecode //单据的唯一编号
  13. Public ProtectedWrite Int billtype = 0 //业务类型
  14. //业务类型
  15. //1-采购进仓[记帐模式]
  16. //2-采购进仓[不记帐模式]
  17. //3-成品进仓
  18. //8-其他进仓
  19. //9-盘盈进仓
  20. //12-调拨入仓
  21. Public ProtectedWrite DateTime opdate //建立时间,自动
  22. Public ProtectedWrite String opemp //建立操作员
  23. Public ProtectedWrite DateTime moddate //修改时间,自动
  24. Public ProtectedWrite String modemp //修改操作员
  25. Public ProtectedWrite Int flag = 0 //仓库审核标志
  26. Public ProtectedWrite Int balcflag = 0 //仓库结存标志
  27. Public ProtectedWrite long balcdateint = 0
  28. Public ProtectedWrite DateTime auditingdate //审核时间
  29. Public ProtectedWrite String auditingrep //审核操作员
  30. Public ProtectedWrite Decimal sum_amt = 0 //单据总金额
  31. Public ProtectedWrite Decimal sum_amt_en = 0 //单据总金额
  32. Public ProtectedWrite Decimal sum_taxamt = 0 //单据税额
  33. Public ProtectedWrite Decimal sum_taxamt_en = 0 //单据税额(其它单价)
  34. Public ProtectedWrite Decimal jgsum_amt = 0 //单据加工总金额
  35. Public ProtectedWrite Int secflag = 0 //财务审核标志
  36. Public ProtectedWrite DateTime secauditingdate //二审核时间
  37. Public ProtectedWrite String secauditingrep //二审核操作员
  38. Public ProtectedWrite Long ctmint
  39. Public ProtectedWrite Int priceflag = 0
  40. Public ProtectedWrite String pricerep = ''
  41. Public ProtectedWrite DateTime pricedate
  42. Public ProtectedWrite Int fkflag = 0
  43. Public ProtectedWrite String fkemp = ''
  44. Public ProtectedWrite DateTime fkdate
  45. Long relid = 0 //关联id
  46. Long storageid = 0 //进仓仓库
  47. DateTime indate //进仓发生时间
  48. DateTime plandate //预计付款时间
  49. String inrep = '' //经手人
  50. String part = '' //相关号码
  51. String dscrp = '' //备注
  52. Long sptid = 0 //供应商id
  53. String sptname = '' //供应商名称(不记帐模式使用)
  54. Int dxflag = 0 //代销标记
  55. Int thflag = 0 //退货标记
  56. Decimal otheramt = 0 //单据费用
  57. Long relint_1 = 0
  58. Long relint_2 = 0
  59. Long relint_3 = 0
  60. String relstr_1 = ''
  61. String relstr_2 = ''
  62. String relstr_3 = ''
  63. Long moneyid = 0
  64. Decimal mrate = 1
  65. Long deptid = 0
  66. Boolean lb_ifdelauto = False
  67. Boolean if_getid_ture = True
  68. Transaction commit_transaction //数据commit事务
  69. s_inwaremx inwaremx[] //明细结构数组
  70. s_inwaremx_mx inwaremx_mx[] //明细结构数组
  71. s_inwaremx_barcode s_mx_barcode[] //明码明细结构数组
  72. s_inware_itemmx inware_itemmx[]
  73. Long it_mxbt = 0 //明细结构数组末指针
  74. Long it_mxbt_mx = 0
  75. Long it_mxbt_barcode = 0 //条码明细结构数组末指针
  76. long it_mxbt_item = 0
  77. Boolean it_newbegin = False //新建标志
  78. Boolean it_updatebegin = False //修改标志
  79. Boolean if_py_check_barcode = False //仓库不使用条码盘点时,审核单据是否检查明细数量与条码数量
  80. Boolean if_py_update_barcode = False //仓库不使用条码盘点时,审核单据更新条码状态
  81. Int uo_option_inout_type
  82. Int uo_option_barcode_inwareother_paudit,uo_option_barcode_inwarebuy_paudit,uo_option_barcode_inwarecp_paudit
  83. Int uo_option_mtrlware_dscrp
  84. Int uo_option_unit_dec
  85. Int uo_option_buy_zero,uo_option_wfjg_zero
  86. String uo_option_change_status,uo_option_change_woodcode,uo_option_change_pcode
  87. Int uo_option_ifovertask,uo_option_ifovertask_cp
  88. Int uo_option_cost_dec,uo_option_mtrlware_autocmp
  89. Int uo_option_use_clfp
  90. dec uo_option_cp_inware_scll_rate
  91. Int uo_option_barcodelocation_use_inwaremx_location
  92. int uo_option_cost_notax
  93. int uo_option_djqty_check
  94. int uo_option_canpack_ifzanyong
  95. end variables
  96. forward prototypes
  97. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg)
  98. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  99. public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg)
  100. public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg)
  101. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  102. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  103. public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg)
  104. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  105. public function integer p_clearmx ()
  106. public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg)
  107. public function integer p_reset ()
  108. public function integer p_rst_mtrlwaredscrp (long arg_scid, long arg_relid, string arg_mxdscrp, ref string arg_msg, ref string arg_ref_dscrp)
  109. public function integer p_update_mtrlware_ws (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, long arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, ref string arg_msg)
  110. public function integer uof_ref_assign_plan (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg)
  111. public function integer uof_ref_assign_plan_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg)
  112. public function integer uof_ref_assign_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign arg_s_a, ref string arg_msg)
  113. public function integer uof_ref_mtrlwareid (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_location, long arg_sptid, string arg_mtrlcuscode, ref long arg_mtrlwareid, ref string arg_msg)
  114. public function integer uof_check_barcodeqty (ref string arg_msg)
  115. public function integer uof_inbarcode_add (integer arg_billtype, long arg_scid, long arg_inwareid, long arg_printid, string arg_barcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  116. public function integer c_priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  117. public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  118. public function integer uof_check_qty_to_bqty (ref string arg_msg)
  119. public function integer uof_set_qty_equal_bqty (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  120. public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  121. public function integer uof_c_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  122. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid, decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid, string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax)
  123. public function integer uof_update_planprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, ref string arg_msg, boolean arg_ifcommit)
  124. public function integer uof_ref_assign_plan_plankind (long arg_scid, long arg_mtrlwareid, long arg_plankind, long arg_plankind_relbillid, long arg_plankind_reprintlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg)
  125. public function integer uof_del_barcode (long arg_scid, long arg_inwareid, string arg_barcode, ref string arg_msg, boolean arg_ifcommit)
  126. public function integer acceptmx_item (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg)
  127. public function integer uof_check_warepdb_audit (long arg_storageid, ref string arg_msg)
  128. public function integer p_update_mtrlwareid_inwaremx (long arg_mtrlwareid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  129. public function integer uof_disuse (long arg_scid, long arg_inwareid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit)
  130. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg)
  131. public function integer uof_check_scll_rate (long arg_scid, long arg_inwareid, long arg_printid, long arg_relid, long arg_mtrlid, decimal arg_qty, integer arg_ck_if_save_audit, ref string arg_msg)
  132. public function integer uof_p_barcode (integer arg_audittype, ref string arg_msg, s_inwaremx_barcode_fp arg_mxbarcode_fp)
  133. public function integer p_update_mtrlware (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, integer arg_ifvqty, ref string arg_msg)
  134. public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_enprice, decimal arg_jgprice, decimal arg_tax, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit)
  135. public function integer acceptmx_mx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, long arg_mxprintid, string arg_waredscrp, string arg_mtrlcuscode, string arg_location, long arg_ptinwareid, long arg_ptprintid, integer arg_ifnotinout)
  136. end prototypes
  137. public function integer newbegin (long arg_scid, integer arg_billtype, ref string arg_msg);Int rslt = 1
  138. IF arg_scid < 0 THEN
  139. arg_msg = '请选择分部'
  140. rslt = 0
  141. GOTO ext
  142. END IF
  143. IF Not (arg_billtype = 1 OR &
  144. arg_billtype = 2 OR &
  145. arg_billtype = 3 OR &
  146. arg_billtype = 4 OR &
  147. arg_billtype = 5 OR &
  148. arg_billtype = 6 OR &
  149. arg_billtype = 8 OR &
  150. arg_billtype = 9 OR &
  151. arg_billtype = 12 OR &
  152. arg_billtype = 15 OR &
  153. arg_billtype = 16 OR &
  154. arg_billtype = 17 or &
  155. arg_billtype = 18 or &
  156. arg_billtype = 19 or &
  157. arg_billtype = 20 or &
  158. arg_billtype = 21 or &
  159. arg_billtype = 22 or &
  160. arg_billtype = 23 or &
  161. arg_billtype = 24 or &
  162. arg_billtype = 25 or &
  163. arg_billtype = 26 or &
  164. arg_billtype = 27 or &
  165. arg_billtype = 28) THEN
  166. rslt = 0
  167. arg_msg = '此单据类型必须为:'
  168. arg_msg = arg_msg+'1-采购收货进仓单[记帐模式],'
  169. arg_msg = arg_msg+'2-采购收货进仓单[不记帐模式],'
  170. arg_msg = arg_msg+'3-生产进仓单,'
  171. arg_msg = arg_msg+'4-外协收货进仓单,'
  172. arg_msg = arg_msg+'5-来料加工收料进仓单,'
  173. arg_msg = arg_msg+'6-车间生产进仓单,'
  174. arg_msg = arg_msg+'8-其它进仓单,'
  175. arg_msg = arg_msg+'9-盘盈进仓单,'
  176. arg_msg = arg_msg+'12-调拨进仓单,'
  177. arg_msg = arg_msg+'15-拆装进仓单,'
  178. arg_msg = arg_msg+'16-生产领料车间自动进仓(不按计划),'
  179. arg_msg = arg_msg+'17-客户调货进仓单'
  180. arg_msg = arg_msg+'18-欠货进仓单'
  181. arg_msg = arg_msg+'19-自动组装进仓单'
  182. arg_msg = arg_msg+'20-生产领料车间自动进仓单(按计划)'
  183. arg_msg = arg_msg+'21-车间库存转换自动进仓单'
  184. arg_msg = arg_msg+'22-库存配置调整单自动进仓单'
  185. arg_msg = arg_msg+'23-销售发货单发货明细自动进仓单'
  186. arg_msg = arg_msg+'24-水口料进仓单'
  187. arg_msg = arg_msg+'25-采购收货单包件明细自动进仓单'
  188. arg_msg = arg_msg+'26-采购收货包件进仓单'
  189. arg_msg = arg_msg+'27-采购收货包件结算单'
  190. arg_msg = arg_msg+'28-员工物品归还单'
  191. GOTO ext
  192. END IF
  193. p_reset()
  194. billtype = arg_billtype
  195. scid = arg_scid
  196. it_newbegin = TRUE
  197. it_updatebegin = FALSE
  198. ext:
  199. IF rslt = 0 THEN p_reset()
  200. RETURN rslt
  201. end function
  202. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1
  203. Long cnt = 0,i,cnt_ck,j
  204. String ls_msg
  205. DateTime server_dt
  206. Long ls_newid
  207. String ls_sccode
  208. Int li_ifmrp
  209. Long ll_mtrlid_arr[]
  210. Decimal ld_qty_arr[]
  211. String ls_mtrlcode_arr[]
  212. Long ll_mxcnt = 0
  213. Decimal ld_djqty,ld_noallocqty
  214. IF uo_option_djqty_check = -1000 THEN
  215. rslt = 0
  216. arg_msg = '选项:[378]进出仓检查冻结数不能大于库存数,读取初始默认值失败,操作取消!'
  217. GOTO ext
  218. END IF
  219. IF IsNull(relid) THEN relid = 0
  220. IF IsNull(storageid) THEN storageid = 0
  221. IF IsNull(inrep) THEN inrep = ''
  222. IF IsNull(dscrp) THEN dscrp = ''
  223. IF IsNull(part) THEN part = ''
  224. IF IsNull(sptid) THEN sptid = 0
  225. IF IsNull(sptname) THEN sptname = ''
  226. IF IsNull(dxflag) THEN dxflag = 0
  227. IF IsNull(thflag) THEN thflag = 0
  228. IF IsNull(relint_1) THEN relint_1 = 0
  229. IF IsNull(relint_2) THEN relint_2 = 0
  230. IF IsNull(relint_3) THEN relint_3 = 0
  231. IF IsNull(relstr_1) THEN relstr_1 = ''
  232. IF IsNull(relstr_2) THEN relstr_2 = ''
  233. IF IsNull(relstr_3) THEN relstr_3 = ''
  234. IF IsNull(moneyid) THEN moneyid = 0
  235. IF IsNull(mrate) THEN mrate = 0
  236. IF IsNull(deptid) THEN deptid = 0
  237. IF it_newbegin = False And it_updatebegin = False THEN
  238. rslt = 0
  239. arg_msg = "非编辑状态不可以提交"
  240. GOTO ext
  241. END IF
  242. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  243. //取得系统时间,借用操作员表
  244. IF commit_transaction.SQLCode <> 0 THEN
  245. rslt = 0
  246. arg_msg = "查询操作失败,日期 "
  247. GOTO ext
  248. END IF
  249. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  250. rslt = 0
  251. arg_msg = "没有正确进仓内容"
  252. GOTO ext
  253. END IF
  254. cnt = 0
  255. //检查仓库
  256. SELECT count(*)
  257. INTO :cnt
  258. FROM u_storage
  259. Where u_storage.storageid = :storageid Using commit_transaction ;
  260. IF commit_transaction.SQLCode <> 0 THEN
  261. rslt = 0
  262. arg_msg = "查询操作失败,仓库"
  263. GOTO ext
  264. END IF
  265. IF cnt = 0 THEN
  266. rslt = 0
  267. arg_msg = "错误的仓库编号: "+String(storageid)
  268. GOTO ext
  269. END IF
  270. String ls_storagename
  271. Int li_mustloca
  272. SELECT storagename,mustloca,ifmrp
  273. INTO :ls_storagename,:li_mustloca,:li_ifmrp
  274. FROM u_storage
  275. Where storageid = :storageid Using commit_transaction ;
  276. IF commit_transaction.SQLCode <> 0 THEN
  277. rslt = 0
  278. arg_msg = "查询操作失败,仓库"
  279. GOTO ext
  280. END IF
  281. //检查是否有该仓库的建立权限
  282. IF Not (billtype = 16 Or billtype = 20) THEN
  283. IF sys_user_storagestr_new <> '0' THEN
  284. IF Pos(sys_user_storagestr_new,','+String(storageid)+',') <= 0 THEN
  285. rslt = 0
  286. arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许建立该仓库的单据'
  287. GOTO ext
  288. END IF
  289. END IF
  290. END IF
  291. //
  292. String ls_msg_loca
  293. Long ll_cnt_loca
  294. ll_cnt_loca = 0
  295. IF li_mustloca = 1 And thflag = 0 And billtype <> 23 THEN
  296. FOR i = 1 To it_mxbt
  297. IF Trim(inwaremx[i].Location) = '' THEN
  298. ll_cnt_loca++
  299. IF ll_cnt_loca <= 10 THEN
  300. IF Trim(ls_msg_loca) = '' THEN
  301. ls_msg_loca = ls_msg_loca + String(i)
  302. ELSE
  303. ls_msg_loca = ls_msg_loca + ','+String(i)
  304. END IF
  305. END IF
  306. END IF
  307. NEXT
  308. IF ll_cnt_loca > 0 THEN
  309. rslt = 0
  310. IF ll_cnt_loca <= 10 THEN
  311. arg_msg = '仓库属性已设为仓位必填'+'~r~n'+'明细中第'+ls_msg_loca+'行没有填仓位,请检查'
  312. ELSE
  313. arg_msg = '仓库属性已设为仓位必填'+'~r~n'+'其中第'+ls_msg_loca+'等'+String(ll_cnt_loca)+'行明细没有填仓位,请详细检查'
  314. END IF
  315. GOTO ext
  316. END IF
  317. END IF
  318. IF Year(Date(indate)) < 2000 Or IsNull(indate) THEN
  319. rslt = 0
  320. arg_msg = "缺少进仓发生时间或不合理"
  321. GOTO ext
  322. END IF
  323. Boolean lb_chk_balc = True
  324. IF sys_option_warebalc_checksale = 0 And billtype = 23 THEN //临时的,详见系统选项152
  325. lb_chk_balc = False
  326. END IF
  327. IF f_check_inoutdate(storageid,indate,lb_chk_balc,arg_msg) = 0 THEN
  328. rslt = 0
  329. GOTO ext
  330. END IF
  331. IF billtype = 1 Or billtype = 4 Or billtype = 26 Or billtype = 27 THEN
  332. SELECT name INTO :sptname
  333. FROM u_spt
  334. Where sptid = :sptid Using commit_transaction;
  335. IF commit_transaction.SQLCode <> 0 THEN
  336. rslt = 0
  337. arg_msg = "查询操作失败,供应商资料"
  338. GOTO ext
  339. END IF
  340. IF billtype = 1 THEN
  341. cnt = 0
  342. SELECT count(*) INTO :cnt
  343. FROM cw_currency
  344. Where moneyid = :moneyid Using commit_transaction;
  345. IF commit_transaction.SQLCode <> 0 THEN
  346. arg_msg = '查询币种失败'
  347. rslt = 0
  348. GOTO ext
  349. END IF
  350. IF cnt = 0 THEN
  351. arg_msg = '币种资料不存在'
  352. rslt = 0
  353. GOTO ext
  354. END IF
  355. IF mrate = 0 THEN
  356. arg_msg = '币种汇率错误'
  357. rslt = 0
  358. GOTO ext
  359. END IF
  360. END IF
  361. IF billtype = 1 Or billtype = 27 THEN
  362. // IF relint_1 = 0 THEN
  363. // arg_msg = '请选择结算方式'
  364. // rslt = 0
  365. // GOTO ext
  366. // END IF
  367. plandate = f_findspt_paydate(sptid,indate)
  368. END IF
  369. ELSEIF billtype = 5 THEN //来料加工收料单
  370. SELECT name INTO :sptname
  371. FROM u_cust
  372. Where cusid = :sptid Using commit_transaction;
  373. IF commit_transaction.SQLCode <> 0 THEN
  374. rslt = 0
  375. arg_msg = "查询操作失败,客户资料"
  376. GOTO ext
  377. END IF
  378. ELSEIF billtype = 6 THEN //车间生产进仓单
  379. IF relid = 0 THEN
  380. arg_msg = '请选择车间'
  381. rslt = 0
  382. GOTO ext
  383. END IF
  384. Long ll_storageid_ws
  385. SELECT storageid INTO :ll_storageid_ws
  386. FROM u_sc_wkp
  387. Where wrkGrpid = :relid Using commit_transaction;
  388. IF commit_transaction.SQLCode <> 0 THEN
  389. rslt = 0
  390. arg_msg = "查询操作车间对应仓库资料失败,"+commit_transaction.SQLErrText
  391. GOTO ext
  392. END IF
  393. IF ll_storageid_ws <> storageid THEN
  394. rslt = 0
  395. arg_msg = "车间对应仓库资料与单据仓库资料不相符,请检查"
  396. GOTO ext
  397. END IF
  398. ELSEIF billtype = 8 THEN
  399. IF Trim(sptname) = '' Or IsNull(sptname) THEN
  400. rslt = 0
  401. arg_msg = "请输入进仓原因!"
  402. GOTO ext
  403. END IF
  404. END IF
  405. IF billtype = 3 THEN
  406. IF uo_option_cp_inware_scll_rate = 2 THEN
  407. FOR i = 1 To it_mxbt
  408. IF inwaremx[i].relid > 0 THEN
  409. IF uof_check_scll_rate(scid,inwareid,inwaremx[i].printid,inwaremx[i].relid,inwaremx[i].mtrlid,inwaremx[i].qty,0,arg_msg) = 0 THEN
  410. cnt_ck++
  411. ls_msg += '行:'+String(i)+',指令单号:'+inwaremx[i].relcode + ','+arg_msg+'~r~n'
  412. END IF
  413. END IF
  414. NEXT
  415. IF cnt_ck > 0 THEN
  416. arg_msg = ls_msg
  417. rslt = 0
  418. GOTO ext
  419. END IF
  420. END IF
  421. END IF
  422. //如果是修改,则增加到废弃单
  423. IF billtype = 1 And inwareid > 0 And sys_option_disuse_inware_buy = 1 THEN
  424. IF uof_disuse(scid,inwareid,0,arg_msg,False) = 0 THEN
  425. rslt = 0
  426. GOTO ext
  427. END IF
  428. END IF
  429. //检查冻结数
  430. IF uo_option_djqty_check = 1 And li_ifmrp = 1 THEN
  431. FOR i = 1 To it_mxbt
  432. FOR j = 1 To ll_mxcnt
  433. IF inwaremx[i].mtrlid = ll_mtrlid_arr[j] THEN
  434. ld_qty_arr[j] = ld_qty_arr[j] + inwaremx[i].qty
  435. GOTO _next_mx
  436. END IF
  437. NEXT
  438. ll_mxcnt++
  439. ll_mtrlid_arr[ll_mxcnt] = inwaremx[i].mtrlid
  440. ld_qty_arr[ll_mxcnt] = inwaremx[i].qty
  441. ls_mtrlcode_arr[ll_mxcnt] = inwaremx[i].mtrlcode
  442. _next_mx:
  443. NEXT
  444. FOR i = 1 To ll_mxcnt
  445. SELECT SUM(u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) )
  446. INTO :ld_djqty
  447. FROM u_OrderRqMtrl_scll INNER JOIN
  448. u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID LEFT OUTER JOIN
  449. uv_outware_scll_back ON u_OrderRqMtrl_scll.scid = uv_outware_scll_back.scid AND
  450. u_OrderRqMtrl_scll.OrderID = uv_outware_scll_back.relid AND
  451. u_OrderRqMtrl_scll.MtrlID = uv_outware_scll_back.mtrlid AND
  452. u_OrderRqMtrl_scll.status = uv_outware_scll_back.status AND
  453. u_OrderRqMtrl_scll.woodcode = uv_outware_scll_back.woodcode AND
  454. u_OrderRqMtrl_scll.pcode = uv_outware_scll_back.pcode
  455. WHERE (u_OrderRqMtrl_scll.wareqty <> 0) AND (u_Order_ml.Status NOT IN (3,5,6))
  456. AND u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) > 0
  457. AND u_OrderRqMtrl_scll.MtrlID = :ll_mtrlid_arr[i]
  458. And u_OrderRqMtrl_scll.scid = :scid Using commit_transaction;
  459. IF commit_transaction.SQLCode <> 0 THEN
  460. ld_djqty = 0
  461. END IF
  462. IF IsNull(ld_djqty) THEN ld_djqty = 0
  463. SELECT SUM(u_mtrlware.noallocqty)
  464. INTO :ld_noallocqty
  465. FROM u_mtrlware INNER JOIN
  466. u_storage ON u_mtrlware.storageid = u_storage.storageid
  467. WHERE (u_storage.inuse = 1)
  468. AND u_storage.ifmrp = 1
  469. AND u_mtrlware.mtrlid = :ll_mtrlid_arr[i]
  470. And u_mtrlware.scid = :scid Using commit_transaction;
  471. IF commit_transaction.SQLCode <> 0 THEN
  472. ld_noallocqty = 0
  473. END IF
  474. IF IsNull(ld_noallocqty) THEN ld_noallocqty = 0
  475. IF ld_djqty > ld_noallocqty + ld_qty_arr[i] THEN
  476. rslt = 0
  477. arg_msg = '物料['+ls_mtrlcode_arr[i]+']冻结数不能大于库存数,冻结数:'+String(ld_djqty,'#,##0.##########')+',库存数:'+String(ld_noallocqty,'#,##0.##########')+',本次进仓数:'+String(ld_qty_arr[i],'#,##0.##########')
  478. GOTO ext
  479. END IF
  480. NEXT
  481. END IF
  482. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  483. IF inwareid = 0 THEN //新建
  484. ls_newid = f_sys_scidentity(scid,"u_inware","inwareid",arg_msg,True,id_sqlca)
  485. IF ls_newid <= 0 THEN
  486. rslt = 0
  487. GOTO ext
  488. END IF
  489. //取分部代号
  490. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  491. rslt = 0
  492. GOTO ext
  493. END IF
  494. //取得新单据编号
  495. CHOOSE CASE billtype
  496. CASE 1,2
  497. IF thflag = 0 THEN
  498. inwarecode = getid(scid,ls_sccode + 'CG',Date(server_dt),if_getid_ture,commit_transaction)
  499. ELSE
  500. inwarecode = getid(scid,ls_sccode + 'CT',Date(server_dt),if_getid_ture,commit_transaction)
  501. END IF
  502. CASE 3
  503. IF relint_2 = 0 THEN
  504. inwarecode = getid(scid,ls_sccode + 'CP',Date(server_dt),if_getid_ture,commit_transaction)
  505. ELSEIF relint_2 = 1 THEN
  506. inwarecode = getid(scid,ls_sccode + 'CF',Date(server_dt),if_getid_ture,commit_transaction)
  507. END IF
  508. CASE 4
  509. IF thflag = 0 THEN
  510. inwarecode = getid(scid,ls_sccode + 'WN',Date(server_dt),if_getid_ture,commit_transaction)
  511. ELSE
  512. inwarecode = getid(scid,ls_sccode + 'WH',Date(server_dt),if_getid_ture,commit_transaction)
  513. END IF
  514. CASE 5
  515. IF thflag = 0 THEN
  516. inwarecode = getid(scid,ls_sccode + 'JI',Date(server_dt),if_getid_ture,commit_transaction)
  517. ELSE
  518. inwarecode = getid(scid,ls_sccode + 'JT',Date(server_dt),if_getid_ture,commit_transaction)
  519. END IF
  520. CASE 6
  521. inwarecode = getid(scid,ls_sccode + 'WP',Date(server_dt),if_getid_ture,commit_transaction)
  522. CASE 8
  523. inwarecode = getid(scid,ls_sccode + 'JC',Date(server_dt),if_getid_ture,commit_transaction)
  524. CASE 9
  525. inwarecode = getid(scid,ls_sccode + 'PY',Date(server_dt),if_getid_ture,commit_transaction)
  526. CASE 12
  527. inwarecode = getid(scid,ls_sccode + 'IC',Date(server_dt),if_getid_ture,commit_transaction)
  528. CASE 15
  529. inwarecode = getid(scid,ls_sccode + 'DC',Date(server_dt),if_getid_ture,commit_transaction)
  530. CASE 16
  531. inwarecode = getid(scid,ls_sccode + 'LI',Date(server_dt),if_getid_ture,commit_transaction)
  532. CASE 17
  533. inwarecode = getid(scid,ls_sccode + 'MI',Date(server_dt),if_getid_ture,commit_transaction)
  534. CASE 18
  535. inwarecode = getid(scid,ls_sccode + 'OI',Date(server_dt),if_getid_ture,commit_transaction)
  536. CASE 19
  537. inwarecode = getid(scid,ls_sccode + 'IA',Date(server_dt),if_getid_ture,commit_transaction)
  538. CASE 20
  539. inwarecode = getid(scid,ls_sccode + 'CI',Date(server_dt),if_getid_ture,commit_transaction)
  540. CASE 21
  541. inwarecode = getid(scid,ls_sccode + 'IW',Date(server_dt),if_getid_ture,commit_transaction)
  542. CASE 22
  543. inwarecode = getid(scid,ls_sccode + 'TI',Date(server_dt),if_getid_ture,commit_transaction)
  544. CASE 23
  545. inwarecode = getid(scid,ls_sccode + 'BI',Date(server_dt),if_getid_ture,commit_transaction)
  546. CASE 24
  547. inwarecode = getid(scid,ls_sccode + 'KJ',Date(server_dt),if_getid_ture,commit_transaction)
  548. CASE 25
  549. inwarecode = getid(scid,ls_sccode + 'HI',Date(server_dt),if_getid_ture,commit_transaction)
  550. CASE 26
  551. inwarecode = getid(scid,ls_sccode + 'BP',Date(server_dt),if_getid_ture,commit_transaction)
  552. CASE 27
  553. inwarecode = getid(scid,ls_sccode + 'CJ',Date(server_dt),if_getid_ture,commit_transaction)
  554. CASE 28
  555. inwarecode = getid(scid,ls_sccode + 'GH',Date(server_dt),if_getid_ture,commit_transaction)
  556. END CHOOSE
  557. IF inwarecode = "err" Or inwarecode = '' THEN
  558. inwarecode = ''
  559. rslt = 0
  560. arg_msg = "无法获取进仓单编号"+"~n"+commit_transaction.SQLErrText
  561. GOTO ext
  562. END IF
  563. INSERT INTO u_inware (
  564. scid,
  565. inwareid,
  566. inwarecode,
  567. billtype,
  568. relid,
  569. storageid,
  570. indate,
  571. plandate,
  572. inrep,
  573. part,
  574. dscrp,
  575. sptid,
  576. sptname,
  577. thflag,
  578. dxflag,
  579. otheramt,
  580. opdate,
  581. opemp,
  582. relint_1,
  583. relint_2,
  584. relint_3,
  585. relstr_1,
  586. relstr_2,
  587. relstr_3,
  588. moneyid,
  589. mrate,
  590. deptid)
  591. VALUES (
  592. :scid,
  593. :ls_newid,
  594. :inwarecode,
  595. :billtype,
  596. :relid,
  597. :storageid,
  598. :indate,
  599. :plandate,
  600. :inrep,
  601. :part,
  602. :dscrp,
  603. :sptid,
  604. :sptname,
  605. :thflag,
  606. :dxflag,
  607. :otheramt,
  608. :server_dt,
  609. :publ_operator,
  610. :relint_1,
  611. :relint_2,
  612. :relint_3,
  613. :relstr_1,
  614. :relstr_2,
  615. :relstr_3,
  616. :moneyid,
  617. :mrate,
  618. :deptid) Using commit_transaction ;
  619. IF commit_transaction.SQLCode <> 0 THEN
  620. rslt = 0
  621. arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText
  622. GOTO ext
  623. END IF
  624. //读取新inwareid
  625. inwareid = ls_newid
  626. FOR i = 1 To it_mxbt
  627. INSERT INTO u_inwaremx
  628. (scid,
  629. inwareid,
  630. printid,
  631. mtrlid,
  632. plancode,
  633. status,
  634. qty,
  635. fprice,
  636. rebate,
  637. price,
  638. planprice,
  639. mxdscrp,
  640. jgprice,
  641. relid,
  642. ifrel,
  643. woodcode,
  644. relcode,
  645. pcode,
  646. sptid_cusid,
  647. cost,
  648. sptmtrlname,
  649. unit,
  650. rate,
  651. uprice,
  652. uqty,
  653. bootqty,
  654. noauditqty,
  655. relprintid,
  656. checkqty,
  657. result,
  658. waredscrp,
  659. relbillid,
  660. relbillprintid,
  661. relbillcode,
  662. mtrlcuscode,
  663. location,
  664. enprice,
  665. capacity,
  666. enprice_tax,
  667. enprice_notax,
  668. deliqty,
  669. tax,
  670. deliprice_notax,
  671. newprice,
  672. Thptype,
  673. jgdscrp,
  674. ifvqty,
  675. ifnotinout)
  676. VALUES (
  677. :scid,
  678. :ls_newid,
  679. :inwaremx[i].printid,
  680. :inwaremx[i].mtrlid,
  681. :inwaremx[i].plancode,
  682. :inwaremx[i].status,
  683. :inwaremx[i].qty,
  684. :inwaremx[i].fprice,
  685. :inwaremx[i].rebate,
  686. :inwaremx[i].price,
  687. :inwaremx[i].planprice,
  688. :inwaremx[i].mxdscrp,
  689. :inwaremx[i].jgprice,
  690. :inwaremx[i].relid,
  691. :inwaremx[i].ifrel,
  692. :inwaremx[i].woodcode,
  693. :inwaremx[i].relcode,
  694. :inwaremx[i].pcode,
  695. :inwaremx[i].sptid,
  696. :inwaremx[i].cost,
  697. :inwaremx[i].sptmtrlname,
  698. :inwaremx[i].unit,
  699. :inwaremx[i].rate,
  700. :inwaremx[i].uprice,
  701. :inwaremx[i].uqty,
  702. :inwaremx[i].bootqty,
  703. :inwaremx[i].noauditqty,
  704. :inwaremx[i].relprintid,
  705. :inwaremx[i].checkqty,
  706. :inwaremx[i].result,
  707. :inwaremx[i].waredscrp,
  708. :inwaremx[i].relbillid,
  709. :inwaremx[i].relbillprintid,
  710. :inwaremx[i].relbillcode,
  711. :inwaremx[i].mtrlcuscode,
  712. :inwaremx[i].Location,
  713. :inwaremx[i].enprice,
  714. :inwaremx[i].capacity,
  715. :inwaremx[i].enprice_tax,
  716. :inwaremx[i].enprice_notax,
  717. :inwaremx[i].deliqty,
  718. :inwaremx[i].tax,
  719. :inwaremx[i].deliprice_notax,
  720. :inwaremx[i].newprice,
  721. :inwaremx[i].Thptype,
  722. :inwaremx[i].jgdscrp,
  723. :inwaremx[i].ifvqty,
  724. :inwaremx[i].ifnotinout) Using commit_transaction;
  725. IF commit_transaction.SQLCode <> 0 THEN
  726. inwareid = 0 //还原inwareid
  727. rslt = 0
  728. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  729. GOTO ext
  730. END IF
  731. NEXT
  732. FOR i = 1 To it_mxbt_mx
  733. INSERT INTO u_inwaremx_mx
  734. (scid,
  735. inwareid,
  736. printid,
  737. mtrlid,
  738. plancode,
  739. status,
  740. qty,
  741. fprice,
  742. rebate,
  743. price,
  744. mxdscrp,
  745. woodcode,
  746. pcode,
  747. sptid_cusid,
  748. mxprintid,
  749. waredscrp,
  750. mtrlcuscode,
  751. location,
  752. ptinwareid,
  753. ptprintid,
  754. ptinwarecode,
  755. ifnotinout)
  756. VALUES (
  757. :scid,
  758. :ls_newid,
  759. :inwaremx_mx[i].printid,
  760. :inwaremx_mx[i].mtrlid,
  761. :inwaremx_mx[i].plancode,
  762. :inwaremx_mx[i].status,
  763. :inwaremx_mx[i].qty,
  764. :inwaremx_mx[i].fprice,
  765. :inwaremx_mx[i].rebate,
  766. :inwaremx_mx[i].price,
  767. :inwaremx_mx[i].mxdscrp,
  768. :inwaremx_mx[i].woodcode,
  769. :inwaremx_mx[i].pcode,
  770. :inwaremx_mx[i].sptid,
  771. :inwaremx_mx[i].mxprintid,
  772. :inwaremx_mx[i].waredscrp,
  773. :inwaremx_mx[i].mtrlcuscode,
  774. :inwaremx_mx[i].Location,
  775. :inwaremx_mx[i].ptinwareid,
  776. :inwaremx_mx[i].ptprintid,
  777. :inwaremx_mx[i].ptinwarecode,
  778. :inwaremx_mx[i].ifnotinout) Using commit_transaction;
  779. IF commit_transaction.SQLCode <> 0 THEN
  780. inwareid = 0 //还原inwareid
  781. rslt = 0
  782. arg_msg = "因网络或其它原因导致插入包件明细操作失败"+"~n"+commit_transaction.SQLErrText
  783. GOTO ext
  784. END IF
  785. NEXT
  786. FOR i = 1 To it_mxbt_item
  787. INSERT INTO u_inware_itemmx
  788. (scid,
  789. inwareid,
  790. printid,
  791. itemid,
  792. amt,
  793. mxdscrp)
  794. VALUES (:scid,
  795. :ls_newid,
  796. :inware_itemmx[i].printid,
  797. :inware_itemmx[i].itemid,
  798. :inware_itemmx[i].amt,
  799. :inware_itemmx[i].mxdscrp) Using commit_transaction;
  800. IF commit_transaction.SQLCode <> 0 THEN
  801. inwareid = 0 //还原taskid
  802. rslt = 0
  803. arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  804. GOTO ext
  805. END IF
  806. NEXT
  807. ELSE //////////////////////////////////////////////// //更新
  808. UPDATE u_inware
  809. SET billtype = :billtype,
  810. relid = :relid,
  811. storageid = :storageid,
  812. indate = :indate,
  813. plandate = :plandate,
  814. inrep = :inrep,
  815. part = :part,
  816. dscrp = :dscrp,
  817. sptid = :sptid,
  818. sptname = :sptname,
  819. thflag = :thflag,
  820. dxflag = :dxflag,
  821. otheramt = :otheramt,
  822. moddate = :server_dt,
  823. modemp = :publ_operator,
  824. relint_1 = :relint_1,
  825. relint_2 = :relint_2,
  826. relint_3 = :relint_3,
  827. relstr_1 = :relstr_1,
  828. relstr_2 = :relstr_2,
  829. relstr_3 = :relstr_3,
  830. moneyid = :moneyid,
  831. mrate = :mrate,
  832. deptid = :deptid
  833. WHERE u_inware.inwareid = :inwareid
  834. AND u_inware.scid = :scid
  835. And flag = 0 Using commit_transaction;
  836. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  837. rslt = 0
  838. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText
  839. GOTO ext
  840. END IF
  841. //删除原有明细
  842. DELETE FROM u_inwaremx
  843. WHERE u_inwaremx.inwareid = :inwareid
  844. And u_inwaremx.scid = :scid Using commit_transaction;
  845. IF commit_transaction.SQLCode <> 0 THEN
  846. rslt = 0
  847. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  848. GOTO ext
  849. END IF
  850. FOR i = 1 To it_mxbt
  851. INSERT INTO u_inwaremx
  852. (scid,
  853. inwareid,
  854. printid,
  855. mtrlid,
  856. plancode,
  857. status,
  858. qty,
  859. fprice,
  860. rebate,
  861. price,
  862. planprice,
  863. mxdscrp,
  864. jgprice,
  865. relid,
  866. ifrel,
  867. woodcode,
  868. relcode,
  869. pcode,
  870. sptid_cusid,
  871. cost,
  872. sptmtrlname,
  873. unit,
  874. rate,
  875. uprice,
  876. uqty,
  877. bootqty,
  878. noauditqty,
  879. relprintid,
  880. checkqty,
  881. result,
  882. waredscrp,
  883. relbillid,
  884. relbillprintid,
  885. relbillcode,
  886. mtrlcuscode,
  887. location,
  888. enprice,
  889. capacity,
  890. enprice_tax,
  891. enprice_notax,
  892. deliqty,
  893. tax,
  894. deliprice_notax,
  895. newprice,
  896. Thptype,
  897. jgdscrp,
  898. ifvqty,
  899. ifnotinout)
  900. VALUES (
  901. :scid,
  902. :inwareid,
  903. :inwaremx[i].printid,
  904. :inwaremx[i].mtrlid,
  905. :inwaremx[i].plancode,
  906. :inwaremx[i].status,
  907. :inwaremx[i].qty,
  908. :inwaremx[i].fprice,
  909. :inwaremx[i].rebate,
  910. :inwaremx[i].price,
  911. :inwaremx[i].planprice,
  912. :inwaremx[i].mxdscrp,
  913. :inwaremx[i].jgprice,
  914. :inwaremx[i].relid,
  915. :inwaremx[i].ifrel,
  916. :inwaremx[i].woodcode,
  917. :inwaremx[i].relcode,
  918. :inwaremx[i].pcode,
  919. :inwaremx[i].sptid,
  920. :inwaremx[i].cost,
  921. :inwaremx[i].sptmtrlname,
  922. :inwaremx[i].unit,
  923. :inwaremx[i].rate,
  924. :inwaremx[i].uprice,
  925. :inwaremx[i].uqty,
  926. :inwaremx[i].bootqty,
  927. :inwaremx[i].noauditqty,
  928. :inwaremx[i].relprintid,
  929. :inwaremx[i].checkqty,
  930. :inwaremx[i].result,
  931. :inwaremx[i].waredscrp,
  932. :inwaremx[i].relbillid,
  933. :inwaremx[i].relbillprintid,
  934. :inwaremx[i].relbillcode,
  935. :inwaremx[i].mtrlcuscode,
  936. :inwaremx[i].Location,
  937. :inwaremx[i].enprice,
  938. :inwaremx[i].capacity,
  939. :inwaremx[i].enprice_tax,
  940. :inwaremx[i].enprice_notax,
  941. :inwaremx[i].deliqty,
  942. :inwaremx[i].tax,
  943. :inwaremx[i].deliprice_notax,
  944. :inwaremx[i].newprice,
  945. :inwaremx[i].Thptype,
  946. :inwaremx[i].jgdscrp,
  947. :inwaremx[i].ifvqty,
  948. :inwaremx[i].ifnotinout) Using commit_transaction;
  949. IF commit_transaction.SQLCode <> 0 THEN
  950. rslt = 0
  951. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  952. GOTO ext
  953. END IF
  954. NEXT
  955. //删除原有明细
  956. DELETE FROM u_inwaremx_mx
  957. WHERE u_inwaremx_mx.inwareid = :inwareid
  958. And u_inwaremx_mx.scid = :scid Using commit_transaction;
  959. IF commit_transaction.SQLCode <> 0 THEN
  960. rslt = 0
  961. arg_msg = "删除旧有包件明细操作失败"+"~n"+commit_transaction.SQLErrText
  962. GOTO ext
  963. END IF
  964. FOR i = 1 To it_mxbt_mx
  965. INSERT INTO u_inwaremx_mx
  966. (scid,
  967. inwareid,
  968. printid,
  969. mtrlid,
  970. plancode,
  971. status,
  972. qty,
  973. fprice,
  974. rebate,
  975. price,
  976. mxdscrp,
  977. woodcode,
  978. pcode,
  979. sptid_cusid,
  980. mxprintid,
  981. waredscrp,
  982. mtrlcuscode,
  983. location,
  984. ptinwareid,
  985. ptprintid,
  986. ptinwarecode,
  987. ifnotinout)
  988. VALUES (
  989. :scid,
  990. :inwareid,
  991. :inwaremx_mx[i].printid,
  992. :inwaremx_mx[i].mtrlid,
  993. :inwaremx_mx[i].plancode,
  994. :inwaremx_mx[i].status,
  995. :inwaremx_mx[i].qty,
  996. :inwaremx_mx[i].fprice,
  997. :inwaremx_mx[i].rebate,
  998. :inwaremx_mx[i].price,
  999. :inwaremx_mx[i].mxdscrp,
  1000. :inwaremx_mx[i].woodcode,
  1001. :inwaremx_mx[i].pcode,
  1002. :inwaremx_mx[i].sptid,
  1003. :inwaremx_mx[i].mxprintid,
  1004. :inwaremx_mx[i].waredscrp,
  1005. :inwaremx_mx[i].mtrlcuscode,
  1006. :inwaremx_mx[i].Location,
  1007. :inwaremx_mx[i].ptinwareid,
  1008. :inwaremx_mx[i].ptprintid,
  1009. :inwaremx_mx[i].ptinwarecode,
  1010. :inwaremx_mx[i].ifnotinout) Using commit_transaction;
  1011. IF commit_transaction.SQLCode <> 0 THEN
  1012. rslt = 0
  1013. arg_msg = "因网络或其它原因导致插入包件明细操作失败"+"~n"+commit_transaction.SQLErrText
  1014. GOTO ext
  1015. END IF
  1016. NEXT
  1017. DELETE FROM u_inware_itemmx
  1018. WHERE u_inware_itemmx.inwareid = :inwareid
  1019. And u_inware_itemmx.scid = :scid Using commit_transaction;
  1020. IF commit_transaction.SQLCode <> 0 THEN
  1021. rslt = 0
  1022. arg_msg = "删除原有费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  1023. GOTO ext
  1024. END IF
  1025. FOR i = 1 To it_mxbt_item
  1026. INSERT INTO u_inware_itemmx
  1027. (scid,
  1028. inwareid,
  1029. printid,
  1030. itemid,
  1031. amt,
  1032. mxdscrp)
  1033. VALUES (:scid,
  1034. :inwareid,
  1035. :inware_itemmx[i].printid,
  1036. :inware_itemmx[i].itemid,
  1037. :inware_itemmx[i].amt,
  1038. :inware_itemmx[i].mxdscrp) Using commit_transaction;
  1039. IF commit_transaction.SQLCode <> 0 THEN
  1040. rslt = 0
  1041. arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  1042. GOTO ext
  1043. END IF
  1044. NEXT
  1045. END IF
  1046. it_newbegin = False
  1047. it_updatebegin = False
  1048. ext:
  1049. IF rslt = 0 THEN
  1050. ROLLBACK Using commit_transaction;
  1051. p_clearmx()
  1052. ELSEIF rslt = 1 And arg_ifcommit THEN
  1053. COMMIT Using commit_transaction;
  1054. END IF
  1055. RETURN rslt
  1056. end function
  1057. public function integer getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//getinfo(arg_scid,arg_inwareid,arg_msg)
  1058. //0 失败 1成功
  1059. Int rslt = 1
  1060. Int li_outtype
  1061. Long i = 1,j = 1,k = 1,l = 1
  1062. Long no_mxcheck,no_mxcheck_barcode
  1063. jgsum_amt = 0
  1064. sum_amt = 0
  1065. sum_amt_en = 0
  1066. sum_taxamt = 0
  1067. sum_taxamt_en = 0
  1068. IF arg_inwareid <= 0 THEN
  1069. rslt = 0
  1070. arg_msg = "非法进仓单唯一码"
  1071. GOTO ext
  1072. END IF
  1073. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1074. IF rslt = 0 THEN GOTO ext
  1075. SELECT outtype
  1076. INTO :li_outtype
  1077. FROM u_storage
  1078. Where storageid = :storageid Using commit_transaction ;
  1079. IF commit_transaction.SQLCode <> 0 THEN
  1080. rslt = 0
  1081. arg_msg = "查询操作失败,仓库出仓类型,"+commit_transaction.SQLErrText
  1082. GOTO ext
  1083. END IF
  1084. //用游标读取明细
  1085. DECLARE cur_inwaermx CURSOR FOR
  1086. SELECT u_inwaremx.printid,
  1087. u_inwaremx.mtrlid,
  1088. u_inwaremx.plancode,
  1089. u_inwaremx.status,
  1090. u_inwaremx.qty,
  1091. u_inwaremx.fprice,
  1092. u_inwaremx.rebate,
  1093. u_inwaremx.price,
  1094. u_inwaremx.planprice,
  1095. u_inwaremx.mxdscrp,
  1096. u_mtrldef.mtrlcode,
  1097. u_inwaremx.jgprice,
  1098. u_inwaremx.relid,
  1099. u_inwaremx.ifrel,
  1100. u_inwaremx.woodcode,
  1101. u_inwaremx.pcode,
  1102. u_inwaremx.plancode,
  1103. case when :dxflag = 1 then sptid else u_inwaremx.sptid_cusid END,
  1104. u_inwaremx.cost,
  1105. u_inwaremx.sptmtrlname,
  1106. u_inwaremx.unit,
  1107. u_inwaremx.uqty,
  1108. u_inwaremx.uprice,
  1109. u_inwaremx.rate,
  1110. u_inwaremx.bootqty,
  1111. u_inwaremx.noauditqty,
  1112. u_inwaremx.relprintid,
  1113. u_inwaremx.checkqty,
  1114. u_inwaremx.result,
  1115. u_inwaremx.waredscrp,
  1116. u_inwaremx.relbillid,
  1117. u_inwaremx.relbillprintid,
  1118. u_inwaremx.relbillcode,
  1119. u_inwaremx.mtrlcuscode,
  1120. u_inwaremx.location,
  1121. u_mtrldef.ifpackpro,
  1122. u_mtrldef.ifpack,
  1123. u_mtrldef.outtype,
  1124. u_inwaremx.enprice,
  1125. u_inwaremx.capacity,
  1126. u_mtrldef.ordertype,
  1127. u_inwaremx.enprice_tax,
  1128. u_inwaremx.enprice_notax,
  1129. u_inwaremx.deliqty,
  1130. u_inwaremx.tax,
  1131. u_inwaremx.deliprice_notax,
  1132. u_mtrldef.iffp,
  1133. :dxflag,
  1134. u_inwaremx.Thptype,
  1135. u_inwaremx.jgdscrp,
  1136. u_inwaremx.relcode,
  1137. u_inwaremx.ifvqty,
  1138. u_inwaremx.ifnotinout,
  1139. u_inwaremx.mtrlwareid
  1140. FROM u_inwaremx,u_mtrldef,u_inware
  1141. WHERE u_inware.inwareid = :arg_inwareid AND
  1142. u_inwaremx.mtrlid = u_mtrldef.mtrlid AND
  1143. u_inware.scid = :arg_scid AND
  1144. u_inware.inwareid = u_inwaremx.inwareid AND
  1145. u_inware.scid = u_inwaremx.scid
  1146. Order By u_inwaremx.printid Using commit_transaction;
  1147. OPEN cur_inwaermx;
  1148. FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode,
  1149. :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].fprice,
  1150. :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice,
  1151. :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice,
  1152. :inwaremx[i].relid,:inwaremx[i].ifrel,:inwaremx[i].woodcode,
  1153. :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid,
  1154. :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit,
  1155. :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate,
  1156. :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].relprintid,
  1157. :inwaremx[i].checkqty,:inwaremx[i].result,:inwaremx[i].mtrlwaredscrp,
  1158. :inwaremx[i].relbillid,:inwaremx[i].relbillprintid,:inwaremx[i].relbillcode,
  1159. :inwaremx[i].mtrlcuscode,:inwaremx[i].Location,:inwaremx[i].ifpackpro,:inwaremx[i].ifpack,
  1160. :inwaremx[i].outtype,:inwaremx[i].enprice,:inwaremx[i].capacity,:inwaremx[i].u_mtrldef_ordertype,
  1161. :inwaremx[i].enprice_tax,:inwaremx[i].enprice_notax,:inwaremx[i].deliqty,:inwaremx[i].tax,
  1162. :inwaremx[i].deliprice_notax,:inwaremx[i].iffp,:inwaremx[i].dxflag,:inwaremx[i].Thptype,
  1163. :inwaremx[i].jgdscrp,:inwaremx[i].relcode,:inwaremx[i].ifvqty,:inwaremx[i].ifnotinout,:inwaremx[i].mtrlwareid;
  1164. DO WHILE commit_transaction.SQLCode = 0
  1165. jgsum_amt = jgsum_amt + Round(inwaremx[i].qty * inwaremx[i].jgprice,2) //计算单据总金额
  1166. sum_amt = sum_amt + Round((inwaremx[i].deliqty * inwaremx[i].uprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax),2) //计算单据总金额
  1167. sum_amt_en = sum_amt_en + Round((inwaremx[i].deliqty * inwaremx[i].enprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax),2) //计算单据总金额
  1168. sum_taxamt = sum_taxamt + Round((inwaremx[i].deliqty * inwaremx[i].uprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax) * inwaremx[i].tax,2)
  1169. sum_taxamt_en = sum_taxamt_en + Round((inwaremx[i].deliqty * inwaremx[i].enprice * inwaremx[i].rebate) / (1 + inwaremx[i].tax) * inwaremx[i].tax,2)
  1170. i++
  1171. FETCH cur_inwaermx INTO :inwaremx[i].printid,:inwaremx[i].mtrlid,:inwaremx[i].plancode,
  1172. :inwaremx[i].status,:inwaremx[i].qty,:inwaremx[i].fprice,
  1173. :inwaremx[i].rebate,:inwaremx[i].price,:inwaremx[i].planprice,
  1174. :inwaremx[i].mxdscrp,:inwaremx[i].mtrlcode,:inwaremx[i].jgprice,
  1175. :inwaremx[i].relid,:inwaremx[i].ifrel,:inwaremx[i].woodcode,
  1176. :inwaremx[i].pcode,:inwaremx[i].plancode,:inwaremx[i].sptid,
  1177. :inwaremx[i].cost,:inwaremx[i].sptmtrlname,:inwaremx[i].unit,
  1178. :inwaremx[i].uqty,:inwaremx[i].uprice,:inwaremx[i].rate,
  1179. :inwaremx[i].bootqty,:inwaremx[i].noauditqty,:inwaremx[i].relprintid,
  1180. :inwaremx[i].checkqty,:inwaremx[i].result,:inwaremx[i].mtrlwaredscrp,
  1181. :inwaremx[i].relbillid,:inwaremx[i].relbillprintid,:inwaremx[i].relbillcode,
  1182. :inwaremx[i].mtrlcuscode,:inwaremx[i].Location,:inwaremx[i].ifpackpro,:inwaremx[i].ifpack,
  1183. :inwaremx[i].outtype,:inwaremx[i].enprice,:inwaremx[i].capacity,:inwaremx[i].u_mtrldef_ordertype,
  1184. :inwaremx[i].enprice_tax,:inwaremx[i].enprice_notax,:inwaremx[i].deliqty,:inwaremx[i].tax,
  1185. :inwaremx[i].deliprice_notax,:inwaremx[i].iffp,:inwaremx[i].dxflag,:inwaremx[i].Thptype,
  1186. :inwaremx[i].jgdscrp,:inwaremx[i].relcode,:inwaremx[i].ifvqty,:inwaremx[i].ifnotinout,:inwaremx[i].mtrlwareid;
  1187. LOOP
  1188. CLOSE cur_inwaermx;
  1189. //检验明细是否读入完整
  1190. SELECT count(*) INTO :no_mxcheck
  1191. FROM u_inwaremx
  1192. WHERE u_inwaremx.inwareid = :arg_inwareid
  1193. And scid = :arg_scid Using commit_transaction;
  1194. IF commit_transaction.SQLCode <> 0 THEN
  1195. rslt = 0
  1196. arg_msg = "查询操作失败,进仓单明细数量"
  1197. GOTO ext
  1198. END IF
  1199. IF i <> (no_mxcheck+1) THEN
  1200. rslt = 0
  1201. arg_msg = "查询操作失败,进仓单明细"
  1202. GOTO ext
  1203. END IF
  1204. //包件
  1205. //用游标读取明细
  1206. IF li_outtype > 0 Or billtype = 27 THEN
  1207. DECLARE cur_inwaermx_mx CURSOR FOR
  1208. SELECT u_inwaremx_mx.printid,
  1209. u_inwaremx_mx.mtrlid,
  1210. u_inwaremx_mx.plancode,
  1211. u_inwaremx_mx.status,
  1212. u_inwaremx_mx.qty,
  1213. u_inwaremx_mx.fprice,
  1214. u_inwaremx_mx.rebate,
  1215. u_inwaremx_mx.price,
  1216. u_inwaremx_mx.mxdscrp,
  1217. u_inwaremx_mx.woodcode,
  1218. u_inwaremx_mx.pcode,
  1219. u_inwaremx_mx.plancode,
  1220. u_inwaremx_mx.sptid_cusid,
  1221. u_inwaremx_mx.waredscrp,
  1222. u_inwaremx_mx.mxprintid,
  1223. u_inwaremx_mx.mtrlcuscode,
  1224. u_inwaremx_mx.location,
  1225. u_mtrldef.ifpackpro,
  1226. u_mtrldef.ifpack,
  1227. u_mtrldef.outtype,
  1228. u_mtrldef.unit,
  1229. u_mtrldef.mtrlcode,
  1230. u_inwaremx_mx.ptinwareid,
  1231. u_inwaremx_mx.ptinwarecode,
  1232. u_inwaremx_mx.ptprintid,
  1233. u_mtrldef.iffp,
  1234. u_inwaremx_mx.ifnotinout
  1235. FROM u_inwaremx_mx,u_mtrldef,u_inware
  1236. WHERE u_inware.inwareid = :arg_inwareid AND
  1237. u_inwaremx_mx.mtrlid = u_mtrldef.mtrlid AND
  1238. u_inware.scid = :arg_scid AND
  1239. u_inware.inwareid = u_inwaremx_mx.inwareid AND
  1240. u_inware.scid = u_inwaremx_mx.scid
  1241. Order By u_inwaremx_mx.mxprintid Using commit_transaction;
  1242. OPEN cur_inwaermx_mx;
  1243. FETCH cur_inwaermx_mx INTO :inwaremx_mx[k].printid,:inwaremx_mx[k].mtrlid,:inwaremx_mx[k].plancode,
  1244. :inwaremx_mx[k].status,:inwaremx_mx[k].qty,:inwaremx_mx[k].fprice,
  1245. :inwaremx_mx[k].rebate,:inwaremx_mx[k].price,
  1246. :inwaremx_mx[k].mxdscrp,:inwaremx_mx[k].woodcode,
  1247. :inwaremx_mx[k].pcode,:inwaremx_mx[k].plancode,:inwaremx_mx[k].sptid,
  1248. :inwaremx_mx[k].waredscrp,:inwaremx_mx[k].mxprintid,
  1249. :inwaremx_mx[k].mtrlcuscode,:inwaremx_mx[k].Location,:inwaremx_mx[k].ifpackpro,:inwaremx_mx[k].ifpack,
  1250. :inwaremx_mx[k].outtype,:inwaremx_mx[k].unit,:inwaremx_mx[k].mtrlcode,
  1251. :inwaremx_mx[k].ptinwareid,:inwaremx_mx[k].ptinwarecode,:inwaremx_mx[k].ptprintid,:inwaremx_mx[k].iffp,
  1252. :inwaremx_mx[k].ifnotinout;
  1253. DO WHILE commit_transaction.SQLCode = 0
  1254. k++
  1255. FETCH cur_inwaermx_mx INTO :inwaremx_mx[k].printid,:inwaremx_mx[k].mtrlid,:inwaremx_mx[k].plancode,
  1256. :inwaremx_mx[k].status,:inwaremx_mx[k].qty,:inwaremx_mx[k].fprice,
  1257. :inwaremx_mx[k].rebate,:inwaremx_mx[k].price,
  1258. :inwaremx_mx[k].mxdscrp,:inwaremx_mx[k].woodcode,
  1259. :inwaremx_mx[k].pcode,:inwaremx_mx[k].plancode,:inwaremx_mx[k].sptid,
  1260. :inwaremx_mx[k].waredscrp,:inwaremx_mx[k].mxprintid,
  1261. :inwaremx_mx[k].mtrlcuscode,:inwaremx_mx[k].Location,:inwaremx_mx[k].ifpackpro,:inwaremx_mx[k].ifpack,
  1262. :inwaremx_mx[k].outtype,:inwaremx_mx[k].unit,:inwaremx_mx[k].mtrlcode,
  1263. :inwaremx_mx[k].ptinwareid,:inwaremx_mx[k].ptinwarecode,:inwaremx_mx[k].ptprintid,:inwaremx_mx[k].iffp,
  1264. :inwaremx_mx[k].ifnotinout;
  1265. LOOP
  1266. CLOSE cur_inwaermx_mx;
  1267. //检验明细是否读入完整
  1268. SELECT count(*) INTO :no_mxcheck
  1269. FROM u_inwaremx_mx
  1270. WHERE u_inwaremx_mx.inwareid = :arg_inwareid
  1271. And u_inwaremx_mx.scid = :arg_scid Using commit_transaction;
  1272. IF commit_transaction.SQLCode <> 0 THEN
  1273. rslt = 0
  1274. arg_msg = "查询操作失败,进仓单包件明细数量"
  1275. GOTO ext
  1276. END IF
  1277. IF k <> (no_mxcheck+1) THEN
  1278. rslt = 0
  1279. arg_msg = "查询操作失败,进仓单包件明细"
  1280. GOTO ext
  1281. END IF
  1282. it_mxbt_mx = k - 1
  1283. END IF
  1284. //
  1285. //用游标读取条码明细
  1286. IF li_outtype = 2 Or li_outtype = 3 THEN
  1287. DECLARE cur_inwaremx_barcode CURSOR FOR
  1288. SELECT u_inwaremx_mx_barcode.barcode,
  1289. u_inwaremx_mx_barcode.qty,
  1290. u_mtrlware_mx.packqty,
  1291. u_inwaremx_mx_barcode.qty * u_mtrlware_mx.packqty,
  1292. u_mtrldef.ifbarcodefp,
  1293. u_mtrlware_mx.ifrel,
  1294. u_mtrlware_mx.scid,
  1295. u_mtrlware_mx.orderid
  1296. FROM u_inwaremx_mx_barcode,u_mtrlware_mx,u_mtrldef
  1297. WHERE u_inwaremx_mx_barcode.inwareid = :arg_inwareid AND
  1298. u_inwaremx_mx_barcode.scid = :arg_scid AND
  1299. u_inwaremx_mx_barcode.barcode = u_mtrlware_mx.barcode AND
  1300. u_mtrldef.mtrlid = u_mtrlware_mx.mtrlid
  1301. Order By u_inwaremx_mx_barcode.printid,u_inwaremx_mx_barcode.barcode Using commit_transaction;
  1302. OPEN cur_inwaremx_barcode;
  1303. FETCH cur_inwaremx_barcode INTO :s_mx_barcode[j].barcode,
  1304. :s_mx_barcode[j].qty,:s_mx_barcode[j].packqty,:s_mx_barcode[j].inqty,
  1305. :s_mx_barcode[j].u_mtrldef_ifbarcodefp,:s_mx_barcode[j].ifrel,
  1306. :s_mx_barcode[j].scid,:s_mx_barcode[j].orderid;
  1307. DO WHILE commit_transaction.SQLCode = 0
  1308. j++
  1309. FETCH cur_inwaremx_barcode INTO :s_mx_barcode[j].barcode,
  1310. :s_mx_barcode[j].qty,:s_mx_barcode[j].packqty,:s_mx_barcode[j].inqty,
  1311. :s_mx_barcode[j].u_mtrldef_ifbarcodefp,:s_mx_barcode[j].ifrel,
  1312. :s_mx_barcode[j].scid,:s_mx_barcode[j].orderid;
  1313. LOOP
  1314. CLOSE cur_inwaremx_barcode;
  1315. //检验明细是否读入完整
  1316. SELECT count(*) INTO :no_mxcheck_barcode
  1317. FROM u_inwaremx_mx_barcode
  1318. WHERE u_inwaremx_mx_barcode.inwareid = :arg_inwareid
  1319. And u_inwaremx_mx_barcode.scid = :arg_scid Using commit_transaction;
  1320. IF commit_transaction.SQLCode <> 0 THEN
  1321. rslt = 0
  1322. arg_msg = "查询操作失败,进仓单明细数量,"+commit_transaction.SQLErrText
  1323. GOTO ext
  1324. END IF
  1325. IF j <> (no_mxcheck_barcode+1) THEN
  1326. rslt = 0
  1327. arg_msg = "查询操作失败,进仓单条码明细数量不相符"
  1328. GOTO ext
  1329. END IF
  1330. it_mxbt_barcode = j - 1
  1331. END IF
  1332. inwareid = arg_inwareid
  1333. scid = arg_scid
  1334. it_mxbt = i - 1
  1335. FOR i = 1 To it_mxbt
  1336. String ls_mtrlware_dscrp
  1337. IF billtype = 3 THEN
  1338. IF p_rst_mtrlwaredscrp(arg_scid,inwaremx[i].relid,inwaremx[i].waredscrp,arg_msg,ls_mtrlware_dscrp) = 0 THEN
  1339. rslt = 0
  1340. GOTO ext
  1341. ELSE
  1342. inwaremx[i].mtrlwaredscrp = ls_mtrlware_dscrp
  1343. END IF
  1344. END IF
  1345. NEXT
  1346. //读取来料加工订单费用明细
  1347. DECLARE cur_inware_itemmx CURSOR FOR
  1348. SELECT scid, inwareid, printid, itemid, amt, mxdscrp
  1349. FROM u_inware_itemmx
  1350. WHERE inwareid = :arg_inwareid
  1351. AND scid = :arg_scid
  1352. Using commit_transaction;
  1353. OPEN cur_inware_itemmx;
  1354. FETCH cur_inware_itemmx INTO :inware_itemmx[l].scid,:inware_itemmx[l].inwareid,
  1355. :inware_itemmx[l].printid,:inware_itemmx[l].itemid,
  1356. :inware_itemmx[l].amt,:inware_itemmx[l].mxdscrp;
  1357. DO WHILE commit_transaction.SQLCode = 0
  1358. l++
  1359. FETCH cur_inware_itemmx INTO :inware_itemmx[l].scid,:inware_itemmx[l].inwareid,
  1360. :inware_itemmx[l].printid,:inware_itemmx[l].itemid,
  1361. :inware_itemmx[l].amt,:inware_itemmx[l].mxdscrp;
  1362. LOOP
  1363. CLOSE cur_inware_itemmx;
  1364. //检验明细是否读入完整
  1365. SELECT count(*) INTO :no_mxcheck
  1366. FROM u_inware_itemmx
  1367. Where inwareid = :arg_inwareid And scid = :arg_scid Using commit_transaction;
  1368. IF commit_transaction.SQLCode <> 0 THEN
  1369. rslt = 0
  1370. arg_msg = "查询操作失败,费用明细数量"
  1371. GOTO ext
  1372. END IF
  1373. IF l <> (no_mxcheck+1) THEN
  1374. rslt = 0
  1375. arg_msg = "查询操作失败,费用明细"
  1376. GOTO ext
  1377. END IF
  1378. it_mxbt_item = l - 1
  1379. it_newbegin = False
  1380. it_updatebegin = False
  1381. ext:
  1382. IF rslt = 0 THEN p_reset()
  1383. RETURN rslt
  1384. end function
  1385. public function integer updatebegin (long arg_scid, long arg_inwareid, integer arg_billtype, ref string arg_msg);Long rslt = 1
  1386. IF uo_option_inout_type = -1000 THEN
  1387. rslt = 0
  1388. arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!'
  1389. GOTO ext
  1390. END IF
  1391. IF uo_option_barcode_inwareother_paudit = -1000 THEN
  1392. rslt = 0
  1393. arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1394. GOTO ext
  1395. END IF
  1396. IF uo_option_barcode_inwarebuy_paudit = -1000 THEN
  1397. rslt = 0
  1398. arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1399. GOTO ext
  1400. END IF
  1401. IF uo_option_barcode_inwarecp_paudit = -1000 THEN
  1402. rslt = 0
  1403. arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1404. GOTO ext
  1405. END IF
  1406. IF arg_scid < 0 THEN
  1407. arg_msg = '请选择分部'
  1408. rslt = 0
  1409. GOTO ext
  1410. END IF
  1411. IF arg_inwareid <= 0 THEN
  1412. rslt = 0
  1413. GOTO ext
  1414. END IF
  1415. IF Not (arg_billtype = 1 OR &
  1416. arg_billtype = 2 OR &
  1417. arg_billtype = 3 OR &
  1418. arg_billtype = 4 OR &
  1419. arg_billtype = 5 OR &
  1420. arg_billtype = 6 OR &
  1421. arg_billtype = 8 OR &
  1422. arg_billtype = 9 OR &
  1423. arg_billtype = 12 OR &
  1424. arg_billtype = 15 OR &
  1425. arg_billtype = 16 OR &
  1426. arg_billtype = 17 OR &
  1427. arg_billtype = 18 OR &
  1428. arg_billtype = 19 or &
  1429. arg_billtype = 20 or &
  1430. arg_billtype = 21 or &
  1431. arg_billtype = 22 or &
  1432. arg_billtype = 23 or &
  1433. arg_billtype = 24 or &
  1434. arg_billtype = 25 or &
  1435. arg_billtype = 26 or &
  1436. arg_billtype = 27 or &
  1437. arg_billtype = 28) THEN
  1438. rslt = 0
  1439. arg_msg = '此单据类型必须为:'
  1440. arg_msg = arg_msg+'1-采购收货进仓单[记帐模式],'
  1441. arg_msg = arg_msg+'2-采购收货进仓单[不记帐模式],'
  1442. arg_msg = arg_msg+'3-生产进仓单,'
  1443. arg_msg = arg_msg+'4-外协收货进仓单,'
  1444. arg_msg = arg_msg+'5-来料加工收料进仓单,'
  1445. arg_msg = arg_msg+'6-车间生产进仓单,'
  1446. arg_msg = arg_msg+'8-其它进仓单,'
  1447. arg_msg = arg_msg+'9-盘盈进仓单,'
  1448. arg_msg = arg_msg+'12-调拨进仓单'
  1449. arg_msg = arg_msg+'15-拆装进仓单'
  1450. arg_msg = arg_msg+'16-生产领料车间自动进仓单(不按计划),'
  1451. arg_msg = arg_msg+'17-客户调货进仓单'
  1452. arg_msg = arg_msg+'18-欠货进仓单'
  1453. arg_msg = arg_msg+'19-自动组装进仓单'
  1454. arg_msg = arg_msg+'20-生产领料车间自动进仓单(按计划)'
  1455. arg_msg = arg_msg+'21-车间库存转换自动进仓单'
  1456. arg_msg = arg_msg+'22-库存配置调整单自动进仓单'
  1457. arg_msg = arg_msg+'23-销售发货单包件产品自动进仓单'
  1458. arg_msg = arg_msg+'24-水口料进仓单'
  1459. arg_msg = arg_msg+'25-采购收货单包件明细自动进仓单'
  1460. arg_msg = arg_msg+'26-采购收货包件进仓单'
  1461. arg_msg = arg_msg+'27-采购收货包件结算单'
  1462. arg_msg = arg_msg+'28-员工物品归还单'
  1463. GOTO ext
  1464. END IF
  1465. IF arg_billtype = 12 THEN
  1466. rslt = 0
  1467. arg_msg = '单据类型:12-调拨进仓>>不能修改'
  1468. GOTO ext
  1469. END IF
  1470. IF arg_billtype = 17 THEN
  1471. rslt = 0
  1472. arg_msg = '单据类型:17-客户调货进仓>>不能修改'
  1473. GOTO ext
  1474. END IF
  1475. IF arg_billtype = 18 THEN
  1476. rslt = 0
  1477. arg_msg = '单据类型:18-欠货进仓单>>不能修改'
  1478. GOTO ext
  1479. END IF
  1480. IF arg_billtype = 19 THEN
  1481. rslt = 0
  1482. arg_msg = '单据类型:19-自动组装进仓单>>不能修改'
  1483. GOTO ext
  1484. END IF
  1485. IF arg_billtype = 22 THEN
  1486. rslt = 0
  1487. arg_msg = '单据类型:22-库存配置调整单自动进仓>>不能修改'
  1488. GOTO ext
  1489. END IF
  1490. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1491. IF rslt = 0 THEN GOTO ext
  1492. IF uo_option_inout_type = 2 AND &
  1493. ( uo_option_barcode_inwareother_paudit = 1 AND billtype = 1 OR &
  1494. uo_option_barcode_inwarebuy_paudit = 1 AND billtype = 3 OR &
  1495. uo_option_barcode_inwarecp_paudit = 1 AND billtype = 8 ) THEN
  1496. IF priceflag = 1 THEN
  1497. arg_msg = '单据已确认,不能修改'
  1498. rslt = 0
  1499. GOTO ext
  1500. END IF
  1501. END IF
  1502. String ls_storagename
  1503. SELECT storagename
  1504. INTO :ls_storagename
  1505. FROM u_storage
  1506. Where storageid = :storageid USING commit_transaction ;
  1507. IF commit_transaction.SQLCode <> 0 THEN
  1508. rslt = 0
  1509. arg_msg = "查询操作失败,仓库"
  1510. GOTO ext
  1511. END IF
  1512. //检查是否有该仓库的建立权限
  1513. IF sys_user_storagestr_new <> '0' THEN
  1514. IF Pos(sys_user_storagestr_new,','+String(storageid)+',') <= 0 THEN
  1515. rslt = 0
  1516. arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许修改该仓库的单据'
  1517. GOTO ext
  1518. END IF
  1519. END IF
  1520. //
  1521. IF priceflag = 1 THEN
  1522. rslt = 0
  1523. arg_msg = '单据已经审核,不可以修改'
  1524. GOTO ext
  1525. END IF
  1526. IF flag = 1 THEN
  1527. rslt = 0
  1528. arg_msg = '单据已经审核,不可以修改'
  1529. GOTO ext
  1530. END IF
  1531. inwareid = arg_inwareid
  1532. billtype = arg_billtype
  1533. scid = arg_scid
  1534. it_newbegin = FALSE
  1535. it_updatebegin = TRUE
  1536. p_clearmx() //清除明细
  1537. ext:
  1538. IF rslt = 0 THEN p_reset()
  1539. RETURN rslt
  1540. end function
  1541. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1542. Long cnt = 0,i,j,mx_barcode_cnt
  1543. Long ll_sptid,ll_mtrlwareid_ref
  1544. String ls_mtrlcuscode
  1545. String ls_storagename
  1546. Int li_outtype,li_storagetype,li_if_pd_usebarcode
  1547. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  1548. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  1549. uo_sqlpro uo_pro
  1550. uo_pro = Create uo_sqlpro
  1551. uo_pro.commit_transaction = commit_transaction
  1552. uo_cmpl_packpro uo_cmpl_p
  1553. uo_cmpl_p = Create uo_cmpl_packpro
  1554. uo_cmpl_p.commit_transaction = commit_transaction
  1555. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  1556. rslt = 0
  1557. GOTO ext
  1558. END IF
  1559. IF uo_option_inout_type = -1000 THEN
  1560. rslt = 0
  1561. arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!'
  1562. GOTO ext
  1563. END IF
  1564. IF uo_option_barcode_inwareother_paudit = -1000 THEN
  1565. rslt = 0
  1566. arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1567. GOTO ext
  1568. END IF
  1569. IF uo_option_barcode_inwarebuy_paudit = -1000 THEN
  1570. rslt = 0
  1571. arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1572. GOTO ext
  1573. END IF
  1574. IF uo_option_barcode_inwarecp_paudit = -1000 THEN
  1575. rslt = 0
  1576. arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!'
  1577. GOTO ext
  1578. END IF
  1579. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  1580. uo_mtrlware_assign uo_ma
  1581. uo_ma = Create uo_mtrlware_assign
  1582. uo_ma.commit_transaction = commit_transaction
  1583. uo_ma.ib_ifinware_audit_do = True
  1584. IF inwareid = 0 THEN
  1585. rslt = 0
  1586. arg_msg = "没有进仓审核对象"
  1587. GOTO ext
  1588. END IF
  1589. IF storageid = 0 THEN
  1590. rslt = 0
  1591. arg_msg = '没有正确的仓库'
  1592. GOTO ext
  1593. END IF
  1594. IF billtype <> 9 THEN
  1595. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  1596. rslt = 0
  1597. GOTO ext
  1598. END IF
  1599. END IF
  1600. SELECT storagename,outtype,storagetype,if_pd_usebarcode
  1601. INTO :ls_storagename,:li_outtype,:li_storagetype,:li_if_pd_usebarcode
  1602. FROM u_storage
  1603. Where storageid = :storageid Using commit_transaction ;
  1604. IF commit_transaction.SQLCode <> 0 THEN
  1605. rslt = 0
  1606. arg_msg = "查询操作失败,仓库"
  1607. GOTO ext
  1608. END IF
  1609. //检查是否有该仓库的建立权限
  1610. IF Not (billtype = 16 Or billtype = 20) THEN
  1611. IF sys_user_storagestr_audit <> '0' THEN
  1612. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  1613. rslt = 0
  1614. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据'
  1615. GOTO ext
  1616. END IF
  1617. END IF
  1618. end if
  1619. //
  1620. IF uo_option_inout_type = 2 And (li_outtype = 2 Or li_outtype = 3) And &
  1621. ( uo_option_barcode_inwareother_paudit = 1 And billtype = 8 and (sptname <> '更新成本价(正单)' and sptname <> '调整成本价(负单)') Or &
  1622. uo_option_barcode_inwarebuy_paudit = 1 And billtype = 1 Or &
  1623. uo_option_barcode_inwarecp_paudit = 1 And billtype = 3 ) And thflag = 0 THEN
  1624. IF priceflag = 0 THEN
  1625. arg_msg = '单据未确认,不能审核'
  1626. rslt = 0
  1627. GOTO ext
  1628. END IF
  1629. END IF
  1630. IF flag = 1 THEN
  1631. rslt = 0
  1632. arg_msg = "单据已经审核"
  1633. GOTO ext
  1634. END IF
  1635. //检查条码数量是否匹配
  1636. If ( li_outtype = 2 Or li_outtype = 3 ) And &
  1637. ( billtype <> 9 Or billtype = 9 And &
  1638. ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_check_barcode )) THEN
  1639. IF uof_check_barcodeqty(arg_msg) = 0 THEN
  1640. rslt = 0
  1641. GOTO ext
  1642. END IF
  1643. END IF
  1644. UPDATE u_inware
  1645. SET auditingrep = :publ_operator,
  1646. auditingdate = getdate(),
  1647. flag = 1
  1648. WHERE u_inware.inwareid = :inwareid
  1649. AND flag = 0
  1650. And scid = :scid Using commit_transaction;
  1651. IF commit_transaction.SQLCode <> 0 THEN
  1652. rslt = 0
  1653. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1654. GOTO ext
  1655. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1656. rslt = 0
  1657. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1658. GOTO ext
  1659. END IF
  1660. FOR i = 1 To it_mxbt
  1661. IF f_power_ind(2203,sys_msg_pow) And Not sys_power_issuper THEN
  1662. IF inwaremx[i].uprice = 0 THEN
  1663. rslt = 0
  1664. arg_msg = '行:'+String(i)+',物料编码:'+inwaremx[i].mtrlcode+',没有单价,请检查'
  1665. GOTO ext
  1666. END IF
  1667. END IF
  1668. //yyx20120206
  1669. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  1670. IF billtype = 17 Or billtype = 23 THEN //客户调货条码转换单
  1671. ll_sptid = inwaremx[i].sptid
  1672. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  1673. ELSE
  1674. ll_sptid = 0
  1675. ls_mtrlcuscode = ''
  1676. END IF
  1677. ELSE
  1678. IF billtype = 4 THEN
  1679. ll_sptid = 0
  1680. ELSE
  1681. ll_sptid = inwaremx[i].sptid
  1682. END IF
  1683. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  1684. END IF
  1685. //yyx20120206_end
  1686. IF sys_option_inout_procedure = 0 THEN
  1687. IF billtype <> 20 And billtype <> 21 THEN
  1688. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  1689. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  1690. inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,&
  1691. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  1692. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  1693. arg_msg = '更新行:'+String(i)+','+arg_msg
  1694. rslt = 0
  1695. GOTO ext
  1696. END IF
  1697. ELSE
  1698. IF p_update_mtrlware_ws(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  1699. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  1700. inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,&
  1701. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  1702. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  1703. arg_msg = '更新行:'+String(i)+','+arg_msg
  1704. rslt = 0
  1705. GOTO ext
  1706. END IF
  1707. END IF
  1708. ELSE
  1709. IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,&
  1710. inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,inwaremx[i].qty,&
  1711. inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,&
  1712. inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  1713. arg_msg = '更新行:'+String(i)+','+arg_msg
  1714. rslt = 0
  1715. GOTO ext
  1716. END IF
  1717. END IF
  1718. //取库存信息yyx2012-09-25
  1719. ll_mtrlwareid_ref = 0
  1720. IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,&
  1721. inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,&
  1722. inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  1723. arg_msg = '行:'+String(i)+','+arg_msg
  1724. rslt = 0
  1725. GOTO ext
  1726. END IF
  1727. IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,inwareid,inwaremx[i].printid,arg_msg,False) = 0 THEN
  1728. arg_msg = '行:'+String(i)+','+arg_msg
  1729. rslt = 0
  1730. GOTO ext
  1731. END IF
  1732. //yyx20100814
  1733. //库存分配
  1734. IF li_storagetype = 1 And billtype <> 23 THEN
  1735. IF inwaremx[i].iffp = 1 THEN
  1736. //取分配计划
  1737. arg_s_ap = arg_s_ap_null
  1738. IF billtype = 4 THEN //外协收货
  1739. IF inwaremx[i].relid > 0 And inwaremx[i].relprintid > 0 THEN
  1740. IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,3,inwaremx[i].relid,inwaremx[i].relprintid,&
  1741. inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  1742. arg_msg = '外协收货明细行:'+String(inwaremx[i].printid)+',取分配计划失败'+arg_msg
  1743. rslt = 0
  1744. GOTO ext
  1745. END IF
  1746. END IF
  1747. ELSE
  1748. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  1749. arg_msg = '行:'+String(i)+','+arg_msg
  1750. rslt = 0
  1751. GOTO ext
  1752. END IF
  1753. END IF
  1754. FOR j = 1 To UpperBound(arg_s_ap.planid)
  1755. IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],&
  1756. arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],&
  1757. arg_s_ap.notassignqty[j],inwaremx[i].cost,ls_mtrlcuscode,inwaremx[i].mtrlwaredscrp,&
  1758. inwarecode,inwaremx[i].printid,arg_s_ap.fpgrade[i],publ_operator,arg_msg,False) = 0 THEN
  1759. arg_msg = '行:'+String(i)+','+arg_msg
  1760. rslt = 0
  1761. GOTO ext
  1762. END IF
  1763. IF arg_s_ap.planid[j] > 0 THEN
  1764. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],&
  1765. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  1766. arg_msg = '行:'+String(i)+','+arg_msg
  1767. rslt = 0
  1768. GOTO ext
  1769. END IF
  1770. END IF
  1771. NEXT
  1772. END IF
  1773. END IF
  1774. //yyx20100814_end
  1775. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  1776. //yyx2012-9-29返回计算可装数库存id数组
  1777. IF billtype <> 23 &
  1778. And Not (billtype = 25 And Pos(part,'CT') > 0) &
  1779. And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) &
  1780. And ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  1781. IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  1782. rslt = 0
  1783. GOTO ext
  1784. END IF
  1785. END IF
  1786. //
  1787. NEXT
  1788. //更新条码
  1789. If ( li_outtype = 2 Or li_outtype = 3 ) And &
  1790. mx_barcode_cnt > 0 And &
  1791. ( billtype <> 9 Or billtype = 9 And &
  1792. ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_update_barcode )) THEN
  1793. IF uof_p_barcode(1,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  1794. rslt = 0
  1795. GOTO ext
  1796. END IF
  1797. END IF
  1798. //yyx2012-9-29返回计算可装数库存id数组计算可装数
  1799. IF billtype <> 23 &
  1800. And Not (billtype = 25 And Pos(part,'CT') > 0) &
  1801. And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) &
  1802. And UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN
  1803. IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  1804. rslt = 0
  1805. GOTO ext
  1806. END IF
  1807. END IF
  1808. //
  1809. flag = 1
  1810. ext:
  1811. IF rslt = 0 THEN
  1812. ROLLBACK Using commit_transaction;
  1813. ELSEIF rslt = 1 And arg_ifcommit THEN
  1814. COMMIT Using commit_transaction;
  1815. END IF
  1816. Destroy uo_ma
  1817. Destroy uo_pro
  1818. Destroy uo_cmpl_p
  1819. RETURN rslt
  1820. end function
  1821. public function integer del (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);//del(arg_scid,arg_inwareid,arg_msg)
  1822. //如果单据还没有审核删除单据极其明细
  1823. //0 fail, 1 success
  1824. Int rslt = 1
  1825. If arg_inwareid = 0 Then
  1826. rslt = 0
  1827. arg_msg = "没有删除对象,操作取消"
  1828. Goto ext
  1829. End If
  1830. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1831. If rslt = 0 Then Goto ext
  1832. If flag = 1 Then
  1833. rslt = 0
  1834. arg_msg = "单据已经审核,不可以删除"
  1835. Goto ext
  1836. End If
  1837. If Not lb_ifdelauto And billtype = 3 And relint_1 = 1 Then
  1838. rslt = 0
  1839. arg_msg = "自动建立的生产进仓单,不可以删除"
  1840. Goto ext
  1841. End If
  1842. If billtype = 1 and sys_option_disuse_inware_buy = 1 Then
  1843. If uof_disuse(arg_scid,arg_inwareid,1,arg_msg,False) = 0 Then
  1844. rslt = 0
  1845. Goto ext
  1846. End If
  1847. End If
  1848. Delete From u_inwaremx
  1849. Where u_inwaremx.inwareid = :arg_inwareid
  1850. And scid = :arg_scid Using commit_transaction;
  1851. If commit_transaction.SQLCode <> 0 Then
  1852. rslt = 0
  1853. arg_msg = "删除进仓单明细操作失败"+"~n"+commit_transaction.SQLErrText
  1854. Goto ext
  1855. End If
  1856. Delete From u_inware
  1857. Where u_inware.inwareid = :arg_inwareid
  1858. And scid = :arg_scid Using commit_transaction;
  1859. If commit_transaction.SQLCode <> 0 Then
  1860. rslt = 0
  1861. arg_msg = "删除进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1862. Goto ext
  1863. End If
  1864. Delete From u_inwaremx_mx_barcode
  1865. Where u_inwaremx_mx_barcode.inwareid = :arg_inwareid
  1866. And u_inwaremx_mx_barcode.scid = :arg_scid
  1867. And u_inwaremx_mx_barcode.billtype = :billtype Using commit_transaction;
  1868. If commit_transaction.SQLCode <> 0 Then
  1869. rslt = 0
  1870. arg_msg = "删除进仓单条码明细操作失败"+"~n"+commit_transaction.SQLErrText
  1871. Goto ext
  1872. End If
  1873. Delete From u_inware_itemmx
  1874. Where u_inware_itemmx.inwareid = :arg_inwareid
  1875. And u_inware_itemmx.scid = :arg_scid Using commit_transaction;
  1876. If commit_transaction.SQLCode <> 0 Then
  1877. rslt = 0
  1878. arg_msg = "删除进仓单费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  1879. Goto ext
  1880. End If
  1881. If billtype = 1 Then
  1882. Update u_inware_barcode_tmp
  1883. Set u_inware_barcode_tmp.inwareid = 0
  1884. Where u_inware_barcode_tmp.scid = :arg_scid
  1885. And u_inware_barcode_tmp.inwareid = :arg_inwareid Using commit_transaction;
  1886. If commit_transaction.SQLCode <> 0 Then
  1887. rslt = 0
  1888. arg_msg = "清除进仓单已匹配条码操作失败"+"~n"+commit_transaction.SQLErrText
  1889. Goto ext
  1890. End If
  1891. End If
  1892. it_newbegin = False
  1893. it_updatebegin = False
  1894. ext:
  1895. If rslt = 0 Then
  1896. Rollback Using commit_transaction;
  1897. ElseIf rslt = 1 And arg_ifcommit Then
  1898. Commit Using commit_transaction;
  1899. End If
  1900. p_reset()
  1901. Return rslt
  1902. end function
  1903. public function integer add_dscrp (long arg_scid, long arg_inwareid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  1904. //0 fail 1 success
  1905. Int rslt = 1
  1906. arg_newdescppart = Trim(arg_newdescppart)
  1907. IF it_updatebegin OR it_newbegin THEN
  1908. rslt = 0
  1909. arg_msg = "编辑状态下不可用"
  1910. GOTO ext
  1911. END IF
  1912. IF arg_newdescppart = '' THEN
  1913. rslt = 0
  1914. arg_msg = "要添加内容为空,操作取消"
  1915. GOTO ext
  1916. END IF
  1917. rslt = p_getinfo(arg_scid,arg_inwareid,arg_msg)
  1918. IF rslt = 0 THEN GOTO ext
  1919. IF flag = 0 THEN
  1920. rslt = 0
  1921. arg_msg = "非审核状态下不可用"
  1922. GOTO ext
  1923. END IF
  1924. UPDATE u_inware
  1925. SET dscrp = dscrp+' '+:arg_newdescppart
  1926. WHERE u_inware.inwareid = :inwareid
  1927. AND scid = :scid USING commit_transaction;
  1928. IF commit_transaction.SQLCode <> 0 THEN
  1929. ROLLBACK USING commit_transaction;
  1930. rslt = 0
  1931. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText
  1932. GOTO ext
  1933. END IF
  1934. COMMIT USING commit_transaction;
  1935. dscrp = dscrp+' '+arg_newdescppart
  1936. ext: Return (rslt)
  1937. end function
  1938. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1939. Long cnt = 0,i,j,mx_barcode_cnt
  1940. Long ll_sptid
  1941. String ls_mtrlcuscode
  1942. String ls_storagename
  1943. Int li_outtype,li_storagetype,li_if_pd_usebarcode
  1944. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  1945. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  1946. IF uo_option_canpack_ifzanyong = -1000 THEN
  1947. rslt = 0
  1948. arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!'
  1949. GOTO ext
  1950. END IF
  1951. uo_sqlpro uo_pro
  1952. uo_pro = Create uo_sqlpro
  1953. uo_pro.commit_transaction = commit_transaction
  1954. uo_cmpl_packpro uo_cmpl_p
  1955. uo_cmpl_p = Create uo_cmpl_packpro
  1956. uo_cmpl_p.commit_transaction = commit_transaction
  1957. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  1958. rslt = 0
  1959. GOTO ext
  1960. END IF
  1961. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  1962. s_inwaremx_assign arg_s_a,arg_s_a_null
  1963. uo_mtrlware_assign uo_ma
  1964. uo_ma = Create uo_mtrlware_assign
  1965. uo_ma.commit_transaction = commit_transaction
  1966. uo_ma.ib_ifinware_audit_do = True
  1967. DateTime null_dt
  1968. SetNull(null_dt)
  1969. IF storageid = 0 THEN
  1970. rslt = 0
  1971. arg_msg = '没有正确的仓库'
  1972. GOTO ext
  1973. END IF
  1974. IF billtype <> 9 THEN
  1975. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  1976. rslt = 0
  1977. GOTO ext
  1978. END IF
  1979. END IF
  1980. SELECT storagename,outtype,storagetype,if_pd_usebarcode
  1981. INTO :ls_storagename,:li_outtype,:li_storagetype,:li_if_pd_usebarcode
  1982. FROM u_storage
  1983. Where storageid = :storageid Using commit_transaction ;
  1984. IF commit_transaction.SQLCode <> 0 THEN
  1985. rslt = 0
  1986. arg_msg = "查询操作失败,仓库"
  1987. GOTO ext
  1988. END IF
  1989. //检查是否有该仓库的建立权限
  1990. IF Not (billtype = 16 Or billtype = 20) THEN
  1991. IF sys_user_storagestr_audit <> '0' THEN
  1992. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  1993. rslt = 0
  1994. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据'
  1995. GOTO ext
  1996. END IF
  1997. END IF
  1998. end if
  1999. //
  2000. IF inwareid = 0 THEN
  2001. rslt = 0
  2002. arg_msg = "没有出仓撤审对象"
  2003. GOTO ext
  2004. END IF
  2005. IF ctmint > 0 THEN
  2006. arg_msg = '单据已截数,不能操作'
  2007. rslt = 0
  2008. GOTO ext
  2009. END IF
  2010. IF flag = 0 THEN
  2011. rslt = 0
  2012. arg_msg = "单据还未审核"
  2013. GOTO ext
  2014. END IF
  2015. IF balcflag = 1 THEN
  2016. rslt = 0
  2017. arg_msg = "单据已经结存,不能撤审"
  2018. GOTO ext
  2019. END IF
  2020. IF billtype = 26 THEN
  2021. cnt = 0
  2022. SELECT count(*) INTO :cnt
  2023. FROM u_inwaremx_mx,u_inware
  2024. WHERE u_inware.scid = u_inwaremx_mx.scid
  2025. AND u_inware.inwareid = u_inwaremx_mx.inwareid
  2026. AND u_inware.billtype = 27
  2027. And u_inwaremx_mx.ptinwareid = :inwareid Using commit_transaction;
  2028. IF commit_transaction.SQLCode <> 0 THEN
  2029. arg_msg = '查询单据是否已开配套结算单失败,'+commit_transaction.SQLErrText
  2030. rslt = 0
  2031. GOTO ext
  2032. END IF
  2033. IF cnt > 0 THEN
  2034. arg_msg = '单据已开配套结算单,不能撤审'
  2035. rslt = 0
  2036. GOTO ext
  2037. END IF
  2038. END IF
  2039. UPDATE u_inware
  2040. SET auditingrep = '',
  2041. auditingdate = :null_dt,
  2042. flag = 0
  2043. WHERE u_inware.inwareid = :inwareid
  2044. And flag = 1 And scid = :scid Using commit_transaction;
  2045. IF commit_transaction.SQLCode <> 0 THEN
  2046. rslt = 0
  2047. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  2048. GOTO ext
  2049. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2050. rslt = 0
  2051. arg_msg = "单据正在撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2052. GOTO ext
  2053. END IF
  2054. FOR i = 1 To it_mxbt
  2055. //yyx20100814
  2056. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  2057. ll_sptid = 0
  2058. ls_mtrlcuscode = ''
  2059. ELSE
  2060. IF billtype = 4 THEN
  2061. ll_sptid = 0
  2062. ELSE
  2063. ll_sptid = inwaremx[i].sptid
  2064. END IF
  2065. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  2066. END IF
  2067. //yyx20100814_end
  2068. //yyx20100814
  2069. //库存分配
  2070. IF li_storagetype = 1 And billtype <> 23 THEN
  2071. IF inwaremx[i].iffp = 1 THEN
  2072. //取消分配
  2073. arg_s_a = arg_s_a_null
  2074. IF uof_ref_assign_cancel(inwarecode,inwaremx[i].printid,arg_s_a,arg_msg) = 0 THEN
  2075. arg_msg = '行:'+String(i)+','+arg_msg
  2076. rslt = 0
  2077. GOTO ext
  2078. END IF
  2079. FOR j = 1 To UpperBound(arg_s_a.assignid)
  2080. IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],&
  2081. arg_msg,False) = 0 THEN
  2082. arg_msg = '行:'+String(i)+','+arg_msg
  2083. rslt = 0
  2084. GOTO ext
  2085. END IF
  2086. NEXT
  2087. //取消分配计划
  2088. arg_s_ap = arg_s_ap_null
  2089. IF uof_ref_assign_plan_cancel(inwarecode,inwaremx[i].printid,arg_s_ap,arg_msg) = 0 THEN
  2090. arg_msg = '行:'+String(i)+','+arg_msg
  2091. rslt = 0
  2092. GOTO ext
  2093. END IF
  2094. FOR j = 1 To UpperBound(arg_s_ap.planid)
  2095. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],&
  2096. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  2097. arg_msg = '行:'+String(i)+','+arg_msg
  2098. rslt = 0
  2099. GOTO ext
  2100. END IF
  2101. NEXT
  2102. END IF
  2103. END IF
  2104. //yyx20100814_end
  2105. //进仓单撤审,如果使用通用包件占用模式,并且单据明细是包件,要扣减相关占用数
  2106. if uo_option_canpack_ifzanyong = 1 and inwaremx[i].ifpack = 1 then
  2107. if uo_cmpl_p.uof_add_fpqty(scid,inwaremx[i].mtrlwareid,inwaremx[i].mtrlid,0,0,0 - inwaremx[i].qty,arg_msg,false) = 0 then
  2108. rslt = 0
  2109. arg_msg = '行:'+string(i)+','+arg_msg
  2110. goto ext
  2111. end if
  2112. end if
  2113. IF sys_option_inout_procedure = 0 THEN
  2114. IF billtype <> 20 And billtype <> 21 THEN
  2115. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  2116. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  2117. 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,&
  2118. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  2119. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  2120. arg_msg = '更新行:'+String(i)+','+arg_msg
  2121. rslt = 0
  2122. GOTO ext
  2123. END IF
  2124. ELSE
  2125. IF p_update_mtrlware_ws(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  2126. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  2127. 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,&
  2128. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  2129. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  2130. arg_msg = '更新行:'+String(i)+','+arg_msg
  2131. rslt = 0
  2132. GOTO ext
  2133. END IF
  2134. END IF
  2135. ELSE
  2136. IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,&
  2137. inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,0 - inwaremx[i].qty,&
  2138. 0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,&
  2139. inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  2140. arg_msg = '更新行:'+String(i)+','+arg_msg
  2141. rslt = 0
  2142. GOTO ext
  2143. END IF
  2144. END IF
  2145. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  2146. //yyx2012-9-29返回计算可装数库存id数组
  2147. IF billtype <> 23 &
  2148. And Not (billtype = 25 And Pos(part,'CT') > 0) &
  2149. And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) &
  2150. And ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  2151. IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  2152. rslt = 0
  2153. GOTO ext
  2154. END IF
  2155. END IF
  2156. //
  2157. NEXT
  2158. //更新条码
  2159. If ( li_outtype = 2 Or li_outtype = 3 ) And &
  2160. mx_barcode_cnt > 0 And &
  2161. ( billtype <> 9 Or billtype = 9 And &
  2162. ( li_if_pd_usebarcode = 1 Or li_if_pd_usebarcode = 0 And if_py_update_barcode )) THEN
  2163. IF uof_p_barcode(0,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  2164. rslt = 0
  2165. GOTO ext
  2166. END IF
  2167. END IF
  2168. //yyx2012-9-29返回计算可装数库存id数组计算可装数
  2169. IF billtype <> 23 &
  2170. And Not (billtype = 25 And Pos(part,'CT') > 0) &
  2171. And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) &
  2172. And UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN
  2173. IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  2174. rslt = 0
  2175. GOTO ext
  2176. END IF
  2177. END IF
  2178. //
  2179. flag = 0
  2180. ext:
  2181. IF rslt = 0 THEN
  2182. ROLLBACK Using commit_transaction;
  2183. ELSEIF rslt = 1 And arg_ifcommit THEN
  2184. COMMIT Using commit_transaction;
  2185. END IF
  2186. Destroy uo_ma
  2187. Destroy uo_pro
  2188. Destroy uo_cmpl_p
  2189. RETURN rslt
  2190. end function
  2191. public function integer p_clearmx ();//int p_clearmx()
  2192. //清除明细
  2193. it_mxbt = 0
  2194. it_mxbt_mx = 0
  2195. it_mxbt_barcode = 0
  2196. it_mxbt_item = 0
  2197. RETURN 1
  2198. end function
  2199. public function integer p_getinfo (long arg_scid, long arg_inwareid, ref string arg_msg);//p_getinfo(arg_scid,arg_inwareid,arg_msg)
  2200. //0 失败 1成功
  2201. Int rslt = 1
  2202. IF arg_inwareid <= 0 THEN
  2203. rslt = 0
  2204. arG_MSG = "非法进仓单唯一码"
  2205. GOTO ext
  2206. END IF
  2207. SELECT u_inware.inwarecode,
  2208. u_inware.billtype,
  2209. u_inware.relid,
  2210. u_inware.storageid,
  2211. u_inware.indate,
  2212. u_inware.plandate,
  2213. u_inware.inrep,
  2214. u_inware.part,
  2215. u_inware.sptid,
  2216. u_inware.sptname,
  2217. u_inware.dscrp,
  2218. u_inware.thflag,
  2219. u_inware.secflag,
  2220. u_inware.dxflag,
  2221. u_inware.flag,
  2222. u_inware.balcflag,
  2223. u_inware.balcdateint,
  2224. u_inware.otheramt,
  2225. u_inware.relint_1,
  2226. u_inware.relint_2,
  2227. u_inware.relint_3,
  2228. u_inware.relstr_1,
  2229. u_inware.relstr_2,
  2230. u_inware.relstr_3,
  2231. u_inware.ctmint,
  2232. u_inware.priceflag,
  2233. u_inware.pricerep,
  2234. u_inware.pricedate,
  2235. u_inware.moneyid,
  2236. u_inware.mrate,
  2237. u_inware.deptid,
  2238. u_inware.fkflag,
  2239. u_inware.fkemp,
  2240. u_inware.fkdate
  2241. INTO :inwarecode,
  2242. :billtype,
  2243. :relid,
  2244. :storageid,
  2245. :indate,
  2246. :plandate,
  2247. :inrep,
  2248. :part,
  2249. :sptid,
  2250. :sptname,
  2251. :dscrp,
  2252. :thflag,
  2253. :secflag,
  2254. :dxflag,
  2255. :flag,
  2256. :balcflag,
  2257. :balcdateint,
  2258. :otheramt,
  2259. :relint_1,
  2260. :relint_2,
  2261. :relint_3,
  2262. :relstr_1,
  2263. :relstr_2,
  2264. :relstr_3,
  2265. :ctmint,
  2266. :priceflag,
  2267. :pricerep,
  2268. :pricedate,
  2269. :moneyid,
  2270. :mrate,
  2271. :deptid,
  2272. :fkflag,
  2273. :fkemp,
  2274. :fkdate
  2275. FROM u_inware
  2276. WHERE u_inware.inwareid = :arg_inwareid
  2277. AND scid = :arg_scid
  2278. Using commit_transaction;
  2279. IF commit_transaction.SQLCode <> 0 THEN
  2280. rslt = 0
  2281. arG_MSG = "查询操作失败(错误进仓单唯一码),进仓单,"+String(commit_transaction.SQLCode)+'~n'+commit_transaction.SQLErrText
  2282. GOTO ext
  2283. END IF
  2284. inwareid = arg_inwareid
  2285. scid = arg_scid
  2286. ext:
  2287. IF rslt = 0 THEN p_reset()
  2288. RETURN rslt
  2289. end function
  2290. public function integer p_reset ();//int p_reset()
  2291. //清除对象及其明细
  2292. scid = 0
  2293. inwareid = 0
  2294. inwarecode = ''
  2295. billtype = 0
  2296. opemp = ''
  2297. modemp = ''
  2298. auditingrep = ''
  2299. secauditingrep = ''
  2300. secflag = 0
  2301. flag = 0
  2302. relid = 0
  2303. storageid = 0
  2304. inrep = ''
  2305. part = ''
  2306. dscrp = ''
  2307. sptid = 0
  2308. sptname = ''
  2309. Dxflag = 0
  2310. thflag = 0
  2311. otheramt = 0
  2312. relint_1 = 0
  2313. relint_2 = 0
  2314. relint_3 = 0
  2315. relstr_1 = ''
  2316. relstr_2 = ''
  2317. relstr_3 = ''
  2318. moneyid = 0
  2319. mrate = 1
  2320. deptid = 0
  2321. balcflag = 0
  2322. balcdateint = 0
  2323. sum_amt = 0
  2324. sum_amt_en = 0
  2325. jgsum_amt = 0
  2326. sum_taxamt = 0
  2327. sum_taxamt_en = 0
  2328. it_newbegin = FALSE
  2329. it_updatebegin = FALSE
  2330. //清除明细
  2331. p_clearmx()
  2332. RETURN 1
  2333. end function
  2334. public function integer p_rst_mtrlwaredscrp (long arg_scid, long arg_relid, string arg_mxdscrp, ref string arg_msg, ref string arg_ref_dscrp);Int rslt = 1
  2335. String ls_ordercode,ls_billcode,ls_relcode
  2336. IF uo_option_mtrlware_dscrp = -1000 THEN
  2337. rslt = 0
  2338. arg_msg = '选项:[063]库存表摘要1,读取初始默认值失败,操作取消!'
  2339. GOTO ext
  2340. END IF
  2341. CHOOSE CASE uo_option_mtrlware_dscrp
  2342. CASE 1
  2343. arg_ref_dscrp = ''
  2344. CASE 2,3,4
  2345. IF arg_relid > 0 THEN
  2346. SELECT ordercode,billcode,relcode
  2347. INTO :ls_ordercode,:ls_billcode,:ls_relcode
  2348. FROM u_order_ml
  2349. WHERE scid = :arg_scid
  2350. AND orderid = :arg_relid
  2351. Using commit_transaction;
  2352. IF commit_transaction.SQLCode <> 0 THEN
  2353. arg_msg = '查询生产计划相关号码等失败,'+commit_transaction.SQLErrText
  2354. rslt = 0
  2355. GOTO ext
  2356. END IF
  2357. IF uo_option_mtrlware_dscrp = 2 THEN
  2358. arg_ref_dscrp = ls_ordercode
  2359. ELSEIF uo_option_mtrlware_dscrp = 3 THEN
  2360. arg_ref_dscrp = ls_billcode
  2361. ELSEIF uo_option_mtrlware_dscrp = 4 THEN
  2362. arg_ref_dscrp = ls_relcode
  2363. END IF
  2364. ELSE
  2365. arg_ref_dscrp = ''
  2366. END IF
  2367. CASE 5
  2368. arg_ref_dscrp = arg_mxdscrp
  2369. END CHOOSE
  2370. ext:
  2371. RETURN rslt
  2372. end function
  2373. public function integer p_update_mtrlware_ws (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, long arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, ref string arg_msg);Int rslt = 1
  2374. Long ls_newid
  2375. String or_err_part
  2376. Decimal ld_cost
  2377. Int li_storMtrlprp,li_ifcost
  2378. Decimal ld_pypkqty
  2379. Decimal ld_buyinqty,ld_buyinamt
  2380. Decimal ld_cpinqty,ld_cpinamt
  2381. Decimal ld_jginqty,ld_jginamt
  2382. Decimal ld_diinqty,ld_diinamt
  2383. Decimal ld_mvinqty,ld_mvinamt
  2384. Decimal ld_otinqty,ld_otinamt
  2385. Decimal ld_pyinqty,ld_pyinamt
  2386. Int li_ifunit
  2387. String ls_str
  2388. Int li_statusflag
  2389. Decimal ld_capacity,ld_capacity_zj
  2390. s_mtrlcfg_expr s_pz[]
  2391. String ls_status_zj
  2392. Long ll_i
  2393. Int li_ifpack
  2394. Int if_recmp_balc
  2395. If sys_if_recmp_balc < 0 Then
  2396. Select if_recmp_balc
  2397. Into :if_recmp_balc
  2398. From sys_msg Using commit_transaction ;
  2399. If commit_transaction.SQLCode <> 0 Then
  2400. arg_msg = '查询是否执行结存表重算失败,'+commit_transaction.SQLErrText
  2401. rslt = 0
  2402. Goto ext
  2403. End If
  2404. If if_recmp_balc = 0 Then
  2405. rslt = 0
  2406. arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据'
  2407. Goto ext
  2408. End If
  2409. Else
  2410. If sys_if_recmp_balc = 0 Then
  2411. rslt = 0
  2412. arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据'
  2413. Goto ext
  2414. End If
  2415. End If
  2416. If uo_option_change_status = '-1000' Then
  2417. rslt = 0
  2418. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  2419. Goto ext
  2420. End If
  2421. If uo_option_change_woodcode = '-1000' Then
  2422. rslt = 0
  2423. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  2424. Goto ext
  2425. End If
  2426. If uo_option_change_pcode = '-1000' Then
  2427. rslt = 0
  2428. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  2429. Goto ext
  2430. End If
  2431. If uo_option_cost_dec = -1000 Then
  2432. rslt = 0
  2433. arg_msg = '选项:[022]库存成本价转换小数点,读取初始默认值失败,操作取消!'
  2434. Goto ext
  2435. End If
  2436. Select Mtrlprp,ifcost Into :li_storMtrlprp,:li_ifcost
  2437. From u_storage
  2438. Where storageid = :arg_storageid Using commit_transaction ;
  2439. If commit_transaction.SQLCode <> 0 Then
  2440. arg_msg = '查询仓库类型失败'
  2441. rslt = 0
  2442. Goto ext
  2443. End If
  2444. Select ifunit,ifpack,capacity,statusflag
  2445. Into :li_ifunit,:li_ifpack,:ld_capacity,:li_statusflag
  2446. From u_mtrldef
  2447. Where mtrlid = :arg_mtrlid Using commit_transaction ;
  2448. If commit_transaction.SQLCode <> 0 Then
  2449. arg_msg = '查询物料信息失败'
  2450. rslt = 0
  2451. Goto ext
  2452. End If
  2453. If li_statusflag = 2 Then
  2454. ld_capacity = 0
  2455. f_checkpz(arg_status,s_pz[])
  2456. For ll_i = 1 To UpperBound(s_pz)
  2457. ls_status_zj = s_pz[ll_i].cfgname
  2458. Select capacity
  2459. Into :ld_capacity_zj
  2460. From u_mtrl_configure
  2461. Where mtrlid = :arg_mtrlid
  2462. And Name = :ls_status_zj;
  2463. If commit_transaction.SQLCode <> 0 Then
  2464. ld_capacity_zj = 0
  2465. End If
  2466. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  2467. Next
  2468. End If
  2469. If li_ifunit = 0 Then arg_uqty = 0
  2470. Int li_ifupdate_date
  2471. If billtype = 1 Or &
  2472. billtype = 2 Or &
  2473. billtype = 3 Or &
  2474. billtype = 4 Or &
  2475. billtype = 5 Or &
  2476. billtype = 6 Or &
  2477. billtype = 8 Then
  2478. li_ifupdate_date = 1
  2479. Else
  2480. li_ifupdate_date = 0
  2481. End If
  2482. //-------------------------------------------更新库存
  2483. If li_ifcost = 1 Then //核算金额
  2484. Update u_mtrlware
  2485. Set noallocqty = noallocqty + :arg_qty ,
  2486. wsallocqty = wsallocqty + :arg_qty,
  2487. unoallocqty = unoallocqty + :arg_uqty,
  2488. wareamt = case noallocqty + :arg_qty when 0 then 0 else wareamt + round(:arg_qty * :arg_price,2) End,
  2489. waredate = case :li_ifupdate_date when 1 then getdate() else waredate End,
  2490. newprice = :arg_price,
  2491. dscrp = :arg_dscrp,
  2492. capacity = capacity + :ld_capacity * :arg_qty,
  2493. cost = case noallocqty + :arg_qty when 0 then cost else round((wareamt + :arg_qty * :arg_price) / ( noallocqty + :arg_qty ),:uo_option_cost_dec) End
  2494. Where ( mtrlid = :arg_mtrlid ) And
  2495. ( plancode = :arg_plancode ) And
  2496. ( storageid = :arg_storageid ) And
  2497. ( scid = :scid ) And
  2498. ( status = :arg_status ) And
  2499. ( sptid = :arg_sptid) And
  2500. ( dxflag = :arg_dxflag) And
  2501. ( woodcode = :arg_woodcode) And
  2502. ( pcode = :arg_pcode) And
  2503. ( mtrlcuscode = :arg_mtrlcuscode) And
  2504. ( Location = :arg_location) Using commit_transaction ;
  2505. If commit_transaction.SQLCode = 0 Then
  2506. If commit_transaction.SQLNRows = 0 Then
  2507. ///////////////////////// //
  2508. ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  2509. If ls_newid <= 0 Then
  2510. rslt = 0
  2511. Goto ext
  2512. End If
  2513. ///////////////////////// //
  2514. ld_cost = Round(arg_price,uo_option_cost_dec)
  2515. Insert Into u_mtrlware
  2516. ( scid,
  2517. mtrlwareid,
  2518. mtrlid,
  2519. storageid,
  2520. plancode,
  2521. status,
  2522. noallocqty,
  2523. unoallocqty,
  2524. wareamt,
  2525. planprice,
  2526. sptid,
  2527. dxflag,
  2528. woodcode,
  2529. pcode,
  2530. cost,
  2531. storMtrlprp,
  2532. dscrp,
  2533. mtrlcuscode,
  2534. location,
  2535. capacity,
  2536. wsallocqty)
  2537. Values (
  2538. :scid,
  2539. :ls_newid,
  2540. :arg_mtrlid,
  2541. :arg_storageid,
  2542. :arg_plancode,
  2543. :arg_status,
  2544. :arg_qty,
  2545. :arg_uqty,
  2546. round(:arg_price * :arg_qty,2),
  2547. :arg_planprice,
  2548. :arg_sptid,
  2549. :arg_dxflag,
  2550. :arg_woodcode,
  2551. :arg_pcode,
  2552. :ld_cost,
  2553. :li_storMtrlprp,
  2554. :arg_dscrp,
  2555. :arg_mtrlcuscode,
  2556. :arg_location,
  2557. :ld_capacity * :arg_qty,
  2558. :arg_qty) Using commit_transaction ;
  2559. If commit_transaction.SQLCode <> 0 Then
  2560. rslt = 0
  2561. arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  2562. Goto ext
  2563. End If
  2564. End If
  2565. Else
  2566. rslt = 0
  2567. If arg_status <> '' Then
  2568. ls_str = ' '+uo_option_change_status+':'+arg_status
  2569. End If
  2570. If arg_pcode <> '' Then
  2571. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  2572. End If
  2573. If arg_woodcode <> '' Then
  2574. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  2575. End If
  2576. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  2577. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  2578. arg_msg = "物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减"
  2579. ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  2580. arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  2581. ElseIf Pos(commit_transaction.SQLErrText,'CREATE RULE') > 0 And Pos(commit_transaction.SQLErrText,'cost') > 0 Then
  2582. arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号的库存金额不够冲减"
  2583. Else
  2584. arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText
  2585. End If
  2586. Goto ext
  2587. End If
  2588. Else // 不核算金额
  2589. Update u_mtrlware
  2590. Set wsallocqty = wsallocqty + :arg_qty ,
  2591. noallocqty = noallocqty + :arg_qty ,
  2592. unoallocqty = unoallocqty + :arg_uqty,
  2593. wareamt = 0,
  2594. waredate = case :li_ifupdate_date when 1 then getdate() else waredate End,
  2595. newprice = 0,
  2596. dscrp = :arg_dscrp,
  2597. cost = 0,
  2598. capacity = capacity + :ld_capacity * :arg_qty
  2599. Where ( mtrlid = :arg_mtrlid ) And
  2600. ( plancode = :arg_plancode ) And
  2601. ( storageid = :arg_storageid ) And
  2602. ( scid = :scid ) And
  2603. ( status = :arg_status ) And
  2604. ( sptid = :arg_sptid) And
  2605. ( dxflag = :arg_dxflag) And
  2606. ( woodcode = :arg_woodcode) And
  2607. ( pcode = :arg_pcode) And
  2608. ( mtrlcuscode = :arg_mtrlcuscode) And
  2609. ( Location = :arg_location) Using commit_transaction ;
  2610. If commit_transaction.SQLCode = 0 Then
  2611. If commit_transaction.SQLNRows = 0 Then
  2612. ///////////////////////// //
  2613. ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  2614. If ls_newid <= 0 Then
  2615. rslt = 0
  2616. Goto ext
  2617. End If
  2618. ///////////////////////// //
  2619. Insert Into u_mtrlware
  2620. ( scid,
  2621. mtrlwareid,
  2622. mtrlid,
  2623. storageid,
  2624. plancode,
  2625. status,
  2626. noallocqty,
  2627. unoallocqty,
  2628. wareamt,
  2629. planprice,
  2630. sptid,
  2631. dxflag,
  2632. woodcode,
  2633. pcode,
  2634. cost,
  2635. storMtrlprp,
  2636. dscrp,
  2637. mtrlcuscode,
  2638. location,
  2639. capacity,
  2640. wsallocqty)
  2641. Values (
  2642. :scid,
  2643. :ls_newid,
  2644. :arg_mtrlid,
  2645. :arg_storageid,
  2646. :arg_plancode,
  2647. :arg_status,
  2648. :arg_qty,
  2649. :arg_uqty,
  2650. 0,
  2651. 0,
  2652. :arg_sptid,
  2653. :arg_dxflag,
  2654. :arg_woodcode,
  2655. :arg_pcode,
  2656. 0,
  2657. :li_storMtrlprp,
  2658. :arg_dscrp,
  2659. :arg_mtrlcuscode,
  2660. :arg_location,
  2661. :ld_capacity * :arg_qty,
  2662. :arg_qty) Using commit_transaction ;
  2663. If commit_transaction.SQLCode <> 0 Then
  2664. rslt = 0
  2665. If Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  2666. If arg_status <> '' Then
  2667. ls_str = ' '+uo_option_change_status+':'+arg_status
  2668. End If
  2669. If arg_pcode <> '' Then
  2670. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  2671. End If
  2672. If arg_woodcode <> '' Then
  2673. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  2674. End If
  2675. arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  2676. Else
  2677. arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  2678. End If
  2679. Goto ext
  2680. End If
  2681. End If
  2682. Else
  2683. rslt = 0
  2684. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  2685. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  2686. arg_msg = "物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减"
  2687. ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  2688. If arg_status <> '' Then
  2689. ls_str = ' '+uo_option_change_status+':'+arg_status
  2690. End If
  2691. If arg_pcode <> '' Then
  2692. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  2693. End If
  2694. If arg_woodcode <> '' Then
  2695. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  2696. End If
  2697. arg_msg = "物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  2698. Else
  2699. arg_msg = "因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText
  2700. End If
  2701. Goto ext
  2702. End If
  2703. End If
  2704. ext:
  2705. If rslt = 0 Then
  2706. Rollback;
  2707. End If
  2708. Return rslt
  2709. end function
  2710. public function integer uof_ref_assign_plan (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1
  2711. Long i,j
  2712. datastore ds_ap
  2713. ds_ap = CREATE datastore
  2714. ds_ap.DataObject = 'ds_inwaremx_assign_plan'
  2715. ds_ap.SetTransObject(commit_transaction)
  2716. ds_ap.Retrieve(arg_scid,arg_mtrlwareid)
  2717. FOR i = 1 TO ds_ap.RowCount()
  2718. j++
  2719. arg_s_ap.planid[j] = ds_ap.Object.planid[i]
  2720. arg_s_ap.assigntype[j] = ds_ap.Object.assigntype[i]
  2721. arg_s_ap.scid[j] = ds_ap.Object.scid[i]
  2722. arg_s_ap.mtrlwareid[j] = ds_ap.Object.mtrlwareid[i]
  2723. arg_s_ap.relbillid[j] = ds_ap.Object.relbillid[i]
  2724. arg_s_ap.relprintid[j] = ds_ap.Object.relprintid[i]
  2725. arg_s_ap.fpgrade[j] = ds_ap.Object.fpgrade[i]
  2726. IF ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] >= arg_qty THEN
  2727. arg_s_ap.notassignqty[j] = arg_qty
  2728. GOTO ext
  2729. ELSE
  2730. arg_s_ap.notassignqty[j] = ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i]
  2731. arg_qty = arg_qty - (ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i])
  2732. END IF
  2733. NEXT
  2734. ext:
  2735. RETURN rslt
  2736. end function
  2737. public function integer uof_ref_assign_plan_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1
  2738. Long i,j
  2739. datastore ds_ap
  2740. ds_ap = CREATE datastore
  2741. ds_ap.DataObject = 'ds_inwaremx_assign_plan_cancel'
  2742. ds_ap.SetTransObject(commit_transaction)
  2743. ds_ap.Retrieve(arg_inwarecode,arg_inprintid)
  2744. FOR i = 1 TO ds_ap.RowCount()
  2745. j++
  2746. arg_s_ap.planid[j] = ds_ap.Object.planid[i]
  2747. arg_s_ap.notassignqty[j] = ds_ap.Object.qty[i]
  2748. NEXT
  2749. DESTROY ds_ap
  2750. RETURN rslt
  2751. end function
  2752. public function integer uof_ref_assign_cancel (string arg_inwarecode, long arg_inprintid, ref s_inwaremx_assign arg_s_a, ref string arg_msg);Int rslt = 1
  2753. Long i,j
  2754. datastore ds_a
  2755. ds_a = CREATE datastore
  2756. ds_a.DataObject = 'ds_inwaremx_assign_cancel'
  2757. ds_a.SetTransObject(commit_transaction)
  2758. ds_a.Retrieve(arg_inwarecode,arg_inprintid)
  2759. FOR i = 1 TO ds_a.RowCount()
  2760. j++
  2761. arg_s_a.assignid[j] = ds_a.Object.assignid[i]
  2762. arg_s_a.assignqty[j] = ds_a.Object.assignqty[i]
  2763. NEXT
  2764. destroy ds_a
  2765. RETURN rslt
  2766. end function
  2767. public function integer uof_ref_mtrlwareid (long arg_scid, long arg_storageid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, string arg_location, long arg_sptid, string arg_mtrlcuscode, ref long arg_mtrlwareid, ref string arg_msg);Int rslt = 1
  2768. Long ll_mtrlwareid_rst
  2769. SELECT u_mtrlware.mtrlwareid
  2770. INTO :ll_mtrlwareid_rst
  2771. FROM u_mtrlware
  2772. WHERE u_mtrlware.scid = :arg_scid
  2773. AND u_mtrlware.storageid = :arg_storageid
  2774. AND u_mtrlware.mtrlid = :arg_mtrlid
  2775. AND u_mtrlware.status = :arg_status
  2776. AND u_mtrlware.woodcode = :arg_woodcode
  2777. AND u_mtrlware.pcode = :arg_pcode
  2778. AND u_mtrlware.plancode = :arg_plancode
  2779. AND u_mtrlware.location = :arg_location
  2780. AND u_mtrlware.sptid = :arg_sptid
  2781. AND u_mtrlware.mtrlcuscode = :arg_mtrlcuscode
  2782. Using commit_transaction;
  2783. IF commit_transaction.SQLCode <> 0 THEN
  2784. arg_msg = '查询库存id失败,'+commit_transaction.SQLErrText
  2785. rslt = 0
  2786. GOTO ext
  2787. END IF
  2788. IF IsNull(ll_mtrlwareid_rst) THEN ll_mtrlwareid_rst = 0
  2789. IF ll_mtrlwareid_rst = 0 THEN
  2790. arg_msg = '进仓明细库存id为0'
  2791. rslt = 0
  2792. GOTO ext
  2793. END IF
  2794. arg_mtrlwareid = ll_mtrlwareid_rst
  2795. ext:
  2796. RETURN rslt
  2797. end function
  2798. public function integer uof_check_barcodeqty (ref string arg_msg);Long i
  2799. Int rslt = 1
  2800. Decimal ld_inqty_outtype_2,ld_inqty_barcode
  2801. IF billtype <> 1 And billtype <> 3 And billtype <> 8 And billtype <> 9 THEN
  2802. rslt = 1
  2803. GOTO ext
  2804. END IF
  2805. IF billtype = 8 And (sptname = '更新成本价(正单)' Or sptname = '调整成本价(负单)') THEN
  2806. rslt = 1
  2807. GOTO ext
  2808. END IF
  2809. IF billtype = 1 THEN
  2810. FOR i = 1 To it_mxbt_mx
  2811. IF thflag = 0 THEN
  2812. IF inwaremx_mx[i].outtype = 2 THEN ld_inqty_outtype_2 += inwaremx_mx[i].qty
  2813. ELSE
  2814. IF inwaremx_mx[i].outtype = 2 THEN ld_inqty_outtype_2 += Abs(inwaremx_mx[i].qty)
  2815. END IF
  2816. NEXT
  2817. ELSE
  2818. FOR i = 1 To it_mxbt
  2819. IF inwaremx[i].outtype = 2 THEN ld_inqty_outtype_2 += inwaremx[i].qty
  2820. NEXT
  2821. END IF
  2822. FOR i = 1 To it_mxbt_barcode
  2823. ld_inqty_barcode += s_mx_barcode[i].qty * s_mx_barcode[i].packqty
  2824. NEXT
  2825. IF ld_inqty_outtype_2 <> ld_inqty_barcode THEN
  2826. rslt = 0
  2827. IF billtype = 1 THEN
  2828. arg_msg = '收货单包件明细按条码进仓数量与条码明细数量不相符,请检查包件明细的物料资料是否设置了使用条码进出仓'
  2829. ELSE
  2830. arg_msg = '进仓单明细按条码进仓数量与条码明细数量不相符,,请检查进仓明细的物料资料是否设置了使用条码进出仓'
  2831. END IF
  2832. GOTO ext
  2833. END IF
  2834. ext:
  2835. RETURN rslt
  2836. end function
  2837. public function integer uof_inbarcode_add (integer arg_billtype, long arg_scid, long arg_inwareid, long arg_printid, string arg_barcode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2838. INSERT INTO U_inwaremx_mx_barcode
  2839. (billtype,scid,inwareid,printid,barcode,qty)
  2840. VALUES
  2841. (:arg_billtype,
  2842. :arg_scid,:arg_inwareid,:arg_printid,:arg_barcode,:arg_qty);
  2843. IF sqlca.SQLCode <> 0 THEN
  2844. arg_msg = '进仓明细保存条码失败,行:'+String(arg_printid)+',条码:'+arg_barcode+','+sqlca.SQLErrText
  2845. rslt = 0
  2846. GOTO ext
  2847. END IF
  2848. ext:
  2849. IF rslt = 0 THEN
  2850. ROLLBACK;
  2851. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2852. COMMIT;
  2853. END IF
  2854. RETURN rslt
  2855. end function
  2856. public function integer c_priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  2857. DateTime null_dt
  2858. SetNull(null_dt)
  2859. IF uo_option_inout_type = -1000 THEN
  2860. rslt = 0
  2861. arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!'
  2862. GOTO ext
  2863. END IF
  2864. IF uo_option_barcode_inwareother_paudit = -1000 THEN
  2865. rslt = 0
  2866. arg_msg = '选项:[206]仓库使用条码流程,读取初始默认值失败,操作取消!'
  2867. GOTO ext
  2868. END IF
  2869. IF uo_option_barcode_inwarebuy_paudit = -1000 THEN
  2870. rslt = 0
  2871. arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!'
  2872. GOTO ext
  2873. END IF
  2874. IF uo_option_barcode_inwarecp_paudit = -1000 THEN
  2875. rslt = 0
  2876. arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!'
  2877. GOTO ext
  2878. END IF
  2879. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  2880. rslt = 0
  2881. GOTO ext
  2882. END IF
  2883. IF priceflag = 0 THEN
  2884. rslt = 0
  2885. arg_msg = "单据还未确认,不能反确认"
  2886. GOTO ext
  2887. END IF
  2888. IF uo_option_inout_type = 2 And &
  2889. ( billtype = 1 And uo_option_barcode_inwarebuy_paudit = 1 Or &
  2890. billtype = 3 And uo_option_barcode_inwarecp_paudit = 1 Or &
  2891. billtype = 8 And uo_option_barcode_inwareother_paudit = 1 ) THEN
  2892. IF flag = 1 THEN
  2893. rslt = 0
  2894. arg_msg = "单据已仓库审核"
  2895. GOTO ext
  2896. END IF
  2897. END IF
  2898. IF uo_option_barcode_inwarecp_paudit = 2 THEN
  2899. IF flag = 1 THEN
  2900. rslt = 0
  2901. arg_msg = "单据已仓库审核"
  2902. GOTO ext
  2903. END IF
  2904. END IF
  2905. UPDATE u_inware
  2906. SET priceflag = 0,
  2907. pricedate = :null_dt,
  2908. pricerep = ''
  2909. WHERE inwareid = :arg_billid
  2910. AND scid = :arg_scid
  2911. And priceflag = 1;
  2912. IF commit_transaction.SQLCode <> 0 THEN
  2913. rslt = 0
  2914. arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  2915. GOTO ext
  2916. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2917. rslt = 0
  2918. arg_msg = "单据正在反确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2919. GOTO ext
  2920. END IF
  2921. priceflag = 0
  2922. ext:
  2923. IF rslt = 0 THEN
  2924. ROLLBACK Using commit_transaction;
  2925. ELSEIF rslt = 1 And arg_ifcommit THEN
  2926. COMMIT Using commit_transaction;
  2927. END IF
  2928. RETURN rslt
  2929. end function
  2930. public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  2931. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  2932. rslt = 0
  2933. GOTO ext
  2934. END IF
  2935. IF priceflag = 1 THEN
  2936. rslt = 0
  2937. arg_msg = "单据已经确认,不能再确认"
  2938. GOTO ext
  2939. END IF
  2940. UPDATE u_inware
  2941. SET priceflag = 1,
  2942. pricedate = getdate(),
  2943. pricerep = :publ_operator
  2944. WHERE inwareid = :arg_billid
  2945. AND scid = :arg_scid
  2946. AND priceflag = 0 ;
  2947. IF commit_transaction.SQLCode <> 0 THEN
  2948. rslt = 0
  2949. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  2950. GOTO ext
  2951. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2952. rslt = 0
  2953. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2954. GOTO ext
  2955. END IF
  2956. priceflag = 1
  2957. ext:
  2958. IF rslt = 0 THEN
  2959. ROLLBACK USING commit_transaction;
  2960. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2961. COMMIT USING commit_transaction;
  2962. END IF
  2963. RETURN rslt
  2964. end function
  2965. public function integer uof_check_qty_to_bqty (ref string arg_msg);Int rslt = 1
  2966. //Long ll_j,ll_k
  2967. //Long ll_f,ll_arr
  2968. //Long ll_mtrlware_arr[]
  2969. //Decimal ld_outqty_arr[]
  2970. //Long ll_mtrlware_arr_bill[]
  2971. //Decimal ld_outqty_arr_bill[]
  2972. //Boolean lb_equal = FALSE
  2973. //
  2974. ////计算条码出仓数
  2975. //FOR ll_j = 1 TO it_mxbt_barcode
  2976. // ll_f = 0
  2977. // ll_arr = UpperBound(ll_mtrlware_arr)
  2978. // FOR ll_k = 1 TO ll_arr
  2979. // IF ll_mtrlware_arr[ll_k] = s_mx_barcode[ll_j].mtrlwareid THEN
  2980. // ll_f = ll_k
  2981. // EXIT
  2982. // END IF
  2983. // NEXT
  2984. //
  2985. // IF ll_f > 0 THEN
  2986. // ld_outqty_arr[ll_f] += s_mx_barcode[ll_j].outqty
  2987. // ELSE
  2988. // ll_arr++
  2989. // ll_mtrlware_arr[ll_arr] = s_mx_barcode[ll_j].mtrlwareid
  2990. // ld_outqty_arr[ll_arr] = s_mx_barcode[ll_j].outqty
  2991. // END IF
  2992. //NEXT
  2993. //
  2994. ////计算出仓明细出仓数
  2995. //IF billtype = 1 THEN
  2996. // FOR ll_j = 1 TO it_mxbt_mx
  2997. // ll_f = 0
  2998. // ll_arr = UpperBound(ll_mtrlware_arr_bill)
  2999. // FOR ll_k = 1 TO ll_arr
  3000. // IF ll_mtrlware_arr_bill[ll_k] = outwaremx_mx[ll_j].mtrlwareid THEN
  3001. // ll_f = ll_k
  3002. // EXIT
  3003. // END IF
  3004. // NEXT
  3005. //
  3006. // IF ll_f > 0 THEN
  3007. // ld_outqty_arr_bill[ll_f] += outwaremx_mx[ll_j].qty
  3008. // ELSE
  3009. // ll_arr++
  3010. // ll_mtrlware_arr_bill[ll_arr] = outwaremx_mx[ll_j].mtrlwareid
  3011. // ld_outqty_arr_bill[ll_arr] = outwaremx_mx[ll_j].qty
  3012. // END IF
  3013. // NEXT
  3014. //ELSE
  3015. // FOR ll_j = 1 TO it_mxbt
  3016. // ll_f = 0
  3017. // ll_arr = UpperBound(ll_mtrlware_arr_bill)
  3018. // FOR ll_k = 1 TO ll_arr
  3019. // IF ll_mtrlware_arr_bill[ll_k] = outwaremx[ll_j].mtrlwareid THEN
  3020. // ll_f = ll_k
  3021. // EXIT
  3022. // END IF
  3023. // NEXT
  3024. //
  3025. // IF ll_f > 0 THEN
  3026. // ld_outqty_arr_bill[ll_f] += outwaremx[ll_j].qty
  3027. // ELSE
  3028. // ll_arr++
  3029. // ll_mtrlware_arr_bill[ll_arr] = outwaremx[ll_j].mtrlwareid
  3030. // ld_outqty_arr_bill[ll_arr] = outwaremx[ll_j].qty
  3031. // END IF
  3032. // NEXT
  3033. //END IF
  3034. //
  3035. ////检查1
  3036. //FOR ll_j = 1 TO UpperBound(ll_mtrlware_arr_bill)
  3037. // lb_equal = FALSE
  3038. // IF ld_outqty_arr_bill[ll_j] = 0 THEN CONTINUE
  3039. //
  3040. // FOR ll_k = 1 TO UpperBound(ll_mtrlware_arr)
  3041. // IF ll_mtrlware_arr_bill[ll_j] = ll_mtrlware_arr[ll_k] THEN
  3042. // IF ld_outqty_arr_bill[ll_j] = ld_outqty_arr[ll_k] THEN
  3043. // lb_equal = TRUE
  3044. // END IF
  3045. // END IF
  3046. // NEXT
  3047. //
  3048. // IF NOT lb_equal THEN
  3049. // arg_msg = '出仓明细按条码出仓物料的出仓数与条码扫描明细不相等,请检查'
  3050. // rslt = 0
  3051. // GOTO ext
  3052. // END IF
  3053. //NEXT
  3054. //
  3055. ////检查2
  3056. //FOR ll_j = 1 TO UpperBound(ll_mtrlware_arr)
  3057. // lb_equal = FALSE
  3058. // IF ld_outqty_arr[ll_j] = 0 THEN CONTINUE
  3059. //
  3060. // FOR ll_k = 1 TO UpperBound(ll_mtrlware_arr_bill)
  3061. // IF ll_mtrlware_arr[ll_j] = ll_mtrlware_arr_bill[ll_k] THEN
  3062. // IF ld_outqty_arr[ll_j] = ld_outqty_arr_bill[ll_k] THEN
  3063. // lb_equal = TRUE
  3064. // END IF
  3065. // END IF
  3066. // NEXT
  3067. //
  3068. // IF NOT lb_equal THEN
  3069. // arg_msg = '条码扫描明细与出仓明细按条码出仓物料的出仓数不相等,请检查'
  3070. // rslt = 0
  3071. // GOTO ext
  3072. // END IF
  3073. //NEXT
  3074. //
  3075. //
  3076. //ext:
  3077. RETURN rslt
  3078. end function
  3079. public function integer uof_set_qty_equal_bqty (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3080. Int li_ref_outtype
  3081. Long ll_i,ll_j,ll_k
  3082. Long ll_f,ll_arr
  3083. Decimal ld_updateqty
  3084. Long ll_mtrlid,ll_cusid,ll_orderid
  3085. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location
  3086. s_mtrlware_noalloc_array arg_s_inmx,arg_s_inmx_barcode
  3087. IF arg_inwareid <= 0 THEN
  3088. arg_msg = '错误的单据id'
  3089. rslt = 0
  3090. GOTO ext
  3091. END IF
  3092. IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  3093. rslt = 0
  3094. GOTO ext
  3095. END IF
  3096. IF f_rst_storage_outtype(storageid,li_ref_outtype) = 0 THEN
  3097. arg_msg = '查询仓库出仓策略失败,请检查仓库资料'
  3098. rslt = 0
  3099. GOTO ext
  3100. END IF
  3101. IF li_ref_outtype <> 2 and li_ref_outtype <> 3 THEN
  3102. arg_msg = '仓库出仓策略不是使用条码出仓,操作取消,请检查仓库资料'
  3103. rslt = 0
  3104. GOTO ext
  3105. END IF
  3106. IF priceflag = 0 THEN
  3107. arg_msg = '单据未确认,操作取消'
  3108. rslt = 0
  3109. GOTO ext
  3110. END IF
  3111. IF flag = 1 THEN
  3112. arg_msg = '单据已仓审,操作取消'
  3113. rslt = 0
  3114. GOTO ext
  3115. END IF
  3116. //计算条码出仓数
  3117. FOR ll_j = 1 TO it_mxbt_barcode
  3118. ll_f = 0
  3119. SELECT u_getbar.mtrlid,
  3120. u_getbar.cusid,
  3121. u_getbar.status,
  3122. u_getbar.woodcode,
  3123. u_getbar.pcode,
  3124. u_getbar.plancode,
  3125. u_getbar.mtrlcuscode,
  3126. u_getbar.location,
  3127. u_getbar.orderid
  3128. INTO :ll_mtrlid,
  3129. :ll_cusid,
  3130. :ls_status,
  3131. :ls_woodcode,
  3132. :ls_pcode,
  3133. :ls_plancode,
  3134. :ls_mtrlcuscode,
  3135. :ls_location,
  3136. :ll_orderid
  3137. FROM u_getbar,u_mtrlware_mx
  3138. WHERE u_getbar.getbarid = u_mtrlware_mx.getbarid
  3139. AND u_mtrlware_mx.barcode = :s_mx_barcode[ll_j].barcode
  3140. USING commit_transaction;
  3141. IF commit_transaction.SQLCode <> 0 THEN
  3142. arg_msg = '条码:'+s_mx_barcode[ll_j].barcode+',查询条码信息失败,'+commit_transaction.SQLErrText
  3143. rslt = 0
  3144. GOTO ext
  3145. END IF
  3146. ll_arr = UpperBound(arg_s_inmx_barcode.mtrlid)
  3147. FOR ll_k = 1 TO ll_arr
  3148. IF arg_s_inmx_barcode.mtrlid[ll_k] = ll_mtrlid AND &
  3149. arg_s_inmx_barcode.sptid[ll_k] = ll_cusid AND &
  3150. arg_s_inmx_barcode.status[ll_k] = ls_status AND &
  3151. arg_s_inmx_barcode.woodcode[ll_k] = ls_woodcode AND &
  3152. arg_s_inmx_barcode.pcode[ll_k] = ls_pcode AND &
  3153. arg_s_inmx_barcode.plancode[ll_k] = ls_plancode AND &
  3154. arg_s_inmx_barcode.mtrlcuscode[ll_k] = ls_mtrlcuscode AND &
  3155. arg_s_inmx_barcode.Location[ll_k] = ls_location AND &
  3156. arg_s_inmx_barcode.orderid[ll_k] = ll_orderid THEN
  3157. ll_f = ll_k
  3158. EXIT
  3159. END IF
  3160. NEXT
  3161. IF ll_f > 0 THEN
  3162. arg_s_inmx_barcode.noallocqty[ll_f] += s_mx_barcode[ll_j].inqty
  3163. ELSE
  3164. ll_arr++
  3165. arg_s_inmx_barcode.mtrlid[ll_arr] = ll_mtrlid
  3166. arg_s_inmx_barcode.sptid[ll_arr] = ll_cusid
  3167. arg_s_inmx_barcode.status[ll_arr] = ls_status
  3168. arg_s_inmx_barcode.woodcode[ll_arr] = ls_woodcode
  3169. arg_s_inmx_barcode.pcode[ll_arr] = ls_pcode
  3170. arg_s_inmx_barcode.plancode[ll_arr] = ls_plancode
  3171. arg_s_inmx_barcode.mtrlcuscode[ll_arr] = ls_mtrlcuscode
  3172. arg_s_inmx_barcode.Location[ll_arr] = ls_location
  3173. arg_s_inmx_barcode.orderid[ll_arr] = ll_orderid
  3174. arg_s_inmx_barcode.noallocqty[ll_arr] = s_mx_barcode[ll_j].inqty
  3175. END IF
  3176. NEXT
  3177. UPDATE u_inwaremx
  3178. SET u_inwaremx.uqty = 0,
  3179. u_inwaremx.qty = 0
  3180. FROM u_inwaremx,u_mtrldef
  3181. WHERE u_inwaremx.scid = :arg_scid
  3182. AND u_inwaremx.inwareid = :arg_inwareid
  3183. AND u_inwaremx.mtrlid = u_mtrldef.mtrlid
  3184. AND u_mtrldef.outtype = 2 USING commit_transaction;
  3185. IF commit_transaction.SQLCode <> 0 THEN
  3186. arg_msg = '清除进仓明细进仓数失败,'+commit_transaction.SQLErrText
  3187. rslt = 0
  3188. GOTO ext
  3189. END IF
  3190. FOR ll_i = 1 TO it_mxbt
  3191. ld_updateqty = 0
  3192. IF inwaremx[ll_i].outtype <> 2 THEN CONTINUE
  3193. FOR ll_k = 1 TO UpperBound(arg_s_inmx_barcode.mtrlid)
  3194. IF arg_s_inmx_barcode.noallocqty[ll_k] = 0 THEN CONTINUE
  3195. IF inwaremx[ll_i].mtrlid = arg_s_inmx_barcode.mtrlid[ll_k] AND &
  3196. inwaremx[ll_i].sptid = arg_s_inmx_barcode.sptid[ll_k] AND &
  3197. inwaremx[ll_i].status = arg_s_inmx_barcode.status[ll_k] AND &
  3198. inwaremx[ll_i].woodcode = arg_s_inmx_barcode.woodcode[ll_k] AND &
  3199. inwaremx[ll_i].pcode = arg_s_inmx_barcode.pcode[ll_k] AND &
  3200. inwaremx[ll_i].plancode = arg_s_inmx_barcode.plancode[ll_k] AND &
  3201. inwaremx[ll_i].mtrlcuscode = arg_s_inmx_barcode.mtrlcuscode[ll_k] AND &
  3202. inwaremx[ll_i].Location = arg_s_inmx_barcode.Location[ll_k] AND &
  3203. inwaremx[ll_i].relid = arg_s_inmx_barcode.orderid[ll_k] THEN
  3204. IF inwaremx[ll_i].qty >= arg_s_inmx_barcode.noallocqty[ll_k] THEN
  3205. ld_updateqty = arg_s_inmx_barcode.noallocqty[ll_k]
  3206. arg_s_inmx_barcode.noallocqty[ll_k] = 0
  3207. ELSE
  3208. ld_updateqty = inwaremx[ll_i].qty
  3209. arg_s_inmx_barcode.noallocqty[ll_k] = arg_s_inmx_barcode.noallocqty[ll_k] - inwaremx[ll_i].qty
  3210. END IF
  3211. EXIT
  3212. END IF
  3213. NEXT
  3214. IF ld_updateqty > 0 THEN
  3215. UPDATE u_inwaremx
  3216. SET u_inwaremx.uqty = :ld_updateqty,
  3217. u_inwaremx.qty = :ld_updateqty
  3218. WHERE u_inwaremx.scid = :arg_scid
  3219. AND u_inwaremx.inwareid = :arg_inwareid
  3220. AND u_inwaremx.printid = :inwaremx[ll_i].printid USING commit_transaction;
  3221. IF commit_transaction.SQLCode <> 0 THEN
  3222. arg_msg = '行:'+String(ll_i)+',更新明细条码进仓数到明细进仓数失败,'+commit_transaction.SQLErrText
  3223. rslt = 0
  3224. GOTO ext
  3225. END IF
  3226. END IF
  3227. NEXT
  3228. ext:
  3229. IF rslt = 0 THEN
  3230. ROLLBACK USING commit_transaction;
  3231. ELSEIF rslt = 1 AND arg_ifcommit THEN
  3232. COMMIT USING commit_transaction;
  3233. END IF
  3234. RETURN rslt
  3235. end function
  3236. public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  3237. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  3238. rslt = 0
  3239. GOTO ext
  3240. END IF
  3241. IF secflag = 1 THEN
  3242. rslt = 0
  3243. arg_msg = "单据已经财审,不能再财审"
  3244. GOTO ext
  3245. END IF
  3246. UPDATE u_inware
  3247. SET secflag = 1,
  3248. secauditingdate = getdate(),
  3249. secauditingrep = :publ_operator
  3250. WHERE inwareid = :arg_billid
  3251. AND scid = :arg_scid
  3252. And secflag = 0 ;
  3253. IF commit_transaction.SQLCode <> 0 THEN
  3254. rslt = 0
  3255. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  3256. GOTO ext
  3257. ELSEIF commit_transaction.SQLNRows = 0 THEN
  3258. rslt = 0
  3259. arg_msg = "单据正在财审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  3260. GOTO ext
  3261. END IF
  3262. secflag = 1
  3263. ext:
  3264. IF rslt = 0 THEN
  3265. ROLLBACK Using commit_transaction;
  3266. ELSEIF rslt = 1 And arg_ifcommit THEN
  3267. COMMIT Using commit_transaction;
  3268. END IF
  3269. RETURN rslt
  3270. end function
  3271. public function integer uof_c_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  3272. DateTime null_dt
  3273. SetNull(null_dt)
  3274. Int li_StoreBalcType,li_AmtAuditFlag
  3275. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  3276. rslt = 0
  3277. GOTO ext
  3278. END IF
  3279. IF secflag = 0 THEN
  3280. rslt = 0
  3281. arg_msg = "单据不在财审状态,不能执行财撤"
  3282. GOTO ext
  3283. END IF
  3284. //检查仓库是否分开结存
  3285. IF balcdateint <> 0 THEN
  3286. SELECT StoreBalcType
  3287. INTO :li_StoreBalcType
  3288. FROM u_storage
  3289. Where storageid = :storageid;
  3290. IF sqlca.SQLCode <> 0 THEN
  3291. li_StoreBalcType = 0
  3292. END IF
  3293. //如果分开结存,检查结存表是否已金额结存
  3294. IF li_StoreBalcType = 1 THEN
  3295. SELECT top 1 AmtAuditFlag
  3296. INTO :li_AmtAuditFlag
  3297. FROM u_warebalc
  3298. WHERE storageid = :storageid
  3299. And balcdateint = :balcdateint;
  3300. IF sqlca.SQLCode <> 0 THEN
  3301. li_AmtAuditFlag = 0
  3302. END IF
  3303. IF li_AmtAuditFlag = 1 THEN
  3304. rslt = 0
  3305. arg_msg = '仓库结存日期段已执行过金额结存,不能财撤单据'
  3306. GOTO ext
  3307. END IF
  3308. END IF
  3309. END IF
  3310. UPDATE u_inware
  3311. SET secflag = 0,
  3312. secauditingdate = :null_dt,
  3313. secauditingrep = ''
  3314. WHERE inwareid = :arg_billid
  3315. AND scid = :arg_scid
  3316. And secflag = 1 ;
  3317. IF commit_transaction.SQLCode <> 0 THEN
  3318. rslt = 0
  3319. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  3320. GOTO ext
  3321. ELSEIF commit_transaction.SQLNRows = 0 THEN
  3322. rslt = 0
  3323. arg_msg = "单据正在财审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  3324. GOTO ext
  3325. END IF
  3326. secflag = 0
  3327. ext:
  3328. IF rslt = 0 THEN
  3329. ROLLBACK Using commit_transaction;
  3330. ELSEIF rslt = 1 And arg_ifcommit THEN
  3331. COMMIT Using commit_transaction;
  3332. END IF
  3333. RETURN rslt
  3334. end function
  3335. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid, decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid, string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax);
  3336. //long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status,
  3337. //decimal arg_uqty, decimal arg_enprice, decimal arg_rebate, string arg_mxdscrp,
  3338. //decimal arg_jgprice, long arg_relid, integer arg_ifrel, string arg_woodcode, string arg_pcode,
  3339. //long arg_cusid_sptid, string arg_unit, decimal arg_rate, decimal arg_qty, long arg_relprintid,
  3340. //decimal arg_checkqty, string arg_result, string arg_waredscrp, long arg_relbillid, long arg_relbillprintid,
  3341. //string arg_mtrlcuscode, string arg_location, decimal arg_deliqty, decimal arg_tax)
  3342. s_inwaremx s_mx
  3343. s_mx.printid = arg_printid
  3344. s_mx.mtrlid = arg_mtrlid
  3345. s_mx.mtrlcode = arg_mtrlcode
  3346. s_mx.plancode = arg_plancode
  3347. s_mx.status = arg_status
  3348. s_mx.uqty = arg_uqty
  3349. s_mx.enprice = arg_enprice
  3350. s_mx.rebate = arg_rebate
  3351. s_mx.mxdscrp = arg_mxdscrp
  3352. s_mx.jgprice = arg_jgprice
  3353. s_mx.relid = arg_relid
  3354. s_mx.ifrel = arg_ifrel
  3355. s_mx.woodcode = arg_woodcode
  3356. s_mx.pcode = arg_pcode
  3357. s_mx.sptid = arg_cusid_sptid
  3358. s_mx.unit = arg_unit
  3359. s_mx.rate = arg_rate
  3360. s_mx.qty = arg_qty
  3361. s_mx.relprintid = arg_relprintid
  3362. s_mx.checkqty = arg_checkqty
  3363. s_mx.result = arg_result
  3364. s_mx.waredscrp = arg_waredscrp
  3365. s_mx.relbillid = arg_relbillid
  3366. s_mx.relbillprintid = arg_relbillprintid
  3367. s_mx.mtrlcuscode = arg_mtrlcuscode
  3368. s_mx.location = arg_location
  3369. s_mx.deliqty = arg_deliqty
  3370. s_mx.tax = arg_tax
  3371. return acceptmx(s_mx, arg_msg)
  3372. /*
  3373. Long rslt = 1,cnt = 0,ls_i
  3374. Decimal ld_planprice,ld_cost
  3375. Decimal ld_noauditqty,ld_bootqty
  3376. Decimal ld_consignedqty,ld_uqty
  3377. String ls_relcode,ls_unit
  3378. Decimal lde_mx_qty
  3379. Decimal ld_uprate,ld_upqty
  3380. Int li_ifpack,li_ifpackpro
  3381. Decimal ld_capacity,ld_capacity_zj
  3382. s_mtrlcfg_expr s_pz[]
  3383. String ls_status_zj
  3384. Long ll_i
  3385. Decimal lde_newprice
  3386. IF uo_option_buy_zero = -1000 THEN
  3387. rslt = 0
  3388. arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!'
  3389. GOTO ext
  3390. END IF
  3391. IF uo_option_wfjg_zero = -1000 THEN
  3392. rslt = 0
  3393. arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!'
  3394. GOTO ext
  3395. END IF
  3396. IF uo_option_change_status = '-1000' THEN
  3397. rslt = 0
  3398. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  3399. GOTO ext
  3400. END IF
  3401. IF uo_option_change_woodcode = '-1000' THEN
  3402. rslt = 0
  3403. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  3404. GOTO ext
  3405. END IF
  3406. IF uo_option_change_pcode = '-1000' THEN
  3407. rslt = 0
  3408. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  3409. GOTO ext
  3410. END IF
  3411. IF uo_option_unit_dec = -1000 THEN
  3412. rslt = 0
  3413. arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!'
  3414. GOTO ext
  3415. END IF
  3416. IF uo_option_ifovertask = -1000 THEN
  3417. rslt = 0
  3418. arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!'
  3419. GOTO ext
  3420. END IF
  3421. IF uo_option_ifovertask_cp = -1000 THEN
  3422. rslt = 0
  3423. arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!'
  3424. GOTO ext
  3425. END IF
  3426. uo_spt_price uo_sptprice
  3427. uo_sptprice = Create uo_spt_price
  3428. IF it_newbegin = False And it_updatebegin = False THEN
  3429. rslt = 0
  3430. arg_msg = "非编辑状态不可以使用,操作取消"
  3431. GOTO ext
  3432. END IF
  3433. //清除空值
  3434. IF IsNull(arg_printid) THEN arg_printid = 0
  3435. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  3436. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  3437. IF IsNull(arg_plancode) THEN arg_plancode = ''
  3438. IF IsNull(arg_status) THEN arg_status = ''
  3439. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  3440. IF IsNull(arg_pcode) THEN arg_pcode = ''
  3441. IF IsNull(arg_uqty) THEN arg_uqty = 0
  3442. IF IsNull(arg_enprice) THEN arg_enprice = 0
  3443. IF IsNull(arg_rebate) THEN arg_rebate = 1
  3444. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  3445. IF IsNull(arg_jgprice) THEN arg_jgprice = 0
  3446. IF IsNull(arg_relid) THEN arg_relid = 0
  3447. IF IsNull(arg_ifrel) THEN arg_ifrel = 0
  3448. IF IsNull(arg_mxdscrp) THEN arg_woodcode = ''
  3449. IF IsNull(arg_pcode) THEN arg_pcode = ''
  3450. IF IsNull(arg_cusid_sptid) THEN arg_cusid_sptid = 0
  3451. IF IsNull(arg_relprintid) THEN arg_relprintid = 0
  3452. IF IsNull(arg_checkqty) THEN arg_checkqty = 0
  3453. IF IsNull(arg_result) THEN arg_result = ''
  3454. IF IsNull(arg_waredscrp) THEN arg_waredscrp = ''
  3455. IF IsNull(arg_relbillid) THEN arg_relbillid = 0
  3456. IF IsNull(arg_relbillprintid) THEN arg_relbillprintid = 0
  3457. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  3458. IF IsNull(arg_location) THEN arg_location = ''
  3459. IF IsNull(arg_deliqty) THEN arg_deliqty = 0
  3460. IF IsNull(arg_tax) THEN arg_tax = 0
  3461. //IF arg_rebate = 0 THEN arg_rebate = 1
  3462. IF IsNull(arg_unit) THEN arg_unit = ''
  3463. IF IsNull(arg_rate) THEN arg_rate = 1
  3464. IF arg_rate = 0 THEN arg_rate = 1
  3465. IF arg_mtrlid = 0 THEN //OR arg_uqty = 0 OR arg_qty = 0 THEN
  3466. rslt = 1
  3467. GOTO ext
  3468. END IF
  3469. arg_status = Trim(arg_status)
  3470. arg_woodcode = Trim(arg_woodcode)
  3471. arg_pcode = Trim(arg_pcode)
  3472. arg_plancode = Trim(arg_plancode)
  3473. arg_mtrlcuscode = Trim(arg_mtrlcuscode)
  3474. arg_location = Trim(arg_location)
  3475. IF billtype <> 1 THEN
  3476. mrate = 1
  3477. END IF
  3478. //检查物料id
  3479. Int li_statusflag,li_woodcodeflag,li_pcodeflag
  3480. Int li_status_check,li_woodcode_check,li_pcode_check
  3481. Int li_outtype_mtrl,li_ifunit
  3482. SELECT unit,
  3483. statusflag,
  3484. woodcodeflag,
  3485. pcodeflag,
  3486. status_check,
  3487. woodcode_check,
  3488. pcode_check,
  3489. capacity * capaparm,
  3490. outtype,
  3491. ifpack,
  3492. ifpackpro,
  3493. ifunit
  3494. INTO :ls_unit,
  3495. :li_statusflag,
  3496. :li_woodcodeflag,
  3497. :li_pcodeflag,
  3498. :li_status_check,
  3499. :li_woodcode_check,
  3500. :li_pcode_check,
  3501. :ld_capacity,
  3502. :li_outtype_mtrl,
  3503. :li_ifpack,
  3504. :li_ifpackpro,
  3505. :li_ifunit
  3506. FROM u_mtrldef
  3507. Where u_mtrldef.mtrlid = :arg_mtrlid Using commit_transaction ;
  3508. IF commit_transaction.SQLCode <> 0 THEN
  3509. rslt = 0
  3510. arg_msg = '行:'+String(arg_printid)+",查询操作失败,物料或产品编号:"+arg_mtrlcode
  3511. GOTO ext
  3512. END IF
  3513. IF billtype <> 23 and billtype <> 25 And billtype <> 1 And ( li_ifpackpro = 1 Or li_ifpackpro = 2 ) THEN
  3514. arg_msg = "第"+String(arg_printid)+"行,个性包件产品或通用包件产品不能直接开进仓单,操作取消"
  3515. rslt = 0
  3516. GOTO ext
  3517. END IF
  3518. IF billtype <> 9 THEN
  3519. IF li_ifunit = 1 THEN
  3520. IF arg_uqty = arg_qty And arg_unit <> ls_unit THEN
  3521. rslt = 0
  3522. arg_msg = "第"+String(arg_printid)+"行,物料使用库存双数量核算,但录入的计量单位数量与库存单位数量相同,操作取消"
  3523. GOTO ext
  3524. END IF
  3525. END IF
  3526. END IF
  3527. IF li_ifpack = 2 And arg_mtrlcuscode = '' THEN
  3528. arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为个性包件,但没有产品批号,请检查"
  3529. rslt = 0
  3530. GOTO ext
  3531. END IF
  3532. IF li_ifpackpro = 2 And arg_mtrlcuscode = '' THEN
  3533. arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为个性包件产品,但没有产品批号,请检查"
  3534. rslt = 0
  3535. GOTO ext
  3536. END IF
  3537. IF li_ifpackpro = 4 And arg_mtrlcuscode = '' THEN
  3538. arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+",为组合配置整排散进包件产品,但没有产品批号,请检查"
  3539. rslt = 0
  3540. GOTO ext
  3541. END IF
  3542. f_get_planprice_mtrl(arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_planprice)
  3543. IF Not ((uo_option_buy_zero = 1 And billtype = 1) Or &
  3544. (uo_option_wfjg_zero = 1 And billtype = 4 ) Or &
  3545. (billtype = 9 And relid > 0 And li_outtype_mtrl = 2)) THEN
  3546. IF billtype = 9 THEN
  3547. IF arg_uqty = 0 And arg_qty = 0 THEN
  3548. rslt = 1
  3549. GOTO ext
  3550. END IF
  3551. ELSE
  3552. IF arg_uqty = 0 Or arg_qty = 0 Or arg_deliqty = 0 THEN
  3553. rslt = 1
  3554. GOTO ext
  3555. END IF
  3556. END IF
  3557. IF arg_uqty = 0 THEN
  3558. arg_rate = 0
  3559. ELSE
  3560. arg_rate = arg_qty / arg_uqty
  3561. END IF
  3562. IF billtype <> 9 THEN
  3563. IF arg_checkqty = 0 THEN arg_checkqty = arg_uqty
  3564. END IF
  3565. END IF
  3566. IF arg_rebate < 0 THEN
  3567. arg_msg = '行:'+String(arg_printid)+',折扣错误,请检查'
  3568. rslt = 0
  3569. GOTO ext
  3570. END IF
  3571. //IF arg_checkqty < arg_uqty THEN
  3572. // arg_msg = '第'+String(arg_printid)+'行,送货数不能少于实进仓数'
  3573. // rslt = 0
  3574. // GOTO ext
  3575. //END IF
  3576. IF li_statusflag = 2 THEN
  3577. IF arg_status = '' THEN
  3578. arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_status + '字段使用组合配置,请输入'
  3579. rslt = 0
  3580. GOTO ext
  3581. END IF
  3582. ELSEIF li_statusflag = 4 And li_status_check = 1 THEN
  3583. IF arg_status = '' THEN
  3584. arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入'
  3585. rslt = 0
  3586. GOTO ext
  3587. END IF
  3588. ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN
  3589. IF f_check_status(1,arg_status) = 0 THEN
  3590. rslt = 0
  3591. arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status
  3592. GOTO ext
  3593. END IF
  3594. END IF
  3595. IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN
  3596. IF arg_woodcode = '' THEN
  3597. arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_woodcode + '字段使用部件选配,请输入'
  3598. rslt = 0
  3599. GOTO ext
  3600. END IF
  3601. ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN
  3602. IF f_check_status(2,arg_woodcode) = 0 THEN
  3603. rslt = 0
  3604. arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode
  3605. GOTO ext
  3606. END IF
  3607. END IF
  3608. IF li_pcodeflag = 4 And li_pcode_check = 1 THEN
  3609. IF arg_pcode = '' THEN
  3610. arg_msg = '行:'+String(arg_printid)+',物料'+uo_option_change_pcode + '字段使用部件选配,请输入'
  3611. rslt = 0
  3612. GOTO ext
  3613. END IF
  3614. ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN
  3615. IF f_check_status(3,arg_pcode) = 0 THEN
  3616. rslt = 0
  3617. arg_msg = '行:'+String(arg_printid)+",查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode
  3618. GOTO ext
  3619. END IF
  3620. END IF
  3621. IF li_statusflag = 2 THEN
  3622. ld_capacity = 0
  3623. f_checkpz(arg_status,s_pz[])
  3624. FOR ll_i = 1 To UpperBound(s_pz)
  3625. ls_status_zj = s_pz[ll_i].cfgname
  3626. SELECT capacity * capaparm
  3627. INTO :ld_capacity_zj
  3628. FROM u_mtrl_configure
  3629. WHERE mtrlid = :arg_mtrlid
  3630. And Name = :ls_status_zj Using commit_transaction;
  3631. IF commit_transaction.SQLCode <> 0 THEN
  3632. rslt = 0
  3633. arg_msg = "第"+String(arg_printid)+"行,查询子件 "+ls_status_zj+" 折算套数参数操作失败"
  3634. GOTO ext
  3635. END IF
  3636. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  3637. NEXT
  3638. END IF
  3639. Int li_iflimitprice
  3640. SELECT iflimitprice
  3641. INTO :li_iflimitprice
  3642. FROM u_mtrldef
  3643. Where mtrlid = :arg_mtrlid Using commit_transaction;
  3644. IF commit_transaction.SQLCode <> 0 THEN
  3645. arg_msg = '行:'+String(arg_printid)+',查询物料:'+arg_mtrlcode+'限价属性失败 '+commit_transaction.SQLErrText
  3646. rslt = 0
  3647. GOTO ext
  3648. END IF
  3649. IF billtype <> 9 THEN
  3650. IF Trim(ls_unit) <> Trim(arg_unit) And arg_rate = 1 THEN
  3651. arg_msg = '进仓单,行:'+String(arg_printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(arg_unit)+'不同,但转换率为1,请检查'
  3652. rslt = 0
  3653. GOTO ext
  3654. END IF
  3655. IF Trim(ls_unit) = Trim(arg_unit) And arg_rate <> 1 THEN
  3656. arg_msg = '进仓单,行:'+String(arg_printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(arg_unit)+'相同,但转换率不为1,请检查'
  3657. rslt = 0
  3658. GOTO ext
  3659. END IF
  3660. END IF
  3661. //查询采购限价并检查进仓价
  3662. IF billtype = 1 THEN
  3663. IF uo_sptprice.uof_check_limitprice(thflag,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,arg_unit,arg_enprice * arg_rebate,arg_msg) = 0 THEN
  3664. arg_msg = '行:'+String(arg_printid)+","+arg_msg
  3665. rslt = 0
  3666. GOTO ext
  3667. END IF
  3668. IF li_iflimitprice = 1 THEN
  3669. IF uo_sptprice.uof_check_price(thflag,sptid,arg_mtrlid,arg_mtrlcode,arg_unit,arg_status,arg_woodcode,arg_pcode,'',moneyid,arg_enprice * arg_rebate,indate,arg_msg) = 0 THEN
  3670. arg_msg = '行:'+String(arg_printid)+","+arg_msg
  3671. rslt = 0
  3672. GOTO ext
  3673. END IF
  3674. END IF
  3675. END IF
  3676. //增加新字段 newprice 最新报价
  3677. IF billtype = 1 THEN
  3678. DateTime ldt_effdate
  3679. Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate
  3680. String ls_msg
  3681. String ls_1stunit
  3682. ls_1stunit = arg_unit
  3683. ldt_effdate = DateTime(Today(),Time(0))
  3684. IF uo_sptprice.uof_getmtrlsptprice(moneyid,sptid,arg_mtrlid,ls_1stunit,arg_status,arg_woodcode,arg_pcode,'',ls_1stnewcost,ls_1stzqrate,ls_1strate,ldt_effdate,ls_msg) <> 1 THEN
  3685. lde_newprice = 0
  3686. ELSE
  3687. lde_newprice = ls_1stnewcost
  3688. END IF
  3689. ELSE
  3690. lde_newprice = 0
  3691. END IF
  3692. CHOOSE CASE billtype
  3693. CASE 1,26
  3694. IF arg_ifrel > 0 THEN
  3695. IF arg_relid = 0 THEN
  3696. arg_msg = '行:'+String(arg_printid)+',请先择相应的订单'
  3697. rslt = 0
  3698. GOTO ext
  3699. END IF
  3700. SELECT taskcode,sum(uqty - consignedqty - stopqty),sum(uqty),sum(consignedqty)
  3701. INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty
  3702. FROM u_buytaskmx,u_buytask
  3703. WHERE u_buytaskmx.taskid = :arg_relid
  3704. AND u_buytaskmx.scid = :scid
  3705. AND u_buytaskmx.printid = :arg_relprintid
  3706. AND u_buytaskmx.taskid = u_buytask.taskid
  3707. AND u_buytaskmx.scid = u_buytask.scid
  3708. GROUP BY taskcode
  3709. Using commit_transaction;
  3710. IF commit_transaction.SQLCode <> 0 THEN
  3711. arg_msg = '行:'+String(arg_printid)+',查询采购订单是否有订购物料:'+arg_mtrlcode+'失败'+commit_transaction.SQLErrText
  3712. rslt = 0
  3713. GOTO ext
  3714. END IF
  3715. IF billtype = 1 THEN
  3716. lde_mx_qty = 0
  3717. FOR ls_i = 1 To it_mxbt
  3718. IF arg_mtrlid = inwaremx[ls_i].mtrlid And &
  3719. arg_relid = inwaremx[ls_i].relid And &
  3720. arg_relprintid = inwaremx[ls_i].relprintid THEN
  3721. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].uqty
  3722. END IF
  3723. NEXT
  3724. lde_mx_qty = lde_mx_qty + arg_uqty
  3725. //查已开单数
  3726. ld_noauditqty = 0
  3727. SELECT sum(uqty) INTO :ld_noauditqty
  3728. FROM u_inwaremx,u_inware
  3729. WHERE u_inwaremx.relid = :arg_relid
  3730. AND u_inwaremx.sptid_cusid = :arg_cusid_sptid
  3731. AND u_inwaremx.mtrlid = :arg_mtrlid
  3732. AND u_inwaremx.status = :arg_status
  3733. AND u_inwaremx.woodcode = :arg_woodcode
  3734. AND u_inwaremx.pcode = :arg_pcode
  3735. AND u_inwaremx.unit = :arg_unit
  3736. AND u_inwaremx.relprintid = :arg_relprintid
  3737. AND u_inware.inwareid <> :inwareid
  3738. AND u_inware.flag = 0
  3739. AND u_inware.inwareid = u_inwaremx.inwareid
  3740. AND u_inware.scid = u_inwaremx.scid
  3741. AND u_inwaremx.scid = :scid
  3742. And u_inware.billtype = 1 Using commit_transaction;
  3743. IF commit_transaction.SQLCode <> 0 THEN
  3744. arg_msg = '行:'+String(arg_printid)+',查询物料:'+arg_mtrlcode+'相关订单单据已开单数失败'+commit_transaction.SQLErrText
  3745. rslt = 0
  3746. GOTO ext
  3747. END IF
  3748. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  3749. IF uo_option_ifovertask = 1 THEN
  3750. IF lde_mx_qty + ld_noauditqty > ld_bootqty THEN
  3751. arg_msg = '行:'+String(arg_printid)+',物料:'+arg_mtrlcode+'未完成数:'+String(ld_bootqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+',不能收货:'+String(lde_mx_qty,'#,##0.0###')
  3752. rslt = 0
  3753. GOTO ext
  3754. END IF
  3755. ELSEIF uo_option_ifovertask = 3 THEN
  3756. SELECT uprate , upqty
  3757. INTO :ld_uprate,:ld_upqty
  3758. FROM u_mtrldef
  3759. Where mtrlid = :arg_mtrlid Using commit_transaction;
  3760. IF commit_transaction.SQLCode <> 0 THEN
  3761. arg_msg = '行:'+String(arg_printid)+',查询物料:'+Trim(arg_mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText
  3762. rslt = 0
  3763. GOTO ext
  3764. END IF
  3765. IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN
  3766. rslt = 0
  3767. arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+"已开单未审核数:"+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#')
  3768. GOTO ext
  3769. END IF
  3770. END IF
  3771. END IF
  3772. END IF
  3773. CASE 3
  3774. IF arg_ifrel > 0 THEN
  3775. IF arg_relid = 0 THEN
  3776. arg_msg = '行:'+String(arg_printid)+',请先择相应的计划'
  3777. rslt = 0
  3778. GOTO ext
  3779. END IF
  3780. SELECT ordercode INTO :ls_relcode
  3781. FROM u_order_ml
  3782. WHERE u_order_ml.orderid = :arg_relid
  3783. AND u_order_ml.mtrlid = :arg_mtrlid
  3784. AND u_order_ml.scid = :scid
  3785. Using commit_transaction;
  3786. IF commit_transaction.SQLCode <> 0 THEN
  3787. arg_msg = '行:'+String(arg_printid)+',查询生产计划是否有生产产品:'+arg_mtrlcode+'失败'+commit_transaction.SQLErrText
  3788. rslt = 0
  3789. GOTO ext
  3790. END IF
  3791. //查已开单数
  3792. ld_noauditqty = 0
  3793. SELECT sum(qty) INTO :ld_noauditqty
  3794. FROM u_inwaremx,u_inware
  3795. WHERE u_inwaremx.relid = :arg_relid
  3796. AND u_inware.inwareid <> :inwareid
  3797. AND u_inware.flag = 0
  3798. AND u_inware.inwareid = u_inwaremx.inwareid
  3799. AND u_inware.scid = u_inwaremx.scid
  3800. AND u_inwaremx.scid = :scid
  3801. And u_inware.billtype = 3 Using commit_transaction;
  3802. IF commit_transaction.SQLCode <> 0 THEN
  3803. arg_msg = '行:'+String(arg_printid)+',查询物料:'+arg_mtrlcode+'相关订单单据已开单数失败'+commit_transaction.SQLErrText
  3804. rslt = 0
  3805. GOTO ext
  3806. END IF
  3807. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  3808. lde_mx_qty = 0
  3809. FOR ls_i = 1 To it_mxbt
  3810. IF arg_mtrlid = inwaremx[ls_i].mtrlid And &
  3811. arg_relid = inwaremx[ls_i].relid And &
  3812. arg_relprintid = inwaremx[ls_i].relprintid THEN
  3813. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty
  3814. END IF
  3815. NEXT
  3816. lde_mx_qty = lde_mx_qty + arg_uqty
  3817. SELECT orderqty,acmpqty
  3818. INTO :ld_uqty,:ld_consignedqty
  3819. FROM u_order_ml
  3820. WHERE u_order_ml.orderid = :arg_relid
  3821. AND u_order_ml.scid = :scid
  3822. Using commit_transaction;
  3823. IF commit_transaction.SQLCode <> 0 THEN
  3824. arg_msg = '行:'+String(arg_printid)+',查询生产计划是否有物料:'+arg_mtrlcode+'失败'
  3825. rslt = 0
  3826. GOTO ext
  3827. END IF
  3828. IF uo_option_ifovertask_cp = 1 THEN //不允许超收
  3829. IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN
  3830. rslt = 0
  3831. arg_msg = '行:'+String(arg_printid)+',该计划明细产品['+arg_mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量'
  3832. GOTO ext
  3833. END IF
  3834. ELSEIF uo_option_ifovertask_cp = 3 THEN //允许超收但按比例限制
  3835. SELECT uprate , upqty
  3836. INTO :ld_uprate,:ld_upqty
  3837. FROM u_mtrldef
  3838. Where mtrlid = :arg_mtrlid Using commit_transaction;
  3839. IF commit_transaction.SQLCode <> 0 THEN
  3840. arg_msg = '行:'+String(arg_printid)+',查询物料:'+Trim(arg_mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText
  3841. rslt = 0
  3842. GOTO ext
  3843. END IF
  3844. IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN
  3845. rslt = 0
  3846. arg_msg = '行:'+String(arg_printid)+",物料:"+arg_mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#')
  3847. GOTO ext
  3848. END IF
  3849. END IF
  3850. END IF
  3851. Int li_if_cus_mtrlware
  3852. SELECT balctype INTO :li_if_cus_mtrlware
  3853. FROM u_storage
  3854. Where storageid = :storageid Using commit_transaction;
  3855. IF commit_transaction.SQLCode <> 0 THEN
  3856. arg_msg = '行:'+String(arg_printid)+',查询仓库是否使用客户库存失败,'+commit_transaction.SQLErrText
  3857. rslt = 0
  3858. GOTO ext
  3859. END IF
  3860. IF billtype = 3 And li_if_cus_mtrlware = 1 THEN
  3861. cnt = 0
  3862. SELECT count(*) INTO :cnt
  3863. FROM u_cust
  3864. Where cusid = :arg_cusid_sptid Using commit_transaction;
  3865. IF commit_transaction.SQLCode <> 0 THEN
  3866. arg_msg = '行:'+String(arg_printid)+',查询客户资料失败,'+commit_transaction.SQLErrText
  3867. rslt = 0
  3868. GOTO ext
  3869. END IF
  3870. END IF
  3871. CASE 4
  3872. IF arg_ifrel > 0 THEN
  3873. IF arg_relid = 0 THEN
  3874. arg_msg = '行:'+String(arg_printid)+',请先择相应的加工计划'
  3875. rslt = 0
  3876. GOTO ext
  3877. END IF
  3878. SELECT u_order_wfjg.taskcode ,sum(u_order_wfjgmx.qty - u_order_wfjgmx.consignedqty)INTO :ls_relcode,:ld_bootqty
  3879. FROM u_order_wfjgmx,u_order_wfjg
  3880. WHERE u_order_wfjgmx.wfjgid = :arg_relid
  3881. AND u_order_wfjgmx.scid = :scid
  3882. AND u_order_wfjgmx.printid = :arg_relprintid
  3883. AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  3884. AND u_order_wfjgmx.scid = u_order_wfjg.scid
  3885. GROUP BY u_order_wfjg.taskcode
  3886. Using commit_transaction;
  3887. IF commit_transaction.SQLCode <> 0 THEN
  3888. arg_msg = '行:'+String(arg_printid)+',查询外协计划是否有加工产品:'+arg_mtrlcode+'失败,'+commit_transaction.SQLErrText
  3889. rslt = 0
  3890. GOTO ext
  3891. END IF
  3892. END IF
  3893. CASE 5
  3894. IF arg_ifrel > 0 THEN
  3895. IF arg_relid = 0 THEN
  3896. arg_msg = '行:'+String(arg_printid)+',请先择相应的来料加工订单'
  3897. rslt = 0
  3898. GOTO ext
  3899. END IF
  3900. SELECT u_saletask_ll.taskcode ,sum(qty - consignedqty),sum(qty),sum(consignedqty)
  3901. INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty
  3902. FROM u_saletaskmx_in,u_saletask_ll
  3903. WHERE u_saletaskmx_in.taskid = :arg_relid
  3904. AND u_saletask_ll.scid = :scid
  3905. AND u_saletaskmx_in.printid = :arg_relprintid
  3906. AND u_saletaskmx_in.taskid = u_saletask_ll.taskid
  3907. GROUP BY u_saletask_ll.taskcode
  3908. Using commit_transaction;
  3909. IF commit_transaction.SQLCode <> 0 THEN
  3910. arg_msg = '行:'+String(arg_printid)+',查询来料订单是否有收料物料:'+arg_mtrlcode+'失败'+commit_transaction.SQLErrText
  3911. rslt = 0
  3912. GOTO ext
  3913. END IF
  3914. lde_mx_qty = 0
  3915. FOR ls_i = 1 To it_mxbt
  3916. IF arg_mtrlid = inwaremx[ls_i].mtrlid And &
  3917. arg_relid = inwaremx[ls_i].relid And &
  3918. arg_relprintid = inwaremx[ls_i].relprintid THEN
  3919. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty
  3920. END IF
  3921. NEXT
  3922. lde_mx_qty = lde_mx_qty + arg_uqty
  3923. //查已开单数
  3924. ld_noauditqty = 0
  3925. SELECT sum(qty) INTO :ld_noauditqty
  3926. FROM u_inwaremx,u_inware
  3927. WHERE u_inwaremx.relid = :arg_relid
  3928. AND u_inwaremx.sptid_cusid = :arg_cusid_sptid
  3929. AND u_inwaremx.mtrlid = :arg_mtrlid
  3930. AND u_inwaremx.status = :arg_status
  3931. AND u_inwaremx.woodcode = :arg_woodcode
  3932. AND u_inwaremx.pcode = :arg_pcode
  3933. AND u_inwaremx.unit = :arg_unit
  3934. AND u_inwaremx.relprintid = :arg_relprintid
  3935. AND u_inware.inwareid <> :inwareid
  3936. AND u_inware.flag = 0
  3937. AND u_inware.inwareid = u_inwaremx.inwareid
  3938. AND u_inware.scid = u_inwaremx.scid
  3939. AND u_inwaremx.scid = :scid
  3940. And u_inware.billtype = 5 Using commit_transaction;
  3941. IF commit_transaction.SQLCode <> 0 THEN
  3942. arg_msg = '查询物料:'+arg_mtrlcode+'相关订单单据已开单数失败'
  3943. rslt = 0
  3944. GOTO ext
  3945. END IF
  3946. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  3947. IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN
  3948. rslt = 0
  3949. arg_msg = '行:'+String(arg_printid)+',该计划明细产品['+arg_mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量'
  3950. GOTO ext
  3951. END IF
  3952. END IF
  3953. END CHOOSE
  3954. IF arg_enprice * arg_rebate < 0 THEN //检查进仓价
  3955. rslt = 0
  3956. arg_msg = '行:'+String(arg_printid)+",物料或产品:" + String(arg_mtrlcode)+" 单价错误"
  3957. GOTO ext
  3958. END IF
  3959. //查询质检单号
  3960. String ls_relbillcode
  3961. ls_relbillcode = ''
  3962. IF arg_relbillid > 0 THEN
  3963. SELECT billcode
  3964. INTO :ls_relbillcode
  3965. FROM u_sptcheck
  3966. Where billid = :arg_relbillid Using commit_transaction;
  3967. IF commit_transaction.SQLCode <> 0 THEN
  3968. rslt = 0
  3969. arg_msg = '行:'+String(arg_printid)+',查询质检单号失败,'+commit_transaction.SQLErrText
  3970. GOTO ext
  3971. END IF
  3972. END IF
  3973. //写入内容
  3974. it_mxbt++
  3975. inwaremx[it_mxbt].noauditqty = ld_noauditqty
  3976. inwaremx[it_mxbt].printid = arg_printid
  3977. inwaremx[it_mxbt].mtrlid = arg_mtrlid
  3978. inwaremx[it_mxbt].mtrlcode = arg_mtrlcode
  3979. inwaremx[it_mxbt].unit = arg_unit
  3980. inwaremx[it_mxbt].rate = arg_rate
  3981. inwaremx[it_mxbt].plancode = arg_plancode
  3982. inwaremx[it_mxbt].bootqty = ld_bootqty
  3983. inwaremx[it_mxbt].status = arg_status
  3984. inwaremx[it_mxbt].enprice = arg_enprice
  3985. inwaremx[it_mxbt].uprice = arg_enprice * mrate
  3986. inwaremx[it_mxbt].rebate = arg_rebate
  3987. inwaremx[it_mxbt].uqty = arg_uqty
  3988. inwaremx[it_mxbt].qty = arg_qty //Round(arg_uqty * arg_rate,uo_option_unit_dec)
  3989. inwaremx[it_mxbt].deliqty = arg_deliqty
  3990. inwaremx[it_mxbt].tax = arg_tax
  3991. inwaremx[it_mxbt].deliprice_notax = arg_enprice / (1 + arg_tax)
  3992. IF arg_uqty <> 0 THEN
  3993. inwaremx[it_mxbt].enprice_tax = arg_deliqty * arg_enprice / arg_uqty
  3994. inwaremx[it_mxbt].enprice_notax = (arg_deliqty * arg_enprice / arg_uqty) / (1 + arg_tax)
  3995. ELSE
  3996. inwaremx[it_mxbt].enprice_tax = arg_enprice
  3997. inwaremx[it_mxbt].enprice_notax = arg_enprice / (1 + arg_tax)
  3998. END IF
  3999. inwaremx[it_mxbt].enprice_tax = Abs(inwaremx[it_mxbt].enprice_tax)
  4000. inwaremx[it_mxbt].enprice_notax = Abs(inwaremx[it_mxbt].enprice_notax)
  4001. IF Round(arg_uqty * arg_rate,uo_option_unit_dec) <> 0 THEN
  4002. inwaremx[it_mxbt].fprice = Round((inwaremx[it_mxbt].enprice_tax * mrate * arg_uqty)/(Round(arg_uqty * arg_rate,uo_option_unit_dec)),10)
  4003. ELSE
  4004. inwaremx[it_mxbt].fprice = 0
  4005. END IF
  4006. inwaremx[it_mxbt].fprice = Abs(inwaremx[it_mxbt].fprice)
  4007. inwaremx[it_mxbt].price = inwaremx[it_mxbt].fprice * arg_rebate
  4008. inwaremx[it_mxbt].planprice = ld_planprice
  4009. inwaremx[it_mxbt].mxdscrp = arg_mxdscrp
  4010. inwaremx[it_mxbt].dxflag = dxflag
  4011. inwaremx[it_mxbt].jgprice = arg_jgprice
  4012. inwaremx[it_mxbt].relid = arg_relid
  4013. inwaremx[it_mxbt].ifrel = arg_ifrel
  4014. inwaremx[it_mxbt].woodcode = arg_woodcode
  4015. inwaremx[it_mxbt].pcode = arg_pcode
  4016. inwaremx[it_mxbt].relcode = ls_relcode
  4017. inwaremx[it_mxbt].relprintid = arg_relprintid
  4018. inwaremx[it_mxbt].checkqty = arg_checkqty
  4019. inwaremx[it_mxbt].result = arg_result
  4020. inwaremx[it_mxbt].waredscrp = arg_waredscrp
  4021. inwaremx[it_mxbt].relbillid = arg_relbillid
  4022. inwaremx[it_mxbt].relbillprintid = arg_relbillprintid
  4023. inwaremx[it_mxbt].relbillcode = ls_relbillcode
  4024. inwaremx[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  4025. inwaremx[it_mxbt].Location = arg_location
  4026. inwaremx[it_mxbt].capacity = ld_capacity * arg_qty
  4027. IF dxflag = 0 THEN
  4028. inwaremx[it_mxbt].sptid = arg_cusid_sptid
  4029. ELSE
  4030. inwaremx[it_mxbt].sptid = sptid
  4031. END IF
  4032. IF billtype = 1 THEN
  4033. String ls_sptmtrlname
  4034. uo_spt_price uo_price
  4035. uo_price = Create uo_spt_price
  4036. IF uo_price.uof_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN
  4037. rslt = 0
  4038. GOTO ext
  4039. END IF
  4040. Destroy uo_price
  4041. inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname
  4042. END IF
  4043. IF thflag = 1 THEN
  4044. Long ll_sptid,ll_billtype,ll_balctype
  4045. Int li_thtype
  4046. //查询相关订单属于材料订单还是成品订单
  4047. // IF billtype = 1 AND arg_relid > 0 THEN
  4048. // SELECT billtype INTO :ll_billtype
  4049. // FROM u_buytask
  4050. // WHERE taskid = :arg_relid
  4051. // AND scid = :scid;
  4052. // IF commit_transaction.SQLCode <> 0 THEN
  4053. // rslt = 0
  4054. // arg_msg = '查询订单类型失败'+'~n'+commit_transaction.SQLErrText
  4055. // GOTO ext
  4056. // END IF
  4057. // ELSE
  4058. // ll_billtype = 0
  4059. // END IF
  4060. //
  4061. // IF billtype = 5 THEN
  4062. // ll_sptid = arg_cusid_sptid
  4063. // ELSEIF billtype = 1 AND ll_billtype = 1 THEN
  4064. // SELECT balctype INTO :ll_balctype
  4065. // FROM u_storage
  4066. // Where storageid = :storageid;
  4067. // IF commit_transaction.SQLCode <> 0 THEN
  4068. // rslt = 0
  4069. // arg_msg = '查询仓库是否使用客户库存失败'+'~n'+commit_transaction.SQLErrText
  4070. // GOTO ext
  4071. // END IF
  4072. //
  4073. // IF ll_balctype = 1 THEN
  4074. ll_sptid = arg_cusid_sptid
  4075. // ELSE
  4076. // ll_sptid = 0
  4077. // END IF
  4078. // ELSE
  4079. // ll_sptid = 0
  4080. // END IF
  4081. SELECT thtype INTO :li_thtype
  4082. FROM u_storage
  4083. Where storageid = :storageid Using commit_transaction;
  4084. IF commit_transaction.SQLCode <> 0 THEN
  4085. arg_msg = '行:'+String(arg_printid)+',查询仓库退货取价模式失败,'+commit_transaction.SQLErrText
  4086. rslt = 0
  4087. GOTO ext
  4088. END IF
  4089. IF li_thtype = 0 THEN
  4090. SELECT cost
  4091. INTO :ld_cost
  4092. FROM u_mtrlware
  4093. WHERE scid = :scid
  4094. AND mtrlid = :arg_mtrlid
  4095. AND storageid = :storageid
  4096. AND status = :arg_status
  4097. AND plancode = :arg_plancode
  4098. AND woodcode = :arg_woodcode
  4099. AND pcode = :arg_pcode
  4100. AND dxflag = :dxflag
  4101. AND sptid = :ll_sptid
  4102. AND mtrlcuscode = :arg_mtrlcuscode
  4103. And Location = :arg_location Using commit_transaction;
  4104. IF commit_transaction.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0
  4105. inwaremx[it_mxbt].cost = ld_cost
  4106. ELSE
  4107. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * arg_rebate
  4108. END IF
  4109. ELSE
  4110. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * arg_rebate
  4111. END IF
  4112. inwaremx[it_mxbt].newprice = lde_newprice
  4113. ext:
  4114. Destroy uo_sptprice
  4115. IF rslt = 0 THEN p_clearmx()
  4116. Return(rslt)
  4117. */
  4118. end function
  4119. public function integer uof_update_planprice (long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4120. String ls_status,ls_woodcode,ls_pcode
  4121. Int li_pricepztype
  4122. String ls_mtrlcode
  4123. IF arg_fprice <= 0 THEN
  4124. rslt = 1
  4125. GOTO ext
  4126. END IF
  4127. SELECT pricepztype,mtrlcode
  4128. INTO :li_pricepztype,:ls_mtrlcode
  4129. FROM u_mtrldef
  4130. Where mtrlid = :arg_mtrlid Using commit_transaction;
  4131. IF commit_transaction.SQLCode <> 0 THEN
  4132. rslt = 0
  4133. arg_msg = '查询物料计划成本价配置模式失败,'+commit_transaction.SQLErrText
  4134. GOTO ext
  4135. END IF
  4136. CHOOSE CASE li_pricepztype
  4137. CASE 0
  4138. ls_status = ''
  4139. ls_woodcode = ''
  4140. ls_pcode = ''
  4141. CASE 1
  4142. ls_status = arg_status
  4143. ls_woodcode = ''
  4144. ls_pcode = ''
  4145. CASE 2
  4146. ls_status = ''
  4147. ls_woodcode = arg_woodcode
  4148. ls_pcode = ''
  4149. CASE 3
  4150. ls_status = ''
  4151. ls_woodcode = ''
  4152. ls_pcode = arg_pcode
  4153. CASE 4
  4154. ls_status = arg_status
  4155. ls_woodcode = arg_woodcode
  4156. ls_pcode = ''
  4157. CASE 5
  4158. ls_status = ''
  4159. ls_woodcode = arg_woodcode
  4160. ls_pcode = arg_pcode
  4161. CASE 6
  4162. ls_status = arg_status
  4163. ls_woodcode = ''
  4164. ls_pcode = arg_pcode
  4165. CASE 7
  4166. ls_status = arg_status
  4167. ls_woodcode = arg_woodcode
  4168. ls_pcode = arg_pcode
  4169. END CHOOSE
  4170. UPDATE u_mtrldef_planprice
  4171. SET planprice = :arg_fprice
  4172. WHERE mtrlid = :arg_mtrlid
  4173. AND status = :arg_status
  4174. AND woodcode = :arg_woodcode
  4175. And pcode = :arg_pcode Using commit_transaction;
  4176. IF commit_transaction.SQLCode = 0 THEN
  4177. IF commit_transaction.SQLNRows = 0 THEN
  4178. INSERT INTO u_mtrldef_planprice
  4179. (mtrlid,
  4180. status,
  4181. woodcode,
  4182. pcode,
  4183. planprice)
  4184. VALUES
  4185. (:arg_mtrlid,
  4186. :arg_status,
  4187. :arg_woodcode,
  4188. :arg_pcode,
  4189. :arg_fprice) Using commit_transaction;
  4190. IF commit_transaction.SQLCode <> 0 THEN
  4191. rslt = 0
  4192. arg_msg = '插入物料'+ls_mtrlcode+'计划成本价资料失败,'+commit_transaction.SQLErrText
  4193. GOTO ext
  4194. END IF
  4195. END IF
  4196. INSERT INTO u_mtrl_planprice_his
  4197. (mtrlid,
  4198. cmpldate,
  4199. planprice,
  4200. buildtype,
  4201. status,
  4202. woodcode,
  4203. pcode)
  4204. VALUES
  4205. (:arg_mtrlid,
  4206. getdate(),
  4207. :arg_fprice,
  4208. 2,
  4209. :arg_status,
  4210. :arg_woodcode,
  4211. :arg_pcode) Using commit_transaction;
  4212. IF commit_transaction.SQLCode <> 0 THEN
  4213. rslt = 0
  4214. arg_msg = '建立'+ls_mtrlcode+'产品计划成本价历史记录失败 '+commit_transaction.SQLErrText
  4215. GOTO ext
  4216. END IF
  4217. ELSE
  4218. IF commit_transaction.SQLCode <> 0 THEN
  4219. rslt = 0
  4220. arg_msg = '更新物料'+ls_mtrlcode+'计划成本价资料失败,'+commit_transaction.SQLErrText
  4221. GOTO ext
  4222. END IF
  4223. END IF
  4224. ext:
  4225. IF rslt = 0 THEN
  4226. ROLLBACK Using commit_transaction;
  4227. ELSEIF rslt = 1 And arg_ifcommit THEN
  4228. COMMIT Using commit_transaction;
  4229. END IF
  4230. RETURN rslt
  4231. end function
  4232. public function integer uof_ref_assign_plan_plankind (long arg_scid, long arg_mtrlwareid, long arg_plankind, long arg_plankind_relbillid, long arg_plankind_reprintlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_inwaremx_assign_plan arg_s_ap, ref string arg_msg);Int rslt = 1
  4233. Long i,j
  4234. datastore ds_ap
  4235. ds_ap = CREATE datastore
  4236. ds_ap.DataObject = 'ds_inwaremx_assign_plan_plankind'
  4237. ds_ap.SetTransObject(commit_transaction)
  4238. ds_ap.Retrieve(arg_scid,arg_plankind,arg_plankind_relbillid,arg_plankind_reprintlid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode)
  4239. FOR i = 1 TO ds_ap.RowCount()
  4240. j++
  4241. arg_s_ap.planid[j] = ds_ap.Object.planid[i]
  4242. arg_s_ap.assigntype[j] = ds_ap.Object.assigntype[i]
  4243. arg_s_ap.scid[j] = ds_ap.Object.scid[i]
  4244. arg_s_ap.mtrlwareid[j] = arg_mtrlwareid
  4245. arg_s_ap.relbillid[j] = ds_ap.Object.relbillid[i]
  4246. arg_s_ap.relprintid[j] = ds_ap.Object.relprintid[i]
  4247. arg_s_ap.fpgrade[j] = ds_ap.Object.fpgrade[i]
  4248. IF ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i] >= arg_qty THEN
  4249. arg_s_ap.notassignqty[j] = arg_qty
  4250. GOTO ext
  4251. ELSE
  4252. arg_s_ap.notassignqty[j] = ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i]
  4253. arg_qty = arg_qty - (ds_ap.Object.planassignqty[i] - ds_ap.Object.assignqty[i])
  4254. END IF
  4255. NEXT
  4256. ext:
  4257. RETURN rslt
  4258. end function
  4259. public function integer uof_del_barcode (long arg_scid, long arg_inwareid, string arg_barcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4260. Decimal ld_packqty_barcode,ld_qty_barcode,ld_qty,ld_inwaremxqty
  4261. Long ll_cusid,ll_mtrlid,i,ll_printid,ll_orderid
  4262. String ls_status,ls_woodcode,ls_pcode
  4263. String ls_plancode,ls_mtrlcuscode,ls_location
  4264. IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  4265. rslt = 0
  4266. GOTO ext
  4267. END IF
  4268. IF flag = 1 THEN
  4269. rslt = 0
  4270. arg_msg = "单据已经仓审,不能操作"
  4271. GOTO ext
  4272. END IF
  4273. IF billtype = 3 And uo_option_barcode_inwarecp_paudit = 1 THEN
  4274. arg_msg = '系统选项设置了生产进仓单使用先确认后审核条码流程,操作取消,如需操作请用pda调取相关单据把条码删除'
  4275. rslt = 0
  4276. GOTO ext
  4277. END IF
  4278. IF billtype = 8 And uo_option_barcode_inwareother_paudit = 1 THEN
  4279. arg_msg = '系统选项设置了其它进仓单使用先确认后审核条码流程,操作取消,如需操作请用pda调取相关单据把条码删除'
  4280. rslt = 0
  4281. GOTO ext
  4282. END IF
  4283. SELECT U_inwaremx_mx_barcode.qty,
  4284. u_mtrlware_mx.packqty,
  4285. u_mtrlware_mx.mtrlid,
  4286. u_mtrlware_mx.status,
  4287. u_mtrlware_mx.woodcode,
  4288. u_mtrlware_mx.pcode,
  4289. u_mtrlware_mx.plancode,
  4290. u_mtrlware_mx.mtrlcuscode,
  4291. u_mtrlware_mx.location,
  4292. u_mtrlware_mx.sptid,
  4293. u_mtrlware_mx.orderid
  4294. INTO :ld_qty_barcode,
  4295. :ld_packqty_barcode,
  4296. :ll_mtrlid,
  4297. :ls_status,
  4298. :ls_woodcode,
  4299. :ls_pcode,
  4300. :ls_plancode,
  4301. :ls_mtrlcuscode,
  4302. :ls_location,
  4303. :ll_cusid,
  4304. :ll_orderid
  4305. FROM U_inwaremx_mx_barcode,u_mtrlware_mx
  4306. WHERE U_inwaremx_mx_barcode.barcode = u_mtrlware_mx.barcode
  4307. AND U_inwaremx_mx_barcode.scid = :arg_scid
  4308. AND U_inwaremx_mx_barcode.inwareid = :arg_inwareid
  4309. AND U_inwaremx_mx_barcode.barcode = :arg_barcode
  4310. AND U_inwaremx_mx_barcode.billtype = :billtype
  4311. Using commit_transaction;
  4312. IF commit_transaction.SQLCode <> 0 THEN
  4313. arg_msg = '查询条码信息失败,'+commit_transaction.SQLErrText
  4314. rslt = 0
  4315. GOTO ext
  4316. END IF
  4317. ld_qty = ld_qty_barcode * ld_packqty_barcode
  4318. FOR i = 1 To it_mxbt
  4319. IF inwaremx[i].mtrlid = ll_mtrlid And &
  4320. inwaremx[i].status = ls_status And &
  4321. inwaremx[i].woodcode = ls_woodcode And &
  4322. inwaremx[i].pcode = ls_pcode And &
  4323. inwaremx[i].plancode = ls_plancode And &
  4324. inwaremx[i].mtrlcuscode = ls_mtrlcuscode And &
  4325. ( inwaremx[i].Location = ls_location and uo_option_barcodelocation_use_inwaremx_location = 0 or &
  4326. uo_option_barcodelocation_use_inwaremx_location = 1 ) And &
  4327. inwaremx[i].sptid = ll_cusid And &
  4328. inwaremx[i].relid = ll_orderid THEN
  4329. ll_printid = inwaremx[i].printid
  4330. ld_inwaremxqty = inwaremx[i].qty
  4331. END IF
  4332. NEXT
  4333. IF ll_printid = 0 THEN
  4334. arg_msg = '条码找不到对应进仓明细行,请检查条码资料'
  4335. rslt = 0
  4336. GOTO ext
  4337. END IF
  4338. IF ld_qty > ld_inwaremxqty THEN
  4339. arg_msg = '删除条码要扣减数量大于对应进仓明细数量,请检查'
  4340. rslt = 0
  4341. GOTO ext
  4342. ELSEIF ld_qty = ld_inwaremxqty THEN
  4343. DELETE FROM u_inwaremx
  4344. Where scid = :arg_scid And inwareid = :arg_inwareid And printid = :ll_printid Using commit_transaction;
  4345. IF commit_transaction.SQLCode <> 0 THEN
  4346. arg_msg = '删除进仓明细失败,'+commit_transaction.SQLErrText
  4347. rslt = 0
  4348. GOTO ext
  4349. END IF
  4350. ELSEIF ld_qty < ld_inwaremxqty THEN
  4351. UPDATE u_inwaremx SET uqty = uqty - :ld_qty,qty = qty - :ld_qty
  4352. Where scid = :arg_scid And inwareid = :arg_inwareid And printid = :ll_printid Using commit_transaction;
  4353. IF commit_transaction.SQLCode <> 0 THEN
  4354. arg_msg = '更新进仓明细数量失败,'+commit_transaction.SQLErrText
  4355. rslt = 0
  4356. GOTO ext
  4357. END IF
  4358. END IF
  4359. DELETE FROM U_inwaremx_mx_barcode
  4360. WHERE U_inwaremx_mx_barcode.scid = :arg_scid
  4361. AND U_inwaremx_mx_barcode.inwareid = :arg_inwareid
  4362. AND U_inwaremx_mx_barcode.barcode = :arg_barcode
  4363. AND U_inwaremx_mx_barcode.billtype = :billtype
  4364. Using commit_transaction;
  4365. IF commit_transaction.SQLCode <> 0 THEN
  4366. arg_msg = '删除条码失败,'+commit_transaction.SQLErrText
  4367. rslt = 0
  4368. GOTO ext
  4369. END IF
  4370. ext:
  4371. IF rslt = 0 THEN
  4372. ROLLBACK Using commit_transaction;
  4373. ELSEIF rslt = 1 And arg_ifcommit THEN
  4374. COMMIT Using commit_transaction;
  4375. END IF
  4376. RETURN rslt
  4377. end function
  4378. public function integer acceptmx_item (long arg_printid, long arg_itemid, decimal arg_amt, string arg_mxdscrp, ref string arg_msg);Int rslt = 1
  4379. Long cnt
  4380. cnt = 0
  4381. IF it_newbegin = False And it_updatebegin = False THEN
  4382. rslt = 0
  4383. arg_msg = "非编辑状态不可以使用,操作取消"
  4384. GOTO ext
  4385. END IF
  4386. IF IsNull(arg_printid) THEN arg_printid = 0
  4387. IF IsNull(arg_itemid) THEN arg_itemid = 0
  4388. IF IsNull(arg_amt) THEN arg_amt = 0
  4389. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  4390. IF arg_itemid = 0 Or arg_amt = 0 THEN
  4391. rslt = 1
  4392. GOTO ext
  4393. END IF
  4394. SELECT count(*)
  4395. INTO :cnt
  4396. FROM u_itemdef
  4397. Where itemid = :arg_itemid;
  4398. IF commit_transaction.SQLCode <> 0 THEN
  4399. rslt = 0
  4400. arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText
  4401. GOTO ext
  4402. END IF
  4403. IF cnt = 0 THEN
  4404. rslt = 0
  4405. arg_msg = '第'+String(arg_printid)+'行,收支项目不存在,请检查'
  4406. GOTO ext
  4407. END IF
  4408. it_mxbt_item++
  4409. inware_itemmx[it_mxbt_item].printid = arg_printid
  4410. inware_itemmx[it_mxbt_item].itemid = arg_itemid
  4411. inware_itemmx[it_mxbt_item].amt = arg_amt
  4412. inware_itemmx[it_mxbt_item].mxdscrp = arg_mxdscrp
  4413. ext:
  4414. IF rslt = 0 THEN p_clearmx()
  4415. RETURN rslt
  4416. end function
  4417. public function integer uof_check_warepdb_audit (long arg_storageid, ref string arg_msg);Int rslt = 1
  4418. Long cnt
  4419. SELECT count(*)
  4420. INTO :cnt
  4421. FROM u_warepdb
  4422. WHERE storageid = :arg_storageid
  4423. And flag = 0 Using commit_transaction;
  4424. IF commit_transaction.SQLCode <> 0 THEN
  4425. rslt = 0
  4426. arg_msg = '查询仓库是否有盘点表未审核失败,'+commit_transaction.SQLErrText
  4427. GOTO ext
  4428. END IF
  4429. IF cnt > 0 THEN
  4430. rslt = 0
  4431. arg_msg = '仓库有盘点表未审核,不能仓审或仓撤单据,请检查'
  4432. GOTO ext
  4433. END IF
  4434. ext:
  4435. RETURN rslt
  4436. end function
  4437. public function integer p_update_mtrlwareid_inwaremx (long arg_mtrlwareid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4438. UPDATE u_inwaremx
  4439. SET u_inwaremx.mtrlwareid = :arg_mtrlwareid
  4440. WHERE u_inwaremx.scid = :scid
  4441. AND u_inwaremx.inwareid = :arg_inwareid
  4442. AND u_inwaremx.printid = :arg_printid USING commit_transaction;
  4443. IF commit_transaction.SQLCode <> 0 THEN
  4444. arg_msg = '更新进仓明细库存id失败,'+commit_transaction.SQLErrText
  4445. rslt = 0
  4446. GOTO ext
  4447. END IF
  4448. ext:
  4449. IF rslt = 0 THEN
  4450. ROLLBACK USING commit_transaction;
  4451. ELSEIF rslt = 1 AND arg_ifcommit THEN
  4452. COMMIT USING commit_transaction;
  4453. END IF
  4454. RETURN rslt
  4455. end function
  4456. public function integer uof_disuse (long arg_scid, long arg_inwareid, integer arg_disusetype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4457. Long ll_disuseid
  4458. //arg_disusetype 0 - 修改, 1-删除
  4459. Select max(disuseid) Into :ll_disuseid
  4460. From u_inware_disuse
  4461. Where scid = :arg_scid
  4462. And inwareid = :arg_inwareid Using commit_transaction;
  4463. If commit_transaction.SQLCode = -1 Then
  4464. rslt = 0
  4465. arg_msg = '获取采购收货单废弃单序号失败,'+ commit_transaction.SQLErrText
  4466. Goto ext
  4467. ElseIf commit_transaction.SQLCode = 100 Then
  4468. ll_disuseid = 0
  4469. End If
  4470. if isnull(ll_disuseid) then ll_disuseid = 0
  4471. ll_disuseid++
  4472. Insert Into u_inware_disuse
  4473. (scid, inwareid, inwarecode, billtype, relid, storageid, opdate, opemp, Modemp,
  4474. moddate, flag, auditingdate, auditingrep, indate, inrep, part, dscrp, sptid, sptname,
  4475. balcflag, balcdate, balcdateint, Dxflag, thflag, printnum, ctmint, otheramt, relint_1,
  4476. relint_2, relint_3, relstr_1, relstr_2, relstr_3, secflag, secauditingdate, secauditingrep,
  4477. plandate, priceflag, pricedate, pricerep, checkdate, moneyid, mrate, deptid,
  4478. moneyname, banktypename, storagename, disuseemp, disusedate, disusetype,
  4479. disuseid)
  4480. Select u_inware.scid, u_inware.inwareid, u_inware.inwarecode, u_inware.billtype,
  4481. u_inware.relid, u_inware.storageid, u_inware.opdate, u_inware.opemp,
  4482. u_inware.Modemp, u_inware.moddate, u_inware.flag, u_inware.auditingdate,
  4483. u_inware.auditingrep, u_inware.indate, u_inware.inrep, u_inware.part, u_inware.dscrp,
  4484. u_inware.sptid, u_inware.sptname, u_inware.balcflag, u_inware.balcdate,
  4485. u_inware.balcdateint, u_inware.Dxflag, u_inware.thflag, u_inware.printnum,
  4486. u_inware.ctmint, u_inware.otheramt, u_inware.relint_1, u_inware.relint_2,
  4487. u_inware.relint_3, u_inware.relstr_1, u_inware.relstr_2, u_inware.relstr_3,
  4488. u_inware.secflag, u_inware.secauditingdate, u_inware.secauditingrep,
  4489. u_inware.plandate, u_inware.priceflag, u_inware.pricedate, u_inware.pricerep,
  4490. u_inware.checkdate, u_inware.moneyid, u_inware.mrate, u_inware.deptid,
  4491. cw_currency.name, cw_banktype.banktypename, u_storage.storagename,
  4492. :publ_operator,getdate(),:arg_disusetype,:ll_disuseid
  4493. From u_inware LEFT Outer JOIN
  4494. u_storage ON u_inware.storageid = u_storage.storageid LEFT Outer JOIN
  4495. cw_banktype ON u_inware.relint_1 = cw_banktype.banktypeid LEFT Outer JOIN
  4496. cw_currency ON u_inware.moneyid = cw_currency.moneyid
  4497. Where u_inware.scid = :arg_scid
  4498. And u_inware.inwareid = :arg_inwareid Using commit_transaction;
  4499. If commit_transaction.SQLCode <> 0 Then
  4500. rslt = 0
  4501. arg_msg = '插入采购收货单废弃单失败,'+commit_transaction.SQLErrText
  4502. Goto ext
  4503. End If
  4504. Insert Into u_inwaremx_disuse
  4505. (scid, inwareid, printid, ifrel, relid, mtrlid, plancode, status, qty, fprice, rebate, price,
  4506. planprice, jgprice, mxdscrp, woodcode, relcode, pcode, sptid_cusid, ctmint, cost,
  4507. sptmtrlname, uqty, uprice, unit, rate, bootqty, noauditqty, relprintid, checkqty, result,
  4508. waredscrp, relbillid, relbillprintid, relbillcode, mtrlcuscode, location, badqty, thqty,
  4509. ptqty, enprice, capacity, enprice_tax, enprice_notax, tax, deliqty, deliprice_notax,
  4510. mtrlwareid, mtrlwareprintid, newprice, mtrlcode, mtrlname,disuseid)
  4511. Select u_inwaremx.scid, u_inwaremx.inwareid, u_inwaremx.printid, u_inwaremx.ifrel,
  4512. u_inwaremx.relid, u_inwaremx.mtrlid, u_inwaremx.plancode, u_inwaremx.status,
  4513. u_inwaremx.qty, u_inwaremx.fprice, u_inwaremx.rebate, u_inwaremx.price,
  4514. u_inwaremx.planprice, u_inwaremx.jgprice, u_inwaremx.mxdscrp,
  4515. u_inwaremx.woodcode, u_inwaremx.relcode, u_inwaremx.pcode,
  4516. u_inwaremx.sptid_cusid, u_inwaremx.ctmint, u_inwaremx.cost,
  4517. u_inwaremx.sptmtrlname, u_inwaremx.uqty, u_inwaremx.uprice, u_inwaremx.unit,
  4518. u_inwaremx.rate, u_inwaremx.bootqty, u_inwaremx.noauditqty,
  4519. u_inwaremx.relprintid, u_inwaremx.checkqty, u_inwaremx.result,
  4520. u_inwaremx.waredscrp, u_inwaremx.relbillid, u_inwaremx.relbillprintid,
  4521. u_inwaremx.relbillcode, u_inwaremx.mtrlcuscode, u_inwaremx.location,
  4522. u_inwaremx.badqty, u_inwaremx.thqty, u_inwaremx.ptqty, u_inwaremx.enprice,
  4523. u_inwaremx.capacity, u_inwaremx.enprice_tax, u_inwaremx.enprice_notax,
  4524. u_inwaremx.tax, u_inwaremx.deliqty, u_inwaremx.deliprice_notax,
  4525. u_inwaremx.mtrlwareid, u_inwaremx.mtrlwareprintid, u_inwaremx.newprice,
  4526. u_mtrldef.mtrlcode, u_mtrldef.mtrlname,:ll_disuseid
  4527. From u_inwaremx LEFT Outer JOIN
  4528. u_mtrldef ON u_inwaremx.mtrlid = u_mtrldef.mtrlid
  4529. Where u_inwaremx.scid = :arg_scid
  4530. And u_inwaremx.inwareid = :arg_inwareid Using commit_transaction;
  4531. If commit_transaction.SQLCode <> 0 Then
  4532. rslt = 0
  4533. arg_msg = '插入采购收货单废弃单明细失败,'+commit_transaction.SQLErrText
  4534. Goto ext
  4535. End If
  4536. Insert Into u_inwaremx_mx_disuse
  4537. (scid, inwareid, mxprintid, mtrlid, plancode, status, qty, fprice, rebate, price, mxdscrp,
  4538. printid, woodcode, pcode, sptid_cusid, ctmint, cost, waredscrp, mtrlcuscode, location,
  4539. ptinwareid, ptprintid, ptinwarecode, mtrlcode, mtrlname, disuseid)
  4540. Select u_inwaremx_mx.scid, u_inwaremx_mx.inwareid, u_inwaremx_mx.mxprintid,
  4541. u_inwaremx_mx.mtrlid, u_inwaremx_mx.plancode, u_inwaremx_mx.status,
  4542. u_inwaremx_mx.qty, u_inwaremx_mx.fprice, u_inwaremx_mx.rebate,
  4543. u_inwaremx_mx.price, u_inwaremx_mx.mxdscrp, u_inwaremx_mx.printid,
  4544. u_inwaremx_mx.woodcode, u_inwaremx_mx.pcode, u_inwaremx_mx.sptid_cusid,
  4545. u_inwaremx_mx.ctmint, u_inwaremx_mx.cost, u_inwaremx_mx.waredscrp,
  4546. u_inwaremx_mx.mtrlcuscode, u_inwaremx_mx.location, u_inwaremx_mx.ptinwareid,
  4547. u_inwaremx_mx.ptprintid, u_inwaremx_mx.ptinwarecode, u_mtrldef.mtrlcode,
  4548. u_mtrldef.mtrlname, :ll_disuseid
  4549. From u_inwaremx_mx LEFT Outer JOIN
  4550. u_mtrldef ON u_inwaremx_mx.mtrlid = u_mtrldef.mtrlid
  4551. Where u_inwaremx_mx.scid = :arg_scid
  4552. And u_inwaremx_mx.inwareid = :arg_inwareid Using commit_transaction;
  4553. If commit_transaction.SQLCode <> 0 Then
  4554. rslt = 0
  4555. arg_msg = '插入采购收货单废弃单包件明细失败,'+commit_transaction.SQLErrText
  4556. Goto ext
  4557. End If
  4558. Insert Into U_inwaremx_mx_barcode_disuse
  4559. (billtype, scid, inwareid, barcode, printid, qty, ctmint, opemp, opdate, disuseid)
  4560. Select billtype, scid, inwareid, barcode, printid, qty, ctmint, opemp, opdate, :ll_disuseid
  4561. From U_inwaremx_mx_barcode
  4562. Where U_inwaremx_mx_barcode.scid = :arg_scid
  4563. And U_inwaremx_mx_barcode.inwareid = :arg_inwareid Using commit_transaction;
  4564. If commit_transaction.SQLCode <> 0 Then
  4565. rslt = 0
  4566. arg_msg = '插入采购收货单废弃单条码明细失败,'+commit_transaction.SQLErrText
  4567. Goto ext
  4568. End If
  4569. Insert Into u_inware_itemmx_disuse
  4570. (scid, inwareid, printid, itemid, amt, mxdscrp, itemcode, itemname, itemtype, disuseid)
  4571. Select u_inware_itemmx.scid, u_inware_itemmx.inwareid, u_inware_itemmx.printid,
  4572. u_inware_itemmx.itemid, u_inware_itemmx.amt, u_inware_itemmx.mxdscrp,
  4573. u_itemdef.itemcode, u_itemdef.itemname, u_itemdef.itemtype, :ll_disuseid
  4574. From u_inware_itemmx LEFT Outer JOIN
  4575. u_itemdef ON u_inware_itemmx.itemid = u_itemdef.itemid
  4576. Where u_inware_itemmx.scid = :arg_scid
  4577. And u_inware_itemmx.inwareid = :arg_inwareid Using commit_transaction;
  4578. If commit_transaction.SQLCode <> 0 Then
  4579. rslt = 0
  4580. arg_msg = '插入采购收货单废弃单费用明细失败,'+commit_transaction.SQLErrText
  4581. Goto ext
  4582. End If
  4583. ext:
  4584. If rslt = 0 Then
  4585. Rollback Using commit_transaction;
  4586. ElseIf rslt = 1 And arg_ifcommit Then
  4587. Commit Using commit_transaction;
  4588. End If
  4589. Return rslt
  4590. end function
  4591. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,ls_i
  4592. Decimal ld_planprice,ld_cost
  4593. Decimal ld_noauditqty,ld_bootqty
  4594. Decimal ld_consignedqty,ld_uqty
  4595. String ls_relcode,ls_unit
  4596. Decimal lde_mx_qty
  4597. Decimal ld_uprate,ld_upqty
  4598. Int li_ifpack,li_ifpackpro
  4599. Decimal ld_capacity,ld_capacity_zj
  4600. s_mtrlcfg_expr s_pz[]
  4601. String ls_status_zj
  4602. Long ll_i
  4603. Decimal lde_newprice
  4604. Int li_outtype_storage
  4605. Int li_check_taskqty
  4606. Decimal ld_fprice_notax
  4607. IF uo_option_buy_zero = -1000 THEN
  4608. rslt = 0
  4609. arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!'
  4610. GOTO ext
  4611. END IF
  4612. IF uo_option_wfjg_zero = -1000 THEN
  4613. rslt = 0
  4614. arg_msg = '选项:[080]计件单不使用确认功能,读取初始默认值失败,操作取消!'
  4615. GOTO ext
  4616. END IF
  4617. IF uo_option_change_status = '-1000' THEN
  4618. rslt = 0
  4619. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  4620. GOTO ext
  4621. END IF
  4622. IF uo_option_change_woodcode = '-1000' THEN
  4623. rslt = 0
  4624. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  4625. GOTO ext
  4626. END IF
  4627. IF uo_option_change_pcode = '-1000' THEN
  4628. rslt = 0
  4629. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  4630. GOTO ext
  4631. END IF
  4632. IF uo_option_unit_dec = -1000 THEN
  4633. rslt = 0
  4634. arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!'
  4635. GOTO ext
  4636. END IF
  4637. IF uo_option_ifovertask = -1000 THEN
  4638. rslt = 0
  4639. arg_msg = '选项:[010]超采购,外协订单收货,读取初始默认值失败,操作取消!'
  4640. GOTO ext
  4641. END IF
  4642. IF uo_option_ifovertask_cp = -1000 THEN
  4643. rslt = 0
  4644. arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!'
  4645. GOTO ext
  4646. END IF
  4647. IF uo_option_cost_notax = -1000 THEN
  4648. rslt = 0
  4649. arg_msg = '选项:[362]采购外协使用不含税价进仓,读取初始默认值失败,操作取消!'
  4650. GOTO ext
  4651. END IF
  4652. uo_spt_price uo_sptprice
  4653. uo_sptprice = Create uo_spt_price
  4654. IF it_newbegin = False And it_updatebegin = False THEN
  4655. rslt = 0
  4656. arg_msg = "非编辑状态不可以使用,操作取消"
  4657. GOTO ext
  4658. END IF
  4659. //清除空值
  4660. IF IsNull(s_mx.printid) THEN s_mx.printid = 0
  4661. IF IsNull(s_mx.mtrlid) THEN s_mx.mtrlid = 0
  4662. IF IsNull(s_mx.mtrlcode) THEN s_mx.mtrlcode = ''
  4663. IF IsNull(s_mx.plancode) THEN s_mx.plancode = ''
  4664. IF IsNull(s_mx.status) THEN s_mx.status = ''
  4665. IF IsNull(s_mx.woodcode) THEN s_mx.woodcode = ''
  4666. IF IsNull(s_mx.pcode) THEN s_mx.pcode = ''
  4667. IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0
  4668. IF IsNull(s_mx.enprice) THEN s_mx.enprice = 0
  4669. IF IsNull(s_mx.rebate) THEN s_mx.rebate = 1
  4670. IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = ''
  4671. IF IsNull(s_mx.jgprice) THEN s_mx.jgprice = 0
  4672. IF IsNull(s_mx.relid) THEN s_mx.relid = 0
  4673. IF IsNull(s_mx.ifrel) THEN s_mx.ifrel = 0
  4674. IF IsNull(s_mx.mxdscrp) THEN s_mx.woodcode = ''
  4675. IF IsNull(s_mx.pcode) THEN s_mx.pcode = ''
  4676. IF IsNull(s_mx.sptid) THEN s_mx.sptid = 0
  4677. IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0
  4678. IF IsNull(s_mx.checkqty) THEN s_mx.checkqty = 0
  4679. IF IsNull(s_mx.result) THEN s_mx.result = ''
  4680. IF IsNull(s_mx.waredscrp) THEN s_mx.waredscrp = ''
  4681. IF IsNull(s_mx.relbillid) THEN s_mx.relbillid = 0
  4682. IF IsNull(s_mx.relbillprintid) THEN s_mx.relbillprintid = 0
  4683. IF IsNull(s_mx.mtrlcuscode) THEN s_mx.mtrlcuscode = ''
  4684. IF IsNull(s_mx.Location) THEN s_mx.Location = ''
  4685. IF IsNull(s_mx.deliqty) THEN s_mx.deliqty = 0
  4686. IF IsNull(s_mx.tax) THEN s_mx.tax = 0
  4687. IF IsNull(s_mx.Thptype) THEN s_mx.Thptype = 0 //退货处理选项: 0-不操作,1-更新原采购订单,2-重新生成采购订单
  4688. IF IsNull(s_mx.jgdscrp) THEN s_mx.jgdscrp = ''
  4689. IF IsNull(s_mx.ifvqty) THEN s_mx.ifvqty = 0
  4690. //IF s_mx.rebate = 0 THEN s_mx.rebate = 1
  4691. IF IsNull(s_mx.unit) THEN s_mx.unit = ''
  4692. IF IsNull(s_mx.rate) THEN s_mx.rate = 1
  4693. IF s_mx.rate = 0 THEN s_mx.rate = 1
  4694. IF IsNull(s_mx.ifnotinout) THEN s_mx.ifnotinout = 0
  4695. IF s_mx.mtrlid = 0 THEN //OR s_mx.uqty = 0 OR s_mx.qty = 0 THEN
  4696. rslt = 1
  4697. GOTO ext
  4698. END IF
  4699. s_mx.status = Trim(s_mx.status)
  4700. s_mx.woodcode = Trim(s_mx.woodcode)
  4701. s_mx.pcode = Trim(s_mx.pcode)
  4702. s_mx.plancode = Trim(s_mx.plancode)
  4703. s_mx.mtrlcuscode = Trim(s_mx.mtrlcuscode)
  4704. s_mx.Location = Trim(s_mx.Location)
  4705. IF billtype <> 1 THEN
  4706. mrate = 1
  4707. END IF
  4708. //检查物料id
  4709. Int li_statusflag,li_woodcodeflag,li_pcodeflag
  4710. Int li_status_check,li_woodcode_check,li_pcode_check
  4711. Int li_outtype_mtrl,li_ifunit
  4712. SELECT unit,
  4713. statusflag,
  4714. woodcodeflag,
  4715. pcodeflag,
  4716. status_check,
  4717. woodcode_check,
  4718. pcode_check,
  4719. capacity * capaparm,
  4720. outtype,
  4721. ifpack,
  4722. ifpackpro,
  4723. ifunit
  4724. INTO :ls_unit,
  4725. :li_statusflag,
  4726. :li_woodcodeflag,
  4727. :li_pcodeflag,
  4728. :li_status_check,
  4729. :li_woodcode_check,
  4730. :li_pcode_check,
  4731. :ld_capacity,
  4732. :li_outtype_mtrl,
  4733. :li_ifpack,
  4734. :li_ifpackpro,
  4735. :li_ifunit
  4736. FROM u_mtrldef
  4737. Where u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction ;
  4738. IF commit_transaction.SQLCode <> 0 THEN
  4739. rslt = 0
  4740. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+"查询操作失败,物料或产品编号:"+s_mx.mtrlcode
  4741. GOTO ext
  4742. END IF
  4743. SELECT outtype INTO :li_outtype_storage FROM u_storage
  4744. Where storageid = :storageid Using commit_transaction;
  4745. IF commit_transaction.SQLCode <> 0 THEN
  4746. rslt = 0
  4747. arg_msg = "查询仓库出仓策略失败,"+commit_transaction.SQLErrText
  4748. GOTO ext
  4749. END IF
  4750. IF li_outtype_storage > 0 THEN
  4751. IF billtype <> 23 And billtype <> 25 And billtype <> 1 And ( li_ifpackpro = 1 Or li_ifpackpro = 2 ) THEN
  4752. arg_msg = "第"+String(s_mx.printid)+"行,物料:"+s_mx.mtrlcode+"个性包件产品或通用包件产品不能直接开进仓单,操作取消"
  4753. rslt = 0
  4754. GOTO ext
  4755. END IF
  4756. END IF
  4757. //IF billtype <> 9 THEN
  4758. // IF li_ifunit = 1 THEN
  4759. // IF s_mx.uqty = s_mx.qty And s_mx.unit <> ls_unit THEN
  4760. // rslt = 0
  4761. // arg_msg = "第"+String(s_mx.printid)+"行,物料使用库存双数量核算,但录入的计量单位数量与库存单位数量相同,操作取消"
  4762. // GOTO ext
  4763. // END IF
  4764. // END IF
  4765. //END IF
  4766. IF li_ifpack = 2 And s_mx.mtrlcuscode = '' THEN
  4767. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为个性包件,但没有产品批号,请检查"
  4768. rslt = 0
  4769. GOTO ext
  4770. END IF
  4771. IF li_ifpackpro = 2 And s_mx.mtrlcuscode = '' THEN
  4772. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为个性包件产品,但没有产品批号,请检查"
  4773. rslt = 0
  4774. GOTO ext
  4775. END IF
  4776. IF li_ifpackpro = 4 And s_mx.mtrlcuscode = '' THEN
  4777. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+",为组合配置整排散进包件产品,但没有产品批号,请检查"
  4778. rslt = 0
  4779. GOTO ext
  4780. END IF
  4781. f_get_planprice_mtrl(s_mx.mtrlid,s_mx.status,s_mx.woodcode,s_mx.pcode,ld_planprice)
  4782. IF Not ((uo_option_buy_zero = 1 And billtype = 1) Or &
  4783. (uo_option_wfjg_zero = 1 And billtype = 4 ) Or &
  4784. (billtype = 9 And relid > 0 And li_outtype_mtrl = 2)) THEN
  4785. IF billtype = 9 THEN
  4786. IF s_mx.uqty = 0 And s_mx.qty = 0 THEN
  4787. rslt = 1
  4788. GOTO ext
  4789. END IF
  4790. ELSE
  4791. IF s_mx.uqty = 0 Or s_mx.qty = 0 Or s_mx.deliqty = 0 THEN
  4792. rslt = 1
  4793. GOTO ext
  4794. END IF
  4795. END IF
  4796. IF s_mx.uqty = 0 THEN
  4797. s_mx.rate = 0
  4798. ELSE
  4799. s_mx.rate = s_mx.qty / s_mx.uqty
  4800. END IF
  4801. IF billtype <> 9 THEN
  4802. IF s_mx.checkqty = 0 THEN s_mx.checkqty = s_mx.uqty
  4803. END IF
  4804. END IF
  4805. IF s_mx.rebate <= 0 or s_mx.rebate > 1 THEN
  4806. arg_msg = '行:'+String(s_mx.printid)+',折扣错误,只能取范围(0, 1]'
  4807. rslt = 0
  4808. GOTO ext
  4809. END IF
  4810. //IF s_mx.checkqty < s_mx.uqty THEN
  4811. // arg_msg = '第'+String(s_mx.printid)+'行,送货数不能少于实进仓数'
  4812. // rslt = 0
  4813. // GOTO ext
  4814. //END IF
  4815. IF li_statusflag = 2 THEN
  4816. IF s_mx.status = '' THEN
  4817. arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+','+uo_option_change_status + '字段使用组合配置,请输入'
  4818. rslt = 0
  4819. GOTO ext
  4820. END IF
  4821. ELSEIF li_statusflag = 4 And li_status_check = 1 THEN
  4822. IF s_mx.status = '' THEN
  4823. arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+','+uo_option_change_woodcode + '字段使用部件选配,请输入'
  4824. rslt = 0
  4825. GOTO ext
  4826. END IF
  4827. ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN
  4828. IF f_check_status(1,s_mx.status) = 0 THEN
  4829. rslt = 0
  4830. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.status
  4831. GOTO ext
  4832. END IF
  4833. END IF
  4834. IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN
  4835. IF s_mx.woodcode = '' THEN
  4836. arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+','+uo_option_change_woodcode + '字段使用部件选配,请输入'
  4837. rslt = 0
  4838. GOTO ext
  4839. END IF
  4840. ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN
  4841. IF f_check_status(2,s_mx.woodcode) = 0 THEN
  4842. rslt = 0
  4843. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.woodcode
  4844. GOTO ext
  4845. END IF
  4846. END IF
  4847. IF li_pcodeflag = 4 And li_pcode_check = 1 THEN
  4848. IF s_mx.pcode = '' THEN
  4849. arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+','+uo_option_change_pcode + '字段使用部件选配,请输入'
  4850. rslt = 0
  4851. GOTO ext
  4852. END IF
  4853. ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN
  4854. IF f_check_status(3,s_mx.pcode) = 0 THEN
  4855. rslt = 0
  4856. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.pcode
  4857. GOTO ext
  4858. END IF
  4859. END IF
  4860. IF li_statusflag = 2 THEN
  4861. ld_capacity = 0
  4862. f_checkpz(s_mx.status,s_pz[])
  4863. FOR ll_i = 1 To UpperBound(s_pz)
  4864. ls_status_zj = s_pz[ll_i].cfgname
  4865. SELECT capacity * capaparm
  4866. INTO :ld_capacity_zj
  4867. FROM u_mtrl_configure
  4868. WHERE mtrlid = :s_mx.mtrlid
  4869. And Name = :ls_status_zj Using commit_transaction;
  4870. IF commit_transaction.SQLCode <> 0 THEN
  4871. rslt = 0
  4872. arg_msg = "第"+String(s_mx.printid)+"行,物料:"+s_mx.mtrlcode+"查询子件 "+ls_status_zj+" 折算套数参数操作失败"
  4873. GOTO ext
  4874. END IF
  4875. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  4876. NEXT
  4877. END IF
  4878. Int li_iflimitprice
  4879. SELECT iflimitprice
  4880. INTO :li_iflimitprice
  4881. FROM u_mtrldef
  4882. Where mtrlid = :s_mx.mtrlid Using commit_transaction;
  4883. IF commit_transaction.SQLCode <> 0 THEN
  4884. arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+s_mx.mtrlcode+'限价属性失败 '+commit_transaction.SQLErrText
  4885. rslt = 0
  4886. GOTO ext
  4887. END IF
  4888. IF billtype <> 9 THEN
  4889. // IF Trim(ls_unit) <> Trim(s_mx.unit) And s_mx.rate = 1 THEN
  4890. // arg_msg = '进仓单,行:'+String(s_mx.printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(s_mx.unit)+'不同,但转换率为1,请检查'
  4891. // rslt = 0
  4892. // GOTO ext
  4893. // END IF
  4894. IF Trim(ls_unit) = Trim(s_mx.unit) And s_mx.rate <> 1 THEN
  4895. arg_msg = '进仓单,行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+'物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(s_mx.unit)+'相同,但转换率不为1,请检查'
  4896. rslt = 0
  4897. GOTO ext
  4898. END IF
  4899. END IF
  4900. //查询采购限价并检查进仓价
  4901. IF billtype = 1 THEN
  4902. IF uo_sptprice.uof_check_limitprice(thflag,s_mx.mtrlid,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.unit,s_mx.enprice * s_mx.rebate,arg_msg) = 0 THEN
  4903. arg_msg = '行:'+String(s_mx.printid)+","+arg_msg
  4904. rslt = 0
  4905. GOTO ext
  4906. END IF
  4907. IF li_iflimitprice = 1 THEN
  4908. IF uo_sptprice.uof_check_price(thflag,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,'',moneyid,s_mx.enprice * s_mx.rebate,indate,arg_msg) = 0 THEN
  4909. arg_msg = '行:'+String(s_mx.printid)+","+arg_msg
  4910. rslt = 0
  4911. GOTO ext
  4912. END IF
  4913. END IF
  4914. IF thflag = 1 THEN
  4915. //退货处理选项
  4916. IF s_mx.Thptype = 0 THEN
  4917. ELSEIF s_mx.Thptype = 1 THEN
  4918. IF s_mx.ifrel = 0 THEN
  4919. arg_msg = '行:'+String(s_mx.printid)+',没有选订单的明细退货处理选项不能选择[更新原采购订单]'
  4920. rslt = 0
  4921. GOTO ext
  4922. END IF
  4923. ELSEIF s_mx.Thptype = 2 THEN
  4924. END IF
  4925. END IF
  4926. END IF
  4927. //增加新字段 newprice 最新报价
  4928. IF billtype = 1 THEN
  4929. DateTime ldt_effdate
  4930. Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate
  4931. String ls_msg
  4932. String ls_1stunit
  4933. ls_1stunit = s_mx.unit
  4934. ldt_effdate = DateTime(Today(),Time(0))
  4935. IF uo_sptprice.uof_getmtrlsptprice(moneyid,sptid,s_mx.mtrlid,ls_1stunit,s_mx.status,s_mx.woodcode,s_mx.pcode,'',ls_1stnewcost,ls_1stzqrate,ls_1strate,ldt_effdate,ls_msg) <> 1 THEN
  4936. lde_newprice = 0
  4937. ELSE
  4938. lde_newprice = ls_1stnewcost
  4939. END IF
  4940. ELSE
  4941. lde_newprice = 0
  4942. END IF
  4943. CHOOSE CASE billtype
  4944. CASE 1,26
  4945. IF s_mx.ifrel > 0 THEN
  4946. IF s_mx.relid = 0 THEN
  4947. arg_msg = '行:'+String(s_mx.printid)+',请先择相应的订单'
  4948. rslt = 0
  4949. GOTO ext
  4950. END IF
  4951. SELECT taskcode,sum(uqty - consignedqty - stopqty),sum(uqty),sum(consignedqty)
  4952. INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty
  4953. FROM u_buytaskmx,u_buytask
  4954. WHERE u_buytaskmx.taskid = :s_mx.relid
  4955. AND u_buytaskmx.scid = :scid
  4956. AND u_buytaskmx.printid = :s_mx.relprintid
  4957. AND u_buytaskmx.taskid = u_buytask.taskid
  4958. AND u_buytaskmx.scid = u_buytask.scid
  4959. GROUP BY taskcode
  4960. Using commit_transaction;
  4961. IF commit_transaction.SQLCode <> 0 THEN
  4962. arg_msg = '行:'+String(s_mx.printid)+',查询采购订单是否有订购物料:'+s_mx.mtrlcode+'失败'+commit_transaction.SQLErrText
  4963. rslt = 0
  4964. GOTO ext
  4965. END IF
  4966. IF billtype = 1 THEN
  4967. lde_mx_qty = 0
  4968. FOR ls_i = 1 To it_mxbt
  4969. IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And &
  4970. s_mx.relid = inwaremx[ls_i].relid And &
  4971. s_mx.relprintid = inwaremx[ls_i].relprintid THEN
  4972. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].uqty
  4973. END IF
  4974. NEXT
  4975. lde_mx_qty = lde_mx_qty + s_mx.uqty
  4976. //查已开单数
  4977. ld_noauditqty = 0
  4978. SELECT sum(uqty) INTO :ld_noauditqty
  4979. FROM u_inwaremx,u_inware
  4980. WHERE u_inwaremx.relid = :s_mx.relid
  4981. AND u_inwaremx.sptid_cusid = :s_mx.sptid
  4982. AND u_inwaremx.mtrlid = :s_mx.mtrlid
  4983. AND u_inwaremx.status = :s_mx.status
  4984. AND u_inwaremx.woodcode = :s_mx.woodcode
  4985. AND u_inwaremx.pcode = :s_mx.pcode
  4986. AND u_inwaremx.unit = :s_mx.unit
  4987. AND u_inwaremx.relprintid = :s_mx.relprintid
  4988. AND u_inware.inwareid <> :inwareid
  4989. AND u_inware.flag = 0
  4990. AND u_inware.inwareid = u_inwaremx.inwareid
  4991. AND u_inware.scid = u_inwaremx.scid
  4992. AND u_inwaremx.scid = :scid
  4993. And u_inware.billtype = 1 Using commit_transaction;
  4994. IF commit_transaction.SQLCode <> 0 THEN
  4995. arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+s_mx.mtrlcode+'相关订单单据已开单数失败'+commit_transaction.SQLErrText
  4996. rslt = 0
  4997. GOTO ext
  4998. END IF
  4999. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  5000. IF uo_option_ifovertask = 1 THEN
  5001. IF lde_mx_qty + ld_noauditqty > ld_bootqty THEN
  5002. arg_msg = '行:'+String(s_mx.printid)+',物料:'+s_mx.mtrlcode+'未完成数:'+String(ld_bootqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+',不能收货:'+String(lde_mx_qty,'#,##0.0###')
  5003. rslt = 0
  5004. GOTO ext
  5005. END IF
  5006. ELSEIF uo_option_ifovertask = 3 THEN
  5007. SELECT uprate , upqty
  5008. INTO :ld_uprate,:ld_upqty
  5009. FROM u_mtrldef
  5010. Where mtrlid = :s_mx.mtrlid Using commit_transaction;
  5011. IF commit_transaction.SQLCode <> 0 THEN
  5012. arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+Trim(s_mx.mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText
  5013. rslt = 0
  5014. GOTO ext
  5015. END IF
  5016. IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN
  5017. rslt = 0
  5018. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+"已开单未审核数:"+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#')
  5019. GOTO ext
  5020. END IF
  5021. END IF
  5022. END IF
  5023. END IF
  5024. CASE 3
  5025. IF s_mx.ifrel > 0 THEN
  5026. IF s_mx.relid = 0 THEN
  5027. arg_msg = '行:'+String(s_mx.printid)+',请先择相应的计划'
  5028. rslt = 0
  5029. GOTO ext
  5030. END IF
  5031. SELECT u_Order_ml.ordercode,
  5032. isnull(u_sc_wkp.check_taskqty,0)
  5033. INTO :ls_relcode,
  5034. :li_check_taskqty
  5035. FROM u_Order_ml LEFT OUTER JOIN
  5036. u_sc_wkp ON u_Order_ml.wrkGrpid = u_sc_wkp.wrkGrpid
  5037. WHERE u_order_ml.orderid = :s_mx.relid
  5038. AND u_order_ml.mtrlid = :s_mx.mtrlid
  5039. AND u_order_ml.scid = :scid
  5040. Using commit_transaction;
  5041. IF commit_transaction.SQLCode <> 0 THEN
  5042. arg_msg = '行:'+String(s_mx.printid)+',查询生产计划是否有生产产品:'+s_mx.mtrlcode+'失败'+commit_transaction.SQLErrText
  5043. rslt = 0
  5044. GOTO ext
  5045. END IF
  5046. //检查指令单工序是否已开完派工单
  5047. IF li_check_taskqty = 1 THEN
  5048. SELECT count(*)
  5049. INTO :cnt
  5050. FROM U_OrderRqwp
  5051. WHERE scid = :scid
  5052. AND orderid = :s_mx.relid
  5053. AND proqty > taskqty
  5054. Using commit_transaction;
  5055. IF commit_transaction.SQLCode <> 0 THEN
  5056. arg_msg = '行:'+String(s_mx.printid)+',查询指令单工序是否已完成派工失败'+commit_transaction.SQLErrText
  5057. rslt = 0
  5058. GOTO ext
  5059. END IF
  5060. IF cnt > 0 THEN
  5061. arg_msg = '行:'+String(s_mx.printid)+',指令单工序没有完成派工,不允许进仓'
  5062. rslt = 0
  5063. GOTO ext
  5064. END IF
  5065. END IF
  5066. //查已开单数
  5067. ld_noauditqty = 0
  5068. SELECT sum(qty) INTO :ld_noauditqty
  5069. FROM u_inwaremx,u_inware
  5070. WHERE u_inwaremx.relid = :s_mx.relid
  5071. AND u_inware.inwareid <> :inwareid
  5072. AND u_inware.flag = 0
  5073. AND u_inware.inwareid = u_inwaremx.inwareid
  5074. AND u_inware.scid = u_inwaremx.scid
  5075. AND u_inwaremx.scid = :scid
  5076. And u_inware.billtype = 3 Using commit_transaction;
  5077. IF commit_transaction.SQLCode <> 0 THEN
  5078. arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+s_mx.mtrlcode+'相关订单单据已开单数失败'+commit_transaction.SQLErrText
  5079. rslt = 0
  5080. GOTO ext
  5081. END IF
  5082. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  5083. lde_mx_qty = 0
  5084. FOR ls_i = 1 To it_mxbt
  5085. IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And &
  5086. s_mx.relid = inwaremx[ls_i].relid And &
  5087. s_mx.relprintid = inwaremx[ls_i].relprintid THEN
  5088. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty
  5089. END IF
  5090. NEXT
  5091. lde_mx_qty = lde_mx_qty + s_mx.qty
  5092. SELECT orderqty - stopqty,acmpqty
  5093. INTO :ld_uqty,:ld_consignedqty
  5094. FROM u_order_ml
  5095. WHERE u_order_ml.orderid = :s_mx.relid
  5096. AND u_order_ml.scid = :scid
  5097. Using commit_transaction;
  5098. IF commit_transaction.SQLCode <> 0 THEN
  5099. arg_msg = '行:'+String(s_mx.printid)+',查询生产计划是否有物料:'+s_mx.mtrlcode+'失败'
  5100. rslt = 0
  5101. GOTO ext
  5102. END IF
  5103. IF uo_option_ifovertask_cp = 1 Or uo_option_ifovertask_cp = 4 THEN //不允许超收
  5104. IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN
  5105. rslt = 0
  5106. arg_msg = '行:'+String(s_mx.printid)+',该计划明细产品['+s_mx.mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量'
  5107. GOTO ext
  5108. END IF
  5109. ELSEIF uo_option_ifovertask_cp = 3 THEN //允许超收但按比例限制
  5110. SELECT uprate , upqty
  5111. INTO :ld_uprate,:ld_upqty
  5112. FROM u_mtrldef
  5113. Where mtrlid = :s_mx.mtrlid Using commit_transaction;
  5114. IF commit_transaction.SQLCode <> 0 THEN
  5115. arg_msg = '行:'+String(s_mx.printid)+',查询物料:'+Trim(s_mx.mtrlcode)+'超收货比例失败,'+commit_transaction.SQLErrText
  5116. rslt = 0
  5117. GOTO ext
  5118. END IF
  5119. IF ld_uqty * (1 + ld_uprate) + ld_upqty < ld_consignedqty + lde_mx_qty + ld_noauditqty THEN
  5120. rslt = 0
  5121. arg_msg = '行:'+String(s_mx.printid)+",物料:"+s_mx.mtrlcode+"未完成数量只有"+String(ld_uqty - ld_consignedqty,'#,##0.0###')+'已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+",允许超收上限:"+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty - ld_noauditqty,'#,##0.00##')+",不能入库"+String(lde_mx_qty,'#,##0.0#')
  5122. GOTO ext
  5123. END IF
  5124. END IF
  5125. END IF
  5126. Int li_if_cus_mtrlware
  5127. SELECT balctype INTO :li_if_cus_mtrlware
  5128. FROM u_storage
  5129. Where storageid = :storageid Using commit_transaction;
  5130. IF commit_transaction.SQLCode <> 0 THEN
  5131. arg_msg = '行:'+String(s_mx.printid)+',查询仓库是否使用客户库存失败,'+commit_transaction.SQLErrText
  5132. rslt = 0
  5133. GOTO ext
  5134. END IF
  5135. IF billtype = 3 And li_if_cus_mtrlware = 1 THEN
  5136. cnt = 0
  5137. SELECT count(*) INTO :cnt
  5138. FROM u_cust
  5139. Where cusid = :s_mx.sptid Using commit_transaction;
  5140. IF commit_transaction.SQLCode <> 0 THEN
  5141. arg_msg = '行:'+String(s_mx.printid)+',查询客户资料失败,'+commit_transaction.SQLErrText
  5142. rslt = 0
  5143. GOTO ext
  5144. END IF
  5145. END IF
  5146. CASE 4
  5147. IF s_mx.ifrel > 0 THEN
  5148. IF s_mx.relid = 0 THEN
  5149. arg_msg = '行:'+String(s_mx.printid)+',请先择相应的加工计划'
  5150. rslt = 0
  5151. GOTO ext
  5152. END IF
  5153. SELECT u_order_wfjg.taskcode ,sum(u_order_wfjgmx.qty - u_order_wfjgmx.consignedqty)INTO :ls_relcode,:ld_bootqty
  5154. FROM u_order_wfjgmx,u_order_wfjg
  5155. WHERE u_order_wfjgmx.wfjgid = :s_mx.relid
  5156. AND u_order_wfjgmx.scid = :scid
  5157. AND u_order_wfjgmx.printid = :s_mx.relprintid
  5158. AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  5159. AND u_order_wfjgmx.scid = u_order_wfjg.scid
  5160. GROUP BY u_order_wfjg.taskcode
  5161. Using commit_transaction;
  5162. IF commit_transaction.SQLCode <> 0 THEN
  5163. arg_msg = '行:'+String(s_mx.printid)+',查询外协计划是否有加工产品:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  5164. rslt = 0
  5165. GOTO ext
  5166. END IF
  5167. END IF
  5168. CASE 5
  5169. IF s_mx.ifrel > 0 THEN
  5170. IF s_mx.relid = 0 THEN
  5171. arg_msg = '行:'+String(s_mx.printid)+',请先择相应的来料加工订单'
  5172. rslt = 0
  5173. GOTO ext
  5174. END IF
  5175. SELECT u_saletask_ll.taskcode ,sum(qty - consignedqty),sum(qty),sum(consignedqty)
  5176. INTO :ls_relcode,:ld_bootqty,:ld_uqty,:ld_consignedqty
  5177. FROM u_saletaskmx_in,u_saletask_ll
  5178. WHERE u_saletaskmx_in.taskid = :s_mx.relid
  5179. AND u_saletask_ll.scid = :scid
  5180. AND u_saletaskmx_in.printid = :s_mx.relprintid
  5181. AND u_saletaskmx_in.taskid = u_saletask_ll.taskid
  5182. GROUP BY u_saletask_ll.taskcode
  5183. Using commit_transaction;
  5184. IF commit_transaction.SQLCode <> 0 THEN
  5185. arg_msg = '行:'+String(s_mx.printid)+',查询来料订单是否有收料物料:'+s_mx.mtrlcode+'失败'+commit_transaction.SQLErrText
  5186. rslt = 0
  5187. GOTO ext
  5188. END IF
  5189. lde_mx_qty = 0
  5190. FOR ls_i = 1 To it_mxbt
  5191. IF s_mx.mtrlid = inwaremx[ls_i].mtrlid And &
  5192. s_mx.relid = inwaremx[ls_i].relid And &
  5193. s_mx.relprintid = inwaremx[ls_i].relprintid THEN
  5194. lde_mx_qty = lde_mx_qty + inwaremx[ls_i].qty
  5195. END IF
  5196. NEXT
  5197. lde_mx_qty = lde_mx_qty + s_mx.uqty
  5198. //查已开单数
  5199. ld_noauditqty = 0
  5200. SELECT sum(qty) INTO :ld_noauditqty
  5201. FROM u_inwaremx,u_inware
  5202. WHERE u_inwaremx.relid = :s_mx.relid
  5203. AND u_inwaremx.sptid_cusid = :s_mx.sptid
  5204. AND u_inwaremx.mtrlid = :s_mx.mtrlid
  5205. AND u_inwaremx.status = :s_mx.status
  5206. AND u_inwaremx.woodcode = :s_mx.woodcode
  5207. AND u_inwaremx.pcode = :s_mx.pcode
  5208. AND u_inwaremx.unit = :s_mx.unit
  5209. AND u_inwaremx.relprintid = :s_mx.relprintid
  5210. AND u_inware.inwareid <> :inwareid
  5211. AND u_inware.flag = 0
  5212. AND u_inware.inwareid = u_inwaremx.inwareid
  5213. AND u_inware.scid = u_inwaremx.scid
  5214. AND u_inwaremx.scid = :scid
  5215. And u_inware.billtype = 5 Using commit_transaction;
  5216. IF commit_transaction.SQLCode <> 0 THEN
  5217. arg_msg = '查询物料:'+s_mx.mtrlcode+'相关订单单据已开单数失败'
  5218. rslt = 0
  5219. GOTO ext
  5220. END IF
  5221. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  5222. IF ld_uqty < lde_mx_qty + ld_consignedqty + ld_noauditqty THEN
  5223. rslt = 0
  5224. arg_msg = '行:'+String(s_mx.printid)+',该计划明细产品['+s_mx.mtrlcode+']未完成数量'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',已开单未审核数:'+String(ld_noauditqty,'#,##0.0###')+'小于本次完成数量'
  5225. GOTO ext
  5226. END IF
  5227. END IF
  5228. END CHOOSE
  5229. IF s_mx.enprice * s_mx.rebate < 0 THEN //检查进仓价
  5230. rslt = 0
  5231. arg_msg = '行:'+String(s_mx.printid)+",物料或产品:" + String(s_mx.mtrlcode)+" 单价错误"
  5232. GOTO ext
  5233. END IF
  5234. //查询质检单号
  5235. String ls_relbillcode
  5236. ls_relbillcode = ''
  5237. IF s_mx.relbillid > 0 THEN
  5238. SELECT billcode
  5239. INTO :ls_relbillcode
  5240. FROM u_sptcheck
  5241. Where billid = :s_mx.relbillid Using commit_transaction;
  5242. IF commit_transaction.SQLCode <> 0 THEN
  5243. rslt = 0
  5244. arg_msg = '行:'+String(s_mx.printid)+',查询质检单号失败,'+commit_transaction.SQLErrText
  5245. GOTO ext
  5246. END IF
  5247. END IF
  5248. //写入内容
  5249. it_mxbt++
  5250. inwaremx[it_mxbt].noauditqty = ld_noauditqty
  5251. inwaremx[it_mxbt].printid = s_mx.printid
  5252. inwaremx[it_mxbt].mtrlid = s_mx.mtrlid
  5253. inwaremx[it_mxbt].mtrlcode = s_mx.mtrlcode
  5254. inwaremx[it_mxbt].unit = s_mx.unit
  5255. inwaremx[it_mxbt].rate = s_mx.rate
  5256. inwaremx[it_mxbt].plancode = s_mx.plancode
  5257. inwaremx[it_mxbt].bootqty = ld_bootqty
  5258. inwaremx[it_mxbt].status = s_mx.status
  5259. inwaremx[it_mxbt].enprice = s_mx.enprice
  5260. inwaremx[it_mxbt].uprice = s_mx.enprice * mrate
  5261. inwaremx[it_mxbt].rebate = s_mx.rebate
  5262. inwaremx[it_mxbt].uqty = s_mx.uqty
  5263. inwaremx[it_mxbt].qty = s_mx.qty //Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec)
  5264. inwaremx[it_mxbt].deliqty = s_mx.deliqty
  5265. inwaremx[it_mxbt].tax = s_mx.tax
  5266. inwaremx[it_mxbt].deliprice_notax = s_mx.enprice / (1 + s_mx.tax)
  5267. IF s_mx.uqty <> 0 THEN
  5268. inwaremx[it_mxbt].enprice_tax = s_mx.deliqty * s_mx.enprice / s_mx.uqty
  5269. inwaremx[it_mxbt].enprice_notax = (s_mx.deliqty * s_mx.enprice / s_mx.uqty) / (1 + s_mx.tax)
  5270. ELSE
  5271. inwaremx[it_mxbt].enprice_tax = s_mx.enprice
  5272. inwaremx[it_mxbt].enprice_notax = s_mx.enprice / (1 + s_mx.tax)
  5273. END IF
  5274. inwaremx[it_mxbt].enprice_tax = Abs(inwaremx[it_mxbt].enprice_tax)
  5275. inwaremx[it_mxbt].enprice_notax = Abs(inwaremx[it_mxbt].enprice_notax)
  5276. IF Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec) <> 0 THEN
  5277. inwaremx[it_mxbt].fprice = Round((inwaremx[it_mxbt].enprice_tax * mrate * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec)),10)
  5278. ld_fprice_notax = Round((inwaremx[it_mxbt].enprice_notax * mrate * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,uo_option_unit_dec)),10)
  5279. ELSE
  5280. inwaremx[it_mxbt].fprice = 0
  5281. ld_fprice_notax = 0
  5282. END IF
  5283. inwaremx[it_mxbt].fprice = Abs(inwaremx[it_mxbt].fprice)
  5284. ld_fprice_notax = Abs(ld_fprice_notax)
  5285. inwaremx[it_mxbt].price = inwaremx[it_mxbt].fprice * s_mx.rebate
  5286. inwaremx[it_mxbt].planprice = ld_planprice
  5287. inwaremx[it_mxbt].mxdscrp = s_mx.mxdscrp
  5288. inwaremx[it_mxbt].dxflag = dxflag
  5289. inwaremx[it_mxbt].jgprice = s_mx.jgprice
  5290. inwaremx[it_mxbt].relid = s_mx.relid
  5291. inwaremx[it_mxbt].ifrel = s_mx.ifrel
  5292. inwaremx[it_mxbt].woodcode = s_mx.woodcode
  5293. inwaremx[it_mxbt].pcode = s_mx.pcode
  5294. inwaremx[it_mxbt].relcode = ls_relcode
  5295. inwaremx[it_mxbt].relprintid = s_mx.relprintid
  5296. inwaremx[it_mxbt].checkqty = s_mx.checkqty
  5297. inwaremx[it_mxbt].result = s_mx.result
  5298. inwaremx[it_mxbt].waredscrp = s_mx.waredscrp
  5299. inwaremx[it_mxbt].relbillid = s_mx.relbillid
  5300. inwaremx[it_mxbt].relbillprintid = s_mx.relbillprintid
  5301. inwaremx[it_mxbt].relbillcode = ls_relbillcode
  5302. inwaremx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode
  5303. inwaremx[it_mxbt].Location = s_mx.Location
  5304. inwaremx[it_mxbt].capacity = ld_capacity * s_mx.qty
  5305. inwaremx[it_mxbt].ifvqty = s_mx.ifvqty
  5306. inwaremx[it_mxbt].ifnotinout = s_mx.ifnotinout
  5307. IF dxflag = 0 THEN
  5308. inwaremx[it_mxbt].sptid = s_mx.sptid
  5309. ELSE
  5310. inwaremx[it_mxbt].sptid = sptid
  5311. END IF
  5312. IF billtype = 1 THEN
  5313. String ls_sptmtrlname
  5314. uo_spt_price uo_price
  5315. uo_price = Create uo_spt_price
  5316. IF uo_price.uof_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN
  5317. rslt = 0
  5318. GOTO ext
  5319. END IF
  5320. Destroy uo_price
  5321. inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname
  5322. END IF
  5323. IF thflag = 1 THEN
  5324. Long ll_sptid,ll_billtype,ll_balctype
  5325. Int li_thtype
  5326. //查询相关订单属于材料订单还是成品订单
  5327. // IF billtype = 1 AND s_mx.relid > 0 THEN
  5328. // SELECT billtype INTO :ll_billtype
  5329. // FROM u_buytask
  5330. // WHERE taskid = :s_mx.relid
  5331. // AND scid = :scid;
  5332. // IF commit_transaction.SQLCode <> 0 THEN
  5333. // rslt = 0
  5334. // arg_msg = '查询订单类型失败'+'~n'+commit_transaction.SQLErrText
  5335. // GOTO ext
  5336. // END IF
  5337. // ELSE
  5338. // ll_billtype = 0
  5339. // END IF
  5340. //
  5341. // IF billtype = 5 THEN
  5342. // ll_sptid = s_mx.sptid
  5343. // ELSEIF billtype = 1 AND ll_billtype = 1 THEN
  5344. // SELECT balctype INTO :ll_balctype
  5345. // FROM u_storage
  5346. // Where storageid = :storageid;
  5347. // IF commit_transaction.SQLCode <> 0 THEN
  5348. // rslt = 0
  5349. // arg_msg = '查询仓库是否使用客户库存失败'+'~n'+commit_transaction.SQLErrText
  5350. // GOTO ext
  5351. // END IF
  5352. //
  5353. // IF ll_balctype = 1 THEN
  5354. ll_sptid = s_mx.sptid
  5355. // ELSE
  5356. // ll_sptid = 0
  5357. // END IF
  5358. // ELSE
  5359. // ll_sptid = 0
  5360. // END IF
  5361. SELECT thtype INTO :li_thtype
  5362. FROM u_storage
  5363. Where storageid = :storageid Using commit_transaction;
  5364. IF commit_transaction.SQLCode <> 0 THEN
  5365. arg_msg = '行:'+String(s_mx.printid)+',查询仓库退货取价模式失败,'+commit_transaction.SQLErrText
  5366. rslt = 0
  5367. GOTO ext
  5368. END IF
  5369. IF li_thtype = 0 THEN
  5370. SELECT cost
  5371. INTO :ld_cost
  5372. FROM u_mtrlware
  5373. WHERE scid = :scid
  5374. AND mtrlid = :s_mx.mtrlid
  5375. AND storageid = :storageid
  5376. AND status = :s_mx.status
  5377. AND plancode = :s_mx.plancode
  5378. AND woodcode = :s_mx.woodcode
  5379. AND pcode = :s_mx.pcode
  5380. AND dxflag = :dxflag
  5381. AND sptid = :ll_sptid
  5382. AND mtrlcuscode = :s_mx.mtrlcuscode
  5383. And Location = :s_mx.Location Using commit_transaction;
  5384. IF commit_transaction.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0
  5385. inwaremx[it_mxbt].cost = ld_cost
  5386. ELSE
  5387. IF uo_option_cost_notax = 0 THEN
  5388. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate
  5389. ELSE
  5390. inwaremx[it_mxbt].cost = ld_fprice_notax * s_mx.rebate
  5391. END IF
  5392. END IF
  5393. ELSE
  5394. IF uo_option_cost_notax = 0 THEN
  5395. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate
  5396. ELSE
  5397. inwaremx[it_mxbt].cost = ld_fprice_notax * s_mx.rebate
  5398. END IF
  5399. END IF
  5400. inwaremx[it_mxbt].newprice = lde_newprice
  5401. inwaremx[it_mxbt].Thptype = s_mx.Thptype
  5402. inwaremx[it_mxbt].jgdscrp = s_mx.jgdscrp
  5403. ext:
  5404. Destroy uo_sptprice
  5405. IF rslt = 0 THEN p_clearmx()
  5406. Return(rslt)
  5407. end function
  5408. public function integer uof_check_scll_rate (long arg_scid, long arg_inwareid, long arg_printid, long arg_relid, long arg_mtrlid, decimal arg_qty, integer arg_ck_if_save_audit, ref string arg_msg);Int rslt = 1
  5409. Long cnt
  5410. Long ll_relid,ll_mtrlid
  5411. Decimal ld_qty,ld_minrate,ld_orderqty,ld_acmpqty,ld_uprate,ld_upqty
  5412. Decimal ld_truerqqty,ld_dstrqty,ld_scllplanqty,ld_backqty,ld_backbuqty
  5413. String ls_msg
  5414. Int li_ck_result
  5415. If uo_option_ifovertask_cp = -1000 Then
  5416. rslt = 0
  5417. arg_msg = '选项:[112]超生产指令单数量进仓,读取初始默认值失败,操作取消!'
  5418. Goto ext
  5419. End If
  5420. If arg_ck_if_save_audit = 0 Then
  5421. ll_relid = arg_relid
  5422. ll_mtrlid = arg_mtrlid
  5423. ld_qty = arg_qty
  5424. Else
  5425. If arg_inwareid > 0 Then
  5426. Select relid,qty,mtrlid
  5427. Into :ll_relid,:ld_qty,:ll_mtrlid
  5428. From u_inwaremx
  5429. Where scid = :arg_scid
  5430. And inwareid = :arg_inwareid
  5431. And printid = :arg_printid Using commit_transaction;
  5432. If commit_transaction.SQLCode <> 0 Then
  5433. arg_msg = '查询进仓单明细失败,'+commit_transaction.SQLErrText
  5434. rslt = 0
  5435. Goto ext
  5436. End If
  5437. End If
  5438. End If
  5439. //yyx2014-9-26 采购补件指令单进仓不检查领料
  5440. Int li_ifbj_wkp,li_mtrlorigin
  5441. SELECT mtrlorigin
  5442. INTO :li_mtrlorigin
  5443. FROM u_mtrldef
  5444. Where mtrlid = :ll_mtrlid Using commit_transaction;
  5445. IF commit_transaction.SQLCode <> 0 THEN
  5446. arg_msg = '查询明细物料物料来源失败,'+commit_transaction.SQLErrText
  5447. rslt = 0
  5448. GOTO ext
  5449. END IF
  5450. SELECT u_sc_wkp.ifbj
  5451. INTO :li_ifbj_wkp
  5452. FROM u_order_ml,u_sc_wkp
  5453. WHERE u_order_ml.wrkgrpid = u_sc_wkp.wrkgrpid
  5454. AND u_order_ml.scid = :arg_scid
  5455. And u_order_ml.orderid = :ll_relid Using commit_transaction;
  5456. IF commit_transaction.SQLCode <> 0 THEN
  5457. arg_msg = '查询明细指令单生产车间是否补件车间失败,'+commit_transaction.SQLErrText
  5458. rslt = 0
  5459. GOTO ext
  5460. END IF
  5461. IF li_ifbj_wkp = 1 And li_mtrlorigin = 2 THEN
  5462. rslt = 1
  5463. GOTO ext
  5464. END IF
  5465. //end_yyx2014-9-26 采购补件指令单进仓不检查领料
  5466. Select count(*) Into :cnt
  5467. From u_OrderRqMtrl_scll Inner JOIN
  5468. u_mtrldef ON u_OrderRqMtrl_scll.MtrlID = u_mtrldef.mtrlid
  5469. Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5470. And (u_OrderRqMtrl_scll.trueRqqty > 0)
  5471. And (u_OrderRqMtrl_scll.OrderID = :ll_relid)
  5472. And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction;
  5473. If commit_transaction.SQLCode <> 0 Then
  5474. arg_msg = '查询相关指令单领料明细失败,'+commit_transaction.SQLErrText
  5475. rslt = 0
  5476. Goto ext
  5477. End If
  5478. If cnt > 0 Then
  5479. Select Min(Case when u_OrderRqMtrl_scll.trueRqqty = 0 Then 1 Else Round((u_OrderRqMtrl_scll.DstrQty + IsNull(uv_outware_scll_backbu_noaudit.backqty,0) + IsNull(uv_outware_scll_bu.qty,0)) / u_OrderRqMtrl_scll.trueRqqty,10) End),
  5480. IsNull(sum(u_OrderRqMtrl_scll.trueRqqty),0),
  5481. IsNull(sum(u_OrderRqMtrl_scll.DstrQty),0)
  5482. Into :ld_minrate,:ld_truerqqty,:ld_dstrqty
  5483. From u_OrderRqMtrl_scll Inner JOIN
  5484. u_mtrldef On u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid Left Outer JOIN
  5485. uv_outware_scll_backbu_noaudit On
  5486. u_OrderRqMtrl_scll.scid = uv_outware_scll_backbu_noaudit.scid And
  5487. u_OrderRqMtrl_scll.OrderID = uv_outware_scll_backbu_noaudit.relid And
  5488. u_OrderRqMtrl_scll.mtrlid = uv_outware_scll_backbu_noaudit.mtrlid And
  5489. u_OrderRqMtrl_scll.status = uv_outware_scll_backbu_noaudit.status And
  5490. u_OrderRqMtrl_scll.woodcode = uv_outware_scll_backbu_noaudit.woodcode And
  5491. u_OrderRqMtrl_scll.pcode = uv_outware_scll_backbu_noaudit.pcode Left Outer JOIN
  5492. uv_outware_scll_bu On u_OrderRqMtrl_scll.mtrlid = uv_outware_scll_bu.mtrlid And
  5493. u_OrderRqMtrl_scll.status = uv_outware_scll_bu.status And
  5494. u_OrderRqMtrl_scll.woodcode = uv_outware_scll_bu.woodcode And
  5495. u_OrderRqMtrl_scll.pcode = uv_outware_scll_bu.pcode And
  5496. u_OrderRqMtrl_scll.scid = uv_outware_scll_bu.scid And
  5497. u_OrderRqMtrl_scll.OrderID = uv_outware_scll_bu.relid
  5498. Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5499. And (u_OrderRqMtrl_scll.trueRqqty + IsNull(uv_outware_scll_bu.qty,0) > 0)
  5500. And (u_OrderRqMtrl_scll.OrderID = :ll_relid)
  5501. And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction;
  5502. If commit_transaction.SQLCode <> 0 Then
  5503. ld_minrate = 1
  5504. End If
  5505. If IsNull(ld_minrate) Then ld_minrate = 1
  5506. Select orderqty - stopqty,acmpqty
  5507. Into :ld_orderqty,:ld_acmpqty
  5508. From u_order_ml
  5509. Where scid = :arg_scid
  5510. And OrderID = :ll_relid Using commit_transaction;
  5511. If commit_transaction.SQLCode <> 0 Then
  5512. rslt = 0
  5513. arg_msg = '查询相关指令单数量失败,'+commit_transaction.SQLErrText
  5514. Goto ext
  5515. End If
  5516. If uo_option_ifovertask_cp = 1 Then
  5517. If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) Then
  5518. rslt = 0
  5519. arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能进仓:'+String(ld_qty,'#,##0.##########')
  5520. Goto ext
  5521. End If
  5522. ElseIf uo_option_ifovertask_cp = 4 Then
  5523. Select IsNull(sum(Case u_mtrldef.scllplan_mode when 0 Then u_OrderRqMtrl_scll.flqty + IsNull(uv_outware_scllplan_noaudit.qty,0) Else IsNull(uv_outware_scllplan_all.p_rqqty,0) End),0)
  5524. Into :ld_scllplanqty
  5525. From u_OrderRqMtrl_scll Inner JOIN
  5526. u_mtrldef On u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid Left Outer JOIN
  5527. uv_outware_scllplan_noaudit On
  5528. u_OrderRqMtrl_scll.scid = uv_outware_scllplan_noaudit.scid And
  5529. u_OrderRqMtrl_scll.OrderID = uv_outware_scllplan_noaudit.OrderID And
  5530. u_OrderRqMtrl_scll.mtrlid = uv_outware_scllplan_noaudit.mtrlid And
  5531. u_OrderRqMtrl_scll.wrkGrpid = uv_outware_scllplan_noaudit.wrkGrpid And
  5532. u_OrderRqMtrl_scll.status = uv_outware_scllplan_noaudit.status And
  5533. u_OrderRqMtrl_scll.woodcode = uv_outware_scllplan_noaudit.woodcode And
  5534. u_OrderRqMtrl_scll.pcode = uv_outware_scllplan_noaudit.pcode Left Outer JOIN
  5535. uv_outware_scllplan_all On
  5536. u_OrderRqMtrl_scll.scid = uv_outware_scllplan_all.scid And
  5537. u_OrderRqMtrl_scll.OrderID = uv_outware_scllplan_all.OrderID And
  5538. u_OrderRqMtrl_scll.mtrlid = uv_outware_scllplan_all.mtrlid And
  5539. u_OrderRqMtrl_scll.status = uv_outware_scllplan_all.status And
  5540. u_OrderRqMtrl_scll.woodcode = uv_outware_scllplan_all.woodcode And
  5541. u_OrderRqMtrl_scll.pcode = uv_outware_scllplan_all.pcode And
  5542. u_OrderRqMtrl_scll.wrkGrpid = uv_outware_scllplan_all.wrkGrpid
  5543. Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5544. And (u_OrderRqMtrl_scll.OrderID = :ll_relid)
  5545. And (u_OrderRqMtrl_scll.scid = :arg_scid) Using commit_transaction;
  5546. If commit_transaction.SQLCode <> 0 Then
  5547. ld_scllplanqty = 0
  5548. End If
  5549. // SELECT IsNull(sum(CASE u_mtrldef.scllplan_mode when 0 THEN IsNull(uv_outware_scllplan_all.conqty,0) ELSE IsNull(uv_outware_scllplan_all.p_rqqty,0) END),0)
  5550. //Into :ld_scllplanqty
  5551. //From uv_outware_scllplan_all Inner JOIN
  5552. //u_mtrldef On uv_outware_scllplan_all.mtrlid = u_mtrldef.mtrlid
  5553. //Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5554. //And (uv_outware_scllplan_all.OrderID = :ll_relid)
  5555. //And (uv_outware_scllplan_all.scid = :arg_scid) Using commit_transaction;
  5556. //IF commit_transaction.SQLCode <> 0 THEN
  5557. // ld_scllplanqty = 0
  5558. //END IF
  5559. Select IsNull(sum(uv_outware_scll_back.qty),0)
  5560. Into :ld_backqty
  5561. From uv_outware_scll_back Inner JOIN
  5562. u_mtrldef On uv_outware_scll_back.mtrlid = u_mtrldef.mtrlid
  5563. Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5564. And (uv_outware_scll_back.qty <> 0)
  5565. And (uv_outware_scll_back.relid = :ll_relid)
  5566. And (uv_outware_scll_back.scid = :arg_scid) Using commit_transaction;
  5567. If commit_transaction.SQLCode <> 0 Then
  5568. arg_msg = '查询指令单退料数量失败,'+commit_transaction.SQLErrText
  5569. rslt = 0
  5570. Goto ext
  5571. End If
  5572. Select IsNull(sum(uv_outware_scll_backbu.qty),0)
  5573. Into :ld_backbuqty
  5574. From uv_outware_scll_backbu Inner JOIN
  5575. u_mtrldef On uv_outware_scll_backbu.mtrlid = u_mtrldef.mtrlid
  5576. Where (u_mtrldef.mtrlkind = 0 Or u_mtrldef.mtrlkind = 3)
  5577. And (uv_outware_scll_backbu.qty <> 0)
  5578. And (uv_outware_scll_backbu.relid = :ll_relid)
  5579. And (uv_outware_scll_backbu.scid = :arg_scid) Using commit_transaction;
  5580. If commit_transaction.SQLCode <> 0 Then
  5581. arg_msg = '查询指令单补料数量失败,'+commit_transaction.SQLErrText
  5582. rslt = 0
  5583. Goto ext
  5584. End If
  5585. //yyx2013-3-18
  5586. If ld_scllplanqty > 0 And ld_minrate <> 1 Then
  5587. ld_minrate = Round((ld_scllplanqty + ld_backqty + ld_backbuqty)/ld_truerqqty,10)
  5588. End If
  5589. //
  5590. If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) Then
  5591. If ld_truerqqty - ld_dstrqty > 0 And ld_truerqqty > ld_scllplanqty Then
  5592. ls_msg = ',有材料未开完发料通知单'
  5593. li_ck_result = 0
  5594. ElseIf ld_truerqqty - ld_dstrqty > 0 And ld_truerqqty = ld_scllplanqty Then
  5595. If Abs(ld_backqty) > ld_backbuqty Then
  5596. ls_msg = ',有材料未补完料'
  5597. li_ck_result = 0
  5598. End If
  5599. ElseIf ld_truerqqty - ld_dstrqty > 0 And ld_dstrqty < ld_scllplanqty Then
  5600. If ld_backqty = 0 Then
  5601. ls_msg = ',有材料有发料单未审核'
  5602. Else
  5603. ls_msg = ',有材料有补料单未审核'
  5604. End If
  5605. li_ck_result = 1
  5606. End If
  5607. If arg_ck_if_save_audit = 0 Then
  5608. If li_ck_result = 0 Then
  5609. rslt = 0
  5610. arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能保存进仓:'+String(ld_qty,'#,##0.##########') + ',原因:'+ls_msg
  5611. Goto ext
  5612. End If
  5613. Else
  5614. rslt = 0
  5615. arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能审核进仓:'+String(ld_qty,'#,##0.##########') + ',原因:'+ls_msg
  5616. Goto ext
  5617. End If
  5618. End If
  5619. ElseIf uo_option_ifovertask_cp = 3 Then
  5620. Select uprate , upqty
  5621. Into :ld_uprate,:ld_upqty
  5622. From u_mtrldef
  5623. Where mtrlid = :ll_mtrlid;
  5624. If sqlca.SQLCode <> 0 Then
  5625. arg_msg = '查询物料超收货比例失败,'+sqlca.SQLErrText
  5626. rslt = 0
  5627. Goto ext
  5628. End If
  5629. If ld_acmpqty + ld_qty > Ceiling(ld_orderqty * ld_minrate) * (1 + ld_uprate) + ld_upqty Then
  5630. rslt = 0
  5631. arg_msg = '相关指令单最大领料配套数量为:'+String(Ceiling(ld_orderqty * ld_minrate),'#,##0.##########')+',允许超收上限:'+String(Ceiling(ld_orderqty * ld_minrate) * (1 + ld_uprate) + ld_upqty,'#,##0.##########')+',已进仓数:'+String(ld_acmpqty,'#,##0.##########')+',不能进仓:'+String(ld_qty,'#,##0.##########')
  5632. Goto ext
  5633. End If
  5634. End If
  5635. End If
  5636. ext:
  5637. Return rslt
  5638. end function
  5639. public function integer uof_p_barcode (integer arg_audittype, ref string arg_msg, s_inwaremx_barcode_fp arg_mxbarcode_fp);Int rslt = 1
  5640. Int li_storagetype_storage
  5641. Long i,j,ll_find
  5642. Long ll_scid,ll_mtrlwareid
  5643. String ls_location_top1
  5644. String ls_relbillcode
  5645. Long ll_relbillid,ll_relprintid,ll_Porderid
  5646. Int li_ordertype_order
  5647. Decimal ld_qty
  5648. uo_getbar uo_gb
  5649. uo_gb = Create uo_getbar
  5650. IF billtype <> 1 And billtype <> 3 And billtype <> 8 And billtype <> 9 And billtype <> 12 THEN
  5651. rslt = 1
  5652. GOTO ext
  5653. END IF
  5654. IF billtype = 8 And (sptname = '更新成本价(正单)' Or sptname = '调整成本价(负单)') THEN
  5655. rslt = 1
  5656. GOTO ext
  5657. END IF
  5658. IF it_mxbt_barcode = 0 THEN
  5659. arg_msg = '没有条码明细,请检查'
  5660. rslt = 0
  5661. GOTO ext
  5662. END IF
  5663. IF f_rst_storage_storagetype(storageid,li_storagetype_storage) = 0 THEN
  5664. arg_msg = '查询仓库库存策略失败,请检查'
  5665. rslt = 0
  5666. GOTO ext
  5667. END IF
  5668. FOR i = 1 To it_mxbt_barcode
  5669. IF thflag = 0 THEN
  5670. IF arg_audittype = 1 THEN
  5671. IF uo_option_barcodelocation_use_inwaremx_location = 0 THEN
  5672. ls_location_top1 = ''
  5673. ELSE
  5674. SELECT top 1 u_inwaremx.location
  5675. INTO :ls_location_top1
  5676. FROM u_inwaremx
  5677. WHERE u_inwaremx.scid = :scid
  5678. AND u_inwaremx.inwareid = :inwareid
  5679. Using commit_transaction;
  5680. IF commit_transaction.SQLCode <> 0 THEN
  5681. arg_msg = '查询进仓单明细仓位信息失败,'+commit_transaction.SQLErrText
  5682. rslt = 0
  5683. GOTO ext
  5684. END IF
  5685. END IF
  5686. SELECT u_mtrlware.scid,u_mtrlware.mtrlwareid
  5687. INTO :ll_scid,:ll_mtrlwareid
  5688. FROM u_mtrlware,u_mtrlware_mx,u_mtrldef
  5689. WHERE u_mtrlware.storageid = :storageid
  5690. AND u_mtrlware_mx.barcode = :s_mx_barcode[i].barcode
  5691. AND u_mtrlware.mtrlid = u_mtrlware_mx.mtrlid
  5692. AND u_mtrlware.mtrlid = u_mtrldef.mtrlid
  5693. AND ( u_mtrlware.sptid = u_mtrlware_mx.sptid AND :li_storagetype_storage = 0 OR
  5694. u_mtrlware.sptid = 0 AND :li_storagetype_storage = 1 )
  5695. AND u_mtrlware.status = u_mtrlware_mx.status
  5696. AND u_mtrlware.woodcode = u_mtrlware_mx.woodcode
  5697. AND u_mtrlware.pcode = u_mtrlware_mx.pcode
  5698. AND u_mtrlware.plancode = u_mtrlware_mx.plancode
  5699. AND ( u_mtrlware.mtrlcuscode = u_mtrlware_mx.mtrlcuscode AND :li_storagetype_storage = 0 OR
  5700. :li_storagetype_storage = 1 AND u_mtrlware.mtrlcuscode = u_mtrlware_mx.mtrlcuscode AND (u_mtrldef.ifpackpro = 4 OR u_mtrldef.ifpack = 2) OR
  5701. :li_storagetype_storage = 1 AND u_mtrlware.mtrlcuscode = '' AND u_mtrldef.ifpackpro <> 4 AND u_mtrldef.ifpack <> 2 )
  5702. AND (u_mtrlware.Location = u_mtrlware_mx.Location AND :uo_option_barcodelocation_use_inwaremx_location = 0 OR
  5703. u_mtrlware.Location = :ls_location_top1 And :uo_option_barcodelocation_use_inwaremx_location = 1 ) Using commit_transaction;
  5704. IF commit_transaction.SQLCode <> 0 THEN
  5705. arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询库存资料失败,请检查对应条码单与库存资料,'+commit_transaction.SQLErrText
  5706. rslt = 0
  5707. GOTO ext
  5708. END IF
  5709. IF s_mx_barcode[i].u_mtrldef_ifbarcodefp = 0 THEN
  5710. ls_relbillcode = ''
  5711. ll_relbillid = 0
  5712. ll_relprintid = 0
  5713. ELSE
  5714. IF billtype = 3 THEN
  5715. IF s_mx_barcode[i].ifrel <> 1 THEN
  5716. ls_relbillcode = ''
  5717. ll_relbillid = 0
  5718. ll_relprintid = 0
  5719. ELSE
  5720. SELECT u_order_ml.ordertype,
  5721. u_order_ml.porderid,
  5722. u_order_ml.saletaskcode,
  5723. u_order_ml.taskid,
  5724. u_order_ml.taskmxid
  5725. INTO :li_ordertype_order,
  5726. :ll_porderid,
  5727. :ls_relbillcode,
  5728. :ll_relbillid,
  5729. :ll_relprintid
  5730. FROM u_order_ml
  5731. WHERE u_order_ml.scid = :s_mx_barcode[i].scid
  5732. AND u_order_ml.orderid = :s_mx_barcode[i].orderid
  5733. Using commit_transaction;
  5734. IF commit_transaction.SQLCode <> 0 THEN
  5735. arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询对应车间指令单信息失败,'+commit_transaction.SQLErrText
  5736. rslt = 0
  5737. GOTO ext
  5738. END IF
  5739. IF li_ordertype_order = 4 THEN
  5740. SELECT u_order_ml.saletaskcode,
  5741. u_order_ml.taskid,
  5742. u_order_ml.taskmxid
  5743. INTO :ls_relbillcode,
  5744. :ll_relbillid,
  5745. :ll_relprintid
  5746. FROM u_order_ml
  5747. WHERE u_order_ml.scid = :s_mx_barcode[i].scid
  5748. AND u_order_ml.orderid = :ll_porderid
  5749. Using commit_transaction;
  5750. IF commit_transaction.SQLCode <> 0 THEN
  5751. arg_msg = '条码:'+s_mx_barcode[i].barcode+',查询对应车间指令单相关主生产计划信息失败,'+commit_transaction.SQLErrText
  5752. rslt = 0
  5753. GOTO ext
  5754. END IF
  5755. END IF
  5756. //yyx2013-5-24
  5757. ld_qty = s_mx_barcode[i].packqty * s_mx_barcode[i].qty
  5758. IF ll_relbillid > 0 THEN
  5759. ll_find = 0
  5760. FOR j = 1 To UpperBound(arg_mxbarcode_fp.mtrlwareid)
  5761. IF arg_mxbarcode_fp.mtrlwareid[j] = ll_mtrlwareid And &
  5762. arg_mxbarcode_fp.relbillid[j] = ll_relbillid And &
  5763. arg_mxbarcode_fp.relprintid[j] = ll_relprintid THEN
  5764. ll_find = j
  5765. EXIT
  5766. END IF
  5767. NEXT
  5768. IF ll_find = 0 THEN
  5769. ls_relbillcode = ''
  5770. ll_relbillid = 0
  5771. ll_relprintid = 0
  5772. ELSE
  5773. IF arg_mxbarcode_fp.assignqty[ll_find] <= arg_mxbarcode_fp.fpqty[ll_find] THEN
  5774. ls_relbillcode = ''
  5775. ll_relbillid = 0
  5776. ll_relprintid = 0
  5777. ELSE
  5778. arg_mxbarcode_fp.fpqty[ll_find] += ld_qty
  5779. END IF
  5780. END IF
  5781. END IF
  5782. //yyx2013-5-24_end
  5783. END IF
  5784. ELSE
  5785. ls_relbillcode = ''
  5786. ll_relbillid = 0
  5787. ll_relprintid = 0
  5788. END IF
  5789. END IF
  5790. ELSE
  5791. ll_scid = 0
  5792. ll_mtrlwareid = 0
  5793. ls_relbillcode = ''
  5794. ll_relbillid = 0
  5795. ll_relprintid = 0
  5796. END IF
  5797. ELSE
  5798. ll_scid = 0
  5799. ll_mtrlwareid = 0
  5800. END IF
  5801. IF uo_gb.uof_barcode_in(s_mx_barcode[i].barcode,&
  5802. ll_scid,ll_mtrlwareid,ls_relbillcode,ll_relbillid,ll_relprintid,&
  5803. arg_audittype,thflag,False,arg_msg) = 0 THEN
  5804. rslt = 0
  5805. GOTO ext
  5806. END IF
  5807. NEXT
  5808. ext:
  5809. IF rslt = 0 THEN
  5810. ROLLBACK Using commit_transaction;
  5811. END IF
  5812. Destroy uo_getbar
  5813. RETURN rslt
  5814. end function
  5815. public function integer p_update_mtrlware (long arg_mtrlid, string arg_mtrlcode, long arg_storageid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_uqty, decimal arg_price, decimal arg_planprice, long arg_sptid, integer arg_dxflag, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, string arg_location, string arg_dscrp, integer arg_ifvqty, ref string arg_msg);Int rslt = 1
  5816. Long ls_newid
  5817. String or_err_part
  5818. Decimal ld_cost
  5819. Int li_storMtrlprp,li_ifcost
  5820. Int if_recmp_balc
  5821. Decimal ld_noallocqty,ld_allocqty
  5822. Decimal ld_wareamt_check,ld_noallocqty_check
  5823. If sys_if_recmp_balc < 0 Then
  5824. Select if_recmp_balc
  5825. Into :if_recmp_balc
  5826. From sys_msg Using commit_transaction ;
  5827. If commit_transaction.SQLCode <> 0 Then
  5828. arg_msg = '查询是否执行结存表重算失败,'+commit_transaction.SQLErrText
  5829. rslt = 0
  5830. Goto ext
  5831. End If
  5832. If if_recmp_balc = 0 Then
  5833. rslt = 0
  5834. arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据'
  5835. Goto ext
  5836. End If
  5837. Else
  5838. If sys_if_recmp_balc = 0 Then
  5839. rslt = 0
  5840. arg_msg = '由于系统升级,结存表结构与原来不同,请先通知管理员执行危险功能中的[按新结构重算现结存表]功能,才能审核和撤审进出仓单据'
  5841. Goto ext
  5842. End If
  5843. End If
  5844. If uo_option_change_status = '-1000' Then
  5845. rslt = 0
  5846. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  5847. Goto ext
  5848. End If
  5849. If uo_option_change_woodcode = '-1000' Then
  5850. rslt = 0
  5851. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  5852. Goto ext
  5853. End If
  5854. If uo_option_change_pcode = '-1000' Then
  5855. rslt = 0
  5856. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  5857. Goto ext
  5858. End If
  5859. If uo_option_cost_dec = -1000 Then
  5860. rslt = 0
  5861. arg_msg = '选项:[022]库存成本价转换小数点,读取初始默认值失败,操作取消!'
  5862. Goto ext
  5863. End If
  5864. If uo_option_mtrlware_autocmp = -1000 Then
  5865. rslt = 0
  5866. arg_msg = '选项:[158]自动计算库存包件可装数,读取初始默认值失败,操作取消!'
  5867. Goto ext
  5868. End If
  5869. If uo_option_djqty_check = -1000 Then
  5870. rslt = 0
  5871. arg_msg = '选项:[378]进出仓检查冻结数不能大于库存数,读取初始默认值失败,操作取消!'
  5872. Goto ext
  5873. End If
  5874. uo_cmpl_packpro uo_cmpl_p
  5875. uo_cmpl_p = Create uo_cmpl_packpro
  5876. uo_cmpl_p.commit_transaction = commit_transaction
  5877. Decimal ld_pypkqty,ld_pypkamt
  5878. Decimal ld_buyinqty,ld_buyinamt
  5879. Decimal ld_buyinqty_pack,ld_buyinamt_pack
  5880. Decimal ld_saleinqty_packpro,ld_saleinamt_packpro
  5881. Decimal ld_cpinqty,ld_cpinamt
  5882. Decimal ld_jginqty,ld_jginamt
  5883. Decimal ld_diinqty,ld_diinamt
  5884. Decimal ld_mvinqty,ld_mvinamt
  5885. Decimal ld_otinqty,ld_otinamt
  5886. Decimal ld_pyinqty,ld_pyinamt
  5887. Int li_ifunit,li_ifpack,li_ifpackpro
  5888. String ls_str
  5889. Int li_statusflag
  5890. Decimal ld_capacity,ld_capacity_zj
  5891. s_mtrlcfg_expr s_pz[]
  5892. String ls_status_zj
  5893. Long ll_i
  5894. Long ll_mtrlwareid,ll_mtrlwareid_find
  5895. Int li_incheck,li_storagetype,li_ifmrp
  5896. String ls_storagename
  5897. Decimal i_auditingqty
  5898. Select Mtrlprp,ifcost,incheck,storagetype,storagename,ifmrp
  5899. Into :li_storMtrlprp,:li_ifcost,:li_incheck,:li_storagetype,:ls_storagename,:li_ifmrp
  5900. From u_storage
  5901. Where storageid = :arg_storageid Using commit_transaction ;
  5902. If commit_transaction.SQLCode <> 0 Then
  5903. arg_msg = '查询仓库类型失败'
  5904. rslt = 0
  5905. Goto ext
  5906. End If
  5907. Select ifunit,ifpack,capacity,statusflag,ifpackpro
  5908. Into :li_ifunit,:li_ifpack,:ld_capacity,:li_statusflag,:li_ifpackpro
  5909. From u_mtrldef
  5910. Where mtrlid = :arg_mtrlid Using commit_transaction ;
  5911. If commit_transaction.SQLCode <> 0 Then
  5912. arg_msg = '查询物料信息失败'
  5913. rslt = 0
  5914. Goto ext
  5915. End If
  5916. If li_statusflag = 2 Then
  5917. ld_capacity = 0
  5918. f_checkpz(arg_status,s_pz[])
  5919. For ll_i = 1 To UpperBound(s_pz)
  5920. ls_status_zj = s_pz[ll_i].cfgname
  5921. Select capacity
  5922. Into :ld_capacity_zj
  5923. From u_mtrl_configure
  5924. Where mtrlid = :arg_mtrlid
  5925. And Name = :ls_status_zj;
  5926. If commit_transaction.SQLCode <> 0 Then
  5927. ld_capacity_zj = 0
  5928. End If
  5929. ld_capacity = ld_capacity + ld_capacity_zj * Dec(s_pz[ll_i].qty)
  5930. Next
  5931. End If
  5932. Int li_ifupdate_date
  5933. If billtype = 1 And thflag = 0 Or &
  5934. billtype = 2 Or &
  5935. billtype = 3 Or &
  5936. billtype = 4 And thflag = 0 Or &
  5937. billtype = 5 Or &
  5938. billtype = 6 Or &
  5939. billtype = 12 Or &
  5940. billtype = 8 And sptname <> '调整成本价(负单)' And sptname <> '更新成本价(正单)' Or &
  5941. billtype = 25 Or &
  5942. billtype = 26 Or &
  5943. billtype = 28 Then
  5944. li_ifupdate_date = 1
  5945. Else
  5946. li_ifupdate_date = 0
  5947. End If
  5948. If li_ifunit = 0 Then arg_uqty = 0
  5949. //检查库存
  5950. If (li_storagetype = 1 Or arg_qty < 0 And li_incheck = 1) And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) Then
  5951. Select noallocqty - noauditingqty,noallocqty,allocqty
  5952. Into :i_auditingqty,:ld_noallocqty,:ld_allocqty
  5953. From u_mtrlware
  5954. Where ( mtrlid = :arg_mtrlid ) And
  5955. ( plancode = :arg_plancode ) And
  5956. ( storageid = :arg_storageid ) And
  5957. ( scid = :scid ) And
  5958. ( status = :arg_status ) And
  5959. ( sptid = :arg_sptid) And
  5960. ( dxflag = :arg_dxflag) And
  5961. ( woodcode = :arg_woodcode) And
  5962. ( pcode = :arg_pcode) And
  5963. ( mtrlcuscode = :arg_mtrlcuscode) And
  5964. ( Location = :arg_location) Using commit_transaction ;
  5965. If commit_transaction.SQLCode <> 0 Then
  5966. If commit_transaction.SQLCode = 100 Then
  5967. i_auditingqty = 0
  5968. Else
  5969. rslt = 0
  5970. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致查询物料["+arg_mtrlcode+"]库存未开单数操作失败"+"~n"+commit_transaction.SQLErrText
  5971. Goto ext
  5972. End If
  5973. End If
  5974. If IsNull(i_auditingqty) Then i_auditingqty = 0
  5975. If IsNull(ld_noallocqty) Then ld_noallocqty = 0
  5976. If IsNull(ld_allocqty) Then ld_allocqty = 0
  5977. If arg_qty < 0 And li_incheck = 1 And Not (billtype = 8 And Pos(sptname,'调整成本价') > 0 ) Then
  5978. If arg_qty + i_auditingqty < 0 Then
  5979. rslt = 0
  5980. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]未开单库存数只有"+String(i_auditingqty,'#####,0.00#######')+',不能扣减数量:'+String(0 - arg_qty,'#####,0.00#######')
  5981. Goto ext
  5982. End If
  5983. End If
  5984. If li_storagetype = 1 And billtype <> 23 Then
  5985. If ld_noallocqty + arg_qty < ld_allocqty Then
  5986. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+']库存数小于已分配数,请检查库存'
  5987. rslt = 0
  5988. Goto ext
  5989. End If
  5990. End If
  5991. End If
  5992. //-------------------------------------------更新库存
  5993. If li_ifcost = 1 Then //核算金额
  5994. Select Case noallocqty + :arg_qty when 0 Then 0 Else wareamt + Round(:arg_qty * :arg_price,2) End,
  5995. noallocqty + :arg_qty
  5996. Into :ld_wareamt_check,
  5997. :ld_noallocqty_check
  5998. From u_mtrlware
  5999. Where ( mtrlid = :arg_mtrlid ) And
  6000. ( plancode = :arg_plancode ) And
  6001. ( storageid = :arg_storageid ) And
  6002. ( scid = :scid ) And
  6003. ( status = :arg_status ) And
  6004. ( sptid = :arg_sptid) And
  6005. ( dxflag = :arg_dxflag) And
  6006. ( woodcode = :arg_woodcode) And
  6007. ( pcode = :arg_pcode) And
  6008. ( mtrlcuscode = :arg_mtrlcuscode) And
  6009. ( Location = :arg_location) Using commit_transaction ;
  6010. If commit_transaction.SQLCode = -1 Then
  6011. rslt = 0
  6012. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存信息(检查数量金额合理性)操作失败"+"~n"+commit_transaction.SQLErrText
  6013. Goto ext
  6014. ElseIf commit_transaction.SQLCode = 0 Then
  6015. If ld_wareamt_check <> 0 And ld_noallocqty_check = 0 Then
  6016. rslt = 0
  6017. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]库存数量为0但金额不为0,操作取消"
  6018. Goto ext
  6019. End If
  6020. End If
  6021. Update u_mtrlware
  6022. Set noallocqty = noallocqty + :arg_qty ,
  6023. unoallocqty = unoallocqty + :arg_uqty,
  6024. wareamt = case noallocqty + :arg_qty when 0 then 0 else wareamt + round(:arg_qty * :arg_price,2) End,
  6025. waredate = case :li_ifupdate_date when 1 then getdate() else waredate End,
  6026. newprice = :arg_price,
  6027. dscrp = :arg_dscrp,
  6028. capacity = capacity + :ld_capacity * :arg_qty ,
  6029. cost = case noallocqty + :arg_qty when 0 then cost else round((wareamt + round(:arg_qty * :arg_price, 2)) / ( noallocqty + :arg_qty ),:uo_option_cost_dec) End
  6030. Where ( mtrlid = :arg_mtrlid ) And
  6031. ( plancode = :arg_plancode ) And
  6032. ( storageid = :arg_storageid ) And
  6033. ( scid = :scid ) And
  6034. ( status = :arg_status ) And
  6035. ( sptid = :arg_sptid) And
  6036. ( dxflag = :arg_dxflag) And
  6037. ( woodcode = :arg_woodcode) And
  6038. ( pcode = :arg_pcode) And
  6039. ( mtrlcuscode = :arg_mtrlcuscode) And
  6040. ( Location = :arg_location) Using commit_transaction ;
  6041. If commit_transaction.SQLCode = 0 Then
  6042. If commit_transaction.SQLNRows = 0 Then
  6043. ///////////////////////// //
  6044. ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  6045. If ls_newid <= 0 Then
  6046. rslt = 0
  6047. Goto ext
  6048. End If
  6049. ///////////////////////// //
  6050. ld_cost = Round(arg_price,uo_option_cost_dec)
  6051. Insert Into u_mtrlware
  6052. ( scid,
  6053. mtrlwareid,
  6054. mtrlid,
  6055. storageid,
  6056. plancode,
  6057. status,
  6058. noallocqty,
  6059. unoallocqty,
  6060. allocqty,
  6061. wareamt,
  6062. planprice,
  6063. sptid,
  6064. dxflag,
  6065. woodcode,
  6066. pcode,
  6067. cost,
  6068. storMtrlprp,
  6069. dscrp,
  6070. mtrlcuscode,
  6071. location,
  6072. capacity)
  6073. Values (
  6074. :scid,
  6075. :ls_newid,
  6076. :arg_mtrlid,
  6077. :arg_storageid,
  6078. :arg_plancode,
  6079. :arg_status,
  6080. :arg_qty,
  6081. :arg_uqty,
  6082. 0,
  6083. round(:arg_price * :arg_qty,2),
  6084. :arg_planprice,
  6085. :arg_sptid,
  6086. :arg_dxflag,
  6087. :arg_woodcode,
  6088. :arg_pcode,
  6089. :ld_cost,
  6090. :li_storMtrlprp,
  6091. :arg_dscrp,
  6092. :arg_mtrlcuscode,
  6093. :arg_location,
  6094. :ld_capacity * :arg_qty) Using commit_transaction ;
  6095. If commit_transaction.SQLCode <> 0 Then
  6096. rslt = 0
  6097. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  6098. Goto ext
  6099. End If
  6100. End If
  6101. Else
  6102. rslt = 0
  6103. If arg_status <> '' Then
  6104. ls_str = ' '+uo_option_change_status+':'+arg_status
  6105. End If
  6106. If arg_pcode <> '' Then
  6107. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  6108. End If
  6109. If arg_woodcode <> '' Then
  6110. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  6111. End If
  6112. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  6113. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  6114. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减"
  6115. ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  6116. arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  6117. ElseIf Pos(commit_transaction.SQLErrText,'CREATE RULE') > 0 And Pos(commit_transaction.SQLErrText,'cost') > 0 Then
  6118. arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号的库存金额不够冲减"
  6119. Else
  6120. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText
  6121. End If
  6122. Goto ext
  6123. End If
  6124. //-----------------------------------更新结存
  6125. Select mtrlwareid Into :ll_mtrlwareid
  6126. From u_mtrlware
  6127. Where ( mtrlid = :arg_mtrlid ) And
  6128. ( plancode = :arg_plancode ) And
  6129. ( storageid = :arg_storageid ) And
  6130. ( scid = :scid ) And
  6131. ( status = :arg_status ) And
  6132. ( sptid = :arg_sptid) And
  6133. ( dxflag = :arg_dxflag) And
  6134. ( woodcode = :arg_woodcode) And
  6135. ( pcode = :arg_pcode) And
  6136. ( mtrlcuscode = :arg_mtrlcuscode) And
  6137. ( Location = :arg_location) Using commit_transaction ;
  6138. If commit_transaction.SQLCode <> 0 Then
  6139. rslt = 0
  6140. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]查询库存操作失败"+"~n"+commit_transaction.SQLErrText
  6141. Goto ext
  6142. End If
  6143. Choose Case billtype
  6144. Case 1,2,5,26
  6145. ld_buyinqty = arg_qty
  6146. ld_buyinamt = Round(arg_qty * arg_price,2)
  6147. Case 3
  6148. ld_cpinqty = arg_qty
  6149. ld_cpinamt = Round(arg_qty * arg_price,2)
  6150. Case 4
  6151. ld_jginqty = arg_qty
  6152. ld_jginamt = Round(arg_qty * arg_price,2)
  6153. Case 8
  6154. ld_otinqty = arg_qty
  6155. ld_otinamt = Round(arg_qty * arg_price,2)
  6156. Case 9
  6157. ld_pyinqty = arg_qty
  6158. ld_pyinamt = Round(arg_qty * arg_price,2)
  6159. ld_pypkqty = arg_qty
  6160. ld_pypkamt = Round(arg_qty * arg_price,2)
  6161. Case 12
  6162. ld_mvinqty = arg_qty
  6163. ld_mvinamt = Round(arg_qty * arg_price,2)
  6164. Case 15
  6165. ld_diinqty = arg_qty
  6166. ld_diinamt = Round(arg_qty * arg_price,2)
  6167. Case 23
  6168. ld_saleinqty_packpro = arg_qty
  6169. ld_saleinamt_packpro = Round(arg_qty * arg_price,2)
  6170. Case 25
  6171. ld_buyinqty_pack = arg_qty
  6172. ld_buyinamt_pack = Round(arg_qty * arg_price,2)
  6173. Case Else
  6174. ld_otinqty = arg_qty
  6175. ld_otinamt = Round(arg_qty * arg_price,2)
  6176. End Choose
  6177. Update u_warebalc
  6178. Set incqty = incqty + :arg_qty ,
  6179. incamt = incamt + round(:arg_qty * :arg_price,2),
  6180. vincqty = case :arg_ifvqty when 0 then vincqty else vincqty + :arg_qty End,
  6181. vincamt = case :arg_ifvqty when 0 then vincamt else vincamt + round(:arg_qty * :arg_price,2) End,
  6182. uvincqty = case :arg_ifvqty when 0 then uvincqty else uvincqty + :arg_uqty End ,
  6183. balcqty = balcqty + :arg_qty,
  6184. balcamt = case balcqty + :arg_qty when 0 then 0 else balcamt + round(:arg_qty * :arg_price,2) End,
  6185. pypk = pypk + :ld_pypkqty,
  6186. pypkamt = pypkamt + :ld_pypkamt,
  6187. uincqty = uincqty + :arg_uqty,
  6188. ubalcqty = ubalcqty + :arg_uqty,
  6189. buyinqty = buyinqty + :ld_buyinqty,
  6190. buyinamt = buyinamt + :ld_buyinamt,
  6191. buyinqty_pack = buyinqty_pack + :ld_buyinqty_pack,
  6192. buyinamt_pack = buyinamt_pack + :ld_buyinamt_pack,
  6193. saleinqty_packpro = saleinqty_packpro + :ld_saleinqty_packpro,
  6194. saleinamt_packpro = saleinamt_packpro + :ld_saleinamt_packpro,
  6195. cpinqty = cpinqty + :ld_cpinqty,
  6196. cpinamt = cpinamt + :ld_cpinamt,
  6197. jginqty = jginqty + :ld_jginqty,
  6198. jginamt = jginamt + :ld_jginamt,
  6199. otinqty = otinqty + :ld_otinqty,
  6200. otinamt = otinamt + :ld_otinamt,
  6201. mvinqty = mvinqty + :ld_mvinqty,
  6202. mvinamt = mvinamt + :ld_mvinamt,
  6203. diinqty = diinqty + :ld_diinqty,
  6204. diinamt = diinamt + :ld_diinamt,
  6205. pyinqty = pyinqty + :ld_pyinqty,
  6206. pyinamt = pyinamt + :ld_pyinamt
  6207. Where ( balcdateint = 0) And
  6208. ( scid = :scid) And
  6209. ( mtrlwareid = :ll_mtrlwareid) Using commit_transaction ;
  6210. If commit_transaction.SQLCode = 0 Then
  6211. If commit_transaction.SQLNRows = 0 Then
  6212. Insert Into u_warebalc
  6213. ( balcdateint,
  6214. mtrlid,
  6215. storageid,
  6216. bgqty,
  6217. bgamt,
  6218. incqty,
  6219. incamt,
  6220. desqty,
  6221. desamt,
  6222. balcqty,
  6223. balcamt,
  6224. pypk,
  6225. pypkamt,
  6226. status,
  6227. scid,
  6228. buyinqty,
  6229. buyinamt,
  6230. buyinqty_pack,
  6231. buyinamt_pack,
  6232. saleinqty_packpro,
  6233. saleinamt_packpro,
  6234. cpinqty,
  6235. cpinamt,
  6236. jginqty,
  6237. jginamt,
  6238. diinqty,
  6239. diinamt,
  6240. mvinqty,
  6241. mvinamt,
  6242. otinqty,
  6243. otinamt,
  6244. pyinqty,
  6245. pyinamt,
  6246. woodcode,
  6247. pcode,
  6248. ubgqty,
  6249. uincqty,
  6250. udesqty,
  6251. ubalcqty,
  6252. plancode,
  6253. sptid,
  6254. dxflag,
  6255. mtrlcuscode,
  6256. location,
  6257. mtrlwareid
  6258. )
  6259. Values (
  6260. 0,
  6261. :arg_mtrlid,
  6262. :arg_storageid,
  6263. 0,
  6264. 0,
  6265. :arg_qty,
  6266. round(:arg_qty * :arg_price,2),
  6267. 0,
  6268. 0,
  6269. :arg_qty,
  6270. round(:arg_qty * :arg_price,2),
  6271. :ld_pypkqty,
  6272. :ld_pypkamt,
  6273. :arg_status,
  6274. :scid,
  6275. :ld_buyinqty,
  6276. :ld_buyinamt,
  6277. :ld_buyinqty_pack,
  6278. :ld_buyinamt_pack,
  6279. :ld_saleinqty_packpro,
  6280. :ld_saleinamt_packpro,
  6281. :ld_cpinqty,
  6282. :ld_cpinamt,
  6283. :ld_jginqty,
  6284. :ld_jginamt,
  6285. :ld_diinqty,
  6286. :ld_diinamt,
  6287. :ld_mvinqty,
  6288. :ld_mvinamt,
  6289. :ld_otinqty,
  6290. :ld_otinamt,
  6291. :ld_pyinqty,
  6292. :ld_pyinamt,
  6293. :arg_woodcode,
  6294. :arg_pcode,
  6295. 0,
  6296. :arg_uqty,
  6297. 0,
  6298. :arg_uqty,
  6299. :arg_plancode,
  6300. :arg_sptid,
  6301. :arg_dxflag,
  6302. :arg_mtrlcuscode,
  6303. :arg_location,
  6304. :ll_mtrlwareid
  6305. ) Using commit_transaction ;
  6306. If commit_transaction.SQLCode <> 0 Then
  6307. rslt = 0
  6308. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+commit_transaction.SQLErrText
  6309. Goto ext
  6310. End If
  6311. End If
  6312. Else
  6313. rslt = 0
  6314. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  6315. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  6316. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减"
  6317. Else
  6318. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+commit_transaction.SQLErrText
  6319. End If
  6320. Goto ext
  6321. End If
  6322. Else // 不核算金额
  6323. Update u_mtrlware
  6324. Set noallocqty = noallocqty + :arg_qty ,
  6325. unoallocqty = unoallocqty + :arg_uqty,
  6326. wareamt = 0,
  6327. waredate = case :li_ifupdate_date when 1 then getdate() else waredate End,
  6328. newprice = 0,
  6329. dscrp = :arg_dscrp,
  6330. cost = 0,
  6331. capacity = capacity + :ld_capacity * :arg_qty
  6332. Where ( mtrlid = :arg_mtrlid ) And
  6333. ( plancode = :arg_plancode ) And
  6334. ( storageid = :arg_storageid ) And
  6335. ( scid = :scid ) And
  6336. ( status = :arg_status ) And
  6337. ( sptid = :arg_sptid) And
  6338. ( dxflag = :arg_dxflag) And
  6339. ( woodcode = :arg_woodcode) And
  6340. ( pcode = :arg_pcode) And
  6341. ( mtrlcuscode = :arg_mtrlcuscode) And
  6342. ( Location = :arg_location) Using commit_transaction ;
  6343. If commit_transaction.SQLCode = 0 Then
  6344. If commit_transaction.SQLNRows = 0 Then
  6345. ///////////////////////// //
  6346. ls_newid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  6347. If ls_newid <= 0 Then
  6348. rslt = 0
  6349. Goto ext
  6350. End If
  6351. ///////////////////////// //
  6352. Insert Into u_mtrlware
  6353. ( scid,
  6354. mtrlwareid,
  6355. mtrlid,
  6356. storageid,
  6357. plancode,
  6358. status,
  6359. noallocqty,
  6360. unoallocqty,
  6361. allocqty,
  6362. wareamt,
  6363. planprice,
  6364. sptid,
  6365. dxflag,
  6366. woodcode,
  6367. pcode,
  6368. cost,
  6369. storMtrlprp,
  6370. dscrp,
  6371. mtrlcuscode,
  6372. location,
  6373. capacity)
  6374. Values (
  6375. :scid,
  6376. :ls_newid,
  6377. :arg_mtrlid,
  6378. :arg_storageid,
  6379. :arg_plancode,
  6380. :arg_status,
  6381. :arg_qty,
  6382. :arg_uqty,
  6383. 0,
  6384. 0,
  6385. 0,
  6386. :arg_sptid,
  6387. :arg_dxflag,
  6388. :arg_woodcode,
  6389. :arg_pcode,
  6390. 0,
  6391. :li_storMtrlprp,
  6392. :arg_dscrp,
  6393. :arg_mtrlcuscode,
  6394. :arg_location,
  6395. :ld_capacity * :arg_qty) Using commit_transaction ;
  6396. If commit_transaction.SQLCode <> 0 Then
  6397. rslt = 0
  6398. If Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  6399. If arg_status <> '' Then
  6400. ls_str = ' '+uo_option_change_status+':'+arg_status
  6401. End If
  6402. If arg_pcode <> '' Then
  6403. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  6404. End If
  6405. If arg_woodcode <> '' Then
  6406. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  6407. End If
  6408. arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  6409. Else
  6410. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存建立操作失败"+"~n"+commit_transaction.SQLErrText
  6411. End If
  6412. Goto ext
  6413. End If
  6414. End If
  6415. Else
  6416. rslt = 0
  6417. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  6418. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  6419. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的库存支持冲减"
  6420. ElseIf Pos(commit_transaction.SQLErrText,'CK_u_mtrlware') > 0 Then
  6421. If arg_status <> '' Then
  6422. ls_str = ' '+uo_option_change_status+':'+arg_status
  6423. End If
  6424. If arg_pcode <> '' Then
  6425. ls_str = ls_str + ' '+uo_option_change_pcode+':'+arg_pcode
  6426. End If
  6427. If arg_woodcode <> '' Then
  6428. ls_str = ls_str + ' '+uo_option_change_woodcode+':'+arg_woodcode
  6429. End If
  6430. arg_msg = '仓库:'+ls_storagename+",物料:"+arg_mtrlcode+ls_str+" 同仓库内同批号没有足够的库存支持冲减"
  6431. Else
  6432. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]库存更新操作失败"+"~n"+commit_transaction.SQLErrText
  6433. End If
  6434. Goto ext
  6435. End If
  6436. //-----------------------------------更新结存
  6437. Select mtrlwareid Into :ll_mtrlwareid
  6438. From u_mtrlware
  6439. Where ( mtrlid = :arg_mtrlid ) And
  6440. ( plancode = :arg_plancode ) And
  6441. ( storageid = :arg_storageid ) And
  6442. ( scid = :scid ) And
  6443. ( status = :arg_status ) And
  6444. ( sptid = :arg_sptid) And
  6445. ( dxflag = :arg_dxflag) And
  6446. ( woodcode = :arg_woodcode) And
  6447. ( pcode = :arg_pcode) And
  6448. ( mtrlcuscode = :arg_mtrlcuscode) And
  6449. ( Location = :arg_location) Using commit_transaction ;
  6450. If commit_transaction.SQLCode <> 0 Then
  6451. rslt = 0
  6452. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]查询库存操作失败"+"~n"+commit_transaction.SQLErrText
  6453. Goto ext
  6454. End If
  6455. Choose Case billtype
  6456. Case 1,2
  6457. ld_buyinqty = arg_qty
  6458. Case 3
  6459. ld_cpinqty = arg_qty
  6460. Case 4
  6461. ld_jginqty = arg_qty
  6462. Case 8
  6463. ld_otinqty = arg_qty
  6464. Case 9
  6465. ld_pyinqty = arg_qty
  6466. ld_pypkqty = arg_qty
  6467. Case 12
  6468. ld_mvinqty = arg_qty
  6469. Case 15
  6470. ld_diinqty = arg_qty
  6471. Case 23
  6472. ld_saleinqty_packpro = arg_qty
  6473. Case 25
  6474. ld_buyinqty_pack = arg_qty
  6475. Case Else
  6476. ld_otinqty = arg_qty
  6477. End Choose
  6478. Update u_warebalc
  6479. Set incqty = incqty + :arg_qty ,
  6480. uincqty = uincqty + :arg_uqty,
  6481. incamt = 0,
  6482. balcqty = balcqty + :arg_qty,
  6483. ubalcqty = ubalcqty + :arg_uqty,
  6484. balcamt = 0,
  6485. pypk = pypk + :ld_pypkqty,
  6486. pypkamt = 0,
  6487. buyinqty = buyinqty + :ld_buyinqty,
  6488. buyinamt = 0,
  6489. buyinqty_pack = buyinqty_pack + :ld_buyinqty_pack,
  6490. buyinamt_pack = 0,
  6491. saleinqty_packpro = saleinqty_packpro + :ld_saleinqty_packpro,
  6492. saleinamt_packpro = 0,
  6493. cpinqty = cpinqty + :ld_cpinqty,
  6494. cpinamt = 0,
  6495. jginqty = jginqty + :ld_jginqty,
  6496. jginamt = 0,
  6497. otinqty = otinqty + :ld_otinqty,
  6498. otinamt = 0,
  6499. mvinqty = mvinqty + :ld_mvinqty,
  6500. mvinamt = 0,
  6501. diinqty = diinqty + :ld_diinqty,
  6502. diinamt = 0,
  6503. pyinqty = pyinqty + :ld_pyinqty,
  6504. pyinamt = 0
  6505. Where ( balcdateint = 0) And
  6506. ( scid = :scid) And
  6507. ( mtrlwareid = :ll_mtrlwareid) Using commit_transaction ;
  6508. If commit_transaction.SQLCode = 0 Then
  6509. If commit_transaction.SQLNRows = 0 Then
  6510. Insert Into u_warebalc
  6511. ( balcdateint,
  6512. mtrlid,
  6513. storageid,
  6514. bgqty,
  6515. bgamt,
  6516. incqty,
  6517. incamt,
  6518. desqty,
  6519. desamt,
  6520. balcqty,
  6521. balcamt,
  6522. pypk,
  6523. pypkamt,
  6524. status,
  6525. scid,
  6526. buyinqty,
  6527. buyinamt,
  6528. buyinqty_pack,
  6529. buyinamt_pack,
  6530. saleinqty_packpro,
  6531. saleinamt_packpro,
  6532. cpinqty,
  6533. cpinamt,
  6534. jginqty,
  6535. jginamt,
  6536. diinqty,
  6537. diinamt,
  6538. mvinqty,
  6539. mvinamt,
  6540. otinqty,
  6541. otinamt,
  6542. pyinqty,
  6543. pyinamt,
  6544. woodcode,
  6545. pcode,
  6546. ubgqty,
  6547. uincqty,
  6548. udesqty,
  6549. ubalcqty,
  6550. plancode,
  6551. sptid,
  6552. dxflag,
  6553. mtrlcuscode,
  6554. location,
  6555. mtrlwareid)
  6556. Values (
  6557. 0,
  6558. :arg_mtrlid,
  6559. :arg_storageid,
  6560. 0,
  6561. 0,
  6562. :arg_qty,
  6563. 0,
  6564. 0,
  6565. 0,
  6566. :arg_qty,
  6567. 0,
  6568. :ld_pypkqty,
  6569. 0,
  6570. :arg_status,
  6571. :scid,
  6572. :ld_buyinqty,
  6573. 0,
  6574. :ld_buyinqty_pack,
  6575. 0,
  6576. :ld_saleinqty_packpro,
  6577. 0,
  6578. :ld_cpinqty,
  6579. 0,
  6580. :ld_jginqty,
  6581. 0,
  6582. :ld_diinqty,
  6583. 0,
  6584. :ld_mvinqty,
  6585. 0,
  6586. :ld_otinqty,
  6587. 0,
  6588. :ld_pyinqty,
  6589. 0,
  6590. :arg_woodcode,
  6591. :arg_pcode,
  6592. 0,
  6593. :arg_uqty,
  6594. 0,
  6595. :arg_uqty,
  6596. :arg_plancode,
  6597. :arg_sptid,
  6598. :arg_dxflag,
  6599. :arg_mtrlcuscode,
  6600. :arg_location,
  6601. :ll_mtrlwareid) Using commit_transaction ;
  6602. If commit_transaction.SQLCode <> 0 Then
  6603. rslt = 0
  6604. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存建立操作失败"+"~n"+commit_transaction.SQLErrText
  6605. Goto ext
  6606. End If
  6607. End If
  6608. Else
  6609. rslt = 0
  6610. or_err_part = 'column insert or update conflicts with a rule imposed by a previous create rule statement'
  6611. If commit_transaction.SQLCode = 513 Or Pos(Lower(commit_transaction.SQLErrText),or_err_part) > 0 Then
  6612. arg_msg = '仓库:'+ls_storagename+",物料["+arg_mtrlcode+"]同仓库内同批号没有足够的结存支持冲减"
  6613. Else
  6614. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]结存更新操作失败"+"~n"+commit_transaction.SQLErrText
  6615. End If
  6616. Goto ext
  6617. End If
  6618. End If
  6619. If arg_qty > 0 Then
  6620. If li_ifpack = 2 Then
  6621. Update u_mtrlware
  6622. Set u_mtrlware.dscrp = :arg_location,
  6623. u_mtrlware.waredate = case :li_ifupdate_date when 1 then getdate() else u_mtrlware.waredate End
  6624. From u_mtrlware,u_mtrldef
  6625. Where u_mtrlware.mtrlid = u_mtrldef.mtrlid
  6626. And u_mtrldef.ifpackpro = 2
  6627. And u_mtrlware.mtrlcuscode = :arg_mtrlcuscode Using commit_transaction ;
  6628. If commit_transaction.SQLCode <> 0 Then
  6629. rslt = 0
  6630. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]更新个性包件产品库存摘要操作失败"+"~n"+commit_transaction.SQLErrText
  6631. Goto ext
  6632. End If
  6633. ElseIf li_ifpackpro = 4 Then
  6634. Update u_mtrlware
  6635. Set u_mtrlware.dscrp = :arg_location,
  6636. u_mtrlware.waredate = case :li_ifupdate_date when 1 then getdate() else u_mtrlware.waredate End
  6637. From u_mtrlware,u_mtrldef
  6638. Where u_mtrlware.mtrlid = u_mtrldef.mtrlid
  6639. And u_mtrldef.ifpackpro = 4
  6640. And u_mtrlware.mtrlid = :arg_mtrlid
  6641. And u_mtrlware.mtrlcuscode = :arg_mtrlcuscode
  6642. And (PATINDEX('%+%',u_mtrlware.status) > 0 Or PATINDEX('%*%',u_mtrlware.status) > 0) Using commit_transaction ;
  6643. If commit_transaction.SQLCode <> 0 Then
  6644. rslt = 0
  6645. arg_msg = '仓库:'+ls_storagename+",因网络或其它原因导致物料["+arg_mtrlcode+"]更新组合配置包件产品库存摘要操作失败"+"~n"+commit_transaction.SQLErrText
  6646. Goto ext
  6647. End If
  6648. End If
  6649. End If
  6650. //自动计算包件产品可装数yyx20100414
  6651. //yyx2012-9-28取消
  6652. //If ( li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro = 3 Or li_ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  6653. // IF uo_cmpl_p.uof_cmpl(arg_mtrlid,arg_plancode,arg_mtrlcuscode,arg_storageid,arg_msg) = 0 THEN
  6654. // rslt = 0
  6655. // GOTO ext
  6656. // END IF
  6657. //END IF
  6658. If uo_option_djqty_check = 1 and li_ifmrp = 1 Then
  6659. Decimal ld_djqty
  6660. Select SUM(u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0) )
  6661. Into :ld_djqty
  6662. From u_OrderRqMtrl_scll Inner JOIN
  6663. u_Order_ml ON u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID LEFT OUTER JOIN
  6664. uv_outware_scll_back ON u_OrderRqMtrl_scll.scid = uv_outware_scll_back.scid AND
  6665. u_OrderRqMtrl_scll.OrderID = uv_outware_scll_back.relid AND
  6666. u_OrderRqMtrl_scll.MtrlID = uv_outware_scll_back.mtrlid AND
  6667. u_OrderRqMtrl_scll.status = uv_outware_scll_back.status AND
  6668. u_OrderRqMtrl_scll.woodcode = uv_outware_scll_back.woodcode AND
  6669. u_OrderRqMtrl_scll.pcode = uv_outware_scll_back.pcode
  6670. Where (u_OrderRqMtrl_scll.wareqty <> 0) And (u_Order_ml.Status Not In (3,5,6))
  6671. And u_OrderRqMtrl_scll.wareqty - u_OrderRqMtrl_scll.DstrQty + isnull(uv_outware_scll_back.qty,0)> 0
  6672. And u_OrderRqMtrl_scll.MtrlID = :arg_mtrlid
  6673. And u_OrderRqMtrl_scll.scid = :scid Using commit_transaction;
  6674. If commit_transaction.SQLCode <> 0 Then
  6675. ld_djqty = 0
  6676. End If
  6677. If IsNull(ld_djqty) Then ld_djqty = 0
  6678. Select SUM(u_mtrlware.noallocqty)
  6679. Into :ld_noallocqty
  6680. From u_mtrlware Inner JOIN
  6681. u_storage ON u_mtrlware.storageid = u_storage.storageid
  6682. Where (u_storage.inuse = 1)
  6683. And u_storage.ifmrp = 1
  6684. And u_mtrlware.mtrlid = :arg_mtrlid
  6685. And u_mtrlware.scid = :scid Using commit_transaction;
  6686. If commit_transaction.SQLCode <> 0 Then
  6687. ld_noallocqty = 0
  6688. End If
  6689. If IsNull(ld_noallocqty) Then ld_noallocqty = 0
  6690. If ld_djqty > ld_noallocqty Then
  6691. rslt = 0
  6692. arg_msg = '物料['+arg_mtrlcode+']冻结数不能大于库存数,冻结数:'+String(ld_djqty,'#,##0.##########')+',库存数:'+String(ld_noallocqty,'#,##0.##########')
  6693. Goto ext
  6694. End If
  6695. End If
  6696. ext:
  6697. If rslt = 0 Then
  6698. Rollback Using commit_transaction;
  6699. End If
  6700. Destroy uo_cmpl_p
  6701. Return rslt
  6702. end function
  6703. public function integer mod_price (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_enprice, decimal arg_jgprice, decimal arg_tax, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  6704. Int li_StoreBalcType
  6705. Int li_storagetype
  6706. Long ll_cnt
  6707. Long ll_option_buy_sptprice_sec
  6708. String ls_optionvalue
  6709. String ls_unit
  6710. Decimal ld_fprice_notax
  6711. f_get_sys_option_value('168',ls_optionvalue,arg_msg)
  6712. ll_option_buy_sptprice_sec = Long(ls_optionvalue)
  6713. IF uo_option_unit_dec = -1000 THEN
  6714. rslt = 0
  6715. arg_msg = '选项:[023]辅助单位转换库存单位小数位,读取初始默认值失败,操作取消!'
  6716. GOTO ext
  6717. END IF
  6718. IF ll_option_buy_sptprice_sec = -1000 THEN
  6719. rslt = 0
  6720. arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!'
  6721. GOTO ext
  6722. END IF
  6723. uo_spt_price uo_sptprice
  6724. uo_sptprice = Create uo_spt_price
  6725. IF p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  6726. rslt = 0
  6727. GOTO ext
  6728. END IF
  6729. IF flag = 0 THEN
  6730. rslt = 0
  6731. arg_msg = '进仓单待审核状态下不能执行修改单价功能'
  6732. GOTO ext
  6733. END IF
  6734. IF secflag = 1 THEN
  6735. rslt = 0
  6736. arg_msg = '进仓单已财审,不能执行修改单价功能'
  6737. GOTO ext
  6738. END IF
  6739. SELECT storagetype, StoreBalcType
  6740. INTO :li_storagetype, :li_StoreBalcType
  6741. FROM u_storage
  6742. Where storageid = :storageid Using commit_transaction ;
  6743. IF commit_transaction.SQLCode <> 0 THEN
  6744. rslt = 0
  6745. arg_msg = "查询操作失败,仓库属性"
  6746. GOTO ext
  6747. END IF
  6748. IF li_StoreBalcType = 0 THEN
  6749. IF balcdateint > 0 THEN
  6750. rslt = 0
  6751. arg_msg = "单据已结存,不能修改"
  6752. GOTO ext
  6753. END IF
  6754. ELSE
  6755. SELECT count(*)
  6756. INTO :ll_cnt
  6757. FROM u_warebalc
  6758. WHERE storageid = :storageid
  6759. AND balcdateint = :balcdateint
  6760. AND AmtAuditFlag = 1
  6761. Using commit_transaction;
  6762. IF commit_transaction.SQLCode <> 0 THEN
  6763. rslt = 0
  6764. arg_msg = "查询操作失败,仓库属性"
  6765. GOTO ext
  6766. END IF
  6767. IF ll_cnt > 0 THEN
  6768. rslt = 0
  6769. arg_msg = "仓库已金额结存,不能修改"
  6770. GOTO ext
  6771. END IF
  6772. END IF
  6773. Decimal ld_enprice,ld_uprice,ld_uqty,ld_rate,ld_qty,ld_rebate,ld_cost,ld_deliqty,ld_tax, lde_cost
  6774. Long ll_mtrlid, ll_mtrlwareid
  6775. String ls_status,ls_woodcode,ls_pcode,ls_plancode,ls_mtrlcuscode,ls_location
  6776. Long ll_sptid,ll_ifpack,ll_ifpackpro
  6777. String ls_mxdscrp
  6778. Long ll_sptid_m
  6779. String ls_mtrlcuscode_m
  6780. SELECT u_inwaremx.enprice,
  6781. u_inwaremx.uprice,
  6782. u_inwaremx.uqty,
  6783. u_inwaremx.rate,
  6784. u_inwaremx.qty,
  6785. u_inwaremx.rebate,
  6786. u_inwaremx.mtrlid,
  6787. u_inwaremx.status,
  6788. u_inwaremx.woodcode,
  6789. u_inwaremx.pcode,
  6790. u_inwaremx.cost,
  6791. u_inwaremx.plancode,
  6792. u_inwaremx.sptid_cusid,
  6793. u_inwaremx.mtrlcuscode,
  6794. u_inwaremx.location,
  6795. u_mtrldef.ifpack,
  6796. u_mtrldef.ifpackpro,
  6797. u_inwaremx.deliqty,
  6798. u_inwaremx.tax,
  6799. u_inwaremx.mtrlwareid,
  6800. u_inwaremx.cost,
  6801. u_inwaremx.unit,
  6802. u_inwaremx.mxdscrp
  6803. INTO :ld_enprice,
  6804. :ld_uprice,
  6805. :ld_uqty,
  6806. :ld_rate,
  6807. :ld_qty,
  6808. :ld_rebate,
  6809. :ll_mtrlid,
  6810. :ls_status,
  6811. :ls_woodcode,
  6812. :ls_pcode,
  6813. :ld_cost,
  6814. :ls_plancode,
  6815. :ll_sptid,
  6816. :ls_mtrlcuscode,
  6817. :ls_location,
  6818. :ll_ifpack,
  6819. :ll_ifpackpro,
  6820. :ld_deliqty,
  6821. :ld_tax,
  6822. :ll_mtrlwareid,
  6823. :lde_cost,
  6824. :ls_unit,
  6825. :ls_mxdscrp
  6826. FROM u_inwaremx INNER JOIN
  6827. u_mtrldef ON u_inwaremx.mtrlid = u_mtrldef.mtrlid
  6828. WHERE u_inwaremx.scid = :arg_scid
  6829. AND u_inwaremx.inwareid = :arg_inwareid
  6830. AND u_inwaremx.printid = :arg_printid
  6831. Using commit_transaction;
  6832. IF commit_transaction.SQLCode <> 0 THEN
  6833. rslt = 0
  6834. arg_msg = '查询进仓单明细内容失败'+commit_transaction.SQLErrText
  6835. GOTO ext
  6836. END IF
  6837. IF ll_mtrlwareid = 0 THEN
  6838. //马上处理一次,如果不行,再报错误
  6839. IF li_storagetype = 1 And ll_ifpack <> 2 And ll_ifpackpro <> 2 And ll_ifpackpro <> 4 THEN
  6840. IF billtype = 17 THEN //客户调货条码转换单
  6841. ll_sptid_m = ll_sptid
  6842. ls_mtrlcuscode_m = ls_mtrlcuscode
  6843. ELSE
  6844. ll_sptid_m = 0
  6845. ls_mtrlcuscode_m = ''
  6846. END IF
  6847. ELSE
  6848. IF billtype = 4 THEN
  6849. ll_sptid_m = 0
  6850. ELSE
  6851. ll_sptid_m = ll_sptid
  6852. END IF
  6853. ls_mtrlcuscode_m = ls_mtrlcuscode
  6854. END IF
  6855. //取库存信息yyx2012-09-25
  6856. Long ll_mtrlwareid_ref
  6857. ll_mtrlwareid_ref = 0
  6858. IF uof_ref_mtrlwareid(scid,storageid,ll_mtrlid,&
  6859. ls_status,ls_woodcode,ls_pcode,ls_plancode,&
  6860. ls_location,ll_sptid_m,ls_mtrlcuscode_m,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  6861. rslt = 0
  6862. GOTO ext
  6863. END IF
  6864. IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,arg_inwareid,arg_printid,arg_msg,False) = 0 THEN
  6865. rslt = 0
  6866. GOTO ext
  6867. END IF
  6868. ll_mtrlwareid = ll_mtrlwareid_ref
  6869. IF ll_mtrlwareid = 0 THEN
  6870. rslt = 0
  6871. arg_msg = '明细库存ID为0,不能操作'
  6872. GOTO ext
  6873. END IF
  6874. END IF
  6875. IF arg_tax = -1 THEN arg_tax = ld_tax
  6876. IF arg_rebate = -1 THEN arg_rebate = ld_rebate
  6877. IF arg_enprice = ld_enprice And arg_tax = ld_tax And arg_rebate = ld_rebate THEN
  6878. rslt = 1
  6879. // rslt = 0
  6880. // arg_msg = '单价、折扣、税率没有任何修改,不能保存'
  6881. GOTO ext
  6882. END IF
  6883. Decimal ld_uprice_new,ld_fprice_new,ld_price_new,ld_cost_new
  6884. Decimal ld_enprice_tax,ld_enprice_notax,ld_deliprice_notax
  6885. ld_uprice_new = Round(arg_enprice * mrate,10)
  6886. ld_fprice_new = Round((ld_uprice_new * ld_uqty)/(Round(ld_uqty * ld_rate,uo_option_unit_dec)),10)
  6887. ld_price_new = ld_fprice_new * arg_rebate
  6888. ld_deliprice_notax = arg_enprice / (1 + arg_tax)
  6889. IF ld_uqty <> 0 THEN
  6890. ld_enprice_tax = ld_deliqty * arg_enprice / ld_uqty
  6891. ld_enprice_notax = (ld_deliqty * arg_enprice / ld_uqty) / (1 + arg_tax)
  6892. ELSE
  6893. ld_enprice_tax = arg_enprice
  6894. ld_enprice_notax = arg_enprice / (1 + arg_tax)
  6895. END IF
  6896. ld_enprice_tax = Abs(ld_enprice_tax)
  6897. ld_enprice_notax = Abs(ld_enprice_notax)
  6898. IF billtype = 1 THEN //采购
  6899. IF thflag = 0 THEN
  6900. ld_cost_new = ld_fprice_new * arg_rebate
  6901. ELSE //采购退货单
  6902. ld_cost_new = lde_cost
  6903. END IF
  6904. ELSEIF billtype = 4 THEN //外协
  6905. IF ld_qty > 0 THEN
  6906. ld_cost_new = ld_fprice_new * arg_rebate
  6907. ELSE
  6908. ld_cost_new = lde_cost
  6909. END IF
  6910. ELSE
  6911. ld_cost_new = ld_fprice_new * arg_rebate
  6912. END IF
  6913. UPDATE u_inwaremx
  6914. SET enprice = :arg_enprice,
  6915. uprice = :ld_uprice_new,
  6916. fprice = :ld_fprice_new,
  6917. price = :ld_price_new,
  6918. cost = :ld_cost_new,
  6919. jgprice = :arg_jgprice,
  6920. deliprice_notax = :ld_deliprice_notax,
  6921. enprice_tax = :ld_enprice_tax,
  6922. enprice_notax = :ld_enprice_notax,
  6923. tax = :arg_tax,
  6924. rebate = :arg_rebate
  6925. WHERE scid = :arg_scid
  6926. AND inwareid = :arg_inwareid
  6927. And printid = :arg_printid Using commit_transaction;
  6928. IF commit_transaction.SQLCode <> 0 THEN
  6929. rslt = 0
  6930. arg_msg = '更新单据明细失败'+commit_transaction.SQLErrText
  6931. GOTO ext
  6932. END IF
  6933. //重算结存,
  6934. IF f_warebalc_cmpl_one(storageid, balcdateint, ll_mtrlwareid, arg_msg, False, commit_transaction) = 0 THEN
  6935. rslt = 0
  6936. GOTO ext
  6937. END IF
  6938. //如果是采购收货单/退货单, 更新供应商最新收货价
  6939. IF ll_option_buy_sptprice_sec = 0 And billtype = 1 THEN
  6940. ld_fprice_notax = ld_fprice_new / ( 1 + arg_tax)
  6941. IF uo_sptprice.uof_update_sptprice(thflag,sptid,ll_mtrlid,ls_unit,ls_status,ls_woodcode,ls_pcode,'',inwareid,arg_enprice,ld_rebate,ld_rate,ld_fprice_new,ld_fprice_notax,indate,inwarecode,0,ls_mxdscrp,arg_printid,0,moneyid,indate,DateTime(9999-01-01),False,arg_msg) = 0 THEN
  6942. arg_msg = '更新最新收货价失败,'+arg_msg
  6943. rslt = 0
  6944. GOTO ext
  6945. END IF
  6946. END IF
  6947. // //更新结存,库存,出仓相应金额
  6948. //IF li_storagetype = 1 And ll_ifpack <> 2 And ll_ifpackpro <> 2 And ll_ifpackpro <> 4 THEN
  6949. // IF billtype = 17 THEN //客户调货条码转换单
  6950. // ll_sptid_m = ll_sptid
  6951. // ls_mtrlcuscode_m = ls_mtrlcuscode
  6952. // ELSE
  6953. // ll_sptid_m = 0
  6954. // ls_mtrlcuscode_m = ''
  6955. // END IF
  6956. //ELSE
  6957. // IF billtype = 4 THEN
  6958. // ll_sptid_m = 0
  6959. // ELSE
  6960. // ll_sptid_m = ll_sptid
  6961. // END IF
  6962. // ls_mtrlcuscode_m = ls_mtrlcuscode
  6963. //END IF
  6964. //
  6965. //Decimal ld_bgamt,ld_incamt,ld_bgqty,ld_incqty
  6966. //Decimal ld_newcost
  6967. //
  6968. //IF thflag = 0 THEN
  6969. // SELECT bgamt,
  6970. // incamt,
  6971. // bgqty,
  6972. // incqty
  6973. // INTO :ld_bgamt,
  6974. // :ld_incamt,
  6975. // :ld_bgqty,
  6976. // :ld_incqty
  6977. // FROM u_warebalc
  6978. // WHERE mtrlid = :ll_mtrlid
  6979. // AND balcdateint = 0
  6980. // AND storageid = :storageid
  6981. // AND status = :ls_status
  6982. // AND woodcode = :ls_woodcode
  6983. // AND pcode = :ls_pcode
  6984. // AND plancode = :ls_plancode
  6985. // AND mtrlcuscode = :ls_mtrlcuscode_m
  6986. // AND sptid = :ll_sptid_m
  6987. // AND location = :ls_location
  6988. // Using commit_transaction;
  6989. // IF commit_transaction.SQLCode <> 0 THEN
  6990. // rslt = 0
  6991. // arg_msg = '查询相关结存信息失败'+commit_transaction.SQLErrText
  6992. // GOTO ext
  6993. // END IF
  6994. //
  6995. // IF ld_bgqty + ld_incqty <> 0 THEN
  6996. // ld_newcost = Round((ld_bgamt + ld_incamt - ld_cost * ld_qty + ld_cost_new * ld_qty) / (ld_bgqty + ld_incqty),10)
  6997. // ELSE
  6998. // ld_newcost = 0
  6999. // END IF
  7000. //
  7001. // IF ld_newcost < 0 THEN ld_newcost = 0
  7002. //
  7003. // UPDATE u_warebalc
  7004. // SET incamt = incamt + round((:ld_cost_new - :ld_cost) * :ld_qty,2),
  7005. // desamt = round(desqty * :ld_newcost,2),
  7006. // balcamt = round(balcqty * :ld_newcost,2)
  7007. // WHERE mtrlid = :ll_mtrlid
  7008. // AND balcdateint = 0
  7009. // AND Storageid = :storageid
  7010. // AND status = :ls_status
  7011. // AND woodcode = :ls_woodcode
  7012. // AND pcode = :ls_pcode
  7013. // AND plancode = :ls_plancode
  7014. // AND mtrlcuscode = :ls_mtrlcuscode_m
  7015. // AND sptid = :ll_sptid_m
  7016. // AND location = :ls_location
  7017. // Using commit_transaction;
  7018. // IF commit_transaction.SQLCode <> 0 THEN
  7019. // rslt = 0
  7020. // arg_msg = '更新结存表失败'+commit_transaction.SQLErrText
  7021. // GOTO ext
  7022. // END IF
  7023. //
  7024. // UPDATE u_mtrlware
  7025. // SET cost = :ld_newcost,
  7026. // wareamt = round(noallocqty * :ld_newcost,2)
  7027. // WHERE mtrlid = :ll_mtrlid
  7028. // AND Storageid = :storageid
  7029. // AND status = :ls_status
  7030. // AND woodcode = :ls_woodcode
  7031. // AND pcode = :ls_pcode
  7032. // AND plancode = :ls_plancode
  7033. // AND mtrlcuscode = :ls_mtrlcuscode_m
  7034. // AND sptid = :ll_sptid_m
  7035. // AND location = :ls_location
  7036. // Using commit_transaction;
  7037. // IF commit_transaction.SQLCode <> 0 THEN
  7038. // rslt = 0
  7039. // arg_msg = '更新库存表失败'+commit_transaction.SQLErrText
  7040. // GOTO ext
  7041. // END IF
  7042. //
  7043. // UPDATE u_outwaremx
  7044. // SET u_outwaremx.costamt = round(u_outwaremx.qty * :ld_newcost,2)
  7045. // FROM u_outwaremx INNER JOIN
  7046. // u_outware ON u_outwaremx.scid = u_outware.scid AND
  7047. // u_outwaremx.outwareid = u_outware.outwareid
  7048. // WHERE u_outwaremx.mtrlid = :ll_mtrlid
  7049. // AND u_outware.storageid = :storageid
  7050. // AND u_outwaremx.status = :ls_status
  7051. // AND u_outwaremx.woodcode = :ls_woodcode
  7052. // AND u_outwaremx.pcode = :ls_pcode
  7053. // AND u_outwaremx.plancode = :ls_plancode
  7054. // AND u_outwaremx.mtrlcuscode = :ls_mtrlcuscode_m
  7055. // AND u_outwaremx.sptid = :ll_sptid_m
  7056. // AND u_outwaremx.location = :ls_location
  7057. // AND u_outware.balcflag = 0
  7058. // Using commit_transaction;
  7059. // IF commit_transaction.SQLCode <> 0 THEN
  7060. // rslt = 0
  7061. // arg_msg = '更新未结存的出仓单金额失败'+commit_transaction.SQLErrText
  7062. // GOTO ext
  7063. // END IF
  7064. //
  7065. //END IF
  7066. ext:
  7067. IF rslt = 0 THEN
  7068. ROLLBACK Using commit_transaction;
  7069. ELSEIF rslt = 1 And arg_ifcommit THEN
  7070. COMMIT Using commit_transaction;
  7071. END IF
  7072. RETURN rslt
  7073. end function
  7074. public function integer acceptmx_mx (long arg_printid, long arg_mtrlid, string arg_mtrlcode, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, ref string arg_msg, string arg_woodcode, string arg_pcode, long arg_cusid_sptid, long arg_mxprintid, string arg_waredscrp, string arg_mtrlcuscode, string arg_location, long arg_ptinwareid, long arg_ptprintid, integer arg_ifnotinout);Int rslt = 1
  7075. Long cnt = 0,ls_i
  7076. Decimal ld_cost
  7077. String ls_ptinwarecode
  7078. IF uo_option_change_status = '-1000' THEN
  7079. rslt = 0
  7080. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  7081. GOTO ext
  7082. END IF
  7083. IF uo_option_change_woodcode = '-1000' THEN
  7084. rslt = 0
  7085. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  7086. GOTO ext
  7087. END IF
  7088. IF uo_option_change_pcode = '-1000' THEN
  7089. rslt = 0
  7090. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  7091. GOTO ext
  7092. END IF
  7093. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  7094. rslt = 0
  7095. arg_msg = "非编辑状态不可以使用,操作取消"
  7096. GOTO ext
  7097. END IF
  7098. //清除空值
  7099. IF IsNull(arg_printid) THEN arg_printid = 0
  7100. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  7101. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  7102. IF IsNull(arg_plancode) THEN arg_plancode = ''
  7103. IF IsNull(arg_status) THEN arg_status = ''
  7104. IF IsNull(arg_qty) THEN arg_qty = 0
  7105. IF IsNull(arg_fprice) THEN arg_fprice = 0
  7106. IF IsNull(arg_rebate) THEN arg_rebate = 1
  7107. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  7108. IF IsNull(arg_mxdscrp) THEN arg_woodcode = ''
  7109. IF IsNull(arg_pcode) THEN arg_pcode = ''
  7110. IF IsNull(arg_cusid_sptid) THEN arg_cusid_sptid = 0
  7111. IF IsNull(arg_mxprintid) THEN arg_mxprintid = 0
  7112. IF IsNull(arg_waredscrp) THEN arg_waredscrp = ''
  7113. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  7114. IF IsNull(arg_location) THEN arg_location = ''
  7115. IF IsNull(arg_ptinwareid) THEN arg_ptinwareid = 0
  7116. IF IsNull(arg_ptprintid) THEN arg_ptprintid = 0
  7117. IF arg_rebate = 0 THEN arg_rebate = 1
  7118. IF arg_mtrlid = 0 OR arg_qty = 0 THEN
  7119. rslt = 1
  7120. GOTO ext
  7121. END IF
  7122. IF f_check_status(1,arg_status) = 0 THEN
  7123. rslt = 0
  7124. arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_status+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_status
  7125. GOTO ext
  7126. END IF
  7127. IF f_check_status(2,arg_woodcode) = 0 THEN
  7128. rslt = 0
  7129. arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_woodcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_woodcode
  7130. GOTO ext
  7131. END IF
  7132. IF f_check_status(3,arg_pcode) = 0 THEN
  7133. rslt = 0
  7134. arg_msg = "包件明细行:"+String(arg_mxprintid)+",查询操作失败,可能"+uo_option_change_pcode+"未定义,物料:"+arg_mtrlcode+",内容:"+arg_pcode
  7135. GOTO ext
  7136. END IF
  7137. IF arg_rebate <= 0 THEN
  7138. arg_msg = '折扣错误,请检查'
  7139. rslt = 0
  7140. GOTO ext
  7141. END IF
  7142. //检查物料id
  7143. Int li_statusflag
  7144. SELECT statusflag
  7145. INTO :li_statusflag
  7146. FROM u_mtrldef
  7147. Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ;
  7148. IF commit_transaction.SQLCode <> 0 THEN
  7149. rslt = 0
  7150. arg_msg = "查询操作失败,物料或产品编号:"+arg_mtrlcode
  7151. GOTO ext
  7152. END IF
  7153. IF li_statusflag = 2 AND Trim(arg_status) = '' THEN
  7154. rslt = 0
  7155. arg_msg = '第'+String(arg_printid)+'行,产品:'+arg_mtrlcode+' 属于组合配置类型,但没有输入配置,请检查'
  7156. GOTO ext
  7157. END IF
  7158. IF arg_fprice * arg_rebate < 0 THEN //检查进仓价
  7159. rslt = 0
  7160. arg_msg = "物料或产品:" + String(arg_mtrlcode)+" 单价错误"
  7161. GOTO ext
  7162. END IF
  7163. IF billtype = 27 THEN
  7164. SELECT inwarecode INTO :ls_ptinwarecode
  7165. FROM u_inware
  7166. WHERE scid = :scid
  7167. AND inwareid = :arg_ptinwareid
  7168. AND billtype = 26
  7169. AND flag = 1 USING commit_transaction;
  7170. IF commit_transaction.SQLCode <> 0 THEN
  7171. arg_msg = '配套明细行:'+String(arg_mxprintid)+',查询相关采购收货包件进仓单号失败,'+commit_transaction.SQLErrText
  7172. rslt = 0
  7173. GOTO ext
  7174. END IF
  7175. END IF
  7176. //写入内容
  7177. it_mxbt_mx++
  7178. inwaremx_mx[it_mxbt_mx].printid = arg_printid
  7179. inwaremx_mx[it_mxbt_mx].mtrlid = arg_mtrlid
  7180. inwaremx_mx[it_mxbt_mx].mtrlcode = arg_mtrlcode
  7181. inwaremx_mx[it_mxbt_mx].plancode = arg_plancode
  7182. inwaremx_mx[it_mxbt_mx].status = arg_status
  7183. inwaremx_mx[it_mxbt_mx].fprice = arg_fprice
  7184. inwaremx_mx[it_mxbt_mx].rebate = arg_rebate
  7185. inwaremx_mx[it_mxbt_mx].qty = arg_qty
  7186. inwaremx_mx[it_mxbt_mx].price = arg_fprice * arg_rebate
  7187. inwaremx_mx[it_mxbt_mx].mxdscrp = arg_mxdscrp
  7188. inwaremx_mx[it_mxbt_mx].mxprintid = arg_mxprintid
  7189. inwaremx_mx[it_mxbt_mx].woodcode = arg_woodcode
  7190. inwaremx_mx[it_mxbt_mx].pcode = arg_pcode
  7191. inwaremx_mx[it_mxbt_mx].waredscrp = arg_waredscrp
  7192. inwaremx_mx[it_mxbt_mx].mtrlcuscode = arg_mtrlcuscode
  7193. inwaremx_mx[it_mxbt_mx].Location = arg_location
  7194. inwaremx_mx[it_mxbt_mx].sptid = arg_cusid_sptid
  7195. inwaremx_mx[it_mxbt_mx].ptinwareid = arg_ptinwareid
  7196. inwaremx_mx[it_mxbt_mx].ptprintid = arg_ptprintid
  7197. inwaremx_mx[it_mxbt_mx].ptinwarecode = ls_ptinwarecode
  7198. inwaremx_mx[it_mxbt_mx].ifnotinout = arg_ifnotinout
  7199. ext:
  7200. IF rslt = 0 THEN p_clearmx()
  7201. RETURN(rslt)
  7202. end function
  7203. on uo_inware.create
  7204. call super::create
  7205. TriggerEvent( this, "constructor" )
  7206. end on
  7207. on uo_inware.destroy
  7208. TriggerEvent( this, "destructor" )
  7209. call super::destroy
  7210. end on
  7211. event constructor;String str_optionvalue,arg_msg
  7212. f_get_sys_option_value('142',str_optionvalue,arg_msg)
  7213. uo_option_inout_type = Long(str_optionvalue)
  7214. f_get_sys_option_value('206',str_optionvalue,arg_msg)
  7215. uo_option_barcode_inwareother_paudit = Long(str_optionvalue)
  7216. f_get_sys_option_value('208',str_optionvalue,arg_msg)
  7217. uo_option_barcode_inwarebuy_paudit = Long(str_optionvalue)
  7218. f_get_sys_option_value('207',str_optionvalue,arg_msg)
  7219. uo_option_barcode_inwarecp_paudit = Long(str_optionvalue)
  7220. f_get_sys_option_value('063',str_optionvalue,arg_msg)
  7221. uo_option_mtrlware_dscrp = Long(str_optionvalue)
  7222. f_get_sys_option_value('023',str_optionvalue,arg_msg)
  7223. uo_option_unit_dec = Long(str_optionvalue)
  7224. f_get_sys_option_value('183',str_optionvalue,arg_msg)
  7225. uo_option_buy_zero = Long(str_optionvalue)
  7226. f_get_sys_option_value('184',str_optionvalue,arg_msg)
  7227. uo_option_wfjg_zero = Long(str_optionvalue)
  7228. f_get_sys_option_value('029',str_optionvalue,arg_msg)
  7229. uo_option_change_status = str_optionvalue
  7230. f_get_sys_option_value('027',str_optionvalue,arg_msg)
  7231. uo_option_change_woodcode = str_optionvalue
  7232. f_get_sys_option_value('028',str_optionvalue,arg_msg)
  7233. uo_option_change_pcode = str_optionvalue
  7234. f_get_sys_option_value('010',str_optionvalue,arg_msg)
  7235. uo_option_ifovertask = Long(str_optionvalue)
  7236. f_get_sys_option_value('112',str_optionvalue,arg_msg)
  7237. uo_option_ifovertask_cp = Long(str_optionvalue)
  7238. f_get_sys_option_value('022',str_optionvalue,arg_msg)
  7239. uo_option_cost_dec = Long(str_optionvalue)
  7240. f_get_sys_option_value('158',str_optionvalue,arg_msg)
  7241. uo_option_mtrlware_autocmp = Long(str_optionvalue)
  7242. f_get_sys_option_value('285',str_optionvalue,arg_msg)
  7243. uo_option_use_clfp = Long(str_optionvalue)
  7244. f_get_sys_option_value('287',str_optionvalue,arg_msg)
  7245. uo_option_barcodelocation_use_inwaremx_location = Long(str_optionvalue)
  7246. f_get_sys_option_value('249',str_optionvalue,arg_msg)
  7247. uo_option_cp_inware_scll_rate = long(str_optionvalue)
  7248. f_get_sys_option_value('362',str_optionvalue,arg_msg)
  7249. uo_option_cost_notax = long(str_optionvalue)
  7250. f_get_sys_option_value('378',str_optionvalue,arg_msg)
  7251. uo_option_djqty_check = long(str_optionvalue)
  7252. f_get_sys_option_value('417',str_optionvalue,arg_msg)
  7253. uo_option_canpack_ifzanyong = Long(str_optionvalue)
  7254. end event