uo_mtrl_pf.sru 52 KB

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