f_order_wkp_barcode_pda.srf 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095
  1. $PBExportHeader$f_order_wkp_barcode_pda.srf
  2. global type f_order_wkp_barcode_pda from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_order_wkp_barcode_pda (boolean arg_replace, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt)
  6. end prototypes
  7. global function integer f_order_wkp_barcode_pda (boolean arg_replace, ref string arg_msg, ref long arg_cnt, ref long arg_failcnt);//====================================================================
  8. // 事件: .f_order_wkp_barcode_pda()
  9. //--------------------------------------------------------------------
  10. // 描述:
  11. //--------------------------------------------------------------------
  12. // 参数:
  13. // value boolean arg_replace 优先完成时间较早的计划
  14. // reference string arg_msg
  15. // reference long arg_cnt
  16. // reference long arg_failcnt
  17. //--------------------------------------------------------------------
  18. // 返回: integer
  19. //--------------------------------------------------------------------
  20. // 作者: lwl 日期: 2012年02月24日
  21. //--------------------------------------------------------------------
  22. // LONGJOE
  23. //--------------------------------------------------------------------
  24. // 修改历史:
  25. //
  26. //====================================================================
  27. Int rslt = 1
  28. Long ll_i,ll_j,ll_k,ll_l,ll_m
  29. Long ll_wrkgrpid
  30. String ls_barcode
  31. Long ll_swkpid,ll_owkpid
  32. Int li_sflag,li_oflag
  33. Long ll_scid,ll_orderid,ll_printid
  34. Long ll_printid_tree
  35. Int li_kind
  36. Long ll_pid
  37. DateTime ldt_opdate
  38. String ls_opemp
  39. Decimal ld_packqty
  40. Long ll_row
  41. DateTime server_dt,ldt_fdate
  42. Decimal ld_addqty
  43. String ls_relname,ls_partname
  44. Decimal ld_min_orderqty,ld_sum_fqty
  45. String ls_bar_relname, ls_bar_partname
  46. Long ll_f_mtrlid
  47. String ls_f_status ,ls_f_woodcode,ls_f_pcode
  48. Long ll_f_swkpid, ll_f_owkpid
  49. String ls_f_relname,ls_f_partname
  50. Long ll_f_scid,ll_f_orderid
  51. DateTime ld_f_requiredate
  52. Long cnt
  53. Long ll_f_printid,ll_f_pid
  54. Long ll_r_scid,ll_r_orderid,ll_r_printid,ll_r_pid
  55. String ls_r_barcode
  56. Long ll_scid_tmp
  57. Long ll_orderid_tmp
  58. Long ll_suc,ll_fail
  59. Long ll_sqty,ll_oqty
  60. Long ll_workgroupid
  61. Long ll_scid_ds,ll_orderid_ds,ll_swkpid_ds,ll_workgroupid_ds
  62. Decimal ld_minsqty_ds
  63. Long ll_workgroupid_up,ll_owrkGrpid_up
  64. String ls_wkpname_up
  65. Decimal ld_update_qty,ld_orderqty_ds,ld_stopqty_ds,ld_finishqty_ds
  66. Long ll_row_wkp
  67. String ls_orderstr_arr[]
  68. Long ll_rowcnt
  69. Long ll_mxbt
  70. Long ls_p
  71. Long ll_mxbt_wrk
  72. Long ll_scid_arr[],ll_orderid_arr[],ll_wrkgrpid_arr[],ll_scid_wkp[],ll_orderid_wkp[]
  73. Decimal ld_minsqty ,ld_finishqty
  74. Long ll_workgroupid_p
  75. Int li_barcode_check
  76. Decimal ld_qty
  77. ll_mxbt = 0
  78. ll_mxbt_wrk = 0
  79. ll_suc = 0
  80. ll_fail = 0
  81. Int ll_oldfail = 0
  82. datastore ds_pda
  83. ds_pda = Create datastore
  84. ds_pda.DataObject = 'ds_order_wkp_barcode_pda'
  85. ds_pda.SetTransObject(sqlca)
  86. datastore ds_update_wrk
  87. ds_update_wrk = Create datastore
  88. ds_update_wrk.DataObject = 'ds_barcode_update_ordermtrl_workgroup_id'
  89. ds_update_wrk.SetTransObject(sqlca)
  90. datastore ds_order_wkp
  91. ds_order_wkp = Create datastore
  92. ds_order_wkp.DataObject = 'ds_barcode_order_wkp_workgroupid'
  93. ds_order_wkp.SetTransObject(sqlca)
  94. datastore ds_relname
  95. ds_relname = Create datastore
  96. ds_relname.DataObject = 'ds_cmp_date_barcode_relname'
  97. ds_relname.SetTransObject(sqlca)
  98. datastore ds_mx
  99. ds_mx = Create datastore
  100. ds_mx.DataObject = 'ds_cmp_date_barcode_mx'
  101. ds_mx.SetTransObject(sqlca)
  102. ll_row = ds_pda.Retrieve()
  103. IF ll_row = -1 THEN
  104. IF f_re_conect(arg_msg) = 0 THEN
  105. rslt = 0
  106. GOTO ext
  107. END IF
  108. ll_row = ds_pda.Retrieve()
  109. IF ll_row = -1 THEN
  110. arg_msg = '查询未处理条码失败,' + sqlca.SQLErrText
  111. rslt = 0
  112. GOTO ext
  113. END IF
  114. END IF
  115. SELECT Top 1 getdate() Into :server_dt From u_user;
  116. //取得系统时间,借用操作员表
  117. IF sqlca.SQLCode <> 0 THEN
  118. arg_msg = '查询日期失败,'+sqlca.SQLErrText
  119. ROLLBACK;
  120. rslt = 0
  121. GOTO ext
  122. END IF
  123. ldt_fdate = DateTime(Date(server_dt),Time(0))
  124. FOR ll_i = 1 To ll_row
  125. // 临时处理 重连数据库
  126. IF ll_fail - ll_oldfail >= 5 THEN
  127. DISCONNECT;
  128. CONNECT;
  129. END IF
  130. ls_barcode = ds_pda.Object.barcode[ll_i]
  131. ll_wrkgrpid = ds_pda.Object.wrkgrpid[ll_i]
  132. li_kind = ds_pda.Object.Kind[ll_i]
  133. ldt_opdate = ds_pda.Object.opdate[ll_i]
  134. ls_opemp = ds_pda.Object.opemp[ll_i]
  135. ll_workgroupid = ds_pda.Object.workgroupid[ll_i]
  136. SELECT barcode_check
  137. INTO :li_barcode_check
  138. FROM u_sc_workgroup
  139. Where wrkgrpid = :ll_wrkgrpid;
  140. IF sqlca.SQLCode <> 0 THEN li_barcode_check = 0
  141. ll_r_orderid = 0
  142. IF li_kind = 0 THEN // 完工模式
  143. //按顺序查找同工的最早条码
  144. SELECT u_Order_ml.mtrlid,
  145. u_Order_ml.status_mode,
  146. u_Order_ml.woodcode,
  147. u_Order_ml.pcode,
  148. u_ordermtrl_workgroup_barcode.swkpid,
  149. u_ordermtrl_workgroup_barcode.owkpid,
  150. u_ordermtrl_workgroup_barcode.relname,
  151. u_ordermtrl_workgroup_barcode.partname,
  152. u_ordermtrl_workgroup_barcode.scid,
  153. u_ordermtrl_workgroup_barcode.orderid,
  154. u_OrderMtrl_workgroup.requiredate,
  155. u_ordermtrl_workgroup_barcode.printid,
  156. u_ordermtrl_workgroup_barcode.pid
  157. INTO :ll_f_mtrlid,
  158. :ls_f_status,
  159. :ls_f_woodcode,
  160. :ls_f_pcode,
  161. :ll_f_swkpid,
  162. :ll_f_owkpid,
  163. :ls_f_relname,
  164. :ls_f_partname,
  165. :ll_f_scid,
  166. :ll_f_orderid,
  167. :ld_f_requiredate,
  168. :ll_f_printid,
  169. :ll_f_pid
  170. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  171. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  172. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  173. u_OrderMtrl_workgroup ON
  174. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  175. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  176. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  177. WHERE u_ordermtrl_workgroup_barcode.barcode = :ls_barcode
  178. And u_ordermtrl_workgroup_barcode.swkpid = :ll_wrkgrpid;
  179. IF sqlca.SQLCode <> 0 THEN
  180. // ROLLBACK;
  181. // arg_msg = '查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  182. // ll_fail++
  183. // CONTINUE
  184. GOTO _update_data
  185. END IF
  186. cnt = 0
  187. SELECT count(*) INTO :cnt
  188. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  189. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  190. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  191. u_OrderMtrl_workgroup ON
  192. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  193. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  194. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  195. WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND
  196. u_Order_ml.status_mode = :ls_f_status AND
  197. u_Order_ml.woodcode = :ls_f_woodcode AND
  198. u_Order_ml.pcode = :ls_f_pcode AND
  199. u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND
  200. u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND
  201. u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND
  202. u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND
  203. u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND
  204. u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND
  205. u_ordermtrl_workgroup_barcode.sflag = 0 AND
  206. u_Order_ml.status = 1 ;
  207. IF sqlca.SQLCode <> 0 THEN
  208. ROLLBACK;
  209. // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败,'+sqlca.SQLErrText
  210. // ll_fail++
  211. // CONTINUE
  212. ll_r_scid = 0
  213. ll_r_orderid = 0
  214. ll_r_printid = 0
  215. ll_r_pid = 0
  216. GOTO _update_data
  217. END IF
  218. IF cnt > 0 And arg_replace THEN
  219. SELECT top 1 u_ordermtrl_workgroup_barcode.scid,
  220. u_ordermtrl_workgroup_barcode.orderid,
  221. u_ordermtrl_workgroup_barcode.printid,
  222. u_ordermtrl_workgroup_barcode.pid,
  223. u_ordermtrl_workgroup_barcode.barcode
  224. INTO :ll_r_scid,
  225. :ll_r_orderid,
  226. :ll_r_printid,
  227. :ll_r_pid,
  228. :ls_r_barcode
  229. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  230. u_Order_ml ON u_ordermtrl_workgroup_barcode.scid = u_Order_ml.scid AND
  231. u_ordermtrl_workgroup_barcode.orderid = u_Order_ml.OrderID INNER JOIN
  232. u_OrderMtrl_workgroup ON
  233. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  234. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  235. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid
  236. WHERE u_Order_ml.mtrlid = :ll_f_mtrlid AND
  237. u_Order_ml.status_mode = :ls_f_status AND
  238. u_Order_ml.woodcode = :ls_f_woodcode AND
  239. u_Order_ml.pcode = :ls_f_pcode AND
  240. u_ordermtrl_workgroup_barcode.swkpid = :ll_f_swkpid AND
  241. u_ordermtrl_workgroup_barcode.owkpid = :ll_f_owkpid AND
  242. u_ordermtrl_workgroup_barcode.relname = :ls_f_relname AND
  243. u_ordermtrl_workgroup_barcode.partname = :ls_f_partname AND
  244. u_ordermtrl_workgroup_barcode.orderid <> :ll_f_orderid AND
  245. u_OrderMtrl_workgroup.requiredate < :ld_f_requiredate AND
  246. u_ordermtrl_workgroup_barcode.sflag = 0 AND
  247. u_Order_ml.status = 1
  248. Order By u_OrderMtrl_workgroup.requiredate;
  249. IF sqlca.SQLCode <> 0 THEN
  250. ROLLBACK;
  251. // arg_msg = '查询条码 '+ls_barcode+' 相同部件未完成情况失败2,'+sqlca.SQLErrText
  252. // ll_fail++
  253. // CONTINUE
  254. ll_r_scid = 0
  255. ll_r_orderid = 0
  256. ll_r_printid = 0
  257. ll_r_pid = 0
  258. GOTO _update_data
  259. END IF
  260. ll_scid_tmp = ll_r_scid - 100000000
  261. ll_orderid_tmp = ll_r_orderid - 100000000
  262. UPDATE u_ordermtrl_workgroup_barcode
  263. SET scid = :ll_scid_tmp,
  264. orderid = :ll_orderid_tmp
  265. WHERE scid = :ll_r_scid
  266. AND orderid = :ll_r_orderid
  267. AND barcode = :ls_r_barcode
  268. And pid = :ll_r_pid;
  269. IF sqlca.SQLCode <> 0 THEN
  270. ROLLBACK;
  271. // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText
  272. // ll_fail++
  273. // CONTINUE
  274. ll_r_scid = 0
  275. ll_r_orderid = 0
  276. ll_r_printid = 0
  277. ll_r_pid = 0
  278. GOTO _update_data
  279. END IF
  280. // UPDATE u_ordermtrl_workgroup_barcode
  281. // SET barcode = :ls_barcode
  282. // WHERE scid = :ll_r_scid
  283. // AND orderid = :ll_r_orderid
  284. // AND barcode = :ls_r_barcode;
  285. // IF sqlca.SQLCode <> 0 THEN
  286. // ROLLBACK;
  287. // arg_msg = '更新条码 '+ls_barcode+' 信息失败 ,'+sqlca.SQLErrText
  288. // ll_fail++
  289. // CONTINUE
  290. // END IF
  291. UPDATE u_ordermtrl_workgroup_barcode
  292. SET scid = :ll_r_scid,
  293. orderid = :ll_r_orderid,
  294. pid = :ll_r_pid
  295. WHERE scid = :ll_f_scid
  296. AND orderid = :ll_f_orderid
  297. AND barcode = :ls_barcode
  298. And pid = :ll_f_pid;
  299. IF sqlca.SQLCode <> 0 THEN
  300. ROLLBACK;
  301. // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_1,'+sqlca.SQLErrText
  302. // ll_fail++
  303. // CONTINUE
  304. ll_r_scid = 0
  305. ll_r_orderid = 0
  306. ll_r_printid = 0
  307. ll_r_pid = 0
  308. GOTO _update_data
  309. END IF
  310. UPDATE u_ordermtrl_workgroup_barcode
  311. SET scid = :ll_f_scid,
  312. orderid = :ll_f_orderid,
  313. pid = :ll_f_pid
  314. WHERE scid = :ll_scid_tmp
  315. And orderid = :ll_orderid_tmp;
  316. IF sqlca.SQLCode <> 0 THEN
  317. ROLLBACK;
  318. // arg_msg = '更新条码 '+ls_barcode + '对应更换条码 '+ls_r_barcode+' 信息失败_2,'+sqlca.SQLErrText
  319. // ll_fail++
  320. // CONTINUE
  321. ll_r_scid = 0
  322. ll_r_orderid = 0
  323. ll_r_printid = 0
  324. ll_r_pid = 0
  325. GOTO _update_data
  326. END IF
  327. END IF
  328. _update_data:
  329. SELECT scid,
  330. orderid,
  331. printid,
  332. swkpid,
  333. owkpid,
  334. sflag,
  335. oflag,
  336. pid,
  337. relname,
  338. partname,
  339. workgroupid,
  340. qty
  341. INTO :ll_scid,
  342. :ll_orderid,
  343. :ll_printid,
  344. :ll_swkpid,
  345. :ll_owkpid,
  346. :li_sflag,
  347. :li_oflag,
  348. :ll_pid,
  349. :ls_bar_relname,
  350. :ls_bar_partname,
  351. :ll_workgroupid_p,
  352. :ld_qty
  353. FROM u_ordermtrl_workgroup_barcode
  354. WHERE barcode = :ls_barcode
  355. And swkpid = :ll_wrkgrpid;
  356. IF sqlca.SQLCode <> 0 THEN
  357. arg_msg = '1.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  358. ROLLBACK;
  359. ll_fail++
  360. CONTINUE
  361. END IF
  362. //不严格限制工作中心或条码本身没有指定工作中心,则程序为条码匹配工作中心
  363. IF li_barcode_check = 0 Or ll_workgroupid_p = 0 THEN
  364. //20111013 应急处理
  365. UPDATE u_OrderMtrl_workgroup_barcode
  366. SET u_ordermtrl_workgroup_barcode.workgroupid = u_OrderMtrl_workgroup.workgroupid
  367. FROM u_ordermtrl_workgroup_barcode INNER JOIN
  368. u_OrderMtrl_workgroup ON
  369. u_ordermtrl_workgroup_barcode.scid = u_OrderMtrl_workgroup.scid AND
  370. u_ordermtrl_workgroup_barcode.orderid = u_OrderMtrl_workgroup.orderid AND
  371. u_ordermtrl_workgroup_barcode.swkpid = u_OrderMtrl_workgroup.wrkGrpid AND
  372. u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid
  373. WHERE u_ordermtrl_workgroup_barcode.scid = :ll_scid
  374. AND u_ordermtrl_workgroup_barcode.orderid = :ll_orderid
  375. And u_ordermtrl_workgroup_barcode.workgroupid <> u_OrderMtrl_workgroup.workgroupid;
  376. //
  377. SELECT count(*) INTO :cnt
  378. FROM u_OrderMtrl_workgroup
  379. WHERE scid = :ll_scid
  380. AND orderid = :ll_orderid
  381. AND wrkgrpid = :ll_swkpid
  382. And workgroupid = :ll_workgroupid;
  383. IF sqlca.SQLCode <> 0 THEN
  384. cnt = 0
  385. END IF
  386. IF cnt = 0 THEN
  387. SELECT top 1 workgroupid
  388. INTO :ll_workgroupid
  389. FROM u_OrderMtrl_workgroup
  390. WHERE scid = :ll_scid
  391. AND orderid = :ll_orderid
  392. And wrkgrpid = :ll_swkpid;
  393. IF sqlca.SQLCode <> 0 THEN
  394. arg_msg = '2.查询条码 '+ls_barcode+' 相关生产计划工组进度信息失败,'+sqlca.SQLErrText
  395. ROLLBACK;
  396. ll_fail++
  397. CONTINUE
  398. END IF
  399. END IF
  400. ELSE
  401. IF ll_workgroupid_p <> ll_workgroupid THEN
  402. arg_msg = '条码 '+ls_barcode+' 所属工作中心与当前选择的工作中心不符,'+sqlca.SQLErrText
  403. ROLLBACK;
  404. ll_fail++
  405. CONTINUE
  406. END IF
  407. END IF
  408. UPDATE u_ordermtrl_workgroup_barcode
  409. SET sflag = 1,
  410. sdate = :ldt_opdate,
  411. semp = :ls_opemp,
  412. workgroupid = :ll_workgroupid
  413. WHERE scid = :ll_scid
  414. AND orderid = :ll_orderid
  415. AND printid = :ll_printid
  416. And pid = :ll_pid;
  417. IF sqlca.SQLCode <> 0 THEN
  418. arg_msg = '更新条码完成状态失败,'+sqlca.SQLErrText
  419. ROLLBACK;
  420. ll_fail++
  421. CONTINUE
  422. END IF
  423. // SELECT sum(sflag),sum(oflag)
  424. // INTO :ll_sqty,:ll_oqty
  425. // FROM u_ordermtrl_workgroup_barcode
  426. // WHERE scid = :ll_scid
  427. // AND orderid = :ll_orderid
  428. // And printid = :ll_printid;
  429. // IF sqlca.SQLCode <> 0 THEN
  430. // ROLLBACK;
  431. // arg_msg = '查询工组完成进度失败,'+sqlca.SQLErrText
  432. // ll_fail++
  433. // CONTINUE
  434. // END IF
  435. SELECT printid INTO :ll_printid_tree
  436. FROM u_OrderMtrl_workgroup_tree
  437. WHERE scid = :ll_scid
  438. AND orderid = :ll_orderid
  439. AND relname = :ls_bar_relname
  440. AND partname = :ls_bar_partname
  441. AND workgroupid = :ll_workgroupid
  442. And orderqty > sqty ;
  443. IF sqlca.SQLCode <> 0 THEN
  444. SELECT top 1 printid
  445. INTO :ll_printid_tree
  446. FROM u_OrderMtrl_workgroup_tree
  447. WHERE scid = :ll_scid
  448. AND orderid = :ll_orderid
  449. AND relname = :ls_bar_relname
  450. AND partname = :ls_bar_partname
  451. And orderqty > sqty ;
  452. IF sqlca.SQLCode <> 0 THEN
  453. ll_printid_tree = ll_printid
  454. END IF
  455. END IF
  456. UPDATE u_OrderMtrl_workgroup_tree
  457. SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_qty END,
  458. u_ordermtrl_workgroup_tree.sdate = :ldt_opdate
  459. WHERE scid = :ll_scid
  460. AND orderid = :ll_orderid
  461. And printid = :ll_printid_tree;
  462. IF sqlca.SQLCode <> 0 THEN
  463. arg_msg = '更新工组条码进度已完成数失败,'+sqlca.SQLErrText
  464. ROLLBACK;
  465. ll_fail++
  466. CONTINUE
  467. END IF
  468. IF ll_r_orderid > 0 THEN
  469. UPDATE u_OrderMtrl_workgroup_tree
  470. SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END,
  471. u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END
  472. FROM u_OrderMtrl_workgroup_tree INNER JOIN
  473. (SELECT SUM(sflag) AS sqty, SUM(oflag) AS oqty, scid, orderid, printid
  474. FROM u_ordermtrl_workgroup_barcode
  475. WHERE scid = :ll_f_scid
  476. AND orderid = :ll_f_orderid
  477. GROUP BY scid, orderid, printid) a ON
  478. u_OrderMtrl_workgroup_tree.scid = a.scid AND
  479. u_OrderMtrl_workgroup_tree.orderid = a.orderid AND
  480. u_OrderMtrl_workgroup_tree.printid = a.printid
  481. WHERE u_OrderMtrl_workgroup_tree.scid = :ll_f_scid
  482. And u_OrderMtrl_workgroup_tree.orderid = :ll_f_orderid;
  483. IF sqlca.SQLCode <> 0 THEN
  484. arg_msg = '更新工组条码进度已完成数失败(原计划),'+sqlca.SQLErrText
  485. ROLLBACK;
  486. ll_fail++
  487. CONTINUE
  488. END IF
  489. UPDATE u_OrderMtrl_workgroup_tree
  490. SET u_OrderMtrl_workgroup_tree.sqty = case when isnull(a.sqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.sqty,0) END,
  491. u_OrderMtrl_workgroup_tree.oqty = case when isnull(a.oqty,0) > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else isnull(a.oqty,0) END
  492. FROM u_OrderMtrl_workgroup_tree INNER JOIN
  493. (SELECT SUM(sflag) AS sqty, SUM(oflag) AS oqty, scid, orderid, printid
  494. FROM u_ordermtrl_workgroup_barcode
  495. WHERE scid = :ll_f_scid
  496. AND orderid = :ll_f_orderid
  497. GROUP BY scid, orderid, printid) a ON
  498. u_OrderMtrl_workgroup_tree.scid = a.scid AND
  499. u_OrderMtrl_workgroup_tree.orderid = a.orderid AND
  500. u_OrderMtrl_workgroup_tree.printid = a.printid
  501. WHERE u_OrderMtrl_workgroup_tree.scid = :ll_r_scid
  502. And u_OrderMtrl_workgroup_tree.orderid = :ll_r_orderid;
  503. IF sqlca.SQLCode <> 0 THEN
  504. arg_msg = '更新工组条码进度已完成数失败(新替换计划),'+sqlca.SQLErrText
  505. ROLLBACK;
  506. ll_fail++
  507. CONTINUE
  508. END IF
  509. END IF
  510. ELSEIF li_kind = 1 THEN // 接收模式
  511. SELECT scid,
  512. orderid,
  513. printid,
  514. swkpid,
  515. owkpid,
  516. sflag,
  517. oflag,
  518. pid,
  519. relname,
  520. partname,
  521. qty
  522. INTO :ll_scid,
  523. :ll_orderid,
  524. :ll_printid,
  525. :ll_swkpid,
  526. :ll_owkpid,
  527. :li_sflag,
  528. :li_oflag,
  529. :ll_pid,
  530. :ls_bar_relname,
  531. :ls_bar_partname,
  532. :ld_qty
  533. FROM u_ordermtrl_workgroup_barcode
  534. WHERE barcode = :ls_barcode
  535. And owkpid = :ll_wrkgrpid;
  536. IF sqlca.SQLCode <> 0 THEN
  537. arg_msg = '3.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  538. ROLLBACK;
  539. ll_fail++
  540. CONTINUE
  541. END IF
  542. UPDATE u_ordermtrl_workgroup_barcode
  543. SET oflag = 1,
  544. odate = :ldt_opdate,
  545. oemp = :ls_opemp
  546. WHERE scid = :ll_scid
  547. AND orderid = :ll_orderid
  548. AND printid = :ll_printid
  549. And pid = :ll_pid;
  550. IF sqlca.SQLCode <> 0 THEN
  551. arg_msg = '更新条码接收状态失败,'+sqlca.SQLErrText
  552. ROLLBACK;
  553. ll_fail++
  554. CONTINUE
  555. END IF
  556. SELECT top 1 printid
  557. INTO :ll_printid_tree
  558. FROM u_OrderMtrl_workgroup_tree
  559. WHERE scid = :ll_scid
  560. AND orderid = :ll_orderid
  561. AND relname = :ls_bar_relname
  562. AND partname = :ls_bar_partname
  563. And sqty > oqty ;
  564. IF sqlca.SQLCode <> 0 THEN
  565. ll_printid_tree = ll_printid
  566. END IF
  567. UPDATE u_OrderMtrl_workgroup_tree
  568. SET u_ordermtrl_workgroup_tree.oqty = case when u_ordermtrl_workgroup_tree.oqty + :ld_qty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.oqty + :ld_qty END ,
  569. u_ordermtrl_workgroup_tree.odate = :ldt_opdate
  570. WHERE scid = :ll_scid
  571. AND orderid = :ll_orderid
  572. AND printid = :ll_printid_tree
  573. And u_OrderMtrl_workgroup_tree.oqty < u_OrderMtrl_workgroup_tree.orderqty;
  574. IF sqlca.SQLCode <> 0 THEN
  575. arg_msg = '更新工组条码进度已接收数失败,'+sqlca.SQLErrText
  576. ROLLBACK;
  577. ll_fail++
  578. CONTINUE
  579. END IF
  580. ELSE // 最后工组完工
  581. SELECT u_workgroup.wrkGrpid,
  582. u_getbar.orderid,
  583. u_getbar.scid,
  584. u_mtrlware_mx.packqty
  585. INTO :ll_wrkGrpid,
  586. :ll_orderid,
  587. :ll_scid,
  588. :ld_packqty
  589. FROM u_workgroup INNER JOIN
  590. (SELECT scid, orderid, MAX(workgroupid) AS workgroupid
  591. FROM u_OrderMtrl_workgroup
  592. WHERE (iflast = 1)
  593. GROUP BY scid, orderid) ordermtrl ON
  594. u_workgroup.workgroupid = ordermtrl.workgroupid RIGHT OUTER JOIN
  595. u_mtrldef INNER JOIN
  596. u_Order_ml ON u_mtrldef.mtrlid = u_Order_ml.mtrlid ON
  597. ordermtrl.scid = u_Order_ml.scid AND
  598. ordermtrl.orderid = u_Order_ml.OrderID RIGHT OUTER JOIN
  599. u_mtrlware_mx INNER JOIN
  600. u_getbar ON u_mtrlware_mx.getbarid = u_getbar.getbarid ON
  601. u_Order_ml.scid = u_getbar.scid AND u_Order_ml.OrderID = u_getbar.orderid
  602. Where u_mtrlware_mx.barcode = :ls_barcode;
  603. IF sqlca.SQLCode <> 0 THEN
  604. arg_msg = '4.查询条码 '+ls_barcode+' 相关信息失败,'+sqlca.SQLErrText
  605. ROLLBACK;
  606. ll_fail++
  607. CONTINUE
  608. END IF
  609. UPDATE u_OrderMtrl_workgroup_tree
  610. SET u_ordermtrl_workgroup_tree.sqty = case when u_ordermtrl_workgroup_tree.sqty + :ld_packqty > u_ordermtrl_workgroup_tree.orderqty then u_ordermtrl_workgroup_tree.orderqty else u_ordermtrl_workgroup_tree.sqty + :ld_packqty END ,
  611. u_ordermtrl_workgroup_tree.sdate = :ldt_opdate
  612. WHERE scid = :ll_scid
  613. AND orderid = :ll_orderid
  614. AND iflast = 1
  615. And u_OrderMtrl_workgroup_tree.sqty < u_OrderMtrl_workgroup_tree.orderqty;
  616. IF sqlca.SQLCode <> 0 THEN
  617. arg_msg = '更新最后工组已完成数失败,'+sqlca.SQLErrText
  618. ROLLBACK;
  619. ll_fail++
  620. CONTINUE
  621. END IF
  622. END IF
  623. UPDATE u_order_wkp_barcode_pda
  624. SET flag = 1
  625. WHERE barcode = :ls_barcode
  626. AND wrkgrpid = :ll_wrkgrpid
  627. And Kind = :li_kind;
  628. IF sqlca.SQLCode <> 0 THEN
  629. arg_msg = '更新条码状态失败,'+sqlca.SQLErrText
  630. ROLLBACK;
  631. ll_fail++
  632. CONTINUE
  633. END IF
  634. IF li_kind <> 2 THEN
  635. // SELECT sum(s_qty.minsqty)
  636. // INTO :ld_addqty
  637. // FROM u_OrderMtrl_workgroup INNER JOIN
  638. // (SELECT scid, orderid, swkpid, MIN(sqty) AS minsqty
  639. // FROM (SELECT scid, orderid, swkpid, SUM(sflag) AS sqty, relname,
  640. // partname
  641. // FROM u_ordermtrl_workgroup_barcode
  642. // WHERE sflag = 1
  643. // AND CONVERT(varchar(10), sdate, 120) = CONVERT(varchar(10), :ldt_fdate, 120)
  644. // GROUP BY scid, orderid, swkpid, relname, partname) a
  645. // GROUP BY scid, orderid, swkpid) s_qty ON
  646. // u_OrderMtrl_workgroup.scid = s_qty.scid AND
  647. // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND
  648. // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid
  649. // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  650. // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  651. // AND (u_OrderMtrl_workgroup.wrkgrpid = :ll_wrkgrpid)
  652. // And (u_OrderMtrl_workgroup.iflast = 0);
  653. // IF sqlca.SQLCode <> 0 THEN
  654. // ld_addqty = 0
  655. // END IF
  656. //
  657. // IF ld_addqty > 0 THEN
  658. // UPDATE u_OrderMtrl_workgroup_date
  659. // SET fqty = :ld_addqty
  660. // WHERE scid = :ll_scid
  661. // AND orderid = :ll_orderid
  662. // AND wrkgrpid = :ll_wrkgrpid
  663. // And fdate = :ldt_fdate;
  664. // IF sqlca.SQLCode = 0 THEN
  665. // IF sqlca.SQLNRows = 0 THEN
  666. // INSERT INTO u_OrderMtrl_workgroup_date
  667. // (scid,orderid,wrkgrpid,fdate,fqty)
  668. // VALUES
  669. // (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_addqty);
  670. // IF sqlca.SQLCode <> 0 THEN
  671. // ROLLBACK;
  672. // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  673. // ll_fail++
  674. // CONTINUE
  675. // END IF
  676. // END IF
  677. // ELSE
  678. // ROLLBACK;
  679. // arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  680. // ll_fail++
  681. // CONTINUE
  682. // END IF
  683. // END IF
  684. IF li_kind = 0 THEN
  685. FOR ls_p = 1 To ll_mxbt
  686. IF ll_orderid = ll_orderid_arr[ls_p] And ll_scid = ll_scid_arr[ls_p] THEN
  687. GOTO _find_wrk
  688. END IF
  689. NEXT
  690. ll_mxbt++
  691. ls_orderstr_arr[ll_mxbt] = String(ll_orderid)+'_'+String(ll_scid)
  692. ll_orderid_arr[ll_mxbt] = ll_orderid
  693. ll_scid_arr[ll_mxbt] = ll_scid
  694. _find_wrk:
  695. FOR ls_p = 1 To ll_mxbt_wrk
  696. IF ll_orderid = ll_orderid_wkp[ls_p] And ll_scid = ll_scid_wkp[ls_p] And ll_wrkgrpid = ll_wrkgrpid_arr[ls_p] THEN
  697. GOTO _find_end
  698. END IF
  699. NEXT
  700. ll_mxbt_wrk++
  701. ll_orderid_wkp[ll_mxbt_wrk] = ll_orderid
  702. ll_scid_wkp[ll_mxbt_wrk] = ll_scid
  703. ll_wrkgrpid_arr[ll_mxbt_wrk] = ll_wrkgrpid
  704. _find_end:
  705. END IF
  706. //
  707. // UPDATE u_OrderMtrl_workgroup
  708. // SET u_OrderMtrl_workgroup.finishqty = s_qty.minsqty
  709. // FROM u_OrderMtrl_workgroup INNER JOIN
  710. // (SELECT scid, orderid, swkpid, workgroupid,MIN(sqty) AS minsqty
  711. // FROM (SELECT scid, orderid, swkpid,workgroupid, SUM(sflag) AS sqty, relname,
  712. // partname
  713. // FROM u_ordermtrl_workgroup_barcode
  714. // GROUP BY scid, orderid, swkpid, relname, partname,workgroupid) a
  715. // GROUP BY scid, orderid, swkpid,workgroupid) s_qty ON
  716. // u_OrderMtrl_workgroup.scid = s_qty.scid AND
  717. // u_OrderMtrl_workgroup.orderid = s_qty.orderid AND
  718. // u_OrderMtrl_workgroup.wrkGrpid = s_qty.swkpid and
  719. // u_OrderMtrl_workgroup.workgroupid = s_qty.workgroupid
  720. // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  721. // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  722. // And (u_OrderMtrl_workgroup.iflast = 0);
  723. // IF sqlca.SQLCode <> 0 THEN
  724. // ROLLBACK;
  725. // arg_msg = '更新工组进度失败,'+sqlca.SQLErrText
  726. // ll_fail++
  727. // CONTINUE
  728. // END IF
  729. ELSE
  730. IF ld_packqty > 0 THEN
  731. UPDATE u_OrderMtrl_workgroup_date
  732. SET fqty = fqty + :ld_packqty
  733. WHERE scid = :ll_scid
  734. AND orderid = :ll_orderid
  735. AND wrkgrpid = :ll_wrkgrpid
  736. And fdate = :ldt_fdate;
  737. IF sqlca.SQLCode = 0 THEN
  738. IF sqlca.SQLNRows = 0 THEN
  739. INSERT INTO u_OrderMtrl_workgroup_date
  740. (scid,orderid,wrkgrpid,fdate,fqty)
  741. VALUES
  742. (:ll_scid,:ll_orderid,:ll_wrkgrpid,:ldt_fdate,:ld_packqty);
  743. IF sqlca.SQLCode <> 0 THEN
  744. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  745. ROLLBACK;
  746. ll_fail++
  747. CONTINUE
  748. END IF
  749. END IF
  750. ELSE
  751. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  752. ROLLBACK;
  753. ll_fail++
  754. CONTINUE
  755. END IF
  756. END IF
  757. UPDATE u_OrderMtrl_workgroup
  758. SET u_OrderMtrl_workgroup.finishqty = case when u_OrderMtrl_workgroup.finishqty + :ld_packqty > u_OrderMtrl_workgroup.orderqty then u_OrderMtrl_workgroup.orderqty else u_OrderMtrl_workgroup.finishqty + :ld_packqty END
  759. FROM u_OrderMtrl_workgroup INNER JOIN
  760. u_sc_workgroup ON
  761. u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid
  762. WHERE (u_OrderMtrl_workgroup.scid = :ll_scid)
  763. AND (u_OrderMtrl_workgroup.orderid = :ll_orderid)
  764. AND (u_OrderMtrl_workgroup.iflast = 1)
  765. AND (u_sc_workgroup.jdtype = 6)
  766. And (u_OrderMtrl_workgroup.finishqty < u_OrderMtrl_workgroup.orderqty);
  767. IF sqlca.SQLCode <> 0 THEN
  768. arg_msg = '更新工组进度失败,'+sqlca.SQLErrText
  769. ROLLBACK;
  770. ll_fail++
  771. CONTINUE
  772. END IF
  773. END IF
  774. UPDATE u_OrderMtrl_workgroup
  775. SET finishflag = 1,finishdate = :server_dt
  776. WHERE orderid = :ll_orderid
  777. AND scid = :ll_scid
  778. And orderqty <= finishqty + stopqty;
  779. IF sqlca.SQLCode <> 0 THEN
  780. arg_msg = '更新工组完成状态失败,'+sqlca.SQLErrText
  781. ROLLBACK;
  782. ll_fail++
  783. CONTINUE
  784. END IF
  785. COMMIT;
  786. ll_suc++
  787. NEXT
  788. FOR ll_k = 1 To ll_mxbt_wrk
  789. SELECT MIN(sqty)
  790. INTO :ld_minsqty
  791. FROM (SELECT scid, orderid, swkpid, SUM(sflag) AS sqty, relname, partname
  792. FROM u_ordermtrl_workgroup_barcode
  793. WHERE scid = :ll_scid_wkp[ll_k]
  794. AND orderid = :ll_orderid_wkp[ll_k]
  795. AND swkpid = :ll_wrkgrpid_arr[ll_k]
  796. Group By scid, orderid, swkpid, relname, partname) a;
  797. IF sqlca.SQLCode <> 0 THEN
  798. ld_minsqty = 0
  799. END IF
  800. IF IsNull(ld_minsqty) THEN ld_minsqty = 0
  801. // SELECT sum(finishqty)
  802. // INTO :ld_finishqty
  803. // FROM u_OrderMtrl_workgroup
  804. // WHERE (u_OrderMtrl_workgroup.scid = :ll_scid_wkp[ll_k])
  805. // AND (u_OrderMtrl_workgroup.orderid = :ll_orderid_wkp[ll_k])
  806. // And (u_OrderMtrl_workgroup.wrkgrpid = :ll_wrkgrpid_arr[ll_k]);
  807. // IF sqlca.SQLCode <> 0 THEN
  808. // ld_finishqty = 0
  809. // END IF
  810. // IF IsNull(ld_finishqty) THEN ld_finishqty = 0
  811. //
  812. SELECT MIN(ptcnt)
  813. INTO :ld_finishqty
  814. FROM (SELECT scid, orderid, swkpid, relname, partname, SUM(ptflag) AS ptcnt
  815. FROM u_ordermtrl_workgroup_barcode
  816. WHERE (scid = :ll_scid_wkp[ll_k]) AND (orderid = :ll_orderid_wkp[ll_k]) AND (swkpid = :ll_wrkgrpid_arr[ll_k])
  817. Group By scid, orderid, swkpid, relname, partname) b;
  818. IF sqlca.SQLCode <> 0 THEN
  819. ld_finishqty = 0
  820. END IF
  821. ld_addqty = ld_minsqty - ld_finishqty
  822. IF ld_addqty > 0 THEN
  823. SELECT MIN(orderqty)
  824. INTO :ld_min_orderqty
  825. FROM u_OrderMtrl_workgroup
  826. WHERE (orderid = :ll_orderid_wkp[ll_k])
  827. AND (scid = :ll_scid_wkp[ll_k])
  828. And (wrkgrpid = :ll_wrkgrpid_arr[ll_k]);
  829. IF sqlca.SQLCode <> 0 THEN ld_min_orderqty = 0
  830. SELECT sum(fqty)
  831. INTO :ld_sum_fqty
  832. FROM u_OrderMtrl_workgroup_date
  833. WHERE (orderid = :ll_orderid_wkp[ll_k])
  834. AND (scid = :ll_scid_wkp[ll_k])
  835. And (wrkgrpid = :ll_wrkgrpid_arr[ll_k]);
  836. IF sqlca.SQLCode <> 0 THEN ld_sum_fqty = 0
  837. IF IsNull(ld_min_orderqty) THEN ld_min_orderqty = 0
  838. IF IsNull(ld_sum_fqty) THEN ld_sum_fqty = 0
  839. UPDATE u_OrderMtrl_workgroup_date
  840. SET fqty = case when :ld_sum_fqty + :ld_addqty > :ld_min_orderqty then :ld_min_orderqty else fqty + :ld_addqty END
  841. WHERE scid = :ll_scid_wkp[ll_k]
  842. AND orderid = :ll_orderid_wkp[ll_k]
  843. AND wrkgrpid = :ll_wrkgrpid_arr[ll_k]
  844. And fdate = :ldt_fdate;
  845. IF sqlca.SQLCode = 0 THEN
  846. IF sqlca.SQLNRows = 0 THEN
  847. INSERT INTO u_OrderMtrl_workgroup_date
  848. (scid,orderid,wrkgrpid,fdate,fqty)
  849. VALUES
  850. (:ll_scid_wkp[ll_k],:ll_orderid_wkp[ll_k],:ll_wrkgrpid_arr[ll_k],:ldt_fdate,:ld_addqty);
  851. IF sqlca.SQLCode <> 0 THEN
  852. arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
  853. ROLLBACK;
  854. ll_fail++
  855. CONTINUE
  856. END IF
  857. END IF
  858. ELSE
  859. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  860. ROLLBACK;
  861. ll_fail++
  862. CONTINUE
  863. END IF
  864. ds_relname.Retrieve(ll_scid_wkp[ll_k],ll_orderid_wkp[ll_k],ll_wrkgrpid_arr[ll_k])
  865. FOR ll_m = 1 To ds_relname.RowCount()
  866. ls_relname = ds_relname.Object.relname[ll_m]
  867. ls_partname = ds_relname.Object.partname[ll_m]
  868. ds_mx.Retrieve(ll_scid_wkp[ll_k],ll_orderid_wkp[ll_k],ll_wrkgrpid_arr[ll_k],ls_relname,ls_partname)
  869. FOR ll_l = 1 To Int(ld_minsqty)
  870. ll_printid = ds_mx.Object.printid[ll_l]
  871. ll_pid = ds_mx.Object.pid[ll_l]
  872. IF ds_mx.Object.ptflag[ll_l] = 1 THEN CONTINUE
  873. UPDATE u_ordermtrl_workgroup_barcode
  874. SET ptflag = 1,
  875. ptdate = :ldt_fdate
  876. WHERE scid = :ll_scid_wkp[ll_k]
  877. AND orderid = :ll_orderid_wkp[ll_k]
  878. AND printid = :ll_printid
  879. And pid = :ll_pid;
  880. IF sqlca.SQLCode <> 0 THEN
  881. arg_msg = '更新条码匹配标记失败,'+sqlca.SQLErrText
  882. ROLLBACK;
  883. ll_fail++
  884. CONTINUE
  885. END IF
  886. NEXT
  887. NEXT
  888. END IF
  889. COMMIT;
  890. NEXT
  891. FOR ll_k = 1 To ll_mxbt
  892. ll_rowcnt = ds_update_wrk.Retrieve(ll_scid_arr[ll_k],ll_orderid_arr[ll_k])
  893. IF ll_rowcnt > 0 THEN
  894. UPDATE u_OrderMtrl_workgroup
  895. SET u_OrderMtrl_workgroup.finishqty = 0,
  896. u_OrderMtrl_workgroup.finishdate = NULL
  897. FROM u_OrderMtrl_workgroup INNER JOIN
  898. u_sc_workgroup ON
  899. u_OrderMtrl_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid
  900. WHERE u_OrderMtrl_workgroup.scid = :ll_scid_arr[ll_k]
  901. AND u_OrderMtrl_workgroup.orderid = :ll_orderid_arr[ll_k]
  902. AND u_OrderMtrl_workgroup.iflast = 0
  903. And (u_sc_workgroup.jdtype = 6);
  904. IF sqlca.SQLCode <> 0 THEN
  905. arg_msg = '更新工组进度失败,'+sqlca.SQLErrText
  906. ROLLBACK;
  907. GOTO _next_order
  908. END IF
  909. END IF
  910. FOR ll_i = 1 To ll_rowcnt
  911. ll_scid_ds = ds_update_wrk.Object.scid[ll_i]
  912. ll_orderid_ds = ds_update_wrk.Object.orderid[ll_i]
  913. ll_swkpid_ds = ds_update_wrk.Object.swkpid[ll_i]
  914. ll_workgroupid_ds = ds_update_wrk.Object.workgroupid[ll_i]
  915. ld_minsqty_ds = ds_update_wrk.Object.minsqty[ll_i]
  916. ll_row_wkp = ds_order_wkp.Retrieve(ll_scid_ds,ll_orderid_ds,ll_swkpid_ds,ll_workgroupid_ds)
  917. FOR ll_j = 1 To ll_row_wkp
  918. ll_workgroupid_up = ds_order_wkp.Object.workgroupid[ll_j]
  919. ll_owrkGrpid_up = ds_order_wkp.Object.owrkgrpid[ll_j]
  920. ls_wkpname_up = ds_order_wkp.Object.wkpname[ll_j]
  921. ld_orderqty_ds = ds_order_wkp.Object.orderqty[ll_j]
  922. ld_stopqty_ds = ds_order_wkp.Object.stopqty[ll_j]
  923. ld_finishqty_ds = ds_order_wkp.Object.finishqty[ll_j]
  924. IF ll_j = ll_row_wkp THEN
  925. ld_update_qty = ld_minsqty_ds
  926. ELSE
  927. IF ld_minsqty_ds > ld_orderqty_ds - ld_finishqty_ds - ld_stopqty_ds THEN
  928. ld_update_qty = ld_orderqty_ds - ld_finishqty_ds - ld_stopqty_ds
  929. ld_minsqty_ds = ld_minsqty_ds - (ld_orderqty_ds - ld_finishqty_ds - ld_stopqty_ds)
  930. ELSE
  931. ld_update_qty = ld_minsqty_ds
  932. ld_minsqty_ds = 0
  933. END IF
  934. END IF
  935. UPDATE u_OrderMtrl_workgroup
  936. SET finishqty = case when finishqty + stopqty +:ld_update_qty > orderqty then orderqty else finishqty + :ld_update_qty END
  937. WHERE scid = :ll_scid_ds
  938. AND orderid = :ll_orderid_ds
  939. AND wrkgrpid = :ll_swkpid_ds
  940. AND owrkgrpid = :ll_owrkGrpid_up
  941. AND workgroupid = :ll_workgroupid_up
  942. And wkpname = :ls_wkpname_up;
  943. IF sqlca.SQLCode <> 0 THEN
  944. arg_msg = '更新工组进度失败,'+sqlca.SQLErrText
  945. ROLLBACK;
  946. GOTO _next
  947. END IF
  948. IF ld_minsqty_ds = 0 THEN EXIT
  949. NEXT
  950. UPDATE u_OrderMtrl_workgroup
  951. SET finishflag = 1,finishdate = :server_dt
  952. WHERE orderid = :ll_orderid_ds
  953. AND scid = :ll_scid_ds
  954. And orderqty <= finishqty + stopqty;
  955. IF sqlca.SQLCode <> 0 THEN
  956. arg_msg = '更新工组完成状态失败,'+sqlca.SQLErrText
  957. ROLLBACK;
  958. GOTO _next
  959. END IF
  960. _next:
  961. NEXT
  962. COMMIT;
  963. _next_order:
  964. NEXT
  965. ext:
  966. Destroy ds_order_wkp
  967. Destroy ds_update_wrk
  968. Destroy ds_relname
  969. Destroy ds_mx
  970. Destroy ds_pda
  971. arg_cnt = ll_suc
  972. arg_failcnt = ll_fail
  973. RETURN rslt
  974. end function