uo_maxmin_mtrl.sru 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. $PBExportHeader$uo_maxmin_mtrl.sru
  2. forward
  3. global type uo_maxmin_mtrl from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_maxmin_mtrl from nonvisualobject
  7. end type
  8. global uo_maxmin_mtrl uo_maxmin_mtrl
  9. type variables
  10. long uo_billid
  11. string uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer save (s_maxmin_mtrl arg_s_mtrl, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  15. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg)
  16. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer getinfo (long arg_billid, ref s_maxmin_mtrl_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  19. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer updatebegin (long arg_billid, ref string arg_msg)
  22. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  23. end prototypes
  24. public function integer save (s_maxmin_mtrl arg_s_mtrl, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  25. DateTime server_dt
  26. Long ll_billid,it_mxbt,i
  27. String ls_sccode,ls_billcode
  28. IF IsNull(arg_s_mtrl.billid) THEN arg_s_mtrl.billid = 0
  29. IF IsNull(arg_s_mtrl.billcode) THEN arg_s_mtrl.billcode = ''
  30. IF IsNull(arg_s_mtrl.rep) THEN arg_s_mtrl.rep = ''
  31. IF IsNull(arg_s_mtrl.dscrp) THEN arg_s_mtrl.dscrp = ''
  32. IF arg_s_mtrl.rep = '' THEN
  33. rslt = 0
  34. arg_msg = '请填写经手人'
  35. GOTO ext
  36. END IF
  37. if arg_s_mtrl.sdate > arg_s_mtrl.edate then
  38. rslt = 0
  39. arg_msg = '统计结束日期不能早于统计开始日期,请检查'
  40. goto ext
  41. end if
  42. it_mxbt = UpperBound(arg_s_mtrl.arg_s_mx)
  43. IF it_mxbt <= 0 THEN
  44. rslt = 0
  45. arg_msg = "没有正确明细内容"
  46. GOTO ext
  47. END IF
  48. IF arg_s_mtrl.billid = 0 THEN
  49. ll_billid = f_sys_scidentity(0,"u_maxmin_mtrl","billid",arg_msg,TRUE,id_sqlca)
  50. IF ll_billid <= 0 THEN
  51. rslt = 0
  52. GOTO ext
  53. END IF
  54. IF f_get_sccode(0,sqlca,ls_sccode,arg_msg) = 0 THEN
  55. rslt = 0
  56. GOTO ext
  57. END IF
  58. ls_billcode = getid(0,ls_sccode + 'MN',Date(server_dt),FALSE,sqlca)
  59. IF ls_billcode = "err" THEN
  60. rslt = 0
  61. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  62. GOTO ext
  63. END IF
  64. INSERT INTO u_maxmin_mtrl
  65. (billid,
  66. billcode,
  67. billdate,
  68. rep,
  69. sdate,
  70. edate,
  71. dscrp,
  72. opdate,
  73. opemp)
  74. VALUES
  75. (:ll_billid,
  76. :ls_billcode,
  77. :arg_s_mtrl.billdate,
  78. :arg_s_mtrl.rep,
  79. :arg_s_mtrl.sdate,
  80. :arg_s_mtrl.edate,
  81. :arg_s_mtrl.dscrp,
  82. getdate(),
  83. :arg_opemp);
  84. IF sqlca.SQLCode <> 0 THEN
  85. rslt = 0
  86. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  87. GOTO ext
  88. END IF
  89. FOR i = 1 TO it_mxbt
  90. INSERT INTO u_maxmin_mtrl_mx
  91. (billid,
  92. printid,
  93. mtrlid,
  94. period,
  95. minarg,
  96. maxarg,
  97. avgqty,
  98. maxqty,
  99. minqty,
  100. mxdscrp,
  101. maxqty_be,
  102. minqty_be)
  103. VALUES (:ll_billid,
  104. :arg_s_mtrl.arg_s_mx[i].printid,
  105. :arg_s_mtrl.arg_s_mx[i].mtrlid,
  106. :arg_s_mtrl.arg_s_mx[i].period,
  107. :arg_s_mtrl.arg_s_mx[i].minarg,
  108. :arg_s_mtrl.arg_s_mx[i].maxarg,
  109. :arg_s_mtrl.arg_s_mx[i].avgqty,
  110. :arg_s_mtrl.arg_s_mx[i].maxqty,
  111. :arg_s_mtrl.arg_s_mx[i].minqty,
  112. :arg_s_mtrl.arg_s_mx[i].mxdscrp,
  113. :arg_s_mtrl.arg_s_mx[i].maxqty_be,
  114. :arg_s_mtrl.arg_s_mx[i].minqty_be);
  115. IF sqlca.SQLCode <> 0 THEN
  116. rslt = 0
  117. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  118. GOTO ext
  119. END IF
  120. NEXT
  121. uo_billid = ll_billid
  122. uo_billcode = ls_billcode
  123. ELSE
  124. UPDATE u_maxmin_mtrl
  125. SET billdate = :arg_s_mtrl.billdate,
  126. rep = :arg_s_mtrl.rep,
  127. sdate = :arg_s_mtrl.sdate,
  128. edate = :arg_s_mtrl.edate,
  129. dscrp = :arg_s_mtrl.dscrp,
  130. moddate = getdate(),
  131. modemp = :arg_opemp
  132. WHERE billid = :arg_s_mtrl.billid
  133. AND flag = 0 ;
  134. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  135. rslt = 0
  136. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  137. GOTO ext
  138. END IF
  139. DELETE FROM u_maxmin_mtrl_mx
  140. Where billid = :arg_s_mtrl.billid;
  141. IF sqlca.SQLCode <> 0 THEN
  142. rslt = 0
  143. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  144. GOTO ext
  145. END IF
  146. FOR i = 1 TO it_mxbt
  147. INSERT INTO u_maxmin_mtrl_mx
  148. (billid,
  149. printid,
  150. mtrlid,
  151. period,
  152. minarg,
  153. maxarg,
  154. avgqty,
  155. maxqty,
  156. minqty,
  157. mxdscrp,
  158. maxqty_be,
  159. minqty_be)
  160. VALUES (:arg_s_mtrl.billid,
  161. :arg_s_mtrl.arg_s_mx[i].printid,
  162. :arg_s_mtrl.arg_s_mx[i].mtrlid,
  163. :arg_s_mtrl.arg_s_mx[i].period,
  164. :arg_s_mtrl.arg_s_mx[i].minarg,
  165. :arg_s_mtrl.arg_s_mx[i].maxarg,
  166. :arg_s_mtrl.arg_s_mx[i].avgqty,
  167. :arg_s_mtrl.arg_s_mx[i].maxqty,
  168. :arg_s_mtrl.arg_s_mx[i].minqty,
  169. :arg_s_mtrl.arg_s_mx[i].mxdscrp,
  170. :arg_s_mtrl.arg_s_mx[i].maxqty_be,
  171. :arg_s_mtrl.arg_s_mx[i].minqty_be);
  172. IF sqlca.SQLCode <> 0 THEN
  173. rslt = 0
  174. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  175. GOTO ext
  176. END IF
  177. NEXT
  178. uo_billid = arg_s_mtrl.billid
  179. END IF
  180. ext:
  181. IF rslt = 0 THEN
  182. ROLLBACK;
  183. ELSEIF arg_ifcommit AND rslt = 1 THEN
  184. COMMIT;
  185. END IF
  186. RETURN rslt
  187. end function
  188. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg);Int rslt = 1
  189. SELECT flag,secflag
  190. INTO :arg_flag,:arg_secflag
  191. FROM u_maxmin_mtrl
  192. WHERE billid = :arg_billid;
  193. IF sqlca.SQLCode <> 0 THEN
  194. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  195. rslt = 0
  196. GOTO ext
  197. END IF
  198. ext:
  199. RETURN rslt
  200. end function
  201. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  202. Int ll_flag,ll_secflag
  203. IF arg_billid <= 0 THEN
  204. rslt = 0
  205. arg_msg = '错误单据唯一码'
  206. GOTO ext
  207. END IF
  208. IF p_getflag(arg_billid,ll_flag,ll_secflag,arg_msg) = 0 THEN
  209. rslt = 0
  210. GOTO ext
  211. END IF
  212. IF ll_flag <> 0 OR ll_secflag <> 0 THEN
  213. rslt = 0
  214. arg_msg = '单据不是在待审核状态,不能删除'
  215. GOTO ext
  216. END IF
  217. DELETE FROM u_maxmin_mtrl_mx
  218. Where billid = :arg_billid;
  219. IF sqlca.SQLCode <> 0 THEN
  220. rslt = 0
  221. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  222. GOTO ext
  223. END IF
  224. DELETE FROM u_maxmin_mtrl
  225. WHERE billid = :arg_billid
  226. AND flag = 0;
  227. IF sqlca.SQLCode <> 0 THEN
  228. rslt = 0
  229. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  230. GOTO ext
  231. END IF
  232. ext:
  233. IF rslt = 0 THEN
  234. ROLLBACK;
  235. ELSEIF rslt = 1 AND arg_ifcommit THEN
  236. COMMIT;
  237. END IF
  238. RETURN rslt
  239. end function
  240. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  241. Int li_flag,li_secflag
  242. IF arg_billid <= 0 THEN
  243. rslt = 0
  244. ARG_MSG = '错误单据唯一码'
  245. GOTO ext
  246. END IF
  247. IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  248. rslt = 0
  249. GOTO ext
  250. END IF
  251. IF li_flag <> 0 THEN
  252. rslt = 0
  253. ARG_MSG = '单据不是在待审核状态,不可以执行初审'
  254. GOTO ext
  255. END IF
  256. UPDATE u_maxmin_mtrl
  257. SET flag = 1,
  258. auditemp = :arg_opemp,
  259. auditdate = getdate()
  260. WHERE billid = :arg_billid
  261. AND flag = 0 ;
  262. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  263. rslt = 0
  264. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  265. GOTO ext
  266. END IF
  267. ext:
  268. IF rslt = 0 THEN
  269. ROLLBACK;
  270. ELSEIF rslt = 1 AND arg_ifcommit THEN
  271. COMMIT;
  272. END IF
  273. RETURN rslt
  274. end function
  275. public function integer getinfo (long arg_billid, ref s_maxmin_mtrl_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  276. Long i = 1 ,no_mxcheck = 0
  277. IF arg_billid <= 0 THEN
  278. rslt = 0
  279. arg_msg = '错误单据唯一码'
  280. GOTO ext
  281. END IF
  282. DECLARE cur_mx CURSOR FOR
  283. SELECT u_maxmin_mtrl_mx.printid,
  284. u_maxmin_mtrl_mx.mtrlid,
  285. u_maxmin_mtrl_mx.period,
  286. u_maxmin_mtrl_mx.minarg,
  287. u_maxmin_mtrl_mx.maxarg,
  288. u_maxmin_mtrl_mx.avgqty,
  289. u_maxmin_mtrl_mx.maxqty,
  290. u_maxmin_mtrl_mx.minqty,
  291. u_maxmin_mtrl_mx.mxdscrp,
  292. u_mtrldef.mtrlcode,
  293. u_mtrldef.mtrlname
  294. FROM u_maxmin_mtrl_mx INNER JOIN
  295. u_mtrldef ON u_maxmin_mtrl_mx.mtrlid = u_mtrldef.mtrlid
  296. WHERE u_maxmin_mtrl_mx.billid = :arg_billid
  297. Order By u_maxmin_mtrl_mx.printid;
  298. OPEN cur_mx;
  299. FETCH cur_mx INTO
  300. :arg_ref_mx[i].printid,
  301. :arg_ref_mx[i].mtrlid,
  302. :arg_ref_mx[i].period,
  303. :arg_ref_mx[i].minarg,
  304. :arg_ref_mx[i].maxarg,
  305. :arg_ref_mx[i].avgqty,
  306. :arg_ref_mx[i].maxqty,
  307. :arg_ref_mx[i].minqty,
  308. :arg_ref_mx[i].mxdscrp,
  309. :arg_ref_mx[i].mtrlcode,
  310. :arg_ref_mx[i].mtrlname;
  311. DO WHILE sqlca.SQLCode = 0
  312. i++
  313. FETCH cur_mx INTO
  314. :arg_ref_mx[i].printid,
  315. :arg_ref_mx[i].mtrlid,
  316. :arg_ref_mx[i].period,
  317. :arg_ref_mx[i].minarg,
  318. :arg_ref_mx[i].maxarg,
  319. :arg_ref_mx[i].avgqty,
  320. :arg_ref_mx[i].maxqty,
  321. :arg_ref_mx[i].minqty,
  322. :arg_ref_mx[i].mxdscrp,
  323. :arg_ref_mx[i].mtrlcode,
  324. :arg_ref_mx[i].mtrlname;
  325. LOOP
  326. CLOSE cur_mx;
  327. SELECT count(*) INTO :no_mxcheck
  328. FROM u_maxmin_mtrl_mx
  329. Where billid = :arg_billid;
  330. IF sqlca.SQLCode <> 0 THEN
  331. rslt = 0
  332. arg_msg = "查询操作失败,单据明细数量"
  333. GOTO ext
  334. END IF
  335. IF i <> (no_mxcheck + 1) THEN
  336. rslt = 0
  337. arg_msg = "查询操作失败,单据明细"
  338. GOTO ext
  339. END IF
  340. arg_arr_cnt = i - 1
  341. ext:
  342. RETURN rslt
  343. end function
  344. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  345. Int li_flag,li_secflag
  346. DateTime null_dt
  347. SetNull(null_dt)
  348. IF arg_billid <= 0 THEN
  349. rslt = 0
  350. ARG_MSG = '错误单据唯一码'
  351. GOTO ext
  352. END IF
  353. IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  354. rslt = 0
  355. GOTO ext
  356. END IF
  357. IF li_secflag = 1 THEN
  358. rslt = 0
  359. ARG_MSG = '单据已终审,不可以撤销初审'
  360. GOTO ext
  361. END IF
  362. IF li_flag <> 1 THEN
  363. rslt = 0
  364. ARG_MSG = '单据不是在已初审状态,不可以撤销初审'
  365. GOTO ext
  366. END IF
  367. UPDATE u_maxmin_mtrl
  368. SET flag = 0,
  369. auditdate = :null_dt,
  370. auditemp = ''
  371. WHERE billid = :arg_billid
  372. AND flag = 1
  373. and secflag = 0 ;
  374. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  375. rslt = 0
  376. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  377. GOTO ext
  378. END IF
  379. ext:
  380. IF rslt = 0 THEN
  381. ROLLBACK;
  382. ELSEIF rslt = 1 AND arg_ifcommit THEN
  383. COMMIT;
  384. END IF
  385. RETURN rslt
  386. end function
  387. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  388. Int li_flag,li_secflag
  389. IF arg_billid <= 0 THEN
  390. rslt = 0
  391. ARG_MSG = '错误单据唯一码'
  392. GOTO ext
  393. END IF
  394. IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  395. rslt = 0
  396. GOTO ext
  397. END IF
  398. IF li_flag <> 1 THEN
  399. rslt = 0
  400. ARG_MSG = '单据不是在已初审状态,不可以执行终审'
  401. GOTO ext
  402. END IF
  403. IF li_secflag = 1 THEN
  404. rslt = 0
  405. ARG_MSG = '单据已是终审状态,不可以重复执行终审'
  406. GOTO ext
  407. END IF
  408. s_maxmin_mtrl_mx arg_s_mx[]
  409. Long ll_arr_mx
  410. Long ll_i
  411. IF getinfo(arg_billid,arg_s_mx,ll_arr_mx,ARG_MSG) = 0 THEN
  412. rslt = 0
  413. GOTO ext
  414. END IF
  415. FOR ll_i = 1 TO ll_arr_mx
  416. UPDATE u_mtrldef
  417. SET maxqty = :arg_s_mx[ll_i].maxqty,
  418. minqty = :arg_s_mx[ll_i].minqty
  419. Where mtrlid = :arg_s_mx[ll_i].mtrlid;
  420. IF sqlca.SQLCode <> 0 THEN
  421. rslt = 0
  422. ARG_MSG = '更新物料:'+arg_s_mx[ll_i].mtrlcode+' 安全库存失败,'+sqlca.SQLErrText
  423. GOTO ext
  424. END IF
  425. NEXT
  426. UPDATE u_maxmin_mtrl
  427. SET secflag = 1,
  428. secauditemp = :arg_opemp,
  429. secauditdate = getdate()
  430. WHERE billid = :arg_billid
  431. AND flag = 1
  432. and secflag = 0;
  433. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  434. rslt = 0
  435. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  436. GOTO ext
  437. END IF
  438. ext:
  439. IF rslt = 0 THEN
  440. ROLLBACK;
  441. ELSEIF rslt = 1 AND arg_ifcommit THEN
  442. COMMIT;
  443. END IF
  444. RETURN rslt
  445. end function
  446. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  447. int li_flag,li_secflag
  448. IF arg_billid <= 0 THEN
  449. rslt = 0
  450. arg_msg = '错误单据唯一码'
  451. GOTO ext
  452. END IF
  453. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  454. rslt = 0
  455. GOTO ext
  456. END IF
  457. IF li_flag <> 0 THEN
  458. rslt = 0
  459. arg_msg = '单据不是在待审核状态,不可以修改,请核对'
  460. GOTO ext
  461. END IF
  462. ext:
  463. RETURN rslt
  464. end function
  465. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);
  466. Int rslt = 1
  467. Int ll_flag,ll_secflag
  468. IF arg_newdescppart = '' THEN
  469. rslt = 0
  470. arG_MSG = "要添加内容为空,操作取消"
  471. GOTO ext
  472. END IF
  473. IF p_getflag(arg_billid,ll_flag,ll_secflag,arG_MSG) = 0 THEN
  474. rslt = 0
  475. GOTO ext
  476. END IF
  477. IF ll_flag = 0 THEN
  478. rslt = 0
  479. arG_MSG = "待审核状态下不可用"
  480. GOTO ext
  481. END IF
  482. UPDATE u_maxmin_mtrl
  483. SET DSCRP = DSCRP+' '+:arg_newdescppart
  484. Where u_maxmin_mtrl.billid = :arg_billid;
  485. IF SQLCA.SQLCode <> 0 THEN
  486. rslt = 0
  487. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  488. GOTO ext
  489. END IF
  490. ext:
  491. IF rslt = 1 THEN
  492. COMMIT;
  493. ELSE
  494. ROLLBACK;
  495. END IF
  496. Return (rslt)
  497. end function
  498. on uo_maxmin_mtrl.create
  499. call super::create
  500. TriggerEvent( this, "constructor" )
  501. end on
  502. on uo_maxmin_mtrl.destroy
  503. TriggerEvent( this, "destructor" )
  504. call super::destroy
  505. end on