PATEDI NT.Bestellungsexport: Unterschied zwischen den Versionen

Aus PPwiki
Wechseln zu: Navigation, Suche
(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.
  
AW: pac Bestellungsexport zu Volmary 7. September 2017, 10:11 Uhr
+
(von Daniel Posch 7.9.2017 )
Von Posch Daniel
+
 
 +
== 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
+
* Deren Kunde braucht eine ILN
    Und der Kunde braucht einen Eintrag für die Firma, aus der exportiert wer den soll
+
* 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
+
* Export: ILN, Exporttyp Bestellungen = PO_NT_EXP
        Sonstiges: Bestellungen automatisch exportieren
+
* Sonstiges: Bestellungen automatisch exportieren
        Sonstiges: Bestellungen automatisch erzeugen, wenn gewünscht
+
* Sonstiges: Bestellungen automatisch erzeugen, wenn gewünscht
 
=== ExchangeGate > Jobs ===
 
=== ExchangeGate > Jobs ===
    Reference: Liefnr (nicht ILN?)
+
* Reference: Liefnr (nicht ILN?)
    Max. entries per file: 1
+
* 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: 03.01.2012   Version 1.0
+
| 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;
   nBETRIEB varchar2(3);
+
   nStandortExist number;
   nZENTRALE varchar2(3);
+
  sBETRIEB varchar2(3);
 +
   sZENTRALE varchar2(3);
  
 
   --Declare for exception block
 
   --Declare for exception block
  Ins_Timest b_log.timest%TYPE;
 
 
   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 nBETRIEB from settings where switch='BETRIEB' and workstation='DEFAULT';
+
     select count(value) into nStandortExist from settings where switch='TRANSFER_FIRMNR_STANDORT' and workstation='DEFAULT' and value is not null;
     select value into nZENTRALE from settings where switch='FIRMNR_ZENTRALE' and workstation='DEFAULT';  
+
      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 nBETRIEB = nZENTRALE THEN
+
     IF sBETRIEB = sZENTRALE THEN
 
      
 
      
         ttransfer.SRC  := nZENTRALE;
+
         ttransfer.SRC  := sZENTRALE;
         ttransfer.DEST := nZENTRALE;
+
         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(nBETRIEB) THEN
+
           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(nBETRIEB) THEN
+
           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(nBETRIEB) THEN
+
           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  := nBETRIEB;
+
         ttransfer.SRC  := sBETRIEB;
         ttransfer.DEST := nZENTRALE;
+
         ttransfer.DEST := sZENTRALE;
 
      
 
      
     SELECT REGEXP_REPLACE(sTR_FILIALE1_org,'\+','-',to_char(nZENTRALE),1) into sTR_FILIALE1 from dual;
+
     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;
        --Get timestamp
 
      PAT_TIME.GetTimest (Ins_Timest);
 
 
         Insert into b_log (Timest,workstation,title,text,loglevel)
 
         Insert into b_log (Timest,workstation,title,text,loglevel)
         Values (Ins_Timest,'PROCEDURE.PAT_WRITE_TRANSFER','ERROR',err_msg,e_loglevel);
+
         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]

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;