Rechnung nach Druck ablegen als PDF

Im Script „AfterPrint“ eines Formulars zuordnen:

 

{
Parameter
- function GetUDFpara(<name>): variant;
}

program pdf;
const
MB_ICONQUESTION = $00000020;
MB_OK = $00000000;
MB_OKCANCEL = $00000001;
MB_YESNOCANCEL = $00000003;

MB_DEFBUTTON1 = $00000000;
MB_DEFBUTTON2 = $00000100;
MB_DEFBUTTON3 = $00000200;

IDYES = 6;
IDNO = 7;

var
i,s,f,n,d,art:integer;
a,cRes,cVerzeichnis,cDatei,cAusgabeDatei,aufnr:string;

function IsIn(value:integer; menge: array of integer):boolean;
var i:integer;
begin
result := False;
for i := 0 to Length(menge)-1 do
begin
if menge[i] = value then
begin
result := True;
break;
end;
end;

end;

begin
// Ausgabeverzeichnis mit slash am Ende!
cVerzeichnis := IncludeTrailingSlash(GetVarToStr(GetUDFpara('ExpVerzeichnis')));

{f = formcode
0 - Angebot
1 - Auftrag
2 - Lieferschein
3 - Rechnung
4 - Gutschrift
5 - Sonstiges

11 - Mahnung

12 - Bestellanfrage
13 - Bestellung
14 - Wareneingang
15 - Bestellretoure
16 - Bestell Sonstiges
}
{d = device
0 - Nadeldrucker
1 - Screen
2 - E-Mail
3 - Datei
}

a := GetVarToStr(GetUDFpara('kopfguid'));
n := GetVarToInt(GetUDFpara('formular_id'));
s := GetVarToInt(GetUDFpara('sprach_id'));
d := GetVarToInt(GetUDFpara('device'));
f := GetVarToInt(GetUDFpara('formcode'));

if EditorAktiv = True then
begin
cVerzeichnis := 'c:\temp\';
end
else
begin
if trim(cVerzeichnis) = '' then exit;
end;

// Editor debug mode
if EditorAktiv=True then
begin
a := '{4D428936-BCB5-4B5B-9581-428177C7D9B8}';
f := 3;
n := 277;
end;

// device
if IsIn(d, [3]) then exit;
// formcode
if not IsIn(f, [0,1,2,3,4,5,12,13,1,4,15,16]) then exit;

if trim(a) = '' then
begin
ShowMeldung('Kein Vorgang angegeben!');
exit;
end;

if IsIn(f, [0,1,2,3,4,5]) then
begin
oQuery.SQL.Text := 'SELECT aufnr,art FROM kopf WHERE kopfguid='+quotedstring(a);
end
else if IsIn(f, [12,13,1,4,15,16]) then
begin
oQuery.SQL.Text := 'SELECT aufnr,art FROM bkopf WHERE kopfguid='+quotedstring(a);
end
else exit;

oQuery.open;
if oQuery.RecordCount = 0 then
begin
ShowMeldung('Kein Vorgeng vorhanden.');
exit;
end;

aufnr := oQuery.Fields.Fields[0].AsString;
art := oQuery.Fields.Fields[1].AsInteger;

oQuery.Close;

case art of
0: cDatei := 'Angebot';
1: cDatei := 'Auftrag';
2: cDatei := 'Lieferschein';
3: cDatei := 'Rechnung';
4: cDatei := 'Gutschrift';
5: cDatei := 'Sonstiges';
else
cDatei := 'Vorgang';
end;

cAusgabeDatei := cDatei+'_'+aufnr+'.pdf';

// Verzeichnis vorhanden?
if not DirectoryExists(cVerzeichnis) then
begin
ShowMeldung('Verzeichnis existiert nicht, wird angelegt: '+cVerzeichnis);
// create directory
if not ForceDirectories(cVerzeichnis) then
begin
Showmeldung('Ausgabeverzeichnis: '+cVerzeichnis +' konnte nicht angelegt werden.');
exit;
end;
end;

// Datei vorhanden?
i := 0;
while FileExists(cVerzeichnis + cAusgabeDatei) do
begin
i := i+1;
cAusgabeDatei := cDatei+'_'+aufnr+'('+inttostr(i)+')'+'.pdf';
if i>100 then
begin
ShowMeldung('Es existieren mehr als 100 PDF Dokumente von diesem Vorgang...'+#13+#10+ 'Kontaktieren Sie den Support!');
exit;
end;
end;

if (Application.MessageBox( 'Möchten Sie den Ausdruck als PDF Datei ablegen? Formcode:'+ inttostr(f)+
#13+#10+#13+#10'Verzeichnis:'+cVerzeichnis+cAusgabeDatei, 'PDF Ausgabe' , MB_ICONQUESTION or MB_YESNOCANCEL or MB_DEFBUTTON2) = idYes) then
begin

// function DruckPDF(nFormID:integer;cGuid,cPath,cDatei:string):string;
cRes := DruckPdf(n, a, cVerzeichnis, cAusgabeDatei);

end;

end.