0

Rpad mit text

Ist es möglich rpad mit Text zu füllen? Statisch geht das, ich brauch es als variable.

let myPos := this;
let pla := cnt(select Einzelpositionen where number(Rechnungsstellung) = myPos);
let text := if Kunde.Firma and Kunde.'Nachname oder Zusatz für Empfänger in PDF' then
        Kunde.Firma + "
" + Kunde.'Nachname oder Zusatz für Empfänger in PDF' + "
" + Kunde.'Straße Nr' + "
" + Kunde.PLZ + " " + Kunde.Ort
    else
        if Kunde.Firma and Kunde.'Nachname oder Zusatz für Empfänger in PDF' = null then
            Kunde.Firma + "
" + Kunde.'Straße Nr' + "
" + Kunde.PLZ + " " + Kunde.Ort
        else
            if Kunde.Anrede = 1 or Kunde.Anrede = 2 then
                Kunde.Anrede + " 
" + Kunde.Vorname + " " + Kunde.'Nachname oder Zusatz für Empfänger in PDF' + "
" + Kunde.'Straße Nr' + "
" + Kunde.PLZ + " " + Kunde.Ort
            end
        end
    end;
let zeilen := 50 - pla;
if pla > 6 then
    rpad(text, zeilen, "
")
end

17 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Michi ,

    so sollte es funktionieren:

    rpad("xxx", 20, text(FELD))

    zur Sicherheit die Variable als text() auslesen.

    Viel Erfolg

    Ronald

      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      DIGITOOL danke dir,probiere ich gern aus, aber jetzt ist erst mal Wochenenden bei tollem Wetter. 

      Zum eigentlichen, ist ein fx im Druck Layout, es soll nur den seitenumbruch besser gestalten. Daher wollt ich gerne die if Abfrage als Text einbinden. Also erst der Text, dann die Leerzeilen welche sich immer ändern je nach Befüllung der Ansicht darin.

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Funktioniert leider nicht. Sobald ich versuche einen text als variable einzufügen funktioniert das mit den leerzeilen nicht mehr.

    wenn ich es direkt eingebe funktioniert es, aber es ist nicht brauchbar. 

    Hat noch einer ne idee, oder geht es gar nicht?

    So funktioniert das mit den leerzeilen nicht:

    let myPos := this;
    let zeilen := cnt(select Einzelpositionen where number(Rechnungsstellung) = myPos);
    let platz := 50 - zeilen;
    let textbaustein := text('Einfügen');
    if zeilen > 6 then
        rpad(textbaustein, platz, "
        ")
    end

    So funktioniert alles, ist jedoch nicht brauchbar:

    let myPos := this;
    let zeilen := cnt(select Einzelpositionen where number(Rechnungsstellung) = myPos);
    let platz := 50 - zeilen;
    if zeilen > 6 then
        rpad("einzufügender text", platz, "
        ")
    end

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Michi. Vielleicht so.

    let myPos := this;
    let textbaustein := text('Einfügen');
    let line := 50 - cnt(select Einzelpositionen where number(Rechnungsstellung) = myPos);
    let lineBreak := "
    ";
    let totalLineBreak := if line > 6 then
            for i in range(0, line) do
                lineBreak
            end
        end;
    textbaustein + totalLineBreak
    
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Moin Michi ,

    Michi said:
    Zum eigentlichen, ist ein fx im Druck Layout, es soll nur den seitenumbruch besser gestalten. Daher wollt ich gerne die if Abfrage als Text einbinden. Also erst der Text, dann die Leerzeilen welche sich immer ändern je nach Befüllung der Ansicht darin.

    Wenn es nur um das Layout im Druckeditor geht und darum, dass das FX-Feld immer gleich groß sein soll?! Dann reicht es vielleicht die Box des FX-Feldes so groß zu machen, dass 50 Zeilen rein passen. Die Box wird dann variabel gefüllt und der Rest bleibt leer.

    Viele Grüße
    Ronald

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Danke Ihr beiden.

    Mirko seine Variante macht genau das was es soll.

    DIGITOOL  das fx soll ja nur befüllt werden wenn eine bestimmte anzahl von einträgen enthalten ist.  So kann ich dynamisch die 2. seite besser gestalten, ohne das da drinnen "rumgefummelt" werden muss. 

      • + Maßanzug statt Massenware +
      • RonaldP
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Michi ,

      Verstehe, also eine Krücke/bze. ein Workaround, weil es keinen Seitenumbruch gibt... 🙄

      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      DIGITOOL ja leider, aber vielleicht bekommen wir den ja 2025 oder so 🤪Doch bis dahin verändern sich auch stetig die anforderungen. zum glück gibt es bei mir nur eine Ansicht welche sich auf der 1. Seite ändert in bezug auf die Zeilenanzahl, so kann man sich erstmal damit behelfen ohne das es scheiße ausschaut 

    • Michi.1
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Habt Ihr eventuell noch eine idee wie ich die geschriebenen Zeilen in einem textfeld zählen kann? ist ein anderes layout nur hab ich hier noch die abhänigkeit zu dem Textfeld (wieviele Zeilen unabhängig vom Inhalt existieren) 

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    schau mal so (hab auch noch einen Fehler von mir korrigiert)

    let myPos := this;
    let textbaustein := text('Einfügen');
    let cntPos:=cnt(select Einzelpositionen where number(Rechnungsstellung) = myPos)
    let line := 50 - cntPos;
    let lineBreak := "
    ";
    let totalLineBreak := if cntPos > 6 then
            for i in range(0, line) do
                lineBreak
            end
        end;
    let result:=textbaustein + totalLineBreak
    length(replacex(result, "\n", "*")) - length(textbaustein)
    
      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko habs bemerkt bei der if abfrage 😉

      für die zeilenanzahl in einem anderen Textfeld bin ich aber zu blöd. Die benötige ich um dein skript mal früher aufzurufen. Was heist sind in dem Textfeld Rechnungshinweise mehr als zb. 5 zeilen, so muss dein skript da schon aufgerufen werden. 

      So will es nicht.

       

      let result := text(Rechnungshinweise);
      length(replacex(result, "\n", "*")) - length(Rechnungshinweise)

    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    versuche mal so:

    zum Bestimmen der Zeilenanzahl ohne Leerzeilen:

    let a := replacex(Rechnungshinweise, ".(?=\n)", "*");
    let b := length(replacex(a, "[^*]", ""));
    b
    

    für Zeilenanzahl mit Leerzeilen:

    let a := replacex(Text, "\n", "*");
    let b := length(replacex(a, "[^*]", ""));
    b + 1
    
    • mirko3
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hi Michi. Ich habe noch mal (nach Feierabend ;-)) nachgedacht. Es ist besser die Zeilenenden ($) zu zählen und nicht die Zeilenumbrüche (\n). Mal sehen ob es jetzt bei Dir klappt. Die erste Zeile ersetzt alle Zeilenenden durch "*". Die zweite Zeile tilgt alle Zeichen außer "*" und zählt dann die Sternchen. 

    let a := replacex(Rechnungshinweise, ".(?=$)", "gm", "*");
    let b := length(replacex(a, "[^*]", ""));
    b
    
      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko mach ich gern. Danke für deinen Einsatz. 

      Gibt es eigentlich schon was neues wenn oder ob der neue Editor fürs drucklayout kommt ?

      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko funktioniert 👍

      • mirko3
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Michi Bezüglich Druckeditor weiß ich auch nicht mehr als Du. Ich nehme, was da ist und versuche, so wie Du, das Maximum herauszuoptimieren.

      • Michi.1
      • vor 2 Jahren
      • Gemeldet - anzeigen

      Mirko das stimmt.

      so klappt es jetzt erst mal.... 

      werde noch nen feld einfügen wo man den "Seitenumbruch" erzwingen kann, dann sollte hoffentlich alles abgedeckt sein.

       

      let myPos := this;
      let textbaustein := text('Einfügen');
      let be := cnt(select Einzelpositionen where number(Rechnung) = myPos);
      let line := 40 - cnt(select Einzelpositionen where number(Rechnung) = myPos);
      let lineBreak := "
      ";
      let a := replacex(Rechnungshinweise, "\n", "*");
      let b := length(replacex(a, "[^*]", ""));
      let c := b + 1;
      let totalLineBreak := if be > 10 or c > 6 then
              for i in range(0, line) do
                  lineBreak
              end
          end;
      if be > 7 and c > 6 or be > 10 and be < 16 then
          textbaustein + totalLineBreak
      end