Vai al contenuto

COGM05 — Estrazione merci su supporto magnetico

Campo Valore
Sorgente cbl/cogm05.cbl
Program-ID cogm05
Tipo Programma interattivo (GUI) con scrittura file sequenziale
Posizione menu Magazzino > Archivi & Tabelle > Supp. Magnetici > Estrazione Merci

Scopo

COGM05 estrae l'anagrafica merci (COGMERCI) in un file sequenziale di testo a tracciato fisso, destinato a essere trasferito su supporto magnetico verso sistemi esterni. Il file prodotto si chiama MERCI.SEQ e viene creato nella directory temporanea dell'applicazione (ext-tmp-dir).

L'operatore delimita l'estrazione con un intervallo di codici merce (Da Prodotto / A Prodotto); per ciascuna merce nell'intervallo il programma scrive un record contenente, oltre ai dati anagrafici, il primo codice merce fornitore, i primi due codici fornitore, il prezzo di listino, l'aliquota IVA e la prima locazione di magazzino.

Il tracciato di output e' documentato a video nel campo note della maschera (paragrafo vis-note):

Colonne Contenuto
01/22 Cod.Merce Fornitore (mfr-cod-for)
23/31 Cod.Merce CO/GE (mer-chia)
32/67 Descrizione (mer-descr)
68/72 Fornitore 1 (mfr-for)
73/77 Fornitore 2 (secondo mfr-for)
78/88 Prezzo (7 interi + 4 decimali)
89/90 Aliquota IVA (mer-codiva)
91/97 Locazione magazzino BCCccPP (Box, Corsia, Colonna, Piano)
98/99 Unita' di misura (mer-um)

Struttura / Flusso

  1. Inizializzazione (apri): controllo abilitazione (ctr-abil), z-99-init-program, caricamento lingua, apertura file, lettura azienda (rd-azi), composizione del nome fisico del file sequenziale w-nome-seq = ext-tmp-dir + ext-os-slash + MERCI.SEQ. Recupero della divisa di conto (get-divisa-conto, da getdcont.cpy) e lettura della data di sistema (datasis). Preparazione della maschera popup (rd-msk-pop) e costruzione dei controlli.

  2. Accept intervallo merci:

  3. a-tm-da-merce (Da Prodotto) e a-tm-a-merce (A Prodotto): campi gestiti tramite la ricerca generalizzata merci COGS68W (paragrafi z-s68-tm-da-merce / z-s68-tm-a-merce). Il valore vuoto e' ' 00000'.
  4. Controlli x-controlla-tm-da-merce / x-controlla-tm-a-merce: verificano che la merce esista su COGMERCI (rd-cogmerci, messaggio "Merce inesistente!!" se assente) e che il codice di partenza non sia maggiore del codice di arrivo ("Codice partenza > di codice arrivo"). La descrizione viene riportata a video.
  5. Sono previsti i tasti F8 (aiuto) e F9 (ricerca avanzata); la conferma avviene con F3 (x-imposta-conferma, acc-conf-custom, messaggio "Confermi dati elaborazione ?").

  6. Elaborazione (b-00b-90-end):

  7. open output cogseque; se lo stato non e' '00' la funzione e' gia' in uso e viene interrotta ("Funzione gia' in uso, attendi e ritenta!!").
  8. Scan di COGMERCI a partire da tm-da-merce (st-cogmerci-notmin + loop rdnxt-cogmerci). Rottura quando la chiave supera tm-a-merce (se l'estremo superiore non e' ' 00000').
  9. Per ogni merce letta si incrementa il contatore letti tm-r-l (visualizzato in e-tm-r-l) e si chiama b1-estrai.

  10. Estrazione del singolo record (b1-estrai):

  11. Valorizza seq-rec con mer-chia, mer-descr, mer-codiva, mer-um.
  12. b11-src-mfr: scan di COGMERFO per la merce corrente (start ... key is > mfr-chia1, loop read next), recuperando il primo codice merce fornitore (mfr-cod-forw-cmf) e i primi due codici fornitore (mfr-forw-cf-1, w-cf-2).
  13. Prezzo: chiamata a COGS01 (ricerca prezzo su listino) con s01-currency = divisa di conto, s01-listino = 4, s01-merce = mer-chia, s01-data = data di sistema; il risultato s01-prezzo va in seq-pre-e.
  14. b12-src-loc: scan di COGLGMER per la merce corrente (start ... key is > lgm-chia1, loop read next), recuperando la prima locazione di magazzino (lgm-posizionew-loc).
  15. write seq-rec e incremento contatore scritti tm-r-s (visualizzato in e-tm-r-s).

  16. Chiusura (b-90-end / fine / z-chiudi): close cogseque, chiusura di COGMERCI/COGLGMER/COGMERFO e della window, z-99-exit-program, chiamata finale a COGS01 con s01-open = 'C' (chiusura risorse listino) e exit program.

Nota sul prezzo: il commento originale del sorgente prevedeva prezzo in Lire (9 interi + 2 decimali, seq-pre-l) oppure in Euro (7 interi + 4 decimali, seq-pre-e); il codice attivo valorizza sempre il formato Euro seq-pre-e (i due campi sono in redefines sullo stesso spazio).


File e tabelle principali

File logico Record Modalita' Uso
COGMERCI mer-rec Input Anagrafica merci da estrarre (chiave mer-chia = gruppo/sottogruppo/codice; mer-descr, mer-codiva, mer-um)
COGMERFO mfr-rec Input Legame merci / codici merci fornitore (chiave mfr-chia1 = mfr-merce + mfr-for; mfr-cod-for)
COGLGMER lgm-rec Input Legame merci / locazioni di magazzino (chiave lgm-chia1 = lgm-merce + lgm-prog; lgm-posizione = Box/Corsia/Colonna/Piano)
FEURTAB - Input Tabella file Eurosystem
COGSEQUE seq-rec Output (line sequential) File di estrazione MERCI.SEQ a tracciato fisso

Il record di output seq-rec (dichiarato nel sorgente) contiene: seq-cmf, seq-cm, seq-dm, seq-cf-1, seq-cf-2, seq-pre-l/seq-pre-e (redefines), seq-ali, seq-loc, seq-um.


Copybook principali

Screen Designer (in cbl/screens/)

Copybook Contenuto
cogm05.select SELECT dei file COGMERCI/COGLGMER/COGMERFO
cogm05.fd FD dei file
cogm05.wrk Working storage della maschera
cogm05.decla Declaratives
cogm05.prc Procedure generate (accessi ai file, chiamate COGS68W, gestione controlli)
cogm05-01.scr Maschera principale

Strutture dati e utility (in cpy/)

Copybook Contenuto
feurtab.fd / cogfiles.cpy FD e record FEURTAB
cogazien.cpy Dati azienda (az-main-mag)
k-u10.cpy Costanti COGU10
utils01.cpy Interfaccia COGS01 (listino, in linkage section)
utils68.cpy Interfaccia COGS68W (ricerca generalizzata merci)
utilu10.cpy Interfaccia COGU10W (formattazione importi)
utildlg.cpy Interfaccia DIALOGS
wcont.cpy / wcont1.cpy Aree di contesto/linkage (stringhe)
wstato.cpy / wgrave.cpy / wopenf.cpy / wnscr.cpy Working storage comuni
stato.cpy / stato1.cpy / winmsg.cpy / grave.cpy / opengen.cpy Procedure standard (gestione stato file, messaggi, apertura)
mmmask.cpy Runtime maschera (z-99-init-program / z-99-exit-program)
getdcont.cpy Recupero divisa di conto (get-divisa-conto)

Sottoprogrammi chiamati (CALL)

Programma Scopo
COGS01 Ricerca prezzo su listino (listino 4, divisa di conto, data di sistema); chiamato in b1-estrai con s01-open = 'O' e in chiusura con s01-open = 'C'
COGS68W Ricerca generalizzata merci per i campi Da/A Prodotto (invocato dalla catena cogm05.prc tramite le aree util-s68)
COGU10W Formattazione / arrotondamento importi (via z-carica-u10, interfaccia utilu10.cpy)

Note

  • L'apertura in output di COGSEQUE funge da lock logico: se il file e' gia' aperto da un'altra sessione (stato diverso da '00') l'elaborazione viene rifiutata con avviso all'utente.
  • Il file di output e' un line sequential creato nella directory temporanea; il nome fisico e' composto a runtime da ext-tmp-dir + separatore di sistema + MERCI.SEQ.
  • Gli scan su COGMERFO e COGLGMER sono difensivi: start con chiave > low-values sulla merce e loop read next con controllo di rottura sulla merce (mfr-merce/lgm-merce diverso da mer-chia); vengono presi rispettivamente solo il primo codice fornitore/merce-fornitore e i primi due fornitori, e la prima locazione di magazzino.
  • Il programma usa PERFORM ... THRU e GO TO (stile legacy del sorgente originale); le convenzioni attuali di progetto sconsigliano questi costrutti per i nuovi sviluppi.