uo_taskdamt.sru 34 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571
  1. $PBExportHeader$uo_taskdamt.sru
  2. forward
  3. global type uo_taskdamt from nonvisualobject
  4. end type
  5. type s_saleplanmx from structure within uo_taskdamt
  6. end type
  7. end forward
  8. type s_saleplanmx from structure
  9. long mtrlid
  10. string mtrlcode
  11. long printid
  12. decimal { 5 } planqty
  13. string mxdscrp
  14. end type
  15. global type uo_taskdamt from nonvisualobject
  16. end type
  17. global uo_taskdamt uo_taskdamt
  18. type variables
  19. Long uo_billid
  20. Int uo_option_msttake_takeamt_secaudit
  21. end variables
  22. forward prototypes
  23. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  24. public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg)
  29. public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  30. public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer c_secauditing (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  34. public function integer uof_add_relcode (long arg_billid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit)
  35. end prototypes
  36. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  37. IF arg_scid < 0 THEN
  38. rslt = 0
  39. arg_msg = '请选择正确的分部'
  40. GOTO ext
  41. END IF
  42. IF arg_billid <= 0 THEN
  43. rslt = 0
  44. arg_msg = '错误单据唯一码'
  45. GOTO ext
  46. END IF
  47. Int li_permitflag
  48. SELECT flag INTO :li_permitflag
  49. FROM u_taskdamt
  50. Where billid = :arg_billid;
  51. IF sqlca.SQLCode <> 0 THEN
  52. arg_msg = '查询单据审核标记失败'
  53. rslt = 0
  54. GOTO ext
  55. END IF
  56. IF li_permitflag = 1 THEN
  57. rslt = 0
  58. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  59. GOTO ext
  60. END IF
  61. ext:
  62. RETURN rslt
  63. end function
  64. public function integer save (s_taskdamt arg_s_bd, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  65. DateTime server_dt
  66. Long ll_billid,it_mxbt,ll_i,i
  67. String ls_sccode,ls_billcode
  68. Long ll_cusid_mx
  69. Long ll_moneyid_account,ll_moneyid_native
  70. IF IsNull(arg_s_bd.scid) THEN arg_s_bd.scid = 0
  71. IF IsNull(arg_s_bd.billid) THEN arg_s_bd.billid = 0
  72. IF IsNull(arg_s_bd.cussptid) THEN arg_s_bd.cussptid = 0
  73. IF IsNull(arg_s_bd.part) THEN arg_s_bd.part = ''
  74. IF IsNull(arg_s_bd.assign_emp) THEN arg_s_bd.assign_emp = ''
  75. IF IsNull(arg_s_bd.dscrp) THEN arg_s_bd.dscrp = ''
  76. IF IsNull(arg_s_bd.ifauto) THEN arg_s_bd.ifauto = 0
  77. IF IsNull(arg_s_bd.salebillid) THEN arg_s_bd.salebillid = 0
  78. IF arg_s_bd.cussptid = 0 THEN
  79. rslt = 0
  80. arg_msg = "请选择客户!"
  81. GOTO ext
  82. END IF
  83. cnt = 0
  84. SELECT count(*) INTO :cnt
  85. FROM u_cust
  86. Where cusid = :arg_s_bd.cussptid;
  87. IF sqlca.SQLCode <> 0 THEN
  88. arg_msg = '查询客户资料失败,'+sqlca.SQLErrText
  89. rslt = 0
  90. GOTO ext
  91. END IF
  92. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  93. IF sqlca.SQLCode <> 0 THEN
  94. rslt = 0
  95. arg_msg = "查询操作失败,日期 "
  96. GOTO ext
  97. END IF
  98. it_mxbt = UpperBound(arg_s_bd.arg_s_mx)
  99. IF it_mxbt <= 0 THEN
  100. rslt = 0
  101. arg_msg = "没有正确明细内容"
  102. GOTO ext
  103. END IF
  104. SELECT moneyid INTO :ll_moneyid_native
  105. FROM cw_currency
  106. Where native = 1;
  107. IF sqlca.SQLCode <> 0 THEN
  108. arg_msg = '查询本位币资料失败,请检查币种资料'
  109. rslt = 0
  110. GOTO ext
  111. END IF
  112. //检查明细
  113. FOR ll_i = 1 TO it_mxbt
  114. IF IsNull(arg_s_bd.arg_s_mx[ll_i].dscrp) THEN arg_s_bd.arg_s_mx[ll_i].dscrp = ''
  115. IF IsNull(arg_s_bd.arg_s_mx[ll_i].damt) THEN arg_s_bd.arg_s_mx[ll_i].damt = 0
  116. IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = 0 THEN
  117. rslt = 0
  118. arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种'
  119. GOTO ext
  120. END IF
  121. IF arg_s_bd.arg_s_mx[ll_i].realrate = 0 THEN
  122. rslt = 0
  123. arg_msg = '明细行:'+String(ll_i)+',请选择应收帐币种汇率'
  124. GOTO ext
  125. END IF
  126. IF arg_s_bd.arg_s_mx[ll_i].accountsid = 0 THEN
  127. rslt = 0
  128. arg_msg = '明细行:'+String(ll_i)+',请选择出纳帐号'
  129. GOTO ext
  130. END IF
  131. SELECT moneyid INTO :ll_moneyid_account
  132. FROM u_accounts
  133. Where accountsid = :arg_s_bd.arg_s_mx[ll_i].accountsid;
  134. IF sqlca.SQLCode <> 0 THEN
  135. arg_msg = '明细行:'+String(ll_i)+',查询帐号币种失败,'+sqlca.SQLErrText
  136. rslt = 0
  137. GOTO ext
  138. END IF
  139. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  140. IF ll_moneyid_account = 0 THEN
  141. arg_msg = '明细行:'+String(ll_i)+',帐号币种未指定,请检查'
  142. rslt = 0
  143. GOTO ext
  144. END IF
  145. IF arg_s_bd.arg_s_mx[ll_i].realmoneyid <> ll_moneyid_account AND arg_s_bd.arg_s_mx[ll_i].realrate = 1 THEN
  146. arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种不相同,汇率不能设为1'
  147. rslt = 0
  148. GOTO ext
  149. END IF
  150. IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_account AND arg_s_bd.arg_s_mx[ll_i].realrate <> 1 THEN
  151. arg_msg = '明细行:'+String(ll_i)+',收款币种与帐号币种相同,汇率要设为1'
  152. rslt = 0
  153. GOTO ext
  154. END IF
  155. IF ll_moneyid_account = ll_moneyid_native THEN
  156. IF arg_s_bd.arg_s_mx[ll_i].realmoneyid = ll_moneyid_native THEN
  157. arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2)
  158. ELSE
  159. arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt / arg_s_bd.arg_s_mx[ll_i].realrate,2)
  160. END IF
  161. ELSE
  162. arg_s_bd.arg_s_mx[ll_i].realamt = Round(arg_s_bd.arg_s_mx[ll_i].takeamt * arg_s_bd.arg_s_mx[ll_i].realrate,2)
  163. END IF
  164. IF arg_s_bd.arg_s_mx[ll_i].itemid = 0 THEN
  165. rslt = 0
  166. arg_msg = '请选择收支项目'
  167. GOTO ext
  168. END IF
  169. SELECT cusid
  170. INTO :ll_cusid_mx
  171. FROM u_saletask
  172. WHERE taskid = :arg_s_bd.arg_s_mx[ll_i].relid
  173. AND scid = :arg_s_bd.scid;
  174. IF sqlca.SQLCode <> 0 THEN
  175. rslt = 0
  176. arg_msg = "查询操作失败>>相关的销售订单的客户ID"+"~n"+sqlca.SQLErrText
  177. GOTO ext
  178. END IF
  179. IF ll_cusid_mx <> arg_s_bd.cussptid THEN
  180. rslt = 0
  181. arg_msg = "单据的客户ID与单据明细销售订单的客户ID不相符,请检查,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行"
  182. GOTO ext
  183. END IF
  184. IF arg_s_bd.ifauto = 0 AND arg_s_bd.arg_s_mx[ll_i].billtype = 2 THEN
  185. rslt = 0
  186. arg_msg = "手动订单收款单类型不能选择自动对帐,在第["+String(arg_s_bd.arg_s_mx[ll_i].printid)+"]行"
  187. GOTO ext
  188. END IF
  189. NEXT
  190. IF arg_s_bd.billid = 0 THEN
  191. ll_billid = f_sys_scidentity(0,"u_taskdamt","billid",arg_msg,TRUE,id_sqlca)
  192. IF ll_billid <= 0 THEN
  193. rslt = 0
  194. GOTO ext
  195. END IF
  196. IF f_get_sccode(arg_s_bd.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  197. rslt = 0
  198. GOTO ext
  199. END IF
  200. ls_billcode = getid(arg_s_bd.scid,ls_sccode + 'SD',Date(server_dt),FALSE,sqlca)
  201. IF ls_billcode = "err" THEN
  202. rslt = 0
  203. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  204. GOTO ext
  205. END IF
  206. INSERT INTO u_taskdamt
  207. (
  208. scid,
  209. billid,
  210. billcode,
  211. cussptid,
  212. part,
  213. billdate,
  214. assign_emp,
  215. dscrp,
  216. opdate,
  217. opemp ,
  218. ifauto,
  219. salebillid)
  220. VALUES (
  221. :arg_s_bd.scid,
  222. :ll_billid,
  223. :ls_billcode,
  224. :arg_s_bd.cussptid,
  225. :arg_s_bd.part,
  226. :arg_s_bd.billdate,
  227. :arg_s_bd.assign_emp,
  228. :arg_s_bd.dscrp,
  229. :server_dt,
  230. :publ_operator,
  231. :arg_s_bd.ifauto,
  232. :arg_s_bd.salebillid ) ;
  233. IF sqlca.SQLCode <> 0 THEN
  234. rslt = 0
  235. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  236. GOTO ext
  237. END IF
  238. FOR i = 1 TO it_mxbt
  239. INSERT INTO u_taskdamt_mx
  240. (scid,
  241. billid,
  242. printid,
  243. relid,
  244. reltaskcode,
  245. damt,
  246. dscrp,
  247. accountsid,
  248. billamt,
  249. itemid,
  250. takeamt,
  251. reltakeamt,
  252. reldamt,
  253. realmoneyid,
  254. realrate,
  255. realamt,
  256. billtype,
  257. banktypeid)
  258. VALUES (
  259. :arg_s_bd.scid,
  260. :ll_billid,
  261. :arg_s_bd.arg_s_mx[i].printid,
  262. :arg_s_bd.arg_s_mx[i].RELid,
  263. :arg_s_bd.arg_s_mx[i].reltaskcode,
  264. :arg_s_bd.arg_s_mx[i].DAMT,
  265. :arg_s_bd.arg_s_mx[i].dscrp,
  266. :arg_s_bd.arg_s_mx[i].accountsid,
  267. :arg_s_bd.arg_s_mx[i].billamt,
  268. :arg_s_bd.arg_s_mx[i].itemid,
  269. :arg_s_bd.arg_s_mx[i].takeamt,
  270. :arg_s_bd.arg_s_mx[i].reltakeamt,
  271. :arg_s_bd.arg_s_mx[i].reldamt,
  272. :arg_s_bd.arg_s_mx[i].realmoneyid,
  273. :arg_s_bd.arg_s_mx[i].realrate,
  274. :arg_s_bd.arg_s_mx[i].realamt,
  275. :arg_s_bd.arg_s_mx[i].billtype,
  276. :arg_s_bd.arg_s_mx[i].banktypeid);
  277. IF sqlca.SQLCode <> 0 THEN
  278. rslt = 0
  279. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  280. GOTO ext
  281. END IF
  282. NEXT
  283. uo_billid = ll_billid
  284. ELSE
  285. UPDATE u_taskdamt
  286. SET
  287. cussptid = :arg_s_bd.CUSSPTID,
  288. part = :arg_s_bd.PART,
  289. billdate = :arg_s_bd.BILLDATE,
  290. assign_emp = :arg_s_bd.ASSIGN_EMP,
  291. dscrp = :arg_s_bd.DSCRP,
  292. moddate = getdate(),
  293. modemp = :publ_operator
  294. WHERE billid = :arg_s_bd.billid
  295. AND scid = :arg_s_bd.scid
  296. AND flag = 0;
  297. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  298. rslt = 0
  299. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  300. GOTO ext
  301. END IF
  302. DELETE FROM u_TASKDAMT_mx
  303. WHERE billid = :arg_s_bd.billid
  304. AND scid = :arg_s_bd.scid;
  305. IF sqlca.SQLCode <> 0 THEN
  306. rslt = 0
  307. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  308. GOTO ext
  309. END IF
  310. FOR i = 1 TO it_mxbt
  311. INSERT INTO u_taskdamt_mx
  312. (scid,
  313. billid,
  314. printid,
  315. relid,
  316. reltaskcode,
  317. damt,
  318. dscrp,
  319. accountsid,
  320. billamt,
  321. itemid,
  322. takeamt,
  323. reltakeamt,
  324. reldamt,
  325. realmoneyid,
  326. realrate,
  327. realamt,
  328. billtype,
  329. banktypeid)
  330. VALUES (
  331. :arg_s_bd.scid,
  332. :arg_s_bd.billid,
  333. :arg_s_bd.arg_s_mx[i].printid,
  334. :arg_s_bd.arg_s_mx[i].RELid,
  335. :arg_s_bd.arg_s_mx[i].reltaskcode,
  336. :arg_s_bd.arg_s_mx[i].DAMT,
  337. :arg_s_bd.arg_s_mx[i].dscrp,
  338. :arg_s_bd.arg_s_mx[i].accountsid,
  339. :arg_s_bd.arg_s_mx[i].billamt,
  340. :arg_s_bd.arg_s_mx[i].itemid,
  341. :arg_s_bd.arg_s_mx[i].takeamt,
  342. :arg_s_bd.arg_s_mx[i].reltakeamt,
  343. :arg_s_bd.arg_s_mx[i].reldamt,
  344. :arg_s_bd.arg_s_mx[i].realmoneyid,
  345. :arg_s_bd.arg_s_mx[i].realrate,
  346. :arg_s_bd.arg_s_mx[i].realamt,
  347. :arg_s_bd.arg_s_mx[i].billtype,
  348. :arg_s_bd.arg_s_mx[i].banktypeid);
  349. IF sqlca.SQLCode <> 0 THEN
  350. rslt = 0
  351. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  352. GOTO ext
  353. END IF
  354. NEXT
  355. //
  356. uo_billid = arg_s_bd.billid
  357. END IF
  358. ext:
  359. IF rslt = 0 THEN
  360. ROLLBACK;
  361. ELSEIF arg_ifcommit AND rslt = 1 THEN
  362. COMMIT;
  363. END IF
  364. RETURN rslt
  365. end function
  366. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  367. IF arg_billid <= 0 THEN
  368. rslt = 0
  369. arg_msg = '错误单据唯一码'
  370. GOTO ext
  371. END IF
  372. arg_newdescppart = Trim(arg_newdescppart)
  373. IF arg_newdescppart = '' THEN
  374. rslt = 0
  375. arg_msg = "要添加内容为空,操作取消"
  376. GOTO ext
  377. END IF
  378. Int li_flag
  379. SELECT flag INTO :li_flag
  380. FROM u_taskdamt
  381. Where billid = :arg_billid;
  382. IF sqlca.SQLCode <> 0 THEN
  383. arg_msg = '查询单据审核标记失败'
  384. rslt = 0
  385. GOTO ext
  386. END IF
  387. IF li_flag = 0 THEN
  388. rslt = 0
  389. arg_msg = '单据未审核,请按修改单据修改备注'
  390. GOTO ext
  391. END IF
  392. UPDATE u_taskdamt
  393. SET dscrp = dscrp+' '+:arg_newdescppart
  394. Where billid = :arg_billid;
  395. IF sqlca.SQLCode <> 0 THEN
  396. rslt = 0
  397. arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+sqlca.SQLErrText
  398. GOTO ext
  399. END IF
  400. ext:
  401. IF rslt = 0 THEN
  402. ROLLBACK;
  403. ELSEIF arg_ifcommit AND rslt = 1 THEN
  404. COMMIT;
  405. END IF
  406. RETURN rslt
  407. end function
  408. public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  409. IF arg_billid <= 0 THEN
  410. rslt = 0
  411. arg_msg = '错误单据唯一码'
  412. GOTO ext
  413. END IF
  414. Int li_auditflag,li_damtflag,li_billtype,li_ifauto, li_secflag
  415. Decimal ld_takeamt
  416. Long ll_scid
  417. SELECT flag,scid,ifauto,secflag
  418. INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag
  419. FROM u_taskdamt
  420. Where billid = :arg_billid;
  421. IF sqlca.SQLCode <> 0 THEN
  422. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  423. rslt = 0
  424. GOTO ext
  425. END IF
  426. IF li_auditflag = 1 THEN
  427. rslt = 0
  428. arg_msg = '单据已经最终审核,不可以再审!'
  429. GOTO ext
  430. END IF
  431. //s_taskdamtmx arg_bd_mx[]
  432. //Long ll_i
  433. //
  434. //IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN
  435. // rslt = 0
  436. // GOTO ext
  437. //END IF
  438. //
  439. //IF UpperBound(arg_bd_mx) <= 0 THEN
  440. // rslt = 0
  441. // arg_msg = "明细错误,操作取消"
  442. // GOTO ext
  443. //END IF
  444. //
  445. //FOR ll_i = 1 TO UpperBound(arg_bd_mx) - 1
  446. //
  447. //// IF sys_option_m_msttake = 1 THEN //使用多币种
  448. //// ld_takeamt = arg_bd_mx[ll_i].takeamt
  449. //// ELSE // 系统不使用多币种,转换为人民币
  450. //// ld_takeamt = arg_bd_mx[ll_i].realamt
  451. //// END IF
  452. //
  453. // ld_takeamt = arg_bd_mx[ll_i].realamt
  454. //
  455. // IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金
  456. // UPDATE u_SaleTask
  457. // SET takedamt = takedamt + :ld_takeamt
  458. // WHERE taskid = :arg_bd_mx[ll_i].relid
  459. // AND scid = :ll_scid;
  460. // IF sqlca.SQLCode <> 0 THEN
  461. // rslt = 0
  462. // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  463. // GOTO ext
  464. // END IF
  465. // ELSE //单据余款
  466. // UPDATE u_SaleTask
  467. // SET takeamt = takeamt + :ld_takeamt
  468. // WHERE taskid = :arg_bd_mx[ll_i].relid
  469. // AND scid = :ll_scid;
  470. // IF sqlca.SQLCode <> 0 THEN
  471. // rslt = 0
  472. // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  473. // GOTO ext
  474. // END IF
  475. // END IF
  476. //
  477. // if li_ifauto = 0 and arg_bd_mx[ll_i].billtype <> 2 then
  478. // IF p_update_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,FALSE ) = 0 THEN
  479. // rslt = 0
  480. // GOTO ext
  481. // END IF
  482. // end if
  483. //NEXT
  484. //更新审核标记
  485. UPDATE u_taskdamt
  486. SET permit_emp = :publ_operator,
  487. permit_date = getdate(),
  488. flag = 1
  489. WHERE billid = :arg_billid
  490. AND flag = 0;
  491. IF sqlca.SQLCode <> 0 THEN
  492. rslt = 0
  493. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  494. GOTO ext
  495. END IF
  496. ext:
  497. IF rslt = 0 THEN
  498. ROLLBACK;
  499. ELSEIF rslt = 1 AND arg_ifcommit THEN
  500. COMMIT;
  501. END IF
  502. RETURN rslt
  503. end function
  504. public function integer cancel (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  505. IF arg_billid <= 0 THEN
  506. rslt = 0
  507. arg_msg = '错误单据唯一码'
  508. GOTO ext
  509. END IF
  510. Int li_auditflag
  511. SELECT flag
  512. INTO :li_auditflag
  513. FROM u_taskdamt
  514. Where billid = :arg_billid;
  515. IF sqlca.SQLCode <> 0 THEN
  516. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  517. rslt = 0
  518. GOTO ext
  519. END IF
  520. IF li_auditflag = 1 THEN
  521. rslt = 0
  522. arg_msg = '单据已经最终审核,不可以删除'
  523. GOTO ext
  524. END IF
  525. DELETE FROM u_taskdamt_mx
  526. Where billid = :arg_billid;
  527. IF sqlca.SQLCode <> 0 THEN
  528. rslt = 0
  529. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  530. GOTO ext
  531. END IF
  532. DELETE FROM u_taskdamt
  533. Where billid = :arg_billid;
  534. IF sqlca.SQLCode <> 0 THEN
  535. rslt = 0
  536. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  537. GOTO ext
  538. END IF
  539. ext:
  540. IF rslt = 0 THEN
  541. ROLLBACK;
  542. ELSEIF rslt = 1 AND arg_ifcommit THEN
  543. COMMIT;
  544. END IF
  545. RETURN rslt
  546. end function
  547. public function integer getinfo (long arg_billid, ref s_taskdamtmx arg_ref_s_mx[], ref string arg_msg);Int rslt = 1
  548. Long i = 1,no_mxcheck = 0
  549. IF arg_billid <= 0 THEN
  550. rslt = 0
  551. arg_msg = '错误单据唯一码'
  552. GOTO ext
  553. END IF
  554. //用游标读取明细
  555. DECLARE cur_bdmx CURSOR FOR
  556. SELECT scid,
  557. billid,
  558. printid,
  559. relid,
  560. reltaskcode,
  561. damt,
  562. dscrp,
  563. accountsid,
  564. billamt,
  565. itemid,
  566. takeamt,
  567. reltakeamt,
  568. reldamt,
  569. realmoneyid,
  570. realrate,
  571. realamt,
  572. banktypeid,
  573. paytaskid,
  574. billtype
  575. FROM u_taskdamt_mx
  576. WHERE billid = :arg_billid
  577. Order By printid;
  578. OPEN cur_bdmx;
  579. FETCH cur_bdmx
  580. INTO :arg_ref_s_mx[i].scid,
  581. :arg_ref_s_mx[i].billID,
  582. :arg_ref_s_mx[i].printid,
  583. :arg_ref_s_mx[i].relid,
  584. :arg_ref_s_mx[i].reltaskcode,
  585. :arg_ref_s_mx[i].damt,
  586. :arg_ref_s_mx[i].dscrp,
  587. :arg_ref_s_mx[i].accountsid,
  588. :arg_ref_s_mx[i].billamt,
  589. :arg_ref_s_mx[i].itemid,
  590. :arg_ref_s_mx[i].takeamt,
  591. :arg_ref_s_mx[i].reltakeamt,
  592. :arg_ref_s_mx[i].reldamt,
  593. :arg_ref_s_mx[i].realmoneyid,
  594. :arg_ref_s_mx[i].realrate,
  595. :arg_ref_s_mx[i].realamt,
  596. :arg_ref_s_mx[i].banktypeid,
  597. :arg_ref_s_mx[i].paytaskid,
  598. :arg_ref_s_mx[i].billtype;
  599. DO WHILE sqlca.SQLCode = 0
  600. i++
  601. FETCH cur_bdmx
  602. INTO :arg_ref_s_mx[i].scid,
  603. :arg_ref_s_mx[i].billID,
  604. :arg_ref_s_mx[i].printid,
  605. :arg_ref_s_mx[i].relid,
  606. :arg_ref_s_mx[i].reltaskcode,
  607. :arg_ref_s_mx[i].damt,
  608. :arg_ref_s_mx[i].dscrp,
  609. :arg_ref_s_mx[i].accountsid,
  610. :arg_ref_s_mx[i].billamt,
  611. :arg_ref_s_mx[i].itemid,
  612. :arg_ref_s_mx[i].takeamt,
  613. :arg_ref_s_mx[i].reltakeamt,
  614. :arg_ref_s_mx[i].reldamt,
  615. :arg_ref_s_mx[i].realmoneyid,
  616. :arg_ref_s_mx[i].realrate,
  617. :arg_ref_s_mx[i].realamt,
  618. :arg_ref_s_mx[i].banktypeid,
  619. :arg_ref_s_mx[i].paytaskid,
  620. :arg_ref_s_mx[i].billtype;
  621. LOOP
  622. CLOSE cur_bdmx;
  623. //检验明细是否读入完整
  624. SELECT count(*) INTO :no_mxcheck
  625. FROM u_taskdamt_mx
  626. Where billid = :arg_billid;
  627. IF sqlca.SQLCode <> 0 THEN
  628. rslt = 0
  629. arg_msg = "查询操作失败,单据明细数量"
  630. GOTO ext
  631. END IF
  632. IF i <> (no_mxcheck+1) THEN
  633. rslt = 0
  634. arg_msg = "查询操作失败,单据明细"
  635. GOTO ext
  636. END IF
  637. ext:
  638. RETURN rslt
  639. end function
  640. public function integer p_update_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  641. Long cnt = 0,i
  642. uo_musttake uo_take
  643. uo_take = Create uo_musttake
  644. uo_iteminput uo_item
  645. uo_item = Create uo_iteminput
  646. String ls_mtrlname
  647. String ls_about
  648. Long ref_dateint
  649. IF uo_option_msttake_takeamt_secaudit = -1000 THEN
  650. arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!'
  651. rslt = 0
  652. GOTO ext
  653. END IF
  654. IF arg_billid = 0 THEN
  655. rslt = 0
  656. arg_msg = "没有审核对象"
  657. GOTO ext
  658. END IF
  659. SELECT count(*) INTO :cnt
  660. FROM u_user
  661. Where username = :publ_operator Using sqlca ;
  662. IF sqlca.SQLCode <> 0 THEN
  663. rslt = 0
  664. arg_msg = "查询操作失败,操作员"
  665. GOTO ext
  666. END IF
  667. IF cnt = 0 THEN
  668. rslt = 0
  669. arg_msg = "操作员姓名未登记或已取消"
  670. GOTO ext
  671. END IF
  672. Long ll_cusid
  673. DateTime ld_indate
  674. String ls_assign_emp,ls_billcode,ls_part
  675. Decimal ld_takeamt
  676. String ls_taskcode
  677. Long ll_saletaskid,ll_banktypeid,ll_moneyid,ll_accountsid,ll_itemid
  678. Dec ll_realamt
  679. Long ll_billtype
  680. Long ll_moneyid_account
  681. decimal ld_mrate
  682. SELECT u_taskdamt.cussptid,
  683. u_taskdamt.billdate,
  684. u_taskdamt.assign_emp,
  685. u_taskdamt.billcode,
  686. u_taskdamt.part,
  687. u_taskdamt_mx.billtype,
  688. u_taskdamt_mx.takeamt,
  689. u_taskdamt_mx.relTaskCode,
  690. u_taskdamt_mx.banktypeid,
  691. u_taskdamt_mx.relid,
  692. u_taskdamt_mx.realmoneyid,
  693. u_taskdamt_mx.accountsid,
  694. u_taskdamt_mx.itemid,
  695. u_taskdamt_mx.realamt,
  696. u_taskdamt_mx.realrate
  697. INTO :ll_cusid,
  698. :ld_indate,
  699. :ls_assign_emp,
  700. :ls_billcode,
  701. :ls_part,
  702. :ll_billtype,
  703. :ld_takeamt,
  704. :ls_taskcode,
  705. :ll_banktypeid,
  706. :ll_saletaskid,
  707. :ll_moneyid,
  708. :ll_accountsid,
  709. :ll_itemid,
  710. :ll_realamt,
  711. :ld_mrate
  712. FROM u_taskdamt INNER JOIN
  713. u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid
  714. WHERE u_taskdamt.billid = :arg_billid
  715. And u_taskdamt_mx.printid = :arg_printid;
  716. IF sqlca.SQLCode <> 0 THEN
  717. rslt = 0
  718. arg_msg = "查询操作失败,订金单相关信息!" +sqlca.SQLErrText
  719. GOTO ext
  720. END IF
  721. SELECT moneyid INTO :ll_moneyid_account
  722. FROM u_accounts
  723. Where accountsid = :ll_accountsid;
  724. IF sqlca.SQLCode <> 0 THEN
  725. arg_msg = '查询帐号币种资料失败,'+sqlca.SQLErrText
  726. rslt = 0
  727. GOTO ext
  728. END IF
  729. IF IsNull(ll_moneyid_account) THEN ll_moneyid_account = 0
  730. IF ll_moneyid_account = 0 THEN
  731. arg_msg = '帐号币种未指定,请检查'
  732. rslt = 0
  733. GOTO ext
  734. END IF
  735. IF ld_takeamt <> 0 THEN
  736. IF ll_billtype = 0 THEN
  737. ls_about = ls_taskcode + "订金已收款"
  738. ELSE
  739. ls_about = ls_taskcode + "余额已收款"
  740. END IF
  741. // IF sys_option_m_msttake = 1 THEN //使用多币种
  742. // ld_takeamt = ld_takeamt_bill
  743. // ELSE // 系统不使用多币种,转换为人民币
  744. // ld_takeamt = ll_realamt
  745. // END IF
  746. //
  747. // ld_msttakeamt = ld_takeamt_bill
  748. // ld_takeamt = ld_msttakeamt
  749. s_bmsttake s_take
  750. s_take.scid = arg_scid
  751. s_take.cusID = ll_cusid
  752. s_take.takedate = ld_indate
  753. s_take.inrep = ls_assign_emp
  754. s_take.oriamt = 0 - ll_realamt
  755. s_take.msttakeamt = 0
  756. s_take.takeamt = ll_realamt
  757. s_take.takeamt_cn = ld_takeamt
  758. s_take.fpamt = ll_realamt
  759. s_take.dscrp = ls_about
  760. s_take.billcode = ls_billcode
  761. s_take.relcode = ls_part
  762. s_take.banktypeid = ll_banktypeid
  763. s_take.opemp = publ_operator
  764. s_take.buildtype = 1
  765. s_take.outwareid = ll_saletaskid
  766. s_take.accountsid = ll_accountsid
  767. s_take.itemid = ll_itemid
  768. s_take.moneyid = ll_moneyid
  769. s_take.moneyid_cn = ll_moneyid_account
  770. s_take.mrate = ld_mrate
  771. s_take.taskdscrp = '订单'+ls_taskcode+'金额:'+String(ld_takeamt,'#,##0.00')
  772. IF uo_take.add_takerec(s_take,arg_msg,False) = 0 THEN
  773. rslt = 0
  774. GOTO ext
  775. END IF
  776. UPDATE u_taskdamt_mx
  777. SET paytaskid = :uo_take.ref_takeid
  778. WHERE u_taskdamt_mx.billid = :arg_billid
  779. And u_taskdamt_mx.printid = :arg_printid;
  780. IF sqlca.SQLCode <> 0 THEN
  781. arg_msg = '更新相关应收帐id失败'
  782. rslt = 0
  783. GOTO ext
  784. END IF
  785. INSERT INTO u_bmsttake_fpmx
  786. (takeid,
  787. printid,
  788. relid,
  789. relbillcode,
  790. fpamt,
  791. fpdate,
  792. fpemp,
  793. scid)
  794. Values (:uo_take.ref_takeid,
  795. 1,
  796. :ll_saletaskid,
  797. :ls_taskcode,
  798. :ll_realamt,
  799. getdate(),
  800. :publ_operator,
  801. :arg_scid);
  802. IF sqlca.SQLCode <> 0 THEN
  803. arg_msg = '插入应收帐分配明细失败,'+sqlca.SQLErrText
  804. rslt = 0
  805. GOTO ext
  806. END IF
  807. IF uo_option_msttake_takeamt_secaudit = 1 THEN
  808. Int li_item_dfttype,li_itemflag
  809. SELECT dfttype,itemflag
  810. INTO :li_item_dfttype,:li_itemflag
  811. FROM u_itemdef
  812. Where u_itemdef.itemid = :ll_itemid;
  813. IF sqlca.SQLCode <> 0 THEN
  814. arg_msg = '查询当前收支项目核算类型和核算方向失败!'
  815. rslt = 0
  816. GOTO ext
  817. END IF
  818. s_iteminput s_input
  819. s_input.itemid = ll_itemid
  820. s_input.dateint = 0
  821. s_input.outdate = ld_indate
  822. s_input.dscrp = ls_about //'订单号:'+ls_taskcode+','+ls_dscrp
  823. // CHOOSE CASE li_item_dfttype
  824. // CASE 1,3,4
  825. // s_input.outamt = ld_takeamt * li_itemflag
  826. // CASE ELSE
  827. // s_input.outamt = ld_takeamt
  828. // END CHOOSE
  829. s_input.inamt = ld_takeamt
  830. s_input.outamt = 0
  831. s_input.accountsid = ll_accountsid
  832. s_input.banktypeid = ll_banktypeid
  833. s_input.billcode = ls_billcode
  834. s_input.relcode = ls_part
  835. s_input.relrep = ls_assign_emp
  836. s_input.opemp = publ_operator
  837. s_input.buildtype = 1
  838. IF uo_item.add_iteminput(s_input,arg_msg,False) = 0 THEN
  839. arg_msg = '增加收支明细帐失败!~n' + arg_msg
  840. rslt = 0
  841. GOTO ext
  842. END IF
  843. ref_dateint = uo_item.ref_dateint
  844. IF ref_dateint = 0 THEN
  845. arg_msg = '增加收支出纳明细帐失败!'
  846. rslt = 0
  847. GOTO ext
  848. END IF
  849. UPDATE u_taskdamt_mx
  850. SET reldateint = :ref_dateint
  851. WHERE u_taskdamt_mx.billid = :arg_billid
  852. And u_taskdamt_mx.printid = :arg_printid;
  853. IF sqlca.SQLCode <> 0 THEN
  854. arg_msg = '更新相关出纳帐id失败'
  855. rslt = 0
  856. GOTO ext
  857. END IF
  858. END IF
  859. END IF
  860. ext:
  861. IF rslt = 0 THEN
  862. ROLLBACK Using sqlca;
  863. ELSEIF rslt = 1 And arg_ifcommit THEN
  864. COMMIT Using sqlca;
  865. END IF
  866. Destroy uo_take
  867. Destroy uo_item
  868. RETURN rslt
  869. end function
  870. public function integer p_cancel_bmsttake (long arg_scid, long arg_billid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0,i
  871. uo_musttake uo_take
  872. uo_take = Create uo_musttake
  873. uo_iteminput uo_item
  874. uo_item = Create uo_iteminput
  875. IF uo_option_msttake_takeamt_secaudit = -1000 THEN
  876. arg_msg = '选项:[139]客户收款单使用二级审核,读取初始默认值失败,操作取消!'
  877. rslt = 0
  878. GOTO ext
  879. END IF
  880. IF arg_billid = 0 THEN
  881. rslt = 0
  882. arg_msg = "没有撤审对象"
  883. GOTO ext
  884. END IF
  885. Decimal ld_takeamt
  886. Long ll_cusid,ll_paytaskid
  887. Long ll_scid,ll_reldateint,ll_itemid
  888. SELECT u_taskdamt_mx.takeamt,
  889. u_taskdamt.cussptid,
  890. u_taskdamt_mx.paytaskid,
  891. u_taskdamt.scid,
  892. u_taskdamt_mx.reldateint,
  893. u_taskdamt_mx.itemid
  894. INTO :ld_takeamt,
  895. :ll_cusid,
  896. :ll_paytaskid,
  897. :ll_scid,
  898. :ll_reldateint,
  899. :ll_itemid
  900. FROM u_taskdamt INNER JOIN
  901. u_taskdamt_mx ON u_taskdamt.billid = u_taskdamt_mx.billid INNER JOIN
  902. u_saleTask ON u_taskdamt_mx.relid = u_saleTask.TaskID
  903. WHERE u_taskdamt.billid = :arg_billid
  904. And u_taskdamt_mx.printid = :arg_printid;
  905. IF sqlca.SQLCode <> 0 THEN
  906. rslt = 0
  907. arg_msg = "查询操作失败,订单相关信息!" +sqlca.SQLErrText
  908. GOTO ext
  909. END IF
  910. IF ld_takeamt <> 0 THEN
  911. IF uo_take.del_takerec(ll_scid,1,ll_paytaskid,ll_cusid,arg_msg,False) = 0 THEN
  912. rslt = 0
  913. GOTO ext
  914. END IF
  915. DELETE FROM u_bmsttake_fpmx
  916. Where takeid = :ll_paytaskid;
  917. IF sqlca.SQLCode <> 0 THEN
  918. rslt = 0
  919. arg_msg = "删除应收帐相关分配明细失败!" +sqlca.SQLErrText
  920. GOTO ext
  921. END IF
  922. END IF
  923. UPDATE u_taskdamt_mx
  924. SET paytaskid = 0
  925. WHERE u_taskdamt_mx.billid = :arg_billid
  926. And u_taskdamt_mx.printid = :arg_printid;
  927. IF sqlca.SQLCode <> 0 THEN
  928. arg_msg = '更新相关应收帐id失败'
  929. rslt = 0
  930. GOTO ext
  931. END IF
  932. IF uo_option_msttake_takeamt_secaudit = 1 THEN
  933. IF ll_itemid > 0 And ll_reldateint > 0 THEN
  934. IF uo_item.del_iteminput(ll_itemid,ll_reldateint,1,arg_msg,False) = 0 THEN
  935. arg_msg = '删除收支明细帐失败!~n' + arg_msg
  936. rslt = 0
  937. GOTO ext
  938. END IF
  939. END IF
  940. UPDATE u_taskdamt_mx
  941. SET reldateint = 0
  942. WHERE u_taskdamt_mx.billid = :arg_billid
  943. And u_taskdamt_mx.printid = :arg_printid;
  944. IF sqlca.SQLCode <> 0 THEN
  945. arg_msg = '更新相关出纳帐id失败'
  946. rslt = 0
  947. GOTO ext
  948. END IF
  949. END IF
  950. ext:
  951. IF rslt = 0 THEN
  952. ROLLBACK Using sqlca;
  953. ELSEIF rslt = 1 And arg_ifcommit THEN
  954. COMMIT Using sqlca;
  955. END IF
  956. Destroy uo_take
  957. Destroy uo_item
  958. RETURN rslt
  959. end function
  960. public function integer caudit (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  961. DateTime null_dt
  962. SetNull(null_dt)
  963. IF arg_billid <= 0 THEN
  964. rslt = 0
  965. arg_msg = '错误单据唯一码'
  966. GOTO ext
  967. END IF
  968. Int li_auditflag,li_billtype,li_damtflag,li_ifauto, li_secflag
  969. Decimal ld_takeamt
  970. Long ll_scid
  971. SELECT flag,scid,ifauto,secflag
  972. INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag
  973. FROM u_taskdamt
  974. Where billid = :arg_billid;
  975. IF sqlca.SQLCode <> 0 THEN
  976. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  977. rslt = 0
  978. GOTO ext
  979. END IF
  980. IF li_auditflag = 0 THEN
  981. rslt = 0
  982. arg_msg = "单据还未审核,不可以撤审"
  983. GOTO ext
  984. END IF
  985. IF li_secflag = 1 THEN
  986. rslt = 0
  987. arg_msg = "单据已经二审,不可以撤审"
  988. GOTO ext
  989. END IF
  990. IF arg_del = 0 THEN
  991. IF li_ifauto = 1 THEN
  992. rslt = 0
  993. arg_msg = "单据自动生成,不可手动撤审"
  994. GOTO ext
  995. END IF
  996. END IF
  997. //s_taskdamtmx arg_bd_mx[]
  998. //Long ll_i
  999. //
  1000. //IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN
  1001. // rslt = 0
  1002. // GOTO ext
  1003. //END IF
  1004. //
  1005. //IF UpperBound(arg_bd_mx) <= 0 THEN
  1006. // rslt = 0
  1007. // arg_msg = "明细错误,操作取消"
  1008. // GOTO ext
  1009. //END IF
  1010. //
  1011. //FOR ll_i = 1 TO UpperBound(arg_bd_mx) - 1
  1012. //
  1013. //// IF sys_option_m_msttake = 1 THEN //使用多币种
  1014. //// ld_takeamt = arg_bd_mx[ll_i].takeamt
  1015. //// ELSE // 系统不使用多币种,转换为人民币
  1016. //// ld_takeamt = arg_bd_mx[ll_i].realamt
  1017. //// END IF
  1018. //
  1019. // ld_takeamt = arg_bd_mx[ll_i].realamt
  1020. //
  1021. // IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金
  1022. // UPDATE u_SaleTask
  1023. // SET takedamt = takedamt - :ld_takeamt
  1024. // WHERE taskid = :arg_bd_mx[ll_i].relid
  1025. // AND scid = :ll_scid;
  1026. // IF sqlca.SQLCode <> 0 THEN
  1027. // rslt = 0
  1028. // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1029. // GOTO ext
  1030. // END IF
  1031. // ELSE //单据余款
  1032. // UPDATE u_SaleTask
  1033. // SET takeamt = takeamt - :ld_takeamt
  1034. // WHERE taskid = :arg_bd_mx[ll_i].relid
  1035. // AND scid = :ll_scid;
  1036. // IF sqlca.SQLCode <> 0 THEN
  1037. // rslt = 0
  1038. // arg_msg = "因网络或其它原因导致更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1039. // GOTO ext
  1040. // END IF
  1041. // END IF
  1042. //
  1043. // if li_ifauto = 0 and arg_bd_mx[ll_i].billtype <> 2 then
  1044. // IF p_cancel_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,FALSE ) = 0 THEN
  1045. // rslt = 0
  1046. // GOTO ext
  1047. // END IF
  1048. // end if
  1049. //NEXT
  1050. //更新审核标记
  1051. UPDATE u_taskdamt
  1052. SET permit_emp = '',
  1053. permit_date = :null_dt,
  1054. flag = 0
  1055. WHERE billid = :arg_billid
  1056. And flag = 1;
  1057. IF sqlca.SQLCode <> 0 THEN
  1058. rslt = 0
  1059. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1060. GOTO ext
  1061. END IF
  1062. ext:
  1063. IF rslt = 0 THEN
  1064. ROLLBACK;
  1065. ELSEIF rslt = 1 And arg_ifcommit THEN
  1066. COMMIT;
  1067. END IF
  1068. RETURN rslt
  1069. end function
  1070. public function integer secauditing (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1071. IF arg_billid <= 0 THEN
  1072. rslt = 0
  1073. arg_msg = '错误单据唯一码'
  1074. GOTO ext
  1075. END IF
  1076. Int li_auditflag,li_damtflag,li_billtype,li_ifauto,li_secflag
  1077. Decimal ld_takeamt
  1078. Long ll_scid
  1079. SELECT flag,scid,ifauto, secflag
  1080. INTO :li_auditflag,:ll_scid,:li_ifauto, :li_secflag
  1081. FROM u_taskdamt
  1082. Where billid = :arg_billid;
  1083. IF sqlca.SQLCode <> 0 THEN
  1084. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  1085. rslt = 0
  1086. GOTO ext
  1087. END IF
  1088. IF li_auditflag = 0 THEN
  1089. rslt = 0
  1090. arg_msg = '单据未一审,不可以二审!'
  1091. GOTO ext
  1092. END IF
  1093. IF li_secflag = 1 THEN
  1094. rslt = 0
  1095. arg_msg = '单据已经二审,不可以再审!'
  1096. GOTO ext
  1097. END IF
  1098. s_taskdamtmx arg_bd_mx[]
  1099. Long ll_i
  1100. IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN
  1101. rslt = 0
  1102. GOTO ext
  1103. END IF
  1104. IF UpperBound(arg_bd_mx) <= 0 THEN
  1105. rslt = 0
  1106. arg_msg = "明细错误,操作取消"
  1107. GOTO ext
  1108. END IF
  1109. FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1
  1110. // IF sys_option_m_msttake = 1 THEN //使用多币种
  1111. // ld_takeamt = arg_bd_mx[ll_i].takeamt
  1112. // ELSE // 系统不使用多币种,转换为人民币
  1113. // ld_takeamt = arg_bd_mx[ll_i].realamt
  1114. // END IF
  1115. ld_takeamt = arg_bd_mx[ll_i].realamt
  1116. IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金
  1117. UPDATE u_SaleTask
  1118. SET takedamt = takedamt + :ld_takeamt
  1119. WHERE taskid = :arg_bd_mx[ll_i].relid
  1120. And scid = :ll_scid;
  1121. IF sqlca.SQLCode <> 0 THEN
  1122. rslt = 0
  1123. arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1124. GOTO ext
  1125. END IF
  1126. ELSE //单据余款
  1127. UPDATE u_SaleTask
  1128. SET takeamt = takeamt + :ld_takeamt
  1129. WHERE taskid = :arg_bd_mx[ll_i].relid
  1130. And scid = :ll_scid;
  1131. IF sqlca.SQLCode <> 0 THEN
  1132. rslt = 0
  1133. arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1134. GOTO ext
  1135. END IF
  1136. END IF
  1137. IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN
  1138. IF p_update_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN
  1139. rslt = 0
  1140. GOTO ext
  1141. END IF
  1142. END IF
  1143. NEXT
  1144. //更新审核标记
  1145. UPDATE u_taskdamt
  1146. SET secauditemp = :publ_operator,
  1147. secauditdate = getdate(),
  1148. secflag = 1
  1149. WHERE billid = :arg_billid
  1150. AND secflag = 0
  1151. And flag = 1;
  1152. IF sqlca.SQLCode <> 0 THEN
  1153. rslt = 0
  1154. arg_msg = "单据审核操作失败"+"~n"+sqlca.SQLErrText
  1155. GOTO ext
  1156. END IF
  1157. ext:
  1158. IF rslt = 0 THEN
  1159. ROLLBACK;
  1160. ELSEIF rslt = 1 And arg_ifcommit THEN
  1161. COMMIT;
  1162. END IF
  1163. RETURN rslt
  1164. end function
  1165. public function integer c_secauditing (integer arg_del, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1166. DateTime null_dt
  1167. SetNull(null_dt)
  1168. IF arg_billid <= 0 THEN
  1169. rslt = 0
  1170. arg_msg = '错误单据唯一码'
  1171. GOTO ext
  1172. END IF
  1173. Int li_auditflag,li_billtype,li_damtflag,li_ifauto, li_secflag
  1174. Decimal ld_takeamt
  1175. Long ll_scid
  1176. SELECT flag,scid,ifauto,secflag
  1177. INTO :li_auditflag,:ll_scid,:li_ifauto,:li_secflag
  1178. FROM u_taskdamt
  1179. Where billid = :arg_billid;
  1180. IF sqlca.SQLCode <> 0 THEN
  1181. arg_msg = '查询单据审核标记失败,'+sqlca.SQLErrText
  1182. rslt = 0
  1183. GOTO ext
  1184. END IF
  1185. IF li_secflag = 0 THEN
  1186. rslt = 0
  1187. arg_msg = "单据还未二审,不可以撤审"
  1188. GOTO ext
  1189. END IF
  1190. IF arg_del = 0 THEN
  1191. IF li_ifauto = 1 THEN
  1192. rslt = 0
  1193. arg_msg = "单据自动生成,不可手动撤审"
  1194. GOTO ext
  1195. END IF
  1196. END IF
  1197. s_taskdamtmx arg_bd_mx[]
  1198. Long ll_i
  1199. IF getinfo(arg_billid,arg_bd_mx[],arg_msg) = 0 THEN
  1200. rslt = 0
  1201. GOTO ext
  1202. END IF
  1203. IF UpperBound(arg_bd_mx) <= 0 THEN
  1204. rslt = 0
  1205. arg_msg = "明细错误,操作取消"
  1206. GOTO ext
  1207. END IF
  1208. FOR ll_i = 1 To UpperBound(arg_bd_mx) - 1
  1209. // IF sys_option_m_msttake = 1 THEN //使用多币种
  1210. // ld_takeamt = arg_bd_mx[ll_i].takeamt
  1211. // ELSE // 系统不使用多币种,转换为人民币
  1212. // ld_takeamt = arg_bd_mx[ll_i].realamt
  1213. // END IF
  1214. ld_takeamt = arg_bd_mx[ll_i].realamt
  1215. IF arg_bd_mx[ll_i].billtype = 0 THEN //收订金
  1216. UPDATE u_SaleTask
  1217. SET takedamt = takedamt - :ld_takeamt
  1218. WHERE taskid = :arg_bd_mx[ll_i].relid
  1219. And scid = :ll_scid;
  1220. IF sqlca.SQLCode <> 0 THEN
  1221. rslt = 0
  1222. arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1223. GOTO ext
  1224. END IF
  1225. ELSE //单据余款
  1226. UPDATE u_SaleTask
  1227. SET takeamt = takeamt - :ld_takeamt
  1228. WHERE taskid = :arg_bd_mx[ll_i].relid
  1229. And scid = :ll_scid;
  1230. IF sqlca.SQLCode <> 0 THEN
  1231. rslt = 0
  1232. arg_msg = "更新销售订单操作失败"+"~n"+sqlca.SQLErrText
  1233. GOTO ext
  1234. END IF
  1235. END IF
  1236. IF li_ifauto = 0 And arg_bd_mx[ll_i].billtype <> 2 THEN
  1237. IF p_cancel_bmsttake(ll_scid,arg_billid,arg_bd_mx[ll_i].printid,arg_msg,False ) = 0 THEN
  1238. rslt = 0
  1239. GOTO ext
  1240. END IF
  1241. END IF
  1242. NEXT
  1243. //更新审核标记
  1244. UPDATE u_taskdamt
  1245. SET secauditemp = '',
  1246. secauditdate = :null_dt,
  1247. secflag = 0
  1248. WHERE billid = :arg_billid
  1249. And secflag = 1;
  1250. IF sqlca.SQLCode <> 0 THEN
  1251. rslt = 0
  1252. arg_msg = "单据撤二审操作失败"+"~n"+sqlca.SQLErrText
  1253. GOTO ext
  1254. END IF
  1255. ext:
  1256. IF rslt = 0 THEN
  1257. ROLLBACK;
  1258. ELSEIF rslt = 1 And arg_ifcommit THEN
  1259. COMMIT;
  1260. END IF
  1261. RETURN rslt
  1262. end function
  1263. public function integer uof_add_relcode (long arg_billid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1264. IF arg_billid <= 0 THEN
  1265. rslt = 0
  1266. arg_msg = '错误单据唯一码'
  1267. GOTO ext
  1268. END IF
  1269. Int li_flag
  1270. SELECT flag INTO :li_flag
  1271. FROM u_taskdamt
  1272. Where billid = :arg_billid;
  1273. IF sqlca.SQLCode <> 0 THEN
  1274. arg_msg = '查询单据审核标记失败'
  1275. rslt = 0
  1276. GOTO ext
  1277. END IF
  1278. IF li_flag = 0 THEN
  1279. rslt = 0
  1280. arg_msg = '单据未审核,请按修改单据修改相关号'
  1281. GOTO ext
  1282. END IF
  1283. UPDATE u_taskdamt
  1284. SET part = :arg_relcode
  1285. Where billid = :arg_billid;
  1286. IF sqlca.SQLCode <> 0 THEN
  1287. rslt = 0
  1288. arg_msg = "因网络或其它原因导致添加相关号操作失败"+"~n"+sqlca.SQLErrText
  1289. GOTO ext
  1290. END IF
  1291. ext:
  1292. IF rslt = 0 THEN
  1293. ROLLBACK;
  1294. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1295. COMMIT;
  1296. END IF
  1297. RETURN rslt
  1298. end function
  1299. on uo_taskdamt.create
  1300. call super::create
  1301. TriggerEvent( this, "constructor" )
  1302. end on
  1303. on uo_taskdamt.destroy
  1304. TriggerEvent( this, "destructor" )
  1305. call super::destroy
  1306. end on
  1307. event constructor;String arg_msg
  1308. String str_optionvalue
  1309. str_optionvalue = ''
  1310. f_get_sys_option_value('139',str_optionvalue,arg_msg)
  1311. uo_option_msttake_takeamt_secaudit = Long(str_optionvalue)
  1312. end event
  1313. global type uo_incase from nonvisualobject
  1314. end type