uo_getbar.sru 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. $PBExportHeader$uo_getbar.sru
  2. forward
  3. global type uo_getbar from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_getbar from nonvisualobject
  7. end type
  8. global uo_getbar uo_getbar
  9. type variables
  10. Long uo_getbarid
  11. String uo_getbarcode
  12. end variables
  13. forward prototypes
  14. public function integer updatebegin (long arg_getbarid, ref string arg_msg)
  15. public function integer p_getinfo (long arg_getbarid, ref s_getbar arg_s_gb, ref string arg_msg)
  16. public function integer auditing (long arg_getbarid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer save (s_getbar arg_s_gb, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer getinfo (long arg_getbarid, ref s_mtrlware_mx arg_gbmx[], ref string arg_msg)
  19. public function integer add_dscrp (long arg_getbarid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer del (long arg_getbarid, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer c_auditing (long arg_getbarid, boolean arg_ifauto, ref string arg_msg, boolean arg_ifcommit)
  22. end prototypes
  23. public function integer updatebegin (long arg_getbarid, ref string arg_msg);Int rslt = 1
  24. Long cnt = 0
  25. s_getbar arg_s_gb
  26. IF arg_getbarid <= 0 THEN
  27. rslt = 0
  28. arg_msg = '错误条码生成单唯一码'
  29. GOTO ext
  30. END IF
  31. IF p_getinfo(arg_getbarid,arg_s_gb,arg_msg) = 0 THEN
  32. rslt = 0
  33. GOTO ext
  34. END IF
  35. IF arg_s_gb.flag = 1 THEN
  36. rslt = 0
  37. arg_msg = "条码生成单已经审核,操作取消"
  38. GOTO ext
  39. END IF
  40. ext:
  41. RETURN rslt
  42. end function
  43. public function integer p_getinfo (long arg_getbarid, ref s_getbar arg_s_gb, ref string arg_msg);Int rslt = 1
  44. SELECT
  45. getbardate,
  46. dscrp,
  47. getbarcode,
  48. opemp,
  49. opdate,
  50. modemp,
  51. moddate,
  52. flag,
  53. relbillid
  54. Into
  55. :arg_s_gb.getbardate,
  56. :arg_s_gb.dscrp,
  57. :arg_s_gb.getbarcode,
  58. :arg_s_gb.opemp,
  59. :arg_s_gb.opdate,
  60. :arg_s_gb.modemp,
  61. :arg_s_gb.moddate,
  62. :arg_s_gb.flag,
  63. :arg_s_gb.relbillid
  64. From u_getbar
  65. Where
  66. u_getbar.getbarid = :arg_getbarid Using sqlca;
  67. IF sqlca.SQLCode <> 0 THEN
  68. rslt = 0
  69. ARG_MSG = '查询条码成生单内容失败(错误条码生成单唯一码)'+sqlca.SQLErrText
  70. GOTO ext
  71. END IF
  72. ext:
  73. RETURN rslt
  74. end function
  75. public function integer auditing (long arg_getbarid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  76. Long j
  77. s_getbar arg_s_gb
  78. s_mtrlware_mx arg_s_gbmx[]
  79. IF arg_getbarid <= 0 THEN
  80. rslt = 0
  81. arg_msg = '错误条码生成单唯一码'
  82. GOTO ext
  83. END IF
  84. IF p_getinfo(arg_getbarid,arg_s_gb,arg_msg) = 0 THEN
  85. rslt = 0
  86. GOTO ext
  87. END IF
  88. IF getinfo(arg_getbarid,arg_s_gbmx,arg_msg) = 0 THEN
  89. rslt = 0
  90. GOTO ext
  91. END IF
  92. IF arg_s_gb.flag = 1 THEN
  93. rslt = 0
  94. arg_msg = "条码生成单已经审核,操作取消"
  95. GOTO ext
  96. END IF
  97. UPDATE u_getbar
  98. SET flag = 1,
  99. auditingrep = :arg_opemp,
  100. auditingdate = getdate()
  101. Where u_getbar.getbarid = :arg_getbarid;
  102. IF sqlca.SQLCode <> 0 THEN
  103. arg_msg = '更新条码生成单审核状态失败,原因>>'+sqlca.SQLErrText
  104. rslt = 0
  105. GOTO ext
  106. ELSEIF sqlca.SQLNRows = 0 THEN
  107. rslt = 0
  108. arg_msg = '单据正在审核,请稍后重试'
  109. GOTO ext
  110. END IF
  111. ext:
  112. IF rslt = 0 THEN
  113. ROLLBACK;
  114. ELSEIF rslt = 1 And arg_ifcommit THEN
  115. COMMIT;
  116. END IF
  117. RETURN rslt
  118. end function
  119. public function integer save (s_getbar arg_s_gb, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  120. Int li_ifpackpro,li_ifpackpro_uc,li_ifpack_uc
  121. Decimal ld_Sonscale
  122. Long cnt = 0,i
  123. DateTime server_dt
  124. Long ll_newid,ll_it_mxbt,ll_mtrlid_buytask
  125. String ls_sccode,ls_getbarcode
  126. Decimal ld_sum_mxqty,ld_otherqty,ld_orderqty
  127. IF IsNull(arg_s_gb.scid) THEN arg_s_gb.scid = 0
  128. IF IsNull(arg_s_gb.getbarid) THEN arg_s_gb.getbarid = 0
  129. IF IsNull(arg_s_gb.getbarcode) THEN arg_s_gb.getbarcode = ''
  130. IF IsNull(arg_s_gb.getbardate) THEN arg_s_gb.getbardate = DateTime(Date(Today()),Time(0))
  131. IF IsNull(arg_s_gb.dscrp) THEN arg_s_gb.dscrp = ''
  132. IF IsNull(arg_s_gb.flag) THEN arg_s_gb.flag = 0
  133. IF IsNull(arg_s_gb.relbillid) THEN arg_s_gb.relbillid = 0
  134. //检查明细
  135. ll_it_mxbt = UpperBound(arg_s_gb.arg_s_mx)
  136. IF ll_it_mxbt = 0 THEN
  137. rslt = 0
  138. arg_msg = "没有正确条码生成单明细内容"
  139. GOTO ext
  140. END IF
  141. SELECT Top 1 getdate() Into :server_dt From u_user;
  142. IF sqlca.SQLCode <> 0 THEN
  143. rslt = 0
  144. arg_msg = "查询操作失败,日期 "
  145. GOTO ext
  146. END IF
  147. IF arg_s_gb.getbarid = 0 THEN
  148. ll_newid = f_sys_scidentity(0,"u_getbar","getbarid",arg_msg,True,id_sqlca)
  149. IF ll_newid <= 0 THEN
  150. rslt = 0
  151. GOTO ext
  152. END IF
  153. IF f_get_sccode(arg_s_gb.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  154. rslt = 0
  155. GOTO ext
  156. END IF
  157. ls_getbarcode = getid(0,ls_sccode + "TM",Date(server_dt),False,sqlca) //取得新单据编号
  158. IF ls_getbarcode = "err" THEN
  159. rslt = 0
  160. arg_msg = "无法获取条码生成单编号"
  161. GOTO ext
  162. END IF
  163. INSERT INTO u_getbar(
  164. scid,
  165. getbarid,
  166. getbardate,
  167. dscrp,
  168. getbarcode,
  169. opemp,
  170. opdate,
  171. relbillid)
  172. VALUES (
  173. :arg_s_gb.scid,
  174. :ll_newid,
  175. :arg_s_gb.getbardate,
  176. :arg_s_gb.dscrp,
  177. :ls_getbarcode,
  178. :arg_opemp,
  179. :server_dt,
  180. :arg_s_gb.relbillid
  181. );
  182. IF sqlca.SQLCode <> 0 THEN
  183. rslt = 0
  184. arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText
  185. GOTO ext
  186. END IF
  187. FOR i = 1 To ll_it_mxbt
  188. IF IsNull(arg_s_gb.arg_s_mx[i].printid) THEN arg_s_gb.arg_s_mx[i].printid =0
  189. IF IsNull(arg_s_gb.arg_s_mx[i].barcode) THEN arg_s_gb.arg_s_mx[i].barcode = ''
  190. IF IsNull(arg_s_gb.arg_s_mx[i].qty) THEN arg_s_gb.arg_s_mx[i].qty =0
  191. IF IsNull(arg_s_gb.arg_s_mx[i].mtrlid) THEN arg_s_gb.arg_s_mx[i].mtrlid = 0
  192. IF IsNull(arg_s_gb.arg_s_mx[i].Status) THEN arg_s_gb.arg_s_mx[i].Status = ''
  193. IF IsNull(arg_s_gb.arg_s_mx[i].woodcode) THEN arg_s_gb.arg_s_mx[i].woodcode = ''
  194. IF IsNull(arg_s_gb.arg_s_mx[i].pcode) THEN arg_s_gb.arg_s_mx[i].pcode = ''
  195. IF IsNull(arg_s_gb.arg_s_mx[i].plancode) THEN arg_s_gb.arg_s_mx[i].plancode = ''
  196. IF IsNull(arg_s_gb.arg_s_mx[i].Sptid) THEN arg_s_gb.arg_s_mx[i].Sptid = 0
  197. IF IsNull(arg_s_gb.arg_s_mx[i].dscrp) THEN arg_s_gb.arg_s_mx[i].dscrp = ''
  198. IF IsNull(arg_s_gb.arg_s_mx[i].relbillid) THEN arg_s_gb.arg_s_mx[i].relbillid = 0
  199. INSERT INTO u_mtrlware_mx
  200. (
  201. scid,
  202. getbarid,
  203. printid,
  204. barcode,
  205. qty,
  206. mtrlid,
  207. Status,
  208. woodcode,
  209. pcode,
  210. plancode,
  211. Sptid,
  212. dscrp,
  213. relbillid)
  214. VALUES (
  215. :arg_s_gb.scid,
  216. :ll_newid,
  217. :arg_s_gb.arg_s_mx[i].printid,
  218. :arg_s_gb.arg_s_mx[i].barcode,
  219. :arg_s_gb.arg_s_mx[i].qty,
  220. :arg_s_gb.arg_s_mx[i].mtrlid,
  221. :arg_s_gb.arg_s_mx[i].Status,
  222. :arg_s_gb.arg_s_mx[i].woodcode,
  223. :arg_s_gb.arg_s_mx[i].pcode,
  224. :arg_s_gb.arg_s_mx[i].plancode,
  225. :arg_s_gb.arg_s_mx[i].Sptid,
  226. :arg_s_gb.arg_s_mx[i].dscrp,
  227. :arg_s_gb.arg_s_mx[i].relbillid) Using sqlca;
  228. IF sqlca.SQLCode <> 0 THEN
  229. rslt = 0
  230. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  231. GOTO ext
  232. END IF
  233. NEXT
  234. uo_getbarid = ll_newid
  235. uo_getbarcode = ls_getbarcode
  236. ELSE
  237. UPDATE u_getbar
  238. SET
  239. getbardate = :arg_s_gb.getbardate,
  240. dscrp = :arg_s_gb.dscrp,
  241. modemp = :arg_opemp,
  242. moddate = :server_dt,
  243. relbillid = :arg_s_gb.relbillid
  244. WHERE u_getbar.getbarid = :arg_s_gb.getbarid
  245. And flag = 0;
  246. IF sqlca.SQLCode <> 0 THEN
  247. rslt = 0
  248. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  249. GOTO ext
  250. ELSEIF sqlca.SQLNRows = 0 THEN
  251. arg_msg = '单据正在更新,请稍后重试'
  252. rslt = 0
  253. GOTO ext
  254. END IF
  255. //删除原有明细
  256. DELETE FROM u_mtrlware_mx
  257. Where u_mtrlware_mx.getbarid = :arg_s_gb.getbarid;
  258. IF sqlca.SQLCode <> 0 THEN
  259. rslt = 0
  260. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  261. GOTO ext
  262. END IF
  263. FOR i = 1 To ll_it_mxbt
  264. IF IsNull(arg_s_gb.arg_s_mx[i].printid) THEN arg_s_gb.arg_s_mx[i].printid =0
  265. IF IsNull(arg_s_gb.arg_s_mx[i].barcode) THEN arg_s_gb.arg_s_mx[i].barcode = ''
  266. IF IsNull(arg_s_gb.arg_s_mx[i].qty) THEN arg_s_gb.arg_s_mx[i].qty =0
  267. IF IsNull(arg_s_gb.arg_s_mx[i].mtrlid) THEN arg_s_gb.arg_s_mx[i].mtrlid = 0
  268. IF IsNull(arg_s_gb.arg_s_mx[i].Status) THEN arg_s_gb.arg_s_mx[i].Status = ''
  269. IF IsNull(arg_s_gb.arg_s_mx[i].woodcode) THEN arg_s_gb.arg_s_mx[i].woodcode = ''
  270. IF IsNull(arg_s_gb.arg_s_mx[i].pcode) THEN arg_s_gb.arg_s_mx[i].pcode = ''
  271. IF IsNull(arg_s_gb.arg_s_mx[i].plancode) THEN arg_s_gb.arg_s_mx[i].plancode = ''
  272. IF IsNull(arg_s_gb.arg_s_mx[i].Sptid) THEN arg_s_gb.arg_s_mx[i].Sptid = 0
  273. IF IsNull(arg_s_gb.arg_s_mx[i].dscrp) THEN arg_s_gb.arg_s_mx[i].dscrp = ''
  274. IF IsNull(arg_s_gb.arg_s_mx[i].relbillid) THEN arg_s_gb.arg_s_mx[i].relbillid = 0
  275. INSERT INTO u_mtrlware_mx
  276. (
  277. scid,
  278. getbarid,
  279. printid,
  280. barcode,
  281. qty,
  282. mtrlid,
  283. Status,
  284. woodcode,
  285. pcode,
  286. plancode,
  287. Sptid,
  288. dscrp,
  289. relbillid)
  290. VALUES (
  291. :arg_s_gb.scid,
  292. :arg_s_gb.getbarid,
  293. :arg_s_gb.arg_s_mx[i].printid,
  294. :arg_s_gb.arg_s_mx[i].barcode,
  295. :arg_s_gb.arg_s_mx[i].qty,
  296. :arg_s_gb.arg_s_mx[i].mtrlid,
  297. :arg_s_gb.arg_s_mx[i].Status,
  298. :arg_s_gb.arg_s_mx[i].woodcode,
  299. :arg_s_gb.arg_s_mx[i].pcode,
  300. :arg_s_gb.arg_s_mx[i].plancode,
  301. :arg_s_gb.arg_s_mx[i].Sptid,
  302. :arg_s_gb.arg_s_mx[i].dscrp,
  303. :arg_s_gb.arg_s_mx[i].relbillid) Using sqlca;
  304. IF sqlca.SQLCode <> 0 THEN
  305. rslt = 0
  306. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  307. GOTO ext
  308. END IF
  309. NEXT
  310. uo_getbarid = arg_s_gb.getbarid
  311. END IF
  312. ext:
  313. IF rslt = 0 THEN
  314. ROLLBACK;
  315. ELSEIF rslt = 1 And arg_ifcommit THEN
  316. COMMIT;
  317. END IF
  318. RETURN rslt
  319. end function
  320. public function integer getinfo (long arg_getbarid, ref s_mtrlware_mx arg_gbmx[], ref string arg_msg);Int rslt = 1
  321. Long i = 1,NO_MXCHECK = 0
  322. IF arg_getbarid <= 0 THEN
  323. rslt = 0
  324. ARG_MSG = '错误的条码生成单唯一码'
  325. GOTO ext
  326. END IF
  327. //用游标读取明细
  328. DECLARE cur_getbarmx CURSOR FOR
  329. SELECT barcode,qty
  330. FROM u_mtrlware_mx
  331. WHERE u_mtrlware_mx.getbarid = :arg_getbarid
  332. Order By barcode;
  333. OPEN cur_getbarmx;
  334. FETCH cur_getbarmx Into :arg_gbmx[i].barcode,:arg_gbmx[i].qty;
  335. DO WHILE SQLCA.SQLCode = 0
  336. i++
  337. FETCH cur_getbarmx Into :arg_gbmx[i].barcode,:arg_gbmx[i].qty;
  338. LOOP
  339. CLOSE cur_getbarmx;
  340. //检验明细是否读入完整
  341. SELECT COUNT(*) INTO :NO_MXCHECK
  342. FROM u_mtrlware_mx
  343. Where u_mtrlware_mx.getbarid = :arg_getbarid;
  344. IF SQLCA.SQLCode <> 0 THEN
  345. rslt = 0
  346. ARG_MSG = "查询操作失败,条码生成单明细数量"
  347. GOTO ext
  348. END IF
  349. IF i <> (NO_MXCHECK+1) THEN
  350. rslt = 0
  351. ARG_MSG = "查询操作失败,条码生成单明细数量不相符"
  352. GOTO ext
  353. END IF
  354. ext:
  355. RETURN rslt
  356. end function
  357. public function integer add_dscrp (long arg_getbarid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  358. s_getbar arg_s_gb
  359. IF arg_getbarid <= 0 THEN
  360. rslt = 0
  361. arg_msg = '错误条码生成单唯一码'
  362. GOTO ext
  363. END IF
  364. IF arg_newdescppart = '' THEN
  365. rslt = 0
  366. arG_MSG = "要添加内容为空,操作取消"
  367. GOTO ext
  368. END IF
  369. IF p_getinfo(arg_getbarid,arg_s_gb,arg_msg) = 0 THEN
  370. rslt = 0
  371. GOTO ext
  372. END IF
  373. IF arg_s_gb.flag = 0 THEN
  374. rslt = 0
  375. arg_msg = "条码生成单未审核,操作取消"
  376. GOTO ext
  377. END IF
  378. UPDATE u_getbar
  379. SET DSCRP = DSCRP+' '+:arg_newdescppart
  380. WHERE getbarid = :arg_getbarid;
  381. IF SQLCA.SQLCode <> 0 THEN
  382. rslt = 0
  383. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  384. GOTO ext
  385. END IF
  386. ext:
  387. IF rslt = 0 THEN
  388. ROLLBACK;
  389. ELSEIF rslt = 1 AND arg_ifcommit THEN
  390. COMMIT;
  391. END IF
  392. Return (rslt)
  393. end function
  394. public function integer del (long arg_getbarid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  395. Long cnt = 0
  396. s_getbar arg_s_gb
  397. IF arg_getbarid <= 0 THEN
  398. rslt = 0
  399. arg_msg = "没有删除对象,操作取消"
  400. GOTO ext
  401. END IF
  402. IF p_getinfo(arg_getbarid,arg_s_gb,arg_msg) = 0 THEN
  403. rslt = 0
  404. GOTO ext
  405. END IF
  406. IF arg_s_gb.flag = 1 THEN
  407. rslt = 0
  408. arg_msg = "条码生成单已经审核,操作取消"
  409. GOTO ext
  410. END IF
  411. DELETE From u_mtrlware_mx Where u_mtrlware_mx.getbarid = :arg_getbarid;
  412. IF sqlca.SQLCode <> 0 THEN
  413. rslt = 0
  414. arg_msg = "删除条码生成单明细操作失败"+"~n"+sqlca.SQLErrText
  415. GOTO ext
  416. END IF
  417. DELETE From u_getbar Where u_getbar.getbarid = :arg_getbarid;
  418. IF sqlca.SQLCode <> 0 THEN
  419. rslt = 0
  420. arg_msg = "删除条码生成单操作失败"+"~n"+sqlca.SQLErrText
  421. GOTO ext
  422. END IF
  423. ext:
  424. IF rslt = 0 THEN
  425. ROLLBACK;
  426. ELSEIF rslt = 1 and arg_ifcommit THEN
  427. COMMIT;
  428. END IF
  429. RETURN rslt
  430. end function
  431. public function integer c_auditing (long arg_getbarid, boolean arg_ifauto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  432. Long cnt = 0,j
  433. DateTime null_dt
  434. SetNull(null_dt)
  435. s_getbar arg_s_gb
  436. s_mtrlware_mx arg_s_gbmx[]
  437. If arg_getbarid <= 0 Then
  438. rslt = 0
  439. arg_msg = '错误条码生成单唯一码'
  440. Goto ext
  441. End If
  442. If p_getinfo(arg_getbarid,arg_s_gb,arg_msg) = 0 Then
  443. rslt = 0
  444. Goto ext
  445. End If
  446. If arg_s_gb.flag = 0 Then
  447. rslt = 0
  448. arg_msg = "条码生成单还未审核,操作取消"
  449. Goto ext
  450. End If
  451. If getinfo(arg_getbarid,arg_s_gbmx,arg_msg) = 0 Then
  452. rslt = 0
  453. Goto ext
  454. End If
  455. Update u_getbar
  456. Set flag = 0 ,
  457. auditingrep = '',
  458. auditingdate = :null_dt
  459. Where u_getbar.getbarid = :arg_getbarid
  460. And u_getbar.flag = 1 ;
  461. If sqlca.SQLCode <> 0 Then
  462. rslt = 0
  463. arg_msg = '更新条码生成单状态失败,原因:'+sqlca.SQLErrText
  464. Goto ext
  465. ElseIf sqlca.SQLNRows = 0 Then
  466. rslt = 0
  467. arg_msg = '单据正在撤审,请稍后重试'
  468. Goto ext
  469. End If
  470. ext:
  471. If rslt = 0 Then
  472. Rollback;
  473. ElseIf rslt = 1 And arg_ifcommit Then
  474. Commit;
  475. End If
  476. Return rslt
  477. end function
  478. on uo_getbar.create
  479. call super::create
  480. TriggerEvent( this, "constructor" )
  481. end on
  482. on uo_getbar.destroy
  483. TriggerEvent( this, "destructor" )
  484. call super::destroy
  485. end on