Ir para conteúdo

Arquivado

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

nereu1301

[Resolvido] relatorio

Recommended Posts

Bom dia

Tentei de diversas formas indicadas em alguns sites e não consegui.

Uso a sub abaixo para visualizar o relatório dos dados de uma tabela e o problema é que preciso que quando atingir um determinado numero de linhas ele inicie uma nova página. A cada 40 registros inicie nova página.

 

Private Sub CriaRelOS()
'-------------------------------
'Cabeçalho
'-------------------------------
    Call Cabeçalho
'-------------------------------
'Continuação da Impressão - Dados da OS
'-------------------------------
    picRel.FontBold = False
    picRel.FontName = "Arial"
    picRel.FontSize = "08"
    picRel.Print Tab(10); "Nome"; Tab(62); "Data"; Tab(74); "Produto"; Tab(100); "Motivo";
    picRel.Print Tab(0); String(268, "-")
    With rsRecepcao2
        Do Until .EOF = True
            picRel.Print Tab(10); !Nome;
            picRel.Print Tab(62); !Data;
            picRel.Print Tab(74); !Produto;
            picRel.Print Tab(100); !Motivo_Chamada;
        .MoveNext
        Loop
    End With
'-------------------------------
'Rodapé
'-------------------------------
    picRel.Line ((picRel.ScaleWidth - 0), (picRel.ScaleHeight - 1070))-(0, (picRel.ScaleHeight - 1100)), 15, B
    picRel.CurrentY = (picRel.ScaleHeight - 950)
    picRel.Print Tab(30); "XXXXX Informatica - Cidade - DD  Tel (XX) XXXXXXXX www.xxxxxinformatica.com.br"
    picRel.Line ((picRel.ScaleWidth - 0), (picRel.ScaleHeight - 630))-(0, (picRel.ScaleHeight - 660)), 15, B
End Sub

 

se alguem puder ajudar, agradeço.

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Nereu. Se todas suas linhas tiverem altura igual, que acredito que sim, você pode ajustar o tamanho de seu Group Footer (section3) de tal forma que só caibam essas 40 linhas. Aí na propriedade ForcePageBreak dessa mesma seção deixe como 2 - rptPageBreakAfter.

 

Veja se resolve e poste ai.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde Claudio

 

Seguinte, to fazendao esse relatorio com objeto printer, usando commonDialog, que não me dá acesso as seções. To usando esse medodo por dois motivos:

1 - data report me deu problema quando instalei o programa no cliente

2 - não consegui fazer o crystal report 2008 funcionar com o vb6

 

então se tu puder me dar alguma idéia na forma que eu to usando te agradeço.

 

nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah, ok, desculpe ai...

 

É, o datareport dá problema mesmo na hora de instalar no cliente. Achei uma matéria esses dias da microsoft ensinando a corrigir esse problema mas não dá certo. O único meio que consigo instalar um datareport no cliente é utilizando o package do próprio visual studio, o Package and Deployment Wizard.

 

Cara, não costumo trabalhar com o objeto print, mas vou dar uma pesquisada e ver se encontro alguma coisa, só vou demorar um pouco que não tenho como fazer isso no momento. Se achar posto aqui.

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou o NewPage?

    Dim iRowCount as Integer''
    iRowCount = 0''

    With rsRecepcao2
        Do Until .EOF = True
            iRowCount = iRowCount + 1''
            picRel.Print Tab(10); !Nome;
            picRel.Print Tab(62); !Data;
            picRel.Print Tab(74); !Produto;
            picRel.Print Tab(100); !Motivo_Chamada;
            If(iRowCount >= 40) Then Printer.NewPage 'Nova página'
            'Ou picRel.NewPage, testa'
        .MoveNext
        Loop
    End With

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom dia

Não estou conseguindo acessar corretamente o IMaster.

as vezes pagina não atualiza, tá com dois dias de atraso, as vezes atualiza na página do forum mas quando vou acessar o tópico tá com dois dias de atraso

e pra poder ver as respostas eu tenho que ir em responder e editar e visualizar ediçao.

Quero saber se o problema é meu ou tá acontecendo com outros?????

 

Nereu

 

Boa dia Scorpio

 

não sei se essa resposta vai chegar em voce porque to com problema de acesso no IMaster

 

com a tua dica Printer.NewPage ele cria nova página na impressão, e eu quero antes vizualizar as páginas que vão existir. Ele manda pra spool criando corretamente novas páginas.

 

e com picRel.newPage o método newPage não é aceito.

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nereu, veja se exite o método TextHeight no Printer.

Altura_texto = Printer.TextHeight(Seu_texto)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio

 

Aceita printer.TextHeight, mas não entendi onde posicionaria essa linha na sub.

 

nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK.

 

Como está fazendo para exibir para o usuário?

 

Você pega a altura da sua página(em pixels) e enquanto Printer.TextHeight(TEXTO) < ALTURA_PAGINA você vai colocando os "registros", quando ficar maior, você inicia uma nova página.

Entendeu? Ou eu não entendi? http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif

 

Só fique atento, que o valor retornado pelo Textheight não é em pixels, é em twip, então vai ter que converter. De uma pesquisada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Scorpio

Talvez eu não tenha entendido como fazer, mas não deu certo.

 

Para exibir para o usuário eu fiz assim: Um form com 1 pictureBoxFundo, 1 pictureBoxDetalhe(DET), 1 pictureBoxRelatório(REL), 1 HScrolBar, 1 VScrollBar, 1 CommonDialog e 2 ComandButton e fiz assim já com sua idéia:

Option Explicit
Public contapagina As Integer
Private Erro As Boolean
Private Msg As String
Private Sub cmd_print_Click()
Printer.PaintPicture picRel.Image, 0, 0, picRel.Width, picRel.Height
Printer.EndDoc
End Sub
Private Sub cmd_sair_Click()
Unload Me
Set rs = Nothing
End Sub
Private Sub Form_Load()
    Call DimensionaRelatorio
    
    rs.Open "Select * From Rec order by Num", cnn, 1, 2
    Call CriaRelOS
End Sub
Private Sub DimensionaRelatorio()
picRel.Move 255, 100 'define a posiçao visual do relatorio no form
picDet.Move picFundo.ScaleWidth - vBar.Width, picFundo.ScaleHeight - hBar.Height, vBar.Width, hBar.Height
hBar.Move 0, picFundo.ScaleHeight - hBar.Height, picFundo.ScaleWidth - vBar.Width, hBar.Height
    hBar.Max = (picRel.ScaleWidth - picFundo.ScaleWidth) + 1000
    hBar.Min = 0
    hBar.SmallChange = 14
    hBar.LargeChange = picRel.ScaleWidth / 14
    hBar.Value = hBar.Min
vBar.Move picFundo.ScaleWidth - vBar.Width, 0, vBar.Width, picFundo.ScaleHeight - hBar.Height
    vBar.Max = (picRel.ScaleHeight - picFundo.ScaleHeight) + 500
    vBar.Min = 0
    vBar.SmallChange = 14
    vBar.LargeChange = picRel.ScaleHeight / 14
    vBar.Value = vBar.Min
End Sub
Private Sub Cabeçalho()
'-------------------------------
'Cabeçalho
'-------------------------------
    picRel.Line ((picRel.ScaleWidth - 0), 280)-(0, 268), , BF 'o prim num.def.linha dir, o seg. e a quarta a esp da linha, o terc. a linha esq
    picRel.CurrentX = 150
    picRel.FontBold = True
    picRel.FontName = "Arial"
    picRel.Print Tab(4); "Controle de Ordem"
    picRel.Print Tab(4); "Data:"; Tab(12); Format(Now, "dd/mm/yyyy");
    picRel.Print Tab(4); "Hora:"; Tab(12); Format(Now, "hh:mm:ss"); Tab(130 - (Len("Pag: 0001"))); "Pag: 0001"
    picRel.Line ((picRel.ScaleWidth - 0), 990)-(0, 1020), , BF
End Sub
Private Sub CriaRelOS()
Dim texto As String
'-------------------------------
'Cabeçalho
'-------------------------------
    Call Cabeçalho
'-------------------------------
'Continuação da Impressão - Dados da OS
'-------------------------------
    picRel.FontBold = False
    picRel.FontName = "Arial"
    picRel.FontSize = "08"
    picRel.Print Tab(3); "Nº "; Tab(10); "Nome"; Tab(62); "Data "; Tab(74); "Prod"; Tab(100); "Mot";
    picRel.Print Tab(0); String(268, "-")
    With rs
        Do Until .EOF = True
            picRel.Print Tab(3); Format(!Num, "0000");
            picRel.Print Tab(10); !Nome;
            picRel.Print Tab(62); !Data;
            picRel.Print Tab(74); !Prod;
            picRel.Print Tab(100); !Mot;
            .MoveNext
            If Printer.TextHeight(texto) < 300 Then Printer.NewPage
        Loop
End With
'-------------------------------
'Rodapé
'-------------------------------
    picRel.Line ((picRel.ScaleWidth - 0), (picRel.ScaleHeight - 1070))-(0, (picRel.ScaleHeight - 1100)), 15, B
    picRel.CurrentY = (picRel.ScaleHeight - 950)
    picRel.Print Tab(30); "Info -   Tel () 1444 www..com.br"
    picRel.Line ((picRel.ScaleWidth - 0), (picRel.ScaleHeight - 630))-(0, (picRel.ScaleHeight - 660)), 15, B
End Sub
Private Sub hBar_Change()
picRel.Left = -hBar.Value + 255
picFundo.Cls
End Sub
Private Sub vBar_Change()
picRel.Top = -vBar.Value + 255
picFundo.Cls
End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamo pro jeito mais facil entao.

 

Você não precisa montar todo o relatório quando exibir. monte de acordo com as páginas. entendeu?

do outro jetio que tava pensando ia ficar muito dificil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim,

o cara ta na primeira pagina certo?

Você vai monta a lista com os 40 primeiros registros.

Se ele vai pra segunda, você monta do 41 ao 80

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia

 

Seguinte, resolvi da seguinte forma:

Usei DataReport sem DataEnvironment, porque com o Environment dava problema com o caminho que no cliente era diferente do meu.

 

Fiz assim:

Coloco um Datareport no proj e incluo rptTextBox necessários na area Detail e rptLabel na area Pageheader, e chamo ele com um command button que coloco no projeto que tem essa sub

 

Private Sub Imprimir() 
Dim i As Integer
        With rptdinamico
            Set .DataSource = Nothing
                .DataMember = ""
            Set .DataSource = rs.DataSource
                With .Sections("Section1").Controls
                    For i = 1 To .Count
                        If TypeOf .Item(i) Is RptTextBox Then
                            'O datamember deverá sempre ser enquanto estiver criando relatorios dinamicos
                            .Item(i).DataMember = ""
                            .Item(i).DataField = rs.Fields(i - 1).Name
                        End If
                    Next i
                End With
               .Show
       End With
End Sub

Ficou muito bom. Posso mudar bastante o laiout e posso tambem trabalhar com formulas e cálculos.

 

Tive que desistir daquela forma que eu estava tentando, mas vocês sabem mais do que eu, porque são mestres, que presisamos testar e ser persistente até conseguir.

 

Obrigado a todos que me ajudaram.

 

Nereu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio

 

é o seguinte, eu tinha feito meu projeto com DatReport e DataEnvironment e instalei na máquina do cliente e deu erro e como não consegui fazer funcionar o Crystal busquei outra forma que foi o DataReport sem Data Environment e funcionou.

Penso que como o dataEnvironment obriga você dar o caminho, na instalação dava problema.

Eu comecei esse ano com VB, antes meu conhecimento era só em Access, então algumas coisa eu ainda não consigo explicar corretamente.

 

Nereu

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.