Vai al contenuto

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:

  1. Mappa posizione/dimensione/obbligatorieta'/gruppo
  2. Se a-ski-gruppo non vuoto → invoca importazione-asninfgr (riusa o crea il gruppo su ASNINFGR)
  3. Invoca importazione-asninfor per allineare l'informazione di anagrafica
  4. Scrive ASNSKINF con il numero aski-inf definitivo

Logica importazione-asninfor

Decide se riusare un record ASNINFOR gia' esistente o crearne uno nuovo:

  1. Cerca su ASNINFOR per descrizione (st-asninfor-notmin-chia2)
  2. Per ogni match, confronta con ARPINFOR corrispondente: se descrizione + descrizione breve + tipo + tabella + lunghezza + decimali + lunghezza descrizione coincidono → riusa (flag-ok-trovato = 'Y')
  3. Se non trovato:
    • Tipo 'R' (Riquadro) o 'E' (Etichetta): riusa la prima informazione di quel tipo gia' presente in archivio (memorizzata in w-ainf-num-r / w-ainf-num-e); se nessuna esiste, scrive una nuova
    • Altri tipi: scrive nuova informazione con write-asninfor (incrementa progressivo w-ainf-num finche' il WRITE non riesce)
  4. Invoca scrivi-altri per allineare anche tabelle (ASNINFTT/ASNINFTR), voci (ASNINFVF), helper (ASNINFDS)

Logica scrivi-altri

  • Se a-inf-tip = 'T' e a-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-help significativo: scrive/aggiorna helper su ASNINFDS

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 C99999 con wo-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