uo_saletask.sru 141 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570
  1. $PBExportHeader$uo_saletask.sru
  2. forward
  3. global type uo_saletask from nonvisualobject
  4. end type
  5. type s_saletaskmx_mx from structure within uo_saletask
  6. end type
  7. end forward
  8. type s_saletaskmx_mx from structure
  9. long mtrlwareid
  10. decimal { 5 } qty
  11. end type
  12. global type uo_saletask from nonvisualobject
  13. end type
  14. global uo_saletask uo_saletask
  15. type variables
  16. PUBLIC PROTECTEDWRITE Long scid
  17. PUBLIC PROTECTEDWRITE Long taskid
  18. PUBLIC PROTECTEDWRITE String taskcode
  19. PUBLIC PROTECTEDWRITE DateTime opdate
  20. PUBLIC PROTECTEDWRITE String operator
  21. PUBLIC PROTECTEDWRITE Int status
  22. PUBLIC PROTECTEDWRITE DateTime accomplishdate
  23. PUBLIC PROTECTEDWRITE String permit_emp
  24. PUBLIC PROTECTEDWRITE String last_emp
  25. Long banktypeid
  26. Long moneyid
  27. Decimal damt
  28. Decimal otheramt
  29. Decimal mrate
  30. Decimal msttakeamt
  31. Int Kind
  32. Long cusid
  33. String assign_emp
  34. DateTime requiredate
  35. DateTime taskdate
  36. String freight
  37. string transcode
  38. string carcode
  39. String dscrp
  40. String dscrp2
  41. String relcode
  42. String paytype
  43. String freight_tele
  44. String cus_address
  45. String cus_tele
  46. String cus_tele1
  47. String cus_fax
  48. string dscrp3
  49. string rel_rep
  50. string freight_address
  51. datetime sendTime
  52. string sendUser
  53. string fiebrelcode
  54. long priceflag //确认
  55. Transaction commit_transaction //数据commit事务
  56. PRIVATE:
  57. s_saletaskmx saletaskmx[] //明细结构
  58. Long it_mxbt = 0 //明细结构数组末指针
  59. Boolean it_newbegin = FALSE //新建标志
  60. Boolean it_updatebegin = FALSE//修改标志
  61. s_saletaskmx_mx taskmx[]
  62. Long it_mxbt_mx = 0
  63. decimal mx_sumqty = 0
  64. s_saletask_itemmx saletask_itemmx[]
  65. Long it_mxbt_item = 0
  66. Long it_mxbt_pf = 0 //清单反扣MEI
  67. end variables
  68. forward prototypes
  69. public function integer p_reset ()
  70. public function integer p_clearmx ()
  71. public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  72. private function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg)
  73. public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  74. public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  75. public function integer checkmxcmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg)
  76. public function integer finishtask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  77. public function integer getinfo (long arg_scid, long arg_taskid, ref string arg_msg)
  78. public function integer propermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  79. public function integer salepermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  80. public function integer stopsaletask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  81. public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  82. public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg)
  83. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit)
  84. public function integer trycmplsaletask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  85. public function integer newbegin (long arg_scid, ref string arg_msg)
  86. public function integer uof_del_del (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit)
  87. public function integer uof_update_mx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlchangecode, ref string arg_msg, boolean arg_ifcommit)
  88. public function integer uof_mtrlchange (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, long arg_smtrlid, long arg_omtrlid, string arg_pfgroup, ref string arg_msg, boolean arg_ifcommit)
  89. public function integer acceptmx_mx (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref string arg_msg)
  90. public function integer addmxcmpl_assign (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
  91. public function integer uof_update_relcode (long arg_scid, long arg_taskid, string arg_newrelcode, ref string arg_msg, boolean arg_ifcommit)
  92. public function integer uof_add_0_mtrlware (ref string arg_msg, boolean arg_ifcommit)
  93. public function integer acceptmx (long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, integer arg_outtype, ref string arg_msg, string arg_unit, decimal arg_rate, string arg_formula, decimal arg_addqty, string arg_mxdscrp2, decimal arg_needwfjgqty, string arg_plancode, decimal arg_tax)
  94. public function integer acceptmx (s_saletaskmx s_mx, ref string arg_msg)
  95. public function integer finishtask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  96. public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  97. public function integer uof_stopqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit)
  98. public function integer uof_add_tc (long arg_scid, long arg_taskid, s_saletaskmx s_mx[], s_saletaskmx_outrep s_mx_rep[], ref string arg_msg, boolean arg_ifcommit)
  99. public function integer audit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  100. public function integer audit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  101. public function integer acceptmx_item (s_saletask_itemmx arg_item, ref string arg_msg)
  102. public function integer save_end (ref string arg_msg, boolean arg_ifcommit)
  103. public function integer stopsaletask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  104. public function integer acceptmx_chk (s_saletaskmx s_mx, ref string arg_msg)
  105. public function integer auditing_chk (ref string arg_msg)
  106. public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg)
  107. public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg)
  108. public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, s_inware_cp_fkmx arg_s_fkmx, string arg_msg)
  109. public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg)
  110. public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit)
  111. public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  112. public function integer priceaudit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  113. public function integer priceaudit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  114. public function integer uf_chk_assemble_qty (long arg_scid, ref string arg_msg)
  115. public function integer salecheck (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  116. public function integer salecheck_cancel (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  117. public function integer uof_insertwaste (integer arg_wastetype, integer arg_taskid, integer arg_scid, ref string arg_msg, boolean arg_ifcommit)
  118. public function integer uof_save_dytitle_saletask (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg)
  119. end prototypes
  120. public function integer p_reset ();//int p_reset()
  121. //清除对象及其明细
  122. taskid=0
  123. taskcode=''
  124. operator=''
  125. status=0
  126. damt = 0
  127. otheramt = 0
  128. banktypeid = 0
  129. moneyid = 0
  130. relcode = ''
  131. freight_tele= ''
  132. it_newbegin=false
  133. it_updatebegin=false
  134. //清除明细
  135. p_clearmx()
  136. return 1
  137. end function
  138. public function integer p_clearmx ();//INT p_clearmx()
  139. //清除明细
  140. it_mxbt=0
  141. it_mxbt_item=0
  142. msttakeamt = 0
  143. RETURN 1
  144. end function
  145. public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  146. //0 fail 1 SUCCESS
  147. Int rslt = 1
  148. arg_newdescppart = Trim(arg_newdescppart)
  149. IF it_updatebegin OR it_newbegin THEN
  150. rslt = 0
  151. arG_MSG = "编辑状态下不可用"
  152. GOTO ext
  153. END IF
  154. IF arg_newdescppart = '' THEN
  155. rslt = 0
  156. arG_MSG = "要添加内容为空,操作取消"
  157. GOTO ext
  158. END IF
  159. IF p_getinfo(arg_scid,arg_taskid,arG_MSG) = 0 THEN
  160. rslt = 0
  161. GOTO ext
  162. END IF
  163. IF status = 0 THEN
  164. rslt = 0
  165. arG_MSG = "待销售审核状态下不可用"
  166. GOTO ext
  167. END IF
  168. UPDATE u_saletask
  169. SET DSCRP = DSCRP+' '+:arg_newdescppart
  170. Where u_saletask.taskid = :arg_taskid AND scid = :arg_scid USING commit_transaction ;
  171. IF commit_transaction.SQLCode <> 0 THEN
  172. rslt = 0
  173. arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText
  174. GOTO ext
  175. END IF
  176. DSCRP = DSCRP+' '+arg_newdescppart
  177. it_newbegin = FALSE
  178. it_updatebegin = FALSE
  179. ext:
  180. IF rslt = 0 THEN
  181. ROLLBACK USING commit_transaction;
  182. ELSEIF arg_ifcommit THEN
  183. COMMIT USING commit_transaction;
  184. END IF
  185. p_reset()
  186. Return (rslt)
  187. end function
  188. private function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg);Int rslt = 1
  189. SELECT taskid,
  190. TaskCode,
  191. kind,
  192. CusID,
  193. requiredate,
  194. accomplishdate,
  195. Status,
  196. Opemp,
  197. Assign_Emp,
  198. Permit_Emp,
  199. Dscrp,
  200. Dscrp2,
  201. opdate,
  202. damt,
  203. otheramt,
  204. freight,
  205. taskdate,
  206. banktypeid ,
  207. moneyid,
  208. relcode,
  209. paytype,
  210. freight_tele,
  211. cus_address,
  212. cus_tele,
  213. cus_fax,
  214. mrate,
  215. scid,
  216. cus_tele1,
  217. priceflag
  218. INTO :taskid,
  219. :TaskCode,
  220. :Kind,
  221. :CusID,
  222. :requiredate,
  223. :accomplishdate,
  224. :Status,
  225. :Operator,
  226. :Assign_Emp,
  227. :Permit_Emp,
  228. :Dscrp,
  229. :Dscrp2,
  230. :opdate ,
  231. :damt,
  232. :otheramt,
  233. :freight,
  234. :taskdate,
  235. :banktypeid,
  236. :moneyid,
  237. :relcode,
  238. :paytype,
  239. :freight_tele,
  240. :cus_address,
  241. :cus_tele,
  242. :cus_fax,
  243. :mrate,
  244. :scid,
  245. :cus_tele1,
  246. :priceflag
  247. FROM u_SaleTask
  248. Where u_SaleTask.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction;
  249. IF commit_transaction.SQLCode <> 0 THEN
  250. rslt = 0
  251. ARG_MSG = '查询订单内容失败(错误订单唯一码)'
  252. GOTO ext
  253. END IF
  254. ext:
  255. RETURN rslt
  256. end function
  257. public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单
  258. //0 FAIL, 1 SUCCESS
  259. Int rslt = 1
  260. Long cnt
  261. IF arg_scid < 0 THEN
  262. arg_msg = '请选择分部'
  263. rslt = 0
  264. GOTO ext
  265. END IF
  266. IF arg_taskid <= 0 THEN
  267. rslt = 0
  268. arg_msg = '错误销售订单唯一码'
  269. GOTO ext
  270. END IF
  271. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  272. rslt = 0
  273. GOTO ext
  274. END IF
  275. IF priceflag = 1 THEN
  276. rslt = 0
  277. arg_msg = '单据已确认,不能删除'
  278. GOTO ext
  279. END IF
  280. IF Status <> 0 THEN
  281. rslt = 0
  282. arg_msg = "订单已经审核,不可以删除"
  283. GOTO ext
  284. END IF
  285. SELECT count(*)
  286. INTO :cnt
  287. FROM u_taskdamt_mx INNER JOIN
  288. u_taskdamt ON u_taskdamt_mx.billid = u_taskdamt.billid
  289. WHERE u_taskdamt_mx.relid = :arg_taskid
  290. And u_taskdamt_mx.scid = :arg_scid
  291. and u_taskdamt.billtype = 0;
  292. IF sqlca.SQLCode <> 0 THEN
  293. rslt = 0
  294. arg_msg = "查询订单是否有相关订单收款单数据失败,"+sqlca.SQLErrText
  295. GOTO ext
  296. END IF
  297. IF cnt > 0 THEN
  298. rslt = 0
  299. arg_msg = "订单已经有相关订单收款单数据,不可以删除"
  300. GOTO ext
  301. END IF
  302. if sys_saletask_autowaste = 1 then //登记删除
  303. if uof_insertwaste(0,taskid,scid,arg_msg,false) = 0 then
  304. arg_msg = '插入销售废弃单操作失败,'+commit_transaction.SQLErrText
  305. rslt = 0
  306. GOTO ext
  307. end if
  308. end if
  309. DELETE FROM u_saletask
  310. Where u_saletask.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction ;
  311. IF commit_transaction.SQLCode <> 0 THEN
  312. rslt = 0
  313. arg_msg = "删除销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  314. ROLLBACK Using commit_transaction;
  315. GOTO ext
  316. END IF
  317. DELETE FROM u_saletaskmx
  318. Where u_saletaskmx.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction;
  319. IF commit_transaction.SQLCode <> 0 THEN
  320. rslt = 0
  321. arg_msg = "删除销售订单明细操作失败"+"~n"+commit_transaction.SQLErrText
  322. ROLLBACK Using commit_transaction;
  323. GOTO ext
  324. END IF
  325. it_newbegin = False
  326. it_updatebegin = False
  327. IF arg_ifcommit And rslt = 1 THEN
  328. COMMIT Using commit_transaction;
  329. END IF
  330. ext:
  331. p_reset()
  332. Return (rslt)
  333. end function
  334. public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  335. DateTime nulldate
  336. SetNull(nulldate)
  337. IF arg_taskid <= 0 THEN
  338. rslt = 0
  339. ARG_MSG = '错误销售订单唯一码'
  340. GOTO ext
  341. END IF
  342. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  343. rslt = 0
  344. GOTO ext
  345. END IF
  346. IF Status <> 1 THEN
  347. rslt = 0
  348. ARG_MSG = "订单只有在已审核状态才可以执行撤消审核,请核对"
  349. GOTO ext
  350. END IF
  351. //检查发货
  352. cnt = 0
  353. SELECT count(*)
  354. INTO :cnt
  355. FROM u_outware,u_outwaremx
  356. WHERE ( u_outware.billtype = 1 ) AND
  357. ( u_outware.scid = u_outwaremx.scid ) AND
  358. ( u_outware.outwareid = u_outwaremx.outwareid ) AND
  359. ( u_outwaremx.relid = :arg_taskid ) AND
  360. ( u_outware.scid = :arg_scid) Using commit_transaction;
  361. IF commit_transaction.SQLCode <> 0 THEN
  362. rslt = 0
  363. ARG_MSG = "查询销售订单发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  364. GOTO ext
  365. END IF
  366. IF cnt > 0 THEN
  367. rslt = 0
  368. ARG_MSG = "销售订单已经有相关出仓单据,不可以撤消审核"
  369. GOTO ext
  370. END IF
  371. //检查生产进仓
  372. cnt = 0
  373. SELECT COUNT(*)
  374. INTO :cnt
  375. FROM u_inware,u_inwaremx
  376. WHERE ( u_inware.billtype = 3 ) AND
  377. ( u_inware.scid = u_inwaremx.scid ) AND
  378. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  379. ( u_inwaremx.relid = :arg_taskid ) AND
  380. ( u_inware.scid = :arg_scid) Using commit_transaction;
  381. IF commit_transaction.SQLCode <> 0 THEN
  382. rslt = 0
  383. ARG_MSG = "查询销售订单已入仓数量操作失败"+"~n"+commit_transaction.SQLErrText
  384. GOTO ext
  385. END IF
  386. IF cnt > 0 THEN
  387. rslt = 0
  388. ARG_MSG = "销售订单已经有相关生产进仓单据,不可以撤消审核"
  389. GOTO ext
  390. END IF
  391. //检查采购订单 已订购数
  392. cnt = 0
  393. SELECT COUNT(*)
  394. INTO :cnt
  395. FROM u_buytask INNER join u_buytaskmx
  396. on u_buytask.scid = u_buytaskmx.scid
  397. AND u_buytask.taskid = u_buytaskmx.taskid
  398. WHERE u_buytask.billtype <> 0
  399. AND u_buytask.scid = :arg_scid
  400. And u_buytaskmx.relid = :arg_taskid Using commit_transaction;
  401. IF commit_transaction.SQLCode <> 0 THEN
  402. ARG_MSG = "查询销售订单是否建立采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  403. rslt = 0
  404. GOTO ext
  405. END IF
  406. IF cnt > 0 THEN
  407. rslt = 0
  408. ARG_MSG = "销售订单已经有相关采购订单,不可以撤消审核"
  409. GOTO ext
  410. END IF
  411. //检查外协订单 已订购数
  412. cnt = 0
  413. SELECT COUNT(*)
  414. INTO :cnt
  415. FROM u_order_wfjg INNER join u_order_wfjgMx
  416. on u_order_wfjg.scid = u_order_wfjgMx.scid
  417. AND u_order_wfjg.wfjgid = u_order_wfjgMx.wfjgid
  418. WHERE u_order_wfjg.billtype <> 0
  419. AND u_order_wfjg.scid = :arg_scid
  420. And u_order_wfjgMx.orderid = :arg_taskid Using commit_transaction;
  421. IF commit_transaction.SQLCode <> 0 THEN
  422. ARG_MSG = "查询销售订单是否建立外协订单操作失败"+"~n"+commit_transaction.SQLErrText
  423. rslt = 0
  424. GOTO ext
  425. END IF
  426. IF cnt > 0 THEN
  427. rslt = 0
  428. ARG_MSG = "销售订单已经有相关外协订单,不可以撤消审核"
  429. GOTO ext
  430. END IF
  431. //检查排产
  432. IF sys_version <> 802001 THEN
  433. Long ll_scllflag,ll_flag,ll_ifsc,i,ll_count
  434. FOR i = 1 To it_mxbt
  435. ll_count = 0
  436. SELECT scllflag,
  437. flag,
  438. ifsc
  439. INTO :ll_scllflag,
  440. :ll_flag,
  441. :ll_ifsc
  442. FROM u_saletaskmx
  443. WHERE u_saletaskmx.scid = :arg_scid AND
  444. u_saletaskmx.taskid = :arg_taskid AND
  445. u_saletaskmx.printid = :saletaskmx[i].printid
  446. Using commit_transaction;
  447. IF commit_transaction.SQLCode <> 0 THEN
  448. rslt = 0
  449. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + "信息操作失败"+"~n"+commit_transaction.SQLErrText
  450. GOTO ext
  451. END IF
  452. IF ll_scllflag = 1 THEN
  453. rslt = 0
  454. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已领料审核,销售订单不能撤审!"
  455. GOTO ext
  456. END IF
  457. IF ll_flag = 1 THEN
  458. rslt = 0
  459. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已审核,销售订单不能撤审!"
  460. GOTO ext
  461. END IF
  462. IF ll_ifsc = 1 THEN
  463. rslt = 0
  464. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已排产,销售订单不能撤审!"
  465. GOTO ext
  466. END IF
  467. SELECT count(*)
  468. INTO :ll_count
  469. FROM u_saletaskmx_card
  470. WHERE u_saletaskmx_card.scid = :arg_scid AND
  471. u_saletaskmx_card.taskid = :arg_taskid AND
  472. u_saletaskmx_card.mxprintid = :saletaskmx[i].printid
  473. Using commit_transaction;
  474. IF commit_transaction.SQLCode <> 0 THEN
  475. rslt = 0
  476. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + "信息操作失败"+"~n"+commit_transaction.SQLErrText
  477. GOTO ext
  478. END IF
  479. IF ll_count > 0 THEN
  480. rslt = 0
  481. ARG_MSG = "销售订单明细行:" + String(saletaskmx[i].printid) + ",编码:" + saletaskmx[i].mtrlcode + "已生成流程卡,销售订单不能撤审!"
  482. GOTO ext
  483. END IF
  484. NEXT
  485. END IF
  486. //检查计件
  487. //个人产品工序 已开单数
  488. cnt = 0
  489. SELECT COUNT(*)
  490. INTO :cnt
  491. FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx
  492. WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid
  493. AND u_scwg_taskwork_2_mx.orderid = :arg_taskid
  494. And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction;
  495. IF commit_transaction.SQLCode <> 0 THEN
  496. ARG_MSG = "查询销售订单是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  497. rslt = 0
  498. GOTO ext
  499. END IF
  500. IF cnt > 0 THEN
  501. rslt = 0
  502. ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核"
  503. GOTO ext
  504. END IF
  505. //产品个人工序 已开单数
  506. cnt = 0
  507. SELECT COUNT(*)
  508. INTO :cnt
  509. FROM u_sc_taskworkmx,u_sc_taskwork
  510. WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid
  511. AND u_sc_taskworkmx.scid = u_sc_taskwork.scid
  512. And u_sc_taskwork.orderid = :arg_taskid;
  513. IF sqlca.SQLCode <> 0 THEN
  514. ARG_MSG = "查询销售订单是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  515. rslt = 0
  516. GOTO ext
  517. END IF
  518. IF cnt > 0 THEN
  519. rslt = 0
  520. ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核"
  521. GOTO ext
  522. END IF
  523. //订单收款单
  524. cnt = 0
  525. select count(*)
  526. into :cnt
  527. from u_taskdamt_mx inner join u_taskdamt on u_taskdamt_mx.scid = u_taskdamt.scid and u_taskdamt_mx.billid = u_taskdamt.billid
  528. where u_taskdamt_mx.scid = :arg_scid and u_taskdamt_mx.relid = :arg_taskid and u_taskdamt.billtype = 0;
  529. IF commit_transaction.SQLCode <> 0 THEN
  530. rslt = 0
  531. ARG_MSG = "查询订单收款单操作失败"+"~n"+commit_transaction.SQLErrText
  532. GOTO ext
  533. END IF
  534. IF cnt > 0 THEN
  535. rslt = 0
  536. ARG_MSG = "销售订单已经建立订单收款单,请先删除相关单据"
  537. GOTO ext
  538. END IF
  539. UPDATE u_SaleTask
  540. SET Status = 4,
  541. permit_emp = '',
  542. permit_date = :nulldate
  543. WHERE taskid = :arg_taskid
  544. AND scid = :arg_scid
  545. Using commit_transaction ;
  546. IF commit_transaction.SQLCode <> 0 THEN
  547. rslt = 0
  548. ARG_MSG = "销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  549. GOTO ext
  550. END IF
  551. it_newbegin = False
  552. it_updatebegin = False
  553. ext:
  554. IF rslt = 0 THEN
  555. ROLLBACK Using commit_transaction;
  556. ELSEIF arg_ifcommit THEN
  557. COMMIT Using commit_transaction;
  558. END IF
  559. p_reset()
  560. Return (rslt)
  561. end function
  562. public function integer checkmxcmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit)
  563. Int rslt = 1,cnt = 0
  564. IF arg_taskid <= 0 THEN
  565. rslt = 0
  566. ARG_MSG = '错误销售订单唯一码'
  567. GOTO ext
  568. END IF
  569. IF arg_addqty = 0 THEN
  570. rslt = 1
  571. GOTO ext
  572. END IF
  573. rslt = p_getinfo(arg_scid,arg_taskid,ARG_MSG)
  574. IF rslt = 0 THEN GOTO ext
  575. IF Status <> 1 THEN
  576. rslt = 0
  577. ARG_MSG = "销售订单只有在进行状态下才可以执行进仓"
  578. GOTO ext
  579. END IF
  580. Decimal ls_saleQty,ls_assignQty
  581. String ls_mtrlcode
  582. SELECT u_saleTaskMx.saleQty,
  583. u_saleTaskMx.assignqty,
  584. u_mtrldef.mtrlcode
  585. INTO :ls_saleQty,
  586. :ls_assignQty,
  587. :ls_mtrlcode
  588. FROM u_saleTaskMx ,u_mtrldef
  589. WHERE ( u_saleTaskMx.TaskID = :arg_taskid ) AND
  590. ( u_saleTaskMx.MtrlID = :arg_mtrlid ) AND
  591. ( u_mtrldef.mtrlid = u_saleTaskMx.MtrlID ) AND
  592. ( u_saleTaskMx.scid = :arg_scid) Using commit_transaction;
  593. IF commit_transaction.SQLCode <> 0 THEN
  594. rslt = 0
  595. ARG_MSG = "因网络或错误物料编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+commit_transaction.SQLErrText
  596. GOTO ext
  597. END IF
  598. IF ls_saleQty < ls_assignQty + arg_addqty THEN
  599. rslt = 0
  600. ARG_MSG = "物料["+ls_mtrlcode+"]的订单未完成数量只有"+String(ls_saleQty - ls_assignQty,'#,##0.0#')+",不能入库"+String(arg_addqty,'#,##0.0#')
  601. GOTO ext
  602. END IF
  603. ext:
  604. p_reset()
  605. Return (rslt)
  606. end function
  607. public function integer finishtask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//手动完成
  608. Int rslt = 1,cnt = 0
  609. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  610. rslt = 0
  611. GOTO ext
  612. END IF
  613. IF rslt = 0 THEN GOTO ext
  614. IF Status <> 1 THEN
  615. rslt = 0
  616. arg_msg = "销售订单只有在进行状态才可以执行完成,请核对"
  617. GOTO ext
  618. END IF
  619. UPDATE u_SaleTask
  620. SET status = 6,
  621. accomplishdate = getdate(),
  622. finishemp = :publ_operator
  623. WHERE ( u_SaleTask.TaskID = :arg_taskid ) AND
  624. ( u_SaleTask.scid = :arg_scid) Using commit_transaction;
  625. IF commit_transaction.SQLCode <> 0 THEN
  626. rslt = 0
  627. arg_msg = "因网络或其它原因导致完成销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  628. ROLLBACK Using commit_transaction;
  629. GOTO ext
  630. END IF
  631. ext:
  632. IF arg_ifcommit And rslt = 1 THEN
  633. COMMIT Using commit_transaction;
  634. END IF
  635. p_reset()
  636. Return (rslt)
  637. end function
  638. public function integer getinfo (long arg_scid, long arg_taskid, ref string arg_msg);//getinfo(long arg_taskid,string arg_msg)
  639. //0 失败 1成功
  640. Int rslt = 1,i = 1,no_mxcheck = 0
  641. IF arg_taskid <= 0 THEN
  642. rslt = 0
  643. arg_msg = '错误销售订单唯一码'
  644. GOTO ext
  645. END IF
  646. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  647. rslt = 0
  648. GOTO ext
  649. END IF
  650. //用游标读取明细
  651. DECLARE cur_inwaermx CURSOR FOR
  652. SELECT u_saletaskmx.mtrlid,
  653. u_saletaskmx.saleqty,
  654. u_saletaskmx.price,
  655. u_saletaskmx.mxdscrp,
  656. u_mtrldef.mtrlcode,
  657. u_saletaskmx.fprice,
  658. u_saletaskmx.rebate,
  659. u_saletaskmx.status,
  660. u_saletaskmx.printid,
  661. u_saletaskmx.woodcode,
  662. u_saletaskmx.pcode,
  663. u_saletaskmx.mtrlcuscode,
  664. u_saletaskmx.enprice,
  665. u_saletaskmx.outtype,
  666. u_saletaskmx.dftsaleprice,
  667. u_saletaskmx.unit,
  668. u_saletaskmx.rate,
  669. u_saletaskmx.usaleqty,
  670. u_saletaskmx.ware_enprice,
  671. u_saletaskmx.ware_fprice,
  672. u_saletaskmx.ware_price,
  673. u_saletaskmx.orderqty,
  674. u_saletaskmx.needbuyqty,
  675. u_saletaskmx.needwfjgqty,
  676. u_saletaskmx.tax,
  677. u_saletaskmx.packqty,
  678. u_saletaskmx.plancode,
  679. u_saletaskmx.enamt,
  680. u_saletaskmx.enamt_tax,
  681. u_saletaskmx.bsamt,
  682. u_saletaskmx.bsamt_tax
  683. FROM u_saletaskmx,u_mtrldef
  684. WHERE u_saletaskmx.taskid = :arg_taskid AND
  685. u_saletaskmx.mtrlid = u_mtrldef.mtrlid AND
  686. u_saletaskmx.scid = :arg_scid Using commit_transaction;
  687. OPEN cur_inwaermx;
  688. FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty,
  689. :saletaskmx[i].acprice,:saletaskmx[i].dscrp,
  690. :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice,
  691. :saletaskmx[i].rebate,:saletaskmx[i].status,
  692. :saletaskmx[i].printid,:saletaskmx[i].woodcode,
  693. :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode,
  694. :saletaskmx[i].enprice,:saletaskmx[i].outtype,
  695. :saletaskmx[i].dftsaleprice,:saletaskmx[i].unit,
  696. :saletaskmx[i].rate,:saletaskmx[i].usaleqty,:saletaskmx[i].ware_enprice,
  697. :saletaskmx[i].ware_fprice,:saletaskmx[i].ware_price,
  698. :saletaskmx[i].orderqty,:saletaskmx[i].needbuyqty,
  699. :saletaskmx[i].needwfjgqty,
  700. :saletaskmx[i].tax,
  701. :saletaskmx[i].packqty,
  702. :saletaskmx[i].plancode,
  703. :saletaskmx[i].enamt,
  704. :saletaskmx[i].enamt_tax,
  705. :saletaskmx[i].bsamt,
  706. :saletaskmx[i].bsamt_tax;
  707. DO WHILE sqlca.SQLCode = 0
  708. i++
  709. FETCH cur_inwaermx INTO :saletaskmx[i].mtrlid,:saletaskmx[i].saleqty,
  710. :saletaskmx[i].acprice,:saletaskmx[i].dscrp,
  711. :saletaskmx[i].mtrlcode,:saletaskmx[i].fprice,
  712. :saletaskmx[i].rebate,:saletaskmx[i].status,
  713. :saletaskmx[i].printid,:saletaskmx[i].woodcode,
  714. :saletaskmx[i].pcode,:saletaskmx[i].mtrlcuscode,
  715. :saletaskmx[i].enprice,:saletaskmx[i].outtype,
  716. :saletaskmx[i].dftsaleprice,:saletaskmx[i].unit,
  717. :saletaskmx[i].rate,:saletaskmx[i].usaleqty,:saletaskmx[i].ware_enprice,
  718. :saletaskmx[i].ware_fprice,:saletaskmx[i].ware_price,
  719. :saletaskmx[i].orderqty,:saletaskmx[i].needbuyqty,
  720. :saletaskmx[i].needwfjgqty,
  721. :saletaskmx[i].tax,
  722. :saletaskmx[i].packqty,
  723. :saletaskmx[i].plancode,
  724. :saletaskmx[i].enamt,
  725. :saletaskmx[i].enamt_tax,
  726. :saletaskmx[i].bsamt,
  727. :saletaskmx[i].bsamt_tax;
  728. LOOP
  729. CLOSE cur_inwaermx;
  730. //检验明细是否读入完整
  731. SELECT count(*) INTO :no_mxcheck
  732. FROM u_saletaskmx
  733. Where u_saletaskmx.taskid = :arg_taskid And scid = :arg_scid Using commit_transaction;
  734. IF commit_transaction.SQLCode <> 0 THEN
  735. rslt = 0
  736. arg_msg = "查询操作失败,销售订单明细数量"
  737. GOTO ext
  738. END IF
  739. IF i <> (no_mxcheck+1) THEN
  740. rslt = 0
  741. arg_msg = "查询操作失败,销售订单明细"
  742. GOTO ext
  743. END IF
  744. taskid = arg_taskid
  745. scid = arg_scid
  746. it_mxbt = i - 1
  747. it_newbegin = False
  748. it_updatebegin = False
  749. ext:
  750. IF rslt = 0 THEN p_reset()
  751. RETURN rslt
  752. end function
  753. public function integer propermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  754. //IF arg_taskid<=0 THEN
  755. // rslt=0
  756. // ARG_MSG='错误销售订单唯一码'
  757. // goto ext
  758. //end if
  759. //
  760. //if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  761. // rslt=0
  762. // goto ext
  763. //end if
  764. //
  765. //IF Status<>4 THEN
  766. // rslt=0
  767. // arG_MSG="订单只有在销售经理已审核状态才可以执行生产经理审核,请核对"
  768. // goto ext
  769. //END IF
  770. //
  771. //cnt=0
  772. //SELECT count(*) INTO :cnt
  773. // FROM u_user
  774. // WHERE username=:arg_emp using commit_transaction ;
  775. //if commit_transaction.sqlcode<>0 then
  776. // rslt=0
  777. // arG_MSG="查询操作失败,操作员!"
  778. // goto ext
  779. //end if
  780. //if cnt=0 then
  781. // rslt=0
  782. // arG_MSG="操作员姓名未登记或已取消!"
  783. // goto ext
  784. //end if
  785. //
  786. //UPDATE u_SaleTask
  787. // SET last_Emp = :arg_emp,
  788. // Status = 1
  789. //WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction ;
  790. //if commit_transaction.sqlcode<>0 then
  791. // rslt=0
  792. // arG_MSG="因网络或其它原因导致销售订单生产经理审核操作失败"+"~n"+commit_transaction.SQLErrText
  793. // goto ext
  794. //end if
  795. //
  796. //
  797. //
  798. //it_newbegin=FALSE
  799. //it_updatebegin=FALSE
  800. //
  801. //EXT:
  802. //if rslt=0 then
  803. // rollback using commit_transaction;
  804. //elseif arg_ifcommit then
  805. // COMMIT using commit_transaction;
  806. //end if
  807. //p_reset()
  808. return (rslt)
  809. end function
  810. public function integer salepermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit
  811. Int rslt = 1,cnt = 0
  812. Long ll_storageid_arr[],ll_storageid
  813. Long ll_scid_arr[],ll_scid
  814. Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware
  815. String ll_storagename_arr[],ls_storagename
  816. Long ll_inwaretype_arr[],ll_inwaretype
  817. Long ll_j,count,ll_i
  818. Decimal ld_add_qty
  819. Decimal ld_orderqty
  820. Long if_plancode_arr[],if_plancode
  821. String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode
  822. Long ll_mtrlwareid,ll_mtrlid
  823. Long ll_cusid
  824. IF arg_taskid <= 0 THEN
  825. rslt = 0
  826. arg_msg = '错误销售订单唯一码'
  827. GOTO ext
  828. END IF
  829. IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  830. rslt = 0
  831. GOTO ext
  832. END IF
  833. IF Status <> 4 THEN
  834. rslt = 0
  835. arg_msg = "订单非待二审状态,不能操作"
  836. GOTO ext
  837. END IF
  838. cnt = 0
  839. SELECT count(*) INTO :cnt
  840. FROM u_user
  841. Where username = :arg_emp Using commit_transaction;
  842. IF commit_transaction.SQLCode <> 0 THEN
  843. rslt = 0
  844. arg_msg = "查询操作失败,操作员!"
  845. GOTO ext
  846. END IF
  847. IF cnt = 0 THEN
  848. rslt = 0
  849. arg_msg = "操作员姓名未登记或已取消!"
  850. GOTO ext
  851. END IF
  852. Decimal lde_lmsaleprice
  853. //检查客户定价
  854. IF sys_option_saletask_dft_lmsaleprice = 1 THEN
  855. FOR ll_i = 1 To it_mxbt
  856. IF saletaskmx[ll_i].dftsaleprice = 0 THEN
  857. rslt = 0
  858. arg_msg = "系统选项[074]限制,行:"+String(ll_i)+",产品编号: "+String(saletaskmx[ll_i].mtrlcode)+", 需先设定客户定价"
  859. GOTO ext
  860. END IF
  861. NEXT
  862. END IF
  863. UPDATE u_SaleTask
  864. SET Permit_Emp = :arg_emp ,
  865. Permit_date = getdate(),
  866. Status = 1
  867. Where TaskID = :arg_taskid
  868. And scid = :arg_scid Using commit_transaction;
  869. IF commit_transaction.SQLCode <> 0 THEN
  870. rslt = 0
  871. arg_msg = "因网络或其它原因导致订单销售经理审核操作失败"+"~n"+commit_transaction.SQLErrText
  872. GOTO ext
  873. END IF
  874. //成品仓加0库存
  875. //-----------------------------------------------
  876. IF uof_add_0_mtrlware(arg_msg, False) = 0 THEN
  877. rslt = 0
  878. GOTO ext
  879. END IF
  880. it_newbegin = False
  881. it_updatebegin = False
  882. ext:
  883. IF rslt = 0 THEN
  884. ROLLBACK Using commit_transaction;
  885. ELSEIF arg_ifcommit THEN
  886. COMMIT Using commit_transaction;
  887. END IF
  888. p_reset()
  889. Return (rslt)
  890. end function
  891. public function integer stopsaletask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  892. IF arg_taskid <= 0 THEN
  893. rslt = 0
  894. ARG_MSG = '错误销售订单唯一码'
  895. GOTO ext
  896. END IF
  897. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  898. rslt = 0
  899. GOTO ext
  900. END IF
  901. IF Status <> 1 THEN
  902. rslt = 0
  903. ARG_MSG = "订单只有在进行状态才可以执行终止,请核对"
  904. GOTO ext
  905. END IF
  906. UPDATE u_SaleTask
  907. SET Status = 3,
  908. accomplishdate = getdate() ,
  909. stopemp = :publ_operator
  910. Where TaskID = :arg_taskid And scid = :arg_scid Using commit_transaction ;
  911. IF commit_transaction.SQLCode <> 0 THEN
  912. rslt = 0
  913. ARG_MSG = "终止销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  914. GOTO ext
  915. END IF
  916. it_newbegin = False
  917. it_updatebegin = False
  918. ext:
  919. IF rslt = 0 THEN
  920. ROLLBACK Using commit_transaction;
  921. ELSEIF arg_ifcommit THEN
  922. COMMIT Using commit_transaction;
  923. END IF
  924. p_reset()
  925. Return (rslt)
  926. end function
  927. public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  928. IF arg_taskid <= 0 THEN
  929. rslt = 0
  930. ARG_MSG = '错误销售订单唯一码'
  931. GOTO ext
  932. END IF
  933. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  934. rslt = 0
  935. GOTO ext
  936. END IF
  937. IF Status <> 1 And Status <> 2 THEN
  938. rslt = 0
  939. ARG_MSG = "订单只有在进行状态或暂停状态才可以执行暂停/取消暂停操作"
  940. GOTO ext
  941. END IF
  942. IF Status = 1 THEN
  943. UPDATE u_SaleTask
  944. SET Status = 2,stopemp = :publ_operator
  945. Where TaskID = :arg_taskid And scid = :arg_scid Using commit_transaction;
  946. IF commit_transaction.SQLCode <> 0 THEN
  947. rslt = 0
  948. ARG_MSG = "因网络或其它原因导致暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  949. GOTO ext
  950. END IF
  951. ELSE
  952. UPDATE u_SaleTask
  953. SET Status = 1,stopemp = ''
  954. Where TaskID = :arg_taskid And scid = :arg_scid Using commit_transaction ;
  955. IF commit_transaction.SQLCode <> 0 THEN
  956. rslt = 0
  957. ARG_MSG = "因网络或其它原因导致取消暂停销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  958. GOTO ext
  959. END IF
  960. END IF
  961. it_newbegin = False
  962. it_updatebegin = False
  963. ext:
  964. IF rslt = 0 THEN
  965. ROLLBACK Using commit_transaction;
  966. ELSEIF arg_ifcommit THEN
  967. COMMIT Using commit_transaction;
  968. END IF
  969. p_reset()
  970. Return (rslt)
  971. end function
  972. public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg);//UPDATEbegin(long arg_taskid,ref string arg_msg)
  973. //从置对象,设定业务类型与关联ID,准备更新进仓单
  974. //0 fail 1 success
  975. long rslt=1,CNT=0
  976. if arg_scid < 0 then
  977. arg_msg = '请选择分部'
  978. rslt = 0
  979. goto ext
  980. end if
  981. IF arg_taskid<=0 THEN
  982. rslt=0
  983. ARG_MSG='错误销售订单唯一码'
  984. goto ext
  985. end if
  986. if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  987. rslt=0
  988. goto ext
  989. end if
  990. IF priceflag = 1 THEN
  991. rslt = 0
  992. arg_msg = '单据已确认,不能修改'
  993. GOTO ext
  994. END IF
  995. if Status<>0 then
  996. rslt=0
  997. ARG_MSG='已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核'
  998. goto ext
  999. end if
  1000. it_newbegin=FALSE
  1001. it_updatebegin=TRUE
  1002. p_clearmx() //清除明细
  1003. scid=arg_scid
  1004. ext:
  1005. if rslt=0 then p_reset()
  1006. return rslt
  1007. end function
  1008. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i
  1009. Long ls_newtaskid
  1010. DateTime server_datetime
  1011. Long ll_taskid
  1012. String ls_sccode
  1013. String ls_plancode
  1014. String lss_cusname
  1015. IF IsNull(dscrp) THEN dscrp = ''
  1016. IF IsNull(dscrp2) THEN dscrp2 = ''
  1017. IF IsNull(assign_emp) THEN assign_emp = ''
  1018. IF IsNull(arg_operator) THEN arg_operator = ''
  1019. IF IsNull(paytype) THEN paytype = ''
  1020. IF IsNull(relcode) THEN relcode = ''
  1021. IF IsNull(banktypeid) THEN banktypeid = 0
  1022. IF IsNull(moneyid) THEN moneyid = 0
  1023. IF IsNull(damt) THEN damt = 0
  1024. IF IsNull(otheramt) THEN otheramt = 0
  1025. IF IsNull(mrate) THEN mrate = 0
  1026. IF IsNull(Kind) THEN Kind = 0
  1027. IF IsNull(freight) THEN freight = ''
  1028. IF IsNull(freight_tele) THEN freight_tele = ''
  1029. IF IsNull(cus_address) THEN cus_address = ''
  1030. IF IsNull(cus_tele) THEN cus_tele = ''
  1031. IF IsNull(cus_tele1) THEN cus_tele1 = ''
  1032. IF IsNull(cus_fax) THEN cus_fax = ''
  1033. IF IsNull(dscrp3) THEN dscrp3 = ''
  1034. IF IsNull(rel_rep) THEN rel_rep = ''
  1035. IF IsNull(fiebrelcode) THEN fiebrelcode = ''
  1036. IF IsNull(transcode) THEN transcode = ''
  1037. IF IsNull(carcode) THEN carcode = ''
  1038. IF IsNull(freight_address) THEN freight_address = ''
  1039. operator = arg_operator
  1040. IF it_newbegin = False And it_updatebegin = False THEN
  1041. rslt = 0
  1042. arg_msg = "非编辑状态不可以提交"
  1043. GOTO ext
  1044. END IF
  1045. //未注册限制
  1046. IF sys_if_register = 0 THEN
  1047. Long ll_bill_count
  1048. SELECT count(*)
  1049. INTO :ll_bill_count
  1050. From u_saletask;
  1051. IF sqlca.SQLCode <> 0 THEN
  1052. rslt = 0
  1053. arg_msg = "查询操作失败,销售订单数量 "
  1054. GOTO ext
  1055. END IF
  1056. IF ll_bill_count > 30 THEN
  1057. rslt = 0
  1058. arg_msg = "未注册版本,销售订单只能保存30张!"
  1059. GOTO ext
  1060. END IF
  1061. END IF
  1062. IF Trim(assign_emp) = '' THEN
  1063. rslt = 0
  1064. arg_msg = "请输入订单业务员"
  1065. GOTO ext
  1066. END IF
  1067. cnt = 0
  1068. SELECT count(*) INTO :cnt
  1069. FROM u_cust
  1070. Where cusid = :cusid Using commit_transaction ;
  1071. IF commit_transaction.SQLCode <> 0 THEN
  1072. rslt = 0
  1073. arg_msg = "查询操作失败,客户资料"
  1074. GOTO ext
  1075. END IF
  1076. IF cnt = 0 THEN
  1077. rslt = 0
  1078. arg_msg = "客户未定义或错误"
  1079. GOTO ext
  1080. END IF
  1081. cnt = 0
  1082. SELECT count(*) INTO :cnt
  1083. FROM cw_banktype
  1084. Where banktypeid = :banktypeid;
  1085. IF commit_transaction.SQLCode <> 0 THEN
  1086. arg_msg = '查询结算方式失败'
  1087. rslt = 0
  1088. GOTO ext
  1089. END IF
  1090. IF cnt = 0 THEN
  1091. arg_msg = '结算方式不存在'
  1092. rslt = 0
  1093. GOTO ext
  1094. END IF
  1095. cnt = 0
  1096. SELECT count(*) INTO :cnt
  1097. FROM cw_currency
  1098. Where moneyid = :moneyid;
  1099. IF commit_transaction.SQLCode <> 0 THEN
  1100. arg_msg = '查询币种失败'
  1101. rslt = 0
  1102. GOTO ext
  1103. END IF
  1104. IF cnt = 0 THEN
  1105. arg_msg = '币种资料不存在'
  1106. rslt = 0
  1107. GOTO ext
  1108. END IF
  1109. IF mrate = 0 THEN
  1110. arg_msg = '币种汇率错误'
  1111. rslt = 0
  1112. GOTO ext
  1113. END IF
  1114. SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction ;
  1115. IF commit_transaction.SQLCode <> 0 THEN
  1116. rslt = 0
  1117. arg_msg = "查询操作失败,日期 "
  1118. GOTO ext
  1119. END IF
  1120. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  1121. rslt = 0
  1122. arg_msg = "没有正确销售订单明细内容"
  1123. GOTO ext
  1124. END IF
  1125. cnt = 0
  1126. SELECT count(*) INTO :cnt
  1127. FROM u_user
  1128. Where username = :operator Using commit_transaction ;
  1129. IF commit_transaction.SQLCode <> 0 THEN
  1130. rslt = 0
  1131. arg_msg = "查询操作失败,操作员!"
  1132. GOTO ext
  1133. END IF
  1134. IF cnt = 0 THEN
  1135. rslt = 0
  1136. arg_msg = "操作员姓名未登记或已取消!"
  1137. GOTO ext
  1138. END IF
  1139. opdate = server_datetime //填写单据建立时间(最近修改时间)
  1140. // //计算单据总额,要扣除优惠金额
  1141. //msttakeamt -= otheramt
  1142. //messagebox("",msttakeamt)
  1143. IF sys_option_mst_multimoney = 1 THEN //使用多币种
  1144. msttakeamt -= otheramt
  1145. ELSE // 系统不使用多币种,转换为人民币
  1146. msttakeamt -= Round(otheramt * mrate, 2)
  1147. END IF
  1148. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  1149. IF taskid = 0 THEN //新建
  1150. ll_taskid = f_sys_scidentity(scid,"u_saletask","taskid",arg_msg,False,commit_transaction)
  1151. IF ll_taskid <= 0 THEN
  1152. rslt = 0
  1153. GOTO ext
  1154. END IF
  1155. //取分部代号
  1156. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  1157. rslt = 0
  1158. GOTO ext
  1159. END IF
  1160. taskcode = getid(scid,ls_sccode + 'SG',Date(server_datetime),False,commit_transaction)
  1161. IF taskcode = "err" THEN
  1162. taskcode = ''
  1163. rslt = 0
  1164. arg_msg = "无法获取销售订单编号"+"~n"+sqlca.SQLErrText
  1165. GOTO ext
  1166. END IF
  1167. //messagebox("",freight_address)
  1168. INSERT INTO u_saletask
  1169. ( scid,
  1170. taskcode,
  1171. kind,
  1172. cusid,
  1173. requiredate,
  1174. status,
  1175. opemp,
  1176. assign_emp,
  1177. permit_emp,
  1178. dscrp,
  1179. dscrp2,
  1180. opdate,
  1181. taskid,
  1182. damt,
  1183. otheramt,
  1184. freight,
  1185. taskdate,
  1186. transcode,
  1187. carcode,
  1188. banktypeid,
  1189. moneyid,
  1190. relcode,
  1191. paytype,
  1192. freight_tele,
  1193. cus_address,
  1194. cus_tele,
  1195. cus_tele1,
  1196. cus_fax,
  1197. mrate,
  1198. dscrp3,
  1199. rel_rep,
  1200. fiebrelcode,
  1201. msttakeamt,
  1202. freight_address)
  1203. VALUES ( :scid,
  1204. :taskcode,
  1205. :Kind,
  1206. :cusid,
  1207. :requiredate,
  1208. :status,
  1209. :operator,
  1210. :assign_emp,
  1211. :permit_emp,
  1212. :dscrp,
  1213. :dscrp2,
  1214. :opdate,
  1215. :ll_taskid,
  1216. :damt,
  1217. :otheramt,
  1218. :freight,
  1219. :taskdate,
  1220. :transcode,
  1221. :carcode,
  1222. :banktypeid,
  1223. :moneyid,
  1224. :relcode,
  1225. :paytype,
  1226. :freight_tele,
  1227. :cus_address,
  1228. :cus_tele,
  1229. :cus_tele1,
  1230. :cus_fax,
  1231. :mrate,
  1232. :dscrp3,
  1233. :rel_rep,
  1234. :fiebrelcode,
  1235. :msttakeamt,
  1236. :freight_address) Using commit_transaction ;
  1237. IF commit_transaction.SQLCode <> 0 THEN
  1238. rslt = 0
  1239. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_saletask') > 0 THEN
  1240. arg_msg = '插入销售订单操作失败,关键字ID重复'
  1241. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_saletask') > 0 THEN
  1242. arg_msg = '插入销售订单操作失败,单据编号重复'
  1243. ELSE
  1244. arg_msg = '插入销售订单操作失败,'+commit_transaction.SQLErrText
  1245. END IF
  1246. GOTO ext
  1247. END IF
  1248. //读取新taskid
  1249. taskid = ll_taskid
  1250. ELSE //////////////////////////////////////////////// //更新
  1251. if sys_saletask_autowaste = 1 then //登记修改
  1252. if uof_insertwaste(1,taskid,scid,arg_msg,false) = 0 then
  1253. arg_msg = '插入销售废弃单操作失败,'+commit_transaction.SQLErrText
  1254. rslt = 0
  1255. GOTO ext
  1256. end if
  1257. end if
  1258. UPDATE u_saletask
  1259. SET kind = :Kind,
  1260. cusid = :cusid,
  1261. requiredate = :requiredate,
  1262. assign_emp = :assign_emp,
  1263. dscrp = :dscrp,
  1264. dscrp2 = :dscrp2,
  1265. moddate = :opdate,
  1266. modemp = :operator,
  1267. damt = :damt,
  1268. otheramt = :otheramt,
  1269. freight = :freight,
  1270. taskdate = :taskdate,
  1271. transcode = :transcode,
  1272. carcode = :carcode,
  1273. banktypeid = :banktypeid,
  1274. moneyid = :moneyid,
  1275. relcode = :relcode,
  1276. paytype = :paytype,
  1277. freight_tele = :freight_tele,
  1278. cus_address = :cus_address,
  1279. cus_tele = :cus_tele,
  1280. cus_tele1 = :cus_tele1,
  1281. cus_fax = :cus_fax,
  1282. mrate = :mrate,
  1283. dscrp3 = :dscrp3,
  1284. rel_rep = :rel_rep,
  1285. msttakeamt = :msttakeamt,
  1286. freight_address = :freight_address
  1287. WHERE u_saletask.taskid = :taskid
  1288. AND scid = :scid
  1289. And status = 0 Using commit_transaction;
  1290. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  1291. rslt = 0
  1292. arg_msg = "更新销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  1293. GOTO ext
  1294. END IF
  1295. //删除原有明细
  1296. DELETE FROM u_saletaskmx
  1297. Where u_saletaskmx.taskid = :taskid And scid = :scid Using commit_transaction;
  1298. IF commit_transaction.SQLCode <> 0 THEN
  1299. rslt = 0
  1300. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  1301. GOTO ext
  1302. END IF
  1303. END IF
  1304. FOR i = 1 To it_mxbt
  1305. ls_plancode = ''
  1306. IF sys_option_taskplancode_auto = 1 THEN
  1307. ls_plancode = taskcode + '.' + String(i, '000')
  1308. ELSEIF sys_option_taskplancode_auto = 2 THEN
  1309. ls_plancode = taskcode
  1310. ELSEIF sys_option_taskplancode_auto = 3 THEN
  1311. ls_plancode = relcode
  1312. ELSEIF sys_option_taskplancode_auto = 4 THEN
  1313. ls_plancode = saletaskmx[i].plancode
  1314. ELSEIF sys_option_taskplancode_auto = 5 THEN
  1315. lss_cusname = ''
  1316. SELECT Top 1 Name Into :lss_cusname From u_cust Where cusid = :cusid;
  1317. IF IsNull(lss_cusname) THEN lss_cusname = ''
  1318. ls_plancode = lss_cusname
  1319. ELSEIF sys_option_taskplancode_auto = 6 THEN //自定义
  1320. datastore ds_pricestr
  1321. String ls_gongsi,s_rtn
  1322. ds_pricestr = Create datastore
  1323. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  1324. ds_pricestr.SetTransObject(sqlca)
  1325. ds_pricestr.Retrieve()
  1326. ls_gongsi = ''
  1327. ls_gongsi = 'f_plug_taskplancode( ' + "'" + taskcode + "'" + " , " + string(i) + " ) "
  1328. s_rtn = ''
  1329. s_rtn = ds_pricestr.Modify('cmpl.expression= "'+ls_gongsi+'"')
  1330. IF s_rtn <> '' THEN
  1331. s_rtn = ''
  1332. END IF
  1333. s_rtn = String(ds_pricestr.Object.cmpl[1])
  1334. IF s_rtn = 'false' Or s_rtn = '' THEN
  1335. s_rtn = ''
  1336. END IF
  1337. ls_plancode=s_rtn
  1338. END IF
  1339. INSERT INTO u_saletaskmx
  1340. ( scid,
  1341. taskid,
  1342. mtrlid,
  1343. saleqty,
  1344. price,
  1345. plprice,
  1346. mxdscrp,
  1347. fprice,
  1348. rebate,
  1349. status,
  1350. printid,
  1351. woodcode,
  1352. pcode,
  1353. mtrlcuscode,
  1354. enprice,
  1355. outtype,
  1356. dftsaleprice,
  1357. unit,
  1358. rate,
  1359. usaleqty,
  1360. ware_enprice,
  1361. ware_fprice,
  1362. ware_price,
  1363. orderqty,
  1364. needbuyqty,
  1365. formula,
  1366. addqty,
  1367. mxdscrp2,
  1368. needwfjgqty,
  1369. plancode,
  1370. tax,
  1371. packqty,
  1372. gbrate,
  1373. enamt,
  1374. enamt_tax,
  1375. bsamt,
  1376. bsamt_tax,
  1377. net_weight,
  1378. gross_weight,
  1379. cubage,
  1380. requiredate,
  1381. mxdscrp3,
  1382. mxdscrp4,
  1383. priceformula,
  1384. enprice_notax,
  1385. otherprice)
  1386. VALUES (:scid,
  1387. :taskid,
  1388. :saletaskmx[i].mtrlid,
  1389. :saletaskmx[i].saleqty,
  1390. :saletaskmx[i].acprice,
  1391. :saletaskmx[i].plprice,
  1392. :saletaskmx[i].dscrp,
  1393. :saletaskmx[i].fprice,
  1394. :saletaskmx[i].rebate,
  1395. :saletaskmx[i].status,
  1396. :saletaskmx[i].printid,
  1397. :saletaskmx[i].woodcode,
  1398. :saletaskmx[i].pcode,
  1399. :saletaskmx[i].mtrlcuscode,
  1400. :saletaskmx[i].enprice,
  1401. :saletaskmx[i].outtype,
  1402. :saletaskmx[i].dftsaleprice,
  1403. :saletaskmx[i].unit,
  1404. :saletaskmx[i].rate,
  1405. :saletaskmx[i].usaleqty,
  1406. :saletaskmx[i].ware_enprice,
  1407. :saletaskmx[i].ware_fprice,
  1408. :saletaskmx[i].ware_price,
  1409. :saletaskmx[i].orderqty,
  1410. :saletaskmx[i].needbuyqty,
  1411. :saletaskmx[i].formula,
  1412. :saletaskmx[i].addqty,
  1413. :saletaskmx[i].mxdscrp2,
  1414. :saletaskmx[i].needwfjgqty,
  1415. :ls_plancode,
  1416. :saletaskmx[i].tax,
  1417. :saletaskmx[i].packqty,
  1418. :saletaskmx[i].gbrate,
  1419. :saletaskmx[i].enamt,
  1420. :saletaskmx[i].enamt_tax,
  1421. :saletaskmx[i].bsamt,
  1422. :saletaskmx[i].bsamt_tax,
  1423. :saletaskmx[i].net_weight,
  1424. :saletaskmx[i].gross_weight,
  1425. :saletaskmx[i].cubage,
  1426. :saletaskmx[i].requiredate,
  1427. :saletaskmx[i].mxdscrp3,
  1428. :saletaskmx[i].mxdscrp4,
  1429. :saletaskmx[i].priceformula,
  1430. :saletaskmx[i].enprice_notax,
  1431. :saletaskmx[i].otherprice) Using commit_transaction;
  1432. IF commit_transaction.SQLCode <> 0 THEN
  1433. IF it_newbegin THEN taskid = 0 //还原taskid
  1434. rslt = 0
  1435. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_saletaskmx') > 0 THEN
  1436. arg_msg = '插入销售订单明细操作失败,关键字单据ID重复,分部ID,序号'
  1437. ELSE
  1438. arg_msg = '插入销售订单明细操作失败,'+commit_transaction.SQLErrText
  1439. END IF
  1440. GOTO ext
  1441. END IF
  1442. NEXT
  1443. it_newbegin = False
  1444. it_updatebegin = False
  1445. ext:
  1446. IF rslt = 0 THEN
  1447. ROLLBACK Using commit_transaction;
  1448. p_clearmx()
  1449. ELSEIF arg_ifcommit And rslt = 1 THEN
  1450. COMMIT Using commit_transaction;
  1451. END IF
  1452. RETURN rslt
  1453. end function
  1454. public function integer trycmplsaletask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//trycmplsaletask(arg_taskid,arg_msg,arg_ifcommit)
  1455. Int rslt = 1,cnt = 0,ll_status
  1456. DateTime null_dt
  1457. SetNull(null_dt)
  1458. IF arg_taskid <= 0 THEN
  1459. rslt = 0
  1460. arg_msg = '错误销售订单唯一码'
  1461. GOTO ext
  1462. END IF
  1463. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  1464. rslt = 0
  1465. GOTO ext
  1466. END IF
  1467. IF status <> 1 And status <> 5 THEN
  1468. rslt = 1
  1469. IF status <> 1 THEN
  1470. arg_msg = "销售订单只有在进行状态下才可以执行设完成状态"
  1471. ELSEIF status <> 5 THEN
  1472. arg_msg = "销售订单只有在完成状态下才可以执行撤消完成状态"
  1473. END IF
  1474. GOTO ext
  1475. END IF
  1476. Decimal ls_zerook
  1477. Boolean if_finish
  1478. if_finish = True
  1479. DECLARE zero_cur CURSOR FOR
  1480. SELECT u_saletaskmx.usaleqty - u_saletaskmx.consignedqty - u_saletaskmx.stopqty
  1481. FROM u_saletaskmx
  1482. WHERE ( u_saletaskmx.taskid = :arg_taskid )
  1483. AND ( u_saletaskmx.scid = :arg_scid )
  1484. Using commit_transaction ;
  1485. OPEN zero_cur;
  1486. FETCH zero_cur Into :ls_zerook;
  1487. DO WHILE commit_transaction.SQLCode = 0
  1488. IF if_finish THEN
  1489. IF ls_zerook > 0 THEN if_finish = False
  1490. END IF
  1491. FETCH zero_cur Into :ls_zerook;
  1492. LOOP
  1493. CLOSE zero_cur;
  1494. IF status = 1 And if_finish THEN
  1495. UPDATE u_saletask
  1496. SET status = 5,
  1497. accomplishdate = getdate(),
  1498. finishemp = :publ_operator
  1499. WHERE ( u_saletask.taskid = :arg_taskid )
  1500. And u_saletask.scid = :arg_scid Using commit_transaction;
  1501. IF commit_transaction.SQLCode <> 0 THEN
  1502. rslt = 0
  1503. arg_msg = "销售订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1504. GOTO ext
  1505. END IF
  1506. END IF
  1507. IF status = 5 And Not if_finish THEN
  1508. UPDATE u_saletask
  1509. SET status = 1,
  1510. accomplishdate = :null_dt,
  1511. finishemp = ''
  1512. WHERE ( u_saletask.taskid = :arg_taskid )
  1513. And u_saletask.scid = :arg_scid Using commit_transaction;
  1514. IF commit_transaction.SQLCode <> 0 THEN
  1515. rslt = 0
  1516. arg_msg = "销售订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1517. GOTO ext
  1518. END IF
  1519. END IF
  1520. it_newbegin = False
  1521. it_updatebegin = False
  1522. ext:
  1523. IF rslt = 0 THEN
  1524. ROLLBACK Using commit_transaction;
  1525. ELSEIF arg_ifcommit THEN
  1526. COMMIT Using commit_transaction;
  1527. END IF
  1528. p_reset()
  1529. Return (rslt)
  1530. end function
  1531. public function integer newbegin (long arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单
  1532. //0 fail 1 success
  1533. long rslt=1,CNT=0
  1534. if arg_scid < 0 then
  1535. arg_msg = '请选择分部'
  1536. rslt = 0
  1537. goto ext
  1538. end if
  1539. p_reset()
  1540. it_newbegin=TRUE
  1541. it_updatebegin=FALSE
  1542. scid=arg_scid
  1543. ext:
  1544. if rslt = 0 then p_reset()
  1545. return rslt
  1546. end function
  1547. public function integer uof_del_del (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1548. DELETE FROM u_saletaskmx_mtrlchange
  1549. WHERE scid = :arg_scid
  1550. AND taskid = :arg_taskid
  1551. AND mtrlid = :arg_mtrlid
  1552. AND status = :arg_status
  1553. AND woodcode = :arg_woodcode
  1554. And pcode = :arg_pcode;
  1555. IF sqlca.SQLCode <> 0 THEN
  1556. arg_msg = '删除原有换料失败'
  1557. rslt = 0
  1558. GOTO ext
  1559. END IF
  1560. ext:
  1561. IF rslt = 0 THEN
  1562. ROLLBACK;
  1563. ELSEIF rslt = 1 And arg_ifcommit THEN
  1564. COMMIT;
  1565. END IF
  1566. RETURN rslt
  1567. end function
  1568. public function integer uof_update_mx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlchangecode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1569. UPDATE u_saletaskmx
  1570. SET mtrlchangecode = :arg_mtrlchangecode
  1571. WHERE scid = :arg_scid
  1572. AND taskid = :arg_taskid
  1573. And printid = :arg_printid;
  1574. IF sqlca.SQLCode <> 0 THEN
  1575. arg_msg = '更新换料备注失败,'+sqlca.SQLErrText
  1576. rslt = 0
  1577. GOTO ext
  1578. END IF
  1579. ext:
  1580. IF rslt = 0 THEN
  1581. ROLLBACK;
  1582. ELSEIF rslt = 1 And arg_ifcommit THEN
  1583. COMMIT;
  1584. END IF
  1585. RETURN rslt
  1586. end function
  1587. public function integer uof_mtrlchange (long arg_scid, long arg_taskid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, long arg_smtrlid, long arg_omtrlid, string arg_pfgroup, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1588. INSERT INTO u_saletaskmx_mtrlchange
  1589. (scid,
  1590. taskid,
  1591. mtrlid,
  1592. status,
  1593. woodcode,
  1594. pcode,
  1595. smtrlid,
  1596. omtrlid,
  1597. pfgroup)
  1598. VALUES
  1599. (:arg_scid,
  1600. :arg_taskid,
  1601. :arg_mtrlid,
  1602. :arg_status,
  1603. :arg_woodcode,
  1604. :arg_pcode,
  1605. :arg_smtrlid,
  1606. :arg_omtrlid,
  1607. :arg_pfgroup);
  1608. IF sqlca.SQLCode <> 0 THEN
  1609. arg_msg = '建立换料失败'+sqlca.SQLErrText
  1610. rslt = 0
  1611. GOTO ext
  1612. END IF
  1613. ext:
  1614. IF rslt = 0 THEN
  1615. ROLLBACK;
  1616. ELSEIF rslt = 1 And arg_ifcommit THEN
  1617. COMMIT;
  1618. END IF
  1619. RETURN rslt
  1620. end function
  1621. public function integer acceptmx_mx (long arg_scid, long arg_mtrlwareid, decimal arg_qty, ref string arg_msg);//return 0 fail 1 success
  1622. // 函数增加一个明细项
  1623. Long rslt = 1,cnt = 0,ls_i
  1624. Decimal ld_noallocqty,ld_allocqty
  1625. ////清除空值
  1626. //IF IsNull(arg_scid) THEN arg_scid = 0
  1627. //IF IsNull(arg_mtrlwareid) THEN arg_mtrlid = 0
  1628. //IF IsNull(arg_qty) THEN arg_qty = 0
  1629. //
  1630. //IF arg_mtrlwareid = 0 OR arg_qty = 0 THEN
  1631. // rslt = 1
  1632. // GOTO ext
  1633. //END IF
  1634. //
  1635. //
  1636. //
  1637. //
  1638. //SELECT noallocqty,allocqty INTO :ld_noallocqty,:ld_allocqty
  1639. // FROM u_mtrlware
  1640. // Where scid = :arg_scid
  1641. // and mtrlwareid = :arg_mtrlwareid;
  1642. //IF sqlca.SQLCode <> 0 THEN
  1643. // arg_msg = '查询库存资料失败'
  1644. // rslt = 0
  1645. // GOTO ext
  1646. //END IF
  1647. //
  1648. //IF arg_qty > ld_noallocqty - ld_allocqty THEN
  1649. // rslt = 0
  1650. // arg_msg = "库存" + String(arg_mtrlcode)+" 单价错误"
  1651. // GOTO ext
  1652. //END IF
  1653. //
  1654. ////检查物料id
  1655. //SELECT count(*)
  1656. // INTO :cnt
  1657. // FROM u_mtrldef
  1658. // Where u_mtrldef.mtrlid = :arg_mtrlid ;
  1659. //IF sqlca.SQLCode <> 0 THEN
  1660. // rslt = 0
  1661. // arg_msg = "查询操作失败,产品编号"
  1662. // GOTO ext
  1663. //END IF
  1664. //
  1665. //IF cnt = 0 THEN
  1666. // rslt = 0
  1667. // arg_msg = "错误的产品编号: "+String(arg_mtrlcode)
  1668. // GOTO ext
  1669. //END IF
  1670. //
  1671. //String ls_status,ls_pcode,ls_woodcode
  1672. //
  1673. //IF sys_option_price_if_status = 0 THEN
  1674. // ls_status = ''
  1675. // ls_pcode = ''
  1676. // ls_woodcode = ''
  1677. //ELSE
  1678. // ls_status = arg_status
  1679. // ls_pcode = arg_pcode
  1680. // ls_woodcode = arg_woodcode
  1681. //END IF
  1682. //
  1683. //
  1684. //SELECT top 1 price INTO :ld_dftsaleprice
  1685. // FROM u_sale_price_list,u_sale_price_mx
  1686. // WHERE u_sale_price_list.pricelistid = u_sale_price_mx.pricelistid
  1687. // AND u_sale_price_list.dftflag = 1
  1688. // AND u_sale_price_mx.mtrlid = :arg_mtrlid
  1689. // AND u_sale_price_mx.status = :ls_status
  1690. // AND u_sale_price_mx.pcode = :ls_woodcode
  1691. // AND u_sale_price_mx.pcode = :ls_pcode
  1692. // AND u_sale_price_list.moneyid = :moneyid;
  1693. //
  1694. //IF sqlca.SQLCode <> 0 THEN ld_dftsaleprice = 0
  1695. //
  1696. //FOR ls_i = 1 TO it_mxbt //合并重复项
  1697. // IF saletaskmx[it_mxbt].mtrlid = arg_mtrlid AND &
  1698. // saletaskmx[it_mxbt].status = arg_status AND &
  1699. // saletaskmx[it_mxbt].pcode = arg_pcode AND &
  1700. // saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode AND &
  1701. // saletaskmx[it_mxbt].woodcode = arg_woodcode THEN
  1702. //
  1703. // saletaskmx[it_mxbt].saleqty = saletaskmx[it_mxbt].saleqty+arg_qty
  1704. // rslt = 1
  1705. // GOTO ext
  1706. // END IF
  1707. //NEXT
  1708. //
  1709. ////写入内容
  1710. //it_mxbt++
  1711. //saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice
  1712. //saletaskmx[it_mxbt].mtrlid = arg_mtrlid
  1713. //saletaskmx[it_mxbt].saleqty = arg_qty
  1714. //saletaskmx[it_mxbt].plprice = arg_planprice
  1715. //saletaskmx[it_mxbt].dscrp = arg_dscrp
  1716. //saletaskmx[it_mxbt].mtrlcode = arg_mtrlcode
  1717. //saletaskmx[it_mxbt].status = arg_status
  1718. //saletaskmx[it_mxbt].printid = arg_printid
  1719. //saletaskmx[it_mxbt].woodcode = arg_woodcode
  1720. //saletaskmx[it_mxbt].pcode = arg_pcode
  1721. //saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  1722. //
  1723. //saletaskmx[it_mxbt].enprice = arg_fprice
  1724. //saletaskmx[it_mxbt].rebate = arg_rebate
  1725. //saletaskmx[it_mxbt].fprice = arg_fprice * ld_rate
  1726. //saletaskmx[it_mxbt].acprice = arg_fprice * ld_rate * arg_rebate
  1727. //
  1728. //saletaskmx[it_mxbt].outtype = arg_outtype
  1729. //ext:
  1730. IF rslt = 0 THEN p_clearmx()
  1731. RETURN(rslt)
  1732. end function
  1733. public function integer addmxcmpl_assign (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);//0:增加需排产数-已进仓数; 生产进仓调用 //, 采购进仓调用
  1734. //2:增加需订购数-已订购数; 采购订单调用
  1735. //3:增加需外协数-已外协数; 外协订单调用
  1736. //4:采购进仓调用
  1737. Int rslt = 1
  1738. Long i
  1739. Int li_flag
  1740. //查找单号
  1741. Dec lde_orderQty,lde_AssignQty,lde_needbuyqty,lde_needwfjgqty
  1742. Dec lde_buytaskqty,lde_wfjgtaskqty
  1743. Decimal ll_taskrate,ll_taskaddqty
  1744. String ls_mtrlcode
  1745. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  1746. rslt = 0
  1747. GOTO ext
  1748. END IF
  1749. IF status = 0 THEN
  1750. arg_msg = '订单未审核,不能更新!'
  1751. rslt = 0
  1752. GOTO ext
  1753. END IF
  1754. SELECT orderqty,needbuyqty,needwfjgqty,
  1755. AssignQty,buytaskqty,wfjgtaskqty
  1756. INTO :lde_orderQty,:lde_needbuyqty,:lde_needwfjgqty,
  1757. :lde_AssignQty,:lde_buytaskqty,:lde_wfjgtaskqty
  1758. FROM u_SaleTaskMx WHERE scid = :arg_scid AND
  1759. taskid = :arg_taskid AND
  1760. printid = :arg_printid Using commit_transaction;
  1761. IF commit_transaction.SQLCode <> 0 THEN
  1762. arg_msg = '查询销售订单信息失败!'+commit_transaction.SQLErrText
  1763. rslt = 0
  1764. GOTO ext
  1765. END IF
  1766. SELECT mtrlcode,taskrate,taskaddqty
  1767. INTO :ls_mtrlcode,:ll_taskrate,:ll_taskaddqty
  1768. FROM u_mtrldef
  1769. Where mtrlid = :arg_mtrlid Using commit_transaction;
  1770. IF commit_transaction.SQLCode <> 0 THEN
  1771. arg_msg = '查询物料资料失败!'+commit_transaction.SQLErrText
  1772. rslt = 0
  1773. GOTO ext
  1774. END IF
  1775. CHOOSE CASE arg_plantype
  1776. CASE 0 //自制, 采购, 外协 总和, 进仓总数
  1777. IF sys_option_inware_cp_assignqty = 0 THEN
  1778. IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty - lde_AssignQty < arg_addqty THEN
  1779. arg_msg = '物料['+ls_mtrlcode +'],进仓数量大于销售订单安排未进仓数量'
  1780. rslt = 0
  1781. GOTO ext
  1782. END IF
  1783. END IF
  1784. IF sys_version = 802003 THEN //只有工业版+是用审核的
  1785. IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty <= lde_AssignQty + arg_addqty THEN
  1786. li_flag = 5
  1787. ELSE
  1788. IF lde_orderQty > 0 THEN
  1789. li_flag = 1
  1790. ELSE
  1791. li_flag = 0
  1792. END IF
  1793. END IF
  1794. ELSE
  1795. li_flag = 0
  1796. END IF
  1797. UPDATE u_SaleTaskMx
  1798. SET AssignQty = AssignQty + :arg_addqty,
  1799. flag = :li_flag
  1800. WHERE scid = :scid AND
  1801. taskid = :arg_taskid AND
  1802. printid = :arg_printid
  1803. Using commit_transaction;
  1804. IF commit_transaction.SQLCode <> 0 THEN
  1805. arg_msg = '更新销售订单已进仓数量失败~n'+commit_transaction.SQLErrText
  1806. rslt = 0
  1807. GOTO ext
  1808. END IF
  1809. CASE 2 //采购
  1810. //ll_needbuyqty * (1 +ll_taskrate ) + ll_taskaddqty 超收比例和超收数量
  1811. IF lde_needbuyqty * (1 +ll_taskrate ) + ll_taskaddqty < lde_buytaskqty + arg_addqty THEN
  1812. rslt = 0
  1813. arg_msg = "物料["+ ls_mtrlcode +"],订货数大于销售订单可订货数"
  1814. IF ll_taskrate <> 0 THEN
  1815. arg_msg += "~n超订比例["+String(ll_taskrate,'#,##0.####')+"]"
  1816. END IF
  1817. IF ll_taskaddqty <> 0 THEN
  1818. arg_msg += "~n超订数量["+String(ll_taskaddqty,'#,##0.####')+"]"
  1819. END IF
  1820. GOTO ext
  1821. END IF
  1822. UPDATE u_saletaskmx
  1823. SET Buytaskqty = Buytaskqty + :arg_addqty
  1824. WHERE scid = :scid AND
  1825. taskid = :arg_taskid AND
  1826. printid = :arg_printid
  1827. Using commit_transaction;
  1828. IF commit_transaction.SQLCode <> 0 THEN
  1829. rslt = 0
  1830. arg_msg = '更新销售订单已订购数量失败~n'+commit_transaction.SQLErrText
  1831. GOTO ext
  1832. END IF
  1833. CASE 3 //外协
  1834. IF lde_needwfjgqty < lde_wfjgtaskqty + arg_addqty THEN
  1835. rslt = 0
  1836. arg_msg = "物料["+ ls_mtrlcode +"],外协订货数大于销售订单未外协数"
  1837. GOTO ext
  1838. END IF
  1839. UPDATE u_saletaskmx
  1840. SET wfjgtaskqty = wfjgtaskqty + :arg_addqty
  1841. WHERE scid = :scid AND
  1842. taskid = :arg_taskid AND
  1843. printid = :arg_printid
  1844. Using commit_transaction;
  1845. IF commit_transaction.SQLCode <> 0 THEN
  1846. rslt = 0
  1847. arg_msg = '更新销售订单已外协数量失败~n'+commit_transaction.SQLErrText
  1848. GOTO ext
  1849. END IF
  1850. CASE 4//采购收货
  1851. IF sys_version = 802003 THEN //只有工业版+是用审核的
  1852. IF lde_orderQty + lde_needbuyqty + lde_needwfjgqty <= lde_AssignQty + arg_addqty THEN
  1853. li_flag = 5
  1854. ELSE
  1855. IF lde_orderQty > 0 THEN
  1856. li_flag = 1
  1857. ELSE
  1858. li_flag = 0
  1859. END IF
  1860. END IF
  1861. ELSE
  1862. li_flag = 0
  1863. END IF
  1864. UPDATE u_SaleTaskMx
  1865. SET AssignQty = AssignQty + :arg_addqty,
  1866. flag = :li_flag
  1867. WHERE scid = :scid AND
  1868. taskid = :arg_taskid AND
  1869. printid = :arg_printid
  1870. Using commit_transaction;
  1871. IF commit_transaction.SQLCode <> 0 THEN
  1872. arg_msg = '更新销售订单已进仓数量失败~n'+commit_transaction.SQLErrText
  1873. rslt = 0
  1874. GOTO ext
  1875. END IF
  1876. END CHOOSE
  1877. ext:
  1878. IF rslt = 1 And arg_ifcommit THEN
  1879. COMMIT Using commit_transaction;
  1880. ELSEIF rslt = 0 THEN
  1881. ROLLBACK Using commit_transaction;
  1882. END IF
  1883. arg_msg = "销售订单["+taskcode+"]"+arg_msg
  1884. RETURN rslt
  1885. end function
  1886. public function integer uof_update_relcode (long arg_scid, long arg_taskid, string arg_newrelcode, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newrelcode)
  1887. //0 fail 1 SUCCESS
  1888. Int rslt = 1
  1889. arg_newrelcode = Trim(arg_newrelcode)
  1890. IF p_getinfo(arg_scid,arg_taskid,arG_MSG) = 0 THEN
  1891. rslt = 0
  1892. GOTO ext
  1893. END IF
  1894. IF status = 0 THEN
  1895. rslt = 0
  1896. arG_MSG = "待销售审核状态下不可用"
  1897. GOTO ext
  1898. END IF
  1899. UPDATE u_saletask
  1900. SET relcode = :arg_newrelcode
  1901. Where scid = :arg_scid
  1902. and u_saletask.taskid = :arg_taskid
  1903. USING commit_transaction ;
  1904. IF commit_transaction.SQLCode <> 0 THEN
  1905. rslt = 0
  1906. arG_MSG = "因网络或其它原因导致修改销售订单相关号操作失败"+"~n"+ commit_transaction.SQLErrText
  1907. GOTO ext
  1908. END IF
  1909. ext:
  1910. IF rslt = 0 THEN
  1911. ROLLBACK USING commit_transaction;
  1912. ELSEIF arg_ifcommit THEN
  1913. COMMIT USING commit_transaction;
  1914. END IF
  1915. p_reset()
  1916. Return (rslt)
  1917. end function
  1918. public function integer uof_add_0_mtrlware (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1919. Long ll_storageid_arr[],ll_storageid
  1920. Long ll_scid_arr[],ll_scid
  1921. Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware
  1922. String ll_storagename_arr[],ls_storagename
  1923. Long ll_inwaretype_arr[],ll_inwaretype
  1924. Long ll_j,count,ll_i
  1925. Decimal ld_add_qty
  1926. Decimal ld_orderqty
  1927. Long if_plancode_arr[],if_plancode
  1928. String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode
  1929. Long ll_mtrlwareid,ll_mtrlid
  1930. Long ll_cusid
  1931. String ls_plancode
  1932. //成品仓加0库存
  1933. //-----------------------------------------------
  1934. //USING commit_transaction;
  1935. IF sys_option_saletask_addware = 1 &
  1936. Or ( sys_option_saletask_addware_taskqty = 1 And sys_option_saletask_addware_taskqty_qty > 0 ) &
  1937. Or sys_option_saletask_addware_taskqty = 2 THEN
  1938. DECLARE pf_cur CURSOR FOR
  1939. SELECT u_storage.storageid,
  1940. u_storage.storagename,
  1941. u_storage.scid,
  1942. u_storage.balctype,
  1943. u_storage.inwaretype,
  1944. u_storage.if_plancode
  1945. FROM u_storage
  1946. WHERE ( u_storage.Mtrlprp = 0 ) AND
  1947. ( u_storage.scid = :scid )
  1948. Using commit_transaction;
  1949. OPEN pf_cur;
  1950. FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode;
  1951. DO WHILE commit_transaction.SQLCode = 0
  1952. count++
  1953. ll_storageid_arr[count] = ll_storageid
  1954. ll_storagename_arr[count] = ls_storagename
  1955. ll_scid_arr[count] = ll_scid
  1956. ll_if_cus_mtrlware_arr[count] = ll_if_cus_mtrlware
  1957. ll_inwaretype_arr[count] = ll_inwaretype
  1958. if_plancode_arr[count] = if_plancode
  1959. FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode;
  1960. LOOP
  1961. CLOSE pf_cur;
  1962. FOR ll_i = 1 To it_mxbt
  1963. ll_mtrlid = saletaskmx[ll_i].mtrlid
  1964. ls_mtrlcode = saletaskmx[ll_i].mtrlcode
  1965. ls_status = saletaskmx[ll_i].Status
  1966. ls_pcode = saletaskmx[ll_i].pcode
  1967. ls_woodcode = saletaskmx[ll_i].woodcode
  1968. ld_orderqty = saletaskmx[ll_i].orderqty
  1969. IF sys_option_saletask_addware = 1 THEN
  1970. ld_add_qty = 0
  1971. ELSEIF sys_option_saletask_addware_taskqty = 1 THEN
  1972. ld_add_qty = sys_option_saletask_addware_taskqty_qty
  1973. ELSEIF sys_option_saletask_addware_taskqty = 2 THEN
  1974. ld_add_qty = ld_orderqty
  1975. ELSE
  1976. ld_add_qty = 0
  1977. END IF
  1978. FOR ll_j = 1 To count
  1979. ll_cusid = 0
  1980. IF ll_if_cus_mtrlware_arr[ll_j] = 1 THEN
  1981. ll_cusid = cusid
  1982. ELSE
  1983. ll_cusid = 0
  1984. END IF
  1985. IF if_plancode_arr[ll_j] = 0 THEN
  1986. ls_plancode = ''
  1987. ELSE
  1988. ls_plancode = saletaskmx[ll_i].plancode
  1989. END IF
  1990. // IF if_plancode_arr[ll_j] = 1 AND ll_inwaretype_arr[ll_j] = 3 THEN
  1991. // ls_plancode = taskcode
  1992. // ELSE
  1993. // ls_plancode = ''
  1994. // END IF
  1995. // ls_plancode = saletaskmx[ll_i].plancode
  1996. SELECT top 1 mtrlwareid INTO :ll_mtrlwareid
  1997. FROM u_mtrlware
  1998. WHERE mtrlid = :ll_mtrlid
  1999. AND status = :ls_status
  2000. AND storageid = :ll_storageid_arr[ll_j]
  2001. AND woodcode = :ls_woodcode
  2002. AND pcode = :ls_pcode
  2003. AND SCID = :ll_scid_arr[ll_j]
  2004. AND ( sptid = :ll_cusid OR :ll_cusid = 0 )
  2005. AND plancode = :ls_plancode
  2006. Using commit_transaction;
  2007. IF commit_transaction.SQLCode = 0 THEN
  2008. UPDATE u_mtrlware
  2009. SET noallocqty = noallocqty + :ld_add_qty
  2010. WHERE mtrlwareid = :ll_mtrlwareid
  2011. AND scid = :ll_scid_arr[ll_j]
  2012. Using commit_transaction;
  2013. IF commit_transaction.SQLCode <> 0 THEN
  2014. ARG_MSG = '产品:' + ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'增加库存失败'
  2015. rslt = 0
  2016. GOTO ext
  2017. END IF
  2018. ELSEIF commit_transaction.SQLCode = -1 THEN
  2019. ARG_MSG = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败'
  2020. rslt = 0
  2021. GOTO ext
  2022. ELSEIF commit_transaction.SQLCode = 100 THEN
  2023. ll_mtrlwareid = 0
  2024. ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",ARG_MSG,False,commit_transaction)
  2025. IF ll_mtrlwareid <= 0 THEN
  2026. rslt = 0
  2027. GOTO ext
  2028. END IF
  2029. INSERT INTO u_mtrlware(scid,
  2030. mtrlwareid,
  2031. mtrlid,
  2032. storageid,
  2033. noallocqty,
  2034. status,
  2035. woodcode,
  2036. pcode,
  2037. sptid,
  2038. plancode)
  2039. VALUES(:ll_scid_arr[ll_j],
  2040. :ll_mtrlwareid,
  2041. :ll_mtrlid,
  2042. :ll_storageid_arr[ll_j],
  2043. :ld_add_qty,
  2044. :ls_status,
  2045. :ls_woodcode,
  2046. :ls_pcode,
  2047. :ll_cusid,
  2048. :ls_plancode)
  2049. Using commit_transaction;
  2050. IF commit_transaction.SQLCode <> 0 THEN
  2051. ARG_MSG = '产品:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'加0库存失败或物料已经有库存,请检查'
  2052. rslt = 0
  2053. GOTO ext
  2054. END IF
  2055. END IF
  2056. NEXT
  2057. NEXT
  2058. END IF
  2059. ext:
  2060. IF rslt = 0 THEN
  2061. ROLLBACK Using commit_transaction;
  2062. ELSEIF arg_ifcommit THEN
  2063. COMMIT Using commit_transaction;
  2064. END IF
  2065. RETURN rslt
  2066. end function
  2067. public function integer acceptmx (long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcuscode, long arg_printid, integer arg_outtype, ref string arg_msg, string arg_unit, decimal arg_rate, string arg_formula, decimal arg_addqty, string arg_mxdscrp2, decimal arg_needwfjgqty, string arg_plancode, decimal arg_tax);//====================================================================
  2068. // 事件: uo_saletask.Script - acceptmx ( long arg_mtrlid, decimal arg_usaleqty, decimal arg_orderqty, decimal arg_needbuyqty, decimal arg_enprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, string arg_status, string arg_woodcode, string()
  2069. //--------------------------------------------------------------------
  2070. // 描述:
  2071. //--------------------------------------------------------------------
  2072. // 参数:
  2073. // value long arg_mtrlid
  2074. // value decimal arg_usaleqty
  2075. // value decimal arg_orderqty
  2076. // value decimal arg_needbuyqty
  2077. // value decimal arg_enprice
  2078. // value decimal arg_rebate
  2079. // value decimal arg_planprice
  2080. // value string arg_dscrp
  2081. // value string arg_mtrlcode
  2082. // value string arg_status
  2083. // value string arg_woodcode
  2084. // value string arg_pcode
  2085. // value string arg_mtrlcuscode
  2086. // value long arg_printid
  2087. // value integer arg_outtype
  2088. // reference string arg_msg
  2089. // value string arg_unit
  2090. // value decimal arg_rate
  2091. // value string arg_formula
  2092. // value decimal arg_addqty
  2093. // value string arg_mxdscrp2
  2094. // value decimal arg_needwfjgqty
  2095. // value string arg_plancode
  2096. // value decimal arg_tax
  2097. //--------------------------------------------------------------------
  2098. // 返回: (none)
  2099. //--------------------------------------------------------------------
  2100. // 作者: LHD 日期: 2013年10月23日
  2101. //--------------------------------------------------------------------
  2102. // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved.
  2103. //--------------------------------------------------------------------
  2104. // 修改历史:
  2105. //
  2106. //====================================================================
  2107. s_saletaskmx s_mx
  2108. s_mx.mtrlid = arg_mtrlid
  2109. s_mx.usaleqty = arg_usaleqty
  2110. s_mx.orderqty = arg_orderqty
  2111. s_mx.needbuyqty = arg_needbuyqty
  2112. s_mx.enprice = arg_enprice
  2113. s_mx.rebate = arg_rebate
  2114. s_mx.planprice = arg_planprice
  2115. s_mx.dscrp = arg_dscrp
  2116. s_mx.mtrlcode = arg_mtrlcode
  2117. s_mx.status = arg_status
  2118. s_mx.woodcode = arg_woodcode
  2119. s_mx.pcode = arg_pcode
  2120. s_mx.mtrlcuscode = arg_mtrlcuscode
  2121. s_mx.printid = arg_printid
  2122. s_mx.outtype = arg_outtype
  2123. s_mx.unit = arg_unit
  2124. s_mx.rate = arg_rate
  2125. s_mx.formula = arg_formula
  2126. s_mx.addqty = arg_addqty
  2127. s_mx.mxdscrp2 = arg_mxdscrp2
  2128. s_mx.needwfjgqty = arg_needwfjgqty
  2129. s_mx.plancode = arg_plancode
  2130. s_mx.tax = arg_tax
  2131. return acceptmx(s_mx, arg_msg)
  2132. /*
  2133. //return 0 fail 1 success
  2134. // 函数增加一个明细项
  2135. Long rslt = 1,cnt = 0,ls_i
  2136. Decimal ld_dftsaleprice, lde_saleqty
  2137. IF it_newbegin = False And it_updatebegin = False THEN
  2138. rslt = 0
  2139. arg_msg = "非编辑状态不可以使用,操作取消"
  2140. GOTO ext
  2141. END IF
  2142. //清除空值
  2143. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  2144. IF IsNull(arg_usaleqty) THEN arg_usaleqty = 0
  2145. IF IsNull(arg_orderqty) THEN arg_orderqty = 0
  2146. IF IsNull(arg_needbuyqty) THEN arg_needbuyqty = 0
  2147. IF IsNull(arg_needwfjgqty) THEN arg_needwfjgqty = 0
  2148. IF IsNull(arg_enprice) THEN arg_enprice = 0
  2149. IF IsNull(arg_rebate) THEN arg_rebate = 0
  2150. IF IsNull(arg_planprice) THEN arg_planprice = 0
  2151. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  2152. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  2153. IF IsNull(arg_status) THEN arg_status = ''
  2154. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  2155. IF IsNull(arg_pcode) THEN arg_pcode = ''
  2156. IF IsNull(arg_printid) THEN arg_printid = 0
  2157. IF IsNull(arg_outtype) THEN arg_outtype = 0
  2158. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  2159. IF IsNull(arg_unit) THEN arg_unit = ''
  2160. IF IsNull(arg_rate) Or arg_rate = 0 THEN arg_rate = 1
  2161. IF IsNull(arg_formula) THEN arg_formula = ''
  2162. IF IsNull(arg_addqty) THEN arg_addqty = 0
  2163. IF IsNull(arg_mxdscrp2) THEN arg_mxdscrp2 = ''
  2164. IF IsNull(arg_plancode) THEN arg_plancode = ''
  2165. IF IsNull(arg_tax) THEN arg_tax = 0
  2166. IF arg_mtrlid = 0 Or arg_usaleqty = 0 THEN
  2167. rslt = 1
  2168. GOTO ext
  2169. END IF
  2170. IF f_check_status(1, arg_status) = 0 THEN
  2171. rslt = 0
  2172. arg_msg = "查询操作失败,可能配置未定义,物料:"+arg_mtrlcode+",配置:"+arg_status
  2173. GOTO ext
  2174. END IF
  2175. IF arg_enprice * arg_rebate < 0 THEN
  2176. rslt = 0
  2177. arg_msg = "产品:" + String(arg_mtrlcode)+" 单价错误"
  2178. GOTO ext
  2179. END IF
  2180. //检查物料id
  2181. SELECT count(*)
  2182. INTO :cnt
  2183. FROM u_mtrldef
  2184. Where u_mtrldef.mtrlid = :arg_mtrlid ;
  2185. IF sqlca.SQLCode <> 0 THEN
  2186. rslt = 0
  2187. arg_msg = "查询操作失败,产品编号"
  2188. GOTO ext
  2189. END IF
  2190. Long ll_Mtrlorigin
  2191. Decimal lde_lmsaleprice
  2192. SELECT Mtrlorigin, lmsaleprice
  2193. INTO :ll_Mtrlorigin, :lde_lmsaleprice
  2194. FROM u_mtrldef
  2195. Where u_mtrldef.mtrlid = :arg_mtrlid ;
  2196. IF sqlca.SQLCode <> 0 THEN
  2197. rslt = 0
  2198. arg_msg = "查询操作失败,产品属性"
  2199. GOTO ext
  2200. END IF
  2201. IF cnt = 0 THEN
  2202. rslt = 0
  2203. arg_msg = "错误的产品编号: "+String(arg_mtrlcode)
  2204. GOTO ext
  2205. END IF
  2206. //取客户定价, 即已审核的客户价格表或默认价格表的价格
  2207. f_get_defsaleprice(cusid,arg_mtrlid,arg_unit,arg_status,arg_pcode,arg_woodcode,moneyid,ld_dftsaleprice)
  2208. IF sys_option_saletask_plan = 1 THEN
  2209. // arg_orderqty = arg_orderqty
  2210. // arg_needbuyqty = arg_needbuyqty
  2211. ELSEIF sys_option_saletask_plan = 2 THEN
  2212. arg_orderqty = 0
  2213. arg_needbuyqty = arg_usaleqty * arg_rate
  2214. arg_needwfjgqty = 0
  2215. ELSEIF sys_option_saletask_plan = 3 THEN
  2216. arg_orderqty = arg_usaleqty * arg_rate
  2217. arg_needbuyqty = 0
  2218. arg_needwfjgqty = 0
  2219. elseif sys_option_saletask_plan =5 THEN
  2220. arg_orderqty =0
  2221. arg_needbuyqty = 0
  2222. arg_needwfjgqty = arg_usaleqty * arg_rate
  2223. elseif sys_option_saletask_plan =6 THEN
  2224. arg_orderqty =arg_usaleqty * arg_rate
  2225. arg_needbuyqty = 0
  2226. arg_needwfjgqty = arg_usaleqty * arg_rate
  2227. ELSE
  2228. CHOOSE CASE ll_Mtrlorigin
  2229. CASE 0,4
  2230. arg_orderqty = arg_usaleqty * arg_rate
  2231. arg_needbuyqty = 0
  2232. arg_needwfjgqty = 0
  2233. CASE 2
  2234. arg_orderqty = 0
  2235. arg_needbuyqty = arg_usaleqty * arg_rate
  2236. arg_needwfjgqty = 0
  2237. CASE ELSE
  2238. // arg_orderqty = arg_orderqty
  2239. // arg_needbuyqty = arg_needbuyqty
  2240. END CHOOSE
  2241. END IF
  2242. IF arg_orderqty + arg_needbuyqty + arg_needwfjgqty > arg_usaleqty * arg_rate THEN
  2243. arg_msg = '需排产数 + 需订购数 + 需外协数 > 订单数量,请检查'
  2244. rslt = 0
  2245. GOTO ext
  2246. END IF
  2247. lde_saleqty = Round(arg_usaleqty * arg_rate ,5)
  2248. IF arg_tax < 0 THEN
  2249. rslt = 0
  2250. arg_msg = "税率不能为负数"
  2251. GOTO ext
  2252. END IF
  2253. FOR ls_i = 1 To it_mxbt //合并重复项
  2254. IF saletaskmx[ls_i].mtrlid = arg_mtrlid And &
  2255. saletaskmx[ls_i].status = arg_status And &
  2256. saletaskmx[ls_i].pcode = arg_pcode And &
  2257. saletaskmx[ls_i].mtrlcuscode = arg_mtrlcuscode And &
  2258. saletaskmx[ls_i].woodcode = arg_woodcode And &
  2259. saletaskmx[ls_i].unit = arg_unit THEN
  2260. saletaskmx[ls_i].usaleqty = saletaskmx[ls_i].usaleqty + arg_usaleqty
  2261. saletaskmx[ls_i].saleqty = saletaskmx[ls_i].saleqty + lde_saleqty //arg_usaleqty
  2262. saletaskmx[ls_i].addqty = saletaskmx[ls_i].addqty + arg_addqty
  2263. saletaskmx[ls_i].orderqty = saletaskmx[ls_i].orderqty + arg_orderqty
  2264. saletaskmx[ls_i].needbuyqty = saletaskmx[ls_i].needbuyqty + arg_needbuyqty
  2265. saletaskmx[ls_i].needwfjgqty = saletaskmx[ls_i].needwfjgqty + arg_needwfjgqty
  2266. rslt = 1
  2267. GOTO ext
  2268. END IF
  2269. NEXT
  2270. //写入内容
  2271. it_mxbt++
  2272. saletaskmx[it_mxbt].printid = arg_printid
  2273. saletaskmx[it_mxbt].mtrlid = arg_mtrlid
  2274. saletaskmx[it_mxbt].usaleqty = arg_usaleqty
  2275. saletaskmx[it_mxbt].saleqty = lde_saleqty
  2276. saletaskmx[it_mxbt].addqty = arg_addqty
  2277. saletaskmx[it_mxbt].orderqty = arg_orderqty
  2278. saletaskmx[it_mxbt].needbuyqty = arg_needbuyqty
  2279. saletaskmx[it_mxbt].needwfjgqty = arg_needwfjgqty
  2280. saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice
  2281. saletaskmx[it_mxbt].plprice = arg_planprice
  2282. saletaskmx[it_mxbt].enprice = arg_enprice
  2283. saletaskmx[it_mxbt].tax = arg_tax
  2284. saletaskmx[it_mxbt].rebate = arg_rebate
  2285. saletaskmx[it_mxbt].fprice = arg_enprice * mrate
  2286. saletaskmx[it_mxbt].acprice = arg_enprice * mrate * arg_rebate
  2287. IF sys_option_mst_multimoney = 1 THEN //使用多币种
  2288. msttakeamt += Round(arg_enprice * arg_usaleqty * arg_rebate,2)
  2289. ELSE // 系统不使用多币种,转换为人民币
  2290. msttakeamt += Round(arg_enprice * mrate * arg_usaleqty * arg_rebate,2)
  2291. END IF
  2292. saletaskmx[it_mxbt].unit = arg_unit
  2293. saletaskmx[it_mxbt].rate = arg_rate
  2294. saletaskmx[it_mxbt].ware_enprice = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10)
  2295. saletaskmx[it_mxbt].ware_fprice = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10) * mrate
  2296. saletaskmx[it_mxbt].ware_price = Round((arg_enprice * arg_usaleqty)/lde_saleqty,10) * mrate * arg_rebate
  2297. saletaskmx[it_mxbt].mtrlcode = arg_mtrlcode
  2298. saletaskmx[it_mxbt].status = arg_status
  2299. saletaskmx[it_mxbt].woodcode = arg_woodcode
  2300. saletaskmx[it_mxbt].pcode = arg_pcode
  2301. saletaskmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  2302. saletaskmx[it_mxbt].plancode = arg_plancode
  2303. saletaskmx[it_mxbt].outtype = arg_outtype
  2304. saletaskmx[it_mxbt].formula = arg_formula
  2305. saletaskmx[it_mxbt].dscrp = arg_dscrp
  2306. saletaskmx[it_mxbt].mxdscrp2 = arg_mxdscrp2
  2307. ext:
  2308. IF rslt = 0 THEN
  2309. p_clearmx()
  2310. arg_msg = "第" + String(arg_printid) + "行," + arg_msg
  2311. END IF
  2312. Return(rslt)
  2313. */
  2314. end function
  2315. public function integer acceptmx (s_saletaskmx s_mx, ref string arg_msg);//return 0 fail 1 success
  2316. // 函数增加一个明细项
  2317. Long rslt = 1,cnt = 0,ls_i
  2318. Decimal ld_dftsaleprice, lde_saleqty
  2319. If it_newbegin = False And it_updatebegin = False Then
  2320. rslt = 0
  2321. arg_msg = "非编辑状态不可以使用,操作取消"
  2322. Goto ext
  2323. End If
  2324. //清除空值
  2325. If IsNull(s_mx.mtrlid) Then s_mx.mtrlid = 0
  2326. If IsNull(s_mx.usaleqty) Then s_mx.usaleqty = 0
  2327. If IsNull(s_mx.orderqty) Then s_mx.orderqty = 0
  2328. If IsNull(s_mx.needbuyqty) Then s_mx.needbuyqty = 0
  2329. If IsNull(s_mx.needwfjgqty) Then s_mx.needwfjgqty = 0
  2330. If IsNull(s_mx.enprice) Then s_mx.enprice = 0
  2331. If IsNull(s_mx.rebate) Then s_mx.rebate = 0
  2332. If IsNull(s_mx.tax) Then s_mx.tax = 0
  2333. If IsNull(s_mx.planprice) Then s_mx.planprice = 0
  2334. If IsNull(s_mx.dscrp) Then s_mx.dscrp = ''
  2335. If IsNull(s_mx.mtrlcode) Then s_mx.mtrlcode = ''
  2336. If IsNull(s_mx.status) Then s_mx.status = ''
  2337. If IsNull(s_mx.woodcode) Then s_mx.woodcode = ''
  2338. If IsNull(s_mx.pcode) Then s_mx.pcode = ''
  2339. If IsNull(s_mx.printid) Then s_mx.printid = 0
  2340. If IsNull(s_mx.outtype) Then s_mx.outtype = 0
  2341. If IsNull(s_mx.mtrlcuscode) Then s_mx.mtrlcuscode = ''
  2342. If IsNull(s_mx.unit) Then s_mx.unit = ''
  2343. If IsNull(s_mx.rate) Or s_mx.rate = 0 Then s_mx.rate = 1
  2344. If IsNull(s_mx.formula) Then s_mx.formula = ''
  2345. If IsNull(s_mx.priceformula) Then s_mx.priceformula = ''
  2346. If IsNull(s_mx.addqty) Then s_mx.addqty = 0
  2347. If IsNull(s_mx.mxdscrp2) Then s_mx.mxdscrp2 = ''
  2348. If IsNull(s_mx.plancode) Then s_mx.plancode = ''
  2349. If IsNull(s_mx.packqty) Then s_mx.packqty = 0
  2350. If IsNull(s_mx.net_weight) Then s_mx.net_weight = 0
  2351. If IsNull(s_mx.gross_weight) Then s_mx.gross_weight = 0
  2352. If IsNull(s_mx.cubage) Then s_mx.cubage = 0
  2353. If IsNull(s_mx.otherprice) Then s_mx.otherprice = 0
  2354. If IsNull(s_mx.mxdscrp3) Then s_mx.mxdscrp3 = ''
  2355. If IsNull(s_mx.mxdscrp4) Then s_mx.mxdscrp4 = ''
  2356. If IsNull(s_mx.enprice_notax) Then s_mx.enprice_notax = 0
  2357. If IsNull(s_mx.enamt_tax) Then s_mx.enamt_tax = 0 //税金
  2358. If IsNull(s_mx.enprice_notax) Then s_mx.enprice_notax = 0 //不含税单价
  2359. If s_mx.enprice_notax = 0 Then
  2360. s_mx.enprice_notax = s_mx.enprice / (1 + s_mx.tax)
  2361. End If
  2362. If s_mx.mtrlid = 0 Or s_mx.usaleqty = 0 Then
  2363. rslt = 1
  2364. Goto ext
  2365. End If
  2366. //IF f_check_status(1, s_mx.status) = 0 THEN
  2367. // rslt = 0
  2368. // arg_msg = "查询操作失败,可能配置未定义,物料:"+s_mx.mtrlcode+",配置:"+s_mx.status
  2369. // GOTO ext
  2370. //END IF
  2371. If acceptmx_chk(s_mx, arg_msg) = 0 Then
  2372. rslt = 0
  2373. Goto ext
  2374. End If
  2375. If s_mx.enprice * s_mx.rebate < 0 Then
  2376. rslt = 0
  2377. arg_msg = "产品:" + String(s_mx.mtrlcode)+" 单价错误"
  2378. Goto ext
  2379. End If
  2380. If s_mx.tax < 0 Then
  2381. rslt = 0
  2382. arg_msg = "税率不能为负数"
  2383. Goto ext
  2384. End If
  2385. Long ll_Mtrlorigin
  2386. Decimal lde_lmsaleprice, lde_gbrate
  2387. Select Mtrlorigin, lmsaleprice,gbrate
  2388. Into :ll_Mtrlorigin, :lde_lmsaleprice, :lde_gbrate
  2389. From u_mtrldef
  2390. Where u_mtrldef.mtrlid = :s_mx.mtrlid ;
  2391. If sqlca.SQLCode <> 0 Then
  2392. rslt = 0
  2393. arg_msg = "查询操作失败,产品信息"
  2394. Goto ext
  2395. End If
  2396. //取客户定价, 即已审核的客户价格表或默认价格表的价格
  2397. f_get_defsaleprice(cusid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,moneyid,ld_dftsaleprice,s_mx.usaleqty)
  2398. lde_saleqty = Round(s_mx.usaleqty * s_mx.rate ,sys_option_unit_dec_sale)
  2399. s_mx.fprice = s_mx.enprice * mrate
  2400. If sys_option_saletask_plan = 1 Then
  2401. // s_mx.orderqty = s_mx.orderqty
  2402. // s_mx.needbuyqty = s_mx.needbuyqty
  2403. ElseIf sys_option_saletask_plan = 2 Then
  2404. s_mx.orderqty = 0
  2405. s_mx.needbuyqty = lde_saleqty //s_mx.usaleqty * s_mx.rate
  2406. s_mx.needwfjgqty = 0
  2407. ElseIf sys_option_saletask_plan = 3 Then
  2408. s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate
  2409. s_mx.needbuyqty = 0
  2410. s_mx.needwfjgqty = 0
  2411. ElseIf sys_option_saletask_plan = 5 Then
  2412. s_mx.orderqty = 0 //s_mx.usaleqty * s_mx.rate
  2413. s_mx.needbuyqty = 0
  2414. s_mx.needwfjgqty = lde_saleqty
  2415. ElseIf sys_option_saletask_plan = 6 Then
  2416. s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate
  2417. s_mx.needbuyqty = 0
  2418. s_mx.needwfjgqty = lde_saleqty
  2419. Else
  2420. Choose Case ll_Mtrlorigin
  2421. Case 0,4
  2422. s_mx.orderqty = lde_saleqty //s_mx.usaleqty * s_mx.rate
  2423. s_mx.needbuyqty = 0
  2424. s_mx.needwfjgqty = 0
  2425. Case 2
  2426. s_mx.orderqty = 0
  2427. s_mx.needbuyqty = lde_saleqty //s_mx.usaleqty * s_mx.rate
  2428. s_mx.needwfjgqty = 0
  2429. Case 3
  2430. s_mx.needwfjgqty = lde_saleqty
  2431. s_mx.orderqty = 0
  2432. s_mx.needbuyqty =0
  2433. Case Else
  2434. // s_mx.orderqty = s_mx.orderqty
  2435. // s_mx.needbuyqty = s_mx.needbuyqty
  2436. End Choose
  2437. End If
  2438. // //取消限制
  2439. //IF s_mx.orderqty + s_mx.needbuyqty + s_mx.needwfjgqty > s_mx.usaleqty * s_mx.rate THEN
  2440. // arg_msg = '需排产数 + 需订购数 + 需外协数 > 订单数量,请检查'
  2441. // rslt = 0
  2442. // GOTO ext
  2443. //END IF
  2444. If sys_option_saletask_mxhb = 0 Then
  2445. For ls_i = 1 To it_mxbt //合并重复项
  2446. If saletaskmx[ls_i].mtrlid = s_mx.mtrlid And &
  2447. saletaskmx[ls_i].status = s_mx.status And &
  2448. saletaskmx[ls_i].pcode = s_mx.pcode And &
  2449. saletaskmx[ls_i].mtrlcuscode = s_mx.mtrlcuscode And &
  2450. saletaskmx[ls_i].woodcode = s_mx.woodcode And &
  2451. saletaskmx[ls_i].unit = s_mx.unit And &
  2452. saletaskmx[ls_i].enprice = s_mx.enprice And &
  2453. saletaskmx[ls_i].rebate = s_mx.rebate And &
  2454. saletaskmx[ls_i].tax = s_mx.tax Then
  2455. Decimal lde_add_enamt, lde_add_bsamt
  2456. saletaskmx[ls_i].usaleqty += s_mx.usaleqty
  2457. saletaskmx[ls_i].saleqty += lde_saleqty //s_mx.usaleqty
  2458. saletaskmx[ls_i].addqty += s_mx.addqty
  2459. saletaskmx[ls_i].orderqty += s_mx.orderqty
  2460. saletaskmx[ls_i].needbuyqty += s_mx.needbuyqty
  2461. saletaskmx[ls_i].needwfjgqty += s_mx.needwfjgqty
  2462. lde_add_enamt = Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2)
  2463. lde_add_bsamt = Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2)
  2464. saletaskmx[ls_i].enamt += Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2) //原币, 实价含税金额
  2465. saletaskmx[ls_i].enamt_tax += Round((s_mx.usaleqty * s_mx.enprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //原币, 税金
  2466. saletaskmx[ls_i].bsamt += Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2) //本位币, 实价含税金额
  2467. saletaskmx[ls_i].bsamt_tax += Round((s_mx.usaleqty * s_mx.fprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //本位币, 税金
  2468. Choose Case sys_option_outware_sale_amt_round
  2469. Case 0 //分
  2470. saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 2)
  2471. saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 2)
  2472. saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 2)
  2473. saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 2)
  2474. lde_add_enamt = Round(lde_add_enamt, 2)
  2475. lde_add_bsamt = Round(lde_add_bsamt, 2)
  2476. Case 1
  2477. saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 1)
  2478. saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 1)
  2479. saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 1)
  2480. saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 1)
  2481. lde_add_enamt = Round(lde_add_enamt, 1)
  2482. lde_add_bsamt = Round(lde_add_bsamt, 1)
  2483. Case 2
  2484. saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt, 0)
  2485. saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax, 0)
  2486. saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt, 0)
  2487. saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax, 0)
  2488. lde_add_enamt = Round(lde_add_enamt, 0)
  2489. lde_add_bsamt = Round(lde_add_bsamt, 0)
  2490. Case 3
  2491. saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt / 10, 0) * 10
  2492. saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax / 10, 0) * 10
  2493. saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt / 10, 0) * 10
  2494. saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax / 10, 0) * 10
  2495. lde_add_enamt = Round(lde_add_enamt / 10, 0) * 10
  2496. lde_add_bsamt = Round(lde_add_bsamt / 10, 0) * 10
  2497. Case 4
  2498. saletaskmx[ls_i].enamt = Round(saletaskmx[ls_i].enamt / 100, 0) * 100
  2499. saletaskmx[ls_i].enamt_tax = Round(saletaskmx[ls_i].enamt_tax / 100, 0) * 100
  2500. saletaskmx[ls_i].bsamt = Round(saletaskmx[ls_i].bsamt / 100, 0) * 100
  2501. saletaskmx[ls_i].bsamt_tax = Round(saletaskmx[ls_i].bsamt_tax / 100, 0) * 100
  2502. lde_add_enamt = Round(lde_add_enamt / 100, 0) * 100
  2503. lde_add_bsamt = Round(lde_add_bsamt / 100, 0) * 100
  2504. End Choose
  2505. If sys_option_mst_multimoney = 1 Then //使用多币种
  2506. msttakeamt += lde_add_enamt
  2507. Else // 系统不使用多币种,转换为人民币
  2508. msttakeamt += lde_add_bsamt
  2509. End If
  2510. rslt = 1
  2511. Goto ext
  2512. End If
  2513. Next
  2514. End If
  2515. //写入内容
  2516. it_mxbt++
  2517. saletaskmx[it_mxbt].printid = s_mx.printid
  2518. saletaskmx[it_mxbt].mtrlid = s_mx.mtrlid
  2519. saletaskmx[it_mxbt].usaleqty = s_mx.usaleqty
  2520. saletaskmx[it_mxbt].saleqty = lde_saleqty
  2521. saletaskmx[it_mxbt].addqty = s_mx.addqty
  2522. saletaskmx[it_mxbt].orderqty = s_mx.orderqty
  2523. saletaskmx[it_mxbt].needbuyqty = s_mx.needbuyqty
  2524. saletaskmx[it_mxbt].needwfjgqty = s_mx.needwfjgqty
  2525. saletaskmx[it_mxbt].dftsaleprice = ld_dftsaleprice
  2526. saletaskmx[it_mxbt].plprice = s_mx.planprice
  2527. saletaskmx[it_mxbt].enprice = s_mx.enprice
  2528. saletaskmx[it_mxbt].tax = s_mx.tax //税率
  2529. saletaskmx[it_mxbt].rebate = s_mx.rebate
  2530. saletaskmx[it_mxbt].fprice = s_mx.enprice * mrate
  2531. saletaskmx[it_mxbt].acprice = s_mx.enprice * mrate * s_mx.rebate
  2532. saletaskmx[it_mxbt].enamt = Round(s_mx.usaleqty * s_mx.enprice * s_mx.rebate, 2) //原币, 实价含税金额
  2533. If s_mx.enamt_tax = 0 Then
  2534. saletaskmx[it_mxbt].enamt_tax = Round((s_mx.usaleqty * s_mx.enprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //原币, 税金
  2535. Else
  2536. saletaskmx[it_mxbt].enamt_tax = s_mx.enamt_tax
  2537. End If
  2538. saletaskmx[it_mxbt].bsamt = Round(s_mx.usaleqty * s_mx.fprice * s_mx.rebate, 2) //本位币, 实价含税金额
  2539. saletaskmx[it_mxbt].bsamt_tax = Round((s_mx.usaleqty * s_mx.fprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax), 2) //本位币, 税金
  2540. Choose Case sys_option_outware_sale_amt_round
  2541. Case 0 //分
  2542. saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 2)
  2543. saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 2)
  2544. saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 2)
  2545. saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 2)
  2546. Case 1
  2547. saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 1)
  2548. saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 1)
  2549. saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 1)
  2550. saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 1)
  2551. Case 2
  2552. saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt, 0)
  2553. saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax, 0)
  2554. saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt, 0)
  2555. saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax, 0)
  2556. Case 3
  2557. saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt / 10, 0) * 10
  2558. saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax / 10, 0) * 10
  2559. saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt / 10, 0) * 10
  2560. saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax / 10, 0) * 10
  2561. Case 4
  2562. saletaskmx[it_mxbt].enamt = Round(saletaskmx[it_mxbt].enamt / 100, 0) * 100
  2563. saletaskmx[it_mxbt].enamt_tax = Round(saletaskmx[it_mxbt].enamt_tax / 100, 0) * 100
  2564. saletaskmx[it_mxbt].bsamt = Round(saletaskmx[it_mxbt].bsamt / 100, 0) * 100
  2565. saletaskmx[it_mxbt].bsamt_tax = Round(saletaskmx[it_mxbt].bsamt_tax / 100, 0) * 100
  2566. End Choose
  2567. If sys_option_mst_multimoney = 1 Then //使用多币种
  2568. msttakeamt += saletaskmx[it_mxbt].enamt
  2569. Else // 系统不使用多币种,转换为人民币
  2570. msttakeamt += saletaskmx[it_mxbt].bsamt
  2571. End If
  2572. saletaskmx[it_mxbt].unit = s_mx.unit
  2573. saletaskmx[it_mxbt].rate = s_mx.rate
  2574. saletaskmx[it_mxbt].ware_enprice = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10)
  2575. saletaskmx[it_mxbt].ware_fprice = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10) * mrate
  2576. saletaskmx[it_mxbt].ware_price = Round((s_mx.enprice * s_mx.usaleqty)/lde_saleqty,10) * mrate * s_mx.rebate
  2577. saletaskmx[it_mxbt].mtrlcode = s_mx.mtrlcode
  2578. saletaskmx[it_mxbt].status = s_mx.status
  2579. saletaskmx[it_mxbt].woodcode = s_mx.woodcode
  2580. saletaskmx[it_mxbt].pcode = s_mx.pcode
  2581. saletaskmx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode
  2582. saletaskmx[it_mxbt].plancode = s_mx.plancode
  2583. saletaskmx[it_mxbt].outtype = s_mx.outtype
  2584. saletaskmx[it_mxbt].formula = s_mx.formula
  2585. saletaskmx[it_mxbt].priceformula = s_mx.priceformula
  2586. saletaskmx[it_mxbt].dscrp = s_mx.dscrp
  2587. saletaskmx[it_mxbt].mxdscrp2 = s_mx.mxdscrp2
  2588. saletaskmx[it_mxbt].mxdscrp3 = s_mx.mxdscrp3
  2589. saletaskmx[it_mxbt].mxdscrp4 = s_mx.mxdscrp4
  2590. saletaskmx[it_mxbt].packqty = s_mx.packqty
  2591. saletaskmx[it_mxbt].otherprice = s_mx.otherprice
  2592. saletaskmx[it_mxbt].gbrate = lde_gbrate
  2593. //saletaskmx[it_mxbt].gbotheramt = lde_gbotheramt
  2594. saletaskmx[it_mxbt].net_weight = s_mx.net_weight
  2595. saletaskmx[it_mxbt].gross_weight = s_mx.gross_weight
  2596. saletaskmx[it_mxbt].cubage = s_mx.cubage
  2597. saletaskmx[it_mxbt].requiredate = s_mx.requiredate
  2598. saletaskmx[it_mxbt].enprice_notax = s_mx.enprice_notax //不含税单价
  2599. ext:
  2600. If rslt = 0 Then
  2601. p_clearmx()
  2602. arg_msg = "第" + String(s_mx.printid) + "行," + arg_msg
  2603. End If
  2604. Return(rslt)
  2605. end function
  2606. public function integer finishtask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//撤销手动完成
  2607. Int rslt = 1,cnt = 0
  2608. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  2609. rslt = 0
  2610. GOTO ext
  2611. END IF
  2612. IF rslt = 0 THEN GOTO ext
  2613. IF Status <> 6 THEN
  2614. rslt = 0
  2615. arg_msg = "销售订单只有在手动完成状态才可以撤销完成,请核对"
  2616. GOTO ext
  2617. END IF
  2618. SELECT count(*)
  2619. INTO :cnt
  2620. FROM u_saletask INNER join u_saletaskmx
  2621. on u_saletask.scid = u_saletaskmx.scid
  2622. AND u_saletask.taskid = u_saletaskmx.taskid
  2623. WHERE ( u_SaleTask.TaskID = :arg_taskid )
  2624. AND ( u_SaleTask.scid = :arg_scid)
  2625. AND u_saletaskmx.usaleqty - u_saletaskmx.consignedqty > 0
  2626. Using commit_transaction;
  2627. IF commit_transaction.SQLCode <> 0 THEN
  2628. rslt = 0
  2629. arg_msg = "查询销售订单信息失败"+"~n"+commit_transaction.SQLErrText
  2630. GOTO ext
  2631. END IF
  2632. IF Not cnt > 0 THEN
  2633. rslt = 0
  2634. arg_msg = '销售订单明细已完成,不能手动撤销完成'
  2635. GOTO ext
  2636. END IF
  2637. UPDATE u_SaleTask
  2638. SET status = 1,
  2639. accomplishdate = NULL,
  2640. finishemp = ''
  2641. WHERE ( u_SaleTask.TaskID = :arg_taskid ) AND
  2642. ( u_saletask.scid = :arg_scid) Using commit_transaction;
  2643. IF commit_transaction.SQLCode <> 0 THEN
  2644. rslt = 0
  2645. arg_msg = "完成销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  2646. ROLLBACK Using commit_transaction;
  2647. GOTO ext
  2648. END IF
  2649. ext:
  2650. IF arg_ifcommit And rslt = 1 THEN
  2651. COMMIT Using commit_transaction;
  2652. END IF
  2653. p_reset()
  2654. Return (rslt)
  2655. end function
  2656. public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);//addmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit)
  2657. Int rslt = 1,cnt = 0
  2658. IF arg_taskid <= 0 THEN
  2659. rslt = 0
  2660. ARG_MSG = '错误销售订单唯一码'
  2661. GOTO ext
  2662. END IF
  2663. IF arg_addqty = 0 THEN
  2664. rslt = 1
  2665. GOTO ext
  2666. END IF
  2667. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  2668. rslt = 0
  2669. GOTO ext
  2670. END IF
  2671. IF status <> 1 AND status <> 5 THEN
  2672. rslt = 0
  2673. IF status <> 1 THEN
  2674. ARG_MSG = "销售订单只有在进行状态下才可以执行进仓"
  2675. ELSEIF status <> 5 THEN
  2676. ARG_MSG = "销售订单只有在完成状态下才可以撤消进仓"
  2677. END IF
  2678. GOTO ext
  2679. END IF
  2680. decimal lde_upsalerate, lde_upsaleqty
  2681. Decimal ls_uSaleQty,ls_consignedQty, lde_stopqty
  2682. String ls_mtrlcode
  2683. SELECT u_SaleTaskMx.uSaleQty,
  2684. u_SaleTaskMx.consignedQty,
  2685. u_SaleTaskMx.stopqty,
  2686. u_mtrldef.mtrlcode,
  2687. u_mtrldef.upsalerate,
  2688. u_mtrldef.upsaleqty
  2689. INTO :ls_uSaleQty,
  2690. :ls_consignedQty,
  2691. :lde_stopqty,
  2692. :ls_mtrlcode,
  2693. :lde_upsalerate,
  2694. :lde_upsaleqty
  2695. FROM u_SaleTaskMx ,u_mtrldef
  2696. WHERE ( u_mtrldef.mtrlid = u_SaleTaskMx.MtrlID ) AND
  2697. ( u_saletaskmx.scid = :arg_scid) AND
  2698. ( u_SaleTaskMx.TaskID = :arg_taskid ) AND
  2699. ( u_SaleTaskMx.printid = :arg_printid ) USING commit_transaction ;
  2700. IF commit_transaction.SQLCode <> 0 THEN
  2701. rslt = 0
  2702. ARG_MSG = "产品["+ls_mtrlcode+"]查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  2703. GOTO ext
  2704. END IF
  2705. ls_uSaleQty = abs(ls_uSaleQty * (1 + lde_upsalerate ) + lde_upsaleqty)
  2706. IF ls_uSaleQty < ls_consignedQty + lde_stopqty + arg_addqty THEN
  2707. rslt = 0
  2708. ARG_MSG = "产品["+ls_mtrlcode+"]的未完成数量只有"+String(ls_uSaleQty - ls_consignedQty - lde_stopqty,'#,##0.0#')+",不能出仓"+String(arg_addqty,'#,##0.0#')
  2709. GOTO ext
  2710. END IF
  2711. UPDATE u_SaleTaskMx
  2712. SET consignedQty = consignedQty +:arg_addqty
  2713. WHERE( u_saletaskmx.scid = :arg_scid) AND
  2714. ( u_SaleTaskMx.TaskID = :arg_taskid ) AND
  2715. ( u_SaleTaskMx.printid = :arg_printid ) USING commit_transaction;
  2716. IF commit_transaction.SQLCode <> 0 THEN
  2717. rslt = 0
  2718. ARG_MSG = "因网络或错误产品唯一码导致销售订单完成数量操作失败"+"~n"+ commit_transaction.SQLErrText
  2719. GOTO ext
  2720. END IF
  2721. it_newbegin = FALSE
  2722. it_updatebegin = FALSE
  2723. ext:
  2724. IF rslt = 0 THEN
  2725. ROLLBACK USING commit_transaction;
  2726. ELSEIF arg_ifcommit THEN
  2727. COMMIT USING commit_transaction;
  2728. END IF
  2729. p_reset()
  2730. Return (rslt)
  2731. end function
  2732. public function integer uof_stopqty (long arg_scid, long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2733. Int li_flag
  2734. DateTime null_dt
  2735. DateTime server_datetime
  2736. String ls_stopemp
  2737. Decimal ld_saleqty,ld_consignedQty
  2738. Decimal ld_enprice,ld_rebate,ld_stopamt
  2739. Decimal ld_stopqty_ori,ld_stopamt_ori
  2740. Long ll_mtrlid
  2741. Long ll_assignid,j
  2742. Decimal ld_assignqty,ld_qty_cancel,ld_qty
  2743. String ls_status,ls_woodcode,ls_pcode
  2744. Int li_outtype,li_ifpackpro
  2745. s_mtrlcfg_expr s_pz[]
  2746. Long it_mxt,cnt
  2747. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  2748. Int li_ifover[],li_dipztype[]
  2749. Decimal ld_Sonscale[]
  2750. Long ll_SonMtrlid[]
  2751. Long ll_l,ll_j
  2752. SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction;
  2753. IF commit_transaction.SQLCode <> 0 THEN
  2754. rslt = 0
  2755. arg_msg = "查询操作失败,日期 "
  2756. GOTO ext
  2757. END IF
  2758. IF IsNull(arg_stopqty) THEN arg_stopqty = 0
  2759. IF arg_stopqty < 0 THEN
  2760. arg_msg = '订单终止数不能少于0,请检查'
  2761. rslt = 0
  2762. GOTO ext
  2763. END IF
  2764. IF arg_stopqty = 0 THEN
  2765. SetNull(server_datetime)
  2766. ls_stopemp = ''
  2767. ELSE
  2768. ls_stopemp = publ_operator
  2769. IF arg_stopreason = "" THEN
  2770. arg_msg = '请填写终止原因'
  2771. rslt = 0
  2772. GOTO ext
  2773. END IF
  2774. END IF
  2775. SetNull(null_dt)
  2776. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  2777. rslt = 0
  2778. GOTO ext
  2779. END IF
  2780. IF status <> 1 And status <> 5 THEN
  2781. arg_msg = '订单只能在进行状态或自动完成状态才能操作'
  2782. rslt = 0
  2783. GOTO ext
  2784. END IF
  2785. SELECT u_SaleTaskMx.SaleQty,
  2786. u_SaleTaskMx.consignedQty,
  2787. u_SaleTaskMx.enprice,
  2788. u_SaleTaskMx.rebate,
  2789. u_SaleTaskMx.stopqty,
  2790. u_SaleTaskMx.mtrlid,
  2791. u_SaleTaskMx.status,
  2792. u_SaleTaskMx.woodcode,
  2793. u_SaleTaskMx.pcode
  2794. INTO :ld_saleqty,
  2795. :ld_consignedQty,
  2796. :ld_enprice,
  2797. :ld_rebate,
  2798. :ld_stopqty_ori,
  2799. :ll_mtrlid,
  2800. :ls_status,
  2801. :ls_woodcode,
  2802. :ls_pcode
  2803. FROM u_SaleTaskMx INNER JOIN
  2804. u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid
  2805. WHERE u_SaleTaskMx.scid = :arg_scid
  2806. AND u_SaleTaskMx.TaskID = :arg_taskid
  2807. And u_SaleTaskMx.printid = :arg_printid Using commit_transaction;
  2808. IF commit_transaction.SQLCode <> 0 THEN
  2809. rslt = 0
  2810. arg_msg = '查询物料可终止数失败,'+commit_transaction.SQLErrText
  2811. GOTO ext
  2812. END IF
  2813. IF arg_stopqty > ld_saleqty - ld_consignedQty THEN
  2814. arg_msg = '明细物料未发货单数只有:'+String(ld_saleqty - ld_consignedQty,'#,##0.##########')+',不能终止:'+String(arg_stopqty,'#,##0.##########')
  2815. rslt = 0
  2816. GOTO ext
  2817. END IF
  2818. IF arg_stopqty > 0 THEN
  2819. END IF
  2820. UPDATE u_saletaskmx
  2821. SET stopqty = :arg_stopqty,
  2822. stopemp = :ls_stopemp,
  2823. stopdate = :server_datetime,
  2824. stopreason = :arg_stopreason
  2825. WHERE scid = :arg_scid
  2826. AND taskid = :arg_taskid
  2827. And printid = :arg_printid Using commit_transaction ;
  2828. IF commit_transaction.SQLCode <> 0 THEN
  2829. arg_msg = '更新明细中止标记失败,'+commit_transaction.SQLErrText
  2830. rslt = 0
  2831. GOTO ext
  2832. END IF
  2833. //IF uo_option_m_msttake = 1 THEN //使用多币种
  2834. // ld_stopamt = round(ld_enprice * arg_stopqty * ld_rebate,2)
  2835. // ld_stopamt_ori = round(ld_enprice * ld_stopqty_ori * ld_rebate,2)
  2836. //ELSE // 系统不使用多币种,转换为人民币
  2837. // ld_stopamt = round(ld_enprice * mrate * arg_stopqty * ld_rebate,2)
  2838. // ld_stopamt_ori = round(ld_enprice * mrate * ld_stopqty_ori * ld_rebate,2)
  2839. //END IF
  2840. //UPDATE u_saletask
  2841. // SET msttakeamt = msttakeamt + :ld_stopamt_ori - :ld_stopamt
  2842. // WHERE scid = :arg_scid
  2843. // And TaskID = :arg_taskid Using commit_transaction ;
  2844. //
  2845. //IF commit_transaction.SQLCode <> 0 THEN
  2846. // arg_msg = '更新订单单据金额失败,'+sqlca.SQLErrText
  2847. // rslt = 0
  2848. // GOTO ext
  2849. //END IF
  2850. //
  2851. IF trycmplsaletask(arg_scid,arg_taskid,arg_msg,False) = 0 THEN
  2852. rslt = 0
  2853. GOTO ext
  2854. END IF
  2855. ext:
  2856. IF rslt = 0 THEN
  2857. ROLLBACK Using commit_transaction ;
  2858. ELSEIF rslt = 1 And arg_ifcommit THEN
  2859. COMMIT Using commit_transaction ;
  2860. END IF
  2861. RETURN rslt
  2862. end function
  2863. public function integer uof_add_tc (long arg_scid, long arg_taskid, s_saletaskmx s_mx[], s_saletaskmx_outrep s_mx_rep[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2864. Long i
  2865. FOR i = 1 To UpperBound(s_mx)
  2866. UPDATE u_saletaskmx
  2867. SET gbrate = :s_mx[i].gbrate,
  2868. gbotheramt = :s_mx[i].gbotheramt
  2869. WHERE scid = :arg_scid
  2870. AND taskid = :arg_taskid
  2871. And printid = :s_mx[i].printid;
  2872. IF sqlca.SQLCode <> 0 THEN
  2873. arg_msg = '更新订单明细失败,'+sqlca.SQLErrText
  2874. rslt = 0
  2875. GOTO ext
  2876. END IF
  2877. NEXT
  2878. //删除原有明细
  2879. DELETE FROM u_SaleTaskMx_outrep
  2880. Where taskid = :arg_taskid And scid = :arg_scid ;
  2881. IF sqlca.SQLCode <> 0 THEN
  2882. rslt = 0
  2883. arg_msg = "删除旧有提成明细操作失败"+"~n"+sqlca.SQLErrText
  2884. GOTO ext
  2885. END IF
  2886. FOR i = 1 To UpperBound(s_mx_rep)
  2887. INSERT INTO u_SaleTaskMx_outrep
  2888. (scid, taskid, outrepname, rate, amt)
  2889. VALUES
  2890. (:arg_scid, :arg_taskid, :s_mx_rep[i].outrepname, :s_mx_rep[i].rate,:s_mx_rep[i].amt);
  2891. IF sqlca.SQLCode <> 0 THEN
  2892. arg_msg = '插入订单提成明细失败,'+sqlca.SQLErrText
  2893. rslt = 0
  2894. GOTO ext
  2895. END IF
  2896. NEXT
  2897. ext:
  2898. IF rslt = 0 THEN
  2899. ROLLBACK;
  2900. ELSEIF rslt = 1 And arg_ifcommit THEN
  2901. COMMIT;
  2902. END IF
  2903. RETURN rslt
  2904. end function
  2905. public function integer audit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//audit
  2906. Int rslt = 1,cnt = 0
  2907. Long ll_i
  2908. IF arg_taskid <= 0 THEN
  2909. rslt = 0
  2910. arg_msg = '错误销售订单唯一码'
  2911. GOTO ext
  2912. END IF
  2913. IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  2914. rslt = 0
  2915. GOTO ext
  2916. END IF
  2917. IF sys_option_saletask_use_priceflag = 1 THEN //系统选项284,启动确认流程 ,请先确认
  2918. IF priceflag = 0 THEN
  2919. rslt = 0
  2920. arg_msg = '系统启动确认流程 ,请先确认,系统选项284'
  2921. GOTO ext
  2922. END IF
  2923. END IF
  2924. IF Status <> 0 THEN
  2925. rslt = 0
  2926. arg_msg = "订单已经审核,操作取消"
  2927. GOTO ext
  2928. END IF
  2929. cnt = 0
  2930. SELECT count(*) INTO :cnt
  2931. FROM u_user
  2932. Where username = :arg_emp Using commit_transaction;
  2933. IF commit_transaction.SQLCode <> 0 THEN
  2934. rslt = 0
  2935. arg_msg = "查询操作失败,操作员!"
  2936. GOTO ext
  2937. END IF
  2938. IF cnt = 0 THEN
  2939. rslt = 0
  2940. arg_msg = "操作员姓名未登记或已取消!"
  2941. GOTO ext
  2942. END IF
  2943. //sys_option_saletask_chk_wkd //销售订单审核时,使用物料清单计算库存 系统选项291
  2944. IF sys_option_saletask_chk_wkd = 1 THEN
  2945. IF uf_chk_assemble_qty(scid,arg_msg) = 0 THEN
  2946. rslt = 0
  2947. GOTO ext
  2948. END IF
  2949. END IF
  2950. Decimal lde_lmsaleprice
  2951. //检查客户定价
  2952. IF sys_option_saletask_dft_lmsaleprice = 1 THEN
  2953. FOR ll_i = 1 To it_mxbt
  2954. IF saletaskmx[ll_i].dftsaleprice = 0 THEN
  2955. rslt = 0
  2956. arg_msg = "系统选项[074]限制,行:"+String(ll_i)+",产品编号: "+String(saletaskmx[ll_i].mtrlcode)+", 需先设定客户定价"
  2957. GOTO ext
  2958. END IF
  2959. NEXT
  2960. END IF
  2961. /*MEI:生成领料单操作 20160511*/
  2962. IF auditing_chk(arg_msg) = 0 THEN
  2963. rslt = 0
  2964. GOTO ext
  2965. END IF
  2966. UPDATE u_SaleTask
  2967. SET auditEmp = :arg_emp ,
  2968. auditdate = getdate(),
  2969. Status = 4
  2970. WHERE TaskID = :arg_taskid
  2971. And scid = :arg_scid Using commit_transaction;
  2972. IF commit_transaction.SQLCode <> 0 THEN
  2973. rslt = 0
  2974. arg_msg = "订单销售审核操作失败"+"~n"+commit_transaction.SQLErrText
  2975. GOTO ext
  2976. END IF
  2977. it_newbegin = False
  2978. it_updatebegin = False
  2979. ext:
  2980. IF rslt = 0 THEN
  2981. ROLLBACK Using commit_transaction;
  2982. ELSEIF arg_ifcommit THEN
  2983. COMMIT Using commit_transaction;
  2984. END IF
  2985. p_reset()
  2986. Return (rslt)
  2987. end function
  2988. public function integer audit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  2989. DateTime nulldate
  2990. SetNull(nulldate)
  2991. IF arg_taskid <= 0 THEN
  2992. rslt = 0
  2993. ARG_MSG = '错误销售订单唯一码'
  2994. GOTO ext
  2995. END IF
  2996. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  2997. rslt = 0
  2998. GOTO ext
  2999. END IF
  3000. IF Status <> 4 THEN
  3001. rslt = 0
  3002. ARG_MSG = "订单只有在待二审状态才可以执行撤消审核,请核对"
  3003. GOTO ext
  3004. END IF
  3005. UPDATE u_SaleTask
  3006. SET Status = 0,
  3007. auditEmp = '',
  3008. auditdate = :nulldate
  3009. WHERE taskid = :arg_taskid
  3010. AND scid = :arg_scid
  3011. Using commit_transaction ;
  3012. IF commit_transaction.SQLCode <> 0 THEN
  3013. rslt = 0
  3014. ARG_MSG = "销售订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  3015. GOTO ext
  3016. END IF
  3017. IF uf_destroy_scll(scid, taskid, arg_msg, False) = 0 THEN
  3018. rslt = 0
  3019. GOTO ext
  3020. END IF
  3021. it_newbegin = False
  3022. it_updatebegin = False
  3023. ext:
  3024. IF rslt = 0 THEN
  3025. ROLLBACK Using commit_transaction;
  3026. ELSEIF arg_ifcommit THEN
  3027. COMMIT Using commit_transaction;
  3028. END IF
  3029. p_reset()
  3030. Return (rslt)
  3031. end function
  3032. public function integer acceptmx_item (s_saletask_itemmx arg_item, ref string arg_msg);Int rslt = 1
  3033. Long cnt
  3034. cnt = 0
  3035. IF it_newbegin = False And it_updatebegin = False THEN
  3036. rslt = 0
  3037. arg_msg = "非编辑状态不可以使用,操作取消"
  3038. GOTO ext
  3039. END IF
  3040. IF IsNull(arg_item.scid) THEN arg_item.scid = 0
  3041. IF IsNull(arg_item.saletaskid) THEN arg_item.saletaskid = 0
  3042. IF IsNull(arg_item.printid) THEN arg_item.printid = 0
  3043. IF IsNull(arg_item.itemid) THEN arg_item.itemid = 0
  3044. IF IsNull(arg_item.amt) THEN arg_item.amt = 0
  3045. IF IsNull(arg_item.amtyfh) THEN arg_item.amtyfh = 0
  3046. IF IsNull(arg_item.mxdscrp) THEN arg_item.mxdscrp = ''
  3047. IF IsNull(arg_item.itype) THEN arg_item.itype =1//默认方向类型为增项
  3048. IF arg_item.itemid = 0 Or arg_item.amt = 0 THEN
  3049. rslt = 1
  3050. GOTO ext
  3051. END IF
  3052. SELECT count(*)
  3053. INTO :cnt
  3054. FROM u_itemdef
  3055. Where itemid = :arg_item.itemid;
  3056. IF commit_transaction.SQLCode <> 0 THEN
  3057. rslt = 0
  3058. arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText
  3059. GOTO ext
  3060. END IF
  3061. IF cnt = 0 THEN
  3062. rslt = 0
  3063. arg_msg = '第'+String(arg_item.printid)+'行,收支项目不存在,请检查'
  3064. GOTO ext
  3065. END IF
  3066. it_mxbt_item++
  3067. saletask_itemmx[it_mxbt_item] = arg_item
  3068. ext:
  3069. IF rslt = 0 THEN p_clearmx()
  3070. RETURN rslt
  3071. end function
  3072. public function integer save_end (ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  3073. Long i
  3074. DELETE FROM u_saletask_itemmx
  3075. WHERE u_saletask_itemmx.saletaskid = :taskid
  3076. And u_saletask_itemmx.scid = :scid Using commit_transaction;
  3077. IF commit_transaction.SQLCode <> 0 THEN
  3078. rslt = 0
  3079. arg_msg = "删除旧有项目明细操作失败"+"~n"+commit_transaction.SQLErrText
  3080. GOTO ext
  3081. END IF
  3082. FOR i = 1 To it_mxbt_item
  3083. INSERT INTO u_saletask_itemmx
  3084. (scid,
  3085. saletaskid,
  3086. printid,
  3087. itemid,
  3088. amt,
  3089. amtyfh,
  3090. mxdscrp,
  3091. itype
  3092. )
  3093. VALUES (:scid,
  3094. :taskid,
  3095. :saletask_itemmx[i].printid,
  3096. :saletask_itemmx[i].itemid,
  3097. :saletask_itemmx[i].amt,
  3098. :saletask_itemmx[i].amtyfh,
  3099. :saletask_itemmx[i].mxdscrp,
  3100. :saletask_itemmx[i].itype
  3101. ) Using commit_transaction;
  3102. IF commit_transaction.SQLCode <> 0 THEN
  3103. IF it_newbegin THEN taskid = 0 //还原outwareid
  3104. rslt = 0
  3105. arg_msg = "因网络或其它原因导致插入费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  3106. GOTO ext
  3107. END IF
  3108. NEXT
  3109. ext:
  3110. IF rslt = 0 THEN
  3111. ROLLBACK Using commit_transaction;
  3112. p_clearmx()
  3113. it_mxbt_item = 0
  3114. ELSEIF arg_ifcommit And rslt = 1 THEN
  3115. COMMIT Using commit_transaction;
  3116. it_mxbt_item = 0
  3117. END IF
  3118. RETURN rslt
  3119. end function
  3120. public function integer stopsaletask_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  3121. IF arg_taskid <= 0 THEN
  3122. rslt = 0
  3123. ARG_MSG = '错误销售订单唯一码'
  3124. GOTO ext
  3125. END IF
  3126. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  3127. rslt = 0
  3128. GOTO ext
  3129. END IF
  3130. IF Status <> 3 THEN
  3131. rslt = 0
  3132. ARG_MSG = "订单只有在终止状态才可以执行取消终止,请核对"
  3133. GOTO ext
  3134. END IF
  3135. UPDATE u_SaleTask
  3136. SET Status = 1,
  3137. accomplishdate = null ,
  3138. stopemp = ''
  3139. Where TaskID = :arg_taskid And scid = :arg_scid Using commit_transaction ;
  3140. IF commit_transaction.SQLCode <> 0 THEN
  3141. rslt = 0
  3142. ARG_MSG = "取消终止销售订单操作失败"+"~n"+commit_transaction.SQLErrText
  3143. GOTO ext
  3144. END IF
  3145. it_newbegin = False
  3146. it_updatebegin = False
  3147. ext:
  3148. IF rslt = 0 THEN
  3149. ROLLBACK Using commit_transaction;
  3150. ELSEIF arg_ifcommit THEN
  3151. COMMIT Using commit_transaction;
  3152. END IF
  3153. p_reset()
  3154. Return (rslt)
  3155. end function
  3156. public function integer acceptmx_chk (s_saletaskmx s_mx, ref string arg_msg);int rslt = 1
  3157. //检查物料id
  3158. Int li_statusflag,li_woodcodeflag,li_pcodeflag
  3159. Int li_status_check,li_woodcode_check,li_pcode_check
  3160. Decimal ld_capacity,ld_capacity_zj
  3161. s_mtrlcfg_expr s_pz[]
  3162. String ls_status_zj
  3163. Long ll_i
  3164. //检查物料id
  3165. SELECT
  3166. statusflag,
  3167. woodcodeflag,
  3168. pcodeflag,
  3169. status_check,
  3170. woodcode_check,
  3171. pcode_check
  3172. INTO
  3173. :li_statusflag,
  3174. :li_woodcodeflag,
  3175. :li_pcodeflag,
  3176. :li_status_check,
  3177. :li_woodcode_check,
  3178. :li_pcode_check
  3179. FROM u_mtrldef
  3180. Where u_mtrldef.mtrlid = :s_mx.mtrlid USING commit_transaction ;
  3181. IF commit_transaction.SQLCode <> 0 THEN
  3182. rslt = 0
  3183. arg_msg = "第" + String(s_mx.printid) + "行,查询操作失败,编码:"+s_mx.mtrlcode
  3184. GOTO ext
  3185. END IF
  3186. IF li_statusflag = 2 THEN
  3187. IF s_mx.status = '' THEN
  3188. arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_status + '字段使用组合配置,请输入'
  3189. rslt = 0
  3190. GOTO ext
  3191. END IF
  3192. ELSEIF li_statusflag = 4 And li_status_check = 1 THEN
  3193. IF s_mx.status = '' THEN
  3194. arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入'
  3195. rslt = 0
  3196. GOTO ext
  3197. END IF
  3198. ELSEIF li_statusflag = 1 Or li_statusflag = 0 THEN
  3199. IF f_check_status(1,s_mx.status) = 0 THEN
  3200. rslt = 0
  3201. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_status+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.status
  3202. GOTO ext
  3203. END IF
  3204. END IF
  3205. IF li_woodcodeflag = 4 And li_woodcode_check = 1 THEN
  3206. IF s_mx.woodcode = '' THEN
  3207. arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_woodcode + '字段使用部件选配,请输入'
  3208. rslt = 0
  3209. GOTO ext
  3210. END IF
  3211. ELSEIF li_woodcodeflag = 1 Or li_woodcodeflag = 0 THEN
  3212. IF f_check_status(2,s_mx.woodcode) = 0 THEN
  3213. rslt = 0
  3214. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_woodcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.woodcode
  3215. GOTO ext
  3216. END IF
  3217. END IF
  3218. IF li_pcodeflag = 4 And li_pcode_check = 1 THEN
  3219. IF s_mx.pcode = '' THEN
  3220. arg_msg = '行:'+String(s_mx.printid)+',物料'+sys_option_change_pcode + '字段使用部件选配,请输入'
  3221. rslt = 0
  3222. GOTO ext
  3223. END IF
  3224. ELSEIF li_pcodeflag = 1 Or li_pcodeflag = 0 THEN
  3225. IF f_check_status(3,s_mx.pcode) = 0 THEN
  3226. rslt = 0
  3227. arg_msg = '行:'+String(s_mx.printid)+",查询操作失败,可能"+sys_option_change_pcode+"未定义,物料:"+s_mx.mtrlcode+",内容:"+s_mx.pcode
  3228. GOTO ext
  3229. END IF
  3230. END IF
  3231. ext:
  3232. return rslt
  3233. end function
  3234. public function integer auditing_chk (ref string arg_msg);Long rslt = 1
  3235. Long i
  3236. //IF sys_option_hide_ware = 0 THEN
  3237. // IF billtype <> 9 THEN
  3238. // IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  3239. // rslt = 0
  3240. // GOTO ext
  3241. // END IF
  3242. // ELSE
  3243. // IF Not sysautobuild THEN
  3244. // IF dscrp = '盘点表审核自动生成盘盈单' THEN
  3245. // arg_msg = '系统自动生成的单据不能手动审核'
  3246. // rslt = 0
  3247. // GOTO ext
  3248. // END IF
  3249. // END IF
  3250. // END IF
  3251. //END IF
  3252. //// //建立自动反扣领料单
  3253. IF uf_create_scll(scid,taskid,taskcode,arg_msg) = 0 THEN
  3254. rslt = 0
  3255. GOTO ext
  3256. END IF
  3257. //IF uf_update_inware_cost ( arg_msg, False) <> 1 THEN
  3258. // rslt = 0
  3259. // GOTO ext
  3260. //END IF
  3261. ext:
  3262. RETURN rslt
  3263. end function
  3264. public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg);//uf_create_scll(arg_scid,arg_billid,arg_billcode,arg_storageid,arg_storageid_arr,arg_mtrlid_arr,arg_qty_arr,arg_msg)
  3265. Long rslt = 1
  3266. Long i, j,k,l,pid, ll_cnt, ll_cnt_2
  3267. String ls_mtrlcode,ls_storagename,ls_unit
  3268. Long ll_rqmtrlid
  3269. Long ll_taskid, ll_printid, ll_ifrel
  3270. Long ll_outwareid
  3271. Long ll_storageid_arr[], ll_wrkgrpid_arr[], ll_mtrlid_arr[],ll_rqmtrlid_arr[],ll_storageid_bill[], ll_wrkgrpid_bill[]
  3272. Decimal lde_qty_arr[], lde_add_DstrQty, lde_trueRqqty, lde_DstrQty
  3273. uo_outware_scll uo_ware
  3274. uo_ware = Create uo_outware_scll
  3275. uo_ware.commit_transaction = commit_transaction
  3276. s_mtrlware_fk s_fk, s_fk_null
  3277. s_inware_cp_fkmx s_fpmx,s_null
  3278. FOR i = 1 To it_mxbt
  3279. //// //获取产品反扣物料资料
  3280. s_fpmx = s_null
  3281. //mei
  3282. IF uf_get_pfmtrlmx(saletaskmx[i].mtrlid,saletaskmx[i].saleqty,s_fpmx,arg_msg) = 0 THEN
  3283. rslt = 0
  3284. GOTO ext
  3285. END IF
  3286. //汇总需领料的物料
  3287. FOR j = 1 To UpperBound(s_fpmx.storageid)
  3288. ll_rqmtrlid = 0
  3289. IF saletaskmx[i].taskid > 0 THEN
  3290. SELECT rqmtrlid
  3291. INTO :ll_rqmtrlid
  3292. FROM u_saleRqMtrl_scll
  3293. WHERE taskID = :saletaskmx[i].taskid
  3294. AND printid = :saletaskmx[i].printid
  3295. And mtrlid = :s_fpmx.mtrlid[j];
  3296. IF sqlca.SQLCode <> 0 THEN
  3297. ll_rqmtrlid = 0
  3298. END IF
  3299. END IF
  3300. //统计物料
  3301. FOR k = 1 To UpperBound(ll_storageid_arr)
  3302. IF ll_storageid_arr[k] = s_fpmx.storageid[j] And &
  3303. ll_mtrlid_arr[k] = s_fpmx.mtrlid[j] And &
  3304. ll_wrkgrpid_arr[k] = s_fpmx.wrkgrpid[j] And &
  3305. ll_rqmtrlid_arr[k] = ll_rqmtrlid THEN
  3306. lde_qty_arr[k] = lde_qty_arr[k] + s_fpmx.qty[j]
  3307. GOTO nxt
  3308. END IF
  3309. NEXT
  3310. ll_cnt++
  3311. ll_storageid_arr[ll_cnt] = s_fpmx.storageid[j]
  3312. ll_wrkgrpid_arr[ll_cnt] = s_fpmx.wrkgrpid[j]
  3313. ll_mtrlid_arr[ll_cnt] = s_fpmx.mtrlid[j]
  3314. ll_rqmtrlid_arr[ll_cnt] = ll_rqmtrlid
  3315. lde_qty_arr[ll_cnt] = s_fpmx.qty[j]
  3316. nxt:
  3317. //统计仓库
  3318. FOR k = 1 To UpperBound(ll_storageid_bill)
  3319. IF ll_storageid_bill[k] = s_fpmx.storageid[j] And ll_wrkgrpid_bill[k] = s_fpmx.wrkgrpid[j] THEN
  3320. GOTO nxt2
  3321. END IF
  3322. NEXT
  3323. ll_cnt_2++
  3324. ll_storageid_bill[ll_cnt_2] = s_fpmx.storageid[j]
  3325. ll_wrkgrpid_bill[ll_cnt_2] = s_fpmx.wrkgrpid[j]
  3326. nxt2:
  3327. NEXT
  3328. NEXT
  3329. //按仓库, 工作中心 生成领料单
  3330. FOR i = 1 To UpperBound(ll_storageid_bill)
  3331. pid = 0
  3332. IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN
  3333. rslt = 0
  3334. GOTO ext
  3335. END IF
  3336. uo_ware.outdate = DateTime(Today(),Now())
  3337. uo_ware.outrep = publ_operator
  3338. uo_ware.dscrp = '销售订单自动生成领料'
  3339. uo_ware.storageid = ll_storageid_bill[i]
  3340. uo_ware.relid = ll_wrkgrpid_bill[i] /// //领料组、工作中心ID
  3341. uo_ware.relint_1 = arg_billid
  3342. uo_ware.part = arg_billcode
  3343. SELECT storagename
  3344. INTO :ls_storagename
  3345. FROM u_storage
  3346. WHERE storageid = :ll_storageid_bill[i]
  3347. Using commit_transaction;
  3348. IF commit_transaction.SQLCode <> 0 THEN
  3349. rslt = 0
  3350. arg_msg = '查询仓库资料失败'
  3351. GOTO ext
  3352. END IF
  3353. FOR j = 1 To UpperBound(ll_storageid_arr)
  3354. IF ll_storageid_arr[j] = ll_storageid_bill[i] And ll_wrkgrpid_arr[j] = ll_wrkgrpid_bill[i] THEN
  3355. s_fk = s_fk_null
  3356. ll_rqmtrlid = 0
  3357. ll_taskid = 0
  3358. ll_printid = 0
  3359. ll_ifrel = 0
  3360. IF ll_rqmtrlid_arr[j] > 0 THEN
  3361. SELECT taskID, printid,trueRqqty , DstrQty
  3362. INTO :ll_taskid, :ll_printid, :lde_trueRqqty, :lde_DstrQty
  3363. FROM u_saleRqMtrl_scll
  3364. Where rqmtrlid = :ll_rqmtrlid_arr[j] Using commit_transaction;
  3365. IF commit_transaction.SQLCode = 0 THEN
  3366. ll_rqmtrlid = ll_rqmtrlid_arr[j]
  3367. ll_ifrel = 1
  3368. END IF
  3369. END IF
  3370. SELECT mtrlcode,unit
  3371. INTO :ls_mtrlcode,:ls_unit
  3372. FROM u_mtrldef
  3373. Where mtrlid = :ll_mtrlid_arr[j] Using commit_transaction;
  3374. IF commit_transaction.SQLCode <> 0 THEN
  3375. rslt = 0
  3376. arg_msg = '查询物料资料失败'
  3377. GOTO ext
  3378. END IF
  3379. lde_add_DstrQty = lde_qty_arr[j]
  3380. IF ll_ifrel = 1 THEN
  3381. IF lde_add_DstrQty > lde_trueRqqty - lde_DstrQty THEN
  3382. lde_add_DstrQty = lde_trueRqqty - lde_DstrQty
  3383. END IF
  3384. END IF
  3385. IF lde_add_DstrQty > 0 THEN
  3386. //MEI
  3387. IF uf_get_mtrlware( ll_storageid_bill[i],ll_mtrlid_arr[j],lde_add_DstrQty,ls_mtrlcode,ls_storagename,s_fk,arg_msg) = 0 THEN
  3388. rslt = 0
  3389. GOTO ext
  3390. END IF
  3391. FOR k = 1 To UpperBound(s_fk.mtrlwareid)
  3392. pid++
  3393. IF uo_ware.acceptmx(s_fk.mtrlwareid[k],&
  3394. s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,&
  3395. '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,&
  3396. 0,0,0,&
  3397. ls_unit,1,'','') = 0 THEN
  3398. rslt = 0
  3399. GOTO ext
  3400. END IF
  3401. NEXT
  3402. END IF
  3403. END IF
  3404. NEXT
  3405. IF uo_ware.Save(False,arg_msg) = 0 THEN
  3406. rslt = 0
  3407. GOTO ext
  3408. END IF
  3409. IF sys_option_saletask_autocreatescll = 1 THEN
  3410. ll_outwareid = uo_ware.outwareid
  3411. IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN
  3412. rslt = 0
  3413. GOTO ext
  3414. END IF
  3415. IF uo_ware.auditing(False,arg_msg) = 0 THEN
  3416. rslt = 0
  3417. GOTO ext
  3418. END IF
  3419. END IF
  3420. NEXT
  3421. ext:
  3422. Destroy uo_ware
  3423. RETURN rslt
  3424. end function
  3425. public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1
  3426. Long ll_ifautoscll,ll_fklevel,ll_sauditflag
  3427. String ls_mtrlcode
  3428. SELECT ifautoscll_saletask,fklevel,mtrlcode,sauditflag
  3429. INTO :ll_ifautoscll,:ll_fklevel,:ls_mtrlcode,:ll_sauditflag
  3430. FROM u_mtrldef
  3431. Where mtrlid = :arg_mtrlid Using commit_transaction;
  3432. IF commit_transaction.SQLCode <> 0 THEN
  3433. rslt = 0
  3434. arg_msg = '查询产品资料失败,产品唯一码错误'
  3435. GOTO ext
  3436. END IF
  3437. IF ll_ifautoscll = 0 THEN
  3438. rslt = 1
  3439. GOTO ext
  3440. END IF
  3441. IF ll_sauditflag = 0 THEN
  3442. rslt = 0
  3443. arg_msg = '产品['+ls_mtrlcode+']清单还没审核,请先审核'
  3444. GOTO ext
  3445. END IF
  3446. Dec lde_Sonscale,lde_sonloss,lde_sondecloss
  3447. Long ll_SonMtrlid,ll_storageid,k,ll_dft,cnt,ll_wrkgrpid
  3448. String ls_mtrlcode_pf
  3449. IF ll_fklevel = 0 THEN // //清单反扣直接下级物料
  3450. datastore ds_pfmx
  3451. ds_pfmx = Create datastore
  3452. ds_pfmx.DataObject = 'ds_mtrl_pfmx'
  3453. ds_pfmx.SetTransObject(commit_transaction)
  3454. ds_pfmx.Retrieve(arg_mtrlid)
  3455. IF ds_pfmx.RowCount() = 0 THEN
  3456. rslt = 1
  3457. GOTO ext
  3458. END IF
  3459. FOR k = 1 To ds_pfmx.RowCount()
  3460. IF ll_SonMtrlid <> ds_pfmx.Object.u_prdpf_sonmtrlid[k] THEN
  3461. ll_SonMtrlid = ds_pfmx.Object.u_prdpf_sonmtrlid[k]
  3462. ll_storageid = ds_pfmx.Object.u_mtrl_storage_storageid[k]
  3463. lde_Sonscale = ds_pfmx.Object.u_prdpf_sonscale[k]
  3464. lde_sonloss = ds_pfmx.Object.u_prdpf_sonloss[k]
  3465. lde_sondecloss = ds_pfmx.Object.u_prdpf_sondecloss[k]
  3466. ls_mtrlcode_pf = ds_pfmx.Object.u_mtrldef_mtrlcode[k]
  3467. ll_wrkgrpid = ds_pfmx.Object.u_prdpf_wrkgrpid[k]
  3468. IF ll_wrkgrpid <= 0 THEN
  3469. rslt = 0
  3470. arg_msg = '产品['+ls_mtrlcode+']清单中物料['+ls_mtrlcode_pf+']还没设定领料组,请先设定'
  3471. GOTO ext
  3472. END IF
  3473. IF ds_pfmx.Object.u_mtrl_storage_dft[k] <> 1 THEN
  3474. rslt = 0
  3475. arg_msg = '物料['+ls_mtrlcode_pf+']还没设定默认反扣仓库,请先设定'
  3476. GOTO ext
  3477. END IF
  3478. cnt++
  3479. arg_s_fkmx.storageid[cnt] = ll_storageid
  3480. arg_s_fkmx.mtrlid[cnt] = ll_SonMtrlid
  3481. arg_s_fkmx.wrkgrpid[cnt] = ll_wrkgrpid
  3482. arg_s_fkmx.qty[cnt] = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss
  3483. END IF
  3484. NEXT
  3485. ELSEIF ll_fklevel = 1 THEN // //清单反扣最底层物料
  3486. IF uf_cmpl_rqmtrl(arg_mtrlid,arg_qty,0,ll_sauditflag,ls_mtrlcode,arg_s_fkmx,arg_msg) = 0 THEN
  3487. rslt = 0
  3488. GOTO ext
  3489. END IF
  3490. END IF
  3491. ext:
  3492. RETURN rslt
  3493. end function
  3494. public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, s_inware_cp_fkmx arg_s_fkmx, string arg_msg);Long rslt = 1
  3495. Long ll_cnt,ll_lp,ll_rft,k,i
  3496. Dec lde_Sonscale,lde_sonloss,lde_sondecloss,lde_qty
  3497. Long ll_SonMtrlid,ll_storageid,ll_dft,ll_flag,ll_wrkgrpid
  3498. String ls_mtrlcode_pf,ls_mtrlcode
  3499. Long ll_SonMtrlid_arr[],ll_storageid_arr[],ll_flag_arr[],ll_wrkgrpid_arr[]
  3500. Dec ll_qty_arr[]
  3501. String ls_mtrlcode_arr[]
  3502. SELECT count(*)
  3503. INTO :ll_cnt
  3504. FROM u_PrdPF
  3505. Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction;
  3506. IF commit_transaction.SQLCode <> 0 THEN
  3507. rslt = 0
  3508. arg_msg = '查询产品['+arg_mtrlcode+']清单失败'
  3509. GOTO ext
  3510. END IF
  3511. IF arg_lp = 0 THEN
  3512. IF ll_cnt = 0 THEN
  3513. rslt = 0
  3514. arg_msg = '产品['+arg_mtrlcode+']还没设定清单,请先设定'
  3515. GOTO ext
  3516. END IF
  3517. IF arg_flag = 0 THEN
  3518. rslt = 0
  3519. arg_msg = '产品['+arg_mtrlcode+']清单还没审核,请先审核'
  3520. GOTO ext
  3521. END IF
  3522. ELSE
  3523. IF ll_cnt = 0 THEN
  3524. rslt = 2
  3525. GOTO ext
  3526. ELSEIF ll_cnt > 0 AND arg_flag = 0 THEN
  3527. rslt = 0
  3528. arg_msg = '物料['+arg_mtrlcode+']清单还没审核,请先审核'
  3529. GOTO ext
  3530. END IF
  3531. END IF
  3532. ll_cnt = 0
  3533. DECLARE cur_pf CURSOR FOR
  3534. SELECT u_PrdPF.Sonscale,
  3535. u_PrdPF.sonloss,
  3536. u_PrdPF.sondecloss,
  3537. u_PrdPF.SonMtrlid,
  3538. u_mtrldef.mtrlcode,
  3539. u_mtrldef.sauditflag,
  3540. u_PrdPF.wrkgrpid
  3541. FROM u_PrdPF INNER JOIN
  3542. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  3543. Where ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction;
  3544. OPEN cur_pf;
  3545. FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid;
  3546. DO WHILE commit_transaction.SQLCode = 0
  3547. lde_qty = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss
  3548. k++
  3549. ll_SonMtrlid_arr[k] = ll_SonMtrlid
  3550. ll_qty_arr[k] = lde_qty
  3551. ll_flag_arr[k] = ll_flag
  3552. ls_mtrlcode_arr[k] = ls_mtrlcode_pf
  3553. ll_wrkgrpid_arr[k] = ll_wrkgrpid
  3554. FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid;
  3555. LOOP
  3556. CLOSE cur_pf;
  3557. FOR i = 1 TO UpperBound(ll_SonMtrlid_arr)
  3558. ll_lp = arg_lp + 1
  3559. IF ll_wrkgrpid_arr[i] <= 0 THEN
  3560. rslt = 0
  3561. arg_msg = '产品['+arg_mtrlcode+']清单中物料['+ls_mtrlcode_arr[i]+']领料组还没设定,请先设定'
  3562. GOTO ext
  3563. END IF
  3564. ll_rft = uf_cmpl_rqmtrl(ll_SonMtrlid_arr[i],ll_qty_arr[i],ll_lp,ll_flag_arr[i],ls_mtrlcode_arr[i],arg_s_fkmx,arg_msg)
  3565. IF ll_rft = 0 THEN
  3566. rslt = 0
  3567. GOTO ext
  3568. ELSEIF ll_rft = 1 THEN
  3569. CONTINUE
  3570. END IF
  3571. IF ll_SonMtrlid_arr[i] > 0 THEN
  3572. SELECT count(*)
  3573. INTO :ll_cnt
  3574. FROM u_mtrldef LEFT OUTER JOIN
  3575. u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid
  3576. WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND
  3577. IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction;
  3578. IF commit_transaction.SQLCode <> 0 THEN
  3579. rslt = 0
  3580. arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败'
  3581. GOTO ext
  3582. END IF
  3583. IF ll_cnt = 0 THEN
  3584. rslt = 0
  3585. arg_msg = '物料['+ls_mtrlcode_arr[i]+']还没设定默认反扣仓库,请先设定'
  3586. GOTO ext
  3587. ELSEIF ll_cnt > 1 THEN
  3588. rslt = 0
  3589. arg_msg = '物料['+ls_mtrlcode_arr[i]+']设定了多个默认反扣仓库,只能设置一个'
  3590. GOTO ext
  3591. END IF
  3592. SELECT u_mtrl_storage.storageid
  3593. INTO :ll_storageid
  3594. FROM u_mtrldef LEFT OUTER JOIN
  3595. u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid
  3596. WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND
  3597. IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction;
  3598. IF commit_transaction.SQLCode <> 0 THEN
  3599. rslt = 0
  3600. arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败'
  3601. GOTO ext
  3602. END IF
  3603. END IF
  3604. it_mxbt_pf++
  3605. arg_s_fkmx.storageid[it_mxbt_pf] = ll_storageid
  3606. arg_s_fkmx.mtrlid[it_mxbt_pf] = ll_SonMtrlid_arr[i]
  3607. arg_s_fkmx.wrkgrpid[it_mxbt_pf] = ll_wrkgrpid_arr[i]
  3608. arg_s_fkmx.qty[it_mxbt_pf] = ll_qty_arr[i]
  3609. NEXT
  3610. ext:
  3611. RETURN rslt
  3612. end function
  3613. public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg);//uf_get_mtrlware(arg_storageid,arg_mtrlid,arg_qty,arg_mtrlcode,arg_storagename,s_fk,arg_msg)
  3614. Long rslt = 1
  3615. Dec ll_sumqty
  3616. Long plancnt
  3617. SELECT isnull(sum(noallocqty),0)
  3618. INTO :ll_sumqty
  3619. FROM u_mtrlware
  3620. WHERE ( mtrlid = :arg_mtrlid) AND
  3621. (storageid = :arg_storageid) USING commit_transaction;
  3622. IF commit_transaction.SQLCode <> 0 THEN
  3623. rslt = 0
  3624. arg_msg = '查询物料['+arg_mtrlcode+']库存失败'
  3625. GOTO ext
  3626. END IF
  3627. IF ll_sumqty < arg_qty THEN
  3628. rslt = 0
  3629. arg_msg = '物料['+arg_mtrlcode+']在仓库['+arg_storagename+']库存为:'+String(ll_sumqty,'#,##0.#####')+',少于需领数:'+String(arg_qty,'#,##0.#####')
  3630. GOTO ext
  3631. END IF
  3632. SELECT count(*)
  3633. INTO :plancnt
  3634. FROM u_mtrlware
  3635. WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND
  3636. ( u_mtrlware.storageid = :arg_storageid ) AND
  3637. ( u_mtrlware.noallocqty > 0 ) USING commit_transaction;
  3638. IF commit_transaction.SQLCode <> 0 THEN
  3639. rslt = 0
  3640. arg_msg = '查询物料['+arg_mtrlcode+']库存资料失败'
  3641. GOTO ext
  3642. END IF
  3643. Long ins_mtrlwareid
  3644. Dec ins_qty,ins_addqty,ins_cost
  3645. Long count,i
  3646. Dec sumqty,noallocqty,allocqty,i_qty
  3647. noallocqty = arg_qty
  3648. DECLARE pf_cur CURSOR FOR
  3649. SELECT u_mtrlware.mtrlwareid,
  3650. u_mtrlware.noallocqty,
  3651. u_mtrlware.noallocaddqty,
  3652. u_mtrlware.cost
  3653. FROM u_mtrlware
  3654. WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND
  3655. ( u_mtrlware.storageid = :arg_storageid ) AND
  3656. ( u_mtrlware.noallocqty > 0 )
  3657. Order By u_mtrlware.noallocqty Asc USING commit_transaction;
  3658. OPEN pf_cur;
  3659. count = 1
  3660. FETCH pf_cur INTO :ins_mtrlwareid, &
  3661. :ins_qty,:ins_addqty,:ins_cost ;
  3662. DO WHILE sqlca.SQLCode = 0 AND sumqty < arg_qty
  3663. count++
  3664. sumqty = sumqty+ins_qty
  3665. IF ins_qty > noallocqty THEN
  3666. i_qty = noallocqty
  3667. allocqty = allocqty+i_qty
  3668. noallocqty = 0
  3669. ins_addqty = Int(ins_addqty * noallocqty / ins_qty)
  3670. ELSEIF ins_qty = noallocqty THEN
  3671. i_qty = noallocqty
  3672. allocqty = allocqty+i_qty
  3673. noallocqty = 0 //noallocqty - ins_qty
  3674. ELSE
  3675. IF plancnt > 1 THEN
  3676. i_qty = sumqty - allocqty
  3677. allocqty = allocqty+i_qty
  3678. noallocqty = arg_qty - allocqty
  3679. ELSE
  3680. i_qty = arg_qty
  3681. noallocqty = 0
  3682. END IF
  3683. END IF
  3684. i++
  3685. s_fk.mtrlwareid[i] = ins_mtrlwareid
  3686. s_fk.addqty[i] = ins_addqty
  3687. s_fk.qty[i] = i_qty
  3688. s_fk.cost[i] = ins_cost
  3689. FETCH pf_cur INTO :ins_mtrlwareid,&
  3690. :ins_qty,:ins_addqty,:ins_cost ;
  3691. LOOP
  3692. count = count - 1
  3693. CLOSE pf_cur;
  3694. ext:
  3695. RETURN rslt
  3696. end function
  3697. public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit);//Int rslt = 1
  3698. //
  3699. //long i
  3700. //Long ll_inprice_mode
  3701. //Decimal ld_planprice
  3702. //
  3703. //Decimal wfjgprice, jgprice,outcost
  3704. //Decimal ld_outamt
  3705. //Decimal ld_inamt
  3706. //Decimal ld_cost_price
  3707. //Decimal ld_fprice
  3708. //
  3709. //FOR i = 1 To it_mxbt
  3710. //
  3711. // SELECT inprice_mode, planprice
  3712. // INTO :ll_inprice_mode, :ld_planprice
  3713. // FROM u_mtrldef
  3714. // Where mtrlid = :inwaremx[i].mtrlid
  3715. // using commit_transaction;
  3716. // IF commit_transaction.SQLCode <> 0 THEN
  3717. // rslt = 0
  3718. // arg_msg = '查询物料生产进仓取价模式失败,' + commit_transaction.SQLErrText
  3719. // GOTO ext
  3720. // END IF
  3721. //
  3722. // // ll_inprice_mode 进仓成本模式; 0-取计划价; 1-按领用材料最新采购价; 2-按领用材料出仓成本价
  3723. // IF ll_inprice_mode = 0 THEN //取计划价
  3724. // //不需要修改, 成功,下一条
  3725. // CONTINUE
  3726. // END IF
  3727. //
  3728. // SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost
  3729. // INTO :wfjgprice,:jgprice,:outcost
  3730. // FROM u_mtrldef INNER JOIN
  3731. // u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN
  3732. // (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode
  3733. // FROM u_mtrlprice_sum AS u_mtrlprice_sum_1
  3734. // GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON
  3735. // u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND
  3736. // u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND
  3737. // u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND
  3738. // u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND
  3739. // u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND
  3740. // u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate
  3741. // WHERE (u_mtrlprice_sum.mtrlid = :inwaremx[i].mtrlid)
  3742. // AND (u_mtrlprice_sum.status = :inwaremx[i].status)
  3743. // AND (u_mtrlprice_sum.woodcode = :inwaremx[i].woodcode)
  3744. // And (u_mtrlprice_sum.pcode = :inwaremx[i].pcode)
  3745. // using commit_transaction;
  3746. //
  3747. // IF commit_transaction.SQLCode <> 0 THEN //统计成本
  3748. // wfjgprice = 0
  3749. // jgprice = 0
  3750. // outcost = 0
  3751. // END IF
  3752. //
  3753. //
  3754. // IF IsNull(wfjgprice) THEN wfjgprice = 0
  3755. // IF IsNull(jgprice) THEN jgprice = 0
  3756. // IF IsNull(outcost) THEN outcost = 0
  3757. //
  3758. //
  3759. // IF ll_inprice_mode = 1 THEN //按领用材料最新采购价
  3760. //
  3761. // SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0)
  3762. // INTO :ld_outamt
  3763. // FROM u_outwaremx INNER JOIN
  3764. // u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
  3765. // v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND
  3766. // u_outwaremx.status = v_maxprice_sptprice.status AND
  3767. // u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND
  3768. // u_outwaremx.pcode = v_maxprice_sptprice.pcode
  3769. // WHERE (u_outware.billtype = 3)
  3770. // AND (u_outwaremx.scid = :scid)
  3771. // AND (u_outwaremx.relid = :inwaremx[i].relid)
  3772. // AND (u_outwaremx.relprintid = :inwaremx[i].relprintid)
  3773. // using commit_transaction;
  3774. // IF commit_transaction.SQLCode <> 0 THEN
  3775. // rslt = 0
  3776. // arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText
  3777. // GOTO ext
  3778. // END IF
  3779. //
  3780. // SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  3781. // INTO :ld_inamt
  3782. // FROM u_inwaremx INNER JOIN
  3783. // u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  3784. // WHERE (u_inware.billtype = 3)
  3785. // AND (u_inwaremx.scid = :scid)
  3786. // AND (u_inwaremx.relid = :inwaremx[i].relid)
  3787. // AND (u_inwaremx.relprintid = :inwaremx[i].relprintid)
  3788. // AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid)
  3789. // And (u_inware.flag = 1)
  3790. // using commit_transaction;
  3791. // IF commit_transaction.SQLCode <> 0 THEN
  3792. // rslt = 0
  3793. // arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText
  3794. // GOTO ext
  3795. // END IF
  3796. //
  3797. // ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty
  3798. // ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  3799. //
  3800. //
  3801. //
  3802. // ELSEIF ll_inprice_mode = 2 THEN //按领用材料出仓成本价
  3803. // SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0)
  3804. // INTO :ld_outamt
  3805. // FROM u_outwaremx INNER JOIN
  3806. // u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid
  3807. // WHERE (u_outware.billtype = 3)
  3808. // AND (u_outwaremx.scid = :scid)
  3809. // AND (u_outwaremx.relid = :inwaremx[i].relid)
  3810. // AND (u_outwaremx.relprintid = :inwaremx[i].relprintid)
  3811. // using commit_transaction;
  3812. // IF commit_transaction.SQLCode <> 0 THEN
  3813. // rslt = 0
  3814. // arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText
  3815. // GOTO ext
  3816. // END IF
  3817. //
  3818. // SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  3819. // INTO :ld_inamt
  3820. // FROM u_inwaremx INNER JOIN
  3821. // u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  3822. // WHERE (u_inware.billtype = 3)
  3823. // AND (u_inwaremx.scid = :scid)
  3824. // AND (u_inwaremx.relid = :inwaremx[i].relid)
  3825. // AND (u_inwaremx.relprintid = :inwaremx[i].relprintid)
  3826. // AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid)
  3827. // And (u_inware.flag = 1)
  3828. // using commit_transaction;
  3829. // IF commit_transaction.SQLCode <> 0 THEN
  3830. // rslt = 0
  3831. // arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText
  3832. // GOTO ext
  3833. // END IF
  3834. //
  3835. // ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty
  3836. // ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  3837. //
  3838. // END IF
  3839. //
  3840. // inwaremx[i].fprice = ld_fprice
  3841. // inwaremx[i].cost = ld_fprice
  3842. // inwaremx[i].costamt = round(inwaremx[i].qty * ld_fprice, 2)
  3843. //
  3844. // UPDATE u_inwaremx
  3845. // SET cost_price = :ld_cost_price,
  3846. // fprice = :ld_fprice,
  3847. // cost = :ld_fprice,
  3848. // costamt = round(qty * :ld_fprice,2)
  3849. // WHERE scid = :scid
  3850. // AND inwareid = :inwareid
  3851. // And printid = :inwaremx[i].printid
  3852. // using commit_transaction;
  3853. // IF commit_transaction.SQLCode <> 0 THEN
  3854. // rslt = 0
  3855. // IF ll_inprice_mode = 1 THEN
  3856. // arg_msg = '行:'+String(i)+',按领用材料最新采购价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  3857. // ELSEIF ll_inprice_mode = 2 THEN
  3858. // arg_msg = '行:'+String(i)+',按领用材料出仓成本价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  3859. // ELSE
  3860. // arg_msg = '行:'+String(i)+',更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  3861. // END IF
  3862. // GOTO ext
  3863. // END IF
  3864. //NEXT
  3865. //
  3866. //ext:
  3867. //
  3868. //IF rslt = 0 THEN
  3869. // ROLLBACK Using commit_transaction;
  3870. //ELSEIF arg_ifcommit THEN
  3871. // COMMIT Using commit_transaction;
  3872. //END IF
  3873. //
  3874. //RETURN rslt
  3875. //
  3876. //
  3877. return 1
  3878. //
  3879. //
  3880. //
  3881. //
  3882. end function
  3883. public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  3884. Long i,ch
  3885. Long ll_outwareid_arr[],ll_outwareid
  3886. Int li_flag_arr[], li_flag
  3887. String ls_outwarecode_arr[], ls_outwarecode
  3888. uo_outware_scll uo_ware
  3889. uo_ware = Create uo_outware_scll
  3890. uo_ware.commit_transaction = commit_transaction
  3891. uo_ware.if_getid_ture = False
  3892. //读取单据
  3893. DECLARE getoutware CURSOR FOR
  3894. SELECT outwareid , flag, outwarecode
  3895. FROM u_outware
  3896. WHERE billtype = 3
  3897. AND relint_1 = :arg_inwareid
  3898. AND dscrp = '销售订单自动生成领料'
  3899. Using commit_transaction;
  3900. OPEN getoutware;
  3901. DO WHILE commit_transaction.SQLCode = 0
  3902. FETCH getoutware Into :ll_outwareid, :li_flag, :ls_outwarecode;
  3903. IF commit_transaction.SQLCode <> 0 THEN EXIT
  3904. ch++
  3905. ll_outwareid_arr[ch] = ll_outwareid
  3906. li_flag_arr[ch] = li_flag
  3907. ls_outwarecode_arr[ch] = ls_outwarecode
  3908. LOOP
  3909. CLOSE getoutware;
  3910. //检查审核
  3911. IF sys_option_saletask_autocreatescll = 0 THEN
  3912. FOR i = 1 To ch
  3913. IF li_flag_arr[i] = 1 THEN
  3914. rslt = 0
  3915. arg_msg = "系统选项[082]限制,相关领料单["+ls_outwarecode_arr[i]+"]已审核,请手动撤审后再处理生产进仓单"
  3916. GOTO ext
  3917. END IF
  3918. NEXT
  3919. END IF
  3920. //删除单据
  3921. String ls_msg
  3922. FOR i = 1 To ch
  3923. IF sys_option_saletask_autocreatescll = 1 THEN //自动撤审
  3924. IF uo_ware.getinfo(arg_scid,ll_outwareid_arr[i],arg_msg) = 0 THEN
  3925. rslt = 0
  3926. GOTO ext
  3927. END IF
  3928. IF uo_ware.c_auditing(False,arg_msg) = 0 THEN
  3929. rslt = 0
  3930. GOTO ext
  3931. END IF
  3932. END IF
  3933. IF uo_ware.del(arg_scid,ll_outwareid_arr[i],arg_msg,False) = 0 THEN
  3934. rslt = 0
  3935. GOTO ext
  3936. END IF
  3937. IF sys_option_saletask_autocreatescll = 1 THEN
  3938. ls_msg = "销售订单撤审自动撤审、删除相关领料单"
  3939. ELSE
  3940. ls_msg = "销售订单撤审自动删除相关领料单"
  3941. END IF
  3942. if f_setsysoplog('领料单',ls_msg+',id:'+String(ll_outwareid_arr[i])+',code:'+ls_outwarecode_arr[i],arg_msg,False) = 0 then
  3943. rslt = 0
  3944. goto ext
  3945. end if
  3946. NEXT
  3947. ext:
  3948. Destroy uo_ware
  3949. IF rslt = 0 THEN
  3950. ROLLBACK Using commit_transaction;
  3951. ELSE
  3952. COMMIT Using commit_transaction;
  3953. END IF
  3954. RETURN rslt
  3955. end function
  3956. public function integer priceaudit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//audit
  3957. Int rslt = 1,cnt = 0
  3958. Long ll_i
  3959. IF arg_taskid <= 0 THEN
  3960. rslt = 0
  3961. arg_msg = '错误销售订单唯一码'
  3962. GOTO ext
  3963. END IF
  3964. IF getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  3965. rslt = 0
  3966. GOTO ext
  3967. END IF
  3968. IF priceflag <> 0 THEN
  3969. rslt = 0
  3970. arg_msg = "订单已经确认,操作取消"
  3971. GOTO ext
  3972. END IF
  3973. cnt = 0
  3974. SELECT count(*) INTO :cnt
  3975. FROM u_user
  3976. Where username = :arg_emp Using commit_transaction;
  3977. IF commit_transaction.SQLCode <> 0 THEN
  3978. rslt = 0
  3979. arg_msg = "查询操作失败,操作员!"
  3980. GOTO ext
  3981. END IF
  3982. IF cnt = 0 THEN
  3983. rslt = 0
  3984. arg_msg = "操作员姓名未登记或已取消!"
  3985. GOTO ext
  3986. END IF
  3987. UPDATE u_SaleTask
  3988. SET priceemp = :arg_emp ,
  3989. pricedate = getdate(),
  3990. priceflag = 1
  3991. WHERE TaskID = :arg_taskid
  3992. And scid = :arg_scid Using commit_transaction;
  3993. IF commit_transaction.SQLCode <> 0 THEN
  3994. rslt = 0
  3995. arg_msg = "订单销售确认操作失败"+"~n"+commit_transaction.SQLErrText
  3996. GOTO ext
  3997. END IF
  3998. it_newbegin = False
  3999. it_updatebegin = False
  4000. ext:
  4001. IF rslt = 0 THEN
  4002. ROLLBACK Using commit_transaction;
  4003. ELSEIF arg_ifcommit THEN
  4004. COMMIT Using commit_transaction;
  4005. END IF
  4006. p_reset()
  4007. Return (rslt)
  4008. end function
  4009. public function integer priceaudit_cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  4010. DateTime nulldate
  4011. SetNull(nulldate)
  4012. IF arg_taskid <= 0 THEN
  4013. rslt = 0
  4014. ARG_MSG = '错误销售订单唯一码'
  4015. GOTO ext
  4016. END IF
  4017. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  4018. rslt = 0
  4019. GOTO ext
  4020. END IF
  4021. IF priceflag = 0 THEN
  4022. rslt = 0
  4023. arg_msg = "订单未确认,操作取消"
  4024. GOTO ext
  4025. END IF
  4026. UPDATE u_SaleTask
  4027. SET priceflag = 0,
  4028. priceemp = '',
  4029. pricedate = :nulldate
  4030. WHERE taskid = :arg_taskid
  4031. AND scid = :arg_scid
  4032. Using commit_transaction ;
  4033. IF commit_transaction.SQLCode <> 0 THEN
  4034. rslt = 0
  4035. ARG_MSG = "销售订单撤消确认操作失败"+"~n"+commit_transaction.SQLErrText
  4036. GOTO ext
  4037. END IF
  4038. it_newbegin = False
  4039. it_updatebegin = False
  4040. ext:
  4041. IF rslt = 0 THEN
  4042. ROLLBACK Using commit_transaction;
  4043. ELSEIF arg_ifcommit THEN
  4044. COMMIT Using commit_transaction;
  4045. END IF
  4046. p_reset()
  4047. Return (rslt)
  4048. end function
  4049. public function integer uf_chk_assemble_qty (long arg_scid, ref string arg_msg);
  4050. Int rslt = 1
  4051. Long i,j,k,new_it_mxbt
  4052. Long li_flag //检查物料是否有清单
  4053. s_saletaskmx temp_outwaremx[],new_outwaremx[] ,new_sonmtrl_outwaremx[],null_outwaremx[] //明细结构数组
  4054. temp_outwaremx = saletaskmx
  4055. Long ll_flag1
  4056. FOR i = 1 To it_mxbt
  4057. FOR j = 1 To UpperBound(new_outwaremx)
  4058. IF temp_outwaremx[i].mtrlid = new_outwaremx[j].mtrlid And temp_outwaremx[i].status = new_outwaremx[j].status And temp_outwaremx[i].woodcode = new_outwaremx[j].woodcode And temp_outwaremx[i].pcode = new_outwaremx[j].pcode THEN
  4059. new_outwaremx[j].usaleqty = new_outwaremx[j].usaleqty + temp_outwaremx[i].usaleqty
  4060. GOTO nxt1
  4061. END IF
  4062. NEXT
  4063. //查mtlwareid
  4064. Long ll_temp_mtrlwareid
  4065. ll_temp_mtrlwareid = 0
  4066. SELECT
  4067. Top 1
  4068. mtrlwareid
  4069. Into
  4070. :ll_temp_mtrlwareid
  4071. From u_mtrlware
  4072. Where ( u_mtrlware.scid = :arg_scid )
  4073. And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid )
  4074. And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status )
  4075. And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode )
  4076. And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode )
  4077. Order By u_mtrlware.noallocqty Desc
  4078. Using commit_transaction;
  4079. IF IsNull(ll_temp_mtrlwareid) THEN ll_temp_mtrlwareid = 0
  4080. new_it_mxbt++
  4081. new_outwaremx[new_it_mxbt].mtrlwareid = ll_temp_mtrlwareid
  4082. new_outwaremx[new_it_mxbt].mtrlid = temp_outwaremx[i].mtrlid
  4083. new_outwaremx[new_it_mxbt].usaleqty = temp_outwaremx[i].usaleqty
  4084. new_outwaremx[new_it_mxbt].status = temp_outwaremx[i].status
  4085. new_outwaremx[new_it_mxbt].woodcode = temp_outwaremx[i].woodcode
  4086. new_outwaremx[new_it_mxbt].pcode = temp_outwaremx[i].pcode
  4087. nxt1:
  4088. NEXT
  4089. Decimal i_noauditingqty = 0 //已开单未审
  4090. Decimal i_noallocqty = 0 //现库存数
  4091. FOR i = 1 To UpperBound(new_outwaremx)
  4092. i_noauditingqty = 0
  4093. i_noallocqty = 0
  4094. //计算库存数
  4095. SELECT
  4096. IsNull(u_mtrlware.noallocqty,0)
  4097. Into
  4098. :i_noallocqty
  4099. From u_mtrlware Left Outer join uv_mtrlware_noauditingqty
  4100. On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  4101. And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join
  4102. u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  4103. Where ( u_mtrlware.scid = :arg_scid )
  4104. And ( u_mtrlware.mtrlwareid = :new_outwaremx[i].mtrlwareid )
  4105. Using commit_transaction;
  4106. //计算已开单数
  4107. SELECT isnull(sum(u_outwaremx.uqty),0) INTO :i_noauditingqty FROM u_outwaremx INNER join u_outware
  4108. on u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid
  4109. WHERE u_outwaremx.scid = :arg_scid AND
  4110. u_outware.flag = 0 AND
  4111. u_outwaremx.mtrlwareid = :new_outwaremx[i].mtrlwareid
  4112. Using commit_transaction;
  4113. NEXT
  4114. //查下级物料清单
  4115. Long cur_mxt_pf
  4116. Long ll_SonMtrlid[],temp_ll[]
  4117. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[],temp_str[]
  4118. Decimal ld_Sonscale[]
  4119. new_it_mxbt = 0
  4120. new_sonmtrl_outwaremx = null_outwaremx //物料清单汇总
  4121. FOR i = 1 To UpperBound(new_outwaremx)
  4122. cur_mxt_pf = 1
  4123. ll_SonMtrlid = temp_ll
  4124. ls_pf_status = temp_str
  4125. ls_pf_woodcode = temp_str
  4126. ls_pf_pcode = temp_str
  4127. DECLARE cur_pf CURSOR FOR
  4128. SELECT u_PrdPF.SonMtrlid,
  4129. u_PrdPF.Sonscale,
  4130. u_PrdPF.status,
  4131. u_PrdPF.woodcode,
  4132. u_PrdPF.pcode
  4133. FROM u_PrdPF
  4134. Where u_PrdPF.mtrlid = :new_outwaremx[i].mtrlid;
  4135. OPEN cur_pf;
  4136. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  4137. DO WHILE sqlca.SQLCode = 0
  4138. cur_mxt_pf++
  4139. FETCH cur_pf Into :ll_SonMtrlid[cur_mxt_pf],:ld_Sonscale[cur_mxt_pf],:ls_pf_status[cur_mxt_pf],:ls_pf_woodcode[cur_mxt_pf],:ls_pf_pcode[cur_mxt_pf];
  4140. LOOP
  4141. cur_mxt_pf = cur_mxt_pf - 1
  4142. CLOSE cur_pf;
  4143. //物料清单 放到新数组
  4144. FOR j = 1 To cur_mxt_pf
  4145. FOR k = 1 To UpperBound(new_sonmtrl_outwaremx)
  4146. IF new_sonmtrl_outwaremx[k].mtrlid = ll_SonMtrlid[j] And new_sonmtrl_outwaremx[k].status = ls_pf_status[j] And new_sonmtrl_outwaremx[k].woodcode = ls_pf_woodcode[j] And new_sonmtrl_outwaremx[k].pcode = ls_pf_pcode[j] THEN
  4147. new_sonmtrl_outwaremx[k].usaleqty = new_sonmtrl_outwaremx[k].usaleqty + ld_Sonscale[j] * new_outwaremx[i].usaleqty
  4148. GOTO nxt2
  4149. END IF
  4150. NEXT
  4151. new_it_mxbt++
  4152. new_sonmtrl_outwaremx[new_it_mxbt].mtrlid = ll_SonMtrlid[j]
  4153. new_sonmtrl_outwaremx[new_it_mxbt].usaleqty = ld_Sonscale[j] * new_outwaremx[i].usaleqty
  4154. new_sonmtrl_outwaremx[new_it_mxbt].status = ls_pf_status[j]
  4155. new_sonmtrl_outwaremx[new_it_mxbt].woodcode = ls_pf_woodcode[j]
  4156. new_sonmtrl_outwaremx[new_it_mxbt].pcode = ls_pf_pcode[j]
  4157. NEXT
  4158. nxt2:
  4159. NEXT
  4160. //检查下级清单够不够库存
  4161. String ls_mtrlcode,ls_mtrlname
  4162. FOR i = 1 To UpperBound(new_sonmtrl_outwaremx)
  4163. i_noallocqty = 0
  4164. ls_mtrlcode = ''
  4165. ls_mtrlname = ''
  4166. //计算库存数
  4167. SELECT
  4168. u_mtrldef.mtrlcode,
  4169. u_mtrldef.mtrlname,
  4170. IsNull(sum(u_mtrlware.noallocqty),0)
  4171. Into
  4172. :ls_mtrlcode,
  4173. :ls_mtrlname,
  4174. :i_noallocqty
  4175. From u_mtrlware
  4176. Left Outer join uv_mtrlware_noauditingqty
  4177. On ( u_mtrlware.mtrlwareid = uv_mtrlware_noauditingqty.mtrlwareid)
  4178. And ( u_mtrlware.scid = uv_mtrlware_noauditingqty.scid) Inner join
  4179. u_mtrldef On ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  4180. Where ( u_mtrlware.scid = :arg_scid )
  4181. And ( u_mtrlware.mtrlid = :new_sonmtrl_outwaremx[i].mtrlid )
  4182. And ( u_mtrlware.status = :new_sonmtrl_outwaremx[i].status )
  4183. And ( u_mtrlware.woodcode = :new_sonmtrl_outwaremx[i].woodcode )
  4184. And ( u_mtrlware.pcode = :new_sonmtrl_outwaremx[i].pcode )
  4185. Group By u_mtrldef.mtrlcode,
  4186. u_mtrldef.mtrlname
  4187. Using commit_transaction;
  4188. IF new_sonmtrl_outwaremx[i].usaleqty > i_noallocqty THEN
  4189. IF arg_msg = '' THEN
  4190. arg_msg = '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].usaleqty,'#,##0.00') + ' 当前库存数:' + String(i_noallocqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].usaleqty - i_noallocqty,'#,##0.00') + '~r~n'
  4191. ELSE
  4192. arg_msg = arg_msg + '~r~n' + '物料编码:' + String(ls_mtrlcode) + ' 物料名称:' + String(ls_mtrlname) + ' 总需求数(本单+其他已开单):' + String(new_sonmtrl_outwaremx[i].usaleqty,'#,##0.00') + ' 当前库存数:' + String(i_noallocqty,'#,##0.00') + ' 还差:' + String(new_sonmtrl_outwaremx[i].usaleqty - i_noallocqty,'#,##0.00') + '~r~n'
  4193. END IF
  4194. END IF
  4195. NEXT
  4196. IF arg_msg <> '' THEN
  4197. rslt = 0
  4198. END IF
  4199. RETURN rslt
  4200. end function
  4201. public function integer salecheck (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  4202. string ls_emp
  4203. long ll_scid,ll_taskid,ll_printid
  4204. If arg_taskid <= 0 Then
  4205. rslt = 0
  4206. arg_msg = '错误销售订单唯一码'
  4207. Goto ext
  4208. End If
  4209. If getinfo(arg_scid,arg_taskid,arg_msg) = 0 Then
  4210. rslt = 0
  4211. Goto ext
  4212. End If
  4213. cnt = 0
  4214. SELECT count(*) INTO :cnt
  4215. FROM u_user
  4216. Where username = :arg_emp Using commit_transaction;
  4217. IF commit_transaction.SQLCode <> 0 THEN
  4218. rslt = 0
  4219. arg_msg = "查询操作失败,操作员!"
  4220. GOTO ext
  4221. END IF
  4222. IF cnt = 0 THEN
  4223. rslt = 0
  4224. arg_msg = "操作员姓名未登记或已取消!"
  4225. GOTO ext
  4226. END IF
  4227. Update u_saletaskmx
  4228. Set checkemp = :arg_emp ,
  4229. checkdate = getdate(),
  4230. checkflag = 1
  4231. Where scid = :arg_scid
  4232. And TaskID = :arg_taskid
  4233. And printid = :arg_printid;
  4234. If commit_transaction.SQLCode <> 0 Then
  4235. rslt = 0
  4236. arg_msg ='因网络或其他原因导致订单核对失败!'+'~n'+commit_transaction.SQLErrText
  4237. GOTO ext
  4238. End If
  4239. ext:
  4240. If rslt = 0 Then
  4241. Rollback Using commit_transaction;
  4242. ElseIf arg_ifcommit Then
  4243. Commit Using commit_transaction;
  4244. End If
  4245. Return (rslt)
  4246. end function
  4247. public function integer salecheck_cancel (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4248. long ll_scid,ll_taskid,ll_printid
  4249. Datetime nulldate
  4250. Setnull(nulldate)
  4251. UPDATE u_saletaskmx
  4252. SET checkflag = 0,
  4253. checkemp = '',
  4254. checkdate = :nulldate
  4255. WHERE taskid = :arg_taskid
  4256. AND scid = :arg_scid
  4257. AND printid = :arg_printid;
  4258. If commit_transaction.SQLCode <> 0 Then
  4259. rslt = 0
  4260. arg_msg ='因网络或其他原因导致订单核对失败!'+'~n'+commit_transaction.SQLErrText
  4261. GOTO ext
  4262. End If
  4263. ext:
  4264. If rslt = 0 Then
  4265. Rollback Using commit_transaction;
  4266. ElseIf arg_ifcommit Then
  4267. Commit Using commit_transaction;
  4268. End If
  4269. Return (rslt)
  4270. end function
  4271. public function integer uof_insertwaste (integer arg_wastetype, integer arg_taskid, integer arg_scid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  4272. Long cnt
  4273. Long ll_wastenum
  4274. DateTime server_dt
  4275. IF arg_scid < 0 THEN
  4276. arg_msg = '错误的分部'
  4277. rslt = 0
  4278. GOTO ext
  4279. END IF
  4280. IF arg_taskid <= 0 THEN
  4281. arg_msg = '错误销售订单唯一码'
  4282. rslt = 0
  4283. GOTO ext
  4284. END IF
  4285. SELECT Top 1 getdate() INTO :server_dt FROM u_user Using commit_transaction;
  4286. //取得系统时间,借用操作员表
  4287. IF commit_transaction.SQLCode <> 0 THEN
  4288. rslt = 0
  4289. arg_msg = "查询操作失败,日期 "
  4290. GOTO ext
  4291. END IF
  4292. //明细
  4293. cnt = 0
  4294. SELECT count(*)
  4295. INTO :cnt
  4296. FROM u_saletask_waste
  4297. Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction;
  4298. IF commit_transaction.SQLCode <> 0 THEN
  4299. rslt = 0
  4300. arg_msg = '查询操作失败,明细单据'+commit_transaction.SQLErrText
  4301. GOTO ext
  4302. ELSE
  4303. IF cnt = 0 THEN
  4304. ll_wastenum = 1
  4305. ELSE
  4306. SELECT max(wastenum)
  4307. INTO :ll_wastenum
  4308. FROM u_saletask_waste
  4309. Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction;
  4310. IF commit_transaction.SQLCode <> 0 THEN
  4311. rslt = 0
  4312. arg_msg = '查询操作失败,明细单据'+commit_transaction.SQLErrText
  4313. GOTO ext
  4314. END IF
  4315. ll_wastenum++
  4316. END IF
  4317. END IF
  4318. INSERT INTO u_saletaskmx_waste
  4319. (wastenum,
  4320. scid,
  4321. taskid,
  4322. mtrlid,
  4323. enprice_notax,
  4324. checkdate,
  4325. cubage,
  4326. checkflag,
  4327. priceformula,
  4328. checkemp,
  4329. mxdscrp4,
  4330. mxdscrp3,
  4331. net_weight,
  4332. gross_weight,
  4333. bsamt_tax,
  4334. bsamt,
  4335. enamt_tax,
  4336. enamt,
  4337. stopqty,
  4338. stopreason,
  4339. stopdate,
  4340. stopemp,
  4341. stopflag,
  4342. gbotheramt,
  4343. gbrate,
  4344. packqty,
  4345. tax,
  4346. requiredate,
  4347. plancode,
  4348. wfjgtaskqty,
  4349. needwfjgqty,
  4350. mxdscrp2,
  4351. auditemp,
  4352. audittime,
  4353. printnum,
  4354. auditingdate,
  4355. auditingrep,
  4356. flag,
  4357. sclldate,
  4358. scllrep,
  4359. scllflag,
  4360. formula,
  4361. ifsc,
  4362. buytaskqty,
  4363. needbuyqty,
  4364. orderqty,
  4365. ware_price,
  4366. ware_fprice,
  4367. ware_enprice,
  4368. usaleqty,
  4369. rate,
  4370. unit,
  4371. consignedaddqty,
  4372. addqty,
  4373. pqty,
  4374. bqty,
  4375. outtype,
  4376. dftsaleprice,
  4377. ctmint,
  4378. enprice,
  4379. mtrlchangecode,
  4380. mtrlcuscode,
  4381. woodcode,
  4382. pcode,
  4383. printid,
  4384. status,
  4385. sys_changetime,
  4386. mxdscrp,
  4387. assignqty,
  4388. consignedqty,
  4389. rebate,
  4390. price,
  4391. fprice,
  4392. plprice,
  4393. saleqty)
  4394. SELECT :ll_wastenum,
  4395. scid,
  4396. taskid,
  4397. mtrlid,
  4398. enprice_notax,
  4399. checkdate,
  4400. cubage,
  4401. checkflag,
  4402. priceformula,
  4403. checkemp,
  4404. mxdscrp4,
  4405. mxdscrp3,
  4406. net_weight,
  4407. gross_weight,
  4408. bsamt_tax,
  4409. bsamt,
  4410. enamt_tax,
  4411. enamt,
  4412. stopqty,
  4413. stopreason,
  4414. stopdate,
  4415. stopemp,
  4416. stopflag,
  4417. gbotheramt,
  4418. gbrate,
  4419. packqty,
  4420. tax,
  4421. requiredate,
  4422. plancode,
  4423. wfjgtaskqty,
  4424. needwfjgqty,
  4425. mxdscrp2,
  4426. auditemp,
  4427. audittime,
  4428. printnum,
  4429. auditingdate,
  4430. auditingrep,
  4431. flag,
  4432. sclldate,
  4433. scllrep,
  4434. scllflag,
  4435. formula,
  4436. ifsc,
  4437. buytaskqty,
  4438. needbuyqty,
  4439. orderqty,
  4440. ware_price,
  4441. ware_fprice,
  4442. ware_enprice,
  4443. usaleqty,
  4444. rate,
  4445. unit,
  4446. consignedaddqty,
  4447. addqty,
  4448. pqty,
  4449. bqty,
  4450. outtype,
  4451. dftsaleprice,
  4452. ctmint,
  4453. enprice,
  4454. mtrlchangecode,
  4455. mtrlcuscode,
  4456. woodcode,
  4457. pcode,
  4458. printid,
  4459. status,
  4460. sys_changetime,
  4461. mxdscrp,
  4462. assignqty,
  4463. consignedqty,
  4464. rebate,
  4465. price,
  4466. fprice,
  4467. plprice,
  4468. saleqty
  4469. FROM u_saletaskmx
  4470. Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction;
  4471. IF commit_transaction.SQLCode <> 0 THEN
  4472. rslt = 0
  4473. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_saletaskmx_waste') > 0 THEN
  4474. arg_msg = '插入单据明细资料失败,关键字ID重复'
  4475. ELSE
  4476. arg_msg = '插入单据明细资料失败,'+commit_transaction.SQLErrText
  4477. END IF
  4478. GOTO ext
  4479. END IF
  4480. INSERT INTO u_saletask_waste
  4481. (wastetype,
  4482. wastenum,
  4483. wastedate,
  4484. wasterep,
  4485. scid,
  4486. taskid,
  4487. taskcode,
  4488. kind,
  4489. cusid,
  4490. taskdate,
  4491. requiredate,
  4492. accomplishdate,
  4493. finishemp,
  4494. status,
  4495. opemp,
  4496. modemp,
  4497. moddate,
  4498. assign_emp,
  4499. permit_emp,
  4500. permit_date,
  4501. dscrp,
  4502. opdate,
  4503. stopemp,
  4504. sys_changetime,
  4505. ctmint,
  4506. freight,
  4507. printnum,
  4508. banktypeid,
  4509. damt,
  4510. moneyid,
  4511. relcode,
  4512. paytype,
  4513. dscrp2,
  4514. freight_tele,
  4515. cus_address,
  4516. cus_tele,
  4517. cus_fax,
  4518. otheramt,
  4519. mrate,
  4520. dscrp3,
  4521. rel_rep,
  4522. senduser,
  4523. sendtime,
  4524. sendcnt,
  4525. fiebrelcode,
  4526. msttakeamt,
  4527. takeamt,
  4528. takedamt,
  4529. cus_tele1,
  4530. auditemp,
  4531. auditdate,
  4532. transcode,
  4533. carcode,
  4534. freight_address,
  4535. pricedate,
  4536. priceemp,
  4537. priceflag )
  4538. SELECT
  4539. :arg_wastetype,
  4540. :ll_wastenum,
  4541. :server_dt,
  4542. :publ_operator,
  4543. scid,
  4544. taskid,
  4545. taskcode,
  4546. kind,
  4547. cusid,
  4548. taskdate,
  4549. requiredate,
  4550. accomplishdate,
  4551. finishemp,
  4552. status,
  4553. opemp,
  4554. modemp,
  4555. moddate,
  4556. assign_emp,
  4557. permit_emp,
  4558. permit_date,
  4559. dscrp,
  4560. opdate,
  4561. stopemp,
  4562. sys_changetime,
  4563. ctmint,
  4564. freight,
  4565. printnum,
  4566. banktypeid,
  4567. damt,
  4568. moneyid,
  4569. relcode,
  4570. paytype,
  4571. dscrp2,
  4572. freight_tele,
  4573. cus_address,
  4574. cus_tele,
  4575. cus_fax,
  4576. otheramt,
  4577. mrate,
  4578. dscrp3,
  4579. rel_rep,
  4580. senduser,
  4581. sendtime,
  4582. sendcnt,
  4583. fiebrelcode,
  4584. msttakeamt,
  4585. takeamt,
  4586. takedamt,
  4587. cus_tele1,
  4588. auditemp,
  4589. auditdate,
  4590. transcode,
  4591. carcode,
  4592. freight_address,
  4593. pricedate,
  4594. priceemp,
  4595. priceflag
  4596. FROM u_saletask
  4597. Where scid = :arg_scid AND taskid = :arg_taskid Using commit_transaction;
  4598. IF commit_transaction.SQLCode <> 0 THEN
  4599. rslt = 0
  4600. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_outware_waste') > 0 THEN
  4601. arg_msg = '插入发货单据资料失败,关键字ID重复'
  4602. ELSE
  4603. arg_msg = '插入发货单据资料失败,'+commit_transaction.SQLErrText
  4604. END IF
  4605. GOTO ext
  4606. END IF
  4607. ext:
  4608. IF rslt = 0 THEN
  4609. ROLLBACK Using commit_transaction;
  4610. ELSEIF rslt = 1 and arg_ifcommit THEN
  4611. COMMIT Using commit_transaction;
  4612. END IF
  4613. RETURN rslt
  4614. end function
  4615. public function integer uof_save_dytitle_saletask (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg);Long rslt = 1, i
  4616. if isnull(arg_filtername) then arg_filtername=''
  4617. UPDATE u_dytitle_saletask
  4618. SET hang = :arg_hang,
  4619. dwtitlename = :arg_dwtitlename,
  4620. execltitlename = :arg_execltitlename,
  4621. filtername=:arg_filtername
  4622. WHERE name = :arg_name
  4623. Using commit_transaction;
  4624. IF commit_transaction.SQLCode <> 0 THEN
  4625. rslt = 0
  4626. arg_msg = "更新明细标题与execl标题对应关系表操作失败"+"~n"+commit_transaction.SQLErrText
  4627. GOTO ext
  4628. ELSEIF commit_transaction.SQLNRows = 0 THEN
  4629. INSERT INTO u_dytitle_saletask(hang,name,dwtitlename,execltitlename,filtername) VALUES (:arg_hang,:arg_name,:arg_dwtitlename,:arg_execltitlename,:arg_filtername)
  4630. Using commit_transaction;
  4631. END IF
  4632. ext:
  4633. IF rslt = 0 THEN
  4634. ROLLBACK Using commit_transaction;
  4635. ELSE
  4636. COMMIT Using commit_transaction;
  4637. END IF
  4638. RETURN rslt
  4639. end function
  4640. on uo_saletask.create
  4641. call super::create
  4642. TriggerEvent( this, "constructor" )
  4643. end on
  4644. on uo_saletask.destroy
  4645. TriggerEvent( this, "destructor" )
  4646. call super::destroy
  4647. end on