COGG16 — Gestione Contratti di Compravendita per Mediatori¶
| Campo | Valore |
|---|---|
| Sorgente | cbl/cogg16.cbl |
| Program-ID | cogg16 |
| Tipo | Programma interattivo standalone (maschera a carattere) |
| Posizione menu | Vendite > Mediatori > Gestione Contratti |
Scopo¶
COGG16 gestisce l'inserimento, la variazione e la cancellazione dei contratti di compravendita per mediatori (funzione storicamente sviluppata per Guidetti). La particolarita' del programma e' che ogni contratto viene registrato come due ordini abbinati sullo stesso archivio testate ordini (COGTESOR), distinti dal progressivo di chiave tor-progr:
tor-progr = 0— ordine dal punto di vista del venditore (tor-clifor= venditore,tor-destina= compratore).tor-progr = 1— ordine "speculare" dal punto di vista del compratore: e' un duplicato contor-cliforetor-destinainvertiti.
Il programma agisce sempre sul progressivo 0 in fase di editing; al momento del salvataggio propaga le stesse informazioni sul progressivo 1 (loop di scrittura che incrementa tor-progr e ritorna alla scrittura testata/righe).
Il contratto e' sempre di tipo cliente: tor-tipo / tor-tipo1 valgono la costante k-ana-tipo-cli (tipo anagrafico cliente), tipo documento "C".
Struttura e flusso¶
Il programma e' organizzato a paragrafi con salti GO TO tra le sezioni della maschera (stile legacy del modulo ordini). Il flusso logico e':
- Inizializzazione (
can-can,a1,a4): controllo abilitazione (ctr-abil), apertura file (open-files/search-file), lettura azienda (rd-azi), disegno della maschera fissamm-1, lettura data di sistema, lettura configurazione da COGTABEL (x99-src-cfg/x99-rd-cfg) e recupero divisa di conto (get-divisa-conto, copybookGetDCont.cpy). - Testata (
a6…a10c): accettazione anno e numero contratto (COGS52per l'anno, con auto-numerazione o manuale a seconda della configurazione), venditore e compratore (COGS65, ricerca anagrafica), provvigioni venditore/compratore (via COGU10), data stipula e fine validita' (COGS52), tipo consegne singola/multipla (COGS60) e coefficiente di trascodifica provvigione (tm-prv-conv). - Lettura contratto esistente (
a6b3,metti-testata): se il numero e' rintracciato su COGTESOR viene caricata la testata (metti-testata) e le righe (COGRIGOR) nella tabella internamemoria(fino a 100 righe). Se non esiste,fill-for-newpredispone un nuovo contratto (fl-new = "S"). - Gestione righe (
a305…a460): griglia scrollabile delle righe (merce, quantita' contrattata, quantita' evasa, prezzo di listino, divisa estera). Ogni riga e' gestita tramite la subroutine di griglia merciCOGS68. Funzioni disponibili: F3=Aggiorna, F4=Cancella contratto, F5=Cancella riga, F6=Chiudi riga (adeguamento tramiteCOGU13), F7=Descrizioni aggiuntive (COGS46), F9=Prezzi (COGM12), F8=Aiuto divisa (WIN035). - Controlli formali (
a900): deve esistere almeno una riga significativa; la merce deve esistere in COGMERCI; la quantita' contrattata non puo' essere inferiore alla quantita' gia' consegnata; non si puo' cambiare merce su una riga gia' parzialmente evasa. - Salvataggio (
a910…a1046): eventuale pesca del numero da COGS25 (numerazione automatica), scrittura/riscrittura testata (fill-tor+wr-cogtesor/rwr-cogtesor), elaborazione delle righe (inserimento/variazione/cancellazione su COGRIGOR con aggiornamento impegno tramite COGU12), verifica consegne orfane (f-verifica-cogconor), duplicazione sul progressivo 1, e — per contratti nuovi a consegna singola — inserimento automatico consegne (COGG18). - Post-salvataggio (
a2000-acc): messaggio con opzioni F9=Stampa (COGG17), F5=Gestione consegne (COGG19), F1=Inserimento consegne (COGG18), ESC=Prosegui. - Cancellazione (
cancella…can-50): cancella testata e tutte le strutture collegate (righe, prezzi, consegne, descrizioni, legami) per entrambi i progressivi. - Chiusura (
fine,z-chiudi): chiusura file e uscita.
Gestione della quantita' impegnata¶
L'aggiornamento della quantita' impegnata in giacenza NON e' piu' fatto direttamente su COGSLMAG (il codice relativo, b1-aggiorno-cogslmag / c1-ripristino-cogslmag / e1-aggiorno-cogslmag, e' commentato). E' delegato alla subroutine COGU12, richiamata a ogni scrittura/riscrittura/cancellazione di riga COGRIGOR con i parametri di variazione impegno (tipo I/O, entrata/uscita, magazzino, merce, quantita' vecchia/nuova, causale, flag impegno).
Elaborazione righe al salvataggio (a920-loop)¶
Per ogni riga della tabella memoria:
- Merce vuota (
" 00000") ed esistente in origine (taesistenza = "S"): cancellazione riga (c-cancella-riga). - Riga esistente con stessa merce: variazione (
b-varia-riga). - Riga esistente con merce cambiata: cancellazione della vecchia e inserimento della nuova (
c-cancella-riga+e-inserisci-riga). - Riga nuova: inserimento (
e-inserisci-riga).
La cancellazione di una riga propaga la pulizia a tutti i record collegati: COGPREOR (prezzi), COGCONOR (consegne, tramite COGS17L/COGS17N a seconda della presenza di lavorazioni in COGLAVOR), COGDESOR (descrizioni aggiuntive) e COGLEGOR (legami ordini cliente/fornitore).
File e tabelle principali¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| COGTESOR | tor-rec |
I-O | Testate ordini/contratti. Chiave 1 tor-chia (tipo/anno/numero/progr). I due ordini abbinati differiscono per tor-progr (0=venditore, 1=compratore) |
| COGRIGOR | ror-rec |
I-O | Righe ordine (merce, ror-rig-pro, ror-qtaord, ror-qtacons, ror-prez, ror-currency). Chiave 1 ror-chia1, chiave 2 .k02 (usata se config tm-cfg-ord-righe = "P") |
| COGPREOR | por-rec |
I-O | Prezzi su ordine collegati alla riga (por-testa, por-merce, por-rig-pro) |
| COGCONOR | cor-rec |
I-O | Consegne dell'ordine. Chiavi usate: primaria, .k02 (per testata), .k05 (per riga: cor-o-testa/cor-merce/cor-o-rig-pro) |
| COGDESOR | dor-rec |
I-O | Descrizioni aggiuntive di riga (dor-tip='O') e provvigione particolare (dor-tip-3='PP') |
| COGLEGOR | lor-rec |
I-O | Legami ordini cliente/fornitore. Chiave 2 .k02 per riga cliente (lor-ordine-cli/lor-merce/lor-oc-rig-pro) |
| COGLAVOR | cla-rec |
Input | Commesse di lavorazione, per decidere se cancellare la consegna con COGS17L (con lavorazioni) o COGS17N (senza). Chiave 5 .k05 |
| COGGENER | gnr-rec |
I-O | Legame in chiave tra codice compratore/venditore e ordine (gnr-tip="CV", gnr-parte-1/gnr-parte-2). Chiave 2 .k02 |
| COGTESPR | tpr-rec |
I-O | Testate preventivi con riferimento all'ordine, cancellate in c8-varie-cancellazione |
| COGGEANA | ana-rec |
Input | Anagrafica clienti (nome, pagamento ana-pag1, RB ana-rb, fido ana-fido) |
| COGMERCI | mer-rec |
Input (external) | Anagrafica merci (descrizione, UM, EAN, distinta mer-padre) |
| COGTABEL | euta-rec |
Input (external) | Tabelle: divise (tipo 56) e configurazione programma (tipo 70, arg PROG key COGO05) |
| COGSLMAG | msal-rec |
Input | Saldi di magazzino (usata da ctr-gia, controllo giacenza, attualmente non richiamata nel flusso principale) |
| COGMAGA2 | mag-rec |
Input | Anagrafica magazzini |
| COGCNDCF | — | Input | Condizioni cliente/fornitore |
| FEURTAB | — | — | Tabella file Eurosystem (standard) |
Copybook principali¶
Strutture archivi (FD + record + chiavi)¶
cogtesor.cpy, cogrigor.cpy, cogpreor.cpy, cogconor.cpy, cogdesor.cpy, coglegor.cpy, coglavor.cpy, coggener.cpy, cogtespr.cpy, coggeana.cpy, cogmerci.cpy, cogtabel.cpy, cogslmag.cpy, cogmaga2.cpy, cogcndcf.cpy, cogfiles.cpy (FD feurtab).
Chiavi secondarie incluse manualmente a fine procedure division: cogrigor.k02, cogconor.k02, cogconor.k05, coglavor.k05, coggener.k02, coglegor.k02, cogtespr.k03.
Interfacce sottoprogrammi (linkage)¶
utils01.cpy (COGS01, in linkage), utils17l.cpy (COGS17L/N), utils21.cpy, utils25.cpy (COGS25), utils26.cpy, utils46.cpy (COGS46), utils52.cpy (COGS52), utils60.cpy (COGS60), utils65.cpy (COGS65), utils68.cpy (COGS68), utilu10.cpy (COGU10), utilu12.cpy (COGU12), utilu13.cpy (COGU13), utilm12.cpy (COGM12), utilw01.cpy / utilw02.cpy / utilw06.cpy (finestre di aiuto), k-u10.cpy / wrk-u10.cpy / u10-fun.cpy (gestione importi/divise COGU10).
Working-storage e utilita' comuni¶
cogazien.cpy (dati azienda), wstato.cpy, wgrave.cpy, wopenf.cpy, wnscr.cpy, stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, open1.cpy, mmmask.cpy, dtab.cpy, tstfun1.cpy, vscroll.cpy, sendw01.cpy / sendw02.cpy / sendw06.cpy, GetDCont.cpy (recupero divisa di conto), wcont.cpy / wcont1.cpy (linkage user-area).
Sottoprogrammi chiamati (CALL)¶
| Programma | Scopo |
|---|---|
| COGS52 | Accettazione/validazione data (anno contratto, data stipula, data fine validita') |
| COGS65 | Ricerca e accettazione codice anagrafico (venditore e compratore) |
| COGS60 | Selezione a opzioni per il tipo consegna (Singola / Multipla → tor-valuni C/A) |
| COGS68 | Gestione della griglia merci di riga (ricerca/display merce, EAN, UM) |
| COGS25 | Prelievo del numero contratto in numerazione automatica |
| COGS01 | Ricerca prezzo su listino di vendita (in linkage utils01, x1-src-lis) |
| COGS46 | Gestione descrizioni aggiuntive di riga |
| COGS17L | Cancellazione consegna CON lavorazioni collegate |
| COGS17N | Cancellazione consegna SENZA lavorazioni |
| COGU10 | Gestione/edit importi e provvigioni con conversione divisa |
| COGU12 | Aggiornamento della quantita' impegnata a giacenza a fronte di scrittura/riscrittura/cancellazione riga |
| COGU13 | Adeguamento riga ordine (operazione adegua-riga-ordine, usata dalla chiusura riga F6) |
| COGM12 | Recupero prezzo merce (funzione F9 sui prezzi) |
| COGG17 | Stampa/note di conferma compravendita del contratto (F9=Stampa; anche canc-stampa-contratto) |
| COGG18 | Inserimento consegne per mediatori (contratto a consegna singola e F1) |
| COGG19 | Gestione/cancellazione consegne su ordine (F5) |
| COGN12 | Modifica configurazione programma (funzione F1 di configurazione in x99-conf) |
| WIN035 | Finestra di selezione divisa estera (chiamata come 'WIN035.COB') |
Configurazione (COGTABEL tipo 70)¶
La configurazione del programma e' letta da COGTABEL con euta-tipo = 70, euta-cfg-arg = 'PROG', euta-cfg-key = 'COGO05' (paragrafo x99-src-cfg / x99-rd-cfg). Campi utilizzati:
| Campo COGTABEL | Campo interno | Significato |
|---|---|---|
euta-c015-n-righe |
tm-cfg-ord-righe |
Ordinamento righe: "P" usa la chiave secondaria COGRIGOR .k02 |
euta-c015-num |
tm-cfg-num |
Tipo numerazione: "A" = automatica (via COGS25), altrimenti manuale |
euta-c015-agg-gia |
tm-cfg-impegno |
Flag impegno giacenza (default "SI") |
euta-c015-cons-aut |
tm-cfg-cons-aut |
Flag consegne automatiche |
euta-c015-causale |
tm-cfg-causale |
Causale di default del contratto |
euta-c015-mer-tra |
tm-cfg-mer-tra |
Merce di trasporto |
euta-c015-speed |
tm-cfg-speed |
Flag modalita' veloce |
Se la lettura della configurazione fallisce, x99-cfg-init imposta tm-cfg-ord-righe = 'P'.
Note¶
- Il programma condivide la configurazione con COGO05 (chiave COGTABEL
PROG/COGO05), il modulo standard di gestione ordini: COGG16 e' la variante "mediatori" che genera la coppia di ordini speculari. - La gestione dell'impegno di giacenza e' interamente centralizzata su COGU12 (le vecchie routine dirette su COGSLMAG sono commentate nel sorgente).
- Le provvigioni sono memorizzate in
tor-prv-ele(1)(venditore) etor-prv-ele(2)(compratore) con la relativa divisa, etor-prv-convconserva il coefficiente di conversione provvigione; nella copia sul progressivo 1 le due provvigioni vengono scambiate coerentemente con l'inversione clifor/destina (paragrafofill-tor). - Il controllo "fuori fido" (
msg-fuori-fido) e' presente ma disattivato (codice commentato con marcatore*�*). - La tabella interna righe
memoriaha capacita' fissa di 100 righe (t-size = 100); il ciclo di salvataggio righe (a920-loop) itera fino a 100. - Se il contratto e' chiuso (
tor-chiu = 'C') il salvataggio aggiorna solo la testata e non tocca le righe.