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¶
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.- 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. 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':- cliente proprietario matricola (
tratta-matr-chia4); - cliente di assistenza (
tratta-chia5); - matricola / serial (
tratta-matr-chia2); - cliente di fatturazione (
tratta-chia2); - tipo/modello contratto (
tratta-chia4); - intervallo numeri contratto (
tratta-chia67); - nessun filtro specifico → scansione completa (
tratta-chia1). 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 (scansioneASNCNMTRclone +ASNMATRI+COGRIFER), costruzione ditrs-chia2secondo l'ordinamento e scrittura del record di transito (wr-cogtrans).carica-tab/ grid — riversamento del transito nel grid viaGRIDADMN; 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 (dopocstato, prima dellacarica-file) sia nel percorso di selezione, cosi' il flag e' pulito a ogni costruzione. - In
tratta-matr-chia2: al posto diperform st-asnmatri-notminoramove "S" to w-fl-uso-bsnmatri,initialize bmtr-rec,perform st-bsnmatri-notmin. - In
tratta-asnmatri:move bmtr-rec to amtr-reccome prima istruzione, cosi' tutta la logica successiva che lavora sui campiamtr-*resta invariata e trasparente al cambio di file. - In
leggi-asnmatri: laperform rdnxt-asnmatrie' sostituita daperform rdnxt-bsnmatri(avanzamento sul cursore indipendente del clone). - In
ok-scrivi-cogtrans: dopowr-cogtrans, sew-fl-uso-bsnmatri = "S"si eseguemove bmtr-rec to amtr-rec, ripristinando inamtr-recil record della matricola in scansione dopo che la ricerca tecnico ha usato letture suasnmatri.
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 bug — 869av3ecp.