Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rechnung per PDF aus Oracle (https://www.delphipraxis.net/193127-rechnung-per-pdf-aus-oracle.html)

H.Bothur 22. Jun 2017 16:11

Datenbank: Oracle • Version: 11 • Zugriff über: ??

Rechnung per PDF aus Oracle
 
Moin,

ich habe hier etwas wo ich noch nicht einmal einen Ansatz habe wie man das machen kann :-(

Ich muss aus einer Warenwirtschaft Rechnungskopien als PDF ziehen. Dazu müsste ich ein Programm aufrufen, die entsprechende Rechnungsnummer als Parameter übergeben und dann mir dieses PDF generieren und auf Platte ablegen. Als SQL-Script habe ich das ja - aber wie mache ich das in Delphi ?

Delphi-Quellcode:
declare
     
              
 cursor c_rg is
  select r.kunden_id,
         r.rechnung_nr,
         r.rg_nr2,
         r.filiale,
         v.rg_anschrift
    from rechnungs_kopf r, v_rechnungen_kdrg v
   where r.kunden_id = &1
     and r.rechnung_nr = &2   
     and r.kunden_id = v.kunden_id
     and r.rechnung_nr = v.rechnung_nr;
     
         
  gonogo     varchar2(5) default 'go';
  rg         c_rg%rowtype;
  cnt         number;
  i          number default 0;
  j          number default 0;
  out_pfad   varchar2(50);
  pdf_datei  varchar2(500);
  ex_seq     number;
  nex_seq    number;
  rg_report  varchar2(25);
 
 
  out_ok     boolean;
 
 
  subtype t_vcmax is varchar2(32767);
  befehl t_vcmax;
  h_clob clob;
  i_datei varchar2(100);
  ret_msg varchar2(4000);
 
 

begin


  open c_rg;
  fetch c_rg into rg;
   if (c_rg%found) then
    rg_report := get_report(rg.kunden_id, 'ERGK', rg.rg_anschrift);
   
    -- Pfadname fest eintrgen. Muss ein physikalisches Laufwerk auf dem Server sein.  
    out_pfad := 'd:\oout\'; --' --mit abschliessenden \
   
    pdf_datei := out_pfad||get_pdf_dateiname(rg.kunden_id, 'RGPDFEXPORT', rg.rechnung_nr);
     
    kl_report.write_rg2pdf(rg_report,
                           pdf_datei,
                           rg.kunden_id,
                           rg.rechnung_nr,
                           nvl(rg.filiale,1));
     
   end if;
  close c_rg;

end;
/

exit
Vielen Dank
Hans

nahpets 22. Jun 2017 17:03

AW: Rechnung per PDF aus Oracle
 
Du hast doch die Datenbankroutine, rufe die aus deinem Delphiprogramm auf. Wo die PDF-Datei liegt, ergibt sich aus dem Quelltext der Datenbankroutine, die Info ist also "reproduzierbar", sprich: Du kannst im Delphiprogramm die PDF-Datei laden und anzeigen, oder sie, wie auch immer, weiterverarbeiten.

'ne eigene Logik würd' ich nicht bauen. Sind Änderungen erforderlich, werden die nur an der Datenbankroutine vorgenommen. Nur, falls sich der Aufbau und Ablageort der PDF-Dateien ändern sollte, müsstes Du im Delphiprogramm was ändern.

Ideal wäre natürlich, wenn die Datenbankroutine den Dateinamen entweder als Rückgabewert oder als Parameter zurückgeben könnte.

Als Rückgabewert hätte den "Charme", dass Du im Delphiprogramm mit sowas wie
SQL-Code:
select NameDerDatenbankroutine(Rechnungsnummer) as PDFDateiname from Dual
arbeiten könntest, da reicht dann eine Query mit 'nem simplen Select aus. Änderungen an der Datenbankroutine wären für Dein Programm transparent: Sprich: solange sich nichts am Parameter für die Rechnungsnummer und / oder am Rückgabewert ändert, kann datenbankseitig beliebig "rumhantiert werden".

Aber auch eine "Massenproduktion" von PDF-Dateien müsste möglich sein:
SQL-Code:
select NameDerDatenbankroutine(Rechnungsnummer) as PDFDateiname from TabelleDieDieRechnungsnummerEnthaelt
where Rechnungsnummer between 1 and 10 or IrgendeineSinnvolleBedingung
In der Ergbenismenge hättest Du dann letztlich alle Dateinamen der PDF-Dateien und könntest sie in 'ner Schleife weiterverarbeiten.

jobo 22. Jun 2017 17:10

AW: Rechnung per PDF aus Oracle
 
Also so wie das aussieht, kannst Du das einfach als Query "abfeuern".
Analog zu einer normalen Abfrage, Parameter rein, befüllen und dann Execute statt Open.

Das "Exit" und der Slash davor und vlt auch das Semicolon nicht übernehmen.
Kannst Du einfach mal ausprobieren mit einer abgespeckten Variante die nur ein DBMS_OUTPUT.putline macht, oder eine Testtabelle updated (als Kontrolle)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz