[Resolvido] Lógica padrão de parâmetro em relatório

Tópicos sobre a extensão das funcionalides do Compiere / Adempiere utilizando apenas o Dicionário da Aplicação
catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

[Resolvido] Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Qui Jul 21, 2011 3:55 pm

Boa tarde.
Quando criamos um parâmetro em um relatório no AD, tem um campo chamado Lógica Padrão, que define um 'valor' padrão quando for gerar aquele relatório.
O exemplo mais comum é um campo de data, que na lógica padrão adiciona-se @#Date@, que irá trazer a data do sistema.
Gostaria de saber, se tem um modo diferente de definir essa lógica, por exemplo, num intervalo de data que ele coloque digamos, a data inicial 01/01/2010*(ano anterior) e data final 31/12/2011*(ano atual).
Teria como fazer algo assim na lógica padrão?

Desde já agradeço. :wink:

Cátia.
Última edição por catia.alessandra em Qua Ago 03, 2011 4:58 pm, editado 3 vezes no total.
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

Monsores
Mensagens: 26
Registrado em: Dom Out 14, 2007 5:30 pm
Localização: Petrópolis/RJ
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor Monsores » Seg Jul 25, 2011 12:11 am

Cátia,
Não existe (pelo menos não conheço) uma forma de tratar isso com variáveis na lógica padrão. Contudo, você pode usar uma tag SQL para trazer um retorno do Postgres. O exemplo abaixo te retornaria 01/01/2010 (Considerando o dia e o mês fixos e o ano como o ano da tata atual -1):

Código: Selecionar todos

@SQL=SELECT '01/01/' || EXTRACT(year FROM current_date)-1

O current_date retorna a data atual do Postgres e pode ser substituído por um campo contendo uma data na sua tabela. Para pegar o mês ou o dia da, basta trocar o year no parâmetro do extract.

Sds,
Marcelo

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Seg Jul 25, 2011 8:23 am

Mas eu coloco onde essa SQL? Na lógica padrão? Ou em qual campo?

Obrigada
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

Monsores
Mensagens: 26
Registrado em: Dom Out 14, 2007 5:30 pm
Localização: Petrópolis/RJ
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor Monsores » Seg Jul 25, 2011 9:36 am

Sim, é na lógica padrão.
Da mesma forma que você usa variáveis de contexto com @#Variavel@, você pode usar esse @SQL para utilizar códigos SQL.

Sds,
Marcelo

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Seg Jul 25, 2011 9:41 am

Mas eu coloquei e quando fui gerar o relatório o campo ficou em branco.
No lugar de || não teria que ser && ?
Porque o || é ou, ou seja, ele vai trazer o dia e o mês ou o ano? Não seria o dia e o mês fixo e o ano?
Só que com o && também não da certo!
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

Monsores
Mensagens: 26
Registrado em: Dom Out 14, 2007 5:30 pm
Localização: Petrópolis/RJ
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor Monsores » Seg Jul 25, 2011 1:59 pm

Eu havia esquecido de um detalhe importante (resposta num domingo depois de meia noite dá nisso... 8) ). O resultado do seu SQL tem que vir em uma coluna com o nome DefaultValue, então o SQL deveria ser:

Código: Selecionar todos

@SQL=SELECT '01/01/' || EXTRACT(year FROM current_date)-1 as DefaultValue


O || não é problema, porque ele é do Select e não do java. No Select ele significa concatenação, ao invés do 'ou' do java.
Um último detalhe é que o resultado que ele está te retornando é do tipo texto. Se quiser usar em um campo data, também é necessário modificar o tipo do retorno:

Código: Selecionar todos

@SQL=SELECT CAST('01/01/' || EXTRACT(year FROM current_date)-1 As Date)as DefaultValue


Como estou sem acesso ao 'meu' Adempiere, fiz um teste no http://www.testadempiere.com/webui com o relatório de Detalhes da Transação e copiei a tela do resultado. Utilizei exatamente os códigos que te passei acima: com o cast nos campos de data e sem o cast nos campos de texto.

Sds,
Marcelo
Anexos
report.jpg
Transaction Details Report
report.jpg (44.08 KiB) Visto 5042 vezes

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Seg Jul 25, 2011 2:24 pm

Muito Obrigada, deu certo. :D

Continuando a falar de parâmetros, eu tentei usar um dos parâmetros que eu passo do AD pro iReport como comparação no Inner Join da SQL, mas não da certo (Até porque o valor pode vir nulo). Teria algum modo de fazer isso? Porque o parâmetro é a Organização, ai se ela é selecionada, eu exibo ela no relatório, mas assim só traz o ID, não o nome. Alguma idéia de como posso trazer o nome da Organização selecionada como parâmetro?

Desde já agradeço.
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

mgrigioni
Mensagens: 483
Registrado em: Sex Jan 05, 2007 3:08 pm
Localização: Jacareí/SP

Re: Lógica padrão de parâmetro em relatório

Mensagempor mgrigioni » Seg Jul 25, 2011 5:15 pm

catia.alessandra escreveu:Muito Obrigada, deu certo. :D

Continuando a falar de parâmetros, eu tentei usar um dos parâmetros que eu passo do AD pro iReport como comparação no Inner Join da SQL, mas não da certo (Até porque o valor pode vir nulo). Teria algum modo de fazer isso? Porque o parâmetro é a Organização, ai se ela é selecionada, eu exibo ela no relatório, mas assim só traz o ID, não o nome. Alguma idéia de como posso trazer o nome da Organização selecionada como parâmetro?

Desde já agradeço.


então coloca um LEFT JOIN AD_Org org ON (org.AD_Org_ID = $P{AD_Org_ID})

se for null, org.Name vai ser null, mas vai trazer todos os valores para o relatório, pois vc esta fazendo com left join

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Ter Jul 26, 2011 9:07 am

mgrigioni escreveu:então coloca um LEFT JOIN AD_Org org ON (org.AD_Org_ID = $P{AD_Org_ID})

se for null, org.Name vai ser null, mas vai trazer todos os valores para o relatório, pois vc esta fazendo com left join


Deu certo. Muitíssimo Obrigada.
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Qua Ago 03, 2011 10:00 am

Bom dia.
Continuando no mesmo relatório, me pediram para tirar a organização e trazer duas vezes o Armazém, ou seja, para trazer de 2 armazens.
No relatório, coloquei o M_Warehouse_ID, com nome Armazem, e coloquei um outro, M_WarehouseAux. como Armazém 2.
Ai na SQL eu coloquei assim:

Código: Selecionar todos

   AND (CO.M_WAREHOUSE_ID = ($P{M_Warehouse_ID} OR $P{M_Warehouse_ID} IS NULL))
   AND (CO.M_WAREHOUSE_ID = ($P{M_WarehouseAux} OR $P{M_WarehouseAux} IS NULL))

Não deu certo.
Se usar só um dos parâmetros até funciona, se deixar um em branco; senão, não funciona. Exibe mensagem "o documento não possui paginas".
Tentei colocar os dois em um só, usando IN, mas também não deu certo.
Alguém tem alguma sugestão de como eu poderia fazer?

Desde já agradeço. 8)
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

mgrigioni
Mensagens: 483
Registrado em: Sex Jan 05, 2007 3:08 pm
Localização: Jacareí/SP

Re: Lógica padrão de parâmetro em relatório

Mensagempor mgrigioni » Qua Ago 03, 2011 4:28 pm

catia.alessandra escreveu:Bom dia.
Continuando no mesmo relatório, me pediram para tirar a organização e trazer duas vezes o Armazém, ou seja, para trazer de 2 armazens.
No relatório, coloquei o M_Warehouse_ID, com nome Armazem, e coloquei um outro, M_WarehouseAux. como Armazém 2.
Ai na SQL eu coloquei assim:

Código: Selecionar todos

   AND (CO.M_WAREHOUSE_ID = ($P{M_Warehouse_ID} OR $P{M_Warehouse_ID} IS NULL))
   AND (CO.M_WAREHOUSE_ID = ($P{M_WarehouseAux} OR $P{M_WarehouseAux} IS NULL))

Não deu certo.
Se usar só um dos parâmetros até funciona, se deixar um em branco; senão, não funciona. Exibe mensagem "o documento não possui paginas".
Tentei colocar os dois em um só, usando IN, mas também não deu certo.
Alguém tem alguma sugestão de como eu poderia fazer?

Desde já agradeço. 8)


o problema é o seu segundo AND, acho que deveria ser OR .. pq vc concorda que vc faz a comparação com o mesmo campo e passa dois valores diferentes.. NUNCA o AND irá funcionar, pois sempre serão diferentes

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Qua Ago 03, 2011 4:31 pm

mgrigioni escreveu:o problema é o seu segundo AND, acho que deveria ser OR .. pq vc concorda que vc faz a comparação com o mesmo campo e passa dois valores diferentes.. NUNCA o AND irá funcionar, pois sempre serão diferentes

mas se eu colocar OR, ele não vai trazer só um dos dois parâmetros?
Porque se os dois forem escolhido, eu rpeciso trazer os dois, e não só um deles; :?
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com

catia.alessandra
Mensagens: 95
Registrado em: Seg Jan 03, 2011 12:54 pm
Localização: Ijui, RS
Contato:

Re: Lógica padrão de parâmetro em relatório

Mensagempor catia.alessandra » Qua Ago 03, 2011 4:42 pm

Na verdade, acho que deu certo do jeito que fiz agora:

Código: Selecionar todos

   AND (CO.M_WAREHOUSE_ID IN ($P{M_Warehouse_ID},$P{M_WarehouseAux}) OR ($P{M_Warehouse_ID},$P{M_WarehouseAux}) IS NULL)


Creio que não funcionou antes porque os parâmetros estava na ordem inversa no relatório; estava primeiro o Armazém 2 e depois o outro, sendo que no AD era o contrário.

Obrigada pela ajuda. :P
--
Cátia Alessandra Feistler
-------------------------------------------------------
E-mail: catia.alessandra@gmail.com
MSN: catia.alessandra.f@hotmail.com


Voltar para “Desenvolvimento - AD”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante