+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

SetVar() - GetVar() Konfusion...


(Dr. Ingmar Gutberlet) #1

Hallo,

in unserer Warenwirtschaft lassen sich Attribute für Artikel setzen, zum Beispiel ob die Batterieverordnung greift.

Ich möchte nun in meinem Berichtscontainer für jede Artikelposition prüfen, ob das betreffende Attribut “Batteriverordnung” gesetzt ist und wenn das zumindest für einen Artikel zutrifft, möchte ich am Ende des Textes eine PDF mit dem Text zur Batterieverordnung ausgeben.

Dies sollte sich eigentlich mit SetVar() > GetVar() erledigen lassen, ich habe aber unerwartete Schwierigkeiten damit. Mein aktueller (~Debug)-Code hierzu lautet…

cond(Alias$(“BATTERIEVERORDNUNG”,Upper$(Auftragspositionen.Artikel.AttributeAlsText)) = “JA”,
SetVar(“BattV”,“Position “+Fstr$(Count(Auftragspositionen.InterneAuftragspositionnummer, false),”##&”)+" enthält Batterien!"),
“Position “+Fstr$(Count(Auftragspositionen.InterneAuftragspositionnummer, false),”##&”)+" enthält keine Batterien!"
)

… es wird also geprüft, ob der Artikel ein Attribut Namens “Batterieverordnung” hat, das den Wert “ja” hat und falls ja, soll SetVar() ausgeführt werden. SetVar() soll also nur dann ausgeführt werden, wenn das Attribut existiert und “ja” ist, denn ich will ja nicht, dass ein späterer Artikel, der keine Batterien enthält, den Schalter wieder umlegt.

Unten, am Ende meiner Vorlage gebe ich aktuell den Wert der Variable “BattV” mit NullSafe(GetVar(“BattV”),"") wieder aus.

Problem: In der Artikelzeile selbst werden die beiden Texte für Batterieverordnung “ja”/“nein” auch absolut korrekt ausgegeben, aber unten, am Ende meines Textes wird immer ein Text ausgegeben, der mir zeigt, dass SetVar() offenbar für JEDE Zeile ausgeführt wirde, obwohl es in einer Cond() Klausel sitzt und NUR dann ausgeführt werden sollte, wenn das Attribut “Batterieverordnung” vorhanden und “ja” ist.

Soll heißen, oben in der Artikelzeile steht dann z.B. “Position 4 enthält keine Batterien!”, es wird also korrekterweise der “False” Teil der Cond() ausgegeben, am Ende der Vorlage steht dann aber plötzlich “Position 4 enthält Batterien!”, es wurde also der “True” Teil der Cond() EBENFALLS ausgeführt!

Ich bin ratlos und würde mich über jede Hilfe freuen.

Danke und Gruß


(combit Support - Patrick Preuschoff) #2

Hallo Dr. Gutberlet,

vielen Dank für Ihren Beitrag.

Leider waren wir nicht in der Lage das von Ihnen beschriebene Verhalten mit Hilfe einer minimierten Beispielanwendung zu reproduzieren. Wir waren hierfür im C# und mit List & Label 22.002 unterwegs. Gerne können wir Ihnen diese Beispielanwendung zum Test bereitstellen, wenn Sie sich mit uns in Verbindung setzen.

Gerne können Sie auch in unserem Supportportal unter https://www.combit.net/supportportal/ einen Support-Case eröffnen, bitte kopieren Sie dabei die relevanten Informationen aus diesem Thread in die Beschreibung.

Mit freundlichen Grüßen

Patrick Preuschoff
Technischer Support
combit GmbH


(Dr. Ingmar Gutberlet) #3

Sehr geehrter Herr Preuschoff,

ich bin leider nur Anwender eines kommerziellen Produktes, dass List & Label verwendet und nicht selbst Kunde bei Ihnen. Entsprechend bleibt mir der Weg mit dem Support-Case leider versperrt.

Sicherlich kann ich versuchen, über den Support des Wawi-Herstellers weiterzukommen, bin mir aber leider (aus Erfahrung) recht sicher, dass diese so gar nicht direkt zur Wawi gehörende Anfrage dort eher versanden würde, da sie global betrachtet von recht geringer Bedeutung ist.

Gibt es irgendeinen anderen Weg, wie ich hier weiterkommen kann? Es ist ja schon gut, dass Sie mein Vorhaben, ein SetVar() in einer Cond() konditional zu verwenden, das Ganze in den Datenzeilen des Berichtscontainers zu tun und die Variable außerhalb des Containers mit NullSafe(GetVar()) auszulesen, nicht bemängelt haben. Ein paar Fragen bleiben aber noch:

  • Muss ich die Variable aber z.B. vor der ersten Nutzung explizit initialisieren?
  • Was passiert also z.B., wenn ich mehrmals hintereinander die Vorschau aufrufe? Behält die Variable den letzten Wert?
  • Falls ja, wo mache ich die Inititalisierung am Besten?
  • Wie ist der Scope der erzeugten Variablen - Global für das Projekt?

Mit freundlichen Grüßen,
Dr. Ingmar Gutberlet