Jump to content
cleziano

Como passar parametro para sql dentro da formula?

Recommended Posts

Bom dia pessoal,

Seguinte, estou elaborando um crítica para a folha de pagamento onde se o funcionário não estiver afastado pela previdencia então criticamos o valor do desconto de almoço e vale transporte.

Vendo que não existia uma função que buscasse a data de afastamento final da tabela do histórico de afastamento (PFHSTAFT), onde esta data deveria ser nula, e a data inicial do afastamento, que deve ser menor que o dia inicial do mês, então resolvi criar um SQL para consultar esta tabela, e o fiz assim:

SELECT A.*

FROM PFHSTAFT A

WHERE A.DTFINAL IS NULL

AND A.CHAPA = :CHAPA

Salvei como INAFAST nos sql's do RM Labore. Após isso fui ao cadastro de formulas do RM e tentei criar a critica da seguinte forma:

EXECSQL ('INAFAST');

DECL(DATAAF);

SE SFUNC = 'P'

ENTAO SETVAR(DATAAF,RESULTSQL('INAFAST','DTINICIO'))

FIMSE;

SE (TABCOMPL ('TICKET' , 'S') = 'N' OU TABCOMPL ('TICKET' , 'S') = '' ) E CODSECAO <> '1.2.002.002' E (N('0041') + N('0042')) <> 30 E DATAAF < MTDATA (1 , MES , ANO)

ENTAO SE MV(MES,ANO,'0167') <= 0

ENTAO 'CRD06'

SENAO ''

FIMSE

SENAO ''

FIMSE

No SQL INAFAST é requerido a chapa do funcionário para que ele traga os campos referentes aos afastamentos que ainda não houveram retorno. O erro se dá ai. Preciso passar a chapa da formula para o SQL para que ele me traga a linha referente a data inicial.

Alguem pode me ajudar a solucionar este problema?

Edited by Maffra

Share this post


Link to post
Share on other sites

Crie uma formula com codigo CHAPA , buscando a variavel CHAPA.

No SQL em vez de colocar :CHAPA, coloque :FRM_CHAPA

é só.

Crie uma formula com codigo CHAPA e coloque a variavel CHAPA nela.

No SQL em vez de :CHAPA coloque :FRM_CHAPA.

Crie uma formula com codigo CHAPA e coloque a variavel CHAPA nela.

No SQL em vez de :CHAPA coloque :FRM_CHAPA.

Share this post


Link to post
Share on other sites

Muito obrigado pela solução Mauricio. Com certeza é bem mais eficiente do que a que eu fiz aqui.

Alterei o SQL para que ele traga tudo sem filtro e na formula do RM fiz assim:

EXECSQL ('INAFAST');

DECL(DATAAF);

SE SFUNC = 'P'

ENTAO REPITA SE RESULTSQL('INAFAST','CHAPA') = CHAPA

ENTAO SETVAR(DATAAF,RESULTSQL('INAFAST','DTINICIO'))

SENAO SE PROXREGSQL ('INAFAST') = 1

ENTAO SETVAR(DATAAF,MTDATA (01 , 01 , 0001))

FIMSE

FIMSE

ATE DATAAF <> MTDATA (01 , 01 , 0001)

FIMSE;

SE (TABCOMPL ('TICKET' , 'S') = 'N' OU TABCOMPL ('TICKET' , 'S') = '' ) E CODSECAO <> '1.2.002.002' E (N('0041') + N('0042')) <> 30 E DATAAF > MTDATA (1 , MES , ANO)

ENTAO SE MV(MES,ANO,'0167') <= 0

ENTAO 'CRD06'

SENAO ''

FIMSE

SENAO ''

FIMSE

Share this post


Link to post
Share on other sites

Crie uma formula com codigo CHAPA , buscando a variavel CHAPA.

No SQL em vez de colocar :CHAPA, coloque :FRM_CHAPA

é só.

Crie uma formula com codigo CHAPA e coloque a variavel CHAPA nela.

No SQL em vez de :CHAPA coloque :FRM_CHAPA.

Crie uma formula com codigo CHAPA e coloque a variavel CHAPA nela.

No SQL em vez de :CHAPA coloque :FRM_CHAPA.

Mauricio,

Fiz da forma que vc me indicou porém não traz resultado. Fui depurar o sql dentro do RM e na hora que ele pede o contexto para execução da formula ele não passa a CHAPA propriamente dita. Minha chapa é formada de 6 caracteres numéricos porém é armazenada como string. Quando eu seleciono algum contexto ele me retorno U00001 onde deveria ser 000001. Tentei usar uma substring pegando só os 5 ultimos caracteres da string, porém o :FRM_CHAPA não tem tipo conhecido.

Tem alguma noção de como solucionar isso?

Share this post


Link to post
Share on other sites

Moderadores,

Surgiu uma nova dúvida no uso do :FRM_CHAPA.

- O retorno da função não é a chapa propriamente dita, o primeiro caracter da chapa está sendo trocado por 'U'.

- O tipo do retorno da função :FRM_CHAPA não é conhecido.

Coloquei mais detalhes na resposta da resposta que o Mauricio me mandou.

Atenciosamente,

Share this post


Link to post
Share on other sites

Cleziano,

Tente o seguinte :FRM_CHAPA_S

Att,

Valeu Maffra,

Deu certo porém tive que fazer um gambiarra...

No SQL 'SS001' que eu cadastrei tive que formatar a chapa e ficou assim:

SELECT T.DTFIM

FROM PFVALETR T

WHERE CONCAT('U',SUBSTR(T.CHAPA,2,5)) = :FRM_CHAPA_S

vi que tinha que fazer isso pois no log da formula apareceu assim:

Constante literal SS001

Chamada a funcao EXECSQL SS001

Constante literal U

Variável CHAPA 003117

Constante literal 2,0000

Constante literal 5,0000

Chamada a funcao SUBSTR 003117 2,0000 5,0000

Resultado da funcao SUBSTR 03117

Chamada a funcao CONCAT U 03117

Resultado da funcao CONCAT U03117

Resultado da formula U03117

Isso acontece tudo dentro da função EXECSQL. Não sei se isso é só aqui

Edited by cleziano

Share this post


Link to post
Share on other sites

Este exemplo por ser substituído por outros parâmetros.

SELECT CODTOMADOR REF, VALOR VALOR

FROM PFRATEIOTOMADOR

WHERE CHAPA=:FRM_CHAPA

Jaime

Construtora Passarelli Ltda

Share this post


Link to post
Share on other sites

Este exemplo por ser substituído por outros parâmetros.

SELECT CODTOMADOR REF, VALOR VALOR

FROM PFRATEIOTOMADOR

WHERE CHAPA=:FRM_CHAPA

Jaime

Construtora Passarelli Ltda

Jaime,

No seu sistema funcionou assim? Aqui só funciona quando colocamos o _S e mesmo assim tem que trocar o primeiro caracter da chapa por "U" se não o RM não entende.

Share this post


Link to post
Share on other sites

erro.docEntao verificando as solucoes dos colegas. Nenhuma delas rodou aqui. A solucao alternativa com concat e substr nao aceitou a sql? Bem amigos se puderem me ajudar. A funcao da formula e repetir o ultimo salario pago no periodo de licença maternidade. (terei que fazer ainda ajustes na formula, mas primeiro terei que fazer funcionar o recebimento do parametro que é a chapa do funcionario).

Ja agradeço antecipadamente.

Eduardo - Cascavel - PR

Share this post


Link to post
Share on other sites
Em 22/10/2008 at 17:28, Eduardo Zortea disse:

erro.docEntao verificando as solucoes dos colegas. Nenhuma delas rodou aqui. A solucao alternativa com concat e substr nao aceitou a sql? Bem amigos se puderem me ajudar. A funcao da formula e repetir o ultimo salario pago no periodo de licença maternidade. (terei que fazer ainda ajustes na formula, mas primeiro terei que fazer funcionar o recebimento do parametro que é a chapa do funcionario).

Ja agradeço antecipadamente.

Eduardo - Cascavel - PR

Também estou com o mesmo problema, estou executando uma SQL em uma planilha .NET e uma das colunas, eu precisava executar uma formula (LIMITEGOZO) mas ao executar a consulta na planilha o sistema pede o contexto.

Share this post


Link to post
Share on other sites

@Michel Nascimento, bom dia!

Na planilha .NET não poderá utilizar fórmulas.... para utilizar fórmulas na query é somente quando a execução seja agregada a um processo, por exemplo na fórmula de valor do evento, a fórmula chama uma consulta, porém nessa query você precisa da chapa, logo, dentro da query terá a chamada de outra fórmula de para a chapa, assim, a execução identifica qual é a chapa que está no contexto e executa. 

O que pode fazer é replicar a lógica dessa fórmula e colocar no SQL.

 

abraços.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.