第三方通过API对接星空系统传递凭证问题释疑(1)原创
金蝶云社区-战斗的凯文
战斗的凯文
3人赞赏了该文章 1,940次浏览 未经作者许可,禁止转载编辑于2023年02月13日 18:15:31
summary-icon摘要由AI智能服务提供

本文介绍了在使用金蝶星空系统API进行凭证操作时,关于账簿、凭证字、凭证号、辅助核算、币别、汇率类型等字段的详细处理方式和赋值规则。特别指出,基础资料对象如账簿、凭证字等应通过其编码(FNumber)在星空中已存在或事先通过API创建并审核。凭证号可选填,系统会根据设置自动分配。辅助核算字段名动态生成,需根据维度标识列指定。若账簿本位币为人民币,币别、汇率、汇率类型字段可不传。金额字段单位为元,精度根据币别设定。最后提供了包含两行分录的凭证Model的json示例。

PS:更多更详细内容请参考网址:API中心 (kingdee.com)或金蝶社区搜索“凭证 API”。

  • FAccountBookID字段中账簿id是取什么字段,如何获取星空这边的账簿信息。

答:账簿是一个基础资料对象,在星空API中,所有基础资料对象都是用编码字段来赋值的。上面001就是指定的星空中某个账簿的编码。注:json中“{}”表示对象,因此,API文档中,遇到“{}”时,就是星空中的对象,一般就是通过FNUMBER来指定这个对象,前提是这个编码代表的对象在星空中已存在。否则,如果它不存在或需要传递星空侧没有的基础资料,需要事先调用相关基础资料的API(如账簿的API),将第三方的基础资料保存到星空并审核后,星空中的单据才可以正常使用它。


示例:

"FAccountBookID":{

    "FNumber":"001"

}

image.png


  • FVOUCHERGROUPID凭证字id是指美团侧的凭证唯一编码还是具体什么含义,如何赋值

答:同账簿的示例格式,凭证字的json格式也是:

FVOUCHERGROUPID:{

    FNumber:"PRE001"

}

其中PRE001为星空中某个凭证字的编码,由{}可见,这是一个基础资料对象。

注:再次强调,API传递到星空侧的基础资料对象都应该是星空侧现有的数据。


image.png 


  • FVOUCHERGROUPNO凭证号必填,是什么含义,如何赋值?

答:这里的必填实际上是指星空中凭证的凭证号是必填项,但API调用时,json中实际上是可以选填的,即可以不指定,此时星空系统会根据系统设置自动分配一个合适的凭证号,如果指定,则优先使用API中指定的凭证号,但当凭证号和星空系统中现有凭证号重复时,将自动分配一个合适的凭证号。

注:如果不指定,建议json中不出现这个字段。

 

  • FDetailID当中的FDETAILID__FFLEX字段表示辅助核算,从api来看,后面的数字不连续,我们传输的时候是按api给出的数字字段来赋值还是如何处理?

答:辅助核算(星空系统称为核算维度)的字段名是动态的,与数字是否连接无关,数字只是一个标识。查看辅助核算的标识列的方法:星空系统—核算维度—过滤—显示隐藏列—勾选“维度标识列”—确定,可以看到:

image.png


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"
      }
    ]
  }
}


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