ImportCashData.exe /s [operazione] [parametro]
\\
**Parametri riga di comando:**
^ Parametro ^ Obbligatorio ^ Descrizione ^
| ''/s'' | Sì | Flag di avvio (start) |
| ''username'' | Sì | Credenziali utente ERP |
| ''password'' | Sì | Password utente ERP |
| ''/CONTRATTI'' | No | Attiva modalità importazione contratti |
| ''/SCADENZE'' | No | Attiva modalità riscrittura scadenze |
| ''[ID]'' | Solo con /SCADENZE | ID del contratto da elaborare |
\\
**Esempi:**
:: Importazione corrispettivi (modalità default)
ImportCashData.exe /s admin password123
:: Importazione contratti
ImportCashData.exe /s admin password123 /CONTRATTI
:: Riscrittura scadenze contratto #456
ImportCashData.exe /s admin password123 /SCADENZE 456
\\
\\
==== Fase di Inizializzazione ====
Il processo di inizializzazione segue questi passaggi:
- **Parsing argomenti** - Verifica presenza /s, username, password
- **Creazione istanza Engine** - Inizializzazione sistema di logging (file: ''importCashData.log'')
- **Caricamento configurazione** - Lettura file ''DBCFG_cassa.xml'' e connessione a IERPCFG_A03
- **Connessione all'impresa** - Query ID azienda, connessione ERP tramite WrapperErp_5
\\
\\
==== Modalità 1: Importazione Corrispettivi (Default) ====
Questa è la modalità principale che elabora le chiusure di cassa e genera i relativi movimenti contabili e di magazzino.
\\
=== Flusso di elaborazione ===
**1. Recupero Magazzini**\\
SELECT DISTINCT CODMAG FROM AY_CASSA_CHIUSURE
\\
**2. Per ogni Magazzino**
* Recupero chiusure in stato 0 (da elaborare)
* Recupero dati pagamenti associati
\\
**3. Per ogni Chiusura**
* **a) StartTransaction()** - Avvio transazione
* **b) pScriviCorrispettivo()** - Creazione movimento contabile
* Recupero codici conto (CODCONCORR)
* Recupero conto cassa (CODCONCASSACORR)
* Creazione movimento MOVCON tipo 'R'
* Gestione ripartizione IVA
* Generazione movimento contabile
* **c) pScriviIncasso()** - Solo se conto pagamento diverso da cassa predefinita
* Trasferimento da conto pagamento a conto cassa predefinito
* Creazione movimento MOVCON tipo 'C'
* **d) GeneraMovimentoMagazzino()** - Per ogni vendita (AY_CASSA_VENDITE)
* Creazione movimento magazzino
* Scarico quantità da lotti
* Se quantità > disponibile: INSERT in AY_CASSA_VENDITE_ECCESSO
\\
**4. Esito elaborazione**
^ Successo ^ Errore ^
| Commit() | RollBack() |
| UPDATE stato = 2 | Invio mail con errori |
| Invio mail successo | BREAK dal ciclo |
\\
\\
==== Modalità 2: Importazione Contratti (/CONTRATTI) ====
=== Flusso di elaborazione ===
**1. Recupero Contratti Attivi**\\
SELECT * FROM V_CONMV_CONTRATTI_IMPORT WHERE CM_STATO = 'A'
\\
**2. Per ogni Contratto**
* **a) Recupero scadenze pagamento** da CONTRATTI_WEB_SCADENZE
* **b) Esecuzione PRG_IMPORTA_CONTRATTI_WEB**
* Importazione nel calcolo premi
* Valore ritorno atteso: 1 (righe inserite)
* **c) Se tipo pagamento > 0:**
* Calcolo importo (rate × num_rate)
* pScriviPNContratto() - Creazione movimento contabile
* Esecuzione AY_GENERA_SCAD_CONTRATTO
* **d) Se CM_SWICHIUDISCAD = true:**
* pScriviPNChiusuraScad() - Chiusura scadenze esistenti
* Esecuzione EXSP_PARTITE_CONTRATTI_nuovi
\\
**3. Invio Email Riepilogativa** - "Importazione Contratti WEB"
\\
\\
==== Modalità 3: Riscrittura Scadenze (/SCADENZE) ====
=== Flusso di elaborazione ===
**1. Recupero Contratto**\\
SELECT * FROM contratti_Web WHERE CM_KEY = @ID
\\
**2. Se contratto trovato e CM_SWICHIUDISCAD = true:**
* Recupero scadenze da CONTRATTI_WEB_SCADENZE
* pScriviPNChiusuraScad() - Ricreazione movimenti di chiusura
* Esecuzione EXSP_PARTITE_CONTRATTI_nuovi - Riconciliazione pagamenti/fatture
\\
\\
===== Parametri di Configurazione =====
==== File App.config - AppSettings ====
=== Codici Contabili ===
^ Chiave ^ Esempio ^ Descrizione ^
| **CODCONCORR** | ''500400005'' | Codice conto contabile per i corrispettivi |
| **CODCONCASSACORR** | ''100110005'' | Codice conto cassa per i corrispettivi |
| **CODCAU** | ''CNC'' | Codice causale contabile |
| **CODCAUMOV** | ''VENN'' | Codice causale movimenti di magazzino |
| **CODIVACORR** | ''22'' | Codice IVA per i corrispettivi |
\\
=== Parametri SMTP ===
^ Chiave ^ Esempio ^ Descrizione ^
| **smtp_Server** | ''smtp.gmail.com'' | Server SMTP per invio email |
| **smtp_Port** | ''587'' | Porta SMTP |
| **smtp_User** | ''corrispettiving@gmail.com'' | Utente SMTP (mittente) |
| **smtp_Password** | ''[app_password]'' | Password SMTP (app password) |
| **smtp_UseSSL** | ''1'' | Abilita TLS/SSL (1=sì, 0=no) |
| **smtp_UseImplicitSSL** | ''0'' | SSL implicito (1=sì, 0=no) |
| **smtp_TimeOut** | ''0'' | Timeout connessione (0=default) |
\\
=== Destinatari Email ===
^ Chiave ^ Descrizione ^
| **DestMail** | Destinatario principale per notifiche corrispettivi |
| **DestMailCC** | Destinatario in copia (opzionale) |
| **DestMailContratti** | Destinatario per notifiche importazione contratti |
\\
=== Connection String ===
\\
=== Parametri Aggiuntivi ===
^ Chiave ^ Descrizione ^
| **pathDllErp** | Percorso della DLL wrapper ERP (es. ''%%\\srvayerp\GEST\SAMW\Sam98ext.dll%%'') |
\\
\\
===== Tabelle e Viste Coinvolte =====
==== Tabelle Principali ====
^ Tabella ^ Descrizione ^ Operazioni ^
| **AY_CASSA_ELENCO_CHIUSURE** | Elenco riepilogativo delle chiusure cassa | SELECT, UPDATE (stato) |
| **AY_CASSA_CHIUSURE** | Dettaglio delle chiusure cassa | SELECT |
| **AY_CASSA_PAGAMENTI** | Metodi di pagamento configurati | SELECT |
| **AY_CASSA_VENDITE** | Dettaglio vendite per chiusura | SELECT |
| **AY_CASSA_ARTICOLI_LOTTI** | Informazioni sui lotti degli articoli | SELECT |
| **AY_CASSA_CHIUSURE_IVA** | Ripartizione IVA per chiusura | SELECT |
| **AY_CASSA_VENDITE_ECCESSO** | Vendite con quantità eccedente la disponibilità | INSERT |
| **CONTRATTI_WEB** | Anagrafica contratti web | SELECT |
| **CONTRATTI_WEB_SCADENZE** | Scadenze di pagamento contratti | SELECT |
| **MOVCON** | Movimenti contabili (via ERP wrapper) | INSERT |
\\
==== Viste ====
^ Vista ^ Descrizione ^
| **V_CONMV_CONTRATTI_IMPORT** | Contratti attivi da importare (filtro CM_STATO='A') |
| **V_AY_CASSA_ARTICOLI_LOTTI** | Disponibilità lotti per articoli |
\\
==== Stored Procedures ====
^ Procedura ^ Parametri ^ Descrizione ^
| **PRG_IMPORTA_CONTRATTI_WEB** | Dati contratto | Importa contratto nel calcolo premi. Ritorna il numero di righe inserite (atteso: 1) |
| **AY_GENERA_SCAD_CONTRATTO** | ''@RIFCON'', ''@PARIDMOVCON'' | Genera le scadenze di pagamento per un contratto |
| **EXSP_PARTITE_CONTRATTI_nuovi** | ID movimento | Riconcilia pagamenti contratti con fatture |
\\
==== Schema Relazioni Principali ====
AY_CASSA_ELENCO_CHIUSURE (1) ──────► (N) AY_CASSA_CHIUSURE
│ - IDCHIUSURA (PK) │ - IDCHIUSURA (FK)
│ - CODMAG │ - VALCHIUSURA
│ - STATO │ - CODPAG
│ - DATCHIU │
│ │
│ ▼
│ AY_CASSA_VENDITE (N)
│ │ - IDCHIUSURA (FK)
│ │ - CODART
└─► AY_CASSA_PAGAMENTI │ - QUANTITA
│ - CODPAG │
│ - CODCON ▼
│ - CODCAUINC AY_CASSA_ARTICOLI_LOTTI
│ - CODART
│ - CODLOTTO
│ - DISPONIBILITA
CONTRATTI_WEB (1) ──────────────► (N) CONTRATTI_WEB_SCADENZE
│ - CM_KEY (PK) │ - CMCS_RIFCON (FK)
│ - CM_STATO │ - CMCS_NUMDOC
│ - CM_IMPRATA │ - CMCS_DATDOC
│ - CM_NUMRATE │ - CMCS_IMPORTO
│ - CM_RIFTIPOPAG
│ - CM_SWICHIUDISCAD
\\
==== Stati Chiusura Cassa ====
^ Stato ^ Descrizione ^
| **0** | Da elaborare |
| **2** | Elaborato con successo |
\\
\\
===== Gestione degli Errori =====
==== Livelli di Severità ====
Il sistema utilizza la classe ''Messaggi'' per la gestione dei log con i seguenti livelli:
^ Tipo ^ Livello ^ Descrizione ^
| **0** | Info | Messaggi informativi/diagnostici |
| **1** | Warning | Avvertimenti non bloccanti |
| **2** | Error | Errori che richiedono attenzione |
| **3** | Critical | Errori critici che bloccano l'elaborazione |
\\
==== File di Log ====
* **Percorso:** ''{AppPath}\importCashData.log''
* **Formato:** Timestamp + messaggio
* **Nota:** Non è presente rotazione automatica dei log
\\
==== Scenari di Errore Gestiti ====
=== 1. Errori di Connessione ===
^ Causa ^ Azione ^ Recovery ^
| Server non raggiungibile | Log errore + terminazione | Verificare configurazione rete |
| Credenziali errate | Log errore + terminazione | Verificare username/password |
\\
=== 2. Errori di Validazione ===
^ Errore ^ Causa ^ Gestione ^
| Codice conto non trovato | ''GetID'' ritorna -1 | Log errore, skip operazione |
| Causale non valida | Codice causale inesistente | Log errore, skip operazione |
| Metodo pagamento non trovato | CODPAG non in AY_CASSA_PAGAMENTI | Log warning, usa default |
\\
=== 3. Errori Transazionali ===
try {
pEngI24.StartTransaction()
// Operazioni contabili e di magazzino
if (successo) {
pEngI24.Commit()
// UPDATE stato = 2
}
} catch {
pEngI24.RollBack()
InvioMail(esito: false, dettaglio errori)
}
\\
=== 4. Errori Stored Procedure ===
^ Procedura ^ Valore Ritorno Errore ^ Gestione ^
| PRG_IMPORTA_CONTRATTI_WEB | ≠ 1 | Log errore, continua con prossimo contratto |
| AY_GENERA_SCAD_CONTRATTO | < 0 | Rollback movimento, log errore |
| EXSP_PARTITE_CONTRATTI_nuovi | < 0 | Log errore |
\\
=== 5. Gestione Quantità Insufficiente ===
Quando la quantità venduta supera la disponibilità a magazzino:
-- Inserimento automatico dell'eccesso
INSERT INTO AY_CASSA_VENDITE_ECCESSO
(CODART, QUANTITA_ECCESSO, IDCHIUSURA, ...)
VALUES
(@CodArt, @QtaEccesso, @IdChiusura, ...)
\\
==== Meccanismo di Recovery ====
- **Transazioni atomiche:** Ogni chiusura è elaborata in una transazione separata
- **Idempotenza:** Lo stato = 2 previene rielaborazioni
- **Isolamento per magazzino:** Errori in un magazzino non bloccano gli altri
- **Notifica immediata:** Email inviata al primo errore critico
\\
\\
===== Notifiche Email =====
==== Configurazione SMTP ====
Server: smtp.gmail.com
Porta: 587
Sicurezza: TLS/SSL abilitato
Mittente: Configurato in smtp_User
\\
==== Logica Destinatari ====
^ Funzione ^ Destinatario (TO) ^ Copia (CC) ^
| Corrispettivi | AppSettings["DestMail"] | AppSettings["DestMailCC"] |
| Contratti | AppSettings["DestMailContratti"] | AppSettings["DestMailCC"] |
\\
\\
==== Email di Successo ====
=== Quando viene inviata ===
* Al completamento di ogni chiusura cassa elaborata correttamente
* Al termine dell'importazione contratti (se senza errori)
\\
=== Formato Email Successo - Corrispettivi ===
^ Campo ^ Valore ^
| **Da** | corrispettiving@gmail.com |
| **A** | [DestMail] |
| **CC** | [DestMailCC] (se configurato) |
| **Oggetto** | Importazione Corrispettivo in Contabilità : n° {IDCHIUSURA} del {DATA} per Negozio {CODMAG} |
| **Corpo** | Importazione Corrispettivo Avvenuta Correttamente |
\\
=== Formato Email Successo - Contratti ===
^ Campo ^ Valore ^
| **Da** | corrispettiving@gmail.com |
| **A** | [DestMailContratti] |
| **CC** | [DestMailCC] (se configurato) |
| **Oggetto** | Importazione Contratti WEB |
| **Corpo** | Importazione CONTRATTI Avvenuta Correttamente |
\\
\\
==== Email di Errore ====
=== Quando viene inviata ===
* Al verificarsi di un errore durante l'elaborazione di una chiusura
* Al termine dell'importazione contratti con errori
\\
=== Formato Email Errore ===
^ Campo ^ Valore ^
| **Da** | corrispettiving@gmail.com |
| **A** | [DestMail] o [DestMailContratti] |
| **CC** | [DestMailCC] (se configurato) |
| **Oggetto** | **Errore** Importazione Corrispettivo in Contabilità : n° {IDCHIUSURA} del {DATA} per Negozio {CODMAG} |
| **Corpo** | Tabella HTML con elenco messaggi di log |
\\
=== Struttura Corpo Email Errore ===
Il corpo dell'email contiene un'intestazione e una tabella con tutti i messaggi registrati durante l'elaborazione:
Log Importazione Corrispettivo in Contabilità : n° 1234 del 20-01-2026 per Negozio MAG01
[Info]
Inizio elaborazione chiusura 1234
[Info]
Creazione movimento contabile corrispettivo
[Errore]
Codice conto 500400099 non trovato nel piano dei conti
[Errore]
Impossibile completare la registrazione contabile
\\
=== Classificazione Messaggi nel Log Email ===
^ Prefisso ^ Tipo Messaggio ^ Significato ^
| ''[Info]'' | Tipo 0 - Informativo | Operazione completata normalmente |
| ''[Warning]'' | Tipo 1 - Avvertimento | Situazione anomala non bloccante |
| ''[Errore]'' | Tipo 2-3 - Errore | Problema che ha causato il fallimento |
\\
==== Comportamento Post-Invio ====
Dopo l'invio dell'email (sia successo che errore), la lista messaggi viene svuotata:
pMessaggi.Items.Clear()
Questo assicura che le email successive contengano solo i messaggi relativi all'elaborazione corrente.
\\
\\
===== Esecuzione Schedulata =====
Per l'esecuzione automatica tramite Task Scheduler di Windows:
@echo off
cd /d "C:\Program Files\ImportCashData\V5"
ImportCashData.exe /s username password
\\
**Configurazione consigliata:**
* Esecuzione giornaliera post-chiusura cassa
* Account di servizio con privilegi minimi necessari
* Monitoraggio file log per anomalie
* Verifica periodica casella email per notifiche errore
\\
----
//Documento generato automaticamente - ImportCashData V5//