Vai al contenuto

COGF20 - Creazione Distribuzione

Panoramica

Programma interattivo GUI per la creazione della distribuzione ordini. Partendo da una merce e una consegna cliente, individua gli ordini fornitore collegabili, ottimizza automaticamente la ripartizione delle quantita' rispettando i limiti di tutela, e crea/aggiorna i documenti (consegne, righe ordine, distribuzione, tutela). Utilizza un file di transito temporaneo per gestire la sessione di lavoro.

Nota dal sorgente: la distribuzione NON gestisce distinte base e problematiche di produzione.

Posizione nel menu

Menu Percorso
Ordini Clienti > Distribuzione > Creazione distribuzione

Struttura del programma

File e tabelle utilizzati

File/Tabella Tipo Descrizione
FEURTAB Input Tabella di sistema
COGTESOR I/O Testata ordini (tor-chia)
COGRIGOR I/O Righe ordini (ror-testa, ror-merce, ror-rig-pro)
COGCONOR I/O Consegne ordini (cor-chia1, cor-o-testa)
COGDISOR I/O Distribuzione ordini (dis-tipo, dis-merce, dis-consegna-cli, dis-consegna-for)
COGTUTOR I/O Tutela distribuzione (tut-tipo, tut-c-mag/ann/tip/num)
COGGEANA Input Anagrafica generale (ana-tipo, ana-cod)
COGCNDCF Input Condizioni commerciali - fornitore preferenziale (cnd-cnd, cnd-key)
COGTRANS I/O File di transito temporaneo sessione (#COGF20A)
COGSLMAG Ref. Saldi magazzino (citato in commenti lock-holding)

Copybook principali

Copybook Descrizione
cogf20.select / .fd / .wrk / .decla / .prc File generati Screen Designer
cogf20-01.scr Screen section
k-u10.cpy Costanti COGU10
wgrid.cpy Gestione griglia paginata
utilgdad.cpy Interfaccia GRIDADMN
utils25.cpy COGS25 (numerazione automatica)
utils21.cpy COGS21
utils52.cpy COGS52 (date)
utils60.cpy COGS60 (combo)
utils65.cpy COGS65
utils68.cpy COGS68 (ricerca merce)
utils69.cpy COGS69 (generazione destinazioni)
utilu09.cpy COGU09 (chiusura/apertura ordini)
utilu10.cpy COGU10 (divise)
utilu12.cpy COGU12 (aggiornamento ordinato/impegni)
utilU84.cpy COGU84 (maschera dati testata ordine)
utilncnf.cpy Configurazioni RNEWCONF
utilw01.cpy WIN001
utile18.cpy Utility E18
cogazien.cpy Dati azienda
utilpggr.cpy Paginazione griglia
fscrol2.cpy Scroll griglia
u10-fun.cpy Funzioni U10

Chiavi secondarie utilizzate

Copybook Descrizione
cogtrans.k01 Chiave primaria transito
cogtrans.k02 Chiave 2 transito (tipo + consegna)
cogconor.k01-agg Chiave 1 COGCONOR (write/rewrite)
cogconor.k02 Chiave 2 COGCONOR (per ordine)
cogtutor.k02 Chiave 2 COGTUTOR
cogtutor.k03 Chiave 3 COGTUTOR (per consegna)
cogcndcf.k02 Chiave 2 COGCNDCF (condizioni commerciali)

Chiamate a sottoprogrammi (CALL)

Programma Scopo
GRIDADMN Gestione griglia avanzata (preparazione, add/modify/svuota record)
COGU09 Riapertura/chiusura ordini dopo modifica consegne
COGU10W Gestione divise e importi
COGU12 Aggiornamento ordinato/impegni magazzino
COGU84 Maschera dati testata ordine fornitore (crea-ordine)
COGS01F Ricerca prezzo da listino
COGS25 Numerazione automatica ordini e consegne
COGS69 Generazione destinazioni ordini (personalizzazione "QS")
COGO10 Visualizzazione ordine cliente (F5)
COGO60.COB Visualizzazione ordine fornitore (F6)
COGO17 Visualizzazione consegna cliente (F7)
RNEWCONF Lettura configurazioni

Costanti

Costante Valore Descrizione
k-trs-tipo-old "1" Record transito: ordine gia' collegato
k-trs-tipo-nolink "3" Record transito: ordine esistente non collegato
k-trs-tipo-new "5" Record transito: ordine nuovo da creare
k-tipo-distrib "DO" Tipo distribuzione ordini
k-stato-tut-nonevaso space Stato tutela non evaso
k-stato-tut-evaso "E" Stato tutela evaso
k-stato-ord-chiuso "C" Stato ordine chiuso
k-stato-ord-chiuso-manual "S" Stato ordine chiuso manualmente
k-stato-consegna-chiusa "C" Stato consegna chiusa
k-cnd-tipo-for-pref "FP" Tipo condizione fornitore preferenziale
k-tip-num-auto "A" Tipo numerazione automatica
k-max-ele-tab 100 Numero massimo righe griglia
k-trasporti-id "COGA09" ID modulo trasporti
k-eurocold "EC" Personalizzazione Eurocold

Configurazioni RNEWCONF

Chiave Gruppo Descrizione
LIMITE DI TUTELA ORDINI Quantita' limite per la tutela (tm-cfg-lim-tut)
AUTOMAZIONE LIMITE ORDINI Modalita' automazione: "A" = automatica con limite, "C" = controllo con blocco, "D" = disabilitata (tm-cfg-lim-aut)
porto-con-codice entrate Porto con codice (tm-cfg-porto-cod)

Linkage section

Il programma riceve parametri tramite user-area (util-f20):

Campo Tipo Descrizione
uf20-cli-cod 9(05) Codice cliente
uf20-tipo x(01) Tipo anagrafica (C=cliente, F=fornitore)
uf20-merce x(09) Codice merce (gruppo+sottogruppo+codice)
uf20-consegna x(16) Codice consegna cliente
uf20-ordine x(13) Codice ordine
uf20-qta-con 9(08)v999 Quantita' consegna
uf20-qta-dis 9(08)v999 Quantita' gia' distribuita
uf20-caller x(08) Programma chiamante
uf20-called x(08) Programma chiamato

Logica principale

Inizializzazione (apri)

  1. Crea file di transito temporaneo con nome #COGF20A.<operatore> nella directory temp
  2. Carica configurazioni da RNEWCONF (limiti tutela, automazione)
  3. Imposta pulsanti custom (F8=Nuova riga, F9=Ordine nuovo, Shift+F6=Filtra, F5/F6/F7=consultazione)
  4. Se chiamato con parametri (uf20-caller non vuoto): precompila merce, consegna, ordine, quantita'
  5. Cerca il fornitore preferenziale della merce da COGCNDCF (tipo "FP")

Creazione transito (b-elabora)

Il file di transito viene popolato in 5 fasi:

  1. Fase 1 - Ordini collegati (tipo "1"): scandisce COGDISOR per trovare le distribuzioni gia' esistenti per la merce e la consegna cliente in input. Per ciascuna trova la consegna fornitore e l'ordine collegato
  2. Fase 2 - Ottimizzazione tipo "1": ripartisce la quantita' residua sugli ordini collegati, rispettando il limite di tutela se configurato in modalita' "A"
  3. Fase 3 - Ordini non linkati (tipo "3"): scandisce COGTUTOR per trovare consegne fornitore attive di tipo distribuzione non ancora collegate alla consegna cliente. Esclude quelle gia' presenti nel transito e quelle con ordini chiusi
  4. Fase 4 - Ottimizzazione tipo "3": ripartisce il residuo sugli ordini non linkati
  5. Fase 5 - Ordini nuovi (tipo "5"): se rimane quantita' residua, crea righe vuote nel transito finche' il residuo non si azzera

Ottimizzazione (ottimizza-ordini-x-tipo)

Per ciascun ordine del tipo richiesto nel transito:

  • Se automazione "A": assegna fino a raggiungere tm-cfg-lim-tut, senza superarlo
  • Se automazione diversa da "A": assegna tutto il residuo al primo ordine disponibile
  • Aggiorna trs-qta-add e decrementa tm-qta-res

Conferma distribuzione (crea-distribuzione)

Alla conferma (F3), opera in tre passaggi:

  1. distribuisci-ordini-esistenti (tipo "1"): per ogni record nel transito, se la quantita' aggiuntiva e' diversa da zero, aggiorna la consegna (cor-qta), la riga ordine (ror-qtaord), l'archivio distribuzione (COGDISOR) e la tutela (COGTUTOR). Chiama COGU09 per verificare lo stato di chiusura
  2. distribuisci-ordini-nonlinkati (tipo "3"): per ordini con quantita' aggiuntiva > 0, crea nuove righe ordine e consegna sui documenti esistenti
  3. distribuisci-ordini-nuovi (tipo "5"): per ordini con quantita' aggiuntiva non nulla, chiama COGU84 per raccogliere i dati testata, poi crea ordine fornitore (COGTESOR), riga ordine (COGRIGOR), consegna (COGCONOR), distribuzione (COGDISOR) e tutela (COGTUTOR)

Cancellazione legame (cancella-legame)

  • Verifica che la consegna non sia parzialmente evasa (cor-qtacons > 0)
  • Cancella la riga consegna
  • Aggiorna la riga ordine (modifica-riga-ordine): decrementa la quantita' ordinata; se scende a zero, cancella la riga e verifica se l'ordine rimane senza righe per cancellare anche la testata
  • Chiama COGU12 per aggiornare ordinato/impegni
  • Aggiorna distribuzione e tutela

Griglia e navigazione

  • Griglia paginata con GRIDADMN, supporto scroll e personalizzazione colonne
  • Filtro per limite di tutela (Shift+F6): se attivo, esclude dalla visualizzazione i record con quantita' totale >= limite tutela
  • Dettaglio riga: accesso con Invio per modificare la quantita' aggiuntiva

File di transito

Il programma usa un file indicizzato temporaneo con chiave composta:

  • trs-tipo (x(01)): tipo record ("1"=collegato, "3"=non linkato, "5"=nuovo)
  • trs-ordine: tipo+anno+numero+progressivo dell'ordine fornitore
  • trs-o-rig-pro (9(04)): progressivo riga ordine
  • trs-consegna: magazzino+anno+tipo+numero+progressivo della consegna fornitore
  • trs-pro (9(04) comp-4): progressivo record

Chiave alternativa 2: trs-tipo + trs-consegna + trs-ordine + trs-o-rig-pro + trs-pro.

Campi dati: trs-c-data, trs-qta-tot, trs-qta-dis, trs-qta-add, trs-num-of, trs-fl-quadra, trs-fl-newline, trs-ana.