uo_mustpay.sru 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563
  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
  17. end variables
  18. forward prototypes
  19. public function integer del_payrecmx (integer arg_del, long arg_payid, long arg_listno, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer del_payrec (long arg_scid, integer arg_del, long arg_payid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer add_payrec (long arg_scid, long arg_sptid, datetime arg_paydate, string arg_inrep, decimal arg_oriamt, decimal arg_mstpayamt, decimal arg_payamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_inwareid, long arg_buybillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode)
  23. public function integer add_payrecmx (long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybillid, long arg_itemid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit, long arg_moneyid, string arg_relcode)
  24. public function integer add_payrecmx (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer add_payrec (ref s_bmstpay arg_s_mx, 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);//删除应收帐
  28. //del_payrecmx(arg_del,arg_payid,arg_listno,arg_msg,arg_ifcommit)
  29. //arg_del 0:手动删除,1:应付帐删除,2:支出单删除;3:采购单删除
  30. Int rslt = 1
  31. long cnt = 0
  32. Long buildtype = 0
  33. Decimal mstpayamt,payamt
  34. DateTime null_datetime
  35. SELECT count(*)
  36. INTO :cnt
  37. FROM u_bmstpaymx
  38. WHERE u_bmstpaymx.payid = :arg_payid
  39. AND u_bmstpaymx.listno = :arg_listno;
  40. IF sqlca.SQLCode <> 0 THEN
  41. arg_msg = '查询操作失败,应付明细帐唯一码'
  42. rslt = 0
  43. GOTO ext
  44. END IF
  45. IF cnt = 0 THEN
  46. arg_msg = '错误应付明细帐唯一码'
  47. rslt = 0
  48. GOTO ext
  49. END IF
  50. SELECT buildtype,mstpayamt,payamt
  51. INTO :buildtype,:mstpayamt,:payamt
  52. FROM u_bmstpaymx
  53. WHERE u_bmstpaymx.payid = :arg_payid
  54. AND u_bmstpaymx.listno = :arg_listno;
  55. IF sqlca.SQLCode <> 0 THEN
  56. arg_msg = "查询应付明细帐失败,请重试!"+'~n'+sqlca.SQLErrText
  57. rslt = 0
  58. GOTO ext
  59. END IF
  60. IF arg_del = 0 THEN
  61. IF buildtype <> 0 THEN
  62. arg_msg = '系统自动建立的应付明细帐不可以删除'
  63. rslt = 0
  64. GOTO ext
  65. END IF
  66. END IF
  67. SetNull(null_datetime)
  68. UPDATE U_bmstpay
  69. SET mstpayamt = mstpayamt - :mstpayamt,
  70. payamt = payamt - :payamt,
  71. finishflag = 0,
  72. finishdate = :null_datetime
  73. Where U_bmstpay.payid = :arg_payid;
  74. IF sqlca.SQLCode <> 0 THEN
  75. arg_msg = '更新应付帐金额失败,请重试>>'+sqlca.SQLErrText
  76. rslt = 0
  77. GOTO ext
  78. END IF
  79. DELETE U_bmstpaymx
  80. WHERE u_bmstpaymx.payid = :arg_payid
  81. AND u_bmstpaymx.listno = :arg_listno;
  82. IF sqlca.SQLCode <> 0 THEN
  83. arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  84. rslt = 0
  85. GOTO ext
  86. END IF
  87. ext:
  88. IF rslt = 0 THEN
  89. ROLLBACK;
  90. ELSEIF rslt = 1 AND arg_ifcommit THEN
  91. COMMIT;
  92. END IF
  93. RETURN rslt
  94. end function
  95. public function integer buybill_del_mx (long arg_buybillid, ref string arg_msg, boolean arg_ifcommit);delmx del_mx[]
  96. Long it_mxt
  97. Long ls_payid,ls_listno,i
  98. Int rslt = 1
  99. DECLARE listno_cur CURSOR FOR
  100. SELECT U_BmstpayMX.payid,
  101. U_BmstpayMX.listno
  102. FROM U_BmstpayMX
  103. Where buybillid = :arg_buybillid;
  104. OPEN listno_cur;
  105. FETCH listno_cur Into :ls_payid,:ls_listno;
  106. DO WHILE sqlca.SQLCode = 0
  107. it_mxt++
  108. del_mx[it_mxt].payid = ls_payid
  109. del_mx[it_mxt].listno = ls_listno
  110. FETCH listno_cur Into :ls_payid,:ls_listno;
  111. LOOP
  112. CLOSE listno_cur;
  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. ext:
  120. IF rslt = 0 THEN
  121. ROLLBACK;
  122. ELSEIF rslt = 1 And arg_ifcommit THEN
  123. COMMIT;
  124. END IF
  125. RETURN rslt
  126. end function
  127. 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
  128. long cnt = 0
  129. Long maxid = 0
  130. Long buildtype = 0
  131. Decimal ls_mstpayamt,ls_payamt
  132. Long ll_itemid,ll_dateint
  133. Int ll_buildtype
  134. Long ll_ctmint
  135. DateTime ld_paydate
  136. uo_iteminput uo_item
  137. uo_item = Create uo_iteminput
  138. SELECT count(*)
  139. INTO :cnt
  140. FROM u_spt
  141. Where u_spt.sptid = :arg_sptid ;
  142. IF sqlca.SQLCode <> 0 THEN
  143. arg_msg = '查询操作失败,供应商唯一码'
  144. rslt = 0
  145. GOTO ext
  146. END IF
  147. IF cnt = 0 THEN
  148. arg_msg = '错误供应商唯一码'
  149. rslt = 0
  150. GOTO ext
  151. END IF
  152. SELECT buildtype,
  153. mstpayamt,
  154. payamt,
  155. itemid,
  156. rapmoneyid,
  157. paydate,
  158. ctmint
  159. INTO :ll_buildtype,
  160. :ls_mstpayamt,
  161. :ls_payamt,
  162. :ll_itemid,
  163. :ll_dateint,
  164. :ld_paydate,
  165. :ll_ctmint
  166. FROM u_bmstpay
  167. Where u_bmstpay.payid = :arg_payid;
  168. IF sqlca.SQLCode <> 0 THEN
  169. arg_msg = "查询应付帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  170. rslt = 0
  171. GOTO ext
  172. END IF
  173. IF ll_ctmint > 0 THEN
  174. arg_msg = '该记录资料已被截数,不能处理'
  175. rslt = 0
  176. GOTO ext
  177. END IF
  178. If (ll_buildtype = 1 Or ll_buildtype = 4) And arg_del = 0 THEN
  179. arg_msg = '系统自动建立的应付帐不可以删除'
  180. rslt = 0
  181. GOTO ext
  182. END IF
  183. cnt = 0
  184. IF ll_buildtype = 0 THEN //手动建立的,
  185. SELECT count(*) INTO :cnt FROM u_bmstpaymx
  186. WHERE payid = :arg_payid
  187. And (buildtype <> 0);
  188. ELSEIF ll_buildtype = 1 THEN //销售单据建立
  189. SELECT count(*) INTO :cnt FROM u_bmstpaymx
  190. WHERE payid = :arg_payid
  191. And (buildtype <> 1 And buildtype <> 3);
  192. ELSEIF ll_buildtype = 4 THEN //收款单据建立
  193. SELECT count(*) INTO :cnt FROM u_bmstpaymx
  194. WHERE payid = :arg_payid
  195. And (buildtype <> 4);
  196. ELSE
  197. SELECT count(*) INTO :cnt FROM u_bmstpaymx
  198. WHERE payid = :arg_payid
  199. And buildtype = 2;
  200. END IF
  201. IF sqlca.SQLCode <> 0 THEN
  202. arg_msg = '查询应付帐明细帐失败'
  203. rslt = 0
  204. GOTO ext
  205. END IF
  206. IF cnt > 0 THEN
  207. arg_msg = '该应付帐记录已存在明细帐记录,不能删除>>如果要删除,请先删除明细帐'
  208. rslt = 0
  209. GOTO ext
  210. END IF
  211. //********删除出纳帐
  212. IF ls_payamt <> 0 THEN
  213. IF uo_item.del_iteminput(ll_itemid,ll_dateint,1,arg_msg,False) = 0 THEN
  214. arg_msg = '删除出纳明细帐失败!~n' + arg_msg
  215. rslt = 0
  216. GOTO ext
  217. END IF
  218. END IF
  219. DELETE U_bmstpaymx
  220. Where u_bmstpaymx.payid = :arg_payid;
  221. IF sqlca.SQLCode <> 0 THEN
  222. arg_msg = "删除应付明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  223. rslt = 0
  224. GOTO ext
  225. END IF
  226. DELETE U_bmstpay
  227. Where u_bmstpay.payid = :arg_payid;
  228. IF sqlca.SQLCode <> 0 THEN
  229. arg_msg = "删除应付帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  230. rslt = 0
  231. GOTO ext
  232. END IF
  233. ext:
  234. IF rslt = 0 THEN
  235. ROLLBACK;
  236. ELSEIF rslt = 1 And arg_ifcommit THEN
  237. COMMIT;
  238. END IF
  239. RETURN rslt
  240. end function
  241. public function integer add_payrec (long arg_scid, long arg_sptid, datetime arg_paydate, string arg_inrep, decimal arg_oriamt, decimal arg_mstpayamt, decimal arg_payamt, string arg_dscrp, string arg_billcode, long arg_banktypeid, integer arg_buildtype, string arg_opemp, long arg_inwareid, long arg_buybillid, ref string arg_msg, boolean arg_ifcommit, datetime arg_viewdate, long arg_accountsid, long arg_itemid, long arg_moneyid, string arg_relcode);
  242. s_bmstpay s_pay
  243. s_pay.scid = arg_scid
  244. s_pay.sptid = arg_sptid
  245. s_pay.paydate = arg_paydate
  246. s_pay.inrep = arg_inrep
  247. s_pay.oriamt = arg_oriamt
  248. s_pay.mstpayamt = arg_mstpayamt
  249. s_pay.payamt = arg_payamt
  250. s_pay.dscrp = arg_dscrp
  251. s_pay.billcode = arg_billcode
  252. s_pay.banktypeid = arg_banktypeid
  253. s_pay.buildtype = arg_buildtype
  254. s_pay.opemp = arg_opemp
  255. s_pay.inwareid = arg_inwareid
  256. s_pay.buybillid = arg_buybillid
  257. s_pay.viewdate = arg_viewdate
  258. s_pay.accountsid = arg_accountsid
  259. s_pay.itemid = arg_itemid
  260. s_pay.moneyid = arg_moneyid
  261. s_pay.relcode = arg_relcode
  262. return add_payrec(s_pay,arg_msg,arg_ifcommit)
  263. //Int rslt = 1,cnt = 0
  264. //DateTime server_datetime
  265. //Long ls_newpayid
  266. //Long ref_dateint,li_native
  267. //String ls_sptname
  268. //Int li_item_dfttype,li_itemflag
  269. //Decimal ld_payamt
  270. //
  271. //uo_iteminput uo_item
  272. //uo_item = CREATE uo_iteminput
  273. //
  274. //IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  275. //IF IsNull(arg_inrep) THEN arg_inrep = ''
  276. //IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0
  277. //IF IsNull(arg_billcode) THEN arg_billcode = ''
  278. //IF IsNull(arg_opemp) THEN arg_opemp = ''
  279. //IF IsNull(arg_scid) THEN arg_scid = 0
  280. //IF IsNull(arg_accountsid) THEN arg_accountsid = 0
  281. //IF IsNull(arg_itemid) THEN arg_itemid = 0
  282. //IF IsNull(arg_moneyid) THEN arg_moneyid = 0
  283. //IF IsNull(arg_relcode) THEN arg_relcode = ''
  284. //
  285. ////未注册限制
  286. //IF sys_if_register = 0 THEN
  287. // Long ll_bill_count
  288. // SELECT count(*)
  289. // INTO :ll_bill_count
  290. // FROM U_Bmstpay;
  291. // IF sqlca.SQLCode <> 0 THEN
  292. // rslt = 0
  293. // arg_msg = "查询操作失败,应付帐数量 "
  294. // GOTO ext
  295. // END IF
  296. //
  297. // IF ll_bill_count > 80 THEN
  298. // rslt = 0
  299. // arg_msg = "未注册版本,应付帐只能保存30条记录!"
  300. // GOTO ext
  301. // END IF
  302. //END IF
  303. //
  304. //IF arg_moneyid <= 0 THEN
  305. // rslt = 0
  306. // arg_msg = '请选择币种.'
  307. // GOTO ext
  308. //END IF
  309. //
  310. //IF arg_itemid <= 0 THEN
  311. // rslt = 0
  312. // arg_msg = '请选择收支项目.'
  313. // GOTO ext
  314. //END IF
  315. ////1 判断新内容的合法性
  316. //IF Not (arg_buildtype = 0 OR arg_buildtype = 1 OR arg_buildtype = 4) THEN
  317. // arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-付款单记账'
  318. // rslt = 0
  319. // GOTO ext
  320. //END IF
  321. //
  322. //IF arg_billcode = '' THEN
  323. // arg_msg = '请输入凭证号码'
  324. // rslt = 0
  325. // GOTO ext
  326. //END IF
  327. //
  328. //IF Date(arg_paydate) <= 1990-01-01 THEN
  329. // arg_msg = '错误发生日期'
  330. // rslt = 0
  331. // GOTO ext
  332. //END IF
  333. //
  334. //IF Trim(arg_inrep) = '' THEN
  335. // arg_msg = '请输入经手人'
  336. // rslt = 0
  337. // GOTO ext
  338. //END IF
  339. //
  340. //cnt = 0
  341. //SELECT count(*) INTO :cnt
  342. // FROM cw_banktype
  343. // Where banktypeid = :arg_banktypeid;
  344. //IF sqlca.SQLCode <> 0 THEN
  345. // rslt = 0
  346. // arg_msg = "查询操作失败,结算方式!"
  347. // GOTO ext
  348. //END IF
  349. //IF cnt = 0 THEN
  350. // rslt = 0
  351. // arg_msg = "结算方式未登记或已取消!"
  352. // GOTO ext
  353. //END IF
  354. //
  355. ////IF arg_moneyid = 0 THEN
  356. //// arg_msg = '没有币种'
  357. //// rslt = 0
  358. //// GOTO ext
  359. ////END IF
  360. //
  361. //////币种
  362. ////cnt = 0
  363. ////SELECT count(*) INTO :cnt FROM cw_currency Where moneyid = :arg_moneyid;
  364. ////IF sqlca.SQLCode <> 0 THEN
  365. //// rslt = 0
  366. //// arg_msg = '查询币种失败!'
  367. //// GOTO ext
  368. ////END IF
  369. ////
  370. ////IF cnt = 0 THEN
  371. //// rslt = 0
  372. //// arg_msg = '无效的币种,不存在该币种!'
  373. //// GOTO ext
  374. ////END IF
  375. //
  376. //SELECT native INTO :li_native FROM cw_currency Where moneyid = :arg_moneyid;
  377. //IF sqlca.SQLCode <> 0 THEN
  378. // rslt = 0
  379. // arg_msg = '查询币种失败!'
  380. // GOTO ext
  381. //END IF
  382. //
  383. //////////
  384. //
  385. //
  386. //cnt = 0
  387. //SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid;
  388. //IF sqlca.SQLCode <> 0 THEN
  389. // rslt = 0
  390. // arg_msg = '查询分部资料失败!'
  391. // GOTO ext
  392. //END IF
  393. //IF cnt = 0 THEN
  394. // rslt = 0
  395. // arg_msg = '无效的分部,不存在该分部!'
  396. // GOTO ext
  397. //END IF
  398. //
  399. //SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  400. ////取得系统时间,借用操作员表
  401. //IF sqlca.SQLCode <> 0 THEN
  402. // rslt = 0
  403. // arg_msg = "查询操作失败,系统时间"
  404. // GOTO ext
  405. //END IF
  406. //
  407. //
  408. //
  409. //
  410. //IF arg_oriamt = 0 THEN
  411. // arg_msg = '请输入单据金额'
  412. // rslt = 0
  413. // GOTO ext
  414. //END IF
  415. //
  416. //
  417. //IF arg_mstpayamt = 0 AND arg_payamt = 0 THEN
  418. // arg_msg = "应付金额与已付金额不能同时为0!"
  419. // rslt = 0
  420. // GOTO ext
  421. //END IF
  422. //
  423. //IF arg_oriamt <> arg_mstpayamt - arg_payamt THEN
  424. // arg_oriamt = arg_mstpayamt - arg_payamt
  425. //END IF
  426. //
  427. ////2 判断是否已经选择当前客户和操作员
  428. //SELECT name
  429. // INTO :ls_sptname
  430. // FROM u_spt
  431. // Where u_spt.sptid = :arg_sptid ;
  432. //IF sqlca.SQLCode <> 0 THEN
  433. // arg_msg = '查询操作失败,供应商唯一码'
  434. // rslt = 0
  435. // GOTO ext
  436. //END IF
  437. //
  438. //cnt = 0
  439. //SELECT count(*) INTO :cnt
  440. // FROM u_user
  441. // Where username = :arg_opemp ;
  442. //IF sqlca.SQLCode <> 0 THEN
  443. // rslt = 0
  444. // arg_msg = "查询操作失败,操作员!"
  445. // GOTO ext
  446. //END IF
  447. //IF cnt = 0 THEN
  448. // rslt = 0
  449. // arg_msg = "操作员姓名未登记或已取消!"
  450. // GOTO ext
  451. //END IF
  452. //
  453. //Long ll_moneyid
  454. //
  455. ////****************加出纳帐
  456. //IF arg_payamt <> 0 THEN
  457. //
  458. // SELECT dfttype,itemflag
  459. // INTO :li_item_dfttype,:li_itemflag
  460. // FROM u_itemdef
  461. // Where u_itemdef.itemid = :arg_itemid;
  462. // IF sqlca.SQLCode <> 0 THEN
  463. // arg_msg = '查询当前付支项目核算类型和核算方向失败!'
  464. // rslt = 0
  465. // GOTO ext
  466. // END IF
  467. //
  468. // CHOOSE CASE li_item_dfttype
  469. // CASE 2,5
  470. // ld_payamt = -1 * arg_payamt * li_itemflag
  471. // CASE ELSE
  472. // ld_payamt = arg_payamt
  473. // END CHOOSE
  474. //
  475. // IF uo_item.add_iteminput(arg_scid,arg_itemid,0,arg_paydate,ls_sptname +' '+arg_dscrp,ld_payamt,arg_accountsid,&
  476. // arg_msg,FALSE,arg_banktypeid,1,arg_billcode,arg_moneyid,arg_relcode) = 0 THEN
  477. // arg_msg = '增加付支明细帐失败!~n' + arg_msg
  478. // rslt = 0
  479. // GOTO ext
  480. // END IF
  481. //
  482. // ref_dateint = uo_item.ref_dateint
  483. //
  484. // IF ref_dateint = 0 THEN
  485. // arg_msg = '增加付支出纳明细帐失败!'
  486. // rslt = 0
  487. // GOTO ext
  488. // END IF
  489. //ELSE
  490. // arg_accountsid = 0
  491. //END IF
  492. ////3 向应付帐表插入新记录,失败则回滚
  493. //ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,FALSE,sqlca)
  494. //IF ls_newpayid <= 0 THEN
  495. // rslt = 0
  496. // GOTO ext
  497. //END IF
  498. //
  499. //INSERT INTO U_Bmstpay
  500. // ( scid,
  501. // payid,
  502. // sptid,
  503. // paydate,
  504. // inrep,
  505. // oriamt,
  506. // mstpayamt,
  507. // payamt,
  508. // Dscrp,
  509. // billcode,
  510. // banktypeid,
  511. // buildtype,
  512. // opdate,
  513. // opemp,
  514. // inwareid,
  515. // viewdate,
  516. // rapmoneyid,
  517. // accountsid,
  518. // itemid,
  519. // buybillid,
  520. // moneyid,
  521. // relcode)
  522. // VALUES ( :arg_scid,
  523. // :ls_newpayid,
  524. // :arg_sptid,
  525. // :arg_paydate,
  526. // :arg_inrep,
  527. // :arg_oriamt,
  528. // :arg_mstpayamt,
  529. // :arg_payamt,
  530. // :arg_dscrp,
  531. // :arg_billcode,
  532. // :arg_banktypeid,
  533. // :arg_buildtype,
  534. // :server_datetime,
  535. // :arg_opemp,
  536. // :arg_inwareid,
  537. // :arg_viewdate,
  538. // :ref_dateint,
  539. // :arg_accountsid,
  540. // :arg_itemid,
  541. // :arg_buybillid,
  542. // :arg_moneyid,
  543. // :arg_relcode) ;
  544. //IF sqlca.SQLCode <> 0 THEN
  545. //
  546. // IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmstpay') > 0 THEN
  547. // arg_msg = '插入应付帐表操作失败,关键字单据ID重复'
  548. // ELSE
  549. // arg_msg = "插入应付帐表操作失败"+"~n"+sqlca.SQLErrText
  550. // END IF
  551. // rslt = 0
  552. // GOTO ext
  553. //END IF
  554. //
  555. ////4 向应付帐明细表插入新记录,失败则回滚
  556. //IF add_payrecmx(arg_scid,ls_newpayid,arg_billcode,arg_paydate,arg_banktypeid,arg_mstpayamt,&
  557. // arg_payamt,arg_opemp,arg_dscrp,arg_inrep,1,0,arg_itemid,arg_sptid,arg_msg,FALSE,arg_moneyid,arg_relcode) = 0 THEN
  558. // rslt = 0
  559. // GOTO ext
  560. //END IF
  561. //
  562. //ref_payid = ls_newpayid
  563. //
  564. //ext:
  565. //IF rslt = 0 THEN
  566. // ROLLBACK;
  567. //ELSEIF rslt = 1 AND arg_ifcommit THEN
  568. // COMMIT;
  569. //END IF
  570. //RETURN rslt
  571. end function
  572. public function integer add_payrecmx (long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybillid, long arg_itemid, long arg_sptid, ref string arg_msg, boolean arg_ifcommit, long arg_moneyid, string arg_relcode);//====================================================================
  573. // 事件: uo_mustpay.Script - add_payrecmx ( long arg_scid, long arg_payid, string arg_billcode, datetime arg_paydate, long arg_banktypeid, decimal arg_mstpayamt, decimal arg_payamt, string arg_opemp, string arg_dscrp, string arg_inrep, integer arg_buildtype, long arg_buybill()
  574. //--------------------------------------------------------------------
  575. // 描述:
  576. //--------------------------------------------------------------------
  577. // 参数:
  578. // value long arg_scid
  579. // value long arg_payid
  580. // value string arg_billcode
  581. // value datetime arg_paydate
  582. // value long arg_banktypeid
  583. // value decimal arg_mstpayamt
  584. // value decimal arg_payamt
  585. // value string arg_opemp
  586. // value string arg_dscrp
  587. // value string arg_inrep
  588. // value integer arg_buildtype
  589. // value long arg_buybillid
  590. // value long arg_itemid
  591. // value long arg_sptid
  592. // reference string arg_msg
  593. // value boolean arg_ifcommit
  594. // value long arg_moneyid
  595. // value string arg_relcode
  596. //--------------------------------------------------------------------
  597. // 返回: (none)
  598. //--------------------------------------------------------------------
  599. // 作者: LHD 日期: 2013年06月27日
  600. //--------------------------------------------------------------------
  601. // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved.
  602. //--------------------------------------------------------------------
  603. // 修改历史:
  604. //
  605. //====================================================================
  606. s_bmstpay s_pay
  607. s_pay.scid = arg_scid
  608. s_pay.payid = arg_payid
  609. s_pay.billcode = arg_billcode
  610. s_pay.paydate = arg_paydate
  611. s_pay.banktypeid = arg_banktypeid
  612. s_pay.mstpayamt = arg_mstpayamt
  613. s_pay.payamt = arg_payamt
  614. s_pay.opemp = arg_opemp
  615. s_pay.dscrp = arg_dscrp
  616. s_pay.inrep = arg_inrep
  617. s_pay.buildtype = arg_buildtype
  618. s_pay.buybillid = arg_buybillid
  619. s_pay.itemid = arg_itemid
  620. s_pay.sptid = arg_sptid
  621. s_pay.moneyid = arg_moneyid
  622. s_pay.relcode = arg_relcode
  623. return add_payrecmx(s_pay,arg_msg,arg_ifcommit)
  624. /*
  625. Int rslt = 1
  626. Long cnt = 0,list_no
  627. DateTime server_datetime,null_datetime
  628. Decimal balcamt
  629. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  630. IF IsNull(arg_inrep) THEN arg_inrep = ''
  631. IF IsNull(arg_banktypeid) THEN arg_banktypeid = 0
  632. IF IsNull(arg_billcode) THEN arg_billcode = ''
  633. IF IsNull(arg_opemp) THEN arg_opemp = ''
  634. IF IsNull(arg_scid) THEN arg_scid = 0
  635. IF IsNull(arg_itemid) THEN arg_itemid = 0
  636. IF IsNull(arg_sptid) THEN arg_sptid = 0
  637. IF IsNull(arg_moneyid) THEN arg_moneyid = 0
  638. IF IsNull(arg_relcode) THEN arg_relcode = ''
  639. //防止超长
  640. arg_billcode = lefta(arg_billcode, 30)
  641. cnt = 0
  642. SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_scid;
  643. IF sqlca.SQLCode <> 0 THEN
  644. rslt = 0
  645. arg_msg = '查询分部资料失败!'
  646. GOTO ext
  647. END IF
  648. IF cnt = 0 THEN
  649. rslt = 0
  650. arg_msg = '无效的分部,不存在该分部!'
  651. GOTO ext
  652. END IF
  653. SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  654. //取得系统时间,借用操作员表
  655. IF sqlca.SQLCode <> 0 THEN
  656. rslt = 0
  657. arg_msg = "查询操作失败,系统时间"
  658. GOTO ext
  659. END IF
  660. //1 判断新内容的合法性
  661. IF Not (arg_buildtype = 0 OR &
  662. arg_buildtype = 1 OR &
  663. arg_buildtype = 2 OR &
  664. arg_buildtype = 3 OR &
  665. arg_buildtype = 4) THEN
  666. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐'
  667. rslt = 0
  668. GOTO ext
  669. END IF
  670. IF arg_billcode = '' THEN
  671. arg_msg = '请输入凭证号码'
  672. rslt = 0
  673. GOTO ext
  674. END IF
  675. IF Date(arg_paydate) <= 1990-01-01 THEN
  676. arg_msg = '错误发生日期'
  677. rslt = 0
  678. GOTO ext
  679. END IF
  680. IF Trim(arg_inrep) = '' THEN
  681. arg_msg = '请输入经手人'
  682. rslt = 0
  683. GOTO ext
  684. END IF
  685. cnt = 0
  686. SELECT count(*) INTO :cnt
  687. FROM cw_banktype
  688. Where banktypeid = :arg_banktypeid;
  689. IF sqlca.SQLCode <> 0 THEN
  690. rslt = 0
  691. arg_msg = "查询操作失败,结算方式!"
  692. GOTO ext
  693. END IF
  694. IF cnt = 0 THEN
  695. rslt = 0
  696. arg_msg = "结算方式未登记或已取消!"
  697. GOTO ext
  698. END IF
  699. IF arg_mstpayamt = 0 AND arg_payamt = 0 THEN
  700. arg_msg = "应付金额与已付金额不能同时为0!"
  701. rslt = 0
  702. GOTO ext
  703. END IF
  704. //2 判断是否已经选择当前操作员
  705. cnt = 0
  706. SELECT count(*) INTO :cnt
  707. FROM u_user
  708. Where username = :arg_opemp ;
  709. IF sqlca.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. IF arg_buildtype = 0 OR arg_buildtype = 2 OR arg_buildtype = 3 OR arg_buildtype = 4 THEN
  720. SELECT max(listno) INTO :List_no FROM u_bmstpaymx
  721. Where payid = :arg_payid;
  722. IF sqlca.SQLCode = -1 THEN
  723. arg_msg = '查询应付明细帐最大编号失败>>'+sqlca.SQLErrText
  724. rslt = 0
  725. GOTO ext
  726. ELSEIF sqlca.SQLCode = 100 OR IsNull(list_no) THEN
  727. list_no = 0
  728. END IF
  729. list_no = list_no + 1
  730. ELSE
  731. list_no = 0
  732. END IF
  733. //3 向应付帐明细表插入新记录,失败则回滚
  734. INSERT INTO U_Bmstpaymx
  735. (scid,
  736. payid,
  737. Listno,
  738. billcode,
  739. paydate,
  740. banktypeid,
  741. mstpayamt,
  742. payamt,
  743. opdate,
  744. opemp,
  745. Dscrp,
  746. inrep,
  747. buildtype,
  748. buybillid,
  749. itemid,
  750. sptid,
  751. moneyid,
  752. relcode)
  753. VALUES (:arg_scid,
  754. :arg_payid,
  755. :list_no,
  756. :arg_billcode,
  757. :arg_paydate,
  758. :arg_banktypeid,
  759. :arg_mstpayamt,
  760. :arg_payamt,
  761. :server_datetime,
  762. :arg_opemp,
  763. :arg_dscrp,
  764. :arg_inrep,
  765. :arg_buildtype,
  766. :arg_buybillid,
  767. :arg_itemid,
  768. :arg_sptid,
  769. :arg_moneyid,
  770. :arg_relcode
  771. ) ;
  772. IF sqlca.SQLCode <> 0 THEN
  773. IF Pos(Lower(sqlca.SQLErrText),'pk_u_buyTask') > 0 THEN
  774. arg_msg = '向应付帐表插入应付明细帐记录失败,关键字ID重复'
  775. ELSE
  776. arg_msg = "向应付帐表插入应付明细帐记录失败"+"~n"+sqlca.SQLErrText
  777. END IF
  778. rslt = 0
  779. GOTO ext
  780. END IF
  781. //IF arg_buildtype <> 1 THEN
  782. SELECT mstpayamt - payamt INTO :balcamt FROM u_bmstpay Where payid = :arg_payid;
  783. IF sqlca.SQLCode <> 0 THEN
  784. arg_msg = '查询当前单据结余金额失败'
  785. rslt = 0
  786. GOTO ext
  787. END IF
  788. // if balcamt<=0 then
  789. // IF ( arg_payamt - arg_mstpayamt)>0 THEN
  790. // arG_MSG = '当前处理金额大于单据结余金额,请检查'
  791. // rslt = 0
  792. // GOTO ext
  793. // END IF
  794. // else
  795. // if ( arg_payamt - arg_mstpayamt)>balcamt then
  796. // arG_MSG = '当前处理金额大于单据结余金额,请检查'
  797. // rslt = 0
  798. // GOTO ext
  799. // END IF
  800. // end if
  801. IF arg_buildtype <> 1 THEN
  802. UPDATE u_bmstpay
  803. SET mstpayamt = mstpayamt + :arg_mstpayamt,
  804. payamt = payamt + :arg_payamt
  805. Where payid = :arg_payid;
  806. IF sqlca.SQLCode <> 0 THEN
  807. arg_msg = '更新应付帐应付已付款失败,请重试!'
  808. rslt = 0
  809. GOTO ext
  810. END IF
  811. END IF
  812. IF balcamt = arg_payamt - arg_mstpayamt THEN
  813. UPDATE u_bmstpay
  814. SET finishflag = 1,
  815. finishdate = :server_datetime
  816. Where payid = :arg_payid;
  817. IF sqlca.SQLCode <> 0 THEN
  818. arg_msg = '更新应付帐完成标记失败'
  819. rslt = 0
  820. GOTO ext
  821. END IF
  822. ELSE
  823. SetNull(null_datetime)
  824. UPDATE u_bmstpay
  825. SET finishflag = 0,
  826. finishdate = :null_datetime
  827. Where payid = :arg_payid;
  828. IF sqlca.SQLCode <> 0 THEN
  829. arg_msg = '更新应付帐完成标记失败'
  830. rslt = 0
  831. GOTO ext
  832. END IF
  833. END IF
  834. //END IF
  835. ext:
  836. IF rslt = 0 THEN
  837. ROLLBACK;
  838. ELSEIF rslt = 1 AND arg_ifcommit THEN
  839. COMMIT;
  840. END IF
  841. RETURN rslt
  842. */
  843. end function
  844. public function integer add_payrecmx (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit);
  845. Int rslt = 1
  846. Long cnt = 0,list_no
  847. DateTime server_datetime,null_datetime
  848. Decimal balcamt
  849. IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = ''
  850. IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = ''
  851. IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0
  852. IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = ''
  853. IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = ''
  854. IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0
  855. IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0
  856. IF IsNull(arg_s_mx.sptid) THEN arg_s_mx.sptid = 0
  857. IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0
  858. IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = ''
  859. //防止超长
  860. arg_s_mx.billcode = lefta(arg_s_mx.billcode, 30)
  861. cnt = 0
  862. SELECT count(*) INTO :cnt FROM u_scdef Where scid = :arg_s_mx.scid;
  863. IF sqlca.SQLCode <> 0 THEN
  864. rslt = 0
  865. arg_msg = '查询分部资料失败!'
  866. GOTO ext
  867. END IF
  868. IF cnt = 0 THEN
  869. rslt = 0
  870. arg_msg = '无效的分部,不存在该分部!'
  871. GOTO ext
  872. END IF
  873. SELECT Top 1 getdate() INTO :server_datetime FROM u_user ;
  874. IF sqlca.SQLCode <> 0 THEN
  875. rslt = 0
  876. arg_msg = "查询操作失败,系统时间"
  877. GOTO ext
  878. END IF
  879. //1 判断新内容的合法性
  880. IF Not (arg_s_mx.buildtype = 0 OR &
  881. arg_s_mx.buildtype = 1 OR &
  882. arg_s_mx.buildtype = 2 OR &
  883. arg_s_mx.buildtype = 3 OR &
  884. arg_s_mx.buildtype = 4) THEN
  885. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-付款单记帐'
  886. rslt = 0
  887. GOTO ext
  888. END IF
  889. IF arg_s_mx.billcode = '' THEN
  890. arg_msg = '请输入凭证号码'
  891. rslt = 0
  892. GOTO ext
  893. END IF
  894. IF Date(arg_s_mx.paydate) <= 1990-01-01 THEN
  895. arg_msg = '错误发生日期'
  896. rslt = 0
  897. GOTO ext
  898. END IF
  899. IF Trim(arg_s_mx.inrep) = '' THEN
  900. arg_msg = '请输入经手人'
  901. rslt = 0
  902. GOTO ext
  903. END IF
  904. cnt = 0
  905. SELECT count(*) INTO :cnt
  906. FROM cw_banktype
  907. Where banktypeid = :arg_s_mx.banktypeid;
  908. IF sqlca.SQLCode <> 0 THEN
  909. rslt = 0
  910. arg_msg = "查询操作失败,结算方式!"
  911. GOTO ext
  912. END IF
  913. IF cnt = 0 THEN
  914. rslt = 0
  915. arg_msg = "不存在结算方式!"
  916. GOTO ext
  917. END IF
  918. //IF arg_s_mx.mstpayamt = 0 AND arg_s_mx.payamt = 0 THEN
  919. // arg_msg = "应付金额与已付金额不能同时为0!"
  920. // rslt = 0
  921. // GOTO ext
  922. //END IF
  923. //2 判断是否已经选择当前操作员
  924. cnt = 0
  925. SELECT count(*) INTO :cnt
  926. FROM u_user
  927. Where username = :arg_s_mx.opemp ;
  928. IF sqlca.SQLCode <> 0 THEN
  929. rslt = 0
  930. arg_msg = "查询操作失败,操作员!"
  931. GOTO ext
  932. END IF
  933. IF cnt = 0 THEN
  934. rslt = 0
  935. arg_msg = "操作员姓名未登记或已取消!"
  936. GOTO ext
  937. END IF
  938. IF arg_s_mx.mstpayamt<>0 or arg_s_mx.payamt<>0 then
  939. IF arg_s_mx.buildtype = 0 OR arg_s_mx.buildtype = 2 OR arg_s_mx.buildtype = 3 OR arg_s_mx.buildtype = 4 THEN
  940. SELECT max(listno) + 1 INTO :List_no FROM u_bmstpaymx
  941. Where payid = :arg_s_mx.payid;
  942. IF sqlca.SQLCode = -1 THEN
  943. arg_msg = '查询应付明细帐最大编号失败>>'+sqlca.SQLErrText
  944. rslt = 0
  945. GOTO ext
  946. ELSEIF sqlca.SQLCode = 100 OR IsNull(list_no) THEN
  947. list_no = 0
  948. END IF
  949. ELSE
  950. list_no = 0
  951. END IF
  952. //3 向应付帐明细表插入新记录,失败则回滚
  953. INSERT INTO U_Bmstpaymx
  954. (scid,
  955. payid,
  956. Listno,
  957. billcode,
  958. paydate,
  959. banktypeid,
  960. mstpayamt,
  961. payamt,
  962. opdate,
  963. opemp,
  964. Dscrp,
  965. inrep,
  966. buildtype,
  967. buybillid,
  968. itemid,
  969. sptid,
  970. moneyid,
  971. relcode)
  972. VALUES (:arg_s_mx.scid,
  973. :arg_s_mx.payid,
  974. :list_no,
  975. :arg_s_mx.billcode,
  976. :arg_s_mx.paydate,
  977. :arg_s_mx.banktypeid,
  978. :arg_s_mx.mstpayamt,
  979. :arg_s_mx.payamt,
  980. :server_datetime,
  981. :arg_s_mx.opemp,
  982. :arg_s_mx.dscrp,
  983. :arg_s_mx.inrep,
  984. :arg_s_mx.buildtype,
  985. :arg_s_mx.buybillid,
  986. :arg_s_mx.itemid,
  987. :arg_s_mx.sptid,
  988. :arg_s_mx.moneyid,
  989. :arg_s_mx.relcode
  990. ) ;
  991. IF sqlca.SQLCode <> 0 THEN
  992. IF Pos(Lower(sqlca.SQLErrText),'pk_u_buyTask') > 0 THEN
  993. arg_msg = '向应付帐表插入应付明细帐记录失败,关键字ID重复'
  994. ELSE
  995. arg_msg = "向应付帐表插入应付明细帐记录失败"+"~n"+sqlca.SQLErrText
  996. END IF
  997. rslt = 0
  998. GOTO ext
  999. END IF
  1000. end if
  1001. SELECT mstpayamt - payamt INTO :balcamt FROM u_bmstpay Where payid = :arg_s_mx.payid;
  1002. IF sqlca.SQLCode <> 0 THEN
  1003. arg_msg = '查询当前单据结余金额失败'
  1004. rslt = 0
  1005. GOTO ext
  1006. END IF
  1007. IF arg_s_mx.buildtype = 3 THEN //采购单据, 增加税率应用
  1008. IF arg_s_mx.dscrp = arg_s_mx.billcode + '税金' THEN
  1009. UPDATE u_bmstpay
  1010. SET oriamt = oriamt + :arg_s_mx.mstpayamt
  1011. Where payid = :arg_s_mx.payid;
  1012. IF sqlca.SQLCode <> 0 THEN
  1013. arg_msg = '更新应付帐单据金额失败,请重试!'
  1014. rslt = 0
  1015. GOTO ext
  1016. END IF
  1017. END IF
  1018. END IF
  1019. IF list_no <> 0 and (arg_s_mx.mstpayamt<>0 or arg_s_mx.payamt<>0)THEN
  1020. UPDATE u_bmstpay
  1021. SET mstpayamt = mstpayamt + :arg_s_mx.mstpayamt,
  1022. payamt = payamt + :arg_s_mx.payamt
  1023. Where payid = :arg_s_mx.payid;
  1024. IF sqlca.SQLCode <> 0 THEN
  1025. arg_msg = '更新应付帐应付已付款失败,请重试!'
  1026. rslt = 0
  1027. GOTO ext
  1028. END IF
  1029. END IF
  1030. IF balcamt = arg_s_mx.payamt - arg_s_mx.mstpayamt THEN
  1031. UPDATE u_bmstpay
  1032. SET finishflag = 1,
  1033. finishdate = :arg_s_mx.paydate
  1034. Where payid = :arg_s_mx.payid;
  1035. IF sqlca.SQLCode <> 0 THEN
  1036. arg_msg = '更新应付帐完成标记失败'
  1037. rslt = 0
  1038. GOTO ext
  1039. END IF
  1040. ELSE
  1041. SetNull(null_datetime)
  1042. UPDATE u_bmstpay
  1043. SET finishflag = 0,
  1044. finishdate = :null_datetime
  1045. Where payid = :arg_s_mx.payid;
  1046. IF sqlca.SQLCode <> 0 THEN
  1047. arg_msg = '更新应付帐完成标记失败'
  1048. rslt = 0
  1049. GOTO ext
  1050. END IF
  1051. END IF
  1052. ext:
  1053. IF rslt = 0 THEN
  1054. ROLLBACK;
  1055. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1056. COMMIT;
  1057. END IF
  1058. RETURN rslt
  1059. end function
  1060. public function integer add_payrec (ref s_bmstpay arg_s_mx, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  1061. // 事件: uo_mustpay.add_payrec()
  1062. //--------------------------------------------------------------------
  1063. // 描述:
  1064. //--------------------------------------------------------------------
  1065. // 参数:
  1066. // reference s_bmstpay arg_s_mx
  1067. // reference string arg_msg
  1068. // value boolean arg_ifcommit
  1069. //--------------------------------------------------------------------
  1070. // 返回: integer
  1071. //--------------------------------------------------------------------
  1072. // 作者: LHD 日期: 2013年06月27日
  1073. //--------------------------------------------------------------------
  1074. // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved.
  1075. //--------------------------------------------------------------------
  1076. // 修改历史:
  1077. ////arg_s_mx.buildtype = 0 - 手动;1 -自动;2-对单; 3-项目;4-收付款单; (2,3只用在明细中)
  1078. //====================================================================
  1079. Int rslt = 1
  1080. long cnt = 0
  1081. DateTime server_datetime
  1082. Long ls_newpayid
  1083. Long ref_dateint
  1084. String ls_sptname, ls_dscrp,ls_sptcode
  1085. String ls_relcode
  1086. Int li_item_dfttype,li_itemflag
  1087. Decimal ld_payamt
  1088. IF IsNull(arg_s_mx.dscrp) THEN arg_s_mx.dscrp = ''
  1089. IF IsNull(arg_s_mx.inrep) THEN arg_s_mx.inrep = ''
  1090. IF IsNull(arg_s_mx.banktypeid) THEN arg_s_mx.banktypeid = 0
  1091. IF IsNull(arg_s_mx.billcode) THEN arg_s_mx.billcode = ''
  1092. IF IsNull(arg_s_mx.opemp) THEN arg_s_mx.opemp = ''
  1093. IF IsNull(arg_s_mx.scid) THEN arg_s_mx.scid = 0
  1094. IF IsNull(arg_s_mx.accountsid) THEN arg_s_mx.accountsid = 0
  1095. IF IsNull(arg_s_mx.itemid) THEN arg_s_mx.itemid = 0
  1096. IF IsNull(arg_s_mx.moneyid) THEN arg_s_mx.moneyid = 0
  1097. IF IsNull(arg_s_mx.relcode) THEN arg_s_mx.relcode = ''
  1098. uo_iteminput uo_item
  1099. uo_item = Create uo_iteminput
  1100. //未注册限制
  1101. IF sys_if_register = 0 THEN
  1102. Long ll_bill_count
  1103. SELECT count(*)
  1104. INTO :ll_bill_count
  1105. From U_Bmstpay;
  1106. IF sqlca.SQLCode <> 0 THEN
  1107. rslt = 0
  1108. arg_msg = "查询操作失败,应付帐数量 "
  1109. GOTO ext
  1110. END IF
  1111. IF ll_bill_count > 80 THEN
  1112. rslt = 0
  1113. arg_msg = "未注册版本,应付帐只能保存80条记录!"
  1114. GOTO ext
  1115. END IF
  1116. END IF
  1117. IF Not (arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 1 Or arg_s_mx.buildtype = 4) THEN
  1118. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-付款单记账'
  1119. rslt = 0
  1120. GOTO ext
  1121. END IF
  1122. IF arg_s_mx.moneyid <= 0 THEN
  1123. rslt = 0
  1124. arg_msg = '请选择币种.'
  1125. GOTO ext
  1126. END IF
  1127. IF arg_s_mx.banktypeid = 0 THEN
  1128. arg_msg = '没有结算方式'
  1129. rslt = 0
  1130. GOTO ext
  1131. END IF
  1132. IF arg_s_mx.itemid <= 0 THEN
  1133. rslt = 0
  1134. arg_msg = '请选择收支项目.'
  1135. GOTO ext
  1136. END IF
  1137. IF arg_s_mx.billcode = '' THEN
  1138. arg_msg = '请输入凭证号码'
  1139. rslt = 0
  1140. GOTO ext
  1141. END IF
  1142. IF Date(arg_s_mx.paydate) <= 1990-01-01 THEN
  1143. arg_msg = '错误发生日期'
  1144. rslt = 0
  1145. GOTO ext
  1146. END IF
  1147. IF Trim(arg_s_mx.inrep) = '' THEN
  1148. arg_msg = '请输入经手人'
  1149. rslt = 0
  1150. GOTO ext
  1151. END IF
  1152. cnt = 0
  1153. SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_mx.scid;
  1154. IF sqlca.SQLCode <> 0 THEN
  1155. rslt = 0
  1156. arg_msg = '查询分部资料失败!'
  1157. GOTO ext
  1158. END IF
  1159. IF cnt = 0 THEN
  1160. rslt = 0
  1161. arg_msg = '无效的分部,不存在该分部!'
  1162. GOTO ext
  1163. END IF
  1164. Int li_btype,li_native
  1165. SELECT btype Into :li_btype From cw_banktype Where banktypeid = :arg_s_mx.banktypeid;
  1166. IF sqlca.SQLCode <> 0 THEN
  1167. rslt = 0
  1168. arg_msg = '查询结算方式失败!'
  1169. GOTO ext
  1170. END IF
  1171. SELECT native Into :li_native From cw_currency Where moneyid = :arg_s_mx.moneyid;
  1172. IF sqlca.SQLCode <> 0 THEN
  1173. rslt = 0
  1174. arg_msg = '查询币种失败!'
  1175. GOTO ext
  1176. END IF
  1177. ////// //
  1178. IF arg_s_mx.inwareid > 0 And arg_s_mx.buildtype = 1 THEN
  1179. SELECT part Into :ls_relcode From u_inware Where inwareid = :arg_s_mx.inwareid;
  1180. IF sqlca.SQLCode <> 0 THEN
  1181. ls_relcode = ''
  1182. END IF
  1183. END IF
  1184. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  1185. IF sqlca.SQLCode <> 0 THEN
  1186. rslt = 0
  1187. arg_msg = "查询操作失败,系统时间"
  1188. GOTO ext
  1189. END IF
  1190. IF arg_s_mx.mstpayamt = 0 And arg_s_mx.payamt = 0 THEN
  1191. arg_msg = "应付金额与已付金额不能同时为0!"
  1192. rslt = 0
  1193. GOTO ext
  1194. END IF
  1195. arg_s_mx.oriamt = arg_s_mx.mstpayamt - arg_s_mx.payamt
  1196. //2 判断是否已经选择当前供应商和操作员
  1197. SELECT sptcode,name
  1198. INTO :ls_sptcode,:ls_sptname
  1199. FROM u_spt
  1200. Where u_spt.sptid = :arg_s_mx.sptid ;
  1201. IF sqlca.SQLCode <> 0 THEN
  1202. arg_msg = '查询操作失败,供应商唯一码'
  1203. rslt = 0
  1204. GOTO ext
  1205. END IF
  1206. cnt = 0
  1207. SELECT count(*) INTO :cnt
  1208. FROM u_user
  1209. Where username = :arg_s_mx.opemp ;
  1210. IF sqlca.SQLCode <> 0 THEN
  1211. rslt = 0
  1212. arg_msg = "查询操作失败,操作员!"
  1213. GOTO ext
  1214. END IF
  1215. IF cnt = 0 THEN
  1216. rslt = 0
  1217. arg_msg = "操作员姓名未登记或已取消!"
  1218. GOTO ext
  1219. END IF
  1220. //Long ll_moneyid
  1221. //****************加出纳帐
  1222. DateTime ldt_viewdate
  1223. IF arg_s_mx.payamt <> 0 THEN
  1224. IF arg_s_mx.accountsid = 0 THEN
  1225. arg_msg = '请选择账号'
  1226. rslt = 0
  1227. GOTO ext
  1228. END IF
  1229. SELECT dfttype,itemflag
  1230. INTO :li_item_dfttype,:li_itemflag
  1231. FROM u_itemdef
  1232. Where u_itemdef.itemid = :arg_s_mx.itemid;
  1233. IF sqlca.SQLCode <> 0 THEN
  1234. arg_msg = '查询当前付支项目核算类型和核算方向失败!'
  1235. rslt = 0
  1236. GOTO ext
  1237. END IF
  1238. CHOOSE CASE li_item_dfttype
  1239. CASE 2,5
  1240. ld_payamt = -1 * arg_s_mx.payamt * li_itemflag
  1241. CASE ELSE
  1242. ld_payamt = arg_s_mx.payamt
  1243. END CHOOSE
  1244. //客户收款/供应商付款单的选项, 暂时无法区别是否供应商付款单?
  1245. //不过其他单据,默认paydate = viewdate
  1246. IF sys_option_cusamt_dftdate = 0 THEN
  1247. ldt_viewdate = arg_s_mx.paydate
  1248. ELSE
  1249. ldt_viewdate = arg_s_mx.viewdate
  1250. END IF
  1251. //Int sys_option_rap_money_dscrp_mode= 0 // 281 出纳帐摘要生成模式
  1252. IF sys_option_rap_money_dscrp_mode = 0 THEN
  1253. ls_dscrp = ls_sptcode + ' ' + ls_sptname + ' ' +arg_s_mx.dscrp
  1254. ELSEIF sys_option_rap_money_dscrp_mode = 1 THEN
  1255. ls_dscrp = ls_sptname + ' ' +arg_s_mx.dscrp
  1256. ELSE
  1257. ls_dscrp = ls_sptcode + ' ' + ls_sptname + ' ' +arg_s_mx.dscrp
  1258. END IF
  1259. s_iteminput s_input
  1260. s_input.itemid = arg_s_mx.itemid
  1261. s_input.dateint = 0
  1262. s_input.outdate = ldt_viewdate
  1263. s_input.dscrp = ls_dscrp
  1264. s_input.outamt = ld_payamt
  1265. s_input.accountsid = arg_s_mx.accountsid
  1266. s_input.banktypeid = arg_s_mx.banktypeid
  1267. s_input.billcode = arg_s_mx.billcode
  1268. s_input.relcode = arg_s_mx.relcode
  1269. s_input.buildtype = 1
  1270. s_input.opemp = publ_operator
  1271. s_input.relrep = ''
  1272. s_input.scid = arg_s_mx.scid
  1273. s_input.moneyid = arg_s_mx.moneyid
  1274. IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN
  1275. arg_msg = '增加收支明细帐失败!~n' + arg_msg
  1276. rslt = 0
  1277. GOTO ext
  1278. END IF
  1279. // IF uo_item.add_iteminput(arg_s_mx.scid,arg_s_mx.itemid,0,ldt_viewdate,ls_dscrp,ld_payamt,arg_s_mx.accountsid,&
  1280. // arg_msg,False,arg_s_mx.banktypeid,1,arg_s_mx.billcode,arg_s_mx.moneyid,arg_s_mx.relcode) = 0 THEN
  1281. // arg_msg = '增加付支明细帐失败!~n' + arg_msg
  1282. // rslt = 0
  1283. // GOTO ext
  1284. // END IF
  1285. ref_dateint = uo_item.ref_dateint
  1286. IF ref_dateint = 0 THEN
  1287. arg_msg = '增加收支出纳明细帐失败!'
  1288. rslt = 0
  1289. GOTO ext
  1290. END IF
  1291. ELSE
  1292. arg_s_mx.accountsid = 0
  1293. END IF
  1294. //3 向应付帐表插入新记录,失败则回滚
  1295. ls_newpayid = f_sys_scidentity(0,"U_Bmstpay","payid",arg_msg,False,sqlca)
  1296. IF ls_newpayid <= 0 THEN
  1297. rslt = 0
  1298. GOTO ext
  1299. END IF
  1300. INSERT INTO U_Bmstpay
  1301. ( scid,
  1302. payid,
  1303. sptid,
  1304. paydate,
  1305. inrep,
  1306. oriamt,
  1307. mstpayamt,
  1308. payamt,
  1309. Dscrp,
  1310. billcode,
  1311. banktypeid,
  1312. buildtype,
  1313. opdate,
  1314. opemp,
  1315. inwareid,
  1316. viewdate,
  1317. rapmoneyid,
  1318. accountsid,
  1319. itemid,
  1320. buybillid,
  1321. moneyid,
  1322. relcode)
  1323. VALUES ( :arg_s_mx.scid,
  1324. :ls_newpayid,
  1325. :arg_s_mx.sptid,
  1326. :arg_s_mx.paydate,
  1327. :arg_s_mx.inrep,
  1328. :arg_s_mx.oriamt,
  1329. :arg_s_mx.mstpayamt,
  1330. :arg_s_mx.payamt,
  1331. :arg_s_mx.dscrp,
  1332. :arg_s_mx.billcode,
  1333. :arg_s_mx.banktypeid,
  1334. :arg_s_mx.buildtype,
  1335. :server_datetime,
  1336. :arg_s_mx.opemp,
  1337. :arg_s_mx.inwareid,
  1338. :arg_s_mx.viewdate,
  1339. :ref_dateint,
  1340. :arg_s_mx.accountsid,
  1341. :arg_s_mx.itemid,
  1342. :arg_s_mx.buybillid,
  1343. :arg_s_mx.moneyid,
  1344. :arg_s_mx.relcode) ;
  1345. IF sqlca.SQLCode <> 0 THEN
  1346. IF Pos(Lower(sqlca.SQLErrText),'pk_U_Bmstpay') > 0 THEN
  1347. arg_msg = '插入应付帐表操作失败,关键字单据ID重复'
  1348. ELSE
  1349. arg_msg = "插入应付帐表操作失败"+"~n"+sqlca.SQLErrText
  1350. END IF
  1351. rslt = 0
  1352. GOTO ext
  1353. END IF
  1354. //4 向应付帐明细表插入新记录,失败则回滚
  1355. arg_s_mx.payid = ls_newpayid
  1356. s_bmstpay s_paymx
  1357. s_paymx = arg_s_mx
  1358. IF arg_s_mx.buildtype = 0 Or arg_s_mx.buildtype = 4 THEN
  1359. s_paymx.buildtype = arg_s_mx.buildtype
  1360. ELSE
  1361. s_paymx.buildtype = 1
  1362. END IF
  1363. s_paymx.buybillid = 0
  1364. IF add_payrecmx(s_paymx,arg_msg,False) = 0 THEN
  1365. rslt = 0
  1366. GOTO ext
  1367. END IF
  1368. //IF add_payrecmx(arg_s_mx.scid,ls_newpayid,arg_s_mx.billcode,arg_s_mx.paydate,arg_s_mx.banktypeid,arg_s_mx.mstpayamt,&
  1369. // arg_s_mx.payamt,arg_s_mx.opemp,arg_s_mx.dscrp,arg_s_mx.inrep,1,0,arg_s_mx.itemid,arg_s_mx.sptid,arg_msg,False,arg_s_mx.moneyid,arg_s_mx.relcode) = 0 THEN
  1370. // rslt = 0
  1371. // GOTO ext
  1372. //END IF
  1373. ref_payid = ls_newpayid
  1374. ext:
  1375. IF rslt = 0 THEN
  1376. ROLLBACK;
  1377. ELSEIF rslt = 1 And arg_ifcommit THEN
  1378. COMMIT;
  1379. END IF
  1380. RETURN rslt
  1381. end function
  1382. on uo_mustpay.create
  1383. call super::create
  1384. TriggerEvent( this, "constructor" )
  1385. end on
  1386. on uo_mustpay.destroy
  1387. TriggerEvent( this, "destructor" )
  1388. call super::destroy
  1389. end on