UDF Skripte
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.