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;