uo_workgroup_num.sru 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227
  1. $PBExportHeader$uo_workgroup_num.sru
  2. forward
  3. global type uo_workgroup_num from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_workgroup_num from nonvisualobject
  7. end type
  8. global uo_workgroup_num uo_workgroup_num
  9. type variables
  10. Public ProtectedWrite Long billid
  11. Public ProtectedWrite String billcode //单据的唯一编号
  12. Public ProtectedWrite DateTime opdate //建立时间,自动
  13. Public ProtectedWrite String opemp //建立操作员
  14. Public ProtectedWrite Int flag = 0 //审核标志
  15. Public ProtectedWrite DateTime auditdate //审核时间
  16. Public ProtectedWrite String auditrep //审核操作员
  17. Public ProtectedWrite Int secflag = 0 //审核标志
  18. Public ProtectedWrite DateTime secauditdate //审核时间
  19. Public ProtectedWrite String secauditemp //审核操作员
  20. Long sworkgroupid = 0
  21. Long dworkgroupid = 0
  22. Long relcpscid = 0
  23. Long relcpid = 0
  24. String relcpcode = ''
  25. String dscrp = ''
  26. String relcode = ''
  27. String relrep = ''
  28. DateTime billdate
  29. Int billtype
  30. Long scid = 0
  31. Long rellossscid
  32. Long rellossid
  33. Boolean if_getid_ture = True
  34. Transaction commit_transaction //数据commit事务
  35. s_orderworkgroup_nummx wkpmx[] //明细结构数组
  36. Long it_mxbt = 0 //明细结构数组末指针
  37. Boolean it_newbegin = False //新建标志
  38. Boolean it_updatebegin = False //修改标志
  39. Int uo_option_orderworkgroup_time
  40. Int uo_option_orderworkgroup_num_cp
  41. Int uo_option_ml_wkp
  42. Int uo_option_taskplancode
  43. int uo_option_workgroup_num_check
  44. end variables
  45. forward prototypes
  46. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  47. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  48. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  49. public function integer p_reset ()
  50. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  51. public function integer p_getinfo (long arg_billid, ref string arg_msg)
  52. public function integer updatebegin (long arg_billid, ref string arg_msg)
  53. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  54. public function integer p_clearmx ()
  55. public function integer getinfo (long arg_billid, ref string arg_msg)
  56. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg)
  57. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg)
  58. public function integer newbegin (ref string arg_msg)
  59. public function integer uof_finish_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, integer arg_type, ref string arg_msg, boolean arg_ifcommit)
  60. public function integer add_mxdscrp (long arg_billid, long arg_printid, string arg_newdescppart, ref string arg_msg)
  61. public function integer acceptmx (long arg_printid, long arg_orderscid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, string arg_wkpname, string arg_mtrlcuscode, string arg_location, string arg_waredscrp, long arg_planscid, long arg_planid, long arg_planprintid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_lossqty, ref string arg_msg)
  62. end prototypes
  63. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  64. DateTime server_dt
  65. Long ls_newid
  66. String ls_sccode
  67. Long ll_printid
  68. IF uo_option_orderworkgroup_time = -1000 THEN
  69. arg_msg = '选项:[118]工组交接时间精确到小时,读取初始默认值失败,操作取消!'
  70. rslt = 0
  71. GOTO ext
  72. END IF
  73. IF uo_option_orderworkgroup_num_cp = -1000 THEN
  74. arg_msg = '选项:[210]工组完工单使用仓库审,读取初始默认值失败,操作取消!'
  75. rslt = 0
  76. GOTO ext
  77. END IF
  78. IF uo_option_workgroup_num_check = -1000 THEN
  79. arg_msg = '选项:[371]工组交接单严格按工组顺序交接,读取初始默认值失败,操作取消!'
  80. rslt = 0
  81. GOTO ext
  82. END IF
  83. IF IsNull(sworkgroupid) THEN sworkgroupid = 0
  84. IF IsNull(dworkgroupid) THEN dworkgroupid = 0
  85. IF IsNull(dscrp) THEN dscrp = ''
  86. IF IsNull(relcode) THEN relcode = ''
  87. IF IsNull(relrep) THEN relrep = ''
  88. IF it_newbegin = False And it_updatebegin = False THEN
  89. rslt = 0
  90. arg_msg = "非编辑状态不可以提交"
  91. GOTO ext
  92. END IF
  93. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  94. //取得系统时间,借用操作员表
  95. IF commit_transaction.SQLCode <> 0 THEN
  96. rslt = 0
  97. arg_msg = "查询操作失败,日期 "
  98. GOTO ext
  99. END IF
  100. IF relrep = '' THEN
  101. rslt = 0
  102. arg_msg = "请输入经手人"
  103. GOTO ext
  104. END IF
  105. IF it_mxbt <= 0 THEN
  106. rslt = 0
  107. arg_msg = "没有正确明细内容"
  108. GOTO ext
  109. END IF
  110. IF uo_option_orderworkgroup_time = 0 THEN
  111. billdate = DateTime(Date(billdate),Time(0))
  112. END IF
  113. IF billtype = 0 THEN
  114. IF sworkgroupid = 0 THEN
  115. rslt = 0
  116. arg_msg = '请选择调出工组'
  117. GOTO ext
  118. END IF
  119. IF dworkgroupid = 0 THEN
  120. rslt = 0
  121. arg_msg = '请选择调入工组'
  122. GOTO ext
  123. END IF
  124. IF sworkgroupid = dworkgroupid THEN
  125. rslt = 0
  126. arg_msg = '调出工组与调入工组不能相同'
  127. GOTO ext
  128. END IF
  129. ELSEIF billtype = 2 THEN
  130. IF sworkgroupid = 0 THEN
  131. rslt = 0
  132. arg_msg = '请选择完工工组'
  133. GOTO ext
  134. END IF
  135. IF uo_option_orderworkgroup_num_cp = 1 THEN
  136. IF dworkgroupid = 0 THEN
  137. rslt = 0
  138. arg_msg = '请选择调入仓库'
  139. GOTO ext
  140. END IF
  141. END IF
  142. END IF
  143. //检查调出工组,工组进度解决方案 110527
  144. //////////////////////////////////////////////////
  145. Int li_jdtype
  146. SELECT jdtype
  147. INTO :li_jdtype
  148. FROM u_sc_workgroup
  149. Where wrkGrpid = :sworkgroupid Using commit_transaction;
  150. IF commit_transaction.SQLCode <> 0 THEN
  151. rslt = 0
  152. arg_msg = "因网络或其它原因导致查询调出工组工组进度解决方案操作失败"+"~n"+commit_transaction.SQLErrText
  153. GOTO ext
  154. END IF
  155. IF li_jdtype <> 0 THEN
  156. rslt = 0
  157. IF billtype = 0 THEN
  158. arg_msg = "调出工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组交接单"
  159. ELSE
  160. arg_msg = "完成工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组完工单"
  161. END IF
  162. GOTO ext
  163. END IF
  164. //////////////////////////////////////////////// //
  165. IF f_check_inoutdate(0,billdate,False,arg_msg) = 0 THEN
  166. rslt = 0
  167. GOTO ext
  168. END IF
  169. IF uo_option_workgroup_num_check = 1 And billtype = 0 THEN
  170. FOR i = 1 To it_mxbt
  171. SELECT printid
  172. INTO :ll_printid
  173. FROM u_OrderMtrl_workgroup
  174. WHERE orderid = :wkpmx[i].orderid
  175. AND scid = :wkpmx[i].orderscid
  176. AND wrkGrpid = :sworkgroupid
  177. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 )
  178. AND wkpname = :wkpmx[i].wkpname
  179. Using commit_transaction;
  180. IF commit_transaction.SQLCode <> 0 THEN
  181. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组信息失败,原因:'+commit_transaction.SQLErrText
  182. rslt = 0
  183. GOTO ext
  184. END IF
  185. IF ll_printid = 0 THEN CONTINUE
  186. cnt = 0
  187. SELECT count(*)
  188. INTO :cnt
  189. FROM u_OrderMtrl_workgroup
  190. WHERE orderid = :wkpmx[i].orderid
  191. AND scid = :wkpmx[i].orderscid
  192. AND ( owrkGrpid = :sworkgroupid AND iflast = 0 )
  193. AND printid < :ll_printid
  194. AND finishqty = 0
  195. Using commit_transaction;
  196. IF commit_transaction.SQLCode <> 0 THEN
  197. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'前工组信息失败,原因:'+commit_transaction.SQLErrText
  198. rslt = 0
  199. GOTO ext
  200. END IF
  201. IF cnt > 0 THEN
  202. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调出工组未接收,不能交接'
  203. rslt = 0
  204. GOTO ext
  205. END IF
  206. NEXT
  207. END IF
  208. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  209. IF billid = 0 THEN //新建
  210. ls_newid = f_sys_scidentity(scid,"u_orderworkgroup_num","billid",arg_msg,True,id_sqlca)
  211. IF ls_newid <= 0 THEN
  212. rslt = 0
  213. GOTO ext
  214. END IF
  215. //取分部代号
  216. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  217. rslt = 0
  218. GOTO ext
  219. END IF
  220. //取得新单据编号
  221. IF billtype = 0 THEN
  222. billcode = getid(scid,ls_sccode + 'BS',Date(server_dt),if_getid_ture,commit_transaction)
  223. ELSEIF billtype = 2 THEN
  224. billcode = getid(scid,ls_sccode + 'WG',Date(server_dt),if_getid_ture,commit_transaction)
  225. END IF
  226. IF billcode = "err" THEN
  227. billcode = ''
  228. rslt = 0
  229. arg_msg = "无法获取单编号"+"~n"+commit_transaction.SQLErrText
  230. GOTO ext
  231. END IF
  232. INSERT INTO u_orderworkgroup_num (
  233. billid,
  234. billcode,
  235. billdate,
  236. relcode,
  237. sworkgroupid,
  238. dworkgroupid,
  239. dscrp,
  240. opdate,
  241. opemp,
  242. relrep,
  243. billtype,
  244. scid)
  245. VALUES (
  246. :ls_newid,
  247. :billcode,
  248. :billdate,
  249. :relcode,
  250. :sworkgroupid,
  251. :dworkgroupid,
  252. :dscrp,
  253. :server_dt,
  254. :publ_operator,
  255. :relrep,
  256. :billtype,
  257. :scid) Using commit_transaction ;
  258. IF commit_transaction.SQLCode <> 0 THEN
  259. rslt = 0
  260. arg_msg = "因网络或其它原因导致插入操作失败"+"~n"+commit_transaction.SQLErrText
  261. GOTO ext
  262. END IF
  263. billid = ls_newid
  264. FOR i = 1 To it_mxbt
  265. INSERT INTO u_orderworkgroup_nummx
  266. (billid,
  267. printid,
  268. mtrlid,
  269. orderscid,
  270. orderid,
  271. status,
  272. woodcode,
  273. pcode,
  274. qty,
  275. mxdscrp,
  276. wkpname,
  277. mtrlcuscode,
  278. location,
  279. waredscrp,
  280. planscid,
  281. planid,
  282. planprintid,
  283. oplancode,
  284. uqty,
  285. unit,
  286. rate,
  287. lossqty)
  288. VALUES (
  289. :ls_newid,
  290. :wkpmx[i].printid,
  291. :wkpmx[i].mtrlid,
  292. :wkpmx[i].orderscid,
  293. :wkpmx[i].orderid,
  294. :wkpmx[i].status,
  295. :wkpmx[i].woodcode,
  296. :wkpmx[i].pcode,
  297. :wkpmx[i].qty,
  298. :wkpmx[i].mxdscrp,
  299. :wkpmx[i].wkpname,
  300. :wkpmx[i].mtrlcuscode,
  301. :wkpmx[i].location,
  302. :wkpmx[i].waredscrp,
  303. :wkpmx[i].planscid,
  304. :wkpmx[i].planid,
  305. :wkpmx[i].planprintid,
  306. :wkpmx[i].oplancode,
  307. :wkpmx[i].uqty,
  308. :wkpmx[i].unit,
  309. :wkpmx[i].rate,
  310. :wkpmx[i].lossqty) Using commit_transaction;
  311. IF commit_transaction.SQLCode <> 0 THEN
  312. billid = 0 //billid
  313. rslt = 0
  314. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  315. GOTO ext
  316. END IF
  317. NEXT
  318. ELSE //////////////////////////////////////////////// //更新
  319. UPDATE u_orderworkgroup_num
  320. SET billdate = :billdate,
  321. relcode = :relcode,
  322. sworkgroupid = :sworkgroupid,
  323. dworkgroupid = :dworkgroupid,
  324. dscrp = :dscrp,
  325. relrep = :relrep
  326. WHERE u_orderworkgroup_num.billid = :billid
  327. And flag = 0 Using commit_transaction;
  328. IF commit_transaction.SQLCode <> 0 THEN
  329. rslt = 0
  330. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+commit_transaction.SQLErrText
  331. GOTO ext
  332. END IF
  333. //删除原有明细
  334. DELETE FROM u_orderworkgroup_nummx
  335. Where u_orderworkgroup_nummx.billid = :billid Using commit_transaction;
  336. IF commit_transaction.SQLCode <> 0 THEN
  337. rslt = 0
  338. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  339. GOTO ext
  340. END IF
  341. FOR i = 1 To it_mxbt
  342. INSERT INTO u_orderworkgroup_nummx
  343. (billid,
  344. printid,
  345. mtrlid,
  346. orderscid,
  347. orderid,
  348. status,
  349. woodcode,
  350. pcode,
  351. qty,
  352. mxdscrp,
  353. wkpname,
  354. mtrlcuscode,
  355. location,
  356. waredscrp,
  357. planscid,
  358. planid,
  359. planprintid,
  360. oplancode,
  361. uqty,
  362. unit,
  363. rate,
  364. lossqty)
  365. VALUES (
  366. :billid,
  367. :wkpmx[i].printid,
  368. :wkpmx[i].mtrlid,
  369. :wkpmx[i].orderscid,
  370. :wkpmx[i].orderid,
  371. :wkpmx[i].status,
  372. :wkpmx[i].woodcode,
  373. :wkpmx[i].pcode,
  374. :wkpmx[i].qty,
  375. :wkpmx[i].mxdscrp,
  376. :wkpmx[i].wkpname,
  377. :wkpmx[i].mtrlcuscode,
  378. :wkpmx[i].location,
  379. :wkpmx[i].waredscrp,
  380. :wkpmx[i].planscid,
  381. :wkpmx[i].planid,
  382. :wkpmx[i].planprintid,
  383. :wkpmx[i].oplancode,
  384. :wkpmx[i].uqty,
  385. :wkpmx[i].unit,
  386. :wkpmx[i].rate,
  387. :wkpmx[i].lossqty) Using commit_transaction;
  388. IF commit_transaction.SQLCode <> 0 THEN
  389. rslt = 0
  390. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  391. GOTO ext
  392. END IF
  393. NEXT
  394. END IF
  395. it_newbegin = False
  396. it_updatebegin = False
  397. ext:
  398. IF rslt = 0 THEN
  399. ROLLBACK Using commit_transaction;
  400. p_clearmx()
  401. ELSEIF rslt = 1 And arg_ifcommit THEN
  402. COMMIT Using commit_transaction;
  403. END IF
  404. RETURN rslt
  405. end function
  406. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  407. Long cnt = 0,i
  408. Int li_ifloss
  409. IF uo_option_ml_wkp = -1000 THEN
  410. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  411. rslt = 0
  412. GOTO ext
  413. END IF
  414. uo_order_plan uo_oplan
  415. uo_oplan = Create uo_order_plan
  416. uo_order_wkp_jd uo_jd
  417. uo_jd = Create uo_order_wkp_jd
  418. uo_inware_other uo_loss_in
  419. uo_loss_in = Create uo_inware_other
  420. uo_loss_in.commit_transaction = commit_transaction
  421. uo_loss_in.if_getid_ture = FALSE
  422. datastore ds_update_acceptqty
  423. ds_update_acceptqty = Create datastore
  424. ds_update_acceptqty.DataObject = 'ds_order_ml_update_acceptqty'
  425. ds_update_acceptqty.SetTransObject(commit_transaction)
  426. IF uo_option_ml_wkp = 1 THEN
  427. arg_msg = '系统已设置为生产计划直接确认车间完成'
  428. rslt = 0
  429. GOTO ext
  430. END IF
  431. IF billid = 0 THEN
  432. rslt = 0
  433. arg_msg = "没有审核对象"
  434. GOTO ext
  435. END IF
  436. IF it_newbegin Or it_updatebegin THEN
  437. rslt = 0
  438. arg_msg = "编辑状态下不可以执行审核"
  439. GOTO ext
  440. END IF
  441. IF flag = 1 THEN
  442. rslt = 0
  443. arg_msg = "单据已经审核"
  444. GOTO ext
  445. END IF
  446. //检查调出工组,工组进度解决方案 110527
  447. //////////////////////////////////////////////////
  448. Int li_jdtype
  449. SELECT jdtype
  450. INTO :li_jdtype
  451. FROM u_sc_workgroup
  452. Where wrkGrpid = :sworkgroupid Using commit_transaction;
  453. IF commit_transaction.SQLCode <> 0 THEN
  454. rslt = 0
  455. arg_msg = "因网络或其它原因导致查询调出工组工组进度解决方案操作失败"+"~n"+commit_transaction.SQLErrText
  456. GOTO ext
  457. END IF
  458. IF li_jdtype <> 0 THEN
  459. rslt = 0
  460. IF billtype = 0 THEN
  461. arg_msg = "调出工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组交接单"
  462. ELSE
  463. arg_msg = "完成工组工组进度解决方案设置不是[按工组交接数统计],不能使用工组完工单"
  464. END IF
  465. GOTO ext
  466. END IF
  467. //////////////////////////////////////////////// //
  468. UPDATE u_orderworkgroup_num
  469. SET auditrep = :publ_operator,
  470. auditdate = getdate(),
  471. flag = 1
  472. WHERE u_orderworkgroup_num.billid = :billid
  473. And flag = 0 Using commit_transaction;
  474. IF commit_transaction.SQLCode <> 0 THEN
  475. rslt = 0
  476. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  477. GOTO ext
  478. ELSEIF commit_transaction.SQLNRows = 0 THEN
  479. rslt = 0
  480. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  481. GOTO ext
  482. END IF
  483. //更新工组完成数
  484. Decimal not_finishqty
  485. Long ll_printid,ll_printid_next,ll_owrkGrpid_next,ll_workgroupid_next
  486. String ls_wkpname_next
  487. Int li_iflast
  488. Long ll_j
  489. FOR i = 1 To it_mxbt
  490. not_finishqty = 0
  491. SELECT (orderqty - finishqty - stopqty) * (1 + uprate),printid,iflast
  492. INTO :not_finishqty,:ll_printid,:li_iflast
  493. FROM u_OrderMtrl_workgroup
  494. WHERE orderid = :wkpmx[i].orderid
  495. AND scid = :wkpmx[i].orderscid
  496. AND wrkGrpid = :sworkgroupid
  497. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  498. AND wkpname = :wkpmx[i].wkpname
  499. Using commit_transaction;
  500. IF commit_transaction.SQLCode <> 0 THEN
  501. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组未完成数量失败,原因:'+commit_transaction.SQLErrText
  502. rslt = 0
  503. GOTO ext
  504. END IF
  505. IF wkpmx[i].qty > not_finishqty THEN
  506. arg_msg = '明细行:'+String(wkpmx[i].printid)+',物料:'+wkpmx[i].mtrlcode+'当前数量'+String(wkpmx[i].qty,'#,##0.0###')+' > 工组未完成数量'+String(not_finishqty,'#,##0.0###')+',不能审核'
  507. rslt = 0
  508. GOTO ext
  509. END IF
  510. UPDATE u_OrderMtrl_workgroup
  511. SET finishqty = finishqty + :wkpmx[i].qty
  512. WHERE orderid = :wkpmx[i].orderid
  513. AND scid = :wkpmx[i].orderscid
  514. AND wrkGrpid = :sworkgroupid
  515. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  516. AND wkpname = :wkpmx[i].wkpname
  517. Using commit_transaction;
  518. IF commit_transaction.SQLCode <> 0 THEN
  519. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'源工组未完成数量失败,原因:'+commit_transaction.SQLErrText
  520. rslt = 0
  521. GOTO ext
  522. END IF
  523. UPDATE u_OrderMtrl_workgroup
  524. SET finishflag = 1,
  525. finishdate = :billdate
  526. WHERE orderid = :wkpmx[i].orderid
  527. AND scid = :wkpmx[i].orderscid
  528. AND mtrlid = :wkpmx[i].mtrlid
  529. AND wrkGrpid = :sworkgroupid
  530. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  531. AND wkpname = :wkpmx[i].wkpname
  532. AND orderqty <= finishqty + stopqty
  533. Using commit_transaction;
  534. IF commit_transaction.SQLCode <> 0 THEN
  535. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'工组完成标记失败,原因:'+commit_transaction.SQLErrText
  536. rslt = 0
  537. GOTO ext
  538. END IF
  539. //更新下一调拨接收数
  540. IF li_iflast = 0 THEN
  541. SELECT min(printid) INTO :ll_printid_next
  542. FROM u_OrderMtrl_workgroup
  543. WHERE orderid = :wkpmx[i].orderid
  544. AND scid = :wkpmx[i].orderscid
  545. AND printid > :ll_printid
  546. AND wrkgrpid = :dworkgroupid
  547. Using commit_transaction;
  548. IF commit_transaction.SQLCode <> 0 THEN
  549. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调入工组调拨资料失败,原因:'+commit_transaction.SQLErrText
  550. rslt = 0
  551. GOTO ext
  552. END IF
  553. ds_update_acceptqty.Retrieve(wkpmx[i].orderscid,wkpmx[i].orderid,ll_printid_next,dworkgroupid)
  554. FOR ll_j = 1 To ds_update_acceptqty.RowCount()
  555. ll_owrkGrpid_next = ds_update_acceptqty.Object.owrkGrpid[ll_j]
  556. ls_wkpname_next = ds_update_acceptqty.Object.wkpname[ll_j]
  557. ll_workgroupid_next = ds_update_acceptqty.Object.workgroupid[ll_j]
  558. UPDATE u_OrderMtrl_workgroup
  559. SET acceptqty = acceptqty + :wkpmx[i].qty
  560. WHERE orderid = :wkpmx[i].orderid
  561. AND scid = :wkpmx[i].orderscid
  562. AND wrkGrpid = :dworkgroupid
  563. AND owrkGrpid = :ll_owrkGrpid_next
  564. AND wkpname = :ls_wkpname_next
  565. AND workgroupid = :ll_workgroupid_next
  566. Using commit_transaction;
  567. IF commit_transaction.SQLCode <> 0 THEN
  568. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'下工组调入数量失败,原因:'+commit_transaction.SQLErrText
  569. rslt = 0
  570. GOTO ext
  571. END IF
  572. NEXT
  573. END IF
  574. If (billtype = 0 Or billtype = 2 ) And wkpmx[i].planid > 0 THEN
  575. IF uo_oplan.addmxcmpl(wkpmx[i].planscid,wkpmx[i].planid,wkpmx[i].planprintid,wkpmx[i].qty,arg_msg,False) = 0 THEN
  576. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  577. rslt = 0
  578. GOTO ext
  579. END IF
  580. IF uo_oplan.tryfinish(wkpmx[i].planscid,wkpmx[i].planid,arg_msg,False) = 0 THEN
  581. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  582. rslt = 0
  583. GOTO ext
  584. END IF
  585. END IF
  586. IF uo_jd.uof_order_add_wrk_jd(scid,wkpmx[i].orderid,arg_msg,False) = 0 THEN
  587. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  588. rslt = 0
  589. GOTO ext
  590. END IF
  591. IF wkpmx[i].lossqty > 0 And li_ifloss = 0 THEN
  592. li_ifloss = 1
  593. END IF
  594. NEXT
  595. //建损耗进仓单
  596. IF li_ifloss = 1 THEN
  597. Long ll_rellossid,ll_scid,ll_storageid
  598. String ls_rellosscode
  599. SELECT u_storage.storageid,
  600. u_storage.scid
  601. INTO :ll_storageid,:ll_scid
  602. FROM u_storage,u_sc_workgroup,u_sc_wkp
  603. WHERE u_sc_workgroup.storageid = u_sc_wkp.wrkgrpid
  604. AND u_sc_wkp.storageid2 = u_storage.storageid
  605. AND u_sc_workgroup.wrkgrpid = :sworkgroupid
  606. Using commit_transaction;
  607. IF commit_transaction.SQLCode <> 0 THEN
  608. rslt = 0
  609. arg_msg = "查询调出工组对应车间所属对应损耗仓库资料失败,"+commit_transaction.SQLErrText
  610. GOTO ext
  611. END IF
  612. IF uo_loss_in.newbegin(ll_scid,8,arg_msg) = 0 THEN
  613. rslt = 0
  614. GOTO ext
  615. END IF
  616. uo_loss_in.indate = billdate
  617. uo_loss_in.inrep = relrep
  618. uo_loss_in.part = billcode
  619. uo_loss_in.storageid = ll_storageid
  620. uo_loss_in.sptname = '工组调拨单|工组完工单(损耗进仓)'
  621. FOR i = 1 To it_mxbt
  622. IF wkpmx[i].mtrlid > 0 And wkpmx[i].lossqty > 0 THEN
  623. String ls_mtrlcode,ls_unit
  624. String ls_plancode
  625. Decimal ls_planprice
  626. Long ll_cusid
  627. SELECT u_mtrldef.mtrlcode,
  628. u_mtrldef.unit
  629. INTO :ls_mtrlcode,
  630. :ls_unit
  631. FROM u_mtrldef
  632. WHERE u_mtrldef.mtrlid = :wkpmx[i].mtrlid
  633. Using commit_transaction;
  634. IF commit_transaction.SQLCode <> 0 THEN
  635. rslt = 0
  636. arg_msg = '明细行:'+String(i)+",查询资料失败,"+commit_transaction.SQLErrText
  637. GOTO ext
  638. END IF
  639. ls_plancode = ''
  640. ll_cusid = 0
  641. f_get_planprice_mtrl(wkpmx[i].mtrlid,wkpmx[i].status,wkpmx[i].woodcode,wkpmx[i].pcode,ls_planprice)
  642. IF uo_loss_in.acceptmx(wkpmx[i].printid,&
  643. wkpmx[i].mtrlid,&
  644. ls_mtrlcode,&
  645. ls_plancode,&
  646. wkpmx[i].status,&
  647. wkpmx[i].lossqty,&
  648. ls_planprice,&
  649. 1,&
  650. '',&
  651. arg_msg,&
  652. 0,&
  653. wkpmx[i].orderid,&
  654. 1,&
  655. wkpmx[i].woodcode,&
  656. wkpmx[i].pcode,&
  657. ll_cusid,&
  658. ls_unit,&
  659. 1,wkpmx[i].lossqty,0,0,'',wkpmx[i].waredscrp,0,0,&
  660. wkpmx[i].mtrlcuscode,&
  661. wkpmx[i].Location,&
  662. wkpmx[i].qty,0) = 0 THEN
  663. rslt = 0
  664. GOTO ext
  665. END IF
  666. END IF
  667. NEXT
  668. IF uo_loss_in.Save(False,arg_msg) = 0 THEN
  669. rslt = 0
  670. GOTO ext
  671. END IF
  672. IF uo_loss_in.getinfo(uo_loss_in.scid,uo_loss_in.inwareid,arg_msg) = 0 THEN
  673. rslt = 0
  674. GOTO ext
  675. END IF
  676. IF uo_loss_in.auditing(False,arg_msg) = 0 THEN
  677. rslt = 0
  678. GOTO ext
  679. END IF
  680. ll_rellossid = uo_loss_in.inwareid
  681. ls_rellosscode = uo_loss_in.inwarecode
  682. UPDATE u_orderworkgroup_num
  683. SET rellossid = :ll_rellossid,
  684. relcpscid = :ll_scid,
  685. rellosscode = :ls_rellosscode
  686. WHERE u_orderworkgroup_num.billid = :billid
  687. Using commit_transaction;
  688. IF commit_transaction.SQLCode <> 0 THEN
  689. rslt = 0
  690. arg_msg = "因网络或其它原因导致更新单据相关损耗进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText
  691. GOTO ext
  692. END IF
  693. END IF
  694. flag = 1
  695. ext:
  696. IF rslt = 0 THEN
  697. ROLLBACK Using commit_transaction;
  698. ELSEIF rslt = 1 And arg_ifcommit THEN
  699. COMMIT Using commit_transaction;
  700. END IF
  701. Destroy uo_oplan
  702. Destroy uo_jd
  703. Destroy uo_loss_in
  704. Destroy ds_update_acceptqty
  705. RETURN rslt
  706. end function
  707. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  708. Long cnt = 0,i
  709. DateTime null_dt
  710. SetNull(null_dt)
  711. IF uo_option_ml_wkp = -1000 THEN
  712. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  713. rslt = 0
  714. GOTO ext
  715. END IF
  716. uo_order_plan uo_oplan
  717. uo_oplan = Create uo_order_plan
  718. uo_order_wkp_jd uo_jd
  719. uo_jd = Create uo_order_wkp_jd
  720. uo_inware_other uo_loss_in
  721. uo_loss_in = Create uo_inware_other
  722. uo_loss_in.commit_transaction = commit_transaction
  723. datastore ds_update_acceptqty
  724. ds_update_acceptqty = Create datastore
  725. ds_update_acceptqty.DataObject = 'ds_order_ml_update_acceptqty'
  726. ds_update_acceptqty.SetTransObject(commit_transaction)
  727. IF uo_option_ml_wkp = 1 THEN
  728. arg_msg = '系统已设置为生产计划直接确认车间完成'
  729. rslt = 0
  730. GOTO ext
  731. END IF
  732. IF billid = 0 THEN
  733. rslt = 0
  734. arg_msg = "没有审核对象"
  735. GOTO ext
  736. END IF
  737. IF it_newbegin Or it_updatebegin THEN
  738. rslt = 0
  739. arg_msg = "编辑状态下不可以执行审核"
  740. GOTO ext
  741. END IF
  742. IF flag = 0 THEN
  743. rslt = 0
  744. arg_msg = "单据还未审核"
  745. GOTO ext
  746. END IF
  747. IF secflag = 1 THEN
  748. rslt = 0
  749. arg_msg = "单据已仓库审核"
  750. GOTO ext
  751. END IF
  752. UPDATE u_orderworkgroup_num
  753. SET auditrep = '',
  754. auditdate = :null_dt,
  755. flag = 0,
  756. rellossscid = 0,
  757. rellossid = 0
  758. WHERE u_orderworkgroup_num.billid = :billid
  759. AND flag = 1
  760. And secflag = 0 Using commit_transaction;
  761. IF commit_transaction.SQLCode <> 0 THEN
  762. rslt = 0
  763. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  764. GOTO ext
  765. ELSEIF commit_transaction.SQLNRows = 0 THEN
  766. rslt = 0
  767. arg_msg = "单据正在撤消审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  768. GOTO ext
  769. END IF
  770. //更新工组完成数
  771. Decimal ld_finishqty
  772. Long ll_printid,ll_printid_next,ll_owrkGrpid_next,ll_workgroupid_next
  773. String ls_wkpname_next
  774. Int li_iflast
  775. Long ll_j
  776. FOR i = 1 To it_mxbt
  777. ld_finishqty = 0
  778. SELECT finishqty,printid,iflast
  779. INTO :ld_finishqty,:ll_printid,:li_iflast
  780. FROM u_OrderMtrl_workgroup
  781. WHERE orderid = :wkpmx[i].orderid
  782. AND scid = :wkpmx[i].orderscid
  783. AND wrkGrpid = :sworkgroupid
  784. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  785. AND wkpname = :wkpmx[i].wkpname
  786. Using commit_transaction;
  787. IF commit_transaction.SQLCode <> 0 THEN
  788. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'源工组已完成数量失败,原因:'+commit_transaction.SQLErrText
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. IF wkpmx[i].qty > ld_finishqty THEN
  793. arg_msg = '明细行:'+String(wkpmx[i].printid)+',物料:'+wkpmx[i].mtrlcode+'当前数量'+String(wkpmx[i].qty,'#,##0.0###')+' > 工组已完成数量'+String(ld_finishqty,'#,##0.0###')+',不能撤审'
  794. rslt = 0
  795. GOTO ext
  796. END IF
  797. UPDATE u_ordermtrl_workgroup
  798. SET finishqty = finishqty - :wkpmx[i].qty
  799. WHERE orderid = :wkpmx[i].orderid
  800. AND mtrlid = :wkpmx[i].mtrlid
  801. AND wrkGrpid = :sworkgroupid
  802. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  803. AND wkpname = :wkpmx[i].wkpname
  804. Using commit_transaction;
  805. IF commit_transaction.SQLCode <> 0 THEN
  806. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新源工组未完成数量失败,原因:'+commit_transaction.SQLErrText
  807. rslt = 0
  808. GOTO ext
  809. END IF
  810. UPDATE u_ordermtrl_workgroup
  811. SET finishflag = 0,
  812. finishdate = :null_dt
  813. WHERE orderid = :wkpmx[i].orderid
  814. AND mtrlid = :wkpmx[i].mtrlid
  815. AND wrkGrpid = :sworkgroupid
  816. AND ( owrkGrpid = :dworkgroupid AND iflast = 0 AND :billtype = 0 OR iflast = 1 AND :billtype = 2 )
  817. AND wkpname = :wkpmx[i].wkpname
  818. AND orderqty <> finishqty + stopqty
  819. Using commit_transaction;
  820. IF commit_transaction.SQLCode <> 0 THEN
  821. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新源工组完成标记失败,原因:'+commit_transaction.SQLErrText
  822. rslt = 0
  823. GOTO ext
  824. END IF
  825. //更新下一调拨接收数
  826. IF li_iflast = 0 THEN
  827. SELECT min(printid) INTO :ll_printid_next
  828. FROM u_OrderMtrl_workgroup
  829. WHERE orderid = :wkpmx[i].orderid
  830. AND scid = :wkpmx[i].orderscid
  831. AND printid > :ll_printid
  832. AND wrkgrpid = :dworkgroupid
  833. Using commit_transaction;
  834. IF commit_transaction.SQLCode <> 0 THEN
  835. arg_msg = '明细行:'+String(wkpmx[i].printid)+',查询物料:'+wkpmx[i].mtrlcode+'调入工组调拨资料失败,原因:'+commit_transaction.SQLErrText
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. ds_update_acceptqty.Retrieve(wkpmx[i].orderscid,wkpmx[i].orderid,ll_printid_next,dworkgroupid)
  840. FOR ll_j = 1 To ds_update_acceptqty.RowCount()
  841. ll_owrkGrpid_next = ds_update_acceptqty.Object.owrkGrpid[ll_j]
  842. ls_wkpname_next = ds_update_acceptqty.Object.wkpname[ll_j]
  843. ll_workgroupid_next = ds_update_acceptqty.Object.workgroupid[ll_j]
  844. UPDATE u_OrderMtrl_workgroup
  845. SET acceptqty = acceptqty - :wkpmx[i].qty
  846. WHERE orderid = :wkpmx[i].orderid
  847. AND scid = :wkpmx[i].orderscid
  848. AND wrkGrpid = :dworkgroupid
  849. AND owrkGrpid = :ll_owrkGrpid_next
  850. AND wkpname = :ls_wkpname_next
  851. AND workgroupid = :ll_workgroupid_next
  852. Using commit_transaction;
  853. IF commit_transaction.SQLCode <> 0 THEN
  854. arg_msg = '明细行:'+String(wkpmx[i].printid)+',更新物料:'+wkpmx[i].mtrlcode+'下工组调入数量失败,原因:'+commit_transaction.SQLErrText
  855. rslt = 0
  856. GOTO ext
  857. END IF
  858. NEXT
  859. END IF
  860. If (billtype = 0 Or billtype = 2 ) And wkpmx[i].planid > 0 THEN
  861. IF uo_oplan.addmxcmpl(wkpmx[i].planscid,wkpmx[i].planid,wkpmx[i].planprintid,0 - wkpmx[i].qty,arg_msg,False) = 0 THEN
  862. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  863. rslt = 0
  864. GOTO ext
  865. END IF
  866. IF uo_oplan.tryfinish(wkpmx[i].planscid,wkpmx[i].planid,arg_msg,False) = 0 THEN
  867. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  868. rslt = 0
  869. GOTO ext
  870. END IF
  871. END IF
  872. IF uo_jd.uof_order_add_wrk_jd(scid,wkpmx[i].orderid,arg_msg,False) = 0 THEN
  873. arg_msg = '明细行:'+String(wkpmx[i].printid)+','+arg_msg
  874. rslt = 0
  875. GOTO ext
  876. END IF
  877. NEXT
  878. //撤审删除损耗进仓单
  879. IF rellossid > 0 THEN
  880. IF uo_loss_in.getinfo(rellossscid,rellossid,arg_msg) = 0 THEN
  881. rslt = 0
  882. GOTO ext
  883. END IF
  884. IF uo_loss_in.c_auditing(False,arg_msg) = 0 THEN
  885. rslt = 0
  886. GOTO ext
  887. END IF
  888. IF uo_loss_in.del(rellossscid,rellossid,arg_msg,False) = 0 THEN
  889. rslt = 0
  890. GOTO ext
  891. END IF
  892. END IF
  893. flag = 0
  894. ext:
  895. IF rslt = 0 THEN
  896. ROLLBACK Using commit_transaction;
  897. ELSEIF rslt = 1 And arg_ifcommit THEN
  898. COMMIT Using commit_transaction;
  899. END IF
  900. Destroy uo_oplan
  901. Destroy uo_jd
  902. Destroy uo_loss_in
  903. Destroy ds_update_acceptqty
  904. RETURN rslt
  905. end function
  906. public function integer p_reset ();//int p_reset()
  907. //清除对象及其明细
  908. billid=0
  909. billcode=''
  910. opemp=''
  911. auditrep=''
  912. flag=0
  913. scid = 0
  914. relcode=''
  915. sworkgroupid = 0
  916. dworkgroupid = 0
  917. dscrp = ''
  918. relcpscid = 0
  919. relcpid = 0
  920. rellossscid = 0
  921. rellossid = 0
  922. it_newbegin=false
  923. it_updatebegin=false
  924. //清除明细
  925. p_clearmx()
  926. return 1
  927. end function
  928. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  929. //0 fail 1 success
  930. int rslt=1
  931. arg_newdescppart=trim(arg_newdescppart)
  932. if it_updatebegin or it_newbegin then
  933. rslt=0
  934. arg_msg="编辑状态下不可用"
  935. goto ext
  936. end if
  937. if arg_newdescppart='' then
  938. rslt=0
  939. arg_msg="要添加内容为空,操作取消"
  940. goto ext
  941. end if
  942. rslt=p_getinfo(arg_billid,arg_msg)
  943. if rslt=0 then goto ext
  944. if flag=0 then
  945. rslt=0
  946. arg_msg="非审核状态下不可用"
  947. goto ext
  948. end if
  949. update u_orderworkgroup_num
  950. set dscrp = dscrp+' '+:arg_newdescppart
  951. where u_orderworkgroup_num.billid = :arg_billid using commit_transaction;
  952. if commit_transaction.sqlcode<>0 then
  953. rollback using commit_transaction;
  954. rslt=0
  955. arg_msg="因网络或其它原因导致添加单据备注操作失败"+"~n"+commit_transaction.sqlerrtext
  956. goto ext
  957. end if
  958. commit using commit_transaction;
  959. dscrp = dscrp+' '+arg_newdescppart
  960. ext: return (rslt)
  961. end function
  962. public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  963. IF arg_billid <= 0 THEN
  964. rslt = 0
  965. arG_MSG = "非法单据唯一码"
  966. GOTO ext
  967. END IF
  968. SELECT billcode,
  969. relcode,
  970. sworkgroupid,
  971. dworkgroupid,
  972. flag,
  973. secflag,
  974. dscrp,
  975. billdate,
  976. relcpscid,
  977. relcpid,
  978. relcpcode,
  979. relrep,
  980. billtype,
  981. scid,
  982. rellossscid,
  983. rellossid
  984. INTO :billcode,
  985. :relcode,
  986. :sworkgroupid,
  987. :dworkgroupid,
  988. :flag,
  989. :secflag,
  990. :dscrp,
  991. :billdate,
  992. :relcpscid,
  993. :relcpid,
  994. :relcpcode,
  995. :relrep,
  996. :billtype,
  997. :scid,
  998. :rellossscid,
  999. :rellossid
  1000. FROM u_orderworkgroup_num
  1001. WHERE u_orderworkgroup_num.billid = :arg_billid
  1002. USING commit_transaction;
  1003. IF commit_transaction.SQLCode <> 0 THEN
  1004. rslt = 0
  1005. arG_MSG = "查询操作失败(错误单据唯一码)"+commit_transaction.SQLErrText
  1006. GOTO ext
  1007. END IF
  1008. billid = arg_billid
  1009. ext:
  1010. IF rslt = 0 THEN p_reset()
  1011. RETURN rslt
  1012. end function
  1013. public function integer updatebegin (long arg_billid, ref string arg_msg);Long rslt = 1
  1014. IF uo_option_ml_wkp = -1000 THEN
  1015. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1016. rslt = 0
  1017. GOTO ext
  1018. END IF
  1019. IF uo_option_ml_wkp = 1 THEN
  1020. arg_msg = '系统已设置为生产计划直接确认车间完成'
  1021. rslt = 0
  1022. GOTO ext
  1023. END IF
  1024. IF arg_billid <= 0 THEN
  1025. rslt = 0
  1026. GOTO ext
  1027. END IF
  1028. rslt = p_getinfo(arg_billid,arg_msg)
  1029. IF rslt = 0 THEN GOTO ext
  1030. IF flag = 1 THEN
  1031. rslt = 0
  1032. arg_msg = '单据已经审核,不可以修改'
  1033. GOTO ext
  1034. END IF
  1035. billid = arg_billid
  1036. it_newbegin = False
  1037. it_updatebegin = True
  1038. p_clearmx() //清除明细
  1039. ext:
  1040. IF rslt = 0 THEN p_reset()
  1041. RETURN rslt
  1042. end function
  1043. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1044. IF uo_option_ml_wkp = -1000 THEN
  1045. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1046. rslt = 0
  1047. GOTO ext
  1048. END IF
  1049. IF uo_option_ml_wkp = 1 THEN
  1050. arg_msg = '系统已设置为生产计划直接确认车间完成'
  1051. rslt = 0
  1052. GOTO ext
  1053. END IF
  1054. IF arg_billid <= 0 THEN
  1055. rslt = 0
  1056. arg_msg = "没有删除对象,操作取消"
  1057. GOTO ext
  1058. END IF
  1059. rslt = p_getinfo(arg_billid,arg_msg)
  1060. IF rslt = 0 THEN GOTO ext
  1061. IF flag = 1 THEN
  1062. rslt = 0
  1063. arg_msg = "单据已经审核,不可以删除"
  1064. GOTO ext
  1065. END IF
  1066. DELETE FROM u_orderworkgroup_num
  1067. Where u_orderworkgroup_num.billid = :arg_billid USING commit_transaction;
  1068. IF commit_transaction.SQLCode <> 0 THEN
  1069. rslt = 0
  1070. arg_msg = "删除单据操作失败"+"~n"+commit_transaction.SQLErrText
  1071. GOTO ext
  1072. END IF
  1073. DELETE FROM u_orderworkgroup_nummx
  1074. Where u_orderworkgroup_nummx.billid = :arg_billid USING commit_transaction;
  1075. IF commit_transaction.SQLCode <> 0 THEN
  1076. rslt = 0
  1077. arg_msg = "删除单据明细操作失败"+"~n"+commit_transaction.SQLErrText
  1078. GOTO ext
  1079. END IF
  1080. it_newbegin = FALSE
  1081. it_updatebegin = FALSE
  1082. ext:
  1083. IF rslt = 0 THEN
  1084. ROLLBACK USING commit_transaction;
  1085. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1086. COMMIT USING commit_transaction;
  1087. END IF
  1088. p_reset()
  1089. RETURN rslt
  1090. end function
  1091. public function integer p_clearmx ();//int p_clearmx()
  1092. //清除明细
  1093. it_mxbt=0
  1094. return 1
  1095. end function
  1096. public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  1097. Long i = 1,no_mxcheck = 0
  1098. IF arg_billid <= 0 THEN
  1099. rslt = 0
  1100. arg_msg = "非法单据唯一码"
  1101. GOTO ext
  1102. END IF
  1103. rslt = p_getinfo(arg_billid,arg_msg)
  1104. IF rslt = 0 THEN GOTO ext
  1105. //用游标读取明细
  1106. DECLARE cur_wkpmx CURSOR FOR
  1107. SELECT u_orderworkgroup_nummx.printid,
  1108. u_orderworkgroup_nummx.mtrlid,
  1109. u_mtrldef.mtrlcode,
  1110. u_orderworkgroup_nummx.status,
  1111. u_orderworkgroup_nummx.qty,
  1112. u_orderworkgroup_nummx.orderid,
  1113. u_order_ml.ordercode,
  1114. u_orderworkgroup_nummx.mxdscrp,
  1115. u_orderworkgroup_nummx.wkpname,
  1116. u_orderworkgroup_nummx.orderscid,
  1117. u_orderworkgroup_nummx.woodcode,
  1118. u_orderworkgroup_nummx.pcode,
  1119. u_orderworkgroup_nummx.mtrlcuscode,
  1120. u_orderworkgroup_nummx.location,
  1121. u_orderworkgroup_nummx.waredscrp,
  1122. u_orderworkgroup_nummx.planscid,
  1123. u_orderworkgroup_nummx.planid,
  1124. u_orderworkgroup_nummx.planprintid,
  1125. u_orderworkgroup_nummx.uqty,
  1126. u_orderworkgroup_nummx.unit,
  1127. u_orderworkgroup_nummx.rate,
  1128. u_orderworkgroup_nummx.lossqty
  1129. FROM u_orderworkgroup_nummx INNER JOIN
  1130. u_mtrldef ON u_orderworkgroup_nummx.mtrlid = u_mtrldef.mtrlid INNER JOIN
  1131. u_Order_ml ON u_orderworkgroup_nummx.orderid = u_Order_ml.OrderID AND
  1132. u_orderworkgroup_nummx.orderscid = u_Order_ml.scid
  1133. WHERE u_orderworkgroup_nummx.billid = :arg_billid
  1134. USING commit_transaction;
  1135. OPEN cur_wkpmx;
  1136. FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid,
  1137. :wkpmx[i].mtrlcode,:wkpmx[i].status,:wkpmx[i].qty,
  1138. :wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp,
  1139. :wkpmx[i].wkpname,:wkpmx[i].orderscid,
  1140. :wkpmx[i].woodcode,:wkpmx[i].pcode,
  1141. :wkpmx[i].mtrlcuscode,:wkpmx[i].location,
  1142. :wkpmx[i].waredscrp,:wkpmx[i].planscid,
  1143. :wkpmx[i].planid,:wkpmx[i].planprintid,
  1144. :wkpmx[i].uqty,:wkpmx[i].unit,:wkpmx[i].rate,:wkpmx[i].lossqty;
  1145. DO WHILE commit_transaction.SQLCode = 0
  1146. i++
  1147. FETCH cur_wkpmx INTO :wkpmx[i].printid,:wkpmx[i].mtrlid,
  1148. :wkpmx[i].mtrlcode,:wkpmx[i].status,:wkpmx[i].qty,
  1149. :wkpmx[i].orderid,:wkpmx[i].ordercode,:wkpmx[i].mxdscrp,
  1150. :wkpmx[i].wkpname,:wkpmx[i].orderscid,
  1151. :wkpmx[i].woodcode,:wkpmx[i].pcode,
  1152. :wkpmx[i].mtrlcuscode,:wkpmx[i].location,
  1153. :wkpmx[i].waredscrp,:wkpmx[i].planscid,
  1154. :wkpmx[i].planid,:wkpmx[i].planprintid,
  1155. :wkpmx[i].uqty,:wkpmx[i].unit,:wkpmx[i].rate,:wkpmx[i].lossqty;
  1156. LOOP
  1157. CLOSE cur_wkpmx;
  1158. //检验明细是否读入完整
  1159. SELECT count(*) INTO :no_mxcheck
  1160. FROM u_orderworkgroup_nummx
  1161. WHERE u_orderworkgroup_nummx.billid = :arg_billid
  1162. USING commit_transaction;
  1163. IF commit_transaction.SQLCode <> 0 THEN
  1164. rslt = 0
  1165. arg_msg = "查询操作失败,单据明细数量"
  1166. GOTO ext
  1167. END IF
  1168. IF i <> (no_mxcheck+1) THEN
  1169. rslt = 0
  1170. arg_msg = "查询操作失败,单据明细"
  1171. GOTO ext
  1172. END IF
  1173. billid = arg_billid
  1174. it_mxbt = i - 1
  1175. it_newbegin = FALSE
  1176. it_updatebegin = FALSE
  1177. ext:
  1178. IF rslt = 0 THEN p_reset()
  1179. RETURN rslt
  1180. end function
  1181. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  1182. Long ll_wrkGrpid
  1183. uo_inware_cp uo_cp
  1184. uo_cp = CREATE uo_inware_cp
  1185. uo_cp.commit_transaction = commit_transaction
  1186. uo_cp.if_getid_ture = FALSE
  1187. IF uo_option_ml_wkp = -1000 THEN
  1188. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1189. rslt = 0
  1190. GOTO ext
  1191. END IF
  1192. IF uo_option_orderworkgroup_num_cp = -1000 THEN
  1193. arg_msg = '选项:[210]工组完工单使用仓库审,读取初始默认值失败,操作取消!'
  1194. rslt = 0
  1195. GOTO ext
  1196. END IF
  1197. IF uo_option_taskplancode = -1000 THEN
  1198. arg_msg = '选项:[048]销售订单生产批号类型,读取初始默认值失败,操作取消!'
  1199. rslt = 0
  1200. GOTO ext
  1201. END IF
  1202. IF uo_option_ml_wkp = 1 THEN
  1203. arg_msg = '系统已设置为生产计划直接确认车间完成'
  1204. rslt = 0
  1205. GOTO ext
  1206. END IF
  1207. if uo_option_orderworkgroup_num_cp = 0 then
  1208. arg_msg = '系统已设置为工组完工单不使用仓库审'
  1209. rslt = 0
  1210. GOTO ext
  1211. END IF
  1212. IF billid = 0 THEN
  1213. rslt = 0
  1214. arg_msg = "没有审核对象"
  1215. GOTO ext
  1216. END IF
  1217. IF it_newbegin OR it_updatebegin THEN
  1218. rslt = 0
  1219. arg_msg = "编辑状态下不可以执行审核"
  1220. GOTO ext
  1221. END IF
  1222. IF flag = 0 THEN
  1223. rslt = 0
  1224. arg_msg = "单据还未审核"
  1225. GOTO ext
  1226. END IF
  1227. IF secflag = 1 THEN
  1228. rslt = 0
  1229. arg_msg = "单据已仓库审核"
  1230. GOTO ext
  1231. END IF
  1232. UPDATE u_orderworkgroup_num
  1233. SET secauditemp = :publ_operator,
  1234. secauditdate = getdate(),
  1235. secflag = 1
  1236. WHERE u_orderworkgroup_num.billid = :billid
  1237. AND flag = 1 AND secflag = 0 USING commit_transaction;
  1238. IF commit_transaction.SQLCode <> 0 THEN
  1239. rslt = 0
  1240. arg_msg = "因网络或其它原因导致仓库审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1241. GOTO ext
  1242. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1243. rslt = 0
  1244. arg_msg = "单据正在仓库审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1245. GOTO ext
  1246. END IF
  1247. //查调出工组所属车间
  1248. SELECT u_sc_workgroup.storageid
  1249. INTO :ll_wrkGrpid
  1250. FROM u_sc_workgroup
  1251. WHERE u_sc_workgroup.wrkGrpid = :sworkgroupid
  1252. USING commit_transaction;
  1253. IF commit_transaction.SQLCode <> 0 THEN
  1254. rslt = 0
  1255. arg_msg = "查询调出工组所属车间资料失败,"+commit_transaction.SQLErrText
  1256. GOTO ext
  1257. END IF
  1258. IF ll_wrkGrpid = 0 THEN
  1259. rslt = 0
  1260. arg_msg = "调出工组未设所属车间资料,请检查"
  1261. GOTO ext
  1262. END IF
  1263. //建成品进仓单
  1264. Long ll_relcpid,ll_scid,ll_storageid
  1265. String ls_relcpcode
  1266. SELECT u_storage.storageid,
  1267. u_storage.scid
  1268. INTO :ll_storageid,:ll_scid
  1269. FROM u_storage
  1270. WHERE u_storage.storageid = :dworkgroupid
  1271. USING commit_transaction;
  1272. IF commit_transaction.SQLCode <> 0 THEN
  1273. rslt = 0
  1274. arg_msg = "查询调入仓库资料失败,"+commit_transaction.SQLErrText
  1275. GOTO ext
  1276. END IF
  1277. IF uo_cp.newbegin(ll_scid,3,arg_msg) = 0 THEN
  1278. rslt = 0
  1279. GOTO ext
  1280. END IF
  1281. uo_cp.indate = billdate
  1282. uo_cp.inrep = relrep
  1283. uo_cp.part = billcode
  1284. uo_cp.storageid = ll_storageid
  1285. uo_cp.relid = ll_wrkGrpid
  1286. FOR i = 1 TO it_mxbt
  1287. IF wkpmx[i].mtrlid > 0 THEN
  1288. String ls_mtrlcode,ls_unit
  1289. String ls_taskrelcode,ls_plancode
  1290. Decimal ls_planprice
  1291. Long ll_cusid
  1292. SELECT u_mtrldef.mtrlcode,
  1293. u_mtrldef.unit,
  1294. u_order_ml.taskrelcode
  1295. INTO :ls_mtrlcode,
  1296. :ls_unit,
  1297. :ls_taskrelcode
  1298. FROM u_mtrldef,u_order_ml
  1299. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  1300. AND u_order_ml.scid = :wkpmx[i].orderscid
  1301. AND u_order_ml.orderid = :wkpmx[i].orderid
  1302. USING commit_transaction;
  1303. IF commit_transaction.SQLCode <> 0 THEN
  1304. rslt = 0
  1305. arg_msg = "查询计划资料失败,"+commit_transaction.SQLErrText
  1306. GOTO ext
  1307. END IF
  1308. IF uo_option_taskplancode = 1 THEN
  1309. ls_plancode = ls_taskrelcode
  1310. ELSE
  1311. ls_plancode = ''
  1312. END IF
  1313. f_get_planprice_mtrl(wkpmx[i].mtrlid,wkpmx[i].status,wkpmx[i].woodcode,wkpmx[i].pcode,ls_planprice)
  1314. SELECT u_order_ml.cusid
  1315. INTO :ll_cusid
  1316. FROM u_order_ml
  1317. WHERE u_order_ml.scid = :wkpmx[i].orderscid
  1318. AND u_order_ml.orderid = :wkpmx[i].orderid
  1319. USING commit_transaction;
  1320. IF commit_transaction.SQLCode = -1 THEN
  1321. rslt = 0
  1322. arg_msg = "查询计划资料(客户)失败"
  1323. GOTO ext
  1324. ELSEIF commit_transaction.SQLCode = 100 THEN
  1325. ll_cusid = 0
  1326. END IF
  1327. IF IsNull(ll_cusid) THEN ll_cusid = 0
  1328. IF uo_cp.acceptmx(wkpmx[i].printid,&
  1329. wkpmx[i].mtrlid,&
  1330. ls_mtrlcode,&
  1331. ls_plancode,&
  1332. wkpmx[i].status,&
  1333. wkpmx[i].uqty,&
  1334. ls_planprice,&
  1335. 1,&
  1336. '',&
  1337. arg_msg,&
  1338. 0,&
  1339. wkpmx[i].orderid,&
  1340. 1,&
  1341. wkpmx[i].woodcode,&
  1342. wkpmx[i].pcode,&
  1343. ll_cusid,&
  1344. wkpmx[i].unit,&
  1345. wkpmx[i].rate,wkpmx[i].qty,0,0,'',wkpmx[i].waredscrp,0,0,&
  1346. wkpmx[i].mtrlcuscode,&
  1347. wkpmx[i].Location,&
  1348. wkpmx[i].qty,0) = 0 THEN
  1349. rslt = 0
  1350. GOTO ext
  1351. END IF
  1352. END IF
  1353. NEXT
  1354. IF uo_cp.Save(FALSE,arg_msg) = 0 THEN
  1355. rslt = 0
  1356. GOTO ext
  1357. END IF
  1358. IF uo_cp.getinfo(uo_cp.scid,uo_cp.inwareid,arg_msg) = 0 THEN
  1359. rslt = 0
  1360. GOTO ext
  1361. END IF
  1362. IF uo_cp.auditing(FALSE,arg_msg) = 0 THEN
  1363. rslt = 0
  1364. GOTO ext
  1365. END IF
  1366. ll_relcpid = uo_cp.inwareid
  1367. ls_relcpcode = uo_cp.inwarecode
  1368. UPDATE u_orderworkgroup_num
  1369. SET relcpid = :ll_relcpid,
  1370. relcpscid = :ll_scid,
  1371. relcpcode = :ls_relcpcode
  1372. WHERE u_orderworkgroup_num.billid = :billid
  1373. USING commit_transaction;
  1374. IF commit_transaction.SQLCode <> 0 THEN
  1375. rslt = 0
  1376. arg_msg = "因网络或其它原因导致更新单据相关成品进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText
  1377. GOTO ext
  1378. END IF
  1379. secflag = 1
  1380. ext:
  1381. DESTROY uo_cp
  1382. IF rslt = 0 THEN
  1383. ROLLBACK USING commit_transaction;
  1384. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1385. COMMIT USING commit_transaction;
  1386. END IF
  1387. RETURN rslt
  1388. end function
  1389. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0
  1390. DateTime null_dt
  1391. SetNull(null_dt)
  1392. uo_inware_cp uo_cp
  1393. uo_cp = Create uo_inware_cp
  1394. uo_cp.commit_transaction = commit_transaction
  1395. IF uo_option_ml_wkp = -1000 THEN
  1396. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1397. rslt = 0
  1398. GOTO ext
  1399. END IF
  1400. IF uo_option_ml_wkp = 1 THEN
  1401. arg_msg = '系统已设置为生产计划直接确认车间完成'
  1402. rslt = 0
  1403. GOTO ext
  1404. END IF
  1405. IF billid = 0 THEN
  1406. rslt = 0
  1407. arg_msg = "没有审核对象"
  1408. GOTO ext
  1409. END IF
  1410. IF it_newbegin Or it_updatebegin THEN
  1411. rslt = 0
  1412. arg_msg = "编辑状态下不可以执行审核"
  1413. GOTO ext
  1414. END IF
  1415. IF secflag = 0 THEN
  1416. rslt = 0
  1417. arg_msg = "单据还未仓审"
  1418. GOTO ext
  1419. END IF
  1420. UPDATE u_orderworkgroup_num
  1421. SET secauditemp = '',
  1422. secauditdate = :null_dt,
  1423. secflag = 0
  1424. WHERE u_orderworkgroup_num.billid = :billid
  1425. And flag = 1 And secflag = 1 Using commit_transaction;
  1426. IF commit_transaction.SQLCode <> 0 THEN
  1427. rslt = 0
  1428. arg_msg = "因网络或其它原因导致仓审撤审单据操作失败"+"~n"+commit_transaction.SQLErrText
  1429. GOTO ext
  1430. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1431. rslt = 0
  1432. arg_msg = "单据正在仓审撤审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1433. GOTO ext
  1434. END IF
  1435. //撤审删除成品进仓单
  1436. cnt = 0
  1437. SELECT count(*) INTO :cnt
  1438. FROM u_inware
  1439. WHERE scid = :relcpscid
  1440. And inwareid = :relcpid;
  1441. IF sqlca.SQLCode <> 0 THEN
  1442. arg_msg = '查询相关生产进仓单是否存在失败,'+sqlca.SQLErrText
  1443. rslt = 0
  1444. GOTO ext
  1445. END IF
  1446. IF cnt > 1 THEN
  1447. arg_msg = '相关生产进仓单数目错误,操作取消'
  1448. rslt = 0
  1449. GOTO ext
  1450. END IF
  1451. IF cnt = 1 THEN
  1452. IF uo_cp.getinfo(relcpscid,relcpid,arg_msg) = 0 THEN
  1453. rslt = 0
  1454. GOTO ext
  1455. END IF
  1456. IF uo_cp.c_auditing(False,arg_msg) = 0 THEN
  1457. rslt = 0
  1458. GOTO ext
  1459. END IF
  1460. IF uo_cp.del(relcpscid,relcpid,arg_msg,False) = 0 THEN
  1461. rslt = 0
  1462. GOTO ext
  1463. END IF
  1464. END IF
  1465. UPDATE u_orderworkgroup_num
  1466. SET relcpid = 0,
  1467. relcpscid = 0,
  1468. relcpcode = ''
  1469. WHERE u_orderworkgroup_num.billid = :billid
  1470. Using commit_transaction;
  1471. IF commit_transaction.SQLCode <> 0 THEN
  1472. rslt = 0
  1473. arg_msg = "因网络或其它原因导致更新单据相关成品进仓单资料操作失败"+"~n"+commit_transaction.SQLErrText
  1474. GOTO ext
  1475. END IF
  1476. secflag = 0
  1477. ext:
  1478. Destroy uo_cp
  1479. IF rslt = 0 THEN
  1480. ROLLBACK Using commit_transaction;
  1481. ELSEIF rslt = 1 And arg_ifcommit THEN
  1482. COMMIT Using commit_transaction;
  1483. END IF
  1484. RETURN rslt
  1485. end function
  1486. public function integer newbegin (ref string arg_msg);Int rslt = 1
  1487. IF uo_option_ml_wkp = -1000 THEN
  1488. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1489. rslt = 0
  1490. GOTO ext
  1491. END IF
  1492. IF uo_option_ml_wkp = 1 THEN
  1493. arg_msg = '系统已设置为生产计划直接确认车间完成'
  1494. rslt = 0
  1495. GOTO ext
  1496. END IF
  1497. p_reset()
  1498. it_newbegin = TRUE
  1499. it_updatebegin = FALSE
  1500. ext:
  1501. RETURN rslt
  1502. end function
  1503. public function integer uof_finish_wkp (long arg_scid, long arg_orderid, string arg_wkpname, long arg_wrkgrpid, long arg_owrkgrpid, integer arg_type, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1504. Int li_finishflag
  1505. DateTime null_dt
  1506. SetNull(null_dt)
  1507. IF uo_option_ml_wkp = -1000 THEN
  1508. arg_msg = '选项:[047]生产计划直接确认车间或工序完成,读取初始默认值失败,操作取消!'
  1509. rslt = 0
  1510. GOTO ext
  1511. END IF
  1512. IF uo_option_ml_wkp = 0 THEN
  1513. arg_msg = '系统没有设置为直接确认生产计划车间完成'
  1514. rslt = 0
  1515. GOTO ext
  1516. END IF
  1517. SELECT finishflag INTO :li_finishflag
  1518. FROM u_OrderMtrl_workgroup
  1519. WHERE scid = :arg_scid
  1520. AND orderid = :arg_orderid
  1521. AND wkpname = :arg_wkpname
  1522. AND wrkGrpid = :arg_wrkGrpid
  1523. AND owrkGrpid = :arg_owrkGrpid;
  1524. IF sqlca.SQLCode <> 0 THEN
  1525. arg_msg = '查询车间完成标记失败,'+sqlca.SQLErrText
  1526. rslt = 0
  1527. GOTO ext
  1528. END IF
  1529. IF arg_type = 0 THEN
  1530. IF li_finishflag = 1 THEN
  1531. arg_msg = '车间已确认,不能再确认'
  1532. rslt = 0
  1533. GOTO ext
  1534. END IF
  1535. UPDATE u_OrderMtrl_workgroup
  1536. SET finishflag = 1,
  1537. finishdate = getdate(),
  1538. finishqty = orderqty
  1539. WHERE scid = :arg_scid
  1540. AND orderid = :arg_orderid
  1541. AND wkpname = :arg_wkpname
  1542. AND wrkGrpid = :arg_wrkGrpid
  1543. AND owrkGrpid = :arg_owrkGrpid
  1544. AND finishflag = 0;
  1545. IF sqlca.SQLCode <> 0 THEN
  1546. arg_msg = '确认车间完成失败,'+sqlca.SQLErrText
  1547. rslt = 0
  1548. GOTO ext
  1549. END IF
  1550. ELSE
  1551. IF li_finishflag = 0 THEN
  1552. arg_msg = '车间还未确认,不能取消确认'
  1553. rslt = 0
  1554. GOTO ext
  1555. END IF
  1556. UPDATE u_OrderMtrl_workgroup
  1557. SET finishflag = 0,
  1558. finishdate = :null_dt,
  1559. finishqty = 0
  1560. WHERE scid = :arg_scid
  1561. AND orderid = :arg_orderid
  1562. AND wkpname = :arg_wkpname
  1563. AND wrkGrpid = :arg_wrkGrpid
  1564. AND owrkGrpid = :arg_owrkGrpid
  1565. AND finishflag = 1;
  1566. IF sqlca.SQLCode <> 0 THEN
  1567. arg_msg = '取消确认车间完成失败,'+sqlca.SQLErrText
  1568. rslt = 0
  1569. GOTO ext
  1570. END IF
  1571. END IF
  1572. ext:
  1573. IF rslt = 0 THEN
  1574. ROLLBACK;
  1575. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1576. COMMIT;
  1577. END IF
  1578. RETURN rslt
  1579. end function
  1580. public function integer add_mxdscrp (long arg_billid, long arg_printid, string arg_newdescppart, ref string arg_msg);//add_dscrp(string arg_newdescppart)
  1581. //0 fail 1 success
  1582. Int rslt = 1
  1583. arg_newdescppart = Trim(arg_newdescppart)
  1584. IF it_updatebegin OR it_newbegin THEN
  1585. rslt = 0
  1586. arg_msg = "编辑状态下不可用"
  1587. GOTO ext
  1588. END IF
  1589. IF arg_newdescppart = '' THEN
  1590. rslt = 0
  1591. arg_msg = "要添加内容为空,操作取消"
  1592. GOTO ext
  1593. END IF
  1594. rslt = p_getinfo(arg_billid,arg_msg)
  1595. IF rslt = 0 THEN GOTO ext
  1596. IF flag = 0 THEN
  1597. rslt = 0
  1598. arg_msg = "非审核状态下不可用"
  1599. GOTO ext
  1600. END IF
  1601. UPDATE u_orderworkgroup_nummx
  1602. SET mxdscrp = ltrim(rtrim(mxdscrp))+' '+:arg_newdescppart
  1603. WHERE u_orderworkgroup_nummx.billid = :arg_billid
  1604. AND u_orderworkgroup_nummx.printid = :arg_printid USING commit_transaction;
  1605. IF commit_transaction.SQLCode <> 0 THEN
  1606. ROLLBACK USING commit_transaction;
  1607. rslt = 0
  1608. arg_msg = "因网络或其它原因导致添加明细备注操作失败"+"~n"+commit_transaction.SQLErrText
  1609. GOTO ext
  1610. END IF
  1611. COMMIT USING commit_transaction;
  1612. ext:
  1613. Return (rslt)
  1614. end function
  1615. public function integer acceptmx (long arg_printid, long arg_orderscid, long arg_orderid, string arg_ordercode, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, string arg_mxdscrp, string arg_wkpname, string arg_mtrlcuscode, string arg_location, string arg_waredscrp, long arg_planscid, long arg_planid, long arg_planprintid, decimal arg_uqty, string arg_unit, decimal arg_rate, decimal arg_lossqty, ref string arg_msg);Int rslt = 1
  1616. Long cnt = 0,ls_i
  1617. String ls_swkpname,ls_owkpname,ls_oplancode
  1618. Decimal ld_Qty_oplan_notfinish,ld_Qty_oplan_notaudit
  1619. Decimal ld_qty_owkp_notfinish,ld_Qty_owkp_notaudit
  1620. Decimal ld_uprate
  1621. IF it_newbegin = False And it_updatebegin = False THEN
  1622. rslt = 0
  1623. arg_msg = "非编辑状态不可以使用,操作取消"
  1624. GOTO ext
  1625. END IF
  1626. //清除空值
  1627. IF IsNull(arg_printid) THEN arg_printid = 0
  1628. IF IsNull(arg_orderscid) THEN arg_orderscid = 0
  1629. IF IsNull(arg_orderid) THEN arg_orderid = 0
  1630. IF IsNull(arg_ordercode) THEN arg_ordercode = ''
  1631. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1632. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  1633. IF IsNull(arg_wkpname) THEN arg_wkpname = ''
  1634. IF IsNull(arg_status) THEN arg_status = ''
  1635. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1636. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1637. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  1638. IF IsNull(arg_location) THEN arg_location = ''
  1639. IF IsNull(arg_qty) THEN arg_qty = 0
  1640. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  1641. IF IsNull(arg_waredscrp) THEN arg_waredscrp = ''
  1642. IF IsNull(arg_planid) THEN arg_planid = 0
  1643. IF IsNull(arg_planprintid) THEN arg_planprintid = 0
  1644. IF IsNull(arg_planscid) THEN arg_planscid = 0
  1645. IF IsNull(arg_uqty) THEN arg_uqty = 0
  1646. IF IsNull(arg_unit) THEN arg_unit = ''
  1647. IF IsNull(arg_rate) THEN arg_rate = 1
  1648. IF arg_rate = 0 THEN arg_rate = 1
  1649. // 如果数量为 0则不作任何处理
  1650. IF arg_qty = 0 THEN
  1651. rslt = 1
  1652. GOTO ext
  1653. END IF
  1654. //检查物料id
  1655. SELECT count(*)
  1656. INTO :cnt
  1657. FROM u_order_ml
  1658. WHERE mtrlid = :arg_mtrlid
  1659. AND orderid = :arg_orderid
  1660. And scid = :sys_scid Using commit_transaction ;
  1661. IF commit_transaction.SQLCode <> 0 THEN
  1662. rslt = 0
  1663. arg_msg = '明细行:'+String(arg_printid)+",查询生产计划操作失败,编号:"+arg_mtrlcode
  1664. GOTO ext
  1665. END IF
  1666. //检查工组
  1667. SELECT wrkGrpName INTO :ls_swkpname
  1668. FROM u_sc_workgroup
  1669. Where wrkGrpid = :sworkgroupid;
  1670. IF sqlca.SQLCode <> 0 THEN
  1671. arg_msg = '明细行:'+String(arg_printid)+',查询调出工组名称失败,'+sqlca.SQLErrText
  1672. rslt = 0
  1673. GOTO ext
  1674. END IF
  1675. IF billtype = 0 THEN
  1676. SELECT wrkGrpName INTO :ls_owkpname
  1677. FROM u_sc_workgroup
  1678. Where wrkGrpid = :dworkgroupid;
  1679. IF sqlca.SQLCode <> 0 THEN
  1680. arg_msg = '明细行:'+String(arg_printid)+',查询调入工组名称失败,'+sqlca.SQLErrText
  1681. rslt = 0
  1682. GOTO ext
  1683. END IF
  1684. END IF
  1685. IF billtype = 0 Or billtype = 2 THEN
  1686. IF arg_planid > 0 THEN
  1687. SELECT oplancode INTO :ls_oplancode
  1688. FROM u_order_plan
  1689. WHERE scid = :arg_planscid
  1690. And oplanid = :arg_planid;
  1691. IF sqlca.SQLCode <> 0 THEN
  1692. arg_msg = '明细行:'+String(arg_printid)+',查询派工单号失败,'+sqlca.SQLErrText
  1693. rslt = 0
  1694. GOTO ext
  1695. END IF
  1696. //检查已开单数
  1697. SELECT u_order_planmx.qty - u_order_planmx.fqty,
  1698. u_order_planmx.uprate
  1699. INTO :ld_Qty_oplan_notfinish,:ld_uprate
  1700. FROM u_order_planmx
  1701. WHERE u_order_planmx.scid = :arg_orderscid
  1702. AND u_order_planmx.oplanid = :arg_planid
  1703. AND u_order_planmx.printid = :arg_planprintid
  1704. Using commit_transaction;
  1705. IF commit_transaction.SQLCode <> 0 THEN
  1706. arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',查询未完数失败,'+commit_transaction.SQLErrText
  1707. rslt = 0
  1708. GOTO ext
  1709. END IF
  1710. SELECT isnull(sum(u_orderworkgroup_nummx.qty),0) INTO :ld_Qty_oplan_notaudit
  1711. FROM u_orderworkgroup_num,u_orderworkgroup_nummx
  1712. WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid
  1713. AND u_orderworkgroup_nummx.orderscid = :arg_orderscid
  1714. AND u_orderworkgroup_nummx.planid = :arg_planid
  1715. AND u_orderworkgroup_nummx.planprintid = :arg_planprintid
  1716. AND u_orderworkgroup_num.flag = 0
  1717. AND u_orderworkgroup_num.billid <> :billid
  1718. Using commit_transaction;
  1719. IF commit_transaction.SQLCode <> 0 THEN
  1720. arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',查询工组交接单已开单未审数失败,'+commit_transaction.SQLErrText
  1721. rslt = 0
  1722. GOTO ext
  1723. END IF
  1724. IF (ld_Qty_oplan_notfinish - ld_Qty_oplan_notaudit) * (1+ld_uprate) < arg_qty THEN
  1725. arg_msg = '明细行:'+String(arg_printid)+',工组派工单:'+ls_oplancode+',未完成数:'+String(ld_Qty_oplan_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_oplan_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########')
  1726. rslt = 0
  1727. GOTO ext
  1728. END IF
  1729. ELSE
  1730. arg_planscid = 0
  1731. arg_planprintid = 0
  1732. ls_oplancode = ''
  1733. END IF
  1734. END IF
  1735. IF billtype = 0 THEN
  1736. SELECT u_OrderMtrl_workgroup.orderqty - u_OrderMtrl_workgroup.finishqty - u_OrderMtrl_workgroup.stopqty,
  1737. u_OrderMtrl_workgroup.uprate
  1738. INTO :ld_qty_owkp_notfinish,:ld_uprate
  1739. FROM u_OrderMtrl_workgroup
  1740. WHERE u_OrderMtrl_workgroup.wrkGrpid = :sworkgroupid
  1741. AND u_OrderMtrl_workgroup.owrkGrpid = :dworkgroupid
  1742. AND u_OrderMtrl_workgroup.orderid = :arg_orderid
  1743. AND u_OrderMtrl_workgroup.scid = :arg_orderscid
  1744. AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname
  1745. Using commit_transaction;
  1746. IF commit_transaction.SQLCode <> 0 THEN
  1747. rslt = 0
  1748. arg_msg = "查询工组进度未完成数失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode+','+commit_transaction.sqlerrtext
  1749. GOTO ext
  1750. END IF
  1751. SELECT isnull(sum(u_orderworkgroup_nummx.qty),0)
  1752. INTO :ld_Qty_owkp_notaudit
  1753. FROM u_orderworkgroup_num,u_orderworkgroup_nummx
  1754. WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid
  1755. AND u_orderworkgroup_nummx.orderscid = :arg_orderscid
  1756. AND u_orderworkgroup_nummx.orderid = :arg_orderid
  1757. AND u_orderworkgroup_nummx.wkpname = :arg_wkpname
  1758. AND u_orderworkgroup_num.sworkgroupid = :sworkgroupid
  1759. AND u_orderworkgroup_num.dworkgroupid = :dworkgroupid
  1760. AND u_orderworkgroup_num.flag = 0
  1761. AND u_orderworkgroup_num.billtype = 0
  1762. AND u_orderworkgroup_num.billid <> :billid
  1763. Using commit_transaction;
  1764. IF commit_transaction.SQLCode <> 0 THEN
  1765. arg_msg = '明细行:'+String(arg_printid)+',查询工组交接单已开单未审数失败,'+commit_transaction.SQLErrText
  1766. rslt = 0
  1767. GOTO ext
  1768. END IF
  1769. IF (ld_qty_owkp_notfinish - ld_Qty_owkp_notaudit) * (1 + ld_uprate) < arg_qty THEN
  1770. arg_msg = '明细行:'+String(arg_printid)+',工组进度:'+ls_oplancode+',未完成数:'+String(ld_qty_owkp_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_owkp_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########')
  1771. rslt = 0
  1772. GOTO ext
  1773. END IF
  1774. ELSE
  1775. SELECT u_OrderMtrl_workgroup.orderqty - u_OrderMtrl_workgroup.finishqty - u_OrderMtrl_workgroup.stopqty,
  1776. u_OrderMtrl_workgroup.uprate
  1777. INTO :ld_qty_owkp_notfinish,:ld_uprate
  1778. FROM u_OrderMtrl_workgroup
  1779. WHERE u_OrderMtrl_workgroup.wrkGrpid = :sworkgroupid
  1780. AND u_OrderMtrl_workgroup.iflast = 1
  1781. AND u_OrderMtrl_workgroup.orderid = :arg_orderid
  1782. AND u_OrderMtrl_workgroup.scid = :arg_orderscid
  1783. AND u_OrderMtrl_workgroup.wkpname = :arg_wkpname
  1784. Using commit_transaction;
  1785. IF commit_transaction.SQLCode <> 0 THEN
  1786. rslt = 0
  1787. arg_msg = "查询工组进度未完成数失败,工组调拨,计划:"+arg_ordercode+",物料:"+arg_mtrlcode+','+commit_transaction.sqlerrtext
  1788. GOTO ext
  1789. END IF
  1790. SELECT isnull(sum(u_orderworkgroup_nummx.qty),0)
  1791. INTO :ld_Qty_owkp_notaudit
  1792. FROM u_orderworkgroup_num,u_orderworkgroup_nummx
  1793. WHERE u_orderworkgroup_num.billid = u_orderworkgroup_nummx.billid
  1794. AND u_orderworkgroup_nummx.orderscid = :arg_orderscid
  1795. AND u_orderworkgroup_nummx.orderid = :arg_orderid
  1796. AND u_orderworkgroup_nummx.wkpname = :arg_wkpname
  1797. AND u_orderworkgroup_num.sworkgroupid = :sworkgroupid
  1798. AND u_orderworkgroup_num.flag = 0
  1799. AND u_orderworkgroup_num.billtype = 2
  1800. AND u_orderworkgroup_num.billid <> :billid
  1801. Using commit_transaction;
  1802. IF commit_transaction.SQLCode <> 0 THEN
  1803. arg_msg = '明细行:'+String(arg_printid)+',查询工组完工单已开单未审数失败,'+commit_transaction.SQLErrText
  1804. rslt = 0
  1805. GOTO ext
  1806. END IF
  1807. IF (ld_qty_owkp_notfinish - ld_Qty_owkp_notaudit) * (1 + ld_uprate) < arg_qty THEN
  1808. arg_msg = '明细行:'+String(arg_printid)+',工组进度:'+ls_oplancode+',未完成数:'+String(ld_qty_owkp_notfinish,'#,#0.##########')+',已开单未审数:'+String(ld_Qty_owkp_notaudit,'#,#0.##########')+',不能再开单:'+String(arg_qty,'#,#0.##########')+',允许超比例:'+String(ld_uprate,'#,#0.##########')
  1809. rslt = 0
  1810. GOTO ext
  1811. END IF
  1812. END IF
  1813. //写入内容
  1814. it_mxbt++
  1815. wkpmx[it_mxbt].printid = arg_printid
  1816. wkpmx[it_mxbt].orderid = arg_orderid
  1817. wkpmx[it_mxbt].orderscid = arg_orderscid
  1818. wkpmx[it_mxbt].ordercode = arg_ordercode
  1819. wkpmx[it_mxbt].mtrlid = arg_mtrlid
  1820. wkpmx[it_mxbt].mtrlcode = arg_mtrlcode
  1821. wkpmx[it_mxbt].status = arg_status
  1822. wkpmx[it_mxbt].woodcode = arg_woodcode
  1823. wkpmx[it_mxbt].pcode = arg_pcode
  1824. wkpmx[it_mxbt].wkpname = arg_wkpname
  1825. wkpmx[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  1826. wkpmx[it_mxbt].Location = arg_location
  1827. wkpmx[it_mxbt].qty = arg_qty
  1828. wkpmx[it_mxbt].mxdscrp = arg_mxdscrp
  1829. wkpmx[it_mxbt].waredscrp = arg_waredscrp
  1830. wkpmx[it_mxbt].planscid = arg_planscid
  1831. wkpmx[it_mxbt].planprintid = arg_planprintid
  1832. wkpmx[it_mxbt].planid = arg_planid
  1833. wkpmx[it_mxbt].oplancode = ls_oplancode
  1834. wkpmx[it_mxbt].uqty = arg_uqty
  1835. wkpmx[it_mxbt].lossqty = arg_lossqty
  1836. wkpmx[it_mxbt].rate = arg_rate
  1837. wkpmx[it_mxbt].unit = arg_unit
  1838. ext:
  1839. IF rslt = 0 THEN p_clearmx()
  1840. Return(rslt)
  1841. end function
  1842. on uo_workgroup_num.create
  1843. call super::create
  1844. TriggerEvent( this, "constructor" )
  1845. end on
  1846. on uo_workgroup_num.destroy
  1847. TriggerEvent( this, "destructor" )
  1848. call super::destroy
  1849. end on
  1850. event constructor;String arg_msg
  1851. String str_optionvalue
  1852. str_optionvalue = ''
  1853. f_get_sys_option_value('118',str_optionvalue,arg_msg)
  1854. uo_option_orderworkgroup_time = Long(str_optionvalue)
  1855. str_optionvalue = ''
  1856. f_get_sys_option_value('210',str_optionvalue,arg_msg)
  1857. uo_option_orderworkgroup_num_cp = Long(str_optionvalue)
  1858. str_optionvalue = ''
  1859. f_get_sys_option_value('047',str_optionvalue,arg_msg)
  1860. uo_option_ml_wkp = Long(str_optionvalue)
  1861. str_optionvalue = ''
  1862. f_get_sys_option_value('038',str_optionvalue,arg_msg)
  1863. uo_option_taskplancode = Long(str_optionvalue)
  1864. str_optionvalue = ''
  1865. f_get_sys_option_value('371',str_optionvalue,arg_msg)
  1866. uo_option_workgroup_num_check = Long(str_optionvalue)
  1867. end event