uo_partbarcode.sru 75 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905
  1. $PBExportHeader$uo_partbarcode.sru
  2. forward
  3. global type uo_partbarcode from nonvisualobject
  4. end type
  5. type s_p_barcode from structure within uo_partbarcode
  6. end type
  7. type s_p_tree from structure within uo_partbarcode
  8. end type
  9. type s_p_order_ml from structure within uo_partbarcode
  10. end type
  11. type s_p_mtrlware_mx from structure within uo_partbarcode
  12. end type
  13. type s_p_getbar from structure within uo_partbarcode
  14. end type
  15. end forward
  16. type s_p_barcode from structure
  17. long scid
  18. long orderid
  19. long printid
  20. long pid
  21. string barcode
  22. long swkpid
  23. long owkpid
  24. long sflag
  25. long oflag
  26. decimal ptqty
  27. long inflag
  28. decimal qty
  29. string relname
  30. string partname
  31. datetime ptdate
  32. datetime sdate
  33. end type
  34. type s_p_tree from structure
  35. long scid
  36. long orderid
  37. long printid
  38. long swkpid
  39. long owkpid
  40. long parentid
  41. string relname
  42. string partname
  43. long ifaccept
  44. s_p_barcode barcodes[]
  45. end type
  46. type s_p_order_ml from structure
  47. long scid
  48. long orderid
  49. long mtrlid
  50. string status_mode
  51. string woodcode
  52. string pcode
  53. end type
  54. type s_p_mtrlware_mx from structure
  55. string barcode
  56. long getbarid
  57. decimal packqty
  58. long qty
  59. long inflag
  60. long scid
  61. long orderid
  62. end type
  63. type s_p_getbar from structure
  64. long getbarid
  65. long scid
  66. long orderid
  67. long ifrel
  68. long storageid
  69. long cusid
  70. string plancode
  71. string mtrlcuscode
  72. string location
  73. end type
  74. global type uo_partbarcode from nonvisualobject
  75. end type
  76. global uo_partbarcode uo_partbarcode
  77. forward prototypes
  78. private function integer pf_getbarcodes (string arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg)
  79. private function integer pf_getchild (long arg_scid, long arg_orderid, long arg_printid, ref s_p_tree arg_trees[], ref string arg_msg)
  80. private function integer pf_checklast (long arg_scid, long arg_orderid, long arg_swkpid, long arg_owkpid)
  81. public function integer uf_swap_barcode (string arg_barcode_from, string arg_barcode_to, ref string arg_msg)
  82. 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)
  83. public function integer pf_exclude_barcode (s_p_barcode arg_s_barcode, ref string arg_msg)
  84. public function integer pf_barcode_pt_cancel (s_p_barcode arg_s_barcode, ref string arg_msg)
  85. 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)
  86. 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)
  87. public function integer pf_include_barcode (s_p_barcode arg_s_barcode, ref string arg_msg)
  88. 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)
  89. 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)
  90. private function integer pf_swap_barcodes_internal (s_p_barcode arg_barcode_from[], s_p_barcode arg_barcode_to[], ref string arg_msg)
  91. 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)
  92. private function integer pf_try_replace (long arg_curindex, ref s_p_barcode arg_s_barcodes[], ref string arg_msg)
  93. private function integer pf_savepoint (ref string arg_tran, ref string arg_msg)
  94. public function integer pf_rollback (string arg_tran, ref string arg_msg)
  95. private function integer pf_get_canswap (s_p_barcode arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg)
  96. private function integer pf_get_canin_other (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
  97. private function integer pf_get_notin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
  98. private function integer pf_get_canin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg)
  99. 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)
  100. private function integer pf_get_barcode_last (string arg_barcode, ref s_p_mtrlware_mx arg_bar, ref string arg_msg)
  101. public function integer pf_get_getbar (long arg_getbarid, ref s_p_getbar arg_s_getbar, ref string arg_msg)
  102. 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)
  103. private function integer pf_try_replace_last (ref s_p_mtrlware_mx arg_barcode, ref string arg_msg)
  104. public function integer pf_get_canswap_last (s_p_mtrlware_mx arg_barcode, ref s_p_mtrlware_mx arg_mxs[], ref string arg_msg)
  105. private function integer pf_barcode_pt (s_p_barcode arg_s_barcode, ref string arg_msg)
  106. public function integer uof_workgroup_barcode_pt (long arg_scid, long arg_orderid, long arg_swkpid, ref string arg_msg, boolean arg_ifcommit)
  107. 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)
  108. private function integer pf_getparner (long arg_scid, long arg_orderid, long arg_swkpid, ref s_p_tree arg_trees[], ref string arg_msg)
  109. end prototypes
  110. private function integer pf_getbarcodes (string arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg);// 获取一条线的部件条码 order by printid
  111. Int rslt = 1
  112. s_p_barcode arr_bars[]
  113. Long i = 0
  114. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  115. decimal ptqty
  116. String barcode
  117. string relname, partname
  118. datetime ptdate,sdate
  119. Decimal qty
  120. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  121. FROM u_ordermtrl_workgroup_barcode
  122. WHERE barcode = :arg_barcode
  123. Order By printid;
  124. OPEN cur1;
  125. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  126. DO WHILE sqlca.SQLCode = 0
  127. i++
  128. arr_bars[i].scid = scid
  129. arr_bars[i].orderid = orderid
  130. arr_bars[i].printid = printid
  131. arr_bars[i].pid = pid
  132. arr_bars[i].barcode = barcode
  133. arr_bars[i].swkpid = swkpid
  134. arr_bars[i].owkpid = owkpid
  135. arr_bars[i].sflag = sflag
  136. arr_bars[i].oflag = oflag
  137. arr_bars[i].ptqty = ptqty
  138. arr_bars[i].inflag = inflag
  139. arr_bars[i].qty = qty
  140. arr_bars[i].relname = relname
  141. arr_bars[i].partname = partname
  142. arr_bars[i].ptdate = ptdate
  143. arr_bars[i].sdate = sdate
  144. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  145. LOOP
  146. CLOSE cur1;
  147. arg_bars = arr_bars
  148. RETURN rslt
  149. end function
  150. 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: 获取子工艺路线
  151. Int rslt = 1
  152. s_p_tree arr_trees[]
  153. Long i = 0
  154. Long scid,orderid,printid,swkpid,owkpid,parentid,ifaccept
  155. String relname,partname
  156. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, swkpid, owkpid, parentid, relname, partname, ifaccept
  157. FROM u_OrderMtrl_workgroup_tree
  158. WHERE scid = :arg_scid
  159. AND orderid = :arg_orderid
  160. AND parentid = :arg_printid
  161. AND if_barcode = 1
  162. Order By printid;
  163. OPEN cur1;
  164. FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
  165. DO WHILE sqlca.SQLCode = 0
  166. i++
  167. arr_trees[i].scid = scid
  168. arr_trees[i].orderid = orderid
  169. arr_trees[i].printid = printid
  170. arr_trees[i].swkpid = swkpid
  171. arr_trees[i].owkpid = owkpid
  172. arr_trees[i].parentid = parentid
  173. arr_trees[i].relname = relname
  174. arr_trees[i].partname = partname
  175. arr_trees[i].ifaccept = ifaccept
  176. FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
  177. LOOP
  178. CLOSE cur1;
  179. arg_trees = arr_trees
  180. RETURN rslt
  181. end function
  182. private function integer pf_checklast (long arg_scid, long arg_orderid, long arg_swkpid, long arg_owkpid);Int rslt = 1
  183. Long printid, arr_printid[]
  184. Long i = 0
  185. DECLARE cur1 CURSOR FOR SELECT printid FROM u_OrderMtrl_workgroup_tree
  186. WHERE scid = :arg_scid
  187. AND orderid = :arg_orderid
  188. AND swkpid = :arg_swkpid
  189. And owkpid = :arg_owkpid;
  190. OPEN cur1;
  191. FETCH cur1 Into :printid;
  192. DO WHILE sqlca.SQLCode = 0
  193. i++
  194. arr_printid[i] = printid
  195. FETCH cur1 Into :printid;
  196. LOOP
  197. CLOSE cur1;
  198. Long parentid, swkpid
  199. FOR i = 1 To UpperBound(arr_printid)
  200. printid = arr_printid[i]
  201. SELECT parentid
  202. INTO :parentid
  203. FROM u_OrderMtrl_workgroup_tree
  204. WHERE scid = :arg_scid
  205. AND orderid = :arg_orderid
  206. And printid = :printid;
  207. IF sqlca.SQLCode <> 0 THEN
  208. parentid = 0
  209. END IF
  210. DO WHILE parentid > 0
  211. SELECT swkpid
  212. INTO :swkpid
  213. FROM u_OrderMtrl_workgroup_tree
  214. WHERE scid = :arg_scid
  215. AND orderid = :arg_orderid
  216. And printid = :parentid;
  217. IF sqlca.SQLCode <> 0 THEN
  218. swkpid = 0
  219. END IF
  220. IF swkpid = arg_swkpid THEN
  221. rslt = 0
  222. GOTO ext
  223. END IF
  224. SELECT parentid
  225. INTO :parentid
  226. FROM u_OrderMtrl_workgroup_tree
  227. WHERE scid = :arg_scid
  228. AND orderid = :arg_orderid
  229. And printid = :parentid;
  230. IF sqlca.SQLCode <> 0 THEN
  231. parentid = 0
  232. END IF
  233. LOOP
  234. NEXT
  235. ext:
  236. RETURN rslt
  237. end function
  238. public function integer uf_swap_barcode (string arg_barcode_from, string arg_barcode_to, ref string arg_msg);// DONE: 交换条码的主计划
  239. Int rslt = 1
  240. s_p_barcode arr_barcode_from[], arr_barcode_to[]
  241. IF pf_getbarcodes(arg_barcode_from, Ref arr_barcode_from, Ref arg_msg) <> 1 THEN
  242. rslt = 0
  243. GOTO ext
  244. END IF
  245. IF pf_getbarcodes(arg_barcode_to, Ref arr_barcode_to, Ref arg_msg) <> 1 THEN
  246. rslt = 0
  247. GOTO ext
  248. END IF
  249. IF UpperBound(arr_barcode_from) <> UpperBound(arr_barcode_to) THEN
  250. rslt = 0
  251. arg_msg = '1.工艺路线不兼容'
  252. GOTO ext
  253. END IF
  254. Long i
  255. FOR i = 1 To UpperBound(arr_barcode_from)
  256. IF arr_barcode_from[i].scid = arr_barcode_to[i].scid And arr_barcode_from[i].orderid = arr_barcode_to[i].orderid THEN
  257. rslt = 0
  258. arg_msg = '属于同一主计划不能交换'
  259. GOTO ext
  260. END IF
  261. IF arr_barcode_from[i].swkpid <> arr_barcode_to[i].swkpid &
  262. Or arr_barcode_from[i].owkpid <> arr_barcode_to[i].owkpid &
  263. Or arr_barcode_from[i].relname <> arr_barcode_to[i].relname &
  264. Or arr_barcode_from[i].partname <> arr_barcode_to[i].partname THEN
  265. rslt = 0
  266. arg_msg = '2.工艺流程不兼容'
  267. GOTO ext
  268. END IF
  269. NEXT
  270. s_p_order_ml s_order_from, s_order_to
  271. IF pf_get_order_ml(arr_barcode_from[1].scid, arr_barcode_from[1].orderid, Ref s_order_from, Ref arg_msg) <> 1 THEN
  272. rslt = 0
  273. GOTO ext
  274. END IF
  275. IF pf_get_order_ml(arr_barcode_to[1].scid, arr_barcode_to[1].orderid, Ref s_order_to, Ref arg_msg) <> 1 THEN
  276. rslt = 0
  277. GOTO ext
  278. END IF
  279. IF s_order_from.mtrlid <> s_order_to.mtrlid &
  280. Or s_order_from.status_mode <> s_order_to.status_mode &
  281. Or s_order_from.woodcode <> s_order_to.woodcode &
  282. Or s_order_from.pcode <> s_order_to.pcode THEN
  283. rslt = 0
  284. arg_msg = '产品或配置不兼容'
  285. GOTO ext
  286. END IF
  287. // 条码兼容进行交换
  288. IF pf_swap_barcodes_internal(arr_barcode_from, arr_barcode_to, Ref arg_msg) <> 1 THEN
  289. rslt = 0
  290. GOTO ext
  291. END IF
  292. ext:
  293. IF rslt = 1 THEN
  294. ELSE
  295. arg_msg = '条码'+arg_barcode_from+'/'+arg_barcode_to+'交换失败,' + arg_msg
  296. END IF
  297. RETURN rslt
  298. end function
  299. 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
  300. s_p_order_ml s_rslt
  301. SELECT mtrlid, status_mode, woodcode, pcode
  302. INTO :s_rslt.mtrlid, :s_rslt.status_mode, :s_rslt.woodcode, :s_rslt.pcode
  303. FROM u_Order_ml
  304. WHERE scid = :arg_scid
  305. And orderid = :arg_orderid;
  306. IF sqlca.SQLCode <> 0 THEN
  307. rslt = 0
  308. arg_msg = '查询主计划信息失败,' + sqlca.SQLErrText
  309. GOTO ext
  310. END IF
  311. s_rslt.scid = arg_scid
  312. s_rslt.orderid = arg_orderid
  313. arg_order_ml = s_rslt
  314. ext:
  315. RETURN rslt
  316. end function
  317. public function integer pf_exclude_barcode (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 排除主计划的条码
  318. Int rslt = 1
  319. Long ld_step = 100000000
  320. DO WHILE arg_s_barcode.orderid > ld_step
  321. ld_step *= 2
  322. LOOP
  323. UPDATE u_ordermtrl_workgroup_barcode
  324. SET scid = scid - :ld_step,
  325. orderid = orderid - :ld_step
  326. WHERE barcode = :arg_s_barcode.barcode
  327. AND printid = :arg_s_barcode.printid
  328. AND scid = :arg_s_barcode.scid
  329. And orderid = :arg_s_barcode.orderid;
  330. IF sqlca.SQLCode <> 0 THEN
  331. rslt = 0
  332. arg_msg = '从主计划去除条码失败,' + sqlca.SQLErrText
  333. GOTO ext
  334. END IF
  335. IF sqlca.SQLNRows <= 0 THEN
  336. rslt = 0
  337. arg_msg = '条码被修改了'
  338. GOTO ext
  339. END IF
  340. IF arg_s_barcode.sflag = 1 THEN
  341. UPDATE u_OrderMtrl_workgroup_tree
  342. SET sqty = sqty - :arg_s_barcode.qty
  343. WHERE scid = :arg_s_barcode.scid
  344. AND orderid = :arg_s_barcode.orderid
  345. And printid = :arg_s_barcode.printid;
  346. IF sqlca.SQLCode <> 0 THEN
  347. rslt = 0
  348. arg_msg = '取消工艺完工数失败,' + sqlca.SQLErrText
  349. GOTO ext
  350. END IF
  351. IF arg_s_barcode.oflag = 1 THEN
  352. UPDATE u_OrderMtrl_workgroup_tree
  353. SET oqty = oqty - :arg_s_barcode.qty
  354. WHERE scid = :arg_s_barcode.scid
  355. AND orderid = :arg_s_barcode.orderid
  356. And printid = :arg_s_barcode.printid;
  357. IF sqlca.SQLCode <> 0 THEN
  358. rslt = 0
  359. arg_msg = '取消工艺接收数失败,' + sqlca.SQLErrText
  360. GOTO ext
  361. END IF
  362. END IF
  363. IF arg_s_barcode.ptqty > 0 THEN
  364. IF pf_barcode_pt_cancel(arg_s_barcode, Ref arg_msg) <> 1 THEN
  365. rslt = 0
  366. GOTO ext
  367. END IF
  368. END IF
  369. END IF
  370. ext:
  371. RETURN rslt
  372. end function
  373. public function integer pf_barcode_pt_cancel (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 取消配套条码
  374. Int rslt = 1
  375. // 配套更新工组进度
  376. s_p_tree arr_parners[], arr_temp1[]
  377. Long i, j
  378. String ls_tran
  379. IF pf_getparner(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, Ref arr_parners, Ref arg_msg) <> 1 THEN
  380. rslt = 0
  381. GOTO ext
  382. END IF
  383. FOR i = 1 To UpperBound(arr_parners)
  384. IF arr_parners[i].printid <> arg_s_barcode.printid THEN
  385. arr_temp1[UpperBound(arr_temp1) + 1] = arr_parners[i]
  386. END IF
  387. NEXT
  388. arr_parners = arr_temp1
  389. IF UpperBound(arr_parners) <= 0 THEN
  390. UPDATE u_ordermtrl_workgroup_barcode
  391. SET ptflag = 0,
  392. ptqty = 0,
  393. ptdate = NULL
  394. WHERE barcode = :arg_s_barcode.barcode
  395. AND printid = :arg_s_barcode.printid
  396. And ptqty = :arg_s_barcode.ptqty;
  397. IF sqlca.SQLCode <> 0 THEN
  398. rslt = 0
  399. arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
  400. GOTO ext
  401. END IF
  402. IF sqlca.SQLNRows > 0 THEN
  403. 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
  404. rslt = 0
  405. GOTO ext
  406. END IF
  407. GOTO ext
  408. END IF
  409. ELSE
  410. FOR i = 1 To UpperBound(arr_parners)
  411. 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
  412. rslt = 0
  413. GOTO ext
  414. END IF
  415. IF UpperBound(arr_parners[i].barcodes) <= 0 THEN
  416. GOTO ext
  417. END IF
  418. NEXT
  419. IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
  420. rslt = 0
  421. GOTO ext
  422. END IF
  423. UPDATE u_ordermtrl_workgroup_barcode
  424. SET ptflag = 0,
  425. ptqty = 0,
  426. ptdate = NULL
  427. WHERE barcode = :arg_s_barcode.barcode
  428. AND printid = :arg_s_barcode.printid
  429. And ptqty = :arg_s_barcode.ptqty;
  430. IF sqlca.SQLCode <> 0 THEN
  431. rslt = 0
  432. arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
  433. GOTO ext
  434. END IF
  435. IF sqlca.SQLNRows <= 0 THEN
  436. GOTO ext
  437. END IF
  438. Decimal ld_addqty,ld_uqty
  439. FOR i = 1 To UpperBound(arr_parners)
  440. ld_addqty = arg_s_barcode.ptqty
  441. FOR j = 1 To UpperBound(arr_parners[i].barcodes)
  442. IF ld_addqty = 0 THEN EXIT
  443. IF ld_addqty >= arr_parners[i].barcodes[j].ptqty THEN
  444. ld_uqty = arr_parners[i].barcodes[j].ptqty
  445. UPDATE u_ordermtrl_workgroup_barcode
  446. SET ptflag = 0,
  447. ptqty = 0,
  448. ptdate = NULL
  449. WHERE barcode = :arr_parners[i].barcodes[j].barcode
  450. AND printid = :arr_parners[i].barcodes[j].printid
  451. And sflag = 1 And ptqty = :arr_parners[i].barcodes[j].ptqty;
  452. IF sqlca.SQLCode <> 0 THEN
  453. rslt = 0
  454. arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
  455. GOTO ext
  456. END IF
  457. IF sqlca.SQLNRows > 0 THEN
  458. ld_addqty -= ld_uqty
  459. END IF
  460. ELSE
  461. ld_uqty = ld_addqty
  462. UPDATE u_ordermtrl_workgroup_barcode
  463. SET ptflag = 0,
  464. ptqty = ptqty - :ld_uqty
  465. WHERE barcode = :arr_parners[i].barcodes[j].barcode
  466. AND printid = :arr_parners[i].barcodes[j].printid
  467. And sflag = 1 And ptqty = :arr_parners[i].barcodes[j].ptqty;
  468. IF sqlca.SQLCode <> 0 THEN
  469. rslt = 0
  470. arg_msg = '取消部件条码配套标记失败,' + sqlca.SQLErrText
  471. GOTO ext
  472. END IF
  473. IF sqlca.SQLNRows > 0 THEN
  474. ld_addqty -= ld_uqty
  475. END IF
  476. END IF
  477. NEXT
  478. IF ld_addqty <> 0 THEN
  479. GOTO _cancel
  480. END IF
  481. NEXT
  482. 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
  483. rslt = 0
  484. GOTO ext
  485. END IF
  486. GOTO ext
  487. _cancel:
  488. IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
  489. rslt = 0
  490. GOTO ext
  491. END IF
  492. END IF
  493. ext:
  494. RETURN rslt
  495. end function
  496. 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: 获取可配套的部件条码
  497. Int rslt = 1
  498. s_p_barcode arr_bars[]
  499. Long i = 0
  500. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  501. decimal ptqty
  502. String barcode
  503. String relname,partname
  504. DateTime ptdate,sdate
  505. Decimal qty
  506. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  507. FROM u_ordermtrl_workgroup_barcode
  508. WHERE scid = :arg_scid
  509. AND orderid = :arg_orderid
  510. AND printid = :arg_printid
  511. AND sflag = 1 AND ptqty < qty AND ptflag = 0
  512. Order By sdate;
  513. OPEN cur1;
  514. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  515. DO WHILE sqlca.SQLCode = 0
  516. i++
  517. arr_bars[i].scid = scid
  518. arr_bars[i].orderid = orderid
  519. arr_bars[i].printid = printid
  520. arr_bars[i].pid = pid
  521. arr_bars[i].barcode = barcode
  522. arr_bars[i].swkpid = swkpid
  523. arr_bars[i].owkpid = owkpid
  524. arr_bars[i].sflag = sflag
  525. arr_bars[i].oflag = oflag
  526. arr_bars[i].ptqty = ptqty
  527. arr_bars[i].inflag = inflag
  528. arr_bars[i].qty = qty
  529. arr_bars[i].relname = relname
  530. arr_bars[i].partname = partname
  531. arr_bars[i].ptdate = ptdate
  532. arr_bars[i].sdate = sdate
  533. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  534. LOOP
  535. CLOSE cur1;
  536. arg_bars = arr_bars
  537. RETURN rslt
  538. end function
  539. 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: 获取已配套的部件条码
  540. Int rslt = 1
  541. s_p_barcode arr_bars[]
  542. Long i = 0
  543. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  544. decimal ptqty
  545. String barcode
  546. String relname,partname
  547. DateTime ptdate,sdate
  548. Decimal qty
  549. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  550. FROM u_ordermtrl_workgroup_barcode
  551. WHERE scid = :arg_scid
  552. AND orderid = :arg_orderid
  553. AND printid = :arg_printid
  554. AND sflag = 1 AND ptqty > 0
  555. AND ptdate = :arg_ptdate
  556. UNION
  557. SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  558. FROM u_ordermtrl_workgroup_barcode
  559. WHERE scid = :arg_scid
  560. AND orderid = :arg_orderid
  561. AND printid = :arg_printid
  562. AND sflag = 1 AND ptqty > 0
  563. And ptdate > :arg_ptdate
  564. UNION
  565. SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  566. FROM u_ordermtrl_workgroup_barcode
  567. WHERE scid = :arg_scid
  568. AND orderid = :arg_orderid
  569. AND printid = :arg_printid
  570. AND sflag = 1 AND ptqty > 0
  571. And ptdate < :arg_ptdate;
  572. OPEN cur1;
  573. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  574. DO WHILE sqlca.SQLCode = 0
  575. i++
  576. arr_bars[i].scid = scid
  577. arr_bars[i].orderid = orderid
  578. arr_bars[i].printid = printid
  579. arr_bars[i].pid = pid
  580. arr_bars[i].barcode = barcode
  581. arr_bars[i].swkpid = swkpid
  582. arr_bars[i].owkpid = owkpid
  583. arr_bars[i].sflag = sflag
  584. arr_bars[i].oflag = oflag
  585. arr_bars[i].ptqty = ptqty
  586. arr_bars[i].inflag = inflag
  587. arr_bars[i].qty = qty
  588. arr_bars[i].relname = relname
  589. arr_bars[i].partname = partname
  590. arr_bars[i].ptdate = ptdate
  591. arr_bars[i].sdate = sdate
  592. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  593. LOOP
  594. CLOSE cur1;
  595. arg_bars = arr_bars
  596. RETURN rslt
  597. end function
  598. public function integer pf_include_barcode (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 添加主计划的条码
  599. Int rslt = 1
  600. UPDATE u_ordermtrl_workgroup_barcode
  601. SET scid = :arg_s_barcode.scid,
  602. orderid = :arg_s_barcode.orderid
  603. WHERE barcode = :arg_s_barcode.barcode
  604. And printid = :arg_s_barcode.printid;
  605. IF sqlca.SQLCode <> 0 THEN
  606. rslt = 0
  607. arg_msg = '主计划添加条码失败,' + sqlca.SQLErrText
  608. GOTO ext
  609. END IF
  610. IF arg_s_barcode.sflag = 1 THEN
  611. UPDATE u_OrderMtrl_workgroup_tree
  612. SET sqty = sqty + :arg_s_barcode.qty
  613. WHERE scid = :arg_s_barcode.scid
  614. AND orderid = :arg_s_barcode.orderid
  615. And printid = :arg_s_barcode.printid;
  616. IF sqlca.SQLCode <> 0 THEN
  617. rslt = 0
  618. arg_msg = '添加工艺完工数失败,' + sqlca.SQLErrText
  619. GOTO ext
  620. END IF
  621. IF arg_s_barcode.oflag = 1 THEN
  622. UPDATE u_OrderMtrl_workgroup_tree
  623. SET oqty = oqty + :arg_s_barcode.qty
  624. WHERE scid = :arg_s_barcode.scid
  625. AND orderid = :arg_s_barcode.orderid
  626. And printid = :arg_s_barcode.printid;
  627. IF sqlca.SQLCode <> 0 THEN
  628. rslt = 0
  629. arg_msg = '添加工艺接收数失败,' + sqlca.SQLErrText
  630. GOTO ext
  631. END IF
  632. END IF
  633. IF pf_barcode_pt(arg_s_barcode, Ref arg_msg) <> 1 THEN
  634. rslt = 0
  635. GOTO ext
  636. END IF
  637. END IF
  638. ext:
  639. RETURN rslt
  640. end function
  641. 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: 查找下级并替换
  642. Int rslt = 1
  643. IF arg_barcode_from.sflag <> 1 THEN
  644. rslt = 0
  645. arg_msg = '第一个条码必须完成'
  646. GOTO ext
  647. END IF
  648. IF arg_barcode_to.sflag <> 0 THEN
  649. rslt = 0
  650. arg_msg = '第二个条码必须未完成'
  651. GOTO ext
  652. END IF
  653. s_p_tree arr_tree_from[], arr_tree_to[]
  654. IF pf_getchild(arg_barcode_from.scid, arg_barcode_from.orderid, arg_barcode_from.printid, Ref arr_tree_from, Ref arg_msg) <> 1 THEN
  655. rslt = 0
  656. GOTO ext
  657. END IF
  658. IF pf_getchild(arg_barcode_to.scid, arg_barcode_to.orderid, arg_barcode_to.printid, Ref arr_tree_to, Ref arg_msg) <> 1 THEN
  659. rslt = 0
  660. GOTO ext
  661. END IF
  662. IF UpperBound(arr_tree_from) <> UpperBound(arr_tree_to) THEN
  663. rslt = 0
  664. arg_msg = '工艺路线不兼容'
  665. GOTO ext
  666. END IF
  667. Long i, j, k
  668. String ls_tran1
  669. FOR i = 1 To UpperBound(arr_tree_from)
  670. IF arr_tree_from[i].printid <> arr_tree_to[i].printid &
  671. Or arr_tree_from[i].swkpid <> arr_tree_to[i].swkpid &
  672. Or arr_tree_from[i].owkpid <> arr_tree_to[i].owkpid &
  673. Or arr_tree_from[i].relname <> arr_tree_to[i].relname &
  674. Or arr_tree_from[i].partname <> arr_tree_to[i].partname THEN
  675. rslt = 0
  676. arg_msg = '工艺路线不兼容'
  677. GOTO ext
  678. END IF
  679. NEXT
  680. s_p_barcode arr_barcode_from[], arr_barcode_to[]
  681. FOR i = 1 To UpperBound(arr_tree_from)
  682. IF arr_tree_from[i].printid = arg_ex_printid THEN CONTINUE
  683. 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
  684. rslt = 0
  685. GOTO ext
  686. END IF
  687. IF UpperBound(arr_tree_from[i].barcodes) <= 0 THEN
  688. rslt = 0
  689. arg_msg = '没有已组装部件'
  690. GOTO ext
  691. END IF
  692. IF pf_get_canin(arr_tree_to[i], Ref arr_tree_to[i].barcodes, Ref arg_msg) <> 1 THEN
  693. rslt = 0
  694. GOTO ext
  695. END IF
  696. IF UpperBound(arr_tree_to[i].barcodes) <= 0 THEN
  697. rslt = 0
  698. arg_msg = '没有待组装部件'
  699. GOTO ext
  700. END IF
  701. FOR j = 1 To UpperBound(arr_tree_from[i].barcodes)
  702. FOR k = 1 To UpperBound(arr_tree_to[i].barcodes)
  703. IF pf_getbarcodes(arr_tree_from[i].barcodes[j].barcode, Ref arr_barcode_from, Ref arg_msg) <> 1 THEN
  704. rslt = 0
  705. GOTO ext
  706. END IF
  707. IF pf_getbarcodes(arr_tree_to[i].barcodes[k].barcode, Ref arr_barcode_to, Ref arg_msg) <> 1 THEN
  708. rslt = 0
  709. GOTO ext
  710. END IF
  711. IF pf_savepoint(Ref ls_tran1, Ref arg_msg) <> 1 THEN
  712. rslt = 0
  713. GOTO ext
  714. END IF
  715. IF pf_swap_barcodes_internal(arr_barcode_from, arr_barcode_to, Ref arg_msg) <> 1 THEN
  716. IF pf_rollback(ls_tran1, Ref arg_msg) <> 1 THEN
  717. rslt = 0
  718. GOTO ext
  719. END IF
  720. CONTINUE
  721. END IF
  722. EXIT
  723. NEXT
  724. IF k <= UpperBound(arr_tree_to[i].barcodes) THEN
  725. EXIT
  726. END IF
  727. NEXT
  728. IF j > UpperBound(arr_tree_from[i].barcodes) THEN
  729. rslt = 0
  730. arg_msg = '交换已组装部件与未组装部件失败'
  731. GOTO ext
  732. END IF
  733. NEXT
  734. ext:
  735. RETURN rslt
  736. end function
  737. 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: 获取已组装的部件条码
  738. Int rslt = 1
  739. s_p_barcode arr_bars[]
  740. Long i = 0
  741. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  742. decimal ptqty
  743. String barcode
  744. string relname,partname
  745. datetime ptdate,sdate
  746. Decimal qty
  747. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  748. FROM u_ordermtrl_workgroup_barcode
  749. WHERE scid = :arg_scid
  750. AND orderid = :arg_orderid
  751. AND printid = :arg_printid
  752. AND inflag = 1;
  753. OPEN cur1;
  754. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  755. DO WHILE sqlca.SQLCode = 0
  756. i++
  757. arr_bars[i].scid = scid
  758. arr_bars[i].orderid = orderid
  759. arr_bars[i].printid = printid
  760. arr_bars[i].pid = pid
  761. arr_bars[i].barcode = barcode
  762. arr_bars[i].swkpid = swkpid
  763. arr_bars[i].owkpid = owkpid
  764. arr_bars[i].sflag = sflag
  765. arr_bars[i].oflag = oflag
  766. arr_bars[i].ptqty = ptqty
  767. arr_bars[i].inflag = inflag
  768. arr_bars[i].qty = qty
  769. arr_bars[i].relname = relname
  770. arr_bars[i].partname = partname
  771. arr_bars[i].ptdate = ptdate
  772. arr_bars[i].sdate = sdate
  773. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  774. LOOP
  775. CLOSE cur1;
  776. arg_bars = arr_bars
  777. RETURN rslt
  778. end function
  779. private function integer pf_swap_barcodes_internal (s_p_barcode arg_barcode_from[], s_p_barcode arg_barcode_to[], ref string arg_msg);// DONE: 交换条码
  780. Int rslt = 1
  781. Long i
  782. Long scid, orderid, ex_printid
  783. FOR i = UpperBound(arg_barcode_from) To 1 Step -1
  784. IF pf_exclude_barcode(arg_barcode_from[i], Ref arg_msg) <> 1 THEN
  785. rslt = 0
  786. GOTO ext
  787. END IF
  788. IF pf_exclude_barcode(arg_barcode_to[i], Ref arg_msg) <> 1 THEN
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. ex_printid = 0
  793. IF i < UpperBound(arg_barcode_from) THEN
  794. ex_printid = arg_barcode_from[i+1].printid
  795. END IF
  796. IF arg_barcode_from[i].sflag = 1 And arg_barcode_to[i].sflag = 0 THEN
  797. IF pf_swap_child_internal(arg_barcode_from[i], arg_barcode_to[i], ex_printid, Ref arg_msg) <> 1 THEN
  798. rslt = 0
  799. GOTO ext
  800. END IF
  801. ELSEIF arg_barcode_from[i].sflag = 0 And arg_barcode_to[i].sflag = 1 THEN
  802. IF pf_swap_child_internal(arg_barcode_to[i], arg_barcode_from[i], ex_printid, Ref arg_msg) <> 1 THEN
  803. rslt = 0
  804. GOTO ext
  805. END IF
  806. END IF
  807. scid = arg_barcode_from[i].scid
  808. orderid = arg_barcode_from[i].orderid
  809. arg_barcode_from[i].scid = arg_barcode_to[i].scid
  810. arg_barcode_from[i].orderid = arg_barcode_to[i].orderid
  811. arg_barcode_to[i].scid = scid
  812. arg_barcode_to[i].orderid = orderid
  813. IF pf_include_barcode(arg_barcode_from[i], Ref arg_msg) <> 1 THEN
  814. rslt = 0
  815. GOTO ext
  816. END IF
  817. IF pf_include_barcode(arg_barcode_to[i], Ref arg_msg) <> 1 THEN
  818. rslt = 0
  819. GOTO ext
  820. END IF
  821. NEXT
  822. ext:
  823. RETURN rslt
  824. end function
  825. 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);// 部件条码完工
  826. Int rslt = 1
  827. s_p_barcode arr_curbars[]
  828. IF pf_getbarcodes(arg_barcode, Ref arr_curbars, Ref arg_msg) <> 1 THEN
  829. rslt = 0
  830. GOTO ext
  831. END IF
  832. IF UpperBound(arr_curbars) = 0 THEN
  833. rslt = 0
  834. arg_msg = '条码不存在'
  835. GOTO ext
  836. END IF
  837. Long i, j, k, cur_index = 0
  838. FOR i = UpperBound(arr_curbars) To 1 Step -1
  839. IF arr_curbars[i].swkpid = arg_swkpid THEN
  840. cur_index = i
  841. IF arr_curbars[i].sflag = 0 THEN EXIT
  842. END IF
  843. NEXT
  844. IF cur_index = 0 THEN
  845. rslt = 0
  846. arg_msg = '条码不经过本工组'
  847. GOTO ext
  848. END IF
  849. IF arr_curbars[cur_index].sflag = 1 THEN
  850. rslt = 0
  851. arg_msg = '条码已经完工'
  852. GOTO ext
  853. END IF
  854. Long ifaccept = 1, parentid, cnt
  855. IF cur_index + 1 <= UpperBound(arr_curbars) THEN
  856. SELECT ifaccept,parentid
  857. INTO :ifaccept,:parentid
  858. FROM u_OrderMtrl_workgroup_tree
  859. WHERE scid = :arr_curbars[cur_index + 1].scid
  860. AND orderid = :arr_curbars[cur_index + 1].orderid
  861. And printid = :arr_curbars[cur_index + 1].printid;
  862. IF sqlca.SQLCode <> 0 THEN
  863. rslt = 0
  864. arg_msg = '查询条码是否需要接收失败,' + sqlca.SQLErrText
  865. GOTO ext
  866. END IF
  867. IF parentid = arr_curbars[cur_index].printid THEN
  868. IF ifaccept = 1 THEN
  869. IF arr_curbars[cur_index + 1].oflag <> 1 THEN
  870. rslt = 0
  871. arg_msg = '条码未接收'
  872. GOTO ext
  873. END IF
  874. END IF
  875. IF arr_curbars[cur_index + 1].sflag <> 1 THEN
  876. rslt = 0
  877. arg_msg = '条码上工组未完工'
  878. GOTO ext
  879. END IF
  880. // 更新上工艺组装标记
  881. UPDATE u_ordermtrl_workgroup_barcode
  882. SET inflag = 1
  883. WHERE barcode = :arr_curbars[cur_index + 1].barcode
  884. AND printid = :arr_curbars[cur_index + 1].printid
  885. And inflag = 0;
  886. IF sqlca.SQLCode <> 0 THEN
  887. rslt = 0
  888. arg_msg = '更新组装标记失败,' + sqlca.SQLErrText
  889. GOTO ext
  890. END IF
  891. IF sqlca.SQLNRows = 0 THEN
  892. rslt = 0
  893. arg_msg = '另一个任务更新了组装标记,本任务终止'
  894. GOTO ext
  895. END IF
  896. END IF
  897. END IF
  898. IF arg_replace THEN
  899. IF pf_try_replace(cur_index, Ref arr_curbars, Ref arg_msg) <> 1 THEN
  900. rslt = 0
  901. GOTO ext
  902. END IF
  903. END IF
  904. // 获取其它工艺分支
  905. s_p_tree arr_children[], arr_temp[]
  906. 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
  907. rslt = 0
  908. GOTO ext
  909. END IF
  910. IF cur_index + 1 <= UpperBound(arr_curbars) THEN
  911. FOR i = 1 To UpperBound(arr_children)
  912. IF arr_children[i].printid <> arr_curbars[cur_index + 1].printid THEN
  913. arr_temp[UpperBound(arr_temp) + 1] = arr_children[i]
  914. END IF
  915. NEXT
  916. arr_children = arr_temp
  917. END IF
  918. s_p_barcode arr_lastbars[], arr_notinbars[]
  919. String ls_tran, ls_tran2
  920. FOR i = 1 To UpperBound(arr_children)
  921. IF pf_get_canin(arr_children[i], Ref arr_lastbars, Ref arg_msg) <> 1 THEN
  922. rslt = 0
  923. GOTO ext
  924. END IF
  925. IF UpperBound(arr_lastbars) <= 0 THEN
  926. IF arg_replace THEN
  927. // DONE: 查找其它主计划的可组装部件
  928. IF pf_get_canin_other(arr_children[i], Ref arr_lastbars, Ref arg_msg) <> 1 THEN
  929. rslt = 0
  930. GOTO ext
  931. END IF
  932. IF UpperBound(arr_lastbars) <= 0 THEN
  933. rslt = 0
  934. arg_msg = '1.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
  935. GOTO ext
  936. END IF
  937. IF pf_get_notin(arr_children[i], Ref arr_notinbars, Ref arg_msg) <> 1 THEN
  938. rslt = 0
  939. GOTO ext
  940. END IF
  941. IF UpperBound(arr_notinbars) <= 0 THEN
  942. rslt = 0
  943. arg_msg = '2.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
  944. GOTO ext
  945. END IF
  946. ELSE
  947. rslt = 0
  948. arg_msg = '3.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足'
  949. GOTO ext
  950. END IF
  951. END IF
  952. FOR j = 1 To UpperBound(arr_lastbars)
  953. IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
  954. rslt = 0
  955. GOTO ext
  956. END IF
  957. // 更新上工艺组装标记
  958. UPDATE u_ordermtrl_workgroup_barcode
  959. SET inflag = 1
  960. WHERE barcode = :arr_lastbars[j].barcode
  961. AND printid = :arr_lastbars[j].printid
  962. And inflag = 0;
  963. IF sqlca.SQLCode <> 0 THEN
  964. rslt = 0
  965. arg_msg = '部件'+arr_children[i].relname+':'+arr_children[i].partname+'更新组装标记失败,' + sqlca.SQLErrText
  966. GOTO ext
  967. END IF
  968. IF sqlca.SQLNRows > 0 THEN
  969. IF arr_lastbars[j].scid <> arr_children[i].scid Or arr_lastbars[j].orderid <> arr_children[i].orderid THEN
  970. // DONE: 交换条码
  971. FOR k = 1 To UpperBound(arr_notinbars)
  972. IF pf_savepoint(Ref ls_tran2, Ref arg_msg) <> 1 THEN
  973. rslt = 0
  974. GOTO ext
  975. END IF
  976. IF uf_swap_barcode(arr_lastbars[j].barcode, arr_notinbars[k].barcode, Ref arg_msg) <> 1 THEN
  977. IF pf_rollback(ls_tran2, Ref arg_msg) <> 1 THEN
  978. rslt = 0
  979. GOTO ext
  980. END IF
  981. CONTINUE
  982. END IF
  983. EXIT
  984. NEXT
  985. IF k > UpperBound(arr_notinbars) THEN
  986. IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
  987. rslt = 0
  988. GOTO ext
  989. END IF
  990. CONTINUE
  991. END IF
  992. END IF
  993. EXIT
  994. END IF
  995. NEXT
  996. IF j > UpperBound(arr_lastbars) THEN
  997. rslt = 0
  998. arg_msg = '4.部件'+arr_children[i].relname+':'+arr_children[i].partname+'不足,已被占用'
  999. GOTO ext
  1000. END IF
  1001. NEXT
  1002. UPDATE u_ordermtrl_workgroup_barcode
  1003. SET sflag = 1,
  1004. sdate = :arg_date,
  1005. semp = :arg_emp,
  1006. workgroupid = :arg_workgroupid
  1007. WHERE barcode = :arr_curbars[cur_index].barcode
  1008. AND printid = :arr_curbars[cur_index].printid
  1009. And sflag = 0;
  1010. IF sqlca.SQLCode <> 0 THEN
  1011. rslt = 0
  1012. arg_msg = '更新部件条码完工标记失败,' + sqlca.SQLErrText
  1013. GOTO ext
  1014. END IF
  1015. IF sqlca.SQLNRows <= 0 THEN
  1016. rslt = 0
  1017. arg_msg = '另一个任务更新了部件条码完工标记,本任务终止'
  1018. GOTO ext
  1019. END IF
  1020. UPDATE u_OrderMtrl_workgroup_tree
  1021. SET u_ordermtrl_workgroup_tree.sqty =
  1022. case when u_ordermtrl_workgroup_tree.sqty + :arr_curbars[cur_index].qty >
  1023. u_ordermtrl_workgroup_tree.orderqty
  1024. then u_ordermtrl_workgroup_tree.orderqty
  1025. else u_ordermtrl_workgroup_tree.sqty + :arr_curbars[cur_index].qty END,
  1026. u_ordermtrl_workgroup_tree.sdate = :arg_date
  1027. WHERE scid = :arr_curbars[cur_index].scid
  1028. AND orderid = :arr_curbars[cur_index].orderid
  1029. And printid = :arr_curbars[cur_index].printid;
  1030. IF sqlca.SQLCode <> 0 THEN
  1031. rslt = 0
  1032. arg_msg = '更新工艺路线完成数失败,' + sqlca.SQLErrText
  1033. GOTO ext
  1034. END IF
  1035. arr_curbars[cur_index].sdate = arg_date
  1036. IF pf_barcode_pt(arr_curbars[cur_index], Ref arg_msg) <> 1 THEN
  1037. rslt = 0
  1038. GOTO ext
  1039. END IF
  1040. SELECT ifaccept
  1041. INTO :ifaccept
  1042. FROM u_OrderMtrl_workgroup_tree
  1043. WHERE scid = :arr_curbars[cur_index].scid
  1044. AND orderid = :arr_curbars[cur_index].orderid
  1045. And printid = :arr_curbars[cur_index].printid;
  1046. IF sqlca.SQLCode <> 0 THEN
  1047. rslt = 0
  1048. arg_msg = '查询本条码是否需要接收失败,' + sqlca.SQLErrText
  1049. GOTO ext
  1050. END IF
  1051. IF ifaccept = 0 THEN //条码不用接收,完工后自动接收
  1052. SELECT COUNT(0)
  1053. INTO :cnt
  1054. FROM u_order_wkp_barcode_pda
  1055. WHERE barcode = :arr_curbars[cur_index].barcode
  1056. AND wrkgrpid = :arr_curbars[cur_index].owkpid
  1057. And Kind = 1;
  1058. IF sqlca.SQLCode <> 0 THEN
  1059. rslt = 0
  1060. arg_msg = '查询PDA已扫部件条码失败,' + sqlca.SQLErrText
  1061. GOTO ext
  1062. END IF
  1063. IF cnt <= 0 THEN
  1064. INSERT INTO u_order_wkp_barcode_pda(barcode,wrkgrpid,kind,flag,opemp,opdate)
  1065. Values(:arr_curbars[cur_index].barcode,:arr_curbars[cur_index].owkpid,1,1,:arg_emp,:arg_date);
  1066. IF sqlca.SQLCode <> 0 THEN
  1067. rslt = 0
  1068. arg_msg = '插入PDA已扫部件条码失败,' + sqlca.SQLErrText
  1069. GOTO ext
  1070. END IF
  1071. ELSE
  1072. UPDATE u_order_wkp_barcode_pda
  1073. SET flag = 1
  1074. WHERE barcode = :arr_curbars[cur_index].barcode
  1075. AND wrkgrpid = :arr_curbars[cur_index].owkpid
  1076. AND Kind = 1
  1077. And flag <> 1;
  1078. IF sqlca.SQLCode <> 0 THEN
  1079. rslt = 0
  1080. arg_msg = '更改PDA已扫部件条码处理标记失败,' + sqlca.SQLErrText
  1081. GOTO ext
  1082. END IF
  1083. END IF
  1084. IF sqlca.SQLNRows > 0 THEN
  1085. IF uf_o_barcode(arr_curbars[cur_index].owkpid, arr_curbars[cur_index].barcode, arg_emp, arg_date, Ref arg_msg, False) <> 1 THEN
  1086. rslt = 0
  1087. GOTO ext
  1088. END IF
  1089. END IF
  1090. END IF
  1091. ext:
  1092. IF arg_ifcommit THEN
  1093. IF rslt = 1 THEN
  1094. COMMIT;
  1095. ELSE
  1096. ROLLBACK;
  1097. arg_msg = 'swkpid:'+String(arg_swkpid)+'/barcode:'+arg_barcode+':'+arg_msg
  1098. END IF
  1099. END IF
  1100. RETURN rslt
  1101. end function
  1102. private function integer pf_try_replace (long arg_curindex, ref s_p_barcode arg_s_barcodes[], ref string arg_msg);// DONE: 尝试替换
  1103. Int rslt = 1
  1104. s_p_barcode arr_bars_early[]
  1105. IF pf_get_canswap(arg_s_barcodes[arg_curindex], Ref arr_bars_early, Ref arg_msg) <> 1 THEN
  1106. rslt = 0
  1107. GOTO ext
  1108. END IF
  1109. Long i, j
  1110. String ls_tran
  1111. FOR i = 1 To UpperBound(arr_bars_early)
  1112. IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
  1113. rslt = 0
  1114. GOTO ext
  1115. END IF
  1116. IF uf_swap_barcode(arr_bars_early[i].barcode, arg_s_barcodes[arg_curindex].barcode, Ref arg_msg) <> 1 THEN
  1117. IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
  1118. rslt = 0
  1119. GOTO ext
  1120. END IF
  1121. CONTINUE
  1122. END IF
  1123. FOR j = 1 To UpperBound(arg_s_barcodes)
  1124. arg_s_barcodes[j].scid = arr_bars_early[i].scid
  1125. arg_s_barcodes[j].orderid = arr_bars_early[i].orderid
  1126. NEXT
  1127. GOTO ext
  1128. NEXT
  1129. ext:
  1130. RETURN rslt
  1131. end function
  1132. private function integer pf_savepoint (ref string arg_tran, ref string arg_msg);Int rslt = 1
  1133. SELECT top 1 name
  1134. INTO :arg_tran
  1135. From (SELECT Replace(NEWID(), '-', '') as Name) a;
  1136. IF sqlca.SQLCode <> 0 THEN
  1137. rslt = 0
  1138. arg_msg = '查询事务唯一码失败,' + sqlca.SQLErrText
  1139. GOTO ext
  1140. END IF
  1141. String cmd
  1142. cmd = "SAVE TRANSACTION [" + arg_tran + "]"
  1143. EXECUTE Immediate :cmd;
  1144. IF sqlca.SQLCode <> 0 THEN
  1145. rslt = 0
  1146. arg_msg = '保存事务失败,' + sqlca.SQLErrText
  1147. GOTO ext
  1148. END IF
  1149. ext:
  1150. RETURN rslt
  1151. end function
  1152. public function integer pf_rollback (string arg_tran, ref string arg_msg);Int rslt = 1
  1153. String cmd
  1154. cmd = "ROLLBACK TRANSACTION [" + arg_tran + "]"
  1155. EXECUTE Immediate :cmd;
  1156. IF sqlca.SQLCode <> 0 THEN
  1157. rslt = 0
  1158. arg_msg = '回滚事务失败,' + sqlca.SQLErrText
  1159. GOTO ext
  1160. END IF
  1161. ext:
  1162. RETURN rslt
  1163. end function
  1164. private function integer pf_get_canswap (s_p_barcode arg_barcode, ref s_p_barcode arg_bars[], ref string arg_msg);Int rslt = 1
  1165. s_p_order_ml order_ml
  1166. IF pf_get_order_ml(arg_barcode.scid, arg_barcode.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
  1167. rslt = 0
  1168. GOTO ext
  1169. END IF
  1170. DateTime ld_rqdate
  1171. SELECT top 1 requiredate
  1172. INTO :ld_rqdate
  1173. FROM u_OrderMtrl_workgroup
  1174. WHERE scid = :arg_barcode.scid
  1175. AND orderid = :arg_barcode.orderid
  1176. AND wrkGrpid = :arg_barcode.swkpid
  1177. Order By requiredate;
  1178. IF sqlca.SQLCode <> 0 THEN
  1179. rslt = 0
  1180. arg_msg = '查询本条码需求日期失败,' + sqlca.SQLErrText
  1181. GOTO ext
  1182. END IF
  1183. s_p_barcode arr_bars[]
  1184. Long i = 0
  1185. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  1186. decimal ptqty
  1187. String barcode
  1188. String relname,partname
  1189. DateTime ptdate,sdate
  1190. Decimal qty
  1191. DECLARE cur1 CURSOR FOR SELECT TOP 10 u_ordermtrl_workgroup_barcode.scid,
  1192. u_ordermtrl_workgroup_barcode.orderid,
  1193. u_ordermtrl_workgroup_barcode.printid,
  1194. u_ordermtrl_workgroup_barcode.pid,
  1195. u_ordermtrl_workgroup_barcode.barcode,
  1196. u_ordermtrl_workgroup_barcode.swkpid,
  1197. u_ordermtrl_workgroup_barcode.owkpid,
  1198. u_ordermtrl_workgroup_barcode.sflag,
  1199. u_ordermtrl_workgroup_barcode.oflag,
  1200. u_ordermtrl_workgroup_barcode.ptqty,
  1201. u_ordermtrl_workgroup_barcode.inflag,
  1202. u_ordermtrl_workgroup_barcode.qty,
  1203. u_ordermtrl_workgroup_barcode.relname,
  1204. u_ordermtrl_workgroup_barcode.partname,
  1205. u_ordermtrl_workgroup_barcode.ptdate,
  1206. u_ordermtrl_workgroup_barcode.sdate
  1207. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1208. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1209. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1210. u_OrderMtrl_workgroup ON
  1211. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  1212. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  1213. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  1214. WHERE u_Order_ml.mtrlid = :order_ml.mtrlid AND
  1215. u_Order_ml.status_mode = :order_ml.status_mode AND
  1216. u_Order_ml.woodcode = :order_ml.woodcode AND
  1217. u_Order_ml.pcode = :order_ml.pcode AND
  1218. u_ordermtrl_workgroup_barcode.swkpid = :arg_barcode.swkpid AND
  1219. u_ordermtrl_workgroup_barcode.owkpid = :arg_barcode.owkpid AND
  1220. u_ordermtrl_workgroup_barcode.relname = :arg_barcode.relname AND
  1221. u_ordermtrl_workgroup_barcode.partname = :arg_barcode.partname AND
  1222. u_ordermtrl_workgroup_barcode.printid = :arg_barcode.printid AND
  1223. u_ordermtrl_workgroup_barcode.orderid > 0 AND
  1224. (u_ordermtrl_workgroup_barcode.orderid <> :arg_barcode.orderid OR
  1225. u_ordermtrl_workgroup_barcode.scid <> :arg_barcode.scid) AND
  1226. u_OrderMtrl_workgroup.requiredate < :ld_rqdate AND
  1227. u_ordermtrl_workgroup_barcode.sflag = 0 AND
  1228. u_Order_ml.status = 1
  1229. Order By u_OrderMtrl_workgroup.requiredate;
  1230. OPEN cur1;
  1231. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1232. DO WHILE sqlca.SQLCode = 0
  1233. i++
  1234. arr_bars[i].scid = scid
  1235. arr_bars[i].orderid = orderid
  1236. arr_bars[i].printid = printid
  1237. arr_bars[i].pid = pid
  1238. arr_bars[i].barcode = barcode
  1239. arr_bars[i].swkpid = swkpid
  1240. arr_bars[i].owkpid = owkpid
  1241. arr_bars[i].sflag = sflag
  1242. arr_bars[i].oflag = oflag
  1243. arr_bars[i].ptqty = ptqty
  1244. arr_bars[i].inflag = inflag
  1245. arr_bars[i].qty = qty
  1246. arr_bars[i].relname = relname
  1247. arr_bars[i].partname = partname
  1248. arr_bars[i].ptdate = ptdate
  1249. arr_bars[i].sdate = sdate
  1250. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1251. LOOP
  1252. CLOSE cur1;
  1253. arg_bars = arr_bars
  1254. ext:
  1255. RETURN rslt
  1256. end function
  1257. 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
  1258. s_p_order_ml order_ml
  1259. IF pf_get_order_ml(arg_tree.scid, arg_tree.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
  1260. rslt = 0
  1261. GOTO ext
  1262. END IF
  1263. s_p_barcode arr_bars[]
  1264. Long i = 0
  1265. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  1266. decimal ptqty
  1267. String barcode
  1268. String relname,partname
  1269. DateTime ptdate,sdate
  1270. Decimal qty
  1271. DECLARE cur1 CURSOR FOR SELECT TOP 10 u_ordermtrl_workgroup_barcode.scid,
  1272. u_ordermtrl_workgroup_barcode.orderid,
  1273. u_ordermtrl_workgroup_barcode.printid,
  1274. u_ordermtrl_workgroup_barcode.pid,
  1275. u_ordermtrl_workgroup_barcode.barcode,
  1276. u_ordermtrl_workgroup_barcode.swkpid,
  1277. u_ordermtrl_workgroup_barcode.owkpid,
  1278. u_ordermtrl_workgroup_barcode.sflag,
  1279. u_ordermtrl_workgroup_barcode.oflag,
  1280. u_ordermtrl_workgroup_barcode.ptqty,
  1281. u_ordermtrl_workgroup_barcode.inflag,
  1282. u_ordermtrl_workgroup_barcode.qty,
  1283. u_ordermtrl_workgroup_barcode.relname,
  1284. u_ordermtrl_workgroup_barcode.partname,
  1285. u_ordermtrl_workgroup_barcode.ptdate,
  1286. u_ordermtrl_workgroup_barcode.sdate
  1287. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  1288. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  1289. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  1290. u_OrderMtrl_workgroup_tree ON
  1291. u_OrderMtrl_workgroup_tree.scid = u_ordermtrl_workgroup_barcode.scid AND
  1292. u_OrderMtrl_workgroup_tree.orderid = u_ordermtrl_workgroup_barcode.orderid AND
  1293. u_OrderMtrl_workgroup_tree.printid = u_ordermtrl_workgroup_barcode.printid
  1294. WHERE u_Order_ml.mtrlid = :order_ml.mtrlid AND
  1295. u_Order_ml.status_mode = :order_ml.status_mode AND
  1296. u_Order_ml.woodcode = :order_ml.woodcode AND
  1297. u_Order_ml.pcode = :order_ml.pcode AND
  1298. u_ordermtrl_workgroup_barcode.swkpid = :arg_tree.swkpid AND
  1299. u_ordermtrl_workgroup_barcode.owkpid = :arg_tree.owkpid AND
  1300. u_ordermtrl_workgroup_barcode.relname = :arg_tree.relname AND
  1301. u_ordermtrl_workgroup_barcode.partname = :arg_tree.partname AND
  1302. u_ordermtrl_workgroup_barcode.printid = :arg_tree.printid AND
  1303. u_ordermtrl_workgroup_barcode.orderid > 0 AND
  1304. (u_ordermtrl_workgroup_barcode.orderid <> :arg_tree.orderid OR
  1305. u_ordermtrl_workgroup_barcode.scid <> :arg_tree.scid) AND
  1306. u_ordermtrl_workgroup_barcode.sflag = 1 AND
  1307. u_OrderMtrl_workgroup_tree.ifaccept = :arg_tree.ifaccept AND
  1308. (u_ordermtrl_workgroup_barcode.oflag = 1 AND :arg_tree.ifaccept = 1 OR :arg_tree.ifaccept = 0) AND
  1309. u_ordermtrl_workgroup_barcode.inflag = 0 AND
  1310. u_Order_ml.status = 1;
  1311. OPEN cur1;
  1312. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1313. DO WHILE sqlca.SQLCode = 0
  1314. i++
  1315. arr_bars[i].scid = scid
  1316. arr_bars[i].orderid = orderid
  1317. arr_bars[i].printid = printid
  1318. arr_bars[i].pid = pid
  1319. arr_bars[i].barcode = barcode
  1320. arr_bars[i].swkpid = swkpid
  1321. arr_bars[i].owkpid = owkpid
  1322. arr_bars[i].sflag = sflag
  1323. arr_bars[i].oflag = oflag
  1324. arr_bars[i].ptqty = ptqty
  1325. arr_bars[i].inflag = inflag
  1326. arr_bars[i].qty = qty
  1327. arr_bars[i].relname = relname
  1328. arr_bars[i].partname = partname
  1329. arr_bars[i].ptdate = ptdate
  1330. arr_bars[i].sdate = sdate
  1331. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1332. LOOP
  1333. CLOSE cur1;
  1334. arg_bars = arr_bars
  1335. ext:
  1336. RETURN rslt
  1337. end function
  1338. private function integer pf_get_notin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取可组装的部件条码
  1339. Int rslt = 1
  1340. s_p_barcode arr_bars[]
  1341. Long i = 0
  1342. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  1343. decimal ptqty
  1344. String barcode
  1345. string relname,partname
  1346. datetime ptdate,sdate
  1347. Decimal qty
  1348. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  1349. FROM u_ordermtrl_workgroup_barcode
  1350. WHERE scid = :arg_tree.scid
  1351. AND orderid = :arg_tree.orderid
  1352. AND printid = :arg_tree.printid
  1353. AND inflag = 0;
  1354. OPEN cur1;
  1355. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1356. DO WHILE sqlca.SQLCode = 0
  1357. i++
  1358. arr_bars[i].scid = scid
  1359. arr_bars[i].orderid = orderid
  1360. arr_bars[i].printid = printid
  1361. arr_bars[i].pid = pid
  1362. arr_bars[i].barcode = barcode
  1363. arr_bars[i].swkpid = swkpid
  1364. arr_bars[i].owkpid = owkpid
  1365. arr_bars[i].sflag = sflag
  1366. arr_bars[i].oflag = oflag
  1367. arr_bars[i].ptqty = ptqty
  1368. arr_bars[i].inflag = inflag
  1369. arr_bars[i].qty = qty
  1370. arr_bars[i].relname = relname
  1371. arr_bars[i].partname = partname
  1372. arr_bars[i].ptdate = ptdate
  1373. arr_bars[i].sdate = sdate
  1374. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1375. LOOP
  1376. CLOSE cur1;
  1377. arg_bars = arr_bars
  1378. RETURN rslt
  1379. end function
  1380. private function integer pf_get_canin (s_p_tree arg_tree, ref s_p_barcode arg_bars[], ref string arg_msg);// DONE: 获取可组装的部件条码
  1381. Int rslt = 1
  1382. s_p_barcode arr_bars[]
  1383. Long i = 0
  1384. Long scid,orderid,printid,pid,swkpid,owkpid,sflag,oflag,inflag
  1385. decimal ptqty
  1386. String barcode
  1387. string relname,partname
  1388. datetime ptdate,sdate
  1389. Decimal qty
  1390. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, pid, barcode, swkpid, owkpid, sflag, oflag, ptqty, inflag, qty, relname, partname, ptdate, sdate
  1391. FROM u_ordermtrl_workgroup_barcode
  1392. WHERE scid = :arg_tree.scid
  1393. AND orderid = :arg_tree.orderid
  1394. AND printid = :arg_tree.printid
  1395. AND (oflag = 1 AND :arg_tree.ifaccept = 1 OR :arg_tree.ifaccept = 0) AND inflag = 0;
  1396. OPEN cur1;
  1397. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1398. DO WHILE sqlca.SQLCode = 0
  1399. i++
  1400. arr_bars[i].scid = scid
  1401. arr_bars[i].orderid = orderid
  1402. arr_bars[i].printid = printid
  1403. arr_bars[i].pid = pid
  1404. arr_bars[i].barcode = barcode
  1405. arr_bars[i].swkpid = swkpid
  1406. arr_bars[i].owkpid = owkpid
  1407. arr_bars[i].sflag = sflag
  1408. arr_bars[i].oflag = oflag
  1409. arr_bars[i].ptqty = ptqty
  1410. arr_bars[i].inflag = inflag
  1411. arr_bars[i].qty = qty
  1412. arr_bars[i].relname = relname
  1413. arr_bars[i].partname = partname
  1414. arr_bars[i].ptdate = ptdate
  1415. arr_bars[i].sdate = sdate
  1416. FETCH cur1 Into :scid,:orderid,:printid,:pid,:barcode,:swkpid,:owkpid,:sflag,:oflag,:ptqty,:inflag,:qty,:relname,:partname,:ptdate,:sdate;
  1417. LOOP
  1418. CLOSE cur1;
  1419. arg_bars = arr_bars
  1420. RETURN rslt
  1421. end function
  1422. 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: 接收条码
  1423. Int rslt = 1
  1424. s_p_barcode arr_curbars[]
  1425. IF pf_getbarcodes(arg_barcode, Ref arr_curbars, Ref arg_msg) <> 1 THEN
  1426. rslt = 0
  1427. GOTO ext
  1428. END IF
  1429. IF UpperBound(arr_curbars) = 0 THEN
  1430. rslt = 0
  1431. arg_msg = '条码不存在'
  1432. GOTO ext
  1433. END IF
  1434. Long i, j, k, cur_index = 0
  1435. FOR i = UpperBound(arr_curbars) To 1 Step -1
  1436. IF arr_curbars[i].owkpid = arg_owkpid THEN
  1437. cur_index = i
  1438. IF arr_curbars[i].oflag = 0 THEN EXIT
  1439. END IF
  1440. NEXT
  1441. IF cur_index = 0 THEN
  1442. rslt = 0
  1443. arg_msg = '条码不经过本工组'
  1444. GOTO ext
  1445. END IF
  1446. IF arr_curbars[cur_index].oflag = 1 THEN
  1447. rslt = 0
  1448. arg_msg = '条码已经被接收'
  1449. GOTO ext
  1450. END IF
  1451. IF arr_curbars[cur_index].sflag = 0 THEN
  1452. rslt = 0
  1453. arg_msg = '条码未完成'
  1454. GOTO ext
  1455. END IF
  1456. UPDATE u_ordermtrl_workgroup_barcode
  1457. SET oflag = 1,
  1458. odate = :arg_date,
  1459. oemp = :arg_emp
  1460. WHERE barcode = :arr_curbars[cur_index].barcode
  1461. AND printid = :arr_curbars[cur_index].printid
  1462. And oflag = 0;
  1463. IF sqlca.SQLCode <> 0 THEN
  1464. rslt = 0
  1465. arg_msg = '更新条码接收标记失败,' + sqlca.SQLErrText
  1466. GOTO ext
  1467. END IF
  1468. IF sqlca.SQLNRows <= 0 THEN
  1469. rslt = 0
  1470. arg_msg = '另一个任务更新了条码的接收标记,本任务终止'
  1471. GOTO ext
  1472. END IF
  1473. UPDATE u_OrderMtrl_workgroup_tree
  1474. SET oqty = oqty + :arr_curbars[cur_index].qty,
  1475. odate = :arg_date
  1476. WHERE scid = :arr_curbars[cur_index].scid
  1477. AND orderid = :arr_curbars[cur_index].orderid
  1478. And printid = :arr_curbars[cur_index].printid;
  1479. IF sqlca.SQLCode <> 0 THEN
  1480. rslt = 0
  1481. arg_msg = '更新工艺进度接收数失败,' + sqlca.SQLErrText
  1482. GOTO ext
  1483. END IF
  1484. ext:
  1485. IF arg_ifcommit THEN
  1486. IF rslt = 1 THEN
  1487. COMMIT;
  1488. ELSE
  1489. ROLLBACK;
  1490. arg_msg = 'owkpid:'+String(arg_owkpid)+'/barcode:'+arg_barcode+':'+arg_msg
  1491. END IF
  1492. END IF
  1493. RETURN rslt
  1494. end function
  1495. private function integer pf_get_barcode_last (string arg_barcode, ref s_p_mtrlware_mx arg_bar, ref string arg_msg);
  1496. Int rslt = 1
  1497. s_p_mtrlware_mx s_bar
  1498. SELECT getbarid, packqty, qty, inflag, scid, orderid
  1499. INTO :s_bar.getbarid,:s_bar.packqty,:s_bar.qty,:s_bar.inflag,:s_bar.scid,:s_bar.orderid
  1500. FROM u_mtrlware_mx
  1501. Where barcode = :arg_barcode;
  1502. IF sqlca.SQLCode <> 0 THEN
  1503. rslt = 0
  1504. arg_msg = '查询条码信息失败,' + sqlca.SQLErrText
  1505. GOTO ext
  1506. END IF
  1507. s_bar.barcode = arg_barcode
  1508. arg_bar = s_bar
  1509. ext:
  1510. RETURN rslt
  1511. end function
  1512. public function integer pf_get_getbar (long arg_getbarid, ref s_p_getbar arg_s_getbar, ref string arg_msg);// 获取条码生成单
  1513. Int rslt = 1
  1514. s_p_getbar s_getbar
  1515. SELECT scid,orderid,ifrel,storageid,cusid,plancode,mtrlcuscode,location
  1516. 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
  1517. FROM u_getbar
  1518. Where getbarid = :arg_getbarid;
  1519. IF sqlca.SQLCode <> 0 THEN
  1520. rslt = 0
  1521. arg_msg = '查询条码生成单信息失败,' + sqlca.SQLErrText
  1522. GOTO ext
  1523. END IF
  1524. s_getbar.getbarid = arg_getbarid
  1525. arg_s_getbar = s_getbar
  1526. ext:
  1527. RETURN rslt
  1528. end function
  1529. 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: 最后工组完工
  1530. Int rslt = 1
  1531. s_p_mtrlware_mx ware_mx
  1532. IF pf_get_barcode_last(arg_barcode, Ref ware_mx, Ref arg_msg) <> 1 THEN
  1533. rslt = 0
  1534. GOTO ext
  1535. END IF
  1536. IF arg_replace THEN
  1537. // DONE: 替换条码
  1538. IF pf_try_replace_last(Ref ware_mx, Ref arg_msg) <> 1 THEN
  1539. rslt = 0
  1540. GOTO ext
  1541. END IF
  1542. END IF
  1543. s_p_getbar getbar
  1544. IF pf_get_getbar(ware_mx.getbarid, Ref getbar, Ref arg_msg) <> 1 THEN
  1545. rslt = 0
  1546. GOTO ext
  1547. END IF
  1548. s_p_order_ml order_ml
  1549. IF pf_get_order_ml(getbar.scid, getbar.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
  1550. rslt = 0
  1551. GOTO ext
  1552. END IF
  1553. DateTime ld_f_requiredate
  1554. Long ll_wrkgrpid
  1555. String ls_wkpname
  1556. SELECT top 1 requiredate, wrkgrpid, wkpname
  1557. INTO :ld_f_requiredate,:ll_wrkgrpid,:ls_wkpname
  1558. FROM u_OrderMtrl_workgroup
  1559. WHERE scid = :order_ml.scid
  1560. AND orderid = :order_ml.orderid
  1561. And iflast = 1;
  1562. IF sqlca.SQLCode <> 0 THEN
  1563. rslt = 0
  1564. arg_msg = '查询最后工组需求日期失败,' + sqlca.SQLErrText
  1565. GOTO ext
  1566. END IF
  1567. IF ll_wrkgrpid <> arg_wrkgrpid THEN
  1568. rslt = 0
  1569. arg_msg = '当前完工工组不是最后完工工组'
  1570. GOTO ext
  1571. END IF
  1572. Long printid
  1573. SELECT top 1 printid
  1574. INTO :printid
  1575. FROM u_OrderMtrl_workgroup_tree
  1576. WHERE scid = :order_ml.scid
  1577. AND orderid = :order_ml.orderid
  1578. AND iflast = 1
  1579. And swkpid = :arg_wrkgrpid;
  1580. IF sqlca.SQLCode <> 0 THEN
  1581. rslt = 0
  1582. arg_msg = '查询最后工艺路线失败,' + sqlca.SQLErrText
  1583. GOTO ext
  1584. END IF
  1585. Decimal ld_maxqty
  1586. SELECT IsNull(Min(CASE WHEN ifaccept = 1 THEN oqty ELSE sqty END), 0)
  1587. Into :ld_maxqty
  1588. From u_OrderMtrl_workgroup_tree
  1589. Where scid = :order_ml.scid
  1590. And orderid = :order_ml.orderid
  1591. And parentid = :printid;
  1592. IF sqlca.SQLCode <> 0 THEN
  1593. rslt = 0
  1594. arg_msg = '查询最后工组可完成数失败,' + sqlca.SQLErrText
  1595. GOTO ext
  1596. END IF
  1597. Decimal ld_finishqty
  1598. SELECT sqty
  1599. INTO :ld_finishqty
  1600. FROM u_OrderMtrl_workgroup_tree
  1601. WHERE scid = :order_ml.scid
  1602. AND orderid = :order_ml.orderid
  1603. And printid = :printid;
  1604. IF sqlca.SQLCode <> 0 THEN
  1605. rslt = 0
  1606. arg_msg = '查询最后工组已完成数失败,' + sqlca.SQLErrText
  1607. GOTO ext
  1608. END IF
  1609. Decimal ld_packqty
  1610. ld_packqty = ware_mx.packqty * ware_mx.qty
  1611. IF ld_finishqty + ld_packqty > ld_maxqty THEN
  1612. rslt = 0
  1613. arg_msg = '上工组未配套,上工组配套数:' + String(ld_maxqty,'#,##0.#####') + ',已完成数:' + String(ld_finishqty,'#,##0.#####') + ',本次完成数:' + String(ld_packqty,'#,##0.#####')
  1614. GOTO ext
  1615. END IF
  1616. UPDATE u_OrderMtrl_workgroup_tree
  1617. SET sqty = sqty + :ld_packqty,
  1618. sdate = :arg_date
  1619. WHERE scid = :order_ml.scid
  1620. AND orderid = :order_ml.orderid
  1621. And printid = :printid;
  1622. IF sqlca.SQLCode <> 0 THEN
  1623. rslt = 0
  1624. arg_msg = '更新最后工艺已完成数失败,' + sqlca.SQLErrText
  1625. GOTO ext
  1626. END IF
  1627. IF uof_add_workgroup_qty(order_ml.scid, order_ml.orderid, arg_wrkgrpid, 0, arg_date, ld_packqty, Ref arg_msg, False) <> 1 THEN
  1628. rslt = 0
  1629. GOTO ext
  1630. END IF
  1631. ext:
  1632. IF arg_ifcommit THEN
  1633. IF rslt = 1 THEN
  1634. COMMIT;
  1635. ELSE
  1636. ROLLBACK;
  1637. arg_msg = 'arg_wrkgrpid:'+String(arg_wrkgrpid)+'/barcode:'+arg_barcode+':'+arg_msg
  1638. END IF
  1639. END IF
  1640. RETURN rslt
  1641. end function
  1642. private function integer pf_try_replace_last (ref s_p_mtrlware_mx arg_barcode, ref string arg_msg);// DONE: 替换条码
  1643. Int rslt = 1
  1644. s_p_mtrlware_mx mxs[]
  1645. IF pf_get_canswap_last(arg_barcode, Ref mxs, Ref arg_msg) <> 1 THEN
  1646. rslt = 0
  1647. GOTO ext
  1648. END IF
  1649. Long i
  1650. String ls_tran
  1651. FOR i = 1 To UpperBound(mxs)
  1652. IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
  1653. rslt = 0
  1654. GOTO ext
  1655. END IF
  1656. UPDATE u_mtrlware_mx
  1657. SET getbarid = :mxs[i].getbarid,
  1658. scid = :mxs[i].scid,
  1659. orderid = :mxs[i].orderid
  1660. WHERE barcode = :arg_barcode.barcode
  1661. And getbarid = :arg_barcode.getbarid;
  1662. IF sqlca.SQLCode <> 0 THEN
  1663. rslt = 0
  1664. arg_msg = '更改当前条码的条码生成单失败,'+sqlca.SQLErrText
  1665. GOTO ext
  1666. END IF
  1667. IF sqlca.SQLNRows <= 0 THEN
  1668. rslt = 0
  1669. arg_msg = '更改当前条码的条码生成单失败,当前条码已变更'
  1670. GOTO ext
  1671. END IF
  1672. UPDATE u_mtrlware_mx
  1673. SET getbarid = :arg_barcode.getbarid,
  1674. scid = :arg_barcode.scid,
  1675. orderid = :arg_barcode.orderid
  1676. WHERE barcode = :mxs[i].barcode
  1677. And getbarid = :mxs[i].getbarid;
  1678. IF sqlca.SQLCode <> 0 THEN
  1679. rslt = 0
  1680. arg_msg = '更改被替换条码的条码生成单失败,'+sqlca.SQLErrText
  1681. GOTO ext
  1682. END IF
  1683. IF sqlca.SQLNRows <= 0 THEN
  1684. IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
  1685. rslt = 0
  1686. GOTO ext
  1687. END IF
  1688. CONTINUE
  1689. END IF
  1690. arg_barcode.getbarid = mxs[i].getbarid
  1691. arg_barcode.scid = mxs[i].scid
  1692. arg_barcode.orderid = mxs[i].orderid
  1693. EXIT
  1694. NEXT
  1695. ext:
  1696. RETURN rslt
  1697. end function
  1698. 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: 获取可替换条码
  1699. Int rslt = 1
  1700. s_p_mtrlware_mx s_rslt[]
  1701. Long i = 0
  1702. String barcode
  1703. Long getbarid,qty,inflag,scid,orderid
  1704. Decimal packqty
  1705. s_p_getbar getbar
  1706. IF pf_get_getbar(arg_barcode.getbarid, Ref getbar, Ref arg_msg) <> 1 THEN
  1707. rslt = 0
  1708. GOTO ext
  1709. END IF
  1710. s_p_order_ml order_ml
  1711. IF pf_get_order_ml(getbar.scid, getbar.orderid, Ref order_ml, Ref arg_msg) <> 1 THEN
  1712. rslt = 0
  1713. GOTO ext
  1714. END IF
  1715. DateTime ld_f_requiredate
  1716. Long ll_wrkgrpid
  1717. String ls_wkpname
  1718. SELECT top 1 requiredate, wrkgrpid, wkpname
  1719. INTO :ld_f_requiredate,:ll_wrkgrpid,:ls_wkpname
  1720. FROM u_OrderMtrl_workgroup
  1721. WHERE scid = :order_ml.scid
  1722. AND orderid = :order_ml.orderid
  1723. And iflast = 1;
  1724. IF sqlca.SQLCode <> 0 THEN
  1725. rslt = 0
  1726. arg_msg = '查询最后工组需求日期失败,' + sqlca.SQLErrText
  1727. GOTO ext
  1728. END IF
  1729. DECLARE cur1 CURSOR FOR SELECT top 10 u_mtrlware_mx.barcode,
  1730. u_mtrlware_mx.getbarid,
  1731. u_mtrlware_mx.packqty,
  1732. u_mtrlware_mx.qty,
  1733. u_mtrlware_mx.inflag,
  1734. u_mtrlware_mx.scid,
  1735. u_mtrlware_mx.orderid
  1736. FROM u_mtrlware_mx INNER JOIN
  1737. u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid INNER JOIN
  1738. u_Order_ml ON u_getbar.scid = u_Order_ml.scid AND u_getbar.orderid = u_Order_ml.OrderID INNER JOIN
  1739. u_OrderMtrl_workgroup ON u_Order_ml.scid = u_OrderMtrl_workgroup.scid AND u_Order_ml.OrderID = u_OrderMtrl_workgroup.orderid AND
  1740. u_OrderMtrl_workgroup.iflast = 1
  1741. WHERE u_Order_ml.mtrlid = :order_ml.mtrlid
  1742. AND u_Order_ml.status_mode = :order_ml.status_mode
  1743. AND u_order_ml.woodcode = :order_ml.woodcode
  1744. AND u_Order_ml.pcode = :order_ml.pcode
  1745. AND (u_Order_ml.scid <> :order_ml.scid OR u_Order_ml.orderid <> :order_ml.orderid)
  1746. AND u_getbar.getbarid <> :arg_barcode.getbarid
  1747. AND u_mtrlware_mx.packqty * u_mtrlware_mx.qty = :arg_barcode.packqty * :arg_barcode.qty
  1748. AND u_getbar.ifrel = :getbar.ifrel
  1749. AND u_getbar.storageid = :getbar.storageid
  1750. AND u_getbar.cusid = :getbar.cusid
  1751. AND u_getbar.plancode = :getbar.plancode
  1752. AND u_getbar.mtrlcuscode = :getbar.mtrlcuscode
  1753. AND u_getbar.Location = :getbar.location
  1754. AND u_mtrlware_mx.inflag = 0
  1755. AND u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate
  1756. AND u_OrderMtrl_workgroup.wrkGrpid = :ll_wrkgrpid
  1757. AND u_OrderMtrl_workgroup.wkpname = :ls_wkpname
  1758. AND u_mtrlware_mx.barcode NOT IN (SELECT barcode FROM u_order_wkp_barcode_pda WHERE kind = 2 AND wrkgrpid = :ll_wrkgrpid)
  1759. Order By u_OrderMtrl_workgroup.requiredate;
  1760. OPEN cur1;
  1761. FETCH cur1 Into :barcode,:getbarid,:packqty,:qty,:inflag,:scid,:orderid;
  1762. DO WHILE sqlca.SQLCode = 0
  1763. i++
  1764. s_rslt[i].barcode = barcode
  1765. s_rslt[i].getbarid = getbarid
  1766. s_rslt[i].packqty = packqty
  1767. s_rslt[i].qty = qty
  1768. s_rslt[i].inflag = inflag
  1769. s_rslt[i].scid = scid
  1770. s_rslt[i].orderid = orderid
  1771. FETCH cur1 Into :barcode,:getbarid,:packqty,:qty,:inflag,:scid,:orderid;
  1772. LOOP
  1773. CLOSE cur1;
  1774. arg_mxs = s_rslt
  1775. ext:
  1776. RETURN rslt
  1777. end function
  1778. private function integer pf_barcode_pt (s_p_barcode arg_s_barcode, ref string arg_msg);// DONE: 配套条码
  1779. Int rslt = 1
  1780. Long ll_jdtype
  1781. SELECT jdtype
  1782. INTO :ll_jdtype
  1783. FROM u_sc_workgroup
  1784. Where wrkgrpid = :arg_s_barcode.swkpid;
  1785. IF sqlca.SQLCode <> 0 THEN
  1786. rslt = 0
  1787. arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
  1788. GOTO ext
  1789. END IF
  1790. IF ll_jdtype <> 6 THEN
  1791. GOTO ext
  1792. END IF
  1793. // 配套更新工组进度
  1794. s_p_tree arr_parners[], arr_temp1[]
  1795. Long i, j
  1796. String ls_tran
  1797. IF pf_getparner(arg_s_barcode.scid, arg_s_barcode.orderid, arg_s_barcode.swkpid, Ref arr_parners, Ref arg_msg) <> 1 THEN
  1798. rslt = 0
  1799. GOTO ext
  1800. END IF
  1801. FOR i = 1 To UpperBound(arr_parners)
  1802. IF arr_parners[i].printid <> arg_s_barcode.printid THEN
  1803. arr_temp1[UpperBound(arr_temp1) + 1] = arr_parners[i]
  1804. END IF
  1805. NEXT
  1806. arr_parners = arr_temp1
  1807. IF UpperBound(arr_parners) <= 0 THEN
  1808. UPDATE u_ordermtrl_workgroup_barcode
  1809. SET ptflag = 1,
  1810. ptqty = ptqty + :arg_s_barcode.qty,
  1811. ptdate = :arg_s_barcode.sdate
  1812. WHERE barcode = :arg_s_barcode.barcode
  1813. AND printid = :arg_s_barcode.printid
  1814. And sflag = 1 And ptflag = 0 And ptqty = :arg_s_barcode.ptqty;
  1815. IF sqlca.SQLCode <> 0 THEN
  1816. rslt = 0
  1817. arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
  1818. GOTO ext
  1819. END IF
  1820. IF sqlca.SQLNRows > 0 THEN
  1821. 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
  1822. rslt = 0
  1823. GOTO ext
  1824. END IF
  1825. GOTO ext
  1826. END IF
  1827. ELSE
  1828. Decimal ld_minqty, ld_totalqty
  1829. ld_minqty = arg_s_barcode.qty
  1830. FOR i = 1 To UpperBound(arr_parners)
  1831. 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
  1832. rslt = 0
  1833. GOTO ext
  1834. END IF
  1835. IF UpperBound(arr_parners[i].barcodes) <= 0 THEN
  1836. GOTO ext
  1837. END IF
  1838. ld_totalqty = 0
  1839. FOR j = 1 To UpperBound(arr_parners[i].barcodes)
  1840. ld_totalqty += arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty
  1841. NEXT
  1842. IF ld_totalqty < ld_minqty THEN
  1843. ld_minqty = ld_totalqty
  1844. END IF
  1845. NEXT
  1846. IF ld_minqty <= 0 THEN GOTO ext
  1847. IF pf_savepoint(Ref ls_tran, Ref arg_msg) <> 1 THEN
  1848. rslt = 0
  1849. GOTO ext
  1850. END IF
  1851. UPDATE u_ordermtrl_workgroup_barcode
  1852. SET ptflag = case when ptqty + :ld_minqty >= qty then 1 else 0 END,
  1853. ptqty = ptqty + :ld_minqty,
  1854. ptdate = :arg_s_barcode.sdate
  1855. WHERE barcode = :arg_s_barcode.barcode
  1856. AND printid = :arg_s_barcode.printid
  1857. And sflag = 1 And ptflag = 0 And ptqty = :arg_s_barcode.ptqty;
  1858. IF sqlca.SQLCode <> 0 THEN
  1859. rslt = 0
  1860. arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
  1861. GOTO ext
  1862. END IF
  1863. IF sqlca.SQLNRows <= 0 THEN
  1864. GOTO _cancel
  1865. END IF
  1866. Decimal ld_addqty,ld_uqty
  1867. FOR i = 1 To UpperBound(arr_parners)
  1868. ld_addqty = ld_minqty
  1869. FOR j = 1 To UpperBound(arr_parners[i].barcodes)
  1870. IF ld_addqty = 0 THEN EXIT
  1871. IF ld_addqty >= arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty THEN
  1872. ld_uqty = arr_parners[i].barcodes[j].qty - arr_parners[i].barcodes[j].ptqty
  1873. UPDATE u_ordermtrl_workgroup_barcode
  1874. SET ptflag = 1,
  1875. ptqty = ptqty + :ld_uqty,
  1876. ptdate = :arg_s_barcode.sdate
  1877. WHERE barcode = :arr_parners[i].barcodes[j].barcode
  1878. AND printid = :arr_parners[i].barcodes[j].printid
  1879. And sflag = 1 And ptflag = 0 And ptqty = :arr_parners[i].barcodes[j].ptqty;
  1880. IF sqlca.SQLCode <> 0 THEN
  1881. rslt = 0
  1882. arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
  1883. GOTO ext
  1884. END IF
  1885. IF sqlca.SQLNRows > 0 THEN
  1886. ld_addqty -= ld_uqty
  1887. END IF
  1888. ELSE
  1889. ld_uqty = ld_addqty
  1890. UPDATE u_ordermtrl_workgroup_barcode
  1891. SET ptqty = ptqty + :ld_uqty,
  1892. ptdate = :arg_s_barcode.sdate
  1893. WHERE barcode = :arr_parners[i].barcodes[j].barcode
  1894. AND printid = :arr_parners[i].barcodes[j].printid
  1895. And sflag = 1 And ptflag = 0 And ptqty = :arr_parners[i].barcodes[j].ptqty;
  1896. IF sqlca.SQLCode <> 0 THEN
  1897. rslt = 0
  1898. arg_msg = '更新部件条码配套标记失败,' + sqlca.SQLErrText
  1899. GOTO ext
  1900. END IF
  1901. IF sqlca.SQLNRows > 0 THEN
  1902. ld_addqty -= ld_uqty
  1903. END IF
  1904. END IF
  1905. NEXT
  1906. IF ld_addqty <> 0 THEN
  1907. GOTO _cancel
  1908. END IF
  1909. NEXT
  1910. 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
  1911. rslt = 0
  1912. GOTO ext
  1913. END IF
  1914. GOTO ext
  1915. _cancel:
  1916. IF pf_rollback(ls_tran, Ref arg_msg) <> 1 THEN
  1917. rslt = 0
  1918. GOTO ext
  1919. END IF
  1920. END IF
  1921. ext:
  1922. RETURN rslt
  1923. end function
  1924. 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
  1925. Long ll_cnt = 0
  1926. DateTime ld_sdate, arr_sdate[]
  1927. Long ll_jdtype
  1928. SELECT jdtype
  1929. INTO :ll_jdtype
  1930. FROM u_sc_workgroup
  1931. Where wrkgrpid = :arg_swkpid;
  1932. IF sqlca.SQLCode <> 0 THEN
  1933. rslt = 0
  1934. arg_msg = '查询工组进度生成模式失败,' + sqlca.SQLErrText
  1935. GOTO ext
  1936. END IF
  1937. IF ll_jdtype <> 6 THEN
  1938. GOTO ext
  1939. END IF
  1940. UPDATE u_OrderMtrl_workgroup
  1941. SET finishqty = finishqty
  1942. WHERE scid = :arg_scid
  1943. AND orderid = :arg_orderid
  1944. And wrkgrpid = :arg_swkpid;
  1945. IF sqlca.SQLCode <> 0 THEN
  1946. rslt = 0
  1947. arg_msg = '锁住工组进度失败,' + sqlca.SQLErrText
  1948. GOTO ext
  1949. END IF
  1950. DECLARE cur1 CURSOR FOR
  1951. SELECT DISTINCT CAST(CONVERT(varchar(10), sdate, 120) AS datetime) AS sdate
  1952. FROM u_ordermtrl_workgroup_barcode
  1953. WHERE (scid = :arg_scid)
  1954. AND (orderid = :arg_orderid)
  1955. AND (swkpid = :arg_swkpid)
  1956. AND (sflag = 1)
  1957. AND (ptflag = 0)
  1958. Order By sdate;
  1959. OPEN cur1;
  1960. FETCH cur1 Into :ld_sdate;
  1961. DO WHILE sqlca.SQLCode = 0
  1962. ll_cnt++
  1963. arr_sdate[ll_cnt] = ld_sdate
  1964. FETCH cur1 Into :ld_sdate;
  1965. LOOP
  1966. CLOSE cur1;
  1967. Long i,j,k
  1968. Decimal ld_qty1, ld_qty2, ld_addqty
  1969. Long ll_printid, arr_printid[]
  1970. Long ll_gycnt
  1971. Long ll_pid, arr_pid[]
  1972. Decimal ld_qty, arr_qty[]
  1973. Long ll_ptflag, arr_ptflag[]
  1974. Long ll_bcnt
  1975. FOR i = 1 To ll_cnt
  1976. ld_sdate = DateTime(RelativeDate(Date(arr_sdate[i]), 1))
  1977. ld_qty1 = 0
  1978. ld_qty2 = 0
  1979. SELECT ISNULL(MIN(sqty),0)
  1980. INTO :ld_qty1
  1981. FROM (SELECT SUM(CASE WHEN (ptflag = 1) AND (ptdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
  1982. FROM u_ordermtrl_workgroup_barcode
  1983. WHERE (scid = :arg_scid)
  1984. AND (orderid = :arg_orderid)
  1985. AND (swkpid = :arg_swkpid)
  1986. Group By printid) AS vvv;
  1987. IF sqlca.SQLCode <> 0 THEN
  1988. rslt = 0
  1989. arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
  1990. GOTO ext
  1991. END IF
  1992. SELECT ISNULL(MIN(sqty),0)
  1993. INTO :ld_qty2
  1994. FROM (SELECT SUM(CASE WHEN (sflag = 1) AND (sdate < :ld_sdate) THEN qty ELSE 0 END) AS sqty, printid
  1995. FROM u_ordermtrl_workgroup_barcode
  1996. WHERE (scid = :arg_scid)
  1997. AND (orderid = :arg_orderid)
  1998. AND (swkpid = :arg_swkpid)
  1999. Group By printid) AS vvv;
  2000. IF sqlca.SQLCode <> 0 THEN
  2001. rslt = 0
  2002. arg_msg = '查询已配套数失败,' + sqlca.SQLErrText
  2003. GOTO ext
  2004. END IF
  2005. IF ld_qty2 - ld_qty1 > 0 THEN
  2006. ll_gycnt = 0
  2007. DECLARE cur2 CURSOR FOR
  2008. SELECT printid
  2009. FROM u_OrderMtrl_workgroup_tree
  2010. WHERE scid = :arg_scid
  2011. AND orderid = :arg_orderid
  2012. And swkpid = :arg_swkpid;
  2013. OPEN cur2;
  2014. FETCH cur2 Into :ll_printid;
  2015. DO WHILE sqlca.SQLCode = 0
  2016. ll_gycnt++
  2017. arr_printid[ll_gycnt] = ll_printid
  2018. FETCH cur2 Into :ll_printid;
  2019. LOOP
  2020. CLOSE cur2;
  2021. FOR j = 1 To ll_gycnt
  2022. ld_addqty = ld_qty2
  2023. ll_bcnt = 0
  2024. DECLARE cur3 CURSOR FOR
  2025. SELECT pid, qty, ptflag
  2026. FROM u_ordermtrl_workgroup_barcode
  2027. WHERE scid = :arg_scid
  2028. AND orderid = :arg_orderid
  2029. AND printid = :arr_printid[j]
  2030. AND sflag = 1
  2031. AND sdate < :ld_sdate
  2032. Order By ptflag Desc, sdate;
  2033. OPEN cur3;
  2034. FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
  2035. DO WHILE sqlca.SQLCode = 0
  2036. ll_bcnt++
  2037. arr_pid[ll_bcnt] = ll_pid
  2038. arr_qty[ll_bcnt] = ld_qty
  2039. arr_ptflag[ll_bcnt] = ll_ptflag
  2040. FETCH cur3 Into :ll_pid, :ld_qty, :ll_ptflag;
  2041. LOOP
  2042. CLOSE cur3;
  2043. FOR k = 1 To ll_bcnt
  2044. IF ld_addqty <= 0 THEN
  2045. EXIT
  2046. END IF
  2047. ld_addqty -= arr_qty[k]
  2048. IF arr_ptflag[k] = 0 THEN
  2049. UPDATE u_ordermtrl_workgroup_barcode
  2050. SET ptflag = 1, ptdate = :arr_sdate[i]
  2051. WHERE scid = :arg_scid
  2052. AND orderid = :arg_orderid
  2053. AND printid = :arr_printid[j]
  2054. And pid = :arr_pid[k];
  2055. IF sqlca.SQLCode <> 0 THEN
  2056. rslt = 0
  2057. arg_msg = '更新配套标记失败,' + sqlca.SQLErrText
  2058. GOTO ext
  2059. END IF
  2060. END IF
  2061. NEXT
  2062. NEXT
  2063. ld_addqty = ld_qty2 - ld_qty1
  2064. IF uof_add_workgroup_qty(arg_scid, arg_orderid, arg_swkpid, 0, arr_sdate[i], ld_addqty, arg_msg, False) <> 1 THEN
  2065. rslt = 0
  2066. GOTO ext
  2067. END IF
  2068. END IF
  2069. NEXT
  2070. GOTO ext
  2071. ext:
  2072. IF arg_ifcommit THEN
  2073. IF rslt = 1 THEN
  2074. COMMIT;
  2075. ELSE
  2076. ROLLBACK;
  2077. END IF
  2078. END IF
  2079. RETURN rslt
  2080. end function
  2081. 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);//更新工组进度完成数
  2082. Int rslt = 1
  2083. String ls_ordercode
  2084. String ls_mtrlcode
  2085. Decimal ld_orderqty,ld_acmpqty,ld_trueqty
  2086. DateTime null_dt
  2087. SetNull(null_dt)
  2088. DateTime dt_fdate
  2089. IF arg_orderid <= 0 THEN
  2090. rslt = 0
  2091. arg_msg = '错误的计划唯一码'
  2092. GOTO ext
  2093. END IF
  2094. SELECT ordercode INTO :ls_ordercode
  2095. FROM u_Order_ml
  2096. WHERE OrderID = :arg_orderid
  2097. And scid = :arg_scid;
  2098. IF sqlca.SQLCode <> 0 THEN
  2099. arg_msg = '查询生产计划编号失败'
  2100. rslt = 0
  2101. GOTO ext
  2102. END IF
  2103. SELECT u_mtrldef.mtrlcode ,
  2104. u_order_ml.orderqty,
  2105. u_order_ml.acmpqty
  2106. INTO :ls_mtrlcode,
  2107. :ld_orderqty,
  2108. :ld_acmpqty
  2109. FROM u_mtrldef,u_order_ml
  2110. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  2111. AND u_order_ml.scid = :arg_scid
  2112. And u_Order_ml.OrderID = :arg_orderid;
  2113. IF sqlca.SQLCode <> 0 THEN
  2114. arg_msg = '查询物料编号失败'
  2115. rslt = 0
  2116. GOTO ext
  2117. END IF
  2118. //arg_swkpid:源工组;
  2119. Decimal finishqty, totalqty
  2120. SELECT isnull(sum(orderqty - stopqty),0), isnull(sum(finishqty),0)
  2121. INTO :totalqty, :finishqty
  2122. FROM u_OrderMtrl_workgroup
  2123. WHERE scid = :arg_scid
  2124. AND orderid = :arg_orderid
  2125. AND wrkGrpid = :arg_swkpid
  2126. Using sqlca;
  2127. IF sqlca.SQLCode <> 0 THEN
  2128. arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  2129. rslt = 0
  2130. GOTO ext
  2131. END IF
  2132. IF arg_qty + finishqty > totalqty THEN
  2133. arg_qty = totalqty - finishqty
  2134. END IF
  2135. IF arg_qty + finishqty < 0 THEN
  2136. arg_qty = -finishqty
  2137. END IF
  2138. IF arg_qty = 0 THEN
  2139. GOTO ext
  2140. END IF
  2141. Long ll_owrkgrpid, arr_owrkgrpid[]
  2142. String ls_wkpname, arr_wkpname[]
  2143. Long ll_workgroupid, arr_workgroupid[]
  2144. Decimal ld_ufqty, ld_fqty, arr_ufqty[], arr_fqty[]
  2145. Long ll_cnt = 0
  2146. DECLARE cur1 CURSOR FOR
  2147. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
  2148. FROM u_OrderMtrl_workgroup
  2149. WHERE scid = :arg_scid
  2150. AND orderid = :arg_orderid
  2151. AND wrkGrpid = :arg_swkpid
  2152. AND workgroupid = :arg_workgroupid
  2153. UNION
  2154. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
  2155. FROM u_OrderMtrl_workgroup
  2156. WHERE scid = :arg_scid
  2157. AND orderid = :arg_orderid
  2158. AND wrkGrpid = :arg_swkpid
  2159. And workgroupid <> :arg_workgroupid;
  2160. OPEN cur1;
  2161. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
  2162. DO WHILE sqlca.SQLCode = 0
  2163. ll_cnt++
  2164. arr_owrkgrpid[ll_cnt] = ll_owrkgrpid
  2165. arr_wkpname[ll_cnt] = ls_wkpname
  2166. arr_workgroupid[ll_cnt] = ll_workgroupid
  2167. arr_ufqty[ll_cnt] = ld_ufqty
  2168. arr_fqty[ll_cnt] = ld_fqty
  2169. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
  2170. LOOP
  2171. CLOSE cur1;
  2172. Long i
  2173. Decimal ld_addqty
  2174. ld_addqty = arg_qty
  2175. FOR i = 1 To ll_cnt
  2176. ll_owrkgrpid = arr_owrkgrpid[i]
  2177. ls_wkpname = arr_wkpname[i]
  2178. ll_workgroupid = arr_workgroupid[i]
  2179. ld_ufqty = arr_ufqty[i]
  2180. ld_fqty = arr_fqty[i]
  2181. IF ld_addqty = 0 THEN
  2182. EXIT
  2183. END IF
  2184. IF ld_addqty >= ld_ufqty THEN
  2185. IF ld_ufqty = 0 THEN CONTINUE
  2186. UPDATE u_OrderMtrl_workgroup
  2187. SET finishqty = finishqty + :ld_ufqty,
  2188. finishflag = 1,
  2189. finishdate = :arg_finishdate
  2190. WHERE scid = :arg_scid
  2191. AND orderid = :arg_orderid
  2192. AND wrkgrpid = :arg_swkpid
  2193. AND owrkgrpid = :ll_owrkgrpid
  2194. AND wkpname = :ls_wkpname
  2195. And workgroupid = :ll_workgroupid;
  2196. IF sqlca.SQLCode <> 0 THEN
  2197. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  2198. rslt = 0
  2199. GOTO ext
  2200. END IF
  2201. ld_addqty = ld_addqty - ld_ufqty
  2202. ELSEIF ld_addqty <= -ld_fqty THEN
  2203. UPDATE u_OrderMtrl_workgroup
  2204. SET finishqty = finishqty - :ld_fqty,
  2205. finishflag = 0,
  2206. finishdate = NULL
  2207. WHERE scid = :arg_scid
  2208. AND orderid = :arg_orderid
  2209. AND wrkgrpid = :arg_swkpid
  2210. AND owrkgrpid = :ll_owrkgrpid
  2211. AND wkpname = :ls_wkpname
  2212. And workgroupid = :ll_workgroupid;
  2213. IF sqlca.SQLCode <> 0 THEN
  2214. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  2215. rslt = 0
  2216. GOTO ext
  2217. END IF
  2218. ld_addqty = ld_addqty + ld_fqty
  2219. ELSE
  2220. UPDATE u_OrderMtrl_workgroup
  2221. SET finishqty = finishqty + :ld_addqty,
  2222. finishflag = 0,
  2223. finishdate = NULL
  2224. WHERE scid = :arg_scid
  2225. AND orderid = :arg_orderid
  2226. AND wrkgrpid = :arg_swkpid
  2227. AND owrkgrpid = :ll_owrkgrpid
  2228. AND wkpname = :ls_wkpname
  2229. And workgroupid = :ll_workgroupid;
  2230. IF sqlca.SQLCode <> 0 THEN
  2231. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  2232. rslt = 0
  2233. GOTO ext
  2234. END IF
  2235. ld_addqty = 0
  2236. END IF
  2237. NEXT
  2238. //IF pf_checklast(arg_scid, arg_orderid, arg_swkpid, arg_owkpid) = 1 THEN
  2239. Decimal ld_sumorderqty
  2240. SELECT isnull(sum(orderqty - stopqty),0)
  2241. INTO :ld_sumorderqty
  2242. FROM u_OrderMtrl_workgroup
  2243. WHERE scid = :arg_scid
  2244. AND orderid = :arg_orderid
  2245. AND wrkGrpid = :arg_swkpid;
  2246. IF sqlca.SQLCode <> 0 THEN
  2247. rslt = 0
  2248. arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText
  2249. GOTO ext
  2250. END IF
  2251. Decimal ld_sumfqty
  2252. SELECT isnull(sum(fqty),0)
  2253. INTO :ld_sumfqty
  2254. FROM u_OrderMtrl_workgroup_date
  2255. WHERE scid = :arg_scid
  2256. AND orderid = :arg_orderid
  2257. And wrkGrpid = :arg_swkpid;
  2258. IF sqlca.SQLCode <> 0 THEN
  2259. rslt = 0
  2260. arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText
  2261. GOTO ext
  2262. END IF
  2263. ld_addqty = arg_qty
  2264. IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN
  2265. ld_addqty = ld_sumorderqty - ld_sumfqty
  2266. END IF
  2267. IF ld_addqty + ld_sumfqty < 0 THEN
  2268. ld_addqty = -ld_sumfqty
  2269. END IF
  2270. dt_fdate = DateTime(Date(arg_finishdate), Time(0))
  2271. IF ld_addqty >= 0 THEN
  2272. UPDATE u_OrderMtrl_workgroup_date
  2273. SET fqty = fqty + :ld_addqty
  2274. WHERE scid = :arg_scid
  2275. AND orderid = :arg_orderid
  2276. AND wrkgrpid = :arg_swkpid
  2277. And fdate = :dt_fdate;
  2278. IF sqlca.SQLCode = 0 THEN
  2279. IF sqlca.SQLNRows = 0 THEN
  2280. INSERT INTO u_OrderMtrl_workgroup_date
  2281. (scid,orderid,wrkgrpid,fdate,fqty)
  2282. VALUES
  2283. (:arg_scid,:arg_orderid,:arg_swkpid,:dt_fdate,:ld_addqty);
  2284. IF sqlca.SQLCode <> 0 THEN
  2285. rslt = 0
  2286. arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
  2287. GOTO ext
  2288. END IF
  2289. END IF
  2290. ELSE
  2291. rslt = 0
  2292. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  2293. GOTO ext
  2294. END IF
  2295. ELSE
  2296. DateTime ld_date, arr_date[]
  2297. Decimal ld_fqtyd, arr_fqtyd[]
  2298. i = 0
  2299. DECLARE cur2 CURSOR FOR SELECT fdate, fqty
  2300. FROM u_OrderMtrl_workgroup_date
  2301. WHERE scid = :arg_scid
  2302. AND orderid = :arg_orderid
  2303. AND wrkgrpid = :arg_swkpid
  2304. AND fdate = :dt_fdate
  2305. UNION
  2306. SELECT fdate, fqty
  2307. FROM u_OrderMtrl_workgroup_date
  2308. WHERE scid = :arg_scid
  2309. AND orderid = :arg_orderid
  2310. AND wrkgrpid = :arg_swkpid
  2311. And fdate <> :dt_fdate;
  2312. OPEN cur2;
  2313. FETCH cur2 Into :ld_date,:ld_fqtyd;
  2314. DO WHILE sqlca.SQLCode = 0
  2315. i++
  2316. arr_date[i] = ld_date
  2317. arr_fqtyd[i] = ld_fqtyd
  2318. FETCH cur2 Into :ld_date,:ld_fqtyd;
  2319. LOOP
  2320. CLOSE cur2;
  2321. FOR i = 1 To UpperBound(arr_date)
  2322. ld_date = arr_date[i]
  2323. ld_fqtyd = arr_fqtyd[i]
  2324. IF ld_addqty = 0 THEN
  2325. EXIT
  2326. END IF
  2327. IF ld_addqty <= -ld_fqtyd THEN
  2328. UPDATE u_OrderMtrl_workgroup_date
  2329. SET fqty = fqty - :ld_fqtyd
  2330. WHERE scid = :arg_scid
  2331. AND orderid = :arg_orderid
  2332. AND wrkgrpid = :arg_swkpid
  2333. And fdate = :ld_date;
  2334. IF sqlca.SQLCode <> 0 THEN
  2335. rslt = 0
  2336. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  2337. GOTO ext
  2338. END IF
  2339. ld_addqty = ld_addqty + ld_fqtyd
  2340. ELSE
  2341. UPDATE u_OrderMtrl_workgroup_date
  2342. SET fqty = fqty + :ld_addqty
  2343. WHERE scid = :arg_scid
  2344. AND orderid = :arg_orderid
  2345. AND wrkgrpid = :arg_swkpid
  2346. And fdate = :ld_date;
  2347. IF sqlca.SQLCode <> 0 THEN
  2348. rslt = 0
  2349. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  2350. GOTO ext
  2351. END IF
  2352. ld_addqty = 0
  2353. END IF
  2354. NEXT
  2355. END IF
  2356. //END IF
  2357. ext:
  2358. IF rslt = 0 THEN
  2359. ROLLBACK;
  2360. ELSEIF rslt = 1 And arg_ifcommit THEN
  2361. COMMIT;
  2362. END IF
  2363. RETURN rslt
  2364. end function
  2365. 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: 获取同工组的工艺路线
  2366. Int rslt = 1
  2367. s_p_tree arr_trees[]
  2368. Long i = 0
  2369. Long scid,orderid,printid,swkpid,owkpid,parentid,ifaccept
  2370. String relname,partname
  2371. DECLARE cur1 CURSOR FOR SELECT scid, orderid, printid, swkpid, owkpid, parentid, relname, partname, ifaccept
  2372. FROM u_OrderMtrl_workgroup_tree
  2373. WHERE scid = :arg_scid
  2374. AND orderid = :arg_orderid
  2375. AND swkpid = :arg_swkpid
  2376. AND if_barcode = 1
  2377. Order By printid;
  2378. OPEN cur1;
  2379. FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
  2380. DO WHILE sqlca.SQLCode = 0
  2381. i++
  2382. arr_trees[i].scid = scid
  2383. arr_trees[i].orderid = orderid
  2384. arr_trees[i].printid = printid
  2385. arr_trees[i].swkpid = swkpid
  2386. arr_trees[i].owkpid = owkpid
  2387. arr_trees[i].parentid = parentid
  2388. arr_trees[i].relname = relname
  2389. arr_trees[i].partname = partname
  2390. arr_trees[i].ifaccept = ifaccept
  2391. FETCH cur1 Into :scid,:orderid,:printid,:swkpid,:owkpid,:parentid,:relname,:partname,:ifaccept;
  2392. LOOP
  2393. CLOSE cur1;
  2394. arg_trees = arr_trees
  2395. RETURN rslt
  2396. end function
  2397. on uo_partbarcode.create
  2398. call super::create
  2399. TriggerEvent( this, "constructor" )
  2400. end on
  2401. on uo_partbarcode.destroy
  2402. TriggerEvent( this, "destructor" )
  2403. call super::destroy
  2404. end on