uo_mtrlware_assign.sru 138 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099
  1. $PBExportHeader$uo_mtrlware_assign.sru
  2. forward
  3. global type uo_mtrlware_assign from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_mtrlware_assign from nonvisualobject
  7. end type
  8. global uo_mtrlware_assign uo_mtrlware_assign
  9. type variables
  10. Long uo_assignid
  11. Int li_if_assign_del_check_outware
  12. Boolean ib_ifnotcheck_qty = False
  13. Boolean ib_ifinware_audit_do = False
  14. Transaction commit_transaction //数据commit事务
  15. Int uo_option_packpro2_not_use_pack1
  16. Int uo_option_iffp_recmpl_canuseqty
  17. Long uo_fp_storageid,uo_fp_pdbdate
  18. Int li_if_uo_mtrlware_trans_fp_deluse
  19. int uo_option_canpack_ifzanyong
  20. end variables
  21. forward prototypes
  22. public function integer uof_assign_del (long arg_assignid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer uof_assign_addoutqty (long arg_assignid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer uof_plan_del (long arg_planid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer uof_plan_addassignqty (long arg_planid, decimal arg_qty, string arg_inwarecode, long arg_inprintid, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer uof_assign_add (long arg_scid, long arg_mtrlwareid, integer arg_assigntype, long arg_relbillid, long arg_relprintid, decimal arg_assignqty, decimal arg_cost, string arg_dscrp, string arg_mtrlcuscode, string arg_inwarecode, long arg_inprintid, integer arg_fpgrade, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer uof_plan_add (long arg_scid, long arg_mtrlwareid, integer arg_assigntype, long arg_relbillid, long arg_relprintid, decimal arg_planqty, string arg_dscrp, string arg_opemp, integer arg_plantype, integer arg_plankind, long arg_plankind_relbillid, long arg_plankind_relprintid, integer arg_fpgrade, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer uof_assign_add_to_zl_scll (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fpqty, long arg_from_p_orderid, integer arg_from_plantype, integer arg_from_produce_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer uof_assign_del_order (long arr_scid[], long arr_orderid[], ref string arg_msg, boolean if_commit)
  30. public function integer uof_assign_add_order (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean if_commit)
  31. public function integer uof_assign_add_to_order (long arg_scid, long arg_mtrlwareid, long arg_orderid, decimal arg_qty, long arg_fpgrade, ref string arg_msg, boolean if_commit)
  32. public function integer uof_assign_del_all_order (ref string arg_msg, boolean if_commit)
  33. public function integer uof_assign_del_order_by_mtrlid (long arg_mtrlid, ref string arg_msg, boolean if_commit)
  34. public function integer uof_assign_add_to_order_auto (ref string arg_msg, boolean if_commit)
  35. public function integer uof_assign_add_to_order_by_mtrlid (long arg_mtrlid, ref string arg_msg, boolean if_commit)
  36. public function integer uof_adjust_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg)
  37. public function integer uof_assign_add_packpro_to_saletask (long arg_scid, long arg_mtrlwareid_task, long arg_cusid_task, long arg_mtrlid_task, decimal arg_fpqty, long arg_relbillid, long arg_relprintid, string arg_relbillcode, decimal arg_cost, string arg_dscrp, string arg_mtrlcuscode, integer arg_fpgrade, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  38. public function integer uof_clear_barcodefp (ref string arg_barcode, string arg_msg, boolean arg_ifcommit)
  39. end prototypes
  40. public function integer uof_assign_del (long arg_assignid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  41. Long ll_scid,ll_mtrlwareid,ll_storageid
  42. Decimal ld_noallocqty,ld_allocqty
  43. Decimal ld_assignqty,ld_outqty,ld_assignqty_mtrlcuscode,ld_assignqty_old_task
  44. Int li_assigntype
  45. Long ll_relbillid,ll_relprintid,ll_mtrlid,ll_mtrlid_son,ll_cusid,ll_fpgrade
  46. Long i,cnt,k
  47. Int li_ifpack,li_ifpackpro,li_ifpackpro_mtrlware
  48. Decimal ld_Sonscale,ld_Sonscale_fm,ld_fpqty,ld_fpqty_mtrlcuscode
  49. String ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode,ls_plancode
  50. Long ll_mtrlwareid_task,ll_mtrlid_task
  51. String ls_relbillcode,ls_mtrlcode,ls_mtrlcode_task
  52. String ls_status_task,ls_woodcode_task,ls_pcode_task,ls_plancode_task
  53. Int li_ref_ifadd
  54. String arg_lsg
  55. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro
  56. Int li_ifbarcodefp,li_outtype_storage
  57. String ls_barcode
  58. Decimal ld_barcode_fpqty_cancel,ld_ref_fpqty
  59. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  60. //取消指令分配用
  61. Long j
  62. Decimal ld_fpqty_zl,ld_arg_qty,ld_update_qty
  63. Long ll_orderid_zl,ll_wrkgrpid_zl
  64. String ls_ordercode_zl
  65. Long ll_wrkgrpid, ll_plantype, ll_produce_wrkgrpid
  66. Long arr_wrkgrpid[], arr_plantype[], arr_produce_wrkgrpid[]
  67. Decimal ld_a_fpqty, arr_a_fpqty[], ld_tmpqty, ld_delqty
  68. Long ll_rqcnt
  69. IF uo_option_iffp_recmpl_canuseqty = -1000 THEN
  70. rslt = 0
  71. arg_msg = '选项:[290]库存分配是否重算库存可装数、未分配可装数、未开单可装数,读取初始默认值失败,操作取消!'
  72. GOTO ext
  73. END IF
  74. datastore ds_cmpl_pack_saletask
  75. ds_cmpl_pack_saletask = Create datastore
  76. ds_cmpl_pack_saletask.DataObject = 'ds_uo_mtrlware_assign_saletask_pack_del'
  77. ds_cmpl_pack_saletask.SetTransObject(commit_transaction)
  78. datastore ds_cmpl_pack_saletask_barcode
  79. ds_cmpl_pack_saletask_barcode = Create datastore
  80. ds_cmpl_pack_saletask_barcode.DataObject = 'ds_uo_mtrlware_assign_saletask_barcode_del'
  81. ds_cmpl_pack_saletask_barcode.SetTransObject(commit_transaction)
  82. datastore ds_orderrqmtrl_fp_2_zl
  83. ds_orderrqmtrl_fp_2_zl = Create datastore
  84. ds_orderrqmtrl_fp_2_zl.DataObject = 'ds_order_mtrl_fp_to_zl_cancel'
  85. ds_orderrqmtrl_fp_2_zl.SetTransObject(commit_transaction)
  86. uo_cmpl_packpro uo_cmpl_p
  87. uo_cmpl_p = Create uo_cmpl_packpro
  88. uo_cmpl_p.commit_transaction = commit_transaction
  89. IF IsNull(arg_assignid) THEN arg_assignid = 0
  90. IF IsNull(arg_qty) THEN arg_qty = 0
  91. ld_barcode_fpqty_cancel = arg_qty
  92. SELECT scid,
  93. mtrlwareid,
  94. assignqty,
  95. outqty,
  96. assigntype,
  97. relbillid,
  98. relprintid,
  99. relbillcode,
  100. cusid,
  101. fpgrade
  102. INTO :ll_scid,
  103. :ll_mtrlwareid,
  104. :ld_assignqty,
  105. :ld_outqty,
  106. :li_assigntype,
  107. :ll_relbillid,
  108. :ll_relprintid,
  109. :ls_relbillcode,
  110. :ll_cusid,
  111. :ll_fpgrade
  112. FROM u_mtrlware_assign
  113. Where assignid = :arg_assignid Using commit_transaction;
  114. IF commit_transaction.SQLCode <> 0 THEN
  115. arg_msg = '查询库存分配资料失败,'+commit_transaction.SQLErrText
  116. rslt = 0
  117. GOTO ext
  118. END IF
  119. IF li_assigntype = 1 And li_if_assign_del_check_outware = 1 THEN
  120. cnt = 0
  121. SELECT count(*) INTO :cnt
  122. FROM u_outware,u_outwaremx
  123. WHERE u_outware.scid = u_outwaremx.scid
  124. AND u_outware.outwareid = u_outwaremx.outwareid
  125. AND u_outware.billtype = 1
  126. AND u_outware.flag = 0
  127. AND u_outwaremx.scid = :ll_scid
  128. AND u_outwaremx.relid = :ll_relbillid
  129. And u_outwaremx.relprintid = :ll_relprintid Using commit_transaction;
  130. IF commit_transaction.SQLCode <> 0 THEN
  131. arg_msg = '查询分配明细相关销售订单明细是否已开发货单失败,'+commit_transaction.SQLErrText
  132. rslt = 0
  133. GOTO ext
  134. END IF
  135. IF cnt > 0 THEN
  136. arg_msg = '分配明细相关销售订单明细已开发货单,操作取消'
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. END IF
  141. IF ld_assignqty - ld_outqty < arg_qty THEN
  142. arg_msg = '库存分配未出仓数只有:'+String(ld_assignqty - ld_outqty,'#,##0.##########') + ',不能取消分配数量:'+String(arg_qty,'#,##0.##########')
  143. rslt = 0
  144. GOTO ext
  145. END IF
  146. IF arg_qty = ld_assignqty And ld_outqty = 0 THEN
  147. DELETE FROM u_mtrlware_assign
  148. Where assignid = :arg_assignid Using commit_transaction;
  149. IF commit_transaction.SQLCode <> 0 THEN
  150. arg_msg = '删除库存分配失败,' + commit_transaction.SQLErrText
  151. rslt = 0
  152. GOTO ext
  153. END IF
  154. ELSE
  155. UPDATE u_mtrlware_assign
  156. SET assignqty = assignqty - :arg_qty
  157. Where assignid = :arg_assignid Using commit_transaction;
  158. IF commit_transaction.SQLCode <> 0 THEN
  159. arg_msg = '更新库存分配已分配数失败,' + commit_transaction.SQLErrText
  160. rslt = 0
  161. GOTO ext
  162. END IF
  163. END IF
  164. UPDATE u_mtrlware
  165. SET allocqty = allocqty - :arg_qty
  166. WHERE mtrlwareid = :ll_mtrlwareid
  167. And scid = :ll_scid Using commit_transaction;
  168. IF commit_transaction.SQLCode <> 0 THEN
  169. arg_msg = '更新库存已分配数量失败,'+commit_transaction.SQLErrText
  170. rslt = 0
  171. GOTO ext
  172. END IF
  173. SELECT u_mtrlware.mtrlid,
  174. u_mtrlware.storageid,
  175. u_mtrldef.ifpack,
  176. u_mtrldef.ifpackpro,
  177. u_mtrldef.mtrlcode,
  178. u_mtrlware.status,
  179. u_mtrlware.woodcode,
  180. u_mtrlware.pcode,
  181. u_mtrlware.mtrlcuscode,
  182. u_mtrlware.noallocqty,
  183. u_mtrlware.allocqty,
  184. u_mtrlware.plancode,
  185. u_mtrldef.ifbarcodefp,
  186. u_storage.outtype
  187. INTO :ll_mtrlid,
  188. :ll_storageid,
  189. :li_ifpack,
  190. :li_ifpackpro_mtrlware,
  191. :ls_mtrlcode,
  192. :ls_status,
  193. :ls_woodcode,
  194. :ls_pcode,
  195. :ls_mtrlcuscode,
  196. :ld_noallocqty,
  197. :ld_allocqty,
  198. :ls_plancode,
  199. :li_ifbarcodefp,
  200. :li_outtype_storage
  201. FROM u_mtrlware,u_mtrldef,u_storage
  202. WHERE u_mtrlware.scid = :ll_scid
  203. AND u_mtrlware.mtrlwareid = :ll_mtrlwareid
  204. And u_mtrlware.mtrlid = u_mtrldef.mtrlid
  205. And u_mtrlware.storageid = u_storage.storageid Using commit_transaction;
  206. IF commit_transaction.SQLCode <> 0 THEN
  207. arg_msg = '查询库存物料资料失败,'+commit_transaction.SQLErrText
  208. rslt = 0
  209. GOTO ext
  210. END IF
  211. IF ld_noallocqty < ld_allocqty THEN
  212. arg_msg = '库存数小于已分配数,请检查库存'
  213. rslt = 0
  214. GOTO ext
  215. END IF
  216. IF li_assigntype = 0 THEN
  217. //取消分到指令单
  218. ds_orderrqmtrl_fp_2_zl.Retrieve(ll_scid,ll_relbillid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
  219. ld_arg_qty = arg_qty
  220. FOR i = 1 To ds_orderrqmtrl_fp_2_zl.RowCount()
  221. ll_orderid_zl = ds_orderrqmtrl_fp_2_zl.Object.u_orderrqmtrl_scll_orderid[i]
  222. ls_ordercode_zl = ds_orderrqmtrl_fp_2_zl.Object.u_order_ml_ordercode[i]
  223. ll_wrkgrpid_zl = ds_orderrqmtrl_fp_2_zl.Object.u_orderrqmtrl_scll_wrkgrpid[i]
  224. ld_fpqty_zl = ds_orderrqmtrl_fp_2_zl.Object.u_orderrqmtrl_scll_fpqty[i]
  225. IF ld_fpqty_zl > ld_arg_qty THEN
  226. ld_update_qty = ld_arg_qty
  227. ld_arg_qty = 0
  228. ELSE
  229. ld_update_qty = ld_fpqty_zl
  230. ld_arg_qty = ld_arg_qty - ld_fpqty_zl
  231. END IF
  232. IF uof_assign_add_to_zl_scll(ll_scid,ll_orderid_zl,ll_mtrlid,ll_wrkgrpid_zl,&
  233. ls_status,ls_woodcode,ls_pcode,0 - ld_update_qty,&
  234. 0,0,0,arg_msg,False) = 0 THEN
  235. arg_msg = '计划:'+ls_relbillcode+',物料:'+ls_mtrlcode+',更新相关指令单:'+ls_ordercode_zl+',物料已分配数失败,'+arg_msg
  236. rslt = 0
  237. GOTO ext
  238. END IF
  239. NEXT
  240. ll_rqcnt = 0
  241. DECLARE cur1 CURSOR FOR
  242. SELECT wrkGrpid, plantype, produce_wrkGrpid, fpqty
  243. FROM u_OrderRqMtrl
  244. WHERE scid = :ll_scid
  245. AND orderid = :ll_relbillid
  246. AND mtrlid = :ll_mtrlid
  247. AND status = :ls_status
  248. AND woodcode = :ls_woodcode
  249. AND pcode = :ls_pcode
  250. And fpqty > 0 Using commit_transaction;
  251. OPEN cur1;
  252. FETCH cur1 Into :ll_wrkgrpid, :ll_plantype, :ll_produce_wrkgrpid, :ld_a_fpqty;
  253. DO WHILE commit_transaction.SQLCode = 0
  254. ll_rqcnt++
  255. arr_wrkgrpid[ll_rqcnt] = ll_wrkgrpid
  256. arr_plantype[ll_rqcnt] = ll_plantype
  257. arr_produce_wrkgrpid[ll_rqcnt] = ll_produce_wrkgrpid
  258. arr_a_fpqty[ll_rqcnt] = ld_a_fpqty
  259. FETCH cur1 Into :ll_wrkgrpid, :ll_plantype, :ll_produce_wrkgrpid, :ld_a_fpqty;
  260. LOOP
  261. CLOSE cur1;
  262. ld_tmpqty = arg_qty
  263. FOR i = 1 To ll_rqcnt
  264. IF ld_tmpqty = 0 THEN EXIT
  265. ll_wrkgrpid = arr_wrkgrpid[i]
  266. ll_plantype = arr_plantype[i]
  267. ll_produce_wrkgrpid = arr_produce_wrkgrpid[i]
  268. ld_a_fpqty = arr_a_fpqty[i]
  269. IF ld_tmpqty > ld_a_fpqty THEN
  270. ld_delqty = ld_a_fpqty
  271. ELSE
  272. ld_delqty = ld_tmpqty
  273. END IF
  274. UPDATE u_OrderRqMtrl
  275. SET u_OrderRqMtrl.fpqty = u_OrderRqMtrl.fpqty - :ld_delqty
  276. WHERE u_OrderRqMtrl.scid = :ll_scid
  277. AND u_OrderRqMtrl.orderid = :ll_relbillid
  278. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  279. AND u_OrderRqMtrl.status = :ls_status
  280. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  281. AND u_OrderRqMtrl.pcode = :ls_pcode
  282. AND u_OrderRqMtrl.wrkgrpid = :ll_wrkgrpid
  283. AND u_OrderRqMtrl.plantype = :ll_plantype
  284. And u_OrderRqMtrl.produce_wrkGrpid = :ll_produce_wrkgrpid Using commit_transaction;
  285. IF commit_transaction.SQLCode <> 0 THEN
  286. arg_msg = '更新生产计划需求明细库存已分配数失败,'+commit_transaction.SQLErrText
  287. rslt = 0
  288. GOTO ext
  289. END IF
  290. ld_tmpqty = ld_tmpqty - ld_delqty
  291. IF i = ll_rqcnt And ld_tmpqty > 0 THEN
  292. UPDATE u_OrderRqMtrl
  293. SET u_OrderRqMtrl.fpqty = u_OrderRqMtrl.fpqty - :ld_tmpqty
  294. WHERE u_OrderRqMtrl.scid = :ll_scid
  295. AND u_OrderRqMtrl.orderid = :ll_relbillid
  296. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  297. AND u_OrderRqMtrl.status = :ls_status
  298. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  299. AND u_OrderRqMtrl.pcode = :ls_pcode
  300. AND u_OrderRqMtrl.wrkgrpid = :ll_wrkgrpid
  301. AND u_OrderRqMtrl.plantype = :ll_plantype
  302. And u_OrderRqMtrl.produce_wrkGrpid = :ll_produce_wrkgrpid Using commit_transaction;
  303. IF commit_transaction.SQLCode <> 0 THEN
  304. arg_msg = '更新生产计划需求明细库存已分配数失败,'+commit_transaction.SQLErrText
  305. rslt = 0
  306. GOTO ext
  307. END IF
  308. END IF
  309. NEXT
  310. ELSE
  311. SELECT u_mtrldef.ifpackpro,
  312. u_saletaskmx.mtrlid,
  313. u_saletaskmx.status,
  314. u_saletaskmx.woodcode,
  315. u_saletaskmx.pcode,
  316. u_saletaskmx.mtrlcuscode,
  317. u_mtrldef.mtrlcode
  318. INTO :li_ifpackpro,
  319. :ll_mtrlid_task,
  320. :ls_status_task,
  321. :ls_woodcode_task,
  322. :ls_pcode_task,
  323. :ls_plancode_task,
  324. :ls_mtrlcode_task
  325. FROM u_saletask,u_saletaskmx,u_mtrldef
  326. WHERE u_saletask.scid = u_saletaskmx.scid
  327. AND u_saletask.taskid = u_saletaskmx.taskid
  328. AND u_saletaskmx.mtrlid = u_mtrldef.mtrlid
  329. AND u_saletaskmx.scid = :ll_scid
  330. AND u_saletaskmx.taskid = :ll_relbillid
  331. And u_saletaskmx.printid = :ll_relprintid Using commit_transaction;
  332. IF commit_transaction.SQLCode = -1 THEN
  333. arg_msg = '查询订单资料失败,'+commit_transaction.SQLErrText
  334. rslt = 0
  335. GOTO ext
  336. ELSEIF commit_transaction.SQLCode = 100 THEN
  337. rslt = 1
  338. GOTO ext
  339. END IF
  340. //yyx20120825
  341. //包件检查订单包件产品是否有0库存,如果无则加0库存并计算可装数
  342. IF li_ifpackpro = 2 And li_ifpack = 2 Or &
  343. li_ifpackpro = 4 And (Pos(ls_status_task,'+') > 0 Or Pos(ls_status_task,'*') > 0) Or &
  344. li_ifpackpro = 1 And li_ifpack = 1 THEN
  345. IF f_insert_0_mtrlware_2(ll_mtrlwareid_task,ll_mtrlid_task,ls_mtrlcode_task,ll_storageid,&
  346. 0,ls_status_task,ls_woodcode_task,ls_pcode_task,ls_plancode_task,ls_mtrlcuscode,&
  347. '',0,li_ref_ifadd,arg_msg,False) = 0 THEN
  348. arg_msg = '订单产品:'+ls_mtrlcode_task+',查询包件产品0库存信息记录失败,'+arg_msg
  349. rslt = 0
  350. GOTO ext
  351. END IF
  352. IF li_ref_ifadd = 1 THEN
  353. IF f_cmp_di_qty_fpqty(ll_mtrlid_task,ll_storageid,ls_status_task,ls_woodcode_task,ls_pcode_task,ls_plancode_task,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_fpqty,arg_lsg,arg_msg) = 0 THEN
  354. arg_msg = '物料:'+ls_mtrlcode_task+',计算可装数失败,'+arg_msg
  355. rslt = 0
  356. GOTO ext
  357. END IF
  358. IF uo_cmpl_p.uof_update_canuseqty(ll_scid,ll_mtrlwareid_task,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_fpqty,arg_msg,False) = 0 THEN
  359. arg_msg = '物料:'+ls_mtrlcode_task+',更新可装数失败,'+arg_msg
  360. rslt = 0
  361. GOTO ext
  362. END IF
  363. END IF
  364. END IF
  365. //yyx20120712_end
  366. If (li_ifpackpro = 1 Or li_ifpackpro = 2) And li_ifpack = 0 THEN
  367. arg_msg = '当前库存分配的订单为包件产品,但对应分配的库存不是包件,请检查资料'
  368. rslt = 0
  369. GOTO ext
  370. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 2) And li_ifpack > 0 THEN
  371. Long ll_saletaskmx_pf_ch
  372. IF Not ( uo_option_packpro2_not_use_pack1 = 1 And li_ifpackpro = 2 And li_ifpack = 1 ) THEN
  373. ll_saletaskmx_pf_ch = 0
  374. IF li_ifpackpro = 1 THEN
  375. ll_saletaskmx_pf_ch = 0
  376. ELSE
  377. SELECT count(*)
  378. INTO :ll_saletaskmx_pf_ch
  379. FROM u_SaleTaskMx_pf
  380. WHERE u_SaleTaskMx_pf.scid = :ll_scid
  381. AND u_SaleTaskMx_pf.taskid = :ll_relbillid
  382. And u_SaleTaskMx_pf.printid = :ll_relprintid Using commit_transaction;
  383. IF commit_transaction.SQLCode <> 0 THEN
  384. arg_msg = '查询相关订单明细行:'+String(ll_relprintid)+'是否有换包件失败,'+commit_transaction.SQLErrText
  385. rslt = 0
  386. GOTO ext
  387. END IF
  388. END IF
  389. IF ll_saletaskmx_pf_ch > 0 THEN
  390. ds_cmpl_pack_saletask.DataObject = 'ds_uo_mtrlware_assign_saletask_pack2_del'
  391. ds_cmpl_pack_saletask.SetTransObject(commit_transaction)
  392. ds_cmpl_pack_saletask.Retrieve(ll_scid,ll_relbillid,ll_relprintid)
  393. ELSE
  394. ds_cmpl_pack_saletask.Retrieve(ll_mtrlid_task)
  395. END IF
  396. IF ds_cmpl_pack_saletask.RowCount() = 0 THEN
  397. ld_fpqty = 0
  398. ld_fpqty_mtrlcuscode = 0
  399. ELSE
  400. ld_fpqty = 999999999
  401. ld_fpqty_mtrlcuscode = 999999999
  402. FOR i = 1 To ds_cmpl_pack_saletask.RowCount()
  403. IF uo_option_packpro2_not_use_pack1 = 1 THEN
  404. IF li_ifpackpro = 2 And ds_cmpl_pack_saletask.Object.u_mtrldef_ifpack[i] = 1 THEN
  405. CONTINUE
  406. END IF
  407. END IF
  408. ll_mtrlid_son = ds_cmpl_pack_saletask.Object.u_prdpf_sonmtrlid[i]
  409. ld_Sonscale = ds_cmpl_pack_saletask.Object.u_prdpf_sonscale[i]
  410. ld_Sonscale_fm = ds_cmpl_pack_saletask.Object.u_prdpf_sonscale_fm[i]
  411. SELECT isnull(sum(assignqty),0),
  412. isnull(sum(case when u_mtrldef.ifpack = 1 OR u_mtrldef.ifpack = 2 AND u_mtrlware_assign.mtrlcuscode = :ls_mtrlcuscode then assignqty else 0 END ),0)
  413. INTO :ld_assignqty,:ld_assignqty_mtrlcuscode
  414. FROM u_mtrlware_assign INNER join u_mtrldef on
  415. u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid
  416. WHERE u_mtrlware_assign.scid = :ll_scid
  417. AND u_mtrlware_assign.relbillid = :ll_relbillid
  418. AND u_mtrlware_assign.relprintid = :ll_relprintid
  419. AND u_mtrlware_assign.mtrlid = :ll_mtrlid_son
  420. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  421. IF commit_transaction.SQLCode <> 0 THEN
  422. arg_msg = '查询订单其它包件已分配数失败,'+commit_transaction.SQLErrText
  423. rslt = 0
  424. GOTO ext
  425. END IF
  426. ld_fpqty = Min(ld_fpqty,ld_assignqty/(ld_Sonscale/ld_Sonscale_fm))
  427. ld_fpqty_mtrlcuscode = Min(ld_fpqty_mtrlcuscode,ld_assignqty_mtrlcuscode/(ld_Sonscale/ld_Sonscale_fm))
  428. NEXT
  429. END IF
  430. UPDATE u_saletaskmx
  431. SET u_saletaskmx.fpqty = :ld_fpqty
  432. WHERE u_saletaskmx.scid = :ll_scid
  433. AND u_saletaskmx.taskid = :ll_relbillid
  434. And u_saletaskmx.printid = :ll_relprintid Using commit_transaction;
  435. IF commit_transaction.SQLCode <> 0 THEN
  436. arg_msg = '更新订单明细已分配数失败,'+commit_transaction.SQLErrText
  437. rslt = 0
  438. GOTO ext
  439. END IF
  440. END IF
  441. ELSEIF li_ifpackpro = 3 Or li_ifpackpro = 4 THEN //组合配置包件产品
  442. s_mtrlcfg_expr s_pz[]
  443. Long ll_array,ll_l
  444. Decimal ld_pf_Sonscale[]
  445. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  446. f_checkpz(ls_status_task,s_pz[])
  447. ll_array = UpperBound(s_pz)
  448. IF ll_array = 0 THEN
  449. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(ll_relprintid)+',拆分子件错误,请检查组合配置'
  450. rslt = 0
  451. GOTO ext
  452. END IF
  453. FOR ll_l = 1 To ll_array
  454. ls_pf_status[ll_l] = s_pz[ll_l].cfgname
  455. ls_pf_woodcode[ll_l] = ls_woodcode_task
  456. ls_pf_pcode[ll_l] = ls_pcode_task
  457. ld_pf_Sonscale[ll_l] = Dec(s_pz[ll_l].qty)
  458. NEXT
  459. ld_fpqty = 0
  460. FOR ll_l = 1 To ll_array
  461. IF ll_l > 1 And ld_fpqty = 0 THEN EXIT //最少配套数为0,不用计算其它子件
  462. SELECT isnull(sum(assignqty),0),
  463. isnull(sum(case u_mtrlware_assign.mtrlcuscode when :ls_mtrlcuscode then assignqty else 0 END ),0)
  464. INTO :ld_assignqty,:ld_assignqty_mtrlcuscode
  465. FROM u_mtrlware_assign,u_mtrlware
  466. WHERE u_mtrlware_assign.scid = u_mtrlware.scid
  467. AND u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid
  468. AND u_mtrlware_assign.scid = :ll_scid
  469. AND u_mtrlware_assign.relbillid = :ll_relbillid
  470. AND u_mtrlware_assign.relprintid = :ll_relprintid
  471. AND u_mtrlware_assign.mtrlid = :ll_mtrlid
  472. AND u_mtrlware_assign.assigntype = 1
  473. AND u_mtrlware.status = :ls_pf_status[ll_l]
  474. AND u_mtrlware.woodcode = :ls_pf_woodcode[ll_l]
  475. And u_mtrlware.pcode = :ls_pf_pcode[ll_l] Using commit_transaction;
  476. IF commit_transaction.SQLCode <> 0 THEN
  477. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(ll_relprintid)+',查询订单包件已分配数失败,'+commit_transaction.SQLErrText
  478. rslt = 0
  479. GOTO ext
  480. END IF
  481. IF ll_l = 1 THEN
  482. ld_fpqty = ld_assignqty/ld_pf_Sonscale[ll_l]
  483. ld_fpqty_mtrlcuscode = ld_assignqty_mtrlcuscode/ld_pf_Sonscale[ll_l]
  484. ELSE
  485. ld_fpqty = Min(ld_fpqty,ld_assignqty/ld_pf_Sonscale[ll_l])
  486. ld_fpqty_mtrlcuscode = Min(ld_fpqty_mtrlcuscode,ld_assignqty_mtrlcuscode/ld_pf_Sonscale[ll_l])
  487. END IF
  488. NEXT
  489. UPDATE u_saletaskmx
  490. SET u_saletaskmx.fpqty = :ld_fpqty
  491. WHERE u_saletaskmx.scid = :ll_scid
  492. AND u_saletaskmx.taskid = :ll_relbillid
  493. And u_saletaskmx.printid = :ll_relprintid Using commit_transaction;
  494. IF commit_transaction.SQLCode <> 0 THEN
  495. arg_msg = '更新订单明细已分配数失败,'+commit_transaction.SQLErrText
  496. rslt = 0
  497. GOTO ext
  498. END IF
  499. ELSE
  500. UPDATE u_saletaskmx
  501. SET u_saletaskmx.fpqty = u_saletaskmx.fpqty - :arg_qty
  502. WHERE u_saletaskmx.scid = :ll_scid
  503. AND u_saletaskmx.taskid = :ll_relbillid
  504. And u_saletaskmx.printid = :ll_relprintid Using commit_transaction;
  505. IF commit_transaction.SQLCode <> 0 THEN
  506. arg_msg = '更新订单明细已分配数失败,'+commit_transaction.SQLErrText
  507. rslt = 0
  508. GOTO ext
  509. END IF
  510. END IF
  511. END IF
  512. IF li_assigntype = 1 THEN
  513. //yyx20130119
  514. IF li_ifbarcodefp = 1 and ( li_outtype_storage = 2 or li_outtype_storage = 3 ) and li_if_uo_mtrlware_trans_fp_deluse = 0 THEN
  515. ds_cmpl_pack_saletask_barcode.Retrieve(ll_scid,ll_relbillid,ll_relprintid,ll_mtrlwareid)
  516. IF ds_cmpl_pack_saletask_barcode.RowCount() = 0 THEN
  517. arg_msg = '没有相关条码可取消分配,请检查相关订单库存条码分配'
  518. rslt = 0
  519. GOTO ext
  520. END IF
  521. IF ds_cmpl_pack_saletask_barcode.Object.sumqty[1] < ld_barcode_fpqty_cancel THEN
  522. arg_msg = '取消相关订单库存条码分配的数量不足冲减,请检查相关订单库存条码分配'
  523. rslt = 0
  524. GOTO ext
  525. END IF
  526. FOR k = 1 To ds_cmpl_pack_saletask_barcode.RowCount()
  527. IF ld_barcode_fpqty_cancel = 0 THEN
  528. EXIT
  529. END IF
  530. ls_barcode = ds_cmpl_pack_saletask_barcode.Object.barcode[k]
  531. IF ds_cmpl_pack_saletask_barcode.Object.qty[k] <= ld_barcode_fpqty_cancel THEN
  532. if uof_clear_barcodefp(ls_barcode,arg_msg,false) = 0 then
  533. rslt = 0
  534. goto ext
  535. end if
  536. ld_barcode_fpqty_cancel = ld_barcode_fpqty_cancel - ds_cmpl_pack_saletask_barcode.Object.qty[k]
  537. END IF
  538. NEXT
  539. IF ld_barcode_fpqty_cancel > 0 THEN
  540. arg_msg = '取消相关订单库存条码分配的数量有余数,操作取消,请检查相关订单库存条码分配'
  541. rslt = 0
  542. GOTO ext
  543. END IF
  544. END IF
  545. //
  546. //yyx20120825
  547. //检查包件产品订单同批号的可装数,更新到包件产品库存分配明细
  548. IF li_ifpackpro = 2 And li_ifpack = 2 Or &
  549. li_ifpackpro = 4 And (Pos(ls_status_task,'+') > 0 Or Pos(ls_status_task,'*') > 0) Or &
  550. li_ifpackpro = 1 And li_ifpack = 1 THEN
  551. SELECT assignqty
  552. INTO :ld_assignqty_old_task
  553. FROM u_mtrlware_assign
  554. WHERE u_mtrlware_assign.scid = :ll_scid
  555. AND u_mtrlware_assign.mtrlwareid = :ll_mtrlwareid_task
  556. AND u_mtrlware_assign.relbillid = :ll_relbillid
  557. AND u_mtrlware_assign.relprintid = :ll_relprintid
  558. AND u_mtrlware_assign.mtrlid = :ll_mtrlid_task
  559. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  560. IF commit_transaction.SQLCode = -1 THEN
  561. arg_msg = '查询包件产品原库存分配数量失败,'+commit_transaction.SQLErrText
  562. rslt = 0
  563. GOTO ext
  564. ELSEIF commit_transaction.SQLCode = 100 THEN
  565. ld_assignqty_old_task = 0
  566. END IF
  567. ld_fpqty_mtrlcuscode = ld_fpqty_mtrlcuscode - ld_assignqty_old_task
  568. IF uof_assign_add_packpro_to_saletask(ll_scid,ll_mtrlwareid_task,&
  569. ll_cusid,ll_mtrlid_task,ld_fpqty_mtrlcuscode,&
  570. ll_relbillid,ll_relprintid,ls_relbillcode,&
  571. 0,'',ls_mtrlcuscode,&
  572. ll_fpgrade,'',arg_msg,False) = 0 THEN
  573. rslt = 0
  574. GOTO ext
  575. END IF
  576. END IF
  577. //yyx20120825_end
  578. //yyx2012-9-29
  579. IF Not ib_ifinware_audit_do And uo_option_iffp_recmpl_canuseqty = 1 THEN
  580. //yyx2012-9-29返回计算可装数库存id数组
  581. If ( li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro_mtrlware = 3 Or li_ifpackpro_mtrlware = 4 ) THEN
  582. IF uo_cmpl_p.uof_ref_mtrlwarid_array(ll_mtrlid,ls_plancode,ls_mtrlcuscode,ll_storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  583. rslt = 0
  584. GOTO ext
  585. END IF
  586. END IF
  587. IF UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 THEN
  588. IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  589. rslt = 0
  590. GOTO ext
  591. END IF
  592. END IF
  593. END IF
  594. END IF
  595. ext:
  596. IF rslt = 0 THEN
  597. ROLLBACK Using commit_transaction;
  598. ELSEIF rslt = 1 And arg_ifcommit THEN
  599. COMMIT Using commit_transaction;
  600. END IF
  601. Destroy ds_cmpl_pack_saletask
  602. Destroy ds_orderrqmtrl_fp_2_zl
  603. Destroy uo_cmpl_p
  604. RETURN rslt
  605. end function
  606. public function integer uof_assign_addoutqty (long arg_assignid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  607. Long ll_scid,ll_mtrlwareid
  608. Decimal ld_assignqty,ld_outqty
  609. IF IsNull(arg_assignid) THEN arg_assignid = 0
  610. IF IsNull(arg_qty) THEN arg_qty = 0
  611. SELECT scid,
  612. mtrlwareid,
  613. assignqty,
  614. outqty
  615. INTO :ll_scid,
  616. :ll_mtrlwareid,
  617. :ld_assignqty,
  618. :ld_outqty
  619. FROM u_mtrlware_assign
  620. Where assignid = :arg_assignid using commit_transaction;
  621. IF commit_transaction.SQLCode <> 0 THEN
  622. arg_msg = '查询库存分配资料失败,'+commit_transaction.SQLErrText
  623. rslt = 0
  624. GOTO ext
  625. END IF
  626. IF ld_assignqty - ld_outqty < arg_qty THEN
  627. arg_msg = '库存分配未出仓数只有:'+String(ld_assignqty - ld_outqty,'#,##0.##########') + ',不能出仓数量:'+String(arg_qty,'#,##0.##########')
  628. rslt = 0
  629. GOTO ext
  630. END IF
  631. UPDATE u_mtrlware
  632. SET allocqty = allocqty - :arg_qty
  633. WHERE mtrlwareid = :ll_mtrlwareid
  634. AND scid = :ll_scid using commit_transaction;
  635. IF commit_transaction.SQLCode <> 0 THEN
  636. arg_msg = '更新库存已分配数量失败,'+commit_transaction.SQLErrText
  637. rslt = 0
  638. GOTO ext
  639. END IF
  640. UPDATE u_mtrlware_assign
  641. SET outqty = outqty + :arg_qty
  642. Where assignid = :arg_assignid using commit_transaction;
  643. IF commit_transaction.SQLCode <> 0 THEN
  644. arg_msg = '更新库存分配表已出仓数失败,' + commit_transaction.SQLErrText
  645. rslt = 0
  646. GOTO ext
  647. END IF
  648. ext:
  649. IF rslt = 0 THEN
  650. ROLLBACK using commit_transaction;
  651. ELSEIF rslt = 1 AND arg_ifcommit THEN
  652. COMMIT using commit_transaction;
  653. END IF
  654. RETURN rslt
  655. end function
  656. public function integer uof_plan_del (long arg_planid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  657. Decimal ld_planassignqty,ld_assignqty
  658. Int li_Plantype,li_Plankind
  659. String ls_plankind_relbillcode
  660. Long ll_Plankind_relbillid,ll_Plankind_relprintid,ll_scid
  661. Decimal ld_fpqty,ld_ffpqty_not
  662. Long ll_mtrlid,ll_mtrlwareid,ll_relbillid
  663. String ls_status,ls_woodcode,ls_pcode
  664. Int li_assigntype
  665. String ls_Plankind_aps_plancode
  666. IF IsNull(arg_planid) THEN arg_planid = 0
  667. IF IsNull(arg_qty) THEN arg_qty = 0
  668. SELECT planassignqty,
  669. assignqty,
  670. Plantype,
  671. Plankind,
  672. Plankind_relbillid,
  673. Plankind_relprintid,
  674. scid,
  675. mtrlwareid,
  676. assigntype,
  677. relbillid,
  678. Plankind_aps_plancode
  679. INTO :ld_planassignqty,
  680. :ld_assignqty,
  681. :li_Plantype,
  682. :li_Plankind,
  683. :ll_Plankind_relbillid,
  684. :ll_Plankind_relprintid,
  685. :ll_scid,
  686. :ll_mtrlwareid,
  687. :li_assigntype,
  688. :ll_relbillid,
  689. :ls_Plankind_aps_plancode
  690. FROM u_mtrlware_assign_plan
  691. Where planid = :arg_planid Using commit_transaction;
  692. IF commit_transaction.SQLCode <> 0 THEN
  693. arg_msg = '查询库存分配计划资料失败,'+commit_transaction.SQLErrText
  694. rslt = 0
  695. GOTO ext
  696. END IF
  697. IF ld_planassignqty - ld_assignqty < arg_qty THEN
  698. arg_msg = '分配计划未完成分配数只有:'+String(ld_planassignqty - ld_assignqty,'#,##0.##########') + ',不能取消分配计划数量:'+String(arg_qty,'#,##0.##########')
  699. rslt = 0
  700. GOTO ext
  701. END IF
  702. IF li_Plantype = 1 THEN
  703. IF li_Plankind = 0 THEN
  704. arg_msg = '错误的分配计划类型,请检查(0-无,1-指令单分配,2-采购订单分配,3-外协订单分配)'
  705. rslt = 0
  706. GOTO ext
  707. END IF
  708. //检查分计划来源
  709. CHOOSE CASE li_Plankind
  710. CASE 1
  711. SELECT u_order_ml.ordercode,
  712. u_order_ml.fpqty,
  713. u_order_ml.fpqty - u_order_ml.ffpqty,
  714. u_order_ml.mtrlid,
  715. u_order_ml.status_mode,
  716. u_order_ml.woodcode,
  717. u_order_ml.pcode
  718. INTO :ls_plankind_relbillcode,:ld_fpqty,:ld_ffpqty_not,
  719. :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode
  720. FROM u_order_ml
  721. WHERE u_order_ml.scid = :ll_scid
  722. And u_order_ml.orderid = :ll_Plankind_relbillid Using commit_transaction;
  723. IF commit_transaction.SQLCode <> 0 THEN
  724. arg_msg = '查询分配计划所属指令单资料失败,'+commit_transaction.SQLErrText
  725. rslt = 0
  726. GOTO ext
  727. END IF
  728. IF arg_qty > ld_fpqty THEN
  729. arg_msg = '指令单:'+ls_plankind_relbillcode+'分配计划占用数只有:'+String(ld_fpqty,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  730. rslt = 0
  731. GOTO ext
  732. END IF
  733. IF arg_qty > ld_ffpqty_not THEN
  734. arg_msg = '指令单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  735. rslt = 0
  736. GOTO ext
  737. END IF
  738. UPDATE u_order_ml
  739. SET u_order_ml.fpqty = u_order_ml.fpqty - :arg_qty
  740. WHERE u_order_ml.scid = :ll_scid
  741. And u_order_ml.orderid = :ll_Plankind_relbillid Using commit_transaction;
  742. IF commit_transaction.SQLCode <> 0 THEN
  743. arg_msg = '更新指令单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  744. rslt = 0
  745. GOTO ext
  746. END IF
  747. UPDATE u_order_zl_planmx
  748. SET u_order_zl_planmx.fpplanqty = u_order_zl_planmx.fpplanqty - :arg_qty
  749. WHERE u_order_zl_planmx.scid = :ll_scid
  750. AND u_order_zl_planmx.orderid = :ll_Plankind_relbillid
  751. And u_order_zl_planmx.aps_plancode = :ls_Plankind_aps_plancode Using commit_transaction;
  752. IF commit_transaction.SQLCode <> 0 THEN
  753. arg_msg = '更新指令单:'+ls_plankind_relbillcode+',排程批:'+ls_Plankind_aps_plancode+',分配计划占用数失败,'+commit_transaction.SQLErrText
  754. rslt = 0
  755. GOTO ext
  756. END IF
  757. CASE 2
  758. SELECT u_buytask.taskcode,
  759. u_buytaskmx.fpqty,
  760. u_buytaskmx.fpqty - u_buytaskmx.ffpqty,
  761. u_buytaskmx.mtrlid,
  762. u_buytaskmx.status,
  763. u_buytaskmx.woodcode,
  764. u_buytaskmx.pcode
  765. INTO :ls_plankind_relbillcode,:ld_fpqty,:ld_ffpqty_not,
  766. :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode
  767. FROM u_buytask,u_buytaskmx
  768. WHERE u_buytask.scid = u_buytaskmx.scid
  769. AND u_buytask.taskid = u_buytaskmx.taskid
  770. AND u_buytaskmx.scid = :ll_scid
  771. AND u_buytaskmx.taskid = :ll_Plankind_relbillid
  772. And u_buytaskmx.printid = :ll_Plankind_relprintid Using commit_transaction;
  773. IF commit_transaction.SQLCode <> 0 THEN
  774. arg_msg = '查询分配计划所属采购订单资料失败,'+commit_transaction.SQLErrText
  775. rslt = 0
  776. GOTO ext
  777. END IF
  778. IF arg_qty > ld_fpqty THEN
  779. arg_msg = '采购订单:'+ls_plankind_relbillcode+'ld_fpqty:'+String(ld_ffpqty_not,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. IF arg_qty > ld_ffpqty_not THEN
  784. arg_msg = '采购订单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  785. rslt = 0
  786. GOTO ext
  787. END IF
  788. UPDATE u_buytaskmx
  789. SET u_buytaskmx.fpqty = u_buytaskmx.fpqty - :arg_qty
  790. WHERE u_buytaskmx.scid = :ll_scid
  791. AND u_buytaskmx.taskid = :ll_Plankind_relbillid
  792. And u_buytaskmx.printid = :ll_Plankind_relprintid Using commit_transaction;
  793. IF commit_transaction.SQLCode <> 0 THEN
  794. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划完成数失败,'+commit_transaction.SQLErrText
  795. rslt = 0
  796. GOTO ext
  797. END IF
  798. CASE 3
  799. SELECT u_order_wfjg.taskcode,
  800. u_order_wfjgmx.fpqty,
  801. u_order_wfjgmx.fpqty - u_order_wfjgmx.ffpqty,
  802. u_order_wfjgmx.mtrlid,
  803. u_order_wfjgmx.status,
  804. u_order_wfjgmx.woodcode,
  805. u_order_wfjgmx.pcode
  806. INTO :ls_plankind_relbillcode,:ld_fpqty,:ld_ffpqty_not,
  807. :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode
  808. FROM u_order_wfjg,u_order_wfjgmx
  809. WHERE u_order_wfjg.scid = u_order_wfjgmx.scid
  810. AND u_order_wfjg.taskid = u_order_wfjgmx.taskid
  811. AND u_order_wfjgmx.scid = :ll_scid
  812. AND u_order_wfjgmx.taskid = :ll_Plankind_relbillid
  813. And u_order_wfjgmx.printid = :ll_Plankind_relprintid Using commit_transaction;
  814. IF commit_transaction.SQLCode <> 0 THEN
  815. arg_msg = '查询分配计划所属采购订单资料失败,'+commit_transaction.SQLErrText
  816. rslt = 0
  817. GOTO ext
  818. END IF
  819. IF arg_qty > ld_fpqty THEN
  820. arg_msg = '外协订单:'+ls_plankind_relbillcode+'ld_fpqty:'+String(ld_ffpqty_not,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  821. rslt = 0
  822. GOTO ext
  823. END IF
  824. IF arg_qty > ld_ffpqty_not THEN
  825. arg_msg = '外协订单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能取消分配:'+String(arg_qty,'#,##0.##########')
  826. rslt = 0
  827. GOTO ext
  828. END IF
  829. UPDATE u_order_wfjgmx
  830. SET u_order_wfjgmx.fpqty = u_order_wfjgmx.fpqty - :arg_qty
  831. WHERE u_order_wfjgmx.scid = :ll_scid
  832. AND u_order_wfjgmx.taskid = :ll_Plankind_relbillid
  833. And u_order_wfjgmx.printid = :ll_Plankind_relprintid Using commit_transaction;
  834. IF commit_transaction.SQLCode <> 0 THEN
  835. arg_msg = '更新外协订单:'+ls_plankind_relbillcode+'分配计划完成数失败,'+commit_transaction.SQLErrText
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. END CHOOSE
  840. ELSE
  841. SELECT mtrlid,status,woodcode,pcode
  842. INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode
  843. FROM u_mtrlware
  844. WHERE u_mtrlware.scid = :ll_scid
  845. And u_mtrlware.mtrlwareid = :ll_mtrlwareid Using commit_transaction;
  846. IF commit_transaction.SQLCode <> 0 THEN
  847. arg_msg = '查询库存信息失败,'+commit_transaction.SQLErrText
  848. rslt = 0
  849. GOTO ext
  850. END IF
  851. END IF
  852. IF li_assigntype = 0 THEN
  853. //更新已分配数
  854. UPDATE u_OrderRqMtrl
  855. SET u_OrderRqMtrl.fpplanqty = u_OrderRqMtrl.fpplanqty - :arg_qty
  856. WHERE u_OrderRqMtrl.scid = :ll_scid
  857. AND u_OrderRqMtrl.orderid = :ll_relbillid
  858. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  859. AND u_OrderRqMtrl.status = :ls_status
  860. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  861. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  862. IF commit_transaction.SQLCode <> 0 THEN
  863. arg_msg = '更新物料需求库存分配数失败,'+commit_transaction.SQLErrText
  864. rslt = 0
  865. GOTO ext
  866. END IF
  867. END IF
  868. IF arg_qty = ld_planassignqty And ld_assignqty = 0 THEN
  869. DELETE FROM u_mtrlware_assign_plan
  870. Where planid = :arg_planid Using commit_transaction;
  871. IF commit_transaction.SQLCode <> 0 THEN
  872. arg_msg = '删除库存分配计划失败,' + commit_transaction.SQLErrText
  873. rslt = 0
  874. GOTO ext
  875. END IF
  876. ELSE
  877. UPDATE u_mtrlware_assign_plan
  878. SET planassignqty = planassignqty - :arg_qty
  879. Where planid = :arg_planid Using commit_transaction;
  880. IF commit_transaction.SQLCode <> 0 THEN
  881. arg_msg = '更新库存分配计划计划分配数失败,' + commit_transaction.SQLErrText
  882. rslt = 0
  883. GOTO ext
  884. END IF
  885. END IF
  886. ext:
  887. IF rslt = 0 THEN
  888. ROLLBACK Using commit_transaction;
  889. ELSEIF rslt = 1 And arg_ifcommit THEN
  890. COMMIT Using commit_transaction;
  891. END IF
  892. RETURN rslt
  893. end function
  894. public function integer uof_plan_addassignqty (long arg_planid, decimal arg_qty, string arg_inwarecode, long arg_inprintid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  895. Long ll_planmxid
  896. Decimal ld_planassignqty,ld_assignqty
  897. Int li_Plantype,li_Plankind
  898. Long ll_Plankind_relbillid,ll_Plankind_relprintid,ll_scid
  899. String ls_plankind_relbillcode
  900. Decimal ld_ffpqty_not
  901. IF IsNull(arg_planid) THEN arg_planid = 0
  902. IF IsNull(arg_qty) THEN arg_qty = 0
  903. SELECT planassignqty,
  904. assignqty,
  905. Plantype,
  906. Plankind,
  907. Plankind_relbillid,
  908. Plankind_relprintid,
  909. scid
  910. INTO :ld_planassignqty,
  911. :ld_assignqty,
  912. :li_Plantype,
  913. :li_Plankind,
  914. :ll_Plankind_relbillid,
  915. :ll_Plankind_relprintid,
  916. :ll_scid
  917. FROM u_mtrlware_assign_plan
  918. Where planid = :arg_planid using commit_transaction;
  919. IF commit_transaction.SQLCode <> 0 THEN
  920. arg_msg = '查询库存分配计划资料失败,'+commit_transaction.SQLErrText
  921. rslt = 0
  922. GOTO ext
  923. END IF
  924. IF ld_planassignqty - ld_assignqty < arg_qty THEN
  925. arg_msg = '库存分配计划未完成数只有:'+String(ld_planassignqty - ld_assignqty,'#,##0.##########') + ',不能完成数量:'+String(arg_qty,'#,##0.##########')
  926. rslt = 0
  927. GOTO ext
  928. END IF
  929. UPDATE u_mtrlware_assign_plan
  930. SET assignqty = assignqty + :arg_qty
  931. Where planid = :arg_planid using commit_transaction;
  932. IF commit_transaction.SQLCode <> 0 THEN
  933. arg_msg = '更新库存分配计划已完成数失败,' + commit_transaction.SQLErrText
  934. rslt = 0
  935. GOTO ext
  936. END IF
  937. IF arg_qty > 0 THEN
  938. ll_planmxid = f_sys_scidentity(0,"u_mtrlware_assign_plan_assignmx","planmxid",arg_msg,True,id_sqlca)
  939. IF ll_planmxid <= 0 THEN
  940. rslt = 0
  941. GOTO ext
  942. END IF
  943. INSERT INTO u_mtrlware_assign_plan_assignmx
  944. (planmxid,
  945. planid,
  946. inwarecode,
  947. inprintid,
  948. qty)
  949. VALUES
  950. (:ll_planmxid,
  951. :arg_planid,
  952. :arg_inwarecode,
  953. :arg_inprintid,
  954. :arg_qty) using commit_transaction;
  955. IF commit_transaction.SQLCode <> 0 THEN
  956. arg_msg = '建立库存分配计划分配明细失败,'+commit_transaction.SQLErrText
  957. rslt = 0
  958. GOTO ext
  959. END IF
  960. ELSE
  961. DELETE FROM u_mtrlware_assign_plan_assignmx
  962. WHERE planid = :arg_planid
  963. AND inwarecode = :arg_inwarecode
  964. And inprintid = :arg_inprintid using commit_transaction;
  965. IF commit_transaction.SQLCode <> 0 THEN
  966. arg_msg = '删除库存分配计划进仓分配明细失败,' + commit_transaction.SQLErrText
  967. rslt = 0
  968. GOTO ext
  969. END IF
  970. END IF
  971. IF li_Plantype = 1 THEN
  972. IF li_Plankind = 0 THEN
  973. arg_msg = '错误的分配计划类型,请检查(0-无,1-指令单分配,2-采购订单分配,3-外协订单分配)'
  974. rslt = 0
  975. GOTO ext
  976. END IF
  977. //检查分计划来源
  978. CHOOSE CASE li_Plankind
  979. CASE 1
  980. SELECT u_order_ml.ordercode,
  981. u_order_ml.fpqty - u_order_ml.ffpqty
  982. INTO :ls_plankind_relbillcode,:ld_ffpqty_not
  983. FROM u_order_ml
  984. WHERE u_order_ml.scid = :ll_scid
  985. And u_order_ml.orderid = :ll_Plankind_relbillid using commit_transaction;
  986. IF commit_transaction.SQLCode <> 0 THEN
  987. arg_msg = '查询分配计划所属指令单资料失败,'+commit_transaction.SQLErrText
  988. rslt = 0
  989. GOTO ext
  990. END IF
  991. IF arg_qty > ld_ffpqty_not THEN
  992. arg_msg = '指令单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_qty,'#,##0.##########')
  993. rslt = 0
  994. GOTO ext
  995. END IF
  996. UPDATE u_order_ml
  997. SET u_order_ml.ffpqty = u_order_ml.ffpqty + :arg_qty
  998. WHERE u_order_ml.scid = :ll_scid
  999. And u_order_ml.orderid = :ll_Plankind_relbillid using commit_transaction;
  1000. IF commit_transaction.SQLCode <> 0 THEN
  1001. arg_msg = '更新指令单:'+ls_plankind_relbillcode+'分配计划完成数失败,'+commit_transaction.SQLErrText
  1002. rslt = 0
  1003. GOTO ext
  1004. END IF
  1005. CASE 2
  1006. SELECT u_buytask.taskcode,
  1007. u_buytaskmx.fpqty - u_buytaskmx.ffpqty
  1008. INTO :ls_plankind_relbillcode,:ld_ffpqty_not
  1009. FROM u_buytask,u_buytaskmx
  1010. WHERE u_buytask.scid = u_buytaskmx.scid
  1011. AND u_buytask.taskid = u_buytaskmx.taskid
  1012. AND u_buytaskmx.scid = :ll_scid
  1013. AND u_buytaskmx.taskid = :ll_Plankind_relbillid
  1014. And u_buytaskmx.printid = :ll_Plankind_relprintid using commit_transaction;
  1015. IF commit_transaction.SQLCode <> 0 THEN
  1016. arg_msg = '查询分配计划所属采购订单资料失败,'+commit_transaction.SQLErrText
  1017. rslt = 0
  1018. GOTO ext
  1019. END IF
  1020. IF arg_qty > ld_ffpqty_not THEN
  1021. arg_msg = '采购订单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_qty,'#,##0.##########')
  1022. rslt = 0
  1023. GOTO ext
  1024. END IF
  1025. UPDATE u_buytaskmx
  1026. SET u_buytaskmx.ffpqty = u_buytaskmx.ffpqty + :arg_qty
  1027. WHERE u_buytaskmx.scid = :ll_scid
  1028. AND u_buytaskmx.taskid = :ll_Plankind_relbillid
  1029. And u_buytaskmx.printid = :ll_Plankind_relprintid using commit_transaction;
  1030. IF commit_transaction.SQLCode <> 0 THEN
  1031. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划完成数失败,'+commit_transaction.SQLErrText
  1032. rslt = 0
  1033. GOTO ext
  1034. END IF
  1035. CASE 3
  1036. SELECT u_order_wfjg.taskcode,
  1037. u_order_wfjgmx.fpqty - u_order_wfjgmx.ffpqty
  1038. INTO :ls_plankind_relbillcode,:ld_ffpqty_not
  1039. FROM u_order_wfjg,u_order_wfjgmx
  1040. WHERE u_order_wfjg.scid = u_order_wfjgmx.scid
  1041. AND u_order_wfjg.wfjgid = u_order_wfjgmx.wfjgid
  1042. AND u_order_wfjgmx.scid = :ll_scid
  1043. AND u_order_wfjgmx.wfjgid = :ll_Plankind_relbillid
  1044. And u_order_wfjgmx.printid = :ll_Plankind_relprintid using commit_transaction;
  1045. IF commit_transaction.SQLCode <> 0 THEN
  1046. arg_msg = '查询分配计划所属外协订单资料失败,'+commit_transaction.SQLErrText
  1047. rslt = 0
  1048. GOTO ext
  1049. END IF
  1050. IF arg_qty > ld_ffpqty_not THEN
  1051. arg_msg = '外协订单:'+ls_plankind_relbillcode+'分配计划未完成数只有:'+String(ld_ffpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_qty,'#,##0.##########')
  1052. rslt = 0
  1053. GOTO ext
  1054. END IF
  1055. UPDATE u_order_wfjgmx
  1056. SET u_order_wfjgmx.ffpqty = u_order_wfjgmx.ffpqty + :arg_qty
  1057. WHERE u_order_wfjgmx.scid = :ll_scid
  1058. AND u_order_wfjgmx.wfjgid = :ll_Plankind_relbillid
  1059. And u_order_wfjgmx.printid = :ll_Plankind_relprintid using commit_transaction;
  1060. IF commit_transaction.SQLCode <> 0 THEN
  1061. arg_msg = '更新外协订单:'+ls_plankind_relbillcode+'分配计划完成数失败,'+commit_transaction.SQLErrText
  1062. rslt = 0
  1063. GOTO ext
  1064. END IF
  1065. END CHOOSE
  1066. END IF
  1067. ext:
  1068. IF rslt = 0 THEN
  1069. ROLLBACK using commit_transaction;
  1070. ELSEIF rslt = 1 And arg_ifcommit THEN
  1071. COMMIT using commit_transaction;
  1072. END IF
  1073. RETURN rslt
  1074. end function
  1075. public function integer uof_assign_add (long arg_scid, long arg_mtrlwareid, integer arg_assigntype, long arg_relbillid, long arg_relprintid, decimal arg_assignqty, decimal arg_cost, string arg_dscrp, string arg_mtrlcuscode, string arg_inwarecode, long arg_inprintid, integer arg_fpgrade, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1076. Long ll_assignid,ll_mtrlid,ll_mtrlid_task,ll_cusid,ll_storageid,ll_sptid
  1077. String ls_relbillcode
  1078. Decimal ld_assignqty_all,ld_assignqty,ld_fpqty,ld_assignqty_old_task
  1079. Decimal ld_wareamt,ld_noallocqty,ld_allocqty
  1080. Int li_ifpack,li_ifpackpro,li_ifpackpro_mtrlware
  1081. Decimal ld_Sonscale,ld_Sonscale_fm
  1082. String ls_plancode,ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode,ls_mtrlcuscode_fp,ls_mtrlcuscode_fp_array[]
  1083. String ls_mtrlcuscode_fp_str
  1084. Long ll_array_mtrlcuscode,k,ll_cnt_notsame
  1085. String ls_mtrlcode
  1086. String ls_status_task,ls_woodcode_task,ls_pcode_task
  1087. Long i,ll_mtrlid_son,j
  1088. //销售订单包件产品加0库存用
  1089. Int li_ref_ifadd
  1090. String ls_mtrlcode_task
  1091. Long ll_assignid_task
  1092. Long ll_mtrlwareid_task
  1093. String ls_plancode_task,ls_location_task,arg_lsg
  1094. Decimal ld_taskqty,ld_assignqty_mtrlcuscode,ld_fpqty_mtrlcuscode
  1095. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro
  1096. Decimal lde_fpqty_task,ld_ref_fpqty
  1097. Decimal ld_assignqty_fp,ld_sumfpqty
  1098. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  1099. //指令分配用
  1100. Long ll_orderid_zl,ll_wrkgrpid_zl,ll_produce_wrkgrpid,ll_wrkgrpid_order
  1101. Decimal ld_fpqty_zl,ld_fpqty_order,ld_assignqty_update,ld_assignqty_order
  1102. String ls_ordercode_zl
  1103. Int li_plantype
  1104. If uo_option_packpro2_not_use_pack1 = -1000 Then
  1105. rslt = 0
  1106. arg_msg = '选项:[289]个性包件产品不考虑通用包件,读取初始默认值失败,操作取消!'
  1107. Goto ext
  1108. End If
  1109. If uo_option_iffp_recmpl_canuseqty = -1000 Then
  1110. rslt = 0
  1111. arg_msg = '选项:[290]库存分配是否重算库存可装数、未分配可装数、未开单可装数,读取初始默认值失败,操作取消!'
  1112. Goto ext
  1113. End If
  1114. If uo_option_canpack_ifzanyong = -1000 Then
  1115. rslt = 0
  1116. arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!'
  1117. Goto ext
  1118. End If
  1119. datastore ds_cmpl_pack_saletask
  1120. ds_cmpl_pack_saletask = Create datastore
  1121. ds_cmpl_pack_saletask.DataObject = 'ds_uo_mtrlware_assign_saletask_pack'
  1122. ds_cmpl_pack_saletask.SetTransObject(commit_transaction)
  1123. datastore ds_orderrqmtrl_fp_2_zl
  1124. ds_orderrqmtrl_fp_2_zl = Create datastore
  1125. ds_orderrqmtrl_fp_2_zl.DataObject = 'ds_order_mtrl_fp_to_zl'
  1126. ds_orderrqmtrl_fp_2_zl.SetTransObject(commit_transaction)
  1127. datastore ds_orderrqmtrl_fp
  1128. ds_orderrqmtrl_fp = Create datastore
  1129. ds_orderrqmtrl_fp.DataObject = 'ds_order_mtrl_fp'
  1130. ds_orderrqmtrl_fp.SetTransObject(commit_transaction)
  1131. uo_cmpl_packpro uo_cmpl_p
  1132. uo_cmpl_p = Create uo_cmpl_packpro
  1133. uo_cmpl_p.commit_transaction = commit_transaction
  1134. If IsNull(arg_scid) Then arg_scid = 0
  1135. If IsNull(arg_mtrlwareid) Then arg_mtrlwareid = 0
  1136. If IsNull(arg_assigntype) Then arg_assigntype = 0
  1137. If IsNull(arg_Relbillid) Then arg_Relbillid = 0
  1138. If IsNull(arg_relprintid) Then arg_relprintid = 0
  1139. If IsNull(arg_assignqty) Then arg_assignqty = 0
  1140. If IsNull(arg_cost) Then arg_cost = 0
  1141. If IsNull(arg_mtrlcuscode) Then arg_mtrlcuscode = ''
  1142. If IsNull(arg_inwarecode) Then arg_inwarecode = ''
  1143. If IsNull(arg_inprintid) Then arg_inprintid = 0
  1144. If IsNull(arg_opemp) Then arg_opemp = ''
  1145. If IsNull(arg_dscrp) Then arg_dscrp = ''
  1146. If arg_mtrlwareid = 0 Then
  1147. arg_msg = '非法的库存id'
  1148. rslt = 0
  1149. Goto ext
  1150. End If
  1151. If arg_assignqty <= 0 Then
  1152. arg_msg = '错误的分配数量'
  1153. rslt = 0
  1154. Goto ext
  1155. End If
  1156. ld_wareamt = Round(arg_assignqty * arg_cost,2)
  1157. Select u_mtrlware.mtrlid,
  1158. u_mtrlware.noallocqty,
  1159. u_mtrlware.allocqty,
  1160. u_mtrldef.ifpack,
  1161. u_mtrldef.ifpackpro,
  1162. u_mtrlware.status,
  1163. u_mtrlware.woodcode,
  1164. u_mtrlware.pcode,
  1165. u_mtrldef.mtrlcode,
  1166. u_mtrlware.mtrlcuscode,
  1167. u_mtrlware.storageid,
  1168. u_mtrlware.sptid,
  1169. u_mtrlware.plancode
  1170. Into :ll_mtrlid,
  1171. :ld_noallocqty,
  1172. :ld_allocqty,
  1173. :li_ifpack,
  1174. :li_ifpackpro_mtrlware,
  1175. :ls_status,
  1176. :ls_woodcode,
  1177. :ls_pcode,
  1178. :ls_mtrlcode,
  1179. :ls_mtrlcuscode,
  1180. :ll_storageid,
  1181. :ll_sptid,
  1182. :ls_plancode
  1183. From u_mtrlware,u_mtrldef
  1184. Where u_mtrlware.scid = :arg_scid
  1185. And u_mtrlware.mtrlwareid = :arg_mtrlwareid
  1186. And u_mtrlware.mtrlid = u_mtrldef.mtrlid Using commit_transaction;
  1187. If commit_transaction.SQLCode <> 0 Then
  1188. arg_msg = '查询库存物料资料失败,库存id:'+String(arg_mtrlwareid)+','+commit_transaction.SQLErrText
  1189. rslt = 0
  1190. Goto ext
  1191. End If
  1192. If ld_noallocqty < ld_allocqty + arg_assignqty Then
  1193. arg_msg = '物料:'+ls_mtrlcode+'产品批号:'+ls_mtrlcuscode+',库存id:'+String(arg_mtrlwareid)+',库存总数:'+String(ld_noallocqty,'#,##0.##########')+',已分配数:'+String(ld_allocqty,'#,##0.##########')+',不能再分配:'+String(arg_assignqty,'#,##0.##########')
  1194. rslt = 0
  1195. Goto ext
  1196. End If
  1197. If arg_assigntype = 0 Then
  1198. If arg_Relbillid = 0 Then
  1199. arg_msg = '非法的生产计划id'
  1200. rslt = 0
  1201. Goto ext
  1202. End If
  1203. Select ordercode Into :ls_relbillcode
  1204. From u_order_ml
  1205. Where scid = :arg_scid
  1206. And orderid = :arg_Relbillid Using commit_transaction;
  1207. If commit_transaction.SQLCode <> 0 Then
  1208. arg_msg = '查询计划资料失败,'+commit_transaction.SQLErrText
  1209. rslt = 0
  1210. Goto ext
  1211. End If
  1212. Select isnull(sum(u_OrderRqMtrl.RqQty),0),
  1213. isnull(sum(u_OrderRqMtrl.fpqty),0)
  1214. Into :ld_assignqty_all,
  1215. :ld_assignqty
  1216. From u_OrderRqMtrl
  1217. Where u_OrderRqMtrl.scid = :arg_scid
  1218. And u_OrderRqMtrl.orderid = :arg_relbillid
  1219. And u_OrderRqMtrl.mtrlid = :ll_mtrlid
  1220. And u_OrderRqMtrl.status = :ls_status
  1221. And u_OrderRqMtrl.woodcode = :ls_woodcode
  1222. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  1223. If commit_transaction.SQLCode <> 0 Then
  1224. arg_msg = '计划:'+ls_relbillcode+',物料:'+ls_mtrlcode+',查询物料计划领用需求总数及已库存分配数失败,'+commit_transaction.SQLErrText
  1225. rslt = 0
  1226. Goto ext
  1227. End If
  1228. If ld_assignqty_all < ld_assignqty + arg_assignqty Then
  1229. arg_msg = '计划:'+ls_relbillcode+',物料:'+ls_mtrlcode+',计划需求数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',不能再库存分配:'+String(arg_assignqty,'#,##0.##########')
  1230. rslt = 0
  1231. Goto ext
  1232. End If
  1233. ds_orderrqmtrl_fp.Retrieve(arg_scid,arg_Relbillid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
  1234. ld_assignqty_order = arg_assignqty
  1235. For j = 1 To ds_orderrqmtrl_fp.RowCount()
  1236. If ld_assignqty_order > 0 Then
  1237. ld_fpqty_order = ds_orderrqmtrl_fp.Object.notfpqty[j]
  1238. ll_produce_wrkgrpid = ds_orderrqmtrl_fp.Object.produce_wrkgrpid[j]
  1239. li_plantype = ds_orderrqmtrl_fp.Object.plantype[j]
  1240. ll_wrkgrpid_order = ds_orderrqmtrl_fp.Object.wrkgrpid[j]
  1241. If ld_fpqty_order > ld_assignqty_order Then
  1242. ld_assignqty_update = ld_assignqty_order
  1243. ld_assignqty_order = 0
  1244. Else
  1245. ld_assignqty_update = ld_fpqty_order
  1246. ld_assignqty_order = ld_assignqty_order - ld_fpqty_order
  1247. End If
  1248. //更新已分配数
  1249. Update u_OrderRqMtrl
  1250. Set u_OrderRqMtrl.fpqty = u_OrderRqMtrl.fpqty + :ld_assignqty_update
  1251. Where u_OrderRqMtrl.scid = :arg_scid
  1252. And u_OrderRqMtrl.orderid = :arg_relbillid
  1253. And u_OrderRqMtrl.mtrlid = :ll_mtrlid
  1254. And u_OrderRqMtrl.status = :ls_status
  1255. And u_OrderRqMtrl.woodcode = :ls_woodcode
  1256. And u_OrderRqMtrl.pcode = :ls_pcode
  1257. And u_OrderRqMtrl.plantype = :li_plantype
  1258. And u_OrderRqMtrl.produce_wrkgrpid = :ll_produce_wrkgrpid
  1259. And u_OrderRqMtrl.wrkgrpid = :ll_wrkgrpid_order Using commit_transaction;
  1260. If commit_transaction.SQLCode <> 0 Then
  1261. arg_msg = '计划:'+ls_relbillcode+',物料:'+ls_mtrlcode+',更新物料需求已分配数失败,'+commit_transaction.SQLErrText
  1262. rslt = 0
  1263. Goto ext
  1264. End If
  1265. End If
  1266. Next
  1267. //自动分到指令单
  1268. ds_orderrqmtrl_fp_2_zl.Retrieve(arg_scid,arg_Relbillid,ll_mtrlid,ls_status,ls_woodcode,ls_pcode)
  1269. ld_assignqty_order = arg_assignqty
  1270. For i = 1 To ds_orderrqmtrl_fp_2_zl.RowCount()
  1271. If ld_assignqty_order > 0 Then
  1272. ll_orderid_zl = ds_orderrqmtrl_fp_2_zl.Object.u_orderrqmtrl_scll_orderid[i]
  1273. ls_ordercode_zl = ds_orderrqmtrl_fp_2_zl.Object.u_order_ml_ordercode[i]
  1274. ll_wrkgrpid_zl = ds_orderrqmtrl_fp_2_zl.Object.u_orderrqmtrl_scll_wrkgrpid[i]
  1275. ld_fpqty_zl = ds_orderrqmtrl_fp_2_zl.Object.notfpqty[i]
  1276. If ld_fpqty_zl > ld_assignqty_order Then
  1277. ld_assignqty_update = ld_assignqty_order
  1278. ld_assignqty_order = 0
  1279. Else
  1280. ld_assignqty_update = ld_fpqty_zl
  1281. ld_assignqty_order = ld_assignqty_order - ld_fpqty_zl
  1282. End If
  1283. If uof_assign_add_to_zl_scll(arg_scid,ll_orderid_zl,ll_mtrlid,&
  1284. ll_wrkgrpid_zl,ls_status,ls_woodcode,ls_pcode,ld_assignqty_update,&
  1285. 0,0,0,arg_msg,False) = 0 Then
  1286. arg_msg = '计划:'+ls_relbillcode+',物料:'+ls_mtrlcode+',更新相关指令单:'+ls_ordercode_zl+',物料已分配数失败,'+arg_msg
  1287. rslt = 0
  1288. Goto ext
  1289. End If
  1290. End If
  1291. Next
  1292. Else
  1293. If arg_Relbillid = 0 Then
  1294. arg_msg = '非法的销售订单id'
  1295. rslt = 0
  1296. Goto ext
  1297. End If
  1298. Select u_saletask.taskcode,
  1299. u_saletaskmx.saleqty,
  1300. u_mtrldef.ifpackpro,
  1301. u_saletaskmx.mtrlid,
  1302. u_saletask.cusid,
  1303. u_saletaskmx.status,
  1304. u_saletaskmx.woodcode,
  1305. u_saletaskmx.pcode,
  1306. u_saletaskmx.mtrlcuscode,
  1307. u_mtrldef.mtrlcode
  1308. Into :ls_relbillcode,
  1309. :ld_assignqty_all,
  1310. :li_ifpackpro,
  1311. :ll_mtrlid_task,
  1312. :ll_cusid,
  1313. :ls_status_task,
  1314. :ls_woodcode_task,
  1315. :ls_pcode_task,
  1316. :ls_plancode_task,
  1317. :ls_mtrlcode_task
  1318. From u_saletask,u_saletaskmx,u_mtrldef
  1319. Where u_saletask.scid = u_saletaskmx.scid
  1320. And u_saletask.taskid = u_saletaskmx.taskid
  1321. And u_saletaskmx.mtrlid = u_mtrldef.mtrlid
  1322. And u_saletaskmx.scid = :arg_scid
  1323. And u_saletaskmx.taskid = :arg_relbillid
  1324. And u_saletaskmx.printid = :arg_relprintid Using commit_transaction;
  1325. If commit_transaction.SQLCode <> 0 Then
  1326. arg_msg = '查询订单资料失败,'+commit_transaction.SQLErrText
  1327. rslt = 0
  1328. Goto ext
  1329. End If
  1330. //yyx20120712
  1331. //包件检查订单包件产品是否有0库存,如果无则加0库存并计算可装数
  1332. ld_taskqty = ld_assignqty_all
  1333. If li_ifpackpro = 2 And li_ifpack = 2 Or &
  1334. li_ifpackpro = 4 And (Pos(ls_status_task,'+') > 0 Or Pos(ls_status_task,'*') > 0) Or &
  1335. li_ifpackpro = 1 And li_ifpack = 1 Then
  1336. If f_insert_0_mtrlware_2(ll_mtrlwareid_task,ll_mtrlid_task,ls_mtrlcode_task,ll_storageid,&
  1337. ll_sptid,ls_status_task,ls_woodcode_task,ls_pcode_task,ls_plancode_task,ls_mtrlcuscode,&
  1338. '',0,li_ref_ifadd,arg_msg,False) = 0 Then
  1339. arg_msg = '订单产品:'+ls_mtrlcode_task+',查询包件产品0库存信息记录失败,'+arg_msg
  1340. rslt = 0
  1341. Goto ext
  1342. End If
  1343. If li_ref_ifadd = 1 Then
  1344. If f_cmp_di_qty_fpqty(ll_mtrlid_task,ll_storageid,ls_status_task,ls_woodcode_task,ls_pcode_task,ls_plancode_task,ls_mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_fpqty,arg_lsg,arg_msg) = 0 Then
  1345. arg_msg = '物料:'+ls_mtrlcode_task+',计算可装数失败,'+arg_msg
  1346. rslt = 0
  1347. Goto ext
  1348. End If
  1349. If uo_cmpl_p.uof_update_canuseqty(arg_scid,ll_mtrlwareid_task,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ld_ref_fpqty,arg_msg,False) = 0 Then
  1350. arg_msg = '物料:'+ls_mtrlcode_task+',更新可装数失败,'+arg_msg
  1351. rslt = 0
  1352. Goto ext
  1353. End If
  1354. End If
  1355. End If
  1356. //yyx20120712_end
  1357. //yyx20120706
  1358. If li_ifpack = 2 And li_ifpackpro = 2 Or li_ifpackpro = 4 Then
  1359. Declare cur_mtrlcuscode Cursor For
  1360. Select distinct u_mtrlware.mtrlcuscode
  1361. From u_mtrlware_assign,u_mtrlware,u_mtrldef
  1362. Where u_mtrlware_assign.scid = u_mtrlware.scid
  1363. And u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid
  1364. And u_mtrldef.mtrlid = u_mtrlware.mtrlid
  1365. And u_mtrlware_assign.scid = :arg_scid
  1366. And u_mtrlware_assign.relbillid = :arg_relbillid
  1367. And u_mtrlware_assign.relprintid = :arg_relprintid
  1368. And u_mtrlware_assign.assigntype = 1
  1369. And u_mtrlware_assign.assignqty > 0
  1370. And ( :li_ifpackpro = 2 And u_mtrldef.ifpack = 2 Or :li_ifpackpro = 4 )
  1371. Using commit_transaction;
  1372. Open cur_mtrlcuscode;
  1373. Fetch cur_mtrlcuscode Into :ls_mtrlcuscode_fp;
  1374. Do While commit_transaction.SQLCode = 0
  1375. ll_array_mtrlcuscode++
  1376. ls_mtrlcuscode_fp_array[ll_array_mtrlcuscode] = ls_mtrlcuscode_fp
  1377. ls_mtrlcuscode_fp_str += ls_mtrlcuscode_fp+','
  1378. Fetch cur_mtrlcuscode Into :ls_mtrlcuscode_fp;
  1379. Loop
  1380. Close cur_mtrlcuscode;
  1381. If ll_array_mtrlcuscode > ld_assignqty_all Then
  1382. arg_msg = '订单:'+ls_relbillcode+',明细已分配产品批号次数:'+String(ll_array_mtrlcuscode)+',大于订货数量'+String(ld_assignqty_all,'##0.##########')+',已分配批次:'+ls_mtrlcuscode_fp_str+'操作取消'
  1383. rslt = 0
  1384. Goto ext
  1385. End If
  1386. If ll_array_mtrlcuscode = ld_assignqty_all Then
  1387. For k = 1 To ll_array_mtrlcuscode
  1388. If ls_mtrlcuscode_fp_array[k] <> ls_mtrlcuscode Then
  1389. ll_cnt_notsame++
  1390. End If
  1391. Next
  1392. If ll_cnt_notsame = ll_array_mtrlcuscode Then
  1393. arg_msg = '订单:'+ls_relbillcode+',明细已分配产品批号次数:'+String(ll_array_mtrlcuscode)+',如果分配本次产品批号,分配次数就会大于订货数量'+String(ld_assignqty_all,'##0.##########')+',已分配批次:'+ls_mtrlcuscode_fp_str+',本次分配批次:'+ls_mtrlcuscode+',操作取消'
  1394. rslt = 0
  1395. Goto ext
  1396. End If
  1397. End If
  1398. End If
  1399. //yyx20120706_end
  1400. If (li_ifpackpro = 1 Or li_ifpackpro = 2) And li_ifpack = 0 Then
  1401. arg_msg = '订单:'+ls_relbillcode+',明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配的订单为包件产品,但对应分配的库存不是包件,请检查资料'
  1402. rslt = 0
  1403. Goto ext
  1404. ElseIf (li_ifpackpro = 1 Or li_ifpackpro = 2) And li_ifpack > 0 Then
  1405. Long ll_saletaskmx_pf_ch
  1406. ll_saletaskmx_pf_ch = 0
  1407. If li_ifpackpro = 1 Then
  1408. ll_saletaskmx_pf_ch = 0
  1409. Else
  1410. Select count(*)
  1411. Into :ll_saletaskmx_pf_ch
  1412. From u_SaleTaskMx_pf
  1413. Where u_SaleTaskMx_pf.scid = :arg_scid
  1414. And u_SaleTaskMx_pf.taskid = :arg_relbillid
  1415. And u_SaleTaskMx_pf.printid = :arg_relprintid Using commit_transaction;
  1416. If commit_transaction.SQLCode <> 0 Then
  1417. arg_msg = '订单:'+ls_relbillcode+',明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询是否有换包件失败,'+commit_transaction.SQLErrText
  1418. rslt = 0
  1419. Goto ext
  1420. End If
  1421. End If
  1422. If ll_saletaskmx_pf_ch > 0 Then
  1423. Select u_SaleTaskMx_pf.Sonscale,
  1424. u_SaleTaskMx_pf.Sonscale_fm
  1425. Into :ld_Sonscale,:ld_Sonscale_fm
  1426. From u_SaleTaskMx_pf
  1427. Where u_SaleTaskMx_pf.scid = :arg_scid
  1428. And u_SaleTaskMx_pf.taskid = :arg_relbillid
  1429. And u_SaleTaskMx_pf.printid = :arg_relprintid
  1430. And u_SaleTaskMx_pf.sonmtrlid = :ll_mtrlid Using commit_transaction;
  1431. If commit_transaction.SQLCode = -1 Then
  1432. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+commit_transaction.SQLErrText
  1433. rslt = 0
  1434. Goto ext
  1435. ElseIf commit_transaction.SQLCode = 100 Then
  1436. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  1437. rslt = 0
  1438. Goto ext
  1439. End If
  1440. Else
  1441. Select u_prdpf.Sonscale,1
  1442. Into :ld_Sonscale,:ld_Sonscale_fm
  1443. From u_saletaskmx,u_mtrl_pf,u_prdpf,u_mtrldef
  1444. Where u_saletaskmx.mtrlid = u_mtrl_pf.mtrlid
  1445. And u_saletaskmx.scid = :arg_scid
  1446. And u_saletaskmx.taskid = :arg_relbillid
  1447. And u_saletaskmx.printid = :arg_relprintid
  1448. And u_mtrl_pf.mtrlid = u_prdpf.mtrlid
  1449. And u_mtrl_pf.pfcode = u_prdpf.pfcode
  1450. And ( u_mtrl_pf.ifdi = 0 And u_mtrl_pf.ifdft = 1 )
  1451. And u_PrdPF.SonMtrlid = :ll_mtrlid
  1452. And u_prdpf.sonmtrlid = u_mtrldef.mtrlid
  1453. And u_mtrldef.ifpack > 0 Using commit_transaction;
  1454. If commit_transaction.SQLCode = -1 Then
  1455. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+commit_transaction.SQLErrText
  1456. rslt = 0
  1457. Goto ext
  1458. ElseIf commit_transaction.SQLCode = 100 Then
  1459. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  1460. rslt = 0
  1461. Goto ext
  1462. End If
  1463. End If
  1464. ld_assignqty_all = ld_assignqty_all * ld_Sonscale/ld_Sonscale_fm
  1465. Select isnull(sum(assignqty),0),
  1466. isnull(sum(case when u_mtrldef.ifpack = 1 Or u_mtrldef.ifpack = 2 And u_mtrlware_assign.mtrlcuscode = :ls_mtrlcuscode then assignqty else 0 End ),0)
  1467. Into :ld_assignqty,:ld_assignqty_mtrlcuscode
  1468. From u_mtrlware_assign Inner join u_mtrldef on
  1469. u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid
  1470. Where u_mtrlware_assign.scid = :arg_scid
  1471. And u_mtrlware_assign.relbillid = :arg_relbillid
  1472. And u_mtrlware_assign.relprintid = :arg_relprintid
  1473. And u_mtrlware_assign.mtrlid = :ll_mtrlid
  1474. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  1475. If commit_transaction.SQLCode <> 0 Then
  1476. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询订单包件已分配数失败,'+commit_transaction.SQLErrText
  1477. rslt = 0
  1478. Goto ext
  1479. End If
  1480. If ld_assignqty_all < ld_assignqty + arg_assignqty Then
  1481. If ib_ifnotcheck_qty Then
  1482. rslt = 1
  1483. Goto ext
  1484. Else
  1485. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',不能再分配:'+String(arg_assignqty,'#,##0.##########')
  1486. rslt = 0
  1487. Goto ext
  1488. End If
  1489. End If
  1490. //如果使用通用包件占用,检查通用包件的被占用数
  1491. If uo_option_canpack_ifzanyong = 1 And li_ifpackpro = 1 And li_ifpack = 1 Then
  1492. //得到该包件库存分配给这种订单产品的总数量
  1493. Select sum(u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty)
  1494. Into :ld_assignqty_fp
  1495. From u_mtrlware_assign Inner JOIN
  1496. u_SaleTaskMx ON u_mtrlware_assign.Scid = u_SaleTaskMx.scid And
  1497. u_mtrlware_assign.Relbillid = u_SaleTaskMx.TaskID And
  1498. u_mtrlware_assign.Relprintid = u_SaleTaskMx.printid
  1499. Where u_SaleTaskMx.MtrlID = :ll_mtrlid_task
  1500. and u_SaleTaskMx.status = :ls_status_task
  1501. and u_SaleTaskMx.woodcode = :ls_woodcode_task
  1502. and u_SaleTaskMx.pcode = :ls_pcode_task
  1503. And u_mtrlware_assign.Scid = :arg_scid
  1504. And u_mtrlware_assign.mtrlwareid = :arg_mtrlwareid Using commit_transaction;
  1505. If commit_transaction.SQLCode <> 0 Then
  1506. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询订单包件已分配给对应包件产品的数量失败,'+commit_transaction.SQLErrText
  1507. rslt = 0
  1508. Goto ext
  1509. End If
  1510. //得到该包件库存被这种订单产品占用的数量
  1511. Select sum(u_mtrlware_pack_fp.qty - u_mtrlware_pack_fp.outqty)
  1512. Into :ld_sumfpqty
  1513. FROM u_mtrlware_pack_fp INNER JOIN
  1514. u_mtrlware u_mtrlware_cp ON u_mtrlware_pack_fp.scid = u_mtrlware_cp.scid AND
  1515. u_mtrlware_pack_fp.cpmtrlwareid = u_mtrlware_cp.mtrlwareid
  1516. Where u_mtrlware_pack_fp.scid = :arg_scid
  1517. And u_mtrlware_pack_fp.mtrlwareid = :arg_mtrlwareid
  1518. And u_mtrlware_pack_fp.cpmtrlid = :ll_mtrlid_task
  1519. and u_mtrlware_cp.status = :ls_status_task
  1520. and u_mtrlware_cp.woodcode = :ls_woodcode_task
  1521. and u_mtrlware_cp.pcode = :ls_pcode_task
  1522. Using commit_transaction;
  1523. If commit_transaction.SQLCode <> 0 Then
  1524. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询订单包件库存被对应包件产品占用数失败,'+commit_transaction.SQLErrText
  1525. rslt = 0
  1526. Goto ext
  1527. End If
  1528. if isnull(ld_assignqty_fp) then ld_assignqty_fp = 0
  1529. if isnull(ld_sumfpqty) then ld_sumfpqty = 0
  1530. //限制先有占用数才能进行库存分配
  1531. If arg_assignqty + ld_assignqty_fp > ld_sumfpqty Then
  1532. rslt = 0
  1533. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+','+'包件被包件产品占用数量为:'+String(ld_sumfpqty,'#,##0.##########')+',库存已分配数量:'+String(ld_assignqty_fp,'#,##0.##########')+',不能再分配:'+String(arg_assignqty,'#,##0.##########')
  1534. Goto ext
  1535. End If
  1536. End If
  1537. //计算配套数
  1538. If Not ( uo_option_packpro2_not_use_pack1 = 1 And li_ifpackpro = 2 And li_ifpack = 1 ) Then
  1539. ld_fpqty = (arg_assignqty + ld_assignqty)/(ld_Sonscale/ld_Sonscale_fm)
  1540. ld_fpqty_mtrlcuscode = (arg_assignqty + ld_assignqty_mtrlcuscode)/(ld_Sonscale/ld_Sonscale_fm)
  1541. If ll_saletaskmx_pf_ch > 0 Then
  1542. ds_cmpl_pack_saletask.DataObject = 'ds_uo_mtrlware_assign_saletask_pack2'
  1543. ds_cmpl_pack_saletask.SetTransObject(commit_transaction)
  1544. ds_cmpl_pack_saletask.Retrieve(arg_scid,arg_Relbillid,arg_relprintid,ll_mtrlid)
  1545. Else
  1546. ds_cmpl_pack_saletask.Retrieve(ll_mtrlid_task,ll_mtrlid)
  1547. End If
  1548. For i = 1 To ds_cmpl_pack_saletask.RowCount()
  1549. If uo_option_packpro2_not_use_pack1 = 1 Then
  1550. If li_ifpackpro = 2 And ds_cmpl_pack_saletask.Object.u_mtrldef_ifpack[i] = 1 Then
  1551. Continue
  1552. End If
  1553. End If
  1554. ll_mtrlid_son = ds_cmpl_pack_saletask.Object.u_prdpf_sonmtrlid[i]
  1555. ld_Sonscale = ds_cmpl_pack_saletask.Object.u_prdpf_sonscale[i]
  1556. ld_Sonscale_fm = ds_cmpl_pack_saletask.Object.u_prdpf_sonscale_fm[i]
  1557. Select isnull(sum(assignqty),0),
  1558. isnull(sum(case when u_mtrldef.ifpack = 1 Or u_mtrldef.ifpack = 2 And u_mtrlware_assign.mtrlcuscode = :ls_mtrlcuscode then assignqty else 0 End ),0)
  1559. Into :ld_assignqty,:ld_assignqty_mtrlcuscode
  1560. From u_mtrlware_assign Inner join u_mtrldef on
  1561. u_mtrlware_assign.mtrlid = u_mtrldef.mtrlid
  1562. Where u_mtrlware_assign.scid = :arg_scid
  1563. And u_mtrlware_assign.relbillid = :arg_relbillid
  1564. And u_mtrlware_assign.relprintid = :arg_relprintid
  1565. And u_mtrlware_assign.mtrlid = :ll_mtrlid_son
  1566. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  1567. If commit_transaction.SQLCode <> 0 Then
  1568. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(arg_relprintid)+',查询订单其它包件已分配数失败,'+commit_transaction.SQLErrText
  1569. rslt = 0
  1570. Goto ext
  1571. End If
  1572. ld_fpqty = Min(ld_fpqty,ld_assignqty/(ld_Sonscale/ld_Sonscale_fm))
  1573. ld_fpqty_mtrlcuscode = Min(ld_fpqty_mtrlcuscode,ld_assignqty_mtrlcuscode/(ld_Sonscale/ld_Sonscale_fm))
  1574. Next
  1575. End If
  1576. ElseIf li_ifpackpro = 3 Or li_ifpackpro = 4 Then //组合配置包件产品
  1577. s_mtrlcfg_expr s_pz[]
  1578. Long ll_array,ll_l
  1579. Decimal ld_pf_Sonscale[]
  1580. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  1581. f_checkpz(ls_status_task,s_pz[])
  1582. ll_array = UpperBound(s_pz)
  1583. If ll_array = 0 Then
  1584. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(arg_relprintid)+',拆分子件错误,请检查组合配置'
  1585. rslt = 0
  1586. Goto ext
  1587. End If
  1588. For ll_l = 1 To ll_array
  1589. ls_pf_status[ll_l] = s_pz[ll_l].cfgname
  1590. ls_pf_woodcode[ll_l] = ls_woodcode_task
  1591. ls_pf_pcode[ll_l] = ls_pcode_task
  1592. ld_pf_Sonscale[ll_l] = Dec(s_pz[ll_l].qty)
  1593. Next
  1594. For ll_l = 1 To ll_array
  1595. If ll_l > 1 And ld_fpqty = 0 Then Exit //最少配套数为0,不用计算其它子件
  1596. Select isnull(sum(u_mtrlware_assign.assignqty),0),
  1597. isnull(sum(case u_mtrlware_assign.mtrlcuscode when :ls_mtrlcuscode then u_mtrlware_assign.assignqty else 0 End ),0)
  1598. Into :ld_assignqty,:ld_assignqty_mtrlcuscode
  1599. From u_mtrlware_assign,u_mtrlware
  1600. Where u_mtrlware_assign.scid = u_mtrlware.scid
  1601. And u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid
  1602. And u_mtrlware_assign.scid = :arg_scid
  1603. And u_mtrlware_assign.relbillid = :arg_relbillid
  1604. And u_mtrlware_assign.relprintid = :arg_relprintid
  1605. And u_mtrlware_assign.mtrlid = :ll_mtrlid
  1606. And u_mtrlware_assign.assigntype = 1
  1607. And u_mtrlware.status = :ls_pf_status[ll_l]
  1608. And u_mtrlware.woodcode = :ls_pf_woodcode[ll_l]
  1609. And u_mtrlware.pcode = :ls_pf_pcode[ll_l] Using commit_transaction;
  1610. If commit_transaction.SQLCode <> 0 Then
  1611. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(arg_relprintid)+',查询订单包件已分配数失败,'+commit_transaction.SQLErrText
  1612. rslt = 0
  1613. Goto ext
  1614. End If
  1615. If ls_status = ls_pf_status[ll_l] And ls_woodcode = ls_pf_woodcode[ll_l] And ls_pcode = ls_pf_pcode[ll_l] Then
  1616. ld_assignqty = ld_assignqty + arg_assignqty
  1617. ld_assignqty_mtrlcuscode = ld_assignqty_mtrlcuscode + arg_assignqty
  1618. End If
  1619. If ll_l = 1 Then
  1620. ld_fpqty = ld_assignqty/ld_pf_Sonscale[ll_l]
  1621. ld_fpqty_mtrlcuscode = ld_assignqty_mtrlcuscode/ld_pf_Sonscale[ll_l]
  1622. Else
  1623. ld_fpqty = Min(ld_fpqty,ld_assignqty/ld_pf_Sonscale[ll_l])
  1624. ld_fpqty_mtrlcuscode = Min(ld_fpqty_mtrlcuscode,ld_assignqty_mtrlcuscode/ld_pf_Sonscale[ll_l])
  1625. End If
  1626. Next
  1627. Else
  1628. Select isnull(sum(assignqty),0) Into :ld_assignqty
  1629. From u_mtrlware_assign
  1630. Where u_mtrlware_assign.scid = :arg_scid
  1631. And u_mtrlware_assign.relbillid = :arg_relbillid
  1632. And u_mtrlware_assign.relprintid = :arg_relprintid
  1633. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  1634. If commit_transaction.SQLCode <> 0 Then
  1635. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询订单已分配数失败,'+commit_transaction.SQLErrText
  1636. rslt = 0
  1637. Goto ext
  1638. End If
  1639. If ld_assignqty_all < ld_assignqty + arg_assignqty Then
  1640. If ib_ifnotcheck_qty Then
  1641. rslt = 1
  1642. Goto ext
  1643. Else
  1644. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',不能再分配:'+String(arg_assignqty,'#,##0.##########')
  1645. rslt = 0
  1646. Goto ext
  1647. End If
  1648. End If
  1649. ld_fpqty = arg_assignqty + ld_assignqty
  1650. ld_fpqty_mtrlcuscode = 0
  1651. End If
  1652. If Not ( uo_option_packpro2_not_use_pack1 = 1 And li_ifpackpro = 2 And li_ifpack = 1 ) Then
  1653. Update u_saletaskmx
  1654. Set u_saletaskmx.fpqty = :ld_fpqty
  1655. Where u_saletaskmx.scid = :arg_scid
  1656. And u_saletaskmx.taskid = :arg_relbillid
  1657. And u_saletaskmx.printid = :arg_relprintid Using commit_transaction;
  1658. If commit_transaction.SQLCode <> 0 Then
  1659. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',更新订单明细已分配数失败,'+commit_transaction.SQLErrText
  1660. rslt = 0
  1661. Goto ext
  1662. End If
  1663. End If
  1664. End If
  1665. ll_assignid = f_sys_scidentity(0,"u_mtrlware_assign","assignid",arg_msg,True,id_sqlca)
  1666. If ll_assignid <= 0 Then
  1667. rslt = 0
  1668. Goto ext
  1669. End If
  1670. Insert Into u_mtrlware_assign
  1671. (assignid,
  1672. assigntype,
  1673. scid,
  1674. mtrlwareid,
  1675. mtrlid,
  1676. Relbillid,
  1677. relprintid,
  1678. relbillcode,
  1679. assignqty,
  1680. cost,
  1681. wareamt,
  1682. dscrp,
  1683. mtrlcuscode,
  1684. inwarecode,
  1685. inprintid,
  1686. cusid,
  1687. fpgrade,
  1688. waredate,
  1689. opdate,
  1690. opemp,
  1691. storageid,
  1692. pdbdate)
  1693. Values
  1694. (:ll_assignid,
  1695. :arg_assigntype,
  1696. :arg_scid,
  1697. :arg_mtrlwareid,
  1698. :ll_mtrlid,
  1699. :arg_Relbillid,
  1700. :arg_relprintid,
  1701. :ls_relbillcode,
  1702. :arg_assignqty,
  1703. :arg_cost,
  1704. :ld_wareamt,
  1705. :arg_dscrp,
  1706. :ls_mtrlcuscode,
  1707. :arg_inwarecode,
  1708. :arg_inprintid,
  1709. :ll_cusid,
  1710. :arg_fpgrade,
  1711. getdate(),
  1712. getdate(),
  1713. :arg_opemp,
  1714. :uo_fp_storageid,
  1715. :uo_fp_pdbdate) Using commit_transaction;
  1716. If commit_transaction.SQLCode <> 0 Then
  1717. arg_msg = '分配库存失败,'+commit_transaction.SQLErrText
  1718. rslt = 0
  1719. Goto ext
  1720. End If
  1721. Update u_mtrlware
  1722. Set allocqty = allocqty + :arg_assignqty
  1723. Where mtrlwareid = :arg_mtrlwareid
  1724. And scid = :arg_scid Using commit_transaction;
  1725. If commit_transaction.SQLCode <> 0 Then
  1726. arg_msg = '更新库存已分配数量失败,'+commit_transaction.SQLErrText
  1727. rslt = 0
  1728. Goto ext
  1729. End If
  1730. If arg_assigntype = 1 Then
  1731. //yyx20120712
  1732. //检查包件产品订单同批号的可装数,更新到包件产品库存分配明细
  1733. If li_ifpackpro = 2 And li_ifpack = 2 Or &
  1734. li_ifpackpro = 4 And (Pos(ls_status_task,'+') > 0 Or Pos(ls_status_task,'*') > 0) Or &
  1735. li_ifpackpro = 1 And li_ifpack = 1 Then
  1736. Select assignqty
  1737. Into :ld_assignqty_old_task
  1738. From u_mtrlware_assign
  1739. Where u_mtrlware_assign.scid = :arg_scid
  1740. And u_mtrlware_assign.mtrlwareid = :ll_mtrlwareid_task
  1741. And u_mtrlware_assign.relbillid = :arg_relbillid
  1742. And u_mtrlware_assign.relprintid = :arg_relprintid
  1743. And u_mtrlware_assign.mtrlid = :ll_mtrlid_task
  1744. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  1745. If commit_transaction.SQLCode = -1 Then
  1746. arg_msg = '查询包件产品原库存分配数量失败,'+commit_transaction.SQLErrText
  1747. rslt = 0
  1748. Goto ext
  1749. ElseIf commit_transaction.SQLCode = 100 Then
  1750. ld_assignqty_old_task = 0
  1751. End If
  1752. ld_fpqty_mtrlcuscode = ld_fpqty_mtrlcuscode - ld_assignqty_old_task
  1753. If uof_assign_add_packpro_to_saletask(arg_scid,ll_mtrlwareid_task,&
  1754. ll_cusid,ll_mtrlid_task,ld_fpqty_mtrlcuscode,&
  1755. arg_Relbillid,arg_relprintid,ls_relbillcode,&
  1756. arg_cost,arg_dscrp,ls_mtrlcuscode,&
  1757. arg_fpgrade,arg_opemp,arg_msg,False) = 0 Then
  1758. rslt = 0
  1759. Goto ext
  1760. End If
  1761. End If
  1762. //yyx20120712_end
  1763. //yyx2012-9-29
  1764. If Not ib_ifinware_audit_do And uo_option_iffp_recmpl_canuseqty = 1 Then
  1765. //yyx2012-9-29返回计算可装数库存id数组
  1766. If ( li_ifpack = 1 Or li_ifpack = 2 Or li_ifpackpro_mtrlware = 3 Or li_ifpackpro_mtrlware = 4 ) Then
  1767. If uo_cmpl_p.uof_ref_mtrlwarid_array(ll_mtrlid,ls_plancode,ls_mtrlcuscode,ll_storageid,s_mtrlwareid_array_rst,arg_msg) = 0 Then
  1768. rslt = 0
  1769. Goto ext
  1770. End If
  1771. End If
  1772. If UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 Then
  1773. If uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 Then
  1774. rslt = 0
  1775. Goto ext
  1776. End If
  1777. End If
  1778. End If
  1779. End If
  1780. uo_assignid = ll_assignid
  1781. ext:
  1782. If rslt = 0 Then
  1783. Rollback Using commit_transaction;
  1784. ElseIf rslt = 1 And arg_ifcommit Then
  1785. Commit Using commit_transaction;
  1786. End If
  1787. Destroy ds_cmpl_pack_saletask
  1788. Destroy ds_orderrqmtrl_fp_2_zl
  1789. Destroy ds_orderrqmtrl_fp
  1790. Destroy uo_cmpl_p
  1791. Return rslt
  1792. end function
  1793. public function integer uof_plan_add (long arg_scid, long arg_mtrlwareid, integer arg_assigntype, long arg_relbillid, long arg_relprintid, decimal arg_planqty, string arg_dscrp, string arg_opemp, integer arg_plantype, integer arg_plankind, long arg_plankind_relbillid, long arg_plankind_relprintid, integer arg_fpgrade, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1794. Long ll_planid,ll_mtrlid,ll_cusid
  1795. String ls_relbillcode,ls_plankind_relbillcode
  1796. String ls_aps_plancode
  1797. Decimal ld_assignqty_all,ld_assignqty,ld_assignqty_plan,ld_assignqty_plan_mtrlware
  1798. String ls_status,ls_woodcode,ls_pcode,ls_mtrlcode
  1799. String ls_status_task,ls_woodcode_task,ls_pcode_task
  1800. Decimal ld_fpqty_not
  1801. Decimal ld_noallocqty
  1802. Decimal ld_Sonscale,ld_fpqty_buytask_update,ld_fpqty_buytask_plan,ld_buytask_qty
  1803. Int li_mtrldef_ifpackpro,li_mtrldef_ifpack,li_mtrldef_outtype
  1804. Long i,ll_i,ll_sonmtrlid
  1805. //aps_plancode
  1806. Long j
  1807. Decimal ld_fpplanqty,ld_planqty
  1808. String ls_Plankind_aps_plancode
  1809. datastore ds_pfpack
  1810. ds_pfpack = Create datastore
  1811. ds_pfpack.DataObject = 'ds_pf_pack'
  1812. ds_pfpack.SetTransObject(commit_transaction)
  1813. datastore ds_order_inplanmx
  1814. ds_order_inplanmx = Create datastore
  1815. ds_order_inplanmx.DataObject = 'ds_aps_order_plancode'
  1816. ds_order_inplanmx.SetTransObject(commit_transaction)
  1817. s_mtrlcfg_expr s_pz_buytask[]
  1818. IF IsNull(arg_scid) THEN arg_scid = 0
  1819. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  1820. IF IsNull(arg_assigntype) THEN arg_assigntype = 0
  1821. IF IsNull(arg_Relbillid) THEN arg_Relbillid = 0
  1822. IF IsNull(arg_relprintid) THEN arg_relprintid = 0
  1823. IF IsNull(arg_planqty) THEN arg_planqty = 0
  1824. IF IsNull(arg_Plantype) THEN arg_Plantype = 0
  1825. IF IsNull(arg_Plankind) THEN arg_Plankind = 0
  1826. IF IsNull(arg_Plankind_relbillid) THEN arg_Plankind_relbillid = 0
  1827. IF IsNull(arg_Plankind_relprintid) THEN arg_Plankind_relprintid = 0
  1828. IF IsNull(arg_opemp) THEN arg_opemp = ''
  1829. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  1830. IF arg_planqty <= 0 THEN
  1831. arg_msg = '错误的计划分配数量'
  1832. rslt = 0
  1833. GOTO ext
  1834. END IF
  1835. IF arg_Plantype = 0 THEN //库存分配
  1836. IF arg_mtrlwareid = 0 THEN
  1837. arg_msg = '非法的库存id'
  1838. rslt = 0
  1839. GOTO ext
  1840. END IF
  1841. SELECT u_mtrlware.mtrlid,
  1842. u_mtrlware.status,
  1843. u_mtrlware.woodcode,
  1844. u_mtrlware.pcode,
  1845. u_mtrldef.ifpack,
  1846. u_mtrldef.mtrlcode,
  1847. u_mtrlware.noallocqty - u_mtrlware.allocqty
  1848. INTO :ll_mtrlid,
  1849. :ls_status,
  1850. :ls_woodcode,
  1851. :ls_pcode,
  1852. :li_mtrldef_ifpack,
  1853. :ls_mtrlcode,
  1854. :ld_noallocqty
  1855. FROM u_mtrlware,u_mtrldef
  1856. WHERE u_mtrlware.mtrlid = u_mtrldef.mtrlid
  1857. AND u_mtrlware.scid = :arg_scid
  1858. And u_mtrlware.mtrlwareid = :arg_mtrlwareid Using commit_transaction;
  1859. IF commit_transaction.SQLCode <> 0 THEN
  1860. arg_msg = '查询库存物料资料失败,'+commit_transaction.SQLErrText
  1861. rslt = 0
  1862. GOTO ext
  1863. END IF
  1864. IF ll_mtrlid <> arg_mtrlid THEN
  1865. arg_msg = '传入分配计划物料id与库存对应物料id不相符,请检查'
  1866. rslt = 0
  1867. GOTO ext
  1868. END IF
  1869. arg_status = ls_status
  1870. arg_woodcode = ls_woodcode
  1871. arg_pcode = ls_pcode
  1872. IF ld_noallocqty < arg_planqty THEN
  1873. arg_msg = '库存未分配数不足,请检查'
  1874. rslt = 0
  1875. GOTO ext
  1876. END IF
  1877. IF arg_assigntype = 0 THEN //计划分配
  1878. IF arg_Relbillid = 0 THEN
  1879. arg_msg = '非法的生产计划id'
  1880. rslt = 0
  1881. GOTO ext
  1882. END IF
  1883. SELECT ordercode INTO :ls_relbillcode
  1884. FROM u_order_ml
  1885. WHERE scid = :arg_scid
  1886. And orderid = :arg_Relbillid Using commit_transaction;
  1887. IF commit_transaction.SQLCode <> 0 THEN
  1888. arg_msg = '查询计划资料失败,'+commit_transaction.SQLErrText
  1889. rslt = 0
  1890. GOTO ext
  1891. END IF
  1892. SELECT isnull(sum(u_OrderRqMtrl.RqQty),0),
  1893. isnull(sum(u_OrderRqMtrl.fpqty),0),
  1894. isnull(sum(u_OrderRqMtrl.fpplanqty),0)
  1895. INTO :ld_assignqty_all,
  1896. :ld_assignqty,
  1897. :ld_assignqty_plan
  1898. FROM u_OrderRqMtrl
  1899. WHERE u_OrderRqMtrl.scid = :arg_scid
  1900. AND u_OrderRqMtrl.orderid = :arg_relbillid
  1901. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  1902. AND u_OrderRqMtrl.status = :ls_status
  1903. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  1904. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  1905. IF commit_transaction.SQLCode <> 0 THEN
  1906. arg_msg = '查询物料计划领用需求总数及已库存分配数失败,'+commit_transaction.SQLErrText
  1907. rslt = 0
  1908. GOTO ext
  1909. END IF
  1910. IF ld_assignqty >= ld_assignqty_plan THEN
  1911. IF ld_assignqty_all < ld_assignqty + arg_planqty THEN
  1912. arg_msg = '计划需求数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',不能再库存分配:'+String(arg_planqty,'#,##0.##########')
  1913. rslt = 0
  1914. GOTO ext
  1915. END IF
  1916. ELSE
  1917. IF ld_assignqty_all < ld_assignqty_plan + arg_planqty THEN
  1918. arg_msg = '计划需求数:'+String(ld_assignqty_all,'#,##0.##########')+',已安排分配计划数:'+String(ld_assignqty_plan,'#,##0.##########')+',不能再库存分配:'+String(arg_planqty,'#,##0.##########')
  1919. rslt = 0
  1920. GOTO ext
  1921. END IF
  1922. END IF
  1923. //更新已分配数
  1924. UPDATE u_OrderRqMtrl
  1925. SET u_OrderRqMtrl.fpplanqty = u_OrderRqMtrl.fpplanqty + :arg_planqty
  1926. WHERE u_OrderRqMtrl.scid = :arg_scid
  1927. AND u_OrderRqMtrl.orderid = :arg_relbillid
  1928. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  1929. AND u_OrderRqMtrl.status = :ls_status
  1930. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  1931. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  1932. IF commit_transaction.SQLCode <> 0 THEN
  1933. arg_msg = '更新物料需求已安排分配计划数失败,'+commit_transaction.SQLErrText
  1934. rslt = 0
  1935. GOTO ext
  1936. END IF
  1937. ELSE //订单分配
  1938. IF arg_Relbillid = 0 THEN
  1939. arg_msg = '非法的销售订单id'
  1940. rslt = 0
  1941. GOTO ext
  1942. END IF
  1943. SELECT u_saletask.taskcode,
  1944. u_saletask.cusid,
  1945. u_saletaskmx.saleqty,
  1946. u_mtrldef.ifpackpro,
  1947. u_mtrldef.outtype,
  1948. u_saletaskmx.status,
  1949. u_saletaskmx.woodcode,
  1950. u_saletaskmx.pcode
  1951. INTO :ls_relbillcode,
  1952. :ll_cusid,
  1953. :ld_assignqty_all,
  1954. :li_mtrldef_ifpackpro,
  1955. :li_mtrldef_outtype,
  1956. :ls_status_task,
  1957. :ls_woodcode_task,
  1958. :ls_pcode_task
  1959. FROM u_saletask,u_saletaskmx,u_mtrldef
  1960. WHERE u_saletaskmx.mtrlid = u_mtrldef.mtrlid
  1961. AND u_saletask.scid = u_saletaskmx.scid
  1962. AND u_saletask.taskid = u_saletaskmx.taskid
  1963. AND u_saletaskmx.scid = :arg_scid
  1964. AND u_saletaskmx.taskid = :arg_relbillid
  1965. And u_saletaskmx.printid = :arg_relprintid Using commit_transaction;
  1966. IF commit_transaction.SQLCode <> 0 THEN
  1967. arg_msg = '查询订单资料失败,'+commit_transaction.SQLErrText
  1968. rslt = 0
  1969. GOTO ext
  1970. END IF
  1971. If (li_mtrldef_ifpackpro = 1 Or li_mtrldef_ifpackpro = 2) And li_mtrldef_ifpack = 0 THEN
  1972. arg_msg = '订单:'+ls_relbillcode+',明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配计划的订单为包件产品,但对应分配的库存不是包件,请检查资料'
  1973. rslt = 0
  1974. GOTO ext
  1975. ElseIf (li_mtrldef_ifpackpro = 1 Or li_mtrldef_ifpackpro = 2) And li_mtrldef_ifpack > 0 THEN
  1976. Long ll_saletaskmx_pf_ch
  1977. ll_saletaskmx_pf_ch = 0
  1978. IF li_mtrldef_ifpackpro = 1 THEN
  1979. ll_saletaskmx_pf_ch = 0
  1980. ELSE
  1981. SELECT count(*)
  1982. INTO :ll_saletaskmx_pf_ch
  1983. FROM u_SaleTaskMx_pf
  1984. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  1985. AND u_SaleTaskMx_pf.taskid = :arg_relbillid
  1986. And u_SaleTaskMx_pf.printid = :arg_relprintid Using commit_transaction;
  1987. IF commit_transaction.SQLCode <> 0 THEN
  1988. arg_msg = '订单:'+ls_relbillcode+',明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询是否有换包件失败,'+commit_transaction.SQLErrText
  1989. rslt = 0
  1990. GOTO ext
  1991. END IF
  1992. END IF
  1993. IF ll_saletaskmx_pf_ch > 0 THEN
  1994. SELECT u_SaleTaskMx_pf.Sonscale
  1995. INTO :ld_Sonscale
  1996. FROM u_SaleTaskMx_pf
  1997. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  1998. AND u_SaleTaskMx_pf.taskid = :arg_relbillid
  1999. AND u_SaleTaskMx_pf.printid = :arg_relprintid
  2000. And u_SaleTaskMx_pf.sonmtrlid = :ll_mtrlid Using commit_transaction;
  2001. IF commit_transaction.SQLCode = -1 THEN
  2002. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+commit_transaction.SQLErrText
  2003. rslt = 0
  2004. GOTO ext
  2005. ELSEIF commit_transaction.SQLCode = 100 THEN
  2006. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  2007. rslt = 0
  2008. GOTO ext
  2009. END IF
  2010. ELSE
  2011. SELECT u_prdpf.Sonscale
  2012. INTO :ld_Sonscale
  2013. FROM u_saletaskmx,u_mtrl_pf,u_prdpf,u_mtrldef
  2014. WHERE u_saletaskmx.mtrlid = u_mtrl_pf.mtrlid
  2015. AND u_saletaskmx.scid = :arg_scid
  2016. AND u_saletaskmx.taskid = :arg_relbillid
  2017. AND u_saletaskmx.printid = :arg_relprintid
  2018. AND u_mtrl_pf.mtrlid = u_prdpf.mtrlid
  2019. AND u_mtrl_pf.pfcode = u_prdpf.pfcode
  2020. AND ( u_mtrl_pf.ifdi = 0 AND u_mtrl_pf.ifdft = 1 )
  2021. AND u_PrdPF.SonMtrlid = :ll_mtrlid
  2022. AND u_prdpf.sonmtrlid = u_mtrldef.mtrlid
  2023. And u_mtrldef.ifpack > 0 Using commit_transaction;
  2024. IF commit_transaction.SQLCode = -1 THEN
  2025. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询当前库存分配的订单包件产品物料清单是否包含有对应分配的库存包件失败,请检查清单资料,'+commit_transaction.SQLErrText
  2026. rslt = 0
  2027. GOTO ext
  2028. ELSEIF commit_transaction.SQLCode = 100 THEN
  2029. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',当前库存分配的订单包件产品物料清单不包含有对应分配的库存包件,请检查清单资料'
  2030. rslt = 0
  2031. GOTO ext
  2032. END IF
  2033. END IF
  2034. IF ld_Sonscale = 0 THEN
  2035. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',错误的包件组成数,请检查清单资料'
  2036. rslt = 0
  2037. GOTO ext
  2038. END IF
  2039. ld_assignqty_all = ld_assignqty_all * ld_Sonscale
  2040. SELECT isnull(sum(assignqty),0)
  2041. INTO :ld_assignqty
  2042. FROM u_mtrlware_assign
  2043. WHERE u_mtrlware_assign.scid = :arg_scid
  2044. AND u_mtrlware_assign.relbillid = :arg_relbillid
  2045. AND u_mtrlware_assign.relprintid = :arg_relprintid
  2046. AND u_mtrlware_assign.mtrlid = :ll_mtrlid
  2047. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  2048. IF commit_transaction.SQLCode <> 0 THEN
  2049. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',查询订单包件已分配数失败,'+commit_transaction.SQLErrText
  2050. rslt = 0
  2051. GOTO ext
  2052. END IF
  2053. SELECT isnull(sum(planassignqty),0)
  2054. INTO :ld_assignqty_plan_mtrlware
  2055. FROM u_mtrlware_assign_plan
  2056. WHERE u_mtrlware_assign_plan.scid = :arg_scid
  2057. AND u_mtrlware_assign_plan.relbillid = :arg_relbillid
  2058. AND u_mtrlware_assign_plan.relprintid = :arg_relprintid
  2059. AND u_mtrlware_assign_plan.assigntype = 1
  2060. And u_mtrlware_assign_plan.mtrlid = :ll_mtrlid Using commit_transaction;
  2061. IF commit_transaction.SQLCode <> 0 THEN
  2062. arg_msg = '查询订单已分配计划数失败,'+commit_transaction.SQLErrText
  2063. rslt = 0
  2064. GOTO ext
  2065. END IF
  2066. IF ld_assignqty_all < ld_assignqty + arg_planqty + ld_assignqty_plan_mtrlware THEN
  2067. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',已分配计划数:'+String(ld_assignqty_plan_mtrlware,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2068. rslt = 0
  2069. GOTO ext
  2070. END IF
  2071. ELSEIF li_mtrldef_ifpackpro = 3 Or li_mtrldef_ifpackpro = 4 THEN //组合配置包件产品
  2072. s_mtrlcfg_expr s_pz[]
  2073. Long ll_array,ll_l
  2074. f_checkpz(ls_status_task,s_pz[])
  2075. ll_array = UpperBound(s_pz)
  2076. IF ll_array = 0 THEN
  2077. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(arg_relprintid)+',拆分子件错误,请检查组合配置'
  2078. rslt = 0
  2079. GOTO ext
  2080. END IF
  2081. FOR ll_l = 1 To ll_array
  2082. IF s_pz[ll_l].cfgname = ls_status THEN
  2083. ld_Sonscale = Dec(s_pz[ll_l].qty)
  2084. EXIT
  2085. END IF
  2086. NEXT
  2087. IF ld_Sonscale = 0 THEN
  2088. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',错误的包件组成数,请检查清单资料'
  2089. rslt = 0
  2090. GOTO ext
  2091. END IF
  2092. ld_assignqty_all = ld_assignqty_all * ld_Sonscale
  2093. SELECT isnull(sum(assignqty),0) INTO :ld_assignqty
  2094. FROM u_mtrlware_assign,u_mtrlware
  2095. WHERE u_mtrlware_assign.scid = u_mtrlware.scid
  2096. AND u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid
  2097. AND u_mtrlware_assign.scid = :arg_scid
  2098. AND u_mtrlware_assign.relbillid = :arg_relbillid
  2099. AND u_mtrlware_assign.relprintid = :arg_relprintid
  2100. AND u_mtrlware_assign.mtrlid = :ll_mtrlid
  2101. AND u_mtrlware_assign.assigntype = 1
  2102. AND u_mtrlware.status = :ls_status
  2103. AND u_mtrlware.woodcode = :ls_woodcode
  2104. And u_mtrlware.pcode = :ls_pcode Using commit_transaction;
  2105. IF commit_transaction.SQLCode <> 0 THEN
  2106. arg_msg = '订单:'+ls_relbillcode+',明细行:'+String(arg_relprintid)+',查询订单包件已分配数失败,'+commit_transaction.SQLErrText
  2107. rslt = 0
  2108. GOTO ext
  2109. END IF
  2110. SELECT isnull(sum(planassignqty),0)
  2111. INTO :ld_assignqty_plan_mtrlware
  2112. FROM u_mtrlware_assign_plan
  2113. WHERE u_mtrlware_assign_plan.scid = :arg_scid
  2114. AND u_mtrlware_assign_plan.relbillid = :arg_relbillid
  2115. AND u_mtrlware_assign_plan.relprintid = :arg_relprintid
  2116. AND u_mtrlware_assign_plan.assigntype = 1
  2117. And u_mtrlware_assign_plan.mtrlid = :ll_mtrlid Using commit_transaction;
  2118. IF commit_transaction.SQLCode <> 0 THEN
  2119. arg_msg = '查询订单已分配计划数失败,'+commit_transaction.SQLErrText
  2120. rslt = 0
  2121. GOTO ext
  2122. END IF
  2123. IF ld_assignqty_all < ld_assignqty + arg_planqty + ld_assignqty_plan_mtrlware THEN
  2124. arg_msg = '订单:'+ls_relbillcode+',包件明细物料:'+ls_mtrlcode+',明细行:'+String(arg_relprintid)+',订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',已分配计划数:'+String(ld_assignqty_plan_mtrlware,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2125. rslt = 0
  2126. GOTO ext
  2127. END IF
  2128. ELSE //非包件产品
  2129. SELECT isnull(sum(assignqty),0) INTO :ld_assignqty
  2130. FROM u_mtrlware_assign
  2131. WHERE u_mtrlware_assign.scid = :arg_scid
  2132. AND u_mtrlware_assign.relbillid = :arg_relbillid
  2133. AND u_mtrlware_assign.relprintid = :arg_relprintid
  2134. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  2135. IF commit_transaction.SQLCode <> 0 THEN
  2136. arg_msg = '查询订单已分配数失败,'+commit_transaction.SQLErrText
  2137. rslt = 0
  2138. GOTO ext
  2139. END IF
  2140. SELECT isnull(sum(planassignqty),0) INTO :ld_assignqty_plan_mtrlware
  2141. FROM u_mtrlware_assign_plan
  2142. WHERE u_mtrlware_assign_plan.scid = :arg_scid
  2143. AND u_mtrlware_assign_plan.relbillid = :arg_relbillid
  2144. AND u_mtrlware_assign_plan.relprintid = :arg_relprintid
  2145. And u_mtrlware_assign_plan.assigntype = 1 Using commit_transaction;
  2146. IF commit_transaction.SQLCode <> 0 THEN
  2147. arg_msg = '查询订单已分配计划数失败,'+commit_transaction.SQLErrText
  2148. rslt = 0
  2149. GOTO ext
  2150. END IF
  2151. IF ld_assignqty_all < ld_assignqty + arg_planqty + ld_assignqty_plan_mtrlware THEN
  2152. arg_msg = '订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已分配数:'+String(ld_assignqty,'#,##0.##########')+',已分配计划数:'+String(ld_assignqty_plan_mtrlware,'#,##0.##########')+',不能再库存分配:'+String(arg_planqty,'#,##0.##########')
  2153. rslt = 0
  2154. GOTO ext
  2155. END IF
  2156. END IF
  2157. END IF
  2158. ELSE //计划分配
  2159. IF arg_Plankind = 0 THEN
  2160. rslt = 0
  2161. arg_msg = '错误的分配计划类型,请检查(0-无,1-指令单分配,2-采购订单分配,3-外协订单分配)'
  2162. GOTO ext
  2163. END IF
  2164. //检查分计划来源
  2165. CHOOSE CASE arg_Plankind
  2166. CASE 1
  2167. SELECT u_order_ml.ordercode,
  2168. u_order_ml.orderqty - u_order_ml.fpqty,
  2169. u_order_ml.mtrlid,
  2170. u_order_ml.status_mode,
  2171. u_order_ml.woodcode,
  2172. u_order_ml.pcode
  2173. INTO :ls_plankind_relbillcode,:ld_fpqty_not,
  2174. :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode
  2175. FROM u_order_ml
  2176. WHERE u_order_ml.scid = :arg_scid
  2177. And u_order_ml.orderid = :arg_Plankind_relbillid Using commit_transaction;
  2178. IF commit_transaction.SQLCode <> 0 THEN
  2179. arg_msg = '查询分配计划所属指令单资料失败,'+commit_transaction.SQLErrText
  2180. rslt = 0
  2181. GOTO ext
  2182. END IF
  2183. IF ll_mtrlid <> arg_mtrlid THEN
  2184. arg_msg = '传入分配计划物料id与指令对应物料id不相符,请检查'
  2185. rslt = 0
  2186. GOTO ext
  2187. END IF
  2188. arg_status = ls_status
  2189. arg_woodcode = ls_woodcode
  2190. arg_pcode = ls_pcode
  2191. IF arg_planqty > ld_fpqty_not THEN
  2192. arg_msg = '指令单:'+ls_plankind_relbillcode+'分配计划未占用数只有:'+String(ld_fpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2193. rslt = 0
  2194. GOTO ext
  2195. END IF
  2196. UPDATE u_order_ml
  2197. SET u_order_ml.fpqty = u_order_ml.fpqty + :arg_planqty
  2198. WHERE u_order_ml.scid = :arg_scid
  2199. And u_order_ml.orderid = :arg_Plankind_relbillid Using commit_transaction;
  2200. IF commit_transaction.SQLCode <> 0 THEN
  2201. arg_msg = '更新指令单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2202. rslt = 0
  2203. GOTO ext
  2204. END IF
  2205. CASE 2
  2206. SELECT u_buytask.taskcode,
  2207. u_buytaskmx.qty - u_buytaskmx.fpqty,
  2208. u_buytaskmx.qty,
  2209. u_buytaskmx.mtrlid,
  2210. u_buytaskmx.status,
  2211. u_buytaskmx.woodcode,
  2212. u_buytaskmx.pcode,
  2213. u_mtrldef.outtype,
  2214. u_mtrldef.ifpackpro
  2215. INTO :ls_plankind_relbillcode,
  2216. :ld_fpqty_not,
  2217. :ld_buytask_qty,
  2218. :ll_mtrlid,
  2219. :ls_status,
  2220. :ls_woodcode,
  2221. :ls_pcode,
  2222. :li_mtrldef_outtype,
  2223. :li_mtrldef_ifpackpro
  2224. FROM u_buytask,u_buytaskmx,u_mtrldef
  2225. WHERE u_buytask.scid = u_buytaskmx.scid
  2226. AND u_buytask.taskid = u_buytaskmx.taskid
  2227. AND u_mtrldef.mtrlid = u_buytaskmx.mtrlid
  2228. AND u_buytaskmx.scid = :arg_scid
  2229. AND u_buytaskmx.taskid = :arg_Plankind_relbillid
  2230. And u_buytaskmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2231. IF commit_transaction.SQLCode <> 0 THEN
  2232. arg_msg = '查询分配计划所属采购订单资料失败,'+commit_transaction.SQLErrText
  2233. rslt = 0
  2234. GOTO ext
  2235. END IF
  2236. IF li_mtrldef_outtype = 0 THEN
  2237. IF ll_mtrlid <> arg_mtrlid THEN
  2238. arg_msg = '传入分配计划物料id与采购订单对应物料id不相符,请检查'
  2239. rslt = 0
  2240. GOTO ext
  2241. END IF
  2242. IF arg_planqty > ld_fpqty_not THEN
  2243. arg_msg = '采购订单:'+ls_plankind_relbillcode+'分配计划未占用数只有:'+String(ld_fpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2244. rslt = 0
  2245. GOTO ext
  2246. END IF
  2247. UPDATE u_buytaskmx
  2248. SET u_buytaskmx.fpqty = u_buytaskmx.fpqty + :arg_planqty
  2249. WHERE u_buytaskmx.scid = :arg_scid
  2250. AND u_buytaskmx.taskid = :arg_Plankind_relbillid
  2251. And u_buytaskmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2252. IF commit_transaction.SQLCode <> 0 THEN
  2253. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2254. rslt = 0
  2255. GOTO ext
  2256. END IF
  2257. ELSE
  2258. CHOOSE CASE li_mtrldef_ifpackpro
  2259. CASE 0
  2260. IF ll_mtrlid <> arg_mtrlid THEN
  2261. arg_msg = '传入分配计划物料id与采购订单对应物料id不相符,请检查'
  2262. rslt = 0
  2263. GOTO ext
  2264. END IF
  2265. IF arg_planqty > ld_fpqty_not THEN
  2266. arg_msg = '采购订单:'+ls_plankind_relbillcode+'分配计划未占用数只有:'+String(ld_fpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2267. rslt = 0
  2268. GOTO ext
  2269. END IF
  2270. UPDATE u_buytaskmx
  2271. SET u_buytaskmx.fpqty = u_buytaskmx.fpqty + :arg_planqty
  2272. WHERE u_buytaskmx.scid = :arg_scid
  2273. AND u_buytaskmx.taskid = :arg_Plankind_relbillid
  2274. And u_buytaskmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2275. IF commit_transaction.SQLCode <> 0 THEN
  2276. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2277. rslt = 0
  2278. GOTO ext
  2279. END IF
  2280. CASE 1,2
  2281. ds_pfpack.Retrieve(ll_mtrlid)
  2282. IF ds_pfpack.RowCount() = 0 THEN
  2283. arg_msg = '采购订单:'+ls_plankind_relbillcode+",物料清单找不到包件明细,请检查"
  2284. rslt = 0
  2285. GOTO ext
  2286. END IF
  2287. ld_fpqty_buytask_update = 0
  2288. FOR ll_i = 1 To ds_pfpack.RowCount()
  2289. ld_fpqty_buytask_plan = 0
  2290. ll_sonmtrlid = ds_pfpack.Object.u_prdpf_sonmtrlid[ll_i]
  2291. SELECT isnull(sum(u_mtrlware_assign_plan.planassingqty),0)
  2292. INTO :ld_fpqty_buytask_plan
  2293. FROM u_mtrlware_assign_plan
  2294. WHERE u_mtrlware_assign_plan.scid = :arg_scid
  2295. AND u_mtrlware_assign_plan.assigntype = :arg_assigntype
  2296. AND u_mtrlware_assign_plan.plantype = :arg_plantype
  2297. AND u_mtrlware_assign_plan.plankind = :arg_plankind
  2298. AND u_mtrlware_assign_plan.plankind_relbillid = :arg_plankind_relbillid
  2299. AND u_mtrlware_assign_plan.plankind_relprintid = :arg_plankind_relprintid
  2300. And u_mtrlware_assign_plan.mtrlid = :ll_sonmtrlid Using commit_transaction;
  2301. IF commit_transaction.SQLCode <> 0 THEN
  2302. arg_msg = '采购订单:'+ls_plankind_relbillcode+",包件明细查询已安排分配计划数失败,"+commit_transaction.SQLErrText
  2303. rslt = 0
  2304. GOTO ext
  2305. END IF
  2306. IF ll_sonmtrlid = arg_mtrlid THEN
  2307. ld_fpqty_buytask_plan += arg_planqty
  2308. END IF
  2309. ld_fpqty_buytask_update = Max(ld_fpqty_buytask_update,ld_fpqty_buytask_plan/ds_pfpack.Object.u_prdpf_sonscale[ll_i])
  2310. NEXT
  2311. IF ld_fpqty_buytask_update > ld_buytask_qty THEN
  2312. arg_msg = '采购订单:'+ls_plankind_relbillcode+'数量只有:'+String(ld_buytask_qty,'#,##0.##########')+',不能分配:'+String(ld_fpqty_buytask_update,'#,##0.##########')
  2313. rslt = 0
  2314. GOTO ext
  2315. END IF
  2316. UPDATE u_buytaskmx
  2317. SET u_buytaskmx.fpqty = ld_fpqty_buytask_update
  2318. WHERE u_buytaskmx.scid = :arg_scid
  2319. AND u_buytaskmx.taskid = :arg_Plankind_relbillid
  2320. And u_buytaskmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2321. IF commit_transaction.SQLCode <> 0 THEN
  2322. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2323. rslt = 0
  2324. GOTO ext
  2325. END IF
  2326. CASE 3,4
  2327. f_checkpz(ls_status,s_pz_buytask[])
  2328. IF UpperBound(s_pz) = 0 THEN
  2329. arg_msg = '采购订单:'+ls_plankind_relbillcode+',拆分子件错误,请检查组合配置'
  2330. rslt = 0
  2331. GOTO ext
  2332. END IF
  2333. ld_fpqty_buytask_update = 0
  2334. FOR ll_i = 1 To UpperBound(s_pz_buytask)
  2335. ld_fpqty_buytask_plan = 0
  2336. SELECT isnull(sum(u_mtrlware_assign_plan.planassingqty),0)
  2337. INTO :ld_fpqty_buytask_plan
  2338. FROM u_mtrlware_assign_plan
  2339. WHERE u_mtrlware_assign_plan.scid = :arg_scid
  2340. AND u_mtrlware_assign_plan.assigntype = :arg_assigntype
  2341. AND u_mtrlware_assign_plan.plantype = :arg_plantype
  2342. AND u_mtrlware_assign_plan.plankind = :arg_plankind
  2343. AND u_mtrlware_assign_plan.plankind_relbillid = :arg_plankind_relbillid
  2344. AND u_mtrlware_assign_plan.plankind_relprintid = :arg_plankind_relprintid
  2345. AND u_mtrlware_assign_plan.mtrlid = :arg_mtrlid
  2346. And u_mtrlware_assign_plan.status = :s_pz_buytask[ll_i].cfgname Using commit_transaction;
  2347. IF commit_transaction.SQLCode <> 0 THEN
  2348. arg_msg = '采购订单:'+ls_plankind_relbillcode+",子件明细查询已安排分配计划数失败,"+commit_transaction.SQLErrText
  2349. rslt = 0
  2350. GOTO ext
  2351. END IF
  2352. IF arg_status = s_pz_buytask[ll_i].cfgname THEN
  2353. ld_fpqty_buytask_plan += arg_planqty
  2354. END IF
  2355. ld_fpqty_buytask_update = Max(ld_fpqty_buytask_update,ld_fpqty_buytask_plan/Dec(s_pz_buytask[ll_i].qty))
  2356. NEXT
  2357. IF ld_fpqty_buytask_update > ld_buytask_qty THEN
  2358. arg_msg = '采购订单:'+ls_plankind_relbillcode+'数量只有:'+String(ld_buytask_qty,'#,##0.##########')+',不能分配:'+String(ld_fpqty_buytask_update,'#,##0.##########')
  2359. rslt = 0
  2360. GOTO ext
  2361. END IF
  2362. UPDATE u_buytaskmx
  2363. SET u_buytaskmx.fpqty = ld_fpqty_buytask_update
  2364. WHERE u_buytaskmx.scid = :arg_scid
  2365. AND u_buytaskmx.taskid = :arg_Plankind_relbillid
  2366. And u_buytaskmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2367. IF commit_transaction.SQLCode <> 0 THEN
  2368. arg_msg = '更新采购订单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2369. rslt = 0
  2370. GOTO ext
  2371. END IF
  2372. END CHOOSE
  2373. END IF
  2374. CASE 3
  2375. SELECT u_order_wfjg.taskcode,
  2376. u_order_wfjgmx.qty - u_order_wfjgmx.fpqty,
  2377. u_order_wfjgmx.mtrlid,
  2378. u_order_wfjgmx.status,
  2379. u_order_wfjgmx.woodcode,
  2380. u_order_wfjgmx.pcode
  2381. INTO :ls_plankind_relbillcode,
  2382. :ld_fpqty_not,
  2383. :ll_mtrlid,
  2384. :ls_status,
  2385. :ls_woodcode,
  2386. :ls_pcode
  2387. FROM u_order_wfjg,u_order_wfjgmx
  2388. WHERE u_order_wfjg.scid = u_order_wfjgmx.scid
  2389. AND u_order_wfjg.wfjgid = u_order_wfjgmx.wfjgid
  2390. AND u_order_wfjgmx.scid = :arg_scid
  2391. AND u_order_wfjgmx.wfjgid = :arg_Plankind_relbillid
  2392. And u_order_wfjgmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2393. IF commit_transaction.SQLCode <> 0 THEN
  2394. arg_msg = '查询分配计划所属外协订单资料失败,'+commit_transaction.SQLErrText
  2395. rslt = 0
  2396. GOTO ext
  2397. END IF
  2398. IF ll_mtrlid <> arg_mtrlid THEN
  2399. arg_msg = '传入分配计划物料id与外协订单对应物料id不相符,请检查'
  2400. rslt = 0
  2401. GOTO ext
  2402. END IF
  2403. arg_status = ls_status
  2404. arg_woodcode = ls_woodcode
  2405. arg_pcode = ls_pcode
  2406. IF arg_planqty > ld_fpqty_not THEN
  2407. arg_msg = '外协订单:'+ls_plankind_relbillcode+'分配计划未占用数只有:'+String(ld_fpqty_not,'#,##0.##########')+',不能再分配:'+String(arg_planqty,'#,##0.##########')
  2408. rslt = 0
  2409. GOTO ext
  2410. END IF
  2411. UPDATE u_order_wfjgmx
  2412. SET u_order_wfjgmx.fpqty = u_order_wfjgmx.fpqty + :arg_planqty
  2413. WHERE u_order_wfjgmx.scid = :arg_scid
  2414. AND u_order_wfjgmx.wfjgid = :arg_Plankind_relbillid
  2415. And u_order_wfjgmx.printid = :arg_Plankind_relprintid Using commit_transaction;
  2416. IF commit_transaction.SQLCode <> 0 THEN
  2417. arg_msg = '更新外协订单:'+ls_plankind_relbillcode+'分配计划占用数失败,'+commit_transaction.SQLErrText
  2418. rslt = 0
  2419. GOTO ext
  2420. END IF
  2421. END CHOOSE
  2422. //检查是否超已分配数
  2423. IF arg_assigntype = 0 THEN
  2424. IF arg_Relbillid = 0 THEN
  2425. arg_msg = '非法的生产计划id'
  2426. rslt = 0
  2427. GOTO ext
  2428. END IF
  2429. SELECT ordercode INTO :ls_relbillcode
  2430. FROM u_order_ml
  2431. WHERE scid = :arg_scid
  2432. And orderid = :arg_Relbillid Using commit_transaction;
  2433. IF commit_transaction.SQLCode <> 0 THEN
  2434. arg_msg = '查询计划资料失败,'+commit_transaction.SQLErrText
  2435. rslt = 0
  2436. GOTO ext
  2437. END IF
  2438. SELECT isnull(sum(u_OrderRqMtrl.RqQty),0),
  2439. isnull(sum(u_OrderRqMtrl.fpqty),0),
  2440. isnull(sum(u_OrderRqMtrl.fpplanqty),0)
  2441. INTO :ld_assignqty_all,
  2442. :ld_assignqty,
  2443. :ld_assignqty_plan
  2444. FROM u_OrderRqMtrl
  2445. WHERE u_OrderRqMtrl.scid = :arg_scid
  2446. AND u_OrderRqMtrl.orderid = :arg_relbillid
  2447. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  2448. AND u_OrderRqMtrl.status = :ls_status
  2449. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  2450. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  2451. IF commit_transaction.SQLCode <> 0 THEN
  2452. arg_msg = '查询物料计划领用需求总数及已安排分配计划数失败,'+commit_transaction.SQLErrText
  2453. rslt = 0
  2454. GOTO ext
  2455. END IF
  2456. IF ld_assignqty >= ld_assignqty_plan THEN
  2457. IF ld_assignqty_all < ld_assignqty + arg_planqty THEN
  2458. arg_msg = '计划需求数:'+String(ld_assignqty_all,'#,##0.##########')+',已库存分配数:'+String(ld_assignqty,'#,##0.##########')+',不能再计划分配:'+String(arg_planqty,'#,##0.##########')
  2459. rslt = 0
  2460. GOTO ext
  2461. END IF
  2462. ELSE
  2463. IF ld_assignqty_all < ld_assignqty_plan + arg_planqty THEN
  2464. arg_msg = '计划需求数:'+String(ld_assignqty_all,'#,##0.##########')+',已安排分配计划数:'+String(ld_assignqty_plan,'#,##0.##########')+',不能再计划分配:'+String(arg_planqty,'#,##0.##########')
  2465. rslt = 0
  2466. GOTO ext
  2467. END IF
  2468. END IF
  2469. //更新已分配数
  2470. UPDATE u_OrderRqMtrl
  2471. SET u_OrderRqMtrl.fpplanqty = u_OrderRqMtrl.fpplanqty + :arg_planqty
  2472. WHERE u_OrderRqMtrl.scid = :arg_scid
  2473. AND u_OrderRqMtrl.orderid = :arg_relbillid
  2474. AND u_OrderRqMtrl.mtrlid = :ll_mtrlid
  2475. AND u_OrderRqMtrl.status = :ls_status
  2476. AND u_OrderRqMtrl.woodcode = :ls_woodcode
  2477. And u_OrderRqMtrl.pcode = :ls_pcode Using commit_transaction;
  2478. IF commit_transaction.SQLCode <> 0 THEN
  2479. arg_msg = '更新物料需求已安排分配计划数失败,'+commit_transaction.SQLErrText
  2480. rslt = 0
  2481. GOTO ext
  2482. END IF
  2483. ELSE
  2484. IF arg_Relbillid = 0 THEN
  2485. arg_msg = '非法的销售订单id'
  2486. rslt = 0
  2487. GOTO ext
  2488. END IF
  2489. SELECT u_saletask.taskcode,
  2490. u_saletask.cusid,
  2491. u_saletaskmx.saleqty
  2492. INTO :ls_relbillcode,
  2493. :ll_cusid,
  2494. :ld_assignqty_all
  2495. FROM u_saletask,u_saletaskmx
  2496. WHERE u_saletask.scid = u_saletaskmx.scid
  2497. AND u_saletask.taskid = u_saletaskmx.taskid
  2498. AND u_saletaskmx.scid = :arg_scid
  2499. AND u_saletaskmx.taskid = :arg_relbillid
  2500. And u_saletaskmx.printid = :arg_relprintid Using commit_transaction;
  2501. IF commit_transaction.SQLCode <> 0 THEN
  2502. arg_msg = '查询订单资料失败,'+commit_transaction.SQLErrText
  2503. rslt = 0
  2504. GOTO ext
  2505. END IF
  2506. SELECT isnull(sum(assignqty),0) INTO :ld_assignqty_plan
  2507. FROM u_mtrlware_assign
  2508. WHERE u_mtrlware_assign.scid = :arg_scid
  2509. AND u_mtrlware_assign.relbillid = :arg_relbillid
  2510. AND u_mtrlware_assign.relprintid = :arg_relprintid
  2511. AND u_mtrlware_assign.assigntype = 1
  2512. And u_mtrlware_assign.plantype = 1 Using commit_transaction;
  2513. IF commit_transaction.SQLCode <> 0 THEN
  2514. arg_msg = '查询订单已安排分配计划数失败,'+commit_transaction.SQLErrText
  2515. rslt = 0
  2516. GOTO ext
  2517. END IF
  2518. IF ld_assignqty_all < ld_assignqty_plan + arg_planqty THEN
  2519. arg_msg = '订单订货数:'+String(ld_assignqty_all,'#,##0.##########')+',已安排分配计划数:'+String(ld_assignqty_plan,'#,##0.##########')+',不能再计划分配:'+String(arg_planqty,'#,##0.##########')
  2520. rslt = 0
  2521. GOTO ext
  2522. END IF
  2523. END IF
  2524. END IF
  2525. IF arg_Plantype = 1 And arg_Plankind = 1 THEN
  2526. ds_order_inplanmx.Retrieve(arg_scid,arg_Plankind_relbillid)
  2527. ld_planqty = arg_planqty
  2528. IF ds_order_inplanmx.RowCount() = 0 THEN
  2529. arg_msg = '指令单没有排程批次,请检查'
  2530. rslt = 0
  2531. GOTO ext
  2532. END IF
  2533. FOR j = 1 To ds_order_inplanmx.RowCount()
  2534. IF ld_planqty = 0 THEN EXIT
  2535. IF ld_planqty > ds_order_inplanmx.Object.notfpplanqty[j] THEN
  2536. ld_fpplanqty = ds_order_inplanmx.Object.notfpplanqty[j]
  2537. ld_planqty = ld_planqty - ds_order_inplanmx.Object.notfpplanqty[j]
  2538. ELSE
  2539. ld_fpplanqty = ld_planqty
  2540. ld_planqty = 0
  2541. END IF
  2542. ls_Plankind_aps_plancode = ds_order_inplanmx.Object.aps_plancode[j]
  2543. ll_planid = f_sys_scidentity(0,"u_mtrlware_assign_plan","planid",arg_msg,True,id_sqlca)
  2544. IF ll_planid <= 0 THEN
  2545. rslt = 0
  2546. GOTO ext
  2547. END IF
  2548. INSERT INTO u_mtrlware_assign_plan
  2549. (planid,
  2550. assigntype,
  2551. scid,
  2552. mtrlwareid,
  2553. Relbillid,
  2554. relprintid,
  2555. relbillcode,
  2556. planassignqty,
  2557. cusid,
  2558. dscrp,
  2559. opdate,
  2560. opemp,
  2561. plantype,
  2562. plankind,
  2563. plankind_relbillid,
  2564. plankind_relprintid,
  2565. fpgrade,
  2566. mtrlid,
  2567. status,
  2568. woodcode,
  2569. pcode,
  2570. Plankind_aps_plancode)
  2571. VALUES
  2572. (:ll_planid,
  2573. :arg_assigntype,
  2574. :arg_scid,
  2575. :arg_mtrlwareid,
  2576. :arg_Relbillid,
  2577. :arg_relprintid,
  2578. :ls_relbillcode,
  2579. :ld_fpplanqty,
  2580. :ll_cusid,
  2581. :arg_dscrp,
  2582. getdate(),
  2583. :arg_opemp,
  2584. :arg_plantype,
  2585. :arg_plankind,
  2586. :arg_plankind_relbillid,
  2587. :arg_Plankind_relprintid,
  2588. :arg_fpgrade,
  2589. :arg_mtrlid,
  2590. :arg_status,
  2591. :arg_woodcode,
  2592. :arg_pcode,
  2593. :ls_Plankind_aps_plancode) Using commit_transaction;
  2594. IF commit_transaction.SQLCode <> 0 THEN
  2595. arg_msg = '指令单建立分配计划失败(按排程批),'+commit_transaction.SQLErrText
  2596. rslt = 0
  2597. GOTO ext
  2598. END IF
  2599. UPDATE u_order_zl_planmx
  2600. SET u_order_zl_planmx.fpplanqty = u_order_zl_planmx.fpplanqty + :ld_fpplanqty
  2601. WHERE u_order_zl_planmx.scid = :arg_scid
  2602. AND u_order_zl_planmx.orderid = :arg_Plankind_relbillid
  2603. And u_order_zl_planmx.aps_plancode = :ls_Plankind_aps_plancode Using commit_transaction;
  2604. IF commit_transaction.SQLCode <> 0 THEN
  2605. arg_msg = '更新指令单:'+ls_plankind_relbillcode+',排程批:'+ls_Plankind_aps_plancode+',分配计划占用数失败,'+commit_transaction.SQLErrText
  2606. rslt = 0
  2607. GOTO ext
  2608. END IF
  2609. NEXT
  2610. IF ld_planqty > 0 THEN
  2611. arg_msg = '排程批有余数,不能建立分配计划,请检查'
  2612. rslt = 0
  2613. GOTO ext
  2614. END IF
  2615. ELSE
  2616. ll_planid = f_sys_scidentity(0,"u_mtrlware_assign_plan","planid",arg_msg,True,id_sqlca)
  2617. IF ll_planid <= 0 THEN
  2618. rslt = 0
  2619. GOTO ext
  2620. END IF
  2621. INSERT INTO u_mtrlware_assign_plan
  2622. (planid,
  2623. assigntype,
  2624. scid,
  2625. mtrlwareid,
  2626. Relbillid,
  2627. relprintid,
  2628. relbillcode,
  2629. planassignqty,
  2630. cusid,
  2631. dscrp,
  2632. opdate,
  2633. opemp,
  2634. plantype,
  2635. plankind,
  2636. plankind_relbillid,
  2637. plankind_relprintid,
  2638. fpgrade,
  2639. mtrlid,
  2640. status,
  2641. woodcode,
  2642. pcode,
  2643. Plankind_aps_plancode)
  2644. VALUES
  2645. (:ll_planid,
  2646. :arg_assigntype,
  2647. :arg_scid,
  2648. :arg_mtrlwareid,
  2649. :arg_Relbillid,
  2650. :arg_relprintid,
  2651. :ls_relbillcode,
  2652. :arg_planqty,
  2653. :ll_cusid,
  2654. :arg_dscrp,
  2655. getdate(),
  2656. :arg_opemp,
  2657. :arg_plantype,
  2658. :arg_plankind,
  2659. :arg_plankind_relbillid,
  2660. :arg_Plankind_relprintid,
  2661. :arg_fpgrade,
  2662. :arg_mtrlid,
  2663. :arg_status,
  2664. :arg_woodcode,
  2665. :arg_pcode,
  2666. '') Using commit_transaction;
  2667. IF commit_transaction.SQLCode <> 0 THEN
  2668. arg_msg = '建立分配计划失败,'+commit_transaction.SQLErrText
  2669. rslt = 0
  2670. GOTO ext
  2671. END IF
  2672. END IF
  2673. ext:
  2674. IF rslt = 0 THEN
  2675. ROLLBACK Using commit_transaction;
  2676. ELSEIF rslt = 1 And arg_ifcommit THEN
  2677. COMMIT Using commit_transaction;
  2678. END IF
  2679. Destroy ds_pfpack
  2680. Destroy ds_order_inplanmx
  2681. RETURN rslt
  2682. end function
  2683. public function integer uof_assign_add_to_zl_scll (long arg_scid, long arg_orderid, long arg_mtrlid, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_fpqty, long arg_from_p_orderid, integer arg_from_plantype, integer arg_from_produce_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2684. Decimal ld_fpqty,ld_trueRqqty,ld_notfpqty
  2685. String ls_mtrlcode,ls_ordercode
  2686. Long ll_orderid_p,i
  2687. Long ll_ifenouth
  2688. Decimal ld_notfpqty_zl,ld_notfpqty_zl_update,ld_notfpqty_zl_check
  2689. datastore ds_update_orderrqmtrl_fp
  2690. ds_update_orderrqmtrl_fp = Create datastore
  2691. SELECT mtrlcode INTO :ls_mtrlcode
  2692. From u_mtrldef Where mtrlid = :arg_mtrlid using commit_transaction;
  2693. IF commit_transaction.SQLCode <> 0 THEN
  2694. arg_msg = '查询指令单领料明细物料编码失败,id:'+String(arg_mtrlid)+','+commit_transaction.SQLErrText
  2695. rslt = 0
  2696. GOTO ext
  2697. END IF
  2698. SELECT ordercode,porderid INTO :ls_ordercode,:ll_orderid_p
  2699. From u_order_ml Where orderid = :arg_orderid using commit_transaction;
  2700. IF commit_transaction.SQLCode <> 0 THEN
  2701. arg_msg = '查询指令单编号失败,id:'+String(arg_orderid)+','+commit_transaction.SQLErrText
  2702. rslt = 0
  2703. GOTO ext
  2704. END IF
  2705. //合并排产主计划指令
  2706. IF ll_orderid_p = 0 THEN ll_orderid_p = arg_orderid
  2707. SELECT u_OrderRqMtrl_scll.trueRqqty,
  2708. u_OrderRqMtrl_scll.fpqty
  2709. INTO :ld_trueRqqty,
  2710. :ld_fpqty
  2711. FROM u_OrderRqMtrl_scll
  2712. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  2713. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  2714. AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid
  2715. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  2716. AND u_OrderRqMtrl_scll.status = :arg_status
  2717. AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode
  2718. And u_OrderRqMtrl_scll.pcode = :arg_pcode using commit_transaction;
  2719. IF commit_transaction.SQLCode <> 0 THEN
  2720. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',查询指令单用料数及已分配数失败,'+commit_transaction.SQLErrText
  2721. rslt = 0
  2722. GOTO ext
  2723. END IF
  2724. IF arg_fpqty > 0 THEN
  2725. IF ld_trueRqqty < ld_fpqty + arg_fpqty THEN
  2726. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',指令单物料未分配数只有:'+String(ld_trueRqqty - ld_fpqty,'#,#0.#########')+',不能再分配:'+String(arg_fpqty,'#,#0.#########')
  2727. rslt = 0
  2728. GOTO ext
  2729. END IF
  2730. ELSE
  2731. IF ld_fpqty < Abs(arg_fpqty) THEN
  2732. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',指令单物料已分配数只有:'+String(ld_fpqty,'#,#0.#########')+',不能取消分配:'+String(arg_fpqty,'#,#0.#########')
  2733. rslt = 0
  2734. GOTO ext
  2735. END IF
  2736. END IF
  2737. UPDATE u_OrderRqMtrl_scll
  2738. SET u_OrderRqMtrl_scll.fpqty = u_OrderRqMtrl_scll.fpqty + :arg_fpqty
  2739. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  2740. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  2741. AND u_OrderRqMtrl_scll.mtrlid = :arg_mtrlid
  2742. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  2743. AND u_OrderRqMtrl_scll.status = :arg_status
  2744. AND u_OrderRqMtrl_scll.woodcode = :arg_woodcode
  2745. And u_OrderRqMtrl_scll.pcode = :arg_pcode using commit_transaction;
  2746. IF commit_transaction.SQLCode <> 0 THEN
  2747. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新指令单用料数及已分配数失败,'+commit_transaction.SQLErrText
  2748. rslt = 0
  2749. GOTO ext
  2750. END IF
  2751. //更新计划分配占用数
  2752. IF arg_from_p_orderid = 0 THEN
  2753. IF arg_fpqty > 0 THEN
  2754. ds_update_orderrqmtrl_fp.DataObject = 'ds_zlscllfp_update_order_fp'
  2755. ds_update_orderrqmtrl_fp.SetTransObject(commit_transaction)
  2756. ds_update_orderrqmtrl_fp.Retrieve(arg_scid,ll_orderid_p,arg_wrkgrpid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode)
  2757. ld_notfpqty_zl_check = arg_fpqty
  2758. FOR i = 1 To ds_update_orderrqmtrl_fp.RowCount()
  2759. IF ld_notfpqty_zl_check = 0 THEN EXIT
  2760. arg_from_p_orderid = ds_update_orderrqmtrl_fp.Object.orderid[i]
  2761. arg_from_plantype = ds_update_orderrqmtrl_fp.Object.plantype[i]
  2762. arg_from_produce_wrkGrpid = ds_update_orderrqmtrl_fp.Object.produce_wrkgrpid[i]
  2763. ld_notfpqty_zl = ds_update_orderrqmtrl_fp.Object.notfpqty[i]
  2764. IF ld_notfpqty_zl_check > ld_notfpqty_zl THEN
  2765. ld_notfpqty_zl_update = ld_notfpqty_zl
  2766. ld_notfpqty_zl_check = ld_notfpqty_zl_check - ld_notfpqty_zl
  2767. ELSE
  2768. ld_notfpqty_zl_update = ld_notfpqty_zl_check
  2769. ld_notfpqty_zl_check = 0
  2770. END IF
  2771. UPDATE u_OrderRqMtrl
  2772. SET u_OrderRqMtrl.fpqty_zl = u_OrderRqMtrl.fpqty_zl + :ld_notfpqty_zl_update
  2773. WHERE u_OrderRqMtrl.scid = :arg_scid
  2774. AND u_OrderRqMtrl.orderid = :arg_from_p_orderid
  2775. AND u_OrderRqMtrl.plantype = :arg_from_plantype
  2776. AND u_OrderRqMtrl.produce_wrkGrpid = :arg_from_produce_wrkGrpid
  2777. AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  2778. AND u_OrderRqMtrl.wrkgrpid = :arg_wrkgrpid
  2779. AND u_OrderRqMtrl.status = :arg_status
  2780. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  2781. And u_OrderRqMtrl.pcode = :arg_pcode using commit_transaction;
  2782. IF commit_transaction.SQLCode <> 0 THEN
  2783. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新相关主生产计划指令单占用分配数失败,'+commit_transaction.SQLErrText
  2784. rslt = 0
  2785. GOTO ext
  2786. END IF
  2787. NEXT
  2788. IF ld_notfpqty_zl_check > 0 THEN
  2789. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新相关主生产计划指令单占用分配数有余数:'+String(ld_notfpqty_zl_check,'#,##0.##########')+',操作取消'
  2790. rslt = 0
  2791. GOTO ext
  2792. END IF
  2793. ELSE
  2794. ds_update_orderrqmtrl_fp.DataObject = 'ds_zlscllfp_update_order_fp_cancel'
  2795. ds_update_orderrqmtrl_fp.SetTransObject(commit_transaction)
  2796. ds_update_orderrqmtrl_fp.Retrieve(arg_scid,ll_orderid_p,arg_wrkgrpid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode)
  2797. ld_notfpqty_zl_check = Abs(arg_fpqty)
  2798. FOR i = 1 To ds_update_orderrqmtrl_fp.RowCount()
  2799. IF ld_notfpqty_zl_check = 0 THEN EXIT
  2800. arg_from_p_orderid = ds_update_orderrqmtrl_fp.Object.orderid[i]
  2801. arg_from_plantype = ds_update_orderrqmtrl_fp.Object.plantype[i]
  2802. arg_from_produce_wrkGrpid = ds_update_orderrqmtrl_fp.Object.produce_wrkgrpid[i]
  2803. ld_notfpqty_zl = ds_update_orderrqmtrl_fp.Object.fpqty_zl[i]
  2804. IF ld_notfpqty_zl_check > ld_notfpqty_zl THEN
  2805. ld_notfpqty_zl_update = ld_notfpqty_zl
  2806. ld_notfpqty_zl_check = ld_notfpqty_zl_check - ld_notfpqty_zl
  2807. ELSE
  2808. ld_notfpqty_zl_update = ld_notfpqty_zl_check
  2809. ld_notfpqty_zl_check = 0
  2810. END IF
  2811. UPDATE u_OrderRqMtrl
  2812. SET u_OrderRqMtrl.fpqty_zl = u_OrderRqMtrl.fpqty_zl - :ld_notfpqty_zl_update
  2813. WHERE u_OrderRqMtrl.scid = :arg_scid
  2814. AND u_OrderRqMtrl.orderid = :arg_from_p_orderid
  2815. AND u_OrderRqMtrl.plantype = :arg_from_plantype
  2816. AND u_OrderRqMtrl.produce_wrkGrpid = :arg_from_produce_wrkGrpid
  2817. AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  2818. AND u_OrderRqMtrl.wrkgrpid = :arg_wrkgrpid
  2819. AND u_OrderRqMtrl.status = :arg_status
  2820. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  2821. And u_OrderRqMtrl.pcode = :arg_pcode using commit_transaction;
  2822. IF commit_transaction.SQLCode <> 0 THEN
  2823. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新相关主生产计划指令单占用分配数失败,'+commit_transaction.SQLErrText
  2824. rslt = 0
  2825. GOTO ext
  2826. END IF
  2827. NEXT
  2828. IF ld_notfpqty_zl_check > 0 THEN
  2829. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新相关主生产计划指令单占用分配数有余数,操作取消'
  2830. rslt = 0
  2831. GOTO ext
  2832. END IF
  2833. END IF
  2834. ELSE
  2835. UPDATE u_OrderRqMtrl
  2836. SET u_OrderRqMtrl.fpqty_zl = u_OrderRqMtrl.fpqty_zl + :arg_fpqty
  2837. WHERE u_OrderRqMtrl.scid = :arg_scid
  2838. AND u_OrderRqMtrl.orderid = :arg_from_p_orderid
  2839. AND u_OrderRqMtrl.plantype = :arg_from_plantype
  2840. AND u_OrderRqMtrl.produce_wrkGrpid = :arg_from_produce_wrkGrpid
  2841. AND u_OrderRqMtrl.mtrlid = :arg_mtrlid
  2842. AND u_OrderRqMtrl.wrkgrpid = :arg_wrkgrpid
  2843. AND u_OrderRqMtrl.status = :arg_status
  2844. AND u_OrderRqMtrl.woodcode = :arg_woodcode
  2845. And u_OrderRqMtrl.pcode = :arg_pcode using commit_transaction;
  2846. IF commit_transaction.SQLCode <> 0 THEN
  2847. arg_msg = '指令单:'+ls_ordercode + ',物料:'+ls_mtrlcode+',更新相关主生产计划指令单占用分配数失败,'+commit_transaction.SQLErrText
  2848. rslt = 0
  2849. GOTO ext
  2850. END IF
  2851. END IF
  2852. //更新足料标记
  2853. SELECT isnull(sum(isnull(u_OrderRqMtrl_scll.trueRqqty - u_OrderRqMtrl_scll.fpqty,0)),0)
  2854. INTO :ld_notfpqty
  2855. FROM u_OrderRqMtrl_scll,u_mtrldef
  2856. WHERE u_OrderRqMtrl_scll.scid = :arg_scid
  2857. AND u_OrderRqMtrl_scll.orderid = :arg_orderid
  2858. AND u_OrderRqMtrl_scll.wrkgrpid = :arg_wrkgrpid
  2859. AND u_OrderRqMtrl_scll.mtrlid = u_mtrldef.mtrlid
  2860. And u_mtrldef.iffp = 1 using commit_transaction;
  2861. IF commit_transaction.SQLCode <> 0 THEN
  2862. arg_msg = '检查指令单:'+ls_ordercode + '工组是否足料失败,'+commit_transaction.SQLErrText
  2863. rslt = 0
  2864. GOTO ext
  2865. END IF
  2866. IF ld_notfpqty > 0 THEN
  2867. ll_ifenouth = 1
  2868. ELSE
  2869. ll_ifenouth = 0
  2870. END IF
  2871. UPDATE u_ordermtrl_wrk_mtrl
  2872. SET u_ordermtrl_wrk_mtrl.ifenouth = :ll_ifenouth
  2873. WHERE u_ordermtrl_wrk_mtrl.scid = :arg_scid
  2874. AND u_ordermtrl_wrk_mtrl.orderid = :arg_orderid
  2875. And u_ordermtrl_wrk_mtrl.wrkgrpid = :arg_wrkgrpid using commit_transaction;
  2876. IF commit_transaction.SQLCode <> 0 THEN
  2877. arg_msg = '指令单:'+ls_ordercode + ',更新足料标记失败,'+commit_transaction.SQLErrText
  2878. rslt = 0
  2879. GOTO ext
  2880. END IF
  2881. ext:
  2882. IF rslt = 0 THEN
  2883. ROLLBACK using commit_transaction;
  2884. ELSEIF rslt = 1 And arg_ifcommit THEN
  2885. COMMIT using commit_transaction;
  2886. END IF
  2887. Destroy ds_update_orderrqmtrl_fp
  2888. RETURN rslt
  2889. end function
  2890. public function integer uof_assign_del_order (long arr_scid[], long arr_orderid[], ref string arg_msg, boolean if_commit);Int rslt = 1
  2891. Long ll_scid, ll_orderid
  2892. Long ll_assignid, arr_assignid[]
  2893. Decimal ld_qty, arr_qty[]
  2894. Long ll_cnt2 = 0, ll_cnt
  2895. Long ll_i
  2896. ll_cnt = UpperBound(arr_scid)
  2897. FOR ll_i = 1 To ll_cnt
  2898. ll_scid = arr_scid[ll_i]
  2899. ll_orderid = arr_orderid[ll_i]
  2900. DECLARE cur1 CURSOR FOR
  2901. SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS Expr1
  2902. FROM u_mtrlware_assign INNER JOIN
  2903. u_mtrlware ON u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.Scid = u_mtrlware.scid INNER JOIN
  2904. u_storage ON u_mtrlware.storageid = u_storage.storageid INNER JOIN
  2905. u_mtrldef ON u_mtrlware.mtrlid = u_mtrldef.mtrlid
  2906. WHERE (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND (u_mtrlware_assign.assigntype = 0) AND (u_mtrldef.iffp = 1) AND
  2907. (u_storage.storagetype = 1) And (u_mtrlware.Scid = :ll_scid) And (u_mtrlware_assign.Relbillid = :ll_orderid) using commit_transaction;
  2908. OPEN cur1;
  2909. FETCH cur1 Into :ll_assignid, :ld_qty;
  2910. DO WHILE commit_transaction.SQLCode = 0
  2911. ll_cnt2++
  2912. arr_assignid[ll_cnt2] = ll_assignid
  2913. arr_qty[ll_cnt2] = ld_qty
  2914. FETCH cur1 Into :ll_assignid, :ld_qty;
  2915. LOOP
  2916. CLOSE cur1;
  2917. NEXT
  2918. FOR ll_i = 1 To ll_cnt2
  2919. IF uof_assign_del(arr_assignid[ll_i], arr_qty[ll_i], Ref arg_msg, False) <> 1 THEN
  2920. rslt = 0
  2921. GOTO ext
  2922. END IF
  2923. NEXT
  2924. ext:
  2925. IF if_commit THEN
  2926. IF rslt = 1 THEN
  2927. COMMIT using commit_transaction;
  2928. ELSE
  2929. ROLLBACK using commit_transaction;
  2930. END IF
  2931. END IF
  2932. RETURN rslt
  2933. end function
  2934. public function integer uof_assign_add_order (long arg_scid[], long arg_orderid[], ref string arg_msg, boolean if_commit);Int rslt = 1
  2935. Long ll_cnt = 0, ll_cnt2 = 0
  2936. Long ll_scid, arr_scid[], ll_orderid, arr_orderid[], ll_mtrlid, arr_mtrlid[]
  2937. String ls_status, arr_status[], ls_woodcode, arr_woodcode[], ls_pcode, arr_pcode[]
  2938. Decimal ld_qty, arr_qty[]
  2939. Long ll_mtrlwareid, arr_mtrlwareid[]
  2940. Decimal ld_notfpqty, arr_notfpqty[]
  2941. Decimal ld_fpreal
  2942. Long ll_i, ll_j
  2943. String ls_sql = ''
  2944. ls_sql = ls_sql + " SELECT u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode, "
  2945. ls_sql = ls_sql + " u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty AS RqQty, u_OrderRqMtrl.RqDate "
  2946. ls_sql = ls_sql + " INTO [#tmp_OrderRqMtrl] "
  2947. ls_sql = ls_sql + " FROM u_OrderRqMtrl INNER JOIN "
  2948. ls_sql = ls_sql + " u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid "
  2949. ls_sql = ls_sql + " WHERE (u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty > 0) AND (u_mtrldef.iffp = 1) AND (u_OrderRqMtrl.scid = ?) AND "
  2950. ls_sql = ls_sql + " (u_OrderRqMtrl.OrderID = ?) "
  2951. String ls_sql2 = ''
  2952. ls_sql2 = ls_sql2 + " INSERT INTO [#tmp_OrderRqMtrl] "
  2953. ls_sql2 = ls_sql2 + " SELECT u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode, "
  2954. ls_sql2 = ls_sql2 + " u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty AS RqQty, u_OrderRqMtrl.RqDate "
  2955. ls_sql2 = ls_sql2 + " FROM u_OrderRqMtrl INNER JOIN "
  2956. ls_sql2 = ls_sql2 + " u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid "
  2957. ls_sql2 = ls_sql2 + " WHERE (u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty > 0) AND (u_mtrldef.iffp = 1) AND (u_OrderRqMtrl.scid = ?) AND "
  2958. ls_sql2 = ls_sql2 + " (u_OrderRqMtrl.OrderID = ?) "
  2959. FOR ll_i = 1 To UpperBound(arg_scid)
  2960. IF ll_i = 1 THEN
  2961. PREPARE SQLSA From :ls_sql using commit_transaction;
  2962. ELSE
  2963. PREPARE SQLSA From :ls_sql2 using commit_transaction;
  2964. END IF
  2965. EXECUTE SQLSA Using :arg_scid[ll_i],:arg_orderid[ll_i];
  2966. IF commit_transaction.SQLCode <> 0 THEN
  2967. rslt = 0
  2968. arg_msg = '查询主计划物料需求失败,' + commit_transaction.SQLErrText
  2969. GOTO ext
  2970. END IF
  2971. NEXT
  2972. ls_sql = "SELECT scid, orderid, mtrlid, status, woodcode, pcode, rqqty From [#tmp_OrderRqMtrl] Order By rqdate"
  2973. PREPARE SQLSA From :ls_sql using commit_transaction;
  2974. DECLARE cur1 Dynamic Cursor FOR SQLSA;
  2975. OPEN Dynamic cur1;
  2976. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  2977. DO WHILE commit_transaction.SQLCode = 0
  2978. ll_cnt++
  2979. arr_scid[ll_cnt] = ll_scid
  2980. arr_orderid[ll_cnt] = ll_orderid
  2981. arr_mtrlid[ll_cnt] = ll_mtrlid
  2982. arr_status[ll_cnt] = ls_status
  2983. arr_woodcode[ll_cnt] = ls_woodcode
  2984. arr_pcode[ll_cnt] = ls_pcode
  2985. arr_qty[ll_cnt] = ld_qty
  2986. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  2987. LOOP
  2988. CLOSE cur1;
  2989. IF commit_transaction.SQLErrText <> '' AND ll_cnt = 0 THEN
  2990. rslt = 0
  2991. arg_msg = commit_transaction.SQLErrText
  2992. GOTO ext
  2993. END IF
  2994. FOR ll_i = 1 To ll_cnt
  2995. ll_scid = arr_scid[ll_i]
  2996. ll_orderid = arr_orderid[ll_i]
  2997. ll_mtrlid = arr_mtrlid[ll_i]
  2998. ls_status = arr_status[ll_i]
  2999. ls_woodcode = arr_woodcode[ll_i]
  3000. ls_pcode = arr_pcode[ll_i]
  3001. ld_qty = arr_qty[ll_i]
  3002. ll_cnt2 = 0
  3003. DECLARE cur2 CURSOR FOR
  3004. SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS Expr1
  3005. FROM u_mtrlware INNER JOIN
  3006. u_storage ON u_mtrlware.storageid = u_storage.storageid
  3007. WHERE (u_mtrlware.scid = :ll_scid) AND (u_mtrlware.mtrlid = :ll_mtrlid) AND (u_mtrlware.Status = :ls_status) AND (u_mtrlware.woodcode = :ls_woodcode)
  3008. And (u_mtrlware.pcode = :ls_pcode) And (u_mtrlware.noallocqty > u_mtrlware.allocqty) And (u_storage.inuse = 1) And (u_storage.storagetype = 1) using commit_transaction;
  3009. OPEN cur2;
  3010. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3011. DO WHILE commit_transaction.SQLCode = 0
  3012. ll_cnt2++
  3013. arr_mtrlwareid[ll_cnt2] = ll_mtrlwareid
  3014. arr_notfpqty[ll_cnt2] = ld_notfpqty
  3015. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3016. LOOP
  3017. CLOSE cur2;
  3018. FOR ll_j = 1 To ll_cnt2
  3019. IF ld_qty = 0 THEN EXIT
  3020. ll_mtrlwareid = arr_mtrlwareid[ll_j]
  3021. ld_notfpqty = arr_notfpqty[ll_j]
  3022. IF ld_qty > ld_notfpqty THEN
  3023. ld_fpreal = ld_notfpqty
  3024. ELSE
  3025. ld_fpreal = ld_qty
  3026. END IF
  3027. IF uof_assign_add_to_order(ll_scid, ll_mtrlwareid, ll_orderid, ld_fpreal, 2, Ref arg_msg, False) <> 1 THEN
  3028. rslt = 0
  3029. GOTO ext
  3030. END IF
  3031. ld_qty = ld_qty - ld_fpreal
  3032. NEXT
  3033. NEXT
  3034. ext:
  3035. ls_sql = "drop table [#tmp_OrderRqMtrl]"
  3036. EXECUTE Immediate :ls_sql using commit_transaction;
  3037. IF if_commit THEN
  3038. IF rslt = 1 THEN
  3039. COMMIT using commit_transaction;
  3040. ELSE
  3041. ROLLBACK using commit_transaction;
  3042. END IF
  3043. END IF
  3044. RETURN rslt
  3045. end function
  3046. public function integer uof_assign_add_to_order (long arg_scid, long arg_mtrlwareid, long arg_orderid, decimal arg_qty, long arg_fpgrade, ref string arg_msg, boolean if_commit);Int rslt = 1
  3047. Decimal ld_cost
  3048. String ls_dscrp
  3049. String ls_mtrlcuscode
  3050. ls_dscrp = ''
  3051. SELECT cost , mtrlcuscode
  3052. INTO :ld_cost, :ls_mtrlcuscode
  3053. FROM u_mtrlware
  3054. Where scid = :arg_scid And mtrlwareid = :arg_mtrlwareid using commit_transaction;
  3055. IF commit_transaction.SQLCode <> 0 THEN
  3056. ld_cost = 0
  3057. ls_mtrlcuscode = ''
  3058. END IF
  3059. RETURN uof_assign_add(arg_scid, arg_mtrlwareid, 0, arg_orderid, 0, arg_qty, ld_cost, ls_dscrp, ls_mtrlcuscode, '', 0, arg_fpgrade, publ_operator, Ref arg_msg, if_commit)
  3060. RETURN rslt
  3061. end function
  3062. public function integer uof_assign_del_all_order (ref string arg_msg, boolean if_commit);Int rslt = 1
  3063. Long ll_assignid, arr_assignids[]
  3064. Decimal ld_qty, arr_qtys[]
  3065. Long ll_cnt = 0
  3066. DECLARE cur1 CURSOR FOR
  3067. SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS Expr1
  3068. FROM u_mtrlware_assign INNER JOIN
  3069. u_mtrlware ON u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.Scid = u_mtrlware.scid INNER JOIN
  3070. u_storage ON u_mtrlware.storageid = u_storage.storageid INNER JOIN
  3071. u_mtrldef ON u_mtrlware.mtrlid = u_mtrldef.mtrlid
  3072. WHERE (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND (u_mtrlware_assign.assigntype = 0) AND (u_mtrldef.iffp = 1) AND
  3073. (u_storage.storagetype = 1) using commit_transaction;
  3074. OPEN cur1;
  3075. FETCH cur1 Into :ll_assignid, :ld_qty;
  3076. DO WHILE commit_transaction.SQLCode = 0
  3077. ll_cnt ++
  3078. arr_assignids[ll_cnt] = ll_assignid
  3079. arr_qtys[ll_cnt] = ld_qty
  3080. FETCH cur1 Into :ll_assignid, :ld_qty;
  3081. LOOP
  3082. CLOSE cur1;
  3083. Long ll_i
  3084. FOR ll_i = 1 To ll_cnt
  3085. IF uof_assign_del(arr_assignids[ll_i], arr_qtys[ll_i], Ref arg_msg, False) <> 1 THEN
  3086. rslt = 0
  3087. GOTO ext
  3088. END IF
  3089. NEXT
  3090. ext:
  3091. IF if_commit THEN
  3092. IF rslt = 1 THEN
  3093. COMMIT using commit_transaction;
  3094. ELSE
  3095. ROLLBACK using commit_transaction;
  3096. END IF
  3097. END IF
  3098. RETURN rslt
  3099. end function
  3100. public function integer uof_assign_del_order_by_mtrlid (long arg_mtrlid, ref string arg_msg, boolean if_commit);Int rslt = 1
  3101. Long ll_assignid, arr_assignids[]
  3102. Decimal ld_qty, arr_qtys[]
  3103. Long ll_cnt = 0
  3104. DECLARE cur1 CURSOR FOR
  3105. SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS Expr1
  3106. FROM u_mtrlware_assign INNER JOIN
  3107. u_mtrlware ON u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.Scid = u_mtrlware.scid INNER JOIN
  3108. u_storage ON u_mtrlware.storageid = u_storage.storageid INNER JOIN
  3109. u_mtrldef ON u_mtrlware.mtrlid = u_mtrldef.mtrlid
  3110. WHERE (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND (u_mtrlware_assign.assigntype = 0) AND (u_mtrldef.iffp = 1) AND
  3111. (u_storage.storagetype = 1) AND u_mtrlware.mtrlid = :arg_mtrlid using commit_transaction;
  3112. OPEN cur1;
  3113. FETCH cur1 Into :ll_assignid, :ld_qty;
  3114. DO WHILE commit_transaction.SQLCode = 0
  3115. ll_cnt ++
  3116. arr_assignids[ll_cnt] = ll_assignid
  3117. arr_qtys[ll_cnt] = ld_qty
  3118. FETCH cur1 Into :ll_assignid, :ld_qty;
  3119. LOOP
  3120. CLOSE cur1;
  3121. Long ll_i
  3122. FOR ll_i = 1 To ll_cnt
  3123. IF uof_assign_del(arr_assignids[ll_i], arr_qtys[ll_i], Ref arg_msg, False) <> 1 THEN
  3124. rslt = 0
  3125. GOTO ext
  3126. END IF
  3127. NEXT
  3128. ext:
  3129. IF if_commit THEN
  3130. IF rslt = 1 THEN
  3131. COMMIT using commit_transaction;
  3132. ELSE
  3133. ROLLBACK using commit_transaction;
  3134. END IF
  3135. END IF
  3136. RETURN rslt
  3137. end function
  3138. public function integer uof_assign_add_to_order_auto (ref string arg_msg, boolean if_commit);Int rslt = 1
  3139. Long ll_cnt = 0, ll_cnt2 = 0
  3140. Long ll_scid, arr_scid[], ll_orderid, arr_orderid[], ll_mtrlid, arr_mtrlid[]
  3141. String ls_status, arr_status[], ls_woodcode, arr_woodcode[], ls_pcode, arr_pcode[]
  3142. Decimal ld_qty, arr_qty[]
  3143. Long ll_mtrlwareid, arr_mtrlwareid[]
  3144. Decimal ld_notfpqty, arr_notfpqty[]
  3145. Decimal ld_fpreal
  3146. DECLARE cur1 CURSOR FOR
  3147. SELECT u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode,
  3148. u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty AS Expr1
  3149. FROM u_OrderRqMtrl INNER JOIN
  3150. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  3151. WHERE (u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty > 0) AND (u_mtrldef.iffp = 1)
  3152. Order By u_OrderRqMtrl.RqDate using commit_transaction;
  3153. OPEN cur1;
  3154. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  3155. DO WHILE commit_transaction.SQLCode = 0
  3156. ll_cnt++
  3157. arr_scid[ll_cnt] = ll_scid
  3158. arr_orderid[ll_cnt] = ll_orderid
  3159. arr_mtrlid[ll_cnt] = ll_mtrlid
  3160. arr_status[ll_cnt] = ls_status
  3161. arr_woodcode[ll_cnt] = ls_woodcode
  3162. arr_pcode[ll_cnt] = ls_pcode
  3163. arr_qty[ll_cnt] = ld_qty
  3164. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  3165. LOOP
  3166. CLOSE cur1;
  3167. Long ll_i, ll_j
  3168. FOR ll_i = 1 To ll_cnt
  3169. ll_scid = arr_scid[ll_i]
  3170. ll_orderid = arr_orderid[ll_i]
  3171. ll_mtrlid = arr_mtrlid[ll_i]
  3172. ls_status = arr_status[ll_i]
  3173. ls_woodcode = arr_woodcode[ll_i]
  3174. ls_pcode = arr_pcode[ll_i]
  3175. ld_qty = arr_qty[ll_i]
  3176. ll_cnt2 = 0
  3177. DECLARE cur2 CURSOR FOR
  3178. SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS Expr1
  3179. FROM u_mtrlware INNER JOIN
  3180. u_storage ON u_mtrlware.storageid = u_storage.storageid
  3181. WHERE (u_mtrlware.scid = :ll_scid) AND (u_mtrlware.mtrlid = :ll_mtrlid) AND (u_mtrlware.Status = :ls_status) AND (u_mtrlware.woodcode = :ls_woodcode)
  3182. And (u_mtrlware.pcode = :ls_pcode) And (u_mtrlware.noallocqty > u_mtrlware.allocqty) And (u_storage.inuse = 1) And (u_storage.storagetype = 1) using commit_transaction;
  3183. OPEN cur2;
  3184. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3185. DO WHILE commit_transaction.SQLCode = 0
  3186. ll_cnt2++
  3187. arr_mtrlwareid[ll_cnt2] = ll_mtrlwareid
  3188. arr_notfpqty[ll_cnt2] = ld_notfpqty
  3189. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3190. LOOP
  3191. CLOSE cur2;
  3192. FOR ll_j = 1 To ll_cnt2
  3193. IF ld_qty = 0 THEN EXIT
  3194. ll_mtrlwareid = arr_mtrlwareid[ll_j]
  3195. ld_notfpqty = arr_notfpqty[ll_j]
  3196. IF ld_qty > ld_notfpqty THEN
  3197. ld_fpreal = ld_notfpqty
  3198. ELSE
  3199. ld_fpreal = ld_qty
  3200. END IF
  3201. IF uof_assign_add_to_order(ll_scid, ll_mtrlwareid, ll_orderid, ld_fpreal, 2, Ref arg_msg, False) <> 1 THEN
  3202. rslt = 0
  3203. GOTO ext
  3204. END IF
  3205. ld_qty = ld_qty - ld_fpreal
  3206. NEXT
  3207. NEXT
  3208. ext:
  3209. IF if_commit THEN
  3210. IF rslt = 1 THEN
  3211. COMMIT using commit_transaction;
  3212. ELSE
  3213. ROLLBACK using commit_transaction;
  3214. END IF
  3215. END IF
  3216. RETURN rslt
  3217. end function
  3218. public function integer uof_assign_add_to_order_by_mtrlid (long arg_mtrlid, ref string arg_msg, boolean if_commit);Int rslt = 1
  3219. Long ll_cnt = 0, ll_cnt2 = 0
  3220. Long ll_scid, arr_scid[], ll_orderid, arr_orderid[], ll_mtrlid, arr_mtrlid[]
  3221. String ls_status, arr_status[], ls_woodcode, arr_woodcode[], ls_pcode, arr_pcode[]
  3222. Decimal ld_qty, arr_qty[]
  3223. Long ll_mtrlwareid, arr_mtrlwareid[]
  3224. Decimal ld_notfpqty, arr_notfpqty[]
  3225. Decimal ld_fpreal
  3226. DECLARE cur1 CURSOR FOR
  3227. SELECT u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode,
  3228. u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty AS Expr1
  3229. FROM u_OrderRqMtrl INNER JOIN
  3230. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  3231. WHERE (u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty > 0) AND (u_mtrldef.iffp = 1) AND u_OrderRqMtrl.MtrlID = :arg_mtrlid
  3232. Order By u_OrderRqMtrl.RqDate using commit_transaction;
  3233. OPEN cur1;
  3234. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  3235. DO WHILE commit_transaction.SQLCode = 0
  3236. ll_cnt++
  3237. arr_scid[ll_cnt] = ll_scid
  3238. arr_orderid[ll_cnt] = ll_orderid
  3239. arr_mtrlid[ll_cnt] = ll_mtrlid
  3240. arr_status[ll_cnt] = ls_status
  3241. arr_woodcode[ll_cnt] = ls_woodcode
  3242. arr_pcode[ll_cnt] = ls_pcode
  3243. arr_qty[ll_cnt] = ld_qty
  3244. FETCH cur1 Into :ll_scid, :ll_orderid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty;
  3245. LOOP
  3246. CLOSE cur1;
  3247. Long ll_i, ll_j
  3248. FOR ll_i = 1 To ll_cnt
  3249. ll_scid = arr_scid[ll_i]
  3250. ll_orderid = arr_orderid[ll_i]
  3251. ll_mtrlid = arr_mtrlid[ll_i]
  3252. ls_status = arr_status[ll_i]
  3253. ls_woodcode = arr_woodcode[ll_i]
  3254. ls_pcode = arr_pcode[ll_i]
  3255. ld_qty = arr_qty[ll_i]
  3256. ll_cnt2 = 0
  3257. DECLARE cur2 CURSOR FOR
  3258. SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS Expr1
  3259. FROM u_mtrlware INNER JOIN
  3260. u_storage ON u_mtrlware.storageid = u_storage.storageid
  3261. WHERE (u_mtrlware.scid = :ll_scid) AND (u_mtrlware.mtrlid = :ll_mtrlid) AND (u_mtrlware.Status = :ls_status) AND (u_mtrlware.woodcode = :ls_woodcode)
  3262. And (u_mtrlware.pcode = :ls_pcode) And (u_mtrlware.noallocqty > u_mtrlware.allocqty) And (u_storage.inuse = 1) And (u_storage.storagetype = 1) using commit_transaction;
  3263. OPEN cur2;
  3264. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3265. DO WHILE commit_transaction.SQLCode = 0
  3266. ll_cnt2++
  3267. arr_mtrlwareid[ll_cnt2] = ll_mtrlwareid
  3268. arr_notfpqty[ll_cnt2] = ld_notfpqty
  3269. FETCH cur2 Into :ll_mtrlwareid, :ld_notfpqty;
  3270. LOOP
  3271. CLOSE cur2;
  3272. FOR ll_j = 1 To ll_cnt2
  3273. IF ld_qty = 0 THEN EXIT
  3274. ll_mtrlwareid = arr_mtrlwareid[ll_j]
  3275. ld_notfpqty = arr_notfpqty[ll_j]
  3276. IF ld_qty > ld_notfpqty THEN
  3277. ld_fpreal = ld_notfpqty
  3278. ELSE
  3279. ld_fpreal = ld_qty
  3280. END IF
  3281. IF uof_assign_add_to_order(ll_scid, ll_mtrlwareid, ll_orderid, ld_fpreal, 2, Ref arg_msg, False) <> 1 THEN
  3282. rslt = 0
  3283. GOTO ext
  3284. END IF
  3285. ld_qty = ld_qty - ld_fpreal
  3286. NEXT
  3287. NEXT
  3288. ext:
  3289. IF if_commit THEN
  3290. IF rslt = 1 THEN
  3291. COMMIT using commit_transaction;
  3292. ELSE
  3293. ROLLBACK using commit_transaction;
  3294. END IF
  3295. END IF
  3296. RETURN rslt
  3297. end function
  3298. public function integer uof_adjust_order_by_mtrlid (long arg_mtrlid, long arg_fpgrade, ref string arg_msg);Int rslt = 1
  3299. Long ll_cnt = 0
  3300. Long ll_cnt2 = 0
  3301. Long ll_cnt3 = 0
  3302. Long ll_scid, arr_scid[]
  3303. Long ll_OrderID, arr_OrderID[]
  3304. Long ll_MtrlID, arr_MtrlID[]
  3305. String ls_status, arr_status[]
  3306. String ls_woodcode, arr_woodcode[]
  3307. String ls_pcode, arr_pcode[]
  3308. Decimal ld_notfpqty, arr_notfpqty[]
  3309. Decimal ld_fpqty, arr_fpqty[]
  3310. Long ll_mtrlwareid, arr_mtrlwareid[]
  3311. Decimal ld_noallocqty, arr_noallocqty[]
  3312. Decimal ld_fpreal
  3313. Long ll_assignid,arr_assignid[]
  3314. Decimal ld_assignqty, arr_assignqty[]
  3315. Long ll_assignwareid, arr_assignwareid[]
  3316. DECLARE cur1 CURSOR FOR
  3317. SELECT u_OrderRqMtrl.scid, u_OrderRqMtrl.OrderID, u_OrderRqMtrl.MtrlID, u_OrderRqMtrl.status, u_OrderRqMtrl.woodcode, u_OrderRqMtrl.pcode,
  3318. u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty AS Expr1, u_OrderRqMtrl.fpqty
  3319. FROM u_OrderRqMtrl INNER JOIN
  3320. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid
  3321. WHERE ((u_OrderRqMtrl.RqQty - u_OrderRqMtrl.fpqty > 0) OR (u_OrderRqMtrl.fpqty > 0)) AND (u_mtrldef.iffp = 1) AND u_OrderRqMtrl.MtrlID = :arg_mtrlid
  3322. Order By u_OrderRqMtrl.RqDate Using commit_transaction;
  3323. OPEN cur1;
  3324. FETCH cur1 INTO :ll_scid,
  3325. :ll_OrderID,
  3326. :ll_MtrlID,
  3327. :ls_status,
  3328. :ls_woodcode,
  3329. :ls_pcode,
  3330. :ld_notfpqty,
  3331. :ld_fpqty;
  3332. DO WHILE commit_transaction.SQLCode = 0
  3333. ll_cnt++
  3334. arr_scid[ll_cnt] = ll_scid
  3335. arr_OrderID[ll_cnt] = ll_OrderID
  3336. arr_MtrlID[ll_cnt] = ll_MtrlID
  3337. arr_status[ll_cnt] = ls_status
  3338. arr_woodcode[ll_cnt] = ls_woodcode
  3339. arr_pcode[ll_cnt] = ls_pcode
  3340. arr_notfpqty[ll_cnt] = ld_notfpqty
  3341. arr_fpqty[ll_cnt] = ld_fpqty
  3342. FETCH cur1 INTO :ll_scid,
  3343. :ll_OrderID,
  3344. :ll_MtrlID,
  3345. :ls_status,
  3346. :ls_woodcode,
  3347. :ls_pcode,
  3348. :ld_notfpqty,
  3349. :ld_fpqty;
  3350. LOOP
  3351. CLOSE cur1;
  3352. Long ll_i, ll_j
  3353. FOR ll_i = 1 To ll_cnt
  3354. ll_scid = arr_scid[ll_i]
  3355. ll_OrderID = arr_OrderID[ll_i]
  3356. ll_MtrlID = arr_MtrlID[ll_i]
  3357. ls_status = arr_status[ll_i]
  3358. ls_woodcode = arr_woodcode[ll_i]
  3359. ls_pcode = arr_pcode[ll_i]
  3360. ld_notfpqty = arr_notfpqty[ll_i]
  3361. IF ld_notfpqty <= 0 THEN CONTINUE
  3362. ll_cnt2 = 0
  3363. DECLARE cur2 CURSOR FOR
  3364. SELECT u_mtrlware.mtrlwareid, u_mtrlware.noallocqty - u_mtrlware.allocqty AS Expr1
  3365. FROM u_mtrlware INNER JOIN
  3366. u_storage ON u_mtrlware.storageid = u_storage.storageid
  3367. WHERE (u_mtrlware.scid = :ll_scid) AND (u_mtrlware.mtrlid = :ll_mtrlid) AND (u_mtrlware.Status = :ls_status) AND (u_mtrlware.woodcode = :ls_woodcode)
  3368. And (u_mtrlware.pcode = :ls_pcode) And (u_mtrlware.noallocqty > u_mtrlware.allocqty) And (u_storage.inuse = 1) And (u_storage.storagetype = 1) Using commit_transaction;
  3369. OPEN cur2;
  3370. FETCH cur2 INTO :ll_mtrlwareid,
  3371. :ld_noallocqty;
  3372. DO WHILE commit_transaction.SQLCode = 0
  3373. ll_cnt2++
  3374. arr_mtrlwareid[ll_cnt2] = ll_mtrlwareid
  3375. arr_noallocqty[ll_cnt2] = ld_noallocqty
  3376. FETCH cur2 INTO :ll_mtrlwareid,
  3377. :ld_noallocqty;
  3378. LOOP
  3379. CLOSE cur2;
  3380. FOR ll_j = 1 To ll_cnt2
  3381. IF ld_notfpqty = 0 THEN EXIT
  3382. ll_mtrlwareid = arr_mtrlwareid[ll_j]
  3383. ld_noallocqty = arr_noallocqty[ll_j]
  3384. IF ld_notfpqty > ld_noallocqty THEN
  3385. ld_fpreal = ld_noallocqty
  3386. ELSE
  3387. ld_fpreal = ld_notfpqty
  3388. END IF
  3389. IF uof_assign_add_to_order(ll_scid, ll_mtrlwareid, ll_OrderID, ld_fpreal, arg_fpgrade, Ref arg_msg, False) <> 1 THEN
  3390. rslt = 0
  3391. GOTO ext
  3392. END IF
  3393. ld_notfpqty = ld_notfpqty - ld_fpreal
  3394. NEXT
  3395. IF ld_notfpqty <= 0 THEN CONTINUE
  3396. FOR ll_j = ll_cnt To ll_i + 1 Step -1
  3397. IF arr_fpqty[ll_j] <= 0 THEN CONTINUE
  3398. IF arr_scid[ll_j] <> ll_scid Or arr_MtrlID[ll_j] <> ll_MtrlID &
  3399. Or arr_status[ll_j] <> ls_status Or arr_woodcode[ll_j] <> ls_woodcode &
  3400. Or arr_pcode[ll_j] <> ls_pcode THEN
  3401. CONTINUE
  3402. END IF
  3403. ll_cnt3 = 0
  3404. DECLARE cur3 CURSOR FOR
  3405. SELECT u_mtrlware_assign.Assignid, u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS Expr1, u_mtrlware_assign.Mtrlwareid
  3406. FROM u_mtrlware_assign INNER JOIN
  3407. u_mtrlware ON u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid AND u_mtrlware_assign.Scid = u_mtrlware.scid
  3408. WHERE (u_mtrlware_assign.Scid = :arr_scid[ll_j]) AND (u_mtrlware_assign.assigntype = 0) AND (u_mtrlware.mtrlid = :arr_MtrlID[ll_j]) AND (u_mtrlware.Status = :arr_status[ll_j]) AND
  3409. (u_mtrlware.woodcode = :arr_woodcode[ll_j]) AND (u_mtrlware.pcode = :arr_pcode[ll_j]) AND (u_mtrlware_assign.Relbillid = :arr_OrderID[ll_j]) AND (u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty > 0)
  3410. AND (u_mtrlware_assign.fpgrade < :arg_fpgrade)
  3411. Order By u_mtrlware_assign.Assignid Desc Using commit_transaction;
  3412. OPEN cur3;
  3413. FETCH cur3 Into :ll_assignid, :ld_assignqty, :ll_assignwareid;
  3414. DO WHILE commit_transaction.SQLCode = 0
  3415. ll_cnt3++
  3416. arr_assignid[ll_cnt3] = ll_assignid
  3417. arr_assignqty[ll_cnt3] = ld_assignqty
  3418. arr_assignwareid[ll_cnt3] = ll_assignwareid
  3419. FETCH cur3 Into :ll_assignid, :ld_assignqty, :ll_assignwareid;
  3420. LOOP
  3421. CLOSE cur3;
  3422. NEXT
  3423. FOR ll_j = 1 To ll_cnt3
  3424. IF ld_notfpqty = 0 THEN EXIT
  3425. ll_assignid = arr_assignid[ll_j]
  3426. ld_assignqty = arr_assignqty[ll_j]
  3427. ll_assignwareid = arr_assignwareid[ll_j]
  3428. IF ld_notfpqty > ld_assignqty THEN
  3429. ld_fpreal = ld_assignqty
  3430. ELSE
  3431. ld_fpreal = ld_notfpqty
  3432. END IF
  3433. IF uof_assign_del(ll_assignid, ld_fpreal, Ref arg_msg, False) <> 1 THEN
  3434. rslt = 0
  3435. GOTO ext
  3436. END IF
  3437. IF uof_assign_add_to_order(ll_scid, ll_mtrlwareid, ll_OrderID, ld_fpreal, arg_fpgrade, Ref arg_msg, False) <> 1 THEN
  3438. rslt = 0
  3439. GOTO ext
  3440. END IF
  3441. ld_notfpqty = ld_notfpqty - ld_fpreal
  3442. NEXT
  3443. NEXT
  3444. ext:
  3445. RETURN rslt
  3446. end function
  3447. public function integer uof_assign_add_packpro_to_saletask (long arg_scid, long arg_mtrlwareid_task, long arg_cusid_task, long arg_mtrlid_task, decimal arg_fpqty, long arg_relbillid, long arg_relprintid, string arg_relbillcode, decimal arg_cost, string arg_dscrp, string arg_mtrlcuscode, integer arg_fpgrade, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3448. Long ll_assignid
  3449. IF IsNull(arg_scid) THEN arg_scid = 0
  3450. IF IsNull(arg_mtrlwareid_task) THEN arg_mtrlwareid_task = 0
  3451. IF IsNull(arg_cusid_task) THEN arg_cusid_task = 0
  3452. IF IsNull(arg_mtrlid_task) THEN arg_mtrlid_task = 0
  3453. IF IsNull(arg_Relbillid) THEN arg_Relbillid = 0
  3454. IF IsNull(arg_relprintid) THEN arg_relprintid = 0
  3455. IF IsNull(arg_cost) THEN arg_cost = 0
  3456. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  3457. IF IsNull(arg_opemp) THEN arg_opemp = ''
  3458. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  3459. UPDATE u_mtrlware_assign
  3460. SET assignqty = assignqty + :arg_fpqty
  3461. WHERE u_mtrlware_assign.scid = :arg_scid
  3462. AND u_mtrlware_assign.mtrlwareid = :arg_mtrlwareid_task
  3463. AND u_mtrlware_assign.relbillid = :arg_relbillid
  3464. AND u_mtrlware_assign.relprintid = :arg_relprintid
  3465. AND u_mtrlware_assign.mtrlid = :arg_mtrlid_task
  3466. And u_mtrlware_assign.assigntype = 1 Using commit_transaction;
  3467. IF commit_transaction.SQLCode = 0 THEN
  3468. IF commit_transaction.SQLNRows = 0 THEN
  3469. //插入内容
  3470. ll_assignid = f_sys_scidentity(0,"u_mtrlware_assign","assignid",arg_msg,True,id_sqlca)
  3471. IF ll_assignid <= 0 THEN
  3472. rslt = 0
  3473. GOTO ext
  3474. END IF
  3475. INSERT INTO u_mtrlware_assign
  3476. (assignid,
  3477. assigntype,
  3478. scid,
  3479. mtrlwareid,
  3480. mtrlid,
  3481. Relbillid,
  3482. relprintid,
  3483. relbillcode,
  3484. assignqty,
  3485. cost,
  3486. wareamt,
  3487. dscrp,
  3488. mtrlcuscode,
  3489. inwarecode,
  3490. inprintid,
  3491. cusid,
  3492. fpgrade,
  3493. waredate,
  3494. opdate,
  3495. opemp)
  3496. VALUES
  3497. (:ll_assignid,
  3498. 1,
  3499. :arg_scid,
  3500. :arg_mtrlwareid_task,
  3501. :arg_mtrlid_task,
  3502. :arg_Relbillid,
  3503. :arg_relprintid,
  3504. :arg_relbillcode,
  3505. :arg_fpqty,
  3506. :arg_cost,
  3507. :arg_fpqty * :arg_cost,
  3508. :arg_dscrp,
  3509. :arg_mtrlcuscode,
  3510. '',
  3511. 0,
  3512. :arg_cusid_task,
  3513. :arg_fpgrade,
  3514. getdate(),
  3515. getdate(),
  3516. :arg_opemp) Using commit_transaction;
  3517. IF commit_transaction.SQLCode <> 0 THEN
  3518. arg_msg = '分配库存失败,'+commit_transaction.SQLErrText
  3519. rslt = 0
  3520. GOTO ext
  3521. END IF
  3522. END IF
  3523. ELSE
  3524. arg_msg = '订单:'+arg_relbillcode+',明细行:'+String(arg_relprintid)+'更新订单包件产品已分配数失败,'+commit_transaction.SQLErrText
  3525. rslt = 0
  3526. GOTO ext
  3527. END IF
  3528. UPDATE u_mtrlware
  3529. SET u_mtrlware.allocqty = u_mtrlware.allocqty + :arg_fpqty
  3530. WHERE u_mtrlware.mtrlwareid = :arg_mtrlwareid_task
  3531. And u_mtrlware.scid = :arg_scid Using commit_transaction;
  3532. IF commit_transaction.SQLCode <> 0 THEN
  3533. arg_msg = '更新包件产品库存已分配数量失败,'+commit_transaction.SQLErrText
  3534. rslt = 0
  3535. GOTO ext
  3536. END IF
  3537. ext:
  3538. IF rslt = 0 THEN
  3539. ROLLBACK Using commit_transaction;
  3540. ELSEIF rslt = 1 And arg_ifcommit THEN
  3541. COMMIT Using commit_transaction;
  3542. END IF
  3543. RETURN rslt
  3544. end function
  3545. public function integer uof_clear_barcodefp (ref string arg_barcode, string arg_msg, boolean arg_ifcommit);Int rslt = 1
  3546. UPDATE u_mtrlware_mx
  3547. SET relbillid = 0,
  3548. relprintid = 0,
  3549. relbillcode = ''
  3550. WHERE u_mtrlware_mx.barcode = :arg_barcode
  3551. Using commit_transaction;
  3552. IF commit_transaction.SQLCode = 100 THEN
  3553. arg_msg = '取消条码:'+arg_barcode+',订单分配信息失败,'+commit_transaction.SQLErrText
  3554. rslt = 0
  3555. GOTO ext
  3556. END IF
  3557. ext:
  3558. IF rslt = 0 THEN
  3559. ROLLBACK Using commit_transaction;
  3560. ELSEIF rslt = 1 And arg_ifcommit THEN
  3561. COMMIT Using commit_transaction;
  3562. END IF
  3563. RETURN rslt
  3564. end function
  3565. on uo_mtrlware_assign.create
  3566. call super::create
  3567. TriggerEvent( this, "constructor" )
  3568. end on
  3569. on uo_mtrlware_assign.destroy
  3570. TriggerEvent( this, "destructor" )
  3571. call super::destroy
  3572. end on
  3573. event constructor;commit_transaction = sqlca
  3574. String str_optionvalue,arg_msg
  3575. f_get_sys_option_value('289',str_optionvalue,arg_msg)
  3576. uo_option_packpro2_not_use_pack1 = Long(str_optionvalue)
  3577. f_get_sys_option_value('290',str_optionvalue,arg_msg)
  3578. uo_option_iffp_recmpl_canuseqty = Long(str_optionvalue)
  3579. f_get_sys_option_value('417',str_optionvalue,arg_msg)
  3580. uo_option_canpack_ifzanyong = Long(str_optionvalue)
  3581. end event