SWC021 - Scaricamento Dati Commesse per SW-ING¶
Intestazione¶
| Campo | Valore |
|---|---|
| Programma | SWC021 |
| Titolo | Scaricamento dati commesse (area-admin) |
| Posizione menu | Statistiche > Estrazione dati vs B.I.Swing > Magazzino / Vendite > Dati commesse |
Scopo e logica generale¶
SWC021 estrae l'intero patrimonio dati delle commesse di lavorazione e lo scrive in 17 archivi BI dedicati (BINCM + BINRGGL) utilizzati dal sistema di Business Intelligence SW-ING per cruscotti e analisi.
Il programma e' il piu' complesso del bouquet SWC perche':
- Esporta sia tabelle anagrafiche sia movimenti reali calcolati on-the-fly.
- Per ogni commessa invoca COGG40 (motore di transito) e COGUA0 (calcolo costi/ricavi commessa) per ricostruire i movimenti di costo/ricavo (analoga logica dei cruscotti commessa).
- Calcola e popola la struttura gerarchica dei raggruppamenti centri di costo a 5 livelli (BINRGGL1..5) via COGUA1 (struttura raggruppamenti).
- Supporta sia formato "classico" (BINCMMOV) sia formato "nuovo" (BINCMMNW con dimensione centro di costo a 5 livelli + provenienza dettagliata).
Modalita' di esecuzione:
- Interattiva: l'operatore avvia dalla maschera; vengono visualizzati contatori per fase.
- Batch (chiamata da Aglancio): rilevamento via
C$NARG/C$PARAMSIZEsuutil-agprg; output rediretto al log Aglancio tramitegesdebug.
Flusso principale¶
- Inizializzazione (
m-00): controllo abilitazione, init programma, apertura file, lettura azienda, configurazione (x99-src-cfg,x99-src-cfg-agl), inizializzazione connessione BI. - Rilevamento modalita' Aglancio: se
agprg-id-processovalido, modalita' batch con id processo dal chiamante. - Maschera (solo interattivo): titolo "Scaricamento dati commesse", attesa F3.
- Cancellazione (
a-elabora-conferma):cancella-bin-sub-tm-cfg-bin-tipo(TRUNCATE Postgres o scan + DELETE C-Tree/DBmaker) su tutte le 17 tabelle BI di destinazione. - Elaborazione (
elabora): - Tabelle anagrafiche:
- Tipi raggruppamento (COGTABEL tipo "BE") → BINCMRTP.
- Tipi commessa (COGTABEL tipo "A1") → BINCMTIP.
- Tecnici (COGANATN + COGRIFER) → BINCMTEC. Aggiunge entry fittizia "TUTTI I TECNICI" (cod 9999999999).
- Commesse (COGTESCM + COGTCMAG) → BINCMTES. Eccezione Cortesi (
k-personal-cortesi): se il codice contiene "/", marcabancom-commessa-padre = "N". - Sottocommesse (COGSOTCM) → BINCMSOT. Se attiva la config
ins-auto-sottocomm-da-schedae modalita' commesse "M", chiamarecupera-lotto-su-crmananfper recuperare il riferimento lotto da CRM (CRMSKINF chiave2 → CRMANANF). - Stati commessa hard-coded (A/C/D/Q) → BINCMSTT.
- Stati avanzamento hard-coded (N/C/D) → BINCMSTA.
- Totalizzatori standard A-F → BINCMTOT (eccezione Elettrica Andreoli: aggiunge G/I/L/N/P/S/T/U/V).
- Movimenti classico (
scrivi-bincmmov): per ogni commessa, chiama COGG40 (genera transitocogtrans), poi scan transito → BINCMMOV con merce, quantita', valori e classificazione. - Struttura raggruppamenti (
scrivi-bintbrgg+scrivi-binrggl): scan COGRAGGR → BINTBRGG; poi via COGUA1 (file transitot-struttura) → BINRGGL1..5 con padre per livello. - Movimenti nuovo (
scrivi-bincmmnw): per ogni commessa, scrive una riga "riepilogo" BINCMMNW; chiamaricerca-cogua0(COGUA0 con file transitot-dettaglio/t-raggr) per ogni movimento di costo/ricavo, applica filtro causale (esclude causali coneuta-cb-com-gia = "I"eeuta-cb-com-segno = "I"per evitare doppi conteggi giornalieri); per ogni movimento valido, scrive BINCMMNW con dimensione 5 livelli di centro di costo (carica-cc-raggrrisale i padri su COGANRAG). - Chiusura (
fine/z-chiudi): cancel COGU09, chiusura file e connessione BI, eliminazione file transito (t-dettaglio, t-raggr, t-struttura), riapertura DB AreaGate per aggiornare ARPSTPRC (solo batch).
File e tabelle acceduti¶
Output BI¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| BINCMRTP | brgcom-rec | I-O | Tipi raggruppamento commessa |
| BINCMTIP | bticom-rec | I-O | Tipi commessa |
| BINCMTEC | btecni-rec | I-O | Tecnici |
| BINCMTES | bancom-rec | I-O | Anagrafica commesse |
| BINCMSOT | bansot-rec | I-O | Sottocommesse |
| BINCMSTT | bstcom-rec | I-O | Stati commessa |
| BINCMSTA | bcmsta-rec | I-O | Stati avanzamento |
| BINCMTOT | btmcom-rec | I-O | Totalizzatori |
| BINCMMOV | bmocom-rec | I-O | Movimenti formato classico |
| BINCMMNW | bmcnew-rec | I-O | Movimenti formato nuovo (con dimensione centro di costo) |
| BINCMPRO | bcmpro-rec | I-O | Tabella codici progetto |
| BINTBRGG | bin-trgr-rec | I-O | Tipi raggruppamento centri di costo |
| BINRGGL1..5 | bin-arag1..5-rec | I-O | Livelli gerarchici raggruppamenti centri di costo |
Input gestionale¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| COGTABEL | euta-rec | Input | Tabelle sistema (tipo BE, A1, 15) |
| COGANATN | atn-rec | Input | Anagrafica tecnici |
| COGRIFER | rif-rec | Input | Riferimenti (lookup tecnico via atn-rif) |
| COGTESCM | tsc-rec | Input | Testate commessa |
| COGTCMAG | tsca-rec | Input | Testate commesse aggiuntive (date effettive, destinazione, cli-ass) |
| COGSOTCM | sot-rec | Input | Sottocommesse |
| CRMSKINF | ski-rec | Input | Info scheda CRM (chiave2: inf+tcl, per lotto da scheda) |
| CRMANANF | nnf-rec | Input | Anagrafica info scheda CRM |
| COGRAGGR | trgr-rec | Input | Tabelle raggruppamento centri di costo |
| COGANRAG | arag-rec | Input | Anagrafica raggruppamenti centri di costo (per gerarchia padre) |
| COGTESBO | tes-rec | Input | Testate documenti magazzino (per filtro causali) |
Transito¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| cogtrans | trs-rec | I-O | Transito movimenti commessa (popolato da COGG40) |
| t-dettaglio | t-cogua0-rec | I-O | Transito dettaglio costi/ricavi (popolato da COGUA0) |
| t-raggr | t-cogua0-cc-rec | I-O | Transito raggruppato per centro di costo (popolato da COGUA0) |
| t-struttura | t-cogua1-t-rec | I-O | Transito struttura raggruppamenti (popolato da COGUA1) |
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| ARPSTPRC | a-stpr-rec | I-O | Stato processi Aglancio (solo batch) |
Copybook inclusi¶
Screen Designer¶
| Copybook | Contenuto |
|---|---|
swc021-01.scr |
Maschera principale |
swc021.select |
SELECT dei file (manca cogtrans, dichiarato manualmente) |
swc021.fd |
FD dei file |
swc021.wrk |
Working storage maschera |
swc021.decla |
Declaratives |
swc021.prc |
Procedure standard maschera |
Strutture dati¶
| Copybook | Contenuto |
|---|---|
cogfiles.cpy |
FD feurtab |
bincmrtp.cpy / bincmtip.cpy / bincmtec.cpy / bincmtes.cpy / bincmsot.cpy / bincmstt.cpy / bincmsta.cpy / bincmtot.cpy / bincmmov.cpy / bincmmnw.cpy / bincmpro.cpy / bintbrgg.cpy / binrggl1.cpy ... binrggl5.cpy |
Record tabelle BI |
arpstprc.cpy |
Record ARPSTPRC |
cogazien.cpy |
Dati azienda |
cogconta.cpy |
Dati contabilita' |
k-personal.cpy |
Costanti personalizzazione (k-personal-cortesi, k-personal-elettrica-andreoli) |
cogua0-t-dettaglio.cpy / cogua0-t-raggr.cpy / cogua1-t-struttura.cpy |
Strutture transito COGUA0/COGUA1 |
wgrave.cpy / wnscr.cpy / wopenf.cpy / wstato.cpy |
Working storage comuni |
sql-decla-ws.cpy |
Working storage connessione SQL/BI |
bincmrtp-sql-ws.cpy / ... / binrggl5-sql-ws.cpy |
Interfaccia SQL tabelle BI |
arpstprc-sql-ws.cpy |
Interfaccia SQL ARPSTPRC |
Utility¶
| Copybook | Contenuto |
|---|---|
utilncnf.cpy |
Struttura parametri RNEWCONF |
utilgesdebug.cpy |
Gestione debug/log |
utilswgets.cpy |
Interfaccia SWGETS |
utilagprg.cpy |
Interfaccia Aglancio processo |
utilcogua0.cpy |
Interfaccia COGUA0 (calcolo costi/ricavi commessa) |
utilcogua1.cpy |
Interfaccia COGUA1 (struttura raggruppamenti) |
utilcogg40.cpy |
Interfaccia COGG40 (motore transito movimenti) |
utils52.cpy |
Interfaccia COGS52 (calendario) |
utils62.cpy |
Interfaccia COGS62 (differenza tempo, per SWLIVE) |
Chiavi secondarie¶
| Copybook | Contenuto |
|---|---|
crmskinf.k02 |
Chiave2 CRMSKINF (info-chiave-su-scheda + tcl) |
Programmi chiamati (CALL)¶
| Programma | Scopo |
|---|---|
| RNEWCONF | Lettura configurazione (2 chiamate: src-cfg, src-cfg-agl) |
| SWGETS | Recupero stringa di connessione SW-ING (modalita' batch) |
| COGS62 | Calcolo differenza tempo (per SWLIVE) |
| SWLIVE | Keepalive processo Aglancio (ogni 30 secondi in modalita' batch) |
| COGG40 | Motore di transito movimenti commessa (genera file cogtrans) |
| COGUA0 | Calcolo costi/ricavi per commessa (genera file transito t-dettaglio e t-raggr) |
| COGUA1 | Genera struttura raggruppamenti centri di costo (file transito t-struttura) |
| C$RERR | Lookup errore C-Tree (per backend C-Tree/DBmaker) |
| C$NARG / C$PARAMSIZE | Verifica presenza parametro util-agprg |
Configurazione (RNEWCONF)¶
Chiamata x99-src-cfg:
| # | Gruppo | Chiave | Campo interno | Descrizione |
|---|---|---|---|---|
| 01 | abilita | bin-tipo | tm-cfg-bin-tipo |
Tipo connessione BI: "P" Postgres, "C" C-Tree, "D" DBmaker, "N" disabilitato |
| 02 | abilita | bin-db-path | tm-cfg-bin-path |
Percorso file C-Tree |
| 03-05 | abilita | bin-db-conn-string (1-3) | tm-cfg-bin-conn-string |
Stringhe connessione Postgres |
| 06 | abilita | bin-db-log-level | tm-cfg-bin-log-level |
Log level connessione |
| 07 | commesse | gruppo-manodopera | tm-cfg-gruppo-manodopera |
Codice gruppo merci usato come manodopera |
| 08 | commesse | CLASSE-RAGGR-CENTRI-COSTO | tm-cfg-classe |
Classe centri di costo da estrarre (se vuoto, disabilita calcolo CC) |
| 09 | clipot | info-chiave-su-scheda | tm-cfg-info-chiave-su-scheda |
Codice info scheda CRM per recupero lotto |
| 10 | clipot | ins-auto-sottocomm-da-scheda-abilita | tm-cfg-ins-auto-sot-da-scheda-abilita |
"S" = abilita recupero lotto da CRM su sottocommessa |
| 11 | clipot | ins-auto-sottocomm-da-scheda-tcl | tm-cfg-ins-auto-sot-da-scheda-tcl |
Tipo cliente scheda CRM per recupero lotto |
Chiamata x99-src-cfg-agl (modalita' Aglancio):
| # | Gruppo | Chiave | Campo interno | Descrizione |
|---|---|---|---|---|
| 01 | areaapp | cod-azienda | tm-cfg-cod-azienda |
Codice azienda AreaApp |
| 02 | areaapp | db-log-level | tm-cfg-bin-log-level-agl |
Log level connessione AreaGate |
| 03 | AREAAPP | AGLANCIO-ATTIVO | tm-cfg-aglancio-attivo |
"S" = nuova procedura Aglancio attiva |
La stringa di connessione AreaGate e' restituita da SWGETS.
Logica di business¶
Calcolo movimenti formato classico (scrivi-bincmmov)¶
Per ogni commessa COGTESCM:
- Chiama COGG40 (caller SWC021,
cogg40-called = "COGG40-BICOMM") → produce file di transitocogtranscon nome temporaneo incogg40-trs-name. - Apre
cogtrans, scan, per ogni record contrs-merce <> high-values: scrive una riga BINCMMOV con merce, quantita', quantita' fatturata, prezzo, valore, fatturato, classificazione causale. - Chiude e ricicla
cogtransper la commessa successiva.
Calcolo movimenti formato nuovo (scrivi-bincmmnw)¶
Per ogni commessa COGTESCM:
- Scrive una riga "riepilogo" BINCMMNW con dati di intestazione commessa (cliente, responsabile, progetto, preventivo, destinazione).
- Chiama
ricerca-cogua0: - Crea due file transito (
t-dettaglio,t-raggr) con nomi temporanei inext-tmp-dir(uno per operatore). - Chiama COGUA0 con
cogua0-commessa = tsc-cod,cogua0-calcola-cc = "S"se classe centri costo configurata. - Riapre
t-dettaglioin input, scan; per ogni movimento applica filtro causale:- Se provenienza
"DM"(documento magazzino), legge COGTESBO e COGTABEL tipo 15. Seeuta-cb-com-gia = "I"eeuta-cb-com-segno = "I", scarta (evita doppi conteggi da raggruppamento giornaliero).
- Se provenienza
- Per ogni movimento valido: scrive BINCMMNW con commessa, sottocommessa, cantiere, data, doc, tip, provenienza (e provenienza costo), tecnico (doc-rif-cod), merce, quantita', ricavo unitario/totale, costo unitario/totale, fatturato, classificazione.
carica-cc-raggr(centro di costo a 5 livelli):- Risale i padri di
t-cogua0-raggrsu COGANRAG tip "R", classetm-cfg-classe. - Riempie 5 livelli di raggruppamento (
bmcnew-cc-raggr-1..5) con la gerarchia (livello 1 = padre piu' alto trovato, livello 5 = foglia). Se ci sono meno di 5 livelli, replica la foglia. - Per ogni livello popolato, scrive il record su BINRGGL1..5 (solo se non gia' presente).
Struttura raggruppamenti (scrivi-binrggl)¶
Chiama carica-t-struttura (COGUA1 con classe tm-cfg-classe → file transito t-struttura).
Scan COGANRAG con tip "R": per ogni raggruppamento, cerca su t-struttura il livello (t-cogua1-t-livello); scrive il record sul BINRGGL del livello corrispondente (1..5) con arag-classe, arag-id, arag-des, padre t-cogua1-t-id-padre.
Recupero lotto da CRM (recupera-lotto-su-crmananf)¶
Eseguito durante l'estrazione sottocommesse, solo se:
az-commesse = "M"etm-cfg-ins-auto-sot-da-scheda-abilita = "S"etm-cfg-ins-auto-sot-da-scheda-tcl <> spacesetm-cfg-info-chiave-su-scheda <> 0.
Cerca su CRMSKINF chiave2 il codice info e tcl configurati, poi legge CRMANANF per ottenere nnf-dato (codice lotto) → bansot-rif-lotto-da-crm.
Totalizzatori personalizzazione¶
fill-bincmtot-standard scrive A (manodopera interna), B (manodopera esterna), C (oneri diversi interni), D (oneri diversi esterni), E (merci), F (fatturato).
Per Elettrica Andreoli (az-personal = k-personal-elettrica-andreoli) fill-bincmtot-andreoli aggiunge G (oneri gestore), I (oneri enti), L (oneri legali), N (oneri di noleggio), P (oneri progettazione), S (oneri di sicurezza), T (oneri di struttura), U (oneri di ufficio), V (oneri di viaggio).
Keepalive Aglancio (SWLIVE)¶
In modalita' batch, paragrafo verifica-swlive chiamato periodicamente nelle scan principali e nelle cancellazioni: se sono passati piu' di 30 secondi (verificati via COGS62), chiama SWLIVE.
Note¶
- ID processo Aglancio: 50021.
- Programma molto ampio (3.819 righe): la complessita' deriva dall'invocazione del motore di calcolo costi/ricavi (COGUA0/COGUA1) per ogni commessa.
- La cancellazione iniziale via
b1-cancella(per C-Tree/DBmaker) esegue scan completo + DELETE su tutte le 17 tabelle BI: in produzione Postgres viene invece eseguito TRUNCATE (piu' rapido). - I file di transito (
cogtrans,t-dettaglio,t-raggr,t-struttura) sono creati con nomi che contengono l'operatore corrente, in modo che esecuzioni concorrenti di operatori diversi non si sovrappongano. Se un file transito risulta gia' aperto, segnala "Funzione gia' in uso dall'operatore". - Eccezioni personalizzazione: Cortesi (
k-personal-cortesi) perbancom-commessa-padre; Elettrica Andreoli per totalizzatori estesi.