Vai al contenuto

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 scalare V). 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 data acnt-data-a)
  • cogracmc.k02
  • cogtrans.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)

  1. Start su ASNCNTES per acnt-data-a >= tm-da-data (chiave k07).
  2. Per ogni contratto letto (a-10-loop-cntes), filtri applicati in ok-scrivi-cogtrans:
  3. Disdetta anticipata (TASK-2499, 141125): se acnt-fl-chiuso = 'D' e acn2-data-scadenza != 0, si usa acn2-data-scadenza come data-fine effettiva (w-acnt-data-a).
  4. Filtro periodo: se tm-a-data > 0 e la data-fine effettiva supera tm-a-data, si scarta salvo che acnt-data-da <= tm-a-data.
  5. Se tm-disdetti != 'S', si scartano i contratti con acnt-fl-chiuso = 'C' o 'D'.
  6. (300326) Se tm-rinnovati != 'S', si scartano i contratti con acnt-rinnovato = 'S'.
  7. Filtro tipo scalare: si scarta se acn2-tipo-scalare != tm-tipo-contratti.
  8. Per il contratto valido si scrive un record t-contr con cli-fat, cli-ass, id-contratto, tipo scalare e concordato (t-contr-qv-previsto): da acn2-qta-scalare se tipo Q, da acnd-importo se tipo V.
  9. Si invoca ASNS17 (CERCA-RESIDUO); al ritorno, in tratta-ts17, si scorrono i movimenti (asns17-t-mov) scrivendoli in t-mov e accumulando sul contratto:
  10. t-contr-qv-precedente (consumo con data < tm-da-data),
  11. t-contr-qv-periodo (data nel periodo),
  12. t-contr-qv-successiva (data > tm-a-data), sommando la quantita' (tipo Q) o il valore (tipo V).

Caricamento griglia (vis-tabella / spaginamento)

  • La griglia e' paginata tramite fscrol2.cpy/dtab.cpy/utilpggr.cpy con navigazione pg-up/pg-dwn su t-contr.
  • rd1-ft-go calcola per ogni riga: saldo-periodo = precedente + periodo, residuo-periodo = concordato - saldo-periodo, saldo-attuale = saldo-periodo + successivo.
  • x-riempi-grid-record compone 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 via COGPA3 (tipo asn202).
  • Individua gli indici delle tabelle TAB-SINT e TAB-MOV nel modello; se assenti, blocca.
  • stampa-tab-sint: scorre t-contr raggruppando per cliente-fatturazione → cliente-assistito, emettendo righe (paragrafi a1-riga-standard-sint) e totali a tre livelli (tot1 = cliente assistito, tot2 = cliente fatturazione, tot3 = generale). Le colonne del modello sono pilotate da codici in cogpa3-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 dettaglio t-mov, con colonne MOVD (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 di cogtrans.k01 generate via COPY ... REPLACING; vengono aperti in output (svuotamento) e poi i-o, e cancellati in z-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 i move verso 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 usano ASNS03 e t-raggr) non sono raggiunti dal flusso principale letto: l'alimentazione avviene via ASNS17.