Makro plötzlich korrupt?

Anwenderaustausch zur PhraseExpress Makroprogrammierung
Forum rules
Bitte beachten Sie die Hinweise zum Forum. Vielen Dank!
Post Reply
Manni
Posts: 18
Joined: 27 Apr 17, 13:53

Makro plötzlich korrupt?

Post by Manni » 29 Nov 17, 14:08

Hallo!

Ich habe ein Textbaustein zusammengestellt, das dem Nutzer eine Auswahl zur Verfügung stellt: der letzte Tag von diesem Monat, der letzte Tag vom kommenden Monat und das Datum von heute. Die Wahl wird dann in eine Variable geschrieben.
Das hat auch funktioniert, aber wenn PhraseExpress auch nur einmal geschlossen und wieder gestartet wird, geht es nicht mehr. Das gleiche passiert, wenn der Textbaustein in eine gemeinsam genutze Datei verschoben wird, um es anderen zur Verfügung zu stellen. Ich weiß nicht, wie und warum der Textbaustein plötzlich korrupt ist.
In diesem Fall wird nur das Datum von heute angeboten, die anderen beiden fehlen. Wo mache ich den Fehler?

Code: Select all

{#check -text {#datetime -f mmmm} -case == Februar -output {#settemp -name tag -content 30.}|== April -output {#settemp -name tag -content 30.}|== Juni -output {#settemp -name tag -content 30.}|== September -output {#settemp -name tag -content 30.}|== November -output {#settemp -name tag -content 30.} -else {#settemp -name tag -content 31.}}{#settemp -name monat -content {#datetime -f mm}.}{#settemp -name jahr -content {#datetime -f yyyy}}{#check -text {#datetime -f mm -s 1M} -case == 01 -output {#settemp -name tag_2 -content 28.}|== 03 -output {#settemp -name tag_2 -content 30.}|== 05 -output {#settemp -name tag_2 -content 30.}|== 08 -output {#settemp -name tag_2 -content 30.}|== 10 -output {#settemp -name tag_2 -content 30.} -else {#settemp -name tag_2 -content 31.}}{#settemp -name monat_2 -content {#datetime -f mm -s 1M}.}{#settemp -name jahr_2 -content {#datetime -f yyyy -s 1M}}{#settemp -name heute -content {#datetime -f dd.mm.yyyy}}{#form -text Datum -width 250}{#formradiogroup -text Datum -items {#gettemp tag}{#gettemp monat}{#gettemp jahr}|{#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2}|heute -vals {#settemp -name vertragsende -content {#gettemp tag}{#gettemp monat}{#gettemp jahr}}|{#settemp -name vertragsende -content {#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2}}|{#settemp -name vertragsende -content {#gettemp heute}} -def {#check -text {#datetime -f dd} -case > 16 -output {#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2} -else {#gettemp tag}{#gettemp monat}{#gettemp jahr}}}
Danke!

Nachtrag: Das Problem scheint dann aufzutreten, wenn das Formular-Makro benutzt wird. Wenn ich die Vergleichsoperationen starte und jeweils in eine Variable schreibe und nur anschließend ausgebe, funktioniert es ohne Probleme. Steht im Anschluss z. B. {#form -text test -width 500} wird nichts mehr ausgegeben.

Viele Grüße
Manni

Peter Stotz
PhraseExpress Expert
Posts: 611
Joined: 27 Feb 08, 15:07

Re: Makro plötzlich korrupt?

Post by Peter Stotz » 29 Nov 17, 23:51

Manni,
sehr seltsam - der kopierte Textbausteins hat auch in meiner Systemumgebung zunächst nur die checkbox für "heute" angezeigt.
Nachdem ich dann versuchsweise einige Veränderungen vorgenommen hatte ...
a) lt. Handbuch http://www.phraseexpress.com/docs13/07/ ... ieberegler
gilt für den #form-Makro: "Dieses optionale Makro muss sich am Textbausteinanfang befinden."
b) Entfernen und Wiedereinfügen des #ckeckmakros im -def-Parameter
c) Variablenzuweisung für 'vertragsende' optimiert
... funktionierte der Textbaustein in dieser Form:

Code: Select all

{#form -text Datum -width 250}{#check -text {#datetime -f mmmm} -case == Februar -output {#settemp -name tag -content 30.}|== April -output {#settemp -name tag -content 30.}|== Juni -output {#settemp -name tag -content 30.}|== September -output {#settemp -name tag -content 30.}|== November -output {#settemp -name tag -content 30.} -else {#settemp -name tag -content 31.}}{#settemp -name monat -content {#datetime -f mm}.}{#settemp -name jahr -content {#datetime -f yyyy}}{#check -text {#datetime -f mm -s 1M} -case == 01 -output {#settemp -name tag_2 -content 28.}|== 03 -output {#settemp -name tag_2 -content 30.}|== 05 -output {#settemp -name tag_2 -content 30.}|== 08 -output {#settemp -name tag_2 -content 30.}|== 10 -output {#settemp -name tag_2 -content 30.} -else {#settemp -name tag_2 -content 31.}}{#settemp -name monat_2 -content {#datetime -f mm -s 1M}.}{#settemp -name jahr_2 -content {#datetime -f yyyy -s 1M}}{#settemp -name heute -content {#datetime -f dd.mm.yyyy}}{#settemp -name vertragsende -content {#formradiogroup -text Datum -items {#gettemp tag}{#gettemp monat}{#gettemp jahr}|{#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2}|heute -vals {#gettemp tag}{#gettemp monat}{#gettemp jahr}|{#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2}|{#gettemp heute} -def {#check -text {#datetime -f dd} -case > 16 -output {#gettemp tag_2}{#gettemp monat_2}{#gettemp jahr_2} -else {#gettemp tag}{#gettemp monat}{#gettemp jahr}}}}>{#gettemp vertragsende}<
Damit ist aber die Ursache für das vorhergehende Verhalten aber nicht wirklich geklärt...

Vorschlag für eine weitere Optimierung:
Alternativ kann der Textbaustein mit den folgenden "Rechenformeln" programmiert werden:
A. Datum dd.mm.yyyy des letzten Tages des Vormonats
{#datetime -f dd.mm.yyyy -s -{#datetime -f dd}d}
B. Datum dd.mm.yyyy des letzten Tags des aktuellen Monats
{#substr 31{#datetime -f dd -value 01.03.{#datetime -f yyyy} -s -1d}31303130313130313031 -from {#calc 2*{#datetime -f mm}-1 -round 0} -count 2}.{#datetime -f mm.yyyy}
Die jeweiligen Berechnungen erfolgen mit diesen Algorithmen auch bei Jahresübergang und bei Schaltjahren richtig (sie stammen übrigens noch aus der Zeit, bevor es den #check-Makro gab!).
Der Textbaustein sieht dann so aus:

Code: Select all

{#form -text Datum -width 250}{#settemp -name vertragsende -content {#formradiogroup -text -items {#datetime -f dd.mm.yyyy -s -{#datetime -f dd}d}|{#substr 31{#datetime -f dd -value 01.03.{#datetime -f yyyy} -s -1d}31303130313130313031 -from {#calc 2*{#datetime -f mm}-1 -round 0} -count 2}.{#datetime -f mm.yyyy}|heute {#datetime -f ddddd} -def {#check -text {#datetime -f dd} -case > 16 -output {#substr 31{#datetime -f dd -value 01.03.{#datetime -f yyyy} -s -1d}31303130313130313031 -from {#calc 2*{#datetime -f mm}-1 -round 0} -count 2}.{#datetime -f mm.yyyy} -else {#datetime -f dd.mm.yyyy -s -{#datetime -f dd}d}} -vals {#datetime -f dd.mm.yyyy -s -{#datetime -f dd}d}|{#substr 31{#datetime -f dd -value 01.03.{#datetime -f yyyy} -s -1d}31303130313130313031 -from {#calc 2*{#datetime -f mm}-1 -round 0} -count 2}.{#datetime -f mm.yyyy}|{#date}}}>{#gettemp vertragsende}<
Peter
Win 10-1607 64 bit - PhraseExpress 13.0.55i

Manni
Posts: 18
Joined: 27 Apr 17, 13:53

Re: Makro plötzlich korrupt?

Post by Manni » 30 Nov 17, 10:16

Hallo Peter,

vielen Dank für das Ausprobieren und den Optimierungen!
Sobald PhraseExpress geschlossen und neu gestartet wird, funktioniert auch Dein Textbaustein nicht mehr. Auch wenn das #form-Makro am Anfang steht. Das scheint also nicht der Grund gewesen zu sein?!

Deine Optimierung mit der Variablen-Zuweisung einfach am Anfang ist natürlich sehr gut, das merke ich mir. Ist so einfacher.

Da Dein zweiter Textbaustein auch nach Neustart einwandfrei funktioniert, scheint es ein Fehler im Zusammenspiel mit dem Formular und #check zu geben. Das leite ich an den Support weiter.
Den zweiten Textbaustein werde ich mir noch so abändern, dass der letzte Tag von diesem Monat angezeigt wird und der letzte Tag vom nächsten Monat.
Danke nochmal!

Manni

Peter Stotz
PhraseExpress Expert
Posts: 611
Joined: 27 Feb 08, 15:07

Re: Makro plötzlich korrupt?

Post by Peter Stotz » 30 Nov 17, 10:32

Hallo, Manni,
zu deiner Unterstützung hier auch noch die Rechenformel für den letzen Tag des Folgemonats (korrekt auch bei Jahresübergang und Schaltjahr):

Code: Select all

{#substr 31{#datetime -f dd -value 01.03.{#datetime -f yyyy} -s -1d}31303130313130313031 -from {#calc 2*{#datetime -f mm -s 1M}-1 -round 0} -count 2}.{#datetime -f mm.yyyy -s 1M}
Peter
Win 10-1607 64 bit - PhraseExpress 13.0.55i

Manni
Posts: 18
Joined: 27 Apr 17, 13:53

Re: Makro plötzlich korrupt?

Post by Manni » 30 Nov 17, 10:50

Hallo Peter,

perfekt, vielen Dank! :-)

Manni

Post Reply