Vai al contenuto

ASN220 — Consultazione/selezione contratti

Sorgente: cbl/asn220.cbl | Program-ID: ASN220 | Tipo: Programma interattivo a griglia (Screen Designer)

Menu:

  • Assist 2.0 > Operativo > Visualizzazioni > Contratti
  • Assist 2.0 > Archivi > Contratti > Visualizzazione

Scopo

Consultazione e selezione dei contratti di assistenza (Assist 2.0). L'utente imposta i filtri sulla maschera e il programma costruisce una griglia con i contratti che soddisfano i criteri, caricandoli in un file di transito indicizzato (cogtrans) che alimenta il grid tramite GRIDADMN.

I filtri disponibili sulla maschera comprendono:

  • cliente di fatturazione (tm-ana-cli-f) e cliente di assistenza (tm-ana-cli-a);
  • intervallo numeri contratto (tm-contratto-da / tm-contratto-a);
  • matricola / serial number (tm-sn, tm-matricola);
  • cliente proprietario matricola (tm-ana-cli-prop / tm-cod-prop);
  • tipo contratto e modello (tm-acnp-cod, tm-acnm-cod);
  • stato (chiuso/rinnovato), tipo fatturazione, prestazione, tecnico, riferimento contratto.

Il programma puo' anche essere richiamato da altri moduli (parametro asn220-called = "ASN220-CALLED", copybook utilasn220) per selezionare un contratto e restituirlo al chiamante.

Ordinamenti disponibili

Il campo tm-ordinamento pilota la costruzione della chiave secondaria trs-chia2 del transito, quindi l'ordine di presentazione in griglia:

Valore Ordinamento Chiave costruita
C (default) Codice cliente fatturazione acnt-cli-fat + acnt-data-da + acnt-id-contratto
D Data inizio validita' acnt-data-da + acnt-cli-fat + acnt-id-contratto
E Data fine validita' acnt-data-a + acnt-cli-fat + acnt-id-contratto
N Numero contratto acnt-id-contratto
A Alfabetico cliente ana-nome + acnt-id-contratto

Struttura e flusso

  1. apri / open-files — inizializzazione GUI, caricamento configurazioni (x99-load-config, RNEWCONF), lingua, pulsanti custom (F8 Interventi, SF2 Filiera), lettura tabella modelli collegati al tipo contratto "Proposta" (ASNCNMOD) per generare le colonne importi della griglia.
  2. Gestione maschera — accept dei campi filtro con relativi controlli (x-controlla-tm-*) e aiuti; alla conferma (F3) si azzera il file di transito e si lancia la costruzione.
  3. carica-file — motore di selezione: in base ai filtri valorizzati sceglie un percorso di scansione dedicato (una delle chiavi disponibili sulle tabelle contratti/matricole). L'ordine di priorita' e':
  4. cliente proprietario matricola (tratta-matr-chia4);
  5. cliente di assistenza (tratta-chia5);
  6. matricola / serial (tratta-matr-chia2);
  7. cliente di fatturazione (tratta-chia2);
  8. tipo/modello contratto (tratta-chia4);
  9. intervallo numeri contratto (tratta-chia67);
  10. nessun filtro specifico → scansione completa (tratta-chia1).
  11. ok-scrivi-cogtrans — per ogni contratto candidato che supera i filtri: lettura anagrafiche (COGGEANA), calcolo totali matricole/canone (x1-totale-matricole), importi proposta/opzioni (x2-importo-proposta / x3-importo-opzioni), ricerca tecnico collegato alle matricole del contratto (scansione ASNCNMTR clone + ASNMATRI + COGRIFER), costruzione di trs-chia2 secondo l'ordinamento e scrittura del record di transito (wr-cogtrans).
  12. carica-tab / grid — riversamento del transito nel grid via GRIDADMN; l'utente puo' esportare in Excel (SF5), aprire dettaglio (F7), ricerca avanzata/stampa (F9) e navigare verso i moduli collegati (ASN050, ASN043, ASN044, ASN075, ASN200, ASN224, ASN070W/ASN080W).

Ricerca per matricola/serial (tratta-matr-chia2)

Quando il filtro attivo e' il serial (tm-sn), la selezione fa una scansione esterna delle matricole (ASNMATRI) e, per ogni matricola il cui serial corrisponde al prefisso richiesto (amtr-sn (1:x-tm-sn) = tm-sn (1:x-tm-sn)), una scansione interna dei collegamenti matricola→contratto (ASNCNMTR, chiave acnc-id-matricola) da cui risalire ai contratti da caricare in transito.


File e tabelle principali

File/Tabella Uso Note
cogtrans Scrittura/lettura File di transito indicizzato che alimenta la griglia (chiave primaria trs-chia1 = trs-id, chiave secondaria trs-chia2 per l'ordinamento). Nome fisico in w-trs-name
feurtab Lettura Tabella parametri/euristica
asncntes (acnt-) Lettura Testata contratti
asncntip / asncnmod (acnm-) Lettura Tipi e modelli contratto (colonne importi proposta)
asncncnd / asncnadb Lettura Condizioni/addebiti contratto
asncnmtr (acnc-) Lettura Collegamenti matricola → contratto
asncnint / asncnte2 / asncnopz Lettura Interventi, dati estesi, opzioni contratto
asnprmtr (aprt-) Lettura Proposte/tariffe matricola (importi proposta)
asnmatri (amtr-) Lettura Anagrafica matricole/serial
bsnmatri (bmtr-) Lettura File clone di asnmatri (secondo file logico sullo stesso fisico) usato per la scansione esterna delle matricole con cursore indipendente — vedi Storico modifiche
bsncnmtr (bcnc-) Lettura File clone di asncnmtr, usato nella ricerca tecnico in ok-scrivi-cogtrans
asnmtrtp / asntpatt / asnchdet Lettura Tipi matricola, tipi attivita', dettagli
asnmodel Lettura Modelli
coggeana (ana-) Lettura Anagrafica clienti
cogmerci Lettura Anagrafica merci/articoli
cogrifer (rif-) Lettura Riferimenti (nome tecnico)

I file bsnmatri e bsncnmtr sono generati dal Screen Designer nella .select/.fd/.prc tramite COPY ... REPLACING LEADING a partire da asnmatri/asncnmtr (record e paragrafi di I/O clonati con prefisso b*).


Copybook principali

  • Working / utilita': wgrave, wnscr, wopenf, wstato, cogazien, utilu10, utilncnf, wgrid, utilgdad
  • Interfacce sottoprogrammi: utils52, utils65, utils68, utilasn043, utilasn044, utilasn050, utilasn075, utilasn200, utilcogma3, utilasn224
  • Linkage: wcont, utilg32, utilasn070w, utilasn080w, wcont1, utilasn220 (parametri di chiamata quando ASN220 e' invocato da altri moduli)
  • Screen Designer: asn220.wrk, asn220.select, asn220.fd, asn220.decla, asn220.prc, asn220-01.scr

Sottoprogrammi chiamati (CALL)

Programma Scopo
ASN200 Selezione/gestione collegata contratti
ASN043 / ASN044 Gestioni contratto collegate
ASN050 Gestione contratto
ASN075 Gestione collegata
ASN224 Gestione collegata contratti
ASN070W / ASN080W Funzioni web/collegate
COGMA3 Servizio anagrafica
COGS65W Servizio
COGU10 Divisa/conto
COGG32 Servizio collegato
GRIDADMN Gestione griglia (custom, record, export)
RNEWCONF Lettura configurazioni

Paragrafi chiave

Paragrafo Ruolo
carica-file Motore di selezione: sceglie il percorso di scansione in base ai filtri valorizzati; azzera w-fl-uso-bsnmatri (vedi Storico)
tratta-matr-chia2 Avvia la scansione esterna delle matricole (via bsnmatri) per il filtro serial
elabora-asnmatri Loop di scansione matricole finche' fine-asnmatri
tratta-asnmatri Per la matricola corrente: confronto serial e, se coincide, scansione dei contratti collegati (ASNCNMTR)
leggi-asnmatri Lettura sequenziale successiva della scansione matricole (usa rdnxt-bsnmatri)
tratta-asncnmtr Risale al contratto dalla matricola e ne prepara il caricamento
ok-scrivi-cogtrans Costruisce il record di transito (totali, importi, ordinamento, tecnico) e lo scrive con wr-cogtrans
tratta-matr-chia4 / tratta-chia5 / tratta-chia2 / tratta-chia4 / tratta-chia67 / tratta-chia1 Percorsi di scansione alternativi per gli altri filtri
x1-totale-matricole / x2-importo-proposta / x3-importo-opzioni Calcolo totali matricole, importi proposta e opzioni

Storico modifiche

2026-07-03 — TASK-2361: loop infinito nella ricerca contratti per matricola/serial

Problema. Con le modifiche del 09.02.2026 la ricerca contratti per matricola/serial (paragrafo tratta-matr-chia2) era stata semplificata passando da st-asnmatri-notmin-chia2 a st-asnmatri-notmin (chiave primaria). La scansione esterna delle matricole e quella interna dei collegamenti matricola→contratto operavano pero' sullo stesso file logico asnmatri: la logica in ok-scrivi-cogtrans (ricerca tecnico) e le letture nel corpo del loop riposizionavano il cursore condiviso di asnmatri. Cosi', ogni volta che veniva trovato un serial valido, al rientro nel loop la rdnxt-asnmatri ripartiva dall'inizio del file, mandando il programma in loop infinito.

Correzione. Si introduce un file clone bsnmatri — secondo file logico sullo stesso fisico asnmatri, con record a prefisso bmtr- e paragrafi di I/O clonati (st-bsnmatri-notmin, rdnxt-bsnmatri, ...) — definito nei copybook Screens asn220.select / asn220.fd / asn220.prc tramite COPY "asnmatri.fd" REPLACING LEADING "amtr-" BY "bmtr-" .... La scansione esterna delle matricole usa bsnmatri, con cursore indipendente da quello di asnmatri usato nelle letture interne.

Dettaglio delle modifiche (marcate 030726):

  • Nuovo flag di working w-fl-uso-bsnmatri pic x(01) value spaces.
  • In carica-file: move spaces to w-fl-uso-bsnmatri (azzeramento prima di ogni selezione). Nota: nel sorgente l'azzeramento e' presente sia a inizio flusso (dopo cstato, prima della carica-file) sia nel percorso di selezione, cosi' il flag e' pulito a ogni costruzione.
  • In tratta-matr-chia2: al posto di perform st-asnmatri-notmin ora move "S" to w-fl-uso-bsnmatri, initialize bmtr-rec, perform st-bsnmatri-notmin.
  • In tratta-asnmatri: move bmtr-rec to amtr-rec come prima istruzione, cosi' tutta la logica successiva che lavora sui campi amtr-* resta invariata e trasparente al cambio di file.
  • In leggi-asnmatri: la perform rdnxt-asnmatri e' sostituita da perform rdnxt-bsnmatri (avanzamento sul cursore indipendente del clone).
  • In ok-scrivi-cogtrans: dopo wr-cogtrans, se w-fl-uso-bsnmatri = "S" si esegue move bmtr-rec to amtr-rec, ripristinando in amtr-rec il record della matricola in scansione dopo che la ricerca tecnico ha usato letture su asnmatri.

Effetto. La ricerca contratti per matricola non entra piu' in loop: la scansione esterna delle matricole avanza correttamente sul cursore del clone bsnmatri, indipendentemente dalle letture interne su asncnmtr / asnmatri.

2026-02-09 — Modifica precedente sulla ricerca serial (contesto)

Modifica (marcata mauro 09.02.2026) che aveva sostituito la ricerca su chiave secondaria serial (st-asnmatri-notmin-chia2) con la chiave primaria (st-asnmatri-notmin) e il confronto per prefisso serial in tratta-asnmatri. E' l'intervento che ha introdotto il problema del cursore condiviso poi risolto da TASK-2361.


Casistica problemi noti

Blocco (loop) nella ricerca contratti per serial number

  • Sintomo: la ricerca per serial number si bloccava a volte senza terminare (segnalato in ambiente Cortesi con serial 8548, ripetuto in molte matricole 8548/1, 8548/2, ...; e in ambiente Refrigo con serial contenenti "/").
  • Causa: la scansione esterna delle matricole e le letture interne (risalita al contratto, ricerca tecnico) usavano lo stesso file logico asnmatri; le letture interne riazzeravano il cursore condiviso e la scansione ripartiva da capo, generando un loop infinito.
  • Correzione: la scansione esterna delle matricole e' stata spostata sul file clone bsnmatri (cursore indipendente); vedi Storico modifiche → TASK-2361.
  • Riferimento: dettaglio bug869av3ecp.