Neu Merkmale auf Etiketten ausgeben

thedoctor

Gut bekanntes Mitglied
23. April 2014
224
9
Hallo!

Ich möchte Merkmale auf Artikeletiketten ausgeben und dies über den List&Label Editor gestalten.

Nun habe ich hier bereits einen Lösungsansatz gefunden, bringe es aber nicht zum laufen.

Was fehlt?

Als Beispiel möchte ich das Merkmal "Breite" ausgeben.

JTL_DirectTableQuery("SELECT tMerkmalWertSprache.cWert FROM tArtikel INNER JOIN tArtikelMerkmal ON tArtikel.kArtikel = tArtikelMerkmal.kArtikel INNER JOIN tMerkmalWertSprache ON tArtikelMerkmal.kMerkmalWert = tMerkmalWertSprache.kMerkmalWert INNER JOIN tMerkmalSprache ON tArtikelMerkmal.kMerkmal = tMerkmalSprache.kMerkmal INNER JOIN tMerkmalGruppeMerkmal ON tArtikelMerkmal.kMerkmal = tMerkmalGruppeMerkmal.kMerkmal INNER JOIN tMerkmalGruppe ON tMerkmalGruppeMerkmal.kMerkmalGruppe = tMerkmalGruppe.kMerkmalGruppe WHERE tMerkmalWertSprache.kSprache=1 AND tMerkmalGruppe.cName = 'Breite' AND tArtikel.cArtNr = '"+Artikel.Artikelnummer+"'",": ","¶")

Wie setze ich den Hinweis "die Sprache sollte man noch definieren, wie bereits "tMerkmalSprache.kSprache = 1" erwähnt" um?

EDIT: Hier der Link zum Foreneintrag:
https://forum.jtl-software.de/threads/list-label-merkmale-auf-etiketten-sql.214792/

Vielen Dank!
 
Zuletzt bearbeitet:

frankell

Sehr aktives Mitglied
9. September 2019
2.685
841
Flensburg
Hallo @thedoctor,

heißt das Merkmal "Breite" oder die Merkmalgruppe? Denn im Code definierst Du das Merkmal nicht. Das ist nicht so schlimm, wenn das gesuchte Merkmal das einzige in der Gruppe "Breite" ist.

Ich frage mich hier aber eher: Hast Du den Code irgendwo "gefunden", möchtest ihn nutzen, weißt aber nicht genau, was der tut? Denn wenn Du SQL beherrschst und auch weißt, was in all den Tabellen enthalten ist, dann könntest Du den Code auch deutlich verschlanken, indem Du einfach kMerkmal des gesuchten Merkmals und kArtikel des Artikels nutzt. Damit wären die JOINs auf tMerkmalSprache, tMerkmalGruppe, tMerkmalGruppeMerkmal und sogar tMerkmalWert und tArtikel obsolet.

Außerdem ergibt der Teil ": " nicht so viel Sinn, da die Ausgabe nur eine Spalte und ggf. mehrere Zeilen enthalten wird. Könnte aber drauf hindeuten, dass Du etwas anderes möchtest.

Wie setze ich den Hinweis "die Sprache sollte man noch definieren, wie bereits "tMerkmalSprache.kSprache = 1" erwähnt" um?

Den Satz verstehe ich leider nicht.

Kannst Du vielleicht noch mal einen Schritt zurück machen und mal als Beispiel nennen, wie Deine Ausgabe aussehen soll?
 

John

Sehr aktives Mitglied
3. März 2012
4.234
1.099
Berlin
Das mit der Gruppe ist sowieso Unfug, weil ein Merkmal namentlich sowieso nicht doppelt auftreten kann

Code:
JTL_DirectQuery ("SELECT tMerkmalWertSprache.cWert FROM tMerkmalWertSprache
JOIN tArtikelMerkmal ON tArtikelMerkmal.kMerkmalWert=tMerkmalWertSprache.kMerkmalWert
JOIN tmerkmal on tArtikelMerkmal.kMerkmal=tmerkmal.kMerkmal
JOIN tMerkmalSprache ON tArtikelMerkmal.kMerkmal=tMerkmalsprache.kMerkmal
WHERE  tArtikelMerkmal.kArtikel="+Fstr$(Artikel.InterneArtikelnummer,"?")+"
AND tMerkmalWertSprache.kSprache=1
AND tMerkmalSprache.cName='Dein-Merkmale-Name'")

Dein-Merkmale-Name noch durch den Namen deines Merkmals ersetzen...
Es wird Deutsch ausgegeben, weil kSprache = 1 gesetzt
 

frankell

Sehr aktives Mitglied
9. September 2019
2.685
841
Flensburg
Beachte bitte, dass der Code nur funktioniert, wenn es zu einem Merkmal nur einen einzigen Merkmalswert gibt. Ein Merkmal kann aber auch mal mehr als eine Ausprägung haben. Nur dass Du das im Hinterkopf hast, wenn das mal auf ein Merkmal zutrifft.
 
  • Gefällt mir
Reaktionen: John

thedoctor

Gut bekanntes Mitglied
23. April 2014
224
9
Problem soeben aufgetreten
Wie kann ich in so ein Merkmal als Liste ausgeben?

danke 🙂
 

John

Sehr aktives Mitglied
3. März 2012
4.234
1.099
Berlin
Müsste so gehen

Code:
JTL_DirectTableQuery ("SELECT tMerkmalWertSprache.cWert FROM tMerkmalWertSprache
JOIN tArtikelMerkmal ON tArtikelMerkmal.kMerkmalWert=tMerkmalWertSprache.kMerkmalWert
JOIN tmerkmal on tArtikelMerkmal.kMerkmal=tmerkmal.kMerkmal
JOIN tMerkmalSprache ON tArtikelMerkmal.kMerkmal=tMerkmalsprache.kMerkmal
WHERE  tArtikelMerkmal.kArtikel="+Fstr$(Artikel.InterneArtikelnummer,"?")+"
AND tMerkmalWertSprache.kSprache=1
AND tMerkmalSprache.cName='Dein-Merkmale-Name'", "", ", ")
 
  • Gefällt mir
Reaktionen: frankell

frankell

Sehr aktives Mitglied
9. September 2019
2.685
841
Flensburg
Wie kann ich in so ein Merkmal als Liste ausgeben?

Mit "Liste" meinst Du wohl ein Trennen der einzelnen Merkmalswerte mit Zeilenumbrüchen. Wenn dem so ist, ersetzt Du aus Johns letztem Code diesen Teil ganz am Ende

Code:
'Dein-Merkmale-Name'", "", ", ")

mit diesem hier:

Code:
'Dein-Merkmale-Name'", "", "¶")

Zu Erläuterung: Das, was nach dem ersten und vor dem zweiten Komma steht, ist der Text, der zwischen auszugebenden Spalten kommt. Da die SQL-Abfrage keine Spalten ausgibt, sondern nur Zeilen, hat John einen leeren Text, also "" gesetzt. Das, was hinter dem zweiten Komma und noch vor der Klammer zu steht, ist der Text, der zwischen ausgegebenen Zeilen kommt. Da die SQL-Abfrage potentiell mehr als eine Zeile ausgibt, werden die Zeilen in Johns Code mit einem [Komma][Leerzeichen] voneinander getrennt, in meinem Vorschlag mit einem Zeilenumbruch (repräsentiert durch das Zeichen ¶). Diese Texttrenner müssen jeweils zwischen Anführungsstriche gesetzt werden. Daher sieht der Code am Ende so unübersichtlich aus.
 

Ähnliche Themen