现状:BOS里边销售出库单增加了一个单据字段,引用的是BOS基础资料里边的数据,在BOS里边是没有设置单据下推携带关联的地方,但是在单据自定义里边又选不到BOS基础资料。
需求:增加的这个字段需要引用继承上游销售订单的同名字段数据
操作方法:
---对比新增的2列数据是否有差异,如有差异,按照上游字段进行调整,记录下单据标识码和新增列名
select * from ICTemplateentry
where (fid='s01' and FCtlIndex=66) or (fid='b01' and FCtlIndex=73)
改造数据库-查询下推关联表记录;
select FColName,FName,FAction from ICSelbills where FID='b01' and FTableName='SEorderentry' and FDstCtlField='FEntrySelfB0173'
改造数据库,更新下推关联数据携带字段与对应取值;
--更新下推关联表数据
update ICSelbills set FColName='FEntrySelfS01660',FName='FEntrySelfS0166',FAction='(SELECT FID FROM ICDevGroupInfo WHERE FID = u1.FEntrySelfS0166)' where FID='b01' and FTableName='SEorderentry' and FDstCtlField='FEntrySelfB0173'and FDK=0
update ICSelbills set FColName='FEntrySelfS01661',FName='FEntrySelfS0166',FAction='(SELECT FName FROM ICDevGroupInfo WHERE FID = u1.FEntrySelfS0166)' where FID='b01' and FTableName='SEorderentry' and FDstCtlField='FEntrySelfB0173'and FDK=1
update ICSelbills set FColName='FEntrySelfS01662',FName='FEntrySelfS0166',FAction='(SELECT FNumber FROM ICDevGroupInfo WHERE FID = u1.FEntrySelfS0166)' where FID='b01' and FTableName='SEorderentry' and FDstCtlField='FEntrySelfB0173'and FDK=2
OVER
btw:如果不想倒腾单据自定义和BOS,可以直接调整后台数据库,参考如下方法:
--老单模板相关表ICTransactionType、ICTemplate、ICTemplateEntry
--新单相关模板表ICClassType、ICClassTableInfo
--新单下推老单单据转换流程相关模板表:
--icclasslink(单据转换流程整体信息)、ICSelBills(单据转换流程字段明细对应关系信息) ICTableRelation(单据转换流程表之间的连接关系信息)
ICSelBills表各个字段解释:
FID 需要进行关联关系调整的单据内码
FFieldName 关联字段名称
FDstCtlField 需要调整的单据字段内码
FDK 字段类别
FSelType 打开方式
FColName 上游单据携带字段内码+序号,0开始
FName 上游单据携带字段内码
FTableName 上游单据表名
FTableAlias 表范围
FAction 动作
FROB 功能标识
FAllowEdited 是否允许编辑
--例如要增加委外订单的【字段A】下推到调拨单的【字段B】的效果
--只需在后台增加一条对应单据转换流程的【字段A】下推【字段B】的明细对应关系即可,即向明细表ICSelBills插入一条正确记录
--先根据单据名称查询出单据类型ID,例如查询出委外订单ID为:1007105,调拨单ID为:-41
SELECT * FROM ICClassType WHERE FName_CHS LIKE '委外订单'
SELECT * FROM ICClassType WHERE FName_CHS LIKE '调拨单'
--另外老单还需要查询出对应的老单模板ID,例如查询出调拨单的FTemplateID为:D01
SELECT FTemplateID,* FROM ICTranSactionType WHERE FName like '调拨单'
--根据源单类型ID(1007105)和目标单类型ID(-41)查询对应的单据转换流程模板信息,查出字段FFieldName的值,为了后边向ICSelBills表插入记录用
--例如查询出对应流程的FFieldName为:1007105
SELECT FFieldName,* FROM ICClassLink WHERE FSourClassTypeID=1007105 AND FDestClassTypeID=-41
--再分别查询出【字段A】和【字段B】的关键字,用于插入字段明细对应关系
--新单的单据字段FKey可根据单据类型ID(1007105)和字段名称(字段A)在ICClassTableInfo里查询
--例如查出来【字段A】的关键字为:FTextA
SELECT FKey,* FROM ICClassTableInfo WHERE FClassTypeID=1007105 AND FCaption_CHS LIKE '字段A'
--老单单据头字段关键字可根据单据FTemplateID(D01)和字段名称(字段B)在ICTemplate里查询,例如查出来【字段B】的关键字为:FTextB
SELECT FFieldName,* FROM ICTemplate WHERE FID='D01' AND FCaption Like '%字段B%'
--最后根据上面查询出来的FTemplateID,FFieldName,以及【字段A】和【字段B】的关键字,向明细对应关系表插入对应关系记录
--D01 1007105 FTextA FTextB
INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
VALUES ('D01','1007105','FTextB',2,0,'FTextA','FTextA','ICSubContract','v1','',0,16384)
INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
VALUES ('D01','1007105','FTextB',2,1,'FTextA','FTextA','ICSubContract','v1','',0,16384)
INSERT INTO ICSelbills (FID, FFieldName, FDstCtlField, FSelType, FDK, FColName, FName, FTableName, FTableAlias, FAction, FROB, FAllowEdited)
VALUES ('D01','1007105','FTextB',2,2,'FTextA','FTextA','ICSubContract','v1','',0,16384)
GO
--其他新单下推老单的单据转换流程后台增加明细字段对应关系,亦可参照以上步骤进行
--备注:请先在测试帐套中验证无误后,再到正式帐套中执行!