[erledigt] Seriendruck-Bedingung "letzter Datensatz"

Das Textverarbeitungsprogramm

Moderator: Moderatoren

juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

[erledigt] Seriendruck-Bedingung "letzter Datensatz"

Beitrag von juetho »

Ich benutze in einem Serienbrief über Einfügen > Feldbefehl > Andere im Register "Datenbank" die Funktion "Nächster Datensatz" als Feldtyp. Als Bedingung möchte ich eintragen: "nur dann weiter, wenn das Ende der ausgewählten Datenmenge noch nicht erreicht ist". In Basic gibt es dazu die Prüfung oResult.isLast oder auch oResult.next (weil das TRUE oder FALSE liefert). Aber was kann ich im Writer als Bedingung formulieren?

Die Suchfunktion hat nur das Problem Etiketten Seriendruck Datenbank EOF geliefert, aber ohne jede Antwort.

Zur Erklärung: Es wird eine Rechnung gedruckt, die eine variable Anzahl von Teilen enthält (bis zu 5). Die Abfrage als Datenmenge liefert die Einzelteile; bei jedem dieser Datensätze stehen auch die Summen für die Gesamtrechnung. Wenn der letzte Teil gedruckt wurde, soll kein "nächster Datensatz" gelesen werden, sondern der bisherige Datensatz weiter zur Verfügung stehen. (Dann muss ich nur die doppelten Zeilen löschen, aber der Teil mit den Gesamtbeträgen wird korrekt ausgedruckt.)

Alternativer Versuch: Nach dem letzten Teil wird die Funktion "Beliebiger Datensatz" mit "Datensatznummer 1" aufgerufen. Das funktioniert nicht, vermutlich weil XResultSet in der Serienbrief-Funktion nur zum "Lesen vorwärts" verwendet wird.

Als Notlösung könnte ich mir auch so etwas vorstellen: Am Anfang der Rechnung werden die Summen in einzelne Textfelder eingetragen und als Variable notiert. Diese Felder werden als "ausgeblendet" formatiert. Die Feldinhalte werden am Ende der Rechnung über den Feldbefehl "Variable anzeigen" gedruckt. Da es sich aber insgesamt um sieben solcher Angaben handelt, möchte ich das vermeiden.

Hat jemand einen besseren Vorschlag? Danke! Jürgen
Zuletzt geändert von juetho am Di, 29.01.2013 16:38, insgesamt 1-mal geändert.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Rocko
*******
Beiträge: 1164
Registriert: Do, 11.10.2012 13:19

Re: Seriendruck-Bedingung "letzter Datensatz"

Beitrag von Rocko »

juetho hat geschrieben:Ich benutze in einem Serienbrief über Einfügen > Feldbefehl > Andere im Register "Datenbank" die Funktion "Nächster Datensatz" als Feldtyp. Als Bedingung möchte ich eintragen: "nur dann weiter, wenn das Ende der ausgewählten Datenmenge noch nicht erreicht ist".
Schreib diesen Befehl "Nächster Datensatz" in einen leeren Absatz und gib deine Bedingungen an einen Feldbefehl "Versteckter Absatz" weiter. Vielleicht funktioniert das.
Hast du schon mal einen Blick in die Writer-FAQ und in die Calc-FAQ des Forums geworfen?
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Eddy
********
Beiträge: 2758
Registriert: So, 02.10.2005 10:14

Re: Seriendruck-Bedingung "letzter Datensatz"

Beitrag von Eddy »

Hallo juetho,
juetho hat geschrieben: "nur dann weiter, wenn das Ende der ausgewählten Datenmenge noch nicht erreicht ist"
das ist das normale Verhalten. Wenn kein Datensatz mehr da ist, wird nichts mehr eingefügt. Was passiert bei Dir? Auch im Blick mit der Aussage:
juetho hat geschrieben:(Dann muss ich nur die doppelten Zeilen löschen, aber der Teil mit den Gesamtbeträgen wird korrekt ausgedruckt.)
Ein Beispieldokument könnte uns helfen. Möglicherweise hilft Dir der Befehl "Daten in Felder" weiter.

Mit funktionalen Grüßen

Eddy
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Seriendruck-Bedingung "letzter Datensatz"

Beitrag von juetho »

Danke für die Hinweise. Sie passen zwar alle nicht, haben mich aber auf einen sinnvollen und ziemlich einfachen Umweg gebracht.

@Rocko
Mein Ausgangsproblem war ja, dass ich nicht weiß, wie ich im Writer die Bedingung "not isLast" formulieren kann. Deshalb wäre zwar ein leerer Absatz eine Möglichkeit, bringt mich aber nicht wirklich weiter.

@Eddy
1. Das ist anscheinend nicht ganz das normale Verhalten. Verglichen mit der API-Referenz wirkt sich "nächster Datensatz" vom "letzten Datensatz" aus genauso aus wie "oResult.afterLast" und landet auf einer leeren Zeile. (In einem Tabellenkontrollfeld ist das die Zeile für einen neuen Datensatz.) Jedenfalls sind nach dem Feldbefehl "nächster Datensatz" alle Feldinhalte leer bzw. 0,00 €.

2. Das Beispieldokument wollte ich (natürlich) vermeiden. Ich hatte gehofft, dass es eine einfache Formulierung im Writer für die Bedingung "oResult.isLast" gibt. Das scheint nicht der Fall zu sein.

Deine Bemerkung "Daten in Felder" hat mich zu einer einfachen Ersatzlösung gebracht.
  • Ich habe in die Abfrage eine zusätzliche boolean-Spalte "lastPart" mit CASE eingefügt: Der Wert in dieser Spalte ist normalerweise 0; beim letzten Teil einer Rechnung wird der Wert 1 gesetzt.
  • Im Writer-Dokument wird der Feldbefehl "nächster Datensatz" mit der Bedingung "not [Datenbankname.Tabellenname.lastPart]" verknüpft.
Bisher wird der letzte Teil noch mehrfach ausgegeben und muss nach dem "Drucken in Datei" manuell gelöscht werden, aber das ist kein Aufwand. Mit der Ersatzlösung werde ich das noch unterdrücken können.

Danke für den Denkanstoß! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Eddy
********
Beiträge: 2758
Registriert: So, 02.10.2005 10:14

Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"

Beitrag von Eddy »

Hallo juetho,

ich hatte es vorher schon vermutet, Dein letzter Beitrag gab mir Gewissheit. Deine Frage ist hier nicht im idealen Unterforum. Sie wäre bei OOo Base / SQL oder OOo Basic und Java besser aufgehoben.

Mit gewissen Grüßen

Eddy
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"

Beitrag von juetho »

So kann es gehen. Mir ging es eigentlich um eine Bedingung in der Serienbrief-Funktion von Writer. Dass die für mich einfachste Lösung über SQL ging (also nach "Base" passt), konnte ich noch nicht wissen. Eine Basic-Lösung wollte ich auf jeden Fall vermeiden; die von mir genannten Entsprechungen über Makros sollten nur verdeutlichen, was ich über die Feldbefehle eingeben wollte.

Mit erledigten Grüßen
Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Eddy
********
Beiträge: 2758
Registriert: So, 02.10.2005 10:14

Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"

Beitrag von Eddy »

Hallo juetho,

wenn Du die für Dich passende Lösung gefunden hast, ist das gut. Verstanden habe ich nicht alles, muss auch nicht sein.
Nach dem, was ich verstanden habe, hätte ich einen Brief mit Datenbankfeldern erstellt und an passender Stelle "nächster Datensatz" eingefügt.
Beim Füllen der Datensätze hätte ich mit F4 die Datenquellen eingeblendet und die passenden Datensätze ausgewählt. Danach die Schaltfläche "Daten in Felder" angeklickt und fertig.

Mit passenden Grüßen

Eddy
Antworten