Hallo an Alle,
ich habe meine Lösung für die
1.6 angepasst! 🥳 Es gehen nun auch die individuellen Stücklisten.
Beispiel
Hier habe ich eine Freiposition zu dem ersten Artikel hinzugefügt, sowie Kommentare zu den einzelnen Komponenten. Bei der Position 8 habe ich die Menge verändert, 100 Stk sind in dem Stücklistenartikel hinterlegt.
Ja, ich habe Überschriften und Textpositionen.
How-To
Ich gehe das ganze mal am Beispiel des Angebots durch:
Ich habe eine "PositionTable" und ich arbeite wieder mit Zeilendefinitionen und der Funktion "
JTL_DirectTableQuery".
Überschrifts-Zeile
In der Zeile "
Components header" wird die Überschrift für die Komponentenliste angezeigt.
Die Anzeigebedingung der Zeile:
Code:
SalesQuotationPosition.BillOfMaterialsPosition <> "None" and JTL_GetProductCustomField("StkLst nicht andrucken", SalesQuotationPosition.ProductInternalId) <> "1"
Das heißt, die Zeile wird nur angezeigt, wenn es sich um eine Stückliste handelt und das Frei-Feld "
StkLst nicht andrucken" nicht gesetzt ist.
In meinem Fall steht im header nur "
Position beinhaltet folgende Komponenten:" und "
Hinweis"
Inhalts-Zeile
In der Zeile "
Components description" werden die Komponenten der Stückliste ausgegeben.
Die Anzeigebedingung ist die Selbe wie bei "Components header".
Der Inhalt der Spalten wird nun etwas anders ermittelt. Die nötigen Informationen sind in der Tabelle "
Verkauf.tAuftragPosition". Dort stehen die individuell vergebenen Mengen, Preise, Artikelnamen, Komponenten, etc. des Angebots.
Diese Tabelle wird gefiltert nach
StücklistenId,
ArtikelId und
AuftragId. Dabei ist wichtig, dass die
ArtikelId nicht die gleiche ist, wie die
ArtikelId des Stücklistenartikels, da dieser sonst mit in den Komponenten angezeigt wird. Die
ArtikelId kann auch leer sein, damit Freipositionen mit angezeigt werden.
Sortiert wird alles nach der Sortiernummer, sprich Positions-Nummer.
Spalte "
Pos", Inhalt:
Code:
JTL_DirectTableQuery("select nSort from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Spalte "
SKU", Inhalt:
Code:
JTL_DirectTableQuery("SELECT ISNULL(cArtNr, '-FREIPOSITION-') from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Wenn die Artikelnummer leer ist, dann schreibe "-FREIPOSITION-"
Spalte "
Name", Inhalt:
Code:
JTL_DirectTableQuery("select cName from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Spalte "
Quantity", Inhalt:
Code:
JTL_DirectTableQuery("SELECT FORMAT(fAnzahl, 'F', '"+Report.CultureInfo+"') from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Hier wird die Anzahl der Komponente als Kommazahl für die Berichts-Sprache formatiert.
Spalte "
Unit", Inhalt:
Code:
JTL_DirectTableQuery("select cEinheit from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Spalte "
Hint", Inhalt:
Code:
JTL_DirectTableQuery("SELECT cHinweis from Verkauf.tAuftragPosition
WHERE kAuftragStueckliste = " + str$(SalesQuotationPosition.BillOfMaterialsPositionParentId,0,0)+
" AND (kArtikel != "+str$(SalesQuotationPosition.ProductInternalId,0,0)+ "OR kArtikel is null)"+
" AND kAuftrag = " + str$(Report.InternalId,0,0)+
" ORDER BY nSort"," ","¶")
Wenn ihr wissen wollt, was ihr alles ausgeben könnt, dann würde ich hier schauen und nach dem Tabellennamen schauen:
https://wawi-db.jtl-software.de/tables/1.6.38.2
Analog funktioniert das ganze mit Aufträgen und Rechnungen. Bei Rechnungen ist aber die Tabelle "
Rechnung.tRechnungPosition" zu nehmen.
Edit:
Ich habe auf den Lieferscheinen auch die Komponenten mit Seriennummern ausgegeben, wenn Interesse da ist, kann ich auch erklären, wie ich es da gelöst habe.