Vai al contenuto

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 tramite gesdebug.

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

  1. 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.
  2. Accept parametri (modalita' interattiva): a-tm-daint-in (data inizio), a-tm-daint-fi (data fine), con supporto calendario COGS52.
  3. Calcolo automatico del periodo (modalita' Aglancio/batch): data fine = data di sistema (o fine mese se gestione-pasticcerie); data inizio = data di sistema meno nr-mesi-bi0009 * 30 giorni.
  4. Elaborazione (a-elabora-conferma):
  5. Creazione file transito COGTRANS2 e COGTRANS3 (per gestione costi da assist).
  6. fase1: estrazione movimenti di magazzino da COGTESBO/COGMOMAG.
  7. fase2: estrazione spese/bolli/maggiorazioni da COGFATTU (solo se configurato).
  8. 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:

  1. Filtro causale: verifica COGTABEL tipo 15. Se la causale non ha euta-cb-con-fat = 'SI', il documento e' saltato (a meno che uscite-da-non-fatturare = "S" o sia una causale corrispettivi per Sgarbi).
  2. Filtro bolla-solo-racconto: se su COGRACCO il flag rac-solo-rac = "S", il documento e' escluso (bolla chiusa in fattura ma non conteggiata).
  3. Filtro tipo CF: solo documenti verso clienti (tes-tipocf = "C").
  4. Lettura COGTESAP: per brand e gruppo azienda.
  5. Loop righe COGMOMAG: per ogni riga del documento:
  6. Legge COGMERA2 per il tipo statistico (ma2-tipo-stat): "T" = tutto, "V" = solo valore, "Q" = solo quantita'.
  7. Ripartizione distinta base (se tm-cfg-statis-ripart-db = "S" e mer-tipo-distinta = "D"): chiama b14-calc-dbase che 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.
  8. Valorizza bven-rec con: azienda, documento, magazzino, data, cliente, cliente consegna, agenti, causale, merce, qta, prezzi, sconti, valore.
  9. Calcolo costo: secondo tm-cfg-criterio-costo: "PU" (COGL61 prezzo acquisto), "PM" (COGL61 prezzo medio), "VF" (COGMOAGG valore fifo). Se attivo costi-da-assist e la riga e' collegata a una chiamata, il costo e' calcolato da ASNS07 tramite file transito COGTRANS2/COGTRANS3.
  10. 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.
  11. Causali senza fatturazione: se euta-cb-con-fat <> 'SI', tutti i campi valore vengono azzerati, tranne per le causali corrispettivi configurate.
  12. 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), imposta bven-rif-fat e bven-fattu = "S".
  13. Commessa: se az-commesse = "M", cerca su COGRIGCM tipo "RD" poi "RC" per il codice commessa.
  14. Agente fallback: se bven-agente = 0, cerca su commessa (COGTCMAG), poi su chiamata (ASNCHTES), poi su anagrafica cliente (COGGEANA).
  15. Nexxta omaggio: per az-personal = "LO" e mag-omaggio = "O", imposta bven-fattu = "O".
  16. Scrittura BINVENDI (sub-cfg-wr-binvendi, con fallback rwr se gia' presente).
  17. 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.

  18. Righe no-merci (se tm-cfg-no-merci = "S"): legge COGCONTR per la stessa testata e scrive BINVENDI usando la merce configurata tm-cfg-merce-nm e bven-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 merce tm-cfg-merce-spebol, valore = fat-bolli, documento = fat-chia1 + "001", bven-fattu = "S". Il valore deriva direttamente da fat-bolli (non piu' sommato con le spese RiBa).
  • Spese RiBa (w-fat-spese <> 0, dove w-fat-spese = fat-spese): scrive BINVENDI con merce tm-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 merce tm-cfg-merce-magpag, documento = fat-chia1 + "002". Il segno tiene conto di fat-sco-segno e euta-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-comp e bven-valore = w-mag-valore-db (negato se uscita)
  • Usa un progressivo documento w-prog-db che 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 in swc009-merce-spese-bolli (chiave 12).
  • Le spese RiBa (fat-spese) vengono scritte su una merce distinta, configurabile con la nuova chiave RNEWCONF swc009-merce-spese-riba (gruppo bint, 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 e bven-fattu viene 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").