|   | 
|  /* -------------------------------------------------------------------------------- | 
|   * | 
|   * Programma di esempio per la registrazione di una scrittura in partita doppia | 
|   * cassa a banca utilizzando le funzioni della libreria SPPSERV.DLL. | 
|   * Prima di utilizzare questo esempio è necessario modificare alcune informazioni | 
|   * in modo da adattare il codice alla base dati utilizzata. | 
|   * | 
|   * In questo esempio l'esercizio di lavoro e' considerato corrispondente all'anno | 
|   * solare in corso e le date impostate per default a quella attuale. | 
|   *  | 
|   * Questo esempio e' compilato come applicazione Windows 32bit, in quanto utilizza | 
|   * librerie, tra cui la SppServ.dll, che sono esplicitamente di tipo Win32. | 
|   *  | 
|   * QUESTO SORGENTE E' FORNITO A TITOLO DI ESEMPIO COME DIMOSTRAZIONE DELL'UTILIZZO | 
|   * DELLA LIBRERIA SPPSERV.DLL. NESSUNA GARANZIA, NE' IMPLICITA NE' ESPLICITA, E' | 
|   * PREVISTA PER QUALSIASI UTILIZZO DIVERSO DA QUELLO INDICATO. | 
|   * | 
|   -------------------------------------------------------------------------------- */ | 
|  using System; | 
|  using System.IO; | 
|  using System.Collections.Generic; | 
|  using System.Text; | 
|  using System.Runtime.InteropServices; | 
|   | 
|  namespace SppServTest2 | 
|  { | 
|    class Program | 
|    { | 
|      //costante booleana che, se settata a true, abilita l'uso di Start v.3 | 
|      const bool STARTSUITE = false; | 
|      const string MY_LIBRARY_NAME = "sppserv.dll"; | 
|      const int SPPSRV_SUCCESS = 0; | 
|   | 
|      static bool IsSppServInit = false; | 
|   | 
|      [DllImport("user32.dll", SetLastError = false)] | 
|      static extern IntPtr GetDesktopWindow(); | 
|   | 
|      // prototipi delle funzioni della sppserv.dll | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVVersion(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVInit(IntPtr mainwnd); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVExit(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVComuniConnect([MarshalAs(UnmanagedType.LPStr)] | 
|                        StringBuilder comuniconnectstring); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVDittaConnect([MarshalAs(UnmanagedType.LPStr)] | 
|                        StringBuilder dittaconnectstring); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVSetEsercizio([MarshalAs(UnmanagedType.LPStr)]  | 
|                        StringBuilder esercizio); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVSetEuro(bool IsEuro); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVSetUtente([MarshalAs(UnmanagedType.LPStr)]  | 
|                        StringBuilder utente); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVSetTodayDate([MarshalAs(UnmanagedType.LPStr)]  | 
|                        StringBuilder todaydate); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVActivateTransaction(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVGetNum([MarshalAs(UnmanagedType.LPStr)]  | 
|                        StringBuilder code); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVInitMovcoTransaction(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVEndMovcoTransaction(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVSetMovcoField([MarshalAs(UnmanagedType.LPStr)]  | 
|        StringBuilder fldname, [MarshalAs(UnmanagedType.LPStr)] StringBuilder value); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVAppendMovcoRecord(); | 
|      [DllImport(MY_LIBRARY_NAME, SetLastError = true)] | 
|      private static extern int SPPSRVCheckMovcoRecord(); | 
|      [DllImport("sppserv.dll", SetLastError = true)] | 
|      private static extern int SPPSRVGetMovcoField([MarshalAs(UnmanagedType.LPStr)]  | 
|        StringBuilder fldname, [MarshalAs(UnmanagedType.LPStr)] StringBuilder value, int valuelen); | 
|   | 
|      static void Main(string[] args) | 
|      { | 
|        /* | 
|        * §: ESEMPIO di registrazione di una scrittura in partita doppia | 
|        */ | 
|   | 
|        int rc = 0; | 
|        StringBuilder MovcoNum = new StringBuilder(16); | 
|        Console.Clear(); | 
|        Console.WriteLine("Test inserimento scrittura cassa a banca..."); | 
|        System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); | 
|        string msgfilepath = assembly.CodeBase; | 
|        if (msgfilepath.IndexOf("file:///") >= 0) | 
|          msgfilepath = msgfilepath.Substring(8, msgfilepath.Length - 8); | 
|        msgfilepath = System.IO.Path.GetDirectoryName(msgfilepath); | 
|        //Verifica della presenza della SppServ.dll e delle sue dipendenze | 
|        if (!File.Exists(msgfilepath + "\\sppserv.dll")) | 
|          Console.WriteLine("Libreria SppServ.dll non trovata"); | 
|        else if (!File.Exists(msgfilepath + "\\xnmba423.dll")) | 
|          Console.WriteLine("Libreria xnmba423.dll non trovata"); | 
|        else if (!File.Exists(msgfilepath + "\\Sx32w.dll")) | 
|          Console.WriteLine("Libreria Sx32w.dll non trovata"); | 
|        else if (!File.Exists(msgfilepath + "\\hasp_windows_90347.dll")) | 
|          Console.WriteLine("Libreria Hasp_Windows_90347.dll non trovata"); | 
|        else if (!File.Exists(msgfilepath + "\\sppmsg.ita")) | 
|          Console.WriteLine("File dei messaggi SppMsg.ita non trovato"); | 
|        else | 
|        { | 
|          // inizializzazione della DLL  | 
|          try | 
|          { | 
|            if ((rc = SPPSRVInit(GetDesktopWindow())) != SPPSRV_SUCCESS) | 
|            { | 
|              Console.WriteLine("Inizializzazione SppServ.dll fallita. SPPSRVInit ha tornato: " +  | 
|                        rc.ToString()); | 
|              goto FINE; | 
|            } | 
|            else | 
|            { | 
|              IsSppServInit = true; | 
|              // numero di versione della dll | 
|              int sppver = SPPSRVVersion(); | 
|              Console.WriteLine("Inizializzazione SppServ.dll eseguita con successo." + | 
|                " Versione libreria (valore di ritorno di SPPSRVVersion): " + sppver.ToString()); | 
|            } | 
|          } | 
|          catch (Exception ex) | 
|          { | 
|            Console.WriteLine("Errore generico inizializzazione SppServ.dll: " + ex.Message); | 
|            goto FINE; | 
|          } | 
|          // connessione al database dei dati comuni e dei dati ditta | 
|          if (STARTSUITE) | 
|          { | 
|            // versione per SIGLA StartSuite (archivi dui tipo DBF) | 
|            rc = SPPSRVComuniConnect(new StringBuilder("C:\\SIGLAPP\\PROVGEN")); | 
|            Console.WriteLine("SPPSRVComuniConnect ha tornato: " + rc.ToString()); | 
|            if (rc != SPPSRV_SUCCESS) goto FINE; | 
|            rc = SPPSRVDittaConnect(new StringBuilder("C:\\SIGLAPP\\PROVDIT")); | 
|            Console.WriteLine("SPPSRVDittaConnect ha tornato: " + rc.ToString()); | 
|            if (rc != SPPSRV_SUCCESS) goto FINE; | 
|          } | 
|          else | 
|          { | 
|            // versione per SIGLA (accesso ai dati via ODBC) | 
|            rc = SPPSRVComuniConnect(new StringBuilder("DSN=SPPGEN;UID=sigla;PWD=sigla")); | 
|            Console.WriteLine("SPPSRVComuniConnect ha tornato: " + rc.ToString()); | 
|            if (rc != SPPSRV_SUCCESS) goto FINE; | 
|            rc = SPPSRVDittaConnect(new StringBuilder("DSN=SPPDIT;UID=sigla;PWD=sigla")); | 
|            Console.WriteLine("SPPSRVDittaConnect ha tornato: " + rc.ToString()); | 
|            if (rc != SPPSRV_SUCCESS) goto FINE; | 
|            rc = SPPSRVActivateTransaction(); | 
|            Console.WriteLine("SPPSRVActivateTransaction ha tornato: " + rc.ToString()); | 
|          } | 
|          // impostazione dell'esercizio di lavoro | 
|          rc = SPPSRVSetEsercizio(new StringBuilder("2012")); | 
|          Console.WriteLine("SPPSRVSetEsercizio ha tornato: " + rc.ToString()); | 
|          // impostazione dell'utente | 
|          rc = SPPSRVSetUtente(new StringBuilder("SIGLA   ")); | 
|          Console.WriteLine("SPPSRVSetUtente ha tornato: " + rc.ToString()); | 
|          // impostazione della data | 
|          rc = SPPSRVSetTodayDate(new StringBuilder("20120412")); | 
|          Console.WriteLine("SPPSRVSetTodayDate ha tornato: " + rc.ToString()); | 
|          // impostazione dell'euro come valuta di lavoro | 
|          rc = SPPSRVSetEuro(true); | 
|          Console.WriteLine("SPPSrvSetEuro ha tornato: " + rc.ToString()); | 
|          // inizializzazione della transazione  | 
|          rc = SPPSRVInitMovcoTransaction(); | 
|          Console.WriteLine("SPPSRVInitMovcoTransaction ha tornato: " + rc.ToString()); | 
|          if (rc == SPPSRV_SUCCESS) | 
|          { | 
|            // solo dopo l'inizializzazione può essere letto il valore del campo NUMERO | 
|            // della tabella MOVCO (sarà automaticamente utilizzato anche per MOVIVA)                     | 
|            rc = SPPSRVGetMovcoField(new StringBuilder("NUMERO"), MovcoNum, 16); | 
|            Console.WriteLine("SPPSRVGetMovcoField NUMERO ha tornato: " + rc.ToString()); | 
|          } | 
|          // registrazione del primo record di MOVCO | 
|          Console.WriteLine("Registrazione del record sulla cassa..."); | 
|          SetMovcoField("DATAREG", "20120412"); | 
|          SetMovcoField("ESEREGISTR", "2012"); | 
|          SetMovcoField("DATACOMPET", "20120412"); | 
|          SetMovcoField("DTCOMPCONT", "20120412"); | 
|          SetMovcoField("ESECOMPET", "2012"); | 
|          SetMovcoField("SOTTOCONTO", "CASSA     "); | 
|          SetMovcoField("CONTROPART", "1270108003"); | 
|          SetMovcoField("C_F", "A"); | 
|          SetMovcoField("SEGNO", "D"); | 
|          // imposta la causale contabile | 
|          SetMovcoField("CAUSALE", "PGF"); | 
|          SetMovcoField("EIMPORTO", "100.00"); | 
|          // imposta il campo CASO a "prima nota non iva"  | 
|          SetMovcoField("CASO", "4"); | 
|          // controllo e inserimento del record | 
|          rc = SPPSRVCheckMovcoRecord(); | 
|          Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString()); | 
|          rc = SPPSRVAppendMovcoRecord(); | 
|          Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString()); | 
|          // registrazione del secondo record di MOVCO | 
|          // (i campi impostati non vengono resettati da SPPSRVAppendNovcoRecord) | 
|          Console.WriteLine("Registrazione del record sulla banca..."); | 
|          SetMovcoField("SOTTOCONTO", "1270108003"); | 
|          SetMovcoField("CONTROPART", "CASSA     "); | 
|          SetMovcoField("SEGNO", "A"); | 
|          SetMovcoField("EIMPORTO", "100.00"); | 
|          // controllo e inserimento del record | 
|          rc = SPPSRVCheckMovcoRecord(); | 
|          Console.WriteLine("SPPSRVCheckMovcoRecord ha tornato: " + rc.ToString()); | 
|          rc = SPPSRVAppendMovcoRecord(); | 
|          Console.WriteLine("SPPSRVAppendMovcoRecord ha tornato: " + rc.ToString()); | 
|          // termine della transazione  | 
|          rc = SPPSRVEndMovcoTransaction(); | 
|          Console.WriteLine("SPPSRVEndMovcoTransaction ha tornato: " + rc.ToString()); | 
|          Console.WriteLine("Registrazione eseguita MOVCO.NUMERO = '" + MovcoNum.ToString() + "'"); | 
|        } | 
|      FINE: | 
|        // resetta la DLL  | 
|        if (IsSppServInit) | 
|        { | 
|          if ((rc = SPPSRVExit()) == SPPSRV_SUCCESS) | 
|            Console.WriteLine("Deinizializzazione SppServ.dll eseguita con successo"); | 
|          Console.WriteLine("SPPSRVExit ha tornato: " + rc.ToString()); | 
|        } | 
|        Console.WriteLine("... premere <INVIO> per terminare..."); | 
|        Console.ReadKey(); | 
|      } | 
|   | 
|      static void SetMovcoField(string fldname, string value) | 
|      { | 
|        int rc; | 
|   | 
|        rc = SPPSRVSetMovcoField(new StringBuilder(fldname), new StringBuilder(value)); | 
|        if (rc != SPPSRV_SUCCESS) | 
|          Console.WriteLine("SPPSRVSetMovcoField " + fldname + " ha tornato: " + rc.ToString()); | 
|      } | 
|    } | 
|  } |