Tracciati flussi bancari

sabato 06 febbraio 2010 - 15.57

Mau67 Profilo | Expert

Ciao al forum, ho un problema, so che non si dovrebbe dire "URGENTE" ma per me lo è dato che per il mio lavoro avrei la necessità di farlo al più presto.

Vi spiego ho recuperato un codice che genera i tracciati per i flussi bancari, il problema che è inserito in modulo all'interno di access, adesso io vorrei convertirlo in visual studio 2008 ma non so come si fà (preciso sono un principiante) allego il file da convertire nella speranza che qualcuno di buona volontà e pazzienza mi dia una mano.

Ringrazio in anticipo
Mau67

cosmopsis Profilo | Junior Member

Se giri un po' in internet esisteva un'applicativo che traduceva da access a vb6. Poi puoi provare a importare in .NET
Soluzione un po' "sporca" ma potrebbe funzionare.
ciao

PS
sei un principiante in cosa? vb6? vbNET? programmazione? perché ti sei andato a impelagare in questa storia?

Pinky Profilo | Junior Member

Ho dato un occhiata al modulo.
In pratica se lanciato va a prendersi i dati da una query, prepara un file di testo formattato secondo ben precise specifihe e lo salva su un floppy.

Secondo me va riscritto tutto; non credo che ci siano tool che convertono il vecchio modo di leggere/scrivere i file del VB con le nuove classi/procedure del .NET.
E comunque andrebbe controllato e quindi tanto vale riscriverselo.

Tutto sommato non è un gran lavoro (dato anche che mi pare sia completamente assente una gestione di errori e di log),
Chiunque sappia effettuare una query e formattare una stringa può creare un programma che rifaccia quello che faceva il modulo.
Può essere rifatto in un qualsiasi linguaggio (VB, C#, Java ...), mi pare che bene o male siano tutti in grado di leggere un Access.
Tale programmino può essere lanciato senza aprire l'Access.

Ciao
Alessandro

Mau67 Profilo | Expert

Scusa come faccio a mandre inesecuzione il modulo di access direttamente da visual studio 2008?
considera che sono un principiante!

Grazie ciao
Mau67

Pinky Profilo | Junior Member

Non ho parlato di modulo.
Ho detto che scrivere un semplicissimo applicativo (in qualsiasi linguaggio) secondo me è la strada più semplice.
Tale programma (eseguibile) sarebbe avviabile con doppio click.

Per farlo è sufficiente essere in gradi di:
1) leggere da un database Access
2) saper formattare le stringhe (padding/leading/replace)
3) saper scrivere un file

Ti dico questo perchè sapendo che è una cosa "banale" puoi chiedere ad un range più ampio di sviluppatori di effettuarla.
Dato che dici "vorrei convertirlo in VB 2008", ti ho segnalato le macro-operazioni che il programmino deve eseguire, se sai eseguirle puoi creare il programmino, altrimenti devi prima di tutto imaparare ad effettuare tali operazioni, ma questo è da escludersi a priori daco che hai urgenza.
Torna allora utile la precedente segnalazione "qualsiasi linguaggio può effettuare questa operazione".

ciao
Alessandro

Mau67 Profilo | Expert

Ho trovato su internet un progetto per i tracciatiCbi, lo modificato secondo la mia necessità, e lo inserito nel mio progetto ma mi da 2 errori
ti posto il codice puoi aiutarmi a risolvere i problemi?

carico i dati in un dataset tramite sql e poi dovrei generare il file txt con il codice seguente.

Private Sub GeneraInvio()
' recupero id invio dalla combo
Dim codiceInvio As Integer = CInt(invioCombo.SelectedValue)
Using sw As New System.IO.StreamWriter(fileTextBox.Text, False, System.Text.Encoding.GetEncoding(1252))
' recupero datarow testata
Dim dt As daticbiDataSet.TestataDisposizioniDataTable = daticbiDataSet.TestataDisposizioni <<<<QUI DA ERRORE
Dim dr As daticbiDataSet.TestataDisposizioniRow() = DirectCast(dt.[Select](String.Format("IdInvio = {0}", codiceInvio)), daticbiDataSet.TestataDisposizioniRow())
Dim riba As New DatiCbi()
riba.AbiAzienda = dr(0).AbiAzienda
riba.CabAzienda = dr(0).CabAzienda
riba.CodiceSia = dr(0).CodiceSia
riba.CodificaFiscale = dr(0).CodificaFiscale
riba.ContoAzienda = dr(0).ContoAzienda
riba.DataAutorizzazione = dr(0).DataAutorizzazione
riba.DataCreazione = dr(0).DataDisposizioni
riba.DescrizioneAzienda = dr(0).DescrizioneAzienda
riba.NomeSupporto = dr(0).NomeSupporto
riba.NumeroAutorizzazione = dr(0).NumeroAutorizzazione
riba.ProvinciaFinanza = dr(0).ProvinciaFinanza
riba.RagioneSociale = dr(0).RagioneSociale
' scrittura testata file riba
sw.WriteLine(riba.RecordIB())
' ciclo su datarows dettaglio
For Each righe As daticbiDataSet.RigheDisposizioniRow In daticbiDataSet.RigheDisposizioni.[Select]("IdDisposizione = " + codiceInvio.ToString()) <<<<<<QUI DA ERRORE
riba.AbiCliente = righe.AbiCliente
riba.CabCliente = righe.CabCliente
riba.CapDebitore = righe.CapDebitore
riba.ChiaveControllo = righe.ChiaveControllo
riba.CodiceDebitore = righe.CodiceDebitore
riba.CodiceFiscaleDebitore = righe.CodiceFiscaleDebitore
riba.DataScadenza = righe.DataScadenza
riba.DescrizioneDebitore = righe.DescrizioneDebitore
riba.Importo = righe.Importo
riba.IndirizzoDebitore = righe.IndirizzoDebitore
riba.LocalitaDebitore = righe.LocalitaDebitore
riba.NumeroRicevuta = righe.NumeroRicevuta
riba.RichiestaEsito = righe.RichiestaEsito
riba.RiferimentoDebito = String.Format("Documento {0} Del {1}", righe.NumeroDocumento, righe.DataDocumento.ToShortDateString())
riba.SportelloDebitore = String.Empty
riba.StampaAvviso = righe.StampaAvviso
riba.TipoCodice = righe.TipoCodice
riba.TipoDocDebitore = righe.TipoDocDebitore
sw.WriteLine(riba.Record10())
sw.WriteLine(riba.Record17())
sw.WriteLine(riba.Record20())
sw.WriteLine(riba.Record30())
sw.WriteLine(riba.Record40())
sw.WriteLine(riba.Record50())
sw.WriteLine(riba.Record70())
Next
' scrittura footer file riba
sw.WriteLine(riba.RecordEF())
' chiusura stream (essendo questo un blocco using non dovrebbe servire ma ...)
sw.Close()
End Using
End Sub

Grazie in anticipo
Mau67

Pinky Profilo | Junior Member

Errore in compilazione o eccezione a runtime? Che errori sono?

Chiaramente se incollo il tuo codice in Visual Studio senza avere il tuo form ho centinaia di errori, ad occhio non credo di riuscirea a "vedere" l'errore, non ho la sfera di cristallo e non sono Debug-Man ne un altro supereroe.

A parte gli scherzi...
se vuoi una mano sii più specifico possibile e un attimo prima di chiedere aiuto mettiti nei panni di chi sta "dall'altra parte" e cerca di vedere se hai fornito tutti i dettagli utili e necessari.
Io che ne so se hai creato il dataset "daticbiDataSet" e se lo hai "caricato"?
Come faccio a sapere se hai scritto bene "TestataDisposizioni" oppure è semplicemente nullo ?

Hai creato un progetto di tipo Windows Form? Se si, ricomincia e crea un nuovo progetto di tipo Consolle, sarà più facile aiutarti e puoi fargli fare il lavoro con un semplice click, prendendo nome del file Access, della tabella e file da salvare da un semplice file di configurazione.

Dimenticavo: è preferibile (più semplice e più corretto) usare un DataReader, non un DataSet, in quanto devi solo leggere i dati dal database.
http://msdn.microsoft.com/en-us/library/haa3afyz(VS.71).aspx

ciao

Mau67 Profilo | Expert

Per entrambi gli errori mi da questo errore "Il riferimento a un membro non condiviso richiede un riferimento a un oggetto."

Ti allego il progetto che ho trovato su internet.

Nel progetto c'è la connessione al database access tramite procedura guidata io invece la faccio tramite OleDbConnection

ciao grazie
Mau67

Pinky Profilo | Junior Member

Ho VS 2008.
Ho aperto il progetto ed ho effettuato la conversione come richiesto dal wizard.
Ho lanciato in debug (F5) il progetto. Ho cliccato su "Genera i dati" con numero = 5.
Errore perchè il file .exe (generato nella cartella debug) non trovava il file Access (.mdb).
Ho copiato il file Access compreso nel processo in bin/Debug e rilanciato "Genera i dati".
Ho generato i dati e un messaggio mi ha dato conferma dell'operazione avvenuta.
Ho allora usato la funzione "Generazione file" e questa mi ha creato il file riba.txt sul desktop.
Ho aperto il file, sembra ok; non lavoro in banca ma credo siano i dati corretti per emettere delle RiBa.
Ho ripetuto tutto con "10" sul campo "Numero righe" (non ho capito cosa indica) e poi ho ri-generato il file (riba_10.txt) scegliendo una delle possibili date sulla combo "Invio" (non ho idea di cosa stia ad indicare).
Tutto ok.

Più di questo non posso fare.

Riesci a compilare il progetto?
Funziona con il database Access fornito a corredo?
Se si, il problema è che il tuo db Access ha una struttura differente dal file Access fornito con il progetto.

ciao

Mau67 Profilo | Expert

Ho risolto i due errori ho aggiunto un BindingSource e adesso riesco a mandare in debug il progetto però adesso in questo punto:

Dim dt As daticbiDataSet.TestataDisposizioniDataTable = daticbiDataSet.TestataDisposizioni
Dim dr As daticbiDataSet.TestataDisposizioniRow() = DirectCast(dt.[Select](String.Format("IdInvio = {0}", codiceInvio)), daticbiDataSet.TestataDisposizioniRow())
Dim riba As New DatiCbi()
riba.AbiAzienda = dr(0).AbiAzienda <<<<<< INDICE OLTRE I LIMITI DELLA MATRICE

Sai come posso risolvere?

Grazie
Mau67

Pinky Profilo | Junior Member

DatiCbi è una tua classe?
Il progetto originale usa la classe DatiCbiRiba.

Così ad occhio sembrerebbe che stai chiedendo il record di indice zero (VB.Net è come C# zero-based) mentre il tuo oggetto dr probabilmente è vuoto.
Fermatici in debug e vedi la proprietà Length di dr se è maggiore di zero. se è zero non ha caricato i dati.

ciao

Mau67 Profilo | Expert

Ok sono riuscito a fare leggere, e anche a inserire i dati di testata, il problema si presenta per le righe che devo far iserire i dati nella tabella ciclando una listview per inserire tutte le righe utilizzando il codice che ti riporto e che non fà il ciclo

For k As Integer = 0 To righe - 1
Dim drRighe As daticbiDataSet.RigheDisposizioniRow = _
DirectCast(dsDati.RigheDisposizioni.NewRow(), daticbiDataSet.RigheDisposizioniRow)
drRighe.AbiCliente = rnd.[Next](1, 99999)
drRighe.CabCliente = rnd.[Next](1, 99999)
drRighe.CapDebitore = rnd.[Next](1, 99999).ToString()
drRighe.ChiaveControllo = " "
drRighe.CodiceDebitore = rnd.[Next](10000, 99999).ToString()
drRighe.CodiceFiscaleDebitore = GetCodiceFiscale()
drRighe.DataDocumento = DateTime.Now.AddDays(rnd.[Next](10, 90))
drRighe.DataScadenza = drRighe.DataDocumento.AddDays(60)
drRighe.DescrizioneDebitore = String.Format("Ragione sociale {0}", drRighe.CodiceDebitore)
drRighe.IdDisposizione = idTestata
drRighe.IdRiga = k + 1
drRighe.Importo = CDec(rnd.NextDouble()) * rnd.[Next](1000, 10000)
drRighe.IndirizzoDebitore = String.Format("Via Del debitore {0}", rnd.[Next](1, 250))
drRighe.LocalitaDebitore = String.Format("Località debitore {0}", drRighe.CodiceDebitore)
drRighe.NumeroDocumento = rnd.[Next](500, 500000).ToString()
drRighe.NumeroRicevuta = k + 1
drRighe.RichiestaEsito = 0
drRighe.SiglaProvincia = "XX"
drRighe.StampaAvviso = 0
drRighe.TipoCodice = 4
drRighe.TipoDocDebitore = 0
dsDati.RigheDisposizioni.Rows.Add(drRighe)
Next
TestataTableAdapter.Update(dsDati.TestataDisposizioni)
RigheTableAdapter.Update(dsDati.RigheDisposizioni)
MessageBox.Show("Dati generati")
Come posso risolvere?

Grazie
Mau67

Pinky Profilo | Junior Member

Non riesco neanche a capire cosa fa questo:
DirectCast(dsDati.RigheDisposizioni.NewRow(), daticbiDataSet.RigheDisposizioniRow)
e ho abbandonato l'uso dei DataSet da anni, quindi non ti saprei aiutare ad usarli...

ciao

Mau67 Profilo | Expert

Nessuno del forum ha mai costruito un applicazione per la creazione dei flussi homebanking per l'accreditamento degli stipendi?

Mi serve aiuto Grazie a tutti
Mau67
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5