COGV50W -- Inserimento/Gestione DDT di Vendita (versione grafica)¶
Sorgente: cbl/cogv50w.cbl | Tipo: Programma interattivo a maschera | Program-ID: COGV50W
Scopo¶
Inserimento e gestione delle bolle di vendita (DDT) in versione grafica. E' il programma principale di emissione bolle: testata, righe merce/prestazioni, magazzini su testata o su riga, gestione lotti/scadenze, gestione numeri seriali (S/N), spese accessorie, fatturazione contestuale o differita.
Posizione menu: Vendite > Bolle > Inserimento/Gestione.
File principali coinvolti (estratto)¶
| Tabella | Ruolo |
|---|---|
COGTESBO (tes-*) |
Testata bolla |
COGRIGBO (rig-*) |
Righe bolla |
COGRACCO (rac-*) |
Raccordi (bolla -> fattura, prelievi, ecc.) |
| COGRACBB / COGGENER | Raccordi bolla-bolla / dati generali (CM/CS S/N) |
COGMATRI (mtr-*) |
Matricole/articoli |
| COGU07 | Sub di ubicazione S/N |
COGTRANS / COGTRANS2 / COGTRANS3 (trs-*) |
Tabelle di transito per BdP -> bolla |
| TRAN-S16 / TRAN-S47 / TRAN-M96 / TRAN-U30 | Strutture di servizio temporanee |
Modifiche introdotte (build 2026-06-04)¶
Refactor: estrazione valida-ubicazione-sn¶
Il blocco di controlli "U07 vs causale uscita" e "U07 vs magazzino testata/riga" che si trovava inline nel ramo di acquisizione S/N e' stato estratto in un nuovo paragrafo riusabile valida-ubicazione-sn. Output: w-ubicazione-sn-ok (S/N).
Comportamento invariato per il chiamante originale (a-tm-sn-uscita), che ora chiama:
perform valida-ubicazione-sn
if w-ubicazione-sn-ok = "N"
go to a-tm-sn-uscita
end-if
Nuova feature: caricamento S/N da raccordi CM/CS del BdP origine¶
Quando una riga della bolla viene generata a partire da un BdP (presente in trs2-bdp-*) e la merce gestisce S/N (mer-fl-sn = "T") con configurazione tm-cfg-movimentazione-sn = "S", viene attivata una nuova catena di paragrafi che pre-carica i S/N nella griglia:
| Paragrafo | Ruolo |
|---|---|
carica-sn-da-bdp-merce |
Entry point: prepara contatori w-sn-out-trovati-cm/cs/scartati, invoca carica-sn-da-bdp-tipo per CM e CS |
carica-sn-da-bdp-tipo |
Scan COGGENER per gnr-tip = w-gnr-tip e gnr-parte-1 = bdp-chia1; filtra per gnr-cm-merce = w-sn-in-merce e instrada a carica-sn-cm o segnala-sn-cs |
carica-sn-cm |
Risolve la matricola via COGMATRI (mtr-mat -> mtr-sn), interroga COGU07 con cerca-sn-link, valida l'ubicazione con valida-ubicazione-sn, evita duplicati con lettura di COGV50-T-SN, scrive il S/N nel transito e lo aggiunge in griglia (z-aggiungi-sn-a-griglia + wr-cogv50-t-sn) |
segnala-sn-cs |
Per i raccordi CS (S/N "presente sul BdP ma non esistente"), emette warning di servizio senza aggiungerlo in griglia |
Aree di working aggiunte:
77 w-ubicazione-sn-ok pic x(01).
77 w-gnr-tip pic x(02).
01 w-sn-input.
02 w-sn-in-bdp-chia1.
03 w-sn-in-bdp-mag pic x(01).
03 w-sn-in-bdp-aa pic 9(04).
03 w-sn-in-bdp-num pic 9(06).
03 w-sn-in-bdp-mm pic 9(02).
03 w-sn-in-bdp-gg pic 9(02).
02 w-sn-in-merce pic x(09).
02 w-sn-in-riga-grid pic 9(04).
01 w-sn-output.
02 w-sn-out-trovati-cm pic 9(04).
02 w-sn-out-trovati-cs pic 9(04).
02 w-sn-out-scartati pic 9(04).
Trigger nel paragrafo che importa le righe BdP nella bolla:
if mer-fl-sn = "T" and
tm-cfg-movimentazione-sn = "S" and
trs2-bdp-num not = zero
...
move i to sav-i
move n-r to i
perform carica-sn-da-bdp-merce
move sav-i to i
end-if
L'indice di griglia i viene temporaneamente sostituito con n-r durante l'esecuzione (i paragrafi carica-sn-* lavorano su i per agganciarsi all'infrastruttura griglia esistente).
TASK-5283 -- Controllo Plafond lettera d'intento solo se DDT non ancora fatturato¶
Nei tre punti in cui veniva emesso il messaggio "Attenzione, l'imponibile documento supera il residuo della lettera d'intento" (con suffissi !, !!, !!!), il controllo + interruzione (perform vbx-msg + go to x-ritorna) e' stato condizionato a:
if fl-doc-fat not = "S"
...
end-if
Motivazione: per i DDT gia' fatturati il controllo plafond non e' piu' pertinente (lo scarico plafond e' avvenuto sul ddt originale al momento della fatturazione). Le segnalazioni gesdebug-write verso il log vengono mantenute solo quando il messaggio viene emesso.
Minor: rimossa initialize util-ncnf ridondante in x99-src-cfg¶
x99-src-cfg non re-inizializza piu' util-ncnf (la prima initialize e' commentata): l'utility veniva gia' inizializzata altrove, e la doppia inizializzazione perdeva eventuali raccordi gia' caricati.
Note implementative¶
- I paragrafi
carica-sn-*usanovbx-msg-critico-clienteper le anomalie (riga DDT, S/N, descrizione errore) evbx-msg-warningper i CS. Le segnalazioni sono indirizzate al cliente perche' indicano un'incongruenza tra BdP/Modula e magazzino fisico - Il filtro
gnr-cm-merce = w-sn-in-merceusa i primi 9 byte dignr-desper i tipi CM/CS (vedi commento*>DOC:nel sorgente) - La griglia S/N (
COGV50-T-SN) e' un file di transito locale: il caricamento da BdP riusa la stessa pipeline dell'inserimento manuale (z-aggiungi-sn-a-griglia)
Storico modifiche¶
| Build | Descrizione |
|---|---|
| 2026/0604 | Refactor: estratto valida-ubicazione-sn come paragrafo riusabile. Nuova catena carica-sn-da-bdp-merce / carica-sn-da-bdp-tipo / carica-sn-cm / segnala-sn-cs per pre-caricare i S/N in griglia partendo dai raccordi CM/CS del BdP origine. TASK-5283: controllo plafond lettera d'intento disattivato per DDT gia' fatturati (fl-doc-fat = "S"). Rimossa initialize util-ncnf ridondante in x99-src-cfg |