二开--老单序时簿添加自定义字段显示/过滤
K3Wise老单指select * from ICTransactionType查询结果中的单据类型:比如销售订单、生产任务单等;
实际案例:
客户希望在 生产任务单汇报/请检 单序时簿上增加 2个字段显示
一个是物料的产品检验方式(物料基础资料的一个属性),
一个是分录是否完全检验(实作数量>检验数量)
然后品管部门能够再序时簿中过滤 全检、抽检的物料哪些单据还没有完成检验,提高系统的易用性。
分析可知他只需要再序时簿上做处理,单据界面中并不要求显示这些东西;
首先查找出单据的模板
select FTemplateID,* from ICListTemplate where FName = '任务单汇报/请检单'
FTemplateID = 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
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表达式即可(可以是值函数)
效果图,过滤条件输入文本'是'能正确过滤出结果,文本内容是Action中的输出内容;
功能刚上线时,如果没有操作说明的情况下,操作者不知道到底该填什么值来过滤,可能会习惯性的按F7来选择值,
那如何能让计算列通过F7来选择,并返回是/否?
首先要找到一个辅助资料
系统中正好存在一个辅助资料包含了这两个文本,并且两条记录FtypeID是完全一致的(244)
如果系统中没有能够匹配的,请自行去创建一个新的辅助资料类型;
然后执行脚本:
update ICChatbillTitle
set FReturnDataType = 2,FItemClassID = 244
where FTypeID = 603 and FInterID = 1102
--1102,刚才插入的序时簿列字段的FinterID
这样就能F7选择标准值了;
如何把物料基础资料中的产品检验方式放到序时簿上去显示?
二开人员可能会习惯性的去打开bos设计器,或单据自定义到表体上去添加一个字段,然后搞携带,这种方式对于模板生效后的单据是有效的,但是模板生效前的单据是无效的。
可以看到他后台,FNeedSave字段为1.所以不要去改单据模板;
如果你已经添加这个字段,执行这段脚本调整他的序时簿显示,这样历史单据字段也能正常显示
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的内容用到这个表)
FTableName填写t_icitem,因为来源是物料的FProChkMde字段;FTableNameAlias t5,因为和表体关联的物料表的FTableNameAlias11是t5(图中第3条记录)
FTableName11,FTableNameAlias11,FFieldName11:t_submessage,tChkMde,FInterID;
物料基础资料的产品检验方式,的来源是辅助资料的检验方式:
因此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'
当需要添加一个序时簿字段时,可以参考现有的序时簿模板里面的字段记录来自行构建;
就看一下几个表
ICListTemplate
ICChatbillTitle
ICTableRelation
完
学习了
二开--老单序时簿添加自定义字段显示/过滤
本文2024-09-16 16:25:22发表“k3wise知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3wise-9128.html