12417 - Função SubstituiFrom utilizando o parâmetro LEFT OUTER JOIN
Problema: Descrição do Problema: Ao utilizar a função SubstituiFrom passando como parâmetro LEFT OUTER JOIN, retorna a seguinte mensagem:
Erro na Geração do SQL da Seção Detalhe: Detalhe_1. Era esperado ), mas LEFT foi encontrado.
Quando ocorre / onde se aplica: Gerador de relatório.
Solução: Solução: Segue um trecho da documentação referente a função SubstituiFrom:
Esta função substitui uma cláusula FROM no SELECT da seção passada como parâmetro. A substituição pode ser parcial, se o parâmetro TabelaSubstituída for passado ou total, se o mesmo for omitido.
Para usar esta função, é preciso desativar os relacionamentos automáticos que são feitos cada vez que uma nova tabela é adicionada a seção. Na propriedade Relacionamento da seção detalhe, onde são mostrados todos os relacionamentos automáticos, selecione-os e utilize a opção Sem Conexão.
Importante
O uso desta função não garante que o SELECT funcione, é necessário conhecer e verificar todos os campos que o SELECT irá conter para fazer a montagem adequada das junções e relacionamentos e conseguir utilizar esta função.
Junções Suportadas
- CROSS JOIN (Produto Cartesiano);
- INNER JOIN (Junção);
- LEFT OUTER JOIN (Junção Externa a Direita);
- RIGHT OUTER JOIN (Junção Externa a Esquerda);
- NATURAL JOIN (Junção Natural);
- KEYED JOIN (Junção por Chave).
Quando o relatório é gerado utilizando-se SeniorSql2, existem algumas observações ao utilizar o comando SubstituiFrom, indicado abaixo:
Em Ferramentas de apoio, Linguagem SQL Senior 2 > Junções, o exemplo indica que os comandos utilizando seniorsql2 que usam junções devem envolver entre parênteses as junções. No caso indicado, deve-se apenas incluir o parênteses ao redor da cláusula outer join partindo do início da tabela até a última cláusual where.
FROM
(E440NFC LEFT OUTER JOIN E440IPC ON E440IPC.CODEMP = E440NFC.CODEMP AND E440IPC.CODFIL = E440NFC.CODFIL AND E440IPC.CODFOR = E440NFC.CODFOR AND E440IPC.NUMNFC = E440NFC.NUMNFC AND E440IPC.CODSNF = E440NFC.CODSNF), E095FOR
WHERE
Neste caso em especifico, analisamos o SQL que esta sendo utilizado no relatório e identificamos que é necessário que o mesmo seja ajustado para que execute no relatório, pois o SQLSenior 2 não suporta a sintaxe como o SQL Nativo.
Erro na Geração do SQL da Seção Detalhe: Detalhe_1. Era esperado ), mas LEFT foi encontrado.
Quando ocorre / onde se aplica: Gerador de relatório.
Solução: Solução: Segue um trecho da documentação referente a função SubstituiFrom:
Esta função substitui uma cláusula FROM no SELECT da seção passada como parâmetro. A substituição pode ser parcial, se o parâmetro TabelaSubstituída for passado ou total, se o mesmo for omitido.
Para usar esta função, é preciso desativar os relacionamentos automáticos que são feitos cada vez que uma nova tabela é adicionada a seção. Na propriedade Relacionamento da seção detalhe, onde são mostrados todos os relacionamentos automáticos, selecione-os e utilize a opção Sem Conexão.
Importante
O uso desta função não garante que o SELECT funcione, é necessário conhecer e verificar todos os campos que o SELECT irá conter para fazer a montagem adequada das junções e relacionamentos e conseguir utilizar esta função.
Junções Suportadas
- CROSS JOIN (Produto Cartesiano);
- INNER JOIN (Junção);
- LEFT OUTER JOIN (Junção Externa a Direita);
- RIGHT OUTER JOIN (Junção Externa a Esquerda);
- NATURAL JOIN (Junção Natural);
- KEYED JOIN (Junção por Chave).
Quando o relatório é gerado utilizando-se SeniorSql2, existem algumas observações ao utilizar o comando SubstituiFrom, indicado abaixo:
Em Ferramentas de apoio, Linguagem SQL Senior 2 > Junções, o exemplo indica que os comandos utilizando seniorsql2 que usam junções devem envolver entre parênteses as junções. No caso indicado, deve-se apenas incluir o parênteses ao redor da cláusula outer join partindo do início da tabela até a última cláusual where.
FROM
(E440NFC LEFT OUTER JOIN E440IPC ON E440IPC.CODEMP = E440NFC.CODEMP AND E440IPC.CODFIL = E440NFC.CODFIL AND E440IPC.CODFOR = E440NFC.CODFOR AND E440IPC.NUMNFC = E440NFC.NUMNFC AND E440IPC.CODSNF = E440NFC.CODSNF), E095FOR
WHERE
Neste caso em especifico, analisamos o SQL que esta sendo utilizado no relatório e identificamos que é necessário que o mesmo seja ajustado para que execute no relatório, pois o SQLSenior 2 não suporta a sintaxe como o SQL Nativo.