SWC009 - Scaricamento Movimenti Vendita per SW-ING¶
Intestazione¶
| Campo | Valore |
|---|---|
| Programma | SWC009 |
| Titolo | Scaricamento Movimenti Vendita x SW-ING |
| Posizione menu | Statistiche > Estrazione dati vs B.I.Swing > Magazzino/Vendite > Movimenti vendita |
Scopo e logica generale¶
SWC009 estrae i movimenti di vendita dal magazzino e li scrive nell'archivio BINVENDI (e opzionalmente BINVENKT) utilizzato dal sistema di Business Intelligence SW-ING.
Il programma funziona in due modalita':
- Interattiva: l'operatore inserisce il periodo da estrarre tramite maschera; al termine viene mostrato il contatore di righe lette/scritte.
- Batch (chiamata da Aglancio): il periodo e' calcolato automaticamente in base alla configurazione (
nr-mesi-bi0009); l'output e' rediretto al log di processo Aglancio tramitegesdebug.
Prima dell'elaborazione il programma cancella i record BINVENDI gia' presenti per il periodo (cancella-bin-sub-tm-cfg-bin-tipo), poi rielabora da zero.
Flusso principale¶
- Inizializzazione (
apri): controllo abilitazione, lettura azienda, apertura file, lettura configurazione RNEWCONF (x99-confi,x99-src-cfg), inizializzazione connessione BI (init-bin-sub-tm-cfg-bin-tipo), setup tasti funzione. - Accept parametri (modalita' interattiva):
a-tm-daint-in(data inizio),a-tm-daint-fi(data fine), con supporto calendario COGS52. - Calcolo automatico del periodo (modalita' Aglancio/batch): data fine = data di sistema (o fine mese se
gestione-pasticcerie); data inizio = data di sistema menonr-mesi-bi0009 * 30giorni. - Elaborazione (
a-elabora-conferma): - Creazione file transito COGTRANS2 e COGTRANS3 (per gestione costi da assist).
fase1: estrazione movimenti di magazzino da COGTESBO/COGMOMAG.fase2: estrazione spese/bolli/maggiorazioni da COGFATTU (solo se configurato).- Chiusura (
fine): eliminazione file transito, chiusura connessione BI, aggiornamento stato processo ARPSTPRC (solo modalita' Aglancio).
File e tabelle acceduti¶
| File logico | Record | Modalita' | Uso |
|---|---|---|---|
| BINVENDI | bven-rec | I-O | Archivio movimenti vendita BI (output principale) |
| BINVENKT | bvkt-rec | I-O | Archivio movimenti vendita KIT (output, se espl-dbase-bi0009) |
| COGTESBO | tes-rec | Input | Testate documenti magazzino (chiave2: data) |
| COGMOMAG | mag-recz | Input | Righe movimenti magazzino |
| COGCONTR | con-rec | Input | Righe "no merci" dei documenti |
| COGFATTU | fat-rec | Input | Fatture clienti (chiave8: data movimento, per fase2) |
| COGMERCI | mer-rec | Input | Anagrafica merci |
| COGMERAP | map-rec | Input | Prezzi/aliquote IVA merce |
| COGMERA2 | ma2-rec | Input | Classificazione statistica merce (ma2-tipo-stat) |
| COGGEANA | ana-rec | Input | Anagrafica generale (clienti, agenti) |
| COGTABEL | euta-rec | Input | Tabelle sistema (tipo 15: causali, tipo 67: aliquote IVA) |
| COGRACCO | rac-rec | Input | Raccordo bolle-fatture (chiave2: bolla) |
| COGRACBB | - | Input | Raccordo bolle per cerca-preventivo |
| COGRIGOR | - | Input | Righe ordini |
| COGTESOR | tor-rec | Input | Testate ordini |
| COGDESAG | - | Input | Destinazioni agente |
| COGRIGCM | rgc-rec | Input | Righe commesse |
| COGTCMAG | tsca-rec | Input | Testate commesse |
| COGTESAP | tsa-rec | Input | Testate documenti aggiuntivi (brand, grp-az-cod) |
| COGDBASE | dba-rec | Input | Distinta base (componenti KIT, tipo "V") |
| COGDBAGG | dbg-rec | Input | Distinta base aggregata (percentuali ripartizione, tipo "D") |
| COGMOAGG | moa-rec | Input | Movimenti aggregati (costo FIFO "VF") |
| COGMERLK | - | Input | Legami merce (per ricerca listino) |
| COGMERCL | - | Input | Listino merce |
| COGANAPP | - | Input | Applicazione listino |
| COGDEST2 | dst2-rec | Input | Destinazioni diverse (per agente-giro in pasticcerie) |
| ASNCHTES | acht-rec | Input | Chiamate assistenza (per agente) |
| ASNCNTES | - | Input | Contratti assistenza (cerca-contratto) |
| ASNCNFAT | - | Input | Fatturato contratti assist |
| ASNCNDDT | - | Input | DDT contratti assist |
| ASNINDMG | - | Input | Indici movimenti assist |
| ASNINTES | - | Input | Interventi assistenza |
| FEURTAB | - | Input | Tabella file Eurosystem |
| ARPSTPRC | a-stpr-rec | I-O | Stato processi Aglancio (solo modalita' batch) |
| COGTRANS2 | trs2-rec | I-O | Transito: interventi gia' elaborati (costi-da-assist) |
| COGTRANS3 | trs3-rec | I-O | Transito: costi per anno intervento |
Copybook inclusi¶
Screen Designer¶
| Copybook | Contenuto |
|---|---|
swc009-01.scr |
Maschera principale |
swc009.select |
SELECT dei file |
swc009.fd |
FD dei file |
swc009.wrk |
Working storage maschera |
swc009.decla |
Declaratives |
Strutture dati¶
| Copybook | Contenuto |
|---|---|
cogfiles.cpy |
FD feurtab |
binvendi.cpy / binvenkt.cpy |
Record BINVENDI / BINVENKT |
arpstprc.cpy |
Record ARPSTPRC |
asns07-t-dettaglio.cpy |
Record transito dettaglio ASNS07 |
cogazien.cpy |
Dati azienda |
k-u10.cpy |
Costanti COGU10 |
k-personal.cpy |
Costanti personalizzazione |
k-tipi-cogtabel.cpy |
Costanti tipi COGTABEL |
wgrave.cpy / wnscr.cpy / wopenf.cpy / wstato.cpy |
Working storage comuni |
sql-decla-ws.cpy |
Working storage connessione SQL/BI |
binvendi-sql-ws.cpy / binvenkt-sql-ws.cpy |
Interfaccia SQL BINVENDI/BINVENKT |
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 |
utilcogl61.cpy |
Interfaccia COGL61 (costo FIFO/PMA) |
utilasns07.cpy |
Interfaccia ASNS07 (costi assistenza) |
utilgesdate.cpy |
Interfaccia GESDATE (calcolo fine mese) |
utilg31.cpy |
Interfaccia COGG31 (conversione UM) |
utils01.cpy |
Interfaccia COGS01 (listino) |
utils52.cpy |
Interfaccia COGS52 (calendario) |
utils62.cpy |
Interfaccia COGS62 (differenza tempo, per SWLIVE) |
utilu09.cpy / utilu10.cpy |
Interfaccia COGU09 / COGU10W |
Programmi chiamati (CALL)¶
| Programma | Scopo |
|---|---|
| RNEWCONF | Lettura configurazione (3 chiamate: confi, src-cfg, src-cfg-agl) |
| COGS01 | Ricerca prezzo di listino per la merce/cliente/data |
| COGS52 | Calendario (selezione date interattiva) |
| COGS62 | Calcolo differenza in secondi tra due timestamp (per SWLIVE) |
| COGL61 | Recupero costo unitario FIFO o prezzo medio acquisto |
| COGG31 | Conversione quantita' in unita' di misura alternativa |
| COGU09 | Ricerca cliente di consegna su ordine collegato |
| COGU10W | Formattazione/arrotondamento importi |
| ASNS07 | Calcolo dettaglio costi per chiamata assistenza |
| GESDATE | Calcolo fine mese (gestione pasticcerie) |
| DTPRG / PRGDT | Conversione data <-> progressivo (calcolo periodo automatico) |
| SWGETS | Recupero configurazione SW-ING (percorsi, tipo connessione) |
| SWLIVE | Keepalive processo Aglancio (ogni 30 secondi in modalita' batch) |
Configurazione (RNEWCONF)¶
Tutte le chiavi sono lette nella chiamata x99-confi (pacchetto "C"):
| # | Gruppo | Chiave | Campo interno | Descrizione |
|---|---|---|---|---|
| 01 | bint | nr-mesi-bi0009 | tm-cfg-nr-mesi |
Numero di mesi precedenti per calcolo automatico periodo |
| 02 | bint | no-merci-bi0009 | tm-cfg-no-merci |
"S" = estrai anche righe senza merce (da COGCONTR) |
| 03 | bint | cod-merce-bi0009 | tm-cfg-merce-nm |
Codice merce da usare per le righe senza merce |
| 04 | gestbuonip | causale-contanti-1 | tm-cfg-cau-con-1 |
Prima causale corrispettivi (marca come fatturato) |
| 05 | gestbuonip | causale-contanti-2 | tm-cfg-cau-con-2 |
Seconda causale corrispettivi |
| 06 | bint | espl-dbase-bi0009 | tm-cfg-espl-dbase |
"S" = esplodi distinta base (popola anche BINVENKT) |
| 07 | bint | criterio-costo-bi0009 | tm-cfg-criterio-costo |
Criterio costo: "PU" = FIFO, "PM" = prezzo medio, "VF" = valore fifo |
| 08 | abilita | taglio-lamiere | tm-cfg-abilita-taglio-lamiere |
"S" = attiva calcolo pesi per taglio lamiere |
| 09 | bint | uscite-da-non-fatturare | tm-cfg-uscite-da-non-fatturare |
"S" = estrai tutti i documenti di uscita a cliente indipendentemente dalla causale |
| 10 | bint | swc009-costi-da-assist | tm-cfg-costi-da-assist |
"S" = integra i costi degli interventi assistenza (ASNS07) |
| 11 | abilita | gestione-pasticcerie | tm-cfg-gest-pasticcerie |
"S" = modalita' pasticcerie (data fine = fine mese, agente-giro da destinazione) |
| 12 | bint | swc009-merce-spese-bolli | tm-cfg-merce-spebol |
Codice merce per bolli da fattura (fase2) |
| 13 | bint | swc009-merce-magg-pagamento | tm-cfg-merce-magpag |
Codice merce per maggiorazione pagamento da fattura (fase2) |
| 14 | bint | swc009-merce-spese-riba | tm-cfg-merce-speriba |
Codice merce per spese RiBa da fattura (fase2); se assente, usa merce bolli |
| 15 | odonto | statistiche-con-ripartizione-db | tm-cfg-statis-ripart-db |
"S" = ripartisci valore distinta base tipo "D" tra i componenti (odonto) |
La configurazione per la connessione BI (tipo connessione, path, stringhe SQL) e' letta da x99-src-cfg (gruppo "abilita": bin-tipo, bin-db-path, bin-db-conn-string 1-3, bin-db-log-level).
La configurazione Aglancio e' letta da x99-src-cfg-agl (gruppo "areaapp": cod-azienda, db-log-level, AGLANCIO-ATTIVO).
Logica di business¶
Fase 1: estrazione movimenti di magazzino¶
Scansione di COGTESBO per data (st-cogtesbo-notmin-chia2) nel range tm-daint-in - tm-daint-fi.
Per ogni testata documento:
- Filtro causale: verifica COGTABEL tipo 15. Se la causale non ha
euta-cb-con-fat = 'SI', il documento e' saltato (a meno cheuscite-da-non-fatturare = "S"o sia una causale corrispettivi per Sgarbi). - Filtro bolla-solo-racconto: se su COGRACCO il flag
rac-solo-rac = "S", il documento e' escluso (bolla chiusa in fattura ma non conteggiata). - Filtro tipo CF: solo documenti verso clienti (
tes-tipocf = "C"). - Lettura COGTESAP: per brand e gruppo azienda.
- Loop righe COGMOMAG: per ogni riga del documento:
- Legge COGMERA2 per il tipo statistico (
ma2-tipo-stat): "T" = tutto, "V" = solo valore, "Q" = solo quantita'. - Ripartizione distinta base (se
tm-cfg-statis-ripart-db = "S"emer-tipo-distinta = "D"): chiamab14-calc-dbaseche scrive una riga BINVENDI per ogni componente di COGDBAGG proporzionalmente alla percentuale (dbg-e-perc-valore), poi sottrae il totale ripartito dal valore della riga padre. - Valorizza bven-rec con: azienda, documento, magazzino, data, cliente, cliente consegna, agenti, causale, merce, qta, prezzi, sconti, valore.
- Calcolo costo: secondo
tm-cfg-criterio-costo: "PU" (COGL61 prezzo acquisto), "PM" (COGL61 prezzo medio), "VF" (COGMOAGG valore fifo). Se attivocosti-da-assiste la riga e' collegata a una chiamata, il costo e' calcolato da ASNS07 tramite file transito COGTRANS2/COGTRANS3. - Omaggi: le righe con
mag-omaggio = "O"vengono azzerate (prz-vlor, sco1, sco2, valore), eccetto per l'azienda Nexxta (az-personal = "LO") dove i valori vengono mantenuti. - Causali senza fatturazione: se
euta-cb-con-fat <> 'SI', tutti i campi valore vengono azzerati, tranne per le causali corrispettivi configurate. - Riferimento fattura: ricerca su COGRACCO (chiave2 su bolla) per trovare il riferimento fattura; se trovato e il tipo non e' pre-fattura (
az-tipo-prf), impostabven-rif-fatebven-fattu = "S". - Commessa: se
az-commesse = "M", cerca su COGRIGCM tipo "RD" poi "RC" per il codice commessa. - Agente fallback: se
bven-agente = 0, cerca su commessa (COGTCMAG), poi su chiamata (ASNCHTES), poi su anagrafica cliente (COGGEANA). - Nexxta omaggio: per
az-personal = "LO"emag-omaggio = "O", impostabven-fattu = "O". - Scrittura BINVENDI (
sub-cfg-wr-binvendi, con fallbackrwrse gia' presente). -
Esplosione KIT (se
tm-cfg-espl-dbase = "S"): se la merce e' padre con distinta tipo "V", scrive BINVENKT per ogni componente di COGDBASE; altrimenti scrive BINVENKT con la stessa riga. -
Righe no-merci (se
tm-cfg-no-merci = "S"): legge COGCONTR per la stessa testata e scrive BINVENDI usando la merce configuratatm-cfg-merce-nmebven-fattu = "S".
Fase 2: estrazione spese da fattura¶
Attiva solo se almeno una delle merci spese-bolli, spese-riba o magg-pagamento e' configurata (condizione: tm-cfg-merce-spebol, tm-cfg-merce-magpag e tm-cfg-merce-speriba non tutti uguali a " 00000").
Scansione di COGFATTU per data (st-cogfattu-notmin-chia8) nel range tm-daint-in - tm-daint-fi.
Per ogni fattura clienti (COGTABEL tipo doc-iva con euta-clifotiva (1:1) = "C" e <> "CO"):
- Bolli (
fat-bolli <> 0): scrive BINVENDI con mercetm-cfg-merce-spebol, valore =fat-bolli, documento =fat-chia1 + "001",bven-fattu = "S". Il valore deriva direttamente dafat-bolli(non piu' sommato con le spese RiBa). - Spese RiBa (
w-fat-spese <> 0, dovew-fat-spese = fat-spese): scrive BINVENDI con mercetm-cfg-merce-speriba, documento =fat-chia1 + "003". Il valore e' negato per le note di accredito (euta-segnotiva = "-"). Elaborata come riga indipendente dai bolli (TASK-4590). - Maggiorazione pagamento (
fat-sco-imp <> 0): scrive BINVENDI con mercetm-cfg-merce-magpag, documento =fat-chia1 + "002". Il segno tiene conto difat-sco-segnoeeuta-segnotiva.
Se tm-cfg-merce-speriba non e' configurata (= " 00000"), il fallback per le spese RiBa e' la merce bolli.
Ripartizione distinta base (b14-calc-dbase)¶
Chiamata da fase1 quando tm-cfg-statis-ripart-db = "S" e mer-tipo-distinta = "D".
Scansione di COGDBAGG (tipo "E", chiave = mag-merce3) per trovare i componenti con percentuale di valore (dbg-e-perc-valore). Per ogni componente:
- Calcola
w-mag-valore-db = mag-valore / 100 * dbg-e-perc-valore - Accumula in
w-mag-valore-db-tot - Legge BOGMERCI per i dati della merce componente
- Scrive una riga BINVENDI con
bven-merce = dbg-compebven-valore = w-mag-valore-db(negato se uscita) - Usa un progressivo documento
w-prog-dbche parte da 5000 (reinizializzato a ogni testata documento) per non collidere con le righe ordinarie
Al termine, la riga padre viene scritta con il valore residuo: mag-valore - w-mag-valore-db-tot.
Note sulle modifiche recenti (TASK-4590 - 09/04/2026)¶
1. Separazione spese bolli e spese RiBa¶
In precedenza bolli e spese di incasso venivano sommati in un unico valore (w-fat-spese-bolli) e scritti sulla merce bolli. Con TASK-4590:
- I bolli (
fat-bolli) restano associati alla merce configurata inswc009-merce-spese-bolli(chiave 12). - Le spese RiBa (
fat-spese) vengono scritte su una merce distinta, configurabile con la nuova chiave RNEWCONFswc009-merce-spese-riba(gruppobint, chiave 14). Se non configurata, si usa il fallback sulla merce bolli.
2. Ripartizione distinta base tipo "D"¶
Aggiunta la procedura b14-calc-dbase e la nuova chiave RNEWCONF statistiche-con-ripartizione-db (gruppo odonto, chiave 15). Quando attiva, le righe BINVENDI relative a merci con mer-tipo-distinta = "D" vengono esplose in una riga per ogni componente di COGDBAGG, proporzionalmente alla percentuale di valore. Questo replica la logica di ripartizione gia' presente nella contabilizzazione fattura.
3. Eccezione Nexxta (az-personal = "LO") per le righe omaggio¶
Prima della modifica, le righe con mag-omaggio = "O" venivano sempre azzerate. Ora:
- Per tutte le aziende eccetto Nexxta: il comportamento rimane invariato (valori azzerati).
- Per Nexxta (
az-personal = "LO"): i valori vengono mantenuti ebven-fattuviene impostato a"O"invece di"S"o"N", per permettere al BI di distinguere le righe omaggio dalle normali.
Storico Modifiche¶
| Build | Descrizione |
|---|---|
| 2026/0426 | TASK-4590: separazione spese bolli e spese RiBa in fase2 (merce distinta configurabile con chiave swc009-merce-spese-riba); aggiunta ripartizione distinta base tipo "D" (b14-calc-dbase, chiave statistiche-con-ripartizione-db); eccezione Nexxta per righe omaggio (bven-fattu = "O"). |