Kundenstatistik Top/Down

Script Beispiel für Kundenstatistik Top/Down.
Ausgabe nach Excel.

program statistik_ausgabe;
var
    oDialog:TUDFDialog;
    XlsApp, XlsWorkBook, XlsWorkSheet: Variant;
    von,bis:TDateTime;
    nReihe,nIst,nGesamt:integer;
    nJahr,i :integer;


  function GetYear(dDate:TDateTime):integer;
  var Year, Month, Day: Word;
  begin
    DecodeDate(dDate, Year, Month, Day);
    result := year;
  end;


begin

  oDialog := TUdfDialog.Create;
  try
    oDialog.AddField('Jahr','Jahr',ftInteger,True,True,'',0);

    nJahr := GetYear(date);
    oDialog.AddAuswahl('Jahr', inttostr(nJahr), nJahr,True);
    oDialog.SetFieldValue('Jahr', nJahr);
     
    for i := 1 to 5 do
    begin
     nJahr := nJahr-1;
     oDialog.AddAuswahl('Jahr', inttostr(nJahr), nJahr,True);
    end;


    if oDialog.Execute then
    begin

      XlsApp := CreateOleObject('Excel.Application');
      XlsApp.Workbooks.Add;
      XlsApp.Visible := False;
      XlsWorkbook  := XlsApp.Workbooks[1];
      XlsWorksheet := Xlsworkbook.Worksheets[1];

      nJahr := oDialog.GetFieldValue('Jahr');
      von := EncodeDate(nJahr,1,1); 
      bis := EncodeDate(nJahr,12,31); 

      XlsWorksheet.Cells[1,'A'].Value := 'Auswertung '+inttostr(nJahr);

      XlsWorksheet.Cells[2,'A'].Value := 'Knd.Nr.';
      XlsWorksheet.Cells[2,'B'].Value := 'Match';
      XlsWorksheet.Cells[2,'C'].Value := 'Netto';
      XlsWorksheet.Cells[2,'D'].Value := 'Brutto';

      XlsApp.Columns('B').ColumnWidth := 40;

      XlsApp.Range('A2:D2').Select;
      XlsApp.Selection.Font.Bold := true;
      XlsApp.Selection.Interior.ColorIndex := 1;
      XlsApp.Selection.Interior.Pattern := 1; //xlSolid
      XlsApp.Selection.Font.ColorIndex := 2;

      XlsApp.Columns('C').select;
      XlsApp.Selection.NumberFormat := '0,00';
      XlsApp.Columns('D').select;
      XlsApp.Selection.NumberFormat := '0,00';

      XlsApp.Columns('A').select;
      XlsApp.Selection.NumberFormat := '@';
      XlsApp.Columns('B').select;
      XlsApp.Selection.NumberFormat := '@';

      // auf Anfang positionieren
      XlsWorksheet.Cells[1,'A'].Select;
    
      nReihe := 2;

      oQuery.SQL.Text := 'SELECT SUM(IF(k.art=3,k.VK_BRUTTO,0-k.VK_BRUTTO)) AS VK_BRUTTO'+
			',SUM(IF(k.art=3,k.VK_Netto,0-k.VK_Netto)) AS VK_Netto,'+
                    'k.svnr,k.svadrid,k.svmatch'+
                    ' FROM kopf k '+
                    ' WHERE (k.art IN (3,4))'+
                    ' AND (k.datum BETWEEN '+DateString(von)+' AND '+DateString(bis)+')'+
                    ' GROUP BY k.svadrid '+
                    ' ORDER BY "VK_Netto" DESC, k.svnr';

      oQuery.Open;
      nGesamt := oQuery.RecordCount;
      nIst := 0;
      while not oQuery.eof do
      begin
        nIst := nIst +1;
        ShowProgress(nIst,nGesamt,'Lese Daten..');

        nReihe := nReihe + 1;

        // Excel schreiben
        XlsWorksheet.Cells[nReihe,'A'].Value := oQuery.FieldByname('svnr').AsString;
        XlsWorksheet.Cells[nReihe,'B'].Value := oQuery.FieldByname('svmatch').AsString;
        XlsWorksheet.Cells[nReihe,'C'].Value := oQuery.FieldByname('vk_netto').AsFloat;
        XlsWorksheet.Cells[nReihe,'D'].Value := oQuery.FieldByname('vk_brutto').AsFloat;

        application.processmessages;
        oQuery.Next;
      end;
    end;

    XlsApp.Visible := True;

  finally
    oDialog.Free;

  end;


end.