uo_bmsttake_hedge.sru 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920
  1. $PBExportHeader$uo_bmsttake_hedge.sru
  2. forward
  3. global type uo_bmsttake_hedge from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_bmsttake_hedge from nonvisualobject
  7. end type
  8. global uo_bmsttake_hedge uo_bmsttake_hedge
  9. type variables
  10. long uo_billid
  11. string uo_billcode
  12. decimal ins_sumamt
  13. end variables
  14. forward prototypes
  15. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg)
  16. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer updatebegin (long arg_billid, ref string arg_msg)
  18. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer getinfo (long arg_billid, ref s_bmsttake_hedgemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  20. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer save (s_bmsttake_hedge arg_s_hedge, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  23. end prototypes
  24. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  25. SELECT flag
  26. INTO :arg_flag
  27. FROM u_bmsttake_hedge
  28. WHERE billid = :arg_billid;
  29. IF sqlca.SQLCode <> 0 THEN
  30. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  31. rslt = 0
  32. GOTO ext
  33. END IF
  34. ext:
  35. RETURN rslt
  36. end function
  37. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  38. Int li_flag
  39. IF arg_billid <= 0 THEN
  40. rslt = 0
  41. arg_msg = '错误单据唯一码'
  42. GOTO ext
  43. END IF
  44. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  45. rslt = 0
  46. GOTO ext
  47. END IF
  48. IF li_flag = 1 THEN
  49. rslt = 0
  50. arg_msg = '单据不是在待审状态,不可以删除'
  51. GOTO ext
  52. END IF
  53. DELETE FROM u_bmsttake_hedge
  54. WHERE billid = :arg_billid;
  55. IF sqlca.SQLCode <> 0 THEN
  56. rslt = 0
  57. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  58. GOTO ext
  59. END IF
  60. DELETE FROM u_bmsttake_hedgemx
  61. WHERE billid = :arg_billid;
  62. IF sqlca.SQLCode <> 0 THEN
  63. rslt = 0
  64. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  65. GOTO ext
  66. END IF
  67. ext:
  68. IF rslt = 0 THEN
  69. ROLLBACK;
  70. ELSEIF rslt = 1 AND arg_ifcommit THEN
  71. COMMIT;
  72. END IF
  73. RETURN rslt
  74. end function
  75. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  76. Int li_flag
  77. Long cnt
  78. IF arg_billid <= 0 THEN
  79. rslt = 0
  80. arg_msg = '错误单据唯一码'
  81. GOTO ext
  82. END IF
  83. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  84. rslt = 0
  85. GOTO ext
  86. END IF
  87. IF li_flag = 1 THEN
  88. rslt = 0
  89. arg_msg = '单据已经审核,不可以再修改'
  90. GOTO ext
  91. END IF
  92. ext:
  93. RETURN rslt
  94. end function
  95. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  96. Int li_flag
  97. If arg_newdescppart = '' Then
  98. rslt = 0
  99. arG_MSG = "要添加内容为空,操作取消"
  100. Goto ext
  101. End If
  102. If p_getflag(arg_billid,li_flag,arG_MSG) = 0 Then
  103. rslt = 0
  104. Goto ext
  105. End If
  106. If li_flag = 0 Then
  107. rslt = 0
  108. arG_MSG = "待审核状态下不可用"
  109. Goto ext
  110. End If
  111. Update u_bmsttake_hedge
  112. Set DSCRP = DSCRP+' '+:arg_newdescppart
  113. Where u_bmsttake_hedge.billid = :arg_billid;
  114. If SQLCA.SQLCode <> 0 Then
  115. rslt = 0
  116. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  117. Goto ext
  118. End If
  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 getinfo (long arg_billid, ref s_bmsttake_hedgemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  128. Long i = 1 ,no_mxcheck = 0
  129. If arg_billid <= 0 Then
  130. rslt = 0
  131. arg_msg = '错误单据唯一码'
  132. Goto ext
  133. End If
  134. ins_sumamt = 0
  135. Declare cur_mx Cursor For
  136. Select u_bmsttake_hedgemx.printid,
  137. u_bmsttake_hedgemx.cusid,
  138. u_bmsttake_hedgemx.amt,
  139. u_bmsttake_hedgemx.mxdscrp,
  140. u_bmsttake_hedgemx.reltakeid,
  141. u_bmsttake_hedgemx.salebillid,
  142. u_bmsttake_hedgemx.takeid,
  143. u_Bmsttake.Billcode,
  144. u_Bmsttake.banktypeid,
  145. u_bmsttake_hedgemx.moneyid,
  146. u_bmsttake_hedgemx.mrate
  147. From u_bmsttake_hedgemx LEFT Outer JOIN
  148. u_Bmsttake ON u_bmsttake_hedgemx.takeid = u_Bmsttake.takeid
  149. Where u_bmsttake_hedgemx.billid = :arg_billid;
  150. Open cur_mx;
  151. Fetch cur_mx Into :arg_ref_mx[i].printid,
  152. :arg_ref_mx[i].cusid,
  153. :arg_ref_mx[i].amt,
  154. :arg_ref_mx[i].mxdscrp,
  155. :arg_ref_mx[i].reltakeid,
  156. :arg_ref_mx[i].salebillid,
  157. :arg_ref_mx[i].takeid,
  158. :arg_ref_mx[i].billcode,
  159. :arg_ref_mx[i].banktypeid,
  160. :arg_ref_mx[i].moneyid,
  161. :arg_ref_mx[i].mrate;
  162. Do While sqlca.SQLCode = 0
  163. ins_sumamt = ins_sumamt + arg_ref_mx[i].amt * arg_ref_mx[i].mrate
  164. i++
  165. Fetch cur_mx Into :arg_ref_mx[i].printid,
  166. :arg_ref_mx[i].cusid,
  167. :arg_ref_mx[i].amt,
  168. :arg_ref_mx[i].mxdscrp,
  169. :arg_ref_mx[i].reltakeid,
  170. :arg_ref_mx[i].salebillid,
  171. :arg_ref_mx[i].takeid,
  172. :arg_ref_mx[i].billcode,
  173. :arg_ref_mx[i].banktypeid,
  174. :arg_ref_mx[i].moneyid,
  175. :arg_ref_mx[i].mrate;
  176. Loop
  177. Close cur_mx;
  178. //检验明细是否读入完整
  179. Select count(*) Into :no_mxcheck
  180. From u_bmsttake_hedgemx
  181. Where billid = :arg_billid;
  182. If sqlca.SQLCode <> 0 Then
  183. rslt = 0
  184. arg_msg = "查询操作失败,单据明细数量"
  185. Goto ext
  186. End If
  187. If i <> (no_mxcheck + 1) Then
  188. rslt = 0
  189. arg_msg = "查询操作失败,单据明细内容"
  190. Goto ext
  191. End If
  192. arg_arr_cnt = i - 1
  193. ext:
  194. Return rslt
  195. end function
  196. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  197. Int li_flag
  198. Long ll_arr_cnt
  199. Long ll_i
  200. Decimal ld_takeamt
  201. String ls_billcode, ls_billemp
  202. DateTime ld_billdate
  203. Long ll_cusid, ll_moneyid,ll_scid,ll_banktypeid
  204. Decimal ld_amt,ld_mrate
  205. Long ll_billtype
  206. string ls_dscrp
  207. s_bmsttake s_take
  208. uo_musttake uo_take
  209. uo_take = Create uo_musttake
  210. uo_salebill uo_bill
  211. uo_bill = Create uo_salebill
  212. IF arg_billid <= 0 THEN
  213. rslt = 0
  214. arg_msg = '错误的单据唯一码'
  215. GOTO ext
  216. END IF
  217. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  218. rslt = 0
  219. GOTO ext
  220. END IF
  221. IF li_flag <> 0 THEN
  222. rslt = 0
  223. arg_msg = '单据不是待审核状态,不可以再审'
  224. GOTO ext
  225. END IF
  226. SELECT billcode,
  227. billdate,
  228. billemp,
  229. cusid,
  230. moneyid,
  231. amt,
  232. scid,
  233. mrate,
  234. billtype,
  235. dscrp
  236. INTO :ls_billcode,
  237. :ld_billdate,
  238. :ls_billemp,
  239. :ll_cusid,
  240. :ll_moneyid,
  241. :ld_amt,
  242. :ll_scid,
  243. :ld_mrate,
  244. :ll_billtype,
  245. :ls_dscrp
  246. FROM u_bmsttake_hedge
  247. Where billid = :arg_billid;
  248. IF sqlca.SQLCode <> 0 THEN
  249. rslt = 0
  250. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  251. GOTO ext
  252. END IF
  253. //ld_mrate = f_get_mrate(ll_moneyid)
  254. //if ld_mrate = 0 then
  255. // rslt = 0
  256. // arg_msg = '错误的币种汇率'
  257. // goto ext
  258. //end if
  259. s_bmsttake_hedgemx s_mx[]
  260. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  261. rslt = 0
  262. GOTO ext
  263. END IF
  264. FOR ll_i = 1 To ll_arr_cnt
  265. IF ll_i = 1 THEN
  266. ll_banktypeid = s_mx[ll_i].banktypeid
  267. END IF
  268. IF ll_billtype = 0 THEN
  269. SELECT takeamt INTO :ld_takeamt
  270. FROM U_Bmsttake
  271. Where takeid = :s_mx[ll_i].takeid;
  272. IF sqlca.SQLCode <> 0 THEN
  273. rslt = 0
  274. arg_msg = '第'+String(ll_i)+'行,查询应收帐信息失败,'+sqlca.SQLErrText
  275. GOTO ext
  276. END IF
  277. IF ld_takeamt > 0 THEN
  278. rslt = 0
  279. arg_msg = '第'+String(ll_i)+'行,应收帐已有已收金额,不能使用本单据冲帐'
  280. GOTO ext
  281. END IF
  282. END IF
  283. //增加对冲应收帐
  284. s_take.scid = ll_scid
  285. s_take.cusid = s_mx[ll_i].cusid
  286. s_take.takedate = ld_billdate
  287. s_take.inrep = ls_billemp
  288. IF ll_billtype = 0 THEN
  289. s_take.oriamt = 0 - s_mx[ll_i].amt
  290. s_take.msttakeamt = 0 - s_mx[ll_i].amt
  291. s_take.takeamt = 0
  292. ELSE
  293. s_take.oriamt = s_mx[ll_i].amt
  294. s_take.msttakeamt = 0
  295. s_take.takeamt = 0 - s_mx[ll_i].amt
  296. END IF
  297. s_take.dscrp = ls_dscrp
  298. s_take.billcode = ls_billcode
  299. s_take.relcode = ''
  300. s_take.banktypeid = s_mx[ll_i].banktypeid
  301. s_take.opemp = publ_operator
  302. s_take.buildtype = 5
  303. s_take.outwareid = 0
  304. s_take.accountsid = 0
  305. s_take.itemid = 0
  306. s_take.moneyid = s_mx[ll_i].moneyid
  307. s_take.mrate = s_mx[ll_i].mrate
  308. IF uo_take.add_takerec (s_take,arg_msg,False) = 0 THEN
  309. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  310. rslt = 0
  311. GOTO ext
  312. END IF
  313. //对单
  314. IF uo_bill.newbegin() = 0 THEN
  315. rslt = 0
  316. GOTO ext
  317. END IF
  318. uo_bill.opemp = publ_operator
  319. uo_bill.takedate = ld_billdate
  320. uo_bill.relcode = ''
  321. uo_bill.inrep = publ_operator
  322. uo_bill.banktypeid = s_mx[ll_i].banktypeid
  323. uo_bill.dscrp = ls_dscrp
  324. uo_bill.cusid = s_mx[ll_i].cusid
  325. uo_bill.msttakeamt = 0
  326. uo_bill.takeamt = 0
  327. uo_bill.accountsid = 0
  328. uo_bill.itemid = 0
  329. IF ll_billtype = 0 THEN
  330. IF uo_bill.acceptmx(s_mx[ll_i].takeid,&
  331. s_mx[ll_i].billcode,&
  332. 0,&
  333. s_mx[ll_i].amt,&
  334. s_mx[ll_i].amt,&
  335. s_mx[ll_i].amt,&
  336. 0,&
  337. ls_billcode,&
  338. ll_moneyid,&
  339. ld_mrate,&
  340. '',&
  341. arg_msg) = 0 THEN
  342. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  343. rslt = 0
  344. GOTO ext
  345. END IF
  346. IF uo_bill.acceptmx(uo_take.ref_takeid,&
  347. ls_billcode,&
  348. 0,&
  349. 0 - s_mx[ll_i].amt,&
  350. 0 - s_mx[ll_i].amt,&
  351. 0 - s_mx[ll_i].amt,&
  352. 0,&
  353. s_mx[ll_i].billcode,&
  354. ll_moneyid,&
  355. ld_mrate,&
  356. '',&
  357. arg_msg) = 0 THEN
  358. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  359. rslt = 0
  360. GOTO ext
  361. END IF
  362. ELSE
  363. IF uo_bill.acceptmx(s_mx[ll_i].takeid,&
  364. s_mx[ll_i].billcode,&
  365. 0,&
  366. 0 - s_mx[ll_i].amt,&
  367. 0 - s_mx[ll_i].amt,&
  368. 0,&
  369. s_mx[ll_i].amt,&
  370. ls_billcode,&
  371. ll_moneyid,&
  372. ld_mrate,&
  373. '',&
  374. arg_msg) = 0 THEN
  375. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  376. rslt = 0
  377. GOTO ext
  378. END IF
  379. IF uo_bill.acceptmx(uo_take.ref_takeid,&
  380. ls_billcode,&
  381. 0,&
  382. s_mx[ll_i].amt,&
  383. s_mx[ll_i].amt,&
  384. 0,&
  385. 0 - s_mx[ll_i].amt,&
  386. s_mx[ll_i].billcode,&
  387. ll_moneyid,&
  388. ld_mrate,&
  389. '',&
  390. arg_msg) = 0 THEN
  391. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  392. rslt = 0
  393. GOTO ext
  394. END IF
  395. END IF
  396. IF uo_bill.Save(arg_msg,False) = 0 THEN
  397. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  398. rslt = 0
  399. GOTO ext
  400. END IF
  401. //记录相关ID
  402. UPDATE u_bmsttake_hedgemx
  403. SET reltakeid = :uo_take.ref_takeid,
  404. salebillid = :uo_bill.salebillid
  405. WHERE billid = :arg_billid
  406. And printid = :s_mx[ll_i].printid;
  407. IF sqlca.SQLCode <> 0 THEN
  408. rslt = 0
  409. arg_msg = '第'+String(ll_i)+'行,更新相关应收帐唯一码失败(明细),'+sqlca.SQLErrText
  410. GOTO ext
  411. END IF
  412. NEXT
  413. //增加调入客户应收帐
  414. s_take.scid = ll_scid
  415. s_take.cusid = ll_cusid
  416. s_take.takedate = ld_billdate
  417. s_take.inrep = ls_billemp
  418. IF ll_billtype = 0 THEN
  419. s_take.oriamt = ins_sumamt / ld_mrate
  420. s_take.msttakeamt = ins_sumamt / ld_mrate
  421. s_take.takeamt = 0
  422. ELSE
  423. s_take.oriamt = 0 - ins_sumamt / ld_mrate
  424. s_take.msttakeamt = 0
  425. s_take.takeamt = ins_sumamt / ld_mrate
  426. END IF
  427. s_take.dscrp = ls_dscrp
  428. s_take.billcode = ls_billcode
  429. s_take.relcode = ''
  430. s_take.banktypeid = ll_banktypeid
  431. s_take.opemp = publ_operator
  432. s_take.buildtype = 5
  433. s_take.outwareid = 0
  434. s_take.accountsid = 0
  435. s_take.itemid = 0
  436. s_take.moneyid = ll_moneyid
  437. s_take.mrate = ld_mrate
  438. IF uo_take.add_takerec (s_take,arg_msg,False) = 0 THEN
  439. arg_msg = '更新调入客户应收帐失败,'+arg_msg
  440. rslt = 0
  441. GOTO ext
  442. END IF
  443. UPDATE u_bmsttake_hedge
  444. SET auditemp = :arg_opemp,
  445. auditdate = getdate(),
  446. flag = 1,
  447. reltakeid = :uo_take.ref_takeid
  448. WHERE billid = :arg_billid
  449. And flag = 0 ;
  450. IF sqlca.SQLCode <> 0 THEN
  451. rslt = 0
  452. arg_msg = '单据审核操作失败,'+sqlca.SQLErrText
  453. GOTO ext
  454. ELSEIF sqlca.SQLNRows = 0 THEN
  455. rslt = 0
  456. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  457. GOTO ext
  458. END IF
  459. ext:
  460. IF rslt = 0 THEN
  461. ROLLBACK;
  462. ELSEIF rslt = 1 And arg_ifcommit THEN
  463. COMMIT;
  464. END IF
  465. RETURN rslt
  466. end function
  467. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt
  468. rslt = 1
  469. Int li_flag,li_flag_bill
  470. DateTime null_datetime
  471. SetNull(null_datetime)
  472. String ls_billcode
  473. DateTime ld_billdate
  474. String ls_billemp
  475. Long ll_cusid, ll_moneyid, ll_scid,ll_arr_cnt
  476. Decimal ld_amt
  477. Long ll_i,ll_reltakeid
  478. uo_musttake uo_take
  479. uo_take = Create uo_musttake
  480. uo_salebill uo_bill
  481. uo_bill = Create uo_salebill
  482. If arg_billid <= 0 Then
  483. rslt = 0
  484. arg_msg = '错误的单据唯一码'
  485. Goto ext
  486. End If
  487. If p_getflag(arg_billid,li_flag,arg_msg) = 0 Then
  488. rslt = 0
  489. Goto ext
  490. End If
  491. If li_flag <> 1 Then
  492. rslt = 0
  493. arg_msg = '单据不是审核状态,不可以撤审'
  494. Goto ext
  495. End If
  496. Select billcode, billdate, billemp, cusid, moneyid, amt,scid,reltakeid
  497. Into :ls_billcode, :ld_billdate, :ls_billemp, :ll_cusid, :ll_moneyid, :ld_amt,:ll_scid,:ll_reltakeid
  498. From u_bmsttake_hedge
  499. Where billid = :arg_billid;
  500. If sqlca.SQLCode <> 0 Then
  501. rslt = 0
  502. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  503. Goto ext
  504. End If
  505. s_bmsttake_hedgemx s_mx[]
  506. If getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 Then
  507. rslt = 0
  508. Goto ext
  509. End If
  510. For ll_i = 1 To ll_arr_cnt
  511. //删除对数单
  512. Select flag
  513. Into :li_flag_bill
  514. From u_salebill
  515. Where salebillid = :s_mx[ll_i].salebillid;
  516. If sqlca.SQLCode <> 0 Then
  517. rslt = 0
  518. arg_msg = '第'+String(ll_i)+'行,查询相关应收对数单状态失败,'+sqlca.SQLErrText
  519. Goto ext
  520. End If
  521. If li_flag_bill = 1 Then
  522. If uo_bill.c_auditing(s_mx[ll_i].salebillid,publ_operator,arg_msg,False) = 0 Then
  523. rslt = 0
  524. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  525. Goto ext
  526. End If
  527. End If
  528. If uo_bill.del(s_mx[ll_i].salebillid,arg_msg,False) = 0 Then
  529. rslt = 0
  530. arg_msg = '第'+String(ll_i)+'行,'+arg_msg
  531. Goto ext
  532. End If
  533. //删除应收帐
  534. If s_mx[ll_i].reltakeid > 0 Then
  535. If uo_take.del_takerec(ll_scid,1,s_mx[ll_i].reltakeid,s_mx[ll_i].cusid,arg_msg,False) = 0 Then
  536. rslt = 0
  537. Goto ext
  538. End If
  539. End If
  540. Update u_bmsttake_hedgemx
  541. Set reltakeid = 0,
  542. salebillid = 0
  543. Where billid = :arg_billid
  544. And printid = :s_mx[ll_i].printid;
  545. If sqlca.SQLCode <> 0 Then
  546. rslt = 0
  547. arg_msg = '第'+String(ll_i)+'行,更新相关应收帐唯一码失败(明细),'+sqlca.SQLErrText
  548. Goto ext
  549. End If
  550. Next
  551. If ll_reltakeid > 0 Then
  552. If uo_take.del_takerec(ll_scid,1,ll_reltakeid,ll_cusid,arg_msg,False) = 0 Then
  553. rslt = 0
  554. Goto ext
  555. End If
  556. End If
  557. Update u_bmsttake_hedge
  558. Set auditemp = '',
  559. auditdate = :null_datetime,
  560. flag = 0,
  561. reltakeid = 0
  562. Where billid = :arg_billid
  563. And flag = 1 ;
  564. If sqlca.SQLCode <> 0 Then
  565. rslt = 0
  566. arg_msg = '撤审核操作失败,'+sqlca.SQLErrText
  567. Goto ext
  568. ElseIf sqlca.SQLNRows = 0 Then
  569. rslt = 0
  570. arg_msg = "单据正在撤审,请稍后查询。"+"~n"+sqlca.SQLErrText
  571. Goto ext
  572. End If
  573. ext:
  574. If rslt = 0 Then
  575. Rollback;
  576. ElseIf rslt = 1 And arg_ifcommit Then
  577. Commit;
  578. End If
  579. Return rslt
  580. end function
  581. public function integer save (s_bmsttake_hedge arg_s_hedge, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  582. Long ll_i
  583. Long it_mxbt
  584. DateTime server_dt
  585. Long ll_billid
  586. String ls_billcode,ls_sccode
  587. Decimal ld_sum_amt
  588. IF IsNull(arg_s_hedge.scid) THEN arg_s_hedge.scid = 0
  589. IF IsNull(arg_s_hedge.billid) THEN arg_s_hedge.billid = 0
  590. IF IsNull(arg_s_hedge.billemp) THEN arg_s_hedge.billemp = ''
  591. IF IsNull(arg_s_hedge.relcode) THEN arg_s_hedge.relcode = ''
  592. IF IsNull(arg_s_hedge.billtype) THEN arg_s_hedge.billtype = 0
  593. IF IsNull(arg_s_hedge.cusid) THEN arg_s_hedge.cusid = 0
  594. IF IsNull(arg_s_hedge.moneyid) THEN arg_s_hedge.moneyid = 0
  595. IF IsNull(arg_s_hedge.amt) THEN arg_s_hedge.amt = 0
  596. IF IsNull(arg_s_hedge.dscrp) THEN arg_s_hedge.dscrp = ''
  597. IF IsNull(arg_s_hedge.mrate) THEN arg_s_hedge.mrate = 1
  598. IF arg_s_hedge.billemp = '' THEN
  599. arg_msg = '请输入经手人'
  600. rslt = 0
  601. GOTO ext
  602. END IF
  603. it_mxbt = UpperBound(arg_s_hedge.arg_s_mx)
  604. IF it_mxbt = 0 THEN
  605. rslt = 0
  606. arg_msg = '没有明细内容'
  607. GOTO ext
  608. END IF
  609. ld_sum_amt = 0
  610. FOR ll_i = 1 To it_mxbt
  611. IF arg_s_hedge.arg_s_mx[ll_i].cusid = arg_s_hedge.cusid THEN
  612. rslt = 0
  613. arg_msg = '第'+String(ll_i)+'行,明细客户不能与应收调入客户相同'
  614. GOTO ext
  615. END IF
  616. ld_sum_amt = ld_sum_amt + arg_s_hedge.arg_s_mx[ll_i].amt * arg_s_hedge.arg_s_mx[ll_i].mrate
  617. NEXT
  618. IF ld_sum_amt = 0 THEN
  619. rslt = 0
  620. arg_msg = '合计金额为0,不能保存'
  621. GOTO ext
  622. END IF
  623. arg_s_hedge.amt = ld_sum_amt
  624. SELECT Top 1 getdate() Into :server_dt From u_user;
  625. IF sqlca.SQLCode <> 0 THEN
  626. rslt = 0
  627. arg_msg = "查询操作失败,日期 "
  628. GOTO ext
  629. END IF
  630. IF arg_s_hedge.billid = 0 THEN
  631. ll_billid = f_sys_scidentity(0,"u_bmsttake_hedge","billid",arg_msg,True,id_sqlca)
  632. IF ll_billid <= 0 THEN
  633. rslt = 0
  634. GOTO ext
  635. END IF
  636. IF f_get_sccode(arg_s_hedge.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  637. rslt = 0
  638. GOTO ext
  639. END IF
  640. ls_billcode = getid(arg_s_hedge.scid,ls_sccode + 'HB',Date(server_dt),False,sqlca)
  641. IF ls_billcode = "err" THEN
  642. rslt = 0
  643. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  644. GOTO ext
  645. END IF
  646. INSERT INTO u_bmsttake_hedge
  647. (scid,
  648. billid,
  649. billcode,
  650. billdate,
  651. billemp,
  652. relcode,
  653. billtype,
  654. cusid,
  655. moneyid,
  656. amt,
  657. dscrp,
  658. opemp,
  659. opdate,
  660. mrate)
  661. VALUES (:arg_s_hedge.scid,
  662. :ll_billid,
  663. :ls_billcode,
  664. :arg_s_hedge.billdate,
  665. :arg_s_hedge.billemp,
  666. :arg_s_hedge.relcode,
  667. :arg_s_hedge.billtype,
  668. :arg_s_hedge.cusid,
  669. :arg_s_hedge.moneyid,
  670. :arg_s_hedge.amt,
  671. :arg_s_hedge.dscrp,
  672. :arg_opemp,
  673. :server_dt,
  674. :arg_s_hedge.mrate);
  675. IF sqlca.SQLCode <> 0 THEN
  676. rslt = 0
  677. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  678. GOTO ext
  679. END IF
  680. FOR ll_i = 1 To it_mxbt
  681. INSERT INTO u_bmsttake_hedgemx
  682. (billid,
  683. printid,
  684. cusid,
  685. takeid,
  686. amt,
  687. mxdscrp,
  688. moneyid,
  689. mrate)
  690. VALUES (:ll_billid,
  691. :arg_s_hedge.arg_s_mx[ll_i].printid,
  692. :arg_s_hedge.arg_s_mx[ll_i].cusid,
  693. :arg_s_hedge.arg_s_mx[ll_i].takeid,
  694. :arg_s_hedge.arg_s_mx[ll_i].amt,
  695. :arg_s_hedge.arg_s_mx[ll_i].mxdscrp,
  696. :arg_s_hedge.arg_s_mx[ll_i].moneyid,
  697. :arg_s_hedge.arg_s_mx[ll_i].mrate);
  698. IF sqlca.SQLCode <> 0 THEN
  699. rslt = 0
  700. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  701. GOTO ext
  702. END IF
  703. NEXT
  704. uo_billid = ll_billid
  705. uo_billcode = ls_billcode
  706. ELSE
  707. UPDATE u_bmsttake_hedge
  708. SET billdate = :arg_s_hedge.billdate,
  709. billemp = :arg_s_hedge.billemp,
  710. relcode = :arg_s_hedge.relcode,
  711. cusid = :arg_s_hedge.cusid,
  712. moneyid = :arg_s_hedge.moneyid,
  713. amt = :arg_s_hedge.amt,
  714. dscrp = :arg_s_hedge.dscrp,
  715. modemp = :arg_opemp,
  716. moddate = :server_dt,
  717. mrate = :arg_s_hedge.mrate
  718. WHERE billid = :arg_s_hedge.billid
  719. And flag = 0 ;
  720. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  721. rslt = 0
  722. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  723. GOTO ext
  724. END IF
  725. DELETE FROM u_bmsttake_hedgemx
  726. Where billid = :arg_s_hedge.billid;
  727. IF sqlca.SQLCode <> 0 THEN
  728. rslt = 0
  729. arg_msg = "删除原有明细操作失败"+"~n"+sqlca.SQLErrText
  730. GOTO ext
  731. END IF
  732. FOR ll_i = 1 To it_mxbt
  733. INSERT INTO u_bmsttake_hedgemx
  734. (billid,
  735. printid,
  736. cusid,
  737. takeid,
  738. amt,
  739. mxdscrp,
  740. moneyid,
  741. mrate)
  742. VALUES (:arg_s_hedge.billid,
  743. :arg_s_hedge.arg_s_mx[ll_i].printid,
  744. :arg_s_hedge.arg_s_mx[ll_i].cusid,
  745. :arg_s_hedge.arg_s_mx[ll_i].takeid,
  746. :arg_s_hedge.arg_s_mx[ll_i].amt,
  747. :arg_s_hedge.arg_s_mx[ll_i].mxdscrp,
  748. :arg_s_hedge.arg_s_mx[ll_i].moneyid,
  749. :arg_s_hedge.arg_s_mx[ll_i].mrate);
  750. IF sqlca.SQLCode <> 0 THEN
  751. rslt = 0
  752. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  753. GOTO ext
  754. END IF
  755. NEXT
  756. uo_billid = arg_s_hedge.billid
  757. END IF
  758. ext:
  759. IF rslt = 0 THEN
  760. ROLLBACK;
  761. ELSEIF arg_ifcommit And rslt = 1 THEN
  762. COMMIT;
  763. END IF
  764. RETURN rslt
  765. end function
  766. on uo_bmsttake_hedge.create
  767. call super::create
  768. TriggerEvent( this, "constructor" )
  769. end on
  770. on uo_bmsttake_hedge.destroy
  771. TriggerEvent( this, "destructor" )
  772. call super::destroy
  773. end on