Wie Ersetzung realisieren? confused smiley

geschrieben von 3xhossa 
Willkommen! Anmelden Ein neues Profil erzeugen Suche
Wie Ersetzung realisieren? confused smiley
26. September 2014 23:23
Hallo,

ich stehe grad völlig auf dem Schlauch. In der Artikelliste würde ich gerne den Rabatt für einzelne Artikel erwähnen. Ist ja soweit nichts unanständiges. Fakturama lacht mich aber bei meinen Versuchen bisher immer aus. Ist vielleicht auch etwas viel verlangt, was ich da haben will.

Konkret möchte ich folgende Ersetzung haben, welche logischerwiese in einem Platzhalter untergebracht werden muss:
  • Wenn ein Rabatt gewährt wird, soll der Text "Gewährter Rabatt: x%" erscheinen
  • Wenn kein Rabatt gewährt wird, soll der Teil komplett ausgeblendet werden

Das Problem dabei: ALLE Artikel haben ein valides Rabattfeld, meist mit "0 %" gefüllt.

Nutze ich folgenden Platzhalter
<ITEM.DISCOUNT.PERCENT$PRE:%NLGewährter Rabatt: >
wird also immer der Rabatt angezeigt, doch meistens als "Gewährter Rabatt: 0 %" was nicht sehr werbewirksam ist. Den kann ich zwar von Hand rauslöschen, doch ein Automatismus wäre schon angenehmer.
Leider scheiterte bisher jeglicher Versuch kläglich, den 0 %-Eintrag zu eliminieren, da ich $REPLACE irgendwie nicht zum laufen kriege. Ich habe es auch in anderen Variablen versucht, doch ich bekomme immer nur solche Fehler:
java.util.regex.PatternSyntaxException: Illegal repetition near index 31
<ITEM.DISCOUNT.PERCENT\$REPLACE:{0 %,}\$PRE:%NLGewährter Rabatt: >
                               ^
oder in der Artikel-Beschreibung:
java.util.regex.PatternSyntaxException: Illegal repetition near index 26
<ITEM.DESCRIPTION\$REPLACE:{Text,Ersetzung}\$PRE:%NL>
                          ^

Jetzt bin ich am Ende meiner Weisheit. Habe ich die Doku vielleicht falsch verstanden? Dort steht:
Zitat
Doku zu 1.6.6
Ersetzt den Platzhaltertext durch einen anderen. Es wird eine Liste mit allen möglichen Ersetzungen angebenen. Die Liste muss in eine geschweifte Klammer eingeschlossen sein. Alle Listenelemente sind durch ein Semikolon getrennt. Jedes Listenelement besteht aus einem Schlüssel und dem zu ersetzenden Text. Beide wiederum durch ein Komma getrennt.
Beispiel: Ein DE würde durch den Text Deutschland ersetzt werden, ein CH durch Schweiz:
<ADDRESS.COUNTRY.CODE2$REPLACE:{DE,Deutschland;CH,Schweiz}>
Habe ich notwendige Leerzeichen übersehen? Dürfen an bestimmten Stellen wie in den Such- oder Ersetzungstexten keine Leerzeichen stehen oder müssen maskiert werden (durch %blank oder ähnliches)? Bisher habe ich nichts in der Richtung finden können.

Kann es eventuell sein, dass ein "%"-Zeichen im gescannten Text den Scanner aus dem Tritt bringt? Wie wäre das dann korrekt zu maskieren?

Dürfen diese Anweisungen vielleicht gar nicht kombiniert werden? Zumindest $PRE: und $POST: sind ja kombinierbar, daher gehe ich davon aus, dass auch andere zumindest funktional kombinierbar sind.

Bin für jede Hilfe dankbar!

Gruß
3xhossa
Re: Wie Ersetzung realisieren? confused smiley
27. September 2014 09:04
Hallo,
die Lösung von kusspaprika bestand bei einem ähnlichen Problem darin, im Writer mit bedingter Formatierung zu arbeiten:
http://forum.fakturama.org/read.php?2,5113

Vielleicht gibt es ja die Möglichkeit, beim Rabatt=0 Inhalte oder Spalten auszublenden.

Ich selbst habe mir Deine Aufgabe auch schon lange gestellt, hatte nur bisher kein Zeit, das Problem anzugehen. Deshalb verwende ich bis jetzt zwei separate Templates mit und ohne Rabattspalte.

Viele Grüße
Steffen
Re: Wie Ersetzung realisieren? confused smiley
27. September 2014 11:53
Offenbar scheitert es ja daran, dass $REPLACE nicht funktioniert. Ich habe jetzt nicht die Zeit, die Funktion mit allen möglichen Kontexten und Inhalten zu testen, deswegen eher die Frage: Wie funktioniert $REPLACE konkret?

Davon abgesehen habe ich das alles in einer Tabellenzelle zusammen: Artikelname, -beschreibung und die Rabattangaben. Momentan habe ich beispielsweise dieses in einer Vorlage:
<ITEM.NAME><ITEM.DESCRIPTION$PRE:%NL><ITEM.DISCOUNT.PERCENT$PRE:%NLEinzelrabatt für diesen Artikel: ><ITEM.UNIT.NET$PRE:%NL> → <ITEM.UNIT.NET.DISCOUNTED>
Das sieht dann im Dokument so aus:
Produkt 0815
Produktbeschreibung
Einzelrabatt für diesen Artikel:5 %
100,00 € → 95,00 €
Unterschiedliche Formatierung innerhalb einer Zelle geht leider verloren. Aber das ist ja bekannt und kann hoffentlich irgendwann geändert werden.

Gruß
3xhossa
Re: Wie Ersetzung realisieren? confused smiley
28. September 2014 15:20
Hallo zusammen,
ich gebe zu, auch eine Weile gebraucht zu haben, um das zu verstehen, wie's funktioniert :-) War auch noch ein Bug drin... Ich hab jetzt ein Update hochgeladen, wo der Fehler nicht mehr auftritt. Der Feldbefehl im Dokument müßte so aussehen:

ITEM.DISCOUNT.PERCENT$REPLACE:{%NLGewährter Rabatt:0 %, }$PRE:%NLGewährter Rabatt:

Viele Grüße,
Ralf.
Re: Wie Ersetzung realisieren? confused smiley
28. September 2014 18:21
Danke für die Korrektur. Leider sehe ich auf sourceforge noch kein Update. Zumindest ist die erhältliche Linux-Version noch vom 7. September. Für Windows gab es heute morgen neue Dateien. Ist dort der Fix bereits implementiert? Ohne den Fix funktioniert dein gezeigter Code leider nicht.

Aber der zeigt mir immerhin, dass die Reihenfolge offenbar fest ist: erst wird $PRE abgearbeitet, dann $REPLACE, egal in welcher Reihenfolge diese im Platzhalter stehen. Somit müsste der vollständige Text, der durch $PRE eingefügt wird, durch $REPLACE wieder ersetzt/gelöscht werden. Habe ich das soweit richtig verstanden?
Wenn ja, wäre es dann möglich, die Abarbeitung auf die Reihenfolge zu ändern, in der die Befehle angegeben werden? Oder spricht etwas anderes dagegen?

Gruß
3xhossa
Re: Wie Ersetzung realisieren? confused smiley
29. September 2014 04:47
Hallo,
erst einmal ein "Toll!" an alle Beteiligten. Es klappt gut und damit löst sich auch mein Problem, das ich schon eine Weile vor mir her schiebe.
Zwei Anmerkungen noch:
  1. Es wäre gut, wenn der Platzhalter [ITEM.DISCOUNT.PERCENT] nicht schon mit einem Minus davor käme, denn "Rabatt" heißt ja schon "minus" und der String "Gewährter Rabatt: -20 %" ist dann quasi doppelt gemoppelt. Falls jemand das "-" dennoch braucht, kann er es ja mit "$PRE:" davorsetzen.
  2. Bei "$POST:" oder "$PRE:" wurde kein einführendes oder beendendes Leerzeichen akzeptiert und einen Code ähnlich "%NL" habe ich für ein Leerzeichen auch nicht gefunden. Es steht also immer da: "Gewährter Rabatt:-20 %" bzw. "-20 %Rabatt". Habe ich da etwas übersehen?

Viele Grüße
Steffen
Re: Wie Ersetzung realisieren? confused smiley
29. September 2014 10:43
Miracolitag schrieb:
> Es wäre gut, wenn der Platzhalter
> [ITEM.DISCOUNT.PERCENT] nicht schon mit einem
> Minus davor käme, denn "Rabatt" heißt ja schon
> "minus" und der String "Gewährter Rabatt: -20 %"
> ist dann quasi doppelt gemoppelt. Falls jemand das
> "-" dennoch braucht, kann er es ja mit "$PRE:"
> davorsetzen.

Guter Punkt. Hatte ich auch schon bemerkt, aber wegen wichtigerer Baustellen nicht weiter bearbeitet.

> Bei "$POST:" oder "$PRE:" wurde kein
> einführendes oder beendendes Leerzeichen
> akzeptiert und einen Code ähnlich "%NL" habe ich
> für ein Leerzeichen auch nicht gefunden. Es steht
> also immer da: "Gewährter Rabatt:-20 %" bzw. "-20
> %Rabatt". Habe ich da etwas übersehen?

Das ist mir ebenfalls aufgefallen. Da die Ersetzung aber sowieso nicht richtig klappte, habe ich das alles etwas umformatiert, womit sich die Frage nicht mehr stellte. Eine Beachtung der Leerzeichen wäre aber trotzdem toll.

Gruß
3xhossa
Re: Wie Ersetzung realisieren? confused smiley
29. September 2014 19:04
Freut mich, daß es jetzt funktioniert. Das mit der Reihenfolge ist korrekt. Das mit den fehlenden Leerzeichen könnte man vielleicht durch %TAB lösen. Aber ich werde mal sehen, ob man hier noch einen neuen Platzhalter einführen kann. Schreibt das noch jemand indne BugTracker?

Viele Grüße,
Ralf.
Re: Wie Ersetzung realisieren? confused smiley
01. Januar 2018 21:52
Stehe gerade auch vor dem Problem ein Leerzeichen einfügen zu müssen. Gibt es in Fakturama 2 dazu ein Sonderzeichen?

------------------
Viele Grüße, Matthias

Mein System: Win10 64, Fakturama 2.0.3, Java- jre 8u151, LibreOffice 5.4.3.2
Re: Wie Ersetzung realisieren? confused smiley
01. Januar 2018 22:28
nein, das gibt's tatsächlich noch nicht. Was willst Du denn für ein Problem damit lösen? Vielleicht geht es ja auch anders...

Viele Grüße,
Ralf.
Re: Wie Ersetzung realisieren? confused smiley
02. Januar 2018 10:05
Hab in meinen Rechnungen folgenden Platzhalter vorgesehen:

<DOCUMENT.REFERENCE.OFFER$PRE:zu Angebot >

Dabei wird die Angebotsnummer direkt an den Text "zu Angebot" ohne Leerzeichen geschrieben. Da nicht immer ein Angebot erstellt wird, soll die Zeile eben ausgeblendet werden, wenn kein Angebot existiert.

------------------
Viele Grüße, Matthias

Mein System: Win10 64, Fakturama 2.0.3, Java- jre 8u151, LibreOffice 5.4.3.2
Re: Wie Ersetzung realisieren? confused smiley
03. Januar 2018 12:29
Hab es durch einen anderen Beitrag im Forum lösen können.

Siehe Beitrag

Damit gibt es derzeit zwei Methoden:

1. <ALT>+0160
2. <STRG>+<Umschalt>+<Leertaste>

Beide Methoden erzeugen ein sogenanntes "Geschütztes Leerzeichen", welches mit $PRE und $POST verwendbar ist. Vielleicht kommt ja in der nächsten Version von Fakurama 2 noch ein Sonderzeichen hinzu. winking smiley Für mich reicht die Lösung erstmal.

------------------
Viele Grüße, Matthias

Mein System: Win10 64, Fakturama 2.0.3, Java- jre 8u151, LibreOffice 5.4.3.2
Re: Wie Ersetzung realisieren? confused smiley
03. Januar 2018 12:57
Danke für die Rückmeldung. Die Idee hatte ich schon so ähnlich, mir war aber nicht mehr eingefallen, wie es konkret ging. Ich werde trotzdem noch ein Leerzeichen als Ersetzungszeichen bauen.

Viele Grüße,
Ralf.
In diesem Forum dürfen leider nur registrierte Teilnehmer schreiben.

Klicke hier, um Dich einzuloggen