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)¶
- Crea file di transito temporaneo con nome
#COGF20A.<operatore>nella directory temp - Carica configurazioni da RNEWCONF (limiti tutela, automazione)
- Imposta pulsanti custom (F8=Nuova riga, F9=Ordine nuovo, Shift+F6=Filtra, F5/F6/F7=consultazione)
- Se chiamato con parametri (uf20-caller non vuoto): precompila merce, consegna, ordine, quantita'
- Cerca il fornitore preferenziale della merce da COGCNDCF (tipo "FP")
Creazione transito (b-elabora)¶
Il file di transito viene popolato in 5 fasi:
- 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
- Fase 2 - Ottimizzazione tipo "1": ripartisce la quantita' residua sugli ordini collegati, rispettando il limite di tutela se configurato in modalita' "A"
- 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
- Fase 4 - Ottimizzazione tipo "3": ripartisce il residuo sugli ordini non linkati
- 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:
- 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
- distribuisci-ordini-nonlinkati (tipo "3"): per ordini con quantita' aggiuntiva > 0, crea nuove righe ordine e consegna sui documenti esistenti
- 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.