joujma5
Messages postés152Date d'inscriptionsamedi 11 novembre 2006StatutMembreDernière intervention 5 décembre 2014
-
27 mai 2013 à 09:19
joujma5
Messages postés152Date d'inscriptionsamedi 11 novembre 2006StatutMembreDernière intervention 5 décembre 2014
-
27 mai 2013 à 15:43
Bonjour,
Comme j'ai déjà mentionné dans l'article suivant
Je travaille sur l'impression d'une facture à travers une imprimante matricielle, comme début j'ai réussi à la mise en œuvre de l'imprimante matricielle, mais je me bloque de nouveau :
- la facture à imprimer supporte 32 ligne par page, c'est à dire si le nombre de ligne retourné par la requête sql (select) est supérieur à 32 ligne il faut passer à la page suivante, en outre il faut combler la différence avec des vbcrlf (si nombre de ligne retourné =22 alors il faut imprimer (32-22) vbcrlf.
Voici le code que j'utilise :
cnx.ConnectionString = chaine
Dim npiece As String = TextBox1.Text
Try
cnx.Open()
Dim cmd, cmd1 As New SqlCommand
cmd.CommandText = "SELECT dbo.F_DOCLIGNE.Ar_Ref,dbo.F_DOCLIGNE.DL_Design," & _
"dbo.F_DOCLIGNE.DL_Qte,dbo.F_DOCLIGNE.DL_Taxe1,dbo.F_DOCLIGNE.DL_PrixUnitaire,dbo.F_DOCLIGNE.DL_MontantTTC,dbo.F_DOCLIGNE.CT_Num,dbo.DP_CLIENTS.CLI_INTITULE,dbo.F_DOCLIGNE.DL_DateBL,ISNULL(dbo.F_DOCLIGNE.PrixPublic,0),dbo.DP_CLIENTS.CLI_IDENTIFIANT,dbo.DP_CLIENTS.CLI_ADRESSE,dbo.DP_CLIENTS.CLI_CODEPOSTAL,dbo.DP_CLIENTS.CLI_VILLE,dbo.F_DOCLIGNE.CO_No,DO_Date,DO_Type FROM (dbo.F_DOCLIGNE LEFT JOIN dbo.DP_CLIENTS ON dbo.DP_CLIENTS.CLI_UK=dbo.F_DOCLIGNE.cbCT_Num) where ([cbDO_Piece]=@Piece OR [cbDL_PieceBL]=@Piece) AND ([DO_Type]='3'OR [DO_Type]='6'OR [DO_Type]='7') ORDER BY dbo.F_DOCLIGNE.DL_Design"
Dim cb_DoPiece() As Byte
Dim Str As String
Str = npiece
' Convert string to bytes
cb_DoPiece = System.Text.Encoding.Default.GetBytes(Str)
cmd.Parameters.Add("@Piece", SqlDbType.VarBinary)
cmd.Parameters("@Piece").Value = cb_DoPiece
cmd.CommandType = CommandType.Text
cmd.Connection = cnx
cmd1.CommandText = ("SELECT COUNT(AR_ref) FROM F_DOCLIGNE WHERE ([cbDO_Piece]=@Piece1 OR [cbDL_PieceBL]=@Piece1)")
Dim cb_DoPiece1() As Byte
Dim Str1 As String
Str1 = npiece
' Convert string to bytes
cb_DoPiece1 = System.Text.Encoding.Default.GetBytes(Str)
cmd1.Parameters.Add("@Piece1", SqlDbType.VarBinary)
cmd1.Parameters("@Piece1").Value = cb_DoPiece1
cmd1.CommandType = CommandType.Text
cmd1.Connection = cnx
Dim reader1 As SqlDataReader
reader1 = cmd1.ExecuteReader
reader1.Read()
Dim rowcount As Integer = reader1(0)
Dim restrowcount As Integer = 36 - reader1(0)
reader1.Close()
Dim reader As SqlDataReader
reader = cmd.ExecuteReader()
If reader.HasRows Then
MsgBox("Nombre de Lignes" & rowcount)
While reader.Read()
If rowcount > 32 Then
For i As Integer = 0 To 32
MsgBox("Faire" & i)
Exit For
Next
For i As Integer = 33 To rowcount
MsgBox("Faire" & i)
Exit For
Next
Else
If rowcount <= 32 Then
MsgBox("i inférieur à 32")
End If
End If
End While
reader.Close()
End If
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical)
End Try
cnx.Close()
y' a t ' il quelqu'un qui peut me guider par me donner le principe avec le quel je dois travailler.
Merci
A voir également:
Mise en place de l'impression d'une facture sur matricielle
joujma5
Messages postés152Date d'inscriptionsamedi 11 novembre 2006StatutMembreDernière intervention 5 décembre 2014 27 mai 2013 à 15:43
ça n'a pas marché mais par contre vous m'avez donner une idée qui est la suivante:
If reader.HasRows Then
Dim x As Integer = 0
While reader.Read()
'For x = 0 To pages - 1
' MsgBox("X " & x & "| La page est : " & pages & "| Reste " & reste)
'Next
'For x As Integer = 0 To ((32 * (pages)) - 1)
If x Mod 32 = 0 Then
'c'est à dire qu'on est dans une nouvelle page
MyPrinter.Print(vbFormFeed)
Else
'on est dans la même page
End If
x = x + 1
'Next
End While
reader.Close()
End If
ce qui reste maintenant c'est de gérer le reste (par exemple si le nombre de lignes retournés sera 34 alors les 32 premières lignes seront dans une page alors que le reste dans une nouvelle page.
joujma5
Messages postés152Date d'inscriptionsamedi 11 novembre 2006StatutMembreDernière intervention 5 décembre 2014 27 mai 2013 à 11:39
bonjour,
je fais bien un saut de page comme ça:
MyPrinter.Print(vbFormFeed)
MyPrinter.Close()
le problème ne réside pas dans le saut de page, mais dans la composition de saut de page ( c'est à dire si la requête retourne plus que 32 lignes il faut imprimer chaque 32 ligne dans une page séparée et passer à la suite):
exemple:
si nombre de ligne retourné = 96 alors
imprimer les 32 premiers ligne dans page1
puis un saut de page
imprimer les 32 lignes de suite dans page2
puis un saut de page
imprimer les 32 ligne de suite dans page 3
puis un saut de page