====== CASHDATA - Documentazione Tecnica Completa ======
\\
===== Indice =====
- [[#panoramica_del_sistema|Panoramica del Sistema]]
- [[#architettura_e_struttura_del_progetto|Architettura e Struttura del Progetto]]
- [[#configurazione_e_nuova_installazione|Configurazione e Nuova Installazione]]
- [[#funzionalita_principali|Funzionalità Principali]]
- [[#gestione_vendite|Gestione Vendite]]
- [[#chiusura_cassa|Chiusura Cassa]]
- [[#inventario_e_giacenze|Inventario e Giacenze]]
- [[#anagrafica_articoli|Anagrafica Articoli]]
- [[#gestione_operatori_e_permessi|Gestione Operatori e Permessi]]
- [[#sistema_di_reportistica|Sistema di Reportistica]]
- [[#integrazione_con_erp2|Integrazione con ERP2]]
- [[#integrazione_con_bilancia|Integrazione con Bilancia]]
- [[#schema_database|Schema Database]]
- [[#troubleshooting|Troubleshooting]]
----
===== 1. Panoramica del Sistema =====
==== 1.1 Descrizione ====
CASHDATA è un **sistema POS (Point of Sale)** desktop professionale sviluppato in C# con Windows Forms, destinato alla gestione di casse registratrici per il settore retail, in particolare per il fashion (abbigliamento con gestione taglie/colori).
\\
==== 1.2 Tecnologie Utilizzate ====
^ Componente ^ Tecnologia ^
| Framework | .NET Framework 4.7.2 |
| UI | Windows Forms |
| Database | SQL Server (via SQLOLEDB.1) |
| ORM | Entity Framework |
| Reporting | ComponentOne C1Report |
| Excel | SpreadsheetGear 2017 |
| JSON | Newtonsoft.Json 13.0.3 |
| UI Avanzata | Krypton Ribbon |
\\
==== 1.3 Componenti della Solution ====
CASHDATA.sln
├── CASHDATA (Applicazione principale - EXE)
│ ├── Program.cs (Entry point)
│ ├── Form1.cs (Form test)
│ ├── Login.cs (Form login)
│ └── Template XML per report
│
└── LIBAYCASH (Libreria principale - DLL)
├── Home.cs (Form principale)
├── Config.cs (Configurazione globale)
├── Utility.cs (Funzioni utility)
├── 143+ file C# (logica applicativa)
└── Dipendenze: LIBAYCMN
----
===== 2. Architettura e Struttura del Progetto =====
==== 2.1 Struttura Directory ====
D:\dev.net\CashData\
├── CASHDATA\ # Progetto principale
│ ├── bin\Debug\ # Output compilato
│ ├── Resources\ # Icone e immagini
│ ├── *.xml # Template report
│ └── App.config # Configurazione app
│
├── LIBAYCASH\ # Libreria logica
│ ├── Properties\
│ │ └── Settings.settings # Impostazioni DB
│ ├── Home.cs # Form principale
│ ├── Config.cs # Configurazione
│ └── [143+ file .cs] # Classi logica
│
├── CreateNewDb\ # Utility creazione DB
├── Script_DB\ # Script SQL
│ ├── per C#\ # Script TCS
│ └── TTCS_ALL_INSTALLATION\
│
└── RELEASE\ # File di release
\\
==== 2.2 Entry Point dell'Applicazione ====
// Program.cs
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
string assemblyVersion = Assembly.GetExecutingAssembly()
.GetName().Version.ToString();
Application.Run(new LIBAYCASH.Home(assemblyVersion));
}
\\
==== 2.3 Parametri da Riga di Comando ====
CASHDATA.exe [UserShowLevel] [SkipLogTableCheck]
* **UserShowLevel**: Livello visualizzazione interfaccia (default: dalla config)
* **SkipLogTableCheck**: Se presente, salta il controllo tabella LOG
----
===== 3. Configurazione e Nuova Installazione =====
==== 3.1 Checklist Nuova Installazione ====
=== FASE 1: Preparazione Database ===
* Installare SQL Server (Express o Standard)
* Creare database vuoto (nome consigliato: ''TTCS'' o ''TTCS_LOCAL'' per sviluppo)
* Configurare account SQL (es. ''sa'') con password
* Verificare che l'account SQL abbia permessi sufficienti sul database
\\
=== FASE 2: Esecuzione Script SQL ===
Eseguire in ordine dalla cartella ''RELEASE\01\'':
- ''00_DB_CREATION_CREATEDB.sql'' - Creazione struttura DB
- ''01_DB_CREATION_PROCEDURE.sql'' - Stored procedures
- ''02_DB_CREATION_TABLES.sql'' - Tabelle, dati iniziali, utenti e gruppi
- ''03_DB_CREATION_WITH_PROMO.sql'' - Dati promozioni
**Nota:** Lo script ''02_DB_CREATION_TABLES.sql'' include automaticamente:
* Parametri di configurazione (''CASSA_CONFIG_PARAMETER'') per tutte e 3 le sezioni (10, 20, 30)
* Parametri runtime (''CASSA_PARAMETER'') inclusi RECEIPT_COUNTER_PWD, HOMEMENU_ENABLED
* Parametri per-PC (''CASSA_PARAMETER_PC'') inclusi NEW_DAYLY_CLOSURE, NEW_START_BILL
* Gruppi utente predefiniti (GSU, ADMINISTRATORS GROUP, MANAGER, USER)
* Utenti predefiniti (su, Administator, Manager, User) con password impostate al primo avvio
* Stampante predefinita "Microsoft Print to PDF" per tutti i tipi documento
* Valori LIC (licenza) vuoti per consentire la prima installazione
\\
=== FASE 3: Configurazione Iniziale ===
Modificare ed eseguire ''Cose da fare per nuova installazione\02 Reimposta dati.sql'':
DECLARE @firma INT = 10; -- Codice azienda
DECLARE @currentshop VARCHAR(6) = '000002'; -- Codice negozio
DECLARE @shopnr INT = 84; -- Numero univoco negozio
DECLARE @releasefor INT = 84; -- Numero PC (= shopnr per singola cassa)
DECLARE @ivadefault VARCHAR(5) = '22'; -- Aliquota IVA default
DECLARE @cashclosuredate VARCHAR(8) = '20240201'; -- Data prima chiusura
Questo script aggiorna automaticamente anche:
* I valori LIC (licenza) vengono azzerati per consentire la prima installazione
* Il parametro ACTIVATION viene impostato a '.'
\\
=== FASE 4: Compilazione Applicazione ===
* Aprire la solution ''CASHDATA.sln'' in Visual Studio
* Impostare la configurazione su **Release** e piattaforma **x86**
* Compilare la solution
* Copiare il contenuto della cartella di output nella cartella di installazione (es. ''C:\APP - LOCAL\CASHDATA'')
\\
=== FASE 5: Configurazione CashData.xml ===
Prima di avviare l'applicazione, configurare il file ''CashData.xml'' nella cartella di installazione:
**Parametri importanti:**
^ Parametro ^ Descrizione ^ Note ^
| ''cnn_server'' | Indirizzo SQL Server | Es. ''localhost\SQLEXPRESS'', ''192.168.1.100'' |
| ''cnn_database'' | Nome database | Deve corrispondere al DB creato nella FASE 1 |
| ''cnn_user'' | Utente SQL | Es. ''sa'' |
| ''cnn_password'' | Password SQL | Password dell'utente SQL |
| ''ReleaseFor'' | ID univoco del PC | Deve corrispondere a @releasefor dello script |
| ''PCisSqlServer'' | Il PC e' il SQL Server | **''false''** se SQL Server non e' locale o l'utente SQL non ha permessi BACKUP. Impostare a ''true'' solo se si vuole il backup automatico del DB |
\\
=== FASE 6: Primo Avvio Applicazione ===
- **Avviare ''CASHDATA.exe''** dalla cartella di installazione
- **Cartella di installazione**: Al primo avvio, l'app chiede di confermare la cartella. Selezionare il percorso dove e' stato copiato l'eseguibile (es. ''C:\APP - LOCAL\CASHDATA'')
- **Creazione sottocartelle**: L'applicazione crea automaticamente: ''DDT\'', ''Received\'', ''ToSend\'', ''backup\'', ''basic\'', ''EXCEL\''
- **Inizializzazione utenti**: La funzione ''ChechForNewFunction()'' al primo avvio:
* Popola automaticamente la tabella ''CASSA_USER_FUNCTIONGROUP'' con i permessi per ogni gruppo
* Imposta le password predefinite per gli utenti
- **Login**: Usare le credenziali predefinite:
^ Utente ^ Password ^ Livello ^
| su | su28053 | SuperUser (99) |
| Administator | admincash | Amministratore (30) |
| Manager | manager1 | Manager (20) |
| User | user | Utente base (10) |
\\
==== 3.2 Architettura dei Parametri ====
Il sistema CASHDATA utilizza **3 tabelle distinte** per i parametri, ognuna con uno scopo diverso:
=== 3.2.1 CASSA_CONFIG_PARAMETER (Configurazione) ===
Tabella principale di configurazione a 3 livelli (sezioni):
^ Sezione ^ RELEASEDFOR ^ Scopo ^ Caricamento ^
| 10 | -1 | Parametri negozio (globali) | ''Config.Parametri'' via ''getParValueByKey()'' |
| 20 | N (=ReleaseFor) | Flag funzioni UI (solo TRUE) | ''Config.Funzioni'' |
| 30 | N (=ReleaseFor) | Parametri per-PC/hardware | ''Config.Parametri'' (sovrascrive sez. 10) |
**Lettura:** ''ReadConfigParameter(name, releasedfor, section)'' oppure ''getParValueByKey(key)'' per le sezioni 10+30.
=== 3.2.2 CASSA_PARAMETER (Parametri Runtime Globali) ===
Parametri operativi condivisi da tutte le casse del negozio (contatori, percorsi, password).
**Lettura:** ''ReadParameter(name, increment)'' con ''cash_nr = 0'' (default).
^ Parametro ^ Valore ^ Descrizione ^
| NEW_CLOSUREID | 1 | Contatore ID chiusura |
| NEW_START_BILL | 1 | Contatore scontrini (se globale) |
| RECEIPT_COUNTER_PWD | tex01 | Password reset contatore scontrini |
| INVENTORY_PWD | tex01 | Password conferma inventario |
| HOMEMENU_ENABLED | 0 | Menu home abilitato (0/1) |
| LAST_TCS | 1 | Ultimo file TCS eseguito |
| DDT_FILE | c:\texdatacash\DDT\ | Percorso caricamento DDT |
| SALES_EXCEL_FILE | ... | Percorso report vendite Excel |
| STOCK_EXCEL_FILE | ... | Percorso report giacenze Excel |
=== 3.2.3 CASSA_PARAMETER_PC (Parametri Runtime per-PC) ===
Parametri specifici per ogni cassa/PC, identificati dalla colonna ''CASH_NR''.
**Lettura:** ''ReadParameter(name, increment, Config.CASHNUMBER)'' con ''cash_nr != 0''.
^ Parametro ^ Valore ^ Descrizione ^
| NEW_DAYLY_CLOSURE | 1 | Contatore chiusura giornaliera per cassa |
| NEW_START_BILL | 1 | Contatore scontrini per cassa |
\\
==== 3.3 Parametri di Configurazione Essenziali ====
=== Parametri in CASSA_CONFIG_PARAMETER ===
^ Parametro ^ Sezione ^ Valore Esempio ^ Descrizione ^
| FIRMA_SHOP | 10 | 10 | Codice azienda |
| CURRENT_SHOP | 10 | 000002 | Codice negozio DIAMOD |
| VAT_DEFAULT | 10 | 22 | Aliquota IVA % |
| VAT_BUONO | 10 | 22 | IVA per buoni |
| BARCODELEN | 10 | 13 | Lunghezza EAN |
| LanguageCode | 10 | 0 | 0=Italiano, 1=Tedesco |
| DecimalSeparator | 10 | , | Separatore decimali |
| GroupSeparator | 10 | . | Separatore migliaia |
| CurrencySymbol | 10 | EUR | Simbolo valuta |
| INSTALLFOLDER | 30 | C:\APP - LOCAL\CASHDATA | Cartella installazione |
| LIC_SOSerial | 30 | //(vuoto)// | Seriale licenza (vuoto per nuova installazione) |
| LIC_Volume | 30 | //(vuoto)// | Volume licenza (vuoto per nuova installazione) |
| LIC_ACTIVATE | 30 | //(vuoto)// | Stato attivazione (vuoto per nuova installazione) |
\\
==== 3.4 Connection String ====
Provider=SQLOLEDB.1;Data Source=SERVER\SQLEXPRESS;Initial Catalog=TTCS;User ID=sa;Password=xxx;
\\
==== 3.5 Configurazione Moduli ====
^ Modulo ^ Parametro ^ Descrizione ^
| Fornitori | MODULE_SUPPLIER | Gestione fornitori |
| Clienti | MODULE_CUSTOMER | Anagrafica clienti e fedeltà |
| Venditori | MODULE_SELLER | Tracciamento venditori |
| Multi-negozio | MODULE_MULTISHOP | Gestione multi-punto vendita |
----
===== 4. Funzionalità Principali =====
==== 4.1 Mappa Funzionalità ====
┌─────────────────────────────────────────────────────────────┐
│ HOME (Form Principale) │
├──────────────────────┬──────────────────────────────────────┤
│ OPERAZIONI CASSA │ GESTIONE │
│ ├─ Vendita │ ├─ Anagrafica Articoli │
│ ├─ Reso │ ├─ Listini Prezzi │
│ ├─ Sconti │ ├─ Clienti │
│ ├─ Buoni/Coupon │ ├─ Fornitori │
│ └─ Sospensione │ └─ Operatori │
├──────────────────────┼──────────────────────────────────────┤
│ CHIUSURA │ REPORT │
│ ├─ Chiusura Cassa │ ├─ Vendite │
│ ├─ Storico │ ├─ Sell-Out │
│ └─ Differenze │ ├─ Corrispettivi │
│ │ └─ Giornale Cassa │
├──────────────────────┴──────────────────────────────────────┤
│ DOCUMENTI: DDT | MIV | Etichette │
└─────────────────────────────────────────────────────────────┘
----
===== 5. Gestione Vendite =====
==== 5.1 Flusso di Vendita ====
1. SCANSIONE ARTICOLO (EAN)
└─> ArticleCheck() verifica articolo e prezzo
2. AGGIUNTA AL CARRELLO
└─> addArticoloCarrello() crea record SCONTRINO
3. MODIFICA (opzionale)
├─> Quantità: btnTastierinoSpec1_Click()
├─> Prezzo: LogicaPrezzo()
└─> Sconto %: LogicaPercentuale()
4. PAGAMENTO
└─> btnPaga_Click() apre dialog PAY
└─> Selezione metodo pagamento
└─> Stampa scontrino fiscale
└─> Registrazione in CASSA_SALES
5. CHIUSURA TRANSAZIONE
└─> Eliminazione record SCONTRINO temporanei
\\
==== 5.2 Metodi di Pagamento ====
^ Codice ^ Costante ^ Descrizione ^
| 1 | PAYMANT_MONEY_CODE | Contanti |
| 2 | PAYMANT_CARD_CODE | Carta di credito |
| 3 | PAYMANT_BANCOMAT_CODE | Bancomat |
| 4 | PAYMANT_CHEQUE_CODE | Assegni |
| 5 | PAYMANT_COUPON_CODE | Buoni/Coupon |
| 9 | PAYMANT_DISCOUNT_CODE | Sconto |
\\
==== 5.3 Gestione Sconti ====
^ Causale ^ Codice ^ Descrizione ^
| PR | SpecialOffer | Offerta speciale |
| SA | Sales | Svendita |
| FS | EndSeries | Fine serie |
| MF | BrokenArticle | Articolo difettoso |
| VP | Staff | Sconto personale |
| AR | RoundingPrice | Arrotondamento |
| CL | Customer | Sconto cliente |
| AL | OtherReason | Altro motivo |
\\
==== 5.4 Tipi di Sconto ====
public enum Discount_Type
{
Inserted, // Sconto diretto
Progressive, // Cumula con sconti precedenti
Sum // Somma percentuali
}
\\
==== 5.5 Gestione Resi ====
* Stato articolo: ''Config.STATO_RESO = "R"''
* Quantità diventa negativa (-1)
* Se ''AskReturnCause = true'': richiede causale reso
* Tabella causali: ''CASSA_RETURN_CAUSE''
\\
==== 5.6 Sistema Attese (Sospensione) ====
* Massimo 4 transazioni contemporanee
* Ogni attesa ha colore distinto
* Struct ''ATTESA'' memorizza stato:
struct ATTESA {
List dgSpesa;
CASSA_CUSTOMER cliente;
int pezziTot;
double toto;
int punti;
}
----
===== 6. Chiusura Cassa =====
==== 6.1 Flusso Chiusura ====
TAB 0: CONTEGGIO DENARO
├─ Inserimento per taglio (€50, €20, €10, €5, €2, €1, cent)
├─ Calcolo totale inserito
└─ Verifica differenza con sistema
TAB 1: VERIFICA PAGAMENTI
├─ Visualizzazione totali per metodo
├─ Inserimento importi verificati
├─ Spunta verifica completata
└─ Differenza totale deve essere = 0
TAB 2: CONFERMA FINALE
├─ Prelievo contante finale
├─ Calcolo nuovo fondo cassa
└─ Conferma chiusura
PROCESSO CHIUSURA (Utility.ChiusuraCassa)
├─ Comunicazione registratore telematico (rapporto Z)
├─ Stampa rapporto chiusura
├─ TRANSAZIONE DATABASE:
│ ├─ UPDATE CASSA_FUND (nuovo fondo)
│ ├─ UPDATE CASSA_SALES (stato 0→10)
│ ├─ UPDATE CASSA_SALES_PAYMODE (stato 0→10)
│ ├─ INSERT CASSA_DAILY_CLOSURE
│ ├─ EXEC PRC_SALES_CLOSURE_IVA
│ └─ CloseCashSession()
├─ Stampa rapporto differenze (opzionale)
└─ Esportazione dati (se configurato)
\\
==== 6.2 Stati delle Vendite ====
public enum SaleStatus
{
NewSales = 0, // Non ancora chiuso
SalesSessionClosed = 10, // Chiuso in sessione
Exported = 20, // Esportato
SendedToCentral = 35, // Inviato a centrale
AcceptedFromCentral = 90 // Accettato
}
\\
==== 6.3 Tabelle Coinvolte ====
^ Tabella ^ Descrizione ^
| CASSA_DAILY_CLOSURE | Storico chiusure giornaliere |
| CASSA_FUND | Fondo cassa attuale |
| CASSA_FUND_PROTOCOL | Movimenti fondo |
| CASSA_SALES | Vendite registrate |
| CASSA_SALES_PAYMODE | Dettaglio pagamenti |
\\
==== 6.4 Codici Speciali in CASSA_DAILY_CLOSURE ====
^ CDC_PAYTYPECODE ^ Significato ^
| -1 | Differenza cassa |
| -2 | Fondo cassa |
| 1-N | Codici metodo pagamento |
----
===== 7. Inventario e Giacenze =====
==== 7.1 Tabelle di Gestione ====
^ Tabella ^ Descrizione ^
| AY_CASSA_VENDITE | Vendite registrate |
| AY_CASSA_VENDITE_ECCESSO | Vendite oltre stock |
| CASSA_STOCK | Giacenze per articolo |
| CASSA_TMP_STOCK_GRID_* | Tabelle temporanee |
\\
==== 7.2 Calcolo Giacenza ====
Giacenza Finale = Giacenza Iniziale - Quantità Venduta
Sell Out % = (Quantità Venduta / Quantità Iniziale) × 100
\\
==== 7.3 Supporto Multi-Magazzino ====
* Campo ''CODMAG'' in tutte le tabelle movimenti
* Parametro ''MODULE_MULTISHOP'' abilita gestione
* ''CURRENT_SHOP'' identifica magazzino corrente
\\
==== 7.4 Report Inventario ====
^ Report ^ Stored Procedure ^ Descrizione ^
| SELLOUT | PRC_CASSA_SELLOUT_V001 | Analisi sell-out |
| SALESREPORT | PRC_CASSA_SALESREPORT_V001 | Dettaglio vendite |
| DAILYDATA | PRC_CASSA_DAILYDATA_V001 | Corrispettivi |
----
===== 8. Anagrafica Articoli =====
==== 8.1 Struttura CASSA_ARTICOLO ====
^ Campo ^ Tipo ^ Descrizione ^
| ART_FIRMA | INT | Codice azienda |
| ART_EAN | NVARCHAR(20) | Codice a barre |
| ART_CODART | NVARCHAR(50) | Codice articolo |
| ART_NAME_DESC | NVARCHAR(MAX) | Descrizione |
| ART_COL_DESC | NVARCHAR(50) | Descrizione colore |
| ART_CODCOLOR | NVARCHAR(20) | Codice colore |
| ART_SIZE | NVARCHAR(20) | Taglia |
| ART_SCALA | INT | Scala taglie |
| ART_VARIANTE | INT | Codice variante |
| ART_VATPERCENT | DECIMAL | Aliquota IVA |
\\
==== 8.2 Gestione Attributi ====
^ Tabella ^ Descrizione ^
| CASSA_ART_ATTRIB | Attributi per articolo |
| CASSA_ART_ATTRIB_DESC | Descrizione attributi |
Campi dinamici: ''CAA_ATTR_001'', ''CAA_ATTR_002'', ... ''CAA_ATTR_999''
\\
==== 8.3 Sistema Listini ====
^ Tabella ^ Descrizione ^
| CASSA_LISTINO_NAME | Anagrafica listini |
| CASSA_LISTINO | Prezzi per articolo |
**Campi Listino:**
* ''CPLN_NRLIS'': Numero listino
* ''CPLN_SAISON'': Stagione
* ''CPLN_VALIDFROM/TO'': Date validità
* ''CPL_ENDUSERPRICE'': Prezzo al pubblico
* ''CPL_ORIGINALPRICE'': Prezzo originale
* ''CPL_PRICE'': Prezzo costo
\\
==== 8.4 Scale Taglie ====
^ Tabella ^ Descrizione ^
| GROESSENSKALA | Anagrafica scale |
| GROESSEN | Valori taglie |
**Esempio scala:**
Scala_Nr=1, Scala_Bezeichnung="EU Size"
├─ Index=1: "XS"
├─ Index=2: "S"
├─ Index=3: "M"
├─ Index=4: "L"
└─ Index=5: "XL"
\\
==== 8.5 Ricerca Articoli ====
Query base:
SELECT ART_NAME_DESC, ART_COL_DESC, ART_SIZE, ART_EAN, ART_CODART
FROM CASSA_ARTICOLO
WHERE ART_NAME_DESC LIKE '%' + @ARTNAME + '%'
AND ART_EAN LIKE '%' + @ARTEAN + '%'
AND ART_FIRMA = @FIRMA
ORDER BY ART_NAME_DESC, ART_COL_DESC, ART_SIZE
----
===== 9. Gestione Operatori e Permessi =====
==== 9.1 Tabelle Utenti ====
^ Tabella ^ Descrizione ^
| CASSA_USER | Anagrafica utenti |
| CASSA_USER_GROUP | Gruppi utenti |
| CASSA_USER_FUNCTIONGROUP | Funzioni per gruppo |
| CASSA_USER_OP | Log accessi |
\\
==== 9.2 Struttura CASSA_USER ====
^ Campo ^ Descrizione ^
| USR_FIRMA | Codice azienda |
| USR_CODE | Codice utente (PK) |
| USR_DESCR | Nome utente |
| USR_PWD | Password crittografata (TripleDES) |
| USR_GROUP_CODE | Gruppo appartenenza |
| USR_CHECK | Hash integrità (MD5) |
| USR_DISABLE | Flag disabilitazione |
\\
==== 9.3 Crittografia Password ====
* **Algoritmo**: TripleDES
* **Chiave**: MD5 di "castelletto28053"
* **Modalità**: ECB
* **Padding**: PKCS7
* **Output**: Base64
\\
==== 9.4 Verifica Permessi ====
bool hasPermission = Utility.FunctionForUser(userCode, functionCode);
Se utente non ha permesso, viene richiesto cambio operatore.
\\
==== 9.5 Funzioni Controllate ====
^ Funzione ^ Descrizione ^
| 0 | Accesso sistema |
| 39 | Gestione posizione/reso |
| 45 | Pagamento |
| 49 | Aggiunta articolo |
| 50 | Reso |
\\
==== 9.6 Tracciamento su Scontrino ====
* Campo ''Venditore'' in tabella SCONTRINO
* Trasferito a ''CSL_Seller'' in CASSA_SALES
* Report operatori: ''PRC_CASSA_USERREPORT_V001''
----
===== 10. Sistema di Reportistica =====
==== 10.1 Template Report (XML) ====
^ File ^ Tipo ^ Descrizione ^
| BILL.xml | Scontrino | Scontrino fiscale completo |
| BILL-NO-PRICES.xml | Scontrino | Scontrino senza prezzi |
| BILL_CLOSURE.xml | Chiusura | Riepilogo chiusura giornaliera |
| BILL_CLOSURE_DIFF.xml | Chiusura | Rapporto differenze |
| SALESREPORT.xml | Report | Dettaglio vendite |
| SELLOUT.xml | Report | Analisi sell-out |
| USERREPORT.xml | Report | Vendite per operatore |
| DAILYDATA.xml | Report | Registro corrispettivi |
| CASHPROTOCOL.xml | Report | Giornale di cassa |
| DDT_0.xml | Documento | Documento di trasporto |
| MIV_0.xml | Documento | Merce in visione |
| LABEL_STD.xml | Etichette | Etichette articoli |
| OPEN_DRAWER.xml | Cassa | Apertura cassetto |
\\
==== 10.2 Stored Procedure Report ====
^ SP ^ Report ^
| dbo.BILL_PRINT | Scontrino |
| dbo.BILL_CASH_CLOSURE_PRINT | Chiusura cassa |
| dbo.PRC_CASSA_SALESREPORT_V001 | Vendite |
| dbo.PRC_CASSA_SELLOUT_V001 | Sell-out |
| dbo.PRC_CASSA_USERREPORT_V001 | Operatori |
| dbo.PRC_CASSA_DAILYDATA_V001 | Corrispettivi |
| dbo.PRC_CASSA_PROTOCOL_V001 | Giornale |
\\
==== 10.3 Configurazione Stampanti ====
^ Tipo Documento ^ Stampante Consigliata ^
| Scontrini | Stampante termica POS |
| DDT/Documenti | Stampante laser/inkjet |
| Etichette | Stampante etichette (Zebra, ecc.) |
\\
==== 10.4 File Logo ====
D:\dev.net\CashData\CASHDATA\
├── BILLPic1.png # Logo scontrino
├── BILL_CLOSUREPic1.png # Logo chiusura
├── DDTPic1.jpg, DDTPic2.jpg # Logo DDT
└── MIVPic1.jpg, MIVPic2.jpg # Logo MIV
----
===== 11. Integrazione con ERP2 =====
Questa sezione descrive come configurare l'integrazione tra CASHDATA e il gestionale **ERP2** per la sincronizzazione bidirezionale di articoli, listini, chiusure cassa e DDT.
**Script di riferimento:** ''RELEASE\02 Integrazione con ERP2\''
> **Nota:** Le viste e stored procedure possono variare a seconda dell'installazione specifica del cliente. Gli script forniti sono template da adattare.
\\
==== 11.1 Panoramica ====
L'integrazione ERP2 permette di:
* **Import** da ERP: Caricare articoli e listini prezzi dal gestionale alla cassa
* **Export** verso ERP: Esportare automaticamente chiusure cassa, vendite, IVA e DDT
* Sincronizzare lo stato dei DDT tra i due sistemi
**Flusso bidirezionale:**
LINKED SERVER
│
┌────────────────────┼────────────────────┐
│ DB CASHDATA │ DB ERP2 │
│ │ │
│ ┌─── IMPORT ──────┤ │
│ │ AY_CARICA_DDT_ │ ARTICO, BARART │
│ │ DA_ERP │ LOTSER, LISRIG │
│ │ (SP su CASHDATA) │ IVA, MARCHE... │
│ │ │ │
│ │ Sinonimi ERP_*──┼──► Tabelle ERP │
│ └─────────────────┤ │
│ │ │
│ ┌─── EXPORT ──────┤ │
│ │ PRC_EXPORT_ERP │ AY_CASSA_* │
│ │ (SP su CASHDATA) │ EXT_ORDINI_* │
│ │ │ │
│ │ Sinonimi ERP_*──┼──► Tabelle ERP │
│ └─────────────────┤ │
└────────────────────┴────────────────────┘
\\
==== 11.2 Parametri di Configurazione ====
Parametri da configurare in ''CASSA_CONFIG_PARAMETER'' per abilitare l'integrazione:
^ Parametro ^ Sezione ^ Valore ^ Descrizione ^
| **EXPORT_ERP** | 10 | ''true'' | Abilita l'export verso ERP alla chiusura cassa |
| **ExportDataForTrasmission** | 10 | ''0'' | Modalita export: ''0'' = alla chiusura cassa, ''-1'' = manuale (mostra bottone), ''N'' = ogni N millisecondi |
| **ERP_CODMAG** | 20 | //(es. NEGCU)// | **Obbligatorio.** Codice magazzino nel sistema ERP. Usato anche come prefisso per chiavi DDT |
| **Invio_DDT_to_ERP** | 10 | ''0'' o ''1'' | ''1'' = esporta anche i DDT verso ERP (opzionale) |
| **ExportDataType** | 10 | ''0'' | Formato dati export: ''1'' = CSV, ''2'' = Excel, ''0'' = nessun file |
| **Carico_Ordini** | 10 | ''false'' | Abilita caricamento ordini da ERP |
\\
==== 11.3 Procedura di Installazione ====
Gli script si trovano in ''RELEASE\02 Integrazione con ERP2\'' e vanno eseguiti in ordine:
=== STEP 0: Creare il Linked Server (su database master) ===
**Script:** ''00_Creare linked server.txt''
Crea un linked server denominato ''ERPSERVER'' per connettere SQL Server di CASHDATA a quello del gestionale ERP2.
**Valori da personalizzare:**
^ Parametro ^ Valore di esempio ^ Descrizione ^
| ''@datasrc'' | ''SERVER\GESTERP'' | Nome/IP e istanza del SQL Server dove risiede il DB ERP2 |
| ''@rmtuser'' | ''sa'' | Utente SQL per accedere al DB ERP2 |
| ''@rmtpassword'' | ''########'' | Password dell'utente SQL remoto |
-- Esempio (da 00_Creare linked server.txt)
EXEC master.dbo.sp_addlinkedserver
@server = N'ERPSERVER',
@srvproduct = N'',
@provider = N'SQLNCLI',
@datasrc = N'SERVER\GESTERP' -- PERSONALIZZARE
EXEC master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'ERPSERVER',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'sa', -- PERSONALIZZARE
@rmtpassword = '########' -- PERSONALIZZARE
Le opzioni importanti impostate dallo script:
* ''data access = true'' (necessario per le query cross-server)
* ''connect timeout = 0'' e ''query timeout = 0'' (nessun timeout)
* ''use remote collation = true''
\\
=== STEP 1: Creare tabelle e viste nel DB ERP2 ===
**Script:** ''01_Tabelle&Viste da creare su db ERP.txt''
Eseguire sul **database del gestionale ERP2**. Lo script crea:
- **Login e utente** ''texdatacash'' con permessi di lettura e scrittura
- **Tabelle per ricevere i dati delle chiusure cassa:**
* ''AY_CASSA_ELENCO_CHIUSURE'' - Registro chiusure esportate
* ''AY_CASSA_CHIUSURE'' - Totali per metodo pagamento
* ''AY_CASSA_CHIUSURE_IVA'' - Ripartizione IVA per chiusura
* ''AY_CASSA_PAGAMENTI'' - Anagrafica metodi di pagamento
* ''AY_CASSA_VENDITE'' - Dettaglio vendite per articolo
* ''AY_CASSA_VENDITE_ECCESSO'' - Vendite oltre giacenza teorica
- **Tabelle per DDT** (se ''Invio_DDT_to_ERP = 1''):
* ''EXT_ORDINI_TOCOMPANY'' - Testate ordini/DDT
* ''EXT_ORDINI_DET_TOCOMPANY'' - Righe ordini/DDT
* ''EXT_ORDINI_TOCOMPANY_STOR'' - Storico DDT
- **Sinonimi** per accesso semplificato:
* ''ORDINI_DET_TOCOMPANY'' -> ''EXT_ORDINI_DET_TOCOMPANY''
* ''ORDINI_TOCOMPANY'' -> ''EXT_ORDINI_TOCOMPANY''
* ''ORDINI_TOCOMPANY_STOR'' -> ''EXT_ORDINI_TOCOMPANY_STOR''
- **Vista** ''V_AY_CASSA_ARTICOLI_LOTTI'' - Articoli con giacenze per lotto/magazzino
**Valori da personalizzare:**
^ Parametro ^ Valore di esempio ^ Descrizione ^
| Password ''texdatacash'' | ''qgt...'' (placeholder) | Impostare una password sicura |
| ''ALMG.ID IN (41, 42)'' nella vista | ID magazzini | Sostituire con gli ID magazzino corretti del gestionale |
\\
=== STEP 2: Creare sinonimi, viste e SP nel DB CASHDATA ===
**Script:** ''02_Da fare su DB CashData.txt''
Eseguire sul **database CASHDATA**. Lo script crea:
**a) Sinonimi verso le tabelle ERP (via linked server)**
Creare un sinonimo per ogni tabella ERP referenziata. Il pattern e':
CREATE SYNONYM [dbo].[ERP_ARTICO] FOR [ERPSERVER].[NOMEDB_ERP].[dbo].[ARTICO]
Sinonimi necessari (sostituire ''NOMEDB_ERP'' con il nome effettivo del database ERP2):
^ Sinonimo nel DB CASHDATA ^ Tabella nel DB ERP ^
| ''ERP_ARTICO'' | ''ARTICO'' |
| ''ERP_BARART'' | ''BARART'' |
| ''ERP_LOTSER'' | ''LOTSER'' |
| ''ERP_CLASSI'' | ''CLASSI'' |
| ''ERP_GRUPPI'' | ''GRUPPI'' |
| ''ERP_IVA'' | ''IVA'' |
| ''ERP_LISRIG'' | ''LISRIG'' |
| ''ERP_LISTES'' | ''LISTES'' |
| ''ERP_MARCHE'' | ''MARCHE'' |
| ''ERP_CATOMO'' | ''CATOMO'' |
| ''ERP_SCOCLI'' | ''SCOCLI'' |
| ''ERP_VALUTA'' | ''VALUTA'' |
| ''ERP_BAMTES'' | ''BAMTES'' |
| ''ERP_FATRIG'' | ''FATRIG'' |
| ''ERP_CASSA_CHIUSURE'' | ''AY_CASSA_CHIUSURE'' |
| ''ERP_CASSA_CHIUSURE_IVA'' | ''AY_CASSA_CHIUSURE_IVA'' |
| ''ERP_CASSA_ELENCO_CHIUSURE'' | ''AY_CASSA_ELENCO_CHIUSURE'' |
| ''ERP_CASSA_VENDITE'' | ''AY_CASSA_VENDITE'' |
| ''ORDINI_TOCOMPANY'' | ''EXT_ORDINI_TOCOMPANY'' (o sinonimo) |
| ''ORDINI_DET_TOCOMPANY'' | ''EXT_ORDINI_DET_TOCOMPANY'' (o sinonimo) |
| ''ORDINI_TOCOMPANY_STOR'' | ''EXT_ORDINI_TOCOMPANY_STOR'' (o sinonimo) |
**b) Vista ''V_ERP_ARTICOLO''** - Unisce articoli ERP con barcode, IVA, lotti e classificazione
**c) Vista ''V_ERP_ARTICOLO_PREZZI''** - Estende ''V_ERP_ARTICOLO'' aggiungendo prezzi da listino, marca e categoria (puo' variare per installazione)
**d) Stored Procedure ''AY_CARICA_DDT_DA_ERP''** - Importa articoli e aggiorna listini:
* Con parametro ''@LEGGILISTINI = 0'': importa nuovi articoli da ERP in ''CASSA_READ_DELNOTE'' e ''CASSA_READ_DELNOTE_ART_ATTRIB''
* Con parametro ''@LEGGILISTINI = 1'': aggiorna prezzi, marca e categoria per articoli esistenti, e registra nuove aliquote IVA
* Puo' essere invocata dal bottone "Carica da ERP" nella sezione Controllo dell'UI, oppure schedulata come SQL Server Job
**e) Stored Procedure ''PRC_EXPORT_ERP''** - Esporta chiusure cassa verso ERP:
* Esportazione incrementale basata su IDCHIUSURA
* Gestisce chiusure, vendite, IVA
* Se ''Invio_DDT_to_ERP = 1'': esporta anche DDT con stato 45 (confermato) -> 50 (trasmesso)
\\
==== 11.4 Checklist Integrazione ERP2 ====
=== Sul server SQL Server (master): ===
* Creare linked server ''ERPSERVER'' con ''00_Creare linked server.txt''
* Verificare connettivita con ''SELECT * FROM OPENQUERY(ERPSERVER, 'SELECT 1')''
=== Sul database ERP2: ===
* Creare login/utente ''texdatacash'' con permessi read/write
* Creare le 6 tabelle ''AY_CASSA_*''
* (Se DDT) Creare le 3 tabelle ''EXT_ORDINI_*'' e relativi sinonimi
* Creare/modificare la vista ''V_AY_CASSA_ARTICOLI_LOTTI'' con ID magazzini corretti
* Popolare ''AY_CASSA_PAGAMENTI'' con i codici pagamento corretti
=== Sul database CASHDATA: ===
* Creare tutti i sinonimi ''ERP_*'' verso le tabelle ERP (personalizzare nome DB)
* Creare la vista ''V_ERP_ARTICOLO''
* Creare la vista ''V_ERP_ARTICOLO_PREZZI'' (personalizzare per installazione)
* Creare/aggiornare la SP ''AY_CARICA_DDT_DA_ERP''
* Creare/aggiornare la SP ''PRC_EXPORT_ERP''
* Configurare parametro ''EXPORT_ERP = true'' in CASSA_CONFIG_PARAMETER
* Configurare parametro ''ExportDataForTrasmission = 0''
* Configurare parametro ''ERP_CODMAG'' con il codice magazzino corretto
* (Opzionale) Configurare ''Invio_DDT_to_ERP = 1'' per export DDT
* Verificare esistenza viste ''V_CASSA_CHIUSURE'' e ''V_CASSA_VENDITE_ARTICOLI'' (create dallo script ''01_DB_CREATION_PROCEDURE.sql'')
* Testare import articoli: ''EXEC AY_CARICA_DDT_DA_ERP @LEGGILISTINI = 0''
* Testare export chiusura: ''EXEC PRC_EXPORT_ERP''
\\
==== 11.5 Stati DDT ====
^ Stato ^ Descrizione ^ Origine ^
| 45 | Confermato | CASHDATA |
| 50 | Trasmesso | CASHDATA (dopo export PRC_EXPORT_ERP) |
| 70 | Importato | ERP (elaborazione OK) |
| 80 | Non importato | ERP (errore elaborazione) |
\\
==== 11.6 Troubleshooting Integrazione ERP ====
^ Errore ^ Causa ^ Soluzione ^
| "Parametro ERP_CODMAG non configurato" | Parametro mancante | Inserire ERP_CODMAG in CASSA_CONFIG_PARAMETER (sezione 20) |
| "Errore export dati vendite" | Errore generico SP | Verificare log SQL Server, controllare esistenza tabelle e sinonimi ERP |
| Linked server non raggiungibile | Rete o credenziali | Testare con ''SELECT * FROM OPENQUERY(ERPSERVER, 'SELECT 1')'' |
| Errore collation nei JOIN | Collation diversa tra DB | Le viste usano ''COLLATE Latin1_General_CI_AS'' per gestire le differenze |
| DDT non esportati | ''Invio_DDT_to_ERP = 0'' | Impostare parametro a ''1'' in CASSA_CONFIG_PARAMETER |
| Dati duplicati in ERP | Chiusure riesportate | Verificare IDCHIUSURA in ERP_CASSA_ELENCO_CHIUSURE |
| Articoli non importati | Barcode gia' presente in CASSA_READ_DELNOTE_PROTOCOL | L'import e' incrementale: salta articoli gia' importati |
| Bottone "Esporta Dati" non visibile | ''ExportDataForTrasmission != -1'' | Per il bottone manuale, impostare ''ExportDataForTrasmission = -1'' |
----
===== 11b. Integrazione con Bilancia =====
Questa sezione descrive come configurare l'export del listino prezzi verso bilance elettroniche collegate al sistema.
**Script di riferimento:** ''RELEASE\03 Integrazione con Bilancia\''
\\
==== 11b.1 Panoramica ====
L'integrazione bilancia permette di:
* Esportare il listino articoli verso bilance elettroniche
* Supportare il formato **BENCHCOMM** (standard per bilance da banco)
* Generare file in formato testo a posizione fissa (100 caratteri per riga)
**Flusso di esportazione:**
UI: Bottone "Esporta Listino Bilance" (sezione Controllo)
│
▼
FunctionsForm.cs
│ (verifica Config.SCALE_EXPORT_PROTOCOL)
▼
ScaleExport_Benchcomm.EsportaListinoBilance()
│
├──► EXEC AY_EXPORT_FILE_BILANCIA @FIRMA, @BANCO, @SOLO_MODIFICATI
│ (SP da creare nel DB CASHDATA)
│
└──► Genera file IM00VARP.txt nella directory EXPORT_BILANCIA_DIR
(Formato BENCHCOMM, encoding ISO-8859-1)
\\
==== 11b.2 Parametri di Configurazione ====
Parametri da configurare in ''CASSA_CONFIG_PARAMETER'':
^ Parametro ^ Sezione ^ Valore ^ Descrizione ^
| **SCALE_EXPORT_ENABLED** | 10 | ''true'' | Abilita il bottone "Esporta Listino Bilance" nella sezione Controllo dell'UI |
| **SCALE_EXPORT_PROTOCOL** | 10 | ''BENCHCOMM'' | Formato/protocollo bilancia. Attualmente supportato: ''BENCHCOMM'' |
| **EXPORT_BILANCIA_DIR** | 10 | //(es. C:\Export\Bilance)// | Directory dove salvare i file di export. Default: ''C:\Export\Bilance'' |
\\
==== 11b.3 Procedura di Installazione ====
=== STEP 1: Configurare i parametri ===
Inserire/aggiornare i 3 parametri nella tabella ''CASSA_CONFIG_PARAMETER'':
-- Abilitare export bilancia
UPDATE CASSA_CONFIG_PARAMETER SET CP_VALUE = 'true'
WHERE CP_NAME = 'SCALE_EXPORT_ENABLED' AND CP_SECTION = 10
-- Impostare protocollo BENCHCOMM
UPDATE CASSA_CONFIG_PARAMETER SET CP_VALUE = 'BENCHCOMM'
WHERE CP_NAME = 'SCALE_EXPORT_PROTOCOL' AND CP_SECTION = 10
-- Impostare directory di export
UPDATE CASSA_CONFIG_PARAMETER SET CP_VALUE = 'C:\Export\Bilance'
WHERE CP_NAME = 'EXPORT_BILANCIA_DIR' AND CP_SECTION = 10
\\
=== STEP 2: Creare la Stored Procedure nel DB CASHDATA ===
**Script:** ''03 Integrazione con Bilancia\00_Creare SP per estrarre dati da inviare alla bilancia.txt''
> **Nota:** Lo script nella cartella contiene attualmente la SP ''PRC_EXPORT_ERP'' (export chiusure). La SP effettiva per la bilancia e' ''AY_EXPORT_FILE_BILANCIA'', che va creata in base alle specifiche della bilancia utilizzata.
La SP ''AY_EXPORT_FILE_BILANCIA'' deve accettare questi parametri:
CREATE PROCEDURE [dbo].[AY_EXPORT_FILE_BILANCIA]
@FIRMA INT,
@BANCO INT,
@SOLO_MODIFICATI BIT
AS
BEGIN
-- Restituisce un DataTable con i campi necessari al formato BENCHCOMM:
-- Banco, CodicePLU, AliquotaIVA, Prezzo, CodiceEAN,
-- DescrizioneRiga1, DescrizioneRiga2, GiorniConservazione, Tara, ecc.
-- L'implementazione varia in base alla bilancia
END
\\
=== STEP 3: Creare la directory di export ===
Creare la cartella specificata nel parametro ''EXPORT_BILANCIA_DIR'' e verificare che l'utente Windows che esegue CASHDATA abbia permessi di scrittura.
\\
=== STEP 4: Configurare la bilancia ===
Configurare la bilancia per leggere il file ''IM00VARP.txt'' dalla directory di export. Il formato e':
* **Protocollo:** BENCHCOMM
* **Encoding:** ISO-8859-1
* **Lunghezza riga:** 100 caratteri + CR+LF
* **Campi a posizione fissa** (pos 1-99 con dati per banco, PLU, IVA, prezzo, EAN, descrizione, ecc.)
\\
==== 11b.4 Checklist Integrazione Bilancia ====
* Configurare parametro ''SCALE_EXPORT_ENABLED = true''
* Configurare parametro ''SCALE_EXPORT_PROTOCOL = BENCHCOMM''
* Configurare parametro ''EXPORT_BILANCIA_DIR'' con il percorso corretto
* Creare la SP ''AY_EXPORT_FILE_BILANCIA'' nel DB CASHDATA (personalizzare per tipo bilancia)
* Creare la directory di export con permessi di scrittura
* Configurare la bilancia per leggere da ''EXPORT_BILANCIA_DIR\IM00VARP.txt''
* Testare l'export dal bottone "Esporta Listino Bilance" nella sezione Controllo
* Verificare che il file generato sia corretto (100 char/riga, encoding ISO-8859-1)
\\
==== 11b.5 Troubleshooting Integrazione Bilancia ====
^ Errore ^ Causa ^ Soluzione ^
| Bottone "Esporta Listino Bilance" non visibile | ''SCALE_EXPORT_ENABLED != true'' | Impostare parametro a ''true'' in CASSA_CONFIG_PARAMETER |
| "Formato bilancia 'X' non riconosciuto" | Protocollo non supportato | Verificare che ''SCALE_EXPORT_PROTOCOL = BENCHCOMM'' (unico formato supportato) |
| Errore durante export | SP ''AY_EXPORT_FILE_BILANCIA'' mancante | Creare la SP nel database CASHDATA |
| File non generato | Directory non esistente o senza permessi | Verificare che ''EXPORT_BILANCIA_DIR'' esista e sia scrivibile |
| Bilancia non legge i dati | Formato file errato | Verificare encoding ISO-8859-1 e lunghezza righe (100 + CRLF) |
----
===== 12. Schema Database =====
==== 12.1 Tabelle Principali ====
=== Vendite ===
CASSA_SALES # Vendite registrate
CASSA_SALES_PAYMODE # Dettaglio pagamenti
CASSA_DAILY_CLOSURE # Chiusure giornaliere
SCONTRINO # Carrello temporaneo
\\
=== Articoli ===
CASSA_ARTICOLO # Anagrafica articoli
CASSA_LISTINO # Prezzi
CASSA_LISTINO_NAME # Anagrafica listini
CASSA_ART_ATTRIB # Attributi articoli
CASSA_STOCK # Giacenze
\\
=== Utenti ===
CASSA_USER # Utenti
CASSA_USER_GROUP # Gruppi
CASSA_USER_FUNCTIONGROUP # Funzioni
CASSA_USER_OP # Log accessi
\\
=== Configurazione ===
CASSA_CONFIG_PARAMETER # Parametri configurazione
CASSA_CONFIG_SECTION # Sezioni configurazione
CASSA_PARAMETER_PC # Parametri per PC
\\
=== Documenti ===
CASSA_DDT # Documenti di trasporto
CASSA_MIV # Merce in visione
\\
==== 12.2 Relazioni Chiave ====
CASSA_USER.USR_GROUP_CODE → CASSA_USER_GROUP.UGR_CODE
CASSA_SALES.CSL_FIRMA → Config.FIRMA
CASSA_ARTICOLO.ART_EAN → CASSA_LISTINO.CPL_BARCODE
CASSA_DAILY_CLOSURE.CDC_CLOSURE_ID → CASSA_SALES.CSL_CLOSURE_ID
----
===== 13. Troubleshooting =====
==== 13.1 Errori Comuni di Connessione ====
^ Errore ^ Causa ^ Soluzione ^
| "Errore connessione DB" | Server non raggiungibile | Verificare IP/nome server in CashData.xml |
| "Login failed" | Credenziali errate | Verificare username/password in CashData.xml |
| "Database not found" | DB non esiste | Creare database ed eseguire script FASE 1-2 |
\\
==== 13.2 Errori di Prima Installazione ====
Questi errori si verificano tipicamente al primo avvio dopo una nuova installazione. La sequenza di avvio dell'app (''HomeLogic.cs'') verifica molti parametri e tabelle in ordine.
=== Flusso di avvio (ordine di verifica) ===
1. BackupAndVerifyDataBase() -- Solo in Release, richiede PCisSqlServer
2. ReadConfigParameter("LanguageCode")
3. ReadConfigParameter("INSTALLFOLDER") -- Prima installazione se vuoto
4. CheckLic() -- Verifica licenza
5. ReadDefaultPrinter() -- Verifica stampante
6. ReadParameter("HOMEMENU_ENABLED")
7. PulisciScontrino() -- Usa CCO_CASH_NR su CASSA_COUPON
8. LoadParametri() -- Carica tutti i getParValueByKey()
9. LoadScontrinoDefaultsValues() -- Contatori (NEW_DAYLY_CLOSURE, RECEIPT_COUNTER_PWD, ecc.)
10. Login() -- Richiede utenti e gruppi
\\
=== Tabella errori e soluzioni ===
^ Errore ^ Causa Radice ^ Soluzione ^
| **"Errore lettura parametro: INSTALLFOLDER"** | Parametro mancante in CASSA_CONFIG_PARAMETER sezione 30 | Eseguire ''03_FIX_PARAMETRI_MANCANTI.sql'' oppure verificare che ''02_DB_CREATION_TABLES.sql'' sia aggiornato |
| **"First installation procedure invalid. Contact Software House !!!"** | I campi LIC_SOSerial, LIC_Volume, LIC_ACTIVATE in CASSA_CONFIG_PARAMETER (sezione 30) contengono valori template non vuoti, ma il sistema rileva una prima installazione | ''UPDATE CASSA_CONFIG_PARAMETER SET CP_VALUE = '''' WHERE CP_NAME IN ('LIC_SOSerial', 'LIC_Volume', 'LIC_ACTIVATE') AND CP_SECTION = 30'' |
| **"Autorizzazione CREATE DATABASE negata" / "Errore durante creazione backup database"** | ''BackupAndVerifyDataBase()'' esegue ''BACKUP DATABASE'' in modalita Release, ma l'utente SQL non ha permessi BACKUP | Impostare ''PCisSqlServer = false'' in CashData.xml. Impostare ''true'' solo se l'utente SQL ha permessi di backup |
| **"La stampante non e' installata" (loop infinito)** | ''CASSA_DOC_PRINTER.DPR_DEFAULTPRINTER'' e' NULL per tutti i tipi documento. Il codice in ''Utility.cs:1899'' ha un bug nel check ''IsDBNull'' | ''UPDATE CASSA_DOC_PRINTER SET DPR_DEFAULTPRINTER = 'Microsoft Print to PDF''' (gia' incluso nello script di creazione aggiornato) |
| **"Nessun gruppo configurato nel sistema"** | Tabelle ''CASSA_USER_GROUP'' e ''CASSA_USER'' vuote | Gia' incluso nello script di creazione aggiornato. Per DB esistenti: inserire manualmente gruppi e utenti (vedi sezione 3.1 FASE 6) |
| **"Errore lettura parametro: HOMEMENU_ENABLED"** | Parametro mancante in tabella ''CASSA_PARAMETER'' (non CONFIG_PARAMETER!) | ''INSERT INTO CASSA_PARAMETER (CP_FIRMA, CP_NAME, CP_VALUE, CP_TEXT) VALUES (10, N'HOMEMENU_ENABLED', N'0', N'Home menu enabled')'' |
| **"Il nome colonna CCO_CASH_NR"** a ''HomeLogic.cs:1497'' | Colonna ''CCO_CASH_NR'' mancante nella tabella ''CASSA_COUPON'' | ''ALTER TABLE [CASSA_COUPON] ADD [CCO_CASH_NR] [int] NULL'' (gia' incluso nello script di creazione aggiornato) |
| **"Errore lettura parametro: NEW_DAYLY_CLOSURE"** | Parametro letto con ''ReadParameter("NEW_DAYLY_CLOSURE", 0, Config.CASHNUMBER)'' quindi va in ''CASSA_PARAMETER_PC'' (non CASSA_PARAMETER!) | ''INSERT INTO CASSA_PARAMETER_PC (CP_FIRMA, CP_NAME, CP_VALUE, CP_TEXT, CASH_NR) VALUES (10, N'NEW_DAYLY_CLOSURE', N'1', N'Daily closure counter', 1)'' |
| **"Errore lettura parametro: RECEIPT_COUNTER_PWD"** | Parametro letto con ''ReadParameter("RECEIPT_COUNTER_PWD", 0)'' dalla tabella ''CASSA_PARAMETER''. Il valore deve essere **non vuoto** | ''INSERT INTO CASSA_PARAMETER (CP_FIRMA, CP_NAME, CP_VALUE, CP_TEXT) VALUES (10, N'RECEIPT_COUNTER_PWD', N'tex01', N'Password reset contatore')'' |
| **"Errore lettura parametro: X"** (generico) | Parametro X mancante. Individuare la tabella corretta verificando il codice sorgente | Se ''ReadParameter(name, 0)'' -> ''CASSA_PARAMETER''. Se ''ReadParameter(name, 0, Config.CASHNUMBER)'' -> ''CASSA_PARAMETER_PC''. Se ''getParValueByKey(name)'' -> ''CASSA_CONFIG_PARAMETER'' |
\\
==== 13.3 Come Distinguere le Tabelle dei Parametri ====
Quando si incontra un errore "Errore lettura parametro", e' fondamentale capire **quale tabella** deve contenere il parametro:
^ Metodo di lettura nel codice ^ Tabella DB ^ Identificato da ^
| ''getParValueByKey("NOME")'' | ''CASSA_CONFIG_PARAMETER'' | Errore da ''Utility.cs:3808'' |
| ''ReadConfigParameter("NOME", releasedfor, section)'' | ''CASSA_CONFIG_PARAMETER'' | Errore da ''HomeLogic.cs:734'' |
| ''ReadParameter("NOME", 0)'' (2 argomenti) | ''CASSA_PARAMETER'' | cash_nr=0 (default) |
| ''ReadParameter("NOME", 0, Config.CASHNUMBER)'' (3 argomenti) | ''CASSA_PARAMETER_PC'' | cash_nr != 0 |
\\
==== 13.4 Errori di Configurazione ====
^ Errore ^ Causa ^ Soluzione ^
| "Parametro mancante: X" | Parametro non configurato | Identificare la tabella corretta (vedi 13.3) e inserire il parametro |
| "ReleaseFor non valido" | PC non registrato | Configurare ReleaseFor in CashData.xml |
| Parametri con valore vuoto | Alcuni parametri (es. RECEIPT_COUNTER_PWD) richiedono un valore non vuoto | Verificare che CP_VALUE non sia vuoto per i parametri che lo richiedono |
\\
==== 13.5 Errori Operativi ====
^ Errore ^ Causa ^ Soluzione ^
| "Differenza ≠ 0" | Conteggio errato | Verificare contanti inseriti |
| "Pagamenti non verificati" | Manca spunta | Completare verifica pagamenti |
| "Nuovo fondo negativo" | Prelievo eccessivo | Ridurre importo prelievo |
\\
==== 13.6 Log e Diagnostica ====
* **Log accessi**: Tabella ''CASSA_USER_OP''
* **Log operazioni**: Consultare con report ''CASHPROTOCOL''
* **Errori applicazione**: Verificare file di log in cartella installazione
* **Debug SQL**: Controllare i parametri direttamente nel DB con:
-- Verificare parametri di configurazione
SELECT * FROM CASSA_CONFIG_PARAMETER WHERE CP_NAME = 'NOME_PARAMETRO'
-- Verificare parametri runtime
SELECT * FROM CASSA_PARAMETER WHERE CP_NAME = 'NOME_PARAMETRO'
-- Verificare parametri per-PC
SELECT * FROM CASSA_PARAMETER_PC WHERE CP_NAME = 'NOME_PARAMETRO'
----
===== Appendice A: Enumerazioni Principali =====
==== A.1 Customer (Tipi Cliente) ====
public enum Customer {
First_Installation_ITALIAN = 0,
First_Installation_GERMAN = 1,
Develop = 2,
Demo_Server = 3,
// ... altri 80+ clienti
}
\\
==== A.2 ConfigSection ====
public enum ConfigSection {
SHOP_10 = 10, // Configurazione negozio
FUNCTION_20 = 20, // Configurazione funzioni
CASH_30 = 30 // Configurazione cassa
}
\\
==== A.3 ECR_Type_Code (Tipi Registratore) ====
public enum ECR_Type_Code {
Olivetti_Nettuna_300,
// altri tipi supportati
}
\\
==== A.4 DocPrinter (Tipi Documento) ====
public enum DocPrinter {
SCONTRINO = 1,
ETICHETTE = 2,
DDT = 3,
MIV = 4,
DIFF_CASSA = 5,
GIORNALE = 6
}
----
===== Appendice B: File Importanti =====
==== B.1 Sorgenti Principali ====
^ File ^ Righe ^ Descrizione ^
| Config.cs | ~1500 | Configurazione globale |
| Utility.cs | ~7500 | Funzioni utility |
| Home.cs | ~1000 | Form principale |
| HomeLogic.cs | ~3000 | Logica form principale |
| Form1.cs | ~2700 | Form vendite |
| PAY.cs | ~2500 | Dialog pagamento |
| CashChiusura.cs | ~800 | Form chiusura cassa + validazione DDT per ERP |
| UpdateUtility.cs | ~1600 | Importazione dati |
| FunctionsForm.cs | ~1800 | Sezione Controllo (export ERP, bilancia) |
| ScaleExport_Benchcomm.cs | ~100 | Export listino bilance formato BENCHCOMM |
\\
==== B.2 Script Database - Installazione Base ====
^ File ^ Cartella ^ Descrizione ^
| 00_DB_CREATION_CREATEDB.sql | RELEASE\01\ | Creazione database |
| 01_DB_CREATION_PROCEDURE.sql | RELEASE\01\ | Stored procedures e viste (V_CASSA_CHIUSURE, V_CASSA_VENDITE_ARTICOLI) |
| 02_DB_CREATION_TABLES.sql | RELEASE\01\ | Tabelle, dati iniziali, utenti, gruppi, stampanti |
| 03_DB_CREATION_WITH_PROMO.sql | RELEASE\01\ | Dati promozioni |
| 02 Reimposta dati.sql | Cose da fare...\ | Configurazione iniziale (personalizzare prima dell'esecuzione) |
| 03_FIX_PARAMETRI_MANCANTI.sql | Cose da fare...\ | Fix parametri mancanti per DB esistenti |
\\
==== B.3 Script Integrazione ERP2 ====
^ File ^ Cartella ^ Target DB ^ Descrizione ^
| 00_Creare linked server.txt | RELEASE\02...\ | master | Linked server verso DB ERP2 |
| 01_Tabelle&Viste da creare su db ERP.txt | RELEASE\02...\ | DB ERP | Tabelle AY_CASSA_*, EXT_ORDINI_*, vista lotti, login |
| 02_Da fare su DB CashData.txt | RELEASE\02...\ | DB CASHDATA | Sinonimi ERP_*, viste V_ERP_*, SP AY_CARICA_DDT_DA_ERP, PRC_EXPORT_ERP |
\\
==== B.4 Script Integrazione Bilancia ====
^ File ^ Cartella ^ Target DB ^ Descrizione ^
| 00_Creare SP per estrarre dati.txt | RELEASE\03...\ | DB CASHDATA | SP AY_EXPORT_FILE_BILANCIA (template, personalizzare per tipo bilancia) |
----
//Documento generato automaticamente dall'analisi del codice sorgente CASHDATA.//\\
//Ultimo aggiornamento: Febbraio 2026//\\
//Versione: 1.2 - Aggiunta integrazione ERP2 e bilancia//