Vai al contenuto

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 con tor-clifor e tor-destina invertiti.

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':

  1. Inizializzazione (can-can, a1, a4): controllo abilitazione (ctr-abil), apertura file (open-files / search-file), lettura azienda (rd-azi), disegno della maschera fissa mm-1, lettura data di sistema, lettura configurazione da COGTABEL (x99-src-cfg / x99-rd-cfg) e recupero divisa di conto (get-divisa-conto, copybook GetDCont.cpy).
  2. Testata (a6a10c): accettazione anno e numero contratto (COGS52 per 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).
  3. 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 interna memoria (fino a 100 righe). Se non esiste, fill-for-new predispone un nuovo contratto (fl-new = "S").
  4. Gestione righe (a305a460): griglia scrollabile delle righe (merce, quantita' contrattata, quantita' evasa, prezzo di listino, divisa estera). Ogni riga e' gestita tramite la subroutine di griglia merci COGS68. Funzioni disponibili: F3=Aggiorna, F4=Cancella contratto, F5=Cancella riga, F6=Chiudi riga (adeguamento tramite COGU13), F7=Descrizioni aggiuntive (COGS46), F9=Prezzi (COGM12), F8=Aiuto divisa (WIN035).
  5. 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.
  6. Salvataggio (a910a1046): 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).
  7. Post-salvataggio (a2000-acc): messaggio con opzioni F9=Stampa (COGG17), F5=Gestione consegne (COGG19), F1=Inserimento consegne (COGG18), ESC=Prosegui.
  8. Cancellazione (cancellacan-50): cancella testata e tutte le strutture collegate (righe, prezzi, consegne, descrizioni, legami) per entrambi i progressivi.
  9. 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) e tor-prv-ele(2) (compratore) con la relativa divisa, e tor-prv-conv conserva il coefficiente di conversione provvigione; nella copia sul progressivo 1 le due provvigioni vengono scambiate coerentemente con l'inversione clifor/destina (paragrafo fill-tor).
  • Il controllo "fuori fido" (msg-fuori-fido) e' presente ma disattivato (codice commentato con marcatore *�*).
  • La tabella interna righe memoria ha 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.