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-giacenza → COGU12 (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-comm → COGU38 (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-bolle → tm-cfg-fl-versione
- cauzioni / attiva-partite-magazzino → tm-cfg-ges-cau-mag
- locazioni / gestione-tablet → tm-cfg-gestione-tablet
- uscite / riapertura-bdp-da-gestione-ddt → tm-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¶
-
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. -
Causale con valore 0: se
tes-causale = 0, vengono forzati i parametri (entrata/uscita='U', con-giacenza='SI', tipo-anagrafica='C') senza errore. -
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). -
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. -
Versioning: se configurato (
tm-cfg-fl-versione='S'), prima di cancellare viene salvata una versione storica del documento tramite COGU57. -
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.
-
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').
-
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. -
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. -
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.
-
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. -
Supporti/pallet: i movimenti su supporti fisici (cogmovsp) vengono cancellati e i saldi dei supporti (cogmersp) aggiornati tramite COGW72.
-
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.
-
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-optionscon stack a 10 livelli per supportare chiamate annidate (anche se attualmente non usate). Ogni chiamata pubblica incrementalo-leve 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 tramitez-chiudi. - Il debug operativo è supportato tramite
utilgesdebug.cpyche traccia ogni fase della cancellazione nel log.