Vai al contenuto

COGU11 - Cancellazione Documenti (Bolle Magazzino)

Scopo

Utility per la cancellazione di documenti di magazzino (bolle). È una subroutine richiamata da altri programmi (es. COGV56) e non ha interfaccia utente propria. Supporta chiamate ricorsive (compilazione con opzione -Zr).

Il programma esegue la cancellazione a cascata di tutte le entità collegate a un documento di magazzino: testata, righe di movimentazione, descrizioni aggiuntive, trasporti, matricole, lotti, cauzioni, raccordi generici, buoni di prelievo, dati commesse e legami con contratti di licenza software.

Operazioni pubbliche (u11-ope)

Valore Descrizione
cancella-tutto Cancellazione definitiva completa del documento (testata + tutte le entità collegate)
cancella-entrate Cancella solo i legami particolari su archivi collegati a bolle di carico o reso clienti (es. contratti licenze SW)
cancella-mov-magaz Cancella solo i record di movimentazione magazzino (testata + righe cogmomag), usato per update del documento
cancella-mov-mag01 Come cancella-mov-magaz ma limitato al singolo progressivo indicato in u11-i-mm-pro
cancella-riga Cancella una singola riga di cogmomag, ripristinando giacenza e impegno

Linkage Section (parametri in/out)

La PROCEDURE DIVISION riceve: stringhe util-u11 (copybook utilu11.cpy).

Input (u11-input)

Campo Tipo Descrizione
u11-i-mm-mag PIC X(01) Magazzino del documento
u11-i-mm-ann PIC 9(04) Anno del documento
u11-i-mm-tip PIC X(01) Tipo documento (bolla)
u11-i-mm-num PIC 9(06) Numero documento
u11-i-mm-pro PIC 9(04) Progressivo riga (usato con cancella-riga e cancella-mov-mag01)
u11-i-data-ope PIC 9(08) Data operazione
u11-i-prog-ope PIC X(08) Operatore
u11-i-ope PIC 9(03) Tipo operazione numerico
u11-i-option PIC X(02) Opzioni aggiuntive
u11-i-cfg-db-sca PIC X(01) Flag: attiva scarico su DB esterno (chiama COGM56)
u11-i-cfg-db-esc PIC X(04) Gruppo/sottogruppo per scarico DB esterno
u11-i-cfg-gestione-kit PIC X(01) Tipo gestione kit (K = kit)

Output (u11-output)

Campo Tipo Descrizione
u11-ret-cod PIC X(80) Codice errore (spazi = successo)
u11-o-tes-chia PIC X(12) Chiave testata letta
u11-o-tes-data PIC 9(08) Data testata
u11-o-pre-num PIC 9(06) Numero preventivo collegato
u11-o-pre-acq PIC 9(01) Flag acquisto preventivo
u11-o-pre-prog PIC 9(03) Progressivo preventivo
u11-o-ctr-rec-del PIC 9(04) COMP Contatore record cancellati
u11-o-tab-cauzioni OCCURS 100 Tabella cauzioni di tipo 'E' rimosse (per eventuale ricrearle dopo aggiornamento)

Miscellaneous

Campo Tipo Descrizione
u11-m-view-msg PIC X(01) S = mostra messaggi a video (clock) durante elaborazione
u11-m-bypass PIC X(01) Flag bypass

File e Tabelle Acceduti

La lista dei file è definita in cogu11.select (incluso tramite COPY). I principali:

File Tipo accesso Descrizione
cogtesbo I-O (DELETE) Testata documenti di magazzino
cogmomag I-O (DELETE) Righe movimentazione magazzino
cogmoagg I-O (DELETE) Dati aggiuntivi riga movimentazione
cogmoag2 I-O (DELETE) Ulteriori dati aggiuntivi riga
cogcauzi I-O (DELETE) Cauzioni
cogdesag I-O (DELETE) Descrizioni aggiuntive righe
cogdesor I-O (DELETE) Descrizioni ordine (tipi BA, BB, BS)
coggener I-O (DELETE) Raccordi generici (tipi BB, TT, LF, LP, BT, DH)
cogtesbp I-O (REWRITE) Testata buoni di prelievo (riapertura)
cogrigbp INPUT Righe buoni di prelievo
cogtesor INPUT (lk) Testata ordini
cogrigor INPUT (lk) Righe ordini
cogmerci INPUT Anagrafica merci
cogtrasp I-O (DELETE) Dati trasporto
cogmerlt I-O (REWRITE) Saldi lotti merce
cogmovlt I-O (DELETE) Movimenti lotti
cogracbb INPUT Raccordo bolle (prima nota)
cogrigcm INPUT Righe commessa
cogmersp I-O Saldi supporti merce
cogmovsp I-O (DELETE) Movimenti supporti
coggeana INPUT Anagrafica clienti/fornitori
cogtabel INPUT Tabelle (causali magazzino tipo 15)
cogcndcf INPUT Condizioni clienti/fornitori
cogmltag I-O Aggiuntivi lotti
cogtesap I-O (DELETE) Testata appoggio
asncnmtf I-O (REWRITE) Movimenti contratti licenze SW
asncnmtv I-O (REWRITE) Voci contratti licenze SW
feurtab INPUT Tabelle azienda (configurazione)

COPYbook principali inclusi

Copybook Scopo
utilu11.cpy Area parametri LINKAGE (util-u11)
cogu11.select Istruzioni SELECT per tutti i file
cogu11.fd File Description per tutti i file
cogu11.wrk Working Storage specifica
cogu11.decla Sezione DECLARATIVES (I/O error handling)
cogfiles.cpy Record FD per feurtab
cogmomag.cpy Record riga movimentazione magazzino
cogmoagg.cpy Record dati aggiuntivi riga (prefisso mem-moa-)
cogmoag2.cpy Record dati aggiuntivi riga 2 (prefisso mem-moa2-)
cogpcauz.cpy Record cauzioni (usato x2 con prefissi u69r- e u69u-)
utilcogua8.cpy Parametri COGUA8 (cancellazione kit)
utilcogu57.cpy Parametri COGU57 (versioning)
utilcogw60.cpy Parametri COGW60 (raccordo prima nota)
utilcogw72.cpy Parametri COGW72 (aggiornamento saldi supporti)
utilcogqb3.cpy Parametri COGQB3 (cicli di lavorazione)
utilcogsa9.cpy Parametri COGSA9
utilcogb50.cpy Parametri COGB50
utilcogt43.cpy Parametri COGT43 (notifiche)
utilasns04.cpy Parametri ASNS04 (assist/licenze)
utilgesevlog.cpy Parametri GESEVLOG (event log)
utilwmsw01.cpy Parametri WMSW01 (WMS tablet)
utilm96.cpy Parametri COGM96 (kit/distinta variabile)
utilu12.cpy Parametri COGU12 (aggiornamento saldi magazzino)
utilu38.cpy Parametri COGU38 (saldi commessa)
utilu43.cpy Parametri utility pallet
utilu07.cpy Parametri COGU07 (cancellazione matricole)
utilu09.cpy Parametri COGU09 (legami ordine)
utilu18.cpy Parametri COGU18 (commesse)
utilu69.cpy Parametri COGU69 (cauzioni magazzino)
utilncnf.cpy Parametri RNEWCONF (nuova configurazione)
k-personal.cpy Costanti personalizzazione cliente
k-pcau.cpy Costanti cauzioni
costanti-cogevlog.cpy Costanti event log
cogazien.cpy Dati azienda (az-assist, az-commesse, az-lotti, az-imballi, ecc.)
wstato.cpy Costanti stato file
wgrave.cpy Gestione errori gravi
utilgesdebug.cpy Debug/log operazioni
u38call.cpy Routine chiamata COGU38

Paragrafi principali (PROCEDURE DIVISION)

Dispatcher principale (main section)

Valuta u11-ope e smista al paragrafo corrispondente. Prima apertura invoca init-all + x99-confi per leggere la configurazione da RNEWCONF.

cancella-tutto

Cancellazione definitiva completa. Sequenza: 1. open-level - inizializza livello di chiamata 2. read-testata - legge testata con lock, ricava parametri causale 3. COGQB3 (CANCELLA-USCITA) - scollega da cicli di lavorazione 4. x1-cancella - cancella righe cogmomag + ripristino giacenze + ordini + cauzioni + legami assist (ASNS04) 5. x2-canc-dag - cancella descrizioni aggiuntive (cogdesag) 6. x3-canc-trasporti - cancella record trasporto (solo se vettore presente) 7. x4-canc-matricole - cancella matricole uscite e entrate (COGU07) 8. x8-canc-gnr - cancella raccordi BB su coggener e riapre buoni di prelievo (cogtesbp) 9. x9-canc-tt-gnr - cancella raccordi TT su coggener 10. COGM56 (se cfg-db-sca='S') - scarico su DB esterno 11. COGB50 - cancella altri dati gestionali collegati 12. COGUA8 (se merce kit) - cancella movimentazione componenti kit 13. cancella-asncnmtf (se az-assist='S') - cancella legami contratti licenze SW 14. COGT43 - registra notifica di cancellazione documento 15. close-level

cancella-entrate

Cancella solo i legami su archivi collegati a bolle di carico/reso clienti. Invoca cancella-asncnmtf (se az-assist='S').

cancella-mov-magaz

Cancella righe movimentazione magazzino per aggiornamento documento (senza cancellare testata e entità collegate di contorno). Invoca: read-testata + x1-cancella.

cancella-riga

Cancella la singola riga di cogmomag specificata da u11-i-mm-pro. Invoca read-testata, poi legge il record con rd-cogmomag-lk e chiama x1-cancella-riga.

x1-cancella (PRIVATE)

Loop su tutte le righe cogmomag del documento: - Per ogni riga: chiama x1-cancella-riga - Dopo le righe: cancella cauzioni (cogcauzi), richiama ASNS04 (licenze), cancella testata (cogtesbo), registra event log (GESEVLOG), cancella raccordi LF/LP (coggener via tratta-gener), cancella raccordo prima nota (cogracbb via tratta-racbb→COGW60), cancella raccordo DH (DB Frontiera), gestisce pallet (u43), gestisce cauzioni magazzino (COGU69), cancella descrizioni ordine BA/BB/BS (cogdesor).

x1-cancella-riga (PRIVATE)

Per una singola riga di cogmomag: 1. COGU09 (cerca-riga-ordine) - trova riferimento ordine/riga ordine 2. Legge cogtesor + cogrigor con lock 3. DELETE cogmomag 4. canc-msal-giacenzaCOGU12 (ripristina giacenza su cogslmag) 5. DELETE cogmoagg + cogmoag2 6. cancella-movsp → DELETE cogmovsp + COGW72 (aggiorna saldi supporti) 7. COGU09 (cancella-legame) - rimuove legame ordine 8. COGM96 (se kit/distinta variabile) 9. del-giacenza-commCOGU38 (cancella saldo commessa) 10. COGU18 (se az-commesse='M') - cancella legame commessa 11. canc-lotto (se az-lotti='C' e merce con lotti) - cancella cogmovlt e aggiorna cogmerlt 12. x9-ripri-salimb - ripristina saldi imballi (cogslmag via COGU12, e COGS91 per saldi imballi)

canc-lotto (PRIVATE)

Scorre cogmovlt per chiave riga bolla. Per ogni movimento lotto: - Aggiorna giacenza lotto su cogmerlt (subtract o add in base al segno E/U) - DELETE cogmovlt

cancella-asncnmtf (PRIVATE)

Scorre asncnmtf per chiave bolla (tes-chia3). Per ogni record trovato: - Azzera il campo amtf-mag-chiap (toglie il legame con il documento) - REWRITE - Se il record non è di tipo 'S': aggiorna amtv-aggiunto-a-saldo su asncnmtv - Se il record è di tipo 'S': cerca righe di saldo successive su bsncnmtf (alias asncnmtf) non collegate a DDT e le marca come cancellate (bmtf-fl-canc = 'C')

x8-canc-gnr (PRIVATE)

Scorre coggener tipo 'BB' con parte-1 = testata bolla. Per ogni raccordo: - Legge cogtesbp e lo riapre (tbp-fl-cls = 'A') - Se il BDP era chiuso ('C'): ripristina quantità prenotate su cogslmag (tratta-qta-pren → COGU12) - Se configurato tablet e riapertura-bdp='T': chiama WMSW01 - DELETE raccordo su coggener

x2-canc-dag (PRIVATE)

Loop su cogdesag tipo 'R' per la bolla. DELETE di ogni record descrizione aggiuntiva.

x3-canc-trasporti (PRIVATE)

Legge cogtrasp con lock e lo cancella. Eseguito solo se tes-cura = 'V' (vettore) e tes-vet ≠ 0.

x4-canc-matricole (PRIVATE)

Chiama COGU07 due volte: 1. cancella-sub-doc sign='U' - cancella matricole uscite 2. cancella-sub-doc sign='E' - cancella matricole entrate (prime note)

x9-ripri-salimb (PRIVATE)

Se az-imballi='SI': gestisce il ripristino dei saldi imballi. Se la merce è imballo, va direttamente a ripristino saldo. Altrimenti cerca la riga imballo associata (mag-mer-riga-padre), la cancella da cogmomag con i relativi cogmoagg/cogmoag2, aggiorna giacenza via COGU12 e chiama COGS91 per saldi imballi.

x-salva-versione (PRIVATE)

Se tm-cfg-fl-versione='S': chiama COGU57 (Agg-versione) per salvare una versione del documento prima della cancellazione.

x99-confi (PRIVATE)

Legge la configurazione tramite RNEWCONF: - uscite / controllo-variazioni-su-bolletm-cfg-fl-versione - cauzioni / attiva-partite-magazzinotm-cfg-ges-cau-mag - locazioni / gestione-tablettm-cfg-gestione-tablet - uscite / riapertura-bdp-da-gestione-ddttm-cfg-riapertura-bdp

Programmi CALL

Programma Operazione chiamata Scopo
COGQB3 CANCELLA-USCITA Scollega documento da cicli di lavorazione
COGSA9 CANCELLA Cancellazione dati SA9 per bolla
COGU07 cancella-sub-doc Cancella matricole uscite/entrate
COGU09 cerca-riga-ordine, cancella-legame Gestione legame ordine/riga ordine
COGU12 (diretta) Aggiornamento saldi giacenza/prenotazioni su cogslmag
COGU18 (diretta) Cancellazione legame commessa (se az-commesse='M')
COGU38 (via call-u38-mag-delete) Cancellazione saldo commessa/cantiere
COGM56 C Scarico dati su DB esterno (se cfg-db-sca='S')
COGM96 Cancella, Ins-Consegna Gestione distinta variabile/kit
COGB50 CANCELLA Cancella altri dati gestionali documento
COGUA8 (spazio) Cancella movimentazione componenti kit
COGW60 D Cancella raccordo prima nota (cogracbb)
COGW72 (diretta) Aggiorna saldi supporti merce dopo cancellazione cogmovsp
COGS91 RIPR-SALDI Ripristino saldi imballi
COGT43 (diretta, tip='G') Registra notifica cancellazione documento
ASNS04 (diretta) Cancella legami assist (contratti) su testata
GESEVLOG REGISTRA-EVENTO Event log cancellazione cogtesbo
WMSW01 riapertura-bdp Aggiornamento WMS tablet per BDP riaperto
RNEWCONF (diretta) Lettura configurazione

Regole di business

  1. Lettura testata con lock: la testata (cogtesbo) viene sempre letta con lock prima di qualsiasi operazione. Se non trovata o causale non valida, l'operazione termina con errore in u11-ret-cod.

  2. Causale con valore 0: se tes-causale = 0, vengono forzati i parametri (entrata/uscita='U', con-giacenza='SI', tipo-anagrafica='C') senza errore.

  3. Ripristino giacenza: la giacenza su cogslmag viene sempre ripristinata tramite COGU12 (mai aggiornamento diretto). Il ripristino avviene solo se lo-con-gia = 'SI' (configurato dalla causale).

  4. Cauzioni di tipo 'E': le cauzioni in entrata non vengono solo cancellate ma anche salvate nella tabella di output u11-o-tab-cauzioni (max 100 elementi) per permettere al chiamante di ricrearle sul documento aggiornato.

  5. Versioning: se configurato (tm-cfg-fl-versione='S'), prima di cancellare viene salvata una versione storica del documento tramite COGU57.

  6. Riapertura BDP: alla cancellazione del documento, i buoni di prelievo collegati (raccordo 'BB' su coggener) vengono riaperti (stato 'A'). Se erano chiusi ('C'), vengono anche ripristinate le quantità prenotate. Se la configurazione tablet='S' e riapertura-bdp='T', viene notificato il WMS tablet tramite WMSW01.

  7. Gestione lotti: se az-lotti='C' e la merce ha lotti, i movimenti lotto (cogmovlt) vengono cancellati e le giacenze dei lotti (cogmerlt) vengono ripristinate (subtract per entrate 'E', add per uscite 'U').

  8. Gestione kit: se una merce di tipo padre-kit ('P'+'K') è presente nel documento, viene alzato il flag w-rot-merci-kit='S' e al termine viene chiamato COGUA8 per cancellare i componenti.

  9. Gestione distinta variabile (kit 'V'): se la merce ha mer-tipo-distinta='V', COGM96 viene chiamato due volte: per cancellare il legame bolla e per reinserire la consegna sull'ordine.

  10. Contratti licenze SW: se az-assist='S', vengono gestiti i legami con i contratti attraverso la tabella asncnmtf. I record di tipo 'S' (saldo) successivi al record trovato, non collegati ad altri DDT, vengono marcati come cancellati.

  11. Imballi: se az-imballi='SI', dopo la cancellazione della riga principale vengono cercate e cancellate anche le eventuali righe imballo associate (identificate tramite mag-mer-riga-padre), con ripristino dei relativi saldi.

  12. Supporti/pallet: i movimenti su supporti fisici (cogmovsp) vengono cancellati e i saldi dei supporti (cogmersp) aggiornati tramite COGW72.

  13. Commesse: se la riga ha riferimenti commessa (mag-mgp-rif o az-commesse='M'), viene cercata la commessa in cogrigcm e aggiornati i saldi tramite COGU38 e COGU18.

  14. Configurazione riapertura BDP (tm-cfg-riapertura-bdp): se = 'N' la riapertura BDP viene saltata completamente; 'G' = solo gestionale; 'T' = anche tablet.

Note tecniche

  • Il programma utilizza local-options con stack a 10 livelli per supportare chiamate annidate (anche se attualmente non usate). Ogni chiamata pubblica incrementa lo-lev e lo decrementa alla chiusura.
  • Tutte le variabili di working storage devono essere dichiarate con la LOCAL OPTION del compilatore (commento in testa al file).
  • Il programma si auto-cancella dalla memoria (cancel k-program-id) al termine tramite z-chiudi.
  • Il debug operativo è supportato tramite utilgesdebug.cpy che traccia ogni fase della cancellazione nel log.