1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905 |
- $PBExportHeader$uo_partbarcode.sru
- forward
- global type uo_partbarcode from nonvisualobject
- end type
- type s_p_barcode from structure within uo_partbarcode
- end type
- type s_p_tree from structure within uo_partbarcode
- end type
- type s_p_order_ml from structure within uo_partbarcode
- end type
- type s_p_mtrlware_mx from structure within uo_partbarcode
- end type
- type s_p_getbar from structure within uo_partbarcode
- end type
- end forward
- type s_p_barcode from structure
- long scid
- long orderid
- long printid
- long pid
- string barcode
- long swkpid
- long owkpid
- long sflag
- long oflag
- decimal ptqty
- long inflag
- decimal qty
- string relname
- string partname
- datetime ptdate
- datetime sdate
- end type
- type s_p_tree from structure
- long scid
- long orderid
- long printid
- long swkpid
- long owkpid
- long parentid
- string relname
- string partname
- long ifaccept
- s_p_barcode barcodes[]
- end type
- type s_p_order_ml from structure
- long scid
- long orderid
- long mtrlid
- string status_mode
- string woodcode
- string pcode
- end type
- type s_p_mtrlware_mx from structure
- string barcode
- long getbarid
- decimal packqty
- long qty
- long inflag
- long scid
- long orderid
- end type
- type s_p_getbar from structure
- long getbarid
- long scid
- long orderid
- long ifrel
- long storageid
- long cusid
- string plancode
- string mtrlcuscode
- string location
- end type
- global type uo_partbarcode from nonvisualobject
- end type
- global uo_partbarcode uo_partbarcode
- forward prototypes
- private function integer pf_getbarcodes (string arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_getchild (long arg_scid, long arg_orderid, long arg_printid, ref s_p_tree arg_trees[], ref string arg_msg)
- private function integer pf_checklast (long arg_scid, long arg_orderid, long arg_swkpid, long arg_owkpid)
- public function integer uf_swap_barcode (string arg_barcode_from, string arg_barcode_to, ref string arg_msg)
- private function integer pf_get_order_ml (long arg_scid, long arg_orderid, ref s_p_order_ml arg_order_ml, ref string arg_msg)
- public function integer pf_exclude_barcode (s_p_barcode arg_s_barcode, ref string arg_msg)
- public function integer pf_barcode_pt_cancel (s_p_barcode arg_s_barcode, ref string arg_msg)
- private function integer pf_get_canpt (long arg_scid, long arg_orderid, long arg_printid, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_get_haspt (long arg_scid, long arg_orderid, long arg_printid, datetime arg_ptdate, ref s_p_barcode arg_bars[], ref string arg_msg)
- public function integer pf_include_barcode (s_p_barcode arg_s_barcode, ref string arg_msg)
- private function integer pf_swap_child_internal (s_p_barcode arg_barcode_from, s_p_barcode arg_barcode_to, long arg_ex_printid, ref string arg_msg)
- private function integer pf_get_hasin (long arg_scid, long arg_orderid, long arg_printid, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_swap_barcodes_internal (s_p_barcode arg_barcode_from[], s_p_barcode arg_barcode_to[], ref string arg_msg)
- public function integer uf_finish_barcode (long arg_swkpid, string arg_barcode, string arg_emp, datetime arg_date, long arg_workgroupid, boolean arg_replace, ref string arg_msg, boolean arg_ifcommit)
- private function integer pf_try_replace (long arg_curindex, ref s_p_barcode arg_s_barcodes[], ref string arg_msg)
- private function integer pf_savepoint (ref string arg_tran, ref string arg_msg)
- public function integer pf_rollback (string arg_tran, ref string arg_msg)
- private function integer pf_get_canswap (s_p_barcode arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_get_canin_other (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_get_notin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
- private function integer pf_get_canin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
- public function integer uf_o_barcode (long arg_owkpid, string arg_barcode, string arg_emp, datetime arg_date, ref string arg_msg, boolean arg_ifcommit)
- private function integer pf_get_barcode_last (string arg_barcode, ref s_p_mtrlware_mx arg_bar, ref string arg_msg)
- public function integer pf_get_getbar (long arg_getbarid, ref s_p_getbar arg_s_getbar, ref string arg_msg)
- public function integer uf_finish_barcode_last (long arg_wrkgrpid, string arg_barcode, datetime arg_date, boolean arg_replace, ref string arg_msg, boolean arg_ifcommit)
- private function integer pf_try_replace_last (ref s_p_mtrlware_mx arg_barcode, ref string arg_msg)
- public function integer pf_get_canswap_last (s_p_mtrlware_mx arg_barcode, ref s_p_mtrlware_mx arg_mxs[], ref string arg_msg)
- private function integer pf_barcode_pt (s_p_barcode arg_s_barcode, ref string arg_msg)
- public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_swkpid, ref string arg_msg, boolean arg_ifcommit)
- private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_swkpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
- private function integer pf_getparner (long arg_scid, long arg_orderid, long arg_swkpid, ref s_p_tree arg_trees[], ref string arg_msg)
- end prototypes
- private function integer pf_getbarcodes (string arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg);// 获取一条线的部件条码 order by printid
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- string relname, partname
- datetime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE barcode = :arg_barcode
- Order By printid;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- private function integer pf_getchild (long arg_scid, long arg_orderid, long arg_printid, ref s_p_tree arg_trees[], ref string arg_msg);// DONE: 获取子工艺路线
- Int rslt = 1
- s_p_tree arr_trees[]
- Long i = 0
- Long scid,orderid,printid,swkpid,owkpid,parentid,ifaccept
- String relname,partname
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, swkpid, owkpid, parentid, relname, partname, ifaccept
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND parentid = :arg_printid
- AND if_barcode = 1
- Order By printid;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_trees[i].scid = scid
- arr_trees[i].orderid = orderid
- arr_trees[i].printid = printid
- arr_trees[i].swkpid = swkpid
- arr_trees[i].owkpid = owkpid
- arr_trees[i].parentid = parentid
- arr_trees[i].relname = relname
- arr_trees[i].partname = partname
- arr_trees[i].ifaccept = ifaccept
- FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
- LOOP
- CLOSE cur1;
- arg_trees = arr_trees
- RETURN rslt
- end function
- private function integer pf_checklast (long arg_scid, long arg_orderid, long arg_swkpid, long arg_owkpid);Int rslt = 1
- Long printid, arr_printid[]
- Long i = 0
- DECLARE cur1 CURSOR FOR SELECT printid FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND swkpid = :arg_swkpid
- And owkpid = :arg_owkpid;
- OPEN cur1;
- FETCH cur1 Into :printid;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_printid[i] = printid
- FETCH cur1 Into :printid;
- LOOP
- CLOSE cur1;
- Long parentid, swkpid
- FOR i = 1 To UpperBound(arr_printid)
- printid = arr_printid[i]
- SELECT parentid
- INTO :parentid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And printid = :printid;
- IF sqlca.SQLCode <> 0 THEN
- parentid = 0
- END IF
-
- DO WHILE parentid > 0
- SELECT swkpid
- INTO :swkpid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And printid = :parentid;
- IF sqlca.SQLCode <> 0 THEN
- swkpid = 0
- END IF
-
- IF swkpid = arg_swkpid THEN
- rslt = 0
- GOTO ext
- END IF
-
- SELECT parentid
- INTO :parentid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And printid = :parentid;
- IF sqlca.SQLCode <> 0 THEN
- parentid = 0
- END IF
-
- LOOP
-
- NEXT
- ext:
- RETURN rslt
- end function
- public function integer uf_swap_barcode (string arg_barcode_from, string arg_barcode_to, ref string arg_msg);// DONE: 交换条码的主计划
- Int rslt = 1
- s_p_barcode arr_barcode_from[], arr_barcode_to[]
- IF pf_getbarcodes(arg_barcode_from, Ref arr_barcode_from, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF pf_getbarcodes(arg_barcode_to, Ref arr_barcode_to, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_barcode_from) <> UpperBound(arr_barcode_to) THEN
- rslt = 0
- arg_msg = '1.工艺路线不兼容'
- GOTO ext
- END IF
- Long i
- FOR i = 1 To UpperBound(arr_barcode_from)
- IF arr_barcode_from[i].scid = arr_barcode_to[i].scid And arr_barcode_from[i].orderid = arr_barcode_to[i].orderid THEN
- rslt = 0
- arg_msg = '属于同一主计划不能交换'
- GOTO ext
- END IF
-
- IF arr_barcode_from[i].swkpid <> arr_barcode_to[i].swkpid &
- Or arr_barcode_from[i].owkpid <> arr_barcode_to[i].owkpid &
- Or arr_barcode_from[i].relname <> arr_barcode_to[i].relname &
- Or arr_barcode_from[i].partname <> arr_barcode_to[i].partname THEN
- rslt = 0
- arg_msg = '2.工艺流程不兼容'
- GOTO ext
- END IF
-
- NEXT
- s_p_order_ml s_order_from, s_order_to
- IF pf_get_order_ml(arr_barcode_from[1].scid, arr_barcode_from[1].orderid, Ref s_order_from, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF pf_get_order_ml(arr_barcode_to[1].scid, arr_barcode_to[1].orderid, Ref s_order_to, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF s_order_from.mtrlid <> s_order_to.mtrlid &
- Or s_order_from.status_mode <> s_order_to.status_mode &
- Or s_order_from.woodcode <> s_order_to.woodcode &
- Or s_order_from.pcode <> s_order_to.pcode THEN
- rslt = 0
- arg_msg = '产品或配置不兼容'
- GOTO ext
- END IF
- // 条码兼容进行交换
- IF pf_swap_barcodes_internal(arr_barcode_from, arr_barcode_to, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- IF rslt = 1 THEN
-
- ELSE
- arg_msg = '条码'+arg_barcode_from+'/'+arg_barcode_to+'交换失败,' + arg_msg
- END IF
- RETURN rslt
- end function
- private function integer pf_get_order_ml (long arg_scid, long arg_orderid, ref s_p_order_ml arg_order_ml, ref string arg_msg);Int rslt = 1
- s_p_order_ml s_rslt
- SELECT mtrlid, status_mode, woodcode, pcode
- INTO :s_rslt.mtrlid, :s_rslt.status_mode, :s_rslt.woodcode, :s_rslt.pcode
- FROM u_Order_ml
- WHERE scid = :arg_scid
- And orderid = :arg_orderid;
-
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询主计划信息失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- s_rslt.scid = arg_scid
- s_rslt.orderid = arg_orderid
- arg_order_ml = s_rslt
- ext:
- RETURN rslt
- end function
- public function integer pf_exclude_barcode (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 排除主计划的条码
- Int rslt = 1
- Long ld_step = 100000000
- DO WHILE arg_s_barcode.orderid > ld_step
- ld_step *= 2
- LOOP
- UPDATE u_ordermtrl_workgroup_barcode
- SET scid = scid - :ld_step,
- orderid = orderid - :ld_step
- WHERE barcode = :arg_s_barcode.barcode
- AND printid = :arg_s_barcode.printid
- AND scid = :arg_s_barcode.scid
- And orderid = :arg_s_barcode.orderid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '从主计划去除条码失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows <= 0 THEN
- rslt = 0
- arg_msg = '条码被修改了'
- GOTO ext
- END IF
- IF arg_s_barcode.sflag = 1 THEN
- UPDATE u_OrderMtrl_workgroup_tree
- SET sqty = sqty - :arg_s_barcode.qty
- WHERE scid = :arg_s_barcode.scid
- AND orderid = :arg_s_barcode.orderid
- And printid = :arg_s_barcode.printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消工艺完工数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF arg_s_barcode.oflag = 1 THEN
- UPDATE u_OrderMtrl_workgroup_tree
- SET oqty = oqty - :arg_s_barcode.qty
- WHERE scid = :arg_s_barcode.scid
- AND orderid = :arg_s_barcode.orderid
- And printid = :arg_s_barcode.printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消工艺接收数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
-
- IF arg_s_barcode.ptqty > 0 THEN
- IF pf_barcode_pt_cancel(arg_s_barcode, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- END IF
- ext:
- RETURN rslt
- end function
- public function integer pf_barcode_pt_cancel (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 取消配套条码
- Int rslt = 1
- // 配套更新工组进度
- s_p_tree arr_parners[], arr_temp1[]
- Long i, j
- String ls_tran
- IF pf_getparner(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, Ref arr_parners, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- FOR i = 1 To UpperBound(arr_parners)
- IF arr_parners[i].printid <> arg_s_barcode.printid THEN
- arr_temp1[UpperBound(arr_temp1) + 1] = arr_parners[i]
- END IF
- NEXT
- arr_parners = arr_temp1
- IF UpperBound(arr_parners) <= 0 THEN
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 0,
- ptqty = 0,
- ptdate = NULL
- WHERE barcode = :arg_s_barcode.barcode
- AND printid = :arg_s_barcode.printid
- And ptqty = :arg_s_barcode.ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- IF uof_add_workgroup_qty(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, 0, arg_s_barcode.ptdate, -arg_s_barcode.ptqty, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- GOTO ext
- END IF
- ELSE
-
- FOR i = 1 To UpperBound(arr_parners)
- IF pf_get_haspt(arr_parners[i].scid, arr_parners[i].orderid, arr_parners[i].printid, arg_s_barcode.ptdate, Ref arr_parners[i].barcodes, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_parners[i].barcodes) <= 0 THEN
- GOTO ext
- END IF
- NEXT
-
-
- IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 0,
- ptqty = 0,
- ptdate = NULL
- WHERE barcode = :arg_s_barcode.barcode
- AND printid = :arg_s_barcode.printid
- And ptqty = :arg_s_barcode.ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF sqlca.SQLNRows <= 0 THEN
- GOTO ext
- END IF
-
- Decimal ld_addqty,ld_uqty
-
- FOR i = 1 To UpperBound(arr_parners)
- ld_addqty = arg_s_barcode.ptqty
- FOR j = 1 To UpperBound(arr_parners[i].barcodes)
-
- IF ld_addqty = 0 THEN EXIT
-
- IF ld_addqty >= arr_parners[i].barcodes[j].ptqty THEN
- ld_uqty = arr_parners[i].barcodes[j].ptqty
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 0,
- ptqty = 0,
- ptdate = NULL
- WHERE barcode = :arr_parners[i].barcodes[j].barcode
- AND printid = :arr_parners[i].barcodes[j].printid
- And sflag = 1 And ptqty = :arr_parners[i].barcodes[j].ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- ld_addqty -= ld_uqty
- END IF
- ELSE
- ld_uqty = ld_addqty
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 0,
- ptqty = ptqty - :ld_uqty
- WHERE barcode = :arr_parners[i].barcodes[j].barcode
- AND printid = :arr_parners[i].barcodes[j].printid
- And sflag = 1 And ptqty = :arr_parners[i].barcodes[j].ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- ld_addqty -= ld_uqty
- END IF
- END IF
- NEXT
- IF ld_addqty <> 0 THEN
- GOTO _cancel
- END IF
- NEXT
-
- IF uof_add_workgroup_qty(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, 0, arg_s_barcode.ptdate, -arg_s_barcode.ptqty, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- GOTO ext
-
- _cancel:
- IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- private function integer pf_get_canpt (long arg_scid, long arg_orderid, long arg_printid, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取可配套的部件条码
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- String relname,partname
- DateTime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arg_printid
- AND sflag = 1 AND ptqty < qty AND ptflag = 0
- Order By sdate;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- private function integer pf_get_haspt (long arg_scid, long arg_orderid, long arg_printid, datetime arg_ptdate, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取已配套的部件条码
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- String relname,partname
- DateTime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arg_printid
- AND sflag = 1 AND ptqty > 0
- AND ptdate = :arg_ptdate
- UNION
- SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arg_printid
- AND sflag = 1 AND ptqty > 0
- And ptdate > :arg_ptdate
- UNION
- SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arg_printid
- AND sflag = 1 AND ptqty > 0
- And ptdate < :arg_ptdate;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- public function integer pf_include_barcode (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 添加主计划的条码
- Int rslt = 1
- UPDATE u_ordermtrl_workgroup_barcode
- SET scid = :arg_s_barcode.scid,
- orderid = :arg_s_barcode.orderid
- WHERE barcode = :arg_s_barcode.barcode
- And printid = :arg_s_barcode.printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '主计划添加条码失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF arg_s_barcode.sflag = 1 THEN
- UPDATE u_OrderMtrl_workgroup_tree
- SET sqty = sqty + :arg_s_barcode.qty
- WHERE scid = :arg_s_barcode.scid
- AND orderid = :arg_s_barcode.orderid
- And printid = :arg_s_barcode.printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '添加工艺完工数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF arg_s_barcode.oflag = 1 THEN
- UPDATE u_OrderMtrl_workgroup_tree
- SET oqty = oqty + :arg_s_barcode.qty
- WHERE scid = :arg_s_barcode.scid
- AND orderid = :arg_s_barcode.orderid
- And printid = :arg_s_barcode.printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '添加工艺接收数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
-
- IF pf_barcode_pt(arg_s_barcode, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- ext:
- RETURN rslt
- end function
- private function integer pf_swap_child_internal (s_p_barcode arg_barcode_from, s_p_barcode arg_barcode_to, long arg_ex_printid, ref string arg_msg);// DONE: 查找下级并替换
- Int rslt = 1
- IF arg_barcode_from.sflag <> 1 THEN
- rslt = 0
- arg_msg = '第一个条码必须完成'
- GOTO ext
- END IF
- IF arg_barcode_to.sflag <> 0 THEN
- rslt = 0
- arg_msg = '第二个条码必须未完成'
- GOTO ext
- END IF
- s_p_tree arr_tree_from[], arr_tree_to[]
- IF pf_getchild(arg_barcode_from.scid, arg_barcode_from.orderid, arg_barcode_from.printid, Ref arr_tree_from, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF pf_getchild(arg_barcode_to.scid, arg_barcode_to.orderid, arg_barcode_to.printid, Ref arr_tree_to, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_tree_from) <> UpperBound(arr_tree_to) THEN
- rslt = 0
- arg_msg = '工艺路线不兼容'
- GOTO ext
- END IF
- Long i, j, k
- String ls_tran1
- FOR i = 1 To UpperBound(arr_tree_from)
- IF arr_tree_from[i].printid <> arr_tree_to[i].printid &
- Or arr_tree_from[i].swkpid <> arr_tree_to[i].swkpid &
- Or arr_tree_from[i].owkpid <> arr_tree_to[i].owkpid &
- Or arr_tree_from[i].relname <> arr_tree_to[i].relname &
- Or arr_tree_from[i].partname <> arr_tree_to[i].partname THEN
- rslt = 0
- arg_msg = '工艺路线不兼容'
- GOTO ext
- END IF
- NEXT
- s_p_barcode arr_barcode_from[], arr_barcode_to[]
- FOR i = 1 To UpperBound(arr_tree_from)
-
- IF arr_tree_from[i].printid = arg_ex_printid THEN CONTINUE
-
- IF pf_get_hasin(arr_tree_from[i].scid, arr_tree_from[i].orderid, arr_tree_from[i].printid, Ref arr_tree_from[i].barcodes, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF UpperBound(arr_tree_from[i].barcodes) <= 0 THEN
- rslt = 0
- arg_msg = '没有已组装部件'
- GOTO ext
- END IF
-
- IF pf_get_canin(arr_tree_to[i], Ref arr_tree_to[i].barcodes, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF UpperBound(arr_tree_to[i].barcodes) <= 0 THEN
- rslt = 0
- arg_msg = '没有待组装部件'
- GOTO ext
- END IF
-
- FOR j = 1 To UpperBound(arr_tree_from[i].barcodes)
- FOR k = 1 To UpperBound(arr_tree_to[i].barcodes)
-
- IF pf_getbarcodes(arr_tree_from[i].barcodes[j].barcode, Ref arr_barcode_from, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF pf_getbarcodes(arr_tree_to[i].barcodes[k].barcode, Ref arr_barcode_to, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF pf_savepoint(Ref ls_tran1, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF pf_swap_barcodes_internal(arr_barcode_from, arr_barcode_to, Ref arg_msg) <> 1 THEN
- IF pf_rollback(ls_tran1, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- CONTINUE
- END IF
-
- EXIT
-
- NEXT
-
- IF k <= UpperBound(arr_tree_to[i].barcodes) THEN
- EXIT
- END IF
-
- NEXT
-
- IF j > UpperBound(arr_tree_from[i].barcodes) THEN
- rslt = 0
- arg_msg = '交换已组装部件与未组装部件失败'
- GOTO ext
- END IF
-
- NEXT
- ext:
- RETURN rslt
- end function
- private function integer pf_get_hasin (long arg_scid, long arg_orderid, long arg_printid, ref s_p_barcode arg_bars[], ref string arg_msg);// DOEN: 获取已组装的部件条码
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- string relname,partname
- datetime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arg_printid
- AND inflag = 1;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- private function integer pf_swap_barcodes_internal (s_p_barcode arg_barcode_from[], s_p_barcode arg_barcode_to[], ref string arg_msg);// DONE: 交换条码
- Int rslt = 1
- Long i
- Long scid, orderid, ex_printid
- FOR i = UpperBound(arg_barcode_from) To 1 Step -1
- IF pf_exclude_barcode(arg_barcode_from[i], Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF pf_exclude_barcode(arg_barcode_to[i], Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- ex_printid = 0
- IF i < UpperBound(arg_barcode_from) THEN
- ex_printid = arg_barcode_from[i+1].printid
- END IF
- IF arg_barcode_from[i].sflag = 1 And arg_barcode_to[i].sflag = 0 THEN
- IF pf_swap_child_internal(arg_barcode_from[i], arg_barcode_to[i], ex_printid, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- ELSEIF arg_barcode_from[i].sflag = 0 And arg_barcode_to[i].sflag = 1 THEN
- IF pf_swap_child_internal(arg_barcode_to[i], arg_barcode_from[i], ex_printid, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
-
- scid = arg_barcode_from[i].scid
- orderid = arg_barcode_from[i].orderid
- arg_barcode_from[i].scid = arg_barcode_to[i].scid
- arg_barcode_from[i].orderid = arg_barcode_to[i].orderid
- arg_barcode_to[i].scid = scid
- arg_barcode_to[i].orderid = orderid
-
- IF pf_include_barcode(arg_barcode_from[i], Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF pf_include_barcode(arg_barcode_to[i], Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- NEXT
- ext:
- RETURN rslt
- end function
- public function integer uf_finish_barcode (long arg_swkpid, string arg_barcode, string arg_emp, datetime arg_date, long arg_workgroupid, boolean arg_replace, ref string arg_msg, boolean arg_ifcommit);// 部件条码完工
- Int rslt = 1
- s_p_barcode arr_curbars[]
- IF pf_getbarcodes(arg_barcode, Ref arr_curbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_curbars) = 0 THEN
- rslt = 0
- arg_msg = '条码不存在'
- GOTO ext
- END IF
- Long i, j, k, cur_index = 0
- FOR i = UpperBound(arr_curbars) To 1 Step -1
- IF arr_curbars[i].swkpid = arg_swkpid THEN
- cur_index = i
- IF arr_curbars[i].sflag = 0 THEN EXIT
- END IF
- NEXT
- IF cur_index = 0 THEN
- rslt = 0
- arg_msg = '条码不经过本工组'
- GOTO ext
- END IF
- IF arr_curbars[cur_index].sflag = 1 THEN
- rslt = 0
- arg_msg = '条码已经完工'
- GOTO ext
- END IF
- Long ifaccept = 1, parentid, cnt
- IF cur_index + 1 <= UpperBound(arr_curbars) THEN
-
- SELECT ifaccept,parentid
- INTO :ifaccept,:parentid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arr_curbars[cur_index + 1].scid
- AND orderid = :arr_curbars[cur_index + 1].orderid
- And printid = :arr_curbars[cur_index + 1].printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询条码是否需要接收失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF parentid = arr_curbars[cur_index].printid THEN
-
- IF ifaccept = 1 THEN
- IF arr_curbars[cur_index + 1].oflag <> 1 THEN
- rslt = 0
- arg_msg = '条码未接收'
- GOTO ext
- END IF
- END IF
-
- IF arr_curbars[cur_index + 1].sflag <> 1 THEN
- rslt = 0
- arg_msg = '条码上工组未完工'
- GOTO ext
- END IF
-
-
- // 更新上工艺组装标记
- UPDATE u_ordermtrl_workgroup_barcode
- SET inflag = 1
- WHERE barcode = :arr_curbars[cur_index + 1].barcode
- AND printid = :arr_curbars[cur_index + 1].printid
- And inflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新组装标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows = 0 THEN
- rslt = 0
- arg_msg = '另一个任务更新了组装标记,本任务终止'
- GOTO ext
- END IF
- END IF
- END IF
- IF arg_replace THEN
- IF pf_try_replace(cur_index, Ref arr_curbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- // 获取其它工艺分支
- s_p_tree arr_children[], arr_temp[]
- IF pf_getchild(arr_curbars[cur_index].scid, arr_curbars[cur_index].orderid, arr_curbars[cur_index].printid, Ref arr_children, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF cur_index + 1 <= UpperBound(arr_curbars) THEN
- FOR i = 1 To UpperBound(arr_children)
- IF arr_children[i].printid <> arr_curbars[cur_index + 1].printid THEN
- arr_temp[UpperBound(arr_temp) + 1] = arr_children[i]
- END IF
- NEXT
- arr_children = arr_temp
- END IF
- s_p_barcode arr_lastbars[], arr_notinbars[]
- String ls_tran, ls_tran2
- FOR i = 1 To UpperBound(arr_children)
- IF pf_get_canin(arr_children[i], Ref arr_lastbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF UpperBound(arr_lastbars) <= 0 THEN
- IF arg_replace THEN
- // DONE: 查找其它主计划的可组装部件
- IF pf_get_canin_other(arr_children[i], Ref arr_lastbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_lastbars) <= 0 THEN
- rslt = 0
- arg_msg = '1.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
- GOTO ext
- END IF
- IF pf_get_notin(arr_children[i], Ref arr_notinbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_notinbars) <= 0 THEN
- rslt = 0
- arg_msg = '2.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
- GOTO ext
- END IF
-
- ELSE
- rslt = 0
- arg_msg = '3.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
- GOTO ext
- END IF
- END IF
-
- FOR j = 1 To UpperBound(arr_lastbars)
- IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- // 更新上工艺组装标记
- UPDATE u_ordermtrl_workgroup_barcode
- SET inflag = 1
- WHERE barcode = :arr_lastbars[j].barcode
- AND printid = :arr_lastbars[j].printid
- And inflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '部件'+arr_children[i].relname+':'+arr_children[i].partname+'更新组装标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
-
- IF arr_lastbars[j].scid <> arr_children[i].scid Or arr_lastbars[j].orderid <> arr_children[i].orderid THEN
- // DONE: 交换条码
- FOR k = 1 To UpperBound(arr_notinbars)
- IF pf_savepoint(Ref ls_tran2, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF uf_swap_barcode(arr_lastbars[j].barcode, arr_notinbars[k].barcode, Ref arg_msg) <> 1 THEN
- IF pf_rollback(ls_tran2, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- CONTINUE
- END IF
- EXIT
- NEXT
-
- IF k > UpperBound(arr_notinbars) THEN
- IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- CONTINUE
- END IF
-
- END IF
-
- EXIT
- END IF
- NEXT
-
- IF j > UpperBound(arr_lastbars) THEN
- rslt = 0
- arg_msg = '4.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足,已被占用'
- GOTO ext
- END IF
-
- NEXT
- UPDATE u_ordermtrl_workgroup_barcode
- SET sflag = 1,
- sdate = :arg_date,
- semp = :arg_emp,
- workgroupid = :arg_workgroupid
- WHERE barcode = :arr_curbars[cur_index].barcode
- AND printid = :arr_curbars[cur_index].printid
- And sflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新部件条码完工标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows <= 0 THEN
- rslt = 0
- arg_msg = '另一个任务更新了部件条码完工标记,本任务终止'
- GOTO ext
- END IF
- UPDATE u_OrderMtrl_workgroup_tree
- SET u_ordermtrl_workgroup_tree.sqty =
- case when u_ordermtrl_workgroup_tree.sqty + :arr_curbars[cur_index].qty >
- u_ordermtrl_workgroup_tree.orderqty
- then u_ordermtrl_workgroup_tree.orderqty
- else u_ordermtrl_workgroup_tree.sqty + :arr_curbars[cur_index].qty END,
- u_ordermtrl_workgroup_tree.sdate = :arg_date
- WHERE scid = :arr_curbars[cur_index].scid
- AND orderid = :arr_curbars[cur_index].orderid
- And printid = :arr_curbars[cur_index].printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新工艺路线完成数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- arr_curbars[cur_index].sdate = arg_date
- IF pf_barcode_pt(arr_curbars[cur_index], Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- SELECT ifaccept
- INTO :ifaccept
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arr_curbars[cur_index].scid
- AND orderid = :arr_curbars[cur_index].orderid
- And printid = :arr_curbars[cur_index].printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询本条码是否需要接收失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ifaccept = 0 THEN //条码不用接收,完工后自动接收
-
- SELECT COUNT(0)
- INTO :cnt
- FROM u_order_wkp_barcode_pda
- WHERE barcode = :arr_curbars[cur_index].barcode
- AND wrkgrpid = :arr_curbars[cur_index].owkpid
- And Kind = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询PDA已扫部件条码失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF cnt <= 0 THEN
- INSERT INTO u_order_wkp_barcode_pda(barcode,wrkgrpid,kind,flag,opemp,opdate)
- Values(:arr_curbars[cur_index].barcode,:arr_curbars[cur_index].owkpid,1,1,:arg_emp,:arg_date);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入PDA已扫部件条码失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ELSE
- UPDATE u_order_wkp_barcode_pda
- SET flag = 1
- WHERE barcode = :arr_curbars[cur_index].barcode
- AND wrkgrpid = :arr_curbars[cur_index].owkpid
- AND Kind = 1
- And flag <> 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更改PDA已扫部件条码处理标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
-
- IF sqlca.SQLNRows > 0 THEN
- IF uf_o_barcode(arr_curbars[cur_index].owkpid, arr_curbars[cur_index].barcode, arg_emp, arg_date, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
-
- END IF
- ext:
- IF arg_ifcommit THEN
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- arg_msg = 'swkpid:'+String(arg_swkpid)+'/barcode:'+arg_barcode+':'+arg_msg
- END IF
- END IF
- RETURN rslt
- end function
- private function integer pf_try_replace (long arg_curindex, ref s_p_barcode arg_s_barcodes[], ref string arg_msg);// DONE: 尝试替换
- Int rslt = 1
- s_p_barcode arr_bars_early[]
- IF pf_get_canswap(arg_s_barcodes[arg_curindex], Ref arr_bars_early, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- Long i, j
- String ls_tran
- FOR i = 1 To UpperBound(arr_bars_early)
-
- IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- IF uf_swap_barcode(arr_bars_early[i].barcode, arg_s_barcodes[arg_curindex].barcode, Ref arg_msg) <> 1 THEN
- IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- CONTINUE
- END IF
-
- FOR j = 1 To UpperBound(arg_s_barcodes)
- arg_s_barcodes[j].scid = arr_bars_early[i].scid
- arg_s_barcodes[j].orderid = arr_bars_early[i].orderid
- NEXT
-
- GOTO ext
-
- NEXT
- ext:
- RETURN rslt
- end function
- private function integer pf_savepoint (ref string arg_tran, ref string arg_msg);Int rslt = 1
- SELECT top 1 name
- INTO :arg_tran
- From (SELECT Replace(NEWID(), '-', '') as Name) a;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询事务唯一码失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- String cmd
- cmd = "SAVE TRANSACTION [" + arg_tran + "]"
- EXECUTE Immediate :cmd;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '保存事务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- public function integer pf_rollback (string arg_tran, ref string arg_msg);Int rslt = 1
- String cmd
- cmd = "ROLLBACK TRANSACTION [" + arg_tran + "]"
- EXECUTE Immediate :cmd;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '回滚事务失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- RETURN rslt
- end function
- private function integer pf_get_canswap (s_p_barcode arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg);Int rslt = 1
- s_p_order_ml order_ml
- IF pf_get_order_ml(arg_barcode.scid, arg_barcode.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- DateTime ld_rqdate
- SELECT top 1 requiredate
- INTO :ld_rqdate
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_barcode.scid
- AND orderid = :arg_barcode.orderid
- AND wrkGrpid = :arg_barcode.swkpid
- Order By requiredate;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询本条码需求日期失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- String relname,partname
- DateTime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT TOP 10 u_ordermtrl_workgroup_barcode.scid,
- u_ordermtrl_workgroup_barcode.orderid,
- u_ordermtrl_workgroup_barcode.printid,
- u_ordermtrl_workgroup_barcode.pid,
- u_ordermtrl_workgroup_barcode.barcode,
- u_ordermtrl_workgroup_barcode.swkpid,
- u_ordermtrl_workgroup_barcode.owkpid,
- u_ordermtrl_workgroup_barcode.sflag,
- u_ordermtrl_workgroup_barcode.oflag,
- u_ordermtrl_workgroup_barcode.ptqty,
- u_ordermtrl_workgroup_barcode.inflag,
- u_ordermtrl_workgroup_barcode.qty,
- u_ordermtrl_workgroup_barcode.relname,
- u_ordermtrl_workgroup_barcode.partname,
- u_ordermtrl_workgroup_barcode.ptdate,
- u_ordermtrl_workgroup_barcode.sdate
- FROM u_ordermtrl_workgroup_barcode INNER JOIN
- u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
- u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
- u_OrderMtrl_workgroup ON
- u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
- u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
- u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
- WHERE u_Order_ml.mtrlid = :order_ml.mtrlid AND
- u_Order_ml.status_mode = :order_ml.status_mode AND
- u_Order_ml.woodcode = :order_ml.woodcode AND
- u_Order_ml.pcode = :order_ml.pcode AND
- u_ordermtrl_workgroup_barcode.swkpid = :arg_barcode.swkpid AND
- u_ordermtrl_workgroup_barcode.owkpid = :arg_barcode.owkpid AND
- u_ordermtrl_workgroup_barcode.relname = :arg_barcode.relname AND
- u_ordermtrl_workgroup_barcode.partname = :arg_barcode.partname AND
- u_ordermtrl_workgroup_barcode.printid = :arg_barcode.printid AND
- u_ordermtrl_workgroup_barcode.orderid > 0 AND
- (u_ordermtrl_workgroup_barcode.orderid <> :arg_barcode.orderid OR
- u_ordermtrl_workgroup_barcode.scid <> :arg_barcode.scid) AND
- u_OrderMtrl_workgroup.requiredate < :ld_rqdate AND
- u_ordermtrl_workgroup_barcode.sflag = 0 AND
- u_Order_ml.status = 1
- Order By u_OrderMtrl_workgroup.requiredate;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- ext:
- RETURN rslt
- end function
- private function integer pf_get_canin_other (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg);Int rslt = 1
- s_p_order_ml order_ml
- IF pf_get_order_ml(arg_tree.scid, arg_tree.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- String relname,partname
- DateTime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT TOP 10 u_ordermtrl_workgroup_barcode.scid,
- u_ordermtrl_workgroup_barcode.orderid,
- u_ordermtrl_workgroup_barcode.printid,
- u_ordermtrl_workgroup_barcode.pid,
- u_ordermtrl_workgroup_barcode.barcode,
- u_ordermtrl_workgroup_barcode.swkpid,
- u_ordermtrl_workgroup_barcode.owkpid,
- u_ordermtrl_workgroup_barcode.sflag,
- u_ordermtrl_workgroup_barcode.oflag,
- u_ordermtrl_workgroup_barcode.ptqty,
- u_ordermtrl_workgroup_barcode.inflag,
- u_ordermtrl_workgroup_barcode.qty,
- u_ordermtrl_workgroup_barcode.relname,
- u_ordermtrl_workgroup_barcode.partname,
- u_ordermtrl_workgroup_barcode.ptdate,
- u_ordermtrl_workgroup_barcode.sdate
- FROM u_ordermtrl_workgroup_barcode INNER JOIN
- u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
- u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
- u_OrderMtrl_workgroup_tree ON
- u_OrderMtrl_workgroup_tree.scid = u_ordermtrl_workgroup_barcode.scid AND
- u_OrderMtrl_workgroup_tree.orderid = u_ordermtrl_workgroup_barcode.orderid AND
- u_OrderMtrl_workgroup_tree.printid = u_ordermtrl_workgroup_barcode.printid
- WHERE u_Order_ml.mtrlid = :order_ml.mtrlid AND
- u_Order_ml.status_mode = :order_ml.status_mode AND
- u_Order_ml.woodcode = :order_ml.woodcode AND
- u_Order_ml.pcode = :order_ml.pcode AND
- u_ordermtrl_workgroup_barcode.swkpid = :arg_tree.swkpid AND
- u_ordermtrl_workgroup_barcode.owkpid = :arg_tree.owkpid AND
- u_ordermtrl_workgroup_barcode.relname = :arg_tree.relname AND
- u_ordermtrl_workgroup_barcode.partname = :arg_tree.partname AND
- u_ordermtrl_workgroup_barcode.printid = :arg_tree.printid AND
- u_ordermtrl_workgroup_barcode.orderid > 0 AND
- (u_ordermtrl_workgroup_barcode.orderid <> :arg_tree.orderid OR
- u_ordermtrl_workgroup_barcode.scid <> :arg_tree.scid) AND
- u_ordermtrl_workgroup_barcode.sflag = 1 AND
- u_OrderMtrl_workgroup_tree.ifaccept = :arg_tree.ifaccept AND
- (u_ordermtrl_workgroup_barcode.oflag = 1 AND :arg_tree.ifaccept = 1 OR :arg_tree.ifaccept = 0) AND
- u_ordermtrl_workgroup_barcode.inflag = 0 AND
- u_Order_ml.status = 1;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- ext:
- RETURN rslt
- end function
- private function integer pf_get_notin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取可组装的部件条码
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- string relname,partname
- datetime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_tree.scid
- AND orderid = :arg_tree.orderid
- AND printid = :arg_tree.printid
- AND inflag = 0;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- private function integer pf_get_canin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取可组装的部件条码
- Int rslt = 1
- s_p_barcode arr_bars[]
- Long i = 0
- Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
- decimal ptqty
- String barcode
- string relname,partname
- datetime ptdate,sdate
- Decimal qty
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_tree.scid
- AND orderid = :arg_tree.orderid
- AND printid = :arg_tree.printid
- AND (oflag = 1 AND :arg_tree.ifaccept = 1 OR :arg_tree.ifaccept = 0) AND inflag = 0;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_bars[i].scid = scid
- arr_bars[i].orderid = orderid
- arr_bars[i].printid = printid
- arr_bars[i].pid = pid
- arr_bars[i].barcode = barcode
- arr_bars[i].swkpid = swkpid
- arr_bars[i].owkpid = owkpid
- arr_bars[i].sflag = sflag
- arr_bars[i].oflag = oflag
- arr_bars[i].ptqty = ptqty
- arr_bars[i].inflag = inflag
- arr_bars[i].qty = qty
- arr_bars[i].relname = relname
- arr_bars[i].partname = partname
- arr_bars[i].ptdate = ptdate
- arr_bars[i].sdate = sdate
- FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
- LOOP
- CLOSE cur1;
- arg_bars = arr_bars
- RETURN rslt
- end function
- public function integer uf_o_barcode (long arg_owkpid, string arg_barcode, string arg_emp, datetime arg_date, ref string arg_msg, boolean arg_ifcommit);// DONE: 接收条码
- Int rslt = 1
- s_p_barcode arr_curbars[]
- IF pf_getbarcodes(arg_barcode, Ref arr_curbars, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_curbars) = 0 THEN
- rslt = 0
- arg_msg = '条码不存在'
- GOTO ext
- END IF
- Long i, j, k, cur_index = 0
- FOR i = UpperBound(arr_curbars) To 1 Step -1
- IF arr_curbars[i].owkpid = arg_owkpid THEN
- cur_index = i
- IF arr_curbars[i].oflag = 0 THEN EXIT
- END IF
- NEXT
- IF cur_index = 0 THEN
- rslt = 0
- arg_msg = '条码不经过本工组'
- GOTO ext
- END IF
- IF arr_curbars[cur_index].oflag = 1 THEN
- rslt = 0
- arg_msg = '条码已经被接收'
- GOTO ext
- END IF
- IF arr_curbars[cur_index].sflag = 0 THEN
- rslt = 0
- arg_msg = '条码未完成'
- GOTO ext
- END IF
- UPDATE u_ordermtrl_workgroup_barcode
- SET oflag = 1,
- odate = :arg_date,
- oemp = :arg_emp
- WHERE barcode = :arr_curbars[cur_index].barcode
- AND printid = :arr_curbars[cur_index].printid
- And oflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新条码接收标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows <= 0 THEN
- rslt = 0
- arg_msg = '另一个任务更新了条码的接收标记,本任务终止'
- GOTO ext
- END IF
- UPDATE u_OrderMtrl_workgroup_tree
- SET oqty = oqty + :arr_curbars[cur_index].qty,
- odate = :arg_date
- WHERE scid = :arr_curbars[cur_index].scid
- AND orderid = :arr_curbars[cur_index].orderid
- And printid = :arr_curbars[cur_index].printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新工艺进度接收数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF arg_ifcommit THEN
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- arg_msg = 'owkpid:'+String(arg_owkpid)+'/barcode:'+arg_barcode+':'+arg_msg
- END IF
- END IF
- RETURN rslt
- end function
- private function integer pf_get_barcode_last (string arg_barcode, ref s_p_mtrlware_mx arg_bar, ref string arg_msg);
- Int rslt = 1
- s_p_mtrlware_mx s_bar
- SELECT getbarid, packqty, qty, inflag, scid, orderid
- INTO :s_bar.getbarid,:s_bar.packqty,:s_bar.qty,:s_bar.inflag,:s_bar.scid,:s_bar.orderid
- FROM u_mtrlware_mx
- Where barcode = :arg_barcode;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询条码信息失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- s_bar.barcode = arg_barcode
- arg_bar = s_bar
- ext:
- RETURN rslt
- end function
- public function integer pf_get_getbar (long arg_getbarid, ref s_p_getbar arg_s_getbar, ref string arg_msg);// 获取条码生成单
- Int rslt = 1
- s_p_getbar s_getbar
- SELECT scid,orderid,ifrel,storageid,cusid,plancode,mtrlcuscode,location
- INTO :s_getbar.scid,:s_getbar.orderid,:s_getbar.ifrel,:s_getbar.storageid,:s_getbar.cusid,:s_getbar.plancode,:s_getbar.mtrlcuscode,:s_getbar.location
- FROM u_getbar
- Where getbarid = :arg_getbarid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询条码生成单信息失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- s_getbar.getbarid = arg_getbarid
- arg_s_getbar = s_getbar
- ext:
- RETURN rslt
- end function
- public function integer uf_finish_barcode_last (long arg_wrkgrpid, string arg_barcode, datetime arg_date, boolean arg_replace, ref string arg_msg, boolean arg_ifcommit);// DONE: 最后工组完工
- Int rslt = 1
- s_p_mtrlware_mx ware_mx
- IF pf_get_barcode_last(arg_barcode, Ref ware_mx, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF arg_replace THEN
- // DONE: 替换条码
- IF pf_try_replace_last(Ref ware_mx, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- s_p_getbar getbar
- IF pf_get_getbar(ware_mx.getbarid, Ref getbar, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- s_p_order_ml order_ml
- IF pf_get_order_ml(getbar.scid, getbar.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- DateTime ld_f_requiredate
- Long ll_wrkgrpid
- String ls_wkpname
- SELECT top 1 requiredate, wrkgrpid, wkpname
- INTO :ld_f_requiredate,:ll_wrkgrpid,:ls_wkpname
- FROM u_OrderMtrl_workgroup
- WHERE scid = :order_ml.scid
- AND orderid = :order_ml.orderid
- And iflast = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询最后工组需求日期失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_wrkgrpid <> arg_wrkgrpid THEN
- rslt = 0
- arg_msg = '当前完工工组不是最后完工工组'
- GOTO ext
- END IF
- Long printid
- SELECT top 1 printid
- INTO :printid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :order_ml.scid
- AND orderid = :order_ml.orderid
- AND iflast = 1
- And swkpid = :arg_wrkgrpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询最后工艺路线失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- Decimal ld_maxqty
- SELECT IsNull(Min(CASE WHEN ifaccept = 1 THEN oqty ELSE sqty END), 0)
- Into :ld_maxqty
- From u_OrderMtrl_workgroup_tree
- Where scid = :order_ml.scid
- And orderid = :order_ml.orderid
- And parentid = :printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询最后工组可完成数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- Decimal ld_finishqty
- SELECT sqty
- INTO :ld_finishqty
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :order_ml.scid
- AND orderid = :order_ml.orderid
- And printid = :printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询最后工组已完成数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- Decimal ld_packqty
- ld_packqty = ware_mx.packqty * ware_mx.qty
- IF ld_finishqty + ld_packqty > ld_maxqty THEN
- rslt = 0
- arg_msg = '上工组未配套,上工组配套数:' + String(ld_maxqty,'#,##0.#####') + ',已完成数:' + String(ld_finishqty,'#,##0.#####') + ',本次完成数:' + String(ld_packqty,'#,##0.#####')
- GOTO ext
- END IF
- UPDATE u_OrderMtrl_workgroup_tree
- SET sqty = sqty + :ld_packqty,
- sdate = :arg_date
- WHERE scid = :order_ml.scid
- AND orderid = :order_ml.orderid
- And printid = :printid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新最后工艺已完成数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF uof_add_workgroup_qty(order_ml.scid, order_ml.orderid, arg_wrkgrpid, 0, arg_date, ld_packqty, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- ext:
- IF arg_ifcommit THEN
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- arg_msg = 'arg_wrkgrpid:'+String(arg_wrkgrpid)+'/barcode:'+arg_barcode+':'+arg_msg
- END IF
- END IF
- RETURN rslt
- end function
- private function integer pf_try_replace_last (ref s_p_mtrlware_mx arg_barcode, ref string arg_msg);// DONE: 替换条码
- Int rslt = 1
- s_p_mtrlware_mx mxs[]
- IF pf_get_canswap_last(arg_barcode, Ref mxs, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- Long i
- String ls_tran
- FOR i = 1 To UpperBound(mxs)
-
- IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- UPDATE u_mtrlware_mx
- SET getbarid = :mxs[i].getbarid,
- scid = :mxs[i].scid,
- orderid = :mxs[i].orderid
- WHERE barcode = :arg_barcode.barcode
- And getbarid = :arg_barcode.getbarid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更改当前条码的条码生成单失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows <= 0 THEN
- rslt = 0
- arg_msg = '更改当前条码的条码生成单失败,当前条码已变更'
- GOTO ext
- END IF
-
- UPDATE u_mtrlware_mx
- SET getbarid = :arg_barcode.getbarid,
- scid = :arg_barcode.scid,
- orderid = :arg_barcode.orderid
- WHERE barcode = :mxs[i].barcode
- And getbarid = :mxs[i].getbarid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更改被替换条码的条码生成单失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows <= 0 THEN
- IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- CONTINUE
- END IF
-
- arg_barcode.getbarid = mxs[i].getbarid
- arg_barcode.scid = mxs[i].scid
- arg_barcode.orderid = mxs[i].orderid
- EXIT
-
- NEXT
- ext:
- RETURN rslt
- end function
- public function integer pf_get_canswap_last (s_p_mtrlware_mx arg_barcode, ref s_p_mtrlware_mx arg_mxs[], ref string arg_msg);// DONE: 获取可替换条码
- Int rslt = 1
- s_p_mtrlware_mx s_rslt[]
- Long i = 0
- String barcode
- Long getbarid,qty,inflag,scid,orderid
- Decimal packqty
- s_p_getbar getbar
- IF pf_get_getbar(arg_barcode.getbarid, Ref getbar, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- s_p_order_ml order_ml
- IF pf_get_order_ml(getbar.scid, getbar.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- DateTime ld_f_requiredate
- Long ll_wrkgrpid
- String ls_wkpname
- SELECT top 1 requiredate, wrkgrpid, wkpname
- INTO :ld_f_requiredate,:ll_wrkgrpid,:ls_wkpname
- FROM u_OrderMtrl_workgroup
- WHERE scid = :order_ml.scid
- AND orderid = :order_ml.orderid
- And iflast = 1;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询最后工组需求日期失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- DECLARE cur1 CURSOR FOR SELECT top 10 u_mtrlware_mx.barcode,
- u_mtrlware_mx.getbarid,
- u_mtrlware_mx.packqty,
- u_mtrlware_mx.qty,
- u_mtrlware_mx.inflag,
- u_mtrlware_mx.scid,
- u_mtrlware_mx.orderid
- FROM u_mtrlware_mx INNER JOIN
- u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN
- u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN
- u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND
- u_OrderMtrl_workgroup.iflast = 1
- WHERE u_Order_ml.mtrlid = :order_ml.mtrlid
- AND u_Order_ml.status_mode = :order_ml.status_mode
- AND u_order_ml.woodcode = :order_ml.woodcode
- AND u_Order_ml.pcode = :order_ml.pcode
- AND (u_Order_ml.scid <> :order_ml.scid OR u_Order_ml.orderid <> :order_ml.orderid)
- AND u_getbar.getbarid <> :arg_barcode.getbarid
- AND u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :arg_barcode.packqty * :arg_barcode.qty
- AND u_getbar.ifrel = :getbar.ifrel
- AND u_getbar.storageid = :getbar.storageid
- AND u_getbar.cusid = :getbar.cusid
- AND u_getbar.plancode = :getbar.plancode
- AND u_getbar.mtrlcuscode = :getbar.mtrlcuscode
- AND u_getbar.Location = :getbar.location
- AND u_mtrlware_mx.inflag = 0
- AND u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate
- AND u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid
- AND u_OrderMtrl_workgroup.wkpname = :ls_wkpname
- AND u_mtrlware_mx.barcode NOT IN (SELECT barcode FROM u_order_wkp_barcode_pda WHERE kind = 2 AND wrkgrpid = :ll_wrkgrpid)
- Order By u_OrderMtrl_workgroup.requiredate;
- OPEN cur1;
- FETCH cur1 Into :barcode,:getbarid,:packqty,:qty,:inflag,:scid,:orderid;
- DO WHILE sqlca.SQLCode = 0
- i++
- s_rslt[i].barcode = barcode
- s_rslt[i].getbarid = getbarid
- s_rslt[i].packqty = packqty
- s_rslt[i].qty = qty
- s_rslt[i].inflag = inflag
- s_rslt[i].scid = scid
- s_rslt[i].orderid = orderid
- FETCH cur1 Into :barcode,:getbarid,:packqty,:qty,:inflag,:scid,:orderid;
- LOOP
- CLOSE cur1;
- arg_mxs = s_rslt
- ext:
- RETURN rslt
- end function
- private function integer pf_barcode_pt (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 配套条码
- Int rslt = 1
- Long ll_jdtype
- SELECT jdtype
- INTO :ll_jdtype
- FROM u_sc_workgroup
- Where wrkgrpid = :arg_s_barcode.swkpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_jdtype <> 6 THEN
- GOTO ext
- END IF
- // 配套更新工组进度
- s_p_tree arr_parners[], arr_temp1[]
- Long i, j
- String ls_tran
- IF pf_getparner(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, Ref arr_parners, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- FOR i = 1 To UpperBound(arr_parners)
- IF arr_parners[i].printid <> arg_s_barcode.printid THEN
- arr_temp1[UpperBound(arr_temp1) + 1] = arr_parners[i]
- END IF
- NEXT
- arr_parners = arr_temp1
- IF UpperBound(arr_parners) <= 0 THEN
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 1,
- ptqty = ptqty + :arg_s_barcode.qty,
- ptdate = :arg_s_barcode.sdate
- WHERE barcode = :arg_s_barcode.barcode
- AND printid = :arg_s_barcode.printid
- And sflag = 1 And ptflag = 0 And ptqty = :arg_s_barcode.ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- IF uof_add_workgroup_qty(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, 0, arg_s_barcode.sdate, arg_s_barcode.qty, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- GOTO ext
- END IF
- ELSE
-
- Decimal ld_minqty, ld_totalqty
-
- ld_minqty = arg_s_barcode.qty
-
- FOR i = 1 To UpperBound(arr_parners)
- IF pf_get_canpt(arr_parners[i].scid, arr_parners[i].orderid, arr_parners[i].printid, Ref arr_parners[i].barcodes, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- IF UpperBound(arr_parners[i].barcodes) <= 0 THEN
- GOTO ext
- END IF
-
- ld_totalqty = 0
- FOR j = 1 To UpperBound(arr_parners[i].barcodes)
- ld_totalqty += arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty
- NEXT
-
- IF ld_totalqty < ld_minqty THEN
- ld_minqty = ld_totalqty
- END IF
-
- NEXT
-
- IF ld_minqty <= 0 THEN GOTO ext
-
- IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
-
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = case when ptqty + :ld_minqty >= qty then 1 else 0 END,
- ptqty = ptqty + :ld_minqty,
- ptdate = :arg_s_barcode.sdate
- WHERE barcode = :arg_s_barcode.barcode
- AND printid = :arg_s_barcode.printid
- And sflag = 1 And ptflag = 0 And ptqty = :arg_s_barcode.ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- IF sqlca.SQLNRows <= 0 THEN
- GOTO _cancel
- END IF
-
- Decimal ld_addqty,ld_uqty
-
- FOR i = 1 To UpperBound(arr_parners)
- ld_addqty = ld_minqty
- FOR j = 1 To UpperBound(arr_parners[i].barcodes)
-
- IF ld_addqty = 0 THEN EXIT
-
- IF ld_addqty >= arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty THEN
- ld_uqty = arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 1,
- ptqty = ptqty + :ld_uqty,
- ptdate = :arg_s_barcode.sdate
- WHERE barcode = :arr_parners[i].barcodes[j].barcode
- AND printid = :arr_parners[i].barcodes[j].printid
- And sflag = 1 And ptflag = 0 And ptqty = :arr_parners[i].barcodes[j].ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- ld_addqty -= ld_uqty
- END IF
- ELSE
- ld_uqty = ld_addqty
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptqty = ptqty + :ld_uqty,
- ptdate = :arg_s_barcode.sdate
- WHERE barcode = :arr_parners[i].barcodes[j].barcode
- AND printid = :arr_parners[i].barcodes[j].printid
- And sflag = 1 And ptflag = 0 And ptqty = :arr_parners[i].barcodes[j].ptqty;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF sqlca.SQLNRows > 0 THEN
- ld_addqty -= ld_uqty
- END IF
-
- END IF
-
- NEXT
-
- IF ld_addqty <> 0 THEN
- GOTO _cancel
- END IF
- NEXT
-
- IF uof_add_workgroup_qty(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, 0, arg_s_barcode.sdate, ld_minqty, Ref arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- GOTO ext
-
- _cancel:
- IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
-
- END IF
- ext:
- RETURN rslt
- end function
- public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_swkpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
- Long ll_cnt = 0
- DateTime ld_sdate, arr_sdate[]
- Long ll_jdtype
- SELECT jdtype
- INTO :ll_jdtype
- FROM u_sc_workgroup
- Where wrkgrpid = :arg_swkpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- IF ll_jdtype <> 6 THEN
- GOTO ext
- END IF
- UPDATE u_OrderMtrl_workgroup
- SET finishqty = finishqty
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And wrkgrpid = :arg_swkpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '锁住工组进度失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- DECLARE cur1 CURSOR FOR
- SELECT DISTINCT CAST(CONVERT(varchar(10), sdate, 120) AS datetime) AS sdate
- FROM u_ordermtrl_workgroup_barcode
- WHERE (scid = :arg_scid)
- AND (orderid = :arg_orderid)
- AND (swkpid = :arg_swkpid)
- AND (sflag = 1)
- AND (ptflag = 0)
- Order By sdate;
- OPEN cur1;
- FETCH cur1 Into :ld_sdate;
- DO WHILE sqlca.SQLCode = 0
- ll_cnt++
- arr_sdate[ll_cnt] = ld_sdate
- FETCH cur1 Into :ld_sdate;
- LOOP
- CLOSE cur1;
- Long i,j,k
- Decimal ld_qty1, ld_qty2, ld_addqty
- Long ll_printid, arr_printid[]
- Long ll_gycnt
- Long ll_pid, arr_pid[]
- Decimal ld_qty, arr_qty[]
- Long ll_ptflag, arr_ptflag[]
- Long ll_bcnt
- FOR i = 1 To ll_cnt
- ld_sdate = DateTime(RelativeDate(Date(arr_sdate[i]), 1))
- ld_qty1 = 0
- ld_qty2 = 0
-
- SELECT ISNULL(MIN(sqty),0)
- INTO :ld_qty1
- FROM (SELECT SUM(CASE WHEN (ptflag = 1) AND (ptdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
- FROM u_ordermtrl_workgroup_barcode
- WHERE (scid = :arg_scid)
- AND (orderid = :arg_orderid)
- AND (swkpid = :arg_swkpid)
- Group By printid) AS vvv;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- SELECT ISNULL(MIN(sqty),0)
- INTO :ld_qty2
- FROM (SELECT SUM(CASE WHEN (sflag = 1) AND (sdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
- FROM u_ordermtrl_workgroup_barcode
- WHERE (scid = :arg_scid)
- AND (orderid = :arg_orderid)
- AND (swkpid = :arg_swkpid)
- Group By printid) AS vvv;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
-
-
- IF ld_qty2 - ld_qty1 > 0 THEN
- ll_gycnt = 0
- DECLARE cur2 CURSOR FOR
- SELECT printid
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And swkpid = :arg_swkpid;
- OPEN cur2;
- FETCH cur2 Into :ll_printid;
- DO WHILE sqlca.SQLCode = 0
- ll_gycnt++
- arr_printid[ll_gycnt] = ll_printid
- FETCH cur2 Into :ll_printid;
- LOOP
- CLOSE cur2;
-
- FOR j = 1 To ll_gycnt
- ld_addqty = ld_qty2
- ll_bcnt = 0
- DECLARE cur3 CURSOR FOR
- SELECT pid, qty, ptflag
- FROM u_ordermtrl_workgroup_barcode
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arr_printid[j]
- AND sflag = 1
- AND sdate < :ld_sdate
- Order By ptflag Desc, sdate;
- OPEN cur3;
- FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
- DO WHILE sqlca.SQLCode = 0
- ll_bcnt++
- arr_pid[ll_bcnt] = ll_pid
- arr_qty[ll_bcnt] = ld_qty
- arr_ptflag[ll_bcnt] = ll_ptflag
- FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
- LOOP
- CLOSE cur3;
-
- FOR k = 1 To ll_bcnt
- IF ld_addqty <= 0 THEN
- EXIT
- END IF
-
- ld_addqty -= arr_qty[k]
-
- IF arr_ptflag[k] = 0 THEN
- UPDATE u_ordermtrl_workgroup_barcode
- SET ptflag = 1, ptdate = :arr_sdate[i]
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND printid = :arr_printid[j]
- And pid = :arr_pid[k];
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新配套标记失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- NEXT
- NEXT
-
- ld_addqty = ld_qty2 - ld_qty1
-
- IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_swkpid, 0, arr_sdate[i], ld_addqty, arg_msg, False) <> 1 THEN
- rslt = 0
- GOTO ext
- END IF
- END IF
- NEXT
- GOTO ext
- ext:
- IF arg_ifcommit THEN
- IF rslt = 1 THEN
- COMMIT;
- ELSE
- ROLLBACK;
- END IF
- END IF
- RETURN rslt
- end function
- private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_swkpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数
- Int rslt = 1
- String ls_ordercode
- String ls_mtrlcode
- Decimal ld_orderqty,ld_acmpqty,ld_trueqty
- DateTime null_dt
- SetNull(null_dt)
- DateTime dt_fdate
- IF arg_orderid <= 0 THEN
- rslt = 0
- arg_msg = '错误的计划唯一码'
- GOTO ext
- END IF
- SELECT ordercode INTO :ls_ordercode
- FROM u_Order_ml
- WHERE OrderID = :arg_orderid
- And scid = :arg_scid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询生产计划编号失败'
- rslt = 0
- GOTO ext
- END IF
- SELECT u_mtrldef.mtrlcode ,
- u_order_ml.orderqty,
- u_order_ml.acmpqty
- INTO :ls_mtrlcode,
- :ld_orderqty,
- :ld_acmpqty
- FROM u_mtrldef,u_order_ml
- WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
- AND u_order_ml.scid = :arg_scid
- And u_Order_ml.OrderID = :arg_orderid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询物料编号失败'
- rslt = 0
- GOTO ext
- END IF
- //arg_swkpid:源工组;
- Decimal finishqty, totalqty
- SELECT isnull(sum(orderqty - stopqty),0), isnull(sum(finishqty),0)
- INTO :totalqty, :finishqty
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkGrpid = :arg_swkpid
- Using sqlca;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- IF arg_qty + finishqty > totalqty THEN
- arg_qty = totalqty - finishqty
- END IF
- IF arg_qty + finishqty < 0 THEN
- arg_qty = -finishqty
- END IF
- IF arg_qty = 0 THEN
- GOTO ext
- END IF
- Long ll_owrkgrpid, arr_owrkgrpid[]
- String ls_wkpname, arr_wkpname[]
- Long ll_workgroupid, arr_workgroupid[]
- Decimal ld_ufqty, ld_fqty, arr_ufqty[], arr_fqty[]
- Long ll_cnt = 0
- DECLARE cur1 CURSOR FOR
- SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkGrpid = :arg_swkpid
- AND workgroupid = :arg_workgroupid
- UNION
- SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkGrpid = :arg_swkpid
- And workgroupid <> :arg_workgroupid;
- OPEN cur1;
- FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
- DO WHILE sqlca.SQLCode = 0
- ll_cnt++
- arr_owrkgrpid[ll_cnt] = ll_owrkgrpid
- arr_wkpname[ll_cnt] = ls_wkpname
- arr_workgroupid[ll_cnt] = ll_workgroupid
- arr_ufqty[ll_cnt] = ld_ufqty
- arr_fqty[ll_cnt] = ld_fqty
- FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
- LOOP
- CLOSE cur1;
- Long i
- Decimal ld_addqty
- ld_addqty = arg_qty
- FOR i = 1 To ll_cnt
- ll_owrkgrpid = arr_owrkgrpid[i]
- ls_wkpname = arr_wkpname[i]
- ll_workgroupid = arr_workgroupid[i]
- ld_ufqty = arr_ufqty[i]
- ld_fqty = arr_fqty[i]
-
- IF ld_addqty = 0 THEN
- EXIT
- END IF
-
- IF ld_addqty >= ld_ufqty THEN
- IF ld_ufqty = 0 THEN CONTINUE
- UPDATE u_OrderMtrl_workgroup
- SET finishqty = finishqty + :ld_ufqty,
- finishflag = 1,
- finishdate = :arg_finishdate
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- AND owrkgrpid = :ll_owrkgrpid
- AND wkpname = :ls_wkpname
- And workgroupid = :ll_workgroupid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- ld_addqty = ld_addqty - ld_ufqty
- ELSEIF ld_addqty <= -ld_fqty THEN
- UPDATE u_OrderMtrl_workgroup
- SET finishqty = finishqty - :ld_fqty,
- finishflag = 0,
- finishdate = NULL
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- AND owrkgrpid = :ll_owrkgrpid
- AND wkpname = :ls_wkpname
- And workgroupid = :ll_workgroupid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- ld_addqty = ld_addqty + ld_fqty
- ELSE
- UPDATE u_OrderMtrl_workgroup
- SET finishqty = finishqty + :ld_addqty,
- finishflag = 0,
- finishdate = NULL
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- AND owrkgrpid = :ll_owrkgrpid
- AND wkpname = :ls_wkpname
- And workgroupid = :ll_workgroupid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
- rslt = 0
- GOTO ext
- END IF
- ld_addqty = 0
- END IF
- NEXT
- //IF pf_checklast(arg_scid, arg_orderid, arg_swkpid, arg_owkpid) = 1 THEN
-
- Decimal ld_sumorderqty
- SELECT isnull(sum(orderqty - stopqty),0)
- INTO :ld_sumorderqty
- FROM u_OrderMtrl_workgroup
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkGrpid = :arg_swkpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- Decimal ld_sumfqty
- SELECT isnull(sum(fqty),0)
- INTO :ld_sumfqty
- FROM u_OrderMtrl_workgroup_date
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- And wrkGrpid = :arg_swkpid;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText
- GOTO ext
- END IF
-
- ld_addqty = arg_qty
- IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN
- ld_addqty = ld_sumorderqty - ld_sumfqty
- END IF
- IF ld_addqty + ld_sumfqty < 0 THEN
- ld_addqty = -ld_sumfqty
- END IF
-
- dt_fdate = DateTime(Date(arg_finishdate), Time(0))
- IF ld_addqty >= 0 THEN
- UPDATE u_OrderMtrl_workgroup_date
- SET fqty = fqty + :ld_addqty
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- And fdate = :dt_fdate;
- IF sqlca.SQLCode = 0 THEN
- IF sqlca.SQLNRows = 0 THEN
- INSERT INTO u_OrderMtrl_workgroup_date
- (scid,orderid,wrkgrpid,fdate,fqty)
- VALUES
- (:arg_scid,:arg_orderid,:arg_swkpid,:dt_fdate,:ld_addqty);
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- END IF
- ELSE
- rslt = 0
- arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- ELSE
-
- DateTime ld_date, arr_date[]
- Decimal ld_fqtyd, arr_fqtyd[]
- i = 0
-
- DECLARE cur2 CURSOR FOR SELECT fdate, fqty
- FROM u_OrderMtrl_workgroup_date
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- AND fdate = :dt_fdate
- UNION
- SELECT fdate, fqty
- FROM u_OrderMtrl_workgroup_date
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- And fdate <> :dt_fdate;
- OPEN cur2;
- FETCH cur2 Into :ld_date,:ld_fqtyd;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_date[i] = ld_date
- arr_fqtyd[i] = ld_fqtyd
- FETCH cur2 Into :ld_date,:ld_fqtyd;
- LOOP
- CLOSE cur2;
-
- FOR i = 1 To UpperBound(arr_date)
- ld_date = arr_date[i]
- ld_fqtyd = arr_fqtyd[i]
- IF ld_addqty = 0 THEN
- EXIT
- END IF
-
- IF ld_addqty <= -ld_fqtyd THEN
- UPDATE u_OrderMtrl_workgroup_date
- SET fqty = fqty - :ld_fqtyd
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- And fdate = :ld_date;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- ld_addqty = ld_addqty + ld_fqtyd
- ELSE
- UPDATE u_OrderMtrl_workgroup_date
- SET fqty = fqty + :ld_addqty
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND wrkgrpid = :arg_swkpid
- And fdate = :ld_date;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
- GOTO ext
- END IF
- ld_addqty = 0
- END IF
-
- NEXT
-
- END IF
- //END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 And arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- end function
- private function integer pf_getparner (long arg_scid, long arg_orderid, long arg_swkpid, ref s_p_tree arg_trees[], ref string arg_msg);// DONE: 获取同工组的工艺路线
- Int rslt = 1
- s_p_tree arr_trees[]
- Long i = 0
- Long scid,orderid,printid,swkpid,owkpid,parentid,ifaccept
- String relname,partname
- DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, swkpid, owkpid, parentid, relname, partname, ifaccept
- FROM u_OrderMtrl_workgroup_tree
- WHERE scid = :arg_scid
- AND orderid = :arg_orderid
- AND swkpid = :arg_swkpid
- AND if_barcode = 1
- Order By printid;
- OPEN cur1;
- FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
- DO WHILE sqlca.SQLCode = 0
- i++
- arr_trees[i].scid = scid
- arr_trees[i].orderid = orderid
- arr_trees[i].printid = printid
- arr_trees[i].swkpid = swkpid
- arr_trees[i].owkpid = owkpid
- arr_trees[i].parentid = parentid
- arr_trees[i].relname = relname
- arr_trees[i].partname = partname
- arr_trees[i].ifaccept = ifaccept
- FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
- LOOP
- CLOSE cur1;
- arg_trees = arr_trees
- RETURN rslt
- end function
- on uo_partbarcode.create
- call super::create
- TriggerEvent( this, "constructor" )
- end on
- on uo_partbarcode.destroy
- TriggerEvent( this, "destructor" )
- call super::destroy
- end on
|