Vai al contenuto

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

  1. Caricamento distinta base componenti (b-cerca-componenti)
  2. Ricerca accantonamenti su magazzino logistico (a4-cerca-acc-mag-log)
  3. Saltata se mag logistico non configurato o se Blue Seals (az-main-mag = "B")
  4. Se non trovati, ricerca prenotazioni via COGPRENO (a4-cerca-componenti-accantonati)
  5. Selezione automatica lotti liberi (a4-seleziona-comp-automatici)
  6. Se restano fabbisogni residui: prelievo Modula a lista asincrona (m1-verifica-lista-modula) — vedi sezione dedicata
  7. Gestione interattiva griglia componenti
  8. Determinazione lotti di produzione e creazione ordini di lavorazione
  9. Per ogni lotto provvisorio: creazione documenti scarico componenti (e4-crea-scarichi-per-mag)
  10. 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-mag prima di chiamare a4-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]:

  1. Magazzino principale (az-main-mag):
  2. Reset transito (e4-reset-transito)
  3. Scrive nel transito solo righe con tm-l-lf-mag <> tm-cfg-mag-logistico
  4. Se ci sono righe: chiama COGS26 via e4-crea-doc-mag

  5. Magazzino logistico (tm-cfg-mag-logistico, se configurato):

  6. Reset transito (e4-reset-transito)
  7. Scrive nel transito solo righe con tm-l-lf-mag = tm-cfg-mag-logistico
  8. Se ci sono righe: chiama COGS26 via e4-crea-doc-mag
  9. 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 in e2-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