uo_ordermtrl_workgroup_picscheck.sru 23 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013
  1. $PBExportHeader$uo_ordermtrl_workgroup_picscheck.sru
  2. forward
  3. global type uo_ordermtrl_workgroup_picscheck from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_ordermtrl_workgroup_picscheck from nonvisualobject
  7. end type
  8. global uo_ordermtrl_workgroup_picscheck uo_ordermtrl_workgroup_picscheck
  9. type variables
  10. long pkid
  11. string billcode
  12. long scid
  13. long orderid
  14. string barcode
  15. long wrkgrpid
  16. long ifok
  17. string dscrp
  18. decimal qty
  19. string qcResult
  20. string opemp
  21. datetime opdate
  22. long auditflag
  23. string audit_emp
  24. datetime audit_date
  25. PUBLIC PRIVATEWRITE long billtype = 1466
  26. end variables
  27. forward prototypes
  28. public function integer uf_save (ref string arg_msg)
  29. public function integer uf_save_file (long arg_pkid, string arg_filename, blob arg_picdata, ref long arg_rt_fileid, ref string arg_msg)
  30. public function integer uf_del (long arg_pkid, ref string arg_msg)
  31. public function integer auditing (long arg_pkid, ref string arg_msg)
  32. public function integer cauditing (long arg_pkid, ref string arg_msg)
  33. public function long pf_getclassid (ref string arg_msg)
  34. 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)
  35. public function integer uof_update_pordermtrl_workgroup (string arg_pordercode, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  36. end prototypes
  37. public function integer uf_save (ref string arg_msg);Int rslt = 1
  38. IF IsNull(pkid) THEN pkid = 0
  39. IF IsNull(scid) THEN scid = 0
  40. IF IsNull(orderid) THEN orderid = 0
  41. IF IsNull(barcode) THEN barcode = ''
  42. IF IsNull(wrkgrpid) THEN wrkgrpid = 0
  43. IF IsNull(ifok) THEN ifok = 0
  44. IF IsNull(dscrp) THEN dscrp = ''
  45. IF IsNull(qty) THEN qty = 0
  46. IF IsNull(qcResult) THEN qcResult = ''
  47. IF orderid <= 0 THEN
  48. rslt = 0
  49. arg_msg = '请选择关联的指令单'
  50. GOTO ext
  51. END IF
  52. Long ll_scid, ll_orderid, ll_wkpid
  53. Decimal ld_qty
  54. IF barcode <> '' THEN
  55. SELECT scid, orderid, packqty * qty
  56. INTO :ll_scid, :ll_orderid, :ld_qty
  57. FROM u_mtrlware_mx
  58. Where (barcode = :barcode);
  59. IF sqlca.SQLCode <> 0 THEN
  60. rslt = 0
  61. arg_msg = '查询条码['+barcode+']相关信息失败,' + sqlca.SQLErrText
  62. GOTO ext
  63. END IF
  64. IF scid <> ll_scid Or orderid <> ll_orderid THEN
  65. rslt = 0
  66. arg_msg = '条码['+barcode+']对应指令单'+String(ll_scid)+'_'+String(ll_orderid)+'与传入指令单'+String(scid)+'_'+String(orderid)+'不一至'
  67. GOTO ext
  68. END IF
  69. IF ld_qty <> qty THEN
  70. rslt = 0
  71. arg_msg = '条码['+barcode+']对应数量'+String(ld_qty)+'与传入数量'+String(qty)+'不一至'
  72. GOTO ext
  73. END IF
  74. END IF
  75. String ls_wrkgrpname
  76. Long ll_inwkpid
  77. SELECT wrkgrpname, storageid
  78. INTO :ls_wrkgrpname, :ll_inwkpid
  79. FROM u_sc_workgroup
  80. Where wrkgrpid = :wrkgrpid;
  81. IF sqlca.SQLCode <> 0 THEN
  82. rslt = 0
  83. arg_msg = '查询传入工组名称失败,' + sqlca.SQLErrText
  84. GOTO ext
  85. END IF
  86. String ls_wkpname
  87. SELECT u_order_ml.wrkgrpid, u_sc_wkp.wrkgrpname
  88. INTO :ll_wkpid, :ls_wkpname
  89. FROM u_order_ml INNER join u_sc_wkp ON u_order_ml.wrkgrpid = u_sc_wkp.wrkgrpid
  90. WHERE u_order_ml.scid = :scid
  91. And u_order_ml.orderid = :orderid;
  92. IF sqlca.SQLCode <> 0 THEN
  93. rslt = 0
  94. arg_msg = '查询指令单车间失败,' + sqlca.SQLErrText
  95. GOTO ext
  96. END IF
  97. IF ll_inwkpid <> ll_wkpid THEN
  98. rslt = 0
  99. arg_msg = '传入工组"' + ls_wrkgrpname + '"不属于指令单的车间"' + ls_wkpname + '"'
  100. GOTO ext
  101. END IF
  102. IF pkid = 0 THEN
  103. // 新建
  104. Long ls_newid
  105. ls_newid = f_sys_scidentity(0,"u_OrderMtrl_workgroup_picsCheck","pkid",arg_msg,True,id_sqlca)
  106. IF ls_newid <= 0 THEN
  107. rslt = 0
  108. GOTO ext
  109. END IF
  110. DateTime server_datetime
  111. SELECT top 1 GETDATE()
  112. INTO :server_datetime
  113. From u_user;
  114. IF sqlca.SQLCode <> 0 THEN
  115. rslt = 0
  116. arg_msg = '获取服务器时间失败,' + sqlca.SQLErrText
  117. GOTO ext
  118. END IF
  119. String ls_newcode
  120. ls_newcode = getid(0,'WQ',Date(server_datetime),False,sqlca)
  121. IF ls_newcode = "err" THEN
  122. rslt = 0
  123. arg_msg = "无法获取指令单工组质检单编号"+"~n"+sqlca.SQLErrText
  124. GOTO ext
  125. END IF
  126. INSERT INTO u_OrderMtrl_workgroup_picsCheck(pkid, billcode, scid, orderid, wrkgrpid,opemp, opdate, ifok, dscrp, qty, qcResult, barcode)
  127. Values(:ls_newid, :ls_newcode, :scid, :orderid, :wrkgrpid, :publ_operator, GETDATE(), :ifok, :dscrp, :qty, :qcResult, :barcode);
  128. IF sqlca.SQLCode <> 0 THEN
  129. rslt = 0
  130. arg_msg = '插入指令单工组质检单失败,' + sqlca.SQLErrText
  131. GOTO ext
  132. END IF
  133. pkid = ls_newid
  134. billcode = ls_newcode
  135. ELSE
  136. UPDATE u_OrderMtrl_workgroup_picsCheck
  137. SET scid = :scid,
  138. orderid = :orderid,
  139. wrkgrpid = :wrkgrpid,
  140. opemp = :publ_operator,
  141. opdate = GETDATE(),
  142. ifok = :ifok,
  143. qty = :qty,
  144. dscrp = :dscrp,
  145. qcResult = :qcResult,
  146. barcode = :barcode
  147. Where pkid = :pkid And auditflag = 0;
  148. IF sqlca.SQLCode <> 0 THEN
  149. rslt = 0
  150. arg_msg = '更新指令单工组质检单信息失败,' + sqlca.SQLErrText
  151. GOTO ext
  152. END IF
  153. IF sqlca.SQLNRows = 0 THEN
  154. rslt = 0
  155. arg_msg = '单据已经被删除或者已被审核不能修改'
  156. GOTO ext
  157. END IF
  158. END IF
  159. ext:
  160. IF rslt = 1 THEN
  161. COMMIT;
  162. ELSE
  163. ROLLBACK;
  164. END IF
  165. RETURN rslt
  166. end function
  167. public function integer uf_save_file (long arg_pkid, string arg_filename, blob arg_picdata, ref long arg_rt_fileid, ref string arg_msg);Int rslt = 1
  168. Long ll_fileid, ll_classid
  169. String ls_filetype
  170. IF arg_pkid <= 0 THEN
  171. rslt = 0
  172. arg_msg = '参数单据ID无效'
  173. GOTO ext
  174. END IF
  175. String ls_billcode
  176. SELECT billcode
  177. INTO :ls_billcode
  178. FROM u_OrderMtrl_workgroup_picsCheck
  179. Where pkid = :arg_pkid;
  180. IF sqlca.SQLCode <> 0 THEN
  181. rslt = 0
  182. arg_msg = '查询单据编号失败,' + sqlca.SQLErrText
  183. GOTO ext
  184. END IF
  185. ll_classid = pf_getclassid(Ref arg_msg)
  186. IF ll_classid <= 0 THEN
  187. rslt = 0
  188. GOTO ext
  189. END IF
  190. ls_filetype = ''
  191. Long ll_pos
  192. ll_pos = lastpos(arg_filename, '.')
  193. IF ll_pos > 0 THEN
  194. ls_filetype = Mid(arg_filename, ll_pos + 1)
  195. END IF
  196. SELECT isnull(max(fileid),0) + 1
  197. INTO :ll_fileid
  198. From u_file Using sys_fileDB_sqlca;
  199. IF sys_fileDB_sqlca.SQLCode <> 0 THEN
  200. rslt = 0
  201. arg_msg = "即时获取新档案ID失败(请重试)" + sys_fileDB_sqlca.SQLErrText
  202. GOTO ext
  203. END IF
  204. INSERT INTO U_File
  205. (
  206. FileID,
  207. DisplayName,
  208. FileName,
  209. ClassID,
  210. FileType,
  211. Dscrp,
  212. Opdate,
  213. Opemp,
  214. Compressed,
  215. Encrypted,
  216. relid,
  217. relcode,
  218. billtype,
  219. relid_mx,
  220. relcode_mx,
  221. scid)
  222. VALUES (
  223. :ll_fileid,
  224. :arg_filename,
  225. :arg_filename,
  226. :ll_classid,
  227. :ls_filetype,
  228. '',
  229. GETDATE(),
  230. :publ_operator,
  231. 0,
  232. 0,
  233. :arg_pkid,
  234. :ls_billcode,
  235. :billtype,
  236. 0,
  237. '',
  238. :scid)
  239. Using sys_fileDB_sqlca;
  240. IF sys_fileDB_sqlca.SQLCode <> 0 THEN
  241. rslt = 0
  242. arg_msg = "插入文件信息失败," + sys_fileDB_sqlca.SQLErrText
  243. ROLLBACK Using sys_fileDB_sqlca;
  244. GOTO ext
  245. END IF
  246. COMMIT Using sys_fileDB_sqlca;
  247. UpdateBlob u_file
  248. Set filedata = :arg_picdata
  249. Where fileid = :ll_fileid
  250. Using sys_fileDB_sqlca;
  251. IF sys_fileDB_sqlca.SQLCode <> 0 THEN
  252. rslt = 0
  253. arg_msg = "更新文件失败" + sys_fileDB_sqlca.SQLErrText
  254. ROLLBACK Using sys_fileDB_sqlca;
  255. GOTO ext
  256. END IF
  257. arg_rt_fileid = ll_fileid
  258. COMMIT Using sys_fileDB_sqlca;
  259. ext:
  260. RETURN rslt
  261. end function
  262. public function integer uf_del (long arg_pkid, ref string arg_msg);Int rslt = 1
  263. Long ll_auditflag
  264. SELECT auditflag
  265. INTO :ll_auditflag
  266. FROM u_OrderMtrl_workgroup_picsCheck
  267. Where pkid = :arg_pkid;
  268. IF sqlca.SQLCode <> 0 THEN
  269. rslt = 0
  270. arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText
  271. GOTO ext
  272. END IF
  273. IF ll_auditflag <> 0 THEN
  274. rslt = 0
  275. arg_msg = '单据不在待审状态,不能删除'
  276. GOTO ext
  277. END IF
  278. DELETE From u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid And auditflag = 0;
  279. IF sqlca.SQLCode <> 0 THEN
  280. rslt = 0
  281. arg_msg = '删除单据失败,' + sqlca.SQLErrText
  282. GOTO ext
  283. END IF
  284. IF sqlca.SQLNRows = 0 THEN
  285. rslt = 0
  286. arg_msg = '删除单据失败,由于单据已经被删除或已被审核'
  287. GOTO ext
  288. END IF
  289. DELETE From U_File Where billtype = :billtype And relid = :arg_pkid Using sys_fileDB_sqlca;
  290. IF sys_fileDB_sqlca.SQLCode <> 0 THEN
  291. rslt = 0
  292. arg_msg = '删除单据附件失败,' + sys_fileDB_sqlca.SQLErrText
  293. GOTO ext
  294. END IF
  295. ext:
  296. IF rslt = 1 THEN
  297. COMMIT;
  298. COMMIT Using sys_fileDB_sqlca;
  299. ELSE
  300. ROLLBACK;
  301. ROLLBACK Using sys_fileDB_sqlca;
  302. END IF
  303. RETURN rslt
  304. end function
  305. public function integer auditing (long arg_pkid, ref string arg_msg);Int rslt = 1
  306. Long ll_auditflag, ll_wrkgrpid, ll_ifok, ll_scid, ll_orderid,ll_mtrlid,ll_statusflag
  307. Decimal ld_qty
  308. Long ll_jdtype = 0
  309. DateTime ld_now
  310. String ls_ordercode
  311. Long ll_pos = 0
  312. SELECT auditflag, wrkgrpid, qty, ifok, scid, orderid, GETDATE()
  313. INTO :ll_auditflag, :ll_wrkgrpid, :ld_qty, :ll_ifok, :ll_scid, :ll_orderid, :ld_now
  314. FROM u_OrderMtrl_workgroup_picsCheck
  315. Where pkid = :arg_pkid;
  316. IF sqlca.SQLCode <> 0 THEN
  317. rslt = 0
  318. arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText
  319. GOTO ext
  320. END IF
  321. IF ll_auditflag <> 0 THEN
  322. rslt = 0
  323. arg_msg = '单据不在待审状态,不能审核'
  324. GOTO ext
  325. END IF
  326. UPDATE u_OrderMtrl_workgroup_picsCheck
  327. SET auditflag = 1,
  328. audit_emp = :publ_operator,
  329. audit_date = GETDATE()
  330. Where pkid = :arg_pkid And auditflag = 0;
  331. IF sqlca.SQLCode <> 0 THEN
  332. rslt = 0
  333. arg_msg = '更新单据审核状态失败,' + sqlca.SQLErrText
  334. GOTO ext
  335. END IF
  336. IF sqlca.SQLNRows = 0 THEN
  337. rslt = 0
  338. arg_msg = '审核失败,单据已经被删除或已被审核'
  339. GOTO ext
  340. END IF
  341. IF ll_ifok = 1 THEN
  342. SELECT jdtype
  343. INTO :ll_jdtype
  344. FROM u_sc_workgroup
  345. Where wrkgrpid = :ll_wrkgrpid;
  346. IF sqlca.SQLCode = 0 And ll_jdtype = 7 THEN
  347. // 更新工组进度
  348. SELECT mtrlid, ordercode
  349. INTO :ll_mtrlid, :ls_ordercode
  350. FROM u_order_ml
  351. WHERE scid = :ll_scid
  352. And orderid = :ll_orderid;
  353. IF sqlca.SQLCode <> 0 THEN
  354. rslt = 0
  355. arg_msg = '查询物料失败,' + sqlca.SQLErrText
  356. GOTO ext
  357. END IF
  358. SELECT statusflag
  359. INTO :ll_statusflag
  360. FROM u_mtrldef
  361. Where mtrlid = :ll_mtrlid;
  362. IF sqlca.SQLCode <> 0 THEN
  363. rslt = 0
  364. arg_msg = '查询物料信息失败,' + sqlca.SQLErrText
  365. GOTO ext
  366. END IF
  367. ll_pos = Pos(ls_ordercode, '.')
  368. IF ll_statusflag = 2 And ll_pos > 0 THEN
  369. // DONE: 汇总直接更新工组进度
  370. ls_ordercode = Mid(ls_ordercode, 1, ll_pos - 1)
  371. IF uof_update_pordermtrl_workgroup(ls_ordercode, ll_wrkgrpid, Ref arg_msg, False) <> 1 THEN
  372. rslt = 0
  373. GOTO ext
  374. END IF
  375. ELSE
  376. IF uof_add_workgroup_qty(ll_scid, ll_orderid, ll_wrkgrpid, 0, ld_now, ld_qty, Ref arg_msg, False) <> 1 THEN
  377. rslt = 0
  378. arg_msg = '更新工组进度失败,原因:' + arg_msg
  379. GOTO ext
  380. END IF
  381. END IF
  382. END IF
  383. END IF
  384. ext:
  385. IF rslt = 1 THEN
  386. COMMIT;
  387. ELSE
  388. ROLLBACK;
  389. END IF
  390. RETURN rslt
  391. end function
  392. public function integer cauditing (long arg_pkid, ref string arg_msg);Int rslt = 1
  393. Long ll_auditflag, ll_wrkgrpid, ll_ifok, ll_scid, ll_orderid, ll_mtrlid, ll_statusflag, ll_pos
  394. Decimal ld_qty
  395. Long ll_jdtype = 0
  396. DateTime ld_now
  397. string ls_ordercode
  398. SELECT auditflag, wrkgrpid, qty, ifok, scid, orderid, GETDATE()
  399. INTO :ll_auditflag, :ll_wrkgrpid, :ld_qty, :ll_ifok, :ll_scid, :ll_orderid, :ld_now
  400. FROM u_OrderMtrl_workgroup_picsCheck
  401. Where pkid = :arg_pkid;
  402. IF sqlca.SQLCode <> 0 THEN
  403. rslt = 0
  404. arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText
  405. GOTO ext
  406. END IF
  407. IF ll_auditflag <> 1 THEN
  408. rslt = 0
  409. arg_msg = '单据不在已审状态,不能搞撤审'
  410. GOTO ext
  411. END IF
  412. UPDATE u_OrderMtrl_workgroup_picsCheck
  413. SET auditflag = 0,
  414. audit_emp = '',
  415. audit_date = NULL
  416. Where pkid = :arg_pkid And auditflag = 1;
  417. IF sqlca.SQLCode <> 0 THEN
  418. rslt = 0
  419. arg_msg = '更新单据审核状态失败,' + sqlca.SQLErrText
  420. GOTO ext
  421. END IF
  422. IF sqlca.SQLNRows = 0 THEN
  423. rslt = 0
  424. arg_msg = '撤审失败,单据已经被删除或已被撤审'
  425. GOTO ext
  426. END IF
  427. IF ll_ifok = 1 THEN
  428. SELECT jdtype
  429. INTO :ll_jdtype
  430. FROM u_sc_workgroup
  431. Where wrkgrpid = :ll_wrkgrpid;
  432. IF sqlca.SQLCode = 0 And ll_jdtype = 7 THEN
  433. // 更新工组进度
  434. SELECT mtrlid, ordercode
  435. INTO :ll_mtrlid, :ls_ordercode
  436. FROM u_order_ml
  437. WHERE scid = :ll_scid
  438. And orderid = :ll_orderid;
  439. IF sqlca.SQLCode <> 0 THEN
  440. rslt = 0
  441. arg_msg = '查询物料失败,' + sqlca.SQLErrText
  442. GOTO ext
  443. END IF
  444. SELECT statusflag
  445. INTO :ll_statusflag
  446. FROM u_mtrldef
  447. Where mtrlid = :ll_mtrlid;
  448. IF sqlca.SQLCode <> 0 THEN
  449. rslt = 0
  450. arg_msg = '查询物料信息失败,' + sqlca.SQLErrText
  451. GOTO ext
  452. END IF
  453. ll_pos = Pos(ls_ordercode, '.')
  454. IF ll_statusflag = 2 And ll_pos > 0 THEN
  455. // DONE: 汇总直接更新工组进度
  456. ls_ordercode = Mid(ls_ordercode, 1, ll_pos - 1)
  457. IF uof_update_pordermtrl_workgroup(ls_ordercode, ll_wrkgrpid, Ref arg_msg, False) <> 1 THEN
  458. rslt = 0
  459. GOTO ext
  460. END IF
  461. ELSE
  462. IF uof_add_workgroup_qty(ll_scid, ll_orderid, ll_wrkgrpid, 0, ld_now, -ld_qty, Ref arg_msg, False) <> 1 THEN
  463. rslt = 0
  464. arg_msg = '更新工组进度失败,原因:' + arg_msg
  465. GOTO ext
  466. END IF
  467. END IF
  468. END IF
  469. END IF
  470. ext:
  471. IF rslt = 1 THEN
  472. COMMIT;
  473. ELSE
  474. ROLLBACK;
  475. END IF
  476. RETURN rslt
  477. end function
  478. public function long pf_getclassid (ref string arg_msg);Long ll_classid = 0
  479. Int rslt = 1
  480. Long cnt
  481. SELECT count(0)
  482. INTO :cnt
  483. FROM U_FileClass
  484. Where billtype = :billtype;
  485. IF sqlca.SQLCode <> 0 THEN
  486. rslt = 0
  487. arg_msg = '查询单据分类失败,' + sqlca.SQLErrText
  488. GOTO ext
  489. END IF
  490. IF cnt = 0 THEN
  491. ll_classid = f_sys_scidentity(0,"U_FileClass","classid",arg_msg,True,id_sqlca)
  492. IF ll_classid <= 0 THEN
  493. rslt = 0
  494. GOTO ext
  495. END IF
  496. INSERT INTO U_FileClass(ClassID, ClassName, billtype)
  497. Values(:ll_classid, '质检图', :billtype);
  498. IF sqlca.SQLCode <> 0 THEN
  499. rslt = 0
  500. arg_msg = '插入指令单工组质检单分类失败,' + sqlca.SQLErrText
  501. ROLLBACK;
  502. GOTO ext
  503. END IF
  504. COMMIT;
  505. ELSE
  506. SELECT top 1 classid
  507. INTO :ll_classid
  508. FROM U_FileClass
  509. WHERE billtype = :billtype
  510. Order By ClassID;
  511. IF sqlca.SQLCode <> 0 THEN
  512. rslt = 0
  513. arg_msg = '查询指令单工组质检单分类ID失败,' + sqlca.SQLErrText
  514. GOTO ext
  515. END IF
  516. END IF
  517. ext:
  518. IF rslt = 1 THEN
  519. COMMIT;
  520. ELSE
  521. ROLLBACK;
  522. ll_classid = 0
  523. END IF
  524. RETURN ll_classid
  525. end function
  526. 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);//更新工组进度完成数
  527. Int rslt = 1
  528. String ls_ordercode
  529. String ls_mtrlcode
  530. Decimal ld_orderqty,ld_acmpqty,ld_trueqty
  531. DateTime null_dt
  532. SetNull(null_dt)
  533. DateTime dt_fdate
  534. IF arg_orderid <= 0 THEN
  535. rslt = 0
  536. arg_msg = '错误的计划唯一码'
  537. GOTO ext
  538. END IF
  539. SELECT ordercode INTO :ls_ordercode
  540. FROM u_Order_ml
  541. WHERE OrderID = :arg_orderid
  542. And scid = :arg_scid;
  543. IF sqlca.SQLCode <> 0 THEN
  544. arg_msg = '查询生产计划编号失败'
  545. rslt = 0
  546. GOTO ext
  547. END IF
  548. SELECT u_mtrldef.mtrlcode ,
  549. u_order_ml.orderqty,
  550. u_order_ml.acmpqty
  551. INTO :ls_mtrlcode,
  552. :ld_orderqty,
  553. :ld_acmpqty
  554. FROM u_mtrldef,u_order_ml
  555. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  556. AND u_order_ml.scid = :arg_scid
  557. And u_Order_ml.OrderID = :arg_orderid;
  558. IF sqlca.SQLCode <> 0 THEN
  559. arg_msg = '查询物料编号失败'
  560. rslt = 0
  561. GOTO ext
  562. END IF
  563. //arg_swkpid:源工组;
  564. Decimal finishqty, totalqty
  565. SELECT isnull(sum(orderqty - stopqty),0), isnull(sum(finishqty),0)
  566. INTO :totalqty, :finishqty
  567. FROM u_OrderMtrl_workgroup
  568. WHERE scid = :arg_scid
  569. AND orderid = :arg_orderid
  570. AND wrkGrpid = :arg_swkpid
  571. Using sqlca;
  572. IF sqlca.SQLCode <> 0 THEN
  573. arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  574. rslt = 0
  575. GOTO ext
  576. END IF
  577. IF arg_qty + finishqty > totalqty THEN
  578. arg_qty = totalqty - finishqty
  579. END IF
  580. IF arg_qty + finishqty < 0 THEN
  581. arg_qty = -finishqty
  582. END IF
  583. IF arg_qty = 0 THEN
  584. GOTO ext
  585. END IF
  586. Long ll_owrkgrpid, arr_owrkgrpid[]
  587. String ls_wkpname, arr_wkpname[]
  588. Long ll_workgroupid, arr_workgroupid[]
  589. Decimal ld_ufqty, ld_fqty, arr_ufqty[], arr_fqty[]
  590. Long ll_cnt = 0
  591. DECLARE cur1 CURSOR FOR
  592. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
  593. FROM u_OrderMtrl_workgroup
  594. WHERE scid = :arg_scid
  595. AND orderid = :arg_orderid
  596. AND wrkGrpid = :arg_swkpid
  597. AND workgroupid = :arg_workgroupid
  598. UNION
  599. SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty
  600. FROM u_OrderMtrl_workgroup
  601. WHERE scid = :arg_scid
  602. AND orderid = :arg_orderid
  603. AND wrkGrpid = :arg_swkpid
  604. And workgroupid <> :arg_workgroupid;
  605. OPEN cur1;
  606. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
  607. DO WHILE sqlca.SQLCode = 0
  608. ll_cnt++
  609. arr_owrkgrpid[ll_cnt] = ll_owrkgrpid
  610. arr_wkpname[ll_cnt] = ls_wkpname
  611. arr_workgroupid[ll_cnt] = ll_workgroupid
  612. arr_ufqty[ll_cnt] = ld_ufqty
  613. arr_fqty[ll_cnt] = ld_fqty
  614. FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty;
  615. LOOP
  616. CLOSE cur1;
  617. Long i
  618. Decimal ld_addqty
  619. ld_addqty = arg_qty
  620. FOR i = 1 To ll_cnt
  621. ll_owrkgrpid = arr_owrkgrpid[i]
  622. ls_wkpname = arr_wkpname[i]
  623. ll_workgroupid = arr_workgroupid[i]
  624. ld_ufqty = arr_ufqty[i]
  625. ld_fqty = arr_fqty[i]
  626. IF ld_addqty = 0 THEN
  627. EXIT
  628. END IF
  629. IF ld_addqty >= ld_ufqty THEN
  630. IF ld_ufqty = 0 THEN CONTINUE
  631. UPDATE u_OrderMtrl_workgroup
  632. SET finishqty = finishqty + :ld_ufqty,
  633. finishflag = 1,
  634. finishdate = :arg_finishdate
  635. WHERE scid = :arg_scid
  636. AND orderid = :arg_orderid
  637. AND wrkgrpid = :arg_swkpid
  638. AND owrkgrpid = :ll_owrkgrpid
  639. AND wkpname = :ls_wkpname
  640. And workgroupid = :ll_workgroupid;
  641. IF sqlca.SQLCode <> 0 THEN
  642. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  643. rslt = 0
  644. GOTO ext
  645. END IF
  646. ld_addqty = ld_addqty - ld_ufqty
  647. ELSEIF ld_addqty <= -ld_fqty THEN
  648. UPDATE u_OrderMtrl_workgroup
  649. SET finishqty = finishqty - :ld_fqty,
  650. finishflag = 0,
  651. finishdate = NULL
  652. WHERE scid = :arg_scid
  653. AND orderid = :arg_orderid
  654. AND wrkgrpid = :arg_swkpid
  655. AND owrkgrpid = :ll_owrkgrpid
  656. AND wkpname = :ls_wkpname
  657. And workgroupid = :ll_workgroupid;
  658. IF sqlca.SQLCode <> 0 THEN
  659. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  660. rslt = 0
  661. GOTO ext
  662. END IF
  663. ld_addqty = ld_addqty + ld_fqty
  664. ELSE
  665. UPDATE u_OrderMtrl_workgroup
  666. SET finishqty = finishqty + :ld_addqty,
  667. finishflag = 0,
  668. finishdate = NULL
  669. WHERE scid = :arg_scid
  670. AND orderid = :arg_orderid
  671. AND wrkgrpid = :arg_swkpid
  672. AND owrkgrpid = :ll_owrkgrpid
  673. AND wkpname = :ls_wkpname
  674. And workgroupid = :ll_workgroupid;
  675. IF sqlca.SQLCode <> 0 THEN
  676. arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText
  677. rslt = 0
  678. GOTO ext
  679. END IF
  680. ld_addqty = 0
  681. END IF
  682. NEXT
  683. //IF pf_checklast(arg_scid, arg_orderid, arg_swkpid, arg_owkpid) = 1 THEN
  684. Decimal ld_sumorderqty
  685. SELECT isnull(sum(orderqty - stopqty),0)
  686. INTO :ld_sumorderqty
  687. FROM u_OrderMtrl_workgroup
  688. WHERE scid = :arg_scid
  689. AND orderid = :arg_orderid
  690. AND wrkGrpid = :arg_swkpid;
  691. IF sqlca.SQLCode <> 0 THEN
  692. rslt = 0
  693. arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText
  694. GOTO ext
  695. END IF
  696. Decimal ld_sumfqty
  697. SELECT isnull(sum(fqty),0)
  698. INTO :ld_sumfqty
  699. FROM u_OrderMtrl_workgroup_date
  700. WHERE scid = :arg_scid
  701. AND orderid = :arg_orderid
  702. And wrkGrpid = :arg_swkpid;
  703. IF sqlca.SQLCode <> 0 THEN
  704. rslt = 0
  705. arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText
  706. GOTO ext
  707. END IF
  708. ld_addqty = arg_qty
  709. IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN
  710. ld_addqty = ld_sumorderqty - ld_sumfqty
  711. END IF
  712. IF ld_addqty + ld_sumfqty < 0 THEN
  713. ld_addqty = -ld_sumfqty
  714. END IF
  715. dt_fdate = DateTime(Date(arg_finishdate), Time(0))
  716. IF ld_addqty >= 0 THEN
  717. UPDATE u_OrderMtrl_workgroup_date
  718. SET fqty = fqty + :ld_addqty
  719. WHERE scid = :arg_scid
  720. AND orderid = :arg_orderid
  721. AND wrkgrpid = :arg_swkpid
  722. And fdate = :dt_fdate;
  723. IF sqlca.SQLCode = 0 THEN
  724. IF sqlca.SQLNRows = 0 THEN
  725. INSERT INTO u_OrderMtrl_workgroup_date
  726. (scid,orderid,wrkgrpid,fdate,fqty)
  727. VALUES
  728. (:arg_scid,:arg_orderid,:arg_swkpid,:dt_fdate,:ld_addqty);
  729. IF sqlca.SQLCode <> 0 THEN
  730. rslt = 0
  731. arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText
  732. GOTO ext
  733. END IF
  734. END IF
  735. ELSE
  736. rslt = 0
  737. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  738. GOTO ext
  739. END IF
  740. ELSE
  741. DateTime ld_date, arr_date[]
  742. Decimal ld_fqtyd, arr_fqtyd[]
  743. i = 0
  744. DECLARE cur2 CURSOR FOR SELECT fdate, fqty
  745. FROM u_OrderMtrl_workgroup_date
  746. WHERE scid = :arg_scid
  747. AND orderid = :arg_orderid
  748. AND wrkgrpid = :arg_swkpid
  749. AND fdate = :dt_fdate
  750. UNION
  751. SELECT fdate, fqty
  752. FROM u_OrderMtrl_workgroup_date
  753. WHERE scid = :arg_scid
  754. AND orderid = :arg_orderid
  755. AND wrkgrpid = :arg_swkpid
  756. And fdate <> :dt_fdate;
  757. OPEN cur2;
  758. FETCH cur2 Into :ld_date,:ld_fqtyd;
  759. DO WHILE sqlca.SQLCode = 0
  760. i++
  761. arr_date[i] = ld_date
  762. arr_fqtyd[i] = ld_fqtyd
  763. FETCH cur2 Into :ld_date,:ld_fqtyd;
  764. LOOP
  765. CLOSE cur2;
  766. FOR i = 1 To UpperBound(arr_date)
  767. ld_date = arr_date[i]
  768. ld_fqtyd = arr_fqtyd[i]
  769. IF ld_addqty = 0 THEN
  770. EXIT
  771. END IF
  772. IF ld_addqty <= -ld_fqtyd THEN
  773. UPDATE u_OrderMtrl_workgroup_date
  774. SET fqty = fqty - :ld_fqtyd
  775. WHERE scid = :arg_scid
  776. AND orderid = :arg_orderid
  777. AND wrkgrpid = :arg_swkpid
  778. And fdate = :ld_date;
  779. IF sqlca.SQLCode <> 0 THEN
  780. rslt = 0
  781. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  782. GOTO ext
  783. END IF
  784. ld_addqty = ld_addqty + ld_fqtyd
  785. ELSE
  786. UPDATE u_OrderMtrl_workgroup_date
  787. SET fqty = fqty + :ld_addqty
  788. WHERE scid = :arg_scid
  789. AND orderid = :arg_orderid
  790. AND wrkgrpid = :arg_swkpid
  791. And fdate = :ld_date;
  792. IF sqlca.SQLCode <> 0 THEN
  793. rslt = 0
  794. arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText
  795. GOTO ext
  796. END IF
  797. ld_addqty = 0
  798. END IF
  799. NEXT
  800. END IF
  801. //END IF
  802. ext:
  803. IF rslt = 0 THEN
  804. ROLLBACK;
  805. ELSEIF rslt = 1 And arg_ifcommit THEN
  806. COMMIT;
  807. END IF
  808. RETURN rslt
  809. end function
  810. public function integer uof_update_pordermtrl_workgroup (string arg_pordercode, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  811. Long ll_pscid, ll_porderid
  812. Decimal ld_porderqty, ld_rate, ld_fqty
  813. SELECT orderqty, scid, orderid
  814. INTO :ld_porderqty, :ll_pscid, :ll_porderid
  815. FROM u_order_ml
  816. Where ordercode = :arg_pordercode;
  817. IF sqlca.SQLCode <> 0 THEN
  818. rslt = 0
  819. arg_msg = '查询主指令单信息失败,' + sqlca.SQLErrText
  820. GOTO ext
  821. END IF
  822. SELECT MIN(rate)
  823. INTO :ld_rate
  824. FROM (
  825. SELECT sum(u_OrderMtrl_workgroup_picsCheck.qty) / u_Order_ml.orderqty AS rate, u_Order_ml.OrderCode
  826. FROM u_OrderMtrl_workgroup_picsCheck INNER JOIN
  827. u_Order_ml ON u_OrderMtrl_workgroup_picsCheck.scid = u_Order_ml.scid AND u_OrderMtrl_workgroup_picsCheck.orderid = u_Order_ml.OrderID
  828. WHERE (u_Order_ml.OrderCode LIKE :arg_pordercode + '.%')
  829. AND (u_Order_ml.OrderCode <> :arg_pordercode)
  830. AND u_OrderMtrl_workgroup_picsCheck.wrkgrpid = :arg_wrkgrpid
  831. AND u_OrderMtrl_workgroup_picsCheck.auditflag = 1
  832. AND u_OrderMtrl_workgroup_picsCheck.ifok = 1
  833. Group By u_order_ml.orderqty,u_order_ml.ordercode) a;
  834. IF sqlca.SQLCode <> 0 THEN
  835. rslt = 0
  836. arg_msg = '查询主指令单的整体进度失败,' + sqlca.SQLErrText
  837. GOTO ext
  838. END IF
  839. ld_fqty = Long(ld_porderqty * ld_rate)
  840. IF ld_fqty > ld_porderqty THEN
  841. ld_fqty = ld_porderqty
  842. END IF
  843. UPDATE u_ordermtrl_workgroup
  844. SET finishqty = case when (:ld_fqty >= orderqty - stopqty) then orderqty - stopqty else :ld_fqty END,
  845. finishflag = case when (:ld_fqty >= orderqty - stopqty) then 1 else 0 END,
  846. finishdate = case when (:ld_fqty >= orderqty - stopqty) then GETDATE() else NULL END
  847. WHERE scid = :ll_pscid
  848. AND orderid = :ll_porderid
  849. And wrkgrpid = :arg_wrkgrpid;
  850. IF sqlca.SQLCode <> 0 THEN
  851. rslt = 0
  852. arg_msg = '更新主指令单工组进度失败,' + sqlca.SQLErrText
  853. GOTO ext
  854. END IF
  855. ext:
  856. IF arg_ifcommit THEN
  857. IF rslt = 1 THEN
  858. COMMIT;
  859. ELSE
  860. ROLLBACK;
  861. END IF
  862. END IF
  863. RETURN rslt
  864. end function
  865. on uo_ordermtrl_workgroup_picscheck.create
  866. call super::create
  867. TriggerEvent( this, "constructor" )
  868. end on
  869. on uo_ordermtrl_workgroup_picscheck.destroy
  870. TriggerEvent( this, "destructor" )
  871. call super::destroy
  872. end on