Vai al contenuto

COGO25 — Ristampa/stampa ordini fornitori (dispatcher)

Campo Valore
Sorgente cbl/cogo25.cbl
Program-ID cogo25
Tipo Programma GUI (subroutine, chiamata using stringhe)
Posizione menu Ordini > Fornitori > Stampe > Ristampa
Ordini > Buoni di versamento > Stampa

Scopo

COGO25 e' il programma di lancio (dispatcher) per la stampa/ristampa degli ordini fornitori. Non produce direttamente il modulo di stampa: raccoglie l'identificativo dell'ordine (anno, numero, progressivo), verifica che l'ordine esista, legge la configurazione di stampa e poi richiama il vero programma di stampa — la versione personalizzata dell'ambiente (cogo25<personal>) oppure, in assenza di personalizzazione, la versione standard cogo25no (a sua volta lanciatore delle versioni ad aghi / laser).

L'ordine trattato e' sempre di tipo fornitore (tor-tipo = k-ana-tipo-for = "F").


Modalita' di funzionamento

Il programma opera in due modalita', distinte dal contenuto del campo o25-id passato in linkage (redefine di user-area):

  • Interattiva (o25-id diverso da 'NODISP'): viene aperta la maschera cogo25-01.scr "Ristampa Ordini Fornitori" con i campi Anno / Numero ordine / Progressivo ordine; l'operatore inserisce i dati e conferma con F3. Sono disponibili i tasti F1 (configura stampa), F3 (conferma) e F8 (calendario).
  • Non visuale (o25-id = 'NODISP', flag interno fl-nodisp = k-yes): i dati dell'ordine e i parametri di forzatura stampante arrivano gia' valorizzati dal chiamante nella struttura util-o25; la maschera non viene mostrata, si esegue subito il controllo dati e la stampa. In questo caso i valori vengono travasati in tab-maschera (tm-anno, tm-numero, tm-progr) e in util-o25-altri-dati (u-o25-prf, u-o25-forza-prf).

Il programma distingue anche se e' stato lanciato come sottoprogramma o come programma autonomo tramite w-nome (confronto = 'cogo25'), gestendo di conseguenza la chiusura (z-99-exit-subroutine vs z-99-exit-program + close window).


Struttura / flusso

  1. apri: imposta prog-err/w-nome-hlp, legge la data di sistema (century-date), inizializza tab-maschera. Se o25-id = 'NODISP' travasa i parametri dal linkage. Poi z-99-init-program, ctr-abil (controllo abilitazione), open-files, rd-azi (lettura dati azienda) e x99-cfg (lettura configurazione stampa).
  2. Ramo NODISP: esegue x-controlla-dati; se i controlli parziali falliscono mostra il messaggio e va a fine, altrimenti salta direttamente a st-70-accept.
  3. Ramo interattivo: prepara la maschera (x-carica-lingua, titolo "Ristampa Ordini Fornitori", rd-msk-pop, z-costruisci-controlli) e accetta in sequenza i campi:
  4. a-tm-anno (Anno ordine, obbligatorio) — con help, F1=configura, F8=calendario;
  5. a-tm-numero (Numero ordine, obbligatorio);
  6. a-tm-progr (Progressivo ordine).
  7. a-fine-dati: x-controlla-dati complessivo; se non valido torna su a-tm-anno.
  8. st-70-accept: costruisce la chiave ordine (tor-tipo=F, tor-anno, tor-numero, tor-progr) e legge COGTESOR (rd-cogtesor). Se l'ordine non e' rintracciato: se lanciato come programma standalone esce, altrimenti mostra "ORDINE NON RINTRACCIATO" e torna sull'accept. Da COGTESOR estrae il tipo/codice anagrafica fornitore (tor-tipo1ext-ana-tip, tor-cliforext-ana-cod).
  9. Dispatch alla stampa:
  10. se l'ambiente e' personalizzato (az-personal diverso da spaces) costruisce il nome cogo25<personal> e lo richiama con call name-call using stringhe tab-maschera util-o25-altri-dati; in on overflow (programma inesistente) ricade su quello standard (st-80-standard);
  11. st-80-standard: richiama cogo25no con gli stessi parametri; in on overflow mostra "Impossibile eseguire stampa ordine!!".
  12. st-90-ok: esegue d-privacy (stampa modulo privacy via cogy27), fa cancel del programma chiamato, recupera l'eventuale codice eccezione (tm-exceptionfunzio) e, se l'utente e' uscito con ESC/F2 e non si e' in modalita' NODISP, torna su a-tm-progr.
  13. fine / z-chiudi: z-close-files e uscita (exit program).

Configurazione di stampa (COGTABEL tipo 70)

Il paragrafo x99-conf (richiamato da F1 e dalla catena x99-cfg) apre la finestra di configurazione della stampa ordini:

  • richiama COGN05 (call 'COGN05' using stringhe util-n05 con n05-tip = "F") per gestire la configurazione dei dati di stampa ordini clienti/fornitori;
  • x99-src-cfg legge la riga di COGTABEL con euta-tipo = 70, euta-cfg-arg = 'PRNT', euta-cfg-key = 'ORDNFO' (via rd-tabrd-cogtabel); se il record non esiste riempie euta-rec con '*';
  • x99-rd-cfg valuta il campo stampante euta-c005-prn: valore 'L001'tm-cfg-prn = 'B' (laser), altrimenti tm-cfg-prn = 'A' (aghi).

Il layout della configurazione stampa ordini (record euta-c005, redefine di euta-descr) e' descritto in cnfgprnt.cpy: euta-c005-prn (stampante), euta-c005-page, euta-c005-dat-con, euta-c005-int, euta-c005-ind, euta-c005-faxt, euta-c005-des-mer, euta-c005-tip-cod, euta-c005-cmc, ecc.


File e tabelle principali

File logico Record Modo Uso
COGTABEL euta-rec (chiave euta-key) Input Tabelle generalizzate; qui la configurazione stampa ordini (tipo 70, arg PRNT, key ORDNFO)
COGTESOR tor-rec (chiave primaria tor-chia = tor-tipo+tor-anno+tor-numero+tor-progr) Input Testata ordini clienti/fornitori; legge l'ordine fornitore da stampare
FEURTAB cogfiles.cpy Input Tabella file Eurosystem (percorsi/nomi file)

I file sono aperti in sola lettura (open input, paragrafi f-co-001/f-co-017 in cogo25.prc). Le routine di lettura rd-cogtabel e rd-cogtesor provengono dai copybook cogtabel.k01 / cogtesor.k01 (chiave primaria) inclusi in fondo alla procedure division.

Campi COGTESOR usati

  • tor-tipo = "F" (k-ana-tipo-for), tor-anno, tor-numero, tor-progr: chiave dell'ordine.
  • tor-tipo1, tor-clifor: tipo e codice anagrafica del fornitore (usati per ext-ana-tip/ext-ana-cod e per il modulo privacy).

Strutture linkage

Il programma riceve stringhe (area comune, copybook wcont.cpy/wcont1.cpy). La user-area (da utily27.cpy) e' ridefinita in util-o25:

  • o25-altri-dati: o25-prf (flag stampante/preferenza) e o25-forza-prf (forzatura stampante);
  • o25-id: identificativo di modalita' ('NODISP' per la chiamata non visuale);
  • o25-ordine: o25-o-ann, o25-o-num, o25-o-pro (anno/numero/progressivo ordine passati dal chiamante).

I dati per la stampa vengono girati al programma chiamato tramite tab-maschera (anno/numero/progressivo + tm-exception) e util-o25-altri-dati (u-o25-prf, u-o25-forza-prf).


Copybook principali

Screen Designer (in cbl/screens/)

Copybook Contenuto
cogo25.select SELECT dei file (COGTABEL, COGTESOR)
cogo25.fd FD dei file
cogo25.wrk Working storage della maschera (costanti k-program-id='COGO25', k-m-v-size, k-m-h-size, ID controlli)
cogo25-01.scr Maschera principale
cogo25.decla Declaratives
cogo25.prc Procedure di supporto (apertura/chiusura file, rd-msk-pop, gestione controlli, READLNG)

Strutture dati / utility (in cpy/)

Copybook Contenuto
feurtab.fd / cogfiles.cpy SELECT/FD e record FEURTAB
cogtabel.fd / cogtabel.cpy / cogtabel.k01 File, record e routine di lettura COGTABEL
cogtesor.fd / cogtesor.cpy / cogtesor.k01 File, record e routine di lettura COGTESOR
cnfgprnt.cpy Layout configurazioni di stampa (redefine euta-c005 per stampa ordini)
utiln05.cpy Interfaccia util-n05 (parametro n05-tip per COGN05)
utily27.cpy user-area / interfaccia util-y27 per il modulo privacy (COGY27)
utils52.cpy Interfaccia calendario COGS52 (util-s52)
cogazien.cpy Dati azienda (az-personal, ecc.)
k-personal.cpy Costanti di personalizzazione
wgrave.cpy / wnscr.cpy / wopenf.cpy / wstato.cpy Working storage comuni
wcont.cpy / wcont1.cpy Delimitatori area linkage stringhe

Copybook finali

grave.cpy, mmmask.cpy (programma GUI standalone: fornisce z-99-init-program/z-99-exit-program), opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy, config.cpy (paragrafi x99-cfg/ex-x99-cfg), cogo25.prc.


Sottoprogrammi chiamati (CALL)

Programma Contesto Scopo
cogo25<personal> st-70-accept (nome costruito con az-personal) Versione di stampa ordini fornitori personalizzata per l'ambiente; se non esiste (on overflow) si ricade sullo standard
cogo25no st-80-standard Versione standard/generalizzata: lanciatore delle stampe ordini fornitori ad aghi o laser
COGN05 x99-conf (F1) Configurazione dati di stampa ordini clienti/fornitori (n05-tip = "F")
cogy27 (COGY27) d-privacy Stampa del modulo privacy per l'anagrafica del fornitore (y27-in-caller = "COGO25", y27-tipo-ana, y27-cod-ana)
READLNG cogo25.prc (x-carica-lingua) Caricamento etichette maschera nella lingua configurata (COGO25.lng)

Dopo ogni stampa il programma esegue il cancel del modulo chiamato.


Storico modifiche

2026-07-16 — TASK-5607: descrizione avanzata merce sulle stampe ordini fornitori

Modifica nel modulo di stampa cogo25m (variante richiamata da COGO25 in base a az-personal, vedi Note). Nella composizione della descrizione articolo (w-des) la logica di scelta tra descrizione anagrafica (mer-descr) e descrizione avanzata letta da COGRACMC (rcm-des) e' stata corretta:

  • dopo la lettura di COGRACMC (rd-cogracmc-chia2), se la lettura fallisce (not w-verbo-ok) vengono azzerati rcm-cod-ava e rcm-len per non riutilizzare i valori di una merce letta in precedenza;
  • la descrizione avanzata rcm-des viene usata solo se rcm-len > 36 e rcm-des not = spaces;
  • se dopo questo la descrizione risulta vuota (w-des = spaces), si ricade sulla descrizione anagrafica mer-descr.

E' stata inoltre rimossa l'assegnazione incondizionata move spaces to rcm-des sul ramo di lettura fallita, che poteva azzerare erroneamente il campo.

Effetto: sulle stampe/ristampe degli ordini fornitori (e sui buoni di versamento) la descrizione dell'articolo non risulta piu' vuota ne' ereditata da un altro articolo: viene sempre valorizzata con la descrizione avanzata corretta oppure, in sua assenza, con la descrizione anagrafica standard. La stessa correzione e' stata applicata a cogo65m (ordini clienti) e a cogs58 (subroutine descrizione completa merce).


Note

  • L'accesso ai file e' in sola lettura: COGO25 non aggiorna ne' COGTESOR ne' COGTABEL. La marcatura "ordine stampato" (tor-fl-sta) e la stampa vera e propria sono a carico del programma di stampa richiamato (cogo25<personal> / cogo25no).
  • Il campo di configurazione euta-c005-prn letto in x99-rd-cfg fa riferimento al layout euta-c005 descritto in cnfgprnt.cpy (configurazione stampa ordini, COGTABEL tipo 70 / PRNT ORDNFO).
  • La stessa maschera e' usata sia per la ristampa ordini fornitori sia per la stampa dei buoni di versamento (entrambe le voci di menu puntano a COGO25): la differenziazione del modulo effettivo e' demandata al programma di stampa personalizzato e alla configurazione.
  • Esistono numerose varianti personalizzate del programma di stampa in cbl/ (es. cogo25a, cogo25bb, cogo25be, cogo25ec, cogo25eg, cogo25fx, cogo25ip, cogo25m, cogo25om, cogo25qs, cogo25wi), selezionate a runtime tramite az-personal.