PATEDI NT.Bestellungsexport: Unterschied zwischen den Versionen
Aus PPwiki
Schild (Diskussion | Beiträge) |
Schild (Diskussion | Beiträge) (→SQL) |
||
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 7: | Zeile 7: | ||
Folgendes wird exportiert: | Folgendes wird exportiert: | ||
− | BY (Buyer): Über B_BESTHEAD.FIRMNR wird die dazugehörige Firma ermittelt und über B_FIRMA.KNDNR dann der Buyer (ILN vom Kundenstamm wird als E_ORDER_ADDRESS.ILN exportiert) | + | * BY (Buyer): Über B_BESTHEAD.FIRMNR wird die dazugehörige Firma ermittelt und über B_FIRMA.KNDNR dann der Buyer (ILN vom Kundenstamm wird als E_ORDER_ADDRESS.ILN exportiert) |
− | SU (Supplier): Über B_BESTHEAD.LIEFNR wird der dazugehörige Lieferant ermittelt. B_LIEFERANT.ILN wird zu E_ORDER_ADDRESS.ILN | + | * SU (Supplier): Über B_BESTHEAD.LIEFNR wird der dazugehörige Lieferant ermittelt. B_LIEFERANT.ILN wird zu E_ORDER_ADDRESS.ILN |
− | DP (Delivery Partner): Über B_BESTHEAD.KNDNR wird der Delivery Partner ermittelt (B_KNDSTAMM.KNDNR wird zur E_ORDER_ADDRESS.ILN) | + | * DP (Delivery Partner): Über B_BESTHEAD.KNDNR wird der Delivery Partner ermittelt (B_KNDSTAMM.KNDNR wird zur E_ORDER_ADDRESS.ILN) |
− | DA (Delivery Address): Die Addressdaten aus B_BESTHEAD (E_ORDER_ADDRESS.ILN => Gleich ILN wie für DP) | + | * DA (Delivery Address): Die Addressdaten aus B_BESTHEAD (E_ORDER_ADDRESS.ILN => Gleich ILN wie für DP) |
− | BA (Broker Address): Diese wird nur geschrieben wenn ein Auftrag zur Bestellung gefunden wird (über B_BESTHEAD.VONAUFTRNR). Wenn ein Auftrag gefunden wird, wird die Adresse von B_AUFTRAG.RKNDNR ermittelt. B_KNDSTAMM.ILNDATENEMPF wird als E_ORDER_ADDRESS.ILN exportiert. | + | * BA (Broker Address): Diese wird nur geschrieben wenn ein Auftrag zur Bestellung gefunden wird (über B_BESTHEAD.VONAUFTRNR). Wenn ein Auftrag gefunden wird, wird die Adresse von B_AUFTRAG.RKNDNR ermittelt. * * B_KNDSTAMM.ILNDATENEMPF wird als E_ORDER_ADDRESS.ILN exportiert. |
− | + | (von Daniel Posch 7.9.2017 ) | |
− | + | ||
+ | == Adressmappings == | ||
+ | |||
+ | * Ab ExchangeGate Versionen von November 2019, z.B. 9.n.n.nnnn. | ||
+ | * Über PAT > Wartung -> Mappings PATEDEC | ||
+ | ** In der ersten Combobox wird die ILN des Lieferanten ausgewählt werden (oder PATEDI_NT für alle?). | ||
+ | ** Dort sollten u.a. alle ILNs von Lieferanten angezeigt werden. | ||
+ | ** In der zweiten Combobox wird ''Kundenmaping'' ausgewählt. | ||
+ | ** ''Eigene ID'' ist die ILN aus dem PAT, ''Fremde ILN'' entsprechend die ILN die stattdessen in den Export eingetragen werden soll | ||
+ | * Alle(?) Adressen im Export können gemappt werden | ||
+ | * Schreibt in b_konvert | ||
+ | * b_konvert.firmnr wird nicht berücksichtigt(zumal sie sich beim Lieferanten ja manchmal erst aus dem Mapping ergibt) | ||
+ | (Martin Bretterklieber 2020-10-16) | ||
== SQL == | == SQL == | ||
Es werden alle Bestellungen exportiert wo folgendes zutrifft: | Es werden alle Bestellungen exportiert wo folgendes zutrifft: | ||
+ | <pre> | ||
String stmnt = "SELECT DISTINCT " + selectColumns + " FROM B_BESTHEAD" + | String stmnt = "SELECT DISTINCT " + selectColumns + " FROM B_BESTHEAD" + | ||
" LEFT OUTER JOIN B_BESTCOL ON B_BESTHEAD.FIRMNR = B_BESTCOL.FIRMNR AND B_BESTHEAD.BESTNR = B_BESTCOL.BESTNR " + | " LEFT OUTER JOIN B_BESTCOL ON B_BESTHEAD.FIRMNR = B_BESTCOL.FIRMNR AND B_BESTHEAD.BESTNR = B_BESTCOL.BESTNR " + | ||
Zeile 23: | Zeile 36: | ||
" AND ((B_BESTHEAD.EDISTATUS !='E' OR B_BESTHEAD.EDISTATUS IS NULL) OR B_BESTCOL.EXPORTUP ='+')" + | " AND ((B_BESTHEAD.EDISTATUS !='E' OR B_BESTHEAD.EDISTATUS IS NULL) OR B_BESTCOL.EXPORTUP ='+')" + | ||
" AND B_BESTCOL.STATUS IN ('BE','ST') AND B_BESTCOL.LFDATUM >= :LFDATUM"; | " AND B_BESTCOL.STATUS IN ('BE','ST') AND B_BESTCOL.LFDATUM >= :LFDATUM"; | ||
− | + | </pre> | |
+ | |||
+ | '''ACHTUNG''': Es werden Bestellungen exportiert, bei denen B_BESTHEAD.EDISTATUS nicht 'E' '''oder''' B_BESTCOL.EXPORTUP '+' ist. | ||
Es gibt einen Trigger welcher EXPORTUP auf + setzen. Genaueres dazu kann auch denk ich Roland oder Astrid sagen. | Es gibt einen Trigger welcher EXPORTUP auf + setzen. Genaueres dazu kann auch denk ich Roland oder Astrid sagen. | ||
− | |||
== Voraussetzungen == | == Voraussetzungen == | ||
=== Firma, aus der exportiert wird === | === Firma, aus der exportiert wird === | ||
− | + | * Deren Kunde braucht eine ILN | |
− | + | * Dieser Kunde braucht einen Eintrag für die Firma (b_kndfirm,a), aus der exportiert werden soll | |
=== Lieferant, für den exportiert wird === | === Lieferant, für den exportiert wird === | ||
− | + | * Export: ILN, Exporttyp Bestellungen = PO_NT_EXP | |
− | + | * Sonstiges: Bestellungen automatisch exportieren | |
− | + | * Sonstiges: Bestellungen automatisch erzeugen, wenn gewünscht | |
=== ExchangeGate > Jobs === | === ExchangeGate > Jobs === | ||
− | + | * Reference: Liefnr (nicht ILN?) | |
− | + | * Max. entries per file: 1 | |
=== Prozedur PAT_WRITE_TRANSFER wird u.U benötigt === | === Prozedur PAT_WRITE_TRANSFER wird u.U benötigt === | ||
<pre> | <pre> | ||
− | create or replace | + | create or replace PROCEDURE "PAT_WRITE_TRANSFER" |
− | PROCEDURE PAT_WRITE_TRANSFER | ||
/* | /* | ||
| CONCEPT Data Systems GmbH (C) 2011 | | CONCEPT Data Systems GmbH (C) 2011 | ||
| PAT_WRITE_TRANSFER - Die Procedure erzeugt Eintraege im PAT Transfer. | | PAT_WRITE_TRANSFER - Die Procedure erzeugt Eintraege im PAT Transfer. | ||
| Author: HB | | Author: HB | ||
− | | Stand: | + | | Stand: 10.10.2013 Version 1.1 |
*/ | */ | ||
( | ( | ||
Zeile 67: | Zeile 80: | ||
sPosition number(3); | sPosition number(3); | ||
i number(3) := 0; | i number(3) := 0; | ||
− | + | nStandortExist number; | |
− | + | sBETRIEB varchar2(3); | |
+ | sZENTRALE varchar2(3); | ||
--Declare for exception block | --Declare for exception block | ||
− | |||
err_msg b_log.text%TYPE; | err_msg b_log.text%TYPE; | ||
e_loglevel VARCHAR2(4) := '30'; | e_loglevel VARCHAR2(4) := '30'; | ||
BEGIN | BEGIN | ||
− | select value into | + | select count(value) into nStandortExist from settings where switch='TRANSFER_FIRMNR_STANDORT' and workstation='DEFAULT' and value is not null; |
− | select value into | + | IF nStandortExist = 1 THEN |
+ | select value into sBetrieb from settings where switch='TRANSFER_FIRMNR_STANDORT' and workstation='DEFAULT'; | ||
+ | ELSE | ||
+ | select value into sBetrieb from settings where switch='BETRIEB' and workstation='DEFAULT'; | ||
+ | END IF; | ||
+ | select value into sZENTRALE from settings where switch='FIRMNR_ZENTRALE' and workstation='DEFAULT'; | ||
sTR_FILIALE1_org :='++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'; | sTR_FILIALE1_org :='++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'; | ||
--Get Timest | --Get Timest | ||
PAT_TIME.GetTimest (ttransfer.TIMEST); | PAT_TIME.GetTimest (ttransfer.TIMEST); | ||
− | IF | + | IF sBETRIEB = sZENTRALE THEN |
− | ttransfer.SRC := | + | ttransfer.SRC := sZENTRALE; |
− | ttransfer.DEST := | + | ttransfer.DEST := sZENTRALE; |
OPEN sFIRMNR_CUR; | OPEN sFIRMNR_CUR; | ||
Zeile 92: | Zeile 110: | ||
EXIT WHEN sFIRMNR_CUR%NOTFOUND; | EXIT WHEN sFIRMNR_CUR%NOTFOUND; | ||
sPosition := to_number(sfirmnr_rec.firmnr); | sPosition := to_number(sfirmnr_rec.firmnr); | ||
− | IF i < 1 and sfirmnr_rec.firmnr != to_number( | + | IF i < 1 and sfirmnr_rec.firmnr != to_number(sBETRIEB) THEN |
SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; | SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; | ||
− | ELSIF i < 1 and sfirmnr_rec.firmnr = to_number( | + | ELSIF i < 1 and sfirmnr_rec.firmnr = to_number(sBETRIEB) THEN |
sTR_FILIALE1 := sTR_FILIALE1_org; | sTR_FILIALE1 := sTR_FILIALE1_org; | ||
− | ELSIF i >= 1 and sfirmnr_rec.firmnr != to_number( | + | ELSIF i >= 1 and sfirmnr_rec.firmnr != to_number(sBETRIEB) THEN |
SELECT REGEXP_REPLACE(sTR_FILIALE1,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; | SELECT REGEXP_REPLACE(sTR_FILIALE1,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; | ||
END IF; | END IF; | ||
Zeile 104: | Zeile 122: | ||
ELSE | ELSE | ||
− | ttransfer.SRC := | + | ttransfer.SRC := sBETRIEB; |
− | ttransfer.DEST := | + | ttransfer.DEST := sZENTRALE; |
− | SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',to_char( | + | SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',to_char(sZENTRALE),1) into sTR_FILIALE1 from dual; |
END IF; | END IF; | ||
Zeile 135: | Zeile 153: | ||
when OTHERS then | when OTHERS then | ||
err_msg := sqlerrm; | err_msg := sqlerrm; | ||
− | |||
− | |||
Insert into b_log (Timest,workstation,title,text,loglevel) | Insert into b_log (Timest,workstation,title,text,loglevel) | ||
− | Values ( | + | Values (pat_time.fgettimest,'PROCEDURE.PAT_WRITE_TRANSFER','ERROR',err_msg,e_loglevel); |
end; | end; | ||
− | |||
</pre> | </pre> |
Aktuelle Version vom 20. Januar 2022, 15:10 Uhr
siehe auch [Bestellungen_aus_Auftraegen]
Inhaltsverzeichnis
1 Adressen
Folgendes wird exportiert:
- BY (Buyer): Über B_BESTHEAD.FIRMNR wird die dazugehörige Firma ermittelt und über B_FIRMA.KNDNR dann der Buyer (ILN vom Kundenstamm wird als E_ORDER_ADDRESS.ILN exportiert)
- SU (Supplier): Über B_BESTHEAD.LIEFNR wird der dazugehörige Lieferant ermittelt. B_LIEFERANT.ILN wird zu E_ORDER_ADDRESS.ILN
- DP (Delivery Partner): Über B_BESTHEAD.KNDNR wird der Delivery Partner ermittelt (B_KNDSTAMM.KNDNR wird zur E_ORDER_ADDRESS.ILN)
- DA (Delivery Address): Die Addressdaten aus B_BESTHEAD (E_ORDER_ADDRESS.ILN => Gleich ILN wie für DP)
- BA (Broker Address): Diese wird nur geschrieben wenn ein Auftrag zur Bestellung gefunden wird (über B_BESTHEAD.VONAUFTRNR). Wenn ein Auftrag gefunden wird, wird die Adresse von B_AUFTRAG.RKNDNR ermittelt. * * B_KNDSTAMM.ILNDATENEMPF wird als E_ORDER_ADDRESS.ILN exportiert.
(von Daniel Posch 7.9.2017 )
2 Adressmappings
- Ab ExchangeGate Versionen von November 2019, z.B. 9.n.n.nnnn.
- Über PAT > Wartung -> Mappings PATEDEC
- In der ersten Combobox wird die ILN des Lieferanten ausgewählt werden (oder PATEDI_NT für alle?).
- Dort sollten u.a. alle ILNs von Lieferanten angezeigt werden.
- In der zweiten Combobox wird Kundenmaping ausgewählt.
- Eigene ID ist die ILN aus dem PAT, Fremde ILN entsprechend die ILN die stattdessen in den Export eingetragen werden soll
- Alle(?) Adressen im Export können gemappt werden
- Schreibt in b_konvert
- b_konvert.firmnr wird nicht berücksichtigt(zumal sie sich beim Lieferanten ja manchmal erst aus dem Mapping ergibt)
(Martin Bretterklieber 2020-10-16)
3 SQL
Es werden alle Bestellungen exportiert wo folgendes zutrifft:
String stmnt = "SELECT DISTINCT " + selectColumns + " FROM B_BESTHEAD" + " LEFT OUTER JOIN B_BESTCOL ON B_BESTHEAD.FIRMNR = B_BESTCOL.FIRMNR AND B_BESTHEAD.BESTNR = B_BESTCOL.BESTNR " + " WHERE B_BESTHEAD.LIEFNR = :LIEFNR " + " AND ((B_BESTHEAD.EDISTATUS !='E' OR B_BESTHEAD.EDISTATUS IS NULL) OR B_BESTCOL.EXPORTUP ='+')" + " AND B_BESTCOL.STATUS IN ('BE','ST') AND B_BESTCOL.LFDATUM >= :LFDATUM";
ACHTUNG: Es werden Bestellungen exportiert, bei denen B_BESTHEAD.EDISTATUS nicht 'E' oder B_BESTCOL.EXPORTUP '+' ist.
Es gibt einen Trigger welcher EXPORTUP auf + setzen. Genaueres dazu kann auch denk ich Roland oder Astrid sagen.
4 Voraussetzungen
4.1 Firma, aus der exportiert wird
- Deren Kunde braucht eine ILN
- Dieser Kunde braucht einen Eintrag für die Firma (b_kndfirm,a), aus der exportiert werden soll
4.2 Lieferant, für den exportiert wird
- Export: ILN, Exporttyp Bestellungen = PO_NT_EXP
- Sonstiges: Bestellungen automatisch exportieren
- Sonstiges: Bestellungen automatisch erzeugen, wenn gewünscht
4.3 ExchangeGate > Jobs
- Reference: Liefnr (nicht ILN?)
- Max. entries per file: 1
4.4 Prozedur PAT_WRITE_TRANSFER wird u.U benötigt
create or replace PROCEDURE "PAT_WRITE_TRANSFER" /* | CONCEPT Data Systems GmbH (C) 2011 | PAT_WRITE_TRANSFER - Die Procedure erzeugt Eintraege im PAT Transfer. | Author: HB | Stand: 10.10.2013 Version 1.1 */ ( sTBL_Name IN VARCHAR2, sDML IN VARCHAR2, sPK IN VARCHAR2 ) AS ttransfer TRANSFER%ROWTYPE; CURSOR sFIRMNR_CUR is select firmnr from b_firma where fl_transfer='J'; sFIRMNR_REC sFIRMNR_CUR%ROWTYPE; sTR_FILIALE1_org transfer.tr_filiale1%TYPE; sTR_FILIALE1 transfer.tr_filiale1%TYPE; sPosition number(3); i number(3) := 0; nStandortExist number; sBETRIEB varchar2(3); sZENTRALE varchar2(3); --Declare for exception block err_msg b_log.text%TYPE; e_loglevel VARCHAR2(4) := '30'; BEGIN select count(value) into nStandortExist from settings where switch='TRANSFER_FIRMNR_STANDORT' and workstation='DEFAULT' and value is not null; IF nStandortExist = 1 THEN select value into sBetrieb from settings where switch='TRANSFER_FIRMNR_STANDORT' and workstation='DEFAULT'; ELSE select value into sBetrieb from settings where switch='BETRIEB' and workstation='DEFAULT'; END IF; select value into sZENTRALE from settings where switch='FIRMNR_ZENTRALE' and workstation='DEFAULT'; sTR_FILIALE1_org :='++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'; --Get Timest PAT_TIME.GetTimest (ttransfer.TIMEST); IF sBETRIEB = sZENTRALE THEN ttransfer.SRC := sZENTRALE; ttransfer.DEST := sZENTRALE; OPEN sFIRMNR_CUR; LOOP FETCH sFIRMNR_CUR into sFIRMNR_REC; EXIT WHEN sFIRMNR_CUR%NOTFOUND; sPosition := to_number(sfirmnr_rec.firmnr); IF i < 1 and sfirmnr_rec.firmnr != to_number(sBETRIEB) THEN SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; ELSIF i < 1 and sfirmnr_rec.firmnr = to_number(sBETRIEB) THEN sTR_FILIALE1 := sTR_FILIALE1_org; ELSIF i >= 1 and sfirmnr_rec.firmnr != to_number(sBETRIEB) THEN SELECT REGEXP_REPLACE(sTR_FILIALE1,'\+','-',sPosition,1) into sTR_FILIALE1 from dual; END IF; i := i +1; END LOOP; CLOSE sFIRMNR_CUR; ELSE ttransfer.SRC := sBETRIEB; ttransfer.DEST := sZENTRALE; SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',to_char(sZENTRALE),1) into sTR_FILIALE1 from dual; END IF; ttransfer.TBL := sTBL_Name; ttransfer.TRANSFLAG := '-'; ttransfer.TRANSTIMEST := ttransfer.TIMEST; ttransfer.TR_FILIALE1_IDX := '-'; ttransfer.TR_VERTRETER1_IDX := '-'; ttransfer.TR_VERTRETER1 := '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++'; ttransfer.TR_FILIALE1 := sTR_FILIALE1; ttransfer.ACTION := sDML; ttransfer.IDX := sPK; INSERT INTO TRANSFER (TIMEST, SRC, DEST, TBL, IDX, ACTION, TRANSFLAG, TRANSTIMEST, TR_FILIALE1_IDX, TR_VERTRETER1_IDX, TR_FILIALE1, TR_VERTRETER1) VALUES (ttransfer.TIMEST, ttransfer.SRC, ttransfer.DEST, ttransfer.TBL, ttransfer.IDX, ttransfer.ACTION, ttransfer.TRANSFLAG, ttransfer.TRANSTIMEST, ttransfer.TR_FILIALE1_IDX, ttransfer.TR_VERTRETER1_IDX, ttransfer.TR_FILIALE1, ttransfer.TR_VERTRETER1); EXCEPTION when OTHERS then err_msg := sqlerrm; Insert into b_log (Timest,workstation,title,text,loglevel) Values (pat_time.fgettimest,'PROCEDURE.PAT_WRITE_TRANSFER','ERROR',err_msg,e_loglevel); end;