K3老单二开 BOM维护中增加原材料的简便计算

张开发
2026/4/26 1:51:31 15 分钟阅读

分享文章

K3老单二开 BOM维护中增加原材料的简便计算
由于K3的架构每个物料在做内协生产工单时都要维护原材料BOM用于生成投料单我们的物料是从PDM抛转过来的但原材料在PDM中是没有维护的需要在BOM单中进行维护我们以前是用EXCEL表格后来用一个叫“材料重量计算”的小工具计算使用起来还是较麻烦的于是在想能不能在BOM单的界面就将这个事办好。根据以往经验基本思路是录用所需要的原料规格后打开一个FORM界面取规格中的数字圆料就维护长度板材维护上宽和长进行计算然后将结果返回到“用量”列。1、在工具栏上增加“重量计算”按钮并在录入原料代码后获取相关行号、列号和规格型号等基本信息代码如下工业老单BOM维护增加重量计算定义插件对象接口. 必须具有的声明, 以此来获得事件PrivateWithEventsm_BillTransferAsk3BillTransfer.BillPublicMcolAsLong规格型号所在列号PublicYLcolAsLong用量所在列号PublicCurrentColAsLong光标所在的列号PublicCurrentRowAsLong光标所在的行号PublicFnoteINAsString传回重量PublicFnoteOUTAsString传出规格PrivatevEntryCtlAsVariant单据体控件取列号用PublicSubShow(ByValoBillTransferAsObject)接口实现注意: 此方法必须存在, 请勿修改Setm_BillTransferoBillTransfer获取规格型号和用量的列号vEntryCtlm_BillTransfer.m_EntryCtlFori1ToUBound(vEntryCtl)Ifm_BillTransfer.m_EntryCtl(i).FieldNameFModelThenMcoliEndIfIfm_BillTransfer.m_EntryCtl(i).FieldNameFAuxQtyThenYLcoliEndIfNextEndSubPrivateSubClass_Terminate()释放接口对象注意: 此方法必须存在, 请勿修改Setm_BillTransferNothingEndSub-------------------------------增加加按钮PrivateSubm_BillTransfer_LoadBillEnd(ByValShowTypeAsLong) MsgBox 点击成功On ErrorResumeNextWithm_BillTransfer.BillForm.tlbTool.Buttons如果还要加按钮就增加一行.Add.Count,Count - 1指最后一个图标的前一个位置最后的数字是图标的编号可任意。.Add .Count-1,BtnZL,重量计算,,30EndWithEndSubPublicSubm_BillTransfer_GridChange(ByValcolAsLong,ByValrowAsLong,ByValValueAsVariant,ByValbNewBillAsBoolean,CancelAsBoolean)MsgBox 测试GridChangeCurrentColcol 获取当前操作的列号用以后面判断CurrentRowrow获取当前操作的行号用以后面对当前行的工艺列进行赋值EndSubPrivateSubm_BillTransfer_RetEvents(ByValParaAsKFO.IDictionary)TODO: 请在此处添加代码响应事件 RetEventsDimobjAAsNewInputSpetialCHARIfNotParaIsNothingThenIfPara.GetValue(EventID,0)Bill_ButtonClickThenIfPara.GetValue(EventIDprop,0)0ThenIfPara(Para)(Button).KeyBtnZLThen计算重量CallCallFormEndIfEndIfEndIfEndIfEndSubPrivateSubCallForm()DimFormAsNewForm2SetForm.frm_BillTransferm_BillTransfer FnoteOUTm_BillTransfer.GetGridText(CurrentRow,Mcol)获取原料规格型号交互: 这里传值到自定义窗口Form.selSourceNameFnoteOUT要传的参数Form.SourceROWCurrentRow传当前行号Form.SourceCOLYLcol传用量的列号Form.Show1SetFormNothingEndSub————————————————2、增加计算界面FORM2代码如下PublicWithEventsfrm_BillTransferAsk3BillTransfer.BillPublicselSourceNameAsString传来的值PublicSourceCOLAsLong传来的列号PublicSourceROWAsLong传来的行号PrivateDeclareFunctionSetWindowPosLibuser32(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValXAsLong,ByValYAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLongPrivateConstHWND_TOPMOST-1 置顶始终在其他窗口上方PrivateConstHWND_NOTOPMOST-2 取消置顶PrivateConstSWP_NOMOVEH2 忽略 x、y 参数不改变位置PrivateConstSWP_NOSIZEH1 忽略 cx、cy 参数不改变大小PrivateSubForm_Load()DimsvalueAsStringDimxPositionAsIntegerDimiAsInteger,jAsInteger,kAsInteger窗口置顶参数说明窗口句柄、置顶标志、位置和大小忽略、操作标志不移动不改变大小SetWindowPosMe.hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVEOrSWP_NOSIZE通过Add方法逐个添加项Combox1.Clear清空Combox1.AddItem钢材Combox1.AddItem铝材Combox1.AddItem尼龙Combox1.AddItem牛筋Combox1.AddItem其他Combox1.ListIndex0默认钢材Text1.Text7.85 密度默认7.85Text2.Text高/直径Text3.Text宽Text4.Text长 规格解析IfselSourceNameThen 传来的值不为空 遍历字符统计 × 和 Φ 的数量i0j0k0Fori1ToLen(selSourceName)CharMid(selSourceName,i,1)IfChar×Thenkk1EndIfIfCharΦOrCharφOrCharФThenjj1EndIfNextiIfk0Then 无 × → 圆钢/圆棒只提取直径Fori1ToLen(selSourceName)用于获取字符串中的数字IfAsc(Mid(selSourceName,i,1))48AndAsc(Mid(selSourceName,i,1))57ThensvaluesvalueMid(selSourceName,i,1)EndIfNexti Text2.TextsvalueIfj0ThenText3.EnabledFalseEndIfElseIfk1ThenQ235的板材/方料自动拆分高×宽xPositionInStr(1,selSourceName,×)判断×的位置Text2.TextMid(selSourceName,1,xPosition-1)Text3.TextMid(selSourceName,xPosition1,Len(selSourceName))Text3.EnabledTrueEndIfEndIfEndSubPrivateSubCombox1_Click()IfCombox1.Text钢材ThenText1.Text7.85ElseIfCombox1.Text铝材ThenText1.Text2.7ElseIfCombox1.Text尼龙ThenText1.Text1.13ElseIfCombox1.Text牛筋ThenText1.Text1.4ElseIfCombox1.Text其他ThenText1.TextText1.EnabledTrueEndIfEndSubPrivateSubCommand1_Click()DimHAsLong,WAsLong,LAsLongDimMDAsDouble,ZLAsDoubleH0W0L0MDCDbl(Text1.Text)密度HVal(Text2.Text)高/直径WVal(Text3.Text)宽LVal(Text4.Text)长IfL0ThenMsgBox长度不能为空且必须大于0,vbExclamation Text4.SetFocusExitSubEndIfIfW0ThenZL3.14*MD*(H/2)^2*L/1000000ElseZLMD*H*W*L/1000000EndIf 保留1位小数并向上取整IfZLRound(ZL,1)Then保留1位后相等就取原值IfZL0ThenZLInt((ZL0.1)*10)/10EndIfEndIfText5.TextZL Command2.SetFocus计算完成后焦点在确认按钮上EndSubPrivateSubForm_Activate()如果宽为空焦点在宽上否则在长上IfText3.EnabledTrueAndText3.TextThenText3.SetFocusElseText4.SetFocusEndIfEndSubPrivateSubText4_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode13Then 录入长度后回车直接调用按钮的Click事件处理程序Command1_Click KeyCode0 阻止事件冒泡避免触发其他默认行为EndIfEndSubPrivateSubCommand2_Click()计算后的传到“用量”列SetInfo frm_BillTransfer,Text5.Text,SourceCOL,SourceROW关闭弹窗UnloadMeEndSub效果圆料时板料时型材时还有不完美的地方材质上是默认钢材其他材质只能手工选择这个是需要在物料基本信息维护时就要维护好的但工作量太大加上主要还是使用钢材且只是一个估计值所以做得灵活度大点。

更多文章