Hier wird die Konfiguration für den Bereich "Kommissionierung mit Kommliste" (Liefervorschlag) behandelt.
CONFIG.XML
Position in der CONFIG.XML
Einstellungen
|
Knoten |
Mögliche Werte |
Beschreibung |
|---|---|---|
|
StockNumber |
1, 2, 100, ... |
Abbuchungs-Lagernummer.
|
|
CanChangeStockNumber |
True, False |
True (Standard) = Lagernummer kann in dem Fenster durch den Benutzer
|
|
StockLocationNameInputMask |
ann-nn-nn |
Eingabemaske für Lagerortnamen. Wenn angegeben, dürfen nur Lagerorte in
|
|
PrinterName |
\\COMPUTERNAME\Druckername |
Standard-Drucker für alle Dokumente in der Kommissionierung.
|
|
PrinterNameDeliveryNotes |
\\COMPUTERNAME\Druckername |
Druckername für Lieferscheine
|
|
PrinterNameInvoices |
\\COMPUTERNAME\Druckername |
Druckername für Rechnungen
|
|
PrinterNameItemLabels |
\\COMPUTERNAME\Druckername |
Etiketten-Drucker.
|
|
PrintDeliveryNote |
True, False, [leer] |
[leer] = Der Ausdruck wird automatisch angestossen, wenn ein LS/KS erstellt
|
|
PrintInvoice |
True, False, [leer] |
[leer] = Der Rechnungsdruck wird automatisch durchgeführt, wenn eine
|
|
PrintCopiesDeliveryNotes |
1,2,3,8,... |
Anzahl Exemplare für Lieferscheindruck - Wenn angegeben, wird diese Anzahl
|
|
PrintCopiesInvoices |
1,2,3,8,... |
Anzahl Exemplare für Rechnungsdruck - Wenn angegeben, wird diese Anzahl
|
|
PrintLayoutConsignmentNotes |
A,B,C,... |
Druck-Layout für Drucken Kommissionsscheine - Wenn nicht angegeben, wird die
|
|
PrintLayoutDeliveryNotes |
A,B,C,... |
Druck-Layout für Drucken Lieferscheine - Wenn nicht angegeben, wird
|
|
PrintLayoutInvoices |
A,B,C,... |
Druck-Layout für Drucken Rechnungen - Wenn nicht angegeben, wird
|
|
PrintLayoutItemLabels |
A,B,C,... A0002.btw |
Druck-Layout für die Artikel-Etiketten. |
|
AllowGenerateForSaleSerials |
True, False |
True = Bei Artikel mit Seriennummernpflicht-Verkauf kann bei der Seriennummern-
|
|
AllowQuantityInput |
True, False |
True (Standard) = Mengeneingabe-Fenster wird angezeigt und die Menge kann
|
|
ApplyReducedQuantityWithoutConfirmation |
True, False |
True = Wenn die gescannte Menge auf die offene Menge reduziert wird, dann wird
|
|
AutoClose |
True, False |
True = Das Fenster wird nach einer Kommissionierung geschlossen und kehrt
|
|
AutoConfirmStockLocation |
True, False |
True = Der vorgeschlagene Lagerort wird automatisch übernommen ( keine
|
|
ConsignmentInfoStatement |
select distinct grafik2 from angebotspositionen
|
SQL-Statement, welches ausgeführt wird:
|
|
CreateInvoice |
True, False, [leer] |
[leer] (Standard) = Die Rechnungserstellung wird automatisch durchgeführt,
|
|
CreateSingleNotes |
True, False |
True = Wenn die Erstellung von Lieferschein(e)/Kommissionsschein(e) je Auftrag
|
|
ForceConsignmentNote |
True, False |
True = Bei Abschluss der Kommissionierung werden Kommissionsscheine statt
|
|
ForceScanDirectCostItems |
True, False |
True = D-Artikel müssen ebenfalls gescannt werden
|
|
MandatoryColliInput |
True, False |
True = COLLI-Nummer wird abgefragt und ist verpflichtend einzugeben
|
|
ScanOnly |
True, False |
True = Das Eingabefeld wird periodisch geleert, sodass eine Tastatur-Eingabe
|
|
ScanOnlyTime |
10, 20, 30, 100, 300, ... |
Wert in "ms" für den Timer, der das Eingabefeld periodisch
|
|
SelectConsignmentLocation |
True, False |
True = Vor Beginn der Erfassung muss der Kommissionslagerplatz ausgewählt
|
|
SelectConsignmentLocationOnFinish |
True, False |
True = Nach Abschluss der Kommissionierung wird das Fenster zur Auswahl des
|
|
SelectNextRowAfterScan |
[leer], FollowingRow, FirstUnscannedRow |
[leer] (Standard) = Die selektierte Zeile wird nicht verändert
|
|
ShowCreatedNotesSummary |
True, False |
True = wenn nach der Erstellung bzw. nach dem Drucken der Scheine (KS/LS/RE)
|
|
SkipCreateInvoiceForBatchCustomers |
True, False |
True = Wenn eine Rechnung erstellt werden soll ( CreateInvoice=True ), dann wird
|
|
StockLocationSelection |
Allow, Accept, NotAllowed |
Allow = Beliebige Lagerortauswahl möglich
|
|
SuggestedQuantitySelector |
Scanned, Open, Fixed |
Scanned (Standard) = Es wird die Menge aus dem Barcode vorgeschlagen. Wenn
|
|
SuggestedQuantity |
1, 2, 3, ..., 15.5, ..., 100, ... |
Vorgeschlagener Mengeneintrag in Mengenfeld.
|
|
SuggestedQuantityUnit |
Scanned, Delivery, Stock |
Gibt an, welche Mengeneinheit bei der Mengeneingabe primär/initial angezeigt wird.
|
|
WithPackingEmpties |
True, False |
True = Aktiviere Packlisten-Funktionalität. Nach der Kommissionierung bzw. nach
|
|
PackingEmptiesMode Ab SmartCenter Version 2.2021.0607.0
|
BeforeScan, AfterScan |
BeforeScan = Es muss, bevor die Kommissionierung beginnt, ein Packstück
|
|
AutoPrintDeliveryProposal Ab SmartCenter Version 2.2022.0531.0
|
True, False |
True = Automatischer Ausdruck der Kommissionierliste, wenn der Liefervorschlag
|
|
PrinterNameDeliveryProposal Ab SmartCenter Version 2.2022.0531.0
|
\\COMPUTERNAME\Druckername |
Druckername für Kommissionierlisten, wenn der Ausdruck der Kommissionierliste
|
|
PrintLayoutDeliveryProposal Ab SmartCenter Version 2.2022.0531.0
|
A,B,C,... |
Drucklayout der Kommissionierliste, wenn der Ausdruck automatisch erfolgen soll |
Beispiel
<?xml version="1.0" encoding="utf-8" ?>
<Settings>
<StockManagement>
<PrinterName>\\server\HPLaser_Verrechnung</PrinterName>
<CanChangeStockNumber>True</CanChangeStockNumber>
<DeliveryProposalConsignment>
<StockNumber>2</StockNumber>
<PrinterName>\\server\EpsonStylus</PrinterName>
<PrinterNameDeliveryNotes></PrinterNameDeliveryNotes>
<PrintLayoutDeliveryNotes>A</PrintLayoutDeliveryNotes>
<PrintLayoutConsignmentNotes>A</PrintLayoutConsignmentNotes>
<PrintCopiesDeliveryNotes></PrintCopiesDeliveryNotes>
<PrinterNameInvoices></PrinterNameInvoices>
<PrintLayoutInvoices>A</PrintLayoutInvoices>
<PrintCopiesInvoices></PrintCopiesInvoices>
<ScanOnly>False</ScanOnly>
<ScanOnlyTime>300</ScanOnlyTime>
<CreateSingleNotes>True</CreateSingleNotes>
<PrintDeliveryNote>True</PrintDeliveryNote>
<ForceConsignmentNote>False</ForceConsignmentNote>
<SelectConsignmentLocation>False</SelectConsignmentLocation>
<SelectConsignmentLocationOnFinish>False</SelectConsignmentLocationOnFinish>
<CreateInvoice>False</CreateInvoice>
<SkipCreateInvoiceForBatchCustomers></SkipCreateInvoiceForBatchCustomers>
<PrintInvoice>False</PrintInvoice>
<SuggestedQuantitySelector>Scanned</SuggestedQuantitySelector>
<SuggestedQuantity>1</SuggestedQuantity>
<AllowQuantityInput>True</AllowQuantityInput>
<SuggestedQuantityUnit>Scanned</SuggestedQuantityUnit>
<ForceEnterQuantity>False</ForceEnterQuantity>
<MandatoryColliInput>True</MandatoryColliInput>
<AllowGenerateForSaleSerials>True</AllowGenerateForSaleSerials>
<StockLocationSelection>Accept</StockLocationSelection>
<ShowCreatedNotesSummary>False</ShowCreatedNotesSummary>
<AutoClose>False</AutoClose>
<ConsignmentInfoStatement>select distinct grafik2 from angebotspositionen where aposinx in (select aposinx from liefauf where taninx={DeliveryProposalNumber} and artnr='{ItemNumber}')</ConsignmentInfoStatement>
<ApplyReducedQuantityWithoutConfirmation>False</ApplyReducedQuantityWithoutConfirmation>
<SelectNextRowAfterScan>FollowingRow</SelectNextRowAfterScan>
<ForceScanDirectCostItems>False</ForceScanDirectCostItems>
<StockLocationNameInputMask>ann-nn-nn</StockLocationNameInputMask>
<WithPackingEmpties>False</WithPackingEmpties>
<AutoConfirmStockLocation>False</AutoConfirmStockLocation>
</DeliveryProposalConsignment>
</StockManagement>
</Settings>
LAYOUT.XML
-- ToDo --
Datenbankstruktur-Richtlinien
Aktuell sind dafür die "Lagerorte zwingend" notwendig, was in manchen Fällen verwendbar ist, in anderen aber unbrauchbar. Das System benötigt dann zumindest 2 Lagerorte (1 nomaler, 1 KommPlatz)
Schritt-für-Schritt
-
Lagerorte anlegen per SQL anhand einer Liste anlegen
-
Kommissionierlagerplatz anlegen (Lagerort mit der Eigenschaft "Kommissionierlagerplatz")
-
Lagerortbuchungen aktivieren (in Grundlageneinstellungen)
-
Trigger deaktivieren
-
SQL-Statements für alle Dokumente im System
-
Trigger aktivieren
-
Lagerbestand aktualisieren
Details
Lagerorte anlegen per SQL anhand einer Liste anlegen
Excel-Datei erstellen
Lagerorte anlegen per SQL anhand einer Liste des Kunden mit Lagernummer, Nummer, Sortierung und Name:
=VERKETTEN("insert into Lagerorte (Lagernummer, Nummer, Sortierung, Name) values (";A2;",";B2;",";D2;",'";C2;"');")
Lagerplätze anlegen
In den Lager-Einstellungen wird je gewünschtem Lager ein eigener Kommissionierlagerplatz und zumindest 1 "normaler" Lagerort angelegt:
insert into lagerorte (lagernummer, nummer, name, ko_platz) select nummer, 1, 'eins', 0 from lager where
nummer<1000000 and not exists(select '' from lagerorte where nummer=1 and lagerorte.lagernummer=lager.
nummer);
insert into lagerorte (lagernummer, nummer, name, ko_platz) select nummer, 9999, 'Kommissionierung', 1 from
lager where nummer<1000000 and not exists(select ''from lagerorte where ko_platz=1 and lagerorte.
lagernummer=lager.nummer);
commit;
Vorbereitungen zur Änderung der Lagerorte
-
Entfernen aller Einträge in INVM, ZAEHLLISTE, INVM_SN, INVM_CN, indem die bestehenden Einträge aus ALLEN aktuell im System
befindlichen Zähllisten gebucht (in die Inventur übertragen) oder gelöscht werden. -
Alle offenen Warenkörbe löschen
Lagerortbuchungen aktivieren
Trigger deaktivieren
Vorher DB Trigger deaktivieren auf ANGEBOTSPOSITIONEN und BESTELLPOSITIONEN
Oracle DB:
alter table Angebotspositionen disable all triggers;
alter table Bestellpositionen disable all triggers;
SQL DB
DISABLE TRIGGER ALL ON Angebotspositionen;
DISABLE TRIGGER ALL ON Bestellpositionen;
SQL-Statements für alle Dokumente
update artikelstamm set lagerort =1 where lager=1;
update defaultlager set lagerort=1 where lager=1;
insert into defaultlager (artikelnummer, lager, lagerort)
select a.artikelnummer, 1, 1 from artikelstamm a where a.lager=1 and not exists (select '' from defaultlager d where a.artikelnummer=d.artikelnummer and d.lager=1 and d.lagerort=1);
update defaultlager set lo_name=(select name from lagerorte where defaultlager.lagerort=lagerorte.nummer and defaultlager.lager=lagerorte.lagernummer);
commit;
update kartei set lagerort=1 where lager=1;
update angebotspositionen set lagerort=1 where lager=1;
update lspositionen set lagerort=1 where lager=1;
update repositionen set lagerort=1 where lager=1;
update bestellpositionen set lagerort=1 where lager=1;
update bestellvorschlag set lagerort=1 where lager=1;
update ls_wepositionen set lagerort=1 where lager=1;
update wepositionen set lagerort=1 where lager=1;
update invpositionen set lagerort=1 where lager=1;
update liefauf set lagerort=1 where lager=1;
update fpos set lagerort=1 where lager=1;
update rappositionen set lagerort=1 where lager=1;
update dwh_pos set lagerort=1 where lager=1;
update dwh_verkauf set lagerort=1 where lager=1;
update fapositionen set entnahme_lagerort=1 where dispo_lager=1;
update fapositionen set dispo_lagerort=1 where dispo_lager=1;
update fer set ziel_lagerort=1 where ziel_lager=1;
update schnellumbuchung set abbuchungslagerort=1 where abbuchungslager=1;
update schnellumbuchung set zubuchungslagerort=1 where zubuchungslager=1;
commit;
-- Wenn es Artikel mit Chargennummernpflicht gibt:
update chargennummer set lagerort=1 where lager=1;
update chargenbestand set lagerort=1 where lager=1;
-- Wenn es Artikel mit Seriennummernpflicht gibt:
update sernr set lagerort=1 where lager=1;
commit;
-- Optional kann mit folgenden Statements der Bestand manuell aktualisiert werden (ansonten nach Reaktivierung der Trigger die Programmfunktion nutzen):
insert into lagerbestand (artnr, lager, lagerort, bestand, verfuegbar) select artnr, lager, 1, 0, 0 from lagerbestand where lager=1 and lagerort is null
update lagerbestand b1 set bestand=(select b2.bestand from lagerbestand b2 where b2.lager=1 and b2.lagerort is null and b2.artnr=b1.artnr) where b2.lager=1 and b2.lagerort=1;
update lagerbestand set bestand=0 where lager=1 and lagerort is null;
update lagerbestand set verfuegbar=bestand where lager=1;
update lagerbestand set off_auf=0;
update lagerbestand set off_auf=isnull((select off_auf from v_off_auf where v_off_auf.artikelnummer=lagerbestand.artnr and v_off_auf.lager=lagerbestand.lager and isnull(v_off_auf.lagerort,-1)=isnull(lagerbestand.lagerort,-1)),0)
where artnr in (select artikelnummer from v_off_auf);
update lagerbestand set off_bes=0;
update lagerbestand set off_bes=isnull((select off_bes from v_off_bes where v_off_bes.artikelnummer=lagerbestand.artnr and v_off_bes.lager=lagerbestand.lager and isnull(v_off_bes.lagerort,-1)=isnull(lagerbestand.lagerort,-1)),0)
where artnr in (select artikelnummer from v_off_bes);
commit;
Trigger aktivieren
DB Trigger wieder aktivieren
Oracle DB:
alter table Angebotspositionen enable all triggers;
alter table Bestellpositionen enable all triggers;
SQL DB
ENABLE TRIGGER ALL ON Angebotspositionen;
ENABLE TRIGGER ALL ON Bestellpositionen;
Lagerort zwingend aktivieren
Beim umgestellten Lager bzw. bei den umgestellten Lagern muss "Lagerort zwingend" aktiviert werden, damit künftige Buchungen ohne Lagerort
verhindert werden.
Bereitstellungslagerort und Default-Lagerort je Lager
In den Lagereinstellungen gibt es die Spalten "Bereitstellungsplatz" (LAGER.BEREITST_LAGERORT) und "Lagerort" (LAGER.DEF_LAGERORT).
Diese sollten nun ebenfalls noch befüllt werden - der Bereitstellungsplatz mit dem Kommissionierlagerort des Lagers und der Lagerort mit dem
"Hauptlagerort".
Lagerbestände aktualisieren