Papyrus BASE Report direkt in ASCII-Text

Aus einer Datenbank möchte ich direkt eine Excel-Datei erstellen. Zur Zeit löse ich das durch einen Report, dessen Ergebnis dann als ASCII exportiert wird und in eine Excel-Vorlage importiert. Die Vorlage ist sehr einfach, enthält nur Kopfzeilen, keine Formeln (eine DATEV-Import-Datei). Insgesamt ist mir das zu umständlich. Kann ein Report nicht sofort eine ASCII-Datei ablegen. Oder gar eine nur mit Kopfzeilen versehene Excel-Datei? Das wäre super.

Ein Report erzeugt immer ein Papyrus Textfenster, das Du dann speichern kannst, wie Du möchtest.

Du kannst allerdings weitgehend beliebig definierte Exporte machen, deren ASCII-Aussehen Du passend bestimmen kannst (Trenner mit CR oder „,“ oder „;“ oder frei …).

1 „Gefällt mir“

Vorschlag: Ablage/Datei > Exportieren… und im Dialog Ausgabe-Format CSV Excel wählen.
(Vorschau einschalten, Dateinamen wählen, Felder und Datensätze auswählen.)
Exportieren. Die geschriebene Datei lässt sich direkt in eine Excel-Tabelle importieren (mit LibreOffice Spreadsheat getestet).

Du kannst im Report eine Formel mit der Funktion

Save(“dateiname.txt”)

anlegen. Der Report wird dann unter dem angegebenen Namen gespeichert und Papyrus erkennt anhand der Endung .txt, dass es eine reine Textdatei sein soll.

Den Namen der Datei kann man ggf. programmatisch aus anderen Datenfeldern zusammensetzen, wenn er nicht immer gleich sein soll.

Super, danke. Es lohnt sich, bei Updates die Änderungen genau zu lesen, kannte ich noch nicht.

Mh… krieg ich nicht hin:

Ein Datensatz (Kassentagebuch) wird zerlegt in verschiedene Buchungen. Das passiert für jeden Tag des Monats hintereinander. Ein Datensatz erzeugt also 4 bis 12 Zeilen mit den Datenfeldern, die in DATEV importiert werden sollen. (die CSV-Liste).
Diese Zerlegungsfunktion habe ich als Datensatzbereich gekennzeichnet, den unten stehenden Befehl NICHT, kommt ja erst am Ende.

save(„D:!Datev\1-Importe zu Buchungen\BuchPool\XNT zu Pool.TXT“)

Was mache ich falsch:
erste Zeile enthält die Datenfeld-Bezeichnungen, brav mit Semikolon getrennt; NICHT als Datensatzbereich gewählt.
Zweite Zeile enthält: save(pool2tres.txt)
Dritte Zeile enthält die Datenfelder, mit Semikolon getrennt, ein Datensatz pro Seite.
Dann habe ich die 2. und dritte Zeile als Datensatzbereich gekennzeichnet.
Komtm nix raus…

ah, EIN Datensatz pro Zeile… nicht Seite… wird ja eine CSV-Datei.

1 „Gefällt mir“

Immer wieder gut, wenn man die Fehler selbst findet :slight_smile:

Die Save-Funktion würde ich eher ans Ende des Report setzen, aber da sie keine Textausgaben macht, spielt es wahrscheinlich keine Rolle, an welcher Stelle sie steht.

Das ist tatsächlich egal. Lege sie auch schon mal in einem Textfeld auf die Pinnwand.

Ich verstehe das nicht.
So sieht mein Report-Formular aus (…PAP):

Datum;Buchungstext;Umsatz;SollHaben;Belegfeld1;Gegenkonto;Konto;KOST1
IF Gegenkonto = 1360 THEN Datum + ‚;‘ + Buchungstext + ‚;‘ + Umsatz + ‚;S;H!B;1360;1000;40‘ + CR
save(pool2tres.txt)

Die 1.Zeile soll die Datenfelder durchgeben
Die 2. Zeile (if…) ist der Datenbereich.
Die 3. Zeile de save-Befehl

Es werden die Datenzeilen brav geschrieben, aber dann passiert nix. Als letztes steht im Report einfach der Befehl. Ohne Bedeutung.

Der Befehl muss im Datenfeld-Dialog eingegeben werden:
Dazu ein beliebiges anderes Feld mit Platzhalter (!) im Reportformular kopieren und separat einfügen. Doppelklicken, dann öffnet sich der Dialog.
(Alternativ: Kontextmenü „Einfügen“ > „Datenfeld…“)
Dort im rechten Textfeld den vorgegebenen Text löschen und statt dessen den z.B. hier unten gezeigten eingeben (mit Anführungszeichen), er wird automatisch als Formel interpretiert. Übernehmen („Ändern“) und Formular speichern.

Platzhalter -Bildschirmfoto 2023-05-15

Ich komme einfach nicht weiter.
Die Datensätze werden ordentlich ausgegeben in ein eine PAP-Datei, das steuernde Datenfeld ist brav Grün.
Im Reportformular steht dann unter dem Datenbereich -ebenfalls in Grün- dieser Save-Befehl. Er tut aber nicht was er soll, und außerdem habe ich durch das CR hinter dem eigentlichen Datensatz-Kommando wieder viele Leerzeilen.
Das Reportformular kann ich nicht mit Grün hier ablegen. Es sieht aber so aus:
1.Zeile: Datum;Buchungstext;Umsatz;SollHaben;Belegfeld1;Gegenkonto;Konto;KOST1
2.Zeile → IF Gegenkonto=…THEN usw.
3.Zeile → Save(´Handkasse.TXT’)

Okay, jetzt habe ich es: man muss den Datensatzbereich danach aufheben und neu definieren nur für die 2.Zeile, die also echt die Daten enthält.
Der Save-Befehl sieht dann zwar aus wie ein Datensatz-Befehl, ist aber schwarz.
Vielleicht sollte man das mal irgendwie in der HILFE extra erklären.

Bei mir steht im Handbuch:

Das fand ich bisher verständlich genug.

Also so glatt läuft das irgendwie nicht:
ich habe die erste Zeile mit dem „echten“ Datensatzbereich gefüllt (Formel: IF…THEN +CR) . Die Daten der Ausgangstabelle sollen nur unter einer bestimmten Bedingung (IF…) in eine TXT geschrieben werden. Dann habe ich in einer NEUEN Zeile wieder eine Datenfeld aufgerufen und den Save-Befehl reingeschrieben. Beide Zeilen sind dann erst einmal automatisch grün/Datenbereich. Dann definiere ich nur die ERSTE Zeile als Datenbereich, die zweite wird dann von alleine schwarz.

Dieses Report-Formular erzeugt tatsächlich die kommandierte Datei, aber da in der Ausgangstabelle jede Menge Datensätze NICHT die IF-Bedingung erfüllen, entstehen dazwischen auch jede Menge Leerzeilen - doof.

Ich weiß, dass das CR in einer Formel wohl überlegt platziert oder nicht werden muss. In anderen Report-Formularen (ohne die FAKE-Datenformel „save…“) funktioniert das: unpassende Datensätze werden übersprungen OHNE leere Zeilen.

Hier aber wird es händisch: löschen der leeren Datensätze…

Deshalb meine ich, dass das in der Hilfe etwas undeutlich ist.

Jetzt habe ich es so gemacht: die 2.Zeile in die erste geholt (das CR gelöscht): alles wird grün. Dann den ECHTEN Formelbereich wieder als Datenbereich definiert. Dann klappt es.
Habe ich bestimmt vorher auch schon so bearbeitet, aber es kommt wohl auf die Reihenfolge der Handgriffe an oder was auch immer. Try and Error…

1 „Gefällt mir“

Die Situation stellt sich immer wieder zurück, bei jedem neuen Aufruf habe ich entweder die nicht erwünschte Ausgabe des Report als PB (hä?) Zeile für Zeile, oder die erwünschte TXT, aber mit jeder Menge Leerzeichen. Ist irgendwie unbrauchbar.

Dieses Ding funktioniert nicht. Entweder es kommt doch eine *.PB-Datei, heißt REPORT_POOL.PB, ist wie eine PAP. Muss ich dann als ASCII exportieren.
Oder es gibt ganz viele Leerzeilen (für jedes nicht erfüllte IF eine, obwohl das CR in jedem IF-Clause steckt.

Jetzt habe ich den SAVE-Befehl VOR die erste Textzeile ganz an den Anfang gesetzt - es klappt. Anscheinend versteht Papyrus ZWEI Datenbefehle hintereinander immer als EINEN Datensatzbereich, egal, ob man den SAVE-Befehl aus dem Bereich entfernt. Denn beim Wieder-Bearbeiten des Rep-Formulars sind wieder BEIDE Grün/Datensatzbereich.
Sollte man wissen…