SWA018: Importazione trasferimenti da APP
Programma che dovrà essere schedulato ed esportare
| Origine |
Destinazione |
Cosa estrarre |
| COGMAGAZ |
APCOGMAGAZ |
Anagrafica magazzini |
| COGSLMAG |
ARPARMAG |
Giacenze per magazzino |
| Ultimo trasferimento |
ARPARMAG |
Le quantità dell'ultimo trasferimento effettuato per ciascun magazzino vengono aggiornate su un apposito campo di ARPARMAG |
ARPTRTES ARPTRRIG |
COGTESBO COGMOMAG |
Trasferimenti effettuati da APP verso il gestionale |
Importazione trasferimenti
A - Importazione trasferimenti da APP
* Eseguire un comando SQL diretto che permetta di selezionare i record di ARPTRTES con A-TRTES-AGG-APP = "A".
* Per ciascun record trovato preparare e inizializzare il file temporaneo COGMAE-T-DETTAGLIO
* Eseguire un comando SQL diretto che permetta di selezionare tutti i record di ARPTRRIG collegati alla testata letta; per ciascuno creare un record sul file temporaneo:
| Nome campo |
Note |
| T-D-COGMAE-PROG |
Nuovo progressivo di riga |
| T-D-COGMAE-MERCE |
A_TRRIG_MERCE |
| T-D-COGMAE-QTA |
A_TRRIG_QTA |
| T-D-COGMAE-SN |
A_TRRIG_SN |
- Al termine eseguire una chiamata a COGMAE passando i parametri
| Nome campo |
Note |
| COGMAE-OPE |
"INS-BATCH" |
| COGMAE-I-MAG-SEDE |
A-TRTES-MAG-SEDE |
| COGMAE-I-MAG-VIAG |
A-TRTES-MAG-VIAGGIANTE |
| COGMAE-I-TIPO-TRASF |
A-TRTES-TIPO |
| COGMAE-I-DATA |
A-TRTES-DATA |
All'uscita restituirà COGMAE-O-ESITO; se contiene:
* "N": inserimento non riuscito:
* Inviare una mail all'indirizzo configurato in email-segnalazioni-operative, allegando il file di log generato da COGMAE
* Proseguire con il trasferimento da aggiornare successivo
* "S": inserimento andato a buon fine; proseguire
A questo punto aggiornare il record ARPRTES impostando:
| Nome campo |
Note |
| A-TRTES-AGG-APP |
"N" |
| A-TRTES-KEY-SEDE |
Se A-TRTES-TIPO vale:
|
| A-TRTES-KEY-MAG-VIAGGIANTE |
Se A-TRTES-TIPO vale:
|
A.1 - Stampa tentata vendita
Dopo l'acquisizione di un trasferimento per tentata vendita, si dovrà eseguire la stampa sulla periferica configurata in periferica-stampa-tentata-vendita.
Questo processo deve essere eseguito se la configurazione è <> 0
I trasferimenti da stampare sono quelli di tentata vendita, ovvero:
* Magazzino di destinazione = magazzino viaggiante "non furgone attrezzato":
* Cercare sulla tabella ASNVEICL un veicolo avente AVEI-MAG = codice magazzino di destinazione
* Se AVEI-TIPO-VEICOLO <> "F", allora innescare la stampa:
* chiamata a COGPA4 passandogli il riferimento al documento da stampare, e la periferica trovata in configurazione.
C - Aggiornamento APSTATOSYN
Aggiornare il record APSTATOSYN relativo a:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAG" |
e aggiornare i dati:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAG" |
| A_SYN_DA_GES_DATA |
0 |
| A_SYN_DA_GES_ORA |
0 |
| A_SYN_DA_ID_SINCRO |
Sommare 1 all'ultimo ID aggiornato |
Esportazione magazzini
A - Esportazione magazzini
Id Sincronizzazione magazzini
Su POSTGRES, tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "COGMAGAZ"; se il record non esiste, crearlo impostando
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"COGMAGAZ" |
| A_SYN_DA_GES_DATA |
0 |
| A_SYN_DA_GES_ORA |
0 |
| A_SYN_DA_ID_SINCRO |
1 |
Qui otterremo due informazioni importanti:
* Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA)
* Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO)
A.0 - Gestione interventi pre-chiusi
La giacenza dei magazzini viaggianti potrebbe non essere corretta: non comprende le quantità già movimentate dagli interventi pre-chiusi: il movimento di magazzino e la modifica alla giacenza avvengono al momento della chiusura vera e propria dell'intervento.
In questa sezione quindi dovremo cercare i materiali movimentati sugli interventi pre-chiusi e creare con questi un file di transito "T-INTERVENTI-PRE-CHIUSI" composto da:
* T-IPC-CHIA1:
* T-IPC-CLASSE: classe magazzino (Principale/Secondario)
* T-IPC-TIPO: Tipo magazzino (per i magazzini secondari)
* T-IPC-MAG: Codice Magazzino
* T-IPC-MERCE Merce
* T-IPC-QTA: quantità
A.0.1 - Ricerca interventi pre-chiusi
Ricerca su ASNINTES per tutti gli interventi con ACIT-STATO = "P", usando ACIT-CHIA6.
Per ciascun intervento valido cerchiamo le righe materiali su ASNAPPMT.
Qui, per ciascuna riga dovremo fare le stesse valutazioni fatte da ASN351 per capire se la riga deve movimentare la giacenza, su quale magazzino, e con quale segno (entrata/uscita).
Quindi per ciascun movimento che interessa la giacenza, aggiorniamo il file di transito con le quantità "pre-chiuse". Il risultato potrebbe essere il seguente:
| Tipo magazzino |
Codice magazzino |
Merce |
Qta |
Note |
| Principale |
1 |
M1 |
5 |
Uscita di 5 pezzi dal magazzino principale (solitamente se la causale di movimentazione prevede la movimentazione diretta di un magazzino) |
| Principale |
A |
M1 |
3 |
Uscita di 3 pezzi dal magazzino "A" (magazzino viaggiante): il caso più tipico |
| Principale |
A |
M2 |
-1 |
Entrata di 1 pezzi su magazzino "A" (magazzino viaggiante): causale di movimentazione di entrata |
| Secondario |
EABC |
M1 |
4 |
Uscita di 4 pezzi dal magazzino secondario di tipo "Esterno" "ABC" (magazzino viaggiante): potrebbe essere se configurata la gestione dei magazzini secondari, come progresso; vedi configurazione tecnici-uso-mag-secondari |
Il contenuto del file sarà usato nelle fasi di esportazione giacenze "B" e "D"
A.1 - Esportazione magazzini principali
A.1.1 Id Sincronizzazione giacenze magazzini principali
Su POSTGRES, tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPARMAG"; se il record non esiste, crearlo impostando
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAG" |
| A_SYN_DA_GES_DATA |
0 |
| A_SYN_DA_GES_ORA |
0 |
| A_SYN_DA_ID_SINCRO |
1 |
Qui otterremo due informazioni importanti:
* Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA)
* Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO)
A.1.2 Ricerca dati
* Scorrere COGMAGAZ con MAGZ-TIPO = "M"; per ciascun record letto:
* Ricerca del record estensione su COGMAGAG
* Ricerca del corrispondente record su APCOGMAGAZ per l'azienda attiva;
| Dato |
Descrizione |
| A-MAGZ-AZIENDA |
Codice azienda |
| A-MAGZ-TIPO |
MAGZ-TIPO |
| A-MAGZ-COD |
MAGZ-COD |
-
- se:
* Non esiste: inserirlo
* Esiste:
* confrontare il contenuto dei dati variabili:
* *-NOME
* *-VAL
* Se almeno uno è diverso, aggiornare il record
Informazioni con cui inserire/aggiornare un record su APCOGMAGAZ:
| Nome campo |
Note |
| A-MAGZ-AZI |
Codice azienda |
| A-MAGZ-TIPO |
MAGZ-TIPO |
| A-MAGZ-COD |
MAGZ-COD |
| A-MAGZ-NOME |
MAGZ-NOME |
| A-MAGZ-ID-SINCRO |
A-SYN-ID-SINCRO |
| A-MAGZ-FL-CANC |
MAGZ-VAL |
| A-MAGZ-FL-TIP |
MAGZ-FL-TIP |
Per ciascun magazzino considerato, effettuare anche
* B - Esportazione giacenze magazzini interni
A.1.3 Aggiornamento id sincronizzazione
Aggiornare il record APSTATOSYN relativo a:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAG" |
e aggiornare i dati:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAG" |
| A_SYN_DA_GES_DATA |
Data/ora di aggiornamento maggiore trovata sui record esportati |
| A_SYN_DA_GES_ORA |
|
| A_SYN_DA_ID_SINCRO |
Sommare 1 al valore precedente |
Aggiornare il record APSTATOSYN relativo a:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"COGMAGAZ" |
e aggiornare i dati:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"COGMAGAZ" |
| A_SYN_DA_GES_DATA |
0 |
| A_SYN_DA_GES_ORA |
|
| A_SYN_DA_ID_SINCRO |
Sommare 1 al valore precedente |
A.2 - Esportazione magazzini secondari
A.2.1 Id Sincronizzazione giacenze magazzini principali
Su POSTGRES, tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPARMAGEXT"; se il record non esiste, crearlo impostando
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAGEXT" |
| A_SYN_DA_GES_DATA |
0 |
| A_SYN_DA_GES_ORA |
0 |
| A_SYN_DA_ID_SINCRO |
1 |
Qui otterremo due informazioni importanti:
* Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA)
* Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO)
A.2.2 Ricerca dati
* Scorrere COGMAGPE, per tutti i magazzini "esterni" (MGP-TIP = "E"); per ciascun record letto,
* Ricerca del corrispondente record su APCOGMAGAZ per l'azienda attiva;
| Dato |
Descrizione |
| A-MAGZ-AZIENDA |
Codice azienda |
| A-MAGZ-TIPO |
MGP-TIP |
| A-MAGZ-COD |
MGP-COD |
-
- se il record su APCOGMAGAZ:
* Non esiste: inserirlo
* Esiste:
* confrontare il contenuto dei dati variabili:
* MGP-NOME <-> A-MAGZ-NOME
* Se diverso, aggiornare il record
Informazioni con cui inserire/aggiornare un record su APCOGMAGAZ:
| Nome campo |
Note |
| A-MAGZ-AZI |
Codice azienda |
| A-MAGZ-TIPO |
MGP-TIP |
| A-MAGZ-COD |
MGP-COD |
| A-MAGZ-NOME |
MGP-NOME |
| A-MAGZ-ID-SINCRO |
A-SYN-ID-SINCRO (COGMAGAZ) |
| A-MAGZ-FL-CANC |
Impostare a "C" se MGP-FL-CLOSE = "C" o "D" |
| A-MAGZ-FL-TIP |
MGP-FL-UBICAZIONE |
Per ciascun magazzino considerato, effettuare anche
* D - Esportazione giacenze magazzini secondari
A.2.3 Aggiornamento id sincronizzazione
Aggiornare il record APSTATOSYN relativo a:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAGEXT" |
e aggiornare i dati:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"ARPARMAGEXT" |
| A_SYN_DA_GES_DATA |
Data/ora di aggiornamento maggiore trovata sui record esportati |
| A_SYN_DA_GES_ORA |
|
| A_SYN_DA_ID_SINCRO |
Sommare 1 al valore precedente |
C - Aggiornamento APSTATOSYN
Aggiornare il record APSTATOSYN relativo a:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"COGMAGAZ" |
e aggiornare i dati:
| Dato |
Contenuto |
| A_SYN_AZIENDA |
Codice azienda |
| A_SYN_TABELLA |
"COGMAGAZ" |
| A_SYN_DA_GES_DATA |
Data/ora di aggiornamento maggiore trovata sui record esportati |
| A_SYN_DA_GES_ORA |
|
| A_SYN_DA_ID_SINCRO |
Sommare 1 al valore precedente |
B - Esportazione giacenze magazzini principali
Lo scopo di questa parte è di aggiornare la base dati esterna con le merci contenute nei magazzini principali.
B.2 - Ricerca record da esportare
* Sul record APCOGMAGAZ relativo al magazzino in esame, impostare
* A-MAGZ-FL-TIP = "v" ("V" minuscola)
* Eseguire B.2.1 - Esportazione giacenze
* Eseguire B.2.2 - Esportazione ultimo trasferimento
* Infine aggiornare nuovamente il record APCOGMAGAZ relativo al magazzino in esame, e impostare
* A-MAGZ-FL-TIP = tipo magazzino originale
B.2.1 - Esportazione giacenze
Se la data odierna cade nello stesso mese della data contenuta in A_SYN_DA_GES_DATA, allora si esegue B.2.1.1; altrimenti si eseguira' l'esportazione mensile completa: B.2.1.2
B.2.1.1 - Esportazione giacenze aggiornate
* Eseguire una query che azzeri A-ARMAG-QTA-ULTIMA-ENTRATA per tutti i record dove è > 0; contestualmente deve anche impostare A-ARMAG-ID-SINCRO = Id sincro attuale + 1
* Scansione di COGSLMAG per il magazzino in esame; considerare solo i record con
* MSAL-FL-AGG = "S" oppure presenti nel file di transito T-INTERVENTI-PRECHIUSI (altrimenti quando si effettua la seconda parte dell'aggiornamento le qta pre-chiuse vengono continuamente tolte)
* Per ciascun record valido:
* Ricerca di un record su ARPARMAG impostando:
* A-ARMAG-AZIENDA = azienda attiva
* A-ARMAG-MAG = magazzino in elaborazione
* A-ARMAG-MERCE = MSAL-MERCE
* Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-GIACENZA |
MSAL-QTA |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAG) + 1 |
| A-ARMAG-QTA-IMPEGNATA |
MSAL-QTA-IMPEGNATA |
| A-ARMAG-QTA-ORDINATA |
MSAL-QTA-ORDINATA |
| A-ARMAG-QTA-PRENOTATA |
MSAL-QTA-PRENOTATA |
-
-
- Infine variare il record giacenza per azzerare il flag "aggiornato" MSAL-FL-AGG = "N"
B.2.1.2 - Esportazione completa mensile
- Eseguire una query che azzeri A-ARMAG-QTA-ULTIMA-ENTRATA per tutti i record dove è > 0; contestualmente deve anche impostare A-ARMAG-ID-SINCRO = Id sincro attuale + 1
- Eseguire una query che azzeri A-ARMAG-QTA-GIACENZA per tutti i record dove e' > 0; contestualmente deve anche impostare A-ARMAG-ID-SINCRO = Id sincro attuale + 1
- Scansione di COGSLMAG per il magazzino in esame; considerare tutti i record presenti
- Per ciascun record valido:
- Ricerca di un record su ARPARMAG impostando:
- A-ARMAG-AZIENDA = azienda attiva
- A-ARMAG-MAG = magazzino in elaborazione
- A-ARMAG-MERCE = MSAL-MERCE
- Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-GIACENZA |
MSAL-QTA |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAG) + 1 |
Al termine aggiornare il record di APSTATOSYN relativo ad "ARPARMAG", aggiornando A_SYN_DA_GES_DATA con la data odierna
B.2.2 - Esportazione ultimo trasferimento
Come prima cosa, ricerca dell'ultimo trasferimento verso il magazzino viaggiante in esame:
* Posizionarsi su COGTESBO impostando:
* TES-MAG = magazzino in esame
* TES-ANNO = 9999
* Scorrere all'indietro i record fino a trovare un documento con:
* TES-TIPOB = "T"
* Il primo movimento con MAG-ENTRUSC = "E"
* Il documento che corrisponde sarà l'ultimo trasferimento di carico del magazzino viaggiante, quindi dovremo esportare le quantità sull'apposito campo di ARPARMAG:
* Lettura di tutti i record di COGMOMAG del documento trovato; per ciascuno:
* Leggere ARPARMAG:
* A-ARMAG-AZIENDA = azienda attiva
* A-ARMAG-MAG = magazzino in elaborazione
* A-ARMAG-MERCE = MSAL-MERCE
* Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-ULTIMA-ENTRATA |
MAG-QTAMAGAZ |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAG) + 1 |
B.2.3 - Aggiornamento qta pre-chiuse
Rileggere il file di transito T-INTERVENTI-PRE-CHIUSI, per tutti i record relativi al magazzino in elaborazione:
| Nome campo |
Note |
| T-IPC-CLASSE |
"P" |
| T-IPC-TIPO |
" " |
| T-IPC-MAG |
Codice magazzino |
Per ciascun record trovato con T-IPC-QTA <> 0:
* Ricerca di un record su ARPARMAG impostando:
* * * A-ARMAG-AZIENDA = azienda attiva
* A-ARMAG-MAG = T-IPC-MAG
* A-ARMAG-MERCE = T-IPC-MERCE
* Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-GIACENZA |
A-ARMAG-QTA-GIACENZA - T-IPC-QTA |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAG) + 1 |
D - Esportazione giacenze magazzini secondari
Lo scopo di questa parte è di aggiornare la base dati esterna con le merci contenute nei magazzini secondari.
D.2 - Ricerca record da esportare
* Sul record APCOGMAGAZ relativo al magazzino in esame, impostare
* A-MAGZ-FL-TIP = "v" ("V" minuscola)
* Eseguire B.2.1 - Esportazione giacenze
* Infine aggiornare nuovamente il record APCOGMAGAZ relativo al magazzino in esame, e impostare
* A-MAGZ-FL-TIP = tipo magazzino originale
D.2.1 - Esportazione giacenze
Per ora in questo giro non effettuamo il giro mensile come viene invece fatto nel punto B
D.2.1.1 - Esportazione giacenze aggiornate
* Scansione di COGSLKEY per il magazzino in esame, usando la chiave SLK-CHIA2 e impostando
| Nome campo |
Note |
| SLK-TIP |
"M" |
| SLK-KEY-TIP |
MGP-TIP |
| SLK-KEY-COD |
MGP-COD |
Considerare solo i record aggiornati dopo la data/ora memorizzata su APSTATOSYN(ARPARMAGEXT) (qui per ora non c'è il flag di aggiornamento come COGSLMAG), oppure presenti nel file di transito T-INTERVENTI-PRECHIUSI (altrimenti quando si effettua la seconda parte dell'aggiornamento le qta pre-chiuse vengono continuamente tolte)
Per ciascuna record valido effettuare la lettura del record corrispondente su ARPARMAGEXT:
| Nome campo |
Note |
| A-MGE-AZI |
Azienda attiva |
| A-MGE-MAG-TIP |
SLK-KEY-TIP |
| A-MGE-MAG-COD |
SLK-KEY-COD |
| A-MGE-MERCE |
SLK-MERCE |
Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-GIACENZA |
SLK-GIA |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAGext) + 1 |
| A-ARMAG-QTA-IMPEGNATA |
0 |
| A-ARMAG-QTA-ORDINATA |
0 |
| A-ARMAG-QTA-PRENOTATA |
0 |
D.3 - Aggiornamento qta pre-chiuse
Rileggere il file di transito T-INTERVENTI-PRE-CHIUSI, per tutti i record relativi al magazzino in elaborazione:
| Nome campo |
Note |
| T-IPC-CLASSE |
"S" |
| T-IPC-TIPO |
MGP-TIP |
| T-IPC-MAG |
MGP-COD |
Per ciascun record trovato con T-IPC-QTA <> 0 effettuare la lettura del record corrispondente su ARPARMAGEXT:
| Nome campo |
Note |
| A-MGE-AZI |
Azienda attiva |
| A-MGE-MAG-TIP |
T-IPC-TIPO |
| A-MGE-MAG-COD |
T-IPC-MAG |
| A-MGE-MERCE |
T-IPC-MERCE |
Se il record non esiste crearlo, poi aggiornare:
| Nome campo |
Note |
| A-ARMAG-QTA-GIACENZA |
A-ARMAG-QTA-GIACENZA - T-IPC-QTA |
| A-ARMAG-ID-SINCRO |
ID sincro attuale (ARPARMAGext) + 1 |
Estratto da documentazione interna ClickUp