SWN127 - Importazione tentate vendite¶
Nome programma SWN127 Linkage section UTILAGPRG - Linkage comune Id processo: 127 Nome processo: TENTATE-VENDITE Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| COGTESBO COGMOMAG |
APCOGTESBO APCOGMOMAG |
<------ |
Logica generale Importazione delle bolle provenienti dalla procedura di tentata vendita su APP Esportazione Non prevista Importazione Importazione di tutti i documenti creati su app e non ancora importati Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online |
Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione A.1 - Aggiornamento KEEP-ALIVE Per il momento non lo eseguiamo: il keep-alive viene tenuto aggiornato dal thread autonomo di aglancio; se il programma venisse chiamato in "tempo reale" dal programma di gestione, non necessita comunque del keep-alive. A.2 - Apertura A.2.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: APCOGTESBO Se fallita inviare una Segnalazione critica e chiudere. Importazione aggiornamenti L'analisi qui riportata è identica a quella del programma originale SWA017 A - Importazione ddt Scorrere APCOGTESBO eseguendo una apposita query che permetta di restituire i record aggiornati dall'applicazione mobile (A_TES_AGG_APP = "A"). Per ciascun record trovato, se il campo A_TES_TIP = "I", il documento è un ddt di vendita, quindi va considerato in questa elaborazione. NB: diamo per scontato che un ddt possa essere solo inserito dall'applicazione mobile. Quindi per ciascun record procedere con * A.1 - Esame dati * A.2 - Creazione testata documento * A.3 - Creazione dettaglio documento * A.4 - Aggiornamento record origine * A.5 - Altre operazioni A.1 - Esame dati Sul record APCOGTESBO eseguire le seguenti verifiche: * Su COGTESBO esiste già un documento corrispondente al documento in elaborazione? Se si scartare il record, altrimenti proseguire con i controlli successivi: * A-TES-ANA-NONNO deve essere un cliente valido? (deve esistere su COGGEANA) * A-TES-ANA-PADRE, se significativo, deve essere un cliente valido? (deve esistere su COGGEANA) * A-TES-CAUSALE deve essere una causale valida. (deve esistere sulla tabella causali) * A-TES-DATA: l'anno relativo alla data deve corrispondere ad A-TES-ANN * A-TES-IMP-PAGATO: deve essere inferiore o uguale al totale del valore delle righe di magazzino (vedi oltre) * Se A-TES-FL-CREA-FAT = "S", controllare anche che: * A-TES-PAG sia presente nella tabella codici pagamento * A-TES-RB sia presente nella tabella tipi pagamento Poi, attraverso una query specifica, leggere tutti i record id APCOGMOMAG collegati al documento in esame; su questi: * calcolare il valore totale presente da confrontare con A-TES-IMP-PAGATO, * Controllare che esista almeno una riga poi su ciascuna riga controllare: * A-MAG-MERCE deve essere una merce valida * A-MAG-SEGNO deve essere "U" Con le eventuali segnalazioni di errore comporre un file di testo che dovrà essere allegato ad una e-mail da spedire all'indirizzo configurato in email-segnalazioni-operative NB: l'invio del messaggio deve essere inviato alla fine del processo di inserimento di un documento, perchè potrebbero esserci altre segnalazioni successive A.2 - Creazione testata documento Inserire un record su COGTESBO (nb: i dati non indicati devono essere lasciati vuoti):
| Dato | Provenienza |
|---|---|
| TES-MAG | A_TES_MAG |
| TES-ANNO, TES-ANNO4 | A_TES_ANN |
| TES-TIPOB, TES-TIPOB4 | A_TES_TIP |
| TES-BOLLA3, TES-BOLLA4 | A_TES_NUM |
| TES-TIPOCF | A_TES_ANA_NONNO (1:1) |
| TES-NONNO | A_TES_ANA_NONNO (2:5) |
| TES-PADRE | A_TES_ANA_PADRE (2:5) |
| TES-FIGLIO | 0 |
| TES-CURA | "D" |
| TES-AGENTE | Agente trovato sull'anagrafica del "nonno" |
| TES-PORTO | "FRANCO" |
| TES-RATEA | A_TES_RIFLISTINO |
| TES-CAUSALE | Causale configurata causale-ins-uscita-i |
| TES-DATA | A_TES_DATA |
| TES-RAGGRUPP | A_TES_RAGGR |
| TES-PAG1 | A_TES_PAG |
| TES-RB | A_TES_RB |
| TES-CURRENCY | A_TES_CURRENCY |
| A_TES_FL_CREA_FAT | |
| TES-FLAGDES | "E" |
| TES-FLAGFAT | Se EUTA-CB-CON-FAT (ricavato dalla causale): |
| TES-FL-ORD | "N" |
| TES-FL-TRA | "N" |
| TES-DABOLFOR | TES-DATA |
A.3 - Creazione righe documento Per ciascun record letto su APCOGMOMAG: * A.3.1 - COGMOMAG * A.3.2 - COGMOAGG * A.3.3 - Giacenza * A.3.4 - Movimentazione lotto merce * A.3.5 - Descrizione aggiuntiva A.3.1 - COGMOMAG creare un record su COGMOMAG (nb: i dati non indicati devono essere lasciati vuoti):
| Dato | Provenienza |
|---|---|
| MAG-MAG1, MAG-MAG2, MAG-MAG3, MAG-MAG5 | TES-MAG |
| MAG-ANNO, MAG-ANNO4, MAG-ANNO6 | TES-ANNO |
| MAG-TIPOB1, MAG-TIPOB3, MAG-TIPOB4 | TES-TIPOB |
| MAG-BOLLA1, MAG-BOLLA2, MAG-BOLLA3, MAG-BOLLA4, MAG-BOLLA5, MAG-BOLLA6 | TES-BOLLA3 |
| MAG-PROG | A_MAG_PROG |
| MAG-DA2, MAG-DA3, MAG-DA5 | TES-DATA |
| MAG-MERCE3, MAG-MERCE6 | A_MAG_MERCE |
| MAG-TIPOCF, MAG-TIPOCF6 MAG-NONNO, MAG-NONNO6 MAG-PADRE, MAG-PADRE6 MAG-FIGLIO, MAG-FIGLIO6 |
Dai corrispondenti campi di COGTESBO |
| MAG-ENTRUSC | A_MAG_SEGNO |
| MAG-UM | A_MAG_UM |
| MAG-QTAMAGAZ | A_MAG_QTA |
| MAG-CURRENCY | TES-CURRENCY |
| MAG-PRE-NO-SCO | A_MAG_PRE_LOR |
| MAG-SCO-1 | A_MAG_SCO_1 |
| MAG-SCO-2 | A_MAG_SCO_2 |
| MAG-PREZZO | A_MAG_PRE_NET |
| MAG-VALORE | A_MAG_VALORE |
| MAG-COLLI | A_MAG_COLLI |
| MAG-ALF | A_MAG_IVA |
| MAG-COGE | MER-CODCONTR trovato sull'anagrafica merci |
| MAG-REP | Reparto trovato sull'anagrafica merci |
A.3.2 - COGMOAGG Creare un record su COGMOAGG
| Dato | Provenienza |
|---|---|
| MOA-CHIA1 | MAG-CHIAP |
| MOA-FL-PROMO | A-MAG-FL-PROMO |
A.3.3 - giacenza Aggiornare la giacenza della merce movimentata (vedi COGV50W) A.3.4 - Movimentazione lotto merce Se A-MAG-LOTTO-ESTERNO <> " ", si dovrà movimentare correttamente il lotto indicato (che potrebbe anche non esistere); quindi: Eseguire quindi: * A.3.4.1 Ricerca esistenza lotto * A.3.4.2 Aggiornamento quantità sul lotto trovato/inserito * A.3.4.3 Creazione movimento lotto A.3.4.1 - Ricerca esistenza lotto * Cercare esistenza di un record su COGMERLT usando MLT-CHIA2, impostando: * MLT-LOTTO = A-MAG-LOTTO-ESTERNO * MLT-MERCE = A-MAG-MERCE * MLT-MAG = A-MAG-MAG1 * Se il record: * Non esiste: A.3.4.1.1 - Inserimento nuovo lotto * Esiste: si dovrà creare un movimento sul lotto trovato A.3.4.1.1 - Inserimento nuovo lotto Ricerca progressivo lotto: * Cercare su COGMERLT usando MLT-CHIA1 all'indietro, impostando: * MLT-MERCE = A-MAG-MERCE * MLT-MAG = A-MAG-MAG1 * MLT-PROG = 9999 Creazione nuovo lotto: inserimento di un record su COGMERLT impostando:
| Dato | Provenienza |
|---|---|
| MLT-MERCE | A-MAG-MERCE |
| MLT-MAG | A-MAG-MAG1 |
| MLT-PROG | Primo progressivo disponibile su MERCE/MAG Cercare su COGMERLT usando MLT-CHIA1 all'indietro, impostando: |
| MLT-LOTTO | A-MAG-LOTTO-ESTERNO |
| MLT-PRODUTTORE | AZ-FOR-INT |
| MLT-STATO | "A" |
A.3.4.2 - Aggiornamento lotto
| Dato | Provenienza |
|---|---|
| MLT-QTA | Sottrarre MAG-QTAMAGAZ |
| MLT-STATO | Se MLT-QTA: |
A.3.4.3 - Creazione movimento lotto Inserimento di un record su COGMOVLT:
| Dato | Provenienza |
|---|---|
| MVL-CHIAVE-RIGA | MAG-CHIAP |
| MVL-LOTTO-INT | MLT-PROG |
| MVL-MERCE | MAG-MERCE |
| MVL-SEGNO | MAG-ENTRUSC |
| MVL-QTA | MAG-QTAMAGAZ |
A.4 - Aggiornamento record origine Aggiornare il record di origine impostando:
| Dato | Descrizione |
|---|---|
| A_TES_AGG_APP | "N" |
A.5 - Altre operazioni A.5.1 - Gestione importo pagato Se A-TES-IMP-PAGATO > 0, occorre eseguire la relativa registrazione: Chiamata a COGF45, passando i parametri:
| Dato | Contenuto |
|---|---|
| F45-OPE | "I" |
| F45-FL-BATCH | "S" |
| F45-TIP | "B" |
| F45-DOCUMENTO | TES-CHIA3 |
| F45-CURRENCY | TES-CURRENCY |
| F45-IMP-BOL | Importo totale bolla |
| F45-IMP-PAG | A-TES-IMP-PAGATO |
Se F45-ESITO = "N", aggiungere all'elenco delle segnalazioni che non è stato possibile inserire l'incasso. A.5.2 - Creazione fattura automatica Se A-TES-FL-FAT = "S", è necessario fatturare immediatamente il ddt e spedirlo al cliente. A.5.2.1 - Creazione fattura Chiamata a COGV64L passando come parametri:
| Dato | Contenuto |
|---|---|
| V64L-OPE | "Inserimento" |
| V64L-DOC | TES-CHIA3 |
| V64L-SILENT-MODE | "S" |
All'uscita V64L-FAT conterrà il riferimento al documento creato. A.5.2.2 - Stampa fattura Eseguire il comando: set environment "printer" to w-printer dove W-PRINTER è un file definito su EXT-TMP-DIR, con nome "v64l-fat".prn In questo modo la chiamata successiva al programma di stampa fattura dovrà creare il suddetto file; quindi chiamata a COGP41:
| Dato | Contenuto |
|---|---|
| P41-DA-FATTURA | V64L-FAT |
| P41-A-FATTURA | V64L-FAT |
| P41-COPIE | 1 |
| P41-FL-ARCHIVIA | "ARCHIVIA" |
Quindi, testare l'esistenza del file con il nome sopra definito, usando COPIAF. Se il file non esiste segnalarlo nell'apposito documento segnalazioni. A.5.2.3 - Creazione file PDF fattura Portare il file creato sulla cartella configurata path-apri-file Dopodichè lanciare SVIEW per la conversione:
| Dato | Contenuto |
|---|---|
| SVIEW-OPE | "CONVERTI" |
| SVIEW-FILE | percorso completo del file portato su PATH-APRI-FILE |
| SVIEW-OUTPUT | File di output da creare; potrà sempre essere su PATH-APRI-FILE, e chiamato ad esempio V64L-FAT (senza estensione) |
Se SVIEW-ESITO = "N", segnalarlo nell'apposito documento segnalazioni. A.5.2.4 - Spedizione file PDF fattura Usando il sottoprogramma apposito per l'utilizzo del dialogo FTP, spedire il file fattura cosi' creato sul server KPN, nella cartella configurata (chiedere informazioni a Giovanni) A.5.2.5 - Aggiornamento "fattura spedita" Modificare nuovamente il record APCOGTESBO impostando
| Dato | Contenuto |
|---|---|
| A-TES-FATTURA-SPEDITA | "S" |
| A-TES-NOME-FATTURA | Nome del file recapitato, es. "IM20140000123.pdf" |
A.5.3 - Importazione PDF e archiviazione Questa sezione va eseguita se l'azienda ha abilitato l'archiviazione ottica (AZ-ARC-OTT = "S") Usando i comandi FTP, (chiedere consulenza a Giovanni) si dovrà cercare e importare un file PFD che contiene la stampa del ddt, per poi successivamente archiviarlo come stampa del ddt A.5.3.1 - Importazione PDF Se ad esempio abbiamo importato un ddt con chiave "E2014I000123": * Origine: "radice/_DDT/E2014I000123.pdf" (tutto minuscolo) * Destinazione: _ext-tmp-dir ext-os-slash "E2014I000123.pdf" (tutto minuscolo) A.5.3.2 - Archiviazione Se la fase precedente è andata a buon fine, il docuimento deve essere archiviato, con una apposita chiamata a COGU06:
| Tipo | Dato | Contenuto |
|---|---|---|
| INPUT | U06-OPE | "INSERISCI-FILE" |
| U06-FILE | In percorso di destinazione del file | |
| U06-FL-INTERNO | "D" | |
| U06-TIP-DOC | "BU" | |
| U06-DOC-COGE | Chiave del documento creato con i campi separati da "/"; ad esempio: "E/2014/I/000123" | |
| U06-DO-TIP-DOC | "B.USCITA" | |
| U06-DO-NUM-INT | Come U06-DOC-COGE | |
| U06-DO-DATA | TES-DATA | |
| U06-DO-NUM-EST | "" | |
| U06-DO-DATA-EST | 0 | |
| U06-DO-ANA-TIP | "C" | |
| U06-DO-ANA-COD | TES-NONNO | |
| U06-DO-ANA-DES | Ragione sociale di TES-NONNO | |
| OUTPUT | U06-ESITO | Esito dell'operazione |
Estratto da documentazione interna ClickUp