uo_saleout.sru 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527
  1. $PBExportHeader$uo_saleout.sru
  2. forward
  3. global type uo_saleout from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_saleout from nonvisualobject
  7. end type
  8. global uo_saleout uo_saleout
  9. type variables
  10. Transaction commit_transaction //数据commit事务
  11. long taskid
  12. int uo_option_confirmaudit_sale,uo_option_sale_use_planqty
  13. end variables
  14. forward prototypes
  15. public function integer save (s_saleout arg_saleout, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer p_getflag (long arg_taskid, ref integer arg_flag, ref string arg_msg)
  17. public function integer updatebegin (long arg_taskid, ref string arg_msg)
  18. public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer getinfo (long arg_taskid, ref s_saleoutmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  20. public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer trycmpsaleout (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer stoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer tmpstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer add_dscrp2 (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer stopqty (long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, ref string arg_msg)
  29. public function integer sec_audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  30. public function integer audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer sec_caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  33. end prototypes
  34. public function integer save (s_saleout arg_saleout, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  35. Long cnt,ll_i
  36. Long it_mxbt, it_mxbt_item
  37. Long ll_taskid
  38. String ls_taskcode,ls_sccode
  39. DateTime server_datetime
  40. Decimal ls_SaleQty,ld_saleoutqty,ld_qty_noaudit
  41. String ls_mtrlcode
  42. Decimal ld_upsalerate,ld_upsaleqty
  43. IF IsNull(arg_saleout.dscrp) THEN arg_saleout.dscrp = ''
  44. IF IsNull(arg_saleout.dscrp2) THEN arg_saleout.dscrp2 = ''
  45. IF IsNull(arg_saleout.assign_emp) THEN arg_saleout.assign_emp = ''
  46. IF IsNull(arg_saleout.paytype) THEN arg_saleout.paytype = ''
  47. IF IsNull(arg_saleout.relcode) THEN arg_saleout.relcode = ''
  48. IF IsNull(arg_saleout.banktypeid) THEN arg_saleout.banktypeid = 0
  49. IF IsNull(arg_saleout.moneyid) THEN arg_saleout.moneyid = 0
  50. //IF IsNull(arg_saleout.damt) THEN arg_saleout.damt = 0
  51. //IF IsNull(arg_saleout.otheramt) THEN arg_saleout.otheramt = 0
  52. IF IsNull(arg_saleout.mrate) THEN arg_saleout.mrate = 0
  53. IF IsNull(arg_saleout.freight) THEN arg_saleout.freight = ''
  54. IF IsNull(arg_saleout.freight_tele) THEN arg_saleout.freight_tele = ''
  55. IF IsNull(arg_saleout.cus_address) THEN arg_saleout.cus_address = ''
  56. IF IsNull(arg_saleout.cus_tele) THEN arg_saleout.cus_tele = ''
  57. IF IsNull(arg_saleout.cus_fax) THEN arg_saleout.cus_fax = ''
  58. IF IsNull(arg_saleout.upname) THEN arg_saleout.upname = ''
  59. IF IsNull(arg_saleout.cusid) THEN arg_saleout.cusid = 0
  60. IF Trim(arg_saleout.assign_emp) = '' THEN
  61. rslt = 0
  62. arg_msg = "请输入订单业务员"
  63. GOTO ext
  64. END IF
  65. cnt = 0
  66. SELECT count(*) INTO :cnt
  67. FROM u_cust
  68. Where cusid = :arg_saleout.cusid Using commit_transaction ;
  69. IF commit_transaction.SQLCode <> 0 THEN
  70. rslt = 0
  71. arg_msg = "查询操作失败,客户资料"
  72. GOTO ext
  73. END IF
  74. IF cnt = 0 THEN
  75. rslt = 0
  76. arg_msg = "客户未定义或错误"
  77. GOTO ext
  78. END IF
  79. cnt = 0
  80. SELECT count(*) INTO :cnt
  81. FROM cw_banktype
  82. Where banktypeid = :arg_saleout.banktypeid;
  83. IF commit_transaction.SQLCode <> 0 THEN
  84. arg_msg = '查询结算方式失败'
  85. rslt = 0
  86. GOTO ext
  87. END IF
  88. IF cnt = 0 THEN
  89. arg_msg = '结算方式不存在'
  90. rslt = 0
  91. GOTO ext
  92. END IF
  93. cnt = 0
  94. SELECT count(*) INTO :cnt
  95. FROM cw_currency
  96. Where moneyid = :arg_saleout.moneyid;
  97. IF commit_transaction.SQLCode <> 0 THEN
  98. arg_msg = '查询币种失败'
  99. rslt = 0
  100. GOTO ext
  101. END IF
  102. IF cnt = 0 THEN
  103. arg_msg = '币种资料不存在'
  104. rslt = 0
  105. GOTO ext
  106. END IF
  107. IF arg_saleout.mrate = 0 THEN
  108. arg_msg = '币种汇率错误'
  109. rslt = 0
  110. GOTO ext
  111. END IF
  112. SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction ;
  113. IF commit_transaction.SQLCode <> 0 THEN
  114. rslt = 0
  115. arg_msg = "查询操作失败,日期 "
  116. GOTO ext
  117. END IF
  118. IF f_check_inoutdate(0,arg_saleout.taskdate,False,arg_msg) = 0 THEN
  119. rslt = 0
  120. GOTO ext
  121. END IF
  122. it_mxbt = UpperBound(arg_saleout.arg_s_mx)
  123. it_mxbt_item = UpperBound(arg_saleout.arg_s_itemmx)
  124. IF it_mxbt <= 0 THEN
  125. rslt = 0
  126. arg_msg = "没有正确明细内容"
  127. GOTO ext
  128. END IF
  129. FOR ll_i = 1 To it_mxbt
  130. IF arg_saleout.arg_s_mx[ll_i].mtrlid = 0 Or arg_saleout.arg_s_mx[ll_i].saleqty = 0 THEN CONTINUE
  131. SELECT count(*) INTO :cnt
  132. FROM u_mtrldef
  133. Where mtrlid = :arg_saleout.arg_s_mx[ll_i].mtrlid Using commit_transaction;
  134. IF commit_transaction.SQLCode <> 0 THEN
  135. rslt = 0
  136. arg_msg = '查询产品资料:'+arg_saleout.arg_s_mx[ll_i].mtrlcode+' 失败'
  137. GOTO ext
  138. END IF
  139. IF cnt = 0 THEN
  140. rslt = 0
  141. arg_msg = '产品资料:'+ arg_saleout.arg_s_mx[ll_i].mtrlcode +'不存在'
  142. GOTO ext
  143. END IF
  144. IF arg_saleout.arg_s_mx[ll_i].enprice * arg_saleout.arg_s_mx[ll_i].rebate < 0 THEN
  145. rslt = 0
  146. arg_msg = "产品:" + String(arg_saleout.arg_s_mx[ll_i].mtrlcode)+" 单价错误"
  147. GOTO ext
  148. END IF
  149. IF arg_saleout.arg_s_mx[ll_i].rebate < 0 THEN
  150. arg_msg = '折扣错误,请检查'
  151. rslt = 0
  152. GOTO ext
  153. END IF
  154. //检查已开单数
  155. IF arg_saleout.arg_s_mx[ll_i].relid > 0 THEN
  156. SELECT u_SaleTaskMx.SaleQty,
  157. u_SaleTaskMx.saleoutqty,
  158. u_mtrldef.mtrlcode,
  159. u_mtrldef.upsalerate,
  160. u_mtrldef.upsaleqty
  161. INTO :ls_SaleQty,
  162. :ld_saleoutqty,
  163. :ls_mtrlcode,
  164. :ld_upsalerate,
  165. :ld_upsaleqty
  166. FROM u_SaleTaskMx ,u_mtrldef
  167. WHERE ( u_SaleTaskMx.scid = :arg_saleout.scid ) AND
  168. ( u_SaleTaskMx.TaskID = :arg_saleout.arg_s_mx[ll_i].relid ) AND
  169. ( u_SaleTaskMx.printid = :arg_saleout.arg_s_mx[ll_i].relprintid ) AND
  170. ( u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid) Using commit_transaction ;
  171. IF commit_transaction.SQLCode <> 0 THEN
  172. rslt = 0
  173. arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询销售订单已完成数量操作失败"+"~n"+SQLCA.SQLErrText
  174. GOTO ext
  175. END IF
  176. //已开单未审核(非本单)
  177. SELECT SUM(u_saleoutmx.saleqty)
  178. INTO :ld_qty_noaudit
  179. FROM u_saleoutmx INNER JOIN
  180. u_saleout ON u_saleoutmx.taskid = u_saleout.taskid
  181. WHERE (u_saleout.flag = 0) AND
  182. ( u_saleoutmx.scid = :arg_saleout.scid ) AND
  183. ( u_saleoutmx.relid = :arg_saleout.arg_s_mx[ll_i].relid ) AND
  184. ( u_saleoutmx.relprnitid = :arg_saleout.arg_s_mx[ll_i].relprintid ) AND
  185. ( u_saleout.taskid <> :arg_saleout.TaskID)
  186. Using commit_transaction ;
  187. IF commit_transaction.SQLCode <> 0 THEN
  188. ld_qty_noaudit = 0
  189. END IF
  190. IF ls_SaleQty * (1 + ld_upsalerate) + ld_upsaleqty < ld_saleoutqty +ld_qty_noaudit+ arg_saleout.arg_s_mx[ll_i].saleqty THEN
  191. rslt = 0
  192. arg_msg = "产品["+ls_mtrlcode+"]的未通知发货数量只有"+String(ls_SaleQty - ld_saleoutqty - ld_qty_noaudit,'#,##0.0#')+",上限:"+String(ls_SaleQty * (1 + ld_upsalerate) + ld_upsaleqty - ld_saleoutqty - ld_qty_noaudit,'#,##0.0#')+",不能下单"+String(arg_saleout.arg_s_mx[ll_i].saleqty,'#,##0.0#')
  193. GOTO ext
  194. END IF
  195. END IF
  196. NEXT
  197. FOR ll_i = 1 To it_mxbt_item
  198. SELECT count(*)
  199. INTO :cnt
  200. FROM u_itemdef
  201. Where itemid = :arg_saleout.arg_s_itemmx[ll_i].itemid;
  202. IF commit_transaction.SQLCode <> 0 THEN
  203. rslt = 0
  204. arg_msg = '查询收支项目是否存在失败,'+commit_transaction.SQLErrText
  205. GOTO ext
  206. END IF
  207. IF cnt = 0 THEN
  208. rslt = 0
  209. arg_msg = '第'+String(arg_saleout.arg_s_itemmx[ll_i].printid)+'行,收支项目不存在,请检查'
  210. GOTO ext
  211. END IF
  212. NEXT
  213. IF arg_saleout.TaskID = 0 THEN
  214. ll_taskid = f_sys_scidentity(0,"u_saleout","taskid",arg_msg,True,id_sqlca)
  215. IF ll_taskid <= 0 THEN
  216. rslt = 0
  217. GOTO ext
  218. END IF
  219. IF f_get_sccode(arg_saleout.scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  220. rslt = 0
  221. GOTO ext
  222. END IF
  223. ls_taskcode = getid(arg_saleout.scid,ls_sccode + 'SO',Date(server_datetime),False,commit_transaction)
  224. IF ls_taskcode = "err" THEN
  225. rslt = 0
  226. arg_msg = "无法获取单据编号"+"~n"+SQLCA.SQLErrText
  227. GOTO ext
  228. END IF
  229. INSERT INTO u_saleout
  230. (scid,
  231. taskid,
  232. taskcode,
  233. cusid,
  234. taskdate,
  235. relcode,
  236. dscrp,
  237. dscrp2,
  238. cus_address,
  239. cus_tele,
  240. cus_fax,
  241. freight,
  242. freight_tele,
  243. assign_emp,
  244. upname,
  245. banktypeid,
  246. paytype,
  247. opemp,
  248. opdate,
  249. moneyid,
  250. mrate)
  251. VALUES (:arg_saleout.scid,
  252. :ll_taskid,
  253. :ls_taskcode,
  254. :arg_saleout.cusid,
  255. :arg_saleout.taskdate,
  256. :arg_saleout.relcode,
  257. :arg_saleout.dscrp,
  258. :arg_saleout.dscrp2,
  259. :arg_saleout.cus_address,
  260. :arg_saleout.cus_tele,
  261. :arg_saleout.cus_fax,
  262. :arg_saleout.freight,
  263. :arg_saleout.freight_tele,
  264. :arg_saleout.assign_emp,
  265. :arg_saleout.upname,
  266. :arg_saleout.banktypeid,
  267. :arg_saleout.paytype,
  268. :arg_opemp,
  269. getdate(),
  270. :arg_saleout.moneyid,
  271. :arg_saleout.mrate) Using commit_transaction;
  272. IF commit_transaction.SQLCode <> 0 THEN
  273. rslt = 0
  274. arg_msg = "因网络或其它原因导致插入发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  275. GOTO ext
  276. END IF
  277. TaskID = ll_taskid
  278. FOR ll_i = 1 To it_mxbt
  279. INSERT INTO u_saleoutmx
  280. (scid,
  281. taskid,
  282. printid,
  283. ifrel,
  284. mtrlid,
  285. saleqty,
  286. enprice,
  287. fprice,
  288. rebate,
  289. status,
  290. woodcode,
  291. pcode,
  292. mtrlcuscode,
  293. outtypestr,
  294. mxdscrp,
  295. mxdscrp2,
  296. relid,
  297. relprintid,
  298. relcode,
  299. mtrlcuscode2)
  300. VALUES (:arg_saleout.scid,
  301. :ll_taskid,
  302. :arg_saleout.arg_s_mx[ll_i].printid,
  303. :arg_saleout.arg_s_mx[ll_i].ifrel,
  304. :arg_saleout.arg_s_mx[ll_i].mtrlid,
  305. :arg_saleout.arg_s_mx[ll_i].saleqty,
  306. :arg_saleout.arg_s_mx[ll_i].enprice,
  307. :arg_saleout.arg_s_mx[ll_i].fprice,
  308. :arg_saleout.arg_s_mx[ll_i].rebate,
  309. :arg_saleout.arg_s_mx[ll_i].status,
  310. :arg_saleout.arg_s_mx[ll_i].woodcode,
  311. :arg_saleout.arg_s_mx[ll_i].pcode,
  312. :arg_saleout.arg_s_mx[ll_i].mtrlcuscode,
  313. :arg_saleout.arg_s_mx[ll_i].outtypestr,
  314. :arg_saleout.arg_s_mx[ll_i].mxdscrp,
  315. :arg_saleout.arg_s_mx[ll_i].mxdscrp2,
  316. :arg_saleout.arg_s_mx[ll_i].relid,
  317. :arg_saleout.arg_s_mx[ll_i].relprintid,
  318. :arg_saleout.arg_s_mx[ll_i].relcode,
  319. :arg_saleout.arg_s_mx[ll_i].mtrlcuscode2)
  320. Using commit_transaction;
  321. IF commit_transaction.SQLCode <> 0 THEN
  322. rslt = 0
  323. arg_msg = "因网络或其它原因导致插入发货通知单明细操作失败"+"~n"+commit_transaction.SQLErrText
  324. GOTO ext
  325. END IF
  326. NEXT
  327. ELSE
  328. UPDATE u_saleout
  329. SET cusid = :arg_saleout.cusid,
  330. taskdate = :arg_saleout.taskdate,
  331. relcode = :arg_saleout.relcode,
  332. dscrp = :arg_saleout.dscrp,
  333. dscrp2 = :arg_saleout.dscrp2,
  334. cus_address = :arg_saleout.cus_address,
  335. cus_tele = :arg_saleout.cus_tele,
  336. cus_fax = :arg_saleout.cus_fax,
  337. freight = :arg_saleout.freight,
  338. freight_tele = :arg_saleout.freight_tele,
  339. assign_emp = :arg_saleout.assign_emp,
  340. upname = :arg_saleout.upname,
  341. banktypeid = :arg_saleout.banktypeid,
  342. paytype = :arg_saleout.paytype,
  343. modemp = :arg_opemp,
  344. moddate = getdate() ,
  345. moneyid = :arg_saleout.moneyid,
  346. mrate = :arg_saleout.mrate
  347. Where TaskID = :arg_saleout.TaskID Using commit_transaction;
  348. IF commit_transaction.SQLCode <> 0 THEN
  349. rslt = 0
  350. arg_msg = "因网络或其它原因导致更新发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  351. GOTO ext
  352. END IF
  353. DELETE FROM u_saleoutmx
  354. Where TaskID = :arg_saleout.TaskID Using commit_transaction;
  355. IF commit_transaction.SQLCode <> 0 THEN
  356. rslt = 0
  357. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  358. GOTO ext
  359. END IF
  360. FOR ll_i = 1 To it_mxbt
  361. INSERT INTO u_saleoutmx
  362. (scid,
  363. taskid,
  364. printid,
  365. ifrel,
  366. mtrlid,
  367. saleqty,
  368. enprice,
  369. fprice,
  370. rebate,
  371. status,
  372. woodcode,
  373. pcode,
  374. mtrlcuscode,
  375. outtypestr,
  376. mxdscrp,
  377. mxdscrp2,
  378. relid,
  379. relprintid,
  380. relcode,
  381. mtrlcuscode2)
  382. VALUES (:arg_saleout.scid,
  383. :arg_saleout.taskid,
  384. :arg_saleout.arg_s_mx[ll_i].printid,
  385. :arg_saleout.arg_s_mx[ll_i].ifrel,
  386. :arg_saleout.arg_s_mx[ll_i].mtrlid,
  387. :arg_saleout.arg_s_mx[ll_i].saleqty,
  388. :arg_saleout.arg_s_mx[ll_i].enprice,
  389. :arg_saleout.arg_s_mx[ll_i].fprice,
  390. :arg_saleout.arg_s_mx[ll_i].rebate,
  391. :arg_saleout.arg_s_mx[ll_i].status,
  392. :arg_saleout.arg_s_mx[ll_i].woodcode,
  393. :arg_saleout.arg_s_mx[ll_i].pcode,
  394. :arg_saleout.arg_s_mx[ll_i].mtrlcuscode,
  395. :arg_saleout.arg_s_mx[ll_i].outtypestr,
  396. :arg_saleout.arg_s_mx[ll_i].mxdscrp,
  397. :arg_saleout.arg_s_mx[ll_i].mxdscrp2,
  398. :arg_saleout.arg_s_mx[ll_i].relid,
  399. :arg_saleout.arg_s_mx[ll_i].relprintid,
  400. :arg_saleout.arg_s_mx[ll_i].relcode,
  401. :arg_saleout.arg_s_mx[ll_i].mtrlcuscode2)
  402. Using commit_transaction;
  403. IF commit_transaction.SQLCode <> 0 THEN
  404. rslt = 0
  405. arg_msg = "因网络或其它原因导致插入发货通知单明细操作失败"+"~n"+commit_transaction.SQLErrText
  406. GOTO ext
  407. END IF
  408. NEXT
  409. TaskID = arg_saleout.TaskID
  410. DELETE FROM u_saleout_itemmx
  411. Where TaskID = :arg_saleout.TaskID Using commit_transaction;
  412. IF commit_transaction.SQLCode <> 0 THEN
  413. rslt = 0
  414. arg_msg = "删除旧有费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  415. GOTO ext
  416. END IF
  417. END IF
  418. FOR ll_i = 1 To it_mxbt_item
  419. INSERT INTO u_saleout_itemmx
  420. (scid,
  421. taskid,
  422. printid,
  423. itemid,
  424. amt,
  425. mxdscrp)
  426. VALUES (:arg_saleout.scid,
  427. :taskid,
  428. :arg_saleout.arg_s_itemmx[ll_i].printid,
  429. :arg_saleout.arg_s_itemmx[ll_i].itemid,
  430. :arg_saleout.arg_s_itemmx[ll_i].amt,
  431. :arg_saleout.arg_s_itemmx[ll_i].mxdscrp) Using commit_transaction;
  432. IF commit_transaction.SQLCode <> 0 THEN
  433. TaskID = arg_saleout.TaskID //还原taskid
  434. rslt = 0
  435. arg_msg = "因网络或其它原因导致插入发货通知单费用明细操作失败"+"~n"+commit_transaction.SQLErrText
  436. GOTO ext
  437. END IF
  438. NEXT
  439. ext:
  440. IF rslt = 0 THEN
  441. ROLLBACK Using commit_transaction;
  442. ELSEIF arg_ifcommit And rslt = 1 THEN
  443. COMMIT Using commit_transaction;
  444. END IF
  445. RETURN rslt
  446. end function
  447. public function integer p_getflag (long arg_taskid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  448. SELECT flag INTO :arg_flag
  449. FROM u_saleout
  450. Where taskid = :arg_taskid USING commit_transaction;
  451. IF commit_transaction.SQLCode <> 0 THEN
  452. rslt = 0
  453. arg_msg = '查询单据状态失败,'+commit_transaction.SQLErrText
  454. GOTO ext
  455. END IF
  456. ext:
  457. RETURN rslt
  458. end function
  459. public function integer updatebegin (long arg_taskid, ref string arg_msg);Int rslt = 1
  460. Int li_flag
  461. Long cnt
  462. IF arg_taskid <= 0 THEN
  463. rslt = 0
  464. arg_msg = '错误的单据唯一码'
  465. GOTO ext
  466. END IF
  467. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  468. rslt = 0
  469. GOTO ext
  470. END IF
  471. IF li_flag <> 0 THEN
  472. rslt = 0
  473. arg_msg = '单据不是在待审核状态,不可以修改,要修改请先撤销审核'
  474. GOTO ext
  475. END IF
  476. ext:
  477. RETURN rslt
  478. end function
  479. public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  480. Int li_flag
  481. IF arg_taskid <= 0 THEN
  482. rslt = 0
  483. arg_msg = '错误的单据唯一码'
  484. GOTO ext
  485. END IF
  486. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  487. rslt = 0
  488. GOTO ext
  489. END IF
  490. IF li_flag <> 0 THEN
  491. rslt = 0
  492. arg_msg = '单据不是在待审核状态,不能删除'
  493. GOTO ext
  494. END IF
  495. DELETE FROM u_saleoutmx
  496. WHERE taskid = :arg_taskid
  497. USING commit_transaction;
  498. IF commit_transaction.SQLCode <> 0 THEN
  499. rslt = 0
  500. arg_msg = '删除明细失败,'+commit_transaction.SQLErrText
  501. GOTO ext
  502. END IF
  503. DELETE FROM u_saleout
  504. WHERE taskid = :arg_taskid
  505. AND flag = 0
  506. USING commit_transaction;
  507. IF commit_transaction.SQLCode <> 0 THEN
  508. rslt = 0
  509. arg_msg = '删除单据失败,'+commit_transaction.SQLErrText
  510. GOTO ext
  511. END IF
  512. ext:
  513. IF rslt = 0 THEN
  514. ROLLBACK USING commit_transaction;
  515. ELSEIF rslt = 1 AND arg_ifcommit THEN
  516. COMMIT USING commit_transaction;
  517. END IF
  518. RETURN rslt
  519. end function
  520. public function integer getinfo (long arg_taskid, ref s_saleoutmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  521. Long i = 1,no_mxcheck = 0
  522. IF arg_taskid <= 0 THEN
  523. rslt = 0
  524. arg_msg = '错误单据唯一码'
  525. GOTO ext
  526. END IF
  527. DECLARE cur_mx CURSOR FOR
  528. SELECT u_saleoutmx.scid,
  529. u_saleoutmx.printid,
  530. u_saleoutmx.ifrel,
  531. u_saleoutmx.mtrlid,
  532. u_saleoutmx.saleqty,
  533. u_saleoutmx.consignedqty,
  534. u_saleoutmx.relid,
  535. u_saleoutmx.relprintid,
  536. u_saleoutmx.stopqty,
  537. u_saleoutmx.status,
  538. u_saleoutmx.woodcode,
  539. u_saleoutmx.pcode,
  540. u_mtrldef.mtrlcode
  541. FROM u_saleoutmx INNER JOIN
  542. u_mtrldef ON u_saleoutmx.mtrlid = u_mtrldef.mtrlid
  543. WHERE u_saleoutmx.taskid = :arg_taskid
  544. Order By u_saleoutmx.printid Using commit_transaction;
  545. OPEN cur_mx;
  546. FETCH cur_mx INTO :arg_ref_mx[i].scid,
  547. :arg_ref_mx[i].printid,
  548. :arg_ref_mx[i].ifrel,
  549. :arg_ref_mx[i].mtrlid,
  550. :arg_ref_mx[i].saleqty,
  551. :arg_ref_mx[i].consignedqty,
  552. :arg_ref_mx[i].relid,
  553. :arg_ref_mx[i].relprintid,
  554. :arg_ref_mx[i].stopqty,
  555. :arg_ref_mx[i].status,
  556. :arg_ref_mx[i].woodcode,
  557. :arg_ref_mx[i].pcode,
  558. :arg_ref_mx[i].mtrlcode;
  559. DO WHILE commit_transaction.SQLCode = 0
  560. i++
  561. FETCH cur_mx INTO :arg_ref_mx[i].scid,
  562. :arg_ref_mx[i].printid,
  563. :arg_ref_mx[i].ifrel,
  564. :arg_ref_mx[i].mtrlid,
  565. :arg_ref_mx[i].saleqty,
  566. :arg_ref_mx[i].consignedqty,
  567. :arg_ref_mx[i].relid,
  568. :arg_ref_mx[i].relprintid,
  569. :arg_ref_mx[i].stopqty,
  570. :arg_ref_mx[i].status,
  571. :arg_ref_mx[i].woodcode,
  572. :arg_ref_mx[i].pcode,
  573. :arg_ref_mx[i].mtrlcode;
  574. LOOP
  575. CLOSE cur_mx;
  576. //检验明细是否读入完整
  577. SELECT count(*) INTO :no_mxcheck
  578. FROM u_saleoutmx
  579. Where taskid = :arg_taskid;
  580. IF sqlca.SQLCode <> 0 THEN
  581. rslt = 0
  582. arg_msg = "查询操作失败,单据明细数量"
  583. GOTO ext
  584. END IF
  585. IF i <> (no_mxcheck + 1) THEN
  586. rslt = 0
  587. arg_msg = "查询操作失败,单据明细内容"
  588. GOTO ext
  589. END IF
  590. arg_arr_cnt = i - 1
  591. ext:
  592. RETURN rslt
  593. end function
  594. public function integer addmxcmpl (long arg_taskid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  595. Int li_flag
  596. IF arg_taskid <= 0 THEN
  597. rslt = 0
  598. arg_msg = '错误的发货通知单唯一码'
  599. GOTO ext
  600. END IF
  601. IF arg_addqty = 0 THEN
  602. rslt = 1
  603. GOTO ext
  604. END IF
  605. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  606. rslt = 0
  607. arg_msg = '查询发货通知单状态失败'
  608. GOTO ext
  609. END IF
  610. IF li_flag <> 1 And li_flag <> 5 THEN
  611. rslt = 0
  612. arg_msg = '发货通知单只有在进行或已完成状态下才能执行更新已发货数操作'
  613. GOTO ext
  614. END IF
  615. Decimal ld_saleqty,ld_consignedqty,ld_stopqty
  616. String ls_mtrlcode
  617. SELECT u_saleoutmx.saleqty,
  618. u_saleoutmx.consignedqty,
  619. u_mtrldef.mtrlcode,
  620. u_saleoutmx.stopqty
  621. INTO :ld_saleqty,
  622. :ld_consignedqty,
  623. :ls_mtrlcode,
  624. :ld_stopqty
  625. FROM u_saleoutmx,u_mtrldef
  626. WHERE (u_saleoutmx.mtrlid = u_mtrldef.mtrlid)
  627. AND (u_saleoutmx.taskid = :arg_taskid)
  628. And (u_saleoutmx.printid = :arg_printid) Using commit_transaction ;
  629. IF commit_transaction.SQLCode <> 0 THEN
  630. rslt = 0
  631. arg_msg = "因网络或错误产品编码["+ls_mtrlcode+"]导致查询发货通知单已发货数量操作失败"+"~n"+SQLCA.SQLErrText
  632. GOTO ext
  633. END IF
  634. IF ld_saleqty > 0 THEN
  635. IF ld_saleqty < ld_consignedqty + ld_stopqty + arg_addqty THEN
  636. rslt = 0
  637. arg_msg = "产品["+ls_mtrlcode+"]的未发货数量只有"+String(ld_saleqty - ld_consignedqty - ld_stopqty,'#,##0.##########')+",不能发货"+String(arg_addqty,'#,##0.##########')
  638. GOTO ext
  639. END IF
  640. ELSE
  641. IF Abs(ld_saleqty) < Abs(ld_consignedqty + ld_stopqty + arg_addqty) THEN
  642. rslt = 0
  643. arg_msg = "产品["+ls_mtrlcode+"]的未发货数量只有"+String(ld_saleqty - ld_consignedqty - ld_stopqty,'#,##0.##########')+",不能发货"+String(arg_addqty,'#,##0.##########')
  644. GOTO ext
  645. END IF
  646. END IF
  647. UPDATE u_saleoutmx
  648. SET consignedqty = consignedqty + :arg_addqty
  649. WHERE (u_saleoutmx.taskid = :arg_taskid)
  650. And (u_saleoutmx.printid = :arg_printid) Using commit_transaction;
  651. IF commit_transaction.SQLCode <> 0 THEN
  652. rslt = 0
  653. arg_msg = "因网络或错误产品唯一码导致发货通知单已发货数量操作失败"+"~n"+ commit_transaction.SQLErrText
  654. GOTO ext
  655. END IF
  656. ext:
  657. IF rslt = 0 THEN
  658. ROLLBACK Using commit_transaction;
  659. ELSEIF arg_ifcommit And rslt = 1 THEN
  660. COMMIT Using commit_transaction;
  661. END IF
  662. RETURN rslt
  663. end function
  664. public function integer trycmpsaleout (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  665. DateTime null_dt
  666. Int li_flag
  667. SetNull(null_dt)
  668. IF arg_taskid <= 0 THEN
  669. rslt = 0
  670. arg_msg = '错误销售订单唯一码'
  671. GOTO ext
  672. END IF
  673. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  674. rslt = 0
  675. arg_msg = '查询发货通知单状态失败'
  676. GOTO ext
  677. END IF
  678. IF li_flag <> 1 AND li_flag <> 5 THEN
  679. rslt = 0
  680. arg_msg = '发货通知单只有在进行和已完成状态下才能执行完成和撤销完成操作'
  681. GOTO ext
  682. END IF
  683. Decimal ls_zerook
  684. Boolean if_finish
  685. if_finish = TRUE
  686. DECLARE zero_cur CURSOR FOR
  687. SELECT u_saleoutmx.saleqty - u_saleoutmx.consignedqty - u_saleoutmx.stopqty
  688. FROM u_saleoutmx
  689. WHERE u_saleoutmx.taskid = :arg_taskid
  690. USING commit_transaction ;
  691. OPEN zero_cur;
  692. FETCH zero_cur INTO :ls_zerook;
  693. DO WHILE commit_transaction.SQLCode = 0
  694. IF if_finish THEN
  695. IF ls_zerook > 0 THEN if_finish = FALSE
  696. END IF
  697. FETCH zero_cur INTO :ls_zerook;
  698. LOOP
  699. CLOSE zero_cur;
  700. IF li_flag = 1 AND if_finish THEN
  701. UPDATE u_saleout
  702. SET flag = 5,
  703. accomplishdate = getdate(),
  704. finishemp = :publ_operator
  705. Where ( u_saleout.taskid = :arg_taskid ) USING commit_transaction;
  706. IF commit_transaction.SQLCode <> 0 THEN
  707. rslt = 0
  708. arg_msg = "因网络或其他原因导致发货通知单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  709. ROLLBACK USING commit_transaction;
  710. GOTO ext
  711. END IF
  712. END IF
  713. IF li_flag = 5 AND NOT if_finish THEN
  714. UPDATE u_saleout
  715. SET flag = 1,
  716. accomplishdate = :null_dt,
  717. finishemp = ''
  718. Where ( u_saleout.taskid = :arg_taskid ) USING commit_transaction;
  719. IF commit_transaction.SQLCode <> 0 THEN
  720. rslt = 0
  721. arg_msg = "因网络或其他原因导致发货通知单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  722. ROLLBACK USING commit_transaction;
  723. GOTO ext
  724. END IF
  725. END IF
  726. ext:
  727. IF rslt = 0 THEN
  728. ROLLBACK USING commit_transaction;
  729. ELSEIF arg_ifcommit AND rslt = 1 THEN
  730. COMMIT USING commit_transaction;
  731. END IF
  732. RETURN rslt
  733. end function
  734. public function integer stoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  735. Int li_flag
  736. IF arg_taskid <= 0 THEN
  737. rslt = 0
  738. ARG_MSG = '错误发货通知单唯一码'
  739. GOTO ext
  740. END IF
  741. IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN
  742. rslt = 0
  743. GOTO ext
  744. END IF
  745. IF li_flag <> 1 THEN
  746. rslt = 0
  747. ARG_MSG = '发货通知单只有在进行状态下才能执行终止操作'
  748. GOTO ext
  749. END IF
  750. UPDATE u_saleout
  751. SET flag = 3,
  752. accomplishdate = getdate() ,
  753. stopemp = :publ_operator
  754. Where TaskID = :arg_taskid USING commit_transaction ;
  755. IF commit_transaction.SQLCode <> 0 THEN
  756. rslt = 0
  757. ARG_MSG = "因网络或其它原因导致终止发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  758. GOTO ext
  759. END IF
  760. ext:
  761. IF rslt = 0 THEN
  762. ROLLBACK USING commit_transaction;
  763. ELSEIF arg_ifcommit AND rslt = 1 THEN
  764. COMMIT USING commit_transaction;
  765. END IF
  766. RETURN rslt
  767. end function
  768. public function integer tmpstoptask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  769. Int li_flag
  770. IF arg_taskid <= 0 THEN
  771. rslt = 0
  772. ARG_MSG = '错误发货通知单唯一码'
  773. GOTO ext
  774. END IF
  775. IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN
  776. rslt = 0
  777. GOTO ext
  778. END IF
  779. IF li_flag <> 1 AND li_flag <> 2 THEN
  780. rslt = 0
  781. ARG_MSG = '发货通知单只有在进行或已暂停状态下才能执行暂停/取消暂停操作'
  782. GOTO ext
  783. END IF
  784. IF li_flag = 1 THEN
  785. UPDATE u_saleout
  786. SET flag = 2,
  787. stopemp = :publ_operator
  788. Where TaskID = :arg_taskid USING commit_transaction ;
  789. IF commit_transaction.SQLCode <> 0 THEN
  790. rslt = 0
  791. ARG_MSG = "因网络或其它原因导致暂停发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  792. GOTO ext
  793. END IF
  794. ELSE
  795. UPDATE u_saleout
  796. SET flag = 1,
  797. stopemp = ''
  798. Where TaskID = :arg_taskid USING commit_transaction ;
  799. IF commit_transaction.SQLCode <> 0 THEN
  800. rslt = 0
  801. ARG_MSG = "因网络或其它原因导致取消暂停发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  802. GOTO ext
  803. END IF
  804. END IF
  805. ext:
  806. IF rslt = 0 THEN
  807. ROLLBACK USING commit_transaction;
  808. ELSEIF arg_ifcommit AND rslt = 1 THEN
  809. COMMIT USING commit_transaction;
  810. END IF
  811. RETURN rslt
  812. end function
  813. public function integer finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  814. Int li_flag
  815. IF arg_taskid <= 0 THEN
  816. rslt = 0
  817. ARG_MSG = '错误发货通知单唯一码'
  818. GOTO ext
  819. END IF
  820. IF p_getflag(arg_taskid,li_flag,ARG_MSG) = 0 THEN
  821. rslt = 0
  822. GOTO ext
  823. END IF
  824. IF li_flag <> 1 THEN
  825. rslt = 0
  826. ARG_MSG = '发货通知单只有在进行状态下才能执行完成操作'
  827. GOTO ext
  828. END IF
  829. UPDATE u_saleout
  830. SET flag = 5,
  831. accomplishdate = getdate() ,
  832. finishemp = :publ_operator
  833. Where TaskID = :arg_taskid USING commit_transaction ;
  834. IF commit_transaction.SQLCode <> 0 THEN
  835. rslt = 0
  836. ARG_MSG = "因网络或其它原因导致完成发货通知单操作失败"+"~n"+commit_transaction.SQLErrText
  837. GOTO ext
  838. END IF
  839. ext:
  840. IF rslt = 0 THEN
  841. ROLLBACK USING commit_transaction;
  842. ELSEIF arg_ifcommit AND rslt = 1 THEN
  843. COMMIT USING commit_transaction;
  844. END IF
  845. RETURN rslt
  846. end function
  847. public function integer add_dscrp (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);
  848. Int rslt = 1
  849. Int li_flag
  850. arg_newdescppart = Trim(arg_newdescppart)
  851. IF arg_newdescppart = '' THEN
  852. rslt = 0
  853. arG_MSG = "要添加内容为空,操作取消"
  854. GOTO ext
  855. END IF
  856. IF p_getflag(arg_taskid,li_flag,arG_MSG) = 0 THEN
  857. rslt = 0
  858. GOTO ext
  859. END IF
  860. IF li_flag = 0 THEN
  861. rslt = 0
  862. arG_MSG = "待审核状态下不可用"
  863. GOTO ext
  864. END IF
  865. UPDATE u_saleout
  866. SET DSCRP = DSCRP+' '+:arg_newdescppart
  867. Where u_saleout.taskid = :arg_taskid USING commit_transaction ;
  868. IF commit_transaction.SQLCode <> 0 THEN
  869. rslt = 0
  870. arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText
  871. GOTO ext
  872. END IF
  873. ext:
  874. IF rslt = 0 THEN
  875. ROLLBACK USING commit_transaction;
  876. ELSEIF arg_ifcommit THEN
  877. COMMIT USING commit_transaction;
  878. END IF
  879. Return (rslt)
  880. end function
  881. public function integer add_dscrp2 (long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);
  882. Int rslt = 1
  883. Int li_flag
  884. arg_newdescppart = Trim(arg_newdescppart)
  885. IF arg_newdescppart = '' THEN
  886. rslt = 0
  887. arG_MSG = "要添加内容为空,操作取消"
  888. GOTO ext
  889. END IF
  890. IF p_getflag(arg_taskid,li_flag,arG_MSG) = 0 THEN
  891. rslt = 0
  892. GOTO ext
  893. END IF
  894. IF li_flag = 0 THEN
  895. rslt = 0
  896. arG_MSG = "待审核状态下不可用"
  897. GOTO ext
  898. END IF
  899. UPDATE u_saleout
  900. SET DSCRP2 = DSCRP2+' '+:arg_newdescppart
  901. Where u_saleout.taskid = :arg_taskid USING commit_transaction ;
  902. IF commit_transaction.SQLCode <> 0 THEN
  903. rslt = 0
  904. arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText
  905. GOTO ext
  906. END IF
  907. ext:
  908. IF rslt = 0 THEN
  909. ROLLBACK USING commit_transaction;
  910. ELSEIF arg_ifcommit THEN
  911. COMMIT USING commit_transaction;
  912. END IF
  913. Return (rslt)
  914. end function
  915. public function integer stopqty (long arg_taskid, long arg_printid, decimal arg_stopqty, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  916. Int li_flag
  917. Decimal ld_saleqty,ld_consignedqty,ld_stopqty_ori
  918. Decimal lde_notauditqty,lde_notauditqty_plan
  919. Long ll_relid,ll_relprintid,ll_scid
  920. Boolean lb_ifplan = False
  921. uo_saletask obj_saletask
  922. obj_saletask = Create uo_saletask
  923. obj_saletask.commit_transaction = commit_transaction
  924. IF uo_option_confirmaudit_sale = -1000 THEN
  925. rslt = 0
  926. arg_msg = '选项:[025]销售单先确认后审核,读取初始默认值失败,操作取消!'
  927. GOTO ext
  928. END IF
  929. IF uo_option_sale_use_planqty = -1000 THEN
  930. rslt = 0
  931. arg_msg = '选项:[115]销售发货单使用计划发货数,读取初始默认值失败,操作取消!'
  932. GOTO ext
  933. END IF
  934. IF uo_option_confirmaudit_sale = 1 And uo_option_sale_use_planqty = 1 THEN lb_ifplan = True
  935. IF arg_taskid <= 0 THEN
  936. rslt = 0
  937. arg_msg = '错误的单据唯一码'
  938. GOTO ext
  939. END IF
  940. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  941. rslt = 0
  942. GOTO ext
  943. END IF
  944. IF li_flag <> 1 And li_flag <> 5 THEN
  945. arg_msg = '发货通知单只能在进行状态或已完成状态才能操作'
  946. rslt = 0
  947. GOTO ext
  948. END IF
  949. SELECT saleqty,consignedqty,relid,relprintid,scid,stopqty
  950. INTO :ld_saleqty,:ld_consignedqty,:ll_relid,:ll_relprintid,:ll_scid,:ld_stopqty_ori
  951. FROM u_saleoutmx
  952. WHERE taskid = :arg_taskid
  953. And printid = :arg_printid Using commit_transaction;
  954. IF commit_transaction.SQLCode <> 0 THEN
  955. rslt = 0
  956. arg_msg = '查询发货通知单明细信息失败,'+commit_transaction.SQLErrText
  957. GOTO ext
  958. END IF
  959. SELECT isnull(sum(qty),0),isnull(sum(planqty),0)
  960. INTO :lde_notauditqty,:lde_notauditqty_plan
  961. FROM u_outwaremx INNER JOIN
  962. u_outware ON u_outwaremx.scid = u_outware.scid AND
  963. u_outwaremx.outwareid = u_outware.outwareid
  964. WHERE u_outware.billtype = 1
  965. AND (u_outwaremx.saleoutid = :arg_taskid)
  966. AND (u_outwaremx.saleoutprintid = :arg_printid)
  967. And (u_outware.flag = 0 ) ;
  968. IF commit_transaction.SQLCode = -1 THEN
  969. rslt = 0
  970. arg_msg = '查询发货通知单明细信息失败,'+commit_transaction.SQLErrText
  971. GOTO ext
  972. END IF
  973. IF IsNull(lde_notauditqty) THEN lde_notauditqty = 0
  974. IF IsNull(lde_notauditqty_plan) THEN lde_notauditqty_plan = 0
  975. IF lb_ifplan THEN
  976. IF ld_saleqty - ld_consignedqty - lde_notauditqty < arg_stopqty THEN
  977. rslt = 0
  978. arg_msg = '发货通知单明细未发货数只有:'+String(ld_saleqty - ld_consignedqty - lde_notauditqty,'#,##0.##########')+',不能再终止:'+String(arg_stopqty,'#,##0.##########')
  979. GOTO ext
  980. END IF
  981. ELSE
  982. IF ld_saleqty - ld_consignedqty - lde_notauditqty_plan < arg_stopqty THEN
  983. rslt = 0
  984. arg_msg = '发货通知单明细未发货数只有:'+String(ld_saleqty - ld_consignedqty - lde_notauditqty_plan,'#,##0.##########')+',不能再终止:'+String(arg_stopqty,'#,##0.##########')
  985. GOTO ext
  986. END IF
  987. END IF
  988. IF ll_relid > 0 THEN
  989. IF obj_saletask.addmxsaleout(ll_scid,ll_relid,ll_relprintid, ld_stopqty_ori - arg_stopqty,arg_msg,False) = 0 THEN
  990. rslt = 0
  991. GOTO ext
  992. END IF
  993. END IF
  994. UPDATE u_saleoutmx
  995. SET stopqty = :arg_stopqty,
  996. stopreason = :arg_stopreason,
  997. stopemp = :arg_opemp
  998. WHERE taskid = :arg_taskid
  999. And printid = :arg_printid Using commit_transaction;
  1000. IF commit_transaction.SQLCode <> 0 THEN
  1001. rslt = 0
  1002. arg_msg = '更新发货通知单明细终止数失败,'+commit_transaction.SQLErrText
  1003. GOTO ext
  1004. END IF
  1005. IF trycmpsaleout(arg_taskid,arg_msg,False) = 0 THEN
  1006. rslt = 0
  1007. GOTO ext
  1008. END IF
  1009. ext:
  1010. IF rslt = 0 THEN
  1011. ROLLBACK Using commit_transaction;
  1012. ELSEIF arg_ifcommit And rslt = 1 THEN
  1013. COMMIT Using commit_transaction;
  1014. END IF
  1015. Destroy obj_saletask
  1016. RETURN rslt
  1017. end function
  1018. public function integer uof_updatesaleoutcodestr (long arg_scid, long arg_taskid, ref string arg_msg);if sys_option_if_saleout = 0 then return 1
  1019. Int rslt = 1
  1020. Long i
  1021. Long ll_scid, ll_taskid, ll_printid
  1022. long it_mxbt
  1023. s_saleoutmx s_mx[]
  1024. uo_bgtr_timer uo_tr
  1025. uo_tr = Create uo_bgtr_timer
  1026. IF getinfo( arg_taskid, s_mx, it_mxbt, arg_msg) = 0 THEN
  1027. rslt = 0
  1028. GOTO ext
  1029. END IF
  1030. FOR i = 1 To it_mxbt
  1031. ll_taskid = s_mx[i].relid
  1032. ll_printid = s_mx[i].relprintid
  1033. IF ll_taskid > 0 And ll_printid > 0 THEN
  1034. IF uo_tr.uf_update_saleoutcodestr(arg_scid, ll_taskid, ll_printid, arg_msg) = 0 THEN
  1035. rslt = 0
  1036. GOTO ext
  1037. END IF
  1038. END IF
  1039. NEXT
  1040. ext:
  1041. Destroy uo_tr
  1042. RETURN rslt
  1043. end function
  1044. public function integer sec_audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1045. Int li_flag
  1046. uo_saletask obj_saletask
  1047. obj_saletask = CREATE uo_saletask
  1048. obj_saletask.commit_transaction = commit_transaction
  1049. IF arg_taskid <= 0 THEN
  1050. rslt = 0
  1051. arg_msg = '错误的单据唯一码'
  1052. GOTO ext
  1053. END IF
  1054. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  1055. rslt = 0
  1056. GOTO ext
  1057. END IF
  1058. IF li_flag <> 4 THEN
  1059. rslt = 0
  1060. arg_msg = '单据不是在待终审状态,不可以再审'
  1061. GOTO ext
  1062. END IF
  1063. s_saleoutmx arg_ref_mx[]
  1064. Long ll_arr_cnt,ll_i
  1065. IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN
  1066. rslt = 0
  1067. GOTO ext
  1068. END IF
  1069. FOR ll_i = 1 TO ll_arr_cnt
  1070. IF arg_ref_mx[ll_i].relid > 0 THEN
  1071. IF obj_saletask.addmxsaleout(arg_ref_mx[ll_i].scid,arg_ref_mx[ll_i].relid,arg_ref_mx[ll_i].relprintid,arg_ref_mx[ll_i].saleqty,arg_msg,FALSE) = 0 THEN
  1072. rslt = 0
  1073. GOTO ext
  1074. END IF
  1075. END IF
  1076. NEXT
  1077. UPDATE u_saleout
  1078. SET flag = 1 ,
  1079. sec_auditemp = :arg_opemp,
  1080. sec_auditdate = getdate()
  1081. WHERE taskid = :arg_taskid
  1082. AND flag = 4 USING commit_transaction;
  1083. IF commit_transaction.SQLCode <> 0 THEN
  1084. rslt = 0
  1085. arg_msg = '更新单据状态失败,'+commit_transaction.SQLErrText
  1086. GOTO ext
  1087. END IF
  1088. ext:
  1089. IF rslt = 0 THEN
  1090. ROLLBACK USING commit_transaction;
  1091. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1092. COMMIT USING commit_transaction;
  1093. END IF
  1094. DESTROY obj_saletask
  1095. RETURN rslt
  1096. end function
  1097. public function integer audit (long arg_taskid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1098. Int li_flag
  1099. IF arg_taskid <= 0 THEN
  1100. rslt = 0
  1101. arg_msg = '错误的单据唯一码'
  1102. GOTO ext
  1103. END IF
  1104. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  1105. rslt = 0
  1106. GOTO ext
  1107. END IF
  1108. IF li_flag <> 0 THEN
  1109. rslt = 0
  1110. arg_msg = '单据不是在待审核状态,不可以再审'
  1111. GOTO ext
  1112. END IF
  1113. UPDATE u_saleout
  1114. SET flag = 4 ,
  1115. auditemp = :arg_opemp,
  1116. auditdate = getdate()
  1117. WHERE taskid = :arg_taskid
  1118. AND flag = 0 USING commit_transaction;
  1119. IF commit_transaction.SQLCode <> 0 THEN
  1120. rslt = 0
  1121. arg_msg = '更新单据状态失败,'+commit_transaction.SQLErrText
  1122. GOTO ext
  1123. END IF
  1124. ext:
  1125. IF rslt = 0 THEN
  1126. ROLLBACK USING commit_transaction;
  1127. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1128. COMMIT USING commit_transaction;
  1129. END IF
  1130. RETURN rslt
  1131. end function
  1132. public function integer sec_caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1133. Int li_flag
  1134. DateTime null_dt
  1135. Long cnt
  1136. SetNull(null_dt)
  1137. uo_saletask obj_saletask
  1138. obj_saletask = CREATE uo_saletask
  1139. obj_saletask.commit_transaction = commit_transaction
  1140. IF arg_taskid <= 0 THEN
  1141. rslt = 0
  1142. arg_msg = '错误的单据唯一码'
  1143. GOTO ext
  1144. END IF
  1145. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  1146. rslt = 0
  1147. GOTO ext
  1148. END IF
  1149. IF li_flag <> 1 THEN
  1150. rslt = 0
  1151. arg_msg = '单据不是在进行状态,不可以撤审'
  1152. GOTO ext
  1153. END IF
  1154. SELECT count(*) INTO :cnt
  1155. FROM u_outwaremx
  1156. Where saleoutid = :arg_taskid USING commit_transaction;
  1157. IF commit_transaction.SQLCode <> 0 THEN
  1158. rslt = 0
  1159. arg_msg = '查询发货通知单是否有相关销售发货单失败,'+commit_transaction.SQLErrText
  1160. GOTO ext
  1161. END IF
  1162. IF cnt > 0 THEN
  1163. rslt = 0
  1164. arg_msg = '发货通知单已有相关销售发货单,不能撤审'
  1165. GOTO ext
  1166. END IF
  1167. s_saleoutmx arg_ref_mx[]
  1168. Long ll_arr_cnt,ll_i
  1169. IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN
  1170. rslt = 0
  1171. GOTO ext
  1172. END IF
  1173. FOR ll_i = 1 TO ll_arr_cnt
  1174. IF arg_ref_mx[ll_i].relid > 0 THEN
  1175. IF obj_saletask.addmxsaleout(arg_ref_mx[ll_i].scid,arg_ref_mx[ll_i].relid,arg_ref_mx[ll_i].relprintid,0 - arg_ref_mx[ll_i].saleqty,arg_msg,FALSE) = 0 THEN
  1176. rslt = 0
  1177. GOTO ext
  1178. END IF
  1179. END IF
  1180. NEXT
  1181. UPDATE u_saleout
  1182. SET flag = 4 ,
  1183. sec_auditemp = '',
  1184. sec_auditdate = :null_dt
  1185. WHERE taskid = :arg_taskid
  1186. AND flag = 1 USING commit_transaction;
  1187. IF commit_transaction.SQLCode <> 0 THEN
  1188. rslt = 0
  1189. arg_msg = '更新单据状态失败,'+commit_transaction.SQLErrText
  1190. GOTO ext
  1191. END IF
  1192. ext:
  1193. IF rslt = 0 THEN
  1194. ROLLBACK USING commit_transaction;
  1195. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1196. COMMIT USING commit_transaction;
  1197. END IF
  1198. DESTROY obj_saletask
  1199. RETURN rslt
  1200. end function
  1201. public function integer caudit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1202. Int li_flag
  1203. DateTime null_dt
  1204. Long cnt
  1205. SetNull(null_dt)
  1206. IF arg_taskid <= 0 THEN
  1207. rslt = 0
  1208. arg_msg = '错误的单据唯一码'
  1209. GOTO ext
  1210. END IF
  1211. IF p_getflag(arg_taskid,li_flag,arg_msg) = 0 THEN
  1212. rslt = 0
  1213. GOTO ext
  1214. END IF
  1215. IF li_flag <> 4 THEN
  1216. rslt = 0
  1217. arg_msg = '单据不是待终审状态,不可以撤审'
  1218. GOTO ext
  1219. END IF
  1220. s_saleoutmx arg_ref_mx[]
  1221. Long ll_arr_cnt,ll_i
  1222. IF getinfo(arg_taskid,arg_ref_mx,ll_arr_cnt,arg_msg) = 0 THEN
  1223. rslt = 0
  1224. GOTO ext
  1225. END IF
  1226. UPDATE u_saleout
  1227. SET flag = 0 ,
  1228. auditemp = '',
  1229. auditdate = :null_dt
  1230. WHERE taskid = :arg_taskid
  1231. AND flag = 4 USING commit_transaction;
  1232. IF commit_transaction.SQLCode <> 0 THEN
  1233. rslt = 0
  1234. arg_msg = '更新单据状态失败,'+commit_transaction.SQLErrText
  1235. GOTO ext
  1236. END IF
  1237. ext:
  1238. IF rslt = 0 THEN
  1239. ROLLBACK USING commit_transaction;
  1240. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1241. COMMIT USING commit_transaction;
  1242. END IF
  1243. RETURN rslt
  1244. end function
  1245. on uo_saleout.create
  1246. call super::create
  1247. TriggerEvent( this, "constructor" )
  1248. end on
  1249. on uo_saleout.destroy
  1250. TriggerEvent( this, "destructor" )
  1251. call super::destroy
  1252. end on