ASN02C - Importazione schede di stima¶
Sorgente: cbl/asn02c.cbl (1.099 righe) | Tipo: Programma interattivo standalone
Menu: Assist 2.0 > Archivi > Strumenti > Importazione schede di stima
Scopo¶
Importa nell'azienda corrente la struttura completa di un modello di scheda di stima a partire dall'archivio centralizzato AreaAPP (PostgreSQL). Sostituisce eventuali pagine/informazioni gia' presenti localmente sul modello con quelle definite centralmente.
L'archivio centrale e' acceduto come file binari indicizzati esposti via SQL tramite la libreria sub-cfg-* (interfaccia su PostgreSQL): per ogni tabella locale ASN esiste l'equivalente ARP sulla banca dati centrale.
File e tabelle locali (output)¶
| File | Copybook | Scopo |
|---|---|---|
| ASNSKMOD | asnskmod |
Testata modello scheda di stima |
| ASNSKPAG | asnskpag |
Pagine del modello |
| ASNSKINF | asnskinf |
Informazioni posizionate sulle pagine |
| ASNINFOR | asninfor |
Anagrafica informazioni (riusato o creato nuovo) |
| ASNINFGR | asninfgr |
Gruppi di informazioni |
| ASNINFTT | asninftt |
Tabelle associate alle informazioni di tipo "T" |
| ASNINFTR | asninftr |
Righe (valori ammessi) delle tabelle |
| ASNINFVF | asninfvf |
Voci formattate (informazioni di tipo "V") |
| ASNINFDS | asninfds |
Helper/descrizioni estese delle informazioni |
Tabelle remote AreaAPP (input, lette via SQL)¶
| Tabella SQL | Copybook locale per record |
|---|---|
| ARPSKMOD | a-skm-rec |
| ARPSKPAG | a-skp-rec |
| ARPSKINF | a-ski-rec |
| ARPINFOR | a-inf-rec |
| ARPINFGR | a-igr-rec |
| ARPINFTT | a-itt-rec |
| ARPINFTR | a-itr-rec |
| ARPINFVF | a-ivf-rec |
Tutte le letture/scritture remote passano per i paragrafi sub-cfg-rd-*, sub-cfg-st-*-notmin, sub-cfg-rdnxt-* generati dal modulo SQL.
Programmi chiamati¶
| Programma | Scopo |
|---|---|
| RNEWCONF | Lettura configurazioni |
| GESSTR | Conversione testi (CONV-TESTO-IMPORTATO per i testi in ingresso, CONV-TESTO-X-ESPORT per i match) |
| sql-init / sql-exit | Apertura/chiusura connessione PostgreSQL (libreria SQL acu) |
Configurazioni RNEWCONF¶
| Gruppo | Parametro | Variabile | Uso |
|---|---|---|---|
abilita |
attiva-areaapp |
tm-cfg-attiva-areaapp |
"S" = funzione abilitata (altrimenti blocco con messaggio) |
areaapp |
cod-azienda |
tm-cfg-cod-azienda |
Codice azienda banca dati centrale |
areaapp |
db-conn-string (idx 1,2,3) |
tm-cfg-bin-conn-string(1..3) |
Stringa di connessione PostgreSQL spezzata in 3 segmenti (host/port, dbname/user, password) |
areaapp |
db-log-level |
tm-cfg-bin-log-level |
Livello log libreria SQL |
Se la stringa di connessione (segmento 1) e' vuota, il programma mostra m-asn02c-6-1 e chiude. Se attiva-areaapp not = "S", mostra m-asn02c-3-1 e chiude.
Variabili di maschera¶
| Variabile | Tipo | Descrizione |
|---|---|---|
tm-azienda |
x(06) | Codice azienda di destinazione (locale) |
tm-modello |
x(20) | Codice modello scheda da importare |
tm-modello-des |
x(60) | Descrizione modello (display da a-skm-des) |
Flusso elaborazione¶
Fase 1: Cleanup locale¶
Per il modello indicato, cancella in cascata tutti i record locali esistenti:
ASNSKMOD per askm-cod = tm-modello
ASNSKPAG per askp-mod-nome = tm-modello (chiave secondaria k02)
ASNSKINF per aski-mod-nome = tm-modello
Fase 2: Importazione testata e pagine¶
Scorre ARPSKMOD con chiave a-skm-azienda + a-skm-origine="S" + a-skm-modello e scrive il record ASNSKMOD con descrizione trasformata via GESSTR / CONV-TESTO-IMPORTATO.
Scorre ARPSKPAG (stessa chiave), salta i record con a-skp-fl-canc = "S", scrive ASNSKPAG mappando pagina, seq, fl-conformita, descrizione convertita.
Fase 3: Importazione informazioni posizionate¶
Per ogni record ARPSKINF non cancellato:
- Mappa posizione/dimensione/obbligatorieta'/gruppo
- Se
a-ski-grupponon vuoto → invocaimportazione-asninfgr(riusa o crea il gruppo suASNINFGR) - Invoca
importazione-asninforper allineare l'informazione di anagrafica - Scrive
ASNSKINFcon il numeroaski-infdefinitivo
Logica importazione-asninfor¶
Decide se riusare un record ASNINFOR gia' esistente o crearne uno nuovo:
- Cerca su
ASNINFORper descrizione (st-asninfor-notmin-chia2) - Per ogni match, confronta con
ARPINFORcorrispondente: se descrizione + descrizione breve + tipo + tabella + lunghezza + decimali + lunghezza descrizione coincidono → riusa (flag-ok-trovato = 'Y') - Se non trovato:
- Tipo
'R'(Riquadro) o'E'(Etichetta): riusa la prima informazione di quel tipo gia' presente in archivio (memorizzata inw-ainf-num-r/w-ainf-num-e); se nessuna esiste, scrive una nuova - Altri tipi: scrive nuova informazione con
write-asninfor(incrementa progressivow-ainf-numfinche' il WRITE non riesce)
- Tipo
- Invoca
scrivi-altriper allineare anche tabelle (ASNINFTT/ASNINFTR), voci (ASNINFVF), helper (ASNINFDS)
Logica scrivi-altri¶
- Se
a-inf-tip = 'T'ea-inf-tab not = spaces: cancella e riscrive testata + righe della tabella collegata - Se
a-inf-tip = 'V': cancella e riscrive le voci formattate - Se
a-inf-helpsignificativo: scrive/aggiorna helper suASNINFDS
Note implementative¶
- I testi sono convertiti due volte: in ingresso (
CONV-TESTO-IMPORTATO) per renderli usabili localmente, in fase di match (CONV-TESTO-X-ESPORT) per confrontarli con record locali - I commenti
deb(debug) precedono le chiamate sub-cfg-* SQL: sono lasciati in colonna 1 per identificare le righe inerenti la banca dati centrale - Il riconoscimento azienda
C99999conwo-parametro = '5'blocca il programma con messaggio specifico (m-asn02c-2-1): protezione contro l'esecuzione nell'azienda "banca dati" - Chiavi secondarie utilizzate:
asnskpag.k02,asninfor.k02(incluse in coda a procedure)
Messaggi principali¶
| ID | Contesto |
|---|---|
m-asn02c-2-1 |
Azienda banca dati centrale: importazione bloccata |
m-asn02c-3-1 |
AreaAPP non attiva |
m-asn02c-4-1 |
Titolo maschera |
m-asn02c-5-1 |
"Importazione in corso..." |
m-asn02c-6-1 |
Connection string mancante |
m-asn02c-7-1/8-1/9-1 |
Campi obbligatori |
m-asn02c-10-1 |
Modello non trovato su banca dati centrale |