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
[erledigt] Seriendruck-Bedingung "letzter Datensatz"
Moderator: Moderatoren
[erledigt] Seriendruck-Bedingung "letzter Datensatz"
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
Re: Seriendruck-Bedingung "letzter Datensatz"
Schreib diesen Befehl "Nächster Datensatz" in einen leeren Absatz und gib deine Bedingungen an einen Feldbefehl "Versteckter Absatz" weiter. Vielleicht funktioniert das.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".
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/
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Re: Seriendruck-Bedingung "letzter Datensatz"
Hallo juetho,
Mit funktionalen Grüßen
Eddy
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: "nur dann weiter, wenn das Ende der ausgewählten Datenmenge noch nicht erreicht ist"
Ein Beispieldokument könnte uns helfen. Möglicherweise hilft Dir der Befehl "Daten in Felder" weiter.juetho hat geschrieben:(Dann muss ich nur die doppelten Zeilen löschen, aber der Teil mit den Gesamtbeträgen wird korrekt ausgedruckt.)
Mit funktionalen Grüßen
Eddy
Re: Seriendruck-Bedingung "letzter Datensatz"
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.
Danke für den Denkanstoß! Jürgen
@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.
Danke für den Denkanstoß! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"
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
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
Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"
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
Mit erledigten Grüßen
Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: [erledigt] Seriendruck-Bedingung "letzter Datensatz"
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
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