钉钉氚云到金碟之二:测试凭证写入金碟KIS(DELPHI)

本文档介绍了如何在DELPHI中使用金蝶的专业插件COM接口来创建凭证。通过初始化数据库连接,设置凭证头和明细信息,以及处理可能出现的错误,演示了一个完整的凭证保存过程。关键点包括凭证日期的正确格式和COM对象的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DELPHI在使用其他程序的COM接口比较方便,在生成了相关的接口代码之后,只需引用接口单元即可,不需很多额外操作。

我新建一个DELPHI 应用程序,建一标准FORM,放一标准按钮,最简单的FORM及程序。按钮中的测试代码附后,相关注释如下:

1、红色1处,网上基本上搜不到相关代码,金碟的参考代码中也没有,费了九牛二虎之力测试出来。

这也是本代码最终能生成凭证的关键所在,一个黑盒子,没这个,进不去。就这在网上,在代码堆城至少费了两天时间。巨抗,金碟的参考代码就省这个,不知啥意思。

2、红色2处,这里不是日期型, 是字符型的

3、要加入《钉钉氚云到金碟之一》.PAS作为的引用单元

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  ComObj, KISProfessionalPlugin_TLB, Dialogs, StdCtrls, DB, ADODB, OleServer;

4、红色3处,这里是出错代码,出错提示很详尽,很具有参考价值。上代码 ,通了就非常简单。

procedure TForm1.Button2Click(Sender: TObject);
var
  i: Integer;
  objCn, kisobj: OleVariant;
  aVOUCHER: _Voucher;
  aclsDataBase: _clsDataBase;
  strconn: string;
  strErrorDesc: string;
  strErrorNum: string;
begin
  //
  kisobj := CreateOleObject('KISProfessionalPlugin.clsDataBase');
  strconn :=
    'connectString={Provider=SQLOLEDB.1;Password=sasa;Persist Security Info=True;' +
    'User ID=sa;Initial Catalog=AIS20220308192830;Data Source=192.168.16.199};' +
    'UserName=Manager;UserID=16394;' +
    'DBMSName=Microsoft SQL Server;DBMSVersion=2000;SubID=super;AcctType=gy;Setuptype=industry';

  i := 0;
  strErrorNum := '';
  strErrorDesc := '';
   //初始化数据库连接对象

  kisobj.InitConnection(strconn);  //strConn传入的数据库连接字符串
  kisobj.begintrans; //开始一个事务

  if not Savedata(1, strErrorNum, strErrorDesc) then
  begin
    kisobj.RollBackTrans; //出错回滚事务

  end;
  kisobj.CommitTrans; //提交事务

  showmessage('OVER!');

end;

function TForm1.Savedata(i: integer; var errornum, errorDesc: string): boolean;
var
  obj: OleVariant;
  ISSAVEOK: WordBool;
  aVOUCHER: OleVariant;
begin
  RESULT := FALSE;
 // aVOUCHER := TVoucher.CREATE(nil);
//  aVOUCHER := COVoucher.Create;
//  obj := CreateOleObject('KISProfessionalPlugin.Voucher');
  aVOUCHER := CreateOleObject('KISProfessionalPlugin.Voucher');
     //////----"凭证头"----------
  aVOUCHER.VchGroup := '记';
 // aVOUCHER.VchAttachment := 2;

  aVOUCHER.VchDate := '2021/7/30'; // '2020/12/30'; // FormatDateTime('yyyy-mm-dd', EncodeDate(2021, 7, 10));

   //下面的代码说明怎么新增一个凭证科目明细,注意:
   //在为obj对象的属性VouchEntry赋值前,要先执行obj.InsertEntry(新增一个凭证科目明细对象)

 //新增一个借方凭证科目明细
  aVOUCHER.InsertEntry;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchExp := 'XXXSS';
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].AcctID := '1002.05';
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchDebit := 100.00;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchCredit := 0.00;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchCyid := 'RMB';

//新增一个贷方凭证科目明细
  aVOUCHER.InsertEntry;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchExp := 'XXSS';
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].AcctID := '1132.02.00253'; //'1002.03';
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchDebit := 0.00;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchCredit := 100.00;
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].itemid := '19720';
  aVOUCHER.VouchEntry[aVOUCHER.nCount - 1].VchCyid := 'RMB';

  try
    ISSAVEOK := aVOUCHER.Save; //保存
  //保存失败返回错误编号和错误描述
    if not ISSAVEOK then
    begin
      errornum := inttostr(aVOUCHER.ErrNumber);
      errorDesc := aVOUCHER.ErrDescription;
      SHOWMESSAGE(errornum + '  : ' + errorDesc);

      EXIT;
    end;
  except
    Exit;
  end;
//  aVOUCHER := NULL;
  RESULT := True;
end;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值