uo_mustpay.sru 25 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133
  1. $PBExportHeader$uo_mustpay.sru
  2. forward
  3. global type uo_mustpay from nonvisualobject
  4. end type
  5. type delmx from structure within uo_mustpay
  6. end type
  7. end forward
  8. type delmx from structure
  9. long payid
  10. long listno
  11. end type
  12. global type uo_mustpay from nonvisualobject
  13. end type
  14. global uo_mustpay uo_mustpay
  15. type variables
  16. long ref_payid = 0,ref_relrapid = 0
  17. int uo_option_mstpay_balc
  18. end variables
  19. forward prototypes
  20. public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer add_payrecmx (s_bmstpaymx arg_s_paymx, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer add_payrec (s_bmstpay arg_s_pay, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer uof_mod_dscrp (long arg_payid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit)
  26. end prototypes
  27. public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 ,cnt = 0
  28. Long buildtype = 0
  29. Decimal mstpayamt,payamt
  30. DateTime null_datetime
  31. SELECT count(*)
  32. INTO :cnt
  33. FROM u_bmstpaymx
  34. WHERE u_bmstpaymx.payid = :arg_payid
  35. AND u_bmstpaymx.listno = :arg_listno;
  36. IF sqlca.SQLCode <> 0 THEN
  37. arg_msg = '查询操作失败,应收明细帐唯一码'
  38. rslt = 0
  39. GOTO ext
  40. END IF
  41. IF cnt = 0 THEN
  42. arg_msg = '错误应收明细帐唯一码'
  43. rslt = 0
  44. GOTO ext
  45. END IF
  46. SELECT buildtype,mstpayamt,payamt
  47. INTO :buildtype,:mstpayamt,:payamt
  48. FROM u_bmstpaymx
  49. WHERE u_bmstpaymx.payid = :arg_payid
  50. AND u_bmstpaymx.listno = :arg_listno;
  51. IF sqlca.SQLCode <> 0 THEN
  52. arg_msg = "查询应收明细帐失败,请重试!"+'~n'+sqlca.SQLErrText
  53. rslt = 0
  54. GOTO ext
  55. END IF
  56. IF arg_del = 0 THEN
  57. IF buildtype <> 0 THEN
  58. arg_msg = '系统自动建立的应收明细帐不可以删除'
  59. rslt = 0
  60. GOTO ext
  61. END IF
  62. END IF
  63. SetNull(null_datetime)
  64. UPDATE U_bmstpay
  65. SET mstpayamt = mstpayamt - :mstpayamt,
  66. payamt = payamt - :payamt,
  67. finishflag = 0,
  68. finishdate = :null_datetime
  69. Where U_bmstpay.payid = :arg_payid;
  70. IF sqlca.SQLCode <> 0 THEN
  71. arg_msg = '更新应收帐金额失败,请重试>>'+sqlca.SQLErrText
  72. rslt = 0
  73. GOTO ext
  74. END IF
  75. DELETE U_bmstpaymx
  76. WHERE u_bmstpaymx.payid = :arg_payid
  77. AND u_bmstpaymx.listno = :arg_listno;
  78. IF sqlca.SQLCode <> 0 THEN
  79. arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  80. rslt = 0
  81. GOTO ext
  82. END IF
  83. ext:
  84. IF rslt = 0 THEN
  85. ROLLBACK;
  86. ELSEIF rslt = 1 AND arg_ifcommit THEN
  87. COMMIT;
  88. END IF
  89. RETURN rslt
  90. end function
  91. public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);delmx del_mx[]
  92. Long it_mxt
  93. Long ls_payid,ls_listno,i
  94. Int rslt = 1
  95. DECLARE listno_cur CURSOR FOR
  96. SELECT U_BmstpayMX.payid,
  97. U_BmstpayMX.listno
  98. FROM U_BmstpayMX
  99. Where buybillid = :arg_buybillid;
  100. OPEN listno_cur;
  101. FETCH listno_cur INTO :ls_payid,:ls_listno;
  102. DO WHILE sqlca.SQLCode = 0
  103. it_mxt++
  104. del_mx[it_mxt].payid = ls_payid
  105. del_mx[it_mxt].listno = ls_listno
  106. FETCH listno_cur INTO :ls_payid,:ls_listno;
  107. LOOP
  108. CLOSE listno_cur;
  109. IF it_mxt = 0 THEN
  110. rslt = 1
  111. GOTO ext
  112. ELSE
  113. FOR i = 1 TO it_mxt
  114. IF del_payrecmx (2,del_mx[i].payid, del_mx[i].listno,arg_msg,FALSE) = 0 THEN
  115. rslt = 0
  116. GOTO ext
  117. END IF
  118. NEXT
  119. END IF
  120. ext:
  121. IF rslt = 0 THEN
  122. ROLLBACK;
  123. ELSEIF rslt = 1 AND arg_ifcommit THEN
  124. COMMIT;
  125. END IF
  126. RETURN rslt
  127. end function
  128. public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 ,cnt = 0
  129. Long maxid = 0
  130. Long buildtype = 0
  131. Decimal ls_mstpayamt,ls_payamt
  132. Long ll_itemid,ll_dateint
  133. Int ls_buildtype
  134. Long ll_ctmint
  135. DateTime ld_paydate
  136. Long ll_relrapid,ll_accountsid
  137. datetime ldt_lastdate
  138. If uo_option_mstpay_balc = -1000 Then
  139. rslt = 0
  140. arg_msg = '选项:[392]应付帐使用结帐功能,读取初始默认值失败,操作取消!'
  141. Goto ext
  142. End If
  143. uo_iteminput uo_item
  144. uo_item = Create uo_iteminput
  145. uo_rapmoney uo_money
  146. uo_money = Create uo_rapmoney
  147. SELECT count(*)
  148. INTO :cnt
  149. FROM u_spt
  150. Where u_spt.sptid = :arg_sptid ;
  151. IF sqlca.SQLCode <> 0 THEN
  152. arg_msg = '查询操作失败,供应商唯一码'
  153. rslt = 0
  154. GOTO ext
  155. END IF
  156. IF cnt = 0 THEN
  157. arg_msg = '错误供应商唯一码'
  158. rslt = 0
  159. GOTO ext
  160. END IF
  161. SELECT buildtype,
  162. mstpayamt,
  163. payamt,
  164. itemid,
  165. rapmoneyid,
  166. paydate,
  167. ctmint,
  168. relrapid,
  169. accountsid
  170. INTO :ls_buildtype,
  171. :ls_mstpayamt,
  172. :ls_payamt,
  173. :ll_itemid,
  174. :ll_dateint,
  175. :ld_paydate,
  176. :ll_ctmint,
  177. :ll_relrapid,
  178. :ll_accountsid
  179. FROM u_bmstpay
  180. Where u_bmstpay.payid = :arg_payid;
  181. IF sqlca.SQLCode <> 0 THEN
  182. arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  183. rslt = 0
  184. GOTO ext
  185. END IF
  186. IF ll_ctmint > 0 THEN
  187. arg_msg = '该记录资料已被截数,不能处理'
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. If (ls_buildtype = 1 Or ls_buildtype = 4 ) And arg_del = 0 THEN
  192. arg_msg = '系统自动建立的应付帐不可以删除'
  193. rslt = 0
  194. GOTO ext
  195. END IF
  196. //检查结帐日期
  197. If uo_option_mstpay_balc = 1 Then
  198. Select top 1 balcdate
  199. Into :ldt_lastdate
  200. From u_money_balc
  201. Where billtype = 1
  202. Order By balcdate Desc;
  203. If sqlca.SQLCode = 0 Then
  204. If ld_paydate < ldt_lastdate Then
  205. rslt = 0
  206. arg_msg = '最近应付结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能删除发生日期为 '+String(ld_paydate,'yyyy-mm-dd')+' 的数据'
  207. Goto ext
  208. End If
  209. End If
  210. End If
  211. cnt = 0
  212. SELECT count(*) INTO :cnt FROM u_bmstpaymx
  213. WHERE payid = :arg_payid
  214. And buildtype = 2;
  215. IF sqlca.SQLCode <> 0 THEN
  216. arg_msg = '查询应付帐明细帐失败'
  217. rslt = 0
  218. GOTO ext
  219. END IF
  220. IF cnt > 0 THEN
  221. arg_msg = '该应付帐记录已存在明细帐记录,不能删除>>如果要删除,请先删除明细帐'
  222. rslt = 0
  223. GOTO ext
  224. END IF
  225. //********删除出纳帐
  226. IF ls_payamt <> 0 THEN
  227. IF uo_item.del_iteminput(ll_itemid,ll_dateint,1,arg_msg,False) = 0 THEN
  228. arg_msg = '删除出纳明细帐失败!~n' + arg_msg
  229. rslt = 0
  230. GOTO ext
  231. END IF
  232. END IF
  233. //删除出纳帐
  234. IF ll_relrapid > 0 THEN
  235. IF uo_money.del_raprec(ll_relrapid,ll_accountsid,1,arg_msg,False) = 0 THEN
  236. arg_msg = '删除出纳明细帐失败!~n' + arg_msg
  237. rslt = 0
  238. GOTO ext
  239. END IF
  240. END IF
  241. DELETE U_bmstpaymx
  242. Where u_bmstpaymx.payid = :arg_payid;
  243. IF sqlca.SQLCode <> 0 THEN
  244. arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. DELETE U_bmstpay
  249. Where u_bmstpay.payid = :arg_payid;
  250. IF sqlca.SQLCode <> 0 THEN
  251. arg_msg = "删除应付帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  252. rslt = 0
  253. GOTO ext
  254. END IF
  255. ext:
  256. IF rslt = 0 THEN
  257. ROLLBACK;
  258. ELSEIF rslt = 1 And arg_ifcommit THEN
  259. COMMIT;
  260. END IF
  261. RETURN rslt
  262. end function
  263. public function integer add_payrecmx (s_bmstpaymx arg_s_paymx, ref string arg_msg, boolean arg_ifcommit);
  264. Int rslt = 1
  265. Long cnt = 0,list_no
  266. DateTime server_datetime,null_datetime
  267. Decimal balcamt
  268. IF IsNull(arg_s_paymx.dscrp) THEN arg_s_paymx.dscrp = ''
  269. IF IsNull(arg_s_paymx.inrep) THEN arg_s_paymx.inrep = ''
  270. IF IsNull(arg_s_paymx.banktypeid) THEN arg_s_paymx.banktypeid = 0
  271. IF IsNull(arg_s_paymx.billcode) THEN arg_s_paymx.billcode = ''
  272. IF IsNull(arg_s_paymx.relcode) THEN arg_s_paymx.relcode = ''
  273. IF IsNull(arg_s_paymx.opemp) THEN arg_s_paymx.opemp = ''
  274. IF IsNull(arg_s_paymx.scid) THEN arg_s_paymx.scid = 0
  275. IF IsNull(arg_s_paymx.itemid) THEN arg_s_paymx.itemid = 0
  276. IF IsNull(arg_s_paymx.sptid) THEN arg_s_paymx.sptid = 0
  277. IF IsNull(arg_s_paymx.moneyid) THEN arg_s_paymx.moneyid = 0
  278. cnt = 0
  279. SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_paymx.scid;
  280. IF sqlca.SQLCode <> 0 THEN
  281. rslt = 0
  282. arg_msg = '查询分部资料失败!'
  283. GOTO ext
  284. END IF
  285. IF cnt = 0 THEN
  286. rslt = 0
  287. arg_msg = '无效的分部,不存在该分部!'
  288. GOTO ext
  289. END IF
  290. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  291. //取得系统时间,借用操作员表
  292. IF sqlca.SQLCode <> 0 THEN
  293. rslt = 0
  294. arg_msg = "查询操作失败,系统时间"
  295. GOTO ext
  296. END IF
  297. //1 判断新内容的合法性
  298. IF Not (arg_s_paymx.buildtype = 0 Or &
  299. arg_s_paymx.buildtype = 1 Or &
  300. arg_s_paymx.buildtype = 2 Or &
  301. arg_s_paymx.buildtype = 3 Or &
  302. arg_s_paymx.buildtype = 4) THEN
  303. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐'
  304. rslt = 0
  305. GOTO ext
  306. END IF
  307. IF arg_s_paymx.billcode = '' THEN
  308. arg_msg = '请输入凭证号码'
  309. rslt = 0
  310. GOTO ext
  311. END IF
  312. IF Date(arg_s_paymx.paydate) <= 1990-01-01 THEN
  313. arg_msg = '错误发生日期'
  314. rslt = 0
  315. GOTO ext
  316. END IF
  317. IF Trim(arg_s_paymx.inrep) = '' THEN
  318. arg_msg = '请输入经手人'
  319. rslt = 0
  320. GOTO ext
  321. END IF
  322. cnt = 0
  323. SELECT count(*) INTO :cnt
  324. FROM cw_banktype
  325. Where banktypeid = :arg_s_paymx.banktypeid;
  326. IF sqlca.SQLCode <> 0 THEN
  327. rslt = 0
  328. arg_msg = "查询操作失败,结算方式!"
  329. GOTO ext
  330. END IF
  331. IF cnt = 0 THEN
  332. rslt = 0
  333. arg_msg = "结算方式未登记或已取消!"
  334. GOTO ext
  335. END IF
  336. IF arg_s_paymx.mstpayamt = 0 And arg_s_paymx.payamt = 0 THEN
  337. arg_msg = "应收金额与已收金额不能同时为0!"
  338. rslt = 0
  339. GOTO ext
  340. END IF
  341. cnt = 0
  342. SELECT count(*)
  343. INTO :cnt
  344. FROM u_spt
  345. Where u_spt.sptid = :arg_s_paymx.sptid;
  346. IF sqlca.SQLCode <> 0 THEN
  347. arg_msg = '加应付帐明细时查询操作失败,供应商唯一码'
  348. rslt = 0
  349. GOTO ext
  350. END IF
  351. //2 判断是否已经选择当前操作员
  352. cnt = 0
  353. SELECT count(*) INTO :cnt
  354. FROM u_user
  355. Where username = :arg_s_paymx.opemp ;
  356. IF sqlca.SQLCode <> 0 THEN
  357. rslt = 0
  358. arg_msg = "查询操作失败,操作员!"
  359. GOTO ext
  360. END IF
  361. IF cnt = 0 THEN
  362. rslt = 0
  363. arg_msg = "操作员姓名未登记或已取消!"
  364. GOTO ext
  365. END IF
  366. IF arg_s_paymx.moneyid = 0 THEN
  367. arg_msg = '没有币种'
  368. rslt = 0
  369. GOTO ext
  370. END IF
  371. cnt = 0
  372. SELECT count(*) INTO :cnt
  373. FROM cw_currency
  374. Where moneyid = :arg_s_paymx.moneyid ;
  375. IF sqlca.SQLCode <> 0 THEN
  376. rslt = 0
  377. arg_msg = "查询操作失败,币种!"
  378. GOTO ext
  379. END IF
  380. IF cnt = 0 THEN
  381. rslt = 0
  382. arg_msg = "币种资料未登记或已取消!"
  383. GOTO ext
  384. END IF
  385. IF arg_s_paymx.buildtype = 0 Or arg_s_paymx.buildtype = 2 Or arg_s_paymx.buildtype = 3 THEN
  386. SELECT max(listno) INTO :list_no FROM u_bmstpaymx
  387. Where payid = :arg_s_paymx.payid;
  388. IF sqlca.SQLCode = -1 THEN
  389. arg_msg = '查询应收明细帐最大编号失败>>'+sqlca.SQLErrText
  390. rslt = 0
  391. GOTO ext
  392. ELSEIF sqlca.SQLCode = 100 Or IsNull(list_no) THEN
  393. list_no = 0
  394. END IF
  395. list_no = list_no + 1
  396. ELSE
  397. list_no = 0
  398. END IF
  399. //3 向应收帐明细表插入新记录,失败则回滚
  400. INSERT INTO u_bmstpaymx
  401. (scid,
  402. payid,
  403. listno,
  404. billcode,
  405. relcode,
  406. paydate,
  407. banktypeid,
  408. mstpayamt,
  409. payamt,
  410. opdate,
  411. opemp,
  412. dscrp,
  413. inrep,
  414. buildtype,
  415. buybillid,
  416. itemid,
  417. sptid,
  418. moneyid)
  419. VALUES (:arg_s_paymx.scid,
  420. :arg_s_paymx.payid,
  421. :list_no,
  422. :arg_s_paymx.billcode,
  423. :arg_s_paymx.relcode,
  424. :arg_s_paymx.paydate,
  425. :arg_s_paymx.banktypeid,
  426. :arg_s_paymx.mstpayamt,
  427. :arg_s_paymx.payamt,
  428. :server_datetime,
  429. :arg_s_paymx.opemp,
  430. :arg_s_paymx.dscrp,
  431. :arg_s_paymx.inrep,
  432. :arg_s_paymx.buildtype,
  433. :arg_s_paymx.buybillid,
  434. :arg_s_paymx.itemid,
  435. :arg_s_paymx.sptid,
  436. :arg_s_paymx.moneyid) ;
  437. IF sqlca.SQLCode <> 0 THEN
  438. arg_msg = "向应收帐表插入应收明细帐记录失败,请重试!"+'~n'+sqlca.SQLErrText
  439. rslt = 0
  440. GOTO ext
  441. END IF
  442. IF arg_s_paymx.buildtype <> 1 THEN
  443. SELECT mstpayamt - payamt Into :balcamt From u_bmstpay Where payid = :arg_s_paymx.payid;
  444. IF sqlca.SQLCode <> 0 THEN
  445. arg_msg = '查询当前单据结余金额失败'
  446. rslt = 0
  447. GOTO ext
  448. END IF
  449. IF balcamt <= 0 THEN
  450. If arg_s_paymx.buildtype <> 3 and ( arg_s_paymx.payamt - arg_s_paymx.mstpayamt) > 0 THEN
  451. arg_msg = '当前处理金额大于单据结余金额,请检查'
  452. rslt = 0
  453. GOTO ext
  454. END IF
  455. ELSE
  456. If ( arg_s_paymx.payamt - arg_s_paymx.mstpayamt) > balcamt THEN
  457. arg_msg = '当前处理金额大于单据结余金额,请检查'
  458. rslt = 0
  459. GOTO ext
  460. END IF
  461. END IF
  462. UPDATE u_bmstpay
  463. SET mstpayamt = mstpayamt + :arg_s_paymx.mstpayamt,
  464. payamt = payamt + :arg_s_paymx.payamt
  465. Where payid = :arg_s_paymx.payid;
  466. IF sqlca.SQLCode <> 0 THEN
  467. arg_msg = '更新应付帐应收已付款失败,请重试!'
  468. rslt = 0
  469. GOTO ext
  470. END IF
  471. IF balcamt = arg_s_paymx.payamt - arg_s_paymx.mstpayamt THEN
  472. UPDATE u_bmstpay
  473. SET finishflag = 1,
  474. finishdate = :server_datetime
  475. Where payid = :arg_s_paymx.payid;
  476. IF sqlca.SQLCode <> 0 THEN
  477. arg_msg = '更新应付帐完成标记失败,'+sqlca.SQLErrText
  478. rslt = 0
  479. GOTO ext
  480. END IF
  481. ELSE
  482. SetNull(null_datetime)
  483. UPDATE u_bmstpay
  484. SET finishflag = 0,
  485. finishdate = :null_datetime
  486. Where payid = :arg_s_paymx.payid;
  487. IF sqlca.SQLCode <> 0 THEN
  488. arg_msg = '更新应付帐完成标记失败,'+sqlca.SQLErrText
  489. rslt = 0
  490. GOTO ext
  491. END IF
  492. END IF
  493. ELSE
  494. IF arg_s_paymx.mstpayamt = arg_s_paymx.payamt THEN
  495. UPDATE u_bmstpay
  496. SET finishflag = 1,
  497. finishdate = :arg_s_paymx.paydate
  498. Where payid = :arg_s_paymx.payid;
  499. IF sqlca.SQLCode <> 0 THEN
  500. arg_msg = '更新应付帐结清标记失败,'+sqlca.SQLErrText
  501. rslt = 0
  502. GOTO ext
  503. END IF
  504. END IF
  505. END IF
  506. ext:
  507. IF rslt = 0 THEN
  508. ROLLBACK;
  509. ELSEIF rslt = 1 And arg_ifcommit THEN
  510. COMMIT;
  511. END IF
  512. RETURN rslt
  513. end function
  514. public function integer add_payrec (s_bmstpay arg_s_pay, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  515. DateTime server_datetime
  516. Long ls_newpayid
  517. Long ref_dateint
  518. String ls_sptname
  519. Int li_item_dfttype,li_itemflag
  520. Decimal ld_msttakeamt,ld_takeamt
  521. Long relrapid
  522. DateTime ldt_lastdate
  523. IF uo_option_mstpay_balc = -1000 THEN
  524. rslt = 0
  525. arg_msg = '选项:[392]应付帐使用结帐功能,读取初始默认值失败,操作取消!'
  526. GOTO ext
  527. END IF
  528. //检查结帐日期
  529. IF uo_option_mstpay_balc = 1 THEN
  530. SELECT top 1 balcdate
  531. INTO :ldt_lastdate
  532. FROM u_money_balc
  533. WHERE billtype = 1
  534. Order By balcdate Desc;
  535. IF sqlca.SQLCode = 0 THEN
  536. IF arg_s_pay.paydate < ldt_lastdate THEN
  537. rslt = 0
  538. arg_msg = '最近应付结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能再录入发生日期为 '+String(arg_s_pay.paydate,'yyyy-mm-dd')+' 的数据'
  539. GOTO ext
  540. END IF
  541. END IF
  542. END IF
  543. uo_iteminput uo_item
  544. uo_item = Create uo_iteminput
  545. uo_rapmoney uo_money
  546. uo_money = Create uo_rapmoney
  547. IF IsNull(arg_s_pay.dscrp) THEN arg_s_pay.dscrp = ''
  548. IF IsNull(arg_s_pay.inrep) THEN arg_s_pay.inrep = ''
  549. IF IsNull(arg_s_pay.banktypeid) THEN arg_s_pay.banktypeid = 0
  550. IF IsNull(arg_s_pay.billcode) THEN arg_s_pay.billcode = ''
  551. IF IsNull(arg_s_pay.relcode) THEN arg_s_pay.relcode = ''
  552. IF IsNull(arg_s_pay.opemp) THEN arg_s_pay.opemp = ''
  553. IF IsNull(arg_s_pay.scid) THEN arg_s_pay.scid = 0
  554. IF IsNull(arg_s_pay.accountsid) THEN arg_s_pay.accountsid = 0
  555. IF IsNull(arg_s_pay.itemid) THEN arg_s_pay.itemid = 0
  556. IF IsNull(arg_s_pay.moneyid) THEN arg_s_pay.moneyid = 0
  557. IF lena(arg_s_pay.billcode) > 30 THEN arg_s_pay.billcode = LeftA(arg_s_pay.billcode,30)
  558. IF lena(arg_s_pay.relcode) > 50 THEN arg_s_pay.relcode = LeftA(arg_s_pay.relcode,50)
  559. IF lena(arg_s_pay.dscrp) > 255 THEN arg_s_pay.dscrp = LeftA(arg_s_pay.dscrp,255)
  560. cnt = 0
  561. SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_pay.scid;
  562. IF sqlca.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. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  573. //取得系统时间,借用操作员表
  574. IF sqlca.SQLCode <> 0 THEN
  575. rslt = 0
  576. arg_msg = "查询操作失败,系统时间"
  577. GOTO ext
  578. END IF
  579. //1 判断新内容的合法性
  580. IF Not (arg_s_pay.buildtype = 0 Or &
  581. arg_s_pay.buildtype = 1 Or &
  582. arg_s_pay.buildtype = 4 ) THEN
  583. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;1-付款单记帐'
  584. rslt = 0
  585. GOTO ext
  586. END IF
  587. IF arg_s_pay.billcode = '' THEN
  588. arg_msg = '请输入凭证号码'
  589. rslt = 0
  590. GOTO ext
  591. END IF
  592. IF Date(arg_s_pay.paydate) <= 1990-01-01 THEN
  593. arg_msg = '错误发生日期'
  594. rslt = 0
  595. GOTO ext
  596. END IF
  597. IF arg_s_pay.payamt <> 0 THEN
  598. IF f_check_inoutdate(-100,arg_s_pay.paydate,False,arg_msg) = 0 THEN
  599. rslt = 0
  600. GOTO ext
  601. END IF
  602. ELSE
  603. IF f_check_inoutdate(-0,arg_s_pay.paydate,False,arg_msg) = 0 THEN
  604. rslt = 0
  605. GOTO ext
  606. END IF
  607. END IF
  608. IF Trim(arg_s_pay.inrep) = '' THEN
  609. arg_msg = '请输入经手人'
  610. rslt = 0
  611. GOTO ext
  612. END IF
  613. cnt = 0
  614. SELECT count(*) INTO :cnt
  615. FROM cw_currency
  616. Where moneyid = :arg_s_pay.moneyid ;
  617. IF sqlca.SQLCode <> 0 THEN
  618. rslt = 0
  619. arg_msg = "查询操作失败,币种!"
  620. GOTO ext
  621. END IF
  622. IF cnt = 0 THEN
  623. rslt = 0
  624. arg_msg = "币种资料未登记或已取消!"
  625. GOTO ext
  626. END IF
  627. cnt = 0
  628. SELECT count(*) INTO :cnt
  629. FROM cw_banktype
  630. Where banktypeid = :arg_s_pay.banktypeid;
  631. IF sqlca.SQLCode <> 0 THEN
  632. rslt = 0
  633. arg_msg = "查询操作失败,结算方式!"
  634. GOTO ext
  635. END IF
  636. IF cnt = 0 THEN
  637. rslt = 0
  638. arg_msg = "结算方式未登记或已取消!"
  639. GOTO ext
  640. END IF
  641. IF arg_s_pay.mstpayamt = 0 And arg_s_pay.payamt = 0 THEN
  642. arg_msg = "应付金额与已付金额不能同时为0!"
  643. rslt = 0
  644. GOTO ext
  645. END IF
  646. IF arg_s_pay.oriamt <> arg_s_pay.mstpayamt - arg_s_pay.payamt THEN
  647. arg_s_pay.oriamt = arg_s_pay.mstpayamt - arg_s_pay.payamt
  648. END IF
  649. //2 判断是否已经选择当前客户和操作员
  650. SELECT name
  651. INTO :ls_sptname
  652. FROM u_spt
  653. Where u_spt.sptid = :arg_s_pay.sptid ;
  654. IF sqlca.SQLCode <> 0 THEN
  655. arg_msg = '查询操作失败,供应商唯一码'
  656. rslt = 0
  657. GOTO ext
  658. END IF
  659. cnt = 0
  660. SELECT count(*) INTO :cnt
  661. FROM u_user
  662. Where username = :arg_s_pay.opemp ;
  663. IF sqlca.SQLCode <> 0 THEN
  664. rslt = 0
  665. arg_msg = "查询操作失败,操作员!"
  666. GOTO ext
  667. END IF
  668. IF cnt = 0 THEN
  669. rslt = 0
  670. arg_msg = "操作员姓名未登记或已取消!"
  671. GOTO ext
  672. END IF
  673. IF arg_s_pay.accountsid > 0 THEN
  674. Long ll_moneyid
  675. SELECT moneyid INTO :ll_moneyid
  676. FROM u_accounts
  677. Where accountsid = :arg_s_pay.accountsid;
  678. IF sqlca.SQLCode <> 0 THEN
  679. arg_msg = '查询出纳帐号对应币种资料失败'
  680. rslt = 0
  681. GOTO ext
  682. END IF
  683. IF ll_moneyid = 0 THEN
  684. arg_msg = '出纳帐号对应币种资料未设定'
  685. rslt = 0
  686. GOTO ext
  687. END IF
  688. IF ll_moneyid <> arg_s_pay.moneyid_cn THEN
  689. arg_msg = '币种资料与出纳帐号币种资料不相符,不能保存'
  690. rslt = 0
  691. GOTO ext
  692. END IF
  693. END IF
  694. SELECT dfttype,itemflag
  695. INTO :li_item_dfttype,:li_itemflag
  696. FROM u_itemdef
  697. Where u_itemdef.itemid = :arg_s_pay.itemid;
  698. IF sqlca.SQLCode <> 0 THEN
  699. arg_msg = '查询当前收支项目核算类型和核算方向失败!'
  700. rslt = 0
  701. GOTO ext
  702. END IF
  703. //****************加收支帐
  704. IF arg_s_pay.payamt_cn <> 0 THEN
  705. s_iteminput s_input
  706. s_input.itemid = arg_s_pay.itemid
  707. s_input.dateint = 0
  708. s_input.outdate = arg_s_pay.paydate
  709. s_input.dscrp = ls_sptname +','+arg_s_pay.dscrp
  710. //yyx20120427原
  711. // CHOOSE CASE li_item_dfttype
  712. // CASE 2,5
  713. // s_input.outamt = -1 * arg_s_pay.payamt_cn * li_itemflag
  714. // CASE ELSE
  715. // s_input.outamt = arg_s_pay.payamt_cn
  716. // END CHOOSE
  717. //yyx20120427新
  718. // IF li_itemflag = 1 THEN
  719. // s_input.outamt = -1 * arg_s_pay.payamt_cn * li_itemflag
  720. // ELSE
  721. // s_input.outamt = arg_s_pay.payamt_cn
  722. // END IF
  723. ////
  724. s_input.inamt = 0
  725. s_input.outamt = arg_s_pay.payamt_cn
  726. s_input.accountsid = arg_s_pay.accountsid
  727. s_input.banktypeid = arg_s_pay.banktypeid
  728. s_input.billcode = arg_s_pay.billcode
  729. s_input.relcode = arg_s_pay.relcode
  730. s_input.opemp = arg_s_pay.opemp
  731. s_input.relrep = arg_s_pay.inrep
  732. s_input.scid = arg_s_pay.scid
  733. s_input.buildtype = 1
  734. IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN
  735. arg_msg = '增加收支明细帐失败!~n' + arg_msg
  736. rslt = 0
  737. GOTO ext
  738. END IF
  739. ref_dateint = uo_item.ref_dateint
  740. IF ref_dateint = 0 THEN
  741. arg_msg = '增加收支出纳明细帐失败!'
  742. rslt = 0
  743. GOTO ext
  744. END IF
  745. ELSE
  746. arg_s_pay.accountsid = 0
  747. END IF
  748. IF arg_s_pay.payamt_cn <> 0 THEN
  749. // IF li_itemflag = 1 THEN
  750. // //yyx20120427原ld_msttakeamt = arg_s_pay.payamt_cn
  751. // ld_msttakeamt = -1 * arg_s_pay.payamt_cn * li_itemflag
  752. // ld_takeamt = 0
  753. // ELSE
  754. // ld_msttakeamt = 0
  755. // ld_takeamt = arg_s_pay.payamt_cn
  756. // END IF
  757. ld_msttakeamt = 0
  758. ld_takeamt = arg_s_pay.payamt_cn
  759. s_rap_money s_rap
  760. s_rap.accountsid = arg_s_pay.accountsid
  761. s_rap.takedate = arg_s_pay.paydate
  762. s_rap.inrep = arg_s_pay.inrep
  763. s_rap.dscrp = ls_sptname +','+arg_s_pay.dscrp
  764. s_rap.msttakeamt = ld_msttakeamt
  765. s_rap.takeamt = ld_takeamt
  766. s_rap.billcode = arg_s_pay.billcode
  767. s_rap.relcode = arg_s_pay.relcode
  768. s_rap.buildtype = 1
  769. s_rap.dcflag = 0
  770. s_rap.relid = 0
  771. s_rap.opemp = arg_s_pay.opemp
  772. s_rap.banktypeid = arg_s_pay.banktypeid
  773. s_rap.scid = arg_s_pay.scid
  774. IF uo_money.add_raprec(s_rap,arg_msg,False) = 0 THEN
  775. arg_msg = '增加出纳明细帐失败!~n' + arg_msg
  776. rslt = 0
  777. GOTO ext
  778. END IF
  779. relrapid = uo_money.ref_rapid
  780. IF relrapid = 0 THEN
  781. arg_msg = '增加出纳明细帐失败!'
  782. rslt = 0
  783. GOTO ext
  784. END IF
  785. END IF
  786. //3 向应付帐表插入新记录,失败则回滚
  787. ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,True,id_sqlca)
  788. IF ls_newpayid <= 0 THEN
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. INSERT INTO U_Bmstpay
  793. ( scid,
  794. payid,
  795. sptid,
  796. paydate,
  797. inrep,
  798. oriamt,
  799. mstpayamt,
  800. payamt,
  801. Dscrp,
  802. billcode,
  803. relcode,
  804. banktypeid,
  805. buildtype,
  806. opdate,
  807. opemp,
  808. inwareid,
  809. viewdate,
  810. rapmoneyid,
  811. accountsid,
  812. itemid,
  813. moneyid,
  814. relrapid)
  815. VALUES ( :arg_s_pay.scid,
  816. :ls_newpayid,
  817. :arg_s_pay.sptid,
  818. :arg_s_pay.paydate,
  819. :arg_s_pay.inrep,
  820. :arg_s_pay.oriamt,
  821. :arg_s_pay.mstpayamt,
  822. :arg_s_pay.payamt,
  823. :arg_s_pay.dscrp,
  824. :arg_s_pay.billcode,
  825. :arg_s_pay.relcode,
  826. :arg_s_pay.banktypeid,
  827. :arg_s_pay.buildtype,
  828. :server_datetime,
  829. :arg_s_pay.opemp,
  830. :arg_s_pay.inwareid,
  831. :arg_s_pay.viewdate,
  832. :ref_dateint,
  833. :arg_s_pay.accountsid,
  834. :arg_s_pay.itemid,
  835. :arg_s_pay.moneyid,
  836. :relrapid) ;
  837. IF sqlca.SQLCode <> 0 THEN
  838. arg_msg = "向应收帐表插入应收记录失败,请重试!"+'~n'+sqlca.SQLErrText
  839. rslt = 0
  840. GOTO ext
  841. END IF
  842. //4 向应收帐明细表插入新记录,失败则回滚
  843. s_bmstpaymx s_paymx
  844. s_paymx.scid = arg_s_pay.scid
  845. s_paymx.payid = ls_newpayid
  846. s_paymx.billcode = arg_s_pay.billcode
  847. s_paymx.relcode = arg_s_pay.relcode
  848. s_paymx.paydate = arg_s_pay.paydate
  849. s_paymx.banktypeid = arg_s_pay.banktypeid
  850. s_paymx.mstpayamt = arg_s_pay.mstpayamt
  851. s_paymx.payamt = arg_s_pay.payamt
  852. s_paymx.opemp = arg_s_pay.opemp
  853. s_paymx.dscrp = arg_s_pay.dscrp
  854. s_paymx.inrep = arg_s_pay.inrep
  855. s_paymx.buildtype = 1
  856. s_paymx.buybillid = 0
  857. s_paymx.itemid = arg_s_pay.itemid
  858. s_paymx.sptid = arg_s_pay.sptid
  859. s_paymx.moneyid = arg_s_pay.moneyid
  860. IF add_payrecmx(s_paymx,arg_msg,False) = 0 THEN
  861. rslt = 0
  862. GOTO ext
  863. END IF
  864. ref_payid = ls_newpayid
  865. ref_relrapid = relrapid
  866. ext:
  867. IF rslt = 0 THEN
  868. ROLLBACK;
  869. ELSEIF rslt = 1 And arg_ifcommit THEN
  870. COMMIT;
  871. END IF
  872. Destroy uo_money
  873. Destroy uo_item
  874. RETURN rslt
  875. end function
  876. public function integer uof_mod_dscrp (long arg_payid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  877. Int li_buildtype
  878. Long ll_rapmoneyid,ll_dateint
  879. Long ll_scid,ll_sptid
  880. String ls_dscrp_update
  881. String ls_billcode
  882. String ls_sptname
  883. SELECT rapmoneyid,buildtype,scid,sptid,billcode
  884. INTO :ll_dateint,:li_buildtype,:ll_scid,:ll_sptid,:ls_billcode
  885. FROM u_bmstpay
  886. Where payid = :arg_payid;
  887. IF sqlca.SQLCode <> 0 THEN
  888. arg_msg = '查询应收帐资料失败,'+sqlca.SQLErrText
  889. rslt = 0
  890. GOTO ext
  891. END IF
  892. IF li_buildtype <> 0 THEN
  893. arg_msg = '不是手动建立的资料,不能修改摘要'
  894. rslt = 0
  895. GOTO ext
  896. END IF
  897. SELECT name INTO :ls_sptname
  898. FROM u_spt
  899. Where sptid = :ll_sptid;
  900. IF sqlca.SQLCode <> 0 THEN
  901. arg_msg = '查询客户名称失败,'+sqlca.SQLErrText
  902. rslt = 0
  903. GOTO ext
  904. END IF
  905. UPDATE u_bmstpay SET
  906. dscrp = :arg_dscrp
  907. Where payid = :arg_payid;
  908. IF sqlca.SQLCode <> 0 THEN
  909. arg_msg = '更新应收帐摘要失败,'+sqlca.SQLErrText
  910. rslt = 0
  911. GOTO ext
  912. END IF
  913. UPDATE u_bmstpaymx SET
  914. dscrp = :arg_dscrp
  915. WHERE payid = :arg_payid
  916. AND scid = :ll_scid
  917. AND buildtype = 1;
  918. IF sqlca.SQLCode <> 0 THEN
  919. arg_msg = '更新应收明细帐摘要失败,'+sqlca.SQLErrText
  920. rslt = 0
  921. GOTO ext
  922. END IF
  923. IF ll_dateint > 0 THEN
  924. ls_dscrp_update = ls_sptname + ','+ls_billcode+','+arg_dscrp
  925. SELECT rapmoneyid INTO :ll_rapmoneyid
  926. FROM u_iteminput
  927. Where dateint = :ll_dateint;
  928. IF sqlca.SQLCode <> 0 THEN
  929. arg_msg = '查询费用帐资料失败,'+sqlca.SQLErrText
  930. rslt = 0
  931. GOTO ext
  932. END IF
  933. UPDATE u_iteminput
  934. SET dscrp = :ls_dscrp_update
  935. Where dateint = :ll_dateint;
  936. IF sqlca.SQLCode <> 0 THEN
  937. arg_msg = '更新费用帐摘要失败,'+sqlca.SQLErrText
  938. rslt = 0
  939. GOTO ext
  940. END IF
  941. UPDATE u_rap_money
  942. SET dscrp = :ls_dscrp_update
  943. Where rapmoneyid = :ll_rapmoneyid;
  944. IF sqlca.SQLCode <> 0 THEN
  945. arg_msg = '更新出纳帐摘要失败,'+sqlca.SQLErrText
  946. rslt = 0
  947. GOTO ext
  948. END IF
  949. END IF
  950. ext:
  951. IF rslt = 0 THEN
  952. ROLLBACK;
  953. ELSEIF rslt = 1 AND arg_ifcommit THEN
  954. COMMIT;
  955. END IF
  956. RETURN rslt
  957. end function
  958. on uo_mustpay.create
  959. call super::create
  960. TriggerEvent( this, "constructor" )
  961. end on
  962. on uo_mustpay.destroy
  963. TriggerEvent( this, "destructor" )
  964. call super::destroy
  965. end on
  966. event constructor;String str_optionvalue,arg_msg
  967. f_get_sys_option_value('392',str_optionvalue,arg_msg)
  968. uo_option_mstpay_balc = Long(str_optionvalue)
  969. end event