防伪开票组件接口软件方案一、概况对于自主或委托开发管理信息系统的企业,我们开发了Windows版防伪开票组件接口软件,将防伪税控开票功能嵌入企业销售软件内,为真正实现防伪税控防伪税控系统与企业管理信息系统的无缝连接创造了必要的条件。组件调用软件基于ActiveX规范,提供标准开票界面和后台命令两种接口方式,实现企业日常开具、作废和打印税控发票的功能,为需要实时打印发票或有专门开票要求的企业提供了适宜的解决方案。对于可以采用通用开票界面的销售软件,推荐使用标准开票界面接口方式,此时本软件提供与防伪税控开票软件相同的开票、查询和作废用户界面,并将发票数据通过组件接口传入销售软件。采用这种方式,企业的销售软件不用开发专用发票开票界面,开票界面比较规范统一。对于开票时需要录入辅助数据,或对发票填写方式有所约束,必须具备专门或行业性开票界面的企业,则应采用后台调用开票命令的接口方式。这种方式的开票数据必须从企业销售软件的开票界面取得,通过定义的COM接口传入接口软件,通过接口软件将开票数据记入防伪开票软件数据库并写入金税卡。安装本软件之前,必须首先安装防伪税控系统硬件设备,并安装Windows版防伪税控开票子系统软件。在本软件安装后,进入防伪税控开票子系统,选择系统注册功能,将软件注册版本设为组件接口版,然后输入从我公司取得注册特征码,才能使用本软件。本软件使用时,必须接好防伪税控设备,插好本企业IC卡,并且没有任何软件访问金税卡设备,本软件必须独占使用金税卡。二、接口功能1、开启金税卡方法:OpenCard();功能:本项功能必须在其它功能前首先调用,如果尚未调用此功能而调用其它功能,则会产生返回码为1的尚未开启金税卡错误。它开启并占用金税卡设备,初始化各项参数,分配软件所需各项资源;传出:InvLimit–开票限额,金税卡发票开具价税合计限额TaxCode–本单位税号TaxClock–金税卡时钟MachineNo–开票机号码,主开票机为0IsInvEmpty–有票标志,0为金税卡中无可开发票,1为有票IsRepReached–抄税标志,0为未到抄税期,1为已到抄税期IsLockReached–锁死标志,0为未到锁死期,1为已到锁死期2、查询库存发票方法:GetInfo();功能:从金税卡读取发票库存数量及其它参数;传入:InfoKind–要开具的发票种类(0:专用发票1:废旧物资发票2:普通发票)传出:InfoTypeCode–要开具发票的十位代码InfoNumber–要开具发票的号码InvStock–发票剩余份数TaxClock–金税卡时钟3、发票开具方法:Invoice();功能:传入开票数据,将开票数据记入防伪税控开票数据库,并在金税卡中开具此发票。传入:(1)发票整体信息传入发票整体信息前调用InvInfoInit()方法初始化发票整体信息各项属性。InfoClientName–购方名称InfoClientTaxCode–购方税号InfoClientBankAccount–购方开户行及账号InfoClientAddressPhone–购方地址电话InfoSellerBankAccount–销方开户行及账号InfoSellerAddressPhone–销方地址电话InfoTaxRate–税率,17、13、6、4等InfoNotes–备注InfoInvoicer–开票人InfoChecker–复核人,可为空InfoCashier–收款人,可为空InfoListName–如不为空,则开具销货清单,此为发票上商品名称栏的清单信息,应为“(详见销货清单)”字样(2)发票明细信息逐行录入发票商品明细信息,每录入一行调用方法AddInvList()将本行加入明细表,如有必要可调用ClearInvList()清除明细表全部行。传入发票明细信息前调用InvInfoInit()方法初始化发票明细信息各项属性。每行内容为:ListGoodsName–商品或劳务名称ListTaxItem–税目,4位数字,商品所属类别ListStandard–规格型号ListUnit–计量单位,如计量单位为空,则忽略数量和单价ListNumber–数量ListPrice–单价ListAmount–金额,可以不传(为0),由接口软件计算,如传入则应符合计算关系ListPriceKind–含税价标志,单价和金额的种类,0为不含税价,1为含税价ListTaxAmount–税额,可以不传(为0),由接口软件计算,如传入则应符合计算关系传出:发票整体信息:InfoAmount–合计不含税金额InfoTaxAmount–合计税额InfoInvDate–开票日期InfMonth–所属月份InfoTypeCode–发票十位代码InfoNumber–发票号码GoodsListFlag–销货清单标志,0–无销货清单,1–有销货清单返回状态(RetCode):4001–传入发票数据不合法4002–开票前金税卡状态错4003–金税卡开票调用错误4004–开票后取金税卡状态错4011–开票成功4012–开票失败4013–所开发票已作废状态信息:InvStock–发票剩余份数TaxClock–金税卡时钟IsInvEmpty–有票标志,0为金税卡中无可开发票,1为有票4、发票打印方法:PrintInv();功能:调用防伪开票标准打印程序,打印指定发票;传入:InfoTypeCode–要打印发票的十位代码InfoNumber–要打印发票的号码GoodsListFlag–销货清单标志,0–打印发票,1–打印销货清单传出:返回标志(RetCode),5001–未找到发票或清单5011–打印成功5012–未打印5013–打印失败5、发票作废方法:CancelInv();功能:在金税卡及防伪开票数据库中作废已开发票;传入:InfoTypeCode–要作废发票的十位代码InfoNumber–要作废发票的号码传出:返回标志(RetCode),6001–当月发票库未找到该发票6002–该发票已经作废6011–作废成功6012–未作废6013–作废失败。6、关闭金税卡方法:CloseCard();功能:释放对金税卡的设备占用,释放其它占用的资源;传出:关闭成功标志;三、操作流程销售管理系统开票开票数据传出发票数据传入企业销售开票软件进入查询作废打印开启金税卡关闭金税卡查询库存发票发票作废发票打印发票开具金税卡金税卡发票库退出四、接口的属性和方法1、方法HRESULT__fastcallOpenCard(void);HRESULT__fastcallCloseCard(void);HRESULT__fastcallGetInfo(void);HRESULT__fastcallInvoice(void);HRESULT__fastcallCancelInv(void);HRESULT__fastcallPrintInv(void);HRESULT__fastcallAddInvList(void);HRESULT__fastcallClearInvList(void);HRESULT__fastcallInvInfoInit(void);HRESULT__fastcallInvListInit(void);2、属性__propertyBSTRTaxCode,read;__propertyshortRetCode,read;__propertydoublInvLimit,read;__propertyDATETaxClock,read;__propertyshortIsInvEmpty,read;__propertyshortIsRepReached,read;__propertyshortIsLockReached,read;__propertyshortMachineNo,read;__propertylongInvStock,read;__propertyBSTRInfoTypeCode,read,write;__propertylongInfoNumber;,read,write;__propertyDATEInfoDate={read=get_InfoDate};__propertyshortInfoMonth={read=get_InfoMonth};__propertydoubleInfoAmount={read=get_InfoAmount};__propertyshortInfoTaxRate,read,write;__propertydoublInfoTaxAmount={read=get_InfoTaxAmount};__propertyBSTRInfoBillNumber,read,write;__propertyBSTRInfoNotes,read,write;__propertyBSTRInfoListName,read,write;__propertyBSTRInfoClientName,read,write;__propertyBSTRInfoClientTaxCode;__propertyBSTRInfoClientBankAccount;__propertyBSTRInfoClientAddressPhone,read,write;__propertyBSTRInfoInvoicer,read,write;__propertyBSTRInfoChecker,read,write;__propertyBSTRInfoCashier,read,write;__propertyshortGoodsListFlag,read,write;__propertyBSTRListGoodsName,read,write;__propertyBSTRListTaxItem,read,write;__propertyBSTRListStandard,read,write;__propertyBSTRListUnit,read,write;__propertydoubleListNumber,read,write;__propertydoubleListPrice,read,write;__propertydoubleListAmount,read,write;__propertyshortListPriceKind,read,write;__propertydoubleListTaxAmount,read,write;__propertyshortInfoKind,read,write;五、发票填开注意事项1、负数发票按照税务总局新规定,开具负数发票,必须在备注首行中注明“对应正数发票代码XXXXXXXXXX号码YYYYYYYY”字样,其中“X”为发票左上角十位代码数字,“Y”为发票右上角八位号码数字。每份负数发票只能对应一份正数发票,多份负数发票可对应一份正数发票,只要负数发票总金额不超过正数发票金额即可。2、折扣在发票和销货清单中,可在每一行商品下加入折扣行,折扣行商品名称栏填写“折扣(X.XXX%)”字样,其中“X”为折扣率数字,金额和税额栏以负数填写,税率与发票税率相同,其它栏不填写。对于相邻商品行折扣率相同的,可汇总填写折扣行,折扣行商品名称栏填写“折扣行数Y(X.XXX%)”字样,其中“Y”为汇总行数数字,汇总金额和汇总税额栏以负数填写,税率与发票税率相同,其它栏不填写。3、销货清单当发票明细行数超过发票打印行数(现行发票的打印行数为8)时,系统将开具销货清单,销货清单的汇总金额和税额填写在发票上,如果包含折扣,则清单和发票都要包含原价汇总行和折扣汇总行。各汇总行由系统自动产生,无需外部传入。4、价格方式对于各商品行,发票票面上必须打印不含税单价和不含税金额,但传入单价可以为含税单价,系统自动转化为不含税单价和金额,并按含税单价计算含税金额,此时,无论传入单价数据如何精确,价格方式不同都可能产生不同的金额和税额。六、调用方式举例下面仅以C++Build语言为例分几种情况作