none
Recibos para Imprimir

    Question

  •  

    Olá viva a todos,

     

    Eu estou com um problema, nao sei como faço para imprimir form...

    Pois criei um form com textbox's e combobox's onde funcionalidade deste form é para fazer recibos e imprimir los.

    Tambem gostaria de podes organizar o print isto é colocar as imagens, cabeçalhos e rodapés onde eu pretendo imprimir.

    tambem gostava de ter um printview

     

    Um grande abraço

    Eu estou usando Visual basic express 2005
    Wednesday, August 01, 2007 2:08 AM

All replies

  • Leovon,

     

    Um software bastante utilizado para geração de relatórios é o Crystal Report, mais infelizmente não é da Microsoft e  não acompanha o VB a partir da versão 6. Este veio com um Data Report mas nas versões atuais também não faz parte. Se por acaso, você tiver o VB5 tem uma versão do Crystal Report, não sei se é compatível com o VB Express 2005, talvez tenha problema com a conexão com o banco de dados.

     

    Um abraço.

    Wednesday, August 01, 2007 3:17 AM
  •  

    Não existe algum comando que faça imprimir os pontos que pretendo que apareça na folha e que depois eu possa configurar a pagina ao meu gosto...Cabeçalho Rodapé etc...

    Já agóra o Visual Basic Studio sei que  tem o Crystal Report, a minha duvida é se quando eu carregar no butão para imprimir no From de recibos o Crystal faça Report na pagina que salvei. ou seja quando acabar de fazer um Recibo  e carregar para imprimir ele faça a impresão do que acabei de fazer (Recibo)

     

    Abraço

    Wednesday, August 01, 2007 7:18 AM
  • Por Favor ajudem me!!!

    Wednesday, August 01, 2007 12:28 PM
  • Leovon,

     

    Existe comandos sim, até tenho um projeto onde eu utilizo este recurso, é um pouco trabalhoso. Segue o código pra você dar uma olhada:


     

    Code Snippet

    Public Function ImprimirRecibo(ByVal sTipo As String, ByVal sCodigo As String, ByVal sRecibo As Double, ByRef smdb As Database) As Long
    On Error GoTo Errado

     

      Dim np                  As Printer
      Dim nFree               As Integer
      Dim tr                  As Variant
      Dim sCursos             As String
      Dim pCursos             As String
      Dim sSocioTipo          As String
      Dim sSocio              As String
      Dim sTexto              As String
      Dim sNomeAbrev          As String
      Dim sDados              As String
      Dim OldDraw             As Long
     
      If iNot Then
        MsgBox "Configure as impressoras para uso do módulo de impressão.", vbCritical + vbOKOnly, "Impressão de recibo"
        Exit Function
      End If
       
      If sTipo = "" Then
        MsgBox "Tipo não informado.", vbCritical + vbOKOnly, "Impressão de recibo"
        Exit Function
      End If
     
      If sCodigo = "" Then
        MsgBox "Código não informado.", vbCritical + vbOKOnly, "Impressão de recibo"
        Exit Function
      End If

      GetDados
     
      DoEvents
     
     
      '=================================
      'Setando a impressora do recibo
      '=================================
     
      For Each np In Printers
        If np.DeviceName = sPrintRecibo Then
          Set Printer = np
          Exit For
        End If
      Next
     
     
      '==================================
      'impressão do recibo
      '==================================
      Set rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly)     '

      DoEvents
     
      With rsRecibo
        If .RecordCount > 0 Then
          .MoveFirst
          '=============================
          'Cabeçalho do recibo
          '=============================
          Printer.PrintQuality = -1
          If Dir$(App.Path & "\logotipo.bmp") <> "" Then
            Printer.PaintPicture LoadPicture(App.Path & "\logotipo.bmp"), 200, 600, 1300, 1300
          End If
          Printer.FontName = "Arial"
          Printer.FontSize = 12
          WriteLine 600, 2000, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", True
          Printer.FontSize = 10
          WriteLine 850, 2000, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", False
          WriteLine 1100, 2000, "Fone/Fax (11) 287-1933       E-mail: XXXXXX@XXXXXX.com.br        Home Page: XXX.XXXXXXXXXX.com.br", False
          Printer.FontSize = 12
          WriteLine 1350, 2000, "                                      C.G.C. 99.99.99/99999-99", True
          Printer.FontSize = 16
          WriteLine 1700, (Printer.ScaleWidth - Printer.TextWidth("VII Congresso Paulista dos Técnicos em Prótese Dentária") - 400) / 2, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", True, True
          OldDraw = Printer.DrawWidth
          Printer.DrawWidth = 5
          Printer.Line (0, 2100)-(Printer.ScaleWidth - 400, 2100)
          Printer.DrawWidth = OldDraw
          Printer.FontSize = 20
          WriteLine 2600, (Printer.ScaleWidth - Printer.TextWidth("RECIBO") - 400) / 2, "RECIBO", True, True
          Printer.FontSize = 18
          WriteLine 3300, 200, "Nº", True, True
          WriteLine 3300, 1200, !Numero, True, True
          sTexto = "R$     " & Format$(!Valor, "#,##0.00")
          WriteLine 3300, Printer.ScaleWidth - Printer.TextWidth(sTexto) - 400, sTexto, True, True
          Printer.FontSize = 12
          WriteLine 4300, 200, "Recebemos de " & !nome, False
          WriteLine 5300, 200, "a importância de " & !Valor_Extenso, False
          WriteLine 6300, 200, "referente a " & !Histórico, False
          WriteLine 7300, 200, "Dinheiro:  R$", False
          sTexto = Format$(!Valor_Dinheiro, "#,##0.00")
          WriteLine 7300, 4500 - Printer.TextWidth(sTexto), sTexto, False
          WriteLine 7300, 6000, "Cheque:  R$", False
          sTexto = Format$(!Valor_Cheque, "#,##0.00")
          WriteLine 7300, 9500 - Printer.TextWidth(sTexto), sTexto, False
         
          '=====================
          'Cheques
          '=====================
         
          WriteLine 8300, 5000, "Banco", False
          WriteLine 8300, 6000, "Agência", False
          WriteLine 8300, 7000, "Número", False
          WriteLine 8300, 9000 - Printer.TextWidth("Valor"), "Valor", False
          WriteLine 8300, 9400, "Data", False
         
          If Not IsNull(!Bco1) Then
            If Trim(!Bco1) <> "" Then
              WriteLine 8600, 5000, !Bco1, False
              WriteLine 8600, 6000, !Age1, False
              WriteLine 8600, 7000, !Chq1, False
              sTexto = Format$(!Vlr1, "#,##0.00")
              WriteLine 8600, 9000 - Printer.TextWidth(sTexto), sTexto, False
              WriteLine 8600, 9400, Format$(!Dt1, "dd/mm/yyyy"), False
            End If
          End If
         
          If Not IsNull(!Bco2) Then
            If Trim(!Bco2) <> "" Then
              WriteLine 8900, 5000, !Bco2, False
              WriteLine 8900, 6000, !Age2, False
              WriteLine 8900, 7000, !Chq2, False
              sTexto = Format$(!Vlr2, "#,##0.00")
              WriteLine 8900, 9000 - Printer.TextWidth(sTexto), sTexto, False
              WriteLine 8900, 9400, Format$(!Dt2, "dd/mm/yyyy"), False
            End If
          End If
         
          If Not IsNull(!Bco3) Then
            If Trim(!Bco3) <> "" Then
              WriteLine 9200, 5000, !Bco3, False
              WriteLine 9200, 6000, !Age3, False
              WriteLine 9200, 7000, !Chq3, False
              sTexto = Format$(!Vlr3, "#,##0.00")
              WriteLine 9200, 9000 - Printer.TextWidth(sTexto), sTexto, False
              WriteLine 9200, 9400, Format$(!Dt3, "dd/mm/yyyy"), False
            End If
          End If
         
          If Not IsNull(!Bco4) Then
            If Trim(!Bco4) <> "" Then
              WriteLine 9500, 5000, !Bco4, False
              WriteLine 9500, 6000, !Age4, False
              WriteLine 9500, 7000, !Chq4, False
              sTexto = Format$(!Vlr4, "#,##0.00")
              WriteLine 9500, 9000 - Printer.TextWidth(sTexto), sTexto, False
              WriteLine 9500, 9400, Format$(!Dt4, "dd/mm/yyyy"), False
            End If
          End If
         
          If Not IsNull(!Bco5) Then
            If Trim(!Bco5) <> "" Then
              WriteLine 9800, 5000, !Bco5, False
              WriteLine 9800, 6000, !Age5, False
              WriteLine 9800, 7000, !Chq5, False
              sTexto = Format$(!Vlr5, "#,##0.00")
              WriteLine 9800, 9000 - Printer.TextWidth(sTexto), sTexto, False
              WriteLine 9800, 9400, Format$(!Dt5, "dd/mm/yyyy"), False
            End If
          End If

          WriteLine 11500, 6000, "São Paulo, " & Format$(Day(Date), "00") & " de " & MonthName(Month(Date)) & " de " & Format$(Year(Date), "0000"), False
          WriteLine 12800, 200, "Convite(s) para o Jantar: " & IIf(IsNull(!Convites), "", !Convites), True
          WriteLine 13300, 200, "Quantidade de Cupons: " & Format$(!Cupons, "#0"), True
          WriteLine 14300, 2500, "Funcionário(a):  " & !Operador
          Printer.DrawWidth = 5
          Printer.Line (200, 14800)-(Printer.ScaleWidth - 400, 14800)
          Printer.DrawWidth = OldDraw
          Printer.EndDoc
        End If
      End With
      ImprimirRecibo = 0

    Fim:
      Exit Function

    Errado:
      ImprimirRecibo = Err.Number
      Resume Fim
     
    End Function

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean)
      Printer.FontBold = Bold
      Printer.FontItalic = Italico
      Printer.CurrentX = Coluna
      Printer.CurrentY = Linha
      Printer.Print sTexto
    End Sub

     

     

    Agora, quanto ao Crystal Report, ele é totalmente integrado com o VB, você não terá muita dificuldade e tem bastante documentação a respeito.

     

    Um abraço.

    Wednesday, August 01, 2007 1:00 PM
  • Antes de mais muito obrigado por me estas ajudar...

    Será que podes dizer os pontos que tenho de mudar para que funcione no meu

    Basta mudares a cor das letras

     

    Muito Obrigado

    Wednesday, August 01, 2007 3:48 PM
  • Podes me ajudar a configurar pois estou com isto ha 3 dias e não consigo fazer nada estou a desesperar

     

    Tenho 1 from com os seguintes pontos:

    1 - Nº Recibo (numeração automática) TextBox

    2 - Data e Hora do Recibo ComboBox

    3 - Numero de funcionário ComboBox

    5 - Nome Funcionário TextBox

    6 - Nº Cliente ComboBox

    7 - Nome de Cliente TextBox

    8 - Passport (Cliente) TextBox

    9- Nº BI (Cliente) TextBox

    10 - Tipo de Operação ComboBox

    11 - Valor Recebido TextBox

    12 - Rate TextBox

    13 - Comissão TextBox

    14 - Valor Entregue TextBox

    15 - Botão 1 - "Novo registro"

    16 - Botão 2 - "Guardar"

    17 - Botão 3 - "Imprimir"

     

    O que pretendo é depois de preencher os pontos todos, ao carregar no botão  "Imprimir"

    me imprime os pontos todos + um cabeçalho com logotipo da empresa e possivel rodapé..

     

     

    Thursday, August 02, 2007 2:13 AM
  • Leovon,

     

    Como deve ter percebido a função que te passei é pública, você pode colocar numa biblioteca, ou melhor ainda, numa class modules. Para não passar tantos parâmetros para a função eu acho melhor você gravar este form num tabela para depois buscar as outras informações. Fazer tudo que me pediu, infelizmente no momento é difícil, mais vou tentar facilitar o máximo. Se você entender a lógica da função, depois é só um trabalho braçal de ajustes no recibo. Os campos que você mencionou vou colocá-los em negrito.

     

    Vamos lá, para chamar a função é ImprimirRecibo(Nº do Recibo)

     

    Public Function ImprimirRecibo(ByVal sRecibo As double, ByRef smdb As Database) As Long
    On Error GoTo Errado
     
      Dim np                  As Printer
      Dim nFree               As Integer
      Dim tr                  As Variant
      Dim OldDraw             As Long
      
      
      GetDados
     
      DoEvents
     
     
      '=================================
      'Setando a impressora do recibo
      '=================================
     
      For Each np In Printers
        If np.DeviceName = sPrintRecibo Then       ' O sPrintRecibo é o nome da Impressora
          Set Printer = np
          Exit For
        End If
      Next
     
     
      '==================================
      'impressão do recibo
      '==================================
      Set rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly)     ' Busca na tabela pelo número do recibo
      DoEvents
     
      With rsRecibo
        If .RecordCount > 0 Then
          .MoveFirst
          '=============================
          'Cabeçalho do recibo
          '=============================
          Printer.PrintQuality = -1
          If Dir$(App.Path & "\logotipo.bmp") <> "" Then
            Printer.PaintPicture LoadPicture(App.Path & "\logotipo.bmp"), 200, 600, 1300, 1300
          End If
          Printer.FontName = "Arial"
          Printer.FontSize = 12
          WriteLine 600, 2000, "Nome do Emitente do Recibo", True
          Printer.FontSize = 10
          WriteLine 850, 2000, "Endereço do Emitente do Recibo", False
          WriteLine 1100, 2000, "Fone/Fax (11) 9999-999       E-mail: xxxxxxxxx@xxxxxxxxx.org.br        Home Page: www.xxxxxxxxx.org.br", False
          Printer.FontSize = 12
          WriteLine 1350, 2000, "                                      C.G.C. 99.999.999/9999-99", True
          Printer.FontSize = 16
          WriteLine 1700, (Printer.ScaleWidth - Printer.TextWidth("Texto Complementar") - 400) / 2, "Texto Complementar", True, True
          OldDraw = Printer.DrawWidth
          Printer.DrawWidth = 5
          Printer.Line (0, 2100)-(Printer.ScaleWidth - 400, 2100)
          Printer.DrawWidth = OldDraw
          Printer.FontSize = 20
          WriteLine 2600, (Printer.ScaleWidth - Printer.TextWidth("RECIBO") - 400) / 2, "RECIBO", True, True
          Printer.FontSize = 18
          WriteLine 3300, 200, "Nº", True, True
          WriteLine 3300, 1200, !Numero, True, True
          sTexto = "R$     " & Format$(!Valor Recebido, "#,##0.00")
          WriteLine 3300, Printer.ScaleWidth - Printer.TextWidth(sTexto) - 400, sTexto, True, True
          Printer.FontSize = 12
          WriteLine 4300, 200, "Recebemos de " & !Nome do Cliente, False
          WriteLine 5300, 200, "a importância de " & !Valor_Extenso, False
          WriteLine 6300, 200, "referente a " & !Tipo da Operação, False
          WriteLine 7300, 200, "Dinheiro:  R$", False
          sTexto = Format$(!Valor_Dinheiro, "#,##0.00")
          WriteLine 7300, 4500 - Printer.TextWidth(sTexto), sTexto, False
          WriteLine 7300, 6000, "Cheque:  R$", False
          sTexto = Format$(!Valor_Cheque, "#,##0.00")
          WriteLine 7300, 9500 - Printer.TextWidth(sTexto), sTexto, False
         
          '=====================
          'Cheques (Descrições dos cheques)
          '=====================
         
          WriteLine 8300, 5000, "Banco", False
          WriteLine 8300, 6000, "Agência", False
          WriteLine 8300, 7000, "Número", False
          WriteLine 8300, 9000 - Printer.TextWidth("Valor"), "Valor", False
          WriteLine 8300, 9400, "Data", False
          ' Tirei os dados dos cheques
          WriteLine 11500, 6000, "São Paulo, " & Format$(Day(Date), "00") & " de " & MonthName(Month(Date)) & " de " & Format$(Year(Date), "0000"), False
          WriteLine 12300, 2500, "Funcionário(a):  " & !Nome do Funcionário
          Printer.DrawWidth = 5
          Printer.Line (200, 14800)-(Printer.ScaleWidth - 400, 14800)
          Printer.DrawWidth = OldDraw
          Printer.EndDoc
        End If
      End With
      ImprimirRecibo = 0

    Fim:
      Exit Function

    Errado:
      ImprimirRecibo = Err.Number
      Resume Fim
     
    End Function

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean)
      Printer.FontBold = Bold
      Printer.FontItalic = Italico
      Printer.CurrentX = Coluna
      Printer.CurrentY = Linha
      Printer.Print sTexto
    End Sub

    Thursday, August 02, 2007 4:45 AM
  •  

     

    já agora este codigo ponho no from que pretendo imprimir ou criu um novo from como o nome IprimirRecibo?

     Abraço

    Thursday, August 02, 2007 8:41 AM
  • Leovon,

     

    O código pode ser inserido dentro de uma biblioteca ou de um class module. No form, dentro do botão, você chama a função assim: ImprimirRecibo(Nº Recibo).

     

    Abraço,

    Alberto.

    Thursday, August 02, 2007 12:30 PM
  • Alberto,

     

     

    Se eu colocar numa class module o que devo fazer para que quando clikar botão Imprimir ele chame a função?

     

     

     

    Abraço

    Leonardo

    Thursday, August 02, 2007 4:15 PM
  • Desculpa outra pergunta quando coloco isto class module ele dame erro em certos parametros, será por eu usar a versao Visual Basic 2005 Express

     

    Thursday, August 02, 2007 4:20 PM
  • Alberto,

     

     

    Mais uma desculpe estar a encomedar... eu coloquei numa class o seguinte código

    mas dáme erro netes dois pontos que coloquei em amarelo

     

    Option Explicit On

    Public Function ImprimirRecibo(ByVal sRecibo As Double, ByRef smdb As Database) As Long

    On Error GoTo Errado

    Dim np As Printer

    Dim nFree As Integer

    Dim tr As Object

    Dim OldDraw As Long

     

    GetDados()

    DoEvents()

     

    '=================================

    'Setando a impressora do recibo

    '=================================

    For Each np In Printers

    If np.DeviceName = sPrintRecibo Then ' O sPrintRecibo é o nome da Impressora

    Printer = np

    Exit For

    End If

    Next

     

    '==================================

    'impressão do recibo

    '==================================

    rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly) ' Busca na tabela pelo número do recibo

    DoEvents()

    With rsRecibo

    If .RecordCount > 0 Then

    .MoveFirst()

    '=============================

    'Cabeçalho do recibo

    '=============================

    Printer.PrintQuality = -1

    If Dir$(App.Path & "\logotipo.bmp") <> "" Then

    Printer.PaintPicture(LoadPicture(App.Path & "\logotipo.bmp"), 200, 600, 1300, 1300)

    End If

    Printer.FontName = "Arial"

    Printer.FontSize = 12

    WriteLine(600, 2000, "Nome do Emitente do Recibo", True)

    Printer.FontSize = 10

    WriteLine(850, 2000, "Endereço do Emitente do Recibo", False)

    WriteLine(1100, 2000, "Fone/Fax (11) 9999-999 E-mail: xxxxxxxxx@xxxxxxxxx.org.br Home Page: www.xxxxxxxxx.org.br", False)

    Printer.FontSize = 12

    WriteLine(1350, 2000, " C.G.C. 99.999.999/9999-99", True)

    Printer.FontSize = 16

    WriteLine(1700, (Printer.ScaleWidth - Printer.TextWidth("Texto Complementar") - 400) / 2, "Texto Complementar", True, True)

    OldDraw = Printer.DrawWidth

    Printer.DrawWidth = 5

    Printer.Line (0, 2100)-(Printer.ScaleWidth - 400, 2100)

    Printer.DrawWidth = OldDraw

    Printer.FontSize = 20

    WriteLine(2600, (Printer.ScaleWidth - Printer.TextWidth("RECIBO") - 400) / 2, "RECIBO", True, True)

    Printer.FontSize = 18

    WriteLine(3300, 200, "Nº", True, True)

    WriteLine(3300, 1200, !Numero, True, True)

    sTexto = "R$ " & Format$(!Valor Recebido, "#,##0.00")

    WriteLine(3300, Printer.ScaleWidth - Printer.TextWidth(sTexto) - 400, sTexto, True, True)

    Printer.FontSize = 12

    WriteLine 4300, 200, "Recebemos de " & !Nome do Cliente, False

    WriteLine(5300, 200, "a importância de " & !Valor_Extenso, False)

    WriteLine 6300, 200, "referente a " & !Tipo da Operação, False

    WriteLine(7300, 200, "Dinheiro: R$", False)

    sTexto = Format$(!Valor_Dinheiro, "#,##0.00")

    WriteLine(7300, 4500 - Printer.TextWidth(sTexto), sTexto, False)

    WriteLine(7300, 6000, "Cheque: R$", False)

    sTexto = Format$(!Valor_Cheque, "#,##0.00")

    WriteLine(7300, 9500 - Printer.TextWidth(sTexto), sTexto, False)

    '=====================

    'Cheques (Descrições dos cheques)

    '=====================

    WriteLine(8300, 5000, "Banco", False)

    WriteLine(8300, 6000, "Agência", False)

    WriteLine(8300, 7000, "Número", False)

    WriteLine(8300, 9000 - Printer.TextWidth("Valor"), "Valor", False)

    WriteLine(8300, 9400, "Data", False)

    ' Tirei os dados dos cheques

    WriteLine(11500, 6000, "São Paulo, " & Format$(Day(Of Date), "00") & " de " & MonthName(Month(Of Date)) & " de " & Format$(Year(Of Date), "0000"), False)

    WriteLine 12300, 2500, "Funcionário(a): " & !Nome do Funcionário

    Printer.DrawWidth = 5

    Printer.Line (200, 14800)-(Printer.ScaleWidth - 400, 14800)

    Printer.DrawWidth = OldDraw

    Printer.EndDoc()

    End If

    End With

    ImprimirRecibo = 0

    Fim:

    Exit Function

    Errado:

    ImprimirRecibo = Err.Number

    Resume Fim

    End Function

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean)

    Printer.FontBold = Bold

    Printer.FontItalic = Italico

    Printer.CurrentX = Coluna

    Printer.CurrentY = Linha

    Printer.Print(sTexto)

    End Sub

    Friday, August 03, 2007 12:35 AM
  •  Para chamar a função de qualquer lugar o procedimento é o mesmo, ImprimirRecibo(Nº Recibo).

     

    Adicione a instrução abaixo no seu class module.

     

    Code Snippet

    Option Explicit

     

    Será necessário nomear os campos do recibo (!xxxxxx) para os nomes dos campos que você tem em sua tabela; e tirar os que não serão utilizados por você. Talvez este seja o motivo dos erros. Também preste atenção no código abaixo.

     

    Code Snippet

    Set rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly)

     

     

    smdb = string de conexão com o banco de dados

    sRecibo = parâmetro passado na função

     

    Boa sorte!

     

    Abraço.

    Friday, August 03, 2007 12:36 AM
  • Set rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly)

     

    este código ponho no class tambem?

     

    Friday, August 03, 2007 12:42 AM
  • Alberto,

     

    Desculpa estar a encomodar mas não estou a conseguir! : (

    podes me enviar o teu exemplo via mail?

    Era mais facil eu conseguir aprender se visse a funcionar...

    Vondoellinger@hotmail.com

     

    Peço desculpas o transtorno...

     

    Abraço

     

    Friday, August 03, 2007 12:59 AM
  • Leovon,

     

    Eu copiei exatamente o código da função que você precisa para imprimir o Recibo. No meu projeto eu utilizo API e outras funções que irão te dificultar ainda mais o entendimento da lógica. Agora, é necessário você fazer uma adaptação da rotina ao seu projeto, para isso você deve entender o esquema básico da mesma, veja:

     

    1. A função que te passei é uma função pública que deve ser escrita num Modules ou Class Modulos, então pode ser chamada de qualquer form do seu projeto da seguinte forma: ImprimirRecibo(Nº Recibo)

     

    2. Dentro da função, a primeiro passo é setar para a impressora onde será impresso o recibo. A string sPrintRecibo contém o nome da impressora, se deja imprimir na padrão do Windows, pode tirar este código.

    Code Snippet
      For Each np In Printers
        If np.DeviceName = sPrintRecibo Then
          Set Printer = np
          Exit For
        End If
      Next

     

    Se tiver uma chamada para a função GetDados pode excluir

     

    3. Abre a Tabela Recibo buscando o recibo com o número que foi informado no parâmetro da função. Portanto você deve gravar todas as informações do seu form nesta tabela.

     

    Code Snippet
      Set rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly)     ' Alterei aqui (busca pelo número do recibo)
      DoEvents

     

     

    4. Os restante, são basicamente os comandos para a impressão dos campos da tabela (!SeuCampodaTabelaRecibo) e textos, usando os comandos Printer e a função WriteLine

    Code Snippet

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean)
      Printer.FontBold = Bold
      Printer.FontItalic = Italico
      Printer.CurrentX = Coluna
      Printer.CurrentY = Linha
      Printer.Print sTexto
    End Sub

     

     

    5. No final da rotina é chamada a função MonthName que gera o nome do mês, eu não havia te passado.

    Code Snippet

    Private Function MonthName(ByVal iMonth As Integer) As String
      Select Case iMonth
        Case 1
          MonthName = "Janeiro"
        Case 2
          MonthName = "Fevereiro"
        Case 3
          MonthName = "Março"
        Case 4
          MonthName = "Abril"
        Case 5
          MonthName = "Maio"
        Case 6
          MonthName = "Junho"
        Case 7
          MonthName = "Julho"
        Case 8
          MonthName = "Agosto"
        Case 9
          MonthName = "Setembro"
        Case 10
          MonthName = "Outubro"
        Case 11
          MonthName = "Novembro"
        Case 12
          MonthName = "Dezembro"
      End Select
    End Function

     

     

    Espero que com este esquema você entenda melhor a lógica desta função que é até simples, mas requer conhecimentos básicos, principalmente, do comando Printer e de programação em VB.

     

    Abraço

    Friday, August 03, 2007 4:42 AM
  •  

    Alberto,

     

    eu coloquei o seguinte codigo num modules as minha duvidas são

    Qual o nome que dou ao Modules?

    Tenho de eliminar o contiúdo do Modules? o que vem como padrão!

     

    Public Function ImprimirRecibo(ByVal sRecibo As Double, ByRef smdb As Database) As Long   esta opção dame erro será que tenho de alterar algum parametro o que é sRecibo e smdb estou a trabalhar com base de dados SQL

     

    On Error GoTo Errado

    Dim np As Printer

    Dim nFree As Integer

    Dim tr As Object

    Dim OldDraw As Long

     

    GetDados()

    DoEvents()

     

    '==================================

    'impressÆo do recibo

    '==================================

    rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly) ' Busca na tabela pelo n£mero do recibo

    DoEvents()

    With rsRecibo

    If .RecordCount > 0 Then

    .MoveFirst()

    '=============================

    'Cabe‡alho do recibo

    '=============================

    Printer.PrintQuality = -1

    If Dir$(App.Path & "\logotipo.bmp") <> "" Then

    Printer.PaintPicture(LoadPicture(App.Path & "\logotipo.bmp"), 200, 600, 1300, 1300)

    End If

    Printer.FontName = "Arial"

    Printer.FontSize = 12

    WriteLine(600, 2000, "Nome do Emitente do Recibo", True)

    Printer.FontSize = 10

    WriteLine(850, 2000, "Endere‡o do Emitente do Recibo", False)

    WriteLine(1100, 2000, "Fone/Fax (11) 9999-999 E-mail: xxxxxxxxx@xxxxxxxxx.org.br Home Page: www.xxxxxxxxx.org.br", False)

    Printer.FontSize = 12

    WriteLine(1350, 2000, " C.G.C. 99.999.999/9999-99", True)

    Printer.FontSize = 16

    WriteLine(1700, (Printer.ScaleWidth - Printer.TextWidth("Texto Complementar") - 400) / 2, "Texto Complementar", True, True)

    OldDraw = Printer.DrawWidth

    Printer.DrawWidth = 5

    Printer.Line (0, 2100)-(Printer.ScaleWidth - 400, 2100)

    Printer.DrawWidth = OldDraw

    Printer.FontSize = 20

    WriteLine(2600, (Printer.ScaleWidth - Printer.TextWidth("RECIBO") - 400) / 2, "RECIBO", True, True)

    Printer.FontSize = 18

    WriteLine(3300, 200, "N§", True, True)

    WriteLine(3300, 1200, !Numero, True, True)

    sTexto = "R$ " & Format$(!Valor Recebido, "#,##0.00")

    WriteLine(3300, Printer.ScaleWidth - Printer.TextWidth(sTexto) - 400, sTexto, True, True)

    Printer.FontSize = 12

    WriteLine 4300, 200, "Recebemos de " & !Nome do Cliente, False

    WriteLine(5300, 200, "a importƒncia de " & !Valor_Extenso, False)

    WriteLine 6300, 200, "referente a " & !Tipo da Opera‡Æo, False

    WriteLine(7300, 200, "Dinheiro: R$", False)

    sTexto = Format$(!Valor_Dinheiro, "#,##0.00")

    WriteLine(7300, 4500 - Printer.TextWidth(sTexto), sTexto, False)

    WriteLine(7300, 6000, "Cheque: R$", False)

    sTexto = Format$(!Valor_Cheque, "#,##0.00")

    WriteLine(7300, 9500 - Printer.TextWidth(sTexto), sTexto, False)

    '=====================

    'Cheques (Descri‡äes dos cheques)

    '=====================

    WriteLine(8300, 5000, "Banco", False)

    WriteLine(8300, 6000, "Agˆncia", False)

    WriteLine(8300, 7000, "N£mero", False)

    WriteLine(8300, 9000 - Printer.TextWidth("Valor"), "Valor", False)

    WriteLine(8300, 9400, "Data", False)

    ' Tirei os dados dos cheques

    WriteLine(11500, 6000, "SÆo Paulo, " & Format$(Day(Of Date), "00") & " de " & MonthName(Month(Of Date)) & " de " & Format$(Year(Of Date), "0000"), False)

    WriteLine 12300, 2500, "Funcion rio(a): " & !Nome do Funcion rio

    Printer.DrawWidth = 5

    Printer.Line (200, 14800)-(Printer.ScaleWidth - 400, 14800)

    Printer.DrawWidth = OldDraw

    Printer.EndDoc()

    End If

    End With

    ImprimirRecibo = 0

    Fim:

    Exit Function

    Errado:

    ImprimirRecibo = Err.Number

    Resume Fim

    End Function

     

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean) neste parametro dáme erro numa virgula 

    Printer.FontBold = Bold

    Printer.FontItalic = Italico

    Printer.CurrentX = Coluna

    Printer.CurrentY = Linha

    Printer.Print(sTexto)

    End Sub

     

    A resposta foi bastante boa, para eu ter uma ideia como funciona...

    Desculpa estar te sempre encomodar...

     

    Um grande abraço

    Friday, August 03, 2007 9:14 AM
  • Leovon,

     

    Vamos lá, as alteração e comentários estão negrito e fontes maiores

     

    eu coloquei o seguinte codigo num modules as minha duvidas são

     

    Qual o nome que dou ao Modules? Pode ser Biblioteca

     

    Tenho de eliminar o contiúdo do Modules? Não entendi bem. Você terá que adaptar esta rotina para o layout que você deseja ao seu recibo. Para isso basta alterar os parâmetros da função WriteLine (linha e coluna). Deverá também mudar os nomes dos campos da sua Tabela, é o que vem depois do "!NomedoCampodaTabela"

     

    Public Function ImprimirRecibo(ByVal sRecibo As Double) As Long 

     

    On Error GoTo Errado

    Dim np As Printer

    Dim nFree As Integer

    Dim tr As Object

    Dim OldDraw As Long

    Dim sTexto as string    'Incluir esta instrução

     

    GetDados()   'Excluir esta linha

    DoEvents  'Não sei se é compátivel com o VB Express, se der problema tente excluir

     

    '==================================

    'impressÆo do recibo

    '==================================

    rsRecibo = smdb.OpenRecordset("Select * From Recibo Where Numero = " & sRecibo & ";", dbOpenDynaset, dbReadOnly) ' Busca na tabela pelo n£mero do recibo. Abra a Tabela da mesma forma que você utiliza nos restante do seu projeto, mas mantenha o mesmo nome do Recordset rsRecibo

    DoEvents

    With rsRecibo

    If .RecordCount > 0 Then

    .MoveFirst()

    '=============================

    'Cabe‡alho do recibo

    '=============================

    Printer.PrintQuality = -1

    If Dir$(App.Path & "\logotipo.bmp") <> "" Then

    Printer.PaintPicture(LoadPicture(App.Path & "\logotipo.bmp"), 200, 600, 1300, 1300)

    End If

    Printer.FontName = "Arial"

    Printer.FontSize = 12

    WriteLine(600, 2000, "Nome do Emitente do Recibo", True)

    Printer.FontSize = 10

    WriteLine(850, 2000, "Endere‡o do Emitente do Recibo", False)

    WriteLine(1100, 2000, "Fone/Fax (11) 9999-999 E-mail: xxxxxxxxx@xxxxxxxxx.org.br Home Page: www.xxxxxxxxx.org.br", False)

    Printer.FontSize = 12

    WriteLine(1350, 2000, " C.G.C. 99.999.999/9999-99", True)

    Printer.FontSize = 16

    WriteLine(1700, (Printer.ScaleWidth - Printer.TextWidth("Texto Complementar") - 400) / 2, "Texto Complementar", True, True)

    OldDraw = Printer.DrawWidth

    Printer.DrawWidth = 5

    Printer.Line (0, 2100)-(Printer.ScaleWidth - 400, 2100)

    Printer.DrawWidth = OldDraw

    Printer.FontSize = 20

    WriteLine(2600, (Printer.ScaleWidth - Printer.TextWidth("RECIBO") - 400) / 2, "RECIBO", True, True)

    Printer.FontSize = 18

    WriteLine(3300, 200, "N§", True, True)

    WriteLine(3300, 1200, !Numero, True, True)

    sTexto = "R$ " & Format$(!Valor Recebido, "#,##0.00")

    WriteLine(3300, Printer.ScaleWidth - Printer.TextWidth(sTexto) - 400, sTexto, True, True)

    Printer.FontSize = 12

    WriteLine 4300, 200, "Recebemos de " & !Nome do Cliente, False

    WriteLine(5300, 200, "a importƒncia de " & !Valor_Extenso, False)

    WriteLine 6300, 200, "referente a " & !Tipo da Opera‡Æo, False

    WriteLine(7300, 200, "Dinheiro: R$", False)

    sTexto = Format$(!Valor_Dinheiro, "#,##0.00")

    WriteLine(7300, 4500 - Printer.TextWidth(sTexto), sTexto, False)

    WriteLine(7300, 6000, "Cheque: R$", False)

    sTexto = Format$(!Valor_Cheque, "#,##0.00")

    WriteLine(7300, 9500 - Printer.TextWidth(sTexto), sTexto, False)

    '=====================

    'Cheques (Descri‡äes dos cheques)

    '=====================

    WriteLine(8300, 5000, "Banco", False)

    WriteLine(8300, 6000, "Agˆncia", False)

    WriteLine(8300, 7000, "N£mero", False)

    WriteLine(8300, 9000 - Printer.TextWidth("Valor"), "Valor", False)

    WriteLine(8300, 9400, "Data", False)

    ' Tirei os dados dos cheques

    WriteLine(11500, 6000, "SÆo Paulo, " & Format$(Day(Of Date), "00") & " de " & MonthName(Month(Of Date)) & " de " & Format$(Year(Of Date), "0000"), False)

    WriteLine 12300, 2500, "Funcion rio(a): " & !Nome do Funcion rio

    Printer.DrawWidth = 5

    Printer.Line (200, 14800)-(Printer.ScaleWidth - 400, 14800)

    Printer.DrawWidth = OldDraw

    Printer.EndDoc()

    End If

    End With

    ImprimirRecibo = 0

    Fim:

    Exit Function

    Errado:

    ImprimirRecibo = Err.Number

    Resume Fim

    End Function

     

    Private Sub WriteLine(ByVal Linha As Long, ByVal Coluna As Long, ByVal sTexto As String, Optional ByVal Bold As Boolean, Optional ByVal Italico As Boolean) neste parametro dáme erro numa virgula A variável foi declarada la no início da função, agora não dará mais erro

    Printer.FontBold = Bold

    Printer.FontItalic = Italico

    Printer.CurrentX = Coluna

    Printer.CurrentY = Linha

    Printer.Print(sTexto)

    End Sub

     

     

    Bom, acho que respondi tudo. Bom trabalho!

     

    Abraço.

    Friday, August 03, 2007 1:43 PM