SWA017 - Importazione DDT/documenti di magazzino da AreaAPP¶
Sorgente: cbl/swa017.cbl | Program-ID: SWA017 | Tipo: Batch/interattivo (importazione SQL -> ISAM)
Menu: Magazzino > Archivi & Tabelle > Importazioni > DDT da APP
Scopo¶
Legge dalla base dati AreaAPP (tabelle SQL apcogtesbo e apcogmomag) i documenti di magazzino marcati a_tes_agg_app = "A" per l'azienda configurata, esegue i controlli formali, scrive la testata DDT (cogtesbo) e i movimenti (cogmomag) nel gestionale, marca i record AreaAPP come trasferiti (a_tes_agg_app = "N"), archivia gli eventuali PDF e notifica via email le anomalie.
File e tabelle¶
Lato AreaAPP (SQL via sql-interface)¶
| Tabella | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| APCOGTESBO | SQL (postgres via apcogtesbo-sql-*) |
Select / Update | Testate documenti AreaAPP |
| APCOGMOMAG | SQL (postgres via apcogmomag-sql-*) |
Select | Movimenti documento AreaAPP |
Lato gestionale (ISAM)¶
| File | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| FEURTAB | ISAM | Input | Parametri azienda |
| COGTESBO | ISAM | I-O | Testata DDT/documento magazzino (scrittura) |
| COGMOMAG | ISAM | I-O | Movimenti magazzino (scrittura) |
| COGGEANA | ISAM | Input | Anagrafica clienti (controllo nonno/padre) |
| COGTABEL | ISAM | Input | Tabelle (causali 15, pagamenti 14, tipo riscossione 22, contatori 66) |
| COGMERCI | ISAM | Input | Anagrafica articoli |
| COGNUMER | ISAM | I-O | Contatore numerazione DDT |
| COGMERLT | ISAM | Input | Merci-lotti (chiave k02) |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
swa017.select, swa017.fd, swa017.wrk, swa017.prc, swa017.decla |
Screen designer |
apcogtesbo.fd/cpy, apcogmomag.fd/cpy |
Record AreaAPP (con direttiva $xfd file=... per generazione XFD per SQL) |
apcogtesbo.k01/k02/k03, apcogmomag.k01 |
Chiavi |
apcogtesbo.k01-agg, apcogmomag.k01-agg |
Stub di aggiornamento (auto-inclusi da Screens) |
sql-decla-ws.cpy, sql-interface-prc.cpy |
Interfaccia SQL generica |
apcogtesbo-sql-ws.cpy, apcogtesbo-sql-prc.cpy, apcogmomag-sql-ws.cpy, apcogmomag-sql-prc.cpy |
Layer SQL specifico per le 2 tabelle (marcati deb) |
k-u10.cpy, k-personal.cpy |
Costanti divisa / personalizzazioni |
wstato, wgrave, wopenf, wnscr, cogazien |
Working storage standard |
utilncnf |
RNEWCONF |
utilu06 |
COGU06 (archiviazione PDF) |
utilu10, utilu12 |
Utility divisa / contabilita' |
utilv64l, utilp41 |
Stampa label / etichette |
utilcrms08, utilsview |
CRM / SView |
utilmymail, utilpost |
Mail / POSTA |
utilftp, l-copiaf.cpy, u-copiaf.cpy |
FTP / COPIAF |
utilgesdebug, gesdebug.cpy, statolog.cpy |
Tracciatura log (gesdebug-apri-principale, gesdebug-write-info, gesdebug-chiudi) |
utilf45, getdcont.cpy, cogmerlt.k02 |
Linkage utility |
wcont, wcont1 |
Linkage standard |
stato, stato1, winmsg, grave, opengen, mmmask |
Infrastruttura standard |
Logica di elaborazione¶
Inizializzazione (m-00)¶
ctr-abil,open-files,rd-azi,x99-src-cfg(lettura RNEWCONF).- Se
wo-parametro = "D"-> chiede data via maschera (w-richiedo-date = "D"). - Apre tracciatura log (
gesdebug-apri-principale). - Verifica
tm-cfg-attiva-areaapp = "S"(chiaveabilita.attiva-areaapp); se non attivo -> messaggio e uscita. - Stabilisce connessione SQL (
init-bin-sub-tm-cfg-bin-tipo).
Configurazione RNEWCONF (x99-src-cfg)¶
Legge 18 chiavi da RNEWCONF:
- abilita.attiva-areaapp
- areaapp.cod-azienda
- areaapp.db-conn-string (idx 1, 2, 3)
- areaapp.db-log-level
- areaapp.swa017-path-spedizione, swa017-crea-ftp, swa017-codice-server-ftp
- arc-ott.path-apri-file
- areaapp.email-segnalazioni-operative (idx 1-5)
- causali.causale-ins-uscita-i
- progcogv51.euta-c041-asp
- AWS.ATTIVAZIONE-BUCKET
Elaborazione (b-elabora)¶
- Scan apcogtesbo: query SQL
SELECT * FROM apcogtesbo WHERE a_tes_azi = $1 AND a_tes_agg_app = $2con valoritm-cfg-cod-aziendae"A", ordinato per azienda. - Per ogni record con
a_tes_agg_app = "A"ea_tes_tip = "I": controlli-vari: accumula errori inw-txt(4000 byte):- DDT gia' presente su COGTESBO (chiave mag/anno/tipo/numero)
- Cliente nonno inesistente in COGGEANA
- Cliente padre inesistente (se valorizzato)
- Causale inesistente in COGTABEL tipo 15
- Anno (
a-tes-ann) diverso da anno della data - Se
a-tes-fl-crea-fat = "S": pagamento (tipo 14) e tipo riscossione (tipo 22) devono esistere - Documento senza righe valide (
calcola-imp-pagatoverifica almeno una riga cona-mag-segno = "U"e merce esistente)
- Se
ok-valido = "S":scrivi-cogtesbo(write testata, agente da COGGEANA, porto FRANCO, ecc.) +scrivi-cogmomag(write righe movimenti) + marcaa-tes-agg-app = "N"(update SQL) +altre-operazioni - Se
w-txtcontiene errori ->invia-emailvia POSTA agli indirizzitm-cfg-segnalazioni-op1..5 - Se
az-arc-ott = "S":importazione-pdf-e-archiviazione(scarica PDF da AreaAPP e archivia viaCOGU06) - Riallineamento contatore: legge COGNUMER tipo 12 (chiave mag/anno/cod=3); se
tes-bolla3 > num-num + 1riallinea il contatore.
Calcolo importo (calcola-imp-pagato)¶
Scan SQL SELECT * FROM apcogmomag WHERE a_mag_azi/mag/ann/tip/num = .... Per ogni riga con a_mag_segno = "U" e merce esistente in COGMERCI, somma a_mag_valore in w-a-mag-valore e conta in w-conta.
Chiusura (fine / z-chiudi)¶
- Chiude file, connessione SQL (
close-bin-sub-tm-cfg-bin-tipo). - Chiude tracciatura log.
Chiamate a sottoprogrammi¶
| Programma | Utilizzo |
|---|---|
RNEWCONF |
Lettura configurazioni |
COGU12 |
Calcolo importi/totali documento |
COGV64L |
Stampa label/etichette per documento |
COGP41 |
Stampa formati P41 |
COPIAF |
Copia file (PDF, output) |
SVIEW |
Visualizzazione file |
FTP |
Trasferimento FTP per spedizione documenti |
POSTA |
Invio email di segnalazione |
COGU06 |
Archiviazione PDF nell'archivio ottico |
Layer SQL apcogtesbo-sql-*, apcogmomag-sql-* |
Operazioni CRUD verso PostgreSQL (rdnxt, rwr, ecc.) |
Note implementative¶
- Programma del filone SWA* (importazioni da AreaAPP / AreaGate): vedi anche ASN015 per altri pattern simili.
- Pattern SQL standard:
sql-precall->sql-format-val-d-...->sql-setp-...(parametri posizionali) ->sql-statement->sql-prepare-id-...->sql-select->sql-set-statusfi. Lo scan e' unperform until w-fine-file or chiavi non corrispondonoconrdnxtinterno. - Filtro fisso
a-tes-tip = "I": vengono importati solo inserimenti (le altre operazioni AreaAPP non sono gestite da questo programma). - Il flag
a-tes-agg-appha valori "A" (da aggiornare) -> "N" (gia' aggiornato). - Lo schema XFD per le tabelle SQL e' generato tramite la direttiva
$xfd file=apcogtesbo/$xfd file=apcogmomagdavanti alle FD. - Tracciatura su file di log gestito da
gesdebug.cpy(chiamategesdebug-write-info). - Email di errore: viene inviata con il contenuto di
w-txt(max 4000 byte, righe da 200 con newline) tramite POSTA a tutti gli indirizzi configurati non vuoti. - Riallineamento progressivo COGNUMER: se la testata importata ha
tes-bolla3(numero DDT) maggiore del contatore corrente, il contatore viene avanzato ates-bolla3 + 1per evitare collisioni successive. - Causale di default: se
a-tes-causale = spacesil programma sostituisce contm-cfg-causale(chiavecausali.causale-ins-uscita-i).