COGS58 — Subroutine descrizione completa merce (codice avanzato)¶
| Campo | Valore |
|---|---|
| Sorgente | cbl/cogs58.cbl |
| Program-ID | cogs58 |
| Tipo | Subroutine (chiamata using stringhe util-s58) |
| Posizione menu | Nessuna (sottoprogramma di servizio) |
Scopo¶
COGS58 e' una subroutine che, dato un codice merce, restituisce la descrizione completa/estesa (descrizione avanzata) presa dalla tabella dei raggruppamenti/codici merce avanzati COGRACMC. E' utile solo negli ambienti che gestiscono il codice merce avanzato: quando per una merce esiste una descrizione avanzata sufficientemente lunga, questa viene preferita alla descrizione anagrafica standard.
La chiamata avviene con l'area util-s58 (copybook utils58.cpy):
- Input
s58-merce— codice merce da cercare; - Input
s58-open— modalita' di apertura file: O= apre i file alla prima chiamata e li lascia aperti;C= chiusura forzata dei file (non esegue ricerca);N= apre e chiude i file ad ogni chiamata (default se il valore non e' valido);- Output
s58-des— descrizione trovata (spazi se non c'e' descrizione avanzata valida).
Struttura / flusso¶
main/a000: impostaprog-err/w-nome-hlp; normalizzas58-open(se diverso daO/C/NforzaN). Ses58-open = 'C'salta afine(sola chiusura). Ses58-open = 'N'oppure e' la prima chiamata (fl-call not = 'S'), esegueopen-files. Poird-azi(lettura dati azienda) einitialize s58-des.- Ricerca descrizione avanzata: azzera i componenti di chiave
rcm-tipercm-tip-2, impostarcm-merce = s58-merceed eseguerd-rcm-k2(lettura COGRACMC per chiave secondariarcm-chia2). - se la lettura fallisce (
stato not = '00') azzerarcm-cod-avaercm-lenper non lasciare valori residui di una lettura precedente; - se
rcm-len > 36ercm-des not = spaces, la descrizione avanzata viene copiata ins58-des; altrimentis58-desresta a spazi (il chiamante usera' la descrizione standard). fine: ses58-open not = 'O'chiudecogracmce riazzerafl-call; eseguez-99-exit-programeexit program.
File e tabelle principali¶
| File logico | Record/chiave | Modo | Uso |
|---|---|---|---|
| FEURTAB | cogfiles.cpy |
Input | Tabella file Eurosystem (nomi fisici, dati azienda) |
| COGRACMC | rcm-rec, chiave secondaria rcm-chia2 (rcm-tip, rcm-tip-2, rcm-merce) |
Input | Raggruppamenti / codice merce avanzato; campi letti: rcm-len (lunghezza descrizione), rcm-des (descrizione avanzata), rcm-cod-ava |
La routine rd-rcm-k2 esegue la read ... key is rcm-chia2 con gestione stato standard (cstato);
se lo stato e' '99' (lock) ritenta la lettura.
Copybook principali¶
| Copybook | Contenuto |
|---|---|
feurtab.fd / cogfiles.cpy |
SELECT/FD e record FEURTAB |
cogracmc.fd / COGRACMC.CPY |
SELECT/FD e record COGRACMC |
utils58.cpy |
Area di comunicazione util-s58 (s58-merce, s58-open, s58-des) |
WSTATO.CPY, WGRAVE.CPY, WOPENF.CPY, WNSCR.CPY |
Working storage comuni |
COGAZIEN.CPY |
Dati azienda |
WCONT.CPY / WCONT1.CPY |
Delimitatori area linkage stringhe |
STATO.CPY, WINMSG.CPY, GRAVE.CPY, OPEN1.CPY |
Copybook finali (gestione stato/apertura file) |
Storico modifiche¶
2026-07-16 — Descrizione avanzata usata solo se valorizzata (allineamento TASK-5607/5584)¶
La ricerca della descrizione avanzata e' stata resa robusta rispetto ai valori residui e alle descrizioni vuote, in linea con la stessa correzione applicata ai moduli di stampa ordini (cogo25m/cogo65m, TASK-5607) e preventivi (cogv92m, TASK-5584):
- prima della lettura vengono azzerati
rcm-tipercm-tip-2, cosi' la chiavercm-chia2e' costruita solo conrcm-merce; - se la lettura di COGRACMC fallisce (
stato not = '00'),rcm-cod-avaercm-lenvengono azzerati per evitare di riutilizzare i valori di una merce letta in precedenza; - la descrizione avanzata
rcm-desviene copiata ins58-dessolo sercm-len > 36ercm-des not = spaces; una descrizione avanzata vuota non sovrascrive piu' l'output.
Effetto: la subroutine non restituisce piu' una descrizione errata o vuota ereditata da una lettura precedente; in assenza di descrizione avanzata valida restituisce spazi e il chiamante ricade sulla descrizione anagrafica standard.
Note¶
- Programma pertinente solo per gli ambienti che gestiscono il codice merce avanzato (COGRACMC). Negli altri ambienti la descrizione avanzata non e' presente e la subroutine restituisce sistematicamente spazi.
- La stessa logica di selezione della descrizione (
rcm-len > 36ercm-des not = spaces, con fallback sumer-descr) e' replicata inline nei moduli di stampa ordini e preventivi.
Casistica problemi noti¶
Descrizione avanzata errata da valore residuo su lettura COGRACMC non trovata¶
- Sintomo: in alcuni documenti/stampe la descrizione merce lunga risultava troncata o errata; la subroutine poteva restituire una descrizione ereditata dalla merce letta in precedenza.
- Causa: dopo una lettura di COGRACMC non andata a buon fine,
rcm-lennon veniva azzerato e poteva mantenere un valore residuo, attivando erroneamente il ramo della descrizione estesa sulla merce successiva. - Correzione: alla lettura COGRACMC non trovata vengono ora azzerati
rcm-cod-avaercm-len, e la descrizione estesarcm-desviene usata solo sercm-len > 36e non a spazi (vedi Storico modifiche, allineamento TASK-5607/5584). - Riferimento: dettaglio — ClickUp 869e4c3ex