Vai al contenuto

BI3002 - Scaricamento movimenti cicli di lavorazione su B.I. (SW-ING)

Scopo

Estrae i movimenti dei cicli di lavorazione di un periodo verso il modulo "Lotti" del cruscotto Business Intelligence (SW-ING). Per ogni lotto consegnato vengono popolate testata, dettaglio fasi, materiali utilizzati e avanzamenti giornalieri, oltre alle bolle di vendita non a magazzino. L'estrazione e' rieseguibile sullo stesso periodo (cancella e ricarica). Riconosce sia uscite a cliente sia avanzamenti di produzione interna e usa un file di transito per evitare di estrarre due volte la stessa consegna.

Posizione menu

  • Magazzino > Produzione > Cicli di Lavorazione > Esportazione > Lotti x B.I.: movimenti

Puo' essere richiamato anche in modalita' headless dal modulo Engineering (cgi-called = "BIENG-CALLED"), in cui caso le date sono calcolate automaticamente e l'elaborazione parte senza conferma.

File e Tabelle

Input (gestionale)

File Chiave Utilizzo
COGMOMAG chia2 (mag+da) Movimenti del magazzino principale del periodo
COGTESBO chia3/chia2 Testate documenti (causale, data, nonno)
COGCONTR chia Contabilizzazioni (fase2)
COGCONOR chia1 Consegne ordini
COGRACCO chia2 Raccordo bolle->consegne
COGGENER chia2 (LP+testa) Legame avanzamento P.N. -> lotto produzione
COGLAVOR - Lotti di produzione (verifica esistenza/cliente)
COGMERCI chia Anagrafica merci (padre/figlio per flag DB)
COGGEANA - Anagrafica fornitori (descrizione fase esterna)
CLCCCTES k04/k05 Testate cicli (cct-rec) - legame consegna -> lotto
CLCCCDAY - Avanzamenti giornalieri lotti (ccd-rec)
CLCCCCNS - Consuntivi per fase (ccc-rec) - usato in calcola-costo-scarti
CLCDISEG - Disegni (per descrizione disegno DB)
CLCLEGLO k03 Legami padre-figlio fra lotti (multilevel)
CLCANAMA - Anagrafica macchine (descrizione)
CLCLAVOR - Anagrafica lavorazioni (descrizione)

Output (interscambio B.I.)

File Copybook Contenuto
BICLCTES biclctes.cpy Testata lotto (cliente, distinta, ordine, consegna, date, stato, quantita', costi, ricavi, margini) - xfd td_clctes
BICLCMOV biclcmov.cpy Movimenti/fasi del lotto (fase, macchina, lavorazione, tempi prv/cns, valori, ricavi) - xfd td_clcmov
BICLCMAT biclcmat.cpy Materiali del lotto (merce, qta, valore, prezzo) - xfd td_clcmat
BICLCDAY biclcday.cpy Avanzamenti giornalieri (data, fase, macchina, lavorazione, qta, tempi, costo) - xfd td_clcday

Indirizzamento al nodo BI con set environment "TD_<nome>_HOST" to "DCI" prima dell'apertura. A differenza di BI3001, qui i file vengono aperti in I-O con fallback in OUTPUT solo se stato = "35" (file non esistente), per preservare il contenuto pregresso e cancellare selettivamente il periodo.

File di servizio

File Path Utilizzo
COGTRANS <ext-tmp-dir>/#$COGJ11.<oper> File di transito per ricordare le consegne gia' estratte nella sessione corrente (chiave: consegna + causale bolla)
COGLOG <ext-sys-dir>.LOG (vedi nota) Log diagnostico degli scarti

Il path di COGLOG e' costruito in apri (riga 314-318); inoltre viene anche calcolato COGJ11.LOG ma non utilizzato direttamente (codice ridondante).

Copybook

Working storage

  • bi3002.wrk, k-u10.cpy, k-personal.cpy, biclcnomif.cpy
  • wgrave.cpy, wnscr.cpy, wopenf.cpy, wstato.cpy, cogazien.cpy
  • utils52.cpy, utilu09.cpy, utilu36.cpy, utilu10.cpy, utilncnf.cpy
  • coglog.cpy (FD log)

Linkage

  • wcont.cpy, utils01.cpy, wcont1.cpy, utilcgi.cpy

Procedure

  • call-u36.cpy, log.cpy, grave.cpy, mmmask.cpy, opengen.cpy, stato.cpy, stato1.cpy, winmsg.cpy
  • bi3002.prc
  • Chiavi secondarie: clccctes.k04, clccctes.k05, cogtesbo.k02, cogmomag.k02, coggener.k02, clcleglo.k03, cogtrans.k01, cogracco.k02
  • Chiavi primarie file BI: biclctes.k01, biclcmat.k01, biclcmov.k01, biclcday.k01

CALL

Programma Scopo
C$RERR Verifica errore in apertura tabelle BI
COGU09 Ricerca consegna da movimento (cerca-consegna) e ricerca movimento di scarico consegna (cerca-magazzino)
COGU36 Calcolo sintesi lotto: quantita', costi, tempi, valori per fase (chiamato via call-u36-calcola-lotto)
COGU10W Arrotondamento divisa
RNEWCONF Lettura configurazione (gruppo BINT, chiave nr-giorni-bi3002)
DTPRG / PRGDT Conversione data <-> giorno progressivo per calcolo periodo automatico
COGS01 Cancellato in chiusura

Parametri di chiamata (linkage)

procedure division using stringhe util-cgi.

  • util-cgi.cgi-called: se = "BIENG-CALLED" indica chiamata automatica dal modulo Engineering del cruscotto; in tal caso il programma calcola il periodo come "ultimi N giorni" rispetto a datasis (N letto da configurazione) e salta a a-elabora-conferma senza interazione utente.

Configurazione

Chiave RNEWCONF (gruppo BINT):

Chiave Tipo Default Descrizione
nr-giorni-bi3002 Numerico (da configurazione) Numero di giorni indietro rispetto a oggi per il periodo automatico in modalita' BIENG-CALLED

Logica di elaborazione

Flusso principale

  1. apri: apertura tabelle gestionali e BI (con fallback OUTPUT su stato 35), apertura COGLOG, apertura COGTRANS (creato vuoto ad ogni esecuzione).
  2. Lettura configurazione nr-giorni-bi3002.
  3. Se chiamata BIENG: calcolo automatico date e salto a a-elabora-conferma. Altrimenti accept date e conferma.
  4. elabora -> fase1 (estrazione cicli di lavoro standard) -> fase2 (bolle di vendita non a magazzino).

Fase 1 - estrazione cicli di lavoro

fase11-cancella (cancellazione preventiva):

  • Start su BICLCTES per biclct-data-evasione >= tm-daint-in e read next finche' biclct-data-evasione <= tm-daint-fi.
  • Per ogni testata trovata: del-biclctes, poi cancellazione di tutte le righe biclcmov, biclcmat, biclcday con (ann, num) corrispondente.

Loop principale b-10-loop:

  1. Scan COGMOMAG chia2 per (az-main-mag, periodo).
  2. Classificazione movimento:
  3. mag-tipob1 = "P" (prima nota): chiamata b4-verifica-pn per stabilire se e' avanzamento di produzione interna. Verifica mag-entrusc = "E", mer-padre = "P", esistenza legame gnr-tip = "LP" -> lotto, esistenza lotto, cliente = cliente interno o personalizzazioni OMR (clienti 162/110/189). Se ok recupera b4-consegna, b-tip-mov = "P", esegue b4-search-multilevel per risalire al cliente finale tramite CLCLEGLO (chia3 figlio).
  4. mag-tipob1 in ("I","D","B") con mag-tipocf = "C": movimento di vendita; verifica esistenza COGRACCO; b-tip-mov = "V".
  5. Filtro speciale OMR (az-personal = k-personal-omr): scarta causali 09 e 42.
  6. Recupero consegna:
  7. "V": COGU09 cerca-consegna da chiave movimento.
  8. "P": b4-consegna gia' calcolata.
  9. Per "V" verifica che il movimento sia il primo che scarica la consegna (COGU09 cerca-magazzino); altrimenti scarta. Recupera testata bolla per tm-data-evasione = tes-data. Per "P" tm-data-evasione = mag-da3.
  10. Verifica duplicato sessione su COGTRANS (consegna + tes-causale); se gia' presente, scarta. Altrimenti wr-cogtrans.
  11. Lettura cogconor (consegna) e clccctes chia5 per trovare il lotto.
  12. call-u36-calcola-lotto con u36-i-lot-ann/num -> ottiene quantita', tempi, costi sintetici e tabelle interne u36t-* (fasi) e u36m-* (materiali).
  13. Scrittura BICLCTES: testata lotto con cliente (eventualmente sovrascritto a w-cli per produzione interna multilevel o az-cli-int come fallback), distinta, ordine, consegna, date, stato, quantita' (ord/cla/sca/prd/con/reso-nlav/extern-sca-cns), costi su/non-mac/esterne/trasp/varie/materiali/semilav, totali e costi unitari, prezzo vendita, totali prodotti/venduti, margini % su preventivo e su venduto, ricavi per categoria. Se write fallisce con w-verbo-invalido -> rwr-biclctes.
  14. Scrittura BICLCMOV (fino a 500 righe): per ogni elemento di u36t-* (idx 1..u36t-idx, max 500) scrive testata-fase con evaluate u36t-tip:
  15. "M": macchina (rd-clcanama per descrizione, fallback ***)
  16. "E": esterna (rd-coggeana fornitore, mac="EXT", fornitore in biclcm-for); azzera tempi/valori a preventivo
  17. "N": non su macchina (mac="NSM")
  18. Tempi prv/cns (att/lav/dis), valori prv/cns, ricavi calcolati da margine % di testata.
  19. In caso di duplicate key incrementa biclcm-fas e ritenta una sola volta.
  20. Se u36-o-tempo-varie > 0 scrive ulteriore riga fase 300 "VARIE".
  21. Scrittura BICLCMAT (fino a 200 righe): per ogni elemento di u36m-* scrive merce, qta, valore, prezzo unitario (val/qta arrotondato).
  22. Scrittura BICLCDAY: scan clcccday per (ann, num) del lotto, scrive avanzamenti giornalieri (data, fase, mac, lav, qta-prd/sca, tempi prg/att/lav/dis, currency, costo-lav, close).
  23. calcola-costo-scarti: se u36-o-qta-sca > 0 ricalcola il costo degli scarti scalando materiali e costi macchina rispetto al peso temporale di ogni fase, e aggiorna biclct-o-costo-scarti con rewrite di BICLCTES.
  24. Loop su prossimo movimento.

Fase 2 - bolle di vendita non a magazzino

Scan COGTESBO chia2 per tes-data nel periodo, escludendo tes-nonno = 9999. Per ogni testata legge COGCONTR (stesso tes-chia3) e somma con-valore con segno in base a con-tipob1 ("S" somma, altri sottrae). Se totale non zero, scrive una sola riga BICLCTES con:

  • biclct-ann = anno della data documento, biclct-num = tes-nonno, primi 2 char di biclct-num = mese
  • biclct-cli = tes-nonno
  • date inizio/fine = data documento
  • stato = "C"
  • quantita' e costi tutti a zero
  • biclct-o-tot-ven = totale w-cog-tot
  • margine % calcolato (con divisione per zero potenziale su biclct-c-tot)

Inoltre, se u36-o-tempo-varie != 0 (variabile residua dal lotto precedente!), scrive riga BICLCMOV fase 310 "FTNOM".

Note tecniche

  • decimal-point is comma.
  • GUI con bi3002-01.scr; data input via e-tm-daint-in/fi con calendario F8 (COGS52).
  • Conferma con F3 -> acc-conf -> elabora.
  • Log diagnostico via x1-scrivi-log (copybook log.cpy).
  • cancel "COGS01" in chiusura.
  • I GO TO sono pervasivi (loop b-10-loop, fase11-20-loop, fase2-1/2/3) - codice legacy non rifattorizzato.
  • Limite hardcoded: 500 righe BICLCMOV, 200 righe BICLCMAT per lotto.
  • Possibili divisioni per zero su biclct-c-tot in fase2 quando il lotto fittizio ha tutti i costi a zero - presidiare se segnalato dall'utente.
  • La fase2 usa u36-o-tempo-varie senza reinizializzare util-u36: il valore puo' essere residuo dell'ultimo lotto della fase1.