ImportCashData V5 - Guida Operativa


Panoramica

ImportCashData è un'applicazione console .NET che gestisce l'importazione di dati di cassa e contratti nel sistema ERP aziendale. L'applicazione supporta tre modalità operative principali:

Modalità Descrizione
Corrispettivi Importazione chiusure di cassa e movimenti di magazzino
Contratti Importazione contratti web nel sistema gestionale
Scadenze Riscrittura delle scadenze di pagamento per un contratto



Flusso Operativo

Avvio dell'Applicazione

ImportCashData.exe /s <username> <password> [operazione] [parametro]


Parametri riga di comando:

Parametro Obbligatorio Descrizione
/s Flag di avvio (start)
username Credenziali utente ERP
password 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:

  1. Parsing argomenti - Verifica presenza /s, username, password
  2. Creazione istanza Engine - Inizializzazione sistema di logging (file: importCashData.log)
  3. Caricamento configurazione - Lettura file DBCFG_cassa.xml e connessione a IERPCFG_A03
  4. 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

<connectionStrings>
  <add name="DBConfig"
       connectionString="Server=192.168.10.200\GESTERP;
                        Database=IERPCFG_A03;
                        User Id=sa;
                        Password=********;" />
</connectionStrings>


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

  1. Transazioni atomiche: Ogni chiusura è elaborata in una transazione separata
  2. Idempotenza: Lo stato = 2 previene rielaborazioni
  3. Isolamento per magazzino: Errori in un magazzino non bloccano gli altri
  4. 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:

<H3>Log Importazione Corrispettivo in Contabilità : n° 1234 del 20-01-2026 per Negozio MAG01</H3>
 
<table>
  <tr>
    <td>[Info]</td>
    <td>Inizio elaborazione chiusura 1234</td>
  </tr>
  <tr>
    <td>[Info]</td>
    <td>Creazione movimento contabile corrispettivo</td>
  </tr>
  <tr>
    <td>[Errore]</td>
    <td>Codice conto 500400099 non trovato nel piano dei conti</td>
  </tr>
  <tr>
    <td>[Errore]</td>
    <td>Impossibile completare la registrazione contabile</td>
  </tr>
</table>


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