Página 1 de 1

[resolvido] Não Imprimir campos vazios em um relatório

Enviado: 25 Jun 2016, 17:31
por Moglynho
Tentei seguir as dicas fornecidas para um tópico parecido, mas não deu certo mesmo trocando os valores.
O resultado para o campo ficar invisivel deu certo mas a linha não foi tomada pelo campo com dados.

O meu problema é: Tenho um relatório com campos em cada linha:
Nome:
Telefone:
Região:
Destino:
O que eu preciso: Imprimir todos os campos quando houverem dados
Não imprimir campos que não contenham dados, mas quando não forem impressos os campos com os dados essa linha vazia seja tomada pelo próximo campo com dados.

ex:Todos os campos com dados)
Nome: xxxxxx
Telefone:xxxxxx
Região:xxxxxxx
Destino:xxxxxxx

Ex: (Campo telefone sem dados)
Nome:xxxxxx
Região:xxxxxx
Destino:xxxxxxx
É possível?

Coloquei assim no evento ao imprimir, mas não deu certo:

Código:
Private Sub Detalhe_Print(Cancel As Integer, PrintCount As Integer)
If Me!Telefone = "" Then
Me!RtlTelefone.Visible = False
Me!Telefone.Visible = False
Me.PrintSection = False
Me.MoveLayout = False
Exit Sub
End If
End Sub


Quando não há nada no campo telefone o relatório não imprime nada a não ser o cabeçalho. :x

Agradeço mais uma vez.

Ps: Avelino Sampaio, Adquiri o Kit e fiquei tremendamente surpreso e satisfeito com a quantidade de informações e valia do produto.
Realmente é uma compra muito bem aproveitada.
Quem ainda não conhece deveria mesmo adquirir, pois não há em nenhum lugar material tão vasto e rico em informações como esse. :) :) :) :)

Re: Não Imprimir campos vazios em um relatório

Enviado: 26 Jun 2016, 11:15
por Avelino Sampaio
Ivan,

PrintSection e MoveLayout estão relacionados a registros e não a campos. Neste caso, terá que reposicionar os campos. Segue exemplo, com o código no evento Ao formatar da seção Detalhe.


Código:
Private Sub Detalhe_Format(Cancel As Integer, FormatCount As Integer)
Dim p, sup, j, seq$

'Cria uma matriz com as posições dos campos, em relação ao topo
sup = Split("0,603;1,296;2;2,704", ";")

' Esconde os campos e posiciona todos no topo
For j = 0 To 3
Me("c" & j).Visible = False
Me("c" & j).Top = 0 'campos
Me("r" & j).Top = 0 'rótulos
Next
' cria uma lista dos campos não nulos (seq) e seta para visíveis
For j = 0 To 3
If Not IsNull(Me("c" & j)) Then
Me("c" & j).Visible = True
seq = seq & "," & j 'lista dos campos não nulos
End If
Next
seq = Mid(seq, 2)
k = Split(seq, ",")
p = 0
'percorre a lista dos campos não nulos, reposicionando em sequencia.
For j = 0 To UBound(k)
Me("c" & k(j)).Top = sup(p) * 567
Me("r" & k(j)).Top = sup(p) * 567
p = p + 1
Next
'Ajusta a altura da seção detalhe
Me.Detalhe.Height = (3.89 - (0.6 * (4 - p))) * 567
End Sub


Nota: observe como estão os nomes dos campos (c0, c1, c2, ..) e dos rótulos (r0,r1,r2, ..), para poder usar nos laços FOR.

Bom estudo!

Re: [resolvido]Não Imprimir campos vazios em um relatório

Enviado: 27 Jun 2016, 02:26
por Moglynho
:D :D :D
Como sempre: Resolvidissimo.

Affffff..nunca pensei que posicionar alguns campos fosse tão complicado assim. Parece até coisas de Einstein ou Pitágoras.rsrsrsrs

Mas, bateu certinho.

Obrigado!

Re: [resolvido] Não Imprimir campos vazios em um relatório

Enviado: 20 Fev 2018, 20:04
por mliell
Boa Tarde, muito bom esse tópico, já me ajudou muito... mas estou com um problema... vamos lá:

Preciso fazer isso com 10 caixas de texto (c0 a c9) e apenas 1 rotulo (r0), veja como modifiquei o código:

Dim p, sup, j, seq$

'Cria uma matriz com as posições dos campos, em relação ao topo
sup = Split("3,845;3,847;4,721;4,721;5,522;5,522;6,321;6,321;7,122;7,122", ";")

' Esconde os campos e posiciona todos no topo
For j = 0 To 9
Me("c" & j).Visible = False
Me("c" & j).Top = 0 'campos
Next
' cria uma lista dos campos não nulos (seq) e seta para visíveis
Me.r0.Top = 0 'rótulos
For j = 0 To 9
If Not IsNull(Me("c" & j)) Then
Me("c" & j).Visible = True
seq = seq & "," & j 'lista dos campos não nulos
End If
Next
seq = Mid(seq, 2)
k = Split(seq, ",")
p = 0
Me.r0.Top = sup(p) * 567
'percorre a lista dos campos não nulos, reposicionando em sequencia.
For j = 0 To UBound(k)
Me("c" & k(j)).Top = sup(p) * 567
p = p + 1
Next

'Ajusta a altura da seção detalhe
Me.Detalhe.Height = (3.89 - (0.6 * (4 - p))) * 567


Retirei o rótulo do FOR. Ele funcionou perfeitamente, mas quando todos os rótulos estão nulos, as linhas ainda ocupam espaço no layout. Exemplo:
Se o c0 e c1 estão preenchidos, eles aparecem normais, porém os espaços dos c2 ao c9 ficam ainda as linhas em branco.

Podem me ajudar a resolver, creio que seja algo no final do código onde reposiciona os campos..

Obrigado

Re: [resolvido] Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 16:53
por mliell
Poderiam reabrir esse post? :P :roll:

Re: [resolvido] Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 17:52
por Avelino Sampaio
mliel,

desculpa, não tinha percebido sua postagem. Irei analisar a questão e te dou uma posição

Aguarde

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 18:14
por Avelino Sampaio
mliel,

teste ajustando esta linha:

Me.Detalhe.Height = (3.89 - (0.6 * (4 - p))) * 567

Para:

Me.Detalhe.Height = (7.7 - (0.6 * (10 - p))) * 567

Aguardamos

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 19:14
por mliell
Não deu certo... mas percebi que no exemplo do topico principal, só tinha esses campos... veja no anexo como está.. existem campos a cima e abaixo dos ocultos...

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 19:45
por Avelino Sampaio
mliell,

anexe aqui o seu exemplo.

Aguardamos

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 19:48
por mliell
É um banco com 2,8mb.. posso upar em outro local?

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 20:00
por Avelino Sampaio
mliel

pela sua imagem o que deseja não vai ser uma tarefa facil. Não quero seu projeto inteiro. Quero apenas um BD exemplo com o relatório envolvido

Aguardamos

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 20:09
por mliell
Removi alguns registros e formulários... Segue anexo... Obrigado

Re: Não Imprimir campos vazios em um relatório

Enviado: 21 Fev 2018, 20:17
por Avelino Sampaio
mliell,

agora terei que sair. Amanhã, pela manhã, prometo analisar com calma.

Re: Não Imprimir campos vazios em um relatório

Enviado: 26 Fev 2018, 16:32
por mliell
ok, obrigado