uo_order_plan.sru 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605
  1. $PBExportHeader$uo_order_plan.sru
  2. forward
  3. global type uo_order_plan from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_plan from nonvisualobject
  7. end type
  8. global uo_order_plan uo_order_plan
  9. type variables
  10. Long uo_oplanid
  11. String uo_oplancode
  12. Int uo_option_order_plan_scll
  13. end variables
  14. forward prototypes
  15. public function integer p_getflag (long arg_scid, long arg_oplanid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg)
  16. public function integer audit (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer add_dscrp (long arg_scid, long arg_oplanid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer updatebegin (long arg_scid, long arg_oplanid, ref string arg_msg)
  19. public function integer del (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer audit_2 (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer caudit (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer caudit_2 (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer getinfo (long arg_scid, long arg_oplanid, ref s_order_planmx arg_ref_planmx[], ref long arg_arr_cnt, ref string arg_msg)
  24. public function integer save (s_order_plan arg_oplan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer uof_add_scllmx (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer getinfo_scll (long arg_scid, long arg_oplanid, ref s_order_planmx_scll arg_ref_planmx_scll[], ref long arg_arr_cnt, ref string arg_msg)
  27. public function integer addmxcmpl (long arg_scid, long arg_planid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer tryfinish (long arg_scid, long arg_planid, ref string arg_msg, boolean arg_ifcommit)
  29. end prototypes
  30. public function integer p_getflag (long arg_scid, long arg_oplanid, ref integer arg_flag, ref integer arg_secflag, ref string arg_msg);Int rslt = 1
  31. SELECT flag,secflag
  32. INTO :arg_flag,:arg_secflag
  33. FROM u_order_plan
  34. WHERE oplanid = :arg_oplanid
  35. AND scid = :arg_scid;
  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 audit (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  45. Int li_flag,li_secflag
  46. DateTime ldt_oplandate
  47. IF uo_option_order_plan_scll = -1000 THEN
  48. arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
  49. rslt = 0
  50. GOTO ext
  51. END IF
  52. uo_order_ml uo_order
  53. uo_order = CREATE uo_order_ml
  54. IF arg_oplanid <= 0 THEN
  55. rslt = 0
  56. ARG_MSG = '错误单据唯一码'
  57. GOTO ext
  58. END IF
  59. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  60. rslt = 0
  61. GOTO ext
  62. END IF
  63. IF li_flag <> 0 THEN
  64. rslt = 0
  65. ARG_MSG = '单据不是在待初审状态,不可以再审'
  66. GOTO ext
  67. END IF
  68. SELECT oplandate INTO :ldt_oplandate
  69. FROM u_order_plan
  70. WHERE oplanid = :arg_oplanid
  71. AND scid = :arg_scid;
  72. IF sqlca.SQLCode <> 0 THEN
  73. ARG_MSG = '查询是派工日期失败,'+sqlca.SQLErrText
  74. rslt = 0
  75. GOTO ext
  76. END IF
  77. //更新审核标记
  78. UPDATE u_order_plan
  79. SET auditingrep = :arg_opemp,
  80. auditingdate = getdate(),
  81. flag = 1
  82. WHERE oplanid = :arg_oplanid
  83. AND scid = :arg_scid
  84. AND flag = 0;
  85. IF sqlca.SQLCode <> 0 THEN
  86. rslt = 0
  87. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  88. GOTO ext
  89. ELSEIF sqlca.SQLNRows = 0 THEN
  90. rslt = 0
  91. ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  92. GOTO ext
  93. END IF
  94. s_order_planmx s_plan_mx[]
  95. Long ll_arr_cnt,ll_i
  96. IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
  97. rslt = 0
  98. GOTO ext
  99. END IF
  100. FOR ll_i = 1 TO ll_arr_cnt
  101. IF s_plan_mx[ll_i].orderid > 0 THEN
  102. IF uo_order.addmxcmpl_planqty_wkp(arg_scid,&
  103. s_plan_mx[ll_i].orderid,&
  104. s_plan_mx[ll_i].wkpname,&
  105. s_plan_mx[ll_i].wrkgrpid,&
  106. s_plan_mx[ll_i].owrkgrpid,&
  107. s_plan_mx[ll_i].qty,&
  108. ldt_oplandate,&
  109. s_plan_mx[ll_i].requiredate,&
  110. ARG_MSG,FALSE) = 0 THEN
  111. rslt = 0
  112. GOTO ext
  113. END IF
  114. END IF
  115. NEXT
  116. IF uo_option_order_plan_scll = 1 THEN
  117. IF uof_add_scllmx(arg_scid,arg_oplanid,ARG_MSG,FALSE) = 0 THEN
  118. rslt = 0
  119. GOTO ext
  120. END IF
  121. END IF
  122. ext:
  123. IF rslt = 0 THEN
  124. ROLLBACK;
  125. ELSEIF rslt = 1 AND arg_ifcommit THEN
  126. COMMIT;
  127. END IF
  128. DESTROY uo_order
  129. RETURN rslt
  130. end function
  131. public function integer add_dscrp (long arg_scid, long arg_oplanid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  132. Int li_flag,li_secflag
  133. IF arg_newdescppart = '' THEN
  134. rslt = 0
  135. arG_MSG = "要添加内容为空,操作取消"
  136. GOTO ext
  137. END IF
  138. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arG_MSG) = 0 THEN
  139. rslt = 0
  140. GOTO ext
  141. END IF
  142. IF li_flag = 0 THEN
  143. rslt = 0
  144. arG_MSG = "待审核状态下不可用"
  145. GOTO ext
  146. END IF
  147. UPDATE u_order_plan
  148. SET DSCRP = DSCRP+' '+:arg_newdescppart
  149. WHERE u_order_plan.oplanid = :arg_oplanid
  150. AND u_order_plan.scid = :arg_scid;
  151. IF SQLCA.SQLCode <> 0 THEN
  152. rslt = 0
  153. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  154. GOTO ext
  155. END IF
  156. ext:
  157. IF rslt = 0 THEN
  158. ROLLBACK;
  159. ELSEIF rslt = 1 AND arg_ifcommit THEN
  160. COMMIT;
  161. END IF
  162. Return (rslt)
  163. end function
  164. public function integer updatebegin (long arg_scid, long arg_oplanid, ref string arg_msg);Int rslt = 1
  165. Int li_flag,li_secflag
  166. Long cnt
  167. IF arg_oplanid <= 0 THEN
  168. rslt = 0
  169. arg_msg = '错误单据唯一码'
  170. GOTO ext
  171. END IF
  172. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
  173. rslt = 0
  174. GOTO ext
  175. END IF
  176. IF li_flag = 1 THEN
  177. rslt = 0
  178. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  179. GOTO ext
  180. END IF
  181. ext:
  182. RETURN rslt
  183. end function
  184. public function integer del (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  185. Int li_flag,li_secflag
  186. IF arg_oplanid <= 0 THEN
  187. rslt = 0
  188. arg_msg = '错误单据唯一码'
  189. GOTO ext
  190. END IF
  191. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
  192. rslt = 0
  193. GOTO ext
  194. END IF
  195. IF li_flag <> 0 THEN
  196. rslt = 0
  197. arg_msg = '单据不是在待审状态,不可以删除'
  198. GOTO ext
  199. END IF
  200. DELETE FROM u_order_planmx
  201. WHERE oplanid = :arg_oplanid
  202. AND scid = :arg_scid;
  203. IF sqlca.SQLCode <> 0 THEN
  204. rslt = 0
  205. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  206. GOTO ext
  207. END IF
  208. DELETE FROM u_order_planmx_scll
  209. WHERE oplanid = :arg_oplanid
  210. AND scid = :arg_scid;
  211. IF sqlca.SQLCode <> 0 THEN
  212. rslt = 0
  213. arg_msg = "删除单据领料明细操作失败"+"~n"+sqlca.SQLErrText
  214. GOTO ext
  215. END IF
  216. DELETE FROM u_order_plan
  217. WHERE oplanid = :arg_oplanid
  218. AND scid = :arg_scid
  219. AND flag = 0;
  220. IF sqlca.SQLCode <> 0 THEN
  221. rslt = 0
  222. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  223. GOTO ext
  224. END IF
  225. ext:
  226. IF rslt = 0 THEN
  227. ROLLBACK;
  228. ELSEIF rslt = 1 AND arg_ifcommit THEN
  229. COMMIT;
  230. END IF
  231. RETURN rslt
  232. end function
  233. public function integer audit_2 (long arg_scid, long arg_oplanid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  234. Int li_flag,li_secflag
  235. String ls_oplancode,ls_assign_emp
  236. DateTime ldt_oplandate
  237. Long ll_workgroupid
  238. IF uo_option_order_plan_scll = -1000 THEN
  239. arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
  240. rslt = 0
  241. GOTO ext
  242. END IF
  243. IF arg_oplanid <= 0 THEN
  244. rslt = 0
  245. arg_msg = '错误单据唯一码'
  246. GOTO ext
  247. END IF
  248. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
  249. rslt = 0
  250. GOTO ext
  251. END IF
  252. IF li_flag = 0 THEN
  253. rslt = 0
  254. arg_msg = '单据不是在初审状态,不可以再终审'
  255. GOTO ext
  256. END IF
  257. IF li_secflag = 1 THEN
  258. rslt = 0
  259. arg_msg = '单据已终审,不可以再终审'
  260. GOTO ext
  261. END IF
  262. SELECT oplancode,
  263. assign_emp,
  264. oplandate,
  265. workgroupid
  266. INTO :ls_oplancode,
  267. :ls_assign_emp,
  268. :ldt_oplandate,
  269. :ll_workgroupid
  270. FROM u_order_plan
  271. WHERE scid = :arg_scid
  272. AND oplanid = :arg_oplanid;
  273. IF sqlca.SQLCode <> 0 THEN
  274. arg_msg = '查询单据资料失败,'+sqlca.SQLErrText
  275. rslt = 0
  276. GOTO ext
  277. END IF
  278. //更新审核标记
  279. UPDATE u_order_plan
  280. SET secauditingrep = :arg_opemp,
  281. secauditingdate = getdate(),
  282. secflag = 1
  283. WHERE oplanid = :arg_oplanid
  284. AND scid = :arg_scid
  285. AND flag = 1
  286. AND secflag = 0;
  287. IF sqlca.SQLCode <> 0 THEN
  288. rslt = 0
  289. arg_msg = "因网络或其它原因导致单据终审操作失败"+"~n"+sqlca.SQLErrText
  290. GOTO ext
  291. ELSEIF sqlca.SQLNRows = 0 THEN
  292. rslt = 0
  293. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  294. GOTO ext
  295. END IF
  296. s_order_planmx_scll s_plan_mx_scll[]
  297. Long ll_arr_cnt,k,j,ch,ll_i
  298. Long ll_storageid_arr[]
  299. Boolean lb_f = FALSE
  300. IF uo_option_order_plan_scll = 1 THEN
  301. IF getinfo_scll(arg_scid,arg_oplanid,s_plan_mx_scll,ll_arr_cnt,arg_msg) = 0 THEN
  302. rslt = 0
  303. GOTO ext
  304. END IF
  305. IF ll_arr_cnt > 0 THEN
  306. FOR k = 1 TO ll_arr_cnt
  307. FOR j = 1 TO UpperBound(ll_storageid_arr)
  308. IF ll_storageid_arr[j] = s_plan_mx_scll[k].storageid THEN lb_f = TRUE
  309. NEXT
  310. IF lb_f = FALSE THEN
  311. ch++
  312. ll_storageid_arr[ch] = s_plan_mx_scll[k].storageid
  313. END IF
  314. lb_f = FALSE
  315. NEXT
  316. FOR ll_i = 1 TO UpperBound(ll_storageid_arr)
  317. uo_outware_scll uo_scll
  318. uo_scll = CREATE uo_outware_scll
  319. uo_scll.commit_transaction = sqlca
  320. uo_scll.if_getid_ture = FALSE
  321. IF uo_scll.newbegin(arg_scid,3,arg_msg) = 0 THEN
  322. arg_msg = '开始建立领料单失败,'+arg_msg
  323. rslt = 0
  324. END IF
  325. uo_scll.outdate = ldt_oplandate
  326. uo_scll.outrep = ls_assign_emp
  327. uo_scll.part = ls_oplancode
  328. uo_scll.dscrp = ''
  329. uo_scll.cusname = ''
  330. uo_scll.storageid = ll_storageid_arr[ll_i]
  331. uo_scll.relid = ll_workgroupid
  332. uo_scll.relint_1 = 0
  333. uo_scll.ifauto = 1
  334. Long chc
  335. FOR j = 1 TO ll_arr_cnt
  336. IF ll_storageid_arr[ll_i] = s_plan_mx_scll[j].storageid THEN
  337. Long ll_mtrlwareid
  338. Decimal ld_cost
  339. Long ll_mtrlid
  340. SELECT top 1 mtrlwareid,
  341. cost
  342. INTO :ll_mtrlwareid,
  343. :ld_cost
  344. FROM u_mtrlware
  345. WHERE storageid = :s_plan_mx_scll[j].storageid
  346. AND mtrlid = :s_plan_mx_scll[j].mtrlid
  347. AND status = :s_plan_mx_scll[j].status
  348. AND woodcode = :s_plan_mx_scll[j].woodcode
  349. AND pcode = :s_plan_mx_scll[j].pcode
  350. Order By noallocqty Desc;
  351. IF sqlca.SQLCode <> 0 THEN
  352. arg_msg = '查询物料:'+s_plan_mx_scll[j].mtrlcode+',库存资料失败,'+sqlca.SQLErrText
  353. rslt = 0
  354. GOTO ext
  355. END IF
  356. SELECT mtrlid INTO :ll_mtrlid
  357. FROM u_order_ml
  358. WHERE scid = :arg_scid
  359. AND orderid = :s_plan_mx_scll[j].orderid;
  360. IF sqlca.SQLCode <> 0 THEN
  361. arg_msg = '查询生产计划物料资料失败,'+sqlca.SQLErrText
  362. rslt = 0
  363. GOTO ext
  364. END IF
  365. chc++
  366. IF uo_scll.acceptmx(ll_mtrlwareid,s_plan_mx_scll[j].qty,&
  367. ld_cost,1,'',chc,arg_msg,&
  368. 1,s_plan_mx_scll[j].orderid,&
  369. ll_mtrlid,0,'',&
  370. s_plan_mx_scll[j].qty,0,'',0,0,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  371. rslt = 0
  372. GOTO ext
  373. END IF
  374. END IF
  375. NEXT
  376. IF uo_scll.Save(FALSE,arg_msg) = 0 THEN
  377. rslt = 0
  378. GOTO ext
  379. END IF
  380. IF uo_scll.getinfo(arg_scid,uo_scll.outwareid,arg_msg) = 0 THEN
  381. rslt = 0
  382. GOTO ext
  383. END IF
  384. IF uo_scll.priceaudit(FALSE,arg_msg) = 0 THEN
  385. rslt = 0
  386. GOTO ext
  387. END IF
  388. UPDATE u_order_planmx_scll
  389. SET outwareid = :uo_scll.outwareid,
  390. outwarecode = :uo_scll.outwarecode
  391. WHERE scid = :arg_scid
  392. AND oplanid = :arg_oplanid
  393. AND storageid = :ll_storageid_arr[ll_i];
  394. IF sqlca.SQLCode <> 0 THEN
  395. arg_msg = '更新领料明细领料单号失败,'+sqlca.SQLErrText
  396. rslt = 0
  397. GOTO ext
  398. END IF
  399. DESTROY uo_scll
  400. NEXT
  401. END IF
  402. END IF
  403. ext:
  404. IF rslt = 0 THEN
  405. ROLLBACK;
  406. ELSEIF rslt = 1 AND arg_ifcommit THEN
  407. COMMIT;
  408. END IF
  409. RETURN rslt
  410. end function
  411. public function integer caudit (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  412. Int li_flag,li_secflag
  413. Long cnt
  414. DateTime null_dt
  415. SetNull(null_dt)
  416. uo_order_ml uo_order
  417. uo_order = Create uo_order_ml
  418. IF arg_oplanid <= 0 THEN
  419. rslt = 0
  420. ARG_MSG = '错误单据唯一码'
  421. GOTO ext
  422. END IF
  423. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  424. rslt = 0
  425. GOTO ext
  426. END IF
  427. IF li_secflag = 1 THEN
  428. rslt = 0
  429. ARG_MSG = '单据不是在待终审状态,不可以撤审'
  430. GOTO ext
  431. END IF
  432. IF li_flag = 0 THEN
  433. rslt = 0
  434. ARG_MSG = '单据未初审,不可以撤审'
  435. GOTO ext
  436. END IF
  437. cnt = 0
  438. SELECT count(*)
  439. INTO :cnt
  440. FROM u_orderworkgroup_nummx
  441. WHERE planscid = :arg_scid
  442. And planid = :arg_oplanid;
  443. IF sqlca.SQLCode <> 0 THEN
  444. rslt = 0
  445. ARG_MSG = '查询工组派工单是否有相关工组完工单/工组交接单失败,'+sqlca.SQLErrText
  446. GOTO ext
  447. END IF
  448. IF cnt > 0 THEN
  449. rslt = 0
  450. ARG_MSG = '工组派工单已有相关工组完工单/工组交接单,不能撤审'
  451. GOTO ext
  452. END IF
  453. //更新审核标记
  454. UPDATE u_order_plan
  455. SET auditingrep = '',
  456. auditingdate = :null_dt,
  457. flag = 0
  458. WHERE oplanid = :arg_oplanid
  459. AND scid = :arg_scid
  460. And flag = 1;
  461. IF sqlca.SQLCode <> 0 THEN
  462. rslt = 0
  463. ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  464. GOTO ext
  465. ELSEIF sqlca.SQLNRows = 0 THEN
  466. rslt = 0
  467. ARG_MSG = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  468. GOTO ext
  469. END IF
  470. s_order_planmx s_plan_mx[]
  471. Long ll_arr_cnt,ll_i
  472. IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
  473. rslt = 0
  474. GOTO ext
  475. END IF
  476. FOR ll_i = 1 To ll_arr_cnt
  477. IF s_plan_mx[ll_i].orderid > 0 THEN
  478. IF uo_order.addmxcmpl_planqty_wkp(arg_scid,&
  479. s_plan_mx[ll_i].orderid,&
  480. s_plan_mx[ll_i].wkpname,&
  481. s_plan_mx[ll_i].wrkgrpid,&
  482. s_plan_mx[ll_i].owrkgrpid,&
  483. 0 - s_plan_mx[ll_i].qty,null_dt,null_dt,&
  484. ARG_MSG,False) = 0 THEN
  485. rslt = 0
  486. GOTO ext
  487. END IF
  488. END IF
  489. NEXT
  490. ext:
  491. IF rslt = 0 THEN
  492. ROLLBACK;
  493. ELSEIF rslt = 1 And arg_ifcommit THEN
  494. COMMIT;
  495. END IF
  496. RETURN rslt
  497. end function
  498. public function integer caudit_2 (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  499. Int li_flag,li_secflag
  500. DateTime null_dt
  501. SetNull(null_dt)
  502. IF uo_option_order_plan_scll = -1000 THEN
  503. arg_msg = '选项:[211]工组派工单使用自动领料功能,读取初始默认值失败,操作取消!'
  504. rslt = 0
  505. GOTO ext
  506. END IF
  507. IF arg_oplanid <= 0 THEN
  508. rslt = 0
  509. arg_msg = '错误单据唯一码'
  510. GOTO ext
  511. END IF
  512. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,arg_msg) = 0 THEN
  513. rslt = 0
  514. GOTO ext
  515. END IF
  516. IF li_secflag = 0 THEN
  517. rslt = 0
  518. arg_msg = '单据不是在已终审状态,不可以撤审'
  519. GOTO ext
  520. END IF
  521. IF li_flag = 0 THEN
  522. rslt = 0
  523. arg_msg = '单据不是在已终审状态,不可以撤审'
  524. GOTO ext
  525. END IF
  526. //更新审核标记
  527. UPDATE u_order_plan
  528. SET secauditingrep = '',
  529. secauditingdate = :null_dt,
  530. secflag = 0
  531. WHERE oplanid = :arg_oplanid
  532. AND scid = :arg_scid
  533. AND secflag = 1;
  534. IF sqlca.SQLCode <> 0 THEN
  535. rslt = 0
  536. arg_msg = "因网络或其它原因导致单据终审撤审操作失败"+"~n"+sqlca.SQLErrText
  537. GOTO ext
  538. ELSEIF sqlca.SQLNRows = 0 THEN
  539. rslt = 0
  540. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  541. GOTO ext
  542. END IF
  543. Long ll_outwareid_arr[]
  544. String ls_outwarecode_arr[]
  545. Long ll_arr_cnt = 1,ll_i
  546. IF uo_option_order_plan_scll = 1 THEN
  547. DECLARE cur_outwareid CURSOR FOR
  548. SELECT distinct u_order_planmx_scll.outwareid,
  549. u_order_planmx_scll.outwarecode
  550. FROM u_order_planmx_scll
  551. WHERE u_order_planmx_scll.scid = :arg_scid
  552. AND u_order_planmx_scll.oplanid = :arg_oplanid;
  553. OPEN cur_outwareid;
  554. FETCH cur_outwareid INTO :ll_outwareid_arr[ll_arr_cnt],:ls_outwarecode_arr[ll_arr_cnt];
  555. DO WHILE sqlca.SQLCode = 0
  556. ll_arr_cnt++
  557. FETCH cur_outwareid INTO :ll_outwareid_arr[ll_arr_cnt],:ls_outwarecode_arr[ll_arr_cnt];
  558. LOOP
  559. CLOSE cur_outwareid;
  560. ll_arr_cnt = ll_arr_cnt - 1
  561. IF ll_arr_cnt > 0 THEN
  562. uo_outware_scll uo_scll
  563. uo_scll = CREATE uo_outware_scll
  564. uo_scll.commit_transaction = sqlca
  565. FOR ll_i = 1 TO ll_arr_cnt
  566. IF uo_scll.getinfo(arg_scid,ll_outwareid_arr[ll_i],arg_msg) = 0 THEN
  567. rslt = 0
  568. GOTO ext
  569. END IF
  570. IF uo_scll.c_priceaudit(FALSE,arg_msg) = 0 THEN
  571. rslt = 0
  572. GOTO ext
  573. END IF
  574. IF uo_scll.del(arg_scid,ll_outwareid_arr[ll_i],0,arg_msg,FALSE) = 0 THEN
  575. arg_msg = '领料单:'+ls_outwarecode_arr[ll_i]+',删除失败,'+arg_msg
  576. rslt = 0
  577. GOTO ext
  578. END IF
  579. NEXT
  580. UPDATE u_order_planmx_scll
  581. SET outwareid = 0,
  582. outwarecode = ''
  583. WHERE scid = :arg_scid
  584. AND oplanid = :arg_oplanid;
  585. IF sqlca.SQLCode <> 0 THEN
  586. arg_msg = '清除领料明细领料单号失败,'+sqlca.SQLErrText
  587. rslt = 0
  588. GOTO ext
  589. END IF
  590. END IF
  591. END IF
  592. ext:
  593. IF rslt = 0 THEN
  594. ROLLBACK;
  595. ELSEIF rslt = 1 AND arg_ifcommit THEN
  596. COMMIT;
  597. END IF
  598. DESTROY uo_scll
  599. RETURN rslt
  600. end function
  601. public function integer getinfo (long arg_scid, long arg_oplanid, ref s_order_planmx arg_ref_planmx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  602. Long i = 1,no_mxcheck = 0
  603. IF arg_oplanid <= 0 THEN
  604. rslt = 0
  605. arg_msg = '错误单据唯一码'
  606. GOTO ext
  607. END IF
  608. //用游标读取明细
  609. DECLARE cur_planmx CURSOR FOR
  610. SELECT u_order_planmx.orderid,
  611. u_order_planmx.ordercode,
  612. u_order_planmx.mtrlid,
  613. u_order_planmx.status,
  614. u_order_planmx.woodcode,
  615. u_order_planmx.pcode,
  616. u_order_planmx.Qty,
  617. u_order_planmx.requiredate,
  618. u_mtrldef.mtrlcode,
  619. u_order_planmx.wrkGrpid,
  620. u_order_planmx.owrkGrpid,
  621. u_order_planmx.wkpname
  622. FROM u_order_planmx,u_mtrldef
  623. WHERE u_order_planmx.oplanid = :arg_oplanid
  624. AND u_order_planmx.scid = :arg_scid
  625. AND u_order_planmx.mtrlid = u_mtrldef.mtrlid
  626. Order By u_order_planmx.printid;
  627. OPEN cur_planmx;
  628. FETCH cur_planmx INTO :arg_ref_planmx[i].orderid,
  629. :arg_ref_planmx[i].ordercode,:arg_ref_planmx[i].mtrlid,
  630. :arg_ref_planmx[i].status,:arg_ref_planmx[i].woodcode,
  631. :arg_ref_planmx[i].pcode,:arg_ref_planmx[i].Qty,
  632. :arg_ref_planmx[i].requiredate,:arg_ref_planmx[i].mtrlcode,
  633. :arg_ref_planmx[i].wrkGrpid,:arg_ref_planmx[i].owrkGrpid,
  634. :arg_ref_planmx[i].wkpname;
  635. DO WHILE sqlca.SQLCode = 0
  636. i++
  637. FETCH cur_planmx INTO :arg_ref_planmx[i].orderid,:arg_ref_planmx[i].ordercode,
  638. :arg_ref_planmx[i].mtrlid,
  639. :arg_ref_planmx[i].status,:arg_ref_planmx[i].woodcode,
  640. :arg_ref_planmx[i].pcode,:arg_ref_planmx[i].Qty,
  641. :arg_ref_planmx[i].requiredate,:arg_ref_planmx[i].mtrlcode,
  642. :arg_ref_planmx[i].wrkGrpid,:arg_ref_planmx[i].owrkGrpid,
  643. :arg_ref_planmx[i].wkpname;
  644. LOOP
  645. CLOSE cur_planmx;
  646. //检验明细是否读入完整
  647. SELECT count(*) INTO :no_mxcheck
  648. FROM u_order_planmx
  649. WHERE scid = :arg_scid
  650. AND oplanid = :arg_oplanid;
  651. IF sqlca.SQLCode <> 0 THEN
  652. rslt = 0
  653. arg_msg = "查询操作失败,单据明细数量"
  654. GOTO ext
  655. END IF
  656. IF i <> (no_mxcheck + 1) THEN
  657. rslt = 0
  658. arg_msg = "查询操作失败,单据明细"
  659. GOTO ext
  660. END IF
  661. arg_arr_cnt = i - 1
  662. ext:
  663. RETURN rslt
  664. end function
  665. public function integer save (s_order_plan arg_oplan, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  666. Long cnt = 0
  667. DateTime server_dt
  668. Long ll_oplanid,it_mxbt,i
  669. String ls_sccode,ls_oplancode
  670. Long ll_wrkGrpid,ll_wrkGrpid_order
  671. IF IsNull(arg_oplan.scid) THEN arg_oplan.scid = 0
  672. IF IsNull(arg_oplan.oplanid) THEN arg_oplan.oplanid = 0
  673. IF IsNull(arg_oplan.assign_emp) THEN arg_oplan.assign_emp = ''
  674. IF IsNull(arg_oplan.relcode) THEN arg_oplan.relcode = ''
  675. IF IsNull(arg_oplan.dscrp) THEN arg_oplan.dscrp = ''
  676. IF IsNull(arg_oplan.workgroupid) THEN arg_oplan.workgroupid = 0
  677. IF IsNull(arg_oplan.wrkgrpid) THEN arg_oplan.wrkgrpid = 0
  678. IF arg_oplan.wrkgrpid = 0 THEN
  679. arg_msg = '请选择工组'
  680. rslt = 0
  681. GOTO ext
  682. END IF
  683. cnt = 0
  684. SELECT count(*) INTO :cnt
  685. FROM u_sc_workgroup
  686. Where wrkgrpid = :arg_oplan.wrkgrpid;
  687. IF sqlca.SQLCode <> 0 THEN
  688. arg_msg = '查询工组资料失败,'+sqlca.SQLErrText
  689. rslt = 0
  690. GOTO ext
  691. END IF
  692. IF cnt <> 1 THEN
  693. arg_msg = '工组资料不存在或重复,请检查'
  694. rslt = 0
  695. GOTO ext
  696. END IF
  697. IF arg_oplan.workgroupid > 0 THEN
  698. SELECT u_workgroup.wrkGrpid INTO :ll_wrkGrpid
  699. FROM u_workgroup
  700. Where u_workgroup.workgroupid = :arg_oplan.workgroupid;
  701. IF sqlca.SQLCode <> 0 THEN
  702. arg_msg = '查询单据工作中心所属工组资料失败,'+sqlca.SQLErrText
  703. rslt = 0
  704. GOTO ext
  705. END IF
  706. IF ll_wrkGrpid <> arg_oplan.wrkgrpid THEN
  707. arg_msg = '工作中心所属工组资料与单据工组资料不相符,请检查'
  708. rslt = 0
  709. GOTO ext
  710. END IF
  711. END IF
  712. IF arg_oplan.assign_emp = '' THEN
  713. arg_msg = '请输入经手人'
  714. rslt = 0
  715. GOTO ext
  716. END IF
  717. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  718. IF sqlca.SQLCode <> 0 THEN
  719. rslt = 0
  720. arg_msg = "查询操作失败,日期 "
  721. GOTO ext
  722. END IF
  723. it_mxbt = UpperBound(arg_oplan.arg_s_planmx)
  724. IF it_mxbt <= 0 THEN
  725. rslt = 0
  726. arg_msg = "没有正确明细内容"
  727. GOTO ext
  728. END IF
  729. FOR i = 1 TO it_mxbt
  730. arg_oplan.arg_s_planmx[i].wrkGrpid = arg_oplan.wrkgrpid
  731. String ls_ordercode
  732. String ls_status,ls_woodcode,ls_pcode
  733. Long ll_mtrlid
  734. SELECT ordercode,status_mode,woodcode,pcode,mtrlid
  735. INTO :ls_ordercode,:ls_status,:ls_woodcode,:ls_pcode,:ll_mtrlid
  736. FROM u_order_ml
  737. WHERE orderid = :arg_oplan.arg_s_planmx[i].orderid
  738. AND scid = :arg_oplan.scid;
  739. IF sqlca.SQLCode <> 0 THEN
  740. arg_msg = '行:'+String(arg_oplan.arg_s_planmx[i].printid)+',物料:'+arg_oplan.arg_s_planmx[i].mtrlcode+',查询计划编号失败'
  741. rslt = 0
  742. GOTO ext
  743. END IF
  744. arg_oplan.arg_s_planmx[i].ordercode = ls_ordercode
  745. arg_oplan.arg_s_planmx[i].status = ls_status
  746. arg_oplan.arg_s_planmx[i].woodcode = ls_woodcode
  747. arg_oplan.arg_s_planmx[i].pcode = ls_pcode
  748. arg_oplan.arg_s_planmx[i].mtrlid = ll_mtrlid
  749. NEXT
  750. IF arg_oplan.oplanid = 0 THEN
  751. ll_oplanid = f_sys_scidentity(0,"u_order_plan","oplanid",arg_msg,TRUE,id_sqlca)
  752. IF ll_oplanid <= 0 THEN
  753. rslt = 0
  754. GOTO ext
  755. END IF
  756. IF f_get_sccode(arg_oplan.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  757. rslt = 0
  758. GOTO ext
  759. END IF
  760. ls_oplancode = getid(arg_oplan.scid,ls_sccode + 'OP',Date(server_dt),FALSE,sqlca)
  761. IF ls_oplancode = "err" THEN
  762. rslt = 0
  763. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  764. GOTO ext
  765. END IF
  766. INSERT INTO u_order_plan
  767. (scid,
  768. oplanid,
  769. oplancode,
  770. oplandate,
  771. assign_emp,
  772. opdate,
  773. opemp,
  774. flag,
  775. relcode,
  776. dscrp,
  777. workgroupid,
  778. wrkgrpid)
  779. VALUES (
  780. :arg_oplan.scid,
  781. :ll_oplanid,
  782. :ls_oplancode,
  783. :arg_oplan.oplandate,
  784. :arg_oplan.assign_emp,
  785. getdate(),
  786. :arg_opemp,
  787. 0,
  788. :arg_oplan.relcode,
  789. :arg_oplan.dscrp,
  790. :arg_oplan.workgroupid,
  791. :arg_oplan.wrkgrpid) ;
  792. IF sqlca.SQLCode <> 0 THEN
  793. rslt = 0
  794. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  795. GOTO ext
  796. END IF
  797. FOR i = 1 TO it_mxbt
  798. INSERT INTO u_order_planmx
  799. (scid,
  800. oplanid,
  801. printid,
  802. orderid,
  803. mtrlid,
  804. status,
  805. woodcode,
  806. pcode,
  807. Qty,
  808. mxdscrp,
  809. ordercode,
  810. requiredate,
  811. wrkGrpid,
  812. owrkGrpid,
  813. wkpname,
  814. uprate,
  815. fzqty,
  816. fzrate)
  817. VALUES (
  818. :arg_oplan.scid,
  819. :ll_oplanid,
  820. :arg_oplan.arg_s_planmx[i].printid,
  821. :arg_oplan.arg_s_planmx[i].orderid,
  822. :arg_oplan.arg_s_planmx[i].mtrlid,
  823. :arg_oplan.arg_s_planmx[i].status,
  824. :arg_oplan.arg_s_planmx[i].woodcode,
  825. :arg_oplan.arg_s_planmx[i].pcode,
  826. :arg_oplan.arg_s_planmx[i].qty,
  827. :arg_oplan.arg_s_planmx[i].mxdscrp,
  828. :arg_oplan.arg_s_planmx[i].ordercode,
  829. :arg_oplan.arg_s_planmx[i].requiredate,
  830. :arg_oplan.arg_s_planmx[i].wrkGrpid,
  831. :arg_oplan.arg_s_planmx[i].owrkGrpid,
  832. :arg_oplan.arg_s_planmx[i].wkpname,
  833. :arg_oplan.arg_s_planmx[i].uprate,
  834. :arg_oplan.arg_s_planmx[i].fzqty,
  835. :arg_oplan.arg_s_planmx[i].fzrate);
  836. IF sqlca.SQLCode <> 0 THEN
  837. rslt = 0
  838. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  839. GOTO ext
  840. END IF
  841. NEXT
  842. uo_oplanid = ll_oplanid
  843. uo_oplancode = ls_oplancode
  844. ELSE
  845. UPDATE u_order_plan
  846. SET oplandate = :arg_oplan.oplandate,
  847. assign_emp = :arg_oplan.assign_emp,
  848. moddate = getdate(),
  849. modemp = :arg_opemp,
  850. relcode = :arg_oplan.relcode,
  851. dscrp = :arg_oplan.dscrp,
  852. workgroupid = :arg_oplan.workgroupid,
  853. wrkgrpid = :arg_oplan.wrkgrpid
  854. WHERE oplanid = :arg_oplan.oplanid
  855. AND scid = :arg_oplan.scid
  856. AND flag = 0;
  857. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  858. rslt = 0
  859. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  860. GOTO ext
  861. END IF
  862. DELETE FROM u_order_planmx
  863. WHERE oplanid = :arg_oplan.oplanid
  864. AND scid = :arg_oplan.scid;
  865. IF sqlca.SQLCode <> 0 THEN
  866. rslt = 0
  867. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  868. GOTO ext
  869. END IF
  870. FOR i = 1 TO it_mxbt
  871. INSERT INTO u_order_planmx
  872. (scid,
  873. oplanid,
  874. printid,
  875. orderid,
  876. mtrlid,
  877. status,
  878. woodcode,
  879. pcode,
  880. Qty,
  881. mxdscrp,
  882. ordercode,
  883. requiredate,
  884. wrkGrpid,
  885. owrkGrpid,
  886. wkpname,
  887. uprate,
  888. fzqty,
  889. fzrate)
  890. VALUES (
  891. :arg_oplan.scid,
  892. :arg_oplan.oplanid,
  893. :arg_oplan.arg_s_planmx[i].printid,
  894. :arg_oplan.arg_s_planmx[i].orderid,
  895. :arg_oplan.arg_s_planmx[i].mtrlid,
  896. :arg_oplan.arg_s_planmx[i].status,
  897. :arg_oplan.arg_s_planmx[i].woodcode,
  898. :arg_oplan.arg_s_planmx[i].pcode,
  899. :arg_oplan.arg_s_planmx[i].qty,
  900. :arg_oplan.arg_s_planmx[i].mxdscrp,
  901. :arg_oplan.arg_s_planmx[i].ordercode,
  902. :arg_oplan.arg_s_planmx[i].requiredate,
  903. :arg_oplan.arg_s_planmx[i].wrkGrpid,
  904. :arg_oplan.arg_s_planmx[i].owrkGrpid,
  905. :arg_oplan.arg_s_planmx[i].wkpname,
  906. :arg_oplan.arg_s_planmx[i].uprate,
  907. :arg_oplan.arg_s_planmx[i].fzqty,
  908. :arg_oplan.arg_s_planmx[i].fzrate);
  909. IF sqlca.SQLCode <> 0 THEN
  910. rslt = 0
  911. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  912. GOTO ext
  913. END IF
  914. NEXT
  915. uo_oplanid = arg_oplan.oplanid
  916. END IF
  917. ext:
  918. IF rslt = 0 THEN
  919. ROLLBACK;
  920. ELSEIF arg_ifcommit AND rslt = 1 THEN
  921. COMMIT;
  922. END IF
  923. RETURN rslt
  924. end function
  925. public function integer uof_add_scllmx (long arg_scid, long arg_oplanid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  926. Int li_flag,li_secflag
  927. Long ll_wrkGrpid
  928. uo_cp_auto_scll uo_mrp_scll
  929. uo_mrp_scll = CREATE uo_cp_auto_scll
  930. IF arg_oplanid <= 0 THEN
  931. rslt = 0
  932. ARG_MSG = '错误单据唯一码'
  933. GOTO ext
  934. END IF
  935. IF p_getflag(arg_scid,arg_oplanid,li_flag,li_secflag,ARG_MSG) = 0 THEN
  936. rslt = 0
  937. GOTO ext
  938. END IF
  939. IF li_flag <> 1 THEN
  940. rslt = 0
  941. ARG_MSG = '单据不是在初审状态,不可以计算领料明细'
  942. GOTO ext
  943. END IF
  944. IF li_secflag = 1 THEN
  945. rslt = 0
  946. ARG_MSG = '单据已终审状态,不可以计算领料明细'
  947. GOTO ext
  948. END IF
  949. SELECT u_order_plan.wrkGrpid INTO :ll_wrkGrpid
  950. FROM u_order_plan
  951. WHERE u_order_plan.scid = :arg_scid
  952. AND u_order_plan.oplanid = :arg_oplanid;
  953. IF sqlca.SQLCode <> 0 THEN
  954. ARG_MSG = '查询单据工组资料失败,'+sqlca.SQLErrText
  955. rslt = 0
  956. GOTO ext
  957. END IF
  958. IF ll_wrkGrpid = 0 THEN
  959. ARG_MSG = '工组资料错误'
  960. rslt = 0
  961. GOTO ext
  962. END IF
  963. //MRP运算
  964. s_order_planmx s_plan_mx[]
  965. s_cp_scll s_cs[],arg_s_cs[],tmp_s_cs[]
  966. Long ll_arr_cnt,i
  967. IF getinfo(arg_scid,arg_oplanid,s_plan_mx,ll_arr_cnt,ARG_MSG) = 0 THEN
  968. rslt = 0
  969. GOTO ext
  970. END IF
  971. //取应车间库存物料
  972. Long j,k,li_itmxt
  973. Int li_mtrlkind
  974. Boolean if_f
  975. Long arg_itmxt
  976. FOR i = 1 TO ll_arr_cnt
  977. IF s_plan_mx[i].orderid = 0 THEN CONTINUE
  978. arg_s_cs = tmp_s_cs
  979. arg_itmxt = 0
  980. IF uo_mrp_scll.uof_cp_scll(arg_scid,s_plan_mx[i].orderid,0,&
  981. s_plan_mx[i].qty,&
  982. arg_s_cs,arg_itmxt,ARG_MSG) = 0 THEN
  983. rslt = 0
  984. GOTO ext
  985. END IF
  986. FOR k = 1 TO UpperBound(arg_s_cs)
  987. SELECT mtrlkind INTO :li_mtrlkind
  988. FROM u_mtrldef
  989. Where mtrlid = :arg_s_cs[k].mtrlid;
  990. IF sqlca.SQLCode <> 0 THEN
  991. ARG_MSG = '查询物料领料属性失败,'+sqlca.SQLErrText
  992. rslt = 0
  993. GOTO ext
  994. END IF
  995. IF li_mtrlkind = 1 THEN CONTINUE
  996. if_f = FALSE
  997. FOR j = 1 TO UpperBound(s_cs)
  998. IF s_cs[j].mtrlid = arg_s_cs[k].mtrlid &
  999. AND s_cs[j].wrkGrpid = arg_s_cs[k].wrkGrpid &
  1000. AND s_cs[j].scid = arg_s_cs[k].scid &
  1001. AND s_cs[j].orderid = arg_s_cs[k].orderid &
  1002. AND s_cs[j].status = arg_s_cs[k].status &
  1003. AND s_cs[j].woodcode = arg_s_cs[k].woodcode &
  1004. AND s_cs[j].pcode = arg_s_cs[k].pcode THEN
  1005. s_cs[j].qty = s_cs[j].qty + arg_s_cs[k].qty
  1006. if_f = TRUE
  1007. EXIT
  1008. END IF
  1009. NEXT
  1010. IF NOT if_f THEN
  1011. li_itmxt++
  1012. s_cs[li_itmxt].scid = arg_s_cs[k].scid
  1013. s_cs[li_itmxt].orderid = arg_s_cs[k].orderid
  1014. s_cs[li_itmxt].mtrlid = arg_s_cs[k].mtrlid
  1015. s_cs[li_itmxt].wrkGrpid = arg_s_cs[k].wrkGrpid
  1016. s_cs[li_itmxt].qty = arg_s_cs[k].qty
  1017. s_cs[li_itmxt].status = arg_s_cs[k].status
  1018. s_cs[li_itmxt].woodcode = arg_s_cs[k].woodcode
  1019. s_cs[li_itmxt].pcode = arg_s_cs[k].pcode
  1020. END IF
  1021. NEXT
  1022. NEXT
  1023. IF UpperBound(s_cs) = 0 THEN
  1024. ARG_MSG = '排程单对应的生产计划没有对应的车间用料'
  1025. rslt = 0
  1026. GOTO ext
  1027. END IF
  1028. DELETE FROM u_order_planmx_scll
  1029. WHERE oplanid = :arg_oplanid
  1030. AND scid = :arg_scid;
  1031. IF sqlca.SQLCode <> 0 THEN
  1032. rslt = 0
  1033. ARG_MSG = "删除单据领料明细操作失败"+"~n"+sqlca.SQLErrText
  1034. GOTO ext
  1035. END IF
  1036. Long m
  1037. FOR m = 1 TO li_itmxt
  1038. Long ll_storageid
  1039. String ls_ordercode
  1040. IF s_cs[m].wrkGrpid <> ll_wrkGrpid THEN CONTINUE
  1041. SELECT top 1 u_outware.storageid INTO :ll_storageid
  1042. FROM u_outware,u_outwaremx
  1043. WHERE u_outware.scid = u_outwaremx.scid
  1044. AND u_outware.outwareid = u_outwaremx.outwareid
  1045. AND u_outware.billtype = 3
  1046. AND u_outware.flag = 1
  1047. AND u_outwaremx.scid = :arg_scid
  1048. AND u_outwaremx.mtrlid = :s_cs[m].mtrlid
  1049. AND u_outwaremx.status = :s_cs[m].status
  1050. AND u_outwaremx.woodcode = :s_cs[m].woodcode
  1051. AND u_outwaremx.pcode = :s_cs[m].pcode
  1052. Order By u_outware.outdate Desc;
  1053. IF sqlca.SQLCode <> 0 THEN
  1054. SELECT top 1 u_mtrlware.storageid INTO :ll_storageid
  1055. FROM u_mtrlware
  1056. WHERE u_mtrlware.scid = :arg_scid
  1057. AND u_mtrlware.mtrlid = :s_cs[m].mtrlid
  1058. AND u_mtrlware.status = :s_cs[m].status
  1059. AND u_mtrlware.woodcode = :s_cs[m].woodcode
  1060. AND u_mtrlware.pcode = :s_cs[m].pcode
  1061. Order By u_mtrlware.noallocqty Desc;
  1062. IF sqlca.SQLCode <> 0 THEN
  1063. SELECT top 1 u_mtrl_storage.storageid INTO :ll_storageid
  1064. FROM u_mtrl_storage
  1065. Where u_mtrl_storage.mtrlid = :s_cs[m].mtrlid;
  1066. IF sqlca.SQLCode <> 0 THEN ll_storageid = 0
  1067. END IF
  1068. END IF
  1069. IF ll_storageid = 0 THEN
  1070. ARG_MSG = '查询物料自动出仓仓库失败,'+sqlca.SQLErrText
  1071. rslt = 0
  1072. GOTO ext
  1073. END IF
  1074. SELECT ordercode INTO :ls_ordercode
  1075. FROM u_order_ml
  1076. WHERE orderid = :s_cs[m].orderid
  1077. AND scid = :arg_scid;
  1078. IF sqlca.SQLCode <> 0 THEN
  1079. ARG_MSG = '查询生产计划号失败,'+sqlca.SQLErrText
  1080. rslt = 0
  1081. GOTO ext
  1082. END IF
  1083. INSERT INTO u_order_planmx_scll
  1084. (scid,
  1085. oplanid,
  1086. orderid,
  1087. ordercode,
  1088. mtrlid,
  1089. status,
  1090. woodcode,
  1091. pcode,
  1092. qty,
  1093. storageid)
  1094. VALUES
  1095. (:arg_scid,
  1096. :arg_oplanid,
  1097. :s_cs[m].orderid,
  1098. :ls_ordercode,
  1099. :s_cs[m].mtrlid,
  1100. :s_cs[m].status,
  1101. :s_cs[m].woodcode,
  1102. :s_cs[m].pcode,
  1103. :s_cs[m].qty,
  1104. :ll_storageid);
  1105. IF sqlca.SQLCode <> 0 THEN
  1106. ARG_MSG = '建立领料明细失败,'+sqlca.SQLErrText
  1107. rslt = 0
  1108. GOTO ext
  1109. END IF
  1110. NEXT
  1111. ext:
  1112. IF rslt = 0 THEN
  1113. ROLLBACK;
  1114. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1115. COMMIT;
  1116. END IF
  1117. DESTROY uo_mrp_scll
  1118. RETURN rslt
  1119. end function
  1120. public function integer getinfo_scll (long arg_scid, long arg_oplanid, ref s_order_planmx_scll arg_ref_planmx_scll[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  1121. Long i = 1,no_mxcheck = 0
  1122. IF arg_oplanid <= 0 THEN
  1123. rslt = 0
  1124. arg_msg = '错误单据唯一码'
  1125. GOTO ext
  1126. END IF
  1127. //用游标读取明细
  1128. DECLARE cur_planmx_scll CURSOR FOR
  1129. SELECT u_order_planmx_scll.orderid,
  1130. u_order_planmx_scll.ordercode,
  1131. u_order_planmx_scll.mtrlid,
  1132. u_order_planmx_scll.status,
  1133. u_order_planmx_scll.woodcode,
  1134. u_order_planmx_scll.pcode,
  1135. u_order_planmx_scll.Qty,
  1136. u_order_planmx_scll.storageid,
  1137. u_mtrldef.mtrlcode
  1138. FROM u_order_planmx_scll,
  1139. u_mtrldef
  1140. WHERE u_order_planmx_scll.oplanid = :arg_oplanid
  1141. AND u_order_planmx_scll.scid = :arg_scid
  1142. AND u_order_planmx_scll.mtrlid = u_mtrldef.mtrlid
  1143. Order By u_order_planmx_scll.orderid,
  1144. u_mtrldef.mtrlcode;
  1145. OPEN cur_planmx_scll;
  1146. FETCH cur_planmx_scll INTO :arg_ref_planmx_scll[i].orderid,
  1147. :arg_ref_planmx_scll[i].ordercode,:arg_ref_planmx_scll[i].mtrlid,
  1148. :arg_ref_planmx_scll[i].status,:arg_ref_planmx_scll[i].woodcode,
  1149. :arg_ref_planmx_scll[i].pcode,:arg_ref_planmx_scll[i].Qty,
  1150. :arg_ref_planmx_scll[i].storageid,:arg_ref_planmx_scll[i].mtrlcode;
  1151. DO WHILE sqlca.SQLCode = 0
  1152. i++
  1153. FETCH cur_planmx_scll INTO :arg_ref_planmx_scll[i].orderid,:arg_ref_planmx_scll[i].ordercode,
  1154. :arg_ref_planmx_scll[i].mtrlid,
  1155. :arg_ref_planmx_scll[i].status,:arg_ref_planmx_scll[i].woodcode,
  1156. :arg_ref_planmx_scll[i].pcode,:arg_ref_planmx_scll[i].Qty,
  1157. :arg_ref_planmx_scll[i].storageid,:arg_ref_planmx_scll[i].mtrlcode;
  1158. LOOP
  1159. CLOSE cur_planmx_scll;
  1160. //检验明细是否读入完整
  1161. SELECT count(*) INTO :no_mxcheck
  1162. FROM u_order_planmx_scll
  1163. WHERE scid = :arg_scid
  1164. AND oplanid = :arg_oplanid;
  1165. IF sqlca.SQLCode <> 0 THEN
  1166. rslt = 0
  1167. arg_msg = "查询操作失败,单据明细数量"
  1168. GOTO ext
  1169. END IF
  1170. IF i <> (no_mxcheck + 1) THEN
  1171. rslt = 0
  1172. arg_msg = "查询操作失败,单据明细"
  1173. GOTO ext
  1174. END IF
  1175. arg_arr_cnt = i - 1
  1176. ext:
  1177. RETURN rslt
  1178. end function
  1179. public function integer addmxcmpl (long arg_scid, long arg_planid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1180. Int li_flag,li_secflag,li_fflag
  1181. Long cnt = 0
  1182. IF arg_planid <= 0 THEN
  1183. rslt = 0
  1184. arg_msg = '错误派工单唯一码'
  1185. GOTO ext
  1186. END IF
  1187. IF arg_addqty = 0 THEN
  1188. rslt = 1
  1189. GOTO ext
  1190. END IF
  1191. IF p_getflag(arg_scid,arg_planid,li_flag,li_secflag,arg_msg) = 0 THEN
  1192. rslt = 0
  1193. GOTO ext
  1194. END IF
  1195. IF li_flag = 0 THEN
  1196. rslt = 0
  1197. arg_msg = "派工单位未审核,不能操作"
  1198. GOTO ext
  1199. END IF
  1200. SELECT fflag INTO :li_fflag
  1201. FROM u_order_plan
  1202. WHERE scid = :arg_scid
  1203. AND oplanid = :arg_planid;
  1204. IF sqlca.SQLCode <> 0 THEN
  1205. arg_msg = '查询派工单完成标记失败,'+sqlca.SQLErrText
  1206. rslt = 0
  1207. GOTO ext
  1208. END IF
  1209. Decimal ls_qty,ls_fqty,ld_uprate
  1210. SELECT u_order_planmx.qty,
  1211. u_order_planmx.fqty,
  1212. u_order_planmx.uprate
  1213. INTO :ls_qty,
  1214. :ls_fqty,
  1215. :ld_uprate
  1216. FROM u_order_planmx
  1217. WHERE u_order_planmx.scid = :arg_scid
  1218. AND u_order_planmx.oplanid = :arg_planid
  1219. AND u_order_planmx.printid = :arg_printid;
  1220. IF sqlca.SQLCode <> 0 THEN
  1221. rslt = 0
  1222. arg_msg = '查询派工单明细物料已完成数失败,'+sqlca.SQLErrText
  1223. GOTO ext
  1224. END IF
  1225. IF (ls_qty - ls_fqty) * (1 + ld_uprate) < arg_addqty THEN
  1226. rslt = 0
  1227. arg_msg = "派工单明细未完成数量只有"+String(ls_qty - ls_fqty,'#,##0.0###')+",不能再完成"+String(arg_addqty,'#,##0.0#')+",允许超比例:"+String(ld_uprate,'#,##0.0#')
  1228. GOTO ext
  1229. END IF
  1230. UPDATE u_order_planmx
  1231. SET fqty = fqty + :arg_addqty
  1232. WHERE u_order_planmx.scid = :arg_scid
  1233. AND u_order_planmx.oplanid = :arg_planid
  1234. AND u_order_planmx.printid = :arg_printid;
  1235. IF sqlca.SQLCode <> 0 THEN
  1236. rslt = 0
  1237. arg_msg = "因网络或错误产品唯一码导致更新派工单完成数量操作失败"+"~n"+sqlca.SQLErrText
  1238. GOTO ext
  1239. END IF
  1240. ext:
  1241. IF rslt = 0 THEN
  1242. ROLLBACK;
  1243. ELSEIF arg_ifcommit THEN
  1244. COMMIT;
  1245. END IF
  1246. RETURN rslt
  1247. end function
  1248. public function integer tryfinish (long arg_scid, long arg_planid, ref string arg_msg, boolean arg_ifcommit);
  1249. Int rslt = 1
  1250. DateTime null_dt
  1251. SetNull(null_dt)
  1252. IF arg_planid <= 0 THEN
  1253. rslt = 0
  1254. arg_msg = '错误派工单唯一码'
  1255. GOTO ext
  1256. END IF
  1257. Decimal ls_zerook
  1258. Boolean if_finish
  1259. if_finish = TRUE
  1260. DECLARE zero_cur CURSOR FOR
  1261. SELECT u_order_planmx.qty - u_order_planmx.fqty
  1262. FROM u_order_planmx
  1263. WHERE ( u_order_planmx.oplanid = :arg_planid )
  1264. AND ( u_order_planmx.scid = :arg_scid );
  1265. OPEN zero_cur;
  1266. FETCH zero_cur INTO :ls_zerook;
  1267. DO WHILE sqlca.SQLCode = 0
  1268. IF if_finish THEN
  1269. IF ls_zerook > 0 THEN if_finish = FALSE
  1270. END IF
  1271. FETCH zero_cur INTO :ls_zerook;
  1272. LOOP
  1273. CLOSE zero_cur;
  1274. IF if_finish THEN
  1275. UPDATE u_order_plan
  1276. SET fflag = 1,
  1277. fdate = getdate(),
  1278. femp = :publ_operator
  1279. WHERE ( u_order_plan.oplanid = :arg_planid )
  1280. AND u_order_plan.scid = :arg_scid;
  1281. IF sqlca.SQLCode <> 0 THEN
  1282. rslt = 0
  1283. arg_msg = "因网络或其他原因导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText
  1284. GOTO ext
  1285. END IF
  1286. END IF
  1287. IF NOT if_finish THEN
  1288. UPDATE u_order_plan
  1289. SET fflag = 0,
  1290. fdate = :null_dt,
  1291. femp = ''
  1292. WHERE ( u_order_plan.oplanid = :arg_planid )
  1293. AND u_order_plan.scid = :arg_scid;
  1294. IF sqlca.SQLCode <> 0 THEN
  1295. rslt = 0
  1296. arg_msg = "因网络或其他原因导致更新派工单完成状态操作失败"+"~n"+sqlca.SQLErrText
  1297. GOTO ext
  1298. END IF
  1299. END IF
  1300. ext:
  1301. IF rslt = 0 THEN
  1302. ROLLBACK;
  1303. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1304. COMMIT;
  1305. END IF
  1306. RETURN rslt
  1307. end function
  1308. on uo_order_plan.create
  1309. call super::create
  1310. TriggerEvent( this, "constructor" )
  1311. end on
  1312. on uo_order_plan.destroy
  1313. TriggerEvent( this, "destructor" )
  1314. call super::destroy
  1315. end on
  1316. event constructor;String arg_msg
  1317. String str_optionvalue
  1318. str_optionvalue = ''
  1319. f_get_sys_option_value('211',str_optionvalue,arg_msg)
  1320. uo_option_order_plan_scll = Long(str_optionvalue)
  1321. end event