COGG77 - Assemblaggio interno automatico¶
Funzione¶
Programma specifico per Artic SEALS. Riceve un codice articolo e una quantita in evasione, determina i componenti necessari dalla distinta base, gestisce la selezione dei lotti merce e crea i lotti di produzione sugli ordini di lavorazione.
Chiamante principale: COGG69HT (inserimento BdP via barcode)
Flusso principale¶
- Caricamento distinta base componenti (
b-cerca-componenti) - Ricerca accantonamenti su magazzino logistico (
a4-cerca-acc-mag-log) - Saltata se mag logistico non configurato o se Blue Seals (
az-main-mag = "B") - Se non trovati, ricerca prenotazioni via COGPRENO (
a4-cerca-componenti-accantonati) - Selezione automatica lotti liberi (
a4-seleziona-comp-automatici) - Se restano fabbisogni residui: prelievo Modula a lista asincrona (
m1-verifica-lista-modula) — vedi sezione dedicata - Gestione interattiva griglia componenti
- Determinazione lotti di produzione e creazione ordini di lavorazione
- Per ogni lotto provvisorio: creazione documenti scarico componenti (
e4-crea-scarichi-per-mag) - Documenti separati per magazzino principale e magazzino logistico
Selezione lotti - Priorita¶
1. Accantonamenti su magazzino logistico (a4-cerca-acc-mag-log)¶
Ricerca BdP creati durante il versamento componenti (COGF64) sul magazzino logistico.
Flusso:
1. Scorre la griglia componenti; per ogni merce non ancora assegnata:
- a4-cerca-bdp-per-merce: cerca COGRIGBP per merce (chia5)
- Filtra: rbp-mag = tm-cfg-mag-logistico, BdP aperto (tbp-fl-cls <> "C")
- Verifica stesso cliente: tbp-cli = tm-cli-cod
2. Per ogni BdP trovato:
- a4-seleziona-lotto: assegna il lotto alla prima riga griglia libera per quella merce
- Allinea tm-c-qta-bdp = tm-c-qta-usata per compatibilita con a4-accantona
Gestione BdP differita (in e-scorri-lav-fine):
La chiusura/ricreazione dei BdP avviene solo durante l'aggiornamento (sezione E), dopo la conferma dell'operatore:
- BdP completamente usato: COGSA0 CANCELLA (chiude la testata)
- BdP parzialmente usato (mag logistico): COGSA0 CANCELLA + CREA-BDP-SINGOLO per la quantita residua
- BdP provvisorio: solo COGSA0 CANCELLA
- Per determinare il tipo di BdP: rilegge COGRIGBP(testa+prog=1) e verifica rbp-mag
Casi gestiti:
- Lotti diversi su BdP diversi -> righe griglia separate
- Quantita BdP > fabbisogno -> split con nuovo BdP per il residuo (solo mag logistico)
- Quantita BdP < fabbisogno -> a4-seleziona-lotto crea riga residuo, il BdP successivo la riempie
Guard: salta se tm-cfg-mag-logistico = " " o az-main-mag = "B" (Blue Seals)
Gestione disponibilita per mag logistico (a4-seleziona-lotto)¶
Per BdP da mag logistico, a1-calcola-disp ha queste eccezioni:
- Bypass duplicato lotto: lo stesso lotto puo apparire su BdP diversi → move "S" to a1-ok
- Override disponibilita: a1-qta-disp = a4-bdp-qta, a1-qta-usata = 0 (il BdP certifica la disponibilita)
- Verifica duplicato cross-magazzino: il confronto lotto include tm-c-lot-mag (stesso lotto su magazzini diversi e' ammesso)
2. Accantonamenti prenotati (a4-cerca-componenti-accantonati)¶
- Cerca via COGPRENO per consegna
- Per ogni prenotazione trova il BdP e ne estrae merce/lotto/quantita
- Simula la selezione del lotto (
a4-seleziona-lotto) - Nota: imposta
a4-bdp-mag = w-dc-cor-magprima di chiamarea4-seleziona-lotto
3. Lotti liberi da magazzino (a4-seleziona-comp-automatici / a4-cerca-lotti-disponibili)¶
- Scorre COGMERLT per merce/magazzino in ordine di progressivo lotto
- Filtri: stato "A" (aperto), qta > 0, disponibilita effettiva > 0, non gia usato in griglia
- Se il lotto copre tutto il fabbisogno: assegna e esce
- Se copre parzialmente: assegna quanto possibile, inserisce riga residuo, continua
Prelievo Modula a lista asincrona¶
Aggiunto al flusso il 01/04/2026. Quando la selezione automatica (priorita 1-3) non copre il fabbisogno e c'e' stock residuo su Modula, COGG77 inoltra una lista di prelievo provvisoria al magazzino automatico Modula e attende il rientro per assegnare i lotti effettivamente prelevati. Il flusso e' suddiviso in 4 fasi distinte e supporta interruzione/ripresa dell'utente.
Quando si attiva:
- Eseguito dopo a4-cerca-acc-mag-log
- Guard: az-main-mag <> "B" AND tm-cfg-mag-logistico <> " " (cliente Artic SEALS sede principale, non Blue Seals)
- Solo se ci sono componenti con fabbisogno residuo (almeno una riga tc-qta-tot > 0 non coperta dalla griglia)
Architettura multi-fase¶
FASE 1: Caricamento FASE 2: Invio Modula FASE 3: Polling rientro FASE 4: Assemblaggio
+-----------------+ +------------------+ +----------------------+ +-----------------+
| b-cerca-comp + | | m1-crea-bdp-mod | | m1-polling-rientro | | e-aggiorna |
| a4-cerca-acc- | --> | m1-scrivi-rac | --> | m1-elabora-rientro |-->| (flusso |
| mag-log + ... | | m1-invia-lista | | (assegna in griglia) | | esistente) |
+-----------------+ +------------------+ +----------------------+ +-----------------+
COGSA0/COGD53 COGMDTES.mdt-stato COGS26 + COGSA0
Tabelle e raccordo¶
| Tabella | Chiave/Campo | Ruolo |
|---|---|---|
| COGMDTES | chia2 (mdt-doc) |
Lista Modula collegata al BDP — stato A attesa, EC/EP evasa |
| COGMDRIG | mdr-id-lista |
Righe della lista con mdr-qta-evasa e mdr-mlt-lotto (lotto Modula) |
| COGGENER | tipo "MA", gnr-parte-1 = cliente(5)+merce articolo finito(9), gnr-parte-2 = BDP testa |
Raccordo tra commessa di assemblaggio e BDP provvisorio Modula |
| COGTESBP | tbp-fl-provvisorio = "P" |
BDP provvisorio creato per la lista Modula |
Il raccordo "MA" e' il fulcro della ripresa: persiste finche' l'assemblaggio non viene confermato (sezione E) o la lista viene esplicitamente annullata. Non e' legato alla quantita' richiesta, solo a cliente+merce articolo finito.
Paragrafi m1-* di supporto¶
| Paragraph | Funzione |
|---|---|
m1-verifica-lista-modula |
Entry point: verifica esistenza raccordo MA, ramifica tra ripresa e nuovo invio |
m1-cerca-lista-da-bdp |
Risale dal BDP testa alla lista Modula via cogmdtes.chia2 |
m1-crea-bdp-modula |
Crea BDP provvisorio (COGSA0 con cogsa0-i-fl-provv = "S") sul mag Modula, senza lotti |
m1-scrivi-raccordo |
Scrive il record COGGENER tipo "MA" |
m1-invia-lista-modula |
Invia la lista a Modula via COGD53 |
m1-polling-rientro |
Attende il cambio stato mdt-stato da A a EC/EP |
m1-elabora-rientro |
Scorre COGMDRIG, risale al lotto ERP via cogmerlt.chia3 (stato+merce+lotto+mag), assegna in griglia tramite a4-seleziona-lotto. Salta righe con mdr-qta-evasa = 0 |
m1-chiudi-bdp-modula |
Chiude il BDP provvisorio (COGSA0 CANCELLA) — chiamato da e-aggiorna a fine assemblaggio |
m1-cancella-raccordo |
Cancella il raccordo COGGENER "MA" — chiamato da e-aggiorna o su scelta utente "genera nuova lista" |
Casi particolari¶
Evasione parziale Modula (Modula consegna meno della qta richiesta):
- m1-elabora-rientro assegna in griglia solo le quantita' effettivamente evase (mdr-qta-evasa)
- Al successivo passaggio per il check fabbisogno (righe 3525-3545), il programma rileva ancora residuo e propone una nuova lista ("Generare una nuova lista di prelievo?")
- Se l'utente preme F3 sulla griglia parziale, il check tc-qta-dsp < tc-qta-tot blocca con messaggio "Sul componente X non hai selezionato quantita' sufficiente!!"
- L'utente puo': (a) attendere stock Modula e ritentare, (b) ridurre tm-qta-ric per chiudere con la qta minima evasa (vedi sotto), (c) completare manualmente con lotti ERP residui
Ripresa al rientro (utente esce con ESC e rientra):
- Il raccordo MA persiste perche' nessuno lo cancella su uscita anticipata
- Al rientro m1-verifica-lista-modula trova il raccordo, fa polling sulla lista (gia' evasa, quindi ritorno immediato), m1-elabora-rientro ripopola la griglia
- Anomalia gestita: se il BDP provvisorio risulta chiuso (tbp-fl-cls = "C" per intervento esterno), viene segnalato l'errore e l'utente puo' decidere di "generare una nuova lista"
Riduzione tm-qta-ric:
- Il raccordo MA e' disaccoppiato dalla quantita' richiesta (gnr-parte-1 contiene solo cli+merce)
- Se l'utente esce, rientra e imposta tm-qta-ric minore (es. la qta minima evasa da Modula), il flusso si ricalcola: nuovo tc-qta-tot = dba-qta * tm-qta-ric (riga 1569), b-precarica-griglia resetta la griglia, m1-elabora-rientro ripopola con le qta evase, il check fabbisogno residuo da' 0, F3 abilitato
- Permette di chiudere assemblaggi parziali senza dover annullare e ricreare
BDP provvisorio orfano: - Se l'utente abbandona definitivamente, il BDP provvisorio + raccordo MA restano in piedi - COGM65 (cancellazione massiva BDP provvisori) puo' rimuoverli — vedi flussi/buoni-prelievo.md - Importante: la cancellazione silent del BDP provvisorio non notifica Modula: la lista a Modula potrebbe essere gia' in elaborazione, la coordinazione e' manuale
Scarico componenti per magazzino¶
Flusso (sezione E)¶
e-scorri-lav-loop:
per ogni riga lavorazione (e-k):
se cambio lotto provvisorio:
-> e4-crea-scarichi-per-mag (scarica componenti lotto precedente)
-> e1-sdoppia-consegna, e2-crea-commessa (nuovo lotto)
-> e-k-inizio = e-k (traccia inizio nuovo gruppo)
fine loop (e-scorri-lav-fine):
-> e4-crea-scarichi-per-mag (ultimo lotto)
-> Chiusura/ricreazione BdP (per ogni riga con tm-c-qta-bdp > 0)
e4-crea-scarichi-per-mag¶
Orchestra due elaborazioni completamente separate per range [e-k-inizio, e-k-fine]:
- Magazzino principale (
az-main-mag): - Reset transito (
e4-reset-transito) - Scrive nel transito solo righe con
tm-l-lf-mag <> tm-cfg-mag-logistico -
Se ci sono righe: chiama COGS26 via
e4-crea-doc-mag -
Magazzino logistico (
tm-cfg-mag-logistico, se configurato): - Reset transito (
e4-reset-transito) - Scrive nel transito solo righe con
tm-l-lf-mag = tm-cfg-mag-logistico - Se ci sono righe: chiama COGS26 via
e4-crea-doc-mag - Salva riferimento documento in
e-doc-scarico-mag-log
e4-crea-doc-mag¶
- Usa
e4-mag-scarico(parametrico) come magazzino di scarico per COGS26 - Invariato per avanzamento prodotto finito (usa
e1-cor-mag, gestione "B" -> "1" separata ine2-scorri-ciclo-fine)
Paragraph di supporto¶
| Paragraph | Funzione |
|---|---|
a1-calcola-disp |
Somma disponibilita/usato per merce; verifica duplicazione lotto (con check magazzino) |
a2-inserisci-riga |
Inserisce riga residuo sotto la riga corrente |
a4-seleziona-lotto |
Simula selezione lotto: verifica COGMERLT (usa a4-bdp-mag per il magazzino), cerca riga griglia libera, assegna |
a4-cerca-bdp-per-merce |
Cerca BdP su mag logistico per merce (chia5), filtra per cliente, assegna lotti |
~~a4-gestisci-bdp-usato~~ |
Rimosso: la chiusura BdP e' gestita in e-scorri-lav-fine |
~~a4-assegna-acc-mag-log~~ |
Commentato: sostituito da a4-cerca-bdp-per-merce + a4-seleziona-lotto |
e4-reset-transito |
Reset file transito tran-s26 (senza dialog interattivo) |
e4-crea-scarichi-per-mag |
Orchestra scarico componenti separato per magazzino |
c-cerca-prenotato-lotto |
Calcola quantita prenotata su BdP aperti per un lotto |
x-adegua-qta-usata |
Arrotonda quantita al multiplo del numero componenti |
x-controlla-tm-c-lotto-for |
Validazione lotto fornitore in griglia; usa tm-c-lot-mag se gia' valorizzato, altrimenti az-main-mag |
Validazione lotti e magazzino logistico¶
x-controlla-tm-c-lotto-for ri-valida i lotti alla conferma (F3). Per i lotti gia' assegnati da a4-cerca-acc-mag-log e' essenziale che la ri-validazione non sovrascriva il magazzino: il lotto esiste su entrambi i magazzini (principale e logistico) perche' il materiale e' stato trasferito, ma la riga deve restare collegata al mag logistico.
Senza questa distinzione, la ri-validazione trova il lotto su az-main-mag e sovrascrive tm-c-lot-mag → il componente finisce nel documento di scarico del mag principale (= Modula) anziche' in quello del mag logistico → la lista di prelievo viene inviata a Modula per materiale che non e' su Modula ma sul mag logistico.
Regola: nella ricerca per lotto fornitore (path chia3), il magazzino di ricerca e' tm-c-lot-mag se gia' significativo, az-main-mag altrimenti (inserimento manuale).
Configurazione¶
| Gruppo | Chiave | Variabile | Descrizione |
|---|---|---|---|
| PRODUZIONE | MAG-LOGISTICO | tm-cfg-mag-logistico |
Codice magazzino logistico (1 char) |
Scenari per magazzino¶
| Scenario | az-main-mag |
Cerca mag log | Scarico componenti | Avanzamento PF |
|---|---|---|---|---|
| Sede principale | "1" | Si | 1 o 2 documenti (per mag) | Su e1-cor-mag |
| Blue Seals | "B" | No (skip) | 1 documento su "B" | Su mag "1" (forzato) |
Tabelle coinvolte¶
| Tabella | Chiave usata | Utilizzo |
|---|---|---|
| COGRIGBP | chia5 (merce+lotto+chia1) | Ricerca accantonamenti mag logistico per merce |
| COGRIGBP | chia5 (merce+lotto) | Calcolo prenotato per lotto |
| COGCONOR | chia1 (consegna) | Risalita da consegna a ordine (cor-o-testa) |
| COGPRENO | chia2 (tip+chiave_oggetto) | Ricerca prenotazioni per consegna |
| COGMERLT | chia1 (merce+mag+prog) | Ricerca/validazione lotti disponibili |
| COGTESBP | chia1 (testa) | Verifica stato BdP (aperto/chiuso) |
| COGSA0 | CANCELLA |
Chiusura BdP usati |
| COGSA0 | CREA-BDP-SINGOLO |
Creazione BdP residuo (uso parziale) |
| COGSA0 | PRENOTA |
Creazione prenotazioni (path COGPRENO) |
| COGSA0 | CANCELLA (con fl-provv = "S") |
Creazione BdP provvisorio per lista Modula |
| COGS26 | (chiamata) | Creazione documenti magazzino (1 per chiamata) |
| COGD53 | (chiamata) | Invio lista di prelievo a Modula |
| COGMDTES | chia2 (mdt-doc) |
Testata lista Modula collegata a BDP |
| COGMDRIG | mdr-id-lista |
Righe lista Modula con qta evasa e lotto |
| COGGENER | tipo "MA" |
Raccordo cli+merce articolo finito ↔ BDP provvisorio Modula |
| tran-s26 | (transito) | File transito righe componenti per COGS26 |