uo_rapmoney.sru 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982
  1. $PBExportHeader$uo_rapmoney.sru
  2. forward
  3. global type uo_rapmoney from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_rapmoney from nonvisualobject
  7. end type
  8. global uo_rapmoney uo_rapmoney
  9. type variables
  10. transaction commit_transaction //数据commit事务
  11. long ref_rapid
  12. end variables
  13. forward prototypes
  14. public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit)
  15. protected function integer f_check_ifnewest (long arg_accounstid, datetime arg_takedate, ref long arg_ref_minprintid, ref long arg_ref_maxprintid, ref string arg_msg)
  16. public function integer add_raprec (long arg_scid, long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, string arg_relcode)
  17. public function integer add_del (long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, long arg_acntid, string arg_relcode)
  18. public function integer mod_raprec (long arg_scid, long arg_accountsid, long arg_rapid, datetime arg_takedate, string arg_inrep, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, integer arg_buildtype, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto, long arg_banktypeid, string arg_relcode)
  19. public function integer add_raprec (s_rap_money arg_s_mx, ref string arg_msg, boolean arg_ifcommit)
  20. end prototypes
  21. public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit);
  22. Int rslt = 1
  23. long cnt = 0,buildtype
  24. Decimal sum_balcamt = 0.00
  25. DateTime ld_ctdatetime,ld_takedate
  26. Long ll_printid
  27. SELECT buildtype,
  28. takedate,
  29. printid
  30. INTO
  31. :buildtype,
  32. :ld_takedate,
  33. :ll_printid
  34. FROM u_rap_money
  35. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  36. IF commit_transaction.SQLCode <> 0 THEN
  37. arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+commit_transaction.SQLErrText
  38. rslt = 0
  39. GOTO ext
  40. END IF
  41. IF arg_ifauto = 0 THEN
  42. IF buildtype = 1 THEN
  43. arg_msg = '系统自动建立的出纳帐明细不可以删除'
  44. rslt = 0
  45. GOTO ext
  46. END IF
  47. END IF
  48. SELECT count(*)
  49. INTO :cnt
  50. FROM u_accounts
  51. Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ;
  52. IF commit_transaction.SQLCode <> 0 THEN
  53. arg_msg = '查询操作失败,出纳帐户唯一码'
  54. rslt = 0
  55. GOTO ext
  56. END IF
  57. IF cnt = 0 THEN
  58. arg_msg = '错误出纳帐户唯一码'
  59. rslt = 0
  60. GOTO ext
  61. END IF
  62. Int rst
  63. rst = f_last_ctdate(ld_ctdatetime,arg_msg)
  64. IF rst = 0 THEN
  65. rslt = 0
  66. GOTO ext
  67. ELSEIF rst = 1 THEN
  68. IF ld_takedate <= ld_ctdatetime THEN
  69. arg_msg = '该数据在截数日期:'+String(ld_ctdatetime,'yyyy-mm-dd hh:mm')+'前,不能删除'
  70. rslt = 0
  71. GOTO ext
  72. END IF
  73. cnt = 0
  74. SELECT count(*) INTO :cnt
  75. FROM u_rap_money
  76. Where accountid = :arg_accountsid USING commit_transaction ;
  77. IF commit_transaction.SQLCode <> 0 THEN
  78. arg_msg = '查询帐号出纳帐数目失败' + commit_transaction.SQLErrText
  79. rslt = 0
  80. GOTO ext
  81. END IF
  82. IF cnt = 1 THEN
  83. arg_msg = '最后结余记录,不能删除'
  84. rslt = 0
  85. GOTO ext
  86. END IF
  87. END IF
  88. //更新中间明细
  89. SELECT msttakeamt - takeamt INTO :sum_balcamt FROM u_rap_money
  90. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  91. IF commit_transaction.SQLCode <> 0 THEN
  92. arg_msg = "查询总应付差额失败!"+'~n'+commit_transaction.SQLErrText
  93. rslt = 0
  94. GOTO ext
  95. END IF
  96. UPDATE u_rap_money
  97. SET balcamt = balcamt - :sum_balcamt
  98. WHERE u_rap_money.printid > :ll_printid
  99. AND u_rap_money.accountid = :arg_accountsid USING commit_transaction;
  100. IF commit_transaction.SQLCode <> 0 THEN
  101. arg_msg = "更新结余金额失败!"+'~n'+commit_transaction.SQLErrText
  102. rslt = 0
  103. GOTO ext
  104. END IF
  105. ////////////////////////////////////////
  106. //出纳帐删除日志
  107. Decimal ld_msttakeamt
  108. Decimal ld_takeamt
  109. long ll_accountid
  110. string ls_dscrp
  111. Long ls_id
  112. String ls_code
  113. SELECT msttakeamt,
  114. takeamt,
  115. accountid,
  116. dscrp
  117. INTO :ld_msttakeamt,
  118. :ld_takeamt,
  119. :ll_accountid,
  120. :ls_dscrp
  121. FROM u_rap_money
  122. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  123. IF commit_transaction.SQLCode <> 0 THEN
  124. arg_msg = "(1)查询收入,支出金额失败!"+'~n'+commit_transaction.SQLErrText
  125. rslt = 0
  126. GOTO ext
  127. END IF
  128. ls_id = arg_rapid
  129. ls_code = '收入金额' + String(ld_msttakeamt,'##,##0.00#####') + ',支出金额:' + String(ld_takeamt,'##,##0.00#####') //+ ',备注' + ls_dscrp
  130. //这里的ls_dscrp 有可能超长导致commit失败
  131. if f_setsysoplog('出纳帐','删除,id:'+String(ls_id)+',账号id:' + string(ll_accountid) +'内容:'+ls_code,arg_msg,false) = 0 then
  132. rslt = 0
  133. goto ext
  134. end if
  135. //////////////////
  136. DELETE FROM u_rap_money
  137. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  138. IF commit_transaction.SQLCode <> 0 THEN
  139. arg_msg = "删除出纳帐明细记录操作失败,请重试!"+'~n'+commit_transaction.SQLErrText
  140. rslt = 0
  141. GOTO ext
  142. END IF
  143. ext:
  144. IF rslt = 0 THEN
  145. ROLLBACK USING commit_transaction;
  146. ELSEIF rslt = 1 AND arg_ifcommit THEN
  147. COMMIT USING commit_transaction;
  148. END IF
  149. RETURN rslt
  150. end function
  151. protected function integer f_check_ifnewest (long arg_accounstid, datetime arg_takedate, ref long arg_ref_minprintid, ref long arg_ref_maxprintid, ref string arg_msg);Int rslt = 1
  152. Long cnt = 0
  153. SELECT isnull(max(printid),0)
  154. INTO :arg_ref_maxprintid
  155. FROM u_rap_money
  156. Where accountid = :arg_accounstid USING commit_transaction;
  157. IF commit_transaction.SQLCode <> 0 THEN
  158. rslt = 0
  159. arg_msg = '查询帐号最大排序号失败'
  160. GOTO ext
  161. END IF
  162. SELECT count(*),isnull(min(printid),0)
  163. INTO :cnt,:arg_ref_minprintid FROM u_rap_money
  164. WHERE year(takedate) * 10000 + month(takedate) * 100 + day(takedate) > year(:arg_takedate) * 10000 + month(:arg_takedate) * 100 + day(:arg_takedate)
  165. AND accountid = :arg_accounstid USING commit_transaction;
  166. IF commit_transaction.SQLCode <> 0 THEN
  167. rslt = 0
  168. arg_msg = '查询日期:'+String(arg_takedate,'yyyy-mm-dd')+'以后是否已录入数据失败'
  169. GOTO ext
  170. END IF
  171. IF cnt > 0 THEN rslt = 2
  172. IF cnt = 0 THEN rslt = 1
  173. ext:
  174. RETURN rslt
  175. end function
  176. public function integer add_raprec (long arg_scid, long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, string arg_relcode);s_rap_money s_rap
  177. s_rap.accountsid = arg_accountsid
  178. s_rap.takedate = arg_takedate
  179. s_rap.inrep = arg_inrep
  180. s_rap.dscrp = arg_dscrp
  181. s_rap.msttakeamt = arg_msttakeamt
  182. s_rap.takeamt = arg_takeamt
  183. s_rap.billcode = arg_billcode
  184. s_rap.relcode = arg_relcode
  185. s_rap.buildtype = arg_buildtype
  186. s_rap.dcflag = arg_dcflag
  187. s_rap.relid = arg_relid
  188. s_rap.opemp = arg_opemp
  189. s_rap.banktypeid = arg_banktypeid
  190. s_rap.scid = arg_scid
  191. return add_raprec(s_rap,arg_msg,arg_ifcommit)
  192. //Int rslt = 1
  193. //long cnt = 0
  194. //DateTime server_datetime
  195. //Long ls_rapid
  196. //
  197. //IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  198. //IF IsNull(arg_billcode) THEN arg_billcode = ''
  199. //IF IsNull(arg_opemp) THEN arg_opemp = ''
  200. //IF IsNull(arg_inrep) THEN arg_inrep = ''
  201. //IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0
  202. //IF IsNull(arg_relcode) THEN arg_relcode = ''
  203. //
  204. ////未注册限制
  205. //IF sys_if_register = 0 THEN
  206. // Long ll_bill_count
  207. // SELECT count(*)
  208. // INTO :ll_bill_count
  209. // FROM u_rap_money;
  210. // IF sqlca.SQLCode <> 0 THEN
  211. // rslt = 0
  212. // arg_msg = "查询操作失败,出纳帐数量 "
  213. // GOTO ext
  214. // END IF
  215. //
  216. // IF ll_bill_count > 200 THEN
  217. // rslt = 0
  218. // arg_msg = "未注册版本,出纳帐只能保存200条记录!"
  219. // GOTO ext
  220. // END IF
  221. //END IF
  222. //
  223. //
  224. //
  225. //SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction;
  226. //IF commit_transaction.SQLCode <> 0 THEN
  227. // rslt = 0
  228. // arg_msg = "查询操作失败,系统时间"
  229. // GOTO ext
  230. //END IF
  231. //
  232. //IF Not (arg_buildtype = 1 OR arg_buildtype = 0 ) THEN
  233. // arg_msg = '错误建立类型,必须为:0 - 手工录入;1 - 记帐'
  234. // rslt = 0
  235. // GOTO ext
  236. //END IF
  237. //
  238. //IF Date(arg_takedate) <= 1990-01-01 THEN
  239. // arg_msg = '错误发生日期'
  240. // rslt = 0
  241. // GOTO ext
  242. //END IF
  243. //
  244. //cnt = 0
  245. //IF Trim(arg_inrep) = '' THEN
  246. // arg_msg = '没有经手人'
  247. // rslt = 0
  248. // GOTO ext
  249. //END IF
  250. //
  251. //IF arg_msttakeamt = 0 AND arg_takeamt = 0 THEN
  252. // arg_msg = "收入金额与与支金额不能同时为0!"
  253. // rslt = 0
  254. // GOTO ext
  255. //END IF
  256. //
  257. //cnt = 0
  258. //SELECT count(*)
  259. // INTO :cnt
  260. // FROM u_accounts
  261. // Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ;
  262. //IF commit_transaction.SQLCode <> 0 THEN
  263. // arg_msg = '查询操作失败,帐号唯一码'
  264. // rslt = 0
  265. // GOTO ext
  266. //END IF
  267. //
  268. //IF cnt = 0 THEN
  269. // arg_msg = '错误帐号唯一码'
  270. // rslt = 0
  271. // GOTO ext
  272. //END IF
  273. //
  274. //cnt = 0
  275. //SELECT count(*) INTO :cnt
  276. // FROM u_user
  277. // Where username = :arg_opemp USING commit_transaction;
  278. //IF commit_transaction.SQLCode <> 0 THEN
  279. // rslt = 0
  280. // arg_msg = "查询操作失败,操作员!"
  281. // GOTO ext
  282. //END IF
  283. //IF cnt = 0 THEN
  284. // rslt = 0
  285. // arg_msg = "操作员姓名未登记或已取消!"
  286. // GOTO ext
  287. //END IF
  288. //
  289. //cnt = 0
  290. //SELECT count(*) INTO :cnt
  291. // FROM cw_banktype
  292. // WHERE banktypeid = :arg_banktypeid
  293. // USING commit_transaction;
  294. //IF commit_transaction.SQLCode <> 0 THEN
  295. // rslt = 0
  296. // arg_msg = "查询操作失败,结算方式!"
  297. // GOTO ext
  298. //END IF
  299. //IF cnt = 0 THEN
  300. // rslt = 0
  301. // arg_msg = "结算方式未登记或已取消!"
  302. // GOTO ext
  303. //END IF
  304. //
  305. //Decimal cur_accounts_amt = 0 ,new_amt = 0
  306. //
  307. //Int ls_ifnew
  308. //Long ll_min_printid,ll_max_printid,ll_printid
  309. //
  310. //ls_ifnew = f_check_ifnewest(arg_accountsid,arg_takedate,ll_min_printid,ll_max_printid,arg_msg)
  311. //
  312. //CHOOSE CASE ls_ifnew
  313. // CASE 0
  314. // rslt = 0
  315. // GOTO ext
  316. // CASE 2
  317. // Long ls_tmprapid
  318. // Decimal tmp_amt,min_balcamt
  319. //
  320. // tmp_amt = arg_msttakeamt - arg_takeamt
  321. //
  322. // SELECT balcamt + takeamt - msttakeamt
  323. // INTO :min_balcamt
  324. // FROM u_rap_money
  325. // WHERE printid = :ll_min_printid
  326. // AND accountid = :arg_accountsid USING commit_transaction;
  327. // IF commit_transaction.SQLCode <> 0 THEN
  328. // rslt = 0
  329. // arg_msg = '查询下月最前结余失败,'+sqlca.SQLErrText
  330. // GOTO ext
  331. // END IF
  332. //
  333. // UPDATE u_rap_money
  334. // SET printid = printid + 1,
  335. // balcamt = balcamt + :tmp_amt
  336. // WHERE printid >= :ll_min_printid
  337. // AND accountid = :arg_accountsid USING commit_transaction;
  338. // IF commit_transaction.SQLCode <> 0 THEN
  339. // rslt = 0
  340. // arg_msg = '更新结余金额失败,'+sqlca.SQLErrText
  341. // GOTO ext
  342. // END IF
  343. //
  344. // new_amt = min_balcamt + arg_msttakeamt - arg_takeamt
  345. // ll_printid = ll_min_printid
  346. // CASE 1
  347. // SELECT v_accounts_balc.accounts_balcamt
  348. // INTO :cur_accounts_amt
  349. // FROM v_accounts_balc
  350. // Where v_accounts_balc.accountsid = :arg_accountsid USING commit_transaction;
  351. //
  352. // IF commit_transaction.SQLCode <> 0 AND commit_transaction.SQLCode <> 100 THEN
  353. // arg_msg = "查询当前帐号的结余金额操作失败,请重试!"
  354. // rslt = 0
  355. // GOTO ext
  356. // END IF
  357. //
  358. // new_amt = cur_accounts_amt + arg_msttakeamt - arg_takeamt
  359. // ll_printid = ll_max_printid + 1
  360. //END CHOOSE
  361. ////----------------------------------------------------
  362. //ls_rapid = f_sys_scidentity(0,"u_rap_money","rapmoneyid",arg_msg,FALSE,commit_transaction)
  363. //IF ls_rapid <= 0 THEN
  364. // rslt = 0
  365. // GOTO ext
  366. //END IF
  367. //
  368. //INSERT INTO u_rap_money
  369. // (
  370. // rapmoneyid,
  371. // accountid,
  372. // billcode,
  373. // takedate,
  374. // msttakeamt,
  375. // takeamt,
  376. // balcamt,
  377. // takeemp,
  378. // dscrp,
  379. // buildtype,
  380. // relid,
  381. // opdate,
  382. // opemp,
  383. // dcflag,
  384. // banktypeid,
  385. // printid,
  386. // scid,
  387. // relcode)
  388. // VALUES (
  389. // :ls_rapid,
  390. // :arg_accountsid,
  391. // :arg_billcode,
  392. // :arg_takedate,
  393. // :arg_msttakeamt,
  394. // :arg_takeamt,
  395. // :new_amt,
  396. // :arg_inrep,
  397. // :arg_dscrp,
  398. // :arg_buildtype,
  399. // :arg_relid,
  400. // :server_datetime,
  401. // :arg_opemp,
  402. // :arg_dcflag,
  403. // :arg_banktypeid,
  404. // :ll_printid,
  405. // :arg_scid,
  406. // :arg_relcode) USING commit_transaction;
  407. //IF commit_transaction.SQLCode <> 0 THEN
  408. //
  409. // IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_rap_money') > 0 THEN
  410. // arg_msg = '向出纳明细表插入新记录失败,关键字单据ID重复'
  411. // ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_rap_money_3') > 0 THEN
  412. // arg_msg = '向出纳明细表插入新记录失败,出纳帐号ID,序号重复'
  413. // ELSE
  414. // arg_msg = "因网络或其它原因导致向出纳明细表插入新记录失败"+"~n"+commit_transaction.SQLErrText
  415. // END IF
  416. //
  417. // rslt = 0
  418. // GOTO ext
  419. //END IF
  420. //
  421. //ref_rapid = ls_rapid
  422. //ext:
  423. //IF rslt = 0 THEN
  424. // ROLLBACK USING commit_transaction;
  425. //ELSEIF rslt = 1 AND arg_ifcommit THEN
  426. // COMMIT USING commit_transaction;
  427. //END IF
  428. //RETURN rslt
  429. end function
  430. public function integer add_del (long arg_accountsid, datetime arg_takedate, string arg_inrep, string arg_dscrp, decimal arg_msttakeamt, decimal arg_takeamt, string arg_billcode, integer arg_buildtype, integer arg_dcflag, long arg_relid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_banktypeid, long arg_acntid, string arg_relcode);Int rslt = 1
  431. IF arg_msttakeamt <> 0 AND arg_takeamt <> 0 THEN
  432. rslt = 0
  433. arg_msg = "收入金额和支出金额必须一个为0!"
  434. END IF
  435. IF arg_msttakeamt <> 0 THEN
  436. IF add_raprec(-1,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN
  437. rslt = 0
  438. GOTO ext
  439. END IF
  440. IF add_raprec(-1,arg_acntid,arg_takedate,arg_inrep,arg_dscrp,arg_takeamt,arg_msttakeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN
  441. rslt = 0
  442. GOTO ext
  443. END IF
  444. END IF
  445. IF arg_takeamt <> 0 THEN
  446. IF add_raprec(-1,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN
  447. rslt = 0
  448. GOTO ext
  449. END IF
  450. IF add_raprec(-1,arg_acntid,arg_takedate,arg_inrep,arg_dscrp,arg_takeamt,arg_msttakeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN
  451. rslt = 0
  452. GOTO ext
  453. END IF
  454. END IF
  455. ext:
  456. IF rslt = 0 THEN
  457. ROLLBACK USING commit_transaction;
  458. ELSEIF rslt = 1 AND arg_ifcommit THEN
  459. COMMIT USING commit_transaction;
  460. END IF
  461. RETURN rslt
  462. end function
  463. public function integer mod_raprec (long arg_scid, long arg_accountsid, long arg_rapid, datetime arg_takedate, string arg_inrep, decimal arg_msttakeamt, decimal arg_takeamt, string arg_dscrp, string arg_billcode, integer arg_buildtype, string arg_opemp, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto, long arg_banktypeid, string arg_relcode);Int rslt = 1
  464. long cnt = 0
  465. Long maxid = 0,arg_rapmoneyid
  466. Long buildtype = 0
  467. Decimal ol_balcamt = 0.00 //原差额
  468. Decimal new_balcamt = 0.00 //新差额
  469. DateTime server_datetime
  470. Long ll_printid
  471. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  472. IF IsNull(arg_inrep) THEN arg_inrep = ''
  473. IF IsNull(arg_billcode) THEN arg_billcode = ''
  474. IF IsNull(arg_opemp) THEN arg_opemp = ''
  475. IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0
  476. IF IsNull(arg_relcode) THEN arg_relcode = ''
  477. cnt = 0
  478. SELECT count(*) INTO :cnt
  479. FROM cw_banktype
  480. WHERE banktypeid = :arg_banktypeid
  481. USING commit_transaction;
  482. IF commit_transaction.SQLCode <> 0 THEN
  483. rslt = 0
  484. arg_msg = "查询操作失败,结算方式!"
  485. GOTO ext
  486. END IF
  487. IF cnt = 0 THEN
  488. rslt = 0
  489. arg_msg = "结算方式未登记或已取消!"
  490. GOTO ext
  491. END IF
  492. SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction;
  493. IF commit_transaction.SQLCode <> 0 THEN
  494. rslt = 0
  495. arg_msg = "查询操作失败,系统时间"
  496. GOTO ext
  497. END IF
  498. IF Not (arg_buildtype = 1 OR arg_buildtype = 0 OR arg_buildtype = 2) THEN
  499. arg_msg = '错误建立类型,必须为:0-手工录入;1-记帐'
  500. rslt = 0
  501. GOTO ext
  502. END IF
  503. //手动修改时查询建立类型
  504. IF arg_ifauto = 1 THEN
  505. SELECT buildtype
  506. INTO :buildtype
  507. FROM u_rap_money
  508. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  509. IF commit_transaction.SQLCode <> 0 THEN
  510. arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+commit_transaction.SQLErrText
  511. rslt = 0
  512. GOTO ext
  513. END IF
  514. END IF
  515. SELECT printid
  516. INTO :ll_printid
  517. FROM u_rap_money
  518. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  519. IF commit_transaction.SQLCode <> 0 THEN
  520. arg_msg = "查询出纳帐明细序号失败,请重试!"+'~n'+commit_transaction.SQLErrText
  521. rslt = 0
  522. GOTO ext
  523. END IF
  524. IF buildtype = 1 THEN
  525. arg_msg = '系统自动建立的出纳帐明细不可以修改'
  526. rslt = 0
  527. GOTO ext
  528. END IF
  529. IF Date(arg_takedate) <= 1990-01-01 THEN
  530. arg_msg = '错误发生日期'
  531. rslt = 0
  532. GOTO ext
  533. END IF
  534. IF Trim(arg_inrep) = '' THEN
  535. arg_msg = '没有经手人'
  536. rslt = 0
  537. GOTO ext
  538. END IF
  539. IF arg_msttakeamt = 0 AND arg_takeamt = 0 THEN
  540. arg_msg = "收入金额与支出金额不能同时为0!"
  541. rslt = 0
  542. GOTO ext
  543. END IF
  544. SELECT count(*)
  545. INTO :cnt
  546. FROM u_accounts
  547. Where u_accounts.accountsid = :arg_accountsid USING commit_transaction ;
  548. IF commit_transaction.SQLCode <> 0 THEN
  549. arg_msg = '查询操作失败,出纳帐户唯一码'
  550. rslt = 0
  551. GOTO ext
  552. END IF
  553. IF cnt = 0 THEN
  554. arg_msg = '错误出纳帐户唯一码'
  555. rslt = 0
  556. GOTO ext
  557. END IF
  558. cnt = 0
  559. SELECT count(*) INTO :cnt
  560. FROM u_user
  561. Where username = :arg_opemp USING commit_transaction;
  562. IF commit_transaction.SQLCode <> 0 THEN
  563. rslt = 0
  564. arg_msg = "查询操作失败,操作员!"
  565. GOTO ext
  566. END IF
  567. IF cnt = 0 THEN
  568. rslt = 0
  569. arg_msg = "操作员姓名未登记或已取消!"
  570. GOTO ext
  571. END IF
  572. DateTime ol_takedate
  573. SELECT msttakeamt - takeamt,takedate
  574. INTO :ol_balcamt,:ol_takedate
  575. FROM u_rap_money
  576. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  577. IF commit_transaction.SQLCode <> 0 THEN
  578. arg_msg = "查询出纳差额失败!"+'~n'+commit_transaction.SQLErrText
  579. rslt = 0
  580. GOTO ext
  581. END IF
  582. IF String(ol_takedate,'yyyymmdd') <> String(arg_takedate,'yyyymmdd') THEN
  583. IF del_raprec ( arg_rapid, arg_accountsid,0, arg_msg,FALSE) = 0 THEN
  584. rslt = 0
  585. GOTO ext
  586. END IF
  587. IF add_raprec(arg_scid,arg_accountsid,arg_takedate,arg_inrep,arg_dscrp,arg_msttakeamt,&
  588. arg_takeamt,arg_billcode,0,0,0,publ_operator,arg_msg,FALSE,arg_banktypeid,arg_relcode) = 0 THEN
  589. rslt = 0
  590. GOTO ext
  591. END IF
  592. ELSE
  593. new_balcamt = arg_msttakeamt - arg_takeamt
  594. IF new_balcamt <> ol_balcamt THEN
  595. UPDATE u_rap_money SET balcamt = balcamt + (:new_balcamt - :ol_balcamt )
  596. WHERE u_rap_money.printid > :ll_printid
  597. AND u_rap_money.accountid = :arg_accountsid USING commit_transaction;
  598. IF commit_transaction.SQLCode <> 0 THEN
  599. arg_msg = "更新结余金额失败!"+'~n'+commit_transaction.SQLErrText
  600. rslt = 0
  601. GOTO ext
  602. END IF
  603. END IF
  604. ////////////////////////////////////////
  605. //更新明细
  606. UPDATE u_rap_money
  607. SET
  608. billcode = :arg_billcode,
  609. takedate = :arg_takedate,
  610. takeemp = :arg_inrep,
  611. msttakeamt = :arg_msttakeamt,
  612. takeamt = :arg_takeamt,
  613. dscrp = :arg_dscrp,
  614. banktypeid = :arg_banktypeid,
  615. balcamt = balcamt + (:new_balcamt - :ol_balcamt ),
  616. scid = :arg_scid,
  617. relcode = :Arg_relcode
  618. Where u_rap_money.rapmoneyid = :arg_rapid USING commit_transaction;
  619. IF commit_transaction.SQLCode <> 0 THEN
  620. arg_msg = "更新单据失败!"+'~n'+commit_transaction.SQLErrText
  621. rslt = 0
  622. GOTO ext
  623. END IF
  624. END IF
  625. ext:
  626. IF rslt = 0 THEN
  627. ROLLBACK USING commit_transaction;
  628. ELSEIF rslt = 1 AND arg_ifcommit THEN
  629. COMMIT USING commit_transaction;
  630. END IF
  631. RETURN rslt
  632. end function
  633. public function integer add_raprec (s_rap_money arg_s_mx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  634. Long cnt = 0
  635. DateTime server_datetime
  636. Long ls_rapid
  637. IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = ''
  638. IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = ''
  639. IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = ''
  640. IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = ''
  641. IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0
  642. IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = ''
  643. IF LEN(arg_s_mx.dscrp) > 255 THEN
  644. arg_s_mx.dscrp = LEFT(arg_s_mx.dscrp,250)
  645. END IF
  646. //未注册限制
  647. IF sys_if_register = 0 THEN
  648. Long ll_bill_count
  649. SELECT count(*)
  650. INTO :ll_bill_count
  651. From u_rap_money;
  652. IF sqlca.SQLCode <> 0 THEN
  653. rslt = 0
  654. arg_msg = "查询操作失败,出纳帐数量 "
  655. GOTO ext
  656. END IF
  657. IF ll_bill_count > 200 THEN
  658. rslt = 0
  659. arg_msg = "未注册版本,出纳帐只能保存200条记录!"
  660. GOTO ext
  661. END IF
  662. END IF
  663. SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction;
  664. IF commit_transaction.SQLCode <> 0 THEN
  665. rslt = 0
  666. arg_msg = "查询操作失败,系统时间"
  667. GOTO ext
  668. END IF
  669. IF Not (arg_s_mx.buildtype = 1 Or arg_s_mx.buildtype = 0 ) THEN
  670. arg_msg = '错误建立类型,必须为:0 - 手工录入;1 - 记帐'
  671. rslt = 0
  672. GOTO ext
  673. END IF
  674. IF Date(arg_s_mx.takedate) <= 1990-01-01 THEN
  675. arg_msg = '错误发生日期'
  676. rslt = 0
  677. GOTO ext
  678. END IF
  679. cnt = 0
  680. IF Trim(arg_s_mx.inrep) = '' THEN
  681. arg_msg = '没有经手人'
  682. rslt = 0
  683. GOTO ext
  684. END IF
  685. IF arg_s_mx.msttakeamt = 0 And arg_s_mx.takeamt = 0 THEN
  686. arg_msg = "收入金额与与支金额不能同时为0!"
  687. rslt = 0
  688. GOTO ext
  689. END IF
  690. cnt = 0
  691. SELECT count(*)
  692. INTO :cnt
  693. FROM u_accounts
  694. Where u_accounts.accountsid = :arg_s_mx.accountsid Using commit_transaction ;
  695. IF commit_transaction.SQLCode <> 0 THEN
  696. arg_msg = '查询操作失败,帐号唯一码'
  697. rslt = 0
  698. GOTO ext
  699. END IF
  700. IF cnt = 0 THEN
  701. arg_msg = '错误帐号唯一码'
  702. rslt = 0
  703. GOTO ext
  704. END IF
  705. cnt = 0
  706. SELECT count(*) INTO :cnt
  707. FROM u_user
  708. Where username = :arg_s_mx.opemp Using commit_transaction;
  709. IF commit_transaction.SQLCode <> 0 THEN
  710. rslt = 0
  711. arg_msg = "查询操作失败,操作员!"
  712. GOTO ext
  713. END IF
  714. IF cnt = 0 THEN
  715. rslt = 0
  716. arg_msg = "操作员姓名未登记或已取消!"
  717. GOTO ext
  718. END IF
  719. cnt = 0
  720. SELECT count(*) INTO :cnt
  721. FROM cw_banktype
  722. WHERE banktypeid = :arg_s_mx.banktypeid
  723. Using commit_transaction;
  724. IF commit_transaction.SQLCode <> 0 THEN
  725. rslt = 0
  726. arg_msg = "查询操作失败,结算方式!"
  727. GOTO ext
  728. END IF
  729. IF cnt = 0 THEN
  730. rslt = 0
  731. arg_msg = "结算方式未登记或已取消!"
  732. GOTO ext
  733. END IF
  734. Decimal cur_accounts_amt = 0 ,new_amt = 0
  735. Int ls_ifnew
  736. Long ll_min_printid,ll_max_printid,ll_printid
  737. ls_ifnew = f_check_ifnewest(arg_s_mx.accountsid,arg_s_mx.takedate,ll_min_printid,ll_max_printid,arg_msg)
  738. CHOOSE CASE ls_ifnew
  739. CASE 0
  740. rslt = 0
  741. GOTO ext
  742. CASE 2
  743. Long ls_tmprapid
  744. Decimal tmp_amt,min_balcamt
  745. tmp_amt = arg_s_mx.msttakeamt - arg_s_mx.takeamt
  746. SELECT balcamt + takeamt - msttakeamt
  747. INTO :min_balcamt
  748. FROM u_rap_money
  749. WHERE printid = :ll_min_printid
  750. And accountid = :arg_s_mx.accountsid Using commit_transaction;
  751. IF commit_transaction.SQLCode <> 0 THEN
  752. rslt = 0
  753. arg_msg = '查询下月最前结余失败,'+sqlca.SQLErrText
  754. GOTO ext
  755. END IF
  756. UPDATE u_rap_money
  757. SET printid = printid + 1,
  758. balcamt = balcamt + :tmp_amt
  759. WHERE printid >= :ll_min_printid
  760. And accountid = :arg_s_mx.accountsid Using commit_transaction;
  761. IF commit_transaction.SQLCode <> 0 THEN
  762. rslt = 0
  763. arg_msg = '更新结余金额失败,'+sqlca.SQLErrText
  764. GOTO ext
  765. END IF
  766. new_amt = min_balcamt + arg_s_mx.msttakeamt - arg_s_mx.takeamt
  767. ll_printid = ll_min_printid
  768. CASE 1
  769. SELECT v_accounts_balc.accounts_balcamt
  770. INTO :cur_accounts_amt
  771. FROM v_accounts_balc
  772. Where v_accounts_balc.accountsid = :arg_s_mx.accountsid Using commit_transaction;
  773. IF commit_transaction.SQLCode <> 0 And commit_transaction.SQLCode <> 100 THEN
  774. arg_msg = "查询当前帐号的结余金额操作失败,请重试!"
  775. rslt = 0
  776. GOTO ext
  777. END IF
  778. new_amt = cur_accounts_amt + arg_s_mx.msttakeamt - arg_s_mx.takeamt
  779. ll_printid = ll_max_printid + 1
  780. END CHOOSE
  781. //----------------------------------------------------
  782. ls_rapid = f_sys_scidentity(0,"u_rap_money","rapmoneyid",arg_msg,False,commit_transaction)
  783. IF ls_rapid <= 0 THEN
  784. rslt = 0
  785. GOTO ext
  786. END IF
  787. INSERT INTO u_rap_money
  788. (
  789. rapmoneyid,
  790. accountid,
  791. billcode,
  792. takedate,
  793. msttakeamt,
  794. takeamt,
  795. balcamt,
  796. takeemp,
  797. dscrp,
  798. buildtype,
  799. relid,
  800. opdate,
  801. opemp,
  802. dcflag,
  803. banktypeid,
  804. printid,
  805. scid,
  806. relcode)
  807. VALUES (
  808. :ls_rapid,
  809. :arg_s_mx.accountsid,
  810. :arg_s_mx.billcode,
  811. :arg_s_mx.takedate,
  812. :arg_s_mx.msttakeamt,
  813. :arg_s_mx.takeamt,
  814. :new_amt,
  815. :arg_s_mx.inrep,
  816. :arg_s_mx.dscrp,
  817. :arg_s_mx.buildtype,
  818. :arg_s_mx.relid,
  819. :server_datetime,
  820. :arg_s_mx.opemp,
  821. :arg_s_mx.dcflag,
  822. :arg_s_mx.banktypeid,
  823. :ll_printid,
  824. :arg_s_mx.scid,
  825. :arg_s_mx.relcode) Using commit_transaction;
  826. IF commit_transaction.SQLCode <> 0 THEN
  827. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_rap_money') > 0 THEN
  828. arg_msg = '向出纳明细表插入新记录失败,关键字单据ID重复'
  829. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_rap_money_3') > 0 THEN
  830. arg_msg = '向出纳明细表插入新记录失败,出纳帐号ID,序号重复'
  831. ELSE
  832. arg_msg = "向出纳明细表插入新记录失败"+"~n"+commit_transaction.SQLErrText
  833. END IF
  834. rslt = 0
  835. GOTO ext
  836. END IF
  837. ref_rapid = ls_rapid
  838. ext:
  839. IF rslt = 0 THEN
  840. ROLLBACK Using commit_transaction;
  841. ELSEIF rslt = 1 And arg_ifcommit THEN
  842. COMMIT Using commit_transaction;
  843. END IF
  844. RETURN rslt
  845. end function
  846. on uo_rapmoney.create
  847. call super::create
  848. TriggerEvent( this, "constructor" )
  849. end on
  850. on uo_rapmoney.destroy
  851. TriggerEvent( this, "destructor" )
  852. call super::destroy
  853. end on