ASN055 - Integrazioni contratti¶
Sorgente: cbl/asn055.cbl (1.343 righe) | Tipo: Programma interattivo a griglia
Menu: Assist 2.0 > Archivi > Contratti > Integrazioni contratti
Scopo¶
Manutenzione tabellare delle integrazioni a contratti (ASNCNITG): per ciascun riferimento contratto registra correzioni di qta/importo da applicare al monte ore/prestazioni. Le integrazioni gia' applicate (tm-id-contratto != 0) sono read-only.
Supporta modalita' standalone (uso da menu) e called (invocato da altro programma con un riferimento contratto pre-impostato, tramite util-asn055).
Interfaccia chiamato (linkage)¶
util-asn055:
| Campo | Tipo | Uso |
|---|---|---|
asn055-called |
x(08) | Identificativo programma chiamato ("ASN055") |
asn055-caller |
x(08) | Programma chiamante |
asn055-rif-contratto |
x(15) | Riferimento contratto filtro |
Quando asn055-called = k-program-id and asn055-caller not = spaces, attiva il filtro w-dc-called = "S", w-dc-rif-contratto = asn055-rif-contratto: la griglia mostra solo le integrazioni del contratto e ogni nuova riga viene forzata sullo stesso riferimento.
File acceduti¶
| File | Copybook | Modalita' | Uso |
|---|---|---|---|
| ASNCNITG | aitg-rec |
I-O | Tabella integrazioni: scrittura/modifica/cancellazione |
| ASNCNTES | acnt-rec |
Input | Lookup contratto per riferimento (chiave k03) e raccolta cli-fat, id-contratto |
| ASNCNTAR | acnr-rec |
Input | Righe tariffe contratto: verifica disponibilita' qta/importo per segno negativo |
| COGGEANA | ana-rec |
Input | Anagrafica clienti (nome) |
| COGMERCI | mer-rec |
Input | Validazione merce/prestazione |
Chiavi secondarie¶
asncnitg.k02(id-contratto)asncnitg.k03(rif-contratto)asncnitg.k04,k05(altri ordinamenti)asncntes.k03(rif-contratto + cli-fat + id-contratto)
Programmi chiamati¶
| Programma | Operazione | Scopo |
|---|---|---|
| ASN220 | ASN220-CALLED |
Lookup contratto attivato da F8 sul campo riferimento (ritorna asn220-id) |
| GRIDADMN | (gestione griglia) | Personalizzazione colonne (Prepara, Svuota-Tutto, gestione da F4) |
Campi griglia (tm-tab)¶
| Campo | Tipo | Note |
|---|---|---|
tm-id |
9(12) | ID record ASNCNITG. 0 = nuovo, !=0 = esistente |
tm-id-contratto |
9(12) | ID contratto: !=0 → integrazione gia' applicata, read-only |
tm-rif-contratto |
x(15) | Riferimento contratto |
tm-cliente/tm-nome |
9(05)/x(40) | Cliente di fatturazione (auto da contratto) |
tm-data |
9(08) | Data integrazione |
tm-merce-cm |
x(09) | Codice prestazione |
tm-qta/tm-qta-old |
9() | Quantita' / valore precedente per delta |
tm-importo/tm-importo-old |
9() | Importo / valore precedente |
tm-segno/tm-segno-old |
x(01) | P o N |
tm-note |
x() | Note libere |
tm-fl-riga-mod |
x(01) | Flag riga modificata |
Validazioni principali¶
x-controlla-tm-rif-contratto¶
Se tm-rif-contratto = spaces e tutti gli altri campi vuoti → riga "scartabile", esce ok.
Altrimenti:
- Obbligatorio se altri campi compilati
- Se w-dc-called = "S": deve coincidere con w-dc-rif-contratto
- Cerca su ASNCNTES chiave k03 (acnt-rif-contratto). Scorre tutti i contratti con quel riferimento, prende quello con id maggiore (ultimo rinnovato). Estrae acnt-cli-fat-tip/cod, legge COGGEANA, popola tm-cliente/tm-nome
x-controlla-tm-segno¶
Valori ammessi: P o N. Se N, invoca x-controlla-riga-contratto.
x-controlla-riga-contratto (segno negativo)¶
Calcola la disponibilita' residua sul contratto considerando:
- Trova
ASNCNTEScon id maggiore (ultimo rinnovato) - Scorre
ASNCNTAR(chiave k02) per quel contratto, considerando solopertinenza = 'C'e matchacnr-merce = tm-merce-cm (i) - Per ogni riga merce, scorre
ASNCNITG(chiave k03 per riferimento) di tutte le altre integrazioni non ancora applicate (aitg-id-contratto = zero), sommando per segnoPe sottraendo per segnoNaacnr-qtaeacnr-prezzo - Se la stessa riga in griglia era negativa (
tm-segno-old = "N"), restituisce qta/importo alla disponibilita' - Verifica
tm-qta (i) <= acnr-qtaetm-importo (i) <= acnr-prezzo. Se no, errorem-asn055-13-1/14-1 - PBUG-48 (22/11/18): se la prestazione non e' nell'ultimo contratto, cerca nei rinnovi precedenti scorrendo
ASNCNTES(chiave k03) →ASNCNTAR. Se non trovata nemmeno qui, errorem-asn055-15-1
Logica di salvataggio (b-aggiorna)¶
Per ogni riga del grid (b-k da 1 a tm-grid-dati-pnt):
tm-rif-contratto |
tm-id |
Azione |
|---|---|---|
| spaces (vuoto) | != 0 | Cancella (b3-cancella) |
| spaces | 0 | Ignorata |
| valorizzato | != 0 e tm-fl-riga-mod = "S" |
Modifica (b2-modifica) |
| valorizzato | 0 | Inserisce (b1-inserisci) con id auto-incrementato da w-amod-id |
L'auto-incremento gestisce collision con loop scrivi-asncnitg (retry su WRITE non-ok).
Protezione righe applicate¶
z-tm-tab-*-be-ep: per i campi rif-contratto, data, merce, qta, importo, segno, note, se tm-id-contratto (k-be) not = 0 → w-cell-accept-ok = 'N' (cella non editabile). Stesso vincolo se w-dc-called = "S" sul campo riferimento contratto.
Modalita' ordinamento¶
tm-ordine |
Chiave usata |
|---|---|
A |
aitg.k02 (id-contratto) |
B |
aitg.k03 (rif-contratto): filtrata su w-dc-rif-contratto se called |
C |
aitg.k04 |
D |
aitg.k05 |
Messaggi¶
| ID | Contesto |
|---|---|
m-asn055-2-1 |
Titolo maschera |
m-asn055-3-1/4-1 |
Abilitazione inserimento/modifica non concessa |
m-asn055-5-1/6-1 |
Controlli pre-cancellazione (no righe / gia' applicata) |
m-asn055-7-1/8-1/9-1 |
Riferimento contratto obbligatorio/inconsistente/non esistente |
m-asn055-10-1 |
Data obbligatoria |
m-asn055-11-1 |
Prestazione non esistente |
m-asn055-12-1 |
Segno non valido (deve essere P o N) |
m-asn055-13-1/14-1 |
Qta/Importo negativi non disponibili sul contratto |
m-asn055-15-1 |
Prestazione non presente neanche sui contratti precedenti |
Note implementative¶
- Le righe gia' applicate (
tm-id-contratto != 0) sono visualizzate ma protette:z-tm-tab-*-be-epimpedisce l'edit cella per cella - Il calcolo della disponibilita' per segno negativo tiene conto sia delle integrazioni esistenti non ancora applicate, sia delle modifiche in corso (
tm-segno-old) - Il campo
tm-fl-riga-moddistingue righe esistenti modificate da quelle non toccate (evita rwr inutili) - Logica multi-rinnovo (220119): per
acnt-chia3che ordina su rif-contratto + cli-fat + id, in caso di cambio cliente l'ordinamento puo' non essere temporale; viene preso esplicitamente l'id maggiore