Stampa scadenze.

sabato 12 aprile 2014 - 15.23

Peppino Profilo | Junior Member

Ciao a tutti.
Ripongo il mio problema
Uso Visual Basic 2010 Express e Sql Server 2008 R2
Per le stampe uso PrintDocument.

Chiedo scusa, ma dopo aver letti, riletti, provati e riprovati esempi(per il mio grado di conoscenza in materia), non sono riuscito a risolvere il mio problema e mi sono affossato su questo. Gli esempi trovati trattano quasi tutti la stampa di un DGV, ho provato ad adattali al mio caso ma senza riuscirci. Anche se per me è diventato un incubo, per Voi penso sia solo impostare qualche riga di codice e aver fatto un opera buona, visto che il periodo lo permette. Chiedo scusa per la battuta, anzi approfitto per fare gli auguri a tutto il Forum.
Il mio problema è quello in oggetto. Quindi ho 2 tabelle, una 'Nominativi' , l'altra 'Scadenze' in comune 'RagioneSociale'.
Vorrei ottenere la stampa delle scadenze in base alla tabella 'Nominativi', faccio un esempio ma penso sia superfluo.

Esempio:

Ragione Sociale Dare Scadenza Avere Data Saldo

Bianco
€ 1.000,00 12/04/2014 € 500,00 12/04/2014 € 500,00
€ 700,00 15/04/2014 € 700,00

Rossi
€ 800,00 22/04/2014 € 800,00

e cosi fino alla fine, facendo il salto pagina ogni numero righe stampate da me definite.

Penso di essere stato abbastanza chiaro nell'esporre il quesito.

Spero nel Vostro aiuto per uscirne fuori da questa buca.

In attesa ringrazio e rifaccio gli auguri.
Ciao, Peppino.




renarig Profilo | Expert

>Spero nel Vostro aiuto per uscirne fuori da questa buca.

Secondo me se ce lo spieghi bene la buca diventa solo un avvallamento .....

Cominciamo a concentrarci SOLAMENTE sulle tabelle,
ti ripeto quello che ho capito ( dimmi dove ho sbagliato )

Tabella di nome 'Nominativi' con i campi:
- RagioneSociale ------ Testo ------- KeyPrimaria


Tabella di nome 'Scadenze' con i campi:
- RagioneSociale ------ Testo -------- KeySecondaria sul campo Nominativi.RagioneSociale
- Dare --------------- Numerico ----- Importo da dare
- Scadenza ----------- Data --------- la data del dare
- Avere -------------- Numerico ----- Importo da avere
- Data --------------- Data --------- la data dell'avere


Il "Saldo" invece mi sembra frutto di un calcolo che quindi non sta nelle tabelle


Dicci se ho "azzeccato" oppure riproponici la struttura corretta

.

Peppino Profilo | Junior Member

Ciao renarig, grazie per l'interessamento anche in area di feste.
L'impostazione delle tabelle è esattamente come da te descritta. Se riesci a darmi una mano, e ne ho tanto bisogno (perlomeno in questo caso), te ne sarò grato per sempre. Saluto.
Ciao Peppino.

renarig Profilo | Expert

>L'impostazione delle tabelle è esattamente come da te descritta.

Da questi dati cosa vuoi ottenere ??

Tabella "Nominativi"
RagioneSociale
- Bianco
- Rossi
- Brown
- Verdi

Tabella "Scadenze"
- RagioneSociale _______ Dare ________ Scadenza _________ Avere _______ Data
- Bianco _____________ 1000 ________ 12/04/2014 ________ 500 _________ 12/04/2014
- Bianco _____________ 700 _________ 15/04/2014 _______________________________
- Bianco ______________________________________________ 50 __________ 20/04/2014
- Rossi ______________ 800 _________ 22/04/2014 _______________________________
- Brown _____________________________________________ 2000 ________ 15/06/2014

Peppino Profilo | Junior Member

Ciao renarig.

Se come descritto sopra è poco chiaro, riprovo a descriverlo. Quello che voglio realizzare è la stampa di un normale scadenziario senza nessuna particolarità e cioè per ogni nominativo presente nella tabella nominativi la stampa dei relativi dati di quel nominativo presenti nella tabella scadenze nel modo seguente.

Posto il codice cosi come credevo funzionasse, ma anche se non funziona penso sia comprensibile per quello che voglio realizzare.

Dim cmd As SqlCommand
Dim dst, dst1 As DataSet
Dim adp, adp1 As SqlDataAdapter
Dim bds, bds1 As BindingSource
Dim ragSoc AS String
Dim dare, avere, saldo AS Decimal
Dim scadenza, data AS Date
Static riga AS Integer

'Connessione tabella Nominativi
cmd = New SqlCommand()
cmd.Connection = SqlHelper.ConnessioneDatabase
cmd.CommandText = "SELECT * FROM Nominativi Order By RagioneSociale"
adp1 = New SqlDataAdapter(cmd)
dst1 = New DataSet
adp1.Fill(dst1, "RagioneSociale")
bds1 = New BindingSource()
bds1.DataSource = dst1
bds1.DataMember = "RagioneSociale"
adp1.Dispose()
cmd.Dispose()
cmd.Connection.Close()

'Ciclo per l'elenco dei nominativi.
For n AS Integer = n TO n + numeroNominativi '(ricavato in precedenza)
If n < bds1.Count Then
ragsoc = CStr(dst1.Tables("RagioneSociale").Rows(n).Item(0))

'Stampo la Ragione Sociale del nominativo.
e.Graphics.DrawString(ragsoc, Font3, Brushes.Black, sinix + 5, yy)

riga += 1 ' incremento il numero di righe stampate.

'Connessione tabella Scadenze.
cmd.CommandText = "SELECT * FROM Scadenze WHERE RagioneSociale=@ragSoc"
cmd.Parameters.Add(New SqlParameter("@ragsoc", SqlDbType.VarChar))
cmd.Parameters("@ragsoc").Value = ragsoc
adp = New SqlDataAdapter(cmd)
dst = New DataSet
adp.Fill(dst, "Dare")
adp.Fill(dst, "Scadenza")
adp.Fill(dst, "Avere")
adp.Fill(dst, "Data")

bds = New BindingSource()
bds.DataSource = dst

bds.DataMember = "Dare"
bds.DataMember = "Scadenza"
bds.DataMember = "Avere"
bds.DataMember = "Data"
adp.Dispose()
cmd.Dispose()
cmd.Connection.Close()

'Ciclo per l'elenco delle scadenze.
For i AS Integer = i TO i + numeroScadenze '(ricavato in precedenza)
If i < bds.Count Then
dare = CDec(dst.Tables("Residuo").Rows(i).Item(2))
scadenza = CDate(dst.Tables("Scadenza").Rows(i).Item(3))
avere = CDec(dst.Tables("Residuo").Rows(i).Item(4))
data = CDate(dst.Tables("Data").Rows(i).Item(5))

saldo = dare - avere

'Stampo i dati della tabella scadenza.
e.Graphics.DrawString(Formatta(CStr(dare), TipoFor.Valuta), Font6, Brushes.Black, sinix + 50, y, allineaO)
e.Graphics.DrawString(Formatta(CStr(scadenza), TipoFor.Data), Font6, Brushes.Black, sinix + 150, y, allineaV)
e.Graphics.DrawString(Formatta(CStr(avere), TipoFor.Valuta), Font6, Brushes.Black, sinix + 250, y, allineaO)
e.Graphics.DrawString(Formatta(CStr(data), TipoFor.Data), Font6, Brushes.Black, sinix + 350, y, allineaV)
e.Graphics.DrawString(Formatta(CStr(saldo), TipoFor.Valuta), Font6, Brushes.Black, sinix + 450, y, allineaO)

y = CInt(y + Font4.GetHeight)
riga += 1 ' incremento il numero di righe stampate.

If riga > righePerPagina Then '(qualsiasi numero)
e.HasMorePages = True
Else
e.HasMorePages = False
End If
End If
Next
End If
Next

In poche parole in base a questo codice dovrebbe fare il salto pagina ogni tot righe stampate.
Spero che questa volta sono stato un poco più chiaro.

Ciao. Peppino.

renarig Profilo | Expert

>..... senza nessuna particolarità e cioè per ogni nominativo presente
>nella tabella nominativi la stampa dei relativi dati di quel
>nominativo presenti nella tabella scadenze nel modo seguente. ......
> ............
>Posto il codice cosi come credevo funzionasse, ma anche se non
>funziona penso sia comprensibile per quello che voglio realizzare.
> .................
>In poche parole in base a questo codice dovrebbe fare il salto
>pagina ogni tot righe stampate.


Il problema è che io non conosco a sufficienza VisualBasic
( ma conosco un pochino VBA e SQL )

quindi non potro certamente arrivare al 100% ,

ma potrei abbozzare un ciclo in VBA che ti stampa a video il tuo risultato
in modo che poi tu possa "tradurlo" poi in VisualBasic

Percio avrei bisogno di sapere esattamente da quei dati cosa vuoi ottenere,
in particolare non mi è ancora chiaro se vuoi il saldo per ogni record
oppure per ogni nominativo

.


Peppino Profilo | Junior Member

Ciao renarig.
Grazie per il tempo che mi stai dedicando indipendentemente da quello che sarà il risultato finale.
Il saldo possiamo anche trascurarlo. A me quello che non riesce è fargli fare il salto pagina ogni tot numero di righe , quindi una riga se composta da una, due o più variabili non importa. Penso che non dovrebbe esserci tanta differenza tra VB e VBA. Proviamoci.
Ciao, Peppino.

renarig Profilo | Expert

Bene allora dimentichiamoci per il momento dei dati

Se il problema è di 25 righe stamparne 10 + 10 + 5 io farei
- un file di testo ( .txt )
- lo crei con VBA
- lo scrivi con un ciclo
- ne controlli con la variabile Y l'avanzamento fino alla riga 10
---- se 10 lanci la stampa del file
- al raggiungimento del 25 interrompi il ciclo

Public Function StTxt01() Dim Per As String 'Per = CurrentProject.Path & "\" Per = "C:\TuoPercorso\" Dim Nom As String Nom = "TxSt.txt" Dim NuTo As Integer ' Il totale di righe da stampare NuTo = 25 Dim NuPa As Integer ' Le righe per ogni pagina NuPa = 10 Dim Y As Integer ' Il cursore della riga nella pagina specifica Y = 1 Dim X As Integer ' Il cursore della riga nelle varie pagine Open Per & Nom For Output As #1# For X = 1 To NuTo Print #1, "Riga " & X & " --- " & Y If Y = NuPa Then Print #1, " xxxxxxx Fine pagina" Y = 1 ' Qui dobbiamo stampare ilfile .txt ' poi chiuderlo (Close #1) ' poi riaprirlo (Open Per & Nom For Output As #1#) Else Y = Y + 1 End If Next X Close #1 End Function

Facci sapere se la soluzione è percorribile.

PS: In questo momento non so come lanciare da VBA ( o VisualBasic )
la stampa di un file esterno .txt
ma magari qualcun' altro puo auitarci

.

Peppino Profilo | Junior Member

Ciao Renarig.
A primo impatto non è che mi ispira tanta fiducia per la soluzione del problema, considerando che da parte mia, non conosco affatto VBA. Comunque proverò a fare dei cambiamenti in VB secondo quello che sarà la mia interpretazione, diversamente abbiamo provato. Per quando riguarda l'aiuto di qualcun altro, beh i post sono a disposizione di tutti, evidentemente il post non suscita interesse per la comunità. Quindi uno come me non esperto, che non riesce ad uscire da una situazione(magari per un esperto è banale), rimane penalizzato. Con questo non è che voglia lamentarmi, in quanto non ho nessun diritto di pretesa, ma per un esperto mettere insieme due righe di codice come penso che sia nel mio caso, non fa una cattiva azione, anzi. Comunque grazie ancora per il tempo dedicatomi e rinnovo gli auguri a tutti.
Ciao, Peppino.

renarig Profilo | Expert

>A primo impatto non è che mi ispira tanta fiducia ....
Anche a me piace poco, poi mi sto accorgendo che per stampare
un file . txt bisogna fare un casino.....
devi mobilitare API e shell


>..... evidentemente il post non suscita interesse per la comunità ....
Be!!! qui siamo piu bravi con i DataBase,
...... il tuo problema invece li sfiora appena,


Prova a valutare se invece di un file .txt non riesci a popolare una
tabella temporanea sempre con lo stesso procedimento di principio
Penso che sarebbe molto piu facile



.


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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5