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.cpywgrave.cpy,wnscr.cpy,wopenf.cpy,wstato.cpy,cogazien.cpyutils52.cpy,utilu09.cpy,utilu36.cpy,utilu10.cpy,utilncnf.cpycoglog.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.cpybi3002.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 adatasis(N letto da configurazione) e salta aa-elabora-confermasenza 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¶
apri: apertura tabelle gestionali e BI (con fallback OUTPUT su stato 35), apertura COGLOG, apertura COGTRANS (creato vuoto ad ogni esecuzione).- Lettura configurazione
nr-giorni-bi3002. - Se chiamata BIENG: calcolo automatico date e salto a
a-elabora-conferma. Altrimenti accept date e conferma. 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-ine read next finche'biclct-data-evasione <= tm-daint-fi. - Per ogni testata trovata:
del-biclctes, poi cancellazione di tutte le righebiclcmov,biclcmat,biclcdaycon(ann, num)corrispondente.
Loop principale b-10-loop:
- Scan COGMOMAG chia2 per (
az-main-mag, periodo). - Classificazione movimento:
mag-tipob1 = "P"(prima nota): chiamatab4-verifica-pnper stabilire se e' avanzamento di produzione interna. Verificamag-entrusc = "E",mer-padre = "P", esistenza legamegnr-tip = "LP"-> lotto, esistenza lotto, cliente = cliente interno o personalizzazioni OMR (clienti 162/110/189). Se ok recuperab4-consegna,b-tip-mov = "P", esegueb4-search-multilevelper risalire al cliente finale tramite CLCLEGLO (chia3 figlio).mag-tipob1 in ("I","D","B")conmag-tipocf = "C": movimento di vendita; verifica esistenza COGRACCO;b-tip-mov = "V".- Filtro speciale OMR (
az-personal = k-personal-omr): scarta causali 09 e 42. - Recupero consegna:
- "V":
COGU09 cerca-consegnada chiave movimento. - "P":
b4-consegnagia' calcolata. - Per "V" verifica che il movimento sia il primo che scarica la consegna (
COGU09 cerca-magazzino); altrimenti scarta. Recupera testata bolla pertm-data-evasione = tes-data. Per "P"tm-data-evasione = mag-da3. - Verifica duplicato sessione su COGTRANS (
consegna + tes-causale); se gia' presente, scarta. Altrimentiwr-cogtrans. - Lettura
cogconor(consegna) eclcccteschia5 per trovare il lotto. call-u36-calcola-lottoconu36-i-lot-ann/num-> ottiene quantita', tempi, costi sintetici e tabelle interneu36t-*(fasi) eu36m-*(materiali).- Scrittura BICLCTES: testata lotto con cliente (eventualmente sovrascritto a
w-cliper produzione interna multilevel oaz-cli-intcome 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 conw-verbo-invalido->rwr-biclctes. - Scrittura BICLCMOV (fino a 500 righe): per ogni elemento di
u36t-*(idx 1..u36t-idx, max 500) scrive testata-fase conevaluate u36t-tip: - "M": macchina (rd-clcanama per descrizione, fallback
***) - "E": esterna (rd-coggeana fornitore, mac="EXT", fornitore in
biclcm-for); azzera tempi/valori a preventivo - "N": non su macchina (mac="NSM")
- Tempi prv/cns (att/lav/dis), valori prv/cns, ricavi calcolati da margine % di testata.
- In caso di duplicate key incrementa
biclcm-fase ritenta una sola volta. - Se
u36-o-tempo-varie > 0scrive ulteriore riga fase 300 "VARIE". - Scrittura BICLCMAT (fino a 200 righe): per ogni elemento di
u36m-*scrive merce, qta, valore, prezzo unitario (val/qta arrotondato). - Scrittura BICLCDAY: scan
clcccdayper (ann, num) del lotto, scrive avanzamenti giornalieri (data, fase, mac, lav, qta-prd/sca, tempi prg/att/lav/dis, currency, costo-lav, close). calcola-costo-scarti: seu36-o-qta-sca > 0ricalcola il costo degli scarti scalando materiali e costi macchina rispetto al peso temporale di ogni fase, e aggiornabiclct-o-costo-scarticon rewrite di BICLCTES.- 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 dibiclct-num= mesebiclct-cli=tes-nonno- date inizio/fine = data documento
- stato = "C"
- quantita' e costi tutti a zero
biclct-o-tot-ven= totalew-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 viae-tm-daint-in/ficon calendario F8 (COGS52). - Conferma con F3 ->
acc-conf->elabora. - Log diagnostico via
x1-scrivi-log(copybooklog.cpy). cancel "COGS01"in chiusura.- I
GO TOsono pervasivi (loopb-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-totin fase2 quando il lotto fittizio ha tutti i costi a zero - presidiare se segnalato dall'utente. - La fase2 usa
u36-o-tempo-variesenza reinizializzareutil-u36: il valore puo' essere residuo dell'ultimo lotto della fase1.