uo_finish_tech.sru 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123
  1. $PBExportHeader$uo_finish_tech.sru
  2. forward
  3. global type uo_finish_tech from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_finish_tech from nonvisualobject
  7. end type
  8. global uo_finish_tech uo_finish_tech
  9. type variables
  10. long uo_billid
  11. string uo_billcode
  12. long wrkgrpid,scid
  13. datetime billdate
  14. string billcode,opemp,dscrp
  15. int flag, secflag
  16. string rep
  17. int uo_option_inware_mtrlcuscode
  18. int uo_option_taskplancode
  19. end variables
  20. forward prototypes
  21. public function integer save (s_finish_tech arg_tech, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer updatebegin (long arg_billid, ref string arg_msg)
  23. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer getinfo (long arg_billid, ref s_finish_tech_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  25. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg)
  28. public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg)
  29. public function integer p_getinfo (long arg_billid, ref string arg_msg)
  30. public function integer p_reset ()
  31. public function integer c_secaudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer p_del_inware (long arg_inwareid, long arg_billid, long arg_printid, ref string arg_msg)
  33. public function integer p_create_inware (long arg_billid, long arg_printid, long arg_storageid, string arg_location, decimal arg_qty, string arg_mxdscrp, ref string arg_msg)
  34. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  35. end prototypes
  36. public function integer save (s_finish_tech arg_tech, 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_tech.scid) THEN arg_tech.scid = 0
  41. IF IsNull(arg_tech.billid) THEN arg_tech.billid = 0
  42. IF IsNull(arg_tech.rep) THEN arg_tech.rep = ''
  43. IF IsNull(arg_tech.wrkgrpid) THEN arg_tech.wrkgrpid = 0
  44. IF IsNull(arg_tech.dscrp) THEN arg_tech.dscrp = ''
  45. IF arg_tech.rep = '' THEN
  46. rslt = 0
  47. arg_msg = '请填写经手人'
  48. GOTO ext
  49. END IF
  50. SELECT Top 1 getdate() Into :server_dt From u_user;
  51. IF sqlca.SQLCode <> 0 THEN
  52. rslt = 0
  53. arg_msg = "查询操作失败,日期 "
  54. GOTO ext
  55. END IF
  56. it_mxbt = UpperBound(arg_tech.arg_s_mx)
  57. IF it_mxbt <= 0 THEN
  58. rslt = 0
  59. arg_msg = "没有正确明细内容"
  60. GOTO ext
  61. END IF
  62. IF arg_tech.billid = 0 THEN
  63. ll_billid = f_sys_scidentity(0,"u_finish_tech","billid",arg_msg,True,id_sqlca)
  64. IF ll_billid <= 0 THEN
  65. rslt = 0
  66. GOTO ext
  67. END IF
  68. IF f_get_sccode(arg_tech.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  69. rslt = 0
  70. GOTO ext
  71. END IF
  72. ls_billcode = getid(arg_tech.scid,ls_sccode + 'FT',Date(server_dt),False,sqlca)
  73. IF ls_billcode = "err" THEN
  74. rslt = 0
  75. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  76. GOTO ext
  77. END IF
  78. INSERT INTO u_finish_tech
  79. (scid,
  80. billid,
  81. billcode,
  82. rep,
  83. billdate,
  84. wrkgrpid,
  85. dscrp,
  86. opemp,
  87. opdate)
  88. VALUES (:arg_tech.scid,
  89. :ll_billid,
  90. :ls_billcode,
  91. :arg_tech.rep,
  92. :arg_tech.billdate,
  93. :arg_tech.wrkgrpid,
  94. :arg_tech.dscrp,
  95. :arg_opemp,
  96. :server_dt);
  97. IF sqlca.SQLCode <> 0 THEN
  98. rslt = 0
  99. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  100. GOTO ext
  101. END IF
  102. FOR i = 1 To it_mxbt
  103. INSERT INTO u_finish_tech_mx
  104. (scid,
  105. billid,
  106. printid,
  107. relid,
  108. qty,
  109. mxdscrp,
  110. storageid,
  111. location)
  112. VALUES (:arg_tech.scid,
  113. :ll_billid,
  114. :arg_tech.arg_s_mx[i].printid,
  115. :arg_tech.arg_s_mx[i].relid,
  116. :arg_tech.arg_s_mx[i].qty,
  117. :arg_tech.arg_s_mx[i].mxdscrp,
  118. :arg_tech.arg_s_mx[i].storageid,
  119. :arg_tech.arg_s_mx[i].location);
  120. IF sqlca.SQLCode <> 0 THEN
  121. rslt = 0
  122. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  123. GOTO ext
  124. END IF
  125. NEXT
  126. uo_billid = ll_billid
  127. uo_billcode = ls_billcode
  128. ELSE
  129. UPDATE u_finish_tech
  130. SET rep = :arg_tech.rep,
  131. billdate = :arg_tech.billdate,
  132. wrkgrpid = :arg_tech.wrkgrpid,
  133. dscrp = :arg_tech.dscrp,
  134. modemp = :arg_opemp,
  135. moddate = :server_dt
  136. WHERE billid = :arg_tech.billid
  137. And flag = 0;
  138. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  139. rslt = 0
  140. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  141. GOTO ext
  142. END IF
  143. DELETE FROM u_finish_tech_mx
  144. WHERE billid = :arg_tech.billid;
  145. IF sqlca.SQLCode <> 0 THEN
  146. rslt = 0
  147. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  148. GOTO ext
  149. END IF
  150. FOR i = 1 To it_mxbt
  151. INSERT INTO u_finish_tech_mx
  152. (scid,
  153. billid,
  154. printid,
  155. relid,
  156. qty,
  157. mxdscrp,
  158. storageid,
  159. location)
  160. VALUES (:arg_tech.scid,
  161. :arg_tech.billid,
  162. :arg_tech.arg_s_mx[i].printid,
  163. :arg_tech.arg_s_mx[i].relid,
  164. :arg_tech.arg_s_mx[i].qty,
  165. :arg_tech.arg_s_mx[i].mxdscrp,
  166. :arg_tech.arg_s_mx[i].storageid,
  167. :arg_tech.arg_s_mx[i].location);
  168. IF sqlca.SQLCode <> 0 THEN
  169. rslt = 0
  170. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  171. GOTO ext
  172. END IF
  173. NEXT
  174. uo_billid = arg_tech.billid
  175. END IF
  176. ext:
  177. IF rslt = 0 THEN
  178. ROLLBACK;
  179. ELSEIF arg_ifcommit And rslt = 1 THEN
  180. COMMIT;
  181. END IF
  182. RETURN rslt
  183. end function
  184. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  185. Int li_flag,li_secflag
  186. IF arg_billid <= 0 THEN
  187. rslt = 0
  188. arg_msg = '错误的单据唯一码'
  189. GOTO ext
  190. END IF
  191. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  192. rslt = 0
  193. GOTO ext
  194. END IF
  195. IF li_flag = 1 THEN
  196. rslt = 0
  197. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  198. GOTO ext
  199. END IF
  200. ext:
  201. RETURN rslt
  202. end function
  203. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  204. Int li_flag,li_secflag
  205. IF arg_billid <= 0 THEN
  206. rslt = 0
  207. arg_msg = '错误的单据唯一码'
  208. GOTO ext
  209. END IF
  210. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  211. rslt = 0
  212. GOTO ext
  213. END IF
  214. IF li_flag <> 0 THEN
  215. rslt = 0
  216. arg_msg = '单据不是待审核状态,不能删除'
  217. GOTO ext
  218. END IF
  219. DELETE FROM u_finish_tech_mx
  220. Where billid = :arg_billid;
  221. IF sqlca.SQLCode <> 0 THEN
  222. rslt = 0
  223. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  224. GOTO ext
  225. END IF
  226. DELETE FROM u_finish_tech
  227. Where billid = :arg_billid;
  228. IF sqlca.SQLCode <> 0 THEN
  229. rslt = 0
  230. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  231. GOTO ext
  232. END IF
  233. ext:
  234. IF rslt = 0 THEN
  235. ROLLBACK;
  236. ELSEIF rslt = 1 And arg_ifcommit THEN
  237. COMMIT;
  238. END IF
  239. RETURN rslt
  240. end function
  241. public function integer getinfo (long arg_billid, ref s_finish_tech_mx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  242. Long i = 1,no_mxcheck = 0
  243. If arg_billid <= 0 Then
  244. rslt = 0
  245. arg_msg = '错误单据唯一码'
  246. Goto ext
  247. End If
  248. If p_getinfo(arg_billid,arg_msg) = 0 Then
  249. rslt = 0
  250. Goto ext
  251. End If
  252. Declare cur_mx Cursor For
  253. Select u_finish_tech_mx.scid,
  254. u_finish_tech_mx.printid,
  255. u_finish_tech_mx.relid,
  256. u_finish_tech_mx.qty,
  257. u_finish_tech_mx.mxdscrp,
  258. u_OrderMtrl_workgroup_tree.iflast,
  259. u_finish_tech_mx.storageid,
  260. u_finish_tech_mx.location,
  261. u_finish_tech_mx.relinwareid,
  262. u_finish_tech_mx.relinwarecode
  263. From u_OrderMtrl_workgroup_tree RIGHT Outer JOIN
  264. u_order_plan_tech ON
  265. u_OrderMtrl_workgroup_tree.scid = u_order_plan_tech.scid And
  266. u_OrderMtrl_workgroup_tree.orderid = u_order_plan_tech.orderid And
  267. u_OrderMtrl_workgroup_tree.printid = u_order_plan_tech.printid RIGHT Outer JOIN
  268. u_finish_tech_mx ON u_order_plan_tech.billid = u_finish_tech_mx.relid
  269. Where u_finish_tech_mx.billid = :arg_billid
  270. Order By u_finish_tech_mx.printid;
  271. Open cur_mx;
  272. Fetch cur_mx Into :arg_ref_mx[i].scid,
  273. :arg_ref_mx[i].printid,
  274. :arg_ref_mx[i].relid,
  275. :arg_ref_mx[i].qty,
  276. :arg_ref_mx[i].mxdscrp,
  277. :arg_ref_mx[i].iflast,
  278. :arg_ref_mx[i].storageid,
  279. :arg_ref_mx[i].location,
  280. :arg_ref_mx[i].relinwareid,
  281. :arg_ref_mx[i].relinwarecode;
  282. Do While sqlca.SQLCode = 0
  283. i++
  284. Fetch cur_mx Into :arg_ref_mx[i].scid,
  285. :arg_ref_mx[i].printid,
  286. :arg_ref_mx[i].relid,
  287. :arg_ref_mx[i].qty,
  288. :arg_ref_mx[i].mxdscrp,
  289. :arg_ref_mx[i].iflast,
  290. :arg_ref_mx[i].storageid,
  291. :arg_ref_mx[i].location,
  292. :arg_ref_mx[i].relinwareid,
  293. :arg_ref_mx[i].relinwarecode;
  294. Loop
  295. Close cur_mx;
  296. //检验明细是否读入完整
  297. Select count(*) Into :no_mxcheck
  298. From u_finish_tech_mx
  299. Where billid = :arg_billid;
  300. If sqlca.SQLCode <> 0 Then
  301. rslt = 0
  302. arg_msg = "查询操作失败,单据明细数量"
  303. Goto ext
  304. End If
  305. If i <> (no_mxcheck + 1) Then
  306. rslt = 0
  307. arg_msg = "查询操作失败,单据汇总内容"
  308. Goto ext
  309. End If
  310. arg_arr_cnt = i - 1
  311. ext:
  312. Return rslt
  313. end function
  314. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  315. Int li_flag,li_secflag
  316. s_finish_tech_mx s_mx[]
  317. Long ll_arr_cnt,ll_i
  318. uo_order_plan_tech uo_plan
  319. uo_plan = Create uo_order_plan_tech
  320. IF arg_billid <= 0 THEN
  321. rslt = 0
  322. arg_msg = '错误单据唯一码'
  323. GOTO ext
  324. END IF
  325. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  326. rslt = 0
  327. GOTO ext
  328. END IF
  329. IF li_flag <> 0 THEN
  330. rslt = 0
  331. arg_msg = '单据不是待审核状态,不能审核'
  332. GOTO ext
  333. END IF
  334. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  335. rslt = 0
  336. GOTO ext
  337. END IF
  338. FOR ll_i = 1 To ll_arr_cnt
  339. IF s_mx[ll_i].relid > 0 THEN
  340. IF uo_plan.addcmpqty(s_mx[ll_i].relid,s_mx[ll_i].qty,arg_msg,False) = 0 THEN
  341. rslt = 0
  342. GOTO ext
  343. END IF
  344. END IF
  345. NEXT
  346. UPDATE u_finish_tech
  347. SET flag = 1,
  348. auditemp = :arg_opemp,
  349. auditdate = getdate()
  350. WHERE billid = :arg_billid
  351. And flag = 0 ;
  352. IF sqlca.SQLCode <> 0 And sqlca.SQLNRows <= 0 THEN
  353. rslt = 0
  354. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  355. GOTO ext
  356. END IF
  357. ext:
  358. IF rslt = 0 THEN
  359. ROLLBACK;
  360. ELSEIF rslt = 1 And arg_ifcommit THEN
  361. COMMIT;
  362. END IF
  363. Destroy uo_plan
  364. RETURN rslt
  365. end function
  366. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  367. Int li_flag,li_secflag
  368. s_finish_tech_mx s_mx[]
  369. Long ll_arr_cnt,ll_i
  370. DateTime null_dt
  371. SetNull(null_dt)
  372. uo_order_plan_tech uo_plan
  373. uo_plan = Create uo_order_plan_tech
  374. IF arg_billid <= 0 THEN
  375. rslt = 0
  376. arg_msg = '错误单据唯一码'
  377. GOTO ext
  378. END IF
  379. IF p_getflag(arg_billid,li_flag,li_secflag,arg_msg) = 0 THEN
  380. rslt = 0
  381. GOTO ext
  382. END IF
  383. IF li_flag <> 1 THEN
  384. rslt = 0
  385. arg_msg = '单据不是已审核状态,不能撤审'
  386. GOTO ext
  387. END IF
  388. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  389. rslt = 0
  390. GOTO ext
  391. END IF
  392. FOR ll_i = 1 To ll_arr_cnt
  393. IF s_mx[ll_i].relid > 0 THEN
  394. IF uo_plan.addcmpqty(s_mx[ll_i].relid,0 - s_mx[ll_i].qty,arg_msg,False) = 0 THEN
  395. rslt = 0
  396. GOTO ext
  397. END IF
  398. END IF
  399. NEXT
  400. UPDATE u_finish_tech
  401. SET flag = 0,
  402. auditemp = '',
  403. auditdate = :null_dt
  404. WHERE billid = :arg_billid
  405. And flag = 1 ;
  406. IF sqlca.SQLCode <> 0 And sqlca.SQLNRows <= 0 THEN
  407. rslt = 0
  408. arg_msg = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  409. GOTO ext
  410. END IF
  411. ext:
  412. IF rslt = 0 THEN
  413. ROLLBACK;
  414. ELSEIF rslt = 1 And arg_ifcommit THEN
  415. COMMIT;
  416. END IF
  417. Destroy uo_plan
  418. RETURN rslt
  419. end function
  420. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg);Int rslt = 1
  421. SELECT flag,secflag
  422. INTO :arg_flag,:arg_secflag
  423. FROM u_finish_tech
  424. WHERE billid = :arg_billid;
  425. IF sqlca.SQLCode <> 0 THEN
  426. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  427. rslt = 0
  428. GOTO ext
  429. END IF
  430. ext:
  431. RETURN rslt
  432. end function
  433. public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg);Int rslt = 1
  434. IF uo_option_inware_mtrlcuscode = -1000 THEN
  435. rslt = 0
  436. arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!'
  437. GOTO ext
  438. END IF
  439. IF uo_option_taskplancode = -1000 THEN
  440. rslt = 0
  441. arg_msg = '选项:[038]使用客户批号库存,读取初始默认值失败,操作取消!'
  442. GOTO ext
  443. END IF
  444. Long li_ordertype,cnt
  445. Long ll_cusid
  446. String ls_cuscode,ls_cusname,ls_plancode
  447. Long ll_mtrlid,ll_mtrlid_p,ll_porderid
  448. Boolean lb_ifsameorder
  449. Int li_ifmtrlcuscode
  450. String ls_ordercode
  451. SELECT ordercode,ordertype,mtrlid,porderid INTO :ls_ordercode,:li_ordertype,:ll_mtrlid,:ll_porderid
  452. FROM u_order_ml
  453. WHERE scid = :arg_scid
  454. AND orderid = :arg_orderid;
  455. IF sqlca.SQLCode <> 0 THEN
  456. rslt = 0
  457. arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText
  458. GOTO ext
  459. END IF
  460. IF li_ordertype = 0 THEN
  461. ll_cusid = 0
  462. GOTO ext
  463. END IF
  464. SELECT count(*) INTO :cnt
  465. FROM u_order_ml_mx
  466. WHERE orderid = :arg_orderid
  467. AND scid = :arg_scid;
  468. IF sqlca.SQLCode <> 0 THEN
  469. rslt = 0
  470. arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText
  471. GOTO ext
  472. END IF
  473. IF cnt <> 1 THEN
  474. ll_cusid = 0
  475. GOTO ext
  476. END IF
  477. SELECT ifmtrlcuscode INTO :li_ifmtrlcuscode
  478. FROM u_mtrldef
  479. Where mtrlid = :ll_mtrlid;
  480. IF sqlca.SQLCode <> 0 THEN
  481. rslt = 0
  482. arg_msg = '查询物料是否使用产品批号属性失败,'+sqlca.SQLErrText
  483. GOTO ext
  484. END IF
  485. IF uo_option_inware_mtrlcuscode = 1 AND li_ifmtrlcuscode = 1 THEN
  486. arg_mtrlcuscode = ls_ordercode
  487. ELSE
  488. arg_mtrlcuscode = ''
  489. END IF
  490. IF li_ordertype = 4 THEN
  491. SELECT mtrlid INTO :ll_mtrlid_p
  492. FROM u_order_ml
  493. WHERE scid = :arg_scid
  494. AND orderid = :ll_porderid;
  495. IF sqlca.SQLCode <> 0 THEN
  496. rslt = 0
  497. arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText
  498. GOTO ext
  499. END IF
  500. IF ll_mtrlid_p = ll_mtrlid THEN
  501. lb_ifsameorder = TRUE
  502. SELECT u_cust.cusid,
  503. u_cust.cuscode,
  504. u_cust.name,
  505. u_order_ml.taskrelcode
  506. INTO
  507. :ll_cusid,
  508. :ls_cuscode,
  509. :ls_cusname,
  510. :ls_plancode
  511. FROM u_cust,u_order_ml
  512. WHERE u_cust.cusid = u_order_ml.cusid
  513. AND u_order_ml.scid = :arg_scid
  514. AND u_order_ml.orderid = :ll_porderid;
  515. IF sqlca.SQLCode <> 0 THEN
  516. rslt = 0
  517. arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText
  518. GOTO ext
  519. END IF
  520. END IF
  521. ELSE
  522. SELECT u_cust.cusid,
  523. u_cust.cuscode,
  524. u_cust.name,
  525. u_order_ml.taskrelcode
  526. INTO
  527. :ll_cusid,
  528. :ls_cuscode,
  529. :ls_cusname,
  530. :ls_plancode
  531. FROM u_cust,u_order_ml
  532. WHERE u_cust.cusid = u_order_ml.cusid
  533. AND u_order_ml.scid = :arg_scid
  534. AND u_order_ml.orderid = :arg_orderid;
  535. IF sqlca.SQLCode <> 0 THEN
  536. rslt = 0
  537. arg_msg = '查询指令单相关信息失败,'+sqlca.SQLErrText
  538. GOTO ext
  539. END IF
  540. END IF
  541. IF lb_ifsameorder AND uo_option_taskplancode = 1 THEN
  542. arg_plancode = ls_plancode
  543. ELSE
  544. arg_plancode = ''
  545. END IF
  546. ext:
  547. arg_cusid = ll_cusid
  548. RETURN rslt
  549. end function
  550. public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  551. If arg_billid <= 0 Then
  552. rslt = 0
  553. arg_msg = '错误生产任务单唯一码'
  554. Goto ext
  555. End If
  556. Select scid,
  557. billcode,
  558. rep,
  559. billdate,
  560. wrkgrpid,
  561. dscrp,
  562. opemp,
  563. flag,
  564. secflag
  565. Into
  566. :scid,
  567. :billcode,
  568. :rep,
  569. :billdate,
  570. :wrkgrpid,
  571. :dscrp,
  572. :opemp,
  573. :flag,
  574. :secflag
  575. From u_finish_tech
  576. Where billid = :arg_billid ;
  577. If sqlca.SQLCode <> 0 Then
  578. rslt = 0
  579. arg_msg = '查询生产任务完工单内容失败(错误生产任务完工单唯一码)'
  580. Goto ext
  581. End If
  582. ext:
  583. IF rslt = 0 THEN p_reset()
  584. Return rslt
  585. end function
  586. public function integer p_reset ();scid = 0
  587. billcode = ''
  588. rep = ''
  589. setnull(billdate)
  590. wrkgrpid = 0
  591. dscrp = ''
  592. opemp = ''
  593. flag = 0
  594. secflag = 0
  595. return 1
  596. end function
  597. public function integer c_secaudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  598. DateTime null_dt
  599. SetNull(null_dt)
  600. s_finish_tech_mx s_mx[]
  601. Long ll_arr_cnt
  602. IF arg_billid = 0 THEN
  603. rslt = 0
  604. arg_msg = "没有撤审对象"
  605. GOTO ext
  606. END IF
  607. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  608. rslt = 0
  609. GOTO ext
  610. END IF
  611. IF flag <> 1 THEN
  612. rslt = 0
  613. arg_msg = "确认状态有误,请核对"
  614. GOTO ext
  615. END IF
  616. IF secflag <> 1 THEN
  617. rslt = 0
  618. arg_msg = "只有在已仓库审核状态才可以执行仓库撤审,请核对"
  619. GOTO ext
  620. END IF
  621. UPDATE u_finish_tech
  622. SET secauditrep = '',
  623. secauditdate = :null_dt,
  624. secflag = 0
  625. WHERE billid = :arg_billid
  626. AND flag = 1
  627. AND secflag = 1;
  628. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  629. rslt = 0
  630. arg_msg = "因网络或其它原因导致完工单仓库撤审操作失败"+"~n"+sqlca.SQLErrText
  631. GOTO ext
  632. END IF
  633. FOR i = 1 TO ll_arr_cnt
  634. IF s_mx[i].relinwareid > 0 THEN
  635. IF p_del_inware(s_mx[i].relinwareid,arg_billid,s_mx[i].printid,arg_msg) = 0 THEN
  636. rslt = 0
  637. GOTO ext
  638. END IF
  639. END IF
  640. NEXT
  641. ext:
  642. IF rslt = 0 THEN
  643. ROLLBACK;
  644. ELSEIF rslt = 1 AND arg_ifcommit THEN
  645. COMMIT;
  646. END IF
  647. p_reset()
  648. RETURN rslt
  649. end function
  650. public function integer p_del_inware (long arg_inwareid, long arg_billid, long arg_printid, ref string arg_msg);Int rslt = 1
  651. Long ll_cnt,ll_flag
  652. String ls_inwarecode
  653. uo_inware uo_ware
  654. uo_ware = Create uo_inware
  655. uo_ware.commit_transaction = sqlca
  656. uo_ware.if_getid_ture = False
  657. If arg_inwareid <= 0 Then
  658. rslt = 0
  659. arg_msg = '错误的进仓单ID'
  660. Goto ext
  661. End If
  662. Select count(*)
  663. Into :ll_cnt
  664. From u_inware
  665. Where inwareid = :arg_inwareid;
  666. If sqlca.SQLCode <> 0 Then
  667. rslt = 0
  668. arg_msg = "因网络或其它原因导致查询相关进仓单失败"+"~n"+sqlca.SQLErrText
  669. Goto ext
  670. End If
  671. If ll_cnt = 0 Then
  672. rslt = 1
  673. Goto ext
  674. ElseIf ll_cnt > 0 Then
  675. Select flag
  676. Into :ll_flag
  677. From u_inware
  678. Where inwareid = :arg_inwareid;
  679. If sqlca.SQLCode <> 0 Then
  680. rslt = 0
  681. arg_msg = "因网络或其它原因导致查询相关进仓单审核标记失败"+"~n"+sqlca.SQLErrText
  682. Goto ext
  683. End If
  684. End If
  685. If ll_flag = 1 Then
  686. rslt = 0
  687. arg_msg = '第'+String(arg_printid)+'行,相关进仓单已经审核,请先撤审'
  688. Goto ext
  689. // IF uo_ware.getinfo(scid,arg_inwareid,arg_msg) = 0 THEN
  690. // rslt = 0
  691. // GOTO ext
  692. // END IF
  693. //
  694. // IF uo_ware.c_auditing(false,arg_msg) = 0 THEN
  695. // rslt = 0
  696. // GOTO ext
  697. // END IF
  698. End If
  699. If uo_ware.del(scid,arg_inwareid,arg_msg,False) = 0 Then
  700. rslt = 0
  701. Goto ext
  702. End If
  703. Update u_finish_tech_mx
  704. Set relinwareid = 0,
  705. relinwarecode = ''
  706. Where billid = :arg_billid And
  707. printid = :arg_printid;
  708. If sqlca.SQLCode <> 0 Then
  709. rslt = 0
  710. arg_msg = '更新完工单明细相关进仓单失败'
  711. Goto ext
  712. End If
  713. ext:
  714. Destroy uo_ware
  715. If rslt = 0 Then
  716. Rollback;
  717. End If
  718. Return rslt
  719. end function
  720. public function integer p_create_inware (long arg_billid, long arg_printid, long arg_storageid, string arg_location, decimal arg_qty, string arg_mxdscrp, ref string arg_msg);Long rslt = 1
  721. Long i
  722. Long ll_wrkid,mtrlid,orderid,balctype,cusid,ll_ref_inwareid
  723. String status,woodcode,pcode,mtrlcode,unit,ls_ref_inwarecode
  724. String ls_plancode,ls_mtrlcuscode
  725. Decimal ld_planprice
  726. uo_inware uo_ware
  727. uo_ware = Create uo_inware
  728. uo_ware.commit_transaction = sqlca
  729. uo_ware.if_getid_ture = False
  730. Select storageid
  731. Into :ll_wrkid
  732. From u_sc_workgroup
  733. Where wrkgrpid = :wrkgrpid;
  734. If sqlca.SQLCode <> 0 Then
  735. rslt = 0
  736. arg_msg = '查找工组对应车间失败'
  737. Goto ext
  738. End If
  739. Select u_Order_ml.mtrlid,
  740. u_Order_ml.status_mode,
  741. u_Order_ml.woodcode,
  742. u_Order_ml.pcode,
  743. u_mtrldef.mtrlcode,
  744. u_Order_ml.OrderID,
  745. u_mtrldef.unit
  746. Into :mtrlid,
  747. :status,
  748. :woodcode,
  749. :pcode,
  750. :mtrlcode,
  751. :orderid,
  752. :unit
  753. From u_finish_tech_mx LEFT Outer JOIN
  754. u_order_plan_tech LEFT Outer JOIN
  755. u_mtrldef Inner JOIN
  756. u_Order_ml ON u_mtrldef.mtrlid = u_Order_ml.mtrlid ON
  757. u_order_plan_tech.scid = u_Order_ml.scid And
  758. u_order_plan_tech.orderid = u_Order_ml.OrderID ON
  759. u_finish_tech_mx.relid = u_order_plan_tech.billid
  760. Where u_finish_tech_mx.billid = :arg_billid And
  761. u_finish_tech_mx.printid = :arg_printid;
  762. If sqlca.SQLCode <> 0 Then
  763. rslt = 0
  764. arg_msg = '查询明细信息失败,'+sqlca.SQLErrText
  765. Goto ext
  766. End If
  767. Select balctype
  768. Into :balctype
  769. From u_storage
  770. Where storageid = :arg_storageid;
  771. If sqlca.SQLCode <> 0 Then
  772. rslt = 0
  773. arg_msg = '查询仓库资料失败'
  774. Goto ext
  775. End If
  776. f_get_planprice_mtrl(mtrlid,status,woodcode,pcode,ld_planprice)
  777. If balctype = 1 Then
  778. If uof_find_cust(scid,orderid,cusid,ls_plancode,ls_mtrlcuscode,arg_msg) = 0 Then
  779. rslt = 0
  780. Goto ext
  781. End If
  782. End If
  783. If uo_ware.newbegin(scid,3,arg_msg) = 0 Then
  784. rslt = 0
  785. Goto ext
  786. End If
  787. uo_ware.indate = billdate
  788. uo_ware.inrep = opemp
  789. uo_ware.part = billcode
  790. uo_ware.dscrp = ''
  791. uo_ware.storageid = arg_storageid
  792. uo_ware.sptname = '工序完工单自动生成'
  793. uo_ware.relid = ll_wrkid
  794. If mtrlid > 0 Then
  795. If uo_ware.acceptmx(1,&
  796. mtrlid,&
  797. mtrlcode,&
  798. ls_plancode,&
  799. status,&
  800. arg_qty,&
  801. ld_planprice,&
  802. 1,&
  803. arg_mxdscrp,&
  804. arg_msg,&
  805. 0,&
  806. orderid,&
  807. 1,&
  808. woodcode,&
  809. pcode,&
  810. cusid,&
  811. unit,&
  812. 1,arg_qty,0,0,'','',0,0,ls_mtrlcuscode,arg_location,&
  813. arg_qty,&
  814. 0) = 0 Then
  815. rslt = 0
  816. Goto ext
  817. End If
  818. End If
  819. If uo_ware.Save(False,arg_msg) = 0 Then
  820. rslt = 0
  821. Goto ext
  822. End If
  823. ll_ref_inwareid = uo_ware.inwareid
  824. ls_ref_inwarecode = uo_ware.inwarecode
  825. //IF uo_ware.getinfo(scid,ll_ref_inwareid,arg_msg) = 0 THEN
  826. // rslt = 0
  827. // GOTO ext
  828. //END IF
  829. //
  830. //IF uo_ware.auditing(false,arg_msg) = 0 THEN
  831. // rslt = 0
  832. // GOTO ext
  833. //END IF
  834. Update u_finish_tech_mx
  835. Set relinwareid = :ll_ref_inwareid,
  836. relinwarecode = :ls_ref_inwarecode
  837. Where billid = :arg_billid And
  838. printid = :arg_printid;
  839. If sqlca.SQLCode <> 0 Then
  840. rslt = 0
  841. arg_msg = '更新完工单明细相关进仓单失败'
  842. Goto ext
  843. End If
  844. ext:
  845. Destroy uo_ware
  846. If rslt = 0 Then
  847. Rollback;
  848. End If
  849. Return rslt
  850. end function
  851. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 ,i
  852. Long ll_taskid
  853. Int li_flag,li_secflag
  854. String ls_taskcode
  855. s_finish_tech_mx s_mx[]
  856. Long ll_arr_cnt
  857. If arg_billid = 0 Then
  858. rslt = 0
  859. arg_msg = "没有审核对象"
  860. Goto ext
  861. End If
  862. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  863. rslt = 0
  864. GOTO ext
  865. END IF
  866. If flag <> 1 Then
  867. rslt = 0
  868. arg_msg = "完工单只有在已确认状态才可以执行仓库审核"
  869. Goto ext
  870. End If
  871. If secflag <> 0 Then
  872. rslt = 0
  873. arg_msg = "完工单只有在待仓库核状态才可以执行仓库审核"
  874. Goto ext
  875. End If
  876. Update u_finish_tech
  877. Set secauditrep = :arg_opemp,
  878. secauditdate = getdate(),
  879. secflag = 1
  880. Where billid = :arg_billid
  881. And flag = 1
  882. And secflag = 0;
  883. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  884. rslt = 0
  885. arg_msg = "因网络或其它原因导致完工单仓库审批操作失败"+"~n"+sqlca.SQLErrText
  886. Goto ext
  887. End If
  888. FOR i = 1 TO ll_arr_cnt
  889. IF s_mx[i].iflast = 1 AND s_mx[i].storageid > 0 THEN
  890. IF p_create_inware(arg_billid,s_mx[i].printid,s_mx[i].storageid,s_mx[i].location,s_mx[i].qty,s_mx[i].mxdscrp,arg_msg) = 0 THEN
  891. rslt = 0
  892. GOTO ext
  893. END IF
  894. END IF
  895. NEXT
  896. ext:
  897. If rslt = 0 Then
  898. Rollback;
  899. ElseIf rslt = 1 And arg_ifcommit Then
  900. Commit;
  901. End If
  902. p_reset()
  903. Return rslt
  904. end function
  905. on uo_finish_tech.create
  906. call super::create
  907. TriggerEvent( this, "constructor" )
  908. end on
  909. on uo_finish_tech.destroy
  910. TriggerEvent( this, "destructor" )
  911. call super::destroy
  912. end on
  913. event constructor;String str_optionvalue,arg_msg
  914. f_get_sys_option_value('138',str_optionvalue,arg_msg)
  915. uo_option_inware_mtrlcuscode = Long(str_optionvalue)
  916. f_get_sys_option_value('038',str_optionvalue,arg_msg)
  917. uo_option_taskplancode = Long(str_optionvalue)
  918. end event