二开--老单序时簿添加自定义字段显示/过滤原创
金蝶云社区-Robby
Robby
14人赞赏了该文章 1,216次浏览 未经作者许可,禁止转载编辑于2023年02月07日 17:44:43
summary-icon摘要由AI智能服务提供

本文介绍了在ERP系统中,如何为“生产任务单汇报/请检单”序时簿添加两个自定义字段:物料的产品检验方式和分录是否完全检验。首先,通过SQL脚本查找并修改序时簿模板,添加新字段并设置其显示名称、数据类型、计算公式等属性。对于“是否完全检验”,通过计算列实现,并可选择通过辅助资料系统来过滤值。对于“产品检验方式”,通过关联物料基础资料表并插入新字段到序时簿中显示。同时,提供了脚本示例和注意事项,确保历史单据也能正常显示新添加的字段。

K3Wise老单指select * from ICTransactionType查询结果中的单据类型:比如销售订单、生产任务单等;


实际案例:

客户希望在 生产任务单汇报/请检 单序时簿上增加 2个字段显示

一个是物料的产品检验方式(物料基础资料的一个属性),

一个是分录是否完全检验(实作数量>检验数量)

然后品管部门能够再序时簿中过滤 全检、抽检的物料哪些单据还没有完成检验,提高系统的易用性。


分析可知他只需要再序时簿上做处理,单据界面中并不要求显示这些东西;

首先查找出单据的模板

select FTemplateID,* from ICListTemplate where FName = '任务单汇报/请检单'

image.pngFTemplateID = 603

然后添加字段:

delete ICChatbillTitle

where FTypeID = 603 and FColName = 'FCheckStatusName'

go

INSERT INTO ICChatbillTitle(FInterID, FTypeID, FColCaption, FHeadSecond, FColName, FTableName, FColType, FColWidth, FVisible, FItemClassID, FVisForQuest, FReturnDataType, FCountPriceType, FCtlIndex, FName, FTableAlias, FAction, FNeedCount, FIsPrimary, FLogicAction, FStatistical, FMergeable, FVisForOrder, FColCaption_CHT, FColCaption_EN, FControl, FMode, FControlType, FPrecisionField, FAlign, FEditable, FFormat, FFormatType, FMustSelected, FViseForTDC) 

VALUES(1102,603,'是否完全检验$','','FCheckStatusName','ICMORptEntry',1,1000,1,-1,1,0,0,70,'FCheckStatus','u1','CASE WHEN u1.FAuxQtyFinish>u1.FInspectionAuxQty THEN ''否'' ELSE ''是'' END',0,0,'',1,0,1,'检验状态$','Check status$',0,0,5,'',0,0,'',0,0,0)

go

image.png

FinterID : 随意填写,但不要重复

可以通过脚本获取Select max(FinterID) + 1 from ICChatbillTitle where FTypeID = 603 and FColName = 'FCheckStatusName'

FTypeID:603 序时簿模板templateid

FColCaption:显示名必须以$字符结尾

FColName:由于是自定义的计算列字段,这个值可以随便填写,但必须保证唯一

FTableName:填写单据分录物理表

FItemClassID:-1,表示过滤时手工输入文本

FReturnDataType:0表示过滤时手工输入文本 与FItemClassID配合使用

FAction:当不为空时标识改字段是计算列,计算公式即FAction内容,本例中

CASE WHEN u1.FAuxQtyFinish>u1.FInspectionAuxQty THEN '否' ELSE '是';文本中的内容可以根据自己的需要来填写,

只要是能够再select 中正常输入的sql表达式即可(可以是值函数)

image.png

效果图,过滤条件输入文本'是'能正确过滤出结果,文本内容是Action中的输出内容;


功能刚上线时,如果没有操作说明的情况下,操作者不知道到底该填什么值来过滤,可能会习惯性的按F7来选择值,

那如何能让计算列通过F7来选择,并返回是/否?

首先要找到一个辅助资料

image.png

系统中正好存在一个辅助资料包含了这两个文本,并且两条记录FtypeID是完全一致的(244)

如果系统中没有能够匹配的,请自行去创建一个新的辅助资料类型;


然后执行脚本:

update ICChatbillTitle

set FReturnDataType = 2,FItemClassID = 244

where FTypeID = 603 and FInterID = 1102

--1102,刚才插入的序时簿列字段的FinterID

image.png

这样就能F7选择标准值了;


如何把物料基础资料中的产品检验方式放到序时簿上去显示?

二开人员可能会习惯性的去打开bos设计器,或单据自定义到表体上去添加一个字段,然后搞携带,这种方式对于模板生效后的单据是有效的,但是模板生效前的单据是无效的。

image.png

可以看到他后台,FNeedSave字段为1.所以不要去改单据模板;

image.png

如果你已经添加这个字段,执行这段脚本调整他的序时簿显示,这样历史单据字段也能正常显示

nsert into ICTableRelation(FTypeID,FInterID,FTableName,FTableNameAlias,FFieldName,FTableName11,FTableNameAlias11,FFieldName11,FLogic,FBillID,FFieldID,FMode,FIndex,FCondition,FLeftParentheses,FRightParentheses,FLogicOperator,FISConst,FConstType,FSubFilter)

values(603,35,'t_ICItem','t5','FProChkMde','t_submessage','tChkMde','FInterID','=','','',0,0,'','','','=',0,0,'')

go

update ICChatBillTitle

set FTableName='t_subMessage',FItemClassID=171,FReturnDataType=2,FName='FName',FTableAlias='tChkMde'

where FTypeID = 603 and FColName ='FEntrySelfJ1168'

Go

不修改单据添加序时簿字段:

执行脚本:

insert into ICTableRelation(FTypeID,FInterID,FTableName,FTableNameAlias,FFieldName,FTableName11,FTableNameAlias11,FFieldName11,FLogic,FBillID,FFieldID,FMode,FIndex,FCondition,FLeftParentheses,FRightParentheses,FLogicOperator,FISConst,FConstType,FSubFilter)

values(603,35,'t_ICItem','t5','FProChkMde','t_submessage','tChkMde','FInterID','=','','',0,0,'','','','=',0,0,'')

为序时簿模型数据来源中添加一条物理表(再拼接单据序时簿查询条件的from的内容用到这个表)

image.png

FTableName填写t_icitem,因为来源是物料的FProChkMde字段;FTableNameAlias t5,因为和表体关联的物料表的FTableNameAlias11是t5(图中第3条记录)

FTableName11,FTableNameAlias11,FFieldName11:t_submessage,tChkMde,FInterID;

物料基础资料的产品检验方式,的来源是辅助资料的检验方式:

image.png

因此FTableName11为t_submessage

FTableNameAlias11为tChkMde(这个可以随便填写,但是不要和别的重复了FTableNameAlias11,几乎很少有用重复的,重复的是要实现更复杂的过滤拼接

FFieldName11:FInterID

这就是说将来拼序时簿脚本的时候会

inner join t_submessage tChkMde on t5.FProChkMde=tChkMde.finterid

开发可以用sqlserver跟踪器来查看;

插入一条新的

INSERT INTO ICChatbillTitle(FInterID, FTypeID, FColCaption, FHeadSecond, FColName, FTableName, FColType, FColWidth, FVisible, FItemClassID, FVisForQuest, FReturnDataType, FCountPriceType, FCtlIndex, FName, FTableAlias, FAction, FNeedCount, FIsPrimary, FLogicAction, FStatistical, FMergeable, FVisForOrder, FColCaption_CHT, FColCaption_EN, FControl, FMode, FControlType, FPrecisionField, FAlign, FEditable, FFormat, FFormatType, FMustSelected, FViseForTDC) 

VALUES(1103,603,'插入的属性值$','','FName','t_subMessage',1,1000,1,171,1,2,0,70,'FName','tChkMde','',0,0,'',1,0,1,'插入的属性值$','插入的属性值$',0,0,5,'',0,0,'',0,0,0)

go

注意这些:

FTableName='t_subMessage',FItemClassID=171,FReturnDataType=2,FName='FName',FTableAlias='tChkMde'


image.png


当需要添加一个序时簿字段时,可以参考现有的序时簿模板里面的字段记录来自行构建;

就看一下几个表

ICListTemplate

ICChatbillTitle

ICTableRelation


图标赞 14
14人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
1人打赏
还没有人打赏,快来当第一个打赏的人吧!