Support Forum

mehrzeiliger planname bis 2020 möglich aber ab 2022 Fehlermeldungen?

Schlagworte:
  • Planname;
  • Merhzeilig;
  • Beschriftungsbild

Für mehrzeiligen Plannamen gab es bisher bis Allplan 2020 die Möglichkeit einen merhzeiligen Plannamen wie folgt zu generieren
Plannamen
Zeile 1 | Zeile 2 | Zeile 3

mit folgenden Bild-Beschriftungsbefehlen:

1.Zeile
=gross(WENN(SUCHEN("|";@445@);TEIL(@445@;1;SUCHEN("|";@445@)-1);@445@))
2.Zeile
=gross(WENN(SUCHEN("|";@445@);TEIL(@445@;SUCHEN("|";@445@)+1;WENN(SUCHEN("|";TEIL(@445@;SUCHEN("|";@445@)+1;1000)); SUCHEN("|";TEIL(@445@;SUCHEN("|";@445@)+1;1000))-1;1000));""))
3.Zeile
=gross(WENN(SUCHEN("|";@445@);WENN(SUCHEN("|";TEIL(@445@;SUCHEN("|";@445@)+1;1000));TEIL(@445@;SUCHEN("|";@445@)
+SUCHEN("|";TEIL(@445@;SUCHEN("|";@445@)+1;1000))+1;1000);"");""))

Ab 2022 geht dies nicht mehr. Was wurde hier geändert in der Formelsprache?.
Kann ein Spezialist hier helfen?

Grüße

Anhänge (1)

Typ: image/png
206-mal heruntergeladen
Größe: 31,01 KiB

Hilfreichste Antwort anzeigen Hilfreichste Antwort verbergen

Vielleicht kann ich eine Lösung anbieten:
Wir benutzen Allplan 2022. Auf den Rechnern ist kein Excel verfügbar. Darum habe ich das auf Python umgestellt.

So geht’s:
1. Unter Allplan2022\Std\Scripts die Datei functions.py mit Texteditor öffnen und den folgenden Programmcode am Ende hinzufügen:

def teil_tz(a,b,c):
    c = int(c)
    count = a.count(b) + 1
    if c > count or c <= 0:
        string = " "
    else:
        substrings = a.split(b)
        string = substrings[c - 1]
    return string.upper()

Die Datei ist auch im Anhang. Bitte das Original sichern.
Jetzt steht im Formeleditor die Pythonfunktion mit dem Namen "teil_tz" zur Verfügung.

2. Das Beschriftungsbild, welches die erste Zeile wiedergeben soll mit folgender Formel belegen:
p:teil_tz(@445@;"|";1) Siehe Bild 1.

3. Das Beschriftungsbild, welches die zweite Zeile wiedergeben soll mit folgender Formel belegen:
p:teil_tz(@445@;"|";2)

usw...

Zur Erklärung
Die Funktion wird so ähnlich benutzt, wie eine Excel-Formel.
Die Formel startet mit p: um Allplan anzuweisen eine Python-Funktion aus der Datei functions.py auszuführen.
Dann folgt der Name der Funktion. Er muss so geschrieben werden wie das was zwischen def und (a,b,c) in der functions.py steht.
Dann folgt die Übergabe der Parameter welche in die Klammern geschrieben werden.
(@445@;"|";1)
( Attribut welches ausgewertet werden soll ; Trennzeichen in Anführungszeichen ; Nummer der Zeile bzw. des Teilstrings )

Es können so viele Zeilen zu Abfrage vorbereitet werden wie man will. Fragt das Beschriftungsbild eine Zeile ab, die nicht vorhanden ist, wird ein Leerzeichen ausgegeben. Folgen zwei Trennzeichen aufeinander entsteht eine Leerzeile. Siehe Bild 2. Die Ausgabetexte werden immer mit Großbuchstaben ausgegeben.

Ich hoffe das kann helfen. Bei Fragen einfach hier schreiben.

Gruß Felix
Allplan 2024-0-1

Anhänge (3)

Typ: text/plain
657-mal heruntergeladen
Größe: 416,00 B
Typ: image/png
97-mal heruntergeladen
Größe: 31,52 KiB
Typ: image/png
123-mal heruntergeladen
Größe: 115,28 KiB
21 - 25 (25)

So was ich auch festgestellt habe, das die Formeln Murks anzeigen, wenn der zweite Teil nicht belegt ist.
Schreibe ich hinter mit vorlaufenden Trennzeichen etwas, wird alles richtig angezeigt, darum läuft das bei Markus.

Ich denke wenn Markus den zweiten Formelbereich nicht belegt kommt auch Murks raus.

Das deckt sich mit dem Post von mmk_architekten

Mit besten Grüßen!
Jürgen

Allplan Ingenieurbau V10 bis V2025

Vielleicht kann ich eine Lösung anbieten:
Wir benutzen Allplan 2022. Auf den Rechnern ist kein Excel verfügbar. Darum habe ich das auf Python umgestellt.

So geht’s:
1. Unter Allplan2022\Std\Scripts die Datei functions.py mit Texteditor öffnen und den folgenden Programmcode am Ende hinzufügen:

def teil_tz(a,b,c):
    c = int(c)
    count = a.count(b) + 1
    if c > count or c <= 0:
        string = " "
    else:
        substrings = a.split(b)
        string = substrings[c - 1]
    return string.upper()

Die Datei ist auch im Anhang. Bitte das Original sichern.
Jetzt steht im Formeleditor die Pythonfunktion mit dem Namen "teil_tz" zur Verfügung.

2. Das Beschriftungsbild, welches die erste Zeile wiedergeben soll mit folgender Formel belegen:
p:teil_tz(@445@;"|";1) Siehe Bild 1.

3. Das Beschriftungsbild, welches die zweite Zeile wiedergeben soll mit folgender Formel belegen:
p:teil_tz(@445@;"|";2)

usw...

Zur Erklärung
Die Funktion wird so ähnlich benutzt, wie eine Excel-Formel.
Die Formel startet mit p: um Allplan anzuweisen eine Python-Funktion aus der Datei functions.py auszuführen.
Dann folgt der Name der Funktion. Er muss so geschrieben werden wie das was zwischen def und (a,b,c) in der functions.py steht.
Dann folgt die Übergabe der Parameter welche in die Klammern geschrieben werden.
(@445@;"|";1)
( Attribut welches ausgewertet werden soll ; Trennzeichen in Anführungszeichen ; Nummer der Zeile bzw. des Teilstrings )

Es können so viele Zeilen zu Abfrage vorbereitet werden wie man will. Fragt das Beschriftungsbild eine Zeile ab, die nicht vorhanden ist, wird ein Leerzeichen ausgegeben. Folgen zwei Trennzeichen aufeinander entsteht eine Leerzeile. Siehe Bild 2. Die Ausgabetexte werden immer mit Großbuchstaben ausgegeben.

Ich hoffe das kann helfen. Bei Fragen einfach hier schreiben.

Gruß Felix
Allplan 2024-0-1

Anhänge (3)

Typ: text/plain
657-mal heruntergeladen
Größe: 416,00 B
Typ: image/png
97-mal heruntergeladen
Größe: 31,52 KiB
Typ: image/png
123-mal heruntergeladen
Größe: 115,28 KiB

Hallo f_hoeser,

vielen Dank für deinen sehr informativen und nützlichen Beitrag.
Folgende Frage:
Wir würden gerne die Planbeschriftung aus mehreren Stufen der Planstruktur bilden. Das passende Attribut hierzu wäre Planstruktur gesamte Hierarchie (@743@). Wie könnte das Skript aussehen, wenn jede Strukturstufe, beginnend mit der obersten in eine Zeile geschrieben werden soll? Bitte um Unterstützung.

Freundliche Grüße

Das wäre dann wohl so etwas:

def multiline(txt,sep):
    lines = txt.split(sep)
    txt=""
    for i in range(0, len(lines)):
        txt += lines[i]
        txt += "\r"
    return txt

Formel:
""+p:multiline(@473@;"/")

Danke Nemo, es funktioniert.

Freundliche Grüße

21 - 25 (25)