Resolve-EulandaArticleId #
ÜBERSICHT #
Findet die ArtikelID eines Artikels anhand verschiedener Match- Strategien - inkl. Lieferanten-Composite-Lookup.
SYNTAX #
Resolve-EulandaArticleId [-Conn] <__ComObject> [-ArtNummer] <string> [[-Barcode] <string>]
[[-SupplierId] <int>] [[-Strategy] <string[]>] [<CommonParameters>]
BESCHREIBUNG #
Zentraler Lookup-Worker für den Excel-Import beim Lieferanten- Szenario. Probiert je nach -Strategy verschiedene Identifier durch und liefert ein Resultat-Objekt mit der gefundenen ArtikelID plus Hinweis, welcher Pfad gegriffen hat.
Fünf mögliche Match-Pfade:
SupplierComposite - bei SupplierId>0 wird zuerst geprüft, ob der Lieferantenartikel-Datensatz bereits existiert (KrArtikel.ArtNummer + KrArtikel.KreditorID). Trifft das zu, ist die ArtikelID eindeutig - sonst sind die folgenden Strategien überhaupt erst nötig.
Barcode - via SQL-Funktion cnf_ArFindBarcode(@barcode). Wird nur ausprobiert, wenn ‘Barcode’ in -Strategy steht und -Barcode übergeben wurde.
ArtNummer - SELECT TOP 1 ID FROM Artikel WHERE ArtNummer = @nr. Wird nur ausprobiert, wenn ‘ArtNummer’ in -Strategy steht.
NewNumbered - nur im Lieferanten-Modus: ArtNummer existiert im eigenen Stamm, gehört aber NICHT zu diesem Lieferanten. Dann wird per cnf_ArUniqueArtNummer eine eindeutige neue Nummer generiert (‘4711 (1)’ / ‘4711 (2)’ / …) und im Resultat als NewArtNummer geliefert. Der Caller muss damit den neuen ARTIKEL- und KRARTIKEL-Datensatz anlegen.
NotFound - kein Match. Caller legt komplett neu an.
Strategie-Reihenfolge lässt sich umstellen: -Strategy ‘Barcode’, ‘ArtNummer’ (Default) probiert erst den Barcode, dann die ArtNummer; -Strategy ‘ArtNummer’,‘Barcode’ kehrt es um; -Strategy ‘ArtNummer’ deaktiviert den Barcode-Pfad ganz.
PARAMETER #
-Conn #
Type: __ComObject
Offene ADODB-Verbindung. Caller-owns-Connection.
-ArtNummer #
Type: string
Excel-Spalte ARTNUMMER. Pflicht (auch wenn nur Barcode matchen soll - Eulanda braucht die ArtNummer für den Schreib-Pfad).
-Barcode #
Type: string
Excel-Spalte BARCODE/GTIN/EAN. Optional; wenn leer wird der Barcode-Pfad übersprungen.
-SupplierId #
Type: int
Default: 0
Kreditor.ID des Lieferanten (NICHT Adresse.ID - Eulanda hat Kreditor als eigene 1:1-Sub-Tabelle zur Adresse). Diese ID bekommt der Caller via Get-EulSupplierList.Id zurück. 0 oder weggelassen = eigener Stamm (kein Composite-Lookup, kein NewNumbered).
-Strategy #
Type: string[]
Default: @('Barcode'
Reihenfolge der Match-Strategien (ohne Composite und NewNumbered, die sind context-getrieben). Default @(‘Barcode’,‘ArtNummer’).
AUSGABEN #
[PSCustomObject] mit Eigenschaften:
ArticleId [int|$null] Gefundene Artikel.ID, oder $null bei NewNumbered/NotFound (Caller muss INSERT) MatchedBy [string] ‘SupplierComposite’ | ‘Barcode’ | ‘ArtNummer’ | ‘NewNumbered’ | ‘NotFound’ NewArtNummer [string|’’] Bei MatchedBy=‘NewNumbered’ die hochgezählte Nummer; sonst leer.
BEISPIELE #
# Eigener Stamm, ArtNummer-Lookup:
$r = Resolve-EulandaArticleId -Conn $conn -ArtNummer 'A1000'
if ($r.MatchedBy -eq 'ArtNummer') { "Treffer ID=$($r.ArticleId)" }
# Lieferanten-Import mit Barcode-Vorrang:
$r = Resolve-EulandaArticleId -Conn $conn -ArtNummer '4711' -Barcode '4012345678901' -SupplierId 17
switch ($r.MatchedBy) {
'SupplierComposite' { "Update bestehenden KrArtikel" }
'Barcode' { "Anhängen an Artikel.ID=$($r.ArticleId)" }
'ArtNummer' { "Anhängen an Artikel.ID=$($r.ArticleId)" }
'NewNumbered' { "Neuer Artikel '$($r.NewArtNummer)' + neuer KrArtikel" }
'NotFound' { "Beide neu anlegen mit ArtNummer '4711'" }
}
VERWANDTE LINKS #
HINWEISE #
Worker für Import-EulFromExcel im Lieferanten-Modus. Komponenten aus dem alten Delphi-Wizard (emExchangeExcel.pas, elExchangeSupplier.pas), auf PowerShell übertragen. Stored Functions cnf_ArFindBarcode und cnf_ArUniqueArtNummer kommen aus dem EULANDA-DB-Schema.