uo_musttake.sru 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503
  1. $PBExportHeader$uo_musttake.sru
  2. forward
  3. global type uo_musttake from nonvisualobject
  4. end type
  5. type delmx from structure within uo_musttake
  6. end type
  7. end forward
  8. type delmx from structure
  9. long takeid
  10. long listno
  11. end type
  12. global type uo_musttake from nonvisualobject
  13. end type
  14. global uo_musttake uo_musttake
  15. type variables
  16. Long ref_takeid = 0
  17. Int uo_option_msttake_takeamt_secaudit
  18. Int uo_option_m_msttake
  19. int uo_option_msttake_balc
  20. end variables
  21. forward prototypes
  22. public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer del_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer add_takerec (s_bmsttake arg_s_take, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer add_takerecmx (s_bmsttakemx arg_s_takemx, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer uof_mod_dscrp (long arg_takeid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer uof_mod_viewdate (long arg_takeid, datetime arg_viewdate, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer add_fpamt (long arg_takeid, s_bmsttake_fpmx arg_s_mx[], ref string arg_msg, boolean arg_ifcommit)
  30. public function integer del_fpamt (long arg_takeid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  31. end prototypes
  32. public function integer del_takerecmx (integer arg_del, long arg_takeid, long arg_listno, ref string arg_msg, boolean arg_ifcommit);//删除应收帐
  33. //del_TAKErecmx(arg_del,arg_takeid,arg_listno,arg_msg,arg_ifcommit)
  34. //arg_del 0:手动删除,1:应收帐删除,2:收入单删除
  35. Int rslt = 1 ,cnt = 0
  36. Long buildtype = 0
  37. Decimal msttakeamt,takeamt,msttakeamt_rmb,takeamt_rmb
  38. DateTime null_datetime
  39. SELECT count(*)
  40. INTO :cnt
  41. FROM u_bmstTAKEmx
  42. WHERE u_bmstTAKEmx.takeid = :arg_takeid
  43. AND u_bmstTAKEmx.listno = :arg_listno;
  44. IF sqlca.SQLCode <> 0 THEN
  45. arg_msg = '查询操作失败,应收明细帐唯一码'
  46. rslt = 0
  47. GOTO ext
  48. END IF
  49. IF cnt = 0 THEN
  50. arg_msg = '错误应收明细帐唯一码'
  51. rslt = 0
  52. GOTO ext
  53. END IF
  54. SELECT buildtype,msttakeamt,takeamt,msttakeamt_rmb,takeamt_rmb
  55. INTO :buildtype,:msttakeamt,:takeamt,:msttakeamt_rmb,:takeamt_rmb
  56. FROM u_bmstTAKEmx
  57. WHERE u_bmstTAKEmx.takeid = :arg_takeid
  58. AND u_bmstTAKEmx.listno = :arg_listno;
  59. IF sqlca.SQLCode <> 0 THEN
  60. arg_msg = "查询应收明细帐失败,请重试!"+'~n'+sqlca.SQLErrText
  61. rslt = 0
  62. GOTO ext
  63. END IF
  64. IF arg_del = 0 THEN
  65. IF buildtype <> 0 THEN
  66. arg_msg = '系统自动建立的应收明细帐不可以删除'
  67. rslt = 0
  68. GOTO ext
  69. END IF
  70. END IF
  71. SetNull(null_datetime)
  72. UPDATE U_bmstTAKE
  73. SET msttakeamt = msttakeamt - :msttakeamt,
  74. takeamt = takeamt - :takeamt,
  75. msttakeamt_rmb = msttakeamt_rmb - :msttakeamt_rmb,
  76. takeamt_rmb = takeamt_rmb - :takeamt_rmb,
  77. finishflag = 0,
  78. finishdate = :null_datetime,
  79. finishflag_rmb = 0,
  80. finishdate_rmb = :null_datetime
  81. Where U_bmstTAKE.takeid = :arg_takeid;
  82. IF sqlca.SQLCode <> 0 THEN
  83. arg_msg = '更新应收帐金额失败,请重试>>'+sqlca.SQLErrText
  84. rslt = 0
  85. GOTO ext
  86. END IF
  87. DELETE U_bmstTAKEmx
  88. WHERE u_bmstTAKEmx.takeid = :arg_takeid
  89. AND u_bmstTAKEmx.listno = :arg_listno;
  90. IF sqlca.SQLCode <> 0 THEN
  91. arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  92. rslt = 0
  93. GOTO ext
  94. END IF
  95. ext:
  96. IF rslt = 0 THEN
  97. ROLLBACK;
  98. ELSEIF rslt = 1 AND arg_ifcommit THEN
  99. COMMIT;
  100. END IF
  101. RETURN rslt
  102. end function
  103. public function integer salebill_del_mx (long arg_salebillid, ref string arg_msg, boolean arg_ifcommit);//根据收入单删除应收帐明细
  104. //salebill_del_mx(arg_salebillid,arg_msg,arg_ifcommit)
  105. delmx del_mx[]
  106. long it_mxt
  107. long ls_takeid,ls_listno,i
  108. int rslt=1
  109. DECLARE listno_cur CURSOR FOR
  110. SELECT U_BmsttakeMX.Takeid,
  111. U_BmsttakeMX.listno
  112. FROM U_BmsttakeMX
  113. WHERE salebillid=:arg_salebillid;
  114. open listno_cur;
  115. fetch listno_cur into :ls_takeid,:ls_listno;
  116. do while sqlca.sqlcode=0
  117. it_mxt++
  118. del_mx[it_mxt].takeid=ls_takeid
  119. del_mx[it_mxt].listno=ls_listno
  120. fetch listno_cur into :ls_takeid,:ls_listno;
  121. loop
  122. close listno_cur;
  123. if it_mxt=0 then
  124. rslt=1
  125. goto ext
  126. else
  127. for i=1 to it_mxt
  128. if del_takerecmx (2,del_mx[i].takeid, del_mx[i].listno,arg_msg,false)=0 then
  129. rslt=0
  130. goto ext
  131. end if
  132. next
  133. end if
  134. ext:
  135. if rslt=0 then
  136. rollback;
  137. elseif rslt=1 and arg_ifcommit then
  138. commit;
  139. end if
  140. return rslt
  141. end function
  142. public function integer del_takerec (long arg_scid, integer arg_del, long arg_takeid, long arg_cusid, ref string arg_msg, boolean arg_ifcommit);//删除应收帐
  143. //del_TAKErec(arg_takeid,arg_cusid,arg_msg,arg_ifcommit)
  144. //1 判断是否有当前客户
  145. //2 判断这个ID是否当前客户的最后一个明细记录。
  146. //3 删除最后一行的记录行,失败回滚,成功提交。
  147. Int rslt = 1 ,cnt = 0,li_finishflag
  148. Long maxid = 0
  149. Long buildtype = 0
  150. Long ls_buildtype
  151. Long ll_ctmint
  152. Decimal ls_msttakeamt,ls_takeamt
  153. Long ll_itemid,ll_dateint
  154. Long ll_printid_fp[]
  155. Long ll_mxbt,ll_i
  156. Long ll_relrapid,ll_accountsid
  157. datetime ldt_lastdate
  158. ll_mxbt = 1
  159. If uo_option_msttake_takeamt_secaudit = -1000 Then
  160. rslt = 0
  161. arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!'
  162. Goto ext
  163. End If
  164. If uo_option_msttake_balc = -1000 Then
  165. rslt = 0
  166. arg_msg = '选项:[391]应收帐使用结帐功能,读取初始默认值失败,操作取消!'
  167. Goto ext
  168. End If
  169. DateTime ld_ctdatetime,ld_takedate
  170. uo_iteminput uo_item
  171. uo_item = Create uo_iteminput
  172. uo_rapmoney uo_money
  173. uo_money = Create uo_rapmoney
  174. Select count(*)
  175. Into :cnt
  176. From u_CUST
  177. Where u_CUST.CUSid = :arg_CUSid ;
  178. If sqlca.SQLCode <> 0 Then
  179. arg_msg = '查询操作失败,客户唯一码'
  180. rslt = 0
  181. Goto ext
  182. End If
  183. If cnt = 0 Then
  184. arg_msg = '错误客户唯一码'
  185. rslt = 0
  186. Goto ext
  187. End If
  188. Select buildtype,
  189. msttakeamt,
  190. takeamt,
  191. itemid,
  192. rapmoneyid,
  193. takedate,
  194. ctmint,
  195. finishflag,
  196. relrapid,
  197. accountsid
  198. Into :ls_buildtype,
  199. :ls_msttakeamt,
  200. :ls_takeamt,
  201. :ll_itemid,
  202. :ll_dateint,
  203. :ld_takedate,
  204. :ll_ctmint,
  205. :li_finishflag,
  206. :ll_relrapid,
  207. :ll_accountsid
  208. From u_bmsttake
  209. Where u_bmsttake.takeid = :arg_takeid;
  210. If sqlca.SQLCode <> 0 Then
  211. arg_msg = "查询应收帐建立类型失败,请重试!"+'~n'+sqlca.SQLErrText
  212. rslt = 0
  213. Goto ext
  214. End If
  215. If ll_ctmint > 0 Then
  216. arg_msg = '该记录资料已被截数,不能处理'
  217. rslt = 0
  218. Goto ext
  219. End If
  220. If (ls_buildtype = 1 Or ls_buildtype = 4) And arg_del = 0 Then
  221. arg_msg = '系统自动建立的应收帐不可以删除'
  222. rslt = 0
  223. Goto ext
  224. End If
  225. //检查结帐日期
  226. If uo_option_msttake_balc = 1 Then
  227. Select top 1 balcdate
  228. Into :ldt_lastdate
  229. From u_money_balc
  230. Where billtype = 0
  231. Order By balcdate Desc;
  232. If sqlca.SQLCode = 0 Then
  233. If ld_takedate < ldt_lastdate Then
  234. rslt = 0
  235. arg_msg = '最近应收结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能删除发生日期为 '+String(ld_takedate,'yyyy-mm-dd')+' 的数据'
  236. Goto ext
  237. End If
  238. End If
  239. End If
  240. cnt = 0
  241. Select count(*) Into :cnt From u_bmsttakemx
  242. Where takeid = :arg_takeid
  243. And buildtype = 2;
  244. If sqlca.SQLCode <> 0 Then
  245. arg_msg = '查询应收帐明细帐失败'
  246. rslt = 0
  247. Goto ext
  248. End If
  249. If cnt > 0 Then
  250. arg_msg = '该应帐记录已存在明细帐记录,不能删除>>如果要删除,请先删除明细帐'
  251. rslt = 0
  252. Goto ext
  253. End If
  254. If ls_buildtype <> 5 Then
  255. //********删除收支帐
  256. If ls_takeamt <> 0 Then
  257. If uo_item.del_iteminput(ll_itemid,ll_dateint,1,arg_msg,False) = 0 Then
  258. arg_msg = '删除收支明细帐失败!~n' + arg_msg
  259. rslt = 0
  260. Goto ext
  261. End If
  262. End If
  263. //删除出纳帐
  264. If ll_relrapid > 0 And ls_buildtype <> 4 Then
  265. If uo_money.del_raprec(ll_relrapid,ll_accountsid,1,arg_msg,False) = 0 Then
  266. arg_msg = '删除出纳明细帐失败!~n' + arg_msg
  267. rslt = 0
  268. Goto ext
  269. End If
  270. End If
  271. End If
  272. If ls_buildtype = 0 Then
  273. Declare cur_fpmx Cursor For
  274. Select printid
  275. From u_bmsttake_fpmx
  276. Where takeid = :arg_takeid;
  277. Open cur_fpmx;
  278. Fetch cur_fpmx Into :ll_printid_fp[ll_mxbt];
  279. Do While sqlca.SQLCode = 0
  280. ll_mxbt++
  281. Fetch cur_fpmx Into :ll_printid_fp[ll_mxbt];
  282. Loop
  283. Close cur_fpmx;
  284. For ll_i = 1 To ll_mxbt - 1
  285. If del_fpamt(arg_takeid,ll_printid_fp[ll_i],arg_msg,False) = 0 Then
  286. rslt = 0
  287. Goto ext
  288. End If
  289. Next
  290. End If
  291. Delete U_bmstTAKEmx
  292. Where u_bmsttakemx.takeid = :arg_takeid;
  293. If sqlca.SQLCode <> 0 Then
  294. arg_msg = "删除应收明细帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  295. rslt = 0
  296. Goto ext
  297. End If
  298. Delete U_bmstTAKE
  299. Where u_bmsttake.takeid = :arg_takeid;
  300. If sqlca.SQLCode <> 0 Then
  301. arg_msg = "删除应收帐操作失败,请重试!"+'~n'+sqlca.SQLErrText
  302. rslt = 0
  303. Goto ext
  304. End If
  305. ext:
  306. If rslt = 0 Then
  307. Rollback;
  308. ElseIf rslt = 1 And arg_ifcommit Then
  309. Commit;
  310. End If
  311. Destroy uo_money
  312. Return rslt
  313. end function
  314. public function integer add_takerec (s_bmsttake arg_s_take, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  315. DateTime server_datetime
  316. Long ls_newtakeid
  317. Long ref_dateint
  318. String ls_cusname
  319. Int li_item_dfttype,li_itemflag
  320. Decimal ld_msttakeamt,ld_takeamt
  321. Long relrapid
  322. DateTime ldt_lastdate
  323. uo_rapmoney uo_money
  324. uo_money = Create uo_rapmoney
  325. IF uo_option_msttake_takeamt_secaudit = -1000 THEN
  326. rslt = 0
  327. arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!'
  328. GOTO ext
  329. END IF
  330. IF uo_option_m_msttake = -1000 THEN
  331. rslt = 0
  332. arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!'
  333. GOTO ext
  334. END IF
  335. IF uo_option_msttake_balc = -1000 THEN
  336. rslt = 0
  337. arg_msg = '选项:[391]应收帐使用结帐功能,读取初始默认值失败,操作取消!'
  338. GOTO ext
  339. END IF
  340. IF IsNull(arg_s_take.dscrp) THEN arg_s_take.dscrp = ''
  341. IF IsNull(arg_s_take.inrep) THEN arg_s_take.inrep = ''
  342. IF IsNull(arg_s_take.banktypeid) THEN arg_s_take.banktypeid = 0
  343. IF IsNull(arg_s_take.billcode) THEN arg_s_take.billcode = ''
  344. IF IsNull(arg_s_take.relcode) THEN arg_s_take.relcode = ''
  345. IF IsNull(arg_s_take.opemp) THEN arg_s_take.opemp = ''
  346. IF IsNull(arg_s_take.scid) THEN arg_s_take.scid = 0
  347. IF IsNull(arg_s_take.takeid) THEN arg_s_take.takeid = 0
  348. IF IsNull(arg_s_take.accountsid) THEN arg_s_take.accountsid = 0
  349. IF IsNull(arg_s_take.itemid) THEN arg_s_take.itemid = 0
  350. IF IsNull(arg_s_take.moneyid) THEN arg_s_take.moneyid = 0
  351. IF IsNull(arg_s_take.msttakeamt) THEN arg_s_take.msttakeamt = 0
  352. IF IsNull(arg_s_take.takeamt) THEN arg_s_take.takeamt = 0
  353. IF IsNull(arg_s_take.taskdscrp) THEN arg_s_take.taskdscrp = ''
  354. IF IsNull(arg_s_take.fpamt) THEN arg_s_take.fpamt = 0
  355. IF IsNull(arg_s_take.mrate) THEN arg_s_take.mrate = 1
  356. IF IsNull(arg_s_take.exchangeid) THEN arg_s_take.exchangeid = 0
  357. IF lena(arg_s_take.billcode) > 30 THEN arg_s_take.billcode = LeftA(arg_s_take.billcode,30)
  358. IF lena(arg_s_take.relcode) > 50 THEN arg_s_take.relcode = LeftA(arg_s_take.relcode,50)
  359. IF lena(arg_s_take.dscrp) > 255 THEN arg_s_take.dscrp = LeftA(arg_s_take.dscrp,255)
  360. uo_iteminput uo_item
  361. uo_item = Create uo_iteminput
  362. //检查结帐日期
  363. IF uo_option_msttake_balc = 1 THEN
  364. SELECT top 1 balcdate
  365. INTO :ldt_lastdate
  366. FROM u_money_balc
  367. WHERE billtype = 0
  368. Order By balcdate Desc;
  369. IF sqlca.SQLCode = 0 THEN
  370. IF arg_s_take.takedate < ldt_lastdate THEN
  371. rslt = 0
  372. arg_msg = '最近应收结帐日为:'+String(ldt_lastdate,'yyyy-mm-dd')+',不能再录入发生日期为 '+String(arg_s_take.takedate,'yyyy-mm-dd')+' 的数据'
  373. GOTO ext
  374. END IF
  375. END IF
  376. END IF
  377. cnt = 0
  378. SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_take.scid;
  379. IF sqlca.SQLCode <> 0 THEN
  380. rslt = 0
  381. arg_msg = '查询分部资料失败!'
  382. GOTO ext
  383. END IF
  384. IF cnt = 0 THEN
  385. rslt = 0
  386. arg_msg = '无效的分部,不存在该分部!'
  387. GOTO ext
  388. END IF
  389. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  390. IF sqlca.SQLCode <> 0 THEN
  391. rslt = 0
  392. arg_msg = "查询操作失败,系统时间"
  393. GOTO ext
  394. END IF
  395. IF Not (arg_s_take.buildtype = 0 Or &
  396. arg_s_take.buildtype = 1 Or &
  397. arg_s_take.buildtype = 4 Or &
  398. arg_s_take.buildtype = 5) THEN
  399. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;4-收款单记帐;5-冲帐'
  400. rslt = 0
  401. GOTO ext
  402. END IF
  403. IF arg_s_take.billcode = '' THEN
  404. arg_msg = '请输入凭证号码'
  405. rslt = 0
  406. GOTO ext
  407. END IF
  408. IF arg_s_take.takeamt <> 0 THEN
  409. IF uo_option_msttake_takeamt_secaudit = 1 And &
  410. arg_s_take.buildtype = 4 THEN
  411. ELSE
  412. IF f_check_inoutdate(-100,arg_s_take.takedate,False,arg_msg) = 0 THEN
  413. rslt = 0
  414. GOTO ext
  415. END IF
  416. END IF
  417. ELSE
  418. IF f_check_inoutdate(0,arg_s_take.takedate,False,arg_msg) = 0 THEN
  419. rslt = 0
  420. GOTO ext
  421. END IF
  422. END IF
  423. IF Trim(arg_s_take.inrep) = '' THEN
  424. arg_msg = '请输入经手人'
  425. rslt = 0
  426. GOTO ext
  427. END IF
  428. IF arg_s_take.buildtype <> 5 THEN
  429. IF arg_s_take.banktypeid = 0 THEN
  430. arg_msg = '没有结算方式'
  431. rslt = 0
  432. GOTO ext
  433. END IF
  434. END IF
  435. IF arg_s_take.moneyid = 0 THEN
  436. arg_msg = '没有币种'
  437. rslt = 0
  438. GOTO ext
  439. END IF
  440. IF uo_option_m_msttake = 0 THEN
  441. IF arg_s_take.mrate = 0 THEN
  442. arg_msg = '不合理的汇率'
  443. rslt = 0
  444. GOTO ext
  445. END IF
  446. END IF
  447. IF arg_s_take.msttakeamt = 0 And arg_s_take.takeamt = 0 THEN
  448. arg_msg = "应收金额与已收金额不能同时为0!"
  449. rslt = 0
  450. GOTO ext
  451. END IF
  452. IF arg_s_take.oriamt <> arg_s_take.msttakeamt - arg_s_take.takeamt THEN
  453. arg_s_take.oriamt = arg_s_take.msttakeamt - arg_s_take.takeamt
  454. END IF
  455. SELECT name
  456. INTO :ls_cusname
  457. FROM u_cust
  458. Where u_cust.cusid = :arg_s_take.cusid;
  459. IF sqlca.SQLCode <> 0 THEN
  460. arg_msg = '查询操作失败,客户唯一码'
  461. rslt = 0
  462. GOTO ext
  463. END IF
  464. cnt = 0
  465. SELECT count(*) INTO :cnt
  466. FROM u_user
  467. Where username = :arg_s_take.opemp ;
  468. IF sqlca.SQLCode <> 0 THEN
  469. rslt = 0
  470. arg_msg = "查询操作失败,操作员!"
  471. GOTO ext
  472. END IF
  473. IF cnt = 0 THEN
  474. rslt = 0
  475. arg_msg = "操作员姓名未登记或已取消!"
  476. GOTO ext
  477. END IF
  478. cnt = 0
  479. SELECT count(*) INTO :cnt
  480. FROM cw_currency
  481. Where moneyid = :arg_s_take.moneyid ;
  482. IF sqlca.SQLCode <> 0 THEN
  483. rslt = 0
  484. arg_msg = "查询操作失败,币种!"
  485. GOTO ext
  486. END IF
  487. IF cnt = 0 THEN
  488. rslt = 0
  489. arg_msg = "币种资料未登记或已取消!"
  490. GOTO ext
  491. END IF
  492. IF arg_s_take.buildtype <> 5 THEN
  493. IF arg_s_take.accountsid > 0 THEN
  494. Long ll_moneyid
  495. SELECT moneyid INTO :ll_moneyid
  496. FROM u_accounts
  497. Where accountsid = :arg_s_take.accountsid;
  498. IF sqlca.SQLCode <> 0 THEN
  499. arg_msg = '查询出纳帐号对应币种资料失败'
  500. rslt = 0
  501. GOTO ext
  502. END IF
  503. IF ll_moneyid = 0 THEN
  504. arg_msg = '出纳帐号对应币种资料未设定'
  505. rslt = 0
  506. GOTO ext
  507. END IF
  508. IF ll_moneyid <> arg_s_take.moneyid_cn THEN
  509. arg_msg = '币种资料与出纳帐号币种资料不相符,不能保存'
  510. rslt = 0
  511. GOTO ext
  512. END IF
  513. END IF
  514. SELECT dfttype,itemflag
  515. INTO :li_item_dfttype,:li_itemflag
  516. FROM u_itemdef
  517. Where u_itemdef.itemid = :arg_s_take.itemid;
  518. IF sqlca.SQLCode <> 0 THEN
  519. arg_msg = '查询当前收支项目核算类型和核算方向失败!'
  520. rslt = 0
  521. GOTO ext
  522. END IF
  523. //加收支帐****************
  524. IF arg_s_take.takeamt_cn <> 0 THEN
  525. s_iteminput s_input
  526. s_input.itemid = arg_s_take.itemid
  527. s_input.dateint = 0
  528. s_input.outdate = arg_s_take.takedate
  529. s_input.dscrp = ls_cusname + ','+arg_s_take.dscrp
  530. //yyx20120427原
  531. // CHOOSE CASE li_item_dfttype
  532. // CASE 1,3,4
  533. // s_input.outamt = arg_s_take.takeamt_cn * li_itemflag
  534. // CASE ELSE
  535. // s_input.outamt = arg_s_take.takeamt_cn
  536. // END CHOOSE
  537. // If li_itemflag = 1 Then
  538. // s_input.outamt = arg_s_take.takeamt_cn
  539. // Else
  540. // s_input.outamt = arg_s_take.takeamt_cn * li_itemflag
  541. // End If
  542. // //
  543. s_input.inamt = arg_s_take.takeamt_cn
  544. s_input.outamt = 0
  545. s_input.accountsid = arg_s_take.accountsid
  546. s_input.banktypeid = arg_s_take.banktypeid
  547. s_input.billcode = arg_s_take.billcode
  548. s_input.relcode = arg_s_take.relcode
  549. s_input.opemp = arg_s_take.opemp
  550. s_input.relrep = arg_s_take.inrep
  551. s_input.scid = arg_s_take.scid
  552. s_input.buildtype = 1
  553. IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN
  554. arg_msg = '增加收支明细帐失败!~n' + arg_msg
  555. rslt = 0
  556. GOTO ext
  557. END IF
  558. ref_dateint = uo_item.ref_dateint
  559. IF ref_dateint = 0 THEN
  560. arg_msg = '增加收支出纳明细帐失败!'
  561. rslt = 0
  562. GOTO ext
  563. END IF
  564. ELSE
  565. IF uo_option_msttake_takeamt_secaudit = 0 THEN
  566. arg_s_take.accountsid = 0
  567. END IF
  568. END IF
  569. //-----------------------------------------------------------------------
  570. //加出纳帐-------------------------- //
  571. IF arg_s_take.takeamt_cn <> 0 And arg_s_take.buildtype <> 4 THEN
  572. // If li_itemflag = 1 Then
  573. // ld_msttakeamt = arg_s_take.takeamt_cn
  574. // ld_takeamt = 0
  575. // Else
  576. // ld_msttakeamt = 0
  577. // //yyx20120427原ld_takeamt = arg_s_take.takeamt_cn
  578. // ld_takeamt = arg_s_take.takeamt_cn * li_itemflag
  579. // End If
  580. ld_msttakeamt = arg_s_take.takeamt_cn
  581. ld_takeamt = 0
  582. s_rap_money s_rap
  583. s_rap.accountsid = arg_s_take.accountsid
  584. s_rap.takedate = arg_s_take.takedate
  585. s_rap.inrep = arg_s_take.inrep
  586. s_rap.dscrp = ls_cusname + ','+arg_s_take.dscrp
  587. s_rap.msttakeamt = ld_msttakeamt
  588. s_rap.takeamt = ld_takeamt
  589. s_rap.billcode = arg_s_take.billcode
  590. s_rap.relcode = arg_s_take.relcode
  591. s_rap.buildtype = 1
  592. s_rap.dcflag = 0
  593. s_rap.relid = 0
  594. s_rap.opemp = arg_s_take.opemp
  595. s_rap.banktypeid = arg_s_take.banktypeid
  596. s_rap.scid = arg_s_take.scid
  597. IF uo_money.add_raprec(s_rap,arg_msg,False) = 0 THEN
  598. arg_msg = '增加出纳明细帐失败!~n' + arg_msg
  599. rslt = 0
  600. GOTO ext
  601. END IF
  602. relrapid = uo_money.ref_rapid
  603. IF relrapid = 0 THEN
  604. arg_msg = '增加出纳明细帐失败!'
  605. rslt = 0
  606. GOTO ext
  607. END IF
  608. END IF
  609. END IF
  610. ls_newtakeid = f_sys_scidentity(0,"u_bmsttake","takeid",arg_msg,True,id_sqlca)
  611. IF ls_newtakeid <= 0 THEN
  612. rslt = 0
  613. GOTO ext
  614. END IF
  615. INSERT INTO u_bmsttake
  616. ( scid,
  617. takeid,
  618. cusid,
  619. takedate,
  620. inrep,
  621. oriamt,
  622. msttakeamt,
  623. takeamt,
  624. oriamt_rmb,
  625. msttakeamt_rmb,
  626. takeamt_rmb,
  627. dscrp,
  628. billcode,
  629. relcode,
  630. banktypeid,
  631. buildtype,
  632. opdate,
  633. opemp,
  634. outwareid,
  635. viewdate,
  636. accountsid,
  637. rapmoneyid,
  638. itemid,
  639. moneyid,
  640. taskdscrp,
  641. fpamt,
  642. relrapid,
  643. mrate,
  644. exchangeid)
  645. VALUES (
  646. :arg_s_take.scid,
  647. :ls_newtakeid,
  648. :arg_s_take.cusid,
  649. :arg_s_take.takedate,
  650. :arg_s_take.inrep,
  651. :arg_s_take.oriamt,
  652. :arg_s_take.msttakeamt,
  653. :arg_s_take.takeamt,
  654. round(:arg_s_take.oriamt * :arg_s_take.mrate,2),
  655. round(:arg_s_take.msttakeamt * :arg_s_take.mrate,2),
  656. round(:arg_s_take.takeamt * :arg_s_take.mrate,2),
  657. :arg_s_take.dscrp,
  658. :arg_s_take.billcode,
  659. :arg_s_take.relcode,
  660. :arg_s_take.banktypeid,
  661. :arg_s_take.buildtype,
  662. :server_datetime,
  663. :arg_s_take.opemp,
  664. :arg_s_take.outwareid,
  665. :arg_s_take.viewdate,
  666. :arg_s_take.accountsid,
  667. :ref_dateint,
  668. :arg_s_take.itemid,
  669. :arg_s_take.moneyid,
  670. :arg_s_take.taskdscrp,
  671. :arg_s_take.fpamt,
  672. :relrapid,
  673. :arg_s_take.mrate,
  674. :arg_s_take.exchangeid) ;
  675. IF sqlca.SQLCode <> 0 THEN
  676. arg_msg = "向应收帐表插入应收记录失败,请重试!"+'~n'+sqlca.SQLErrText
  677. rslt = 0
  678. GOTO ext
  679. END IF
  680. s_bmsttakemx s_takemx
  681. s_takemx.scid = arg_s_take.scid
  682. s_takemx.takeid = ls_newtakeid
  683. s_takemx.billcode = arg_s_take.billcode
  684. s_takemx.relcode = arg_s_take.relcode
  685. s_takemx.takedate = arg_s_take.takedate
  686. s_takemx.banktypeid = arg_s_take.banktypeid
  687. s_takemx.msttakeamt = arg_s_take.msttakeamt
  688. s_takemx.takeamt = arg_s_take.takeamt
  689. s_takemx.opemp = arg_s_take.opemp
  690. s_takemx.dscrp = arg_s_take.dscrp
  691. s_takemx.inrep = arg_s_take.inrep
  692. s_takemx.buildtype = 1
  693. s_takemx.salebillid = 0
  694. s_takemx.itemid = arg_s_take.itemid
  695. s_takemx.cusid = arg_s_take.cusid
  696. s_takemx.moneyid = arg_s_take.moneyid
  697. s_takemx.mrate = arg_s_take.mrate
  698. s_takemx.exchangeid = arg_s_take.exchangeid
  699. IF add_takerecmx(s_takemx,arg_msg,False) = 0 THEN
  700. rslt = 0
  701. GOTO ext
  702. END IF
  703. ref_takeid = ls_newtakeid
  704. ext:
  705. IF rslt = 0 THEN
  706. ROLLBACK;
  707. ELSEIF rslt = 1 And arg_ifcommit THEN
  708. COMMIT;
  709. END IF
  710. Destroy uo_money
  711. RETURN rslt
  712. end function
  713. public function integer add_takerecmx (s_bmsttakemx arg_s_takemx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  714. Long cnt = 0,list_no
  715. DateTime server_datetime,null_datetime
  716. Decimal balcamt,balcamt_rmb
  717. IF IsNull(arg_s_takemx.dscrp) THEN arg_s_takemx.dscrp = ''
  718. IF IsNull(arg_s_takemx.inrep) THEN arg_s_takemx.inrep = ''
  719. IF IsNull(arg_s_takemx.banktypeid) THEN arg_s_takemx.banktypeid = 0
  720. IF IsNull(arg_s_takemx.billcode) THEN arg_s_takemx.billcode = ''
  721. IF IsNull(arg_s_takemx.relcode) THEN arg_s_takemx.relcode = ''
  722. IF IsNull(arg_s_takemx.opemp) THEN arg_s_takemx.opemp = ''
  723. IF IsNull(arg_s_takemx.scid) THEN arg_s_takemx.scid = 0
  724. IF IsNull(arg_s_takemx.itemid) THEN arg_s_takemx.itemid = 0
  725. IF IsNull(arg_s_takemx.cusid) THEN arg_s_takemx.cusid = 0
  726. IF IsNull(arg_s_takemx.msttakeamt) THEN arg_s_takemx.msttakeamt = 0
  727. IF IsNull(arg_s_takemx.takeamt) THEN arg_s_takemx.takeamt = 0
  728. IF IsNull(arg_s_takemx.moneyid) THEN arg_s_takemx.moneyid = 0
  729. IF IsNull(arg_s_takemx.mrate) THEN arg_s_takemx.mrate = 1
  730. IF IsNull(arg_s_takemx.exchangeid) THEN arg_s_takemx.exchangeid = 0
  731. arg_s_takemx.msttakeamt_rmb = round(arg_s_takemx.msttakeamt * arg_s_takemx.mrate,2)
  732. arg_s_takemx.takeamt_rmb = round(arg_s_takemx.takeamt * arg_s_takemx.mrate,2)
  733. cnt = 0
  734. SELECT count(*) Into :cnt From u_scdef Where scid = :arg_s_takemx.scid;
  735. IF sqlca.SQLCode <> 0 THEN
  736. rslt = 0
  737. arg_msg = '查询分部资料失败!'
  738. GOTO ext
  739. END IF
  740. IF cnt = 0 THEN
  741. rslt = 0
  742. arg_msg = '无效的分部,不存在该分部!'
  743. GOTO ext
  744. END IF
  745. SELECT Top 1 getdate() Into :server_datetime From u_user ;
  746. IF sqlca.SQLCode <> 0 THEN
  747. rslt = 0
  748. arg_msg = "查询操作失败,系统时间"
  749. GOTO ext
  750. END IF
  751. IF Not (arg_s_takemx.buildtype = 0 Or &
  752. arg_s_takemx.buildtype = 1 Or &
  753. arg_s_takemx.buildtype = 2 Or &
  754. arg_s_takemx.buildtype = 3 Or &
  755. arg_s_takemx.buildtype = 4) THEN
  756. arg_msg = '错误建立类型,必须为:0-手工记帐;1-单据记帐;2-对数记帐;3-项目记帐;4-收款单记帐'
  757. rslt = 0
  758. GOTO ext
  759. END IF
  760. IF arg_s_takemx.billcode = '' THEN
  761. arg_msg = '请输入凭证号码'
  762. rslt = 0
  763. GOTO ext
  764. END IF
  765. IF Date(arg_s_takemx.takedate) <= 1990-01-01 THEN
  766. arg_msg = '错误发生日期'
  767. rslt = 0
  768. GOTO ext
  769. END IF
  770. IF Trim(arg_s_takemx.inrep) = '' THEN
  771. arg_s_takemx.inrep = '无'
  772. END IF
  773. IF arg_s_takemx.banktypeid = 0 THEN
  774. arg_msg = '没有结算方式(明细)'
  775. rslt = 0
  776. GOTO ext
  777. END IF
  778. IF arg_s_takemx.moneyid = 0 THEN
  779. arg_msg = '没有币种'
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. cnt = 0
  784. SELECT count(*) INTO :cnt
  785. FROM cw_currency
  786. Where moneyid = :arg_s_takemx.moneyid ;
  787. IF sqlca.SQLCode <> 0 THEN
  788. rslt = 0
  789. arg_msg = "查询操作失败,币种!"
  790. GOTO ext
  791. END IF
  792. IF cnt = 0 THEN
  793. rslt = 0
  794. arg_msg = "币种资料未登记或已取消!"
  795. GOTO ext
  796. END IF
  797. IF arg_s_takemx.msttakeamt = 0 And arg_s_takemx.takeamt = 0 THEN
  798. arg_msg = "应收金额与已收金额不能同时为0!"
  799. rslt = 0
  800. GOTO ext
  801. END IF
  802. cnt = 0
  803. SELECT count(*)
  804. INTO :cnt
  805. FROM u_cust
  806. Where u_cust.cusid = :arg_s_takemx.cusid;
  807. IF sqlca.SQLCode <> 0 THEN
  808. arg_msg = '加应收帐明细时查询操作失败,客户唯一码'
  809. rslt = 0
  810. GOTO ext
  811. END IF
  812. //2 判断是否已经选择当前操作员
  813. cnt = 0
  814. SELECT count(*) INTO :cnt
  815. FROM u_user
  816. Where username = :arg_s_takemx.opemp ;
  817. IF sqlca.SQLCode <> 0 THEN
  818. rslt = 0
  819. arg_msg = "查询操作失败,操作员!"
  820. GOTO ext
  821. END IF
  822. IF cnt = 0 THEN
  823. rslt = 0
  824. arg_msg = "操作员姓名未登记或已取消!"
  825. GOTO ext
  826. END IF
  827. IF arg_s_takemx.buildtype = 0 Or arg_s_takemx.buildtype = 2 Or arg_s_takemx.buildtype = 3 THEN
  828. SELECT max(listno) INTO :list_no FROM u_bmsttakemx
  829. Where takeid = :arg_s_takemx.takeid;
  830. IF sqlca.SQLCode = -1 THEN
  831. arg_msg = '查询应收明细帐最大编号失败>>'+sqlca.SQLErrText
  832. rslt = 0
  833. GOTO ext
  834. ELSEIF sqlca.SQLCode = 100 Or IsNull(list_no) THEN
  835. list_no = 0
  836. END IF
  837. list_no = list_no + 1
  838. ELSE
  839. list_no = 0
  840. END IF
  841. //3 向应收帐明细表插入新记录,失败则回滚
  842. INSERT INTO u_bmsttakemx
  843. (scid,
  844. takeid,
  845. listno,
  846. billcode,
  847. relcode,
  848. takedate,
  849. banktypeid,
  850. msttakeamt,
  851. takeamt,
  852. msttakeamt_rmb,
  853. takeamt_rmb,
  854. opdate,
  855. opemp,
  856. dscrp,
  857. inrep,
  858. buildtype,
  859. salebillid,
  860. itemid,
  861. cusid,
  862. moneyid,
  863. mrate,
  864. exchangeid)
  865. VALUES (
  866. :arg_s_takemx.scid,
  867. :arg_s_takemx.takeid,
  868. :list_no,
  869. :arg_s_takemx.billcode,
  870. :arg_s_takemx.relcode,
  871. :arg_s_takemx.takedate,
  872. :arg_s_takemx.banktypeid,
  873. :arg_s_takemx.msttakeamt,
  874. :arg_s_takemx.takeamt,
  875. :arg_s_takemx.msttakeamt_rmb,
  876. :arg_s_takemx.takeamt_rmb,
  877. :server_datetime,
  878. :arg_s_takemx.opemp,
  879. :arg_s_takemx.dscrp,
  880. :arg_s_takemx.inrep,
  881. :arg_s_takemx.buildtype,
  882. :arg_s_takemx.salebillid,
  883. :arg_s_takemx.itemid,
  884. :arg_s_takemx.cusid,
  885. :arg_s_takemx.moneyid,
  886. :arg_s_takemx.mrate,
  887. :arg_s_takemx.exchangeid) ;
  888. IF sqlca.SQLCode <> 0 THEN
  889. arg_msg = "向应收帐表插入应收明细帐记录失败,请重试!"+'~n'+sqlca.SQLErrText
  890. rslt = 0
  891. GOTO ext
  892. END IF
  893. IF arg_s_takemx.buildtype <> 1 THEN
  894. SELECT msttakeamt - takeamt,
  895. msttakeamt_rmb - takeamt_rmb
  896. INTO :balcamt,
  897. :balcamt_rmb
  898. FROM u_bmsttake
  899. Where takeid = :arg_s_takemx.takeid;
  900. IF sqlca.SQLCode <> 0 THEN
  901. arg_msg = '查询当前单据结余金额失败'
  902. rslt = 0
  903. GOTO ext
  904. END IF
  905. IF balcamt <= 0 THEN
  906. IF arg_s_takemx.buildtype <> 3 And ( arg_s_takemx.takeamt - arg_s_takemx.msttakeamt) > 0 THEN
  907. arg_msg = '当前处理金额大于单据结余金额,请检查'
  908. rslt = 0
  909. GOTO ext
  910. END IF
  911. ELSE
  912. If (arg_s_takemx.takeamt - arg_s_takemx.msttakeamt) > balcamt THEN
  913. arg_msg = '当前处理金额大于单据结余金额,请检查'
  914. rslt = 0
  915. GOTO ext
  916. END IF
  917. END IF
  918. UPDATE u_bmsttake
  919. SET msttakeamt = msttakeamt + :arg_s_takemx.msttakeamt,
  920. takeamt = takeamt + :arg_s_takemx.takeamt,
  921. msttakeamt_rmb = msttakeamt_rmb + :arg_s_takemx.msttakeamt_rmb,
  922. takeamt_rmb = takeamt_rmb + :arg_s_takemx.takeamt_rmb
  923. Where takeid = :arg_s_takemx.takeid;
  924. IF sqlca.SQLCode <> 0 THEN
  925. arg_msg = '更新应收帐应收已收款失败,请重试!'
  926. rslt = 0
  927. GOTO ext
  928. END IF
  929. IF balcamt = arg_s_takemx.takeamt - arg_s_takemx.msttakeamt THEN
  930. UPDATE u_bmsttake
  931. SET finishflag = 1,
  932. finishdate = :arg_s_takemx.takedate
  933. Where takeid = :arg_s_takemx.takeid;
  934. IF sqlca.SQLCode <> 0 THEN
  935. arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText
  936. rslt = 0
  937. GOTO ext
  938. END IF
  939. ELSE
  940. SetNull(null_datetime)
  941. UPDATE u_bmsttake
  942. SET finishflag = 0,
  943. finishdate = :null_datetime
  944. Where takeid = :arg_s_takemx.takeid;
  945. IF sqlca.SQLCode <> 0 THEN
  946. arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText
  947. rslt = 0
  948. GOTO ext
  949. END IF
  950. END IF
  951. IF balcamt_rmb = arg_s_takemx.takeamt_rmb - arg_s_takemx.msttakeamt_rmb THEN
  952. UPDATE u_bmsttake
  953. SET finishflag_rmb = 1,
  954. finishdate_rmb = :arg_s_takemx.takedate
  955. Where takeid = :arg_s_takemx.takeid;
  956. IF sqlca.SQLCode <> 0 THEN
  957. arg_msg = '更新人民币应收帐结清标记失败,'+sqlca.SQLErrText
  958. rslt = 0
  959. GOTO ext
  960. END IF
  961. ELSE
  962. SetNull(null_datetime)
  963. UPDATE u_bmsttake
  964. SET finishflag_rmb = 0,
  965. finishdate_rmb = :null_datetime
  966. Where takeid = :arg_s_takemx.takeid;
  967. IF sqlca.SQLCode <> 0 THEN
  968. arg_msg = '更新人民币应收帐结清标记失败,'+sqlca.SQLErrText
  969. rslt = 0
  970. GOTO ext
  971. END IF
  972. END IF
  973. ELSE
  974. IF arg_s_takemx.msttakeamt = arg_s_takemx.takeamt THEN
  975. UPDATE u_bmsttake
  976. SET finishflag = 1,
  977. finishdate = :arg_s_takemx.takedate
  978. Where takeid = :arg_s_takemx.takeid;
  979. IF sqlca.SQLCode <> 0 THEN
  980. arg_msg = '更新原币应收帐结清标记失败,'+sqlca.SQLErrText
  981. rslt = 0
  982. GOTO ext
  983. END IF
  984. END IF
  985. IF arg_s_takemx.msttakeamt_rmb = arg_s_takemx.takeamt_rmb THEN
  986. UPDATE u_bmsttake
  987. SET finishflag_rmb = 1,
  988. finishdate_rmb = :arg_s_takemx.takedate
  989. Where takeid = :arg_s_takemx.takeid;
  990. IF sqlca.SQLCode <> 0 THEN
  991. arg_msg = '更新人民币应收帐结清标记失败,'+sqlca.SQLErrText
  992. rslt = 0
  993. GOTO ext
  994. END IF
  995. END IF
  996. END IF
  997. ext:
  998. IF rslt = 0 THEN
  999. ROLLBACK;
  1000. ELSEIF rslt = 1 And arg_ifcommit THEN
  1001. COMMIT;
  1002. END IF
  1003. RETURN rslt
  1004. end function
  1005. public function integer uof_mod_dscrp (long arg_takeid, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1006. Int li_buildtype
  1007. Long ll_rapmoneyid,ll_dateint
  1008. Long ll_scid,ll_cusid
  1009. String ls_dscrp_update
  1010. String ls_billcode
  1011. String ls_cusname
  1012. SELECT rapmoneyid,buildtype,scid,cusid,billcode
  1013. INTO :ll_dateint,:li_buildtype,:ll_scid,:ll_cusid,:ls_billcode
  1014. FROM u_bmsttake
  1015. Where takeid = :arg_takeid;
  1016. IF sqlca.SQLCode <> 0 THEN
  1017. arg_msg = '查询应收帐资料失败,'+sqlca.SQLErrText
  1018. rslt = 0
  1019. GOTO ext
  1020. END IF
  1021. IF li_buildtype <> 0 THEN
  1022. arg_msg = '不是手动建立的资料,不能修改摘要'
  1023. rslt = 0
  1024. GOTO ext
  1025. END IF
  1026. SELECT name INTO :ls_cusname
  1027. FROM u_cust
  1028. Where cusid = :ll_cusid;
  1029. IF sqlca.SQLCode <> 0 THEN
  1030. arg_msg = '查询客户名称失败,'+sqlca.SQLErrText
  1031. rslt = 0
  1032. GOTO ext
  1033. END IF
  1034. UPDATE u_bmsttake SET
  1035. dscrp = :arg_dscrp
  1036. Where takeid = :arg_takeid;
  1037. IF sqlca.SQLCode <> 0 THEN
  1038. arg_msg = '更新应收帐摘要失败,'+sqlca.SQLErrText
  1039. rslt = 0
  1040. GOTO ext
  1041. END IF
  1042. UPDATE u_bmsttakemx SET
  1043. dscrp = :arg_dscrp
  1044. WHERE takeid = :arg_takeid
  1045. AND scid = :ll_scid
  1046. AND buildtype = 1;
  1047. IF sqlca.SQLCode <> 0 THEN
  1048. arg_msg = '更新应收明细帐摘要失败,'+sqlca.SQLErrText
  1049. rslt = 0
  1050. GOTO ext
  1051. END IF
  1052. IF ll_dateint > 0 THEN
  1053. ls_dscrp_update = ls_cusname + ','+ls_billcode+','+arg_dscrp
  1054. SELECT rapmoneyid INTO :ll_rapmoneyid
  1055. FROM u_iteminput
  1056. Where dateint = :ll_dateint;
  1057. IF sqlca.SQLCode <> 0 THEN
  1058. arg_msg = '查询费用帐资料失败,'+sqlca.SQLErrText
  1059. rslt = 0
  1060. GOTO ext
  1061. END IF
  1062. UPDATE u_iteminput
  1063. SET dscrp = :ls_dscrp_update
  1064. Where dateint = :ll_dateint;
  1065. IF sqlca.SQLCode <> 0 THEN
  1066. arg_msg = '更新费用帐摘要失败,'+sqlca.SQLErrText
  1067. rslt = 0
  1068. GOTO ext
  1069. END IF
  1070. UPDATE u_rap_money
  1071. SET dscrp = :ls_dscrp_update
  1072. Where rapmoneyid = :ll_rapmoneyid;
  1073. IF sqlca.SQLCode <> 0 THEN
  1074. arg_msg = '更新出纳帐摘要失败,'+sqlca.SQLErrText
  1075. rslt = 0
  1076. GOTO ext
  1077. END IF
  1078. END IF
  1079. ext:
  1080. IF rslt = 0 THEN
  1081. ROLLBACK;
  1082. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1083. COMMIT;
  1084. END IF
  1085. RETURN rslt
  1086. end function
  1087. public function integer uof_mod_viewdate (long arg_takeid, datetime arg_viewdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1088. UPDATE u_bmsttake SET
  1089. viewdate = :arg_viewdate
  1090. Where takeid = :arg_takeid;
  1091. IF sqlca.SQLCode <> 0 THEN
  1092. arg_msg = '更新应收帐摘要失败,'+sqlca.SQLErrText
  1093. rslt = 0
  1094. GOTO ext
  1095. END IF
  1096. ext:
  1097. IF rslt = 0 THEN
  1098. ROLLBACK;
  1099. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1100. COMMIT;
  1101. END IF
  1102. RETURN rslt
  1103. end function
  1104. public function integer add_fpamt (long arg_takeid, s_bmsttake_fpmx arg_s_mx[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1105. Long ll_i
  1106. Long ll_printid_max,ll_printid
  1107. Select max(printid) Into :ll_printid_max
  1108. From u_bmsttake_fpmx
  1109. Where takeid = :arg_takeid;
  1110. If sqlca.SQLCode <> 0 Then
  1111. ll_printid_max = 0
  1112. End If
  1113. If IsNull(ll_printid_max) Then ll_printid_max = 0
  1114. ll_printid = ll_printid_max
  1115. For ll_i = 1 To UpperBound(arg_s_mx)
  1116. If arg_s_mx[ll_i].Kind = 1 Then
  1117. //订金
  1118. Update u_saletask
  1119. Set takedamt = takedamt + :arg_s_mx[ll_i].fpamt
  1120. Where scid = :arg_s_mx[ll_i].scid
  1121. And taskid = :arg_s_mx[ll_i].relid;
  1122. If sqlca.SQLCode <> 0 Then
  1123. rslt = 0
  1124. arg_msg = '更新订单:'+arg_s_mx[ll_i].relbillcode+' 已收订金失败,'+sqlca.SQLErrText
  1125. Goto ext
  1126. End If
  1127. Else
  1128. //余额
  1129. Update u_saletask
  1130. Set takeamt = takeamt + :arg_s_mx[ll_i].fpamt
  1131. Where scid = :arg_s_mx[ll_i].scid
  1132. And taskid = :arg_s_mx[ll_i].relid;
  1133. If sqlca.SQLCode <> 0 Then
  1134. rslt = 0
  1135. arg_msg = '更新订单:'+arg_s_mx[ll_i].relbillcode+' 已收金额失败,'+sqlca.SQLErrText
  1136. Goto ext
  1137. End If
  1138. End If
  1139. ll_printid++
  1140. Insert Into u_bmsttake_fpmx
  1141. (takeid,
  1142. printid,
  1143. relid,
  1144. relbillcode,
  1145. fpamt,
  1146. fpdate,
  1147. fpemp,
  1148. scid,
  1149. kind)
  1150. Values (:arg_takeid,
  1151. :ll_printid,
  1152. :arg_s_mx[ll_i].relid,
  1153. :arg_s_mx[ll_i].relbillcode,
  1154. :arg_s_mx[ll_i].fpamt,
  1155. getdate(),
  1156. :publ_operator,
  1157. :arg_s_mx[ll_i].scid,
  1158. :arg_s_mx[ll_i].Kind);
  1159. If sqlca.SQLCode <> 0 Then
  1160. arg_msg = '插入应收帐分配明细失败,'+sqlca.SQLErrText
  1161. rslt = 0
  1162. Goto ext
  1163. End If
  1164. Update U_Bmsttake
  1165. Set fpamt = fpamt + :arg_s_mx[ll_i].fpamt
  1166. Where takeid = :arg_takeid;
  1167. If sqlca.SQLCode <> 0 Then
  1168. rslt = 0
  1169. arg_msg = '更新应收帐已分配金额失败,'+sqlca.SQLErrText
  1170. Goto ext
  1171. End If
  1172. Next
  1173. ext:
  1174. If rslt = 0 Then
  1175. Rollback;
  1176. ElseIf rslt = 1 And arg_ifcommit Then
  1177. Commit;
  1178. End If
  1179. Return rslt
  1180. end function
  1181. public function integer del_fpamt (long arg_takeid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1182. Decimal ld_fpamt
  1183. Long ll_scid,ll_relid
  1184. Int li_kind
  1185. String ls_relbillcode
  1186. Select fpamt,scid,relid,relbillcode,kind
  1187. Into :ld_fpamt,:ll_scid,:ll_relid,:ls_relbillcode,:li_kind
  1188. From u_bmsttake_fpmx
  1189. Where takeid = :arg_takeid
  1190. And printid = :arg_printid;
  1191. If sqlca.SQLCode <> 0 Then
  1192. rslt = 0
  1193. arg_msg = '查询明细分配信息失败,'+sqlca.SQLErrText
  1194. Goto ext
  1195. End If
  1196. If li_kind = 1 Then
  1197. Update u_saletask
  1198. Set takedamt = takedamt - :ld_fpamt
  1199. Where scid = :ll_scid
  1200. And taskid = :ll_relid;
  1201. If sqlca.SQLCode <> 0 Then
  1202. rslt = 0
  1203. arg_msg = '更新订单:'+ls_relbillcode+' 已收订金失败,'+sqlca.SQLErrText
  1204. Goto ext
  1205. End If
  1206. Else
  1207. Update u_saletask
  1208. Set takeamt = takeamt - :ld_fpamt
  1209. Where scid = :ll_scid
  1210. And taskid = :ll_relid;
  1211. If sqlca.SQLCode <> 0 Then
  1212. rslt = 0
  1213. arg_msg = '更新订单:'+ls_relbillcode+' 已收金额失败,'+sqlca.SQLErrText
  1214. Goto ext
  1215. End If
  1216. End If
  1217. Update U_Bmsttake
  1218. Set fpamt = fpamt - :ld_fpamt
  1219. Where takeid = :arg_takeid;
  1220. If sqlca.SQLCode <> 0 Then
  1221. rslt = 0
  1222. arg_msg = '更新应收帐已分配金额失败,'+sqlca.SQLErrText
  1223. Goto ext
  1224. End If
  1225. Delete From u_bmsttake_fpmx
  1226. Where takeid = :arg_takeid
  1227. And printid = :arg_printid;
  1228. If sqlca.SQLCode <> 0 Then
  1229. rslt = 0
  1230. arg_msg = '删除订单金额分配记录失败,'+sqlca.SQLErrText
  1231. Goto ext
  1232. End If
  1233. ext:
  1234. If rslt = 0 Then
  1235. Rollback;
  1236. ElseIf rslt = 1 And arg_ifcommit Then
  1237. Commit;
  1238. End If
  1239. Return rslt
  1240. end function
  1241. on uo_musttake.create
  1242. call super::create
  1243. TriggerEvent( this, "constructor" )
  1244. end on
  1245. on uo_musttake.destroy
  1246. TriggerEvent( this, "destructor" )
  1247. call super::destroy
  1248. end on
  1249. event constructor;
  1250. String str_optionvalue,arg_msg
  1251. f_get_sys_option_value('139',str_optionvalue,arg_msg)
  1252. uo_option_msttake_takeamt_secaudit = Long(str_optionvalue)
  1253. f_get_sys_option_value('045',str_optionvalue,arg_msg)
  1254. uo_option_m_msttake = Long(str_optionvalue)
  1255. f_get_sys_option_value('391',str_optionvalue,arg_msg)
  1256. uo_option_msttake_balc = Long(str_optionvalue)
  1257. end event