Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

[Resolvido] Código para menu imprimir

Recommended Posts

ola.

 

To precisando de uma luz!

 

Seguinte:

 

No menu da minha aplicação tem o ítem imprimir pedido. ta.

Preciso arranjar um código pra por nesse menu de forma que após digitado o numero do pedido, o código vai la no form de pedidos e entra no beginprint de um PrintDocument que tem la e envia para la o numero do pedido para que o PrintDocument que tem la exiba pelo printpreviewdialog os dados do pedido tal.

O código que estou usando no menu é:

Private Sub PedidoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidoToolStripMenuItem.Click
		Dim frmAberto As Boolean = False
		For Each frm As Form In Application.OpenForms
			If frm.Name = "VisualizarImprimir" Then
				frmAberto = True
				Exit For
			End If
		Next
		Dim ret As String = String.Empty
		While True
			ret = InputBox("Entre o Número do Pedido")
			' Será que o usuário está tentando cancelar?
			If ret.Trim() = String.Empty Then
				If MessageBox.Show("Deseja Cancelar a consulta?", "Consulta", MessageBoxButtons.YesNo) = _
				  Windows.Forms.DialogResult.Yes Then
					Return
				End If
			ElseIf Not IsNumeric(ret) Then
				MessageBox.Show("Digite somente números!")
			Else
				Exit While
			End If
		End While
		Dim sqlp As String = "Select * from " & TabelaPedidos & " where pedidoID = " & ret
		ds = accDb.ExecuteDS(sqlp, TabelaPedidos)
		If ds.Tables(0).Rows.Count = 0 Then
			MsgBox("Pedido não encontrado!")
		Else
			For Each drp As DataRow In ds.Tables(0).Rows
				If frmAberto = True Then
					My.Forms.VisualizarImprimir.BringToFront()
					Exit Sub
				Else
					'#######
					'AQUI ENTRARIA O CÓDIGO INFORMANDO QUE O CÓDIGO DO PEDIDO É O CÓDIGO DIGITADO NA CAIXINHA DE DIALOGO  ret = InputBox("Entre o Número do Pedido").
					'#######
				End If
			Next
		End If
	End Sub

o CÓDIGO DO MEU FORM DE PEDIDOS É ESSE:

(ESTOU EXCLUINDO A PARTE DO CÓDIGO QUE NÃO TEM NADA A VER COM O PRINT DOCUMENTO TA?)

 

Imports MySql.Data.MySqlClient
Imports System.Text.RegularExpressions
Imports System.Math
Imports System.Drawing.Printing

Public Class Pedidos
	'INICIO DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS
	Inherits System.Windows.Forms.Form
	Dim accDb As New DBConnection
	Dim registrocliente As Integer
	Dim registroproduto As Integer
	Dim registroitem As Integer
	Dim registropedido As Integer
	Dim registropedidos As Integer
	Dim Proximopedido As New Integer
	Dim ds As DataSet = Nothing
	Dim ds_itens As DataSet = Nothing
	Dim ds_itens_temp As DataSet = Nothing
	Dim dt As DataTable
	Dim dr As DataRow
	Dim TabelaClientes As String = "clientes"
	Dim TabelaProdutos As String = "produtos"
	Dim TabelaPedidos As String = "pedidos"
	Dim TabelaDetalhesPedidos As String = "detalhespedidos"
   

	'FIM DAS DECLARAÇÕES DAS VARIAVEIS GLOBAIS
	''''''''''''''''''''''''''''''''''''''''''
	'INICIO DAS FUNÇÕES E PROCÍDURES
###########RESTO DO ODIGO DO FORM####
####################
	'Recursos da Paginação
	Private RelatorioTitulo As String
	Dim leitor As MySqlDataReader
	Private PaginaAtual As Integer = 1
	Private TotalPaginas As Integer
	Dim TotalNota As Integer
	Dim totalLinhas As Long
	Dim ccodigo As Integer
	Dim conexao As New MySqlConnection
	Private Sub Impimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Impimir.Click
		RelatorioTitulo = "Impressão de pedido "
		Dim pd As Printing.PrintDocument = New Printing.PrintDocument()
		AddHandler pd.PrintPage, New Printing.PrintPageEventHandler(AddressOf Me.pdRelatorios_PrintPage)
		AddHandler pd.BeginPrint, New Printing.PrintEventHandler(AddressOf Me.Begin_Print)
		AddHandler pd.EndPrint, New Printing.PrintEventHandler(AddressOf Me.End_Print)
		Dim objPrintPreview As New PrintPreviewDialog
		Try
			With objPrintPreview
				.Document = pd
				.WindowState = FormWindowState.Maximized
				.PrintPreviewControl.Zoom = 1
				.Text = "Catálogo de Produtos"
				.ShowDialog()
			End With
		Catch ex As Exception
			MessageBox.Show(ex.ToString())
		End Try
	End Sub
	
	Private Sub Begin_Print(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
		ccodigo = codigoped.Text
		Dim strConnString As String = "server=localhost;userid=root;password=;database=Vendas"
		conexao = New MySqlConnection(strConnString)
		conexao.Open()

		'pegando o numero total de linhas
		Dim PrintStringdetalhespedidoscount As String = "Select Count(*) from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID"
		Dim cmdcount As New MySqlCommand(PrintStringdetalhespedidoscount, conexao)
		totalLinhas = CInt(cmdcount.ExecuteScalar())

		Dim PrintStringdetalhespedidos As String = "Select * from detalhespedidos where pedidoID= " & ccodigo & " order by produtoID"
		Dim cmd As New MySqlCommand(PrintStringdetalhespedidos, conexao)
		leitor = cmd.ExecuteReader()
		PaginaAtual = 1
	End Sub

	Private Sub pdRelatorios_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
		'Variáveis das linhas
		Dim LinhasPorPagina As Single = 0
		Dim PosicaoDaLinha As Single = 0
		Dim LinhaAtual As Integer = 0
		'Variáveis das margens
		Dim MargemEsquerda As Single = e.MarginBounds.Left
		Dim MargemSuperior As Single = e.MarginBounds.Top + 100
		Dim MargemDireita As Single = e.MarginBounds.Right
		Dim MargemInferior As Single = e.MarginBounds.Bottom

		Dim CanetaDaImpressora As Pen = New Pen(Color.Black, 1)
		Dim produtoID As Integer
		Dim unidade As String
		Dim descricao As String
		Dim preco As Integer
		Dim quantidade As Integer
		Dim subtotal As Integer

		'Variáveis das fontes
		Dim FonteNegrito As Font
		Dim FonteTitulo As Font
		Dim FonteSubTitulo As Font
		Dim FonteRodape As Font
		Dim FonteNormal As Font
		FonteNegrito = New Font("Arial", 9, FontStyle.Bold)
		FonteTitulo = New Font("Arial", 15, FontStyle.Bold)
		FonteSubTitulo = New Font("Arial", 12, FontStyle.Bold)
		FonteRodape = New Font("Arial", 8)
		FonteNormal = New Font("Arial", 9)

		LinhaAtual = 0
		'********************************
		'inicio imprime o cabeçalho do relatório
		'********************************
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 60, MargemDireita, 60)

		e.Graphics.DrawImage(Image.FromFile("imagens\" & "maco10.gif"), 100, 68)
		e.Graphics.DrawString("PEDIDO", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 260, 80)
		e.Graphics.DrawString("Dados da empresa", New Font("arial", 15, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 80)

		e.Graphics.DrawString("Pedido	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 160)
		e.Graphics.DrawString(ccodigo, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 160)
		Dim pgto As String
		Dim PrintStringpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, p.cobranca, p.entrega, p.frete, p.pgto, p.CondPgto, c.nome as nome, c.tipo as pessoa, c.cpf_cnpj as dcto from  pedidos p inner join clientes c ON  p.clienteID = c.clienteID  where pedidoID= " & ccodigo
		Dim DRP As DataSet = accDb.ExecuteDS(PrintStringpedidos, TabelaPedidos)
		For Each linha As DataRow In DRP.Tables(0).Rows
			e.Graphics.DrawString("Data	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 200, 160)
			e.Graphics.DrawString(linha.Item("data"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 250, 160)

			e.Graphics.DrawString("Frete	 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 160)
			e.Graphics.DrawString(linha.Item("frete"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 160)

			If linha.Item("PGTO") = "V" Then
				pgto = "À Vista"
				e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
				e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 450, 180)
			End If

			If linha.Item("PGTO") = "P" Then
				pgto = "À PRAZO"
				e.Graphics.DrawString("PAGAMENTO:", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 300, 180)
				e.Graphics.DrawString(pgto, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 400, 180)
				e.Graphics.DrawString("Forma: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 500, 180)
				e.Graphics.DrawString(linha.Item("CondPgto").ToString.Replace(" ", ",") + " Dias", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 570, 180)
			End If
			Dim documento As String = ""
			Dim TIPO As String = ""
			If linha.Item("dcto").ToString.Length = 11 Then
				' mascara de cpf
				documento = String.Format("999,999,999-99", linha.Item("dcto").ToString)
				TIPO = "CPF"
			End If

			If linha.Item("dcto").ToString.Length = 14 Then
				' mascara de cnpj
				documento = String.Format("99,999,999-9999-99", linha.Item("dcto").ToString)
				TIPO = "CNPJ"
			End If

			e.Graphics.DrawString(TIPO & "		   : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 180)
			e.Graphics.DrawString(documento, New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 180)
			e.Graphics.DrawString("Nome		 : ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 200)
			e.Graphics.DrawString(linha.Item("nome"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 200)
			e.Graphics.DrawString("Cobrança	: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 220)
			e.Graphics.DrawString(linha.Item("cobranca"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 220)
			e.Graphics.DrawString("Endereço	: ", New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda, 240)
			e.Graphics.DrawString(linha.Item("entrega"), New Font("arial", 10, FontStyle.Regular), Brushes.Black, MargemEsquerda + 140, 240)
		Next linha
		'********************************
		'fim imprime o cabeçalho do relatório
		'********************************
		'*******************************************
		'imprime os títulos das colunas do relatório
		'*******************************************
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 260, MargemDireita, 260)
		e.Graphics.DrawString("Cód.", FonteNormal, Brushes.Red, MargemEsquerda, 260, New StringFormat())
		e.Graphics.DrawString("Unid.", FonteNormal, Brushes.Red, MargemEsquerda + 50, 260, New StringFormat())
		e.Graphics.DrawString("Descrição", FonteNormal, Brushes.Red, MargemEsquerda + 100, 260, New StringFormat())
		e.Graphics.DrawString("Preço", FonteNormal, Brushes.Red, MargemEsquerda + 350, 260, New StringFormat())
		e.Graphics.DrawString("Qtde", FonteNormal, Brushes.Red, MargemEsquerda + 450, 260, New StringFormat())
		e.Graphics.DrawString("Total", FonteNormal, Brushes.Red, MargemEsquerda + 550, 260, New StringFormat())
		e.Graphics.DrawLine(Pens.Black, MargemEsquerda, 280, MargemDireita, 280)

		'define o número de linhas por página de acordo com a área de impressão e o tamanho da fonte
		'subtraimos o valor 10 do resultado para acomodar o rodapé do relatório
		LinhasPorPagina = e.MarginBounds.Height / FonteNormal.GetHeight(e.Graphics) - 10
		'LinhasPorPagina = 8
		'ativamos o tratamento de erro

		While (LinhaAtual < LinhasPorPagina AndAlso leitor.Read())
			produtoID = leitor("produtoID")
			unidade = leitor("unidade")
			descricao = leitor("descricao")
			preco = leitor("preco")
			quantidade = leitor("quantidade")
			subtotal = leitor("subtotal")

			PosicaoDaLinha = MargemSuperior + (LinhaAtual * FonteNormal.GetHeight(e.Graphics)) + 100
			e.Graphics.DrawString(produtoID, FonteNormal, Brushes.Black, MargemEsquerda, PosicaoDaLinha, New StringFormat())
			e.Graphics.DrawString(unidade, FonteNormal, Brushes.Black, MargemEsquerda + 50, PosicaoDaLinha, New StringFormat())
			e.Graphics.DrawString(descricao, FonteNormal, Brushes.Black, MargemEsquerda + 100, PosicaoDaLinha, New StringFormat())
			e.Graphics.DrawString(preco, FonteNormal, Brushes.Black, MargemEsquerda + 350, PosicaoDaLinha, New StringFormat())
			e.Graphics.DrawString(quantidade, FonteNormal, Brushes.Black, MargemEsquerda + 450, PosicaoDaLinha, New StringFormat())
			e.Graphics.DrawString(subtotal, FonteNormal, Brushes.Black, MargemEsquerda + 550, PosicaoDaLinha, New StringFormat())
			LinhaAtual += 1

		End While
		e.Graphics.DrawLine(CanetaDaImpressora, MargemEsquerda, MargemInferior, MargemDireita, MargemInferior)
		e.Graphics.DrawString(System.DateTime.Now.ToString(), FonteRodape, Brushes.Black, MargemEsquerda, MargemInferior, New StringFormat())
		e.Graphics.DrawString("Página : " & PaginaAtual, FonteRodape, Brushes.Black, MargemDireita - 50, MargemInferior, New StringFormat())
		'Incrementa o número da página

		PaginaAtual += 1
		TotalPaginas = Ceiling(totalLinhas / LinhasPorPagina)
		If (PaginaAtual <= TotalPaginas) Then
			e.HasMorePages = True
		Else
			e.HasMorePages = False
		End If
	End Sub
	Private Sub End_Print(ByVal sender As Object, ByVal byvale As Printing.PrintEventArgs)
		leitor.Close()
		conexao.Close()
	End Sub
	'FIM DO CARREGAMENTO DAS PROPRIEDADES E EVENTOS
End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, consegui resolver,

se ajudar a alguem, tai a solução.;

 

 

Private Sub PedidoToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PedidoToolStripMenuItem.Click
		Dim frmAberto As Boolean = False
		For Each frm As Form In Application.OpenForms
			If frm.Name = "VisualizarImprimir" Then
				frmAberto = True
				Exit For
			End If
		Next
		Dim ret As String = String.Empty
		While True
			ret = InputBox("Entre o Número do Pedido")
			' Será que o usuário está tentando cancelar?
			If ret.Trim() = String.Empty Then
				If MessageBox.Show("Deseja Cancelar a consulta?", "Consulta", MessageBoxButtons.YesNo) = _
				  Windows.Forms.DialogResult.Yes Then
					Return
				End If
			ElseIf Not IsNumeric(ret) Then
				MessageBox.Show("Digite somente números!")
			Else
				Exit While
			End If
		End While
		Dim sqlp As String = "Select * from " & TabelaPedidos & " where pedidoID = " & ret
		ds = accDb.ExecuteDS(sqlp, TabelaPedidos)
		If ds.Tables(0).Rows.Count = 0 Then
			MsgBox("Pedido não encontrado!")
		Else
			For Each drp As DataRow In ds.Tables(0).Rows
				If frmAberto = True Then
					My.Forms.Pedidos.BringToFront()
					Exit Sub
				Else
					Dim imprimepedido As New Pedidos
					imprimepedido.ccodigo = drp.Item("pedidoID")
					imprimepedido.Impimir_Click(Nothing, Nothing)
				End If
			Next
		End If
	End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.