uo_amerce.sru 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. $PBExportHeader$uo_amerce.sru
  2. forward
  3. global type uo_amerce from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_amerce from nonvisualobject
  7. end type
  8. global uo_amerce uo_amerce
  9. type variables
  10. public protectedwrite long scid //罚款单scid
  11. public protectedwrite long billid //罚款单自动增量id
  12. public protectedwrite string billcode //罚款单的唯一编号
  13. public protectedwrite datetime opdate //建立时间,自动
  14. public protectedwrite string opemp //建立人
  15. public protectedwrite datetime moddate //修改时间,自动
  16. public protectedwrite string modemp //修改人
  17. public protectedwrite int flag=0 //审核标志
  18. public protectedwrite datetime auditingdate //审核时间
  19. public protectedwrite string auditingrep //审核操作员
  20. long sptid //供应商ID
  21. datetime billdate //日期
  22. decimal amerceamt //罚款金额
  23. string amercereason //罚款原因
  24. string relcode //相关号
  25. long payid
  26. int banktypeid
  27. string inrep
  28. long moneyid
  29. long itemid
  30. private:
  31. boolean it_newbegin=false //新建标志
  32. boolean it_updatebegin=false//修改标志
  33. end variables
  34. forward prototypes
  35. public function integer p_reset ()
  36. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  37. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  38. public function integer newbegin (long arg_scid, ref string arg_msg)
  39. public function integer del (long arg_scid, long arg_billid, ref string arg_msg)
  40. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  41. public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  42. public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  43. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg)
  44. end prototypes
  45. public function integer p_reset ();//INT p_RESET()
  46. //清除对象及其明细
  47. billid=0
  48. billcode=''
  49. opemp=''
  50. auditingrep=''
  51. flag=0
  52. sptid=0
  53. amerceamt=0
  54. amercereason=''
  55. relcode=''
  56. it_newbegin=FALSE
  57. it_updatebegin=FALSE
  58. RETURN 1
  59. end function
  60. public function integer save (ref string arg_msg, boolean arg_ifcommit);//====================================================================
  61. // Function: save(arg_msg,arg_ifcommit)
  62. //--------------------------------------------------------------------
  63. // Description:
  64. //--------------------------------------------------------------------
  65. // Arguments:
  66. // reference string arg_msg
  67. // value boolean arg_ifcommit
  68. //--------------------------------------------------------------------
  69. // Returns: integer
  70. //--------------------------------------------------------------------
  71. // Author: yyx Date: 2003.11.21
  72. //--------------------------------------------------------------------
  73. // Modify History:
  74. //
  75. //====================================================================
  76. Integer rslt = 1,cnt = 0,i
  77. DateTime server_dt
  78. Long ls_newid
  79. String ls_sccode
  80. IF IsNull(sptid) THEN sptid = 0
  81. IF IsNull(amerceamt) THEN amerceamt = 0
  82. IF IsNull(banktypeid) THEN banktypeid = 0
  83. IF IsNull(amercereason) THEN amercereason = ''
  84. IF IsNull(relcode) THEN relcode = ''
  85. IF IsNull(inrep) THEN inrep = ''
  86. IF IsNull(moneyid) THEN moneyid = 0
  87. IF IsNull(itemid) THEN itemid = 0
  88. IF it_newbegin = False And it_updatebegin = False THEN
  89. rslt = 0
  90. arg_msg = "非编辑状态不可以提交"
  91. GOTO ext
  92. END IF
  93. SELECT count(*) INTO :cnt
  94. FROM u_spt
  95. Where sptid = :sptid;
  96. IF sqlca.SQLCode <> 0 THEN
  97. arg_msg = '查询供应商资料失败'
  98. rslt = 0
  99. GOTO ext
  100. END IF
  101. IF cnt > 1 THEN
  102. arg_msg = '供应商资料重复'
  103. rslt = 0
  104. GOTO ext
  105. END IF
  106. IF amerceamt = 0 THEN
  107. arg_msg = '请输入正确的罚款金额'
  108. rslt = 0
  109. GOTO ext
  110. END IF
  111. IF inrep = '' THEN
  112. arg_msg = '请输入经手人'
  113. rslt = 0
  114. GOTO ext
  115. END IF
  116. IF banktypeid = 0 THEN
  117. arg_msg = '请请选择结算方式'
  118. rslt = 0
  119. GOTO ext
  120. END IF
  121. SELECT Top 1 getdate() Into :server_dt From u_user;
  122. //取得系统时间,借用操作员表
  123. IF sqlca.SQLCode <> 0 THEN
  124. rslt = 0
  125. arg_msg = "查询操作失败,日期 "
  126. GOTO ext
  127. END IF
  128. IF Year(Date(billdate)) < 2000 Or IsNull(billdate) THEN
  129. rslt = 0
  130. arg_msg = "时间不合理"
  131. GOTO ext
  132. END IF
  133. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  134. IF billid = 0 THEN //新建
  135. ls_newid = f_sys_scidentity(scid,"u_spt_amerce","billid",arg_msg,True,sqlca)
  136. IF ls_newid <= 0 THEN
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. //取分部代号
  141. IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  142. rslt = 0
  143. GOTO ext
  144. END IF
  145. billcode = getid(scid,ls_sccode + "KK",Date(server_dt),True,sqlca) //取得新单据编号
  146. IF billcode = "err" THEN
  147. billcode = ''
  148. rslt = 0
  149. arg_msg = "无法获取罚款单编号"
  150. GOTO ext
  151. END IF
  152. INSERT INTO u_spt_amerce (
  153. scid,
  154. billid,
  155. billcode,
  156. billdate,
  157. sptid,
  158. amerceamt,
  159. banktypeid,
  160. inrep,
  161. amercereason,
  162. relcode,
  163. opdate,
  164. opemp,
  165. moneyid,
  166. itemid)
  167. VALUES (
  168. :scid,
  169. :ls_newid,
  170. :billcode,
  171. :billdate,
  172. :sptid,
  173. :amerceamt,
  174. :banktypeid,
  175. :inrep,
  176. :amercereason,
  177. :relcode,
  178. :server_dt,
  179. :publ_operator,
  180. :moneyid,
  181. :itemid);
  182. IF sqlca.SQLCode <> 0 THEN
  183. rslt = 0
  184. IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN
  185. arg_msg = '建立供应商罚款单失败,关键字分部ID、单据ID重复'
  186. ELSEIF Pos(Lower(sqlca.SQLErrText),'ix_u_spt_amerce') > 0 THEN
  187. arg_msg = '建立供应商罚款单失败,单据编号重复'
  188. ELSE
  189. arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText
  190. END IF
  191. GOTO ext
  192. END IF
  193. billid = ls_newid
  194. ELSE //////////////////////////////////////////////// //更新
  195. UPDATE u_spt_amerce
  196. SET billdate = :billdate,
  197. sptid = :sptid,
  198. amerceamt = :amerceamt,
  199. amercereason = :amercereason,
  200. banktypeid = :banktypeid,
  201. inrep = :inrep,
  202. relcode = :relcode,
  203. moddate = :server_dt,
  204. modemp = :publ_operator,
  205. moneyid = :moneyid,
  206. itemid = :itemid
  207. WHERE u_spt_amerce.billid = :billid
  208. AND u_spt_amerce.scid = :scid
  209. And u_spt_amerce.flag = 0;
  210. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  211. rslt = 0
  212. IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN
  213. arg_msg = '更新供应商罚款单失败,关键字分部ID、单据ID重复'
  214. ELSEIF Pos(Lower(sqlca.SQLErrText),'ix_u_spt_amerce') > 0 THEN
  215. arg_msg = '更新供应商罚款单失败,单据编号重复'
  216. ELSE
  217. arg_msg = "因网络或其它原因导致更新单据操作失败>>"+"~n"+sqlca.SQLErrText
  218. END IF
  219. GOTO ext
  220. END IF
  221. END IF
  222. it_newbegin = False
  223. it_updatebegin = False
  224. ext:
  225. IF rslt = 0 THEN
  226. ROLLBACK;
  227. ELSEIF rslt = 1 And arg_ifcommit THEN
  228. COMMIT;
  229. END IF
  230. arg_msg = '供应商罚款单,'+ arg_msg
  231. Return(rslt)
  232. end function
  233. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  234. // Function: updatebegin(arg_billid,arg_msg)
  235. //--------------------------------------------------------------------
  236. // Description:
  237. //--------------------------------------------------------------------
  238. // Arguments:
  239. // value long arg_billid
  240. // reference string arg_msg
  241. //--------------------------------------------------------------------
  242. // Returns: integer
  243. //--------------------------------------------------------------------
  244. // Author: yyx Date: 2003.11.21
  245. //--------------------------------------------------------------------
  246. // Modify History:
  247. //
  248. //====================================================================
  249. int rslt = 1
  250. if getinfo(arg_scid,arg_billid,arg_msg) = 0 then
  251. rslt = 0
  252. goto ext
  253. end if
  254. if flag = 1 then
  255. rslt = 0
  256. arg_msg = '单据已经审核,不可以修改'
  257. goto ext
  258. end if
  259. billid = arg_billid
  260. scid = arg_scid
  261. it_newbegin = false
  262. it_updatebegin = true
  263. ext:
  264. if rslt = 0 then p_reset()
  265. arg_msg = '供应商罚款单,'+ arg_msg
  266. return rslt
  267. end function
  268. public function integer newbegin (long arg_scid, ref string arg_msg);int rslt = 1
  269. if arg_scid < 0 then
  270. arg_msg = '请选择分部'
  271. rslt = 0
  272. goto ext
  273. end if
  274. p_reset()
  275. scid=arg_scid
  276. it_newbegin=TRUE
  277. it_updatebegin=FALSE
  278. ext:
  279. if rslt = 0 then p_reset()
  280. arg_msg = '供应商罚款单,'+ arg_msg
  281. return rslt
  282. end function
  283. public function integer del (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  284. // Function: del(arg_billid,arg_msg)
  285. //--------------------------------------------------------------------
  286. // Description:
  287. //--------------------------------------------------------------------
  288. // Arguments:
  289. // value long arg_billid
  290. // reference string arg_msg
  291. //--------------------------------------------------------------------
  292. // Returns: integer
  293. //--------------------------------------------------------------------
  294. // Author: yyx Date: 2003.11.21
  295. //--------------------------------------------------------------------
  296. // Modify History:
  297. //
  298. //====================================================================
  299. int rslt = 1
  300. if arg_billid <= 0 then
  301. rslt = 0
  302. arg_msg = "没有删除对象,操作取消"
  303. goto ext
  304. end if
  305. if it_newbegin or it_updatebegin then
  306. rslt=0
  307. arg_msg="编辑状态下不可以执行,操作取消"
  308. goto ext
  309. end if
  310. select u_spt_amerce.flag
  311. into :flag
  312. from u_spt_amerce
  313. where u_spt_amerce.billid = :arg_billid;
  314. if sqlca.sqlcode <> 0 then
  315. rslt = 0
  316. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  317. arg_msg = '查询单据操作失败,查询数据返回值多于一个'
  318. else
  319. arg_msg = '查询单据操作失败'
  320. end if
  321. goto ext
  322. end if
  323. if flag = 1 then
  324. rslt = 0
  325. arg_msg = "单据已经审核,不可以删除"
  326. goto ext
  327. end if
  328. delete from u_spt_amerce
  329. where u_spt_amerce.billid = :arg_billid
  330. and u_spt_amerce.scid = :arg_scid;
  331. if sqlca.sqlcode <> 0 then
  332. rslt = 0
  333. arg_msg = "删除罚款单操作失败"
  334. goto ext
  335. end if
  336. commit;
  337. it_newbegin = false
  338. it_updatebegin = false
  339. if rslt = 0 then
  340. rollback;
  341. p_reset()
  342. end if
  343. ext:
  344. arg_msg = '供应商罚款单,'+ arg_msg
  345. return (rslt)
  346. end function
  347. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  348. IF arg_billid <= 0 THEN
  349. billid = 0
  350. arg_msg = '错误的单据id'
  351. GOTO ext
  352. END IF
  353. SELECT u_spt_amerce.billcode,
  354. u_spt_amerce.billdate,
  355. u_spt_amerce.sptid,
  356. u_spt_amerce.amerceamt,
  357. u_spt_amerce.banktypeid,
  358. u_spt_amerce.inrep,
  359. u_spt_amerce.amercereason,
  360. u_spt_amerce.payid,
  361. u_spt_amerce.relcode,
  362. u_spt_amerce.flag,
  363. u_spt_amerce.moneyid,
  364. u_spt_amerce.itemid
  365. INTO
  366. :billcode,
  367. :billdate,
  368. :sptid,
  369. :amerceamt,
  370. :banktypeid,
  371. :inrep,
  372. :amercereason,
  373. :payid,
  374. :relcode,
  375. :flag,
  376. :moneyid,
  377. :itemid
  378. FROM u_spt_amerce
  379. WHERE u_spt_amerce.billid = :arg_billid
  380. AND u_spt_amerce.scid = :arg_scid;
  381. IF sqlca.SQLCode <> 0 THEN
  382. rslt = 0
  383. IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN
  384. arg_msg = '查询单据资料操作失败,查询数据返回值多于一个'
  385. ELSE
  386. arg_msg = '查询单据资料操作失败'
  387. END IF
  388. GOTO ext
  389. END IF
  390. scid = arg_scid
  391. billid = arg_billid
  392. ext:
  393. IF rslt = 0 THEN p_reset()
  394. RETURN rslt
  395. end function
  396. public function integer auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  397. String ls_dscrp
  398. uo_mustpay uo_pay
  399. uo_pay = Create uo_mustpay
  400. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  401. rslt = 0
  402. GOTO ext
  403. END IF
  404. IF flag = 1 THEN
  405. rslt = 0
  406. arg_msg = '单据已经审核,不可以再审核'
  407. GOTO ext
  408. END IF
  409. IF it_newbegin Or it_updatebegin THEN
  410. rslt = 0
  411. arg_msg = "编辑状态下不可以执行审核"
  412. GOTO ext
  413. END IF
  414. UPDATE u_spt_amerce
  415. SET auditrep = :publ_operator,
  416. auditdate = getdate(),
  417. flag = 1
  418. WHERE u_spt_amerce.billid = :arg_billid
  419. And flag = 0 And scid = :arg_scid;
  420. IF sqlca.SQLCode <> 0 THEN
  421. rslt = 0
  422. IF Pos(Lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 THEN
  423. arg_msg = '审核供应商罚款单操作失败,关键字分部ID、单据ID重复'
  424. ELSE
  425. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  426. END IF
  427. GOTO ext
  428. ELSEIF sqlca.SQLNRows = 0 THEN
  429. rslt = 0
  430. arg_msg = "单据正在审核,请稍后查询。"
  431. GOTO ext
  432. END IF
  433. IF amerceamt <> 0 THEN
  434. ls_dscrp = billcode + "罚款"
  435. Long ll_dft_itemid
  436. SELECT itemid INTO :ll_dft_itemid
  437. FROM u_itemdef
  438. Where dfttype = 9;
  439. IF sqlca.SQLCode <> 0 THEN
  440. arg_msg = '查询默认供应商罚款单项目资料失败,'+sqlca.SQLErrText
  441. rslt = 0
  442. GOTO ext
  443. END IF
  444. DateTime plandate
  445. SetNull(plandate)
  446. IF uo_pay.add_payrec (scid,sptid,billdate,inrep,0 - amerceamt,0 - amerceamt,0,ls_dscrp,&
  447. billcode,banktypeid,1,publ_operator,billid,0,arg_msg,False,plandate,0,ll_dft_itemid,moneyid,relcode) = 0 THEN
  448. rslt = 0
  449. GOTO ext
  450. END IF
  451. UPDATE u_spt_amerce
  452. SET payid = :uo_pay.ref_payid
  453. WHERE u_spt_amerce.billid = :arg_billid
  454. AND scid = :scid
  455. And flag = 1 ;
  456. IF sqlca.SQLCode <> 0 THEN
  457. arg_msg = '更新罚款单相关应收帐ID失败'
  458. rslt = 0
  459. GOTO ext
  460. END IF
  461. END IF
  462. flag = 1
  463. ext:
  464. IF rslt = 0 THEN
  465. ROLLBACK;
  466. ELSEIF rslt = 1 And arg_ifcommit THEN
  467. COMMIT;
  468. END IF
  469. Destroy uo_pay
  470. arg_msg = '供应商罚款单,'+ arg_msg
  471. RETURN rslt
  472. end function
  473. public function integer c_auditing (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt=1
  474. string str_dscrp
  475. datetime null_dt
  476. setnull(null_dt)
  477. uo_mustpay uo_pay
  478. uo_pay = create uo_mustpay
  479. if getinfo(arg_scid,arg_billid,arg_msg) = 0 then
  480. rslt = 0
  481. goto ext
  482. end if
  483. if flag = 0 then
  484. rslt = 0
  485. arg_msg = '单据还未审核,不可以撤审'
  486. goto ext
  487. end if
  488. if it_newbegin or it_updatebegin then
  489. rslt = 0
  490. arg_msg = "编辑状态下不可以执行审核"
  491. goto ext
  492. end if
  493. update u_spt_amerce
  494. set auditrep = '',
  495. auditdate = :null_dt,
  496. flag = 0
  497. where u_spt_amerce.billid = :arg_billid
  498. and flag = 1 and scid = :arg_scid;
  499. if sqlca.sqlcode <> 0 then
  500. rslt = 0
  501. if pos(lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 then
  502. arg_msg = '撤审供应商罚款单操作失败,关键字分部ID、单据ID重复'
  503. else
  504. arg_msg = "因网络或其它原因导致撤审单据操作失败"+"~n"+sqlca.SQLErrText
  505. end if
  506. goto ext
  507. elseif sqlca.sqlnrows = 0 then
  508. rslt = 0
  509. arg_msg = "单据正在撤消审核,请稍后查询。"
  510. goto ext
  511. end if
  512. if amerceamt <> 0 then
  513. if uo_pay.del_payrec(scid,1,payid,sptid,arg_msg,false)=0 then
  514. rslt=0
  515. goto ext
  516. end if
  517. end if
  518. flag = 0
  519. ext:
  520. if rslt=0 then
  521. rollback;
  522. elseif rslt=1 and arg_ifcommit then
  523. commit;
  524. end if
  525. destroy uo_pay
  526. arg_msg = '供应商罚款单,'+ arg_msg
  527. return rslt
  528. end function
  529. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  530. //0 fail 1 success
  531. Int rslt = 1
  532. arg_newdescppart = Trim(arg_newdescppart)
  533. IF it_updatebegin OR it_newbegin THEN
  534. rslt = 0
  535. arg_msg = "编辑状态下不可用"
  536. GOTO ext
  537. END IF
  538. IF arg_newdescppart = '' THEN
  539. rslt = 0
  540. arg_msg = "要添加内容为空,操作取消"
  541. GOTO ext
  542. END IF
  543. rslt = getinfo(arg_scid,arg_billid,arg_msg)
  544. IF rslt = 0 THEN GOTO ext
  545. IF flag = 0 THEN
  546. rslt = 0
  547. arg_msg = "非审核状态下不可用"
  548. GOTO ext
  549. END IF
  550. UPDATE u_spt_amerce
  551. SET amercereason = amercereason+' '+:arg_newdescppart
  552. WHERE u_spt_amerce.billid = :arg_billid
  553. AND scid = :arg_scid;
  554. IF sqlca.SQLCode <> 0 THEN
  555. ROLLBACK ;
  556. rslt = 0
  557. if pos(lower(sqlca.SQLErrText),'pk_u_spt_amerce') > 0 then
  558. arg_msg = '添加供应商罚款单备注失败,关键字分部ID、单据ID重复'
  559. else
  560. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.SQLErrText
  561. end if
  562. GOTO ext
  563. END IF
  564. COMMIT ;
  565. amercereason = amercereason+' '+arg_newdescppart
  566. ext:
  567. arg_msg = '供应商罚款单,'+ arg_msg
  568. Return (rslt)
  569. end function
  570. on uo_amerce.create
  571. call super::create
  572. TriggerEvent( this, "constructor" )
  573. end on
  574. on uo_amerce.destroy
  575. TriggerEvent( this, "destructor" )
  576. call super::destroy
  577. end on