Histórico da Página
...
| Tabela | Parâmetro Multirecord IN | Parâmetro Multirecord Filter | Parâmetro Lookup INParâmetro Lookup FilterLookup | |
|---|---|---|---|---|
| XCOMPRADOR | MRE_ XCOMPRADOR_IN | MRE_ XCOMPRADOR_FILTER | LKP_ XCOMPRADOR_IN | LKP_ XCOMPRADOR_FILTER |
XCLIENTE | MRE_ XCLIENTE_IN | MRE_ XCLIENTE_FILTER | LKP_ XCLIENTE_IN | LKP_ XCLIENTE_FILTER |
XLOCADOR | MRE_ XLOCADOR_IN | MRE_ XLOCADOR_FILTERLKP_XLOCADOR_IN | LKP_XLOCADOR_FILTER | |
XLOCATARIO | MRE_ XLOCATARIO_IN | MRE_ XLOCATARIOFILTER | LKP_ XLOCATARIO_IN | LKP_XLOCATARIO_FILTER |
XIDLAN | MRE_ XIDLAN_IN | MRE_XIDLAN_FILTER | LKP_ XIDLAN_INLKP_ XIDLAN_FILTER | |
XIMOVEL | MRE_ XIMOVEL_IN | MRE_ XIMOVEL_FILTER | LKP_ XIMOVEL_INLKP_XIMOVEL_FILTER | |
XCONTRATOLOC | MRE_ XCONTRATOLOC_IN | MRE_ XCONTRATOLOC_FILTER | LKP_XCONTRATOLOC_IN | LKP_ XCONTRATOLOC_FILTER |
XEMPREENDIMENTO | MRE_ XEMPREENDIMENTO_IN | MRE_ XEMPREENDIMENTO_FILTERLKP_ XEMPREENDIMENTO_IN | LKP_ XEMPREENDIMENTO_FILTER | |
XUNIDADE | MRE_ XUNIDADE_IN | MRE_ XUNIDADE_FILTERLKP_ XUNIDADE_IN | LKP_ XUNIDADE_FILTER | |
XSUBUNIDADE | MRE_ XSUBUNIDADE_IN | MRE_ XSUBUNIDADE_FILTER | LKP_ XSUBUNIDADE_IN | LKP_ XSUBUNIDADE_FILTER |
Como fazer (Relatório com Sentença SQL IN e Componente MultiRecord)
...
Dada as tabelas acima, eu quero que o meu relatório me permita escolher os vários contratos de locação que irão fazer parte do resultado dele. Este relatório possui uma sentença SQL com uma clausula IN, então neste caso devemos proceder da seguinte maneira
Para isso então estou dizendo que deve existir o parâmetro MRE_XCONTRATOLOC_IN no relatório como mostra a imagem abaixo:
Na minha cláusula WHERE eu preciso utilizar sempre obrigatoriamente a função string_split. dessa forma, passamos os parâmetros como abaixo:
...
| Informações |
|---|
Surgiu a necessidade no cliente VIPASA de uma tela que contenha vários filtros:
- Seleção por LUC
- Seleção por contrato
- filtro por numero de contrato
- filtro por cliente/fornecedor
- Seleção por competência ( data inicio e fim )
- Seleção por data do contrato ( data inicio e fim )
- Busca por lançamentos ( Texto para buscar no histórico de lançamentos )
A proposta desta demanda está em evolução.
Os componentes são desenhados automaticamente na tela, de acordo com os parâmetros definidos no relatório.
O objetivo, neste momento, é testar apenas os parâmetros visuais — ainda não há o repasse desses parâmetros para a execução do relatório.
Inicialmente, foram criados alguns parâmetros específicos, mas é possível que outros surjam ao longo do desenvolvimento. Os parâmetros definidos até o momento são:
DateTime
Texto
*Int *( até foi implementando para não aceitar texto)
*Lookup *( definir o nome do parametro para que seja exibido o lookup)
*LookupMultiRecord *( definir o nome do parametro para que seja exibido o Lookup multiplo record)
- XCOMPRADOR
- XCLIENTE
- XLOCADOR
- XLOCATARIO
- XIDLAN
- XIMOVEL
- XCONTRATOLOC
- XEMPREENDIMENTO
- XUNIDADE
- XSUBUNIDADE
Definir para lookup:
LKP_XCONTRATOLOC, deverá apresentar o lookup na tela de contrato de locação. ( precisa ser "LKP_XCONTRATOLOC")
Definir para lookup:
MRE_XCONTRATOLOC, deverá apresentar o lookup multiplo na tela de contrato de locação. ( precisa ser "MRE_XCONTRATOLOC")
...
O resultado da tela do relatório dinâmico será a seguinte, possibilitando a seleção de vários contratos de locação que irão compor a saída do relatório:
Em bases Oracle, há uma diferença, onde devemos primeiro criar uma função que "imite" a string_split diretamente no banco de dados:
| Bloco de código | ||
|---|---|---|
| ||
CREATE OR REPLACE FUNCTION split_string (
p_string IN VARCHAR2,
p_delimiter IN VARCHAR2
) RETURN SYS.ODCIVARCHAR2LIST PIPELINED IS
l_start PLS_INTEGER := 1;
l_end PLS_INTEGER;
BEGIN
LOOP
l_end := INSTR(p_string, p_delimiter, l_start);
EXIT WHEN l_end = 0;
PIPE ROW(SUBSTR(p_string, l_start, l_end - l_start));
l_start := l_end + LENGTH(p_delimiter);
END LOOP;
PIPE ROW(SUBSTR(p_string, l_start));
RETURN;
END; |
Após a criação da função, a consulta SQL deve obrigatoriamente seguir o padrão:
| Bloco de código | ||
|---|---|---|
| ||
WHERE - AND XALGCONTRATOLOC.CODCONTLOC IN ( SELECT TO_NUMBER(COLUMN_VALUE) FROM TABLE(split_string(:MRE_XCONTRATOLOC_IN, ',')) |
...
) |
Como fazer (Relatório com Sentença SQL FILTER e Componente MultiRecord)
...
Para esse relatório dinâmico ser criado, deve existir o parâmetro MRE_XCONTRATOLOC_FILTER no relatório como mostra a imagem abaixo:
O resultado da exibição no relatório dinâmico será o mesmo da exibição quando temos um componente IN, entretanto a consulta SQL do relatório será filtrada de acordo com os contratos selecionados. Não é necessário utilizar a função split.
Como fazer (Relatório com Componente Lookup)
...
Neste exemplo, eu quero que o meu relatório me permita escolher somente um contrato de locação que irão fazer parte do resultado dele através de uma lookup. Então neste caso devemos proceder da seguinte maneira.
Para isso então estou dizendo que deve existir o parâmetro LKP_ XCONTRATOLOC no relatório como mostra a imagem abaixo:
Na consulta SQL deste relatório, devemos também passar na cláusula WHERE o parâmetro em questão:
| Bloco de código | ||
|---|---|---|
| ||
WHERE CODCONTLOC =:CODCONTLOC AND CODCOLCONTLOC=:CODCOLCONTLOC |
Dessa forma, ao executar o relatório dinâmico, teremos o seguinte resultado:
| Informações |
|---|
Importante: Caso seja utilizado algum componente cujo tipo de parâmetro é Multirecord e Filter, os campos devem obrigatoriamente estar na consulta SQL do relatório. Caso não estejam, não será possível gerar o filtro de forma adequada. O sistema irá emitir uma mensagem de alerta nestes casos |
4-Aplicação do lookup:
Lookup tem em sua maioria 2 valores como chave, e para que seja passado esse valores para a sentença sql, ela deverá conter o valor definido exemplo:
SELECT * FROM XALGCONTRATOLOC
WHERE CODCONTLOC =:CODCONTLOC AND CODCOLCONTLOC=:CODCOLCONTLOC
Caso existe o parametro LKP_XCONTRATOLOC definido no relatório, não será necessário criar o parametro no relatório, pois internamente é verificado se a setença
tem o parametro que compoem a chave primaria, no caso CODCOLCONTLOC, sendo assim é aplicado a o valor do lookup automaticamente.
(sempre é necessário definir o parametro na sentença sql, para ser aplicado autmaticamente, caso contrario, será aplicado apenas o CODCONTLOC)
5- Aplicação de filter, criação apenas do parametro de relatório, onde é aplicado no resultado do relatório ao filtro.
MRE_XCONTRATOLOC_FILTER.
6-criado validação, para que quando o usuário definir algum _filter, os campos precisam estar na sentença sql, caso contrato não tem filtro,
dessa forma, será exibido mensagem de erro. ( só exibe caso o usuário informe os valores no multi record)
O relatório não pode ser gerado porque a sentença SQL não contém os campos [] definidos no filtro [MRE_XIDLAN_FILTER], informado como parâmetro.
O relatório possui o parâmetro definido [
{0}
...
. |





