uo_mtrl_pf.sru 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966
  1. $PBExportHeader$uo_mtrl_pf.sru
  2. forward
  3. global type uo_mtrl_pf from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_mtrl_pf from nonvisualobject
  7. end type
  8. global uo_mtrl_pf uo_mtrl_pf
  9. type variables
  10. Long deep_count = 0
  11. Long il_printid
  12. Int ii_ifautop
  13. //uo_option_bom_affirm
  14. int uo_option_check_mtrl_pf,uo_option_packpro2_pf_pack2_useifover
  15. //int sys_option_produce_dec
  16. //string sys_option_change_status,sys_option_change_woodcode,sys_option_change_pcode
  17. end variables
  18. forward prototypes
  19. public function integer uof_audit (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer uof_delpflist (long arg_mtrlid, string arg_pfcode, boolean arg_ifcommit, ref string arg_msg)
  21. public function integer uof_setdi (long arg_mtrlid, string arg_pfcode, integer arg_di, boolean arg_ifcommit, ref string arg_msg)
  22. public function integer uof_setdft (long arg_mtrlid, string arg_pfcode, integer arg_dft, boolean arg_ifcommit, ref string arg_msg)
  23. public function integer f_clearprdpfmx (long arg_mtrlid, string arg_dpfcode, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer uof_del (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, string arg_sonpfcode, long arg_wrkgrpid, string arg_msg, boolean arg_ifcommit)
  25. public function integer uof_audit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg)
  26. public function integer uof_caudit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg)
  27. public function integer f_cmpprdpf (long arg_mtrlid, long arg_cmpmtrlid, string arg_dpfcode, string arg_pfcode, decimal arg_groupqty, decimal arg_qty, long arg_grade, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer uof_affirm (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer uof_affirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg)
  30. public function integer uof_caffirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg)
  31. public function integer uof_del_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer uof_add_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, long arg_printid, long arg_dymtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_scllloss, string arg_dscrp, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer uof_addpflist (long arg_mtrlid, string arg_pfcode, string arg_dscrp, integer arg_ifdi, integer arg_ifdft, integer arg_pftype, boolean arg_ifcommit, ref string arg_msg)
  34. public function integer uof_pzpf (long arg_mtrlid, string arg_pfcode, integer arg_ifpzpf, boolean arg_ifcommit, ref string arg_msg)
  35. public function integer uof_add_pf (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_sondecloss, string arg_dscrp, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, long arg_printid, string arg_pfgroupmode, string arg_promode, string arg_sonpfcode, integer arg_ifover, integer arg_mtrlkind, string arg_pfklmode, decimal arg_pfgroupqty, long arg_dipztype, decimal arg_scllloss, integer arg_dytype, decimal arg_advancetime, decimal arg_sclldecloss, decimal arg_baseqty, decimal arg_buyarg, string arg_sonlossstr, integer arg_scllqtytype, ref string arg_msg, boolean arg_ifcommit)
  36. public function integer uof_set_inuse (long arg_mtrlid, string arg_pfcode, integer arg_inuse, boolean arg_ifcommit, ref string arg_msg)
  37. public function integer uof_mod_pfcode (long arg_mtrlid, string arg_pfcode, string arg_pfcode_new, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit)
  38. end prototypes
  39. public function integer uof_audit (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  40. Int li_flag,li_affirmflag
  41. DateTime null_dt
  42. Long count
  43. s_pfmx ls_s_pfmx[]
  44. Long ll_i
  45. Long cnt
  46. Int li_ifpackpro
  47. //IF uo_option_bom_affirm = -1000 THEN
  48. // rslt = 0
  49. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  50. // GOTO ext
  51. //END IF
  52. IF uo_option_check_mtrl_pf = -1000 THEN
  53. rslt = 0
  54. arg_msg = '选项:[196]物料清单保存时检查下级清单是否已审核,读取初始默认值失败,操作取消!'
  55. GOTO ext
  56. END IF
  57. SetNull(null_dt)
  58. SELECT flag,affirmflag INTO :li_flag,:li_affirmflag
  59. FROM u_mtrl_pf
  60. WHERE mtrlid = :arg_mtrlid
  61. And pfcode = :arg_pfcode;
  62. IF sqlca.SQLCode <> 0 THEN
  63. rslt = 0
  64. arg_msg = '查询审核标记失败,'+sqlca.SQLErrText
  65. GOTO ext
  66. END IF
  67. IF arg_flag = 1 THEN
  68. // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN
  69. // rslt = 0
  70. // arg_msg = 'BOM资料没有确认,不能审核'
  71. // GOTO ext
  72. // END IF
  73. IF li_flag = 1 THEN
  74. rslt = 0
  75. arg_msg = 'BOM资料已经审核,不能再审'
  76. GOTO ext
  77. END IF
  78. SELECT ifpackpro Into :li_ifpackpro From u_mtrldef Where mtrlid = :arg_mtrlid;
  79. IF sqlca.SQLCode <> 0 THEN
  80. rslt = 0
  81. arg_msg = '查询物料资料是否包件产品失败,'+sqlca.SQLErrText
  82. GOTO ext
  83. END IF
  84. IF li_ifpackpro = 1 THEN
  85. cnt = 0
  86. SELECT count(*) INTO :cnt
  87. FROM u_PrdPF,u_mtrldef,u_mtrl_pf
  88. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  89. AND ( u_mtrl_pf.ifdi = 0 )
  90. AND ( u_mtrl_pf.ifdft = 1 )
  91. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  92. AND ( u_PrdPF.mtrlid = :arg_mtrlid )
  93. AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  94. And ( u_mtrldef.ifpack = 2 );
  95. IF sqlca.SQLCode <> 0 THEN
  96. arg_msg = '查询通用包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText
  97. rslt = 0
  98. GOTO ext
  99. END IF
  100. IF cnt > 0 THEN
  101. arg_msg = '通用包件产品下级有个性包件,操作取消,请检查物料清单'
  102. rslt = 0
  103. GOTO ext
  104. END IF
  105. END IF
  106. IF li_ifpackpro = 2 THEN
  107. cnt = 0
  108. SELECT count(*) INTO :cnt
  109. FROM u_PrdPF,u_mtrldef,u_mtrl_pf
  110. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  111. AND ( u_mtrl_pf.ifdi = 0 )
  112. AND ( u_mtrl_pf.ifdft = 1 )
  113. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  114. AND ( u_PrdPF.mtrlid = :arg_mtrlid )
  115. AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  116. And ( u_mtrldef.ifpack = 2 );
  117. IF sqlca.SQLCode <> 0 THEN
  118. arg_msg = '查询个性包件产品下级是否存在个性包件失败,'+sqlca.SQLErrText
  119. rslt = 0
  120. GOTO ext
  121. END IF
  122. IF cnt = 0 THEN
  123. arg_msg = '个性包件产品下级没有个性包件,操作取消,请检查物料清单'
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. IF uo_option_packpro2_pf_pack2_useifover = 1 THEN
  128. cnt = 0
  129. SELECT count(*) INTO :cnt
  130. FROM u_PrdPF,u_mtrldef,u_mtrl_pf
  131. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  132. AND ( u_mtrl_pf.ifdi = 0 )
  133. AND ( u_mtrl_pf.ifdft = 1 )
  134. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  135. AND ( u_PrdPF.mtrlid = :arg_mtrlid )
  136. AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  137. AND ( u_PrdPF.ifover = 0 )
  138. And ( u_mtrldef.ifpack = 2 );
  139. IF sqlca.SQLCode <> 0 THEN
  140. arg_msg = '查询个性包件产品下级个性包件清单明细是否有未设<按配置拆装>属性失败,'+sqlca.SQLErrText
  141. rslt = 0
  142. GOTO ext
  143. END IF
  144. IF cnt > 0 THEN
  145. arg_msg = '个性包件产品下级个性包件清单明细有未设<按配置拆装>属性,操作取消,请检查物料清单'
  146. rslt = 0
  147. GOTO ext
  148. END IF
  149. END IF
  150. END IF
  151. cnt = 0
  152. SELECT count(*) INTO :cnt
  153. FROM u_PrdPF,u_mtrldef,u_mtrl_pf
  154. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  155. AND ( u_mtrl_pf.ifdi = 0 )
  156. AND ( u_mtrl_pf.ifdft = 1 )
  157. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  158. AND ( u_PrdPF.mtrlid = :arg_mtrlid )
  159. AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  160. And ( u_PrdPF.ifover = 1 )
  161. And ( u_PrdPF.dipztype = -1 );
  162. IF sqlca.SQLCode <> 0 THEN
  163. arg_msg = '查询产品下级清单明细是否有未设<配置拆装类型>属性失败,'+sqlca.SQLErrText
  164. rslt = 0
  165. GOTO ext
  166. END IF
  167. IF cnt > 0 THEN
  168. arg_msg = '产品下级清单明细有未设<配置拆装类型>属性,操作取消,请检查物料清单'
  169. rslt = 0
  170. GOTO ext
  171. END IF
  172. ELSE
  173. IF li_flag = 0 THEN
  174. rslt = 0
  175. arg_msg = 'BOM资料未审核,不能撤审'
  176. GOTO ext
  177. END IF
  178. END IF
  179. IF arg_flag = 1 And uo_option_check_mtrl_pf = 1 THEN
  180. DECLARE pf_cur CURSOR FOR
  181. SELECT
  182. u_PrdPF.SonMtrlid,
  183. u_PrdPF.sonpfcode
  184. FROM u_PrdPF
  185. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  186. ( u_PrdPF.pfcode = :arg_pfcode );
  187. OPEN pf_cur;
  188. count = 1
  189. FETCH pf_cur Into :ls_s_pfmx[count].sonmtrlid,:ls_s_pfmx[count].sonpfcode;
  190. DO WHILE sqlca.SQLCode = 0
  191. count++
  192. FETCH pf_cur Into :ls_s_pfmx[count].sonmtrlid,:ls_s_pfmx[count].sonpfcode;
  193. LOOP
  194. count = count - 1
  195. CLOSE pf_cur;
  196. FOR ll_i = 1 To count
  197. SELECT flag,affirmflag
  198. INTO :li_flag,:li_affirmflag
  199. FROM u_mtrl_pf
  200. WHERE mtrlid = :ls_s_pfmx[ll_i].SonMtrlid
  201. And pfcode = :ls_s_pfmx[ll_i].sonpfcode;
  202. IF sqlca.SQLCode <> 0 THEN
  203. rslt = 0
  204. arg_msg = '查询审核标记失败'
  205. GOTO ext
  206. END IF
  207. // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN
  208. // rslt = 0
  209. // arg_msg = '下级物料物料清单资料没有确认,不能审核'
  210. // GOTO ext
  211. // END IF
  212. IF li_flag = 0 THEN
  213. rslt = 0
  214. arg_msg = '下级物料物料清单资料没有审核,不能审核本物料清单'
  215. GOTO ext
  216. END IF
  217. NEXT
  218. END IF
  219. IF arg_flag = 1 THEN
  220. // IF uo_option_bom_affirm = 1 THEN
  221. UPDATE u_mtrl_pf
  222. SET flag = 1,
  223. Auditdate = getdate(),
  224. Auditemp = :publ_operator
  225. WHERE mtrlid = :arg_mtrlid
  226. AND pfcode = :arg_pfcode
  227. And flag = 0;
  228. // ELSE
  229. // UPDATE u_mtrl_pf
  230. // SET flag = 1,
  231. // Auditdate = getdate(),
  232. // Auditemp = :publ_operator,
  233. // affirmflag = 1,
  234. // affirmemp = :publ_operator,
  235. // affirmdate = getdate()
  236. // WHERE mtrlid = :arg_mtrlid
  237. // AND pfcode = :arg_pfcode
  238. // And flag = 0;
  239. // END IF
  240. ELSE
  241. // IF uo_option_bom_affirm = 1 THEN
  242. UPDATE u_mtrl_pf
  243. SET flag = 0,
  244. Auditdate = :null_dt,
  245. Auditemp = ''
  246. WHERE mtrlid = :arg_mtrlid
  247. AND pfcode = :arg_pfcode
  248. And flag = 1;
  249. // ELSE
  250. // UPDATE u_mtrl_pf
  251. // SET flag = 0,
  252. // Auditdate = :null_dt,
  253. // Auditemp = '',
  254. // affirmflag = 0,
  255. // affirmemp = '',
  256. // affirmdate = :null_dt
  257. // WHERE mtrlid = :arg_mtrlid
  258. // AND pfcode = :arg_pfcode
  259. // And flag = 1;
  260. // END IF
  261. END IF
  262. IF sqlca.SQLCode <> 0 THEN
  263. rslt = 0
  264. arg_msg = '更新标记失败,~n'+sqlca.SQLErrText
  265. GOTO ext
  266. END IF
  267. ext:
  268. IF rslt = 0 THEN
  269. ROLLBACK;
  270. ELSEIF rslt = 1 And arg_ifcommit THEN
  271. COMMIT;
  272. END IF
  273. RETURN rslt
  274. end function
  275. public function integer uof_delpflist (long arg_mtrlid, string arg_pfcode, boolean arg_ifcommit, ref string arg_msg);int rslt =1
  276. int li_ifdi,li_ifdft,li_flag
  277. long cnt = 0
  278. select ifdi,ifdft,flag
  279. into :li_ifdi,:li_ifdft,:li_flag
  280. from u_mtrl_pf
  281. where mtrlid = :arg_mtrlid
  282. and pfcode = :arg_pfcode;
  283. if sqlca.sqlcode <> 0 then
  284. arg_msg = '查询物料清单失败,'+sqlca.sqlerrtext
  285. rslt = 0
  286. goto ext
  287. end if
  288. if li_flag = 1 then
  289. arg_msg = '物料清单已经审核,不能删除'
  290. rslt = 0
  291. goto ext
  292. end if
  293. if li_ifdft = 1 then
  294. arg_msg = '物料清单为默认清单,不能删除'
  295. rslt = 0
  296. goto ext
  297. end if
  298. select count(*) into :cnt
  299. from u_PrdPF
  300. where mtrlid = :arg_mtrlid
  301. and pfcode = :arg_pfcode;
  302. if sqlca.sqlcode <> 0 then
  303. arg_msg = '查询物料清单明细失败,'+sqlca.sqlerrtext
  304. rslt = 0
  305. goto ext
  306. end if
  307. if cnt > 0 then
  308. arg_msg = '该物料清单已有物料明细,不能删除'
  309. rslt = 0
  310. goto ext
  311. end if
  312. delete from u_mtrl_pf
  313. where mtrlid = :arg_mtrlid
  314. and pfcode = :arg_pfcode;
  315. if sqlca.sqlcode <> 0 then
  316. arg_msg = '删除物料清单失败,'+sqlca.sqlerrtext
  317. rslt = 0
  318. goto ext
  319. end if
  320. ext:
  321. if rslt = 0 then
  322. rollback;
  323. elseif rslt = 1 and arg_ifcommit then
  324. commit;
  325. end if
  326. return rslt
  327. end function
  328. public function integer uof_setdi (long arg_mtrlid, string arg_pfcode, integer arg_di, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  329. Int li_ifdi,li_ifdft
  330. Long cnt = 0
  331. SELECT ifdi,ifdft
  332. INTO :li_ifdi,:li_ifdft
  333. FROM u_mtrl_pf
  334. WHERE mtrlid = :arg_mtrlid
  335. AND pfcode = :arg_pfcode;
  336. IF sqlca.SQLCode <> 0 THEN
  337. arg_msg = '查询物料清单失败,'+sqlca.SQLErrText
  338. rslt = 0
  339. GOTO ext
  340. END IF
  341. IF li_ifdft = 1 THEN
  342. arg_msg = '该清单已设为默认结构,不能设拆装或取消设置拆装'
  343. rslt = 0
  344. GOTO ext
  345. END IF
  346. IF li_ifdi = 2 THEN
  347. SELECT count(*) INTO :cnt
  348. FROM u_mtrl_pf
  349. WHERE mtrlid = :arg_mtrlid
  350. AND pfcode <> :arg_pfcode
  351. AND ifdi = 2;
  352. IF sqlca.SQLCode <> 0 THEN
  353. arg_msg = '查询物料包件清单数量失败,'+sqlca.SQLErrText
  354. rslt = 0
  355. GOTO ext
  356. END IF
  357. IF cnt > 0 THEN
  358. arg_msg = '物料清单只能设置一个包件清单'
  359. rslt = 0
  360. GOTO ext
  361. END IF
  362. END IF
  363. UPDATE u_mtrl_pf
  364. SET ifdi = :arg_di
  365. WHERE mtrlid = :arg_mtrlid
  366. AND pfcode = :arg_pfcode;
  367. IF sqlca.SQLCode <> 0 THEN
  368. arg_msg = '更新物料清单组装标记失败,'+sqlca.SQLErrText
  369. rslt = 0
  370. GOTO ext
  371. END IF
  372. ext:
  373. IF rslt = 0 THEN
  374. ROLLBACK;
  375. ELSEIF rslt = 1 AND arg_ifcommit THEN
  376. COMMIT;
  377. END IF
  378. RETURN rslt
  379. end function
  380. public function integer uof_setdft (long arg_mtrlid, string arg_pfcode, integer arg_dft, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  381. Int li_ifdft,li_di
  382. Long cnt = 0
  383. SELECT ifdft,ifdi
  384. INTO :li_ifdft,:li_di
  385. FROM u_mtrl_pf
  386. WHERE mtrlid = :arg_mtrlid
  387. AND pfcode = :arg_pfcode;
  388. IF sqlca.SQLCode <> 0 THEN
  389. arg_msg = '查询物料清单失败,'+sqlca.SQLErrText
  390. rslt = 0
  391. GOTO ext
  392. END IF
  393. if li_di = 1 then
  394. arg_msg = '该清单已设为拆装结构,不能设默认或取消设置默认'
  395. rslt = 0
  396. goto ext
  397. end if
  398. IF li_ifdft = 1 THEN
  399. IF arg_dft = 1 THEN
  400. arg_msg = '物料清单已设置为默认,不能再设置'
  401. rslt = 0
  402. GOTO ext
  403. END IF
  404. ELSE
  405. IF arg_dft = 0 THEN
  406. arg_msg = '物料清单未设置为默认,不能取消设置'
  407. rslt = 0
  408. GOTO ext
  409. END IF
  410. SELECT count(*) INTO :cnt
  411. FROM u_mtrl_pf
  412. WHERE mtrlid = :arg_mtrlid
  413. AND pfcode <> :arg_pfcode
  414. AND ifdft = 1;
  415. IF sqlca.SQLCode <> 0 THEN
  416. arg_msg = '查询物料默认清单数量失败,'+sqlca.SQLErrText
  417. rslt = 0
  418. GOTO ext
  419. END IF
  420. IF cnt > 0 THEN
  421. arg_msg = '物料清单只能设置一个默认清单'
  422. rslt = 0
  423. GOTO ext
  424. END IF
  425. END IF
  426. UPDATE u_mtrl_pf
  427. SET ifdft = :arg_dft
  428. WHERE mtrlid = :arg_mtrlid
  429. AND pfcode = :arg_pfcode;
  430. IF sqlca.SQLCode <> 0 THEN
  431. arg_msg = '更新物料清单默认标记失败,'+sqlca.SQLErrText
  432. rslt = 0
  433. GOTO ext
  434. END IF
  435. ext:
  436. IF rslt = 0 THEN
  437. ROLLBACK;
  438. ELSEIF rslt = 1 AND arg_ifcommit THEN
  439. COMMIT;
  440. END IF
  441. RETURN rslt
  442. end function
  443. public function integer f_clearprdpfmx (long arg_mtrlid, string arg_dpfcode, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  444. DELETE FROM u_prdpf_mx
  445. WHERE mtrlid = :arg_mtrlid
  446. AND pfcode = :arg_dpfcode;
  447. IF sqlca.SQLCode <> 0 THEN
  448. arg_msg = "删除用料列表失败,"+sqlca.SQLErrText
  449. rslt = 0
  450. GOTO ext
  451. END IF
  452. ext:
  453. IF rslt = 0 THEN
  454. ROLLBACK;
  455. ELSEIF rslt = 1 AND arg_ifcommit THEN
  456. COMMIT;
  457. END IF
  458. RETURN rslt
  459. end function
  460. public function integer uof_del (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, string arg_sonpfcode, long arg_wrkgrpid, string arg_msg, boolean arg_ifcommit);Int rslt = 1
  461. Int li_flagtype // 检查BOM状态 1-是否已审,0-未审,2-是否已确认,3-未确认
  462. //IF uo_option_bom_affirm = -1000 THEN
  463. // rslt = 0
  464. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  465. // GOTO ext
  466. //END IF
  467. //IF uo_option_bom_affirm = 1 THEN
  468. li_flagtype = 2
  469. //ELSE
  470. // li_flagtype = 1
  471. //END IF
  472. IF f_check_pf_flag(arg_mtrlid,arg_pfcode,li_flagtype,arg_msg) = 0 THEN
  473. rslt = 0
  474. GOTO ext
  475. END IF
  476. DELETE FROM u_PrdPF
  477. WHERE mtrlid = :arg_mtrlid
  478. AND pfcode = :arg_pfcode
  479. AND pfgroup = :arg_pfgroup
  480. AND SonMtrlid = :arg_SonMtrlid
  481. AND sonpfcode = :arg_sonpfcode
  482. AND wrkgrpid = :arg_wrkgrpid;
  483. IF sqlca.SQLCode <> 0 THEN
  484. rslt = 0
  485. arg_msg = '删除失败,~n'+sqlca.SQLErrText
  486. GOTO ext
  487. END IF
  488. ext:
  489. IF rslt = 0 THEN
  490. ROLLBACK;
  491. ELSEIF rslt = 1 AND arg_ifcommit THEN
  492. COMMIT;
  493. END IF
  494. RETURN rslt
  495. end function
  496. public function integer uof_audit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1
  497. Int li_flag
  498. Long ll_i,count
  499. String ls_mtrlcode
  500. Long li_affirmflag
  501. s_pfmx ls_s_pfmx[]
  502. //IF uo_option_bom_affirm = -1000 THEN
  503. // rslt = 0
  504. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  505. // GOTO ext
  506. //END IF
  507. IF uo_option_check_mtrl_pf = -1000 THEN
  508. rslt = 0
  509. arg_msg = '选项:[196]物料清单保存时检查下级清单是否已审核,读取初始默认值失败,操作取消!'
  510. GOTO ext
  511. END IF
  512. SELECT mtrlcode INTO :ls_mtrlcode
  513. FROM u_mtrldef
  514. Where mtrlid = :arg_mtrlid;
  515. IF sqlca.SQLCode <> 0 THEN
  516. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  517. rslt = 0
  518. GOTO ext
  519. END IF
  520. SELECT flag INTO :li_flag
  521. FROM u_mtrl_pf
  522. WHERE mtrlid = :arg_mtrlid
  523. And pfcode = :arg_pfcode;
  524. IF sqlca.SQLCode <> 0 THEN
  525. rslt = 0
  526. arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',审核标记失败,'+sqlca.SQLErrText
  527. GOTO ext
  528. END IF
  529. IF li_flag = 0 THEN
  530. IF uof_audit(arg_mtrlid,arg_pfcode,1,arg_msg,False) = 0 THEN
  531. rslt = 0
  532. GOTO ext
  533. END IF
  534. END IF
  535. DECLARE pf_cur CURSOR FOR
  536. SELECT
  537. u_PrdPF.SonMtrlid,
  538. u_PrdPF.sonpfcode
  539. FROM u_PrdPF
  540. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  541. ( u_PrdPF.pfcode = :arg_pfcode );
  542. OPEN pf_cur;
  543. count = 1
  544. FETCH pf_cur Into :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  545. DO WHILE sqlca.SQLCode = 0
  546. count++
  547. FETCH pf_cur Into :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  548. LOOP
  549. count = count - 1
  550. CLOSE pf_cur;
  551. IF count = 0 THEN
  552. rslt = 1
  553. GOTO ext
  554. END IF
  555. FOR ll_i = 1 To count
  556. IF uo_option_check_mtrl_pf = 1 THEN
  557. SELECT flag,affirmflag
  558. INTO :li_flag,:li_affirmflag
  559. FROM u_mtrl_pf
  560. WHERE mtrlid = :ls_s_pfmx[ll_i].SonMtrlid
  561. And pfcode = :ls_s_pfmx[ll_i].sonpfcode;
  562. IF sqlca.SQLCode <> 0 THEN
  563. rslt = 0
  564. arg_msg = '查询审核标记失败'
  565. GOTO ext
  566. END IF
  567. // IF uo_option_bom_affirm = 1 And li_affirmflag = 0 THEN
  568. // rslt = 0
  569. // arg_msg = '下级物料物料清单资料没有确认,不能审核'
  570. // GOTO ext
  571. // END IF
  572. IF li_flag = 0 THEN
  573. rslt = 0
  574. arg_msg = '下级物料物料清单资料没有审核,不能审核本物料清单'
  575. GOTO ext
  576. END IF
  577. END IF
  578. IF uof_audit_all(ls_s_pfmx[ll_i].SonMtrlid,&
  579. ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN
  580. rslt = 0
  581. GOTO ext
  582. END IF
  583. NEXT
  584. ext:
  585. IF rslt = 0 THEN
  586. ROLLBACK;
  587. END IF
  588. RETURN rslt
  589. end function
  590. public function integer uof_caudit_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1
  591. Int li_flag
  592. Long ll_i,count
  593. String ls_mtrlcode
  594. Long ll_mtrlorigin
  595. s_pfmx ls_s_pfmx[]
  596. SELECT mtrlcode,mtrlorigin INTO :ls_mtrlcode,:ll_mtrlorigin
  597. FROM u_mtrldef
  598. Where mtrlid = :arg_mtrlid;
  599. IF sqlca.SQLCode <> 0 THEN
  600. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  601. rslt = 0
  602. GOTO ext
  603. END IF
  604. IF ll_mtrlorigin = 2 THEN //采购类的物料不执行批撤审
  605. rslt = 1
  606. GOTO ext
  607. END IF
  608. SELECT flag INTO :li_flag
  609. FROM u_mtrl_pf
  610. WHERE mtrlid = :arg_mtrlid
  611. AND pfcode = :arg_pfcode;
  612. IF sqlca.SQLCode <> 0 THEN
  613. rslt = 0
  614. arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',审核标记失败,'+sqlca.SQLErrText
  615. GOTO ext
  616. END IF
  617. IF li_flag = 1 THEN
  618. IF uof_audit(arg_mtrlid,arg_pfcode,0,arg_msg,FALSE) = 0 THEN
  619. rslt = 0
  620. GOTO ext
  621. END IF
  622. END IF
  623. DECLARE pf_cur CURSOR FOR
  624. SELECT
  625. u_PrdPF.SonMtrlid,
  626. u_PrdPF.sonpfcode
  627. FROM u_PrdPF
  628. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  629. ( u_PrdPF.pfcode = :arg_pfcode );
  630. OPEN pf_cur;
  631. count = 1
  632. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  633. DO WHILE sqlca.SQLCode = 0
  634. count++
  635. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  636. LOOP
  637. count = count - 1
  638. CLOSE pf_cur;
  639. IF count = 0 THEN
  640. rslt = 1
  641. GOTO ext
  642. END IF
  643. FOR ll_i = 1 TO count
  644. IF uof_caudit_all(ls_s_pfmx[ll_i].SonMtrlid,&
  645. ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN
  646. rslt = 0
  647. GOTO ext
  648. END IF
  649. NEXT
  650. ext:
  651. IF rslt = 0 THEN
  652. ROLLBACK;
  653. END IF
  654. RETURN rslt
  655. end function
  656. public function integer f_cmpprdpf (long arg_mtrlid, long arg_cmpmtrlid, string arg_dpfcode, string arg_pfcode, decimal arg_groupqty, decimal arg_qty, long arg_grade, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  657. Long count = 0,ls_i,cnt = 0
  658. Int li_sonflag
  659. Decimal ld_cmpqty
  660. Decimal ld_qty,ld_groupqty
  661. s_pfmx ls_s_pfmx[]
  662. IF sys_option_produce_dec = -1000 THEN
  663. rslt = 0
  664. arg_msg = '选项:[089]生产运算小数位,读取初始默认值失败,操作取消!'
  665. GOTO ext
  666. END IF
  667. deep_count++
  668. IF deep_count > 2000 THEN //防止死递归
  669. arg_msg = '递归太深'+String(deep_count)
  670. rslt = 0
  671. GOTO ext
  672. END IF
  673. SELECT cmpqty INTO :ld_cmpqty
  674. FROM u_mtrldef
  675. Where mtrlid = :arg_mtrlid;
  676. IF sqlca.SQLCode <> 0 THEN
  677. arg_msg = '查询物料清单基数失败,'+sqlca.SQLErrText
  678. rslt = 0
  679. GOTO ext
  680. END IF
  681. IF ld_cmpqty <= 0 THEN
  682. arg_msg = '不合理的物料清单基数'
  683. rslt = 0
  684. GOTO ext
  685. END IF
  686. DECLARE pf_cur CURSOR FOR
  687. SELECT u_PrdPF.Sonscale,
  688. u_PrdPF.SonLoss,
  689. u_PrdPF.SonDECLosS,
  690. u_PrdPF.Sonahead,
  691. u_PrdPF.SonMtrlid,
  692. u_mtrldef.mtrlcode,
  693. u_mtrldef.mtrlname,
  694. u_PrdPF.wrkgrpid,
  695. u_PrdPF.status,
  696. u_PrdPF.pfgroupqty,
  697. u_PrdPF.pfgroupmode,
  698. u_PrdPF.promode,
  699. u_PrdPF.pfgroup,
  700. u_PrdPF.dscrp,
  701. u_PrdPF.woodcode,
  702. u_PrdPF.pcode,
  703. u_PrdPF.sonpfcode,
  704. u_PrdPF.pfklmode,
  705. u_mtrldef.mrptype,
  706. u_mtrldef.mrparg
  707. FROM u_PrdPF, u_mtrldef
  708. WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND
  709. ( u_PrdPF.mtrlid = :arg_cmpmtrlid ) AND
  710. ( u_PrdPF.pfcode = :arg_pfcode )
  711. Order By u_PrdPF.printid;
  712. OPEN pf_cur;
  713. count = 1
  714. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  715. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].Sonahead,&
  716. :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].mtrlcode,&
  717. :ls_s_pfmx[count].mtrlname,:ls_s_pfmx[count].wrkgrpid,&
  718. :ls_s_pfmx[count].status,:ls_s_pfmx[count].pfgroupqty,&
  719. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].promode,&
  720. :ls_s_pfmx[count].pfgroup,&
  721. :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].woodcode,&
  722. :ls_s_pfmx[count].pcode,:ls_s_pfmx[count].sonpfcode,&
  723. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  724. :ls_s_pfmx[count].u_mtrldef_mrparg;
  725. DO WHILE sqlca.SQLCode = 0
  726. count++
  727. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  728. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].Sonahead,&
  729. :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].mtrlcode,&
  730. :ls_s_pfmx[count].mtrlname,:ls_s_pfmx[count].wrkgrpid,&
  731. :ls_s_pfmx[count].status,:ls_s_pfmx[count].pfgroupqty,&
  732. :ls_s_pfmx[count].pfgroupmode,:ls_s_pfmx[count].promode,&
  733. :ls_s_pfmx[count].pfgroup,&
  734. :ls_s_pfmx[count].dscrp,:ls_s_pfmx[count].woodcode,&
  735. :ls_s_pfmx[count].pcode,:ls_s_pfmx[count].sonpfcode,&
  736. :ls_s_pfmx[count].pfklmode,:ls_s_pfmx[count].u_mtrldef_mrptype,&
  737. :ls_s_pfmx[count].u_mtrldef_mrparg;
  738. LOOP
  739. count = count - 1
  740. CLOSE pf_cur;
  741. FOR ls_i = 1 To count
  742. SELECT count(*) INTO :cnt
  743. FROM u_PrdPF
  744. WHERE ( u_PrdPF.mtrlid = :ls_s_pfmx[ls_i].SonMtrlid ) AND
  745. ( u_PrdPF.pfcode = :ls_s_pfmx[ls_i].sonpfcode );
  746. IF sqlca.SQLCode <> 0 THEN
  747. arg_msg = '查询物料:'+ls_s_pfmx[ls_i].mtrlcode+'物料清单失败,'+sqlca.SQLErrText
  748. rslt = 0
  749. GOTO ext
  750. END IF
  751. IF cnt = 0 THEN
  752. li_sonflag = 1
  753. ELSE
  754. li_sonflag = 0
  755. END IF
  756. IF ls_s_pfmx[ls_i].u_mtrldef_mrptype = 0 THEN
  757. ld_qty = Round(arg_qty * (ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS)/ld_cmpqty,ls_s_pfmx[ls_i].u_mtrldef_mrparg)
  758. ELSE
  759. ld_qty = Ceiling(Truncate(arg_qty * ls_s_pfmx[ls_i].Sonscale/(1 - ls_s_pfmx[ls_i].SonLoss)+ls_s_pfmx[ls_i].SonDECLosS,10)/ld_cmpqty)
  760. END IF
  761. ld_groupqty = arg_groupqty * ls_s_pfmx[ls_i].pfgroupqty
  762. il_printid++
  763. INSERT INTO u_prdpf_mx
  764. (mtrlid,
  765. pfcode,
  766. sonmtrlid,
  767. sonscale,
  768. sonloss,
  769. sondecloss,
  770. sonahead,
  771. dscrp,
  772. pfgroup,
  773. pfgroupqty,
  774. pfgroupmode,
  775. promode,
  776. printid,
  777. wrkgrpid,
  778. status,
  779. sonflag,
  780. woodcode,
  781. pcode,
  782. realqty,
  783. pfklmode,
  784. grade,
  785. sonpfcode)
  786. VALUES ( :arg_mtrlid,
  787. :arg_dpfcode,
  788. :ls_s_pfmx[ls_i].SonMtrlid,
  789. :ls_s_pfmx[ls_i].sonscale,
  790. :ls_s_pfmx[ls_i].sonloss,
  791. :ls_s_pfmx[ls_i].sondecloss,
  792. :ls_s_pfmx[ls_i].sonahead,
  793. :ls_s_pfmx[ls_i].dscrp,
  794. :ls_s_pfmx[ls_i].pfgroup,
  795. :ld_groupqty,
  796. :ls_s_pfmx[ls_i].pfgroupmode,
  797. :ls_s_pfmx[ls_i].promode,
  798. :il_printid,
  799. :ls_s_pfmx[ls_i].wrkgrpid,
  800. :ls_s_pfmx[ls_i].status,
  801. :li_sonflag,
  802. :ls_s_pfmx[ls_i].woodcode,
  803. :ls_s_pfmx[ls_i].pcode,
  804. :ld_qty,
  805. :ls_s_pfmx[ls_i].pfklmode,
  806. :arg_grade,
  807. :ls_s_pfmx[ls_i].sonpfcode);
  808. IF sqlca.SQLCode <> 0 THEN
  809. arg_msg = "因为网络或关键内容重复,"+sqlca.SQLErrText
  810. rslt = 0
  811. GOTO ext
  812. END IF
  813. IF f_cmpPrdPF(arg_mtrlid,ls_s_pfmx[ls_i].SonMtrlid,arg_dpfcode,ls_s_pfmx[ls_i].sonpfcode,ld_groupqty,ld_qty,arg_grade + 1,arg_msg,arg_ifcommit) = 0 THEN
  814. rslt = 0
  815. GOTO ext
  816. END IF
  817. NEXT
  818. ext:
  819. IF rslt = 0 THEN
  820. ROLLBACK;
  821. ELSEIF rslt = 1 And arg_ifcommit THEN
  822. COMMIT;
  823. END IF
  824. RETURN rslt
  825. end function
  826. public function integer uof_affirm (long arg_mtrlid, string arg_pfcode, integer arg_flag, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  827. //IF uo_option_bom_affirm = -1000 THEN
  828. // rslt = 0
  829. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  830. // GOTO ext
  831. //END IF
  832. //IF uo_option_bom_affirm = 0 THEN
  833. // rslt = 0
  834. // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作'
  835. // GOTO ext
  836. //END IF
  837. Int li_flag,li_affirmflag
  838. DateTime null_dt
  839. SetNull(null_dt)
  840. SELECT flag,affirmflag
  841. INTO :li_flag,:li_affirmflag
  842. FROM u_mtrl_pf
  843. WHERE mtrlid = :arg_mtrlid
  844. AND pfcode = :arg_pfcode;
  845. IF sqlca.SQLCode <> 0 THEN
  846. rslt = 0
  847. arg_msg = '查询清单:'+arg_pfcode+',确认标记与审核标记失败'
  848. GOTO ext
  849. END IF
  850. IF arg_flag = 1 THEN //确认
  851. IF li_flag = 1 THEN
  852. rslt = 0
  853. arg_msg = 'BOM资料已经审核,不能确认'
  854. GOTO ext
  855. END IF
  856. IF li_affirmflag = 1 THEN
  857. rslt = 0
  858. arg_msg = 'BOM资料已经确认,不能再确认'
  859. GOTO ext
  860. END IF
  861. ELSE
  862. IF li_flag = 1 THEN
  863. rslt = 0
  864. arg_msg = 'BOM资料已经审核,不能反确认'
  865. GOTO ext
  866. END IF
  867. IF li_affirmflag = 0 THEN
  868. rslt = 0
  869. arg_msg = 'BOM资料未确认,不能反确认'
  870. GOTO ext
  871. END IF
  872. END IF
  873. IF arg_flag = 1 THEN
  874. UPDATE u_mtrl_pf
  875. SET affirmflag = 1,
  876. affirmdate = getdate(),
  877. affirmemp = :publ_operator
  878. WHERE mtrlid = :arg_mtrlid
  879. AND pfcode = :arg_pfcode
  880. AND affirmflag = 0;
  881. ELSE
  882. UPDATE u_mtrl_pf
  883. SET affirmflag = 0,
  884. affirmdate = :null_dt,
  885. affirmemp = ''
  886. WHERE mtrlid = :arg_mtrlid
  887. AND pfcode = :arg_pfcode
  888. AND affirmflag = 1;
  889. END IF
  890. IF sqlca.SQLCode <> 0 THEN
  891. rslt = 0
  892. arg_msg = '更新标记失败,~n'+sqlca.SQLErrText
  893. GOTO ext
  894. END IF
  895. ext:
  896. IF rslt = 0 THEN
  897. ROLLBACK;
  898. ELSEIF rslt = 1 AND arg_ifcommit THEN
  899. COMMIT;
  900. END IF
  901. RETURN rslt
  902. end function
  903. public function integer uof_affirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1
  904. //IF uo_option_bom_affirm = -1000 THEN
  905. // rslt = 0
  906. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  907. // GOTO ext
  908. //END IF
  909. //IF uo_option_bom_affirm = 0 THEN
  910. // rslt = 0
  911. // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作'
  912. // GOTO ext
  913. //END IF
  914. Int li_affirmflag
  915. Long ll_i,count
  916. String ls_mtrlcode
  917. s_pfmx ls_s_pfmx[]
  918. SELECT mtrlcode INTO :ls_mtrlcode
  919. FROM u_mtrldef
  920. Where mtrlid = :arg_mtrlid;
  921. IF sqlca.SQLCode <> 0 THEN
  922. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  923. rslt = 0
  924. GOTO ext
  925. END IF
  926. SELECT affirmflag INTO :li_affirmflag
  927. FROM u_mtrl_pf
  928. WHERE mtrlid = :arg_mtrlid
  929. AND pfcode = :arg_pfcode;
  930. IF sqlca.SQLCode <> 0 THEN
  931. rslt = 0
  932. arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',确认标记失败,'+sqlca.SQLErrText
  933. GOTO ext
  934. END IF
  935. IF li_affirmflag = 0 THEN
  936. IF uof_affirm(arg_mtrlid,arg_pfcode,1,arg_msg,FALSE) = 0 THEN
  937. rslt = 0
  938. GOTO ext
  939. END IF
  940. END IF
  941. DECLARE pf_cur CURSOR FOR
  942. SELECT
  943. u_PrdPF.SonMtrlid,
  944. u_PrdPF.sonpfcode
  945. FROM u_PrdPF
  946. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  947. ( u_PrdPF.pfcode = :arg_pfcode );
  948. OPEN pf_cur;
  949. count = 1
  950. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  951. DO WHILE sqlca.SQLCode = 0
  952. count++
  953. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  954. LOOP
  955. count = count - 1
  956. CLOSE pf_cur;
  957. IF count = 0 THEN
  958. rslt = 1
  959. GOTO ext
  960. END IF
  961. FOR ll_i = 1 TO count
  962. IF uof_affirm_all(ls_s_pfmx[ll_i].SonMtrlid,&
  963. ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN
  964. rslt = 0
  965. GOTO ext
  966. END IF
  967. NEXT
  968. ext:
  969. IF rslt = 0 THEN
  970. ROLLBACK;
  971. END IF
  972. RETURN rslt
  973. end function
  974. public function integer uof_caffirm_all (long arg_mtrlid, string arg_pfcode, ref string arg_msg);Int rslt = 1
  975. //IF uo_option_bom_affirm = -1000 THEN
  976. // rslt = 0
  977. // arg_msg = '选项:[085]物料清单使用确认功能,读取初始默认值失败,操作取消!'
  978. // GOTO ext
  979. //END IF
  980. //
  981. //
  982. //IF uo_option_bom_affirm = 0 THEN
  983. // rslt = 0
  984. // arg_msg = '系统没有设置物料清单使用确认功能,不能执行操作'
  985. // GOTO ext
  986. //END IF
  987. Int li_affirmflag
  988. Long ll_i,count
  989. String ls_mtrlcode
  990. Long ll_mtrlorigin
  991. s_pfmx ls_s_pfmx[]
  992. SELECT mtrlcode,mtrlorigin INTO :ls_mtrlcode,:ll_mtrlorigin
  993. FROM u_mtrldef
  994. Where mtrlid = :arg_mtrlid;
  995. IF sqlca.SQLCode <> 0 THEN
  996. arg_msg = '查询物料编码失败,'+sqlca.SQLErrText
  997. rslt = 0
  998. GOTO ext
  999. END IF
  1000. IF ll_mtrlorigin = 2 THEN //采购类的物料不执行
  1001. rslt = 1
  1002. GOTO ext
  1003. END IF
  1004. SELECT affirmflag INTO :li_affirmflag
  1005. FROM u_mtrl_pf
  1006. WHERE mtrlid = :arg_mtrlid
  1007. AND pfcode = :arg_pfcode;
  1008. IF sqlca.SQLCode <> 0 THEN
  1009. rslt = 0
  1010. arg_msg = '查询物料:'+ls_mtrlcode+',清单:'+arg_pfcode+',确认标记失败,'+sqlca.SQLErrText
  1011. GOTO ext
  1012. END IF
  1013. IF li_affirmflag = 1 THEN
  1014. IF uof_affirm(arg_mtrlid,arg_pfcode,0,arg_msg,FALSE) = 0 THEN
  1015. rslt = 0
  1016. GOTO ext
  1017. END IF
  1018. END IF
  1019. DECLARE pf_cur CURSOR FOR
  1020. SELECT
  1021. u_PrdPF.SonMtrlid,
  1022. u_PrdPF.sonpfcode
  1023. FROM u_PrdPF
  1024. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  1025. ( u_PrdPF.pfcode = :arg_pfcode );
  1026. OPEN pf_cur;
  1027. count = 1
  1028. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  1029. DO WHILE sqlca.SQLCode = 0
  1030. count++
  1031. FETCH pf_cur INTO :ls_s_pfmx[count].SonMtrlid,:ls_s_pfmx[count].sonpfcode;
  1032. LOOP
  1033. count = count - 1
  1034. CLOSE pf_cur;
  1035. IF count = 0 THEN
  1036. rslt = 1
  1037. GOTO ext
  1038. END IF
  1039. FOR ll_i = 1 TO count
  1040. IF uof_caffirm_all(ls_s_pfmx[ll_i].SonMtrlid,&
  1041. ls_s_pfmx[ll_i].sonpfcode,arg_msg) = 0 THEN
  1042. rslt = 0
  1043. GOTO ext
  1044. END IF
  1045. NEXT
  1046. ext:
  1047. IF rslt = 0 THEN
  1048. ROLLBACK;
  1049. END IF
  1050. RETURN rslt
  1051. end function
  1052. public function integer uof_del_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1053. DELETE FROM u_prdpf_dymx
  1054. WHERE mtrlid = :arg_mtrlid
  1055. AND pfcode = :arg_pfcode
  1056. AND pfgroup = :arg_pfgroup
  1057. AND sonmtrlid = :arg_sonmtrlid
  1058. AND wrkgrpid = :arg_wrkgrpid
  1059. AND sonpfcode = :arg_sonpfcode;
  1060. IF sqlca.SQLCode <> 0 THEN
  1061. arg_msg = "删除物料清单用料代用明细表失败,"+sqlca.SQLErrText
  1062. rslt = 0
  1063. GOTO ext
  1064. END IF
  1065. ext:
  1066. IF rslt = 0 THEN
  1067. ROLLBACK;
  1068. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1069. COMMIT;
  1070. END IF
  1071. RETURN rslt
  1072. end function
  1073. public function integer uof_add_dymx (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, long arg_wrkgrpid, string arg_sonpfcode, long arg_printid, long arg_dymtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_scllloss, string arg_dscrp, string arg_status, string arg_woodcode, string arg_pcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1074. Long cnt = 0
  1075. String ls_sonmtrlcode
  1076. IF sys_option_change_status = '-1000' THEN
  1077. rslt = 0
  1078. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  1079. GOTO ext
  1080. END IF
  1081. IF sys_option_change_woodcode = '-1000' THEN
  1082. rslt = 0
  1083. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  1084. GOTO ext
  1085. END IF
  1086. IF sys_option_change_pcode = '-1000' THEN
  1087. rslt = 0
  1088. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  1089. GOTO ext
  1090. END IF
  1091. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1092. IF IsNull(arg_pfcode) THEN arg_pfcode = ''
  1093. IF IsNull(arg_sonpfcode) THEN arg_sonpfcode = ''
  1094. IF IsNull(arg_pfgroup) THEN arg_pfgroup = ''
  1095. IF IsNull(arg_SonMtrlid) THEN arg_SonMtrlid = 0
  1096. IF IsNull(arg_Sonscale) THEN arg_Sonscale = 0
  1097. IF IsNull(arg_SonLoss) THEN arg_SonLoss = 0
  1098. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  1099. IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0
  1100. IF IsNull(arg_status) THEN arg_status = ''
  1101. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1102. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1103. IF IsNull(arg_printid) THEN arg_printid = 0
  1104. IF IsNull(arg_scllloss) THEN arg_scllloss = 0
  1105. cnt = 0
  1106. SELECT count(*) INTO :cnt
  1107. FROM u_prdpf
  1108. WHERE mtrlid = :arg_mtrlid
  1109. AND pfcode = :arg_pfcode
  1110. AND pfgroup = :arg_pfgroup
  1111. AND sonmtrlid = :arg_sonmtrlid
  1112. AND wrkgrpid = :arg_wrkgrpid
  1113. AND sonpfcode = :arg_sonpfcode;
  1114. IF sqlca.SQLCode <> 0 THEN
  1115. rslt = 0
  1116. arg_msg = '查询相关物料清单内容失败'+sqlca.SQLErrText
  1117. GOTO ext
  1118. END IF
  1119. IF cnt = 0 THEN
  1120. rslt = 0
  1121. arg_msg = '查询使用代用材料的清单内容失败,请检查'
  1122. GOTO ext
  1123. END IF
  1124. IF f_check_status(1,arg_status) = 0 THEN
  1125. rslt = 0
  1126. arg_msg = "查询操作失败,可能'+sys_option_change_status+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_status
  1127. GOTO ext
  1128. END IF
  1129. IF f_check_status(2,arg_woodcode) = 0 THEN
  1130. rslt = 0
  1131. arg_msg = "查询操作失败,可能'+sys_option_change_woodcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_woodcode
  1132. GOTO ext
  1133. END IF
  1134. IF f_check_status(3,arg_pcode) = 0 THEN
  1135. rslt = 0
  1136. arg_msg = "查询操作失败,可能'+sys_option_change_pcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_pcode
  1137. GOTO ext
  1138. END IF
  1139. IF arg_Sonscale <= 0 THEN
  1140. arg_msg = '请输入用料量'
  1141. rslt = 0
  1142. GOTO ext
  1143. END IF
  1144. INSERT INTO u_prdpf_dymx
  1145. (mtrlid,
  1146. pfcode,
  1147. pfgroup,
  1148. sonmtrlid,
  1149. wrkgrpid,
  1150. sonpfcode,
  1151. printid,
  1152. dymtrlid,
  1153. sonscale,
  1154. sonloss,
  1155. scllloss,
  1156. dscrp,
  1157. status,
  1158. woodcode,
  1159. pcode)
  1160. VALUES
  1161. (:arg_mtrlid,
  1162. :arg_pfcode,
  1163. :arg_pfgroup,
  1164. :arg_sonmtrlid,
  1165. :arg_wrkgrpid,
  1166. :arg_sonpfcode,
  1167. :arg_printid,
  1168. :arg_dymtrlid,
  1169. :arg_sonscale,
  1170. :arg_sonloss,
  1171. :arg_scllloss,
  1172. :arg_dscrp,
  1173. :arg_status,
  1174. :arg_woodcode,
  1175. :arg_pcode);
  1176. IF sqlca.SQLCode <> 0 THEN
  1177. arg_msg = '建立物料清单资料失败,'+sqlca.SQLErrText
  1178. rslt = 0
  1179. GOTO ext
  1180. END IF
  1181. ext:
  1182. IF rslt = 0 THEN
  1183. ROLLBACK;
  1184. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1185. COMMIT;
  1186. END IF
  1187. RETURN rslt
  1188. end function
  1189. public function integer uof_addpflist (long arg_mtrlid, string arg_pfcode, string arg_dscrp, integer arg_ifdi, integer arg_ifdft, integer arg_pftype, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1190. Long cnt = 0
  1191. SELECT count(*) INTO :cnt
  1192. FROM u_mtrldef
  1193. Where mtrlid = :arg_mtrlid;
  1194. IF sqlca.SQLCode <> 0 THEN
  1195. arg_msg = '查询物料资料失败,'+sqlca.SQLErrText
  1196. rslt = 0
  1197. GOTO ext
  1198. END IF
  1199. IF Trim(arg_pfcode) = '' THEN
  1200. arg_msg = '请输入结构名称'
  1201. rslt = 0
  1202. GOTO ext
  1203. END IF
  1204. INSERT INTO u_mtrl_pf
  1205. (Mtrlid,
  1206. pfcode,
  1207. dscrp,
  1208. ifdi,
  1209. ifdft,
  1210. inuse,
  1211. pftype,
  1212. opemp,
  1213. opdate)
  1214. VALUES
  1215. (:arg_mtrlid,
  1216. :arg_pfcode,
  1217. :arg_dscrp,
  1218. :arg_ifdi,
  1219. :arg_ifdft,
  1220. 1,
  1221. :arg_pftype,
  1222. :publ_operator,
  1223. getdate());
  1224. IF sqlca.SQLCode <> 0 THEN
  1225. arg_msg = '建立物料清单失败,' + sqlca.SQLErrText
  1226. rslt = 0
  1227. GOTO ext
  1228. END IF
  1229. ext:
  1230. IF rslt = 0 THEN
  1231. ROLLBACK;
  1232. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1233. COMMIT;
  1234. END IF
  1235. RETURN rslt
  1236. end function
  1237. public function integer uof_pzpf (long arg_mtrlid, string arg_pfcode, integer arg_ifpzpf, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1238. Int li_statusflag
  1239. Long cnt = 0
  1240. SELECT statusflag
  1241. INTO :li_statusflag
  1242. FROM u_mtrldef
  1243. Where mtrlid = :arg_mtrlid;
  1244. IF sqlca.SQLCode <> 0 THEN
  1245. arg_msg = '查询物料是否使用组合配置失败,'+sqlca.SQLErrText
  1246. rslt = 0
  1247. GOTO ext
  1248. END IF
  1249. IF arg_ifpzpf = 1 AND li_statusflag <> 2 THEN
  1250. arg_msg = '该物料不是使用组合配置,操作取消'
  1251. rslt = 0
  1252. GOTO ext
  1253. END IF
  1254. UPDATE u_mtrl_pf
  1255. SET ifpzpf = :arg_ifpzpf
  1256. WHERE mtrlid = :arg_mtrlid
  1257. AND pfcode = :arg_pfcode;
  1258. IF sqlca.SQLCode <> 0 THEN
  1259. arg_msg = '更新物料清单启用组合配置清单标记失败,'+sqlca.SQLErrText
  1260. rslt = 0
  1261. GOTO ext
  1262. END IF
  1263. ext:
  1264. IF rslt = 0 THEN
  1265. ROLLBACK;
  1266. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1267. COMMIT;
  1268. END IF
  1269. RETURN rslt
  1270. end function
  1271. public function integer uof_add_pf (long arg_mtrlid, string arg_pfcode, string arg_pfgroup, long arg_sonmtrlid, decimal arg_sonscale, decimal arg_sonloss, decimal arg_sondecloss, string arg_dscrp, long arg_wrkgrpid, string arg_status, string arg_woodcode, string arg_pcode, long arg_printid, string arg_pfgroupmode, string arg_promode, string arg_sonpfcode, integer arg_ifover, integer arg_mtrlkind, string arg_pfklmode, decimal arg_pfgroupqty, long arg_dipztype, decimal arg_scllloss, integer arg_dytype, decimal arg_advancetime, decimal arg_sclldecloss, decimal arg_baseqty, decimal arg_buyarg, string arg_sonlossstr, integer arg_scllqtytype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1272. Long cnt = 0
  1273. Int li_ifpackpro,li_ifpack
  1274. String ls_sonmtrlcode
  1275. IF sys_option_change_status = '-1000' THEN
  1276. rslt = 0
  1277. arg_msg = '选项:[029]配置标题文本,读取初始默认值失败,操作取消!'
  1278. GOTO ext
  1279. END IF
  1280. IF sys_option_change_woodcode = '-1000' THEN
  1281. rslt = 0
  1282. arg_msg = '选项:[027]配置1标题文本,读取初始默认值失败,操作取消!'
  1283. GOTO ext
  1284. END IF
  1285. IF sys_option_change_pcode = '-1000' THEN
  1286. rslt = 0
  1287. arg_msg = '选项:[028]配置2标题文本,读取初始默认值失败,操作取消!'
  1288. GOTO ext
  1289. END IF
  1290. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1291. IF IsNull(arg_pfcode) THEN arg_pfcode = ''
  1292. IF IsNull(arg_sonpfcode) THEN arg_sonpfcode = ''
  1293. IF IsNull(arg_pfgroup) THEN arg_pfgroup = ''
  1294. IF IsNull(arg_pfgroupmode) THEN arg_pfgroupmode = ''
  1295. IF IsNull(arg_promode) THEN arg_promode = ''
  1296. IF IsNull(arg_SonMtrlid) THEN arg_SonMtrlid = 0
  1297. IF IsNull(arg_Sonscale) THEN arg_Sonscale = 0
  1298. IF IsNull(arg_SonLoss) THEN arg_SonLoss = 0
  1299. IF IsNull(arg_SonDECLosS) THEN arg_SonDECLosS = 0
  1300. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  1301. IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0
  1302. IF IsNull(arg_status) THEN arg_status = ''
  1303. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1304. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1305. IF IsNull(arg_printid) THEN arg_printid = 0
  1306. IF IsNull(arg_ifover) THEN arg_ifover = 0
  1307. IF IsNull(arg_mtrlkind) THEN arg_mtrlkind = 0
  1308. IF IsNull(arg_pfklmode) THEN arg_pfklmode = ''
  1309. IF IsNull(arg_pfgroupqty) THEN arg_pfgroupqty = 0
  1310. IF IsNull(arg_dipztype) THEN arg_dipztype = 0
  1311. IF IsNull(arg_scllloss) THEN arg_scllloss = 0
  1312. IF IsNull(arg_dytype) THEN arg_dytype = 0
  1313. IF IsNull(arg_advancetime) THEN arg_advancetime = 0
  1314. IF IsNull(arg_sclldecloss) THEN arg_sclldecloss = 0
  1315. IF IsNull(arg_baseqty) THEN arg_baseqty = 1
  1316. IF IsNull(arg_sonlossstr) THEN arg_sonlossstr = ''
  1317. IF IsNull(arg_buyarg) THEN arg_buyarg = 0
  1318. IF IsNull(arg_scllqtytype) THEN arg_scllqtytype = 0
  1319. SELECT ifpackpro INTO :li_ifpackpro
  1320. FROM u_mtrldef
  1321. Where mtrlid = :arg_mtrlid;
  1322. IF sqlca.SQLCode <> 0 THEN
  1323. arg_msg = '查询产品物料资料失败,'+sqlca.SQLErrText
  1324. rslt = 0
  1325. GOTO ext
  1326. END IF
  1327. SELECT mtrlcode,ifpack
  1328. INTO :ls_sonmtrlcode,:li_ifpack
  1329. FROM u_mtrldef
  1330. Where mtrlid = :arg_SonMtrlid;
  1331. IF sqlca.SQLCode <> 0 THEN
  1332. arg_msg = '查询清单明细物料资料失败,'+sqlca.SQLErrText
  1333. rslt = 0
  1334. GOTO ext
  1335. END IF
  1336. IF uo_option_packpro2_pf_pack2_useifover = 1 THEN
  1337. IF li_ifpackpro = 2 And li_ifpack = 2 THEN
  1338. IF arg_ifover = 0 THEN
  1339. arg_msg = '清单明细物料未勾选按配置拆装,请检查'
  1340. rslt = 0
  1341. GOTO ext
  1342. END IF
  1343. END IF
  1344. END IF
  1345. IF arg_ifover = 0 THEN
  1346. arg_dipztype = -1
  1347. ELSE
  1348. IF arg_dipztype = -1 THEN
  1349. arg_msg = '清单明细物料设置配置拆装类型,请检查'
  1350. rslt = 0
  1351. GOTO ext
  1352. END IF
  1353. END IF
  1354. cnt = 0
  1355. SELECT count(*) INTO :cnt
  1356. FROM u_mtrl_pf
  1357. WHERE mtrlid = :arg_SonMtrlid
  1358. And pfcode = :arg_sonpfcode;
  1359. IF sqlca.SQLCode <> 0 THEN
  1360. arg_msg = '查询清单明细物料的物料清单资料是否已建立失败,可能资料不存在'
  1361. rslt = 0
  1362. GOTO ext
  1363. END IF
  1364. IF cnt = 0 THEN
  1365. arg_msg = '清单明细物料的物料清单资料:'+arg_sonpfcode+',未建立,请检查'
  1366. rslt = 0
  1367. GOTO ext
  1368. END IF
  1369. IF f_check_status(1,arg_status) = 0 THEN
  1370. rslt = 0
  1371. arg_msg = "查询操作失败,可能'+sys_option_change_status+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_status
  1372. GOTO ext
  1373. END IF
  1374. IF f_check_status(2,arg_woodcode) = 0 THEN
  1375. rslt = 0
  1376. arg_msg = "查询操作失败,可能'+sys_option_change_woodcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_woodcode
  1377. GOTO ext
  1378. END IF
  1379. IF f_check_status(3,arg_pcode) = 0 THEN
  1380. rslt = 0
  1381. arg_msg = "查询操作失败,可能'+sys_option_change_pcode+'未定义,物料:"+ls_sonmtrlcode+",内容:"+arg_pcode
  1382. GOTO ext
  1383. END IF
  1384. cnt = 0
  1385. SELECT count(*) INTO :cnt
  1386. FROM u_sc_workgroup
  1387. Where wrkgrpid = :arg_wrkgrpid;
  1388. IF sqlca.SQLCode <> 0 THEN
  1389. arg_msg = '查询工组资料失败,可能资料不存在'
  1390. rslt = 0
  1391. GOTO ext
  1392. END IF
  1393. IF cnt <> 1 THEN
  1394. arg_msg = '工组资料重复或不存在'
  1395. rslt = 0
  1396. GOTO ext
  1397. END IF
  1398. IF arg_Sonscale <= 0 THEN
  1399. arg_msg = '请输入用料量'
  1400. rslt = 0
  1401. GOTO ext
  1402. END IF
  1403. IF arg_SonLoss < 0 Or arg_SonLoss >= 1 THEN
  1404. arg_msg = '不合理损耗率'
  1405. rslt = 0
  1406. GOTO ext
  1407. END IF
  1408. IF arg_baseqty < 1 THEN
  1409. arg_msg = '不合理的基数,基数必须大于1'
  1410. rslt = 0
  1411. GOTO ext
  1412. END IF
  1413. IF arg_buyarg < 0 THEN
  1414. arg_msg = '不合理的采购参数,采购参数不能小于0'
  1415. rslt = 0
  1416. GOTO ext
  1417. END IF
  1418. //变更序号
  1419. IF ii_ifautop = 1 THEN
  1420. UPDATE u_prdpf SET printid = printid + 1
  1421. WHERE mtrlid = :arg_mtrlid
  1422. And pfcode = :arg_pfcode;
  1423. IF sqlca.SQLCode <> 0 THEN
  1424. arg_msg = '变更清单其它物料序号失败,'+sqlca.SQLErrText
  1425. rslt = 0
  1426. GOTO ext
  1427. END IF
  1428. END IF
  1429. INSERT INTO u_prdpf
  1430. (mtrlid,
  1431. pfcode,
  1432. pfgroup,
  1433. SonMtrlid,
  1434. Sonscale,
  1435. SonLoss,
  1436. SonDECLosS,
  1437. dscrp,
  1438. wrkgrpid,
  1439. status,
  1440. woodcode,
  1441. pcode,
  1442. printid,
  1443. pfgroupmode,
  1444. promode,
  1445. sonpfcode,
  1446. ifover,
  1447. mtrlkind,
  1448. pfklmode,
  1449. pfgroupqty,
  1450. dipztype,
  1451. scllloss,
  1452. dytype,
  1453. advancetime,
  1454. sclldecloss,
  1455. baseqty,
  1456. sonlossstr,
  1457. buyarg,
  1458. scllqtytype)
  1459. VALUES
  1460. (:arg_mtrlid,
  1461. :arg_pfcode,
  1462. :arg_pfgroup,
  1463. :arg_SonMtrlid,
  1464. :arg_Sonscale,
  1465. :arg_SonLoss,
  1466. :arg_SonDECLosS,
  1467. :arg_dscrp,
  1468. :arg_wrkgrpid,
  1469. :arg_status,
  1470. :arg_woodcode,
  1471. :arg_pcode,
  1472. :arg_printid,
  1473. :arg_pfgroupmode,
  1474. :arg_promode,
  1475. :arg_sonpfcode,
  1476. :arg_ifover,
  1477. :arg_mtrlkind,
  1478. :arg_pfklmode,
  1479. :arg_pfgroupqty,
  1480. :arg_dipztype,
  1481. :arg_scllloss,
  1482. :arg_dytype,
  1483. :arg_advancetime,
  1484. :arg_sclldecloss,
  1485. :arg_baseqty,
  1486. :arg_sonlossstr,
  1487. :arg_buyarg,
  1488. :arg_scllqtytype);
  1489. IF sqlca.SQLCode <> 0 THEN
  1490. arg_msg = '建立物料清单资料失败,'+sqlca.SQLErrText
  1491. rslt = 0
  1492. GOTO ext
  1493. END IF
  1494. ext:
  1495. IF rslt = 0 THEN
  1496. ROLLBACK;
  1497. ELSEIF rslt = 1 And arg_ifcommit THEN
  1498. COMMIT;
  1499. END IF
  1500. RETURN rslt
  1501. end function
  1502. public function integer uof_set_inuse (long arg_mtrlid, string arg_pfcode, integer arg_inuse, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1503. Int li_inuse
  1504. Long cnt = 0
  1505. SELECT inuse
  1506. INTO :li_inuse
  1507. FROM u_mtrl_pf
  1508. WHERE mtrlid = :arg_mtrlid
  1509. AND pfcode = :arg_pfcode;
  1510. IF sqlca.SQLCode <> 0 THEN
  1511. arg_msg = '查询物料清单失败,'+sqlca.SQLErrText
  1512. rslt = 0
  1513. GOTO ext
  1514. END IF
  1515. IF li_inuse = 1 THEN
  1516. IF arg_inuse = 1 THEN
  1517. arg_msg = '物料清单已设置为有效,不能再设置'
  1518. rslt = 0
  1519. GOTO ext
  1520. END IF
  1521. ELSE
  1522. IF arg_inuse = 0 THEN
  1523. arg_msg = '物料清单未设置为有效,不能取消设置'
  1524. rslt = 0
  1525. GOTO ext
  1526. END IF
  1527. END IF
  1528. UPDATE u_mtrl_pf
  1529. SET inuse = :arg_inuse
  1530. WHERE mtrlid = :arg_mtrlid
  1531. AND pfcode = :arg_pfcode;
  1532. IF sqlca.SQLCode <> 0 THEN
  1533. arg_msg = '更新物料清单默认标记失败,'+sqlca.SQLErrText
  1534. rslt = 0
  1535. GOTO ext
  1536. END IF
  1537. ext:
  1538. IF rslt = 0 THEN
  1539. ROLLBACK;
  1540. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1541. COMMIT;
  1542. END IF
  1543. RETURN rslt
  1544. end function
  1545. public function integer uof_mod_pfcode (long arg_mtrlid, string arg_pfcode, string arg_pfcode_new, string arg_dscrp, ref string arg_msg, boolean arg_ifcommit);Int rslt
  1546. rslt = 1
  1547. Long cnt
  1548. cnt = 0
  1549. SELECT count(*)
  1550. INTO :cnt
  1551. FROM u_mtrl_pf
  1552. WHERE mtrlid = :arg_mtrlid
  1553. And pfcode = :arg_pfcode_new;
  1554. IF sqlca.SQLCode <> 0 THEN
  1555. rslt = 0
  1556. arg_msg = '查询新物料清单名称是否重复失败,'+sqlca.SQLErrText
  1557. GOTO ext
  1558. END IF
  1559. IF cnt > 0 THEN
  1560. rslt = 0
  1561. arg_msg = '新物料清单名称与现在资料重复,请检查'
  1562. GOTO ext
  1563. END IF
  1564. UPDATE u_mtrl_pf
  1565. SET pfcode = :arg_pfcode_new,
  1566. dscrp = :arg_dscrp
  1567. WHERE mtrlid = :arg_mtrlid
  1568. And pfcode = :arg_pfcode;
  1569. IF sqlca.SQLCode <> 0 THEN
  1570. rslt = 0
  1571. arg_msg = '更新新物料清单名称失败,'+sqlca.SQLErrText
  1572. GOTO ext
  1573. END IF
  1574. update u_prdpf
  1575. set pfcode = :arg_pfcode_new
  1576. WHERE mtrlid = :arg_mtrlid
  1577. And pfcode = :arg_pfcode;
  1578. IF sqlca.SQLCode <> 0 THEN
  1579. rslt = 0
  1580. arg_msg = '更新物料清单明细失败,'+sqlca.SQLErrText
  1581. GOTO ext
  1582. END IF
  1583. UPDATE u_PrdPF
  1584. SET sonpfcode = :arg_pfcode_new
  1585. WHERE SonMtrlid = :arg_mtrlid
  1586. And sonpfcode = :arg_pfcode;
  1587. IF sqlca.SQLCode <> 0 THEN
  1588. rslt = 0
  1589. arg_msg = '更新已使用该物料清单的资料失败,'+sqlca.SQLErrText
  1590. GOTO ext
  1591. END IF
  1592. ext:
  1593. IF rslt = 0 THEN
  1594. ROLLBACK;
  1595. ELSEIF rslt = 1 And arg_ifcommit THEN
  1596. COMMIT;
  1597. END IF
  1598. RETURN rslt
  1599. end function
  1600. on uo_mtrl_pf.create
  1601. call super::create
  1602. TriggerEvent( this, "constructor" )
  1603. end on
  1604. on uo_mtrl_pf.destroy
  1605. TriggerEvent( this, "destructor" )
  1606. call super::destroy
  1607. end on
  1608. event constructor;String str_optionvalue,arg_msg
  1609. //f_get_sys_option_value('085',str_optionvalue,arg_msg)
  1610. //uo_option_bom_affirm = Long(str_optionvalue)
  1611. //f_get_sys_option_value('196',str_optionvalue,arg_msg)
  1612. uo_option_check_mtrl_pf = Long(str_optionvalue)
  1613. //f_get_sys_option_value('089',str_optionvalue,arg_msg)
  1614. //sys_option_produce_dec = Long(str_optionvalue)
  1615. //f_get_sys_option_value('029',str_optionvalue,arg_msg)
  1616. //sys_option_change_status = str_optionvalue
  1617. //f_get_sys_option_value('027',str_optionvalue,arg_msg)
  1618. //sys_option_change_woodcode = str_optionvalue
  1619. //f_get_sys_option_value('028',str_optionvalue,arg_msg)
  1620. //sys_option_change_pcode = str_optionvalue
  1621. //f_get_sys_option_value('274',str_optionvalue,arg_msg)
  1622. uo_option_packpro2_pf_pack2_useifover = Long(str_optionvalue)
  1623. end event