COGO41 — Visualizzazione/gestione situazione cambi e trasporti ordini fornitore¶
Intestazione¶
| Campo | Valore |
|---|---|
| Sorgente | cbl/cogo41.cbl |
| Program-ID | cogo41 |
| Tipo | Programma interattivo GUI (maschera con griglia paginata) |
| Posizione menu | Ordini > Fornitori > Visualizzazioni > Situazione cambi/trasporti |
Scopo¶
COGO41 e' una funzione di consultazione e rettifica dei dati di cambio valuta e costo di trasporto associati agli ordini a fornitore. Per ogni ordine viene messa a confronto la coppia di valori:
- Statistica (dato di previsione registrato in testata ordine COGTESOR): cambio d'inserimento, divisa, costo/percentuale di trasporto previsti;
- Reale (dato consuntivato sulla bolla di carico collegata COGTESBO): cambio dogana/bolla, divisa, costo/percentuale di trasporto effettivi.
L'operatore filtra per fornitore e per stato ordine (Aperti / Chiusi), la maschera estrae gli ordini in un file di transito, li mostra in griglia paginata e — se abilitato in aggiornamento (w-abi-agg) — consente di modificare riga per riga i valori di cambio/trasporto. Le modifiche vengono riscritte sull'ordine (COGTESOR) e sulla bolla (COGTESBO) e innescano il ricalcolo dei prezzi medi tramite COGR26.
E' presente una personalizzazione per l'azienda EX (az-personal = "EX"): i campi del blocco "reale" e il cambio dogana sono modificabili solo per determinati profili operatore (wo-oper = 1 o 2).
Struttura e flusso¶
Il programma segue il pattern standard delle maschere GUI con griglia paginata (COGS65W per il fornitore, GRIDADMN per la griglia, gestione paginazione fscrol2/utilpggr).
- Inizializzazione (
apri):z-99-init-program, controllo abilitazione (ctr-abil), lettura azienda (rd-azi), apertura file (open-files), attivazione tasti funzione (F3 conferma/gestione, F8 dettaglio, Invio modifica, Shift-F4 personalizza griglia, Shift-F5 export Excel, F9 ricerca avanzata). Recupero divisa di conto via COGU10W (GetDivisaConto→w-currency-conto). Costruzione nome del file di transito temporaneow-trs-name(cartella temp +#$COGO41.<operatore>). - Apertura file di transito (
a4): (ri)creazione del file indicizzatocogtransinopen output(test di lock: se gia' in uso da altro operatore → messaggio efine), poi riaperturaopen i-o; svuotamento griglia. - Accept parametri:
a-tm-stato(stato ordini A/C) ea-tm-fornitore(fornitore, con help COGS65W; controllo esistenza su COGGEANA tipo "F";0= tutti i fornitori). - Estrazione (
a-fine-dati→carica-transito): scansione COGTESOR per chiave secondaria fornitore, popolamento del file di transito. - Caricamento griglia (
a-grid-ini→carica-tab): lettura paginata del transito in tabellatm-tabe riempimento della griglia. Se nessun ordine → messaggio e ritorno. - Ciclo griglia (
a-grid): navigazione con PgUp/PgDn (spaginamento sucogtrans), Shift-F4 (GRIDADMN personalizzazione colonne), Shift-F5 (export Excel), F3 (gestione ordine → COGO60), F8 (dettaglio bolla → WIN015), Invio (modifica riga). - Modifica riga (
a-riga-dettaglio…a-fine-dettaglio): pannello di dettaglio con i campi cambio/trasporto statistici e reali; abilitazioni dinamiche in base al tipo trasporto (Importo "I" / Percentuale "P") e alla presenza della bolla; alla conferma aggiornamento di COGTESOR e COGTESBO. - Chiusura (
fine/z-chiudi): chiusura file,close+delete file cogtrans(il transito e' temporaneo e viene eliminato),z-99-exit-program,goback.
File di transito¶
Il programma appoggia l'elaborazione su un file indicizzato temporaneo cogtrans, dichiarato manualmente nel sorgente (SELECT/FD, chiave trs-chia1) — non gestito da Screen Designer. Il nome fisico e' costruito a runtime (w-trs-name, univoco per operatore) e il file viene creato in open output e cancellato (delete file) all'uscita.
Record trs-rec (dichiarato inline), campi principali:
| Campo | Contenuto |
|---|---|
trs-chia1 (trs-ordine = tipo/anno/numero/progr, trs-fornitore) |
Chiave primaria |
trs-des-fornitore, trs-conferma |
Descrizione fornitore, n. conferma d'ordine |
trs-stat-cmb-div / -des, trs-stat-cambio |
Divisa e cambio statistici |
trs-stat-trasp-tip (I/P), trs-stat-trasp-div / -des, trs-stat-trasporto, trs-stat-perc |
Trasporto statistico (importo o percentuale) |
trs-real-cmb-div / -des, trs-real-cambio |
Divisa e cambio reali (bolla) |
trs-real-trasp-tip (I/P), trs-real-trasp-div / -des, trs-real-trasporto, trs-real-perc |
Trasporto reale |
trs-bolla (trs-mag, trs-annob, trs-tipob, trs-bolla3) |
Riferimento bolla di carico collegata |
File e tabelle principali¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| COGTESOR | tor-rec |
I-O | Testate ordini clienti/fornitori. Estrazione per chiave secondaria tor-chia2 (= tor-tipo1 "F" + tor-clifor + tor-chiu + tor-chia) tramite le routine del copybook cogtesor.k03 (st-cogtesor-notmin-chi2). Sono aggiornati tor-cambio-ins, tor-tra-imp, tor-tra-perc, tor-cambio-dogana, tor-currency |
| COGTESBO | tes-rec |
I-O | Testate bolle di carico (documento reale). La bolla e' individuata via COGU09; sono aggiornati tes-cambio, tes-tra-currency, tes-tra-imp, tes-tra-perc, tes-currency (chiave tes-chia3) |
| COGGEANA | ana-rec |
Input | Anagrafica fornitori (tipo "F"): descrizione fornitore, validazione codice |
| COGTABEL | euta-rec |
Input | Tabella EUROTAB tipo 56 (divise): descrizioni divisa euta-ve-des |
| cogtrans | trs-rec |
I-O (temp) | File di transito temporaneo (vedi sopra); cancellato all'uscita |
| FEURTAB | — | Input | Tabella file Eurosystem (feurtab.fd / cogfiles.cpy) |
Il record tor-rec fornisce i valori di partenza per il blocco statistico: tor-cambio-ins, tor-currency, tor-tra-currency, tor-tra-imp / tor-tra-perc, tor-cnf-num, tor-cambio-dogana; tor-chiu distingue ordini aperti/chiusi. Il record tes-rec fornisce il blocco reale: tes-cambio, tes-currency, tes-tra-currency, tes-tra-imp / tes-tra-perc.
Copybook principali¶
Screen Designer (generati)¶
| Copybook | Contenuto |
|---|---|
cogo41.select |
SELECT dei file di maschera |
cogo41.fd |
FD dei file di maschera |
cogo41.wrk |
Working storage della maschera |
cogo41.decla |
Declaratives I/O |
cogo41.prc |
Routine di I/O generate (rd-*, st-*, wr-*, rwr-*, rdnxt-*, rdprv-*) |
cogo41-01.scr |
Screen section (maschera con griglia e-tm-tab e pannello e-dettaglio) |
Strutture dati e comuni¶
| Copybook | Contenuto |
|---|---|
cogfiles.cpy / feurtab.fd |
FD feurtab |
cogazien.cpy |
Dati azienda (az-personal, az-main-mag, ...) |
cogtesor.k03 |
Routine I/O COGTESOR per chiave secondaria tor-chia2 |
cogtrans.k01 |
Routine I/O del transito cogtrans (chiave primaria) |
wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy |
Working storage comuni |
grave.cpy, stato.cpy, stato1.cpy, winmsg.cpy, opengen.cpy |
Routine comuni di fine procedure |
mmmask.cpy |
Infrastruttura programma standalone (z-99-init-program / z-99-exit-program) |
wcont.cpy / wcont1.cpy |
Area di linkage stringhe / continuazione; user-area ridefinita in w-chiave-ordine per COGO60 |
dtab.cpy, fscrol2.cpy, utilpggr.cpy |
Utility data + gestione griglia paginata (spaginamento) |
wgrid.cpy |
Handle e costanti griglia |
Interfacce sottoprogrammi (util-*)¶
| Copybook | Sottoprogramma |
|---|---|
utilu09.cpy |
COGU09 (ricerca magazzino/bolla dell'ordine) |
utilu10.cpy |
COGU10W (divisa/edit importi) |
utilu20.cpy |
COGU20 (edit/accept importi cambio e percentuali) |
utils52.cpy |
COGS52 (calendario) |
utils65.cpy |
COGS65W (help/accept fornitore) |
utile22.cpy |
COGE22 (help divise) |
utilw15.cpy |
WIN015 (dettaglio ordine) |
utilgdad.cpy |
GRIDADMN (amministrazione griglia) |
utilr26.cpy |
COGR26 (ricalcolo prezzi medi) |
Sottoprogrammi chiamati (CALL)¶
| Programma | Punto | Scopo |
|---|---|---|
| COGU10W | apri, edit importi |
Recupero divisa di conto (GetDivisaConto) ed edit/arrotondamento importi trasporto |
| COGS65W | z-s65-tm-fornitore |
Accept/help del codice fornitore con descrizione |
| COGU09 | call-u09 (cerca-magazzino) |
Individua la bolla di carico (movimento di magazzino) collegata all'ordine, per recuperare i dati "reali" da COGTESBO |
| COGE22 | accept divise trasporto (F8) | Help selezione divisa trasporto |
| GRIDADMN | preparazione/riempimento/modifica griglia, Shift-F4 | Gestione della griglia paginata (Prepara, Add/Modify-Record, Svuota, personalizzazione colonne) |
| WIN015 | a-grid (F8) |
Finestra di dettaglio dell'ordine selezionato |
| COGO60 | call-ges-ordine (F3) |
Gestione/apertura dell'ordine fornitore; al ritorno ricarica i dati dell'ordine da COGTESOR e riallinea il transito |
| COGR26 | call-r26 |
Ricalcolo prezzi medi d'acquisto dopo modifica; r26-tip-doc = "O" (ordine, chiave tor-chia) o "B" (bolla, chiave tes-chia3) |
Logica di business¶
Estrazione ordini (carica-transito)¶
Scansione di COGTESOR per la chiave secondaria fornitore (tor-tipo1 = "F", tor-clifor = tm-fornitore), filtrando per stato:
tm-stato = "C"(Chiusi): solo ordini contor-chiu = "C";tm-stato = "A"(Aperti): esclusi gli ordini contor-chiu = "C".
Per ogni ordine trovato viene scritto un record di transito con:
- Blocco statistico dai campi di testata ordine:
tor-cambio-ins,tor-currency,tor-tra-currency; tipo trasporto "I" contor-tra-impse importo non nullo, altrimenti "P" contor-tra-perc; descrizioni divisa lette da COGTABEL tipo 56; - Blocco reale: la bolla collegata e' cercata via COGU09 (
u09-o-mm-*) e riletta su COGTESBO; se trovata si prendonotes-cambio,tes-currency,tes-tra-currency,tes-tra-imp/tes-tra-perc; altrimenti il cambio reale ripiega sutor-cambio-dogana/tor-currency.
Modifica riga (a-fine-dettaglio)¶
Alla conferma della riga, se un valore del blocco statistico e' cambiato (tm-r-stat-cambio, tm-r-stat-trasporto, tm-r-stat-perc, tm-r-real-cambio) rispetto ai valori correnti dell'ordine, viene:
- riletto e riscritto COGTESOR (
tor-cambio-ins,tor-tra-imp,tor-tra-perc, e — se applicabile —tor-cambio-dogana; setor-currencyvuota viene impostata alla divisa di conto); - chiamato COGR26 con
w-r26 = "O"per il ricalcolo prezzi sull'ordine; - aggiornato il corrispondente record di transito (
rwr-cogtrans).
Se la riga ha una bolla collegata (tm-r-mag valorizzato) e i valori "reali" sono cambiati, viene riletta e riscritta COGTESBO (tes-cambio, tes-tra-currency, tes-tra-imp, tes-tra-perc), chiamato COGR26 con w-r26 = "B" e aggiornato il transito.
Il tipo trasporto "I"/"P" e' mutuamente esclusivo: prima della scrittura, se tipo = "I" viene azzerata la percentuale, se "P" viene azzerato l'importo (sia sul lato statistico sia sul reale).
Personalizzazione EX (az-personal = "EX")¶
Per l'azienda EX i campi del blocco reale (cambio, tipo/divisa/importo/percentuale trasporto) e l'aggiornamento del cambio dogana sono consentiti solo agli operatori con wo-oper = 1 o 2 (routine z-cambia-tm-r-real-* che abilitano/disabilitano i controlli). Per le altre aziende i campi reali sono sempre modificabili quando esiste la bolla.
Note¶
- Il file di transito
cogtranse' temporaneo, univoco per operatore, e viene cancellato (delete file) alla chiusura; il tentativo di apertura inopen outputfunge anche da lock: se fallisce (stato ≠ "00") la funzione e' considerata gia' in uso e il programma termina. - La griglia usa il pattern standard di paginazione (
fscrol2/utilpggr): il record letto e caricato in tabellatm-tab(maxk-max-ele-tab = 900righe); PgUp/PgDn eseguono lo spaginamento leggendo avanti/indietro sul transito. - La navigazione tra i controlli del pannello di dettaglio e' gestita "a mano" con
go toverso i paragrafia-tm-r-*e conx-test-mouseper gli spostamenti col mouse (stile storico del programma, precedente alle convenzioni attuali). - Il modulo appartiene alla gestione ordini fornitore: si integra con la gestione ordine COGO60 (F3) e con il dettaglio ordine WIN015 (F8); il ricalcolo dei prezzi medi e' delegato a COGR26.