uo_owegood.sru 29 KB

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