uo_orderworkgroup_ws.sru 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. $PBExportHeader$uo_orderworkgroup_ws.sru
  2. forward
  3. global type uo_orderworkgroup_ws from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_orderworkgroup_ws from nonvisualobject
  7. end type
  8. global uo_orderworkgroup_ws uo_orderworkgroup_ws
  9. type variables
  10. long uo_billid
  11. string uo_billcode
  12. long relcpid
  13. long relcpscid
  14. long relmoveid
  15. long sstorageid
  16. long dstorageid
  17. long sworkgroupid
  18. long dworkgroupid
  19. datetime billdate
  20. string relrep
  21. int uo_option_taskplancode
  22. end variables
  23. forward prototypes
  24. public function integer save (s_ws_orderworkgroup arg_s_wrk, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer updatebegin (long arg_billid, ref string arg_msg)
  27. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  28. public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer p_getinfo (long arg_billid, ref string arg_msg)
  30. public function integer getinfo (long arg_billid, ref s_ws_orderworkgroupmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  31. public function integer c_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer p_getflag (long arg_billid, ref long arg_flag, ref long arg_secflag, ref string arg_msg)
  33. public function integer d_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  34. public function integer c_d_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  35. end prototypes
  36. public function integer save (s_ws_orderworkgroup arg_s_wrk, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  37. DateTime server_dt
  38. Long ll_billid,it_mxbt,i
  39. String ls_sccode,ls_billcode
  40. IF IsNull(arg_s_wrk.billid) THEN arg_s_wrk.billid = 0
  41. IF IsNull(arg_s_wrk.relcode) THEN arg_s_wrk.relcode = ''
  42. IF IsNull(arg_s_wrk.sworkgroupid) THEN arg_s_wrk.sworkgroupid = 0
  43. IF IsNull(arg_s_wrk.dworkgroupid) THEN arg_s_wrk.dworkgroupid = 0
  44. IF IsNull(arg_s_wrk.sstorageid) THEN arg_s_wrk.sstorageid = 0
  45. IF IsNull(arg_s_wrk.dstorageid) THEN arg_s_wrk.dstorageid = 0
  46. IF IsNull(arg_s_wrk.dscrp) THEN arg_s_wrk.dscrp = ''
  47. IF IsNull(arg_s_wrk.relrep) THEN arg_s_wrk.relrep = ''
  48. IF IsNull(arg_s_wrk.billtype) THEN arg_s_wrk.billtype = 0
  49. IF IsNull(arg_s_wrk.scid) THEN arg_s_wrk.scid = 0
  50. IF arg_s_wrk.relrep = '' THEN
  51. arg_msg = '请输入经手人'
  52. rslt = 0
  53. GOTO ext
  54. END IF
  55. IF arg_s_wrk.sworkgroupid = 0 THEN
  56. arg_msg = '请选择调出车间'
  57. rslt = 0
  58. GOTO ext
  59. END IF
  60. IF arg_s_wrk.sstorageid = 0 THEN
  61. arg_msg = '请先指定调出车间的车间仓'
  62. rslt = 0
  63. GOTO ext
  64. END IF
  65. IF arg_s_wrk.dworkgroupid = 0 THEN
  66. arg_msg = '请选择调入车间'
  67. rslt = 0
  68. GOTO ext
  69. END IF
  70. IF arg_s_wrk.dstorageid = 0 THEN
  71. arg_msg = '请先指定调入车间的车间仓'
  72. rslt = 0
  73. GOTO ext
  74. END IF
  75. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  76. IF sqlca.SQLCode <> 0 THEN
  77. rslt = 0
  78. arg_msg = "查询操作失败,日期 "
  79. GOTO ext
  80. END IF
  81. it_mxbt = UpperBound(arg_s_wrk.arg_s_mx)
  82. IF it_mxbt <= 0 THEN
  83. rslt = 0
  84. arg_msg = "没有正确明细内容"
  85. GOTO ext
  86. END IF
  87. IF arg_s_wrk.billid = 0 THEN
  88. ll_billid = f_sys_scidentity(0,"u_orderworkgroup_num","billid",arg_msg,TRUE,id_sqlca)
  89. IF ll_billid <= 0 THEN
  90. rslt = 0
  91. GOTO ext
  92. END IF
  93. IF f_get_sccode(arg_s_wrk.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  94. rslt = 0
  95. GOTO ext
  96. END IF
  97. ls_billcode = getid(arg_s_wrk.scid,ls_sccode + 'WS',Date(server_dt),FALSE,sqlca)
  98. IF ls_billcode = "err" THEN
  99. rslt = 0
  100. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  101. GOTO ext
  102. END IF
  103. INSERT INTO u_orderworkgroup_num (
  104. billid,
  105. billcode,
  106. billdate,
  107. relcode,
  108. sworkgroupid,
  109. sstorageid,
  110. dworkgroupid,
  111. dstorageid,
  112. dscrp,
  113. opdate,
  114. opemp,
  115. relrep,
  116. billtype,
  117. scid)
  118. VALUES
  119. (:ll_billid,
  120. :ls_billcode,
  121. :arg_s_wrk.billdate,
  122. :arg_s_wrk.relcode,
  123. :arg_s_wrk.sworkgroupid,
  124. :arg_s_wrk.sstorageid,
  125. :arg_s_wrk.dworkgroupid,
  126. :arg_s_wrk.dstorageid,
  127. :arg_s_wrk.dscrp,
  128. getdate(),
  129. :arg_opemp,
  130. :arg_s_wrk.relrep,
  131. :arg_s_wrk.billtype,
  132. :arg_s_wrk.scid);
  133. IF sqlca.SQLCode <> 0 THEN
  134. rslt = 0
  135. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  136. GOTO ext
  137. END IF
  138. FOR i = 1 TO it_mxbt
  139. INSERT INTO u_orderworkgroup_nummx
  140. (billid,
  141. printid,
  142. mtrlid,
  143. orderscid,
  144. orderid,
  145. status,
  146. woodcode,
  147. pcode,
  148. qty,
  149. restqty,
  150. mxdscrp)
  151. VALUES
  152. (:ll_billid,
  153. :arg_s_wrk.arg_s_mx[i].printid,
  154. :arg_s_wrk.arg_s_mx[i].mtrlid,
  155. :arg_s_wrk.arg_s_mx[i].orderscid,
  156. :arg_s_wrk.arg_s_mx[i].orderid,
  157. :arg_s_wrk.arg_s_mx[i].status,
  158. :arg_s_wrk.arg_s_mx[i].woodcode,
  159. :arg_s_wrk.arg_s_mx[i].pcode,
  160. :arg_s_wrk.arg_s_mx[i].qty,
  161. :arg_s_wrk.arg_s_mx[i].restqty,
  162. :arg_s_wrk.arg_s_mx[i].mxdscrp);
  163. IF sqlca.SQLCode <> 0 THEN
  164. rslt = 0
  165. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  166. GOTO ext
  167. END IF
  168. NEXT
  169. uo_billid = ll_billid
  170. uo_billcode = ls_billcode
  171. ELSE
  172. UPDATE u_orderworkgroup_num
  173. SET billdate = :arg_s_wrk.billdate,
  174. relcode = :arg_s_wrk.relcode,
  175. sworkgroupid = :arg_s_wrk.sworkgroupid,
  176. dworkgroupid = :arg_s_wrk.dworkgroupid,
  177. sstorageid = :arg_s_wrk.sstorageid,
  178. dstorageid = :arg_s_wrk.dstorageid,
  179. dscrp = :arg_s_wrk.dscrp,
  180. relrep = :arg_s_wrk.relrep,
  181. scid = :arg_s_wrk.scid
  182. WHERE billid = :arg_s_wrk.billid
  183. AND flag = 0;
  184. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  185. rslt = 0
  186. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  187. GOTO ext
  188. END IF
  189. DELETE FROM u_orderworkgroup_nummx
  190. Where billid = :arg_s_wrk.billid;
  191. IF sqlca.SQLCode <> 0 THEN
  192. rslt = 0
  193. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  194. GOTO ext
  195. END IF
  196. FOR i = 1 TO it_mxbt
  197. INSERT INTO u_orderworkgroup_nummx
  198. (billid,
  199. printid,
  200. mtrlid,
  201. orderscid,
  202. orderid,
  203. status,
  204. woodcode,
  205. pcode,
  206. qty,
  207. restqty,
  208. mxdscrp)
  209. VALUES
  210. (:arg_s_wrk.billid,
  211. :arg_s_wrk.arg_s_mx[i].printid,
  212. :arg_s_wrk.arg_s_mx[i].mtrlid,
  213. :arg_s_wrk.arg_s_mx[i].orderscid,
  214. :arg_s_wrk.arg_s_mx[i].orderid,
  215. :arg_s_wrk.arg_s_mx[i].status,
  216. :arg_s_wrk.arg_s_mx[i].woodcode,
  217. :arg_s_wrk.arg_s_mx[i].pcode,
  218. :arg_s_wrk.arg_s_mx[i].qty,
  219. :arg_s_wrk.arg_s_mx[i].restqty,
  220. :arg_s_wrk.arg_s_mx[i].mxdscrp);
  221. IF sqlca.SQLCode <> 0 THEN
  222. rslt = 0
  223. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  224. GOTO ext
  225. END IF
  226. NEXT
  227. uo_billid = arg_s_wrk.billid
  228. END IF
  229. ext:
  230. IF rslt = 0 THEN
  231. ROLLBACK;
  232. ELSEIF arg_ifcommit AND rslt = 1 THEN
  233. COMMIT;
  234. END IF
  235. RETURN rslt
  236. end function
  237. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1
  238. long ll_flag,ll_secflag
  239. if arg_billid <= 0 then
  240. rslt = 0
  241. arg_msg = '错误单据唯一码'
  242. GOTO ext
  243. END IF
  244. IF p_getflag(arg_billid,ll_flag,ll_secflag,arg_msg) = 0 THEN
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. if ll_flag <> 0 then
  249. rslt = 0
  250. arg_msg = '单据不是在待审核状态,不能删除'
  251. GOTO ext
  252. END IF
  253. DELETE FROM u_orderworkgroup_nummx
  254. WHERE billid = :arg_billid;
  255. IF sqlca.SQLCode <> 0 THEN
  256. rslt = 0
  257. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  258. GOTO ext
  259. END IF
  260. DELETE FROM u_orderworkgroup_num
  261. WHERE billid = :arg_billid
  262. AND flag = 0;
  263. IF sqlca.SQLCode <> 0 THEN
  264. rslt = 0
  265. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  266. GOTO ext
  267. END IF
  268. ext:
  269. IF rslt = 0 THEN
  270. ROLLBACK;
  271. ELSEIF rslt = 1 AND arg_ifcommit THEN
  272. COMMIT;
  273. END IF
  274. RETURN rslt
  275. end function
  276. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  277. long li_flag,li_secflag
  278. IF arg_billid <= 0 THEN
  279. rslt = 0
  280. arg_msg = '错误单据唯一码'
  281. GOTO ext
  282. END IF
  283. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  284. rslt = 0
  285. GOTO ext
  286. END IF
  287. IF li_flag = 1 THEN
  288. rslt = 0
  289. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  290. GOTO ext
  291. END IF
  292. ext:
  293. RETURN rslt
  294. end function
  295. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);
  296. Int rslt = 1
  297. long ll_flag,ll_secflag
  298. IF arg_newdescppart = '' THEN
  299. rslt = 0
  300. arG_MSG = "要添加内容为空,操作取消"
  301. GOTO ext
  302. END IF
  303. IF p_getflag(arg_billid,ll_flag,ll_secflag,arg_msg) = 0 THEN
  304. rslt = 0
  305. GOTO ext
  306. END IF
  307. IF ll_flag = 0 THEN
  308. rslt = 0
  309. arG_MSG = "待审核状态下不可用"
  310. GOTO ext
  311. END IF
  312. UPDATE u_orderworkgroup_num
  313. SET DSCRP = DSCRP+' '+:arg_newdescppart
  314. WHERE u_orderworkgroup_num.billid = :arg_billid;
  315. IF SQLCA.SQLCode <> 0 THEN
  316. rslt = 0
  317. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  318. GOTO ext
  319. END IF
  320. ext:
  321. IF rslt = 1 THEN
  322. COMMIT;
  323. ELSE
  324. ROLLBACK;
  325. END IF
  326. Return (rslt)
  327. end function
  328. public function integer audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  329. Long ll_flag,ll_secflag
  330. IF uo_option_taskplancode = -1000 THEN
  331. rslt = 0
  332. arg_msg = '选项:[038]使用客户批号库存,读取初始默认值失败,操作取消!'
  333. GOTO ext
  334. END IF
  335. IF arg_billid <= 0 THEN
  336. rslt = 0
  337. ARG_MSG = '错误单据唯一码'
  338. GOTO ext
  339. END IF
  340. IF p_getflag(arg_billid,ll_flag,ll_secflag,ARG_MSG) = 0 THEN
  341. rslt = 0
  342. GOTO ext
  343. END IF
  344. IF ll_flag <> 0 OR ll_secflag <> 0 THEN
  345. rslt = 0
  346. ARG_MSG = '单据不是在待审核状态,不可以再审'
  347. GOTO ext
  348. END IF
  349. //====================================================================
  350. // 自动生成车间生产进仓单
  351. //====================================================================
  352. Long ll_relcpid,ll_relmoveid
  353. String ls_relcpcode,ls_relmovecode
  354. String ls_mtrlcode,ls_unit
  355. String ls_taskrelcode,ls_plancode
  356. Decimal ls_planprice
  357. Long ll_cusid
  358. String ls_unit_buy
  359. Decimal ld_rate_buy
  360. Int li_ifunit
  361. Decimal ld_uqty
  362. s_ws_orderworkgroupmx s_ws_mx[]
  363. Long ll_arr_cnt,ll_i
  364. IF getinfo(arg_billid,s_ws_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
  365. rslt = 0
  366. GOTO ext
  367. END IF
  368. Long ll_scid
  369. SELECT scid
  370. INTO :ll_scid
  371. FROM u_storage
  372. Where storageid = :sstorageid;
  373. IF sqlca.SQLCode <> 0 THEN
  374. rslt = 0
  375. ARG_MSG = '查询调出车间的车间仓所属分部失败'+sqlca.SQLErrText
  376. GOTO ext
  377. END IF
  378. uo_inware_cp uo_cp
  379. uo_cp = CREATE uo_inware_cp
  380. uo_cp.commit_transaction = sqlca
  381. uo_cp.if_getid_ture = FALSE
  382. IF uo_cp.newbegin(ll_scid,3,ARG_MSG) = 0 THEN
  383. rslt = 0
  384. GOTO ext
  385. END IF
  386. uo_cp.indate = billdate
  387. uo_cp.inrep = relrep
  388. uo_cp.part = uo_billcode
  389. uo_cp.storageid = sstorageid
  390. uo_cp.relid = sworkgroupid
  391. uo_cp.dscrp = '车间调拨单自动生成'
  392. uo_cp.relint_1 = 1 //0-手动,1-自动
  393. FOR ll_i = 1 TO ll_arr_cnt
  394. ls_unit_buy = ''
  395. ld_uqty = 0
  396. ld_rate_buy = 0
  397. IF s_ws_mx[ll_i].mtrlid > 0 THEN
  398. SELECT u_mtrldef.mtrlcode,
  399. u_mtrldef.unit,
  400. u_order_ml.taskrelcode,
  401. u_mtrldef.ifunit,
  402. u_mtrldef.unit_buy,
  403. u_mtrldef.rate_buy
  404. INTO :ls_mtrlcode,
  405. :ls_unit,
  406. :ls_taskrelcode,
  407. :li_ifunit,
  408. :ls_unit_buy,
  409. :ld_rate_buy
  410. FROM u_mtrldef,u_order_ml
  411. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  412. AND u_order_ml.scid = :s_ws_mx[ll_i].orderscid
  413. AND u_order_ml.orderid = :s_ws_mx[ll_i].orderid;
  414. IF sqlca.SQLCode <> 0 THEN
  415. rslt = 0
  416. ARG_MSG = "查询计划资料失败,"+sqlca.SQLErrText
  417. GOTO ext
  418. END IF
  419. f_get_planprice_mtrl(s_ws_mx[ll_i].mtrlid,'','','',ls_planprice)
  420. IF uo_option_taskplancode = 1 THEN
  421. ls_plancode = ls_taskrelcode
  422. ELSE
  423. ls_plancode = ''
  424. END IF
  425. s_ws_mx[ll_i].plancode = ls_plancode
  426. s_ws_mx[ll_i].planprice = ls_planprice
  427. SELECT u_order_ml.cusid
  428. INTO :ll_cusid
  429. FROM u_order_ml
  430. WHERE u_order_ml.scid = :s_ws_mx[ll_i].orderscid
  431. AND u_order_ml.orderid = :s_ws_mx[ll_i].orderid;
  432. IF sqlca.SQLCode = -1 THEN
  433. rslt = 0
  434. ARG_MSG = "查询计划资料(客户)失败"
  435. GOTO ext
  436. ELSEIF sqlca.SQLCode = 100 THEN
  437. ll_cusid = 0
  438. END IF
  439. IF IsNull(ll_cusid) THEN ll_cusid = 0
  440. s_ws_mx[ll_i].cusid = ll_cusid
  441. IF li_ifunit = 0 OR ld_rate_buy <= 0 THEN
  442. ld_rate_buy = 1
  443. ls_unit_buy = ls_unit
  444. END IF
  445. ld_uqty = (s_ws_mx[ll_i].qty + s_ws_mx[ll_i].restqty) / ld_rate_buy
  446. IF uo_cp.acceptmx(s_ws_mx[ll_i].printid,&
  447. s_ws_mx[ll_i].mtrlid,&
  448. ls_mtrlcode,&
  449. s_ws_mx[ll_i].plancode,&
  450. s_ws_mx[ll_i].status,&
  451. ld_uqty,&
  452. ls_planprice,&
  453. 1,&
  454. '',&
  455. ARG_MSG,&
  456. 0,&
  457. s_ws_mx[ll_i].orderid,&
  458. 1,&
  459. s_ws_mx[ll_i].woodcode,&
  460. s_ws_mx[ll_i].pcode,&
  461. s_ws_mx[ll_i].cusid,&
  462. ls_unit_buy,&
  463. ld_rate_buy,&
  464. s_ws_mx[ll_i].qty + s_ws_mx[ll_i].restqty,&
  465. 0,0,'','',0,0,'','',&
  466. ld_uqty,&
  467. 0) = 0 THEN
  468. rslt = 0
  469. GOTO ext
  470. END IF
  471. END IF
  472. NEXT
  473. IF uo_cp.Save(FALSE,ARG_MSG) = 0 THEN
  474. rslt = 0
  475. GOTO ext
  476. END IF
  477. IF uo_cp.getinfo(uo_cp.scid,uo_cp.inwareid,ARG_MSG) = 0 THEN
  478. rslt = 0
  479. GOTO ext
  480. END IF
  481. IF uo_cp.auditing(FALSE,ARG_MSG) = 0 THEN
  482. rslt = 0
  483. GOTO ext
  484. END IF
  485. ll_relcpid = uo_cp.inwareid
  486. ls_relcpcode = uo_cp.inwarecode
  487. ////////////// //
  488. //====================================================================
  489. // 自动生成仓库调拨单
  490. //====================================================================
  491. Long ll_mtrlwareid
  492. uo_outware_move uo_move
  493. uo_move = CREATE uo_outware_move
  494. uo_move.if_getid_ture = FALSE
  495. IF uo_move.newbegin(ARG_MSG) = 0 THEN
  496. rslt = 0
  497. GOTO ext
  498. END IF
  499. uo_move.outdate = billdate // 发生时间
  500. uo_move.indate = billdate // 发生时间
  501. uo_move.outrep = relrep // 经手人
  502. uo_move.dscrp = '车间调拨单自动生成' //备注
  503. uo_move.sstorageid = sstorageid
  504. uo_move.dstorageid = dstorageid
  505. uo_move.relcode = uo_billcode
  506. uo_move.ifauto = 1
  507. FOR ll_i = 1 TO ll_arr_cnt
  508. ls_unit_buy = ''
  509. ld_uqty = 0
  510. ld_rate_buy = 0
  511. IF s_ws_mx[ll_i].mtrlid > 0 THEN
  512. //查询相关库存
  513. SELECT top 1 mtrlwareid INTO :ll_mtrlwareid
  514. FROM u_mtrlware
  515. WHERE mtrlid = :s_ws_mx[ll_i].mtrlid
  516. AND status = :s_ws_mx[ll_i].status
  517. AND woodcode = :s_ws_mx[ll_i].woodcode
  518. AND pcode = :s_ws_mx[ll_i].pcode
  519. AND plancode = :s_ws_mx[ll_i].plancode
  520. AND sptid = :s_ws_mx[ll_i].cusid
  521. AND storageid = :sstorageid;
  522. IF sqlca.SQLCode = -1 THEN
  523. rslt = 0
  524. ARG_MSG = "查询相关库存失败"
  525. GOTO ext
  526. ELSEIF sqlca.SQLCode = 100 THEN
  527. ll_mtrlwareid = 0
  528. END IF
  529. IF ll_mtrlwareid > 0 THEN
  530. SELECT u_mtrldef.mtrlcode,
  531. u_mtrldef.unit,
  532. u_order_ml.taskrelcode,
  533. u_mtrldef.planprice,
  534. u_mtrldef.ifunit,
  535. u_mtrldef.unit_buy,
  536. u_mtrldef.rate_buy
  537. INTO :ls_mtrlcode,
  538. :ls_unit,
  539. :ls_taskrelcode,
  540. :ls_planprice,
  541. :li_ifunit,
  542. :ls_unit_buy,
  543. :ld_rate_buy
  544. FROM u_mtrldef,u_order_ml
  545. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  546. AND u_order_ml.scid = :s_ws_mx[ll_i].orderscid
  547. AND u_order_ml.orderid = :s_ws_mx[ll_i].orderid;
  548. IF sqlca.SQLCode <> 0 THEN
  549. rslt = 0
  550. ARG_MSG = "查询计划资料失败,"+sqlca.SQLErrText
  551. GOTO ext
  552. END IF
  553. IF li_ifunit = 0 OR ld_rate_buy <= 0 THEN
  554. ld_rate_buy = 1
  555. ls_unit_buy = ls_unit
  556. END IF
  557. ld_uqty = (s_ws_mx[ll_i].qty + s_ws_mx[ll_i].restqty) / ld_rate_buy
  558. IF uo_move.acceptmx(ll_mtrlwareid,&
  559. s_ws_mx[ll_i].qty,&
  560. s_ws_mx[ll_i].planprice,&
  561. ARG_MSG,&
  562. s_ws_mx[ll_i].printid,&
  563. '',&
  564. ls_unit_buy,ld_uqty,ld_rate_buy,'',0,0,0,'') = 0 THEN
  565. rslt = 0
  566. GOTO ext
  567. END IF
  568. END IF
  569. END IF
  570. NEXT
  571. IF uo_move.Save(ARG_MSG,FALSE) = 0 THEN
  572. rslt = 0
  573. GOTO ext
  574. END IF
  575. IF uo_move.getinfo(uo_move.outwareid,ARG_MSG) = 0 THEN
  576. rslt = 0
  577. GOTO ext
  578. END IF
  579. IF uo_move.ss_auditing(publ_operator,ARG_MSG,FALSE) = 0 THEN
  580. rslt = 0
  581. GOTO ext
  582. END IF
  583. //IF uo_move.getinfo(uo_move.outwareid,ARG_MSG) = 0 THEN
  584. // rslt = 0
  585. // GOTO ext
  586. //END IF
  587. //
  588. //IF uo_move.ds_auditing(publ_operator,ARG_MSG,FALSE) = 0 THEN
  589. // rslt = 0
  590. // GOTO ext
  591. //END IF
  592. ll_relmoveid = uo_move.outwareid
  593. ls_relmovecode = uo_move.outwarecode
  594. // //
  595. UPDATE u_orderworkgroup_num
  596. SET relcpid = :ll_relcpid,
  597. relcpscid = :ll_scid,
  598. relcpcode = :ls_relcpcode,
  599. relmoveid = :ll_relmoveid,
  600. relmovecode = :ls_relmovecode
  601. Where u_orderworkgroup_num.billid = :arg_billid;
  602. IF sqlca.SQLCode <> 0 THEN
  603. rslt = 0
  604. ARG_MSG = "因网络或其它原因导致更新单据相关单据操作失败"+"~n"+sqlca.SQLErrText
  605. GOTO ext
  606. END IF
  607. DESTROY uo_cp
  608. DESTROY uo_move
  609. //更新审核标记
  610. UPDATE u_orderworkgroup_num
  611. SET auditrep = :publ_operator,
  612. auditdate = getdate(),
  613. flag = 1
  614. WHERE billid = :arg_billid
  615. AND flag = 0;
  616. IF sqlca.SQLCode <> 0 THEN
  617. rslt = 0
  618. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  619. GOTO ext
  620. ELSEIF sqlca.SQLNRows = 0 THEN
  621. rslt = 0
  622. ARG_MSG = "单据正在审核,请重新检查"
  623. GOTO ext
  624. END IF
  625. ext:
  626. IF rslt = 0 THEN
  627. ROLLBACK;
  628. ELSEIF rslt = 1 AND arg_ifcommit THEN
  629. COMMIT;
  630. END IF
  631. RETURN rslt
  632. end function
  633. public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  634. IF arg_billid <= 0 THEN
  635. rslt = 0
  636. arG_MSG = "非法单据唯一码"
  637. GOTO ext
  638. END IF
  639. SELECT relcpid,
  640. relcpscid,
  641. relmoveid,
  642. sstorageid,
  643. dstorageid,
  644. sworkgroupid,
  645. dworkgroupid,
  646. billcode,
  647. relrep,
  648. billdate
  649. INTO :relcpid,
  650. :relcpscid,
  651. :relmoveid,
  652. :sstorageid,
  653. :dstorageid,
  654. :sworkgroupid,
  655. :dworkgroupid,
  656. :uo_billcode,
  657. :relrep,
  658. :billdate
  659. FROM u_orderworkgroup_num
  660. Where billid = :arg_billid;
  661. IF sqlca.SQLCode <> 0 THEN
  662. rslt = 0
  663. arG_MSG = '查询操作失败(错误单据唯一码)'+sqlca.SQLErrText
  664. GOTO ext
  665. END IF
  666. uo_billid = arg_billid
  667. ext:
  668. IF rslt = 0 THEN
  669. relcpid = 0
  670. relcpscid = 0
  671. relmoveid = 0
  672. sstorageid = 0
  673. dstorageid = 0
  674. sworkgroupid = 0
  675. dworkgroupid = 0
  676. relrep = ''
  677. uo_billcode = ''
  678. END IF
  679. RETURN rslt
  680. end function
  681. public function integer getinfo (long arg_billid, ref s_ws_orderworkgroupmx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  682. Long i = 1,no_mxcheck = 0
  683. IF arg_billid <= 0 THEN
  684. rslt = 0
  685. arg_msg = '错误单据唯一码'
  686. GOTO ext
  687. END IF
  688. rslt = p_getinfo(arg_billid,arg_msg)
  689. if rslt = 0 then goto ext
  690. //用游标读取明细
  691. DECLARE cur_costmx CURSOR FOR
  692. SELECT u_orderworkgroup_nummx.billid,
  693. u_orderworkgroup_nummx.printid,
  694. u_orderworkgroup_nummx.orderid,
  695. u_orderworkgroup_nummx.orderscid,
  696. u_orderworkgroup_nummx.mtrlid,
  697. u_orderworkgroup_nummx.qty,
  698. u_orderworkgroup_nummx.restqty,
  699. u_orderworkgroup_nummx.status,
  700. u_orderworkgroup_nummx.woodcode,
  701. u_orderworkgroup_nummx.pcode,
  702. u_orderworkgroup_nummx.mxdscrp
  703. FROM u_orderworkgroup_nummx
  704. WHERE u_orderworkgroup_nummx.billid = :arg_billid
  705. Order By u_orderworkgroup_nummx.printid;
  706. OPEN cur_costmx;
  707. FETCH cur_costmx INTO
  708. :arg_ref_mx[i].billid,
  709. :arg_ref_mx[i].printid,:arg_ref_mx[i].orderid,
  710. :arg_ref_mx[i].orderscid,:arg_ref_mx[i].mtrlid,
  711. :arg_ref_mx[i].qty,:arg_ref_mx[i].restqty,:arg_ref_mx[i].status,
  712. :arg_ref_mx[i].woodcode,:arg_ref_mx[i].pcode,:arg_ref_mx[i].mxdscrp;
  713. DO WHILE sqlca.SQLCode = 0
  714. i++
  715. FETCH cur_costmx INTO
  716. :arg_ref_mx[i].billid,
  717. :arg_ref_mx[i].printid,:arg_ref_mx[i].orderid,
  718. :arg_ref_mx[i].orderscid,:arg_ref_mx[i].mtrlid,
  719. :arg_ref_mx[i].qty,:arg_ref_mx[i].restqty,:arg_ref_mx[i].status,
  720. :arg_ref_mx[i].woodcode,:arg_ref_mx[i].pcode,:arg_ref_mx[i].mxdscrp;
  721. LOOP
  722. CLOSE cur_costmx;
  723. //检验明细是否读入完整
  724. SELECT count(*) INTO :no_mxcheck
  725. FROM u_orderworkgroup_nummx
  726. Where billid = :arg_billid;
  727. IF sqlca.SQLCode <> 0 THEN
  728. rslt = 0
  729. arg_msg = "查询操作失败,单据明细数量"
  730. GOTO ext
  731. END IF
  732. IF i <> (no_mxcheck + 1) THEN
  733. rslt = 0
  734. arg_msg = "查询操作失败,单据明细"
  735. GOTO ext
  736. END IF
  737. arg_arr_cnt = i - 1
  738. ext:
  739. RETURN rslt
  740. end function
  741. public function integer c_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,cnt = 0
  742. DateTime null_dt
  743. Long li_flag,li_secflag
  744. SetNull(null_dt)
  745. IF p_getflag(arg_billid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  746. rslt = 0
  747. GOTO ext
  748. END IF
  749. IF li_secflag = 1 THEN
  750. rslt = 0
  751. ARG_MSG = '单据已经调入审,请先撤调入审'
  752. GOTO ext
  753. END IF
  754. IF li_flag <> 1 THEN
  755. rslt = 0
  756. ARG_MSG = '单据不是在审核状态,不可以撤审'
  757. GOTO ext
  758. END IF
  759. IF p_getinfo(arg_billid,ARG_MSG) = 0 THEN
  760. rslt = 0
  761. GOTO ext
  762. END IF
  763. //撤审删除车间生产进仓单
  764. uo_inware_cp uo_cp
  765. uo_cp = CREATE uo_inware_cp
  766. uo_cp.commit_transaction = sqlca
  767. uo_cp.lb_ifdelauto = TRUE
  768. IF uo_cp.getinfo(relcpscid,relcpid,ARG_MSG) = 0 THEN
  769. rslt = 0
  770. GOTO ext
  771. END IF
  772. IF uo_cp.c_auditing(FALSE,ARG_MSG) = 0 THEN
  773. rslt = 0
  774. GOTO ext
  775. END IF
  776. IF uo_cp.del(relcpscid,relcpid,ARG_MSG,FALSE) = 0 THEN
  777. rslt = 0
  778. GOTO ext
  779. END IF
  780. //撤审删除仓库调拨单
  781. uo_outware_move uo_move
  782. uo_move = CREATE uo_outware_move
  783. //IF uo_move.getinfo(relmoveid,ARG_MSG) = 0 THEN
  784. // rslt = 0
  785. // GOTO ext
  786. //END IF
  787. //
  788. //IF uo_move.c_ds_auditing(ARG_MSG,false) = 0 THEN
  789. // rslt = 0
  790. // GOTO ext
  791. //END IF
  792. IF uo_move.getinfo(relmoveid,ARG_MSG) = 0 THEN
  793. rslt = 0
  794. GOTO ext
  795. END IF
  796. IF uo_move.c_ss_auditing(ARG_MSG,FALSE) = 0 THEN
  797. rslt = 0
  798. GOTO ext
  799. END IF
  800. IF uo_move.Cancel(relmoveid,ARG_MSG,FALSE) = 0 THEN
  801. rslt = 0
  802. GOTO ext
  803. END IF
  804. UPDATE u_orderworkgroup_num
  805. SET relcpid = 0,
  806. relcpscid = 0,
  807. relcpcode = '',
  808. relmoveid = 0 ,
  809. relmovecode = '',
  810. auditrep = '',
  811. auditdate = :null_dt,
  812. flag = 0
  813. Where u_orderworkgroup_num.billid = :arg_billid;
  814. IF sqlca.SQLCode <> 0 THEN
  815. rslt = 0
  816. ARG_MSG = "因网络或其它原因导致更新单据相关成品进仓单资料操作失败"+"~n"+sqlca.SQLErrText
  817. GOTO ext
  818. END IF
  819. DESTROY uo_cp
  820. DESTROY uo_move
  821. ext:
  822. IF rslt = 0 THEN
  823. ROLLBACK ;
  824. ELSEIF rslt = 1 AND arg_ifcommit THEN
  825. COMMIT ;
  826. END IF
  827. RETURN rslt
  828. end function
  829. public function integer p_getflag (long arg_billid, ref long arg_flag, ref long arg_secflag, ref string arg_msg);Int rslt = 1
  830. SELECT flag,secflag
  831. INTO :arg_flag,:arg_secflag
  832. FROM u_orderworkgroup_num
  833. WHERE billid = :arg_billid;
  834. IF sqlca.SQLCode <> 0 THEN
  835. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. ext:
  840. RETURN rslt
  841. end function
  842. public function integer d_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  843. Long ll_flag,ll_secflag
  844. IF arg_billid <= 0 THEN
  845. rslt = 0
  846. ARG_MSG = '错误单据唯一码'
  847. GOTO ext
  848. END IF
  849. IF p_getflag(arg_billid,ll_flag,ll_secflag,ARG_MSG) = 0 THEN
  850. rslt = 0
  851. GOTO ext
  852. END IF
  853. IF ll_flag <> 1 OR ll_secflag <> 0 THEN
  854. rslt = 0
  855. ARG_MSG = '单据不是在待调入审核状态,不可以执行操作'
  856. GOTO ext
  857. END IF
  858. IF p_getinfo(arg_billid,ARG_MSG) = 0 THEN
  859. rslt = 0
  860. GOTO ext
  861. END IF
  862. uo_outware_move uo_move
  863. uo_move = CREATE uo_outware_move
  864. uo_move.if_getid_ture = FALSE
  865. IF uo_move.getinfo(relmoveid,ARG_MSG) = 0 THEN
  866. rslt = 0
  867. GOTO ext
  868. END IF
  869. IF uo_move.ds_auditing(publ_operator,ARG_MSG,FALSE) = 0 THEN
  870. rslt = 0
  871. GOTO ext
  872. END IF
  873. DESTROY uo_move
  874. //更新审核标记
  875. UPDATE u_orderworkgroup_num
  876. SET secauditemp = :publ_operator,
  877. secauditdate = getdate(),
  878. secflag = 1
  879. WHERE billid = :arg_billid
  880. AND flag = 1
  881. AND secflag = 0 ;
  882. IF sqlca.SQLCode <> 0 THEN
  883. rslt = 0
  884. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  885. GOTO ext
  886. ELSEIF sqlca.SQLNRows = 0 THEN
  887. rslt = 0
  888. ARG_MSG = "单据正在审核,请重新检查"
  889. GOTO ext
  890. END IF
  891. ext:
  892. IF rslt = 0 THEN
  893. ROLLBACK;
  894. ELSEIF rslt = 1 AND arg_ifcommit THEN
  895. COMMIT;
  896. END IF
  897. RETURN rslt
  898. end function
  899. public function integer c_d_audit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  900. Long ll_flag,ll_secflag
  901. datetime null_dt
  902. SetNull(null_dt)
  903. IF arg_billid <= 0 THEN
  904. rslt = 0
  905. ARG_MSG = '错误单据唯一码'
  906. GOTO ext
  907. END IF
  908. IF p_getflag(arg_billid,ll_flag,ll_secflag,ARG_MSG) = 0 THEN
  909. rslt = 0
  910. GOTO ext
  911. END IF
  912. IF ll_flag <> 1 OR ll_secflag <> 1 THEN
  913. rslt = 0
  914. ARG_MSG = '单据不是在调入审核状态,不可以执行操作'
  915. GOTO ext
  916. END IF
  917. IF p_getinfo(arg_billid,ARG_MSG) = 0 THEN
  918. rslt = 0
  919. GOTO ext
  920. END IF
  921. uo_outware_move uo_move
  922. uo_move = CREATE uo_outware_move
  923. uo_move.if_getid_ture = FALSE
  924. IF uo_move.getinfo(relmoveid,ARG_MSG) = 0 THEN
  925. rslt = 0
  926. GOTO ext
  927. END IF
  928. IF uo_move.c_ds_auditing(ARG_MSG,FALSE) = 0 THEN
  929. rslt = 0
  930. GOTO ext
  931. END IF
  932. DESTROY uo_move
  933. //更新审核标记
  934. UPDATE u_orderworkgroup_num
  935. SET secauditemp = '',
  936. secauditdate = :null_dt,
  937. secflag = 0
  938. WHERE billid = :arg_billid
  939. AND flag = 1
  940. AND secflag = 1 ;
  941. IF sqlca.SQLCode <> 0 THEN
  942. rslt = 0
  943. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  944. GOTO ext
  945. ELSEIF sqlca.SQLNRows = 0 THEN
  946. rslt = 0
  947. ARG_MSG = "单据正在审核,请重新检查"
  948. GOTO ext
  949. END IF
  950. ext:
  951. IF rslt = 0 THEN
  952. ROLLBACK;
  953. ELSEIF rslt = 1 AND arg_ifcommit THEN
  954. COMMIT;
  955. END IF
  956. RETURN rslt
  957. end function
  958. on uo_orderworkgroup_ws.create
  959. call super::create
  960. TriggerEvent( this, "constructor" )
  961. end on
  962. on uo_orderworkgroup_ws.destroy
  963. TriggerEvent( this, "destructor" )
  964. call super::destroy
  965. end on
  966. event constructor;
  967. String str_optionvalue,arg_msg
  968. f_get_sys_option_value('038',str_optionvalue,arg_msg)
  969. uo_option_taskplancode = Long(str_optionvalue)
  970. end event