uo_produce_cost.sru 10 KB

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