Ir para conteúdo

Arquivado

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

Rebeca Boiani

Crystal Reports 8.5, não consigo solucionar um problema.

Recommended Posts

Olá,

 

Como soluciono este problema?

 

Eu preciso enviar correspondência com avisos de débito para algumas empresas que estão em débito conosco, de modo que seja impresso no aviso, o endereço da empresa e também o nome do escritório de contabilidade de cada empresa; ocorre que estes dados estão em tabelas diferentes.

 

Explicando melhor:

 

São 2 entidades relacionadas pela coluna ID (entEnderecos e entEmpresas), na entidade entEmpresas consta o nome e demais informações da empresa, na entidade de endereços (entEnderecos) são inseridos os endereços das empresas e o nome do escritório de contabilidade (na coluna Local).

 

Colunas da tabela entEnderecos (Id, endereco completo, Local)

 

Em geral cada empresa (entEmpresas) possui 3 endereços na tabela entEnderecos (Endereço1, Endereço2, e Endereço3). Eu preciso dos dados referentes ao ID=1 e o nome do escritório contábil da empresa, cujo ID é igual a 2 (ID=2).

 

Se eu configuro no “Select Expert” os registros a serem utilizados (ID=1 e ID=2), ocorre o problema, pois será gerado 2 avisos (um aviso com o endereço da empresa e o outro com o endereço do escritório contábil). Mas eu quero que saia o aviso no endereço da empresa e apenas o nome do escritório de contabilidade.

 

Espero ter sido clara!

 

Utilizo Crystal 8.5

 

Att.,

Rebeca

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rebeca;

 

Falta, talvez, incluir uma condição para "pegar" só o endereço da empresa.

 

Como fica o SQL final ?

 

Você domina SQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grata, Mota.

Pensei que este tópico havia sido deletado, o achei por acaso.

Respondendo a sua pergunta: acho que conheço bem SQL.

Se existisse uma função no Crystal que buscasse dados, o meu problema estaria solucionado, mas acho que não existe, pelo menos não encontrei nos meus manuais.

 

As tabelas citadas foi somente para terem uma ideia do problema, no caso concreto, existem 3 tabelas relacionadas (Entcademp, Entcobemp e Entenderecosemp).

 

Na cláusula Where (entenderecosemp."id_locend" = 1 OR entenderecosemp."id_locend" = 4) consta os códigos de endereços que realmente preciso. Código 1 para endereco de Cobrança e código 4 para nome do escritório de Contabilidade.

 

Abaixo segue a consulta gerada pelo Crystal.

SELECT
    Entcobemp."cd_empresa_cob", Entcobemp."nr_sequencia_cob", Entcobemp."ano_cob", Entcobemp."mes_cob", Entcobemp."tp_cob", Entcobemp."qt_socios", Entcobemp."n_numero", Entcobemp."dt_vcto", Entcobemp."cd_barra", Entcobemp."cd_digitavel", Entcobemp."dtProcessamento",
    entcademp."cd_empresa", entcademp."nr_sequencia", entcademp."rz_social", entcademp."cgc", entcademp."id_ativ", entcademp."id_setor",
    entenderecosemp."id_locend", entenderecosemp."endereco", entenderecosemp."numero", entenderecosemp."complemento", entenderecosemp."cep", entenderecosemp."bairro", entenderecosemp."cidade"
FROM
    { oj ("BDPrincipal"."dbo"."Entcobemp" Entcobemp inner JOIN "BDPrincipal"."dbo"."entcademp" entcademp ON          Entcobemp."cd_empresa_cob" = entcademp."cd_empresa" AND      Entcobemp."nr_sequencia_cob" = entcademp."nr_sequencia")       left JOIN "BDPrincipal"."dbo"."entenderecosemp" entenderecosemp ON          entcademp."cd_empresa" = entenderecosemp."cd_empresa" AND      entcademp."nr_sequencia" = entenderecosemp."nr_sequencia"}  
WHERE
    (entenderecosemp."id_locend" = 4 OR
    entenderecosemp."id_locend" = 1) AND
    Entcobemp."ano_cob" = 2013 AND
    Entcobemp."tp_cob" = 4 AND
    entcademp."cd_empresa" = 2 AND
    Entcobemp."nr_sequencia_cob" = 1  
ORDER BY
    entcademp."cd_empresa" ASC,
    entcademp."nr_sequencia" ASC

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se existisse uma função no Crystal que buscasse dados

 

O Crystal busca dados de tabela, de sql de um cursor.

 

 

Na cláusula Where (entenderecosemp."id_locend" = 1 OR entenderecosemp."id_locend" = 4) consta os códigos de endereços que realmente preciso. Código 1 para endereco de Cobrança e código 4 para nome do escritório de Contabilidade.

 

Não entendo o problema uma fórmula no Crystal não resolve ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Com uma fórmula eu consigo sim, "pegar" os dados que preciso. Mas como posso evitar que seja gerado 2 avisos (2 relatórios), tendo em vista que o Crystal gera 1 aviso para o endereço de Cobrança e 1 aviso para o endereço de Contabilidade?

 

Como eu posso ocultar o aviso que é gerado para o endereço de Contabilidade?

 

Acho mesmo que deve existir uma forma, mas eu não sei qual é.

 

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No Crystal sempre tem a opção de Ocultar por regra, num Grupo por exemplo vc pode ocultar se a coluna tiver conteúdo X.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou resolver pelo select

por meio de um subselect pegar o min ou max tipo de endereço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

A.Jr,

 

Eu tenho certeza que uma subquery resolve, mas onde eu adiciono a instrução SQL no Crystal?

Pensei que na opção Show SQL Query seria possível editar a consulta, mas me enganei, a alteração que faço não é salva.

 

Tchau

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salvo me engane, botão direito do mouse, abrir a opção edit.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Banco de Dados
__Especialistas em Banco de Dados
_____Tabelas Selecionadas
_________Comandos
____________<botão direito> Editar Comando

 

Versão 2011

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

Não, o caminho é um tanto diferente!

 

Felizmente eu consegui solucionar o meu problema, e vou postar a solução na esperança de ajudar quem tiver passando por isso:

 

-no Menu Insert
-escolha Field Object, ou selecione o ícone Insert Fields na barra de ferramentas.
-aparecerá o Field Explorer
-botão direito em cima de SQL Expession Fields
-selecione New
-dê um nome à expressão
-aparecerá o SQL Expression Editor. Coloque a sua Subquery.

No meu caso ficou assim:


(select isnull(nome_contabil,'') from entenderecosemp where id_locend=4 and (entcademp.cd_empresa = entenderecosemp.cd_empresa and entcademp.nr_sequencia=entenderecosemp.nr_sequencia))

 

Bom, em testes iniciais, tudo parece funcionar perfeitamente. Espero que continue assim!

 

Novamente, obrigada.

 

ps. o lugar desse post é no fórum VB (onde foi originalmente postado)

 

Rebeca

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.