Hallo
Obwohl ich nach wie vor nicht fähig bin, aus einem JTL_DirectTableQuery eine richtige Tabelle zu produzieren (siehe oben) habe ich nun eine gar nicht so quick, hingegen ziemlich dirty Lösung gefunden, die unseren Bedürfnissen genügt:
Ich benutze ein JTL_DirectTableQuery, das als Resultat die ganze Tabelle liefert, welche dann in einem Textfeld dargestellt werden kann. Dazu habe ich mit folgendem Code die Variable @openposition_data kreiert:
JTL_DirectTableQuery ("
SELECT CONVERT (decimal(24,0) , lvAuftragsposition.fAnzahl), lvAuftragsposition.cString
FROM Verkauf.lvAuftragsposition
WHERE kBestellung =
(SELECT kBestellung
FROM dbo.tBestellung
WHERE cBestellNr = LEFT((SELECT cBestellNr
FROM dbo.tBestellung
WHERE kBestellung = (SELECT kBestellung FROM dbo.tLieferschein WHERE kLieferschein = "+str$(Vorgang.InterneLieferscheinnummer,0,0)+")) , 9))
"," x ","¶")
|
Erklärung:
Unsere Auftragsnummern bestehen aus 9 Zeichen. Die Teillieferungen erhalten die gleiche Auftragsnummer mit einem Suffix und der Auftrag mit der neunstelligen Nummer enthält dann nur noch die noch nicht aufgelieferten Artikel.
Um die Auftragspositionen auszulesen wird die Bestell-ID (kBestellung) benötigt. Das ist die ID der Bestellung, deren Auftragsnummer gleich den linken 9 Zeichen der Auftragsnummer der Teillieferung ist.
Die Teillieferung wird anhand der internen Lieferscheinnummer (Vorgang.InterneLieferscheinnummer bzw. bei den englischen Variabeln: Report.InternalId) gefunden.
Die ausgelesenen Daten (Anzahl und Name der fehlenden Auftragspositionen) werden durch " x ", und die Datenzeilen durch einen Zeilenvorschub getrennt, so dass eine Tabelle in der Form
2 x Artikel A
5 x Artikel B
herauskommt.
Das ganze kann dann in einem Textfeld dargestellt werden. Z.B.:
"¶******************************************************************************************************************¶Folgende Artikel fehlen und werden nachgeliefert:¶¶" + @openposition_data + "¶¶******************************************************************************************************************¶" |
Das wichtigste daran sind die Zeilen mit den Sternchen, damit unsere Kunden auf den Hinweis aufmerksam werden, bevor sie anrufen und sich über die fehlenden Artikel beschweren.
Angezeigt wird das Textfeld nur, wenn die Auftragsnummer länger als 9 Zeichen ist. Dazu habe ich die Benutzervariable @auftragsnummer kreiert (mit Vorgang.Auftrag.Auftragsnummer hat es nicht geklappt):
JTL_DirectTableQuery ("
SELECT cBestellNr
FROM dbo.tBestellung
WHERE kBestellung = (SELECT kBestellung FROM dbo.tLieferschein WHERE kLieferschein = "+str$(Vorgang.InterneLieferscheinnummer,0,0)+")
"," ","¶")
|
Die Darstellungsoption lautet:
(Cond(Len(@auftragsnummer)>9,TRUE,FALSE))
P.S. Bei Lieferungen ohne Rückstände enthält die Variable @openposition_data die Positionen der Lieferung (da die Lieferung ja der Auftrag mit der neunstelligen Auftragsnummer ist). Durch Ändern der Darstellungsbedingung (Len(@auftragsnummer)>0) kann das Layout in der Vorschau begutachtet werden, auch wenn die letzte Lieferung keine Rückstände aufgewiesen hat.
Auch wenn das natürlich nicht eine besonders saubere Methode ist, hoffe ich trotzdem, dass diese Tipps helfen können, erboste Kundenreaktionen zu vermeiden.
mfg, Daniel