电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

二开-自定义BOS单据表头下推老单表体选单关系设计

来源:金蝶云社区作者:金蝶2024-09-1613

二开-自定义BOS单据表头下推老单表体选单关系设计

案例:自定义bos下推产品入库单,并实现勾稽

自定义bos单如下

image.webp

下面将分解开发过程:

创建选单关系:请不要再bos设计器里添加新单推老单的选单关系,该工具对老单支持不够;只能通过再数据库中插入数据来实现功能;

查找下游单据(老单)的模板ID;select  FID,FTemplateID,* from ICTransactionType where FName = '产品入库',

image.webp

FID=2,FTemplateID='A02'

再ictemplateentry中查找表体字段

image.webp

查找上游单据bos单据的单据类型:

FID=200000013,表头物理表FTableName='t_bos200000013',主键FPrimaryKey ='FID'

image.webp

bos单的模型Fkey字段标记,ffieldname字段物理表字段名

image.webp

第一步:创建选单关系:

INSERT INTO ICClassLink(FSourClassTypeID,FDestClassTypeID,FSourBillShowIndex,FAllowCopy,FAllowCheck,FAllowForceCheck,FFlowControl,FDeCondition,FCondition,FDeHCondition,FDeBCondition,FSourBillFID,FSourBillFEntryID,FSourBillFBillNo,FObjectName,FObjectType,FObjectID,FIsUsed,FUsePage,FDefaultPage,FSRCIDKey,FSRCEntryIDKey,FSRCBillNoKey,FSRCClassIDKey,FISUserDefine,FDestTranTypeID,FSourTranTypeID,FSelectListID,FMustSelected,FSystemReserved,FROB,FFieldName,FRemark,FUseSpec,FSrcDestPage,FSrcPage,FToRed,FSourTypeID,FDestTypeID,FLookUpConditionUp,FLookUpConditionDown,FDefault,FUnControl,FParaValue) VALUES (200000013,-2,0,0,1,0,0,'','FQTY>FQTY1','','','FID','','FBillNo','',0,0,2,',1,',',1,','FSourceInterID','FSourceEntryID','FSourceBillNo','FSourceTranType',1,2,200000013,200000013,0,0,0,'200000013','<FAction=,CanMultiSelBill;/>',-1,0,0,0,0,0,'','',0,6,0) 

GO

image.webp

image.webp

FSourClassTypeID 填写上游bos单据的类型200000013

FDestClassTypeID 填写下游老单的类型ID -2;老单需要再FID前加上负号(-)

FAllowcopy:复制关系

FAllowCheck:勾稽

FAllowForceCheck:强制勾稽

开发时使用勾稽即可;FAllowCheck=1,其它=0

FCondition:FQty>FQty1(bos单中FQty,FQty1分别对应生产数量、累计入库数量);指必须符合这个条件时才可以下推;

FSourBillFID:FID 上游单据主键

FSourbillFEntryID:空 (表头推表体,这里可以不用填)

FSourcBillFBillNo:FBillNo 上游单据的单据编号字段

--可以通过脚本select FKey,* from ICClassTableInfo where FClassTypeID = 200000013来查询字段的Key

FISused:2启用

FUsePage:,1, 仅表头

FDefualtPage:,1, 仅表头

FSrcIDKey:下游单据的物理表字段用于存上游单据内码

FSRCEntryIDKey:'FSourceEntryID',下游单据的物理表字段用于存上游单据分录ID

FSRCBillNoKey:'FSourceBillNo'下游单据的物理表字段用于存上游单据编号

FSRCClassIDKey:'FSourceTranType'下游单据的物理表字段用于存上游单据类型

FDestTranTypeID:产品入库的FID(查产品入库单模板时查出来的FID值)

FSourTranTypeID:上游bos单单据类型id

FSelectListID:上游bos单单据类型id

FFieldName:icclasslink中定义的ffieldname,建议使用200000013与bos单的单据类一致

FRemark:'<FAction=,CanMultiSelBill;/>'固定值,表示可同时选多个单一起下推

当你完成上面的操作后,再200000013序时簿上就会出现 下推-产品入库 这个菜单了;

image.webp

第二步:添加下推的值映射关系:

比如将bos单表头的物料携带到产品入库表体的物料字段上:

当下游单据是老单时,在下游单据加载上游数据的数据包时,拼接Sql时需要用到ICTableRelation,ICSelbills;

ICTableRelation用于拼接这个sql的from部分

ICSelbills用于拼接这个sql的select部分


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

values(0,0,'t_BOS200000013','v1','FBASE','t_ICItem','t4','FItemID','*=','A02','200000013',0,0,'','','','=',0,0,'')


image.webp

FTableName,上游单据的表头物理表字段

FTableNameAlias : v1 上游单据物理表别称,一般使用v1

FFieldName,FBASE上游单据物料字段的物理表字段名称

FTableName11 : t_icitem 关联表(物料基础资料)物理表

FTableName11:t_icitem  别称 t4 ,可以随意命名

FFieldName11:fitemid 物料的主键

flogic:*= 表示left join

FBillID:产品入库单的模板ID

FFieldID:icclasslink中定义的ffieldname,建议使用200000013与bos单的单据类一致

FLogicOperator:=


这种配置再拼sql的where部分会是这样

from t_BOS200000013 v1

left join t_icitem t4 on v1.FBASE = t4.fitemid 


接下来是select部分:

不管选单时要携带任意字段,这2条记录是必须插入的

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited)

values('A02',200000013,'',-200,-1,'FInterID','FID','t_BOS200000013','v1','',0,0)

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited)

values('A02',200000013,'',-1,-1,'FBillNo','FBillNo','t_BOS200000013','v1','',0,0)


FID, 产品入库单的模板ID

FFieldName:icclasslink中定义的ffieldname,建议使用200000013与bos单的单据类一致

这2条记录比较特殊需要单据说明

第一条记录 标记选单关系中上游单据的主键

FSelType:-200 bos单的主键定义

FDK:-1 固定-1

FColName:数据包的字段别名必须是FInterID

FName:bos单主键物理表字段

FTableName:t_BOS200000013字段来源物理表

FTableAlias:v1 与ICTableRelation定义的别名要保持一致

第二条记录 标记选单关系上游单据的单据编号字段

FSelType -1 固定

FDK:-1 固定-1

FColName:数据包的字段别名必须是FBillNo

FName:bos单单据编号物理表字段

FTableName:t_BOS200000013字段来源物理表

FTableAlias:v1 与ICTableRelation定义的别名要保持一致

接下来配置物料携带:

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited)

values('A02',200000013,'FItemID',0,0,'FItemID','FITEMID','t_ICItem','t4','',0,0)

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited)

values('A02',200000013,'FItemID',0,0,'FItemNUMBER','FNUMBER','t_ICItem','t4','',0,0)

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited)

values('A02',200000013,'FItemID',0,0,'FItemNAME','FNAME','t_ICItem','t4','',0,0)


FDstCtlField:FItemID 下游单据物料字段,因为物料是基础资料类型字段,所以不能只携带内码到下游,还需要再数据包中配置名称和编码来

FDK 1 编码 2名称

FTableName:字段来源t_ICItem

FTableAlias : t4 ICTableRelation定义的别名要保持一致


再拼凑select脚本时就会是这样

v1.FID as FInterID,v1.FbillNo as fbillno,t4.FITEMID as FItemID ,t4.FNUMBERas FItemNUMBER,t4.FNAME as FItemNAME


 执行完上述脚本之后,点击下推看看效果;

打开sqlserver跟踪器,会看到这样一条脚本

image.webp

t4.FUnitGroupID这个是系统自动添加的,只要转换关系中存在t_icitem,就会自动创建这个字段的输出,供携带单位使用

下推后的效果

image.webp

已同样的方法我们把单位插入进来(开发可以先自己配置一次,再往下看,检验一下是否已经掌握携带关系配置)

...

...

确定单位物理表select * from t_ItemClass 查询结果t_MeasureUnit


insert into ICTableRelation(FTypeID,FInterID,FTableName,FTableNameAlias,FFieldName,FTableName11,FTableNameAlias11,FFieldName11,FLogic,FBillID,FFieldID,FMode,FIndex,FCondition,FLeftParentheses,FRightParentheses,FLogicOperator,FISConst,FConstType,FSubFilter) values(0,1,'t_BOS200000013','v1','FBase1','t_MeasureUnit','t7','FMeasureUnitID','*=','A02','200000013',0,0,'','','','=',0,0,'')

--单位也是基础资料因此也需要插3条记录

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'FUnitID',0,0,'FUnitID','FMeasureUnitID','t_MeasureUnit','t7','',0,0) Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'FUnitID',0,0,'FUnitNUMBER','FNUMBER','t_MeasureUnit','t7','',0,0) Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'FUnitID',0,0,'FUnitNAME','FNAME','t_MeasureUnit','t7','',0,0)


接下来是把应收数量、实收数量携带下来,这2个字段直接来源于bos单表头物理表字段,所以只需要各插入一行记录即可,也不需要额外再ICTableRelation添加记录,只需要插入ICSelbills记录即可;

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'FAuxQtyMust',0,0,'FAuxQtyMust','FQty','t_BOS200000013','v1','',0,0) Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'FAuxQty',0,0,'FAuxQty','FQty','t_BOS200000013','v1','',0,0)

先不考虑勾稽这种场景,仅考虑把值携带下去,后面会讲如何扣减;

下推单据,后保存一下数据;

image.webp

看看后台的记录,下游单据是否记录了上游单据的内码ID

image.webp

发现并没有把上游单据ID记录下来;如果没有这些记录是无法做到反写勾稽扣减的;

删掉单据,改进选单关系,把上游的单据内码,单据类型,单据编号携带下来;脚本与数量类似;

Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'fsourcetrantype',0,0,'fsourcetrantype','FClassTypeID','t_BOS200000013','v1','',0,0) Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,FDK,FColName,FName,FTableName,FTableAlias,FAction,FROB,FAllowEdited) values('A02',200000013,'fsourceinterid',0,0,'fsourceinterid','FID','t_BOS200000013','v1','',0,0) Insert into ICSelbills(FID,FFieldName,FDstCtlField,FSelType,F

二开-自定义BOS单据表头下推老单表体选单关系设计

案例:自定义bos下推产品入库单,并实现勾稽自定义bos单如下下面将分解开发过程:创建选单关系:请不要再bos设计器里添加新单推老单的选单...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信