ASN202 - Consumi su contratti a scalare (monte ore/valore)¶
Sorgente: cbl/asn202.cbl (5.288 righe) | Tipo: Programma interattivo con griglia paginata, file di transito e stampa su modello Word/XML
Menu: Assist 2.0 > Operativo > Visualizzazioni > Contratti a monte ore
Nota etichetta/funzione: L'etichetta di menu recita "Contratti a monte ore"; la funzione reale e' piu' ampia e gestisce sia i contratti "a monte ore" (tipo scalare
Q= quantita') sia quelli "a monte valore" (tipo scalareV). Nel sorgente il titolo maschera e' "Consumi su contratto a scalare".
Scopo¶
Visualizza in una griglia paginata il quadro dei consumi dei contratti "a scalare" (monte ore o monte valore) per un periodo e un cliente di fatturazione selezionati. Per ciascun contratto mostra la quantita'/valore concordato ("previsto"), il consumato precedente al periodo, il consumato nel periodo, i saldi e il residuo.
I dati mostrati non risiedono in un file permanente: vengono ricalcolati al volo estraendo le testate contratto (ASNCNTES/ASNCNTE2) e, per ciascuna, i movimenti/consumi tramite la subroutine ASNS17 (operazione CERCA-RESIDUO). Il risultato viene bufferizzato in due file di transito temporanei (t-contr per la sintesi contratto, t-mov per il dettaglio movimenti) e da qui alimenta griglia e stampa.
Oltre alla visualizzazione, il programma consente la stampa di un report (F9) su modello (COGPA3 + WORDMDL) con due tabelle: sintesi (TAB-SINT) e dettaglio movimenti (TAB-MOV), e l'esportazione in Excel della griglia (Shift+F5).
File acceduti¶
Input/lettura¶
| File | Copybook | Uso |
|---|---|---|
| ASNCNTES | acnt-rec |
Testata contratto. Estrazione periodo via chiave k07 (acnt-data-a, st-asncntes-notmin-chia7); filtri su acnt-fl-chiuso (C/D), acnt-rinnovato, acnt-cli-fat-cod |
| ASNCNTE2 | acn2-rec |
Estensione contratto: acn2-tipo-scalare (Q/V), acn2-qta-scalare (monte ore), acn2-data-scadenza (disdetta anticipata TASK-2499) |
| ASNCNCND | acnd-rec |
Condizioni contratto: acnd-importo (monte valore, per contratti tipo V) |
| COGGEANA | ana-rec |
Anagrafica clienti (descrizioni cliente fatturazione/assistito, listino) |
| COGMERCI | mer-rec |
Descrizione merce/prestazione |
| COGRACMC | rcm-rec |
Codice merce avanzato (rcm-cod-ava), chiave k02 |
Transito (file temporanei, creati/cancellati dal programma)¶
| File logico | Base | Nome fisico | Scopo |
|---|---|---|---|
| t-contr | cogtrans (redefinita via COPY replacing trs- → t-contr-) |
asn202_<oper> |
Sintesi per contratto (chiave cli-fat + cli-ass + id-contratto): concordato, uso precedente/periodo/successivo, saldi |
| t-mov | cogtrans (replacing trs- → t-mov-) |
asn202_MOV_<oper> |
Dettaglio movimenti/consumi del contratto |
| t-raggr | cogtrans (replacing trs- → t-asns03-t-) |
ASNS03_<oper> |
Buffer di ritorno da ASNS03 (usato solo in ok-scrivi-t-mov-1/ok-scrivi-t-contr-1, rami non attivi nel flusso principale) |
| asns17-t-mov | copybook proprio | (restituito da ASNS17 in asns17-nome-file) |
Movimenti restituiti da ASNS17, letti in tratta-ts17 |
Interfaccia (linkage)¶
Il programma e' avviato con procedure division using stringhe (usa wcont/wcont1 e utilv52). La variabile w-dati-called (w-dc-called) prevede una modalita' chiamata: se w-dc-called = 'S' e prima esecuzione, forza il tasto F7 (elabora) e va direttamente a a-inizio-dati; al termine (fine-ela) resta nella funzione anziche' tornare a a4. Il flusso da menu ha w-dc-called non valorizzato.
Chiavi secondarie¶
asncntes.k07(chiave per dataacnt-data-a)cogracmc.k02cogtrans.k01(per t-contr, t-mov, t-raggr)asns17-t-mov.k01
Programmi chiamati¶
| Programma | Operazione | Scopo |
|---|---|---|
| ASNS17 | CERCA-RESIDUO (asns17-crea-dettaglio = "S") |
Per ciascun contratto, calcola i consumi/residuo e produce il file asns17-t-mov con i movimenti dettagliati (data, merce, tipo, qta, valore) |
| ASNS03 | (calcolo prezzi) | Determina prezzo netto/lordo/sconti per merce (usato nei paragrafi ok-scrivi-t-mov-1/ok-scrivi-t-contr-1) |
| ASN210 | ASN210-CALLED |
(definito ma non usato nel flusso letto — dichiarazione utilasn210 non presente qui) |
| COGS52W/COGS54/COGS60/COGS65W/COGS68/COGS93/COGS95 | Gestione controlli maschera (date, combo, cliente, ecc.) via copybook utils52/utils54/utils65/utils68 |
|
| COGU10W | Arrotonda/Edita |
Formattazione/arrotondamento importi con divisa conto |
| COGPA3 | (selezione modello) | Selezione modello di stampa asn202 e mappa colonne tabelle TAB-SINT/TAB-MOV |
| WORDMDL | Apri-XML/Aggiungi-XML/Esegui |
Composizione documento di stampa da modello, tag per riga/totali |
| GRIDADMN | Prepara/Add-Record/Svuota + S-F4 |
Personalizzazione e riempimento griglia |
| RNEWCONF | Lettura configurazioni (paragrafo x99-src-cfg, di fatto vuoto: la config non e' letta nel sorgente attuale) |
|
| W$MENU/W$BITMAP | Menu contestuale griglia, bitmap pulsanti custom |
Configurazioni RNEWCONF¶
Il paragrafo x99-src-cfg e' presente ma vuoto: nella versione corrente il programma non legge chiavi RNEWCONF (tab-config con tm-cfg-tip-num-tsc, tm-cfg-tip-num-sot, tm-cfg-anche-da-pno-con e' dichiarata ma non popolata).
Parametri di selezione (pagina 1)¶
| Campo | Descrizione |
|---|---|
tm-cli-fat |
Cliente di fatturazione (0 = tutti). Lookup COGGEANA via COGS65W |
tm-disdetti |
Includere i contratti disdetti (S/N); di default N |
tm-rinnovati |
(300326) Includere i contratti rinnovati (S/N); di default N |
tm-da-data / tm-a-data |
Estremi del periodo (obbligatori; a >= da) |
tm-tipo-contratti |
Tipo scalare: Q (a quantita'/monte ore) o V (a valore); default Q |
Logica di elaborazione¶
Estrazione contratti (a-ricerca / ok-scrivi-cogtrans)¶
- Start su
ASNCNTESperacnt-data-a >= tm-da-data(chiave k07). - Per ogni contratto letto (
a-10-loop-cntes), filtri applicati inok-scrivi-cogtrans: - Disdetta anticipata (TASK-2499, 141125): se
acnt-fl-chiuso = 'D'eacn2-data-scadenza != 0, si usaacn2-data-scadenzacome data-fine effettiva (w-acnt-data-a). - Filtro periodo: se
tm-a-data > 0e la data-fine effettiva superatm-a-data, si scarta salvo cheacnt-data-da <= tm-a-data. - Se
tm-disdetti != 'S', si scartano i contratti conacnt-fl-chiuso = 'C'o'D'. - (300326) Se
tm-rinnovati != 'S', si scartano i contratti conacnt-rinnovato = 'S'. - Filtro tipo scalare: si scarta se
acn2-tipo-scalare != tm-tipo-contratti. - Per il contratto valido si scrive un record
t-contrconcli-fat,cli-ass,id-contratto, tipo scalare e concordato (t-contr-qv-previsto): daacn2-qta-scalarese tipoQ, daacnd-importose tipoV. - Si invoca ASNS17 (
CERCA-RESIDUO); al ritorno, intratta-ts17, si scorrono i movimenti (asns17-t-mov) scrivendoli int-move accumulando sul contratto: t-contr-qv-precedente(consumo con data <tm-da-data),t-contr-qv-periodo(data nel periodo),t-contr-qv-successiva(data >tm-a-data), sommando la quantita' (tipoQ) o il valore (tipoV).
Caricamento griglia (vis-tabella / spaginamento)¶
- La griglia e' paginata tramite
fscrol2.cpy/dtab.cpy/utilpggr.cpycon navigazionepg-up/pg-dwnsut-contr. rd1-ft-gocalcola per ogni riga:saldo-periodo = precedente + periodo,residuo-periodo = concordato - saldo-periodo,saldo-attuale = saldo-periodo + successivo.x-riempi-grid-recordcompone la riga visibile: cliente fatturazione/assistito (COGGEANA), riferimento contratto, stato (Rinnova./Disdetto/Disd.Ant), modo scalare ("A Quantita'"/"A Valore"), e i valori numerici.
Stampa (stampa, F9)¶
- Selezione periferica via
COGS54, modello viaCOGPA3(tipoasn202). - Individua gli indici delle tabelle
TAB-SINTeTAB-MOVnel modello; se assenti, blocca. stampa-tab-sint: scorret-contrraggruppando per cliente-fatturazione → cliente-assistito, emettendo righe (paragrafia1-riga-standard-sint) e totali a tre livelli (tot1= cliente assistito,tot2= cliente fatturazione,tot3= generale). Le colonne del modello sono pilotate da codici incogpa3-te-info:CFC/CFD(cod/des cliente),CTID(id contratto),CRRI(rif contratto),CDIS(stato disdetta),MOD(MONTE ORE/MONTE VALORE),QPRE(previsto),Q1..Q6(precedente, periodo, saldo periodo, successiva, saldo attuale, residuo).stampa-tab-mov: analogo sul dettagliot-mov, con colonneMOVD(data),MOVT(tipo INTERVENTO/DOCUMENTO),MOVR(riferimento),MOVQ(quantita'),MI/MA/MD(merce interna/avanzata/descrizione).- L'output XML viene composto con
WORDMDL(Apri-XML,Aggiungi-XML,Esegui) e stampato.
Messaggi principali¶
I messaggi sono in gran parte hardcoded (box-msg) e riguardano:
- "Funzione gia' in uso dall'operatore!!" (apertura in errore dei file di transito)
- "Attendere, prego ..." / "Stampa in corso..." (clock durante elaborazione)
- "Nessun dato ulteriore!!" / "Nessun dato precedente!!" (limiti paginazione)
- "Dettaglio tabella TAB-SINT , TAB-MOV non trovato." (modello di stampa incompleto)
Storico modifiche significative (dal sorgente)¶
- 141125: TASK-2499 — gestione disdetta anticipata (
acnt-fl-chiuso = 'D'+acn2-data-scadenza), usata sia in estrazione sia nelle colonne di stampa. - 300326: introdotto filtro/campo "contratti rinnovati" (
tm-rinnovati,acnt-rinnovato).
Note implementative¶
- I tre file di transito (
t-contr,t-mov,t-raggr) sono istanze distinte dicogtrans.k01generate viaCOPY ... REPLACING; vengono aperti in output (svuotamento) e poi i-o, e cancellati inz-chiudi. - Il consumo viene sommato per fasce temporali (precedente / periodo / successivo) rispetto agli estremi
tm-da-data/tm-a-data: e' il cuore del "residuo" del monte ore/valore. - Numerosi paragrafi
z-u10-*(formattazione importi) sono presenti ma con imoveverso i dati commentati (residui di un flusso costi/ricavi disattivato): non incidono sul flusso corrente. - I paragrafi
ok-scrivi-t-mov-1/ok-scrivi-t-contr-1(che usanoASNS03et-raggr) non sono raggiunti dal flusso principale letto: l'alimentazione avviene viaASNS17.