本文介绍了在使用金蝶星空系统API进行凭证操作时,关于账簿、凭证字、凭证号、辅助核算、币别、汇率类型等字段的详细处理方式和赋值规则。特别指出,基础资料对象如账簿、凭证字等应通过其编码(FNumber)在星空中已存在或事先通过API创建并审核。凭证号可选填,系统会根据设置自动分配。辅助核算字段名动态生成,需根据维度标识列指定。若账簿本位币为人民币,币别、汇率、汇率类型字段可不传。金额字段单位为元,精度根据币别设定。最后提供了包含两行分录的凭证Model的json示例。
PS:更多更详细内容请参考网址:API中心 (kingdee.com)或金蝶社区搜索“凭证 API”。
FAccountBookID字段中账簿id是取什么字段,如何获取星空这边的账簿信息。
答:账簿是一个基础资料对象,在星空API中,所有基础资料对象都是用编码字段来赋值的。上面001就是指定的星空中某个账簿的编码。注:json中“{}”表示对象,因此,API文档中,遇到“{}”时,就是星空中的对象,一般就是通过FNUMBER来指定这个对象,前提是这个编码代表的对象在星空中已存在。否则,如果它不存在或需要传递星空侧没有的基础资料,需要事先调用相关基础资料的API(如账簿的API),将第三方的基础资料保存到星空并审核后,星空中的单据才可以正常使用它。
示例:
"FAccountBookID":{
"FNumber":"001"
}
FVOUCHERGROUPID凭证字id是指美团侧的凭证唯一编码还是具体什么含义,如何赋值
答:同账簿的示例格式,凭证字的json格式也是:
FVOUCHERGROUPID:{
FNumber:"PRE001"
}
其中PRE001为星空中某个凭证字的编码,由{}可见,这是一个基础资料对象。
注:再次强调,API传递到星空侧的基础资料对象都应该是星空侧现有的数据。
FVOUCHERGROUPNO凭证号必填,是什么含义,如何赋值?
答:这里的必填实际上是指星空中凭证的凭证号是必填项,但API调用时,json中实际上是可以选填的,即可以不指定,此时星空系统会根据系统设置自动分配一个合适的凭证号,如果指定,则优先使用API中指定的凭证号,但当凭证号和星空系统中现有凭证号重复时,将自动分配一个合适的凭证号。
注:如果不指定,建议json中不出现这个字段。
FDetailID当中的FDETAILID__FFLEX字段表示辅助核算,从api来看,后面的数字不连续,我们传输的时候是按api给出的数字字段来赋值还是如何处理?
答:辅助核算(星空系统称为核算维度)的字段名是动态的,与数字是否连接无关,数字只是一个标识。查看辅助核算的标识列的方法:星空系统—核算维度—过滤—显示隐藏列—勾选“维度标识列”—确定,可以看到:
json中的字段名就是“FDETAILID__+维度标识列”组成。
示例:
"FDETAILID__FFLEX4":{
"FNumber":"A001"
}
表示编码为A001的供应商。
注:某个科目挂了该维度才需要指定,未挂就不需要出现在json中。根据基础资料需要事先在星空中存在的前提,如果A001供应没不存在,需要事先调用供应没的API传递到星空中。
FCURRENCYID,FEXCHANGERATETYPE,FEXCHANGERATE币别,汇率,汇率类型,目前我们这边仅支持人民币,那这些字段如何赋值?
答:如果账簿的本位币也是人民币,且设置了默认币别是人民币的情况下,json可以不传递以上三个字段,星空系统会自己取账簿的默认币别,汇率固定为1,并取默认汇率类型。
原币本币金额,金额字段的单位是元还是分?
答:金额类字段的单位都是元,精度由当前行币别的精度决定,如果是人民币,精度默认为2,即精确到分。
PS:
1,字段出现的顺序很关键,将影响星空处理的顺序,顺序不对很可以导致名称奇怪的错误。字段顺序的原则是:在星空系统中凭证录入界面,手工录入凭证时字段的顺序。手工不需要录入的字段理论上也不需要在json中指定。因为API传递凭证的过程,实质是模拟手工录入数据的过程。
2,为空的值以及默认值可以不指定(参考手工录入凭证时,不需要手工指定即可自动获得值的字段),json中仅指定必须的字段的值,内容越精简越好。
3,json中具体需要哪些字段,由凭证的内容决定,如果不确定,可以在星空中尝试手工录入一下这个凭证,看手工需要指定哪些字段。如:当指定的科目是现金类科目时,需要同时指定结算类型和结算号这两个字段。
4,json中如果指定FVOUCHERID的话,系统会试图去找到相同ID的凭证,然后用新的数据去覆盖它。这很可能违背操作员只是想传入一张新凭证的初忠,造成原有凭证丢失的严重后果。因此,请务必知晓:指定FVOUCHERID为修改现有凭证,不指定为增加新凭证。
5,FDATE是必填项,且必须紧跟在FAccountBookID之后,系统根据它来自动确实凭证的年度和期间。因此,请不要再重复指定FYEAR和FPERIOD。
6,FVoucherGroupNo可以不指定,但如果一定要指定的话,FVoucherGroupID一定要在FVoucherGroupNo之前。、
7,指定"FDocumentStatus":"Z",并不表示是暂存凭证,如果要仅暂存凭证,可以调用专门的“暂存”接口“Draft”而不是“Save”。事实上,不需要手动指定FDocumentStatus,系统会自动确定凭证状态。
8,默认情况下系统会自动确定凭证的制单人为调用API时的用到的登录用户。如果需要指定其它制单人,需要使用:
"FCreatorId":{
"FUserID":"真实存在的用户内码"
}
请注意,这和基础资料通过Fnumber编码来指定不同。用户内码的获得可以查询数据库或通过专门的“用户”接口来查询到。如果指定不存在的用户ID,可能引发报错或其它不正常的结果。
附:
以下提供一段有两行分录完整的凭证Model的json示例,以供参考:
{ "Model": { "FAccountBookID": { "FNumber": "008" }, "FDate": "2022-05-25", "FVOUCHERGROUPID": { "FNumber": "PRE004" }, "FEntity": [ { "FEXPLANATION": "ABC", "FACCOUNTID": { "FNumber": "1405" }, "FDetailID": { "FDetailID__FFLEX8": { "FNumber": "08.03.0388" } }, "FUnitId": { "FNumber": "He" } "FQty": "10", "FPrice": "500", "FDEBIT": "5000" }, { "FEXPLANATION": "123", "FACCOUNTID": { "FNumber": "2202.01" }, "FDetailID": { "FDetailID__FFLEX4": { "FNumber": "37.9047" } } "FCREDIT": "5000" } ] } }
推荐阅读