Vai al contenuto

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$PARAMSIZE su util-agprg; output rediretto al log Aglancio tramite gesdebug.

Flusso principale

  1. Inizializzazione (m-00): controllo abilitazione, init programma, apertura file, lettura azienda, configurazione (x99-src-cfg, x99-src-cfg-agl), inizializzazione connessione BI.
  2. Rilevamento modalita' Aglancio: se agprg-id-processo valido, modalita' batch con id processo dal chiamante.
  3. Maschera (solo interattivo): titolo "Scaricamento dati commesse", attesa F3.
  4. 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.
  5. Elaborazione (elabora):
  6. 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 "/", marca bancom-commessa-padre = "N".
    • Sottocommesse (COGSOTCM) → BINCMSOT. Se attiva la config ins-auto-sottocomm-da-scheda e modalita' commesse "M", chiama recupera-lotto-su-crmananf per 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).
  7. Movimenti classico (scrivi-bincmmov): per ogni commessa, chiama COGG40 (genera transito cogtrans), poi scan transito → BINCMMOV con merce, quantita', valori e classificazione.
  8. Struttura raggruppamenti (scrivi-bintbrgg + scrivi-binrggl): scan COGRAGGR → BINTBRGG; poi via COGUA1 (file transito t-struttura) → BINRGGL1..5 con padre per livello.
  9. Movimenti nuovo (scrivi-bincmmnw): per ogni commessa, scrive una riga "riepilogo" BINCMMNW; chiama ricerca-cogua0 (COGUA0 con file transito t-dettaglio/t-raggr) per ogni movimento di costo/ricavo, applica filtro causale (esclude causali con euta-cb-com-gia = "I" e euta-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-raggr risale i padri su COGANRAG).
  10. 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:

  1. Chiama COGG40 (caller SWC021, cogg40-called = "COGG40-BICOMM") → produce file di transito cogtrans con nome temporaneo in cogg40-trs-name.
  2. Apre cogtrans, scan, per ogni record con trs-merce <> high-values: scrive una riga BINCMMOV con merce, quantita', quantita' fatturata, prezzo, valore, fatturato, classificazione causale.
  3. Chiude e ricicla cogtrans per la commessa successiva.

Calcolo movimenti formato nuovo (scrivi-bincmmnw)

Per ogni commessa COGTESCM:

  1. Scrive una riga "riepilogo" BINCMMNW con dati di intestazione commessa (cliente, responsabile, progetto, preventivo, destinazione).
  2. Chiama ricerca-cogua0:
  3. Crea due file transito (t-dettaglio, t-raggr) con nomi temporanei in ext-tmp-dir (uno per operatore).
  4. Chiama COGUA0 con cogua0-commessa = tsc-cod, cogua0-calcola-cc = "S" se classe centri costo configurata.
  5. Riapre t-dettaglio in input, scan; per ogni movimento applica filtro causale:
    • Se provenienza "DM" (documento magazzino), legge COGTESBO e COGTABEL tipo 15. Se euta-cb-com-gia = "I" e euta-cb-com-segno = "I", scarta (evita doppi conteggi da raggruppamento giornaliero).
  6. 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.
  7. carica-cc-raggr (centro di costo a 5 livelli):
  8. Risale i padri di t-cogua0-raggr su COGANRAG tip "R", classe tm-cfg-classe.
  9. 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.
  10. 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" e
  • tm-cfg-ins-auto-sot-da-scheda-abilita = "S" e
  • tm-cfg-ins-auto-sot-da-scheda-tcl <> spaces e
  • tm-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) per bancom-commessa-padre; Elettrica Andreoli per totalizzatori estesi.