关于通信时组包的有关问题
关于通信时组包的问题
最近在做住房公积金的一个项目,但是有一段代码看不懂,请各位指教,我是新手。
请问一下try里面每一个fld的作用机制是怎样的?为什么sLine不断的被赋值,不会影响数据库信息吗?
function GenRtTxnThread.CompTxnDtl( qryData: TADOQuery;
sOutBank,sProtNo: String;
var sLine: String ): Boolean;
var
sTmp: String;
begin
Result := True;
try
// fld 1: 交易种类
sTmp := '100301';//固定填写
sLine := sTmp;
// fld 2: 报文类型
sTmp := '1202';//固定填写
sLine := sLine + sTmp;
// fld 3: 交易序号
sTmp := Format('%16s',[qryData.FieldByName('MsgId').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 4: 委托日期
sTmp := trim(qryData.FieldByName('EntrustDate').AsString);
if length(sTmp) <> 8 then
sLine := sLine + FormatDateTime('YYYYMMDD',now)
else
sLine := sLine + sTmp;
// fld 5: 清算日期
sTmp := '00000000';
sLine := sLine + sTmp;
// fld 6: 用户编号
sTmp := Format('%-18s',[qryData.FieldByName('UserNo').AsString]);
sLine := sLine + sTmp;
// fld 7: 收费机构代码
sTmp := Format('%-12s',[qryData.FieldByName('OrgId').AsString]);
sLine := sLine + sTmp;
// fld 8: 机构分支代码
sTmp := Format('%-12s',[' ']);
sLine := sLine + sTmp;
// fld 9: 发起方开户行行号
sTmp := Format('%-12s',[qryData.FieldByName('OrigBank').AsString]);
sLine := sLine + sTmp;
// fld 10: 发起方开户账号
sTmp := Format('%-35s',[qryData.FieldByName('OrigAcc').AsString]);
sLine := sLine + sTmp;
// fld 11: 接收方代码(清算行号)
sTmp := Format('%-12s',[sOutBank]);
sLine := sLine + sTmp;
// fld 12: 接收方分支代码(付款人开户行行号)
sTmp := Format('%-12s',[qryData.FieldByName('OutAccBank').AsString]);
sLine := sLine + sTmp;
// fld 13: 付款人账号
sTmp := Format('%-35s',[qryData.FieldByName('PayerAcc').AsString]);
sLine := sLine + sTmp;
// fld 14: 付款人名称
sTmp := Format('%-60s',[qryData.FieldByName('PayerName').AsString]);
sLine := sLine + sTmp;
// fld 15: 业务种类
sTmp := trim(qryData.FieldByName('TranType').AsString);
sLine := sLine + sTmp;
// fld 16: 合同协议号
sTmp := Format('%-60s',[sProtNo]);
sLine := sLine + sTmp;
// fld 17: 交易货币代码
sTmp := Format('%-3s',[qryData.FieldByName('Currency').AsString]);
sLine := sLine + sTmp;
// fld 18: 金额
sTmp := Format('%15s',[qryData.FieldByName('Amount').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 19: 手续费
sTmp := Format('%15s',[qryData.FieldByName('Charge').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 20: 附言
sTmp := Format('%-60s',[qryData.FieldByName('Remark').AsString]);
sLine := sLine + sTmp;
// fld 21: 业务处理方流水
sTmp := '0000000000000000';
sLine := sLine + sTmp;
// fld 22: 返回码
sTmp := Format('%-8s',[' ']);
sLine := sLine + sTmp;
// fld 23: 主动缴费标识
sTmp := '0';//非主动缴费
sLine := sLine + sTmp;
// fld 24: 变长定制信息长度
sTmp := '00000000';
sLine := sLine + sTmp;
最近在做住房公积金的一个项目,但是有一段代码看不懂,请各位指教,我是新手。
请问一下try里面每一个fld的作用机制是怎样的?为什么sLine不断的被赋值,不会影响数据库信息吗?
function GenRtTxnThread.CompTxnDtl( qryData: TADOQuery;
sOutBank,sProtNo: String;
var sLine: String ): Boolean;
var
sTmp: String;
begin
Result := True;
try
// fld 1: 交易种类
sTmp := '100301';//固定填写
sLine := sTmp;
// fld 2: 报文类型
sTmp := '1202';//固定填写
sLine := sLine + sTmp;
// fld 3: 交易序号
sTmp := Format('%16s',[qryData.FieldByName('MsgId').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 4: 委托日期
sTmp := trim(qryData.FieldByName('EntrustDate').AsString);
if length(sTmp) <> 8 then
sLine := sLine + FormatDateTime('YYYYMMDD',now)
else
sLine := sLine + sTmp;
// fld 5: 清算日期
sTmp := '00000000';
sLine := sLine + sTmp;
// fld 6: 用户编号
sTmp := Format('%-18s',[qryData.FieldByName('UserNo').AsString]);
sLine := sLine + sTmp;
// fld 7: 收费机构代码
sTmp := Format('%-12s',[qryData.FieldByName('OrgId').AsString]);
sLine := sLine + sTmp;
// fld 8: 机构分支代码
sTmp := Format('%-12s',[' ']);
sLine := sLine + sTmp;
// fld 9: 发起方开户行行号
sTmp := Format('%-12s',[qryData.FieldByName('OrigBank').AsString]);
sLine := sLine + sTmp;
// fld 10: 发起方开户账号
sTmp := Format('%-35s',[qryData.FieldByName('OrigAcc').AsString]);
sLine := sLine + sTmp;
// fld 11: 接收方代码(清算行号)
sTmp := Format('%-12s',[sOutBank]);
sLine := sLine + sTmp;
// fld 12: 接收方分支代码(付款人开户行行号)
sTmp := Format('%-12s',[qryData.FieldByName('OutAccBank').AsString]);
sLine := sLine + sTmp;
// fld 13: 付款人账号
sTmp := Format('%-35s',[qryData.FieldByName('PayerAcc').AsString]);
sLine := sLine + sTmp;
// fld 14: 付款人名称
sTmp := Format('%-60s',[qryData.FieldByName('PayerName').AsString]);
sLine := sLine + sTmp;
// fld 15: 业务种类
sTmp := trim(qryData.FieldByName('TranType').AsString);
sLine := sLine + sTmp;
// fld 16: 合同协议号
sTmp := Format('%-60s',[sProtNo]);
sLine := sLine + sTmp;
// fld 17: 交易货币代码
sTmp := Format('%-3s',[qryData.FieldByName('Currency').AsString]);
sLine := sLine + sTmp;
// fld 18: 金额
sTmp := Format('%15s',[qryData.FieldByName('Amount').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 19: 手续费
sTmp := Format('%15s',[qryData.FieldByName('Charge').AsString]);
sTmp := StringReplace(sTmp, ' ', '0', [rfReplaceAll]);
sLine := sLine + sTmp;
// fld 20: 附言
sTmp := Format('%-60s',[qryData.FieldByName('Remark').AsString]);
sLine := sLine + sTmp;
// fld 21: 业务处理方流水
sTmp := '0000000000000000';
sLine := sLine + sTmp;
// fld 22: 返回码
sTmp := Format('%-8s',[' ']);
sLine := sLine + sTmp;
// fld 23: 主动缴费标识
sTmp := '0';//非主动缴费
sLine := sLine + sTmp;
// fld 24: 变长定制信息长度
sTmp := '00000000';
sLine := sLine + sTmp;