Montag, 3. Februar 2014

SEPA-Lauf: Druck Kontrollzettel von FR2 nach FR4 umstellen

Neue Folge aus der beliebten Serie

"AvERP-Designer für Fortgeschrittene".

Im Zusammenhang der allgegenwärtigen SEPA-Umstellung, bin ich auf folgende Aufgabe gestossen:

SEPA-Datei erzeugen

Umsetzung "DTAUS-Lauf erstellen" nach "SEPA-Lauf erstellen"
AvERP-Anwender, die aktuell Ihre Eingangsrechnungen per DTAUS-Lauf an ihr Zahlungsprogramm übergeben müssen im Rahmen der SEPA-Umstellung auch dieses Verfahren ändern.
AvERP bietet in der Version 2014 ein Utiliity „SEPA-Export“ aufzurufen aus dem Zahlungsbuch.
Bisherige Nutzer des DTAUS-Laufs vermissen die Funktionalität
  • Auswahl der Lieferanten-Rechnungen, die zur Zahlung anstehen
  • Summe Zahlungenbeträge, zur Kontrolle von Limits ermitteln
  • Druck Kontrollblatt zur Genehmigung der Zahlung durch den dafür Verantwortlichen
Der DTAUS-Lauf wird als Druck aus der Tabellenübersicht aufgerufen. Mit Mehrfach-Selektion werden die an den DTAUS-Lauf zu übergebenden Zahlungen markiert und später auf dem Kontrollzettel gedruckt.

Genau diese Funktionalität sollte auch für den SEPA LAUF zur Verfügung stehen.

Der Kontrollzettel DTAUS ist im „alten“ FastReport2 aufgebaut.
Druck von solchen Reports aus der Tabellenübersicht wird von der AvERP-XE-Version nicht mehr unterstützt.
Deswegen  die kleine Zusatzaufgabe den Druck Kontrollzettel mit FastReport4 – dem Neuen AvERP-Designer aufbauen.
 
Hier werden die Eingangsrechnungen im Einkauf betrachtet. Aufruf erfolgt aus dem Zahlungsbuch. 

Datensätze für SEPA-Export in der Tabellenübersicht markieren und Drucken "SEPA-Export" auswählen.
Im Vorschalt-Dialog zum Drucken, wird der Dateipfad für die zu erzeugende XML-Datei erstellt.
Die aktuelle SEPA-Lauf-Nr, bestimmt.
Falle mehrere Firmenkonten mit IBAN und BIC versehen sind, das Firmenkonto auswählen.
Und die Summe der markierten Zahlunsgbeträge ausgegeben.





Auf Druck "OK" wird im die SEPA-XML-Datei auf das Zielverzeichnis geschrieben und eine Kontroll-Liste gedruckt.



Übernommen aus dem DTAUS-Lauf, nur wenn tatsächlich auf einen Drucker ausgegeben erfolgt die
Frage: Können die markierten Daten als gezahlt markiert werden ?

Nach diesem Vorlauf einige Kleinigkeiten zum AvERP-Designer, die ich hier festhalte, weil ich sie mir sonst immer wieder mühseelig erarbeiten muß.

Beispiel manuelles Umsetzen FR2 nach FR4-Report:

Quelle Zahlungsausgang - DTAUS erstellen FRDBZAHL_DTAUS
Ziel: Zahlausgang SEPA-Datei erstellen mit nahezu ähnlicher Logik.
Deswegen die Maske-Logik in OnFormShow, AfterPrint erhalten, aber Report auf Fast-Report4 umstellen.
Folgender Trick funktioniert um den FR4-Designer zu aktivieren:

FR4 aktivieren über
  • Maske kopieren
  • als FRDBZAHL_SEPA umbebenennen
  • Editieren:
    FRDBZAHL_SEPA die Eigenschaft
    bNewFastRep = True geben.
  • Geänderte Ressource einlesen.
So sollte dann FRDBZAHL.res anfangen:
inherited FRDBZAHL_SEPA: TDBasisForm // DTAUS=>SEPA umbenennen
Left = 0
Top = 400
Width = 471
Height = 280
Caption = 'FRDBZAHL_SEPA' // DTAUS=>SEPA umbenennen
OldCreateOrder = True
bFormShow = True
bNewFastRep = True // Zeile im Editor hinzufügen


Nächster Schritt mit AvERP-Designer ObjectInspector
aus DTA-Dateiname mach SEPA-Nummer:

Umbennen im DTA nach SEPA: im  DM1-Modus anklicken,
Direkt Caption ändern.


Vorlage Seite 2 aus den DTAUS-Lauf:

 
Umsetzen zu 

Stattwie in FR2 Datenquelle fr_rep1 und Feldaliase q_rep1 zu exportieren

reicht es Dataset frx_rep01 auszuwählen.

Korrespondierende Bänder:

Seite 1 Begleitzettel entfällt
Seitenkopf PageHeader
Hauptdaten Masterdaten
(DataSet frx_rep01
Anzahl Datensätze 0)
Hauptfuß Footer

 
Variablen DTAUSNR, FIRMA_BANKNAME und FIRMA_KTO exportieren




Variablen-Gruppe hinzufügen
Hier sReport benannt – Benennung kann beliebig sein.

 












Export Report Variablen im ButtonOkOnClick-Script:
festen Namen sReportVariablen verwenden.
Zussammenhängenden in „Doppelte Hoch-Komma“ geklammerten String
im Stil VARIABLE=<Wert>, Komma als Trenner in Variablen ,<Wert> Liste

ReportVariablen := '"FIRMA_KTO=' + sFIRMA_KTO + '",' +
'"FIRMA_BANKNAME=' + sFIRMA_BANKNAME + '",' +
'"DTAUSNR=' + LB_DTAUSNR.Caption + '"';

Hier werden die Variablen FIRMAT_KTO, FIRMA_BAMKNAME, DTAUSNR on den Report übergebenn.

Verwendung im FR4-Designer:

MemoFeld mit Inhalt [DTAUSNR] (in eckigen [] Klammern druckt den Inhalt der Reportvariablen DTAUSNR.


meBetrag Zusammengesetztes Memofeld im Code zum OnBeforePrint-Ereignis MeBetragOnBeforePrint definieren.

procedure meBetragOnBeforePrint(Sender: TfrxComponent);
var s1,s2 : String;
begin
  meBetrag.memo.Clear;
  s2 := '';
  s1 := FormatFloat('###,###,##0.00',<frx_rep01."ENDBETRAG">);
  if (trim(<frx_rep01."ZDATUM">) <> '') then
   s2 := FormatDateTime('dd.mm.yyyy',<frx_rep01."ZDATUM">);
  meBetrag.memo.add(s1);
  meBetrag.memo.add(' ');
  meBetrag.memo.add(s2);
end;

begin {hier der gesamte Code-zum Report FRDBZAHL_SEPA
       mehr braucht es Nicht!}
end.

Zubeachten in FR4
Variablen vereinbaren !
Auf Objekt qualifiziert zugreifen
mit z.B. meBetrag.memo
Alternativ Block with <Objekt>, Engine do
with meBetrag, Engine do
begin
memo.Clear;

memo.add(s1);
'
end;


statt eckigen [] spitze <>Klammern verwenden.
Statt [q_rep1.“ENDBETRAG“] <frx_rep01."ENDBETRAG"> verwenden.

Str([q_rep1.“ZDATUM“) <> '' führt zu Syntax-Fehler

(trim(<frx_rep01."ZDATUM">) <> '' hat die gleiche Wirkung.

Hier zum Vergleich das Script in FR2-Syntax: