w_bom_build_assist.srw 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969
  1. $PBExportHeader$w_bom_build_assist.srw
  2. forward
  3. global type w_bom_build_assist from w_publ_base
  4. end type
  5. type dw_1 from u_dw_rbtnfilter within w_bom_build_assist
  6. end type
  7. type cb_1 from uo_imflatbutton within w_bom_build_assist
  8. end type
  9. type st_1 from statictext within w_bom_build_assist
  10. end type
  11. type cb_2 from uo_imflatbutton within w_bom_build_assist
  12. end type
  13. type cb_edit from uo_imflatbutton within w_bom_build_assist
  14. end type
  15. type cb_3 from uo_imflatbutton within w_bom_build_assist
  16. end type
  17. type cb_addmx from uo_imflatbutton within w_bom_build_assist
  18. end type
  19. type cb_4 from uo_imflatbutton within w_bom_build_assist
  20. end type
  21. type cb_sort from uo_imflatbutton within w_bom_build_assist
  22. end type
  23. type cb_6 from uo_imflatbutton within w_bom_build_assist
  24. end type
  25. type cb_7 from uo_imflatbutton within w_bom_build_assist
  26. end type
  27. type cb_5 from uo_imflatbutton within w_bom_build_assist
  28. end type
  29. type ln_bar from line within w_bom_build_assist
  30. end type
  31. type ln_bar2 from line within w_bom_build_assist
  32. end type
  33. type ln_1 from line within w_bom_build_assist
  34. end type
  35. type ln_2 from line within w_bom_build_assist
  36. end type
  37. type r_bar from rectangle within w_bom_build_assist
  38. end type
  39. end forward
  40. global type w_bom_build_assist from w_publ_base
  41. integer width = 4224
  42. integer height = 2328
  43. string title = "物料清单辅助表"
  44. boolean maxbox = true
  45. boolean resizable = true
  46. windowstate windowstate = maximized!
  47. event ue_f8 ( )
  48. event ue_f9 ( )
  49. event ue_f10 ( )
  50. event ue_save_modle ( )
  51. event ue_save_modle_as ( )
  52. event ue_save_bill ( )
  53. event ue_save_bill_as ( )
  54. event ue_open_bill ( )
  55. event ue_pickmtrl ( )
  56. event ue_addmx ( )
  57. event ue_delmx ( )
  58. dw_1 dw_1
  59. cb_1 cb_1
  60. st_1 st_1
  61. cb_2 cb_2
  62. cb_edit cb_edit
  63. cb_3 cb_3
  64. cb_addmx cb_addmx
  65. cb_4 cb_4
  66. cb_sort cb_sort
  67. cb_6 cb_6
  68. cb_7 cb_7
  69. cb_5 cb_5
  70. ln_bar ln_bar
  71. ln_bar2 ln_bar2
  72. ln_1 ln_1
  73. ln_2 ln_2
  74. r_bar r_bar
  75. end type
  76. global w_bom_build_assist w_bom_build_assist
  77. type variables
  78. long ins_column_count = 0
  79. uo_cmpl_modle uo_modle
  80. uo_cmpl_bill uo_bill
  81. string ins_oldtitle
  82. // 区间
  83. long ins_first = 8
  84. long ins_last = 47
  85. end variables
  86. forward prototypes
  87. public function integer wf_build_bom (ref string arg_msg)
  88. public function integer wf_checkrand (long checked_mtrlid, long obj_mtrlid)
  89. end prototypes
  90. event ue_f8();// TODO: 研究列添加的交互方式
  91. IF NOT IsValid(W_mtrldef_edit) THEN
  92. s_edit_index_tran s_tranf8 //传递参数使用
  93. s_tranf8.if_retrieve_all = FALSE //是否一次RETRIEVE所有行
  94. s_tranf8.work_mode = 1 //0-单纯编辑模式 1-选择\编辑模式
  95. s_tranf8.arg_pkid = 0 //目标定位PKID (备用)
  96. s_tranf8.arg_string_code = '' //查询列(物料编码)部分内容,用于初步筛选
  97. s_tranf8.if_select_all = TRUE //多选
  98. s_tranf8.b_long = 0 //选采购
  99. s_tranf8.c_long = -1
  100. Long chc = 1,ls_j
  101. OpenWithParm(W_mtrldef_edit,s_tranf8) //调用
  102. s_mtrldef_array S_INSCUST
  103. S_INSCUST = Message.PowerObjectParm //接受返回结构
  104. IF UpperBound(S_INSCUST.mtrlid) > 30 THEN
  105. MessageBox('提示', '一次最多只能选30个产品')
  106. RETURN
  107. END IF
  108. if upperBound(S_INSCUST.mtrlid) <= 0 then return
  109. if S_INSCUST.mtrlid[1] <= 0 then return
  110. dw_1.Reset()
  111. String ls_mod
  112. FOR ls_j = ins_first TO ins_last
  113. ls_mod = '#' + String(ls_j) + '.Visible = 0'
  114. ls_mod = dw_1.Modify(ls_mod)
  115. NEXT
  116. chc = 0
  117. FOR ls_j = 1 TO UpperBound(S_INSCUST.mtrlid)
  118. IF S_INSCUST.mtrlid[ls_j] > 0 THEN
  119. chc ++
  120. ls_mod = 'mtrl' + String(chc) + '.Visible = 1'
  121. ls_mod = dw_1.Modify(ls_mod)
  122. ls_mod = 'mtrl' + String(chc) + '_t.Text = ~''+String(S_INSCUST.mtrlname[ls_j])+'~''
  123. ls_mod = dw_1.Modify(ls_mod)
  124. ls_mod = 'mtrl' + String(chc) + '_t.Tag = ~''+String(S_INSCUST.mtrlid[ls_j])+'~''
  125. ls_mod = dw_1.Modify(ls_mod)
  126. ls_mod = 'mtrl' + String(chc) + '.Tag = ~''+String(S_INSCUST.mtrlcode[ls_j])+'~''
  127. ls_mod = dw_1.Modify(ls_mod)
  128. END IF
  129. NEXT
  130. ins_column_count = chc
  131. FOR ls_j = (ins_first + 30) TO ins_last
  132. ls_mod = '#' + String(ls_j) + '.Visible = 1'
  133. ls_mod = dw_1.Modify(ls_mod)
  134. NEXT
  135. //
  136. // for ls_j = 1 to UpperBound(S_INSCUST.mtrlid)
  137. // if S_INSCUST.mtrlid[ls_j] > 0 then
  138. // chc = dw_2.insertrow(0)
  139. // dw_2.object.mtrlid[chc] = S_INSCUST.mtrlid[1]
  140. // dw_2.object.mtrlcode[chc] = S_INSCUST.mtrlcode[1]
  141. // dw_2.object.mtrlname[chc] = S_INSCUST.mtrlname[1]
  142. //
  143. // end if
  144. // next
  145. //
  146. // dw_1.Reset()
  147. END IF
  148. end event
  149. event ue_f9();long ll_product_mtrlid
  150. string ls_dscrp, ls_mode[]
  151. decimal ld_value
  152. if ins_column_count = 0 then
  153. MessageBox('提示', '请先选择产品')
  154. return
  155. end if
  156. IF NOT IsValid(w_bom_modle_ch) THEN
  157. Open(w_bom_modle_ch) //调用
  158. long ls_j, ll_row, ll_col
  159. s_cmpl_modle_ch S_INSCUST
  160. S_INSCUST = Message.PowerObjectParm //接受返回结构
  161. if S_INSCUST.modleid > 0 then
  162. uo_modle.modleid = s_inscust.modleid
  163. uo_modle.modlename = s_inscust.modlename
  164. dw_1.reset()
  165. st_1.Text = '模板名:' + S_INSCUST.modlename
  166. for ls_j = 1 to upperbound(S_INSCUST.printid)
  167. ll_row = dw_1.insertrow(0)
  168. dw_1.object.printid[ll_row] = S_INSCUST.printid[ls_j]
  169. dw_1.object.parmname[ll_row] = S_INSCUST.parmname[ls_j]
  170. dw_1.object.displayname[ll_row] = S_INSCUST.displayname[ls_j]
  171. dw_1.object.defaultvalue[ll_row] = S_INSCUST.defaultvalue[ls_j]
  172. dw_1.object.if_useformula[ll_row] = S_INSCUST.if_useformula[ls_j]
  173. dw_1.object.formula[ll_row] = S_INSCUST.formula[ls_j]
  174. dw_1.object.if_from_mtrl[ll_row] = S_INSCUST.if_from_mtrl[ls_j]
  175. dw_1.object.mtrlid[ll_row] = S_INSCUST.mtrlid[ls_j]
  176. dw_1.object.mtrl_pro[ll_row] = S_INSCUST.mtrl_pro[ls_j]
  177. dw_1.object.if_from_product[ll_row] = S_INSCUST.if_from_product[ls_j]
  178. dw_1.object.product_pro[ll_row] = S_INSCUST.product_pro[ls_j]
  179. dw_1.object.mtrlcode[ll_row] = S_INSCUST.mtrlcode[ls_j]
  180. dw_1.object.mtrlname[ll_row] = S_INSCUST.mtrlname[ls_j]
  181. dw_1.object.dscrp[ll_row] = S_INSCUST.dscrp[ls_j]
  182. dw_1.object.wrkGrpid[ll_row] = S_INSCUST.wrkGrpid[ls_j]
  183. dw_1.object.advancetime[ll_row] = S_INSCUST.advancetime[ls_j]
  184. dw_1.object.unit[ll_row] = S_INSCUST.unit[ls_j]
  185. //==============================================================================
  186. // 物料相关
  187. //==============================================================================
  188. if S_INSCUST.if_from_mtrl[ls_j] = 1 then
  189. if S_INSCUST.mtrl_pro[ls_j] = '最新价' then
  190. // DONE: 获取物料最新价
  191. SELECT price INTO :ld_value
  192. FROM v_maxprice_sptprice
  193. WHERE mtrlid = :S_INSCUST.mtrlid[ls_j];
  194. if sqlca.sqlcode <> 0 then
  195. ld_value = 0
  196. end if
  197. for ll_col = 1 to ins_column_count
  198. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ld_value)
  199. next
  200. end if
  201. if S_INSCUST.mtrl_pro[ls_j] = '缩率' then
  202. // DONE: 获取物料缩率
  203. SELECT zxmtrlmode INTO :ls_dscrp
  204. FROM u_mtrldef
  205. WHERE mtrlid = :S_INSCUST.mtrlid[ls_j];
  206. if sqlca.sqlcode <> 0 then
  207. ls_dscrp = '0'
  208. end if
  209. if not IsNumber(ls_dscrp) then
  210. ls_dscrp = '0'
  211. end if
  212. ld_value = dec(ls_dscrp)
  213. for ll_col = 1 to ins_column_count
  214. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ld_value)
  215. next
  216. end if
  217. end if
  218. //==============================================================================
  219. // 产品相关
  220. //==============================================================================
  221. if S_INSCUST.if_from_product[ls_j] = 1 then
  222. if S_INSCUST.product_pro[ls_j] = '长' then
  223. for ll_col = 1 to ins_column_count
  224. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  225. ll_product_mtrlid = long(ls_dscrp)
  226. // DONE: 获取产品长
  227. SELECT mtrlmode INTO :ls_dscrp
  228. FROM u_mtrldef
  229. WHERE mtrlid = :ll_product_mtrlid;
  230. if sqlca.sqlcode <> 0 then
  231. ls_dscrp = '0*0*0'
  232. end if
  233. f_str_split(ls_dscrp, '*', ls_mode)
  234. if upperbound(ls_mode) < 1 then
  235. ls_mode[1] = '0'
  236. end if
  237. if not isnumber(ls_mode[1]) then
  238. ls_mode[1] = '0'
  239. end if
  240. ld_value = dec(ls_mode[1])
  241. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ld_value)
  242. next
  243. end if
  244. if S_INSCUST.product_pro[ls_j] = '宽' then
  245. for ll_col = 1 to ins_column_count
  246. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  247. ll_product_mtrlid = long(ls_dscrp)
  248. // DONE: 获取产品宽
  249. SELECT mtrlmode INTO :ls_dscrp
  250. FROM u_mtrldef
  251. WHERE mtrlid = :ll_product_mtrlid;
  252. if sqlca.sqlcode <> 0 then
  253. ls_dscrp = '0*0*0'
  254. end if
  255. f_str_split(ls_dscrp, '*', ls_mode)
  256. if upperbound(ls_mode) < 2 then
  257. ls_mode[2] = '0'
  258. end if
  259. if not isnumber(ls_mode[2]) then
  260. ls_mode[2] = '0'
  261. end if
  262. ld_value = dec(ls_mode[2])
  263. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ld_value)
  264. next
  265. end if
  266. if S_INSCUST.product_pro[ls_j] = '高' then
  267. for ll_col = 1 to ins_column_count
  268. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  269. ll_product_mtrlid = long(ls_dscrp)
  270. // DONE: 获取产品高
  271. SELECT mtrlmode INTO :ls_dscrp
  272. FROM u_mtrldef
  273. WHERE mtrlid = :ll_product_mtrlid;
  274. if sqlca.sqlcode <> 0 then
  275. ls_dscrp = '0*0*0'
  276. end if
  277. f_str_split(ls_dscrp, '*', ls_mode)
  278. if upperbound(ls_mode) < 3 then
  279. ls_mode[3] = '0'
  280. end if
  281. if not isnumber(ls_mode[3]) then
  282. ls_mode[3] = '0'
  283. end if
  284. ld_value = dec(ls_mode[3])
  285. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ld_value)
  286. next
  287. end if
  288. end if
  289. if S_INSCUST.if_useformula[ls_j] = 1 then
  290. // DONE: 公式字段,手动触发
  291. end if
  292. //==============================================================================
  293. // 不用公式,不相关物料,不相关产品
  294. //==============================================================================
  295. // if S_INSCUST.if_useformula[ls_j] <> 1 AND S_INSCUST.if_from_product[ls_j] <> 1 AND S_INSCUST.if_from_mtrl[ls_j] <> 1 then
  296. // for ll_col = 1 to ins_column_count
  297. // dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), S_INSCUST.defaultValue[ls_j])
  298. // next
  299. // end if
  300. next
  301. end if
  302. END IF
  303. end event
  304. event ue_f10();s_cmpl_parm s_parms[]
  305. Long ll_row, ll_col
  306. String ls_msg
  307. Decimal ll_value
  308. if ins_column_count = 0 then
  309. MessageBox('提示', '请先选择产品')
  310. return
  311. end if
  312. if dw_1.RowCount() <= 0 then
  313. MessageBox('提示', '请先选择计价模板')
  314. return
  315. end if
  316. if dw_1.accepttext() <> 1 then return
  317. FOR ll_row = 1 TO dw_1.RowCount()
  318. FOR ll_col = 1 TO ins_column_count
  319. s_parms[ll_col].parmname[ll_row] = dw_1.Object.parmname[ll_row]
  320. s_parms[ll_col].DisplayName[ll_row] = dw_1.Object.DisplayName[ll_row]
  321. s_parms[ll_col].parmvalue[ll_row] = 0
  322. IF dw_1.Object.if_useformula[ll_row] = 1 THEN
  323. IF f_cmpl_with_parms(dw_1.Object.formula[ll_row], s_parms[ll_col], ll_value, ls_msg) <> 1 THEN
  324. MessageBox('计算公式失败', ls_msg, stopsign!)
  325. dw_1.ScrollToRow(ll_row)
  326. dw_1.SetColumn('formula')
  327. dw_1.SetFocus()
  328. RETURN
  329. END IF
  330. dw_1.SetItem(ll_row, 'mtrl' + String(ll_col), ll_value)
  331. END IF
  332. s_parms[ll_col].parmvalue[ll_row] = dw_1.GetItemDecimal(ll_row, 'mtrl' + String(ll_col))
  333. NEXT
  334. NEXT
  335. end event
  336. event ue_save_modle();// DONE: 保存模板
  337. if dw_1.rowcount() <= 0 then
  338. MessageBox('提示', '没有内容不能保存')
  339. return
  340. end if
  341. s_inputbox s_parm
  342. string ls_return
  343. long i
  344. if dw_1.accepttext() <> 1 then
  345. return
  346. end if
  347. for i = 1 to dw_1.RowCount()
  348. if trim(dw_1.object.parmname[i]) = '' then
  349. MessageBox('提示', '参数名不能为空')
  350. dw_1.scrolltorow(i)
  351. dw_1.setcolumn('parmname')
  352. dw_1.SetFocus()
  353. return
  354. end if
  355. if trim(dw_1.object.displayname[i]) = '' then
  356. MessageBox('提示', '显示名不能为空')
  357. dw_1.scrolltorow(i)
  358. dw_1.setcolumn('displayname')
  359. dw_1.SetFocus()
  360. return
  361. end if
  362. if pos(dw_1.object.parmname[i], '[') > 0 then
  363. MessageBox('提示', '参数名不能包含字符"["')
  364. dw_1.scrolltorow(i)
  365. dw_1.setcolumn('parmname')
  366. dw_1.SetFocus()
  367. return
  368. end if
  369. if pos(dw_1.object.parmname[i], ']') > 0 then
  370. MessageBox('提示', '参数名不能包含字符"]"')
  371. dw_1.scrolltorow(i)
  372. dw_1.setcolumn('parmname')
  373. dw_1.SetFocus()
  374. return
  375. end if
  376. if dw_1.object.if_useformula[i] = 1 AND trim(dw_1.object.formula[i]) = '' then
  377. MEssageBox('提示', '请输入公式')
  378. dw_1.scrolltorow(i)
  379. dw_1.setcolumn('formula')
  380. dw_1.SetFocus()
  381. return
  382. end if
  383. if dw_1.object.if_from_mtrl[i] = 1 AND dw_1.object.mtrlid[i] <= 0 then
  384. MessageBox('提示', '请选择相关物料')
  385. dw_1.scrolltorow(i)
  386. dw_1.setcolumn('mtrlcode')
  387. dw_1.SetFocus()
  388. return
  389. end if
  390. if dw_1.object.if_from_mtrl[i] = 1 AND trim(dw_1.object.mtrl_pro[i]) = '' then
  391. MessageBox('提示', '请选择相关物料属性')
  392. dw_1.scrolltorow(i)
  393. dw_1.setcolumn('mtrl_pro')
  394. dw_1.SetFocus()
  395. return
  396. end if
  397. if dw_1.object.if_from_product[i] = 1 AND trim(dw_1.object.product_pro[i]) = '' then
  398. MessageBox('提示', '请选择相关产品属性')
  399. dw_1.scrolltorow(i)
  400. dw_1.setcolumn('product_pro')
  401. dw_1.SetFocus()
  402. return
  403. end if
  404. next
  405. string ls_msg
  406. if uo_modle.modleid = 0 then
  407. if uo_modle.newbegin(ls_msg) <> 1 then
  408. MessageBox('', ls_msg)
  409. return
  410. end if
  411. s_parm.title = '输入工作表名称'
  412. s_parm.old_text = ''
  413. openwithparm(w_inputbox, s_parm)
  414. ls_return = message.stringparm
  415. if ls_return = '' OR isnull(ls_return) then return
  416. uo_modle.ModleName = ls_return
  417. else
  418. if uo_modle.updatebegin(uo_modle.modleid, ls_msg) <> 1 then
  419. MessageBox('', ls_msg)
  420. return
  421. end if
  422. end if
  423. uo_modle.modletype = 2
  424. // uo_modle.modlename = trim(sle_modlename.text)
  425. s_cmpl_modlemx tmp[]
  426. for i = 1 to dw_1.RowCount()
  427. dw_1.object.printid[i] = i
  428. tmp[i].modleid = 0
  429. tmp[i].printid = dw_1.object.printid[i]
  430. tmp[i].parmName = dw_1.object.parmName[i]
  431. tmp[i].displayName = dw_1.object.displayName[i]
  432. tmp[i].defaultValue = dw_1.object.defaultValue[i]
  433. tmp[i].if_useformula = dw_1.object.if_useformula[i]
  434. tmp[i].formula = dw_1.object.formula[i]
  435. tmp[i].if_from_mtrl = dw_1.object.if_from_mtrl[i]
  436. tmp[i].mtrlid = dw_1.object.mtrlid[i]
  437. tmp[i].mtrl_pro = dw_1.object.mtrl_pro[i]
  438. tmp[i].if_from_product = dw_1.object.if_from_product[i]
  439. tmp[i].product_pro = dw_1.object.product_pro[i]
  440. next
  441. uo_modle.mxs = tmp
  442. if uo_modle.savesubmit(ls_msg) <> 1 then
  443. MessageBox('错误', ls_msg)
  444. return
  445. end if
  446. st_1.Text = '模板名:' + uo_modle.modlename
  447. end event
  448. event ue_save_modle_as();// DONE: 另存模板
  449. long oldid
  450. oldid = uo_modle.modleid
  451. uo_modle.modleid = 0
  452. this.triggerevent('ue_save_modle')
  453. if uo_modle.modleid = 0 then
  454. uo_modle.modleid = oldid
  455. end if
  456. end event
  457. event ue_save_bill();// DONE: 保存工作表
  458. if dw_1.rowcount() <= 0 then
  459. MessageBox('提示', '没有内容不能保存')
  460. return
  461. end if
  462. s_inputbox s_parm
  463. string ls_return
  464. long i
  465. if dw_1.accepttext() <> 1 then
  466. return
  467. end if
  468. string ls_msg
  469. if uo_bill.ModleID = 0 then
  470. if uo_bill.Newbegin(ls_msg) <> 1 then
  471. MessageBox('', ls_msg)
  472. return
  473. end if
  474. s_parm.title = '输入工作表名称'
  475. s_parm.old_text = ''
  476. openwithparm(w_inputbox, s_parm)
  477. ls_return = message.stringparm
  478. if ls_return = '' OR isnull(ls_return) then return
  479. uo_bill.ModleName = ls_return
  480. else
  481. if uo_bill.UpdateBegin(uo_bill.Modleid, ls_msg) <> 1 then
  482. MessageBox('', ls_msg)
  483. return
  484. end if
  485. end if
  486. uo_bill.ModleType = 3
  487. uo_bill.orgModleID = 0
  488. s_cmpl_modlemx tmp[]
  489. s_cmpl_modlemx_mx tmp_mx[]
  490. long j = 0, ll_col = 0
  491. string ls_dscrp
  492. for i = 1 to dw_1.RowCount()
  493. dw_1.object.printid[i] = i
  494. tmp[i].modleid = 0
  495. tmp[i].printid = i
  496. tmp[i].parmName = dw_1.object.parmName[i]
  497. tmp[i].displayName = dw_1.object.displayName[i]
  498. tmp[i].defaultValue = 0
  499. tmp[i].if_useformula = dw_1.object.if_useformula[i]
  500. tmp[i].formula = dw_1.object.formula[i]
  501. tmp[i].if_from_mtrl = dw_1.object.if_from_mtrl[i]
  502. tmp[i].mtrlid = dw_1.object.mtrlid[i]
  503. tmp[i].mtrl_pro = dw_1.object.mtrl_pro[i]
  504. tmp[i].if_from_product = dw_1.object.if_from_product[i]
  505. tmp[i].product_pro = dw_1.object.product_pro[i]
  506. for ll_col = 1 to ins_column_count
  507. j++
  508. tmp_mx[j].ModleID = 0
  509. tmp_mx[j].printid = i
  510. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  511. tmp_mx[j].mtrlid = long(ls_dscrp)
  512. tmp_mx[j].value = dw_1.GetItemDecimal(i, 'mtrl' + String(ll_col))
  513. next
  514. next
  515. uo_bill.mxs = tmp
  516. uo_bill.mx_mxs = tmp_mx
  517. if uo_bill.savesubmit(ls_msg) <> 1 then
  518. MessageBox('错误', ls_msg)
  519. return
  520. end if
  521. this.Title = ins_oldTitle + '[' + uo_bill.ModleName + ']'
  522. end event
  523. event ue_save_bill_as();// DONE: 另存工作表
  524. long oldid
  525. oldid = uo_bill.modleid
  526. uo_bill.modleid = 0
  527. this.triggerevent('ue_save_bill')
  528. if uo_bill.modleid = 0 then
  529. uo_bill.modleid = oldid
  530. end if
  531. end event
  532. event ue_open_bill();// DONE: 打开工作表
  533. Long arg_Modleid
  534. String ls_msg
  535. s_mtrldef_array S_INSCUST
  536. Long ll_col = 0, ls_j, chc, ll_row, ll_i
  537. Long ll_mtrlid
  538. String ll_mtrlcode
  539. String ll_mtrlname
  540. string ls_dscrp
  541. decimal ll_value
  542. IF NOT IsValid(w_bom_bill_ch) THEN
  543. Open(w_bom_bill_ch) //调用
  544. s_cmpl_modle_ch s_choice
  545. s_choice = Message.PowerObjectParm //接受返回结构
  546. if isnull(s_choice) then return
  547. if isnull(s_choice.modleid) then return
  548. if s_choice.modleid > 0 then
  549. arg_ModleID = s_choice.modleid
  550. IF uo_bill.GetINfo(arg_Modleid, ls_msg) <> 1 THEN
  551. MessageBox('', ls_msg)
  552. RETURN
  553. END IF
  554. this.title = ins_oldtitle + '[' + uo_bill.ModleName + ']'
  555. declare cur1 cursor for select DISTINCT u_cmpl_modleMx_Mx.mtrlid, u_mtrldef.mtrlcode, u_mtrldef.mtrlname
  556. from u_cmpl_modleMx_Mx inner JOIN
  557. u_mtrldef ON u_cmpl_modleMx_Mx.mtrlid = u_mtrldef.mtrlid
  558. Where (u_cmpl_modleMx_Mx.ModleID = :arg_Modleid);
  559. open cur1;
  560. fetch cur1 INTO :ll_mtrlid, :ll_mtrlcode, :ll_mtrlname;
  561. DO WHILE sqlca.SQLCode = 0
  562. ll_col ++
  563. S_INSCUST.mtrlid[ll_col] = ll_mtrlid
  564. S_INSCUST.mtrlcode[ll_col] = ll_mtrlcode
  565. S_INSCUST.mtrlname[ll_col] = ll_mtrlname
  566. fetch cur1 INTO :ll_mtrlid, :ll_mtrlcode, :ll_mtrlname;
  567. LOOP
  568. close cur1;
  569. dw_1.Reset()
  570. String ls_mod
  571. FOR ls_j = 8 TO 47
  572. ls_mod = '#' + String(ls_j) + '.Visible = 0'
  573. ls_mod = dw_1.Modify(ls_mod)
  574. NEXT
  575. chc = 0
  576. FOR ls_j = 1 TO UpperBound(S_INSCUST.mtrlid)
  577. IF S_INSCUST.mtrlid[ls_j] > 0 THEN
  578. chc ++
  579. ls_mod = 'mtrl' + String(chc) + '.Visible = 1'
  580. ls_mod = dw_1.Modify(ls_mod)
  581. ls_mod = 'mtrl' + String(chc) + '_t.Text = ~''+String(S_INSCUST.mtrlname[ls_j])+'~''
  582. ls_mod = dw_1.Modify(ls_mod)
  583. ls_mod = 'mtrl' + String(chc) + '_t.Tag = ~''+String(S_INSCUST.mtrlid[ls_j])+'~''
  584. ls_mod = dw_1.Modify(ls_mod)
  585. ls_mod = 'mtrl' + String(chc) + '.Tag = ~''+String(S_INSCUST.mtrlcode[ls_j])+'~''
  586. ls_mod = dw_1.Modify(ls_mod)
  587. END IF
  588. NEXT
  589. ins_column_count = chc
  590. FOR ls_j = 38 TO 47
  591. ls_mod = '#' + String(ls_j) + '.Visible = 1'
  592. ls_mod = dw_1.Modify(ls_mod)
  593. NEXT
  594. FOR ll_i = 1 TO UpperBound(uo_bill.mxs)
  595. ll_row = dw_1.insertrow(0)
  596. dw_1.object.printid[ll_row] = uo_bill.mxs[ll_i].printid
  597. dw_1.object.parmname[ll_row] = uo_bill.mxs[ll_i].parmname
  598. dw_1.object.displayname[ll_row] = uo_bill.mxs[ll_i].displayname
  599. dw_1.object.defaultvalue[ll_row] = uo_bill.mxs[ll_i].defaultvalue
  600. dw_1.object.if_useformula[ll_row] = uo_bill.mxs[ll_i].if_useformula
  601. dw_1.object.formula[ll_row] = uo_bill.mxs[ll_i].formula
  602. dw_1.object.if_from_mtrl[ll_row] = uo_bill.mxs[ll_i].if_from_mtrl
  603. dw_1.object.mtrlid[ll_row] = uo_bill.mxs[ll_i].mtrlid
  604. dw_1.object.mtrl_pro[ll_row] = uo_bill.mxs[ll_i].mtrl_pro
  605. dw_1.object.if_from_product[ll_row] = uo_bill.mxs[ll_i].if_from_product
  606. dw_1.object.product_pro[ll_row] = uo_bill.mxs[ll_i].product_pro
  607. dw_1.object.wrkGrpid[ll_row] = uo_bill.mxs[ll_i].wrkGrpid
  608. dw_1.object.advancetime[ll_row] = uo_bill.mxs[ll_i].advancetime
  609. dw_1.object.dscrp[ll_row] = uo_bill.mxs[ll_i].dscrp
  610. dw_1.object.unit[ll_row] = uo_bill.mxs[ll_i].unit
  611. SELECT mtrlcode , mtrlname
  612. INTO :ll_mtrlcode, :ll_mtrlname
  613. FROM u_mtrldef
  614. WHERE mtrlid = :uo_bill.mxs[ll_i].mtrlid;
  615. if sqlca.sqlcode <> 0 then
  616. ll_mtrlcode = ''
  617. ll_mtrlname = ''
  618. dw_1.object.mtrlid[ll_row] = 0
  619. end if
  620. dw_1.object.mtrlcode[ll_row] = ll_mtrlcode
  621. dw_1.object.mtrlname[ll_row] = ll_mtrlname
  622. for ll_col = 1 to ins_column_count
  623. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  624. ll_mtrlid = long(ls_dscrp)
  625. ll_value = 0
  626. for ls_j = 1 to upperbound(uo_bill.mx_mxs)
  627. if uo_bill.mx_mxs[ls_j].printid = uo_bill.mxs[ll_i].printid &
  628. and uo_bill.mx_mxs[ls_j].mtrlid = ll_mtrlid then
  629. ll_value = uo_bill.mx_mxs[ls_j].value
  630. exit
  631. end if
  632. next
  633. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ll_value)
  634. next
  635. NEXT
  636. end if
  637. end if
  638. end event
  639. event ue_pickmtrl(); IF NOT IsValid(W_mtrldef_edit) THEN
  640. s_edit_index_tran s_tranf8 //传递参数使用
  641. s_tranf8.if_retrieve_all = FALSE //是否一次RETRIEVE所有行
  642. s_tranf8.work_mode = 1 //0-单纯编辑模式 1-选择\编辑模式
  643. s_tranf8.arg_pkid = 0 //目标定位PKID (备用)
  644. s_tranf8.arg_string_code = '' //查询列(物料编码)部分内容,用于初步筛选
  645. s_tranf8.if_select_all = FALSE //多选
  646. s_tranf8.b_long = 2 //选采购
  647. s_tranf8.c_long = -1
  648. s_tranf8.f_long = 2
  649. Long chc = 1,ls_j
  650. IF dw_1.GetRow() > 0 THEN s_tranf8.arg_string_code = Trim(dw_1.Object.mtrlcode[dw_1.GetRow()])
  651. OpenWithParm(W_mtrldef_edit,s_tranf8) //调用
  652. s_mtrldef_array S_INSCUST
  653. S_INSCUST = Message.PowerObjectParm //接受返回结构
  654. if UpperBound(S_INSCUST.mtrlid) > 0 then
  655. if S_INSCUST.mtrlid[1] > 0 then
  656. dw_1.object.mtrlid[dw_1.GetRow()] = S_INSCUST.mtrlid[1]
  657. dw_1.object.mtrlcode[dw_1.GetRow()] = S_INSCUST.mtrlcode[1]
  658. dw_1.object.mtrlname[dw_1.GetRow()] = S_INSCUST.mtrlname[1]
  659. dw_1.object.displayname[dw_1.GetRow()] = S_INSCUST.mtrlname[1]
  660. dw_1.object.unit[dw_1.GetRow()] = S_INSCUST.unit[1]
  661. end if
  662. end if
  663. end if
  664. end event
  665. event ue_addmx();long ll_row
  666. ll_row = dw_1.insertrow(0)
  667. dw_1.object.printid[ll_row] = ll_row
  668. dw_1.scrolltorow(ll_row)
  669. dw_1.setcolumn('mtrl1')
  670. dw_1.setfocus()
  671. end event
  672. event ue_delmx();if dw_1.GetRow() > 0 then
  673. dw_1.deleterow(dw_1.GetRow())
  674. dw_1.setfocus()
  675. end if
  676. end event
  677. public function integer wf_build_bom (ref string arg_msg);Int rslt = 1
  678. Long productid
  679. String productname
  680. Long ll_col
  681. Long ll_row
  682. Long ll_flag
  683. Long cnt = 0
  684. Long ll_cnt = 0
  685. Long ll_mtrlid
  686. String ll_pfcode
  687. String ll_pfgroup
  688. Long ll_SonMtrlid
  689. Long ll_ifreputate
  690. Long ll_ifover
  691. Decimal ll_updownrate
  692. Decimal ll_Sonscale
  693. Decimal ll_SonLoss
  694. Decimal ll_SonDECLosS
  695. Decimal ll_Sonahead
  696. String ll_dscrp
  697. Decimal ll_pfgroupqty
  698. String ll_pfgroupmode
  699. String ll_promode
  700. Long ll_printid
  701. Long ll_wrkgrpid
  702. String ll_status
  703. String ll_sonpfcode
  704. String ll_woodcode
  705. String ll_pcode
  706. Long ll_mtrlkind
  707. String ll_pfklmode
  708. Long ll_dipztype
  709. Decimal ll_scllloss
  710. Long ll_dytype
  711. Decimal ll_advancetime
  712. Decimal ll_sclldecloss
  713. Decimal ll_baseqty
  714. String ll_SonLossstr
  715. Decimal ll_buyarg
  716. String ls_mtrlmode
  717. Long li_sonpfflag
  718. Long li_ifpackpro
  719. Long li_ifpack
  720. Long ls_cr_rsl
  721. FOR ll_col = 1 To ins_column_count
  722. productid = Long(dw_1.Describe('mtrl' + String(ll_col) + '_t.tag'))
  723. IF productid <= 0 THEN
  724. rslt = 0
  725. arg_msg = '非法产品唯一码'
  726. GOTO ext
  727. END IF
  728. SELECT flag INTO :ll_flag FROM u_mtrl_pf
  729. Where Mtrlid = :productid And pfcode = '[常规]';
  730. IF sqlca.SQLCode <> 0 THEN
  731. rslt = 0
  732. arg_msg = '查询物料清单状态失败,' + sqlca.SQLErrText
  733. GOTO ext
  734. END IF
  735. productname = dw_1.Describe('mtrl' + String(ll_col) + '_t.text')
  736. IF ll_flag = 1 THEN
  737. rslt = 0
  738. arg_msg = '产品:' + productname +'物料清单已经审核'
  739. GOTO ext
  740. END IF
  741. DELETE From u_PrdPF Where Mtrlid = :productid And pfcode = '[常规]';
  742. IF sqlca.SQLCode <> 0 THEN
  743. rslt = 0
  744. arg_msg = '删除产品物料清单失败,' + sqlca.SQLErrText
  745. GOTO ext
  746. END IF
  747. SELECT ifpackpro INTO :li_ifpackpro
  748. FROM u_mtrldef
  749. Where Mtrlid = :productid;
  750. IF sqlca.SQLCode <> 0 THEN
  751. rslt = 0
  752. arg_msg = '查询物料是否全包件产品失败'+sqlca.SQLErrText
  753. GOTO ext
  754. END IF
  755. FOR ll_row = 1 To dw_1.RowCount()
  756. ll_Sonscale = dw_1.GetItemDecimal(ll_row, 'mtrl' + String(ll_col))
  757. IF dw_1.Object.Mtrlid[ll_row] > 0 and ll_Sonscale <> 0 THEN
  758. ll_cnt ++
  759. ll_mtrlid = productid
  760. ll_pfcode = '[常规]'
  761. ll_pfgroup = dw_1.Object.displayname[ll_row]
  762. ll_SonMtrlid = dw_1.Object.Mtrlid[ll_row]
  763. SELECT mtrlmode, mtrlkind
  764. INTO :ll_pfgroupmode, :ll_mtrlkind
  765. From u_mtrldef Where Mtrlid = :ll_SonMtrlid;
  766. IF sqlca.SQLCode <> 0 THEN
  767. rslt = 0
  768. arg_msg = '查询物料属性失败,' + sqlca.SQLErrText
  769. GOTO ext
  770. END IF
  771. ll_ifreputate = 0
  772. ll_ifover = 0
  773. ll_updownrate = 0
  774. ll_SonLoss = 0
  775. ll_SonDECLosS = 0
  776. ll_Sonahead = 1
  777. ll_dscrp = dw_1.Object.dscrp[ll_row]
  778. ll_pfgroupqty = 0
  779. ll_promode = 'B'
  780. ll_printid = ll_cnt
  781. ll_wrkgrpid = dw_1.Object.wrkGrpid[ll_row]
  782. ll_status = ''
  783. ll_sonpfcode = f_get_dft_pf(ll_SonMtrlid)
  784. ll_woodcode = ''
  785. ll_pcode = ''
  786. ll_pfklmode = ''
  787. ll_dipztype = 0
  788. ll_scllloss = 0
  789. ll_dytype = 0
  790. ll_advancetime = dw_1.Object.advancetime[ll_row]
  791. ll_sclldecloss = 0
  792. ll_baseqty = 1
  793. ll_SonLossstr = ''
  794. ll_buyarg = 1
  795. //====================================================================
  796. // 合法性检测
  797. //====================================================================
  798. IF ll_Sonscale < 0 THEN
  799. rslt = 0
  800. arg_msg = '第 '+String(ll_row)+' 行,不合理组成数量!在 '+productname+' ,请核对!'
  801. dw_1.ScrollToRow(ll_row)
  802. dw_1.SetColumn('parmname')
  803. dw_1.SetFocus()
  804. GOTO ext
  805. END IF
  806. IF ll_SonLoss < 0 Or ll_SonLoss >= 1 THEN
  807. rslt = 0
  808. arg_msg = '第 '+String(ll_row)+' 行,不合理损耗率!在 '+productname+' ,请核对!'
  809. dw_1.ScrollToRow(ll_row)
  810. dw_1.SetColumn('parmname')
  811. dw_1.SetFocus()
  812. GOTO ext
  813. END IF
  814. IF ll_SonDECLosS < 0 THEN
  815. rslt = 0
  816. arg_msg = '第 '+String(ll_row)+' 行,不合理附加损耗量!在 '+productname+' ,请核对!'
  817. dw_1.ScrollToRow(ll_row)
  818. dw_1.SetColumn('parmname')
  819. dw_1.SetFocus()
  820. GOTO ext
  821. END IF
  822. IF ll_wrkgrpid = 0 THEN
  823. rslt = 0
  824. arg_msg = '第 '+String(ll_row)+' 行,请先选择领用工组'
  825. dw_1.ScrollToRow(ll_row)
  826. dw_1.SetColumn('parmname')
  827. dw_1.SetFocus()
  828. GOTO ext
  829. END IF
  830. IF ll_baseqty < 1 THEN
  831. rslt = 0
  832. arg_msg = '第 '+String(ll_row)+' 行,基数必须大于1,请检查'
  833. dw_1.ScrollToRow(ll_row)
  834. dw_1.SetColumn('parmname')
  835. dw_1.SetFocus()
  836. GOTO ext
  837. END IF
  838. IF ll_buyarg < 0 THEN
  839. rslt = 0
  840. arg_msg = '第 '+String(ll_row)+' 行,采购参数不能小于0,请检查'
  841. dw_1.ScrollToRow(ll_row)
  842. dw_1.SetColumn('parmname')
  843. dw_1.SetFocus()
  844. GOTO ext
  845. END IF
  846. SELECT count(*) INTO :cnt
  847. FROM u_mtrl_pf
  848. WHERE mtrlid = :ll_sonmtrlid
  849. And pfcode = :ll_sonpfcode;
  850. IF sqlca.SQLCode <> 0 THEN
  851. rslt = 0
  852. arg_msg = '第 '+String(ll_row)+' 行,查询部件物料,物料清单资料失败,可能资料不存在'
  853. dw_1.ScrollToRow(ll_row)
  854. dw_1.SetColumn('parmname')
  855. dw_1.SetFocus()
  856. GOTO ext
  857. END IF
  858. IF cnt < 1 THEN
  859. rslt = 0
  860. arg_msg = '第 '+String(ll_row)+' 行,部件物料,物料清单资料['+ll_sonpfcode+']不存在'
  861. dw_1.ScrollToRow(ll_row)
  862. dw_1.SetColumn('parmname')
  863. dw_1.SetFocus()
  864. GOTO ext
  865. END IF
  866. IF cnt > 1 THEN
  867. rslt = 0
  868. arg_msg = '第 '+String(ll_row)+' 行,部件物料,物料清单资料['+ll_sonpfcode+']重复'
  869. dw_1.ScrollToRow(ll_row)
  870. dw_1.SetColumn('parmname')
  871. dw_1.SetFocus()
  872. GOTO ext
  873. END IF
  874. // IF sys_option_check_mtrl_pf = 1 THEN
  875. // SELECT flag INTO :li_sonpfflag
  876. // FROM u_mtrl_pf
  877. // WHERE mtrlid = :ll_sonmtrlid
  878. // And pfcode = :ll_sonpfcode;
  879. // IF sqlca.SQLCode <> 0 THEN
  880. // rslt = 0
  881. // arg_msg = '第 '+String(ll_row)+' 行,查询部件物料,物料清单资料失败,可能资料不存在'
  882. // dw_1.ScrollToRow(ll_row)
  883. // dw_1.SetColumn('parmname')
  884. // dw_1.SetFocus()
  885. // GOTO ext
  886. // END IF
  887. //
  888. // IF li_sonpfflag = 0 THEN
  889. // rslt = 0
  890. // arg_msg = '第 '+String(ll_row)+' 行,部件物料的物料清单没有审核,请检查'
  891. // dw_1.ScrollToRow(ll_row)
  892. // dw_1.SetColumn('parmname')
  893. // dw_1.SetFocus()
  894. // GOTO ext
  895. // END IF
  896. // END IF
  897. IF li_ifpackpro = 1 THEN
  898. SELECT ifpack INTO :li_ifpack
  899. FROM u_mtrldef
  900. Where Mtrlid = :ll_SonMtrlid;
  901. IF sqlca.SQLCode <> 0 THEN
  902. arg_msg = '第 '+String(ll_row)+' 行,查询部件物料是否属于包件失败'+sqlca.SQLErrText
  903. rslt = 0
  904. dw_1.ScrollToRow(ll_row)
  905. dw_1.SetColumn('parmname')
  906. dw_1.SetFocus()
  907. GOTO ext
  908. END IF
  909. IF li_ifpack = 0 THEN
  910. arg_msg = '第 '+String(ll_row)+' 行,全包件产品下级不能有非包件部件'
  911. rslt = 0
  912. dw_1.ScrollToRow(ll_row)
  913. dw_1.SetColumn('parmname')
  914. dw_1.SetFocus()
  915. GOTO ext
  916. END IF
  917. END IF
  918. //====================================================================
  919. //检查有否环
  920. //====================================================================
  921. ls_cr_rsl = wf_checkrand(ll_SonMtrlid, productid)
  922. IF ls_cr_rsl = 1 THEN
  923. rslt = 0
  924. arg_msg = '发现环!在第 '+String(ll_row)+' 行,请核对!'
  925. dw_1.ScrollToRow(ll_row)
  926. dw_1.SetColumn('parmname')
  927. dw_1.SetFocus()
  928. GOTO ext
  929. ELSEIF ls_cr_rsl < 0 THEN
  930. arg_msg = '因为网络或其他原因导致查环操作失败!在第 '+String(ll_row)+' 行,请核对!'
  931. rslt = 0
  932. dw_1.ScrollToRow(ll_row)
  933. dw_1.SetColumn('parmname')
  934. dw_1.SetFocus()
  935. GOTO ext
  936. END IF
  937. INSERT INTO u_PrdPF
  938. (mtrlid
  939. ,pfcode
  940. ,pfgroup
  941. ,SonMtrlid
  942. ,ifreputate
  943. ,ifover
  944. ,updownrate
  945. ,Sonscale
  946. ,SonLoss
  947. ,SonDECLosS
  948. ,Sonahead
  949. ,dscrp
  950. ,pfgroupqty
  951. ,pfgroupmode
  952. ,promode
  953. ,printid
  954. ,wrkgrpid
  955. ,status
  956. ,sonpfcode
  957. ,woodcode
  958. ,pcode
  959. ,mtrlkind
  960. ,pfklmode
  961. ,dipztype
  962. ,scllloss
  963. ,dytype
  964. ,advancetime
  965. ,sclldecloss
  966. ,baseqty
  967. ,SonLossstr
  968. ,buyarg)
  969. VALUES
  970. (:ll_mtrlid
  971. ,:ll_pfcode
  972. ,:ll_pfgroup
  973. ,:ll_SonMtrlid
  974. ,:ll_ifreputate
  975. ,:ll_ifover
  976. ,:ll_updownrate
  977. ,:ll_Sonscale
  978. ,:ll_SonLoss
  979. ,:ll_SonDECLosS
  980. ,:ll_Sonahead
  981. ,:ll_dscrp
  982. ,:ll_pfgroupqty
  983. ,:ll_pfgroupmode
  984. ,:ll_promode
  985. ,:ll_printid
  986. ,:ll_wrkgrpid
  987. ,:ll_status
  988. ,:ll_sonpfcode
  989. ,:ll_woodcode
  990. ,:ll_pcode
  991. ,:ll_mtrlkind
  992. ,:ll_pfklmode
  993. ,:ll_dipztype
  994. ,:ll_scllloss
  995. ,:ll_dytype
  996. ,:ll_advancetime
  997. ,:ll_sclldecloss
  998. ,:ll_baseqty
  999. ,:ll_SonLossstr
  1000. ,:ll_buyarg);
  1001. IF sqlca.SQLCode <> 0 THEN
  1002. rslt = 0
  1003. arg_msg = '插入物料清单明细失败,' + sqlca.SQLErrText
  1004. GOTO ext
  1005. END IF
  1006. END IF
  1007. NEXT
  1008. UPDATE u_mtrl_pf
  1009. SET moddate = getdate() ,
  1010. modemp = :publ_operator
  1011. Where Mtrlid = :productid;
  1012. IF sqlca.SQLCode <> 0 THEN
  1013. arg_msg = "因为网络或其他原因导致更新产品["+productname+"]物料构成修改时间>"+sqlca.SQLErrText
  1014. rslt = 0
  1015. GOTO ext
  1016. END IF
  1017. NEXT
  1018. ext:
  1019. IF rslt = 0 THEN
  1020. ROLLBACK;
  1021. ELSEIF rslt = 1 THEN
  1022. COMMIT;
  1023. END IF
  1024. RETURN rslt
  1025. end function
  1026. public function integer wf_checkrand (long checked_mtrlid, long obj_mtrlid);//wf_checkrand
  1027. IF checked_mtrlid = obj_mtrlid THEN RETURN 1
  1028. Long ls_mtrlid
  1029. Long rt_b,rt_s,count
  1030. Long mtrlid[],ls_i
  1031. DECLARE pf_cur CURSOR FOR
  1032. SELECT u_PrdPF.SonMtrlid
  1033. FROM u_PrdPF
  1034. Where ( u_PrdPF.mtrlid = :checked_mtrlid );
  1035. OPEN pf_cur;
  1036. count = 1
  1037. FETCH pf_cur INTO :mtrlid[count];
  1038. DO WHILE sqlca.SQLCode = 0
  1039. count++
  1040. FETCH pf_cur INTO :mtrlid[count];
  1041. LOOP
  1042. count = count - 1
  1043. CLOSE pf_cur;
  1044. FOR ls_i = 1 TO count
  1045. rt_b = wf_checkrand(mtrlid[ls_i], obj_mtrlid)
  1046. IF rt_b <> 0 THEN RETURN rt_b
  1047. NEXT
  1048. RETURN 0
  1049. //DO
  1050. //
  1051. //LOOP WHILE
  1052. end function
  1053. on w_bom_build_assist.create
  1054. int iCurrent
  1055. call super::create
  1056. this.dw_1=create dw_1
  1057. this.cb_1=create cb_1
  1058. this.st_1=create st_1
  1059. this.cb_2=create cb_2
  1060. this.cb_edit=create cb_edit
  1061. this.cb_3=create cb_3
  1062. this.cb_addmx=create cb_addmx
  1063. this.cb_4=create cb_4
  1064. this.cb_sort=create cb_sort
  1065. this.cb_6=create cb_6
  1066. this.cb_7=create cb_7
  1067. this.cb_5=create cb_5
  1068. this.ln_bar=create ln_bar
  1069. this.ln_bar2=create ln_bar2
  1070. this.ln_1=create ln_1
  1071. this.ln_2=create ln_2
  1072. this.r_bar=create r_bar
  1073. iCurrent=UpperBound(this.Control)
  1074. this.Control[iCurrent+1]=this.dw_1
  1075. this.Control[iCurrent+2]=this.cb_1
  1076. this.Control[iCurrent+3]=this.st_1
  1077. this.Control[iCurrent+4]=this.cb_2
  1078. this.Control[iCurrent+5]=this.cb_edit
  1079. this.Control[iCurrent+6]=this.cb_3
  1080. this.Control[iCurrent+7]=this.cb_addmx
  1081. this.Control[iCurrent+8]=this.cb_4
  1082. this.Control[iCurrent+9]=this.cb_sort
  1083. this.Control[iCurrent+10]=this.cb_6
  1084. this.Control[iCurrent+11]=this.cb_7
  1085. this.Control[iCurrent+12]=this.cb_5
  1086. this.Control[iCurrent+13]=this.ln_bar
  1087. this.Control[iCurrent+14]=this.ln_bar2
  1088. this.Control[iCurrent+15]=this.ln_1
  1089. this.Control[iCurrent+16]=this.ln_2
  1090. this.Control[iCurrent+17]=this.r_bar
  1091. end on
  1092. on w_bom_build_assist.destroy
  1093. call super::destroy
  1094. destroy(this.dw_1)
  1095. destroy(this.cb_1)
  1096. destroy(this.st_1)
  1097. destroy(this.cb_2)
  1098. destroy(this.cb_edit)
  1099. destroy(this.cb_3)
  1100. destroy(this.cb_addmx)
  1101. destroy(this.cb_4)
  1102. destroy(this.cb_sort)
  1103. destroy(this.cb_6)
  1104. destroy(this.cb_7)
  1105. destroy(this.cb_5)
  1106. destroy(this.ln_bar)
  1107. destroy(this.ln_bar2)
  1108. destroy(this.ln_1)
  1109. destroy(this.ln_2)
  1110. destroy(this.r_bar)
  1111. end on
  1112. event open;call super::open;ins_oldtitle = This.Title
  1113. uo_modle = Create uo_cmpl_modle
  1114. uo_bill = Create uo_cmpl_bill
  1115. DataWindowChild dw_wrkGrp
  1116. if dw_1.GetChild('wrkgrpid', ref dw_wrkGrp) <> 1 then
  1117. MessageBox('系统错误', '查询工组失败', stopsign!)
  1118. cb_exit.postevent(clicked!)
  1119. return
  1120. end if
  1121. dw_wrkGrp.SetTransObject(sqlca)
  1122. dw_wrkGrp.retrieve()
  1123. Long ls_j
  1124. String ls_mod
  1125. FOR ls_j = ins_first To (ins_first + 29)
  1126. ls_mod = '#' + String(ls_j) + '.Visible = 0'
  1127. ls_mod = dw_1.Modify(ls_mod)
  1128. NEXT
  1129. FOR ls_j = 1 To ins_last
  1130. dw_1.SetTabOrder(ls_j, 10 * ls_j)
  1131. NEXT
  1132. end event
  1133. event resize;call super::resize;if this.width < 3648 then this.width = 3648
  1134. if this.Height < 1996 then this.Height = 1996
  1135. ln_bar.EndX = THIS.Width
  1136. ln_bar2.EndX = THIS.Width
  1137. ln_1.EndX = THIS.Width
  1138. ln_2.EndX = THIS.Width
  1139. r_bar.Width = THIS.Width
  1140. dw_1.height = this.height - 450
  1141. dw_1.width = this.width - 50
  1142. end event
  1143. event close;call super::close;destroy uo_modle
  1144. destroy uo_bill
  1145. end event
  1146. event ue_sort;call super::ue_sort;
  1147. IF dw_1.AcceptText() <> 1 THEN RETURN
  1148. dw_1.SetRedraw(False)
  1149. dw_1.Sort()
  1150. Long ll_row
  1151. FOR ll_row = 1 To dw_1.RowCount()
  1152. dw_1.Object.printid[ll_row] = ll_row
  1153. NEXT
  1154. dw_1.SetRedraw(True)
  1155. end event
  1156. event closequery;call super::closequery;IF MessageBox ("IF","将丢失未保存的修改,是否继续?",Question!,YesNo! ) = 2 THEN RETURN 1
  1157. end event
  1158. type cb_func from w_publ_base`cb_func within w_bom_build_assist
  1159. boolean visible = false
  1160. integer x = 1166
  1161. end type
  1162. type cb_exit from w_publ_base`cb_exit within w_bom_build_assist
  1163. integer x = 2318
  1164. integer width = 151
  1165. integer height = 164
  1166. integer picsize = 16
  1167. toolbaralignment pic_align = alignattop!
  1168. boolean border = false
  1169. end type
  1170. type dw_1 from u_dw_rbtnfilter within w_bom_build_assist
  1171. integer y = 296
  1172. integer width = 4087
  1173. integer height = 1920
  1174. integer taborder = 20
  1175. boolean bringtotop = true
  1176. string dataobject = "dw_bom_mtrl30"
  1177. boolean hscrollbar = true
  1178. boolean vscrollbar = true
  1179. boolean setcolumn_visible_use = false
  1180. boolean autosave_filter_use = false
  1181. boolean autosave_sort_use = false
  1182. boolean autosave_setlayout_use = false
  1183. boolean autosave_columnvisible_use = false
  1184. end type
  1185. event dwnkey;call super::dwnkey;
  1186. //IF KeyDown(keydownarrow!) THEN
  1187. // Long li_row
  1188. // IF dw_1.GetRow() <> dw_1.RowCount() THEN
  1189. // dw_1.ScrollToRow(dw_1.GetRow() + 1)
  1190. // END IF
  1191. //ELSEIF KeyDown(keyuparrow!) THEN
  1192. // IF dw_1.GetRow() <> 1 THEN
  1193. // dw_1.ScrollToRow(dw_1.GetRow() - 1)
  1194. // END IF
  1195. //ELSE
  1196. long child_row
  1197. long ls_mtrlid
  1198. string ls_mtrlcode, ls_mtrlname, ls_unit
  1199. long ls_storageid
  1200. s_mtrldef_array arg_s_mtrldef
  1201. IF KeyDown(keyenter!) And Not KeyDown(keycontrol!) And Not KeyDown(keyshift!) THEN
  1202. IF dw_1.AcceptText() <> 1 THEN RETURN 1
  1203. IF dw_1.GetColumnName() = 'mtrlcode' THEN
  1204. child_row = dw_1.GetRow()
  1205. ls_mtrlcode = dw_1.Object.mtrlcode[child_row]
  1206. ls_storageid = -1
  1207. IF Trim(ls_mtrlcode) = '' THEN
  1208. dw_1.Object.mtrlid[child_row] = 0
  1209. dw_1.Object.mtrlcode[child_row] = ''
  1210. dw_1.Object.mtrlname[child_row] = ''
  1211. dw_1.Object.unit[child_row] = ''
  1212. ELSE
  1213. IF f_find_mtrl(ls_mtrlcode,ls_storageid,arg_s_mtrldef) = 0 THEN
  1214. Parent.TriggerEvent('ue_f8')
  1215. RETURN 1
  1216. ELSE
  1217. ls_mtrlid = arg_s_mtrldef.mtrlid[1]
  1218. ls_mtrlcode = arg_s_mtrldef.mtrlcode[1]
  1219. ls_mtrlname = arg_s_mtrldef.mtrlname[1]
  1220. ls_unit = arg_s_mtrldef.unit[1]
  1221. END IF
  1222. dw_1.Object.mtrlid[child_row] = ls_mtrlid
  1223. dw_1.Object.mtrlcode[child_row] = ls_mtrlcode
  1224. dw_1.Object.mtrlname[child_row] = ls_mtrlname
  1225. dw_1.Object.displayname[child_row] = ls_mtrlname
  1226. dw_1.Object.unit[child_row] = ls_unit
  1227. END IF
  1228. IF Key = keyenter! THEN
  1229. keybd_event ( 9, 0, 0 , 0 ) // 按下tab
  1230. keybd_event ( 9, 0, 2, 0 ) // 释放tab
  1231. RETURN 1
  1232. END IF
  1233. ELSEIF dw_1.GetColumnName( ) = 'advancetime' And dw_1.GetRow() = dw_1.RowCount() THEN
  1234. parent.triggerevent('ue_addmx')
  1235. RETURN 1
  1236. ELSE
  1237. IF Key = keyenter! THEN
  1238. keybd_event ( 9, 0, 0 , 0 ) // 按下tab
  1239. keybd_event ( 9, 0, 2, 0 ) // 释放tab
  1240. RETURN 1
  1241. END IF
  1242. END IF
  1243. END IF
  1244. //END IF
  1245. end event
  1246. event itemchanged;call super::itemchanged;if dwo.name = 'if_useformula' OR dwo.name = 'if_from_mtrl' OR dwo.name = 'if_from_product' then
  1247. if trim(data) = '1' then
  1248. if dwo.name <> 'if_useformula' then
  1249. this.object.if_useformula[row] = 0
  1250. end if
  1251. if dwo.name <> 'if_from_mtrl' then
  1252. this.object.if_from_mtrl[row] = 0
  1253. end if
  1254. if dwo.name <> 'if_from_product' then
  1255. this.object.if_from_product[row] = 0
  1256. end if
  1257. end if
  1258. end if
  1259. if dwo.name = 'parmname' then
  1260. if this.object.displayname[row] = this.object.parmname[row] then
  1261. this.object.displayname[row] = data
  1262. end if
  1263. end if
  1264. end event
  1265. event doubleclicked;call super::doubleclicked;
  1266. if this.accepttext() <> 1 then return
  1267. if dwo.name = 'formula' then
  1268. s_cmpl_parm s_parm
  1269. long i
  1270. for i = 1 to row - 1
  1271. s_parm.parmname[i] = this.object.parmname[i]
  1272. s_parm.displayname[i] = this.object.displayname[i]
  1273. s_parm.parmvalue[i] = this.object.defaultvalue[i]
  1274. next
  1275. s_parm.oldformula = this.object.formula[row]
  1276. openwithparm(w_cmpl_formula_edit, s_parm)
  1277. string ls_ret
  1278. ls_ret = message.StringParm
  1279. if ls_ret <> 'NULL' then
  1280. this.object.formula[row] = ls_ret
  1281. end if
  1282. end if
  1283. if dwo.name = 'mtrlcode' then
  1284. // DONE: 选择物料
  1285. parent.triggerevent('ue_pickmtrl')
  1286. end if
  1287. end event
  1288. type cb_1 from uo_imflatbutton within w_bom_build_assist
  1289. integer width = 274
  1290. integer height = 164
  1291. integer taborder = 30
  1292. boolean bringtotop = true
  1293. string text = "产品选择"
  1294. string normalpicname = "OPEN.BMP"
  1295. integer picsize = 16
  1296. toolbaralignment pic_align = alignattop!
  1297. boolean border = false
  1298. end type
  1299. event clicked;call super::clicked;parent.triggerevent('ue_f8')
  1300. end event
  1301. type st_1 from statictext within w_bom_build_assist
  1302. integer x = 23
  1303. integer y = 196
  1304. integer width = 1024
  1305. integer height = 72
  1306. boolean bringtotop = true
  1307. integer textsize = -12
  1308. integer weight = 400
  1309. fontcharset fontcharset = gb2312charset!
  1310. fontpitch fontpitch = variable!
  1311. string facename = "宋体"
  1312. long textcolor = 33554432
  1313. long backcolor = 134217739
  1314. string text = "模板名:"
  1315. boolean focusrectangle = false
  1316. end type
  1317. type cb_2 from uo_imflatbutton within w_bom_build_assist
  1318. integer x = 768
  1319. integer width = 151
  1320. integer height = 164
  1321. integer taborder = 30
  1322. boolean bringtotop = true
  1323. string text = "计算"
  1324. string normalpicname = "xls_efdppict.BMP"
  1325. integer picsize = 16
  1326. toolbaralignment pic_align = alignattop!
  1327. boolean border = false
  1328. end type
  1329. event clicked;call super::clicked;parent.triggerevent('ue_f10')
  1330. end event
  1331. type cb_edit from uo_imflatbutton within w_bom_build_assist
  1332. integer x = 1303
  1333. integer width = 192
  1334. integer height = 164
  1335. integer taborder = 40
  1336. boolean bringtotop = true
  1337. string text = "保存"
  1338. string normalpicname = "Save.bmp"
  1339. integer picsize = 16
  1340. toolbaralignment pic_align = alignattop!
  1341. boolean border = false
  1342. end type
  1343. event clicked;call super::clicked;// DONE: 保存
  1344. IF dw_1.AcceptText() <> 1 THEN
  1345. RETURN
  1346. END IF
  1347. IF dw_1.RowCount() <= 0 THEN
  1348. MessageBox('提示', '没有内容不能保存')
  1349. RETURN
  1350. END IF
  1351. s_inputbox s_parm
  1352. String ls_return
  1353. s_parm.Title = '输入工作表名称'
  1354. s_parm.old_text = uo_bill.modlename
  1355. OpenWithParm(w_inputbox, s_parm)
  1356. ls_return = Message.StringParm
  1357. IF ls_return = '' Or IsNull(ls_return) THEN RETURN
  1358. Long ll_modleid
  1359. String ll_modlename
  1360. Long ll_cnt
  1361. string ls_msg
  1362. SELECT count(0) INTO :ll_cnt FROM u_cmpl_modle
  1363. WHERE Modlename = :ls_return
  1364. And modletype = 3;
  1365. if sqlca.sqlcode <> 0 then
  1366. MessageBox('系统错误', '数据库连接失败,' + sqlca.sqlerrtext, stopsign!)
  1367. return
  1368. end if
  1369. if ll_cnt = 0 then // 新建
  1370. uo_bill.ModleID = 0
  1371. if uo_bill.Newbegin(ls_msg) <> 1 then
  1372. MessageBox('系统错误', ls_msg, stopsign!)
  1373. return
  1374. end if
  1375. uo_bill.modlename = ls_return
  1376. else
  1377. IF MessageBox ("IF","将覆盖同名工作表,是否继续?",Question!,YesNo! ) = 2 THEN RETURN
  1378. SELECT modleid, modlename
  1379. INTO :ll_modleid, :ll_modlename
  1380. FROM u_cmpl_modle
  1381. WHERE Modlename = :ls_return
  1382. And modletype = 3;
  1383. if sqlca.sqlcode <> 0 then
  1384. MessageBox('系统错误', '数据库连接失败,' + sqlca.sqlerrtext, stopsign!)
  1385. return
  1386. end if
  1387. uo_bill.modleid = ll_modleid
  1388. uo_bill.modlename = ll_modlename
  1389. if uo_bill.updatebegin(uo_bill.modleid, ls_msg) <> 1 then
  1390. MessageBox('系统错误', ls_msg, stopsign!)
  1391. return
  1392. end if
  1393. end if
  1394. Long i
  1395. uo_bill.modletype = 3
  1396. uo_bill.orgModleID = 0
  1397. s_cmpl_modlemx tmp[]
  1398. s_cmpl_modlemx_mx tmp_mx[]
  1399. Long j = 0, ll_col = 0
  1400. String ls_dscrp
  1401. FOR i = 1 To dw_1.RowCount()
  1402. dw_1.Object.printid[i] = i
  1403. tmp[i].ModleID = 0
  1404. tmp[i].printid = i
  1405. tmp[i].parmName = dw_1.Object.parmName[i]
  1406. tmp[i].DisplayName = dw_1.Object.DisplayName[i]
  1407. tmp[i].defaultValue = dw_1.object.defaultvalue[i]
  1408. tmp[i].if_useformula = dw_1.Object.if_useformula[i]
  1409. tmp[i].formula = dw_1.Object.formula[i]
  1410. tmp[i].if_from_mtrl = dw_1.Object.if_from_mtrl[i]
  1411. tmp[i].mtrlid = dw_1.Object.mtrlid[i]
  1412. tmp[i].mtrl_pro = dw_1.Object.mtrl_pro[i]
  1413. tmp[i].if_from_product = dw_1.Object.if_from_product[i]
  1414. tmp[i].product_pro = dw_1.Object.product_pro[i]
  1415. tmp[i].wrkGrpid = dw_1.object.wrkGrpid[i]
  1416. tmp[i].advancetime = dw_1.object.advancetime[i]
  1417. tmp[i].dscrp = dw_1.object.dscrp[i]
  1418. tmp[i].unit = dw_1.object.unit[i]
  1419. FOR ll_col = 1 To ins_column_count
  1420. j++
  1421. tmp_mx[j].ModleID = 0
  1422. tmp_mx[j].printid = i
  1423. ls_dscrp = dw_1.Describe('mtrl'+String(ll_col)+'_t.tag')
  1424. tmp_mx[j].mtrlid = Long(ls_dscrp)
  1425. tmp_mx[j].Value = dw_1.GetItemDecimal(i, 'mtrl' + String(ll_col))
  1426. NEXT
  1427. NEXT
  1428. uo_bill.mxs = tmp
  1429. uo_bill.mx_mxs = tmp_mx
  1430. IF uo_bill.savesubmit(ls_msg) <> 1 THEN
  1431. MessageBox('错误', ls_msg)
  1432. RETURN
  1433. END IF
  1434. Parent.Title = ins_oldTitle + '[' + uo_bill.modlename + ']'
  1435. MessageBox('提示', '保存成功')
  1436. end event
  1437. type cb_3 from uo_imflatbutton within w_bom_build_assist
  1438. integer x = 274
  1439. integer width = 494
  1440. integer height = 164
  1441. integer taborder = 40
  1442. boolean bringtotop = true
  1443. string text = "选择物料清单模板"
  1444. string normalpicname = "OPEN.BMP"
  1445. integer picsize = 16
  1446. toolbaralignment pic_align = alignattop!
  1447. boolean border = false
  1448. end type
  1449. event clicked;call super::clicked;parent.triggerevent('ue_f9')
  1450. end event
  1451. type cb_addmx from uo_imflatbutton within w_bom_build_assist
  1452. integer x = 1687
  1453. integer width = 151
  1454. integer height = 164
  1455. integer taborder = 50
  1456. boolean bringtotop = true
  1457. string text = "增行"
  1458. string normalpicname = "mx1.BMP"
  1459. integer picsize = 16
  1460. toolbaralignment pic_align = alignattop!
  1461. boolean border = false
  1462. end type
  1463. event clicked;call super::clicked;parent.triggerevent('ue_addmx')
  1464. end event
  1465. type cb_4 from uo_imflatbutton within w_bom_build_assist
  1466. integer x = 1838
  1467. integer width = 151
  1468. integer height = 164
  1469. integer taborder = 60
  1470. boolean bringtotop = true
  1471. string text = "删行"
  1472. string normalpicname = "mx2.BMP"
  1473. integer picsize = 16
  1474. toolbaralignment pic_align = alignattop!
  1475. boolean border = false
  1476. end type
  1477. event clicked;call super::clicked;parent.triggerevent('ue_delmx')
  1478. end event
  1479. type cb_sort from uo_imflatbutton within w_bom_build_assist
  1480. integer x = 1989
  1481. integer width = 165
  1482. integer height = 164
  1483. integer taborder = 50
  1484. boolean bringtotop = true
  1485. string text = "重排"
  1486. string normalpicname = "p2.BMP"
  1487. integer picsize = 16
  1488. toolbaralignment pic_align = alignattop!
  1489. boolean border = false
  1490. end type
  1491. event clicked;call super::clicked;parent.triggerevent('ue_sort')
  1492. end event
  1493. type cb_6 from uo_imflatbutton within w_bom_build_assist
  1494. integer x = 2153
  1495. integer width = 165
  1496. integer height = 164
  1497. integer taborder = 60
  1498. boolean bringtotop = true
  1499. string text = "重置"
  1500. string normalpicname = "Undo.bmp"
  1501. integer picsize = 16
  1502. toolbaralignment pic_align = alignattop!
  1503. boolean border = false
  1504. end type
  1505. event clicked;call super::clicked;// DONE: 打开工作表
  1506. Long arg_Modleid
  1507. String ls_msg
  1508. s_mtrldef_array S_INSCUST
  1509. Long ll_col = 0, ls_j, chc, ll_row, ll_i
  1510. Long ll_mtrlid
  1511. String ll_mtrlcode
  1512. String ll_mtrlname
  1513. string ls_dscrp
  1514. decimal ll_value
  1515. IF MessageBox ("IF","重置将丢失未保存的修改,是否继续?",Question!,YesNo! ) = 2 THEN RETURN
  1516. arg_ModleID = uo_bill.modleid
  1517. if arg_ModleID = 0 then
  1518. dw_1.Reset()
  1519. return
  1520. end if
  1521. IF uo_bill.GetINfo(arg_Modleid, ls_msg) <> 1 THEN
  1522. MessageBox('', ls_msg)
  1523. RETURN
  1524. END IF
  1525. parent.title = ins_oldtitle + '[' + uo_bill.ModleName + ']'
  1526. declare cur1 cursor for select DISTINCT u_cmpl_modleMx_Mx.mtrlid, u_mtrldef.mtrlcode, u_mtrldef.mtrlname
  1527. from u_cmpl_modleMx_Mx inner JOIN
  1528. u_mtrldef ON u_cmpl_modleMx_Mx.mtrlid = u_mtrldef.mtrlid
  1529. Where (u_cmpl_modleMx_Mx.ModleID = :arg_Modleid);
  1530. open cur1;
  1531. fetch cur1 INTO :ll_mtrlid, :ll_mtrlcode, :ll_mtrlname;
  1532. DO WHILE sqlca.SQLCode = 0
  1533. ll_col ++
  1534. S_INSCUST.mtrlid[ll_col] = ll_mtrlid
  1535. S_INSCUST.mtrlcode[ll_col] = ll_mtrlcode
  1536. S_INSCUST.mtrlname[ll_col] = ll_mtrlname
  1537. fetch cur1 INTO :ll_mtrlid, :ll_mtrlcode, :ll_mtrlname;
  1538. LOOP
  1539. close cur1;
  1540. dw_1.Reset()
  1541. String ls_mod
  1542. FOR ls_j = ins_first TO ins_last
  1543. ls_mod = '#' + String(ls_j) + '.Visible = 0'
  1544. ls_mod = dw_1.Modify(ls_mod)
  1545. NEXT
  1546. chc = 0
  1547. FOR ls_j = 1 TO UpperBound(S_INSCUST.mtrlid)
  1548. IF S_INSCUST.mtrlid[ls_j] > 0 THEN
  1549. chc ++
  1550. ls_mod = 'mtrl' + String(chc) + '.Visible = 1'
  1551. ls_mod = dw_1.Modify(ls_mod)
  1552. ls_mod = 'mtrl' + String(chc) + '_t.Text = ~''+String(S_INSCUST.mtrlname[ls_j])+'~''
  1553. ls_mod = dw_1.Modify(ls_mod)
  1554. ls_mod = 'mtrl' + String(chc) + '_t.Tag = ~''+String(S_INSCUST.mtrlid[ls_j])+'~''
  1555. ls_mod = dw_1.Modify(ls_mod)
  1556. ls_mod = 'mtrl' + String(chc) + '.Tag = ~''+String(S_INSCUST.mtrlcode[ls_j])+'~''
  1557. ls_mod = dw_1.Modify(ls_mod)
  1558. END IF
  1559. NEXT
  1560. ins_column_count = chc
  1561. FOR ls_j = ins_first + 30 TO ins_last
  1562. ls_mod = '#' + String(ls_j) + '.Visible = 1'
  1563. ls_mod = dw_1.Modify(ls_mod)
  1564. NEXT
  1565. FOR ll_i = 1 TO UpperBound(uo_bill.mxs)
  1566. ll_row = dw_1.insertrow(0)
  1567. dw_1.object.printid[ll_row] = uo_bill.mxs[ll_i].printid
  1568. dw_1.object.parmname[ll_row] = uo_bill.mxs[ll_i].parmname
  1569. dw_1.object.displayname[ll_row] = uo_bill.mxs[ll_i].displayname
  1570. dw_1.object.defaultvalue[ll_row] = uo_bill.mxs[ll_i].defaultvalue
  1571. dw_1.object.if_useformula[ll_row] = uo_bill.mxs[ll_i].if_useformula
  1572. dw_1.object.formula[ll_row] = uo_bill.mxs[ll_i].formula
  1573. dw_1.object.if_from_mtrl[ll_row] = uo_bill.mxs[ll_i].if_from_mtrl
  1574. dw_1.object.mtrlid[ll_row] = uo_bill.mxs[ll_i].mtrlid
  1575. dw_1.object.mtrl_pro[ll_row] = uo_bill.mxs[ll_i].mtrl_pro
  1576. dw_1.object.if_from_product[ll_row] = uo_bill.mxs[ll_i].if_from_product
  1577. dw_1.object.product_pro[ll_row] = uo_bill.mxs[ll_i].product_pro
  1578. dw_1.object.wrkGrpid[ll_row] = uo_bill.mxs[ll_i].wrkGrpid
  1579. dw_1.object.advancetime[ll_row] = uo_bill.mxs[ll_i].advancetime
  1580. dw_1.object.dscrp[ll_row] = uo_bill.mxs[ll_i].dscrp
  1581. dw_1.object.unit[ll_row] = uo_bill.mxs[ll_i].unit
  1582. SELECT mtrlcode , mtrlname
  1583. INTO :ll_mtrlcode, :ll_mtrlname
  1584. FROM u_mtrldef
  1585. WHERE mtrlid = :uo_bill.mxs[ll_i].mtrlid;
  1586. if sqlca.sqlcode <> 0 then
  1587. ll_mtrlcode = ''
  1588. ll_mtrlname = ''
  1589. dw_1.object.mtrlid[ll_row] = 0
  1590. end if
  1591. dw_1.object.mtrlcode[ll_row] = ll_mtrlcode
  1592. dw_1.object.mtrlname[ll_row] = ll_mtrlname
  1593. for ll_col = 1 to ins_column_count
  1594. ls_dscrp = dw_1.Describe('mtrl'+string(ll_col)+'_t.tag')
  1595. ll_mtrlid = long(ls_dscrp)
  1596. ll_value = 0
  1597. for ls_j = 1 to upperbound(uo_bill.mx_mxs)
  1598. if uo_bill.mx_mxs[ls_j].printid = uo_bill.mxs[ll_i].printid &
  1599. and uo_bill.mx_mxs[ls_j].mtrlid = ll_mtrlid then
  1600. ll_value = uo_bill.mx_mxs[ls_j].value
  1601. exit
  1602. end if
  1603. next
  1604. dw_1.SetItem(ll_row, 'mtrl' + string(ll_col), ll_value)
  1605. next
  1606. NEXT
  1607. end event
  1608. type cb_7 from uo_imflatbutton within w_bom_build_assist
  1609. integer x = 919
  1610. integer width = 384
  1611. integer height = 164
  1612. integer taborder = 30
  1613. boolean bringtotop = true
  1614. string text = "生成物料清单"
  1615. string normalpicname = "update.BMP"
  1616. integer picsize = 16
  1617. toolbaralignment pic_align = alignattop!
  1618. boolean border = false
  1619. end type
  1620. event clicked;call super::clicked;// DONE: 生成物料清单
  1621. if dw_1.acceptText() <> 1 then return
  1622. if ins_column_count <= 0 then
  1623. MessageBox('提示', '请先选择产品')
  1624. return
  1625. end if
  1626. if dw_1.RowCount() <= 0 then
  1627. MessageBox('提示', '没有内容,不能生成物料清单')
  1628. return
  1629. end if
  1630. IF MessageBox ("IF","生成物料清单,将删除旧的物料清单,是否继续?",Question!,YesNo! ) = 2 THEN RETURN
  1631. string ls_msg
  1632. if wf_build_bom(ls_msg) <> 1 then
  1633. MessageBox('错误', ls_msg)
  1634. return
  1635. end if
  1636. MessageBox('提示', '物料清单保存成功')
  1637. end event
  1638. type cb_5 from uo_imflatbutton within w_bom_build_assist
  1639. integer x = 1495
  1640. integer width = 192
  1641. integer height = 164
  1642. integer taborder = 50
  1643. boolean bringtotop = true
  1644. string text = "打开"
  1645. string normalpicname = "open.bmp"
  1646. integer picsize = 16
  1647. toolbaralignment pic_align = alignattop!
  1648. boolean border = false
  1649. end type
  1650. event clicked;call super::clicked;// DONE: 打开
  1651. parent.triggerevent('ue_open_bill')
  1652. end event
  1653. type ln_bar from line within w_bom_build_assist
  1654. long linecolor = 268435456
  1655. integer linethickness = 4
  1656. integer beginy = 172
  1657. integer endx = 3200
  1658. integer endy = 172
  1659. end type
  1660. type ln_bar2 from line within w_bom_build_assist
  1661. long linecolor = 16777215
  1662. integer linethickness = 4
  1663. integer beginx = 9
  1664. integer beginy = 176
  1665. integer endx = 3273
  1666. integer endy = 176
  1667. end type
  1668. type ln_1 from line within w_bom_build_assist
  1669. long linecolor = 268435456
  1670. integer linethickness = 4
  1671. integer beginy = 284
  1672. integer endx = 3250
  1673. integer endy = 284
  1674. end type
  1675. type ln_2 from line within w_bom_build_assist
  1676. long linecolor = 16777215
  1677. integer linethickness = 4
  1678. integer beginy = 288
  1679. integer endx = 3282
  1680. integer endy = 288
  1681. end type
  1682. type r_bar from rectangle within w_bom_build_assist
  1683. long linecolor = 16777215
  1684. integer linethickness = 4
  1685. long fillcolor = 1073741824
  1686. integer x = 2249
  1687. integer y = 40
  1688. integer width = 87
  1689. integer height = 68
  1690. end type
  1691. event constructor;this.fillcolor = 14215660
  1692. this.linecolor = 14215660
  1693. this.x = -1
  1694. this.y = -1
  1695. this.height = ln_bar.beginy - 5
  1696. end event