delphi7变量生成xml问题

依诺莎电脑 3月前 68

sql查询结果后,生成xml文件,想实现"id"相同时,"id1"如果有10条记录,那node2就产生10行记录。以下代码成了每个"id1"一个xml文件了,应该是怎么修改法

procedure TForm1.Button9Click(Sender: TObject);
var
  xmldcmnt1: TXMLDocument;
  Rootnode,node,node1,node2,node3,node4 : IXMLNode;
  fid,id,id1,strsql,amt: string;
  Branch,fBranch: string;
  branchname,branchno,kemu,lx:string;
  m,n,i :Integer;
  begin
    strsql := 'execute HLQSales.dbo.hlq_sale_yytax ''' + DateToStr(RzDateTimePicker1.Date) + ''',''' + DateToStr(RzDateTimePicker2.Date) + ''',''' + LeftStr(rzComboBox1.Text, 2) + '''';
    with qry1 do begin
    Close;
    SQL.Clear;
    SQL.Add(strsql);
    Open;
    end;
    m := 299;
    fBranch :='';
    qry1.First;
    while not qry1.Eof do begin
    //第一条记录走”相同“
    Branch :=qry1.FieldByName('branch_name').AsString;
    if (Branch <> fBranch) then begin
    fBranch:=Branch;
    m:=m+1;
    n:=0;
    end;

    n:=n+1;
    id :=IntToStr(m);
    id1 :=IntToStr(n);
          branchno :=qry1.FieldByName('branch_yyno').AsString;
      branchname :=qry1.FieldByName('branch_name').AsString;
      kemu :=qry1.FieldByName('accounting').AsString;
      lx :=qry1.FieldByName('lx').AsString;
      if lx = '收入' then amt:=qry1.FieldByName('pos_amtn').AsString
      else if lx='税收' then amt:=qry1.FieldByName('tax_amt').AsString
      else amt:=qry1.FieldByName('cost_amtn').AsString;
        xmldcmnt1 := TXMLDocument.Create(nil);
    try
        //加入版本信息 ‘<?xmldcmnt1 version="1.0" encoding="UTF-8" ?> ’
        xmldcmnt1.Active := True;
        xmldcmnt1.Version := '1.0';
        xmldcmnt1.Encoding :='UTF-8';

        Rootnode := xmldcmnt1.CreateNode('ufinterface');
        Rootnode.Attributes['billtype']:='gl';
        Rootnode.Attributes['sender']:='001';
        Rootnode.Attributes['proc']:='add';
        node := xmldcmnt1.CreateNode('voucher');
        node.Attributes['id']:='';
        Rootnode.ChildNodes.Add(node);
        node1 := xmldcmnt1.CreateNode('voucher_head');
        node.ChildNodes.Add(node1);
        node2 := xmldcmnt1.CreateNode('company');
        if LeftStr(rzComboBox1.Text, 2)='01' then  node2.Text:='08'
        else if LeftStr(rzComboBox1.Text, 2)='02' then node2.Text:='04'
        else if LeftStr(rzComboBox1.Text, 2)='03' then node2.Text:='03';
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('voucher_type');
        node2.Text:='记销凭证';
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('fiscal_year');
        node2.Text:=FormatDateTime('YYYY',RzDateTimePicker2.Date);
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('accounting_period');
        node2.Text:=FormatDateTime('MM',RzDateTimePicker2.Date);
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('voucher_id');
        node2.Text:=id;
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('attachment_number');
        node2.Text:='0';
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('date');
        node2.Text:=DateToStr(RzDateTimePicker2.Date);
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('enter');
        node2.Text :='王楠';
      //node2.Text:= Form1.StatusBar1.Panels.Items[1].Text;
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('signature');
        node2.Text:='N';
        node1.ChildNodes.Add(node2);
        node2 := xmldcmnt1.CreateNode('voucher_making_system');
        node2.Text:='外部系统交换平台';
        node1.ChildNodes.Add(node2);

        node1 := xmldcmnt1.CreateNode('voucher_body');
        node.ChildNodes.Add(node1);
        node2 := xmldcmnt1.CreateNode('entry');
        node1.ChildNodes.Add(node2);

        node3 := xmldcmnt1.CreateNode('entry_id');
        node3.Text:=id1;
        node2.ChildNodes.Add(node3);
        node3 := xmldcmnt1.CreateNode('account_code');
        node3.Text:=kemu;
        node2.ChildNodes.Add(node3);
        node3 := xmldcmnt1.CreateNode('abstract');
        node3.Text:=branchname+FormatDateTime('MM月DD日',RzDateTimePicker1.Date)
        +'-'+FormatDateTime('MM月DD日',RzDateTimePicker2.Date)+'收入转成本';
        node2.ChildNodes.Add(node3);
        node3 := xmldcmnt1.CreateNode('currency');
        node3.Text:='人民币';
        node2.ChildNodes.Add(node3);
        if lx ='成本' then
        begin
        node3 := xmldcmnt1.CreateNode('natural_debit_currency');
        node3.Text:=amt;
        node2.ChildNodes.Add(node3);
        end else begin
        node3 := xmldcmnt1.CreateNode('natural_credit_currency');
        node3.Text:=amt;
        node2.ChildNodes.Add(node3);

        end;
        node3 := xmldcmnt1.CreateNode('auxiliary_accounting');
        node2.ChildNodes.Add(node3);
        node4 := xmldcmnt1.CreateNode('item');
        node4.Attributes['name'] := '部门档案';
        if lx ='库存' then node4.Text :='0104'
        else if lx='税收' then node4.Text :='0103'
        else node4.Text :=branchno ;
          node3.ChildNodes.Add(node4);

        xmldcmnt1.DocumentElement :=Rootnode;
        xmldcmnt1.SaveToFile('D:\凭证\'+branchname+'yypz.xml');
        xmldcmnt1.Active := False;


        finally
        xmldcmnt1.Free;
        end;

      mmo1.Lines.Add(id);
        mmo1.Lines.Add(branchname);
      mmo1.Lines.Add(id1);
          mmo1.Lines.Add(kemu);
          mmo1.Lines.Add(amt);
          mmo1.Lines.Add(branchno);
          mmo1.Lines.Add(#13#10);

      fBranch :=Branch;
      qry1.Next;
    end;

      showmessage('创建成功!');
      button9.Enabled :=False;
  end;


DelphiTop论坛申明 1、本网站名称:DelphiTop论坛  网址:www.DelphiTop.com
2、专注于互联网分享精神,专注收藏与分享。你薅网友,我就薅你。
3、本站资源,如发现链接失效,可联系QQ 16643506进行反馈,我们会第一时间更新。
最新回复 (0)
返回