Abfrage eines leeren Feldes...
Hallo zusammen,
ob mein Betreff meine Frage korrekt zusammenfasst, weiss ich leider nicht, aber dies ist mein Problem:
ich habe einen Code, mit dem ein Adressfeld erstellt wird
---
Firmenname + "
" + Adresszusatz + "
" + 'Straße und Hausnummer' + "
" + 'Postleitzahl und Ort'
----
So sieht er bisher aus. Das Feld "Adresszusatz" ist ein Textfeld und zumeist leer. Immer wenn es leer ist, sollte es hier im Code nicht berücksichtigt werden. Das geht über eine Bedingung, so weit weiss ich wohl. Aber wie formuliere ich: wenn Adresszusatz ist leer, dann entfällt diese Zeile?
Es wäre schön, wenn mir dabei jemand helfen könnte. Herzlichen Dank vorab!
Heino
27 Antworten
-
probier es doch mal so:
---
if Adresszusatz then
Firmenname + "
" + Adresszusatz + "
" + 'Straße und Hausnummer' + "
" + 'Postleitzahl und Ort'
else
Firmenname + "
" + 'Straße und Hausnummer' + "
" + 'Postleitzahl und Ort'
end
---- -
Oder so (von Vorteil, wenn man mehrere evtl. leere Felder hat):
Firmenname + "
" + if Adresszusatz then Adresszusatz + "
" end + 'Straße und Hausnummer' + "
" + 'Postleitzahl und Ort'
-
Auf jeden Fall die elegantere Lösung, Copytexter !!!
Beide Varianten zielen ja darauf ab, eine etwaige Leerzeile zwischen Firma und Straßenangabe zu vermeiden.
Persönlich würde ich noch eine feste Leerzeile zwischen Straßenangabe und Wohnortzeile einfügen (das ist aber je nach Bedarf und Geschmack).
-
Na ja, wenn es wirklich nur um eine Zeile geht, dann ist deine Version mit zwei Blöcken völlig okay, weil einfach und übersichtlich. Oft braucht man für eine korrekte, vollständige Adressierung neben dem Namen und einem möglichen Namenszusatz aber auch noch eine dritte optionale Zeile für die Angabe der Abteilung bzw. des Ansprechpartners. Und dann ist die Variante mit den integrierten if-Abfragen natürlich effizienter. Deshalb die Ergänzung.
<klugscheißmodus>Gegen die von dir persönlich bevorzugte Leerzeile zwischen Straße und Wohnort spricht übrigens die DIN 5008, nach der im Hinblick auf die "Automationsfähigkeit" jegliche Leerzeilen im Anschriftenblock zu vermeiden sind. Also, von der Anrede bis zur Länderangabe alles ohne Leerzeilen schön untereinander. ;) </klugscheißmodus>
-
Danke für den Hinweis auf die DIN 5008 (bin noch von der alten Schule, daher hatte ich die Änderung nicht mitbekommen)! Asche auf mein Haupt ;-)
Verstehe ich das richtig, dass, wenn es noch um eine dritte/vierte/fünfte Adresszeile gehen könnte, Deine Lösung voraus setzt, dass das Feld "Adresszusatz" und deren Info evtl. mehrzeilig ist?Wie sähe denn die elegante Formel für ein Anschriftenfeld nach DIN 5008 aus, wenn man in der Adressdatenbank noch die Felder "Titel", "Gebäude" und "Abteilung" hat, jene aber nicht zwingend Inhalte haben müssen?
-
"Alte Schule" ist keine Entschuldigung! Als ich kaufmännischen Schriftverkehr unterrichtet habe, war an automatisierte Briefverarbeitung auch noch nicht zu denken (die Änderung der DIN erfolgte 2005). Aber man versucht ja, am Ball zu bleiben. ;)
Nein, nicht mehrzeilig. Die einzelnen Angaben müssen sich ggf. je nach Kontext dynamisch zusammensetzen lassen (Bsp.: Angebot geht an Abteilung "Einkauf", Rechnung an "Buchhaltung"). Aber wenn man mehrere optionale Zeilen hätte, dann würde das if-Konstrukt mit festen Blöcken ja sehr komplex, weil man jede Kombination berücksichtigen muss. Mit den integrierten if-Abfragen kommt jeweils nur eine Zeile dazu.
Wobei ich es tatsächlich so mache, dass ich die Anschrift zur besseren Kontrolle schon im Datenformular komplett in einem mehrzeiligen Funktionsfeld zusammensetzen lasse und im Druckformular dann nur noch dieses eine Feld übernehme und vertikal zentriere. Aber das ändert natürlich nichts an der technischen Herangehensweise des Zusammensetzens.
-
Genau darum geht es mir, die Anschrift bereits im Datenformular in einem mehrzeiligen Berechnungsfeld zusammenzusetzen.
Wie sähe die Formel hierzu denn nun mit den integrierten if-Abfragen aus? -
Na, genau so wie oben in meinem ersten Posting geschrieben. Jede Zeile, die leer sein könnte, wird mit "if" abgefragt. Hier noch ein (fiktives) Beispiel mit mehreren optionalen Feldern und etwas Beiwerk:
Und hier der Code dazu (Funktionsfeld "Anschrift"):
Firma + "
" + if Zusatz then Zusatz + "
" end + if Bezug then "- " + Bezug + " -" + "
" end + 'Straße' + " " + HausNr + " " + Zustellvermerk + "
" + PLZ + " " + Ort + "
" + if Land and Land > 1 then upper(text(Land)) end
-
Hallo Copytexter,
sorry, dass ich mich hier kurz 'anhänge'. Ich habe diesen Code angewandt (finde ich total gut!!!) und habe noch eine Frage hierzu. Besteht die Möglichkeit, dass zB nur Firma, Zusatz, PLZ und Ort fett gedruckt sind?
Vielen Dank und Gruß Kruna
-
Hallo Kruna, spontan würde ich sagen: Nein. Nach kurzer Bedenkpause: Vielleicht könnte man sich was per HTML zusammenbasteln. Oder aus mehreren einzelnen Feldern mit automatischer Höhe. Ungünstig wäre dabei allerdings, dass ausgerechnet die Straße nicht fett sein soll. Warum dann nicht gleich den ganzen Adressblock? Das wäre zumindest auch wieder post-konform (einheitliche Schrift, keine Hervorhebungen).
-
Hallo Copytexter,
wie würde das mit HMTL funktionieren? Ich habe mit <b>...</b> versucht, aber es wird nichts fett angezeigt. Ich hatte es auch vorher mit mehreren Feldern, somit aich gewnschte Zeilen fettgedruckt, aber bei dieser Vatiante ist der Vorteil, dass die Zeilen 'automatisch' verschoben werden, wenn es einen Adresszusatz oder Bezug gibt, das finde ich richtig gut, da würde ich eher auf das fettgedructe verzichten, falls es gar nicht geht.
Gruß Kruna
-
Hm, der erste Gedanke ist oft der richtige. Wo ich jetzt noch mal darüber nachdenke, meine ich mich zu erinnern, dass sich HTML gar nicht drucken lässt. Es wird im Drucklayouteditor zwar angezeigt, von der PDF-Enginge aber nicht umgesetzt. War also 'ne blöde Idee von mir. Da wird sich wohl erst mit dem neuen Drucklayouteditor was tun.
Das mit den Einzelfeldern müsste aber gehen. Ein Berechnungsfeld mit automatischer Höhe für den Namen plus Zusatz, sofern vorhanden, mit folgender Funktion:
Name + if Zusatz then "
" + Zusatz end
darunter dann Straße und darunter PLZ plus Ort. Bei der Einstellung "Automatische Höhe" dürfte da keine Leerzeile entstehen. Und jedes dieser Felder lässt sich als Ganzes fett, kursiv oder unterstrichen formatieren, so dass man den von dir gewünschten Effekt erzielen könnte. Ob er bei einer Adresse sinnvoll ist, musst du selbst entscheiden.
-
Autsch. "Engine" heißt das Ding.
-
HAllo Copytexter,
ich habe es gerade ausprobiert, aber mit Einzelfeldern und automatischer Höhe, verschiebt sich "alles" bzw. verschieben sich andere Zeilen darunter, je nachdem, ob zB Zusatz angezeigt wird oder nicht. Das gibt dann nur ein 'Gefriemel', zumindest bei mir. Ich lasse es so und verzichte lieber auf das Fettgedruckte. Ausserdem gebe ich Dir recht, postkonform sollte es auch sein.
Ich hätte da noch eine Frage, wie frage ich denn Anrede, Vornamen und Namen ab?
Mein Code lautet nun:
Firma + "
" + if Zusatz then
Zusatz + "
"
end + if Bezug then
"- " + Bezug + " -" + "
"
end + if 'Anrede Briefkopf' = 1 or 'Anrede Briefkopf' = 2 then
'Anrede Briefkopf' + " "
end + Vorname + " " + Nachname + "
" + 'Straße' + "
" + PLZ + " " + OrtIch habe es mit if...then versucht, aber dauernd wird irgendein Fehler angemeckert, den ich nicht gelöst bekomme.
Vieln Dank und Gruß
Kruna
-
Hallo zusammen....
Zum Thema Fettdruck usw.:
Ich habe zB. für die Teilnehmer einer Messe im Drucklayout einfach zwei oder gar drei Formelfelder übereinander gelegt, welche mir aber verschiedene Felder ausgeben. Diese einzelnen Formelfelder kann man dann zb farbig oder fett anlegen. Man muss allerdings darauf achten, dass die Zeilenabstände angepasst werden müssen, damit es nachher im erzeugten/gedruckten PDF passt. Das ist leider die Krux an der Sache. Die Struktur muss natürlich in beiden Feldern gleich bleiben: zB
Feld 1:
Vorname + " " + Nachname + "
" + PLZ + " " + Ort
Feld 2:
"
" + Straße
Das erste Feld hat nach "Nachname" einfach zwei Zeilenumbrüche, um für die Straße Platz zu lassen, das zweite Feld fängt zunächst mit einem Umbruch an und zeigt dann nur die Straße an.
Das zweite Feld wird auf FETT gestellt. Dadurch läuft es im Druck länger nach unten aus. Jetzt muss man mit dem Zeilenabstand spielen, denn im Drucklayout sieht es falsch aus, im PDF ist es dann aber richtig. In meinem Beispiel ist die Schriftart Helvetica mit 10 Punkt. Das FETT-Feld hat einen Zeilenabstand von 1, das normale Feld hat einen Zeilenabstand von 1,035. Da es keine Negativwerte im Zeilenabstad zulässt, muß eben das normale Textfeld etwas "nachrücken" ...
Hier mal ein Screenshot vom Drucklayout
Vielleicht hilft das ja als Denkanstoß dem Einen oder Anderen...
Beste Grüße
Tobias
-
@Kruna: Klar, bei automatischer Höhe rückt der Rest natürlich nach. Ist ja Sinn der Sache. Da die Namenszeilen im Adressblock ganz oben stehen, könnte man in diesem Fall aber auch "Feste Höhe" einstellen und den Text unten ausrichten. Eine eventuell entstehende Leerzeile würde dann über dem Block stehen, also gar nicht wahrgenommen:
Das aber nur als empirisch erhärtete Deduktion meiner Arbeitsthese zur heterogenen Formatierung postalischer Adresselemente. Mit anderen Worten: Klugscheißerei. Praktischen Gebrauch würde ich davon nicht machen. ;)
@Tobias: Danke für den Denkanstoß. Die genaue Herangehensweise habe ich nicht ganz verstanden, aber der Screenshot sieht interessant aus.
-
Copy, du legst im Drucklayout ein Formelfeld an und lässt Dir sagen wir mal die komplette Adresse generieren.
Vorname + " " + Nachname + "
" + Straße + "
" + PLZ + " " + Ort
Dieses Feld dublizierst Du und nimmst im ersten Feld die Straße raus, achtest aber darauf, dass der Zeilensprung drin bleibt!
Also dann so:
Vorname + " " + Nachname + "
" + PLZ + " " + Ort
Im zweiten - dublizierten - Formelfeld nimmst Du alles raus außer der Straße, behältst aber die Zeilenstruktur!:
"
" + 'Straße' + "
"
Jetzt legst Du beide Felder exakt übereinander ...
-
Der Forumseditor löscht leider ein Zeile im Beispielcode... aber in den Screenshots siehst Du das mit den leeren zeilen im ersten Feld...
-
Jetzt können beide Felder unterschiedlich formatiert werden.... et voila!
-
Ach so, du legst die Felder übereinander ... Okay, jetzt hab ich's kapiert. Danke für die Erläuterung!
-
Hallo Tobias,
vielen Dank für Deinen Ansatz, so ähnlich hatte ich das auch vorher gehabt, nur das ich die Zeilen untereinander hatte und dann nur den betreffenden Bereich. Nun, bei jedem 'Zusatz' oder Veränderung, musst ich die Zeilen wieder anpassen. Es ist im Grunde genommen auch kein Beinbruch, Zeilen anzupassen, aber schöner und eleganter finde ich die Lösung von Copytexter allemal. Gerne verzichte ich auf das Fettgedruckte und je mehr ich darüber nachdenke, frage ich mich, wieso ich das überhaupt gemacht habe?! :-)
Hallo Copytexter,
alles gut, ich bleibe nun bei postkonform und nicht fettgedruckt! :-)
entschuldige, dass ich noch mal nachhake...ich hatte da noch eine Frage, wie man denn den Vornamen und Nachnamen abfragt. Ich ahbe folgenden Code:
Firma + "
" + if Zusatz then
Zusatz + "
"
end + if Bezug then
"- " + Bezug + " -" + "
"
end + if 'Anrede Briefkopf' = 1 or 'Anrede Briefkopf' = 2 then
'Anrede Briefkopf' + " "
end + Vorname + " " + Nachname + "
" + 'Straße' + "
" + PLZ + " " + OrtIch habe weiterhin daran herumgebastelt, aber andauernd ist irgendetwas falsch und ich kann den Fehler nicht verstehen, bzw. korrigieren.
Gruß Kruna
-
»je mehr ich darüber nachdenke, frage ich mich, wieso ich das überhaupt gemacht habe?!«
Kenn' ich! Das zieht sich wie ein roter Faden durch mein Leben ...
Zur Sache: Vor- und Nachname fragt man im Prinzip auf dieselbe Weise ab wie jedes andere Feld. Allerdings ist mir nicht klar, was genau du abfragen willst. Steht 'Anrede Briefkopf' für "Herrn" oder "Frau"? Ansonsten keine Anrede? Und worauf sollen Vor- und Nachname geprüft werden? Ob sie leer sind? Kann Nachname auch leer sein? Dann würde ja auch die Anrede keinen Sinn machen.
Ich nehme jetzt einfach mal an, dass die Zeile nur gedruckt werden soll, wenn ein Nachname angegeben ist. Und sie dann entweder "Herrn Max Mustermann", "Herrn Mustermann" oder schlimmstenfalls nur "Mustermann" lautet. Das könnte evtl. so funktioneren (ohne Gewähr, weil nicht getestet):
[...]
if Nachname then
if 'Anrede Briefkopf' < 3 then 'Anrede Briefkopf' + " " end
+ if Vorname then Vorname + " " end + Nachname end + "
" + 'Straße' + "
" + PLZ + " " + Ort
Wobei ich persönlich lieber so vorgehe, dass ich den Adressblock schon im Datenformular zusammensetze und überprüfe. Ins Drucklayout muss ich dann nur noch ein einziges Feld ohne Abfragen übernehmen und erlebe später beim Drucken keine Überraschungen (siehe Beispiel vom 15. Mai auf Seite 1 dieses Threads). Aber das ist natürlich Geschmacksache.
-
HAllo Copytexter,
Deine Annahme ist vollkommen richtig und prima :-), ich habe es gerade umgesetzt und es hat 'eigentlich' soweit funktioniert, aber 'uneigentlich' ist es genauso wie vorher. Ich hatte vorher zunächst den NAmen eingebaut (bitte siehe Code), dann auf die selbe Weise versucht, das Feld abzufragen, doch dann kommen andauernd Fehler.
Wenn ich den Code so belasse, dann habe ich eine leere Zeile ohne das alles, was darunter ist eine Zeile nach oben rückt.
Ich kann das besser anhand von Screenshots erklären.
Hier haben wir sozusagen, das "volle Programm", Firma, Zusatz, Bezug, Vorname, Nachname usw.
Nun lasse ich den Bezug "Buchhaltung" weg und alle Zeilen darunter rücken eine Zeile nach oben.
Soweit so gut, wenn ich aber nun den Namen weglasse, habe ich eine leere Zeile (bei dem Code, den ich vorher benutzt hatte, war das auch so)
Wenn ich das "Herrn" (steht für 'Anrede Briefkopf' ) weglasse, dann ist der Vorname und Nachname eine Position nach rechts eingerückt.
Beim Code, den ich mir vorher zusammengefriemelt habe, war der Vor und Nachname soweit ok.
Im Prinzip geht es mir darum, dass ich perse den Vor und Nachnamen in der Anschrift habe, wenn jedoch kein Vor und Nachname vorhanden ist, dann wird er eben weggelassen und es entsteht keine leere Zeile dadurch.
Ich hoffe, dass ich mich einigermaßen verständlich ausgedrückt habe...auch so (m)ein "roter Faden" :-)
Gruß Kruna
-
Okay, da war ein Zeilumbruch zuviel. Und weil ich gerade dabei war, habe ich auch gleich noch die Auswahlfelder angepasst. Funktioniert in diesem Zusammenhang zwar auch ohne text(), aber sicher ist sicher.
Firma + "
" + if Zusatz then
Zusatz + "
"
end + if Bezug then
"- " + text(Bezug) + " -" + "
"
end + if Nachname then
if 'Anrede Briefkopf' < 3 then
text('Anrede Briefkopf') + " "
end + if Vorname then Vorname + " " end + Nachname + "
"
end + 'Straße' + "
" + PLZ + " " + Ort
-
Jetzt ist es perfekt...tausend Dank!!! Das einzige was noch nicht ganz stimmig war (verstehe allerdings nicht warum), war der Rechts-Einzug, wenn ich "Herrn" weglasse (siehe letztes Bild). Ich habe dann
'Anrede Briefkopf' < 3
durch
'Anrede Briefkopf' = 1 or 'Anrede Briefkopf' = 2
erstetzt und jetzt ist alles so, wie es sein soll!
Ich bin wirklich unendlich dankbar für Deine Hilfe!
Gruß Kruna
Content aside
- vor 4 JahrenZuletzt aktiv
- 27Antworten
- 1748Ansichten