uo_rapmoney.sru 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  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. long ref_rapid
  11. end variables
  12. forward prototypes
  13. public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit)
  14. 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)
  15. public function integer add_raprec (s_rap_money arg_s_rap, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer mod_raprec (s_rap_money arg_s_rap, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto)
  17. public function integer balc_raprec (long arg_accountid, long arg_month, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer c_balc_raprec (long arg_accountid, long arg_month, ref string arg_msg, boolean arg_ifcommit)
  19. end prototypes
  20. public function integer del_raprec (long arg_rapid, long arg_accountsid, integer arg_ifauto, ref string arg_msg, boolean arg_ifcommit);
  21. Int rslt = 1 ,cnt = 0,buildtype,ll_balcflag
  22. Decimal sum_balcamt = 0.00
  23. DateTime ld_ctdatetime,ld_takedate,ld_maxtakedate
  24. Long ll_printid
  25. SELECT buildtype,
  26. takedate,
  27. printid,
  28. balcflag
  29. INTO
  30. :buildtype,
  31. :ld_takedate,
  32. :ll_printid,
  33. :ll_balcflag
  34. FROM u_rap_money
  35. Where u_rap_money.rapmoneyid = :arg_rapid;
  36. IF sqlca.SQLCode <> 0 THEN
  37. arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  38. rslt = 0
  39. GOTO ext
  40. END IF
  41. IF ll_balcflag = 1 THEN
  42. arg_msg = '出纳帐已结账,不能删除'
  43. rslt = 0
  44. GOTO ext
  45. END IF
  46. SELECT max(takedate)
  47. INTO :ld_maxtakedate
  48. FROM u_rap_money
  49. Where balcflag = 1
  50. AND accountid = :arg_accountsid;
  51. IF sqlca.SQLCode <> 0 THEN
  52. IF sqlca.SQLCode = 100 THEN
  53. ld_maxtakedate = DateTime(Date('1990-01-01'),Time(0))
  54. ELSE
  55. rslt = 0
  56. arg_msg = '查询最近结帐日期失败'
  57. GOTO ext
  58. END IF
  59. END IF
  60. IF year(Date(ld_takedate)) * 100 + month(Date(ld_takedate)) <= year(Date(ld_maxtakedate)) * 100 + month(Date(ld_maxtakedate)) THEN
  61. arg_msg = '当月或之后月份的出纳帐已结账,不能再删除该月份或之前的帐目'
  62. rslt = 0
  63. GOTO ext
  64. END IF
  65. IF arg_ifauto = 0 THEN
  66. IF buildtype = 1 THEN
  67. arg_msg = '系统自动建立的出纳帐明细不可以删除'
  68. rslt = 0
  69. GOTO ext
  70. END IF
  71. IF buildtype = 2 THEN
  72. arg_msg = '转帐单自动建立的出纳帐明细不可以删除'
  73. rslt = 0
  74. GOTO ext
  75. END IF
  76. END IF
  77. SELECT count(*)
  78. INTO :cnt
  79. FROM u_accounts
  80. Where u_accounts.accountsid = :arg_accountsid;
  81. IF sqlca.SQLCode <> 0 THEN
  82. arg_msg = '查询操作失败,出纳帐户唯一码'
  83. rslt = 0
  84. GOTO ext
  85. END IF
  86. IF cnt = 0 THEN
  87. arg_msg = '错误出纳帐户唯一码'
  88. rslt = 0
  89. GOTO ext
  90. END IF
  91. Int rst
  92. rst = f_last_ctdate(ld_ctdatetime,arg_msg)
  93. IF rst = 0 THEN
  94. rslt = 0
  95. GOTO ext
  96. ELSEIF rst = 1 THEN
  97. IF ld_takedate <= ld_ctdatetime THEN
  98. arg_msg = '该数据在截数日期:'+String(ld_ctdatetime,'yyyy-mm-dd hh:mm')+'前,不能删除'
  99. rslt = 0
  100. GOTO ext
  101. END IF
  102. cnt = 0
  103. SELECT count(*) INTO :cnt
  104. FROM u_rap_money
  105. Where accountid = :arg_accountsid;
  106. IF sqlca.SQLCode <> 0 THEN
  107. arg_msg = '查询帐号出纳帐数目失败'
  108. rslt = 0
  109. GOTO ext
  110. END IF
  111. IF cnt = 1 THEN
  112. arg_msg = '最后结余记录,不能删除'
  113. rslt = 0
  114. GOTO ext
  115. END IF
  116. END IF
  117. //更新中间明细
  118. SELECT msttakeamt - takeamt INTO :sum_balcamt FROM u_rap_money
  119. Where u_rap_money.rapmoneyid = :arg_rapid;
  120. IF sqlca.SQLCode <> 0 THEN
  121. arg_msg = "查询总应付差额失败!"+'~n'+sqlca.SQLErrText
  122. rslt = 0
  123. GOTO ext
  124. END IF
  125. UPDATE u_rap_money
  126. SET balcamt = balcamt - :sum_balcamt
  127. WHERE u_rap_money.printid > :ll_printid
  128. AND u_rap_money.accountid = :arg_accountsid;
  129. IF sqlca.SQLCode <> 0 THEN
  130. arg_msg = "更新结余金额失败!"+'~n'+sqlca.SQLErrText
  131. rslt = 0
  132. GOTO ext
  133. END IF
  134. ////////////////////////////////////// //
  135. DELETE FROM u_rap_money
  136. Where u_rap_money.rapmoneyid = :arg_rapid;
  137. IF sqlca.SQLCode <> 0 THEN
  138. arg_msg = "删除出纳帐明细记录操作失败,请重试!"+'~n'+sqlca.SQLErrText
  139. rslt = 0
  140. GOTO ext
  141. END IF
  142. ext:
  143. IF rslt = 0 THEN
  144. ROLLBACK;
  145. ELSEIF rslt = 1 AND arg_ifcommit THEN
  146. COMMIT;
  147. END IF
  148. RETURN rslt
  149. end function
  150. 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
  151. Long cnt = 0
  152. SELECT isnull(max(printid),0)
  153. INTO :arg_ref_maxprintid
  154. FROM u_rap_money
  155. Where accountid = :arg_accounstid;
  156. IF sqlca.SQLCode <> 0 THEN
  157. rslt = 0
  158. arg_msg = '查询帐号最大排序号失败'
  159. GOTO ext
  160. END IF
  161. SELECT count(*),isnull(min(printid),0)
  162. INTO :cnt,:arg_ref_minprintid FROM u_rap_money
  163. WHERE year(takedate) * 10000 + month(takedate) * 100 + day(takedate) > year(:arg_takedate) * 10000 + month(:arg_takedate) * 100 + day(:arg_takedate)
  164. AND accountid = :arg_accounstid;
  165. IF sqlca.SQLCode <> 0 THEN
  166. rslt = 0
  167. arg_msg = '查询日期:'+String(arg_takedate,'yyyy-mm-dd')+'以后是否已录入数据失败'
  168. GOTO ext
  169. END IF
  170. IF cnt > 0 THEN rslt = 2
  171. IF cnt = 0 THEN rslt = 1
  172. ext:
  173. RETURN rslt
  174. end function
  175. public function integer add_raprec (s_rap_money arg_s_rap, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  176. DateTime server_datetime
  177. Long ls_rapid
  178. DateTime ld_maxtakedate
  179. IF IsNull(arg_s_rap.dscrp) THEN arg_s_rap.dscrp = ''
  180. IF IsNull(arg_s_rap.billcode) THEN arg_s_rap.billcode = ''
  181. IF IsNull(arg_s_rap.relcode) THEN arg_s_rap.relcode = ''
  182. IF IsNull(arg_s_rap.relcode) THEN arg_s_rap.relcode = ''
  183. IF IsNull(arg_s_rap.opemp) THEN arg_s_rap.opemp = ''
  184. IF IsNull(arg_s_rap.inrep) THEN arg_s_rap.inrep = ''
  185. IF IsNull(arg_s_rap.banktypeid) THEN arg_s_rap.banktypeid = 0
  186. IF IsNull(arg_s_rap.scid) THEN arg_s_rap.scid = 0
  187. SELECT Top 1 getdate() INTO :server_datetime FROM u_user;
  188. IF sqlca.SQLCode <> 0 THEN
  189. rslt = 0
  190. arg_msg = "查询操作失败,系统时间"
  191. GOTO ext
  192. END IF
  193. IF Not (arg_s_rap.buildtype = 1 OR arg_s_rap.buildtype = 0 OR arg_s_rap.buildtype = 2 ) THEN
  194. arg_msg = '错误建立类型,必须为:0 - 手工录入;1 - 记帐;2 - 转帐'
  195. rslt = 0
  196. GOTO ext
  197. END IF
  198. IF Date(arg_s_rap.takedate) <= Date('1990-01-01') THEN
  199. arg_msg = '错误发生日期'
  200. rslt = 0
  201. GOTO ext
  202. END IF
  203. SELECT max(takedate)
  204. INTO :ld_maxtakedate
  205. FROM u_rap_money
  206. Where balcflag = 1
  207. AND accountid = :arg_s_rap.accountsid;
  208. IF sqlca.SQLCode <> 0 THEN
  209. IF sqlca.SQLCode = 100 THEN
  210. ld_maxtakedate = DateTime(Date('1990-01-01'),Time(0))
  211. ELSE
  212. rslt = 0
  213. arg_msg = '查询最近结帐日期失败'
  214. GOTO ext
  215. END IF
  216. END IF
  217. IF year(Date(arg_s_rap.takedate)) * 100 + month(Date(arg_s_rap.takedate)) <= year(Date(ld_maxtakedate)) * 100 + month(Date(ld_maxtakedate)) THEN
  218. arg_msg = '当月出纳帐已结账,不能再建立该月份或之前的帐目'
  219. rslt = 0
  220. GOTO ext
  221. END IF
  222. IF f_check_inoutdate(0,arg_s_rap.takedate,FALSE,arg_msg) = 0 THEN
  223. rslt = 0
  224. GOTO ext
  225. END IF
  226. cnt = 0
  227. IF Trim(arg_s_rap.inrep) = '' THEN
  228. arg_msg = '没有经手人'
  229. rslt = 0
  230. GOTO ext
  231. END IF
  232. IF arg_s_rap.msttakeamt = 0 AND arg_s_rap.takeamt = 0 THEN
  233. arg_msg = "收入金额与与支金额不能同时为0!"
  234. rslt = 0
  235. GOTO ext
  236. END IF
  237. cnt = 0
  238. SELECT count(*)
  239. INTO :cnt
  240. FROM u_accounts
  241. Where u_accounts.accountsid = :arg_s_rap.accountsid ;
  242. IF sqlca.SQLCode <> 0 THEN
  243. arg_msg = '查询操作失败,帐号唯一码'
  244. rslt = 0
  245. GOTO ext
  246. END IF
  247. IF cnt = 0 THEN
  248. arg_msg = '错误帐号唯一码'
  249. rslt = 0
  250. GOTO ext
  251. END IF
  252. cnt = 0
  253. SELECT count(*) INTO :cnt
  254. FROM u_user
  255. Where username = :arg_s_rap.opemp;
  256. IF sqlca.SQLCode <> 0 THEN
  257. rslt = 0
  258. arg_msg = "查询操作失败,操作员!"
  259. GOTO ext
  260. END IF
  261. IF cnt = 0 THEN
  262. rslt = 0
  263. arg_msg = "操作员姓名未登记或已取消!"
  264. GOTO ext
  265. END IF
  266. cnt = 0
  267. SELECT count(*) INTO :cnt
  268. FROM cw_banktype
  269. Where banktypeid = :arg_s_rap.banktypeid;
  270. IF sqlca.SQLCode <> 0 THEN
  271. rslt = 0
  272. arg_msg = "查询操作失败,结算方式!"
  273. GOTO ext
  274. END IF
  275. IF cnt = 0 THEN
  276. rslt = 0
  277. arg_msg = "结算方式未登记或已取消!"
  278. GOTO ext
  279. END IF
  280. Decimal cur_accounts_amt = 0 ,new_amt = 0
  281. Int ls_ifnew
  282. Long ll_min_printid,ll_max_printid,ll_printid
  283. ls_ifnew = f_check_ifnewest(arg_s_rap.accountsid,arg_s_rap.takedate,ll_min_printid,ll_max_printid,arg_msg)
  284. CHOOSE CASE ls_ifnew
  285. CASE 0
  286. rslt = 0
  287. GOTO ext
  288. CASE 2
  289. Long ls_tmprapid
  290. Decimal tmp_amt,min_balcamt
  291. tmp_amt = arg_s_rap.msttakeamt - arg_s_rap.takeamt
  292. SELECT balcamt + takeamt - msttakeamt
  293. INTO :min_balcamt
  294. FROM u_rap_money
  295. WHERE printid = :ll_min_printid
  296. AND accountid = :arg_s_rap.accountsid;
  297. IF sqlca.SQLCode <> 0 THEN
  298. rslt = 0
  299. arg_msg = '查询下月最前结余失败,'+sqlca.SQLErrText
  300. GOTO ext
  301. END IF
  302. UPDATE u_rap_money
  303. SET printid = printid + 1,
  304. balcamt = balcamt + :tmp_amt
  305. WHERE printid >= :ll_min_printid
  306. AND accountid = :arg_s_rap.accountsid;
  307. IF sqlca.SQLCode <> 0 THEN
  308. rslt = 0
  309. arg_msg = '更新结余金额失败,'+sqlca.SQLErrText
  310. GOTO ext
  311. END IF
  312. new_amt = min_balcamt + arg_s_rap.msttakeamt - arg_s_rap.takeamt
  313. ll_printid = ll_min_printid
  314. CASE 1
  315. SELECT v_accounts_balc.accounts_balcamt
  316. INTO :cur_accounts_amt
  317. FROM v_accounts_balc
  318. Where v_accounts_balc.accountsid = :arg_s_rap.accountsid;
  319. IF sqlca.SQLCode <> 0 AND sqlca.SQLCode <> 100 THEN
  320. arg_msg = "查询当前帐号的结余金额操作失败,请重试!"
  321. rslt = 0
  322. GOTO ext
  323. END IF
  324. new_amt = cur_accounts_amt + arg_s_rap.msttakeamt - arg_s_rap.takeamt
  325. ll_printid = ll_max_printid + 1
  326. END CHOOSE
  327. //----------------------------------------------------
  328. ls_rapid = f_sys_scidentity(0,"u_rap_money","rapmoneyid",arg_msg,TRUE,id_sqlca)
  329. IF ls_rapid <= 0 THEN
  330. rslt = 0
  331. GOTO ext
  332. END IF
  333. INSERT INTO u_rap_money
  334. (rapmoneyid,
  335. accountid,
  336. billcode,
  337. relcode,
  338. takedate,
  339. msttakeamt,
  340. takeamt,
  341. balcamt,
  342. takeemp,
  343. dscrp,
  344. buildtype,
  345. relid,
  346. opdate,
  347. opemp,
  348. dcflag,
  349. banktypeid,
  350. scid,
  351. printid)
  352. VALUES (
  353. :ls_rapid,
  354. :arg_s_rap.accountsid,
  355. :arg_s_rap.billcode,
  356. :arg_s_rap.relcode,
  357. :arg_s_rap.takedate,
  358. :arg_s_rap.msttakeamt,
  359. :arg_s_rap.takeamt,
  360. :new_amt,
  361. :arg_s_rap.inrep,
  362. :arg_s_rap.dscrp,
  363. :arg_s_rap.buildtype,
  364. :arg_s_rap.relid,
  365. :server_datetime,
  366. :arg_s_rap.opemp,
  367. :arg_s_rap.dcflag,
  368. :arg_s_rap.banktypeid,
  369. :arg_s_rap.scid,
  370. :ll_printid);
  371. IF sqlca.SQLCode <> 0 THEN
  372. arg_msg = "向出纳明细表插入新记录失败,请重试!"+'~n'+sqlca.SQLErrText
  373. rslt = 0
  374. GOTO ext
  375. END IF
  376. ref_rapid = ls_rapid
  377. ext:
  378. IF rslt = 0 THEN
  379. ROLLBACK;
  380. ELSEIF rslt = 1 AND arg_ifcommit THEN
  381. COMMIT;
  382. END IF
  383. RETURN rslt
  384. end function
  385. public function integer mod_raprec (s_rap_money arg_s_rap, ref string arg_msg, boolean arg_ifcommit, long arg_ifauto);Int rslt = 1 ,cnt = 0
  386. Long maxid = 0
  387. Long buildtype = 0
  388. Decimal ol_balcamt = 0.00 //原差额
  389. Decimal new_balcamt = 0.00 //新差额
  390. DateTime server_datetime,ld_maxtakedate
  391. Long ll_printid
  392. s_rap_money s_rap
  393. IF IsNull(arg_s_rap.dscrp) THEN arg_s_rap.dscrp = ''
  394. IF IsNull(arg_s_rap.inrep) THEN arg_s_rap.inrep = ''
  395. IF IsNull(arg_s_rap.billcode) THEN arg_s_rap.billcode = ''
  396. IF IsNull(arg_s_rap.opemp) THEN arg_s_rap.opemp = ''
  397. IF IsNull(arg_s_rap.banktypeid) THEN arg_s_rap.banktypeid = 0
  398. IF IsNull(arg_s_rap.scid) THEN arg_s_rap.scid = 0
  399. cnt = 0
  400. SELECT count(*) INTO :cnt
  401. FROM cw_banktype
  402. Where banktypeid = :arg_s_rap.banktypeid;
  403. IF sqlca.SQLCode <> 0 THEN
  404. rslt = 0
  405. arg_msg = "查询操作失败,结算方式!"
  406. GOTO ext
  407. END IF
  408. IF cnt = 0 THEN
  409. rslt = 0
  410. arg_msg = "结算方式未登记或已取消!"
  411. GOTO ext
  412. END IF
  413. SELECT Top 1 getdate() INTO :server_datetime FROM u_user;
  414. IF sqlca.SQLCode <> 0 THEN
  415. rslt = 0
  416. arg_msg = "查询操作失败,系统时间"
  417. GOTO ext
  418. END IF
  419. IF Not (arg_s_rap.buildtype = 1 OR arg_s_rap.buildtype = 0 OR arg_s_rap.buildtype = 2) THEN
  420. arg_msg = '错误建立类型,必须为:0-手工录入;1-记帐;2 - 转帐'
  421. rslt = 0
  422. GOTO ext
  423. END IF
  424. SELECT max(takedate)
  425. INTO :ld_maxtakedate
  426. FROM u_rap_money
  427. Where balcflag = 1
  428. AND accountid = :arg_s_rap.accountsid;
  429. IF sqlca.SQLCode <> 0 THEN
  430. IF sqlca.SQLCode = 100 THEN
  431. ld_maxtakedate = DateTime(Date('1990-01-01'),Time(0))
  432. ELSE
  433. rslt = 0
  434. arg_msg = '查询最近结帐日期失败'
  435. GOTO ext
  436. END IF
  437. END IF
  438. IF year(Date(arg_s_rap.takedate)) * 100 + month(Date(arg_s_rap.takedate)) <= year(Date(ld_maxtakedate)) * 100 + month(Date(ld_maxtakedate)) THEN
  439. arg_msg = '当月出纳帐已结账,不能再建立该月份或之前的帐目'
  440. rslt = 0
  441. GOTO ext
  442. END IF
  443. //手动修改时查询建立类型
  444. IF arg_ifauto = 1 THEN
  445. SELECT buildtype
  446. INTO :buildtype
  447. FROM u_rap_money
  448. Where u_rap_money.rapmoneyid = :arg_s_rap.rapid ;
  449. IF sqlca.SQLCode <> 0 THEN
  450. arg_msg = "查询出纳帐明细建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  451. rslt = 0
  452. GOTO ext
  453. END IF
  454. END IF
  455. SELECT printid
  456. INTO :ll_printid
  457. FROM u_rap_money
  458. Where u_rap_money.rapmoneyid = :arg_s_rap.rapid ;
  459. IF sqlca.SQLCode <> 0 THEN
  460. arg_msg = "查询出纳帐明细序号失败,请重试!"+'~n'+sqlca.SQLErrText
  461. rslt = 0
  462. GOTO ext
  463. END IF
  464. IF buildtype = 1 or buildtype = 2 THEN
  465. arg_msg = '系统自动建立的出纳帐明细不可以修改'
  466. rslt = 0
  467. GOTO ext
  468. END IF
  469. IF Date(arg_s_rap.takedate) <= 1990-01-01 THEN
  470. arg_msg = '错误发生日期'
  471. rslt = 0
  472. GOTO ext
  473. END IF
  474. IF Trim(arg_s_rap.inrep) = '' THEN
  475. arg_msg = '没有经手人'
  476. rslt = 0
  477. GOTO ext
  478. END IF
  479. IF arg_s_rap.msttakeamt = 0 AND arg_s_rap.takeamt = 0 THEN
  480. arg_msg = "收入金额与支出金额不能同时为0!"
  481. rslt = 0
  482. GOTO ext
  483. END IF
  484. SELECT count(*)
  485. INTO :cnt
  486. FROM u_accounts
  487. Where u_accounts.accountsid = :arg_s_rap.accountsid ;
  488. IF sqlca.SQLCode <> 0 THEN
  489. arg_msg = '查询操作失败,出纳帐户唯一码'
  490. rslt = 0
  491. GOTO ext
  492. END IF
  493. IF cnt = 0 THEN
  494. arg_msg = '错误出纳帐户唯一码'
  495. rslt = 0
  496. GOTO ext
  497. END IF
  498. cnt = 0
  499. SELECT count(*) INTO :cnt
  500. FROM u_user
  501. Where username = :arg_s_rap.opemp ;
  502. IF sqlca.SQLCode <> 0 THEN
  503. rslt = 0
  504. arg_msg = "查询操作失败,操作员!"
  505. GOTO ext
  506. END IF
  507. IF cnt = 0 THEN
  508. rslt = 0
  509. arg_msg = "操作员姓名未登记或已取消!"
  510. GOTO ext
  511. END IF
  512. DateTime ol_takedate
  513. SELECT msttakeamt - takeamt,takedate
  514. INTO :ol_balcamt,:ol_takedate
  515. FROM u_rap_money
  516. Where u_rap_money.rapmoneyid = :arg_s_rap.rapid ;
  517. IF sqlca.SQLCode <> 0 THEN
  518. arg_msg = "查询出纳差额失败!"+'~n'+sqlca.SQLErrText
  519. rslt = 0
  520. GOTO ext
  521. END IF
  522. IF String(ol_takedate,'yyyymmdd') <> String(arg_s_rap.takedate,'yyyymmdd') THEN
  523. IF del_raprec ( arg_s_rap.rapid, arg_s_rap.accountsid,0, arg_msg,FALSE) = 0 THEN
  524. rslt = 0
  525. GOTO ext
  526. END IF
  527. s_rap.accountsid = arg_s_rap.accountsid
  528. s_rap.takedate = arg_s_rap.takedate
  529. s_rap.inrep = arg_s_rap.inrep
  530. s_rap.dscrp = arg_s_rap.dscrp
  531. s_rap.msttakeamt = arg_s_rap.msttakeamt
  532. s_rap.takeamt = arg_s_rap.takeamt
  533. s_rap.billcode = arg_s_rap.billcode
  534. s_rap.opemp = arg_s_rap.opemp
  535. s_rap.banktypeid = arg_s_rap.banktypeid
  536. s_rap.scid = arg_s_rap.scid
  537. s_rap.buildtype = 0
  538. s_rap.dcflag = 0
  539. s_rap.relid = 0
  540. IF add_raprec(s_rap,arg_msg,FALSE) = 0 THEN
  541. rslt = 0
  542. GOTO ext
  543. END IF
  544. ELSE
  545. new_balcamt = arg_s_rap.msttakeamt - arg_s_rap.takeamt
  546. IF new_balcamt <> ol_balcamt THEN
  547. UPDATE u_rap_money SET balcamt = balcamt + (:new_balcamt - :ol_balcamt )
  548. WHERE u_rap_money.printid > :ll_printid
  549. AND u_rap_money.accountid = :arg_s_rap.accountsid ;
  550. IF sqlca.SQLCode <> 0 THEN
  551. arg_msg = "更新结余金额失败!"+'~n'+sqlca.SQLErrText
  552. rslt = 0
  553. GOTO ext
  554. END IF
  555. END IF
  556. ////////////////////////////////////////
  557. //更新明细
  558. UPDATE u_rap_money
  559. SET
  560. billcode = :arg_s_rap.billcode,
  561. takedate = :arg_s_rap.takedate,
  562. takeemp = :arg_s_rap.inrep,
  563. msttakeamt = :arg_s_rap.msttakeamt,
  564. takeamt = :arg_s_rap.takeamt,
  565. dscrp = :arg_s_rap.dscrp,
  566. banktypeid = :arg_s_rap.banktypeid,
  567. scid = :arg_s_rap.scid,
  568. balcamt = balcamt + (:new_balcamt - :ol_balcamt )
  569. Where u_rap_money.rapmoneyid = :arg_s_rap.rapid ;
  570. IF sqlca.SQLCode <> 0 THEN
  571. arg_msg = "更新单据失败!"+'~n'+sqlca.SQLErrText
  572. rslt = 0
  573. GOTO ext
  574. END IF
  575. END IF
  576. ext:
  577. IF rslt = 0 THEN
  578. ROLLBACK ;
  579. ELSEIF rslt = 1 AND arg_ifcommit THEN
  580. COMMIT ;
  581. END IF
  582. RETURN rslt
  583. end function
  584. public function integer balc_raprec (long arg_accountid, long arg_month, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  585. string ls_accountsname
  586. IF arg_month < 190000 THEN
  587. rslt = 0
  588. arg_msg = '不合理的月份'
  589. GOTO ext
  590. END IF
  591. SELECT u_accounts.accountsname
  592. INTO :ls_accountsname
  593. FROM u_accounts
  594. Where accountsid = :arg_accountid;
  595. IF sqlca.SQLCode <> 0 THEN
  596. rslt = 0
  597. arg_msg = '查询帐号名称失败'+sqlca.SQLErrText
  598. GOTO ext
  599. END IF
  600. Long ll_cnt
  601. ll_cnt = 0
  602. SELECT count(*) INTO :ll_cnt
  603. FROM u_rap_money
  604. WHERE balcflag = 1
  605. AND Year(takedate) * 100 + Month(takedate) = :arg_month
  606. and accountid = :arg_accountid;
  607. IF sqlca.SQLCode <> 0 THEN
  608. rslt = 0
  609. arg_msg = '查询账号:'+ls_accountsname+' 当月是否已结帐失败'+sqlca.SQLErrText
  610. GOTO ext
  611. END IF
  612. IF ll_cnt > 0 THEN
  613. rslt = 0
  614. arg_msg = '账号:'+ls_accountsname+' 当月出纳帐已结账,不能重复结账,请检查'
  615. GOTO ext
  616. END IF
  617. UPDATE u_rap_money
  618. SET balcflag = 1
  619. WHERE Year(takedate) * 100 + Month(takedate) = :arg_month
  620. AND balcflag = 0
  621. and accountid = :arg_accountid;
  622. IF sqlca.SQLCode <> 0 THEN
  623. rslt = 0
  624. arg_msg = '账号:'+ls_accountsname+' 更新结账标记失败'
  625. GOTO ext
  626. END IF
  627. ext:
  628. IF rslt = 0 THEN
  629. ROLLBACK;
  630. ELSEIF rslt = 1 AND arg_ifcommit THEN
  631. COMMIT;
  632. END IF
  633. RETURN rslt
  634. end function
  635. public function integer c_balc_raprec (long arg_accountid, long arg_month, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  636. String ls_accountsname
  637. IF arg_month < 190000 THEN
  638. rslt = 0
  639. arg_msg = '不合理的月份'
  640. GOTO ext
  641. END IF
  642. SELECT u_accounts.accountsname
  643. INTO :ls_accountsname
  644. FROM u_accounts
  645. Where accountsid = :arg_accountid;
  646. IF sqlca.SQLCode <> 0 THEN
  647. rslt = 0
  648. arg_msg = '查询帐号名称失败'+sqlca.SQLErrText
  649. GOTO ext
  650. END IF
  651. Long ll_cnt
  652. SELECT count(*) INTO :ll_cnt
  653. FROM u_rap_money
  654. WHERE balcflag = 0
  655. AND Year(takedate) * 100 + Month(takedate) = :arg_month
  656. AND accountid = :arg_accountid;
  657. IF sqlca.SQLCode <> 0 THEN
  658. rslt = 0
  659. arg_msg = '查询账号:'+ls_accountsname+' 当月是否已结帐失败'+sqlca.SQLErrText
  660. GOTO ext
  661. END IF
  662. IF ll_cnt > 0 THEN
  663. rslt = 0
  664. arg_msg = '账号:'+ls_accountsname+' 当月出纳帐还没有结账,不能执行反结账,请检查'
  665. GOTO ext
  666. END IF
  667. ll_cnt = 0
  668. SELECT count(*) INTO :ll_cnt
  669. FROM u_rap_money
  670. WHERE balcflag = 1
  671. AND Year(takedate) * 100 + Month(takedate) > :arg_month
  672. AND accountid = :arg_accountid;
  673. IF sqlca.SQLCode <> 0 THEN
  674. rslt = 0
  675. arg_msg = '账号:'+ls_accountsname+' 查询目标月份以后是否存在已结帐明细失败'+sqlca.SQLErrText
  676. GOTO ext
  677. END IF
  678. IF ll_cnt > 0 THEN
  679. rslt = 0
  680. arg_msg = '账号:'+ls_accountsname+' 该月以后存在已结账的出纳明细,不能对该月份执行反结账,请检查'
  681. GOTO ext
  682. END IF
  683. UPDATE u_rap_money
  684. SET balcflag = 0
  685. WHERE Year(takedate) * 100 + Month(takedate) = :arg_month
  686. AND balcflag = 1
  687. AND accountid = :arg_accountid;
  688. IF sqlca.SQLCode <> 0 THEN
  689. rslt = 0
  690. arg_msg = '账号:'+ls_accountsname+' 更新结账标记失败'
  691. GOTO ext
  692. END IF
  693. ext:
  694. IF rslt = 0 THEN
  695. ROLLBACK;
  696. ELSEIF rslt = 1 AND arg_ifcommit THEN
  697. COMMIT;
  698. END IF
  699. RETURN rslt
  700. end function
  701. on uo_rapmoney.create
  702. call super::create
  703. TriggerEvent( this, "constructor" )
  704. end on
  705. on uo_rapmoney.destroy
  706. TriggerEvent( this, "destructor" )
  707. call super::destroy
  708. end on