因为公司原材料出库管理一直较乱。K3从生产任务单下推领料出库时,所产生的物料都是事先在BOM中维护好的,但我们公司都是单件或小批量加工的,每次都要去改BOM不现实,于是都是一条条手工去录,但是又无与生产任务单关联,后期统计时无法一一对应。
于是研究了一下,但开发水平太菜,做不了插件,决定先做一张原材料申领表,再通过这张表下推到领料出库单,曲线救国。
1、先在BOS中新增加原材料实际领用登记表
2、单据转换流程增加如下关联
生产任务单转原材料表的关联
原材料表转生产领料单的关联
3、关联好后,进行测试,发现成本对象只传来零件代码,没有规格和名称;领用物料没有仓库和仓位。这此在手工增加时都有。
参考https://blog.csdn.net/hzfw2008/article/details/84197484?spm=1001.2014.3001.5506 和https://blog.csdn.net/weixin_30698527/article/details/97566261?spm=1001.2014.3001.5506 的文章
,查出原材料表的ID=257800030,生产领料单的ID=-24,然后查出关联表ICClassLink 中的FFieldName=‘257800030’。
通过测试结果的,查出相关字段的名称,于是在数据库中进行修改:
----原材料实际领用登记表下推生产领料表时,从零件传递成成本对象
–update ICSelbills set FAction=‘(select fitemid from cbCostObj where fnumber=t_4.fnumber)’ where FFieldName=‘257800030’ and FDstCtlField=‘FCostOBJID’ and fdk=0
–update ICSelbills set FAction=‘(select fname from cbCostObj where fnumber=t_4.fnumber)’ where FFieldName=‘257800030’ and FDstCtlField=‘FCostOBJID’ and fdk=1
–update ICSelbills set FAction=‘(select fnumber from cbCostObj where fnumber=t_4.fnumber)’ where FFieldName=‘257800030’ and FDstCtlField=‘FCostOBJID’ and fdk=2
----原材料实际领用登记表下推生产领料表时,从原材料传递默认仓库
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FSCStockID’,0,0,‘S0’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FITEMID from t_Stock A
–INNER JOIN T_ICITEM B ON A.FItemID=B.FDefaultLoc
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FSCStockID’,0,1,‘S1’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FName from t_Stock A
–INNER JOIN T_ICITEM B ON A.FItemID=B.FDefaultLoc
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FSCStockID’,0,2,‘S2’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FNumber from t_Stock A
–INNER JOIN T_ICITEM B ON A.FItemID=B.FDefaultLoc
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
----原材料实际领用登记表下推生产领料表时,从原材料传递默认仓位
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FDCSPID’,0,0,‘P0’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FSPID from t_StockPlace a
–inner join T_ICITEM B ON A.FSPID=b.FSPID
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FDCSPID’,0,1,‘P1’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FNAME from t_StockPlace a
–inner join T_ICITEM B ON A.FSPID=b.FSPID
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
–INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
–VALUES(‘B04’,‘257800030’,‘FDCSPID’,0,2,‘P2’,‘Fbase4’,‘t_BOS257800030Entry2’,‘u1’,‘(select A.FNUMBER from t_StockPlace a
–inner join T_ICITEM B ON A.FSPID=b.FSPID
–WHERE B.Fitemid=u1.Fbase4)’,0,0)
4、BOS中字段的设置
原材料过滤有库存的
X2.Fitemid in (select a.FItemID from t_ICItem a inner join icinventory b on a.fitemid=b.fitemid where 1=1 and a.FNumber like '3.10%' and b.FQty>0)
后来改了流程只要原料就行,不管是否有库存。(将这个表取代财务原来的登记原料用的EXCEL表格)
X2.Fitemid in (select FItemID from t_Item where 1=1 and FItemClassID=4 and flevel=4 and FDeleted=0 and FNumber like '3.10.%')
材料分为方料和圆料,对应不同的公式
型材的值更新件
当为圆料时,系数为4000000,并且锁定高与宽
当为方料时,系数为1000000,并且锁定直径
在直径、长、宽、高中,相应的维护公式,将结果赋值给“单重”
条件为圆料时:单重=直径直径3.14长密度/系数
条件为方料时:单重=长宽高密度/系数
在单重中维护公式:
条数为单重>0时
领用数量=单重数量
5、后期修改
由于选择型材麻烦,改成录入原料代码后自动跟出型材类型
在辅助资料管理中增加型材类型
物料管理中进行维护
后台批量更新,从T_ITEM中查出,圆料是84076,方料是84077,管料是84078
原材料代码都是3.10开头的
update t_icitem set f_110=84076 where FNumber like '3.10.%' and (fname like 'Ф%' ) and FModel<>''
update t_icitem set f_110=84077 where FNumber like '3.10.%' and (fname like '%方%' or fname like '%板%') and fname not like '%管%' and FModel<>''
然后在BOS中计算公式的字段的值更新事件,增加一个条件
计算圆料的=84076,方料的=84077
在操作管理中,对原材料增加按F12查询库存的功能
最后
通过以上改造,就先让车间文员先做原材料登记表,审核后仓库直接下推成领料单。增大了原材料领用流程的规范性。
附ICSelBills表各个字段解释:
FID 需要进行关联关系调整的单据内码
FFieldName 关联字段名称
FDstCtlField 需要调整的单据字段内码
FDK 字段类别。0ID,1名称,2代码
FSelType 打开方式:目标字段的类型;0表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时簿的过滤条件;
FColName 上游单据携带字段内码+序号,0开始
FName 上游单据携带字段内码
FTableName 上游单据表名
FTableAlias 表范围
FAction 动作
FROB 功能标识
FAllowEdited 是否允许编辑
https://www.cnblogs.com/caipanlong123/p/11065784.html
新单到老单字段的添加分为两种:
一种为文本字段信息的关联,新单与老单字段的信息均为文本字段;
另一种为基础资料信息的关联,新单与老单均为基础资料字段信息。
K3 WISE 11.0中存储老单关联字段信息的表为 ICSelbills ,该表的内部结构为:
FID:表示下推目标单据的类型,其值主要关联在表ICTransActionType中的FID,该表内主要是各种单据的缩写类型;
FFieldName:原单据在VB层面的标识单据编号的名称,在数据库中一般根据需要变更单据的内容来制定;
FDstCtlField:目标单据中需要下推过去的目标字段数据库的名称;
FSelType:目标字段的类型;0表示单据分录字段,2表示单据头字段,1表示该目标字段的当前值将会作为选单序时簿的过滤条件;
FDK:用于表头控件,对于同一个目标字段,回填值用于区分基础资料与普通文本的方式;基础资料时 0-代表基础资料表中的内码FINTERID 或 FID,1-代表基础资料表中的名称FNAME ,2-代表基础资料中标的FNUMBER字段;
FColName:源字段的别名,该名称一般为自己定义,对于字段的下推并没有什么太大意义,因为在软件内部的查询结果集中会给它们重新定义临时标准名称;
FName:源字段的数据库字段名称,该名称需要查询BOS或者数据库找到该值;
FTableName:源字段所在的表名称;
FTableAlias:原表别名,在跟踪中并未发现实质性作用,一般根据原有表明进行定义,若没有的自己可定义;
FAction:用于处理一些简单的字段值判断,或者是字段之间的运算,最为重要的是:基础资料中的查询信息,对应上面的FDK,基础资料的字段需要三类语句:
SELECT FINTERID FROM t_submessage WHERE FinterID=v1.FBase5
SELECT FNAME FROM t_submessage WHERE FinterID=v1.FBase5
SELECT FNUMBER FROM t_submessage WHERE FinterID=v1.FBase5
普通文本无该语句的要求,直接定义字段关系即可;
FROB:目前为止并未发现实质性作用;
FAllowEdited:猜想为应该是控制下推目标单据显示后,字段的可编辑性,目前还未进行求证;