uo_planprice_change.sru 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. $PBExportHeader$uo_planprice_change.sru
  2. forward
  3. global type uo_planprice_change from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_planprice_change from nonvisualobject
  7. end type
  8. global uo_planprice_change uo_planprice_change
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer save (s_planprice_change arg_s_planprice, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  15. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg)
  16. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer updatebegin (long arg_billid, ref string arg_msg)
  18. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer getinfo (long arg_billid, ref s_planprice_change_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  20. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. end prototypes
  22. public function integer save (s_planprice_change arg_s_planprice, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  23. Long cnt = 0
  24. DateTime server_dt
  25. Long ll_billid
  26. String ls_sccode,ls_billcode
  27. Long it_mxbt,i
  28. Long ll_mtrlid
  29. IF IsNull(arg_s_planprice.scid) THEN arg_s_planprice.scid = 0
  30. IF IsNull(arg_s_planprice.billid) THEN arg_s_planprice.billid = 0
  31. IF IsNull(arg_s_planprice.billemp) THEN arg_s_planprice.billemp = ''
  32. IF IsNull(arg_s_planprice.relcode) THEN arg_s_planprice.relcode = ''
  33. IF IsNull(arg_s_planprice.dscrp) THEN arg_s_planprice.dscrp = ''
  34. IF arg_s_planprice.billemp = '' THEN
  35. arg_msg = '请输入经手人'
  36. rslt = 0
  37. GOTO ext
  38. END IF
  39. it_mxbt = UpperBound(arg_s_planprice.arg_s_mx)
  40. FOR i = 1 TO it_mxbt
  41. ll_mtrlid = arg_s_planprice.arg_s_mx[i].mtrlid
  42. cnt = 0
  43. SELECT count(*) INTO :cnt
  44. FROM u_mtrldef
  45. Where mtrlid = :ll_mtrlid;
  46. IF sqlca.SQLCode <> 0 THEN
  47. rslt = 0
  48. arg_msg = '第'+String(i)+'行,查询物料资料是否存在失败,'+sqlca.SQLErrText
  49. GOTO ext
  50. END IF
  51. IF cnt = 0 THEN
  52. rslt = 0
  53. arg_msg = '第'+String(i)+'行,物料资料不存在'
  54. GOTO ext
  55. END IF
  56. IF arg_s_planprice.arg_s_mx[i].planprice_new < 0 THEN
  57. rslt = 0
  58. arg_msg = '第'+String(i)+'行,新计划价不能少于0'
  59. GOTO ext
  60. END IF
  61. NEXT
  62. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  63. IF sqlca.SQLCode <> 0 THEN
  64. rslt = 0
  65. arg_msg = "查询操作失败,日期 "
  66. GOTO ext
  67. END IF
  68. IF arg_s_planprice.billid = 0 THEN
  69. ll_billid = f_sys_scidentity(0,"u_planprice_change","billid",arg_msg,TRUE,id_sqlca)
  70. IF ll_billid <= 0 THEN
  71. rslt = 0
  72. GOTO ext
  73. END IF
  74. IF f_get_sccode(arg_s_planprice.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  75. rslt = 0
  76. GOTO ext
  77. END IF
  78. ls_billcode = getid(arg_s_planprice.scid,ls_sccode + 'MC',Date(server_dt),FALSE,sqlca)
  79. IF ls_billcode = "err" THEN
  80. rslt = 0
  81. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  82. GOTO ext
  83. END IF
  84. INSERT INTO u_planprice_change
  85. (scid,
  86. billid,
  87. billcode,
  88. billdate,
  89. billemp,
  90. opdate,
  91. opemp,
  92. relcode,
  93. dscrp)
  94. VALUES (
  95. :arg_s_planprice.scid,
  96. :ll_billid,
  97. :ls_billcode,
  98. :arg_s_planprice.billdate,
  99. :arg_s_planprice.billemp,
  100. getdate(),
  101. :arg_opemp,
  102. :arg_s_planprice.relcode,
  103. :arg_s_planprice.dscrp) ;
  104. IF sqlca.SQLCode <> 0 THEN
  105. rslt = 0
  106. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  107. GOTO ext
  108. END IF
  109. FOR i = 1 TO it_mxbt
  110. INSERT INTO u_planprice_change_mx
  111. (billid,
  112. printid,
  113. scid,
  114. mtrlid,
  115. planprice_ori,
  116. planprice_new,
  117. mxdscrp,
  118. status,
  119. woodcode,
  120. pcode)
  121. VALUES (
  122. :ll_billid,
  123. :arg_s_planprice.arg_s_mx[i].printid,
  124. :arg_s_planprice.scid,
  125. :arg_s_planprice.arg_s_mx[i].mtrlid,
  126. :arg_s_planprice.arg_s_mx[i].planprice_ori,
  127. :arg_s_planprice.arg_s_mx[i].planprice_new,
  128. :arg_s_planprice.arg_s_mx[i].mxdscrp,
  129. :arg_s_planprice.arg_s_mx[i].status,
  130. :arg_s_planprice.arg_s_mx[i].woodcode,
  131. :arg_s_planprice.arg_s_mx[i].pcode);
  132. IF sqlca.SQLCode <> 0 THEN
  133. rslt = 0
  134. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  135. GOTO ext
  136. END IF
  137. NEXT
  138. uo_billid = ll_billid
  139. uo_billcode = ls_billcode
  140. ELSE
  141. UPDATE u_planprice_change
  142. SET
  143. billdate = :arg_s_planprice.billdate,
  144. billemp = :arg_s_planprice.billemp,
  145. moddate = getdate(),
  146. modemp = :arg_opemp,
  147. relcode = :arg_s_planprice.relcode,
  148. dscrp = :arg_s_planprice.dscrp
  149. WHERE billid = :arg_s_planprice.billid
  150. AND flag = 0;
  151. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  152. rslt = 0
  153. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  154. GOTO ext
  155. END IF
  156. DELETE FROM u_planprice_change_mx
  157. WHERE billid = :arg_s_planprice.billid;
  158. IF sqlca.SQLCode <> 0 THEN
  159. rslt = 0
  160. arg_msg = "删除原有明细操作失败"+"~n"+sqlca.SQLErrText
  161. GOTO ext
  162. END IF
  163. FOR i = 1 TO it_mxbt
  164. INSERT INTO u_planprice_change_mx
  165. (billid,
  166. printid,
  167. scid,
  168. mtrlid,
  169. planprice_ori,
  170. planprice_new,
  171. mxdscrp,
  172. status,
  173. woodcode,
  174. pcode)
  175. VALUES (
  176. :arg_s_planprice.billid,
  177. :arg_s_planprice.arg_s_mx[i].printid,
  178. :arg_s_planprice.scid,
  179. :arg_s_planprice.arg_s_mx[i].mtrlid,
  180. :arg_s_planprice.arg_s_mx[i].planprice_ori,
  181. :arg_s_planprice.arg_s_mx[i].planprice_new,
  182. :arg_s_planprice.arg_s_mx[i].mxdscrp,
  183. :arg_s_planprice.arg_s_mx[i].status,
  184. :arg_s_planprice.arg_s_mx[i].woodcode,
  185. :arg_s_planprice.arg_s_mx[i].pcode);
  186. IF sqlca.SQLCode <> 0 THEN
  187. rslt = 0
  188. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  189. GOTO ext
  190. END IF
  191. NEXT
  192. uo_billid = arg_s_planprice.billid
  193. END IF
  194. ext:
  195. IF rslt = 0 THEN
  196. ROLLBACK;
  197. ELSEIF arg_ifcommit AND rslt = 1 THEN
  198. COMMIT;
  199. END IF
  200. RETURN rslt
  201. end function
  202. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  203. SELECT flag
  204. INTO :arg_flag
  205. FROM u_planprice_change
  206. WHERE billid = :arg_billid;
  207. IF sqlca.SQLCode <> 0 THEN
  208. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  209. rslt = 0
  210. GOTO ext
  211. END IF
  212. ext:
  213. RETURN rslt
  214. end function
  215. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  216. Int li_flag
  217. IF arg_billid <= 0 THEN
  218. rslt = 0
  219. arg_msg = '错误单据唯一码'
  220. GOTO ext
  221. END IF
  222. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  223. rslt = 0
  224. GOTO ext
  225. END IF
  226. IF li_flag = 1 THEN
  227. rslt = 0
  228. arg_msg = '单据不是在待审状态,不可以删除'
  229. GOTO ext
  230. END IF
  231. DELETE FROM u_planprice_change
  232. WHERE billid = :arg_billid;
  233. IF sqlca.SQLCode <> 0 THEN
  234. rslt = 0
  235. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  236. GOTO ext
  237. END IF
  238. ext:
  239. IF rslt = 0 THEN
  240. ROLLBACK;
  241. ELSEIF rslt = 1 AND arg_ifcommit THEN
  242. COMMIT;
  243. END IF
  244. RETURN rslt
  245. end function
  246. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  247. Int li_flag
  248. Long cnt
  249. IF arg_billid <= 0 THEN
  250. rslt = 0
  251. arg_msg = '错误单据唯一码'
  252. GOTO ext
  253. END IF
  254. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  255. rslt = 0
  256. GOTO ext
  257. END IF
  258. IF li_flag = 1 THEN
  259. rslt = 0
  260. arg_msg = '单据已经审核,不可以再修改'
  261. GOTO ext
  262. END IF
  263. ext:
  264. RETURN rslt
  265. end function
  266. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  267. Int li_flag
  268. IF arg_newdescppart = '' THEN
  269. rslt = 0
  270. arG_MSG = "要添加内容为空,操作取消"
  271. GOTO ext
  272. END IF
  273. IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN
  274. rslt = 0
  275. GOTO ext
  276. END IF
  277. IF li_flag = 0 THEN
  278. rslt = 0
  279. arG_MSG = "待审核状态下不可用"
  280. GOTO ext
  281. END IF
  282. UPDATE u_planprice_change
  283. SET DSCRP = DSCRP+' '+:arg_newdescppart
  284. Where u_planprice_change.billid = :arg_billid;
  285. IF SQLCA.SQLCode <> 0 THEN
  286. rslt = 0
  287. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  288. GOTO ext
  289. END IF
  290. ext:
  291. IF rslt = 0 THEN
  292. ROLLBACK;
  293. ELSEIF rslt = 1 AND arg_ifcommit THEN
  294. COMMIT;
  295. END IF
  296. Return (rslt)
  297. end function
  298. public function integer getinfo (long arg_billid, ref s_planprice_change_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  299. Long i = 1,no_mxcheck = 0
  300. IF arg_billid <= 0 THEN
  301. rslt = 0
  302. arg_msg = '错误单据唯一码'
  303. GOTO ext
  304. END IF
  305. DECLARE cur_mx CURSOR FOR
  306. SELECT printid,
  307. scid,
  308. mtrlid,
  309. planprice_ori,
  310. planprice_new,
  311. mxdscrp,
  312. status,
  313. woodcode,
  314. pcode
  315. FROM u_planprice_change_mx
  316. Where billid = :arg_billid;
  317. OPEN cur_mx;
  318. FETCH cur_mx INTO :arg_ref_mx[i].printid,
  319. :arg_ref_mx[i].scid,
  320. :arg_ref_mx[i].mtrlid,
  321. :arg_ref_mx[i].planprice_ori,
  322. :arg_ref_mx[i].planprice_new,
  323. :arg_ref_mx[i].mxdscrp,
  324. :arg_ref_mx[i].status,
  325. :arg_ref_mx[i].woodcode,
  326. :arg_ref_mx[i].pcode;
  327. DO WHILE sqlca.SQLCode = 0
  328. i++
  329. FETCH cur_mx INTO :arg_ref_mx[i].printid,
  330. :arg_ref_mx[i].scid,
  331. :arg_ref_mx[i].mtrlid,
  332. :arg_ref_mx[i].planprice_ori,
  333. :arg_ref_mx[i].planprice_new,
  334. :arg_ref_mx[i].mxdscrp,
  335. :arg_ref_mx[i].status,
  336. :arg_ref_mx[i].woodcode,
  337. :arg_ref_mx[i].pcode;
  338. LOOP
  339. CLOSE cur_mx;
  340. //检验明细是否读入完整
  341. SELECT count(*) INTO :no_mxcheck
  342. FROM u_planprice_change_mx
  343. Where billid = :arg_billid;
  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. arg_arr_cnt = i - 1
  355. ext:
  356. RETURN rslt
  357. end function
  358. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  359. Int li_flag
  360. Long ll_i
  361. Long ll_arr_cnt
  362. Long ll_mtrlid
  363. Decimal ld_planprice_new
  364. IF arg_billid <= 0 THEN
  365. rslt = 0
  366. ARG_MSG = '错误单据唯一码'
  367. GOTO ext
  368. END IF
  369. IF p_getflag(arg_billid,li_flag,ARG_MSG) = 0 THEN
  370. rslt = 0
  371. GOTO ext
  372. END IF
  373. IF li_flag <> 0 THEN
  374. rslt = 0
  375. ARG_MSG = '单据不是在待审核状态,不可以再审'
  376. GOTO ext
  377. END IF
  378. //更新审核标记
  379. UPDATE u_planprice_change
  380. SET auditemp = :arg_opemp,
  381. auditdate = getdate(),
  382. flag = 1
  383. WHERE billid = :arg_billid
  384. And flag = 0;
  385. IF sqlca.SQLCode <> 0 THEN
  386. rslt = 0
  387. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  388. GOTO ext
  389. ELSEIF sqlca.SQLNRows = 0 THEN
  390. rslt = 0
  391. ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  392. GOTO ext
  393. END IF
  394. s_planprice_change_mx s_mx[]
  395. IF getinfo(arg_billid,s_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
  396. rslt = 0
  397. GOTO ext
  398. END IF
  399. FOR ll_i = 1 To ll_arr_cnt
  400. UPDATE u_mtrldef_planprice
  401. SET planprice = :s_mx[ll_i].planprice_new,
  402. modemp = :arg_opemp,
  403. moddate = getdate()
  404. WHERE mtrlid = :s_mx[ll_i].mtrlid
  405. AND status = :s_mx[ll_i].status
  406. AND woodcode = :s_mx[ll_i].woodcode
  407. And pcode = :s_mx[ll_i].pcode;
  408. IF sqlca.SQLCode = 0 THEN
  409. IF sqlca.SQLNRows = 0 THEN
  410. INSERT INTO u_mtrldef_planprice
  411. (mtrlid,
  412. status,
  413. woodcode,
  414. pcode,
  415. planprice,
  416. modemp,
  417. moddate)
  418. VALUES
  419. (:s_mx[ll_i].mtrlid,
  420. :s_mx[ll_i].status,
  421. :s_mx[ll_i].woodcode,
  422. :s_mx[ll_i].pcode,
  423. :s_mx[ll_i].planprice_new,
  424. :arg_opemp,
  425. getdate());
  426. IF sqlca.SQLCode <> 0 THEN
  427. rslt = 0
  428. ARG_MSG = '插入产品计划成本价资料失败,'+sqlca.SQLErrText
  429. GOTO ext
  430. END IF
  431. END IF
  432. ELSE
  433. IF sqlca.SQLCode <> 0 THEN
  434. rslt = 0
  435. ARG_MSG = '更新产品计划成本价资料失败,'+sqlca.SQLErrText
  436. GOTO ext
  437. END IF
  438. END IF
  439. NEXT
  440. ext:
  441. IF rslt = 0 THEN
  442. ROLLBACK;
  443. ELSEIF rslt = 1 And arg_ifcommit THEN
  444. COMMIT;
  445. END IF
  446. RETURN rslt
  447. end function
  448. on uo_planprice_change.create
  449. call super::create
  450. TriggerEvent( this, "constructor" )
  451. end on
  452. on uo_planprice_change.destroy
  453. TriggerEvent( this, "destructor" )
  454. call super::destroy
  455. end on