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¶
-
Inizializzazione (
apri): controllo abilitazione (ctr-abil),z-99-init-program, caricamento lingua, apertura file, lettura azienda (rd-azi), composizione del nome fisico del file sequenzialew-nome-seq=ext-tmp-dir+ext-os-slash+MERCI.SEQ. Recupero della divisa di conto (get-divisa-conto, dagetdcont.cpy) e lettura della data di sistema (datasis). Preparazione della maschera popup (rd-msk-pop) e costruzione dei controlli. -
Accept intervallo merci:
a-tm-da-merce(Da Prodotto) ea-tm-a-merce(A Prodotto): campi gestiti tramite la ricerca generalizzata merci COGS68W (paragrafiz-s68-tm-da-merce/z-s68-tm-a-merce). Il valore vuoto e'' 00000'.- 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. -
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 ?"). -
Elaborazione (
b-00→b-90-end): 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!!").- Scan di COGMERCI a partire da
tm-da-merce(st-cogmerci-notmin+ looprdnxt-cogmerci). Rottura quando la chiave superatm-a-merce(se l'estremo superiore non e'' 00000'). -
Per ogni merce letta si incrementa il contatore letti
tm-r-l(visualizzato ine-tm-r-l) e si chiamab1-estrai. -
Estrazione del singolo record (
b1-estrai): - Valorizza
seq-recconmer-chia,mer-descr,mer-codiva,mer-um. b11-src-mfr: scan di COGMERFO per la merce corrente (start ... key is > mfr-chia1, loopread next), recuperando il primo codice merce fornitore (mfr-cod-for→w-cmf) e i primi due codici fornitore (mfr-for→w-cf-1,w-cf-2).- 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 risultatos01-prezzova inseq-pre-e. b12-src-loc: scan di COGLGMER per la merce corrente (start ... key is > lgm-chia1, loopread next), recuperando la prima locazione di magazzino (lgm-posizione→w-loc).-
write seq-rece incremento contatore scrittitm-r-s(visualizzato ine-tm-r-s). -
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 cons01-open = 'C'(chiusura risorse listino) eexit 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 Euroseq-pre-e(i due campi sono inredefinessullo 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
outputdi 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:
startcon chiave> low-valuessulla merce e loopread nextcon controllo di rottura sulla merce (mfr-merce/lgm-mercediverso damer-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 ... THRUeGO TO(stile legacy del sorgente originale); le convenzioni attuali di progetto sconsigliano questi costrutti per i nuovi sviluppi.