Vai al contenuto

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-* usano vbx-msg-critico-cliente per le anomalie (riga DDT, S/N, descrizione errore) e vbx-msg-warning per 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-merce usa i primi 9 byte di gnr-des per 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