uo_buytask.sru 159 KB

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