Vai al contenuto

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

  1. main / a000: imposta prog-err/w-nome-hlp; normalizza s58-open (se diverso da O/C/N forza N). Se s58-open = 'C' salta a fine (sola chiusura). Se s58-open = 'N' oppure e' la prima chiamata (fl-call not = 'S'), esegue open-files. Poi rd-azi (lettura dati azienda) e initialize s58-des.
  2. Ricerca descrizione avanzata: azzera i componenti di chiave rcm-tip e rcm-tip-2, imposta rcm-merce = s58-merce ed esegue rd-rcm-k2 (lettura COGRACMC per chiave secondaria rcm-chia2).
  3. se la lettura fallisce (stato not = '00') azzera rcm-cod-ava e rcm-len per non lasciare valori residui di una lettura precedente;
  4. se rcm-len > 36 e rcm-des not = spaces, la descrizione avanzata viene copiata in s58-des; altrimenti s58-des resta a spazi (il chiamante usera' la descrizione standard).
  5. fine: se s58-open not = 'O' chiude cogracmc e riazzera fl-call; esegue z-99-exit-program e exit 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-tip e rcm-tip-2, cosi' la chiave rcm-chia2 e' costruita solo con rcm-merce;
  • se la lettura di COGRACMC fallisce (stato not = '00'), rcm-cod-ava e rcm-len vengono azzerati per evitare di riutilizzare i valori di una merce letta in precedenza;
  • la descrizione avanzata rcm-des viene copiata in s58-des solo se rcm-len > 36 e rcm-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 > 36 e rcm-des not = spaces, con fallback su mer-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-len non 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-ava e rcm-len, e la descrizione estesa rcm-des viene usata solo se rcm-len > 36 e non a spazi (vedi Storico modifiche, allineamento TASK-5607/5584).
  • Riferimento: dettaglioClickUp 869e4c3ex