Ir para conteúdo
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

Como passar parametro para sql dentro da formula?


cleziano

Posts Recomendados


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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?

Editado por Maffra
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.399
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

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.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Cleziano,

Tente o seguinte :FRM_CHAPA_S

Att,

Link para comentar
Compartilhar em outros sites

  • 4 semanas depois...

  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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

Editado por cleziano
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  30
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  156
  • Conteúdo/Dia:  0.03
  • Reputação:   0
  • Pontos/Conquistas:  1.085
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  53

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

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  16
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  90
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  44

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.

Link para comentar
Compartilhar em outros sites

  • 1 mês depois...

  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  3
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  35
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

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

Link para comentar
Compartilhar em outros sites

  • 12 anos depois...

  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  41
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline

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.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  5
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  470
  • Conteúdo/Dia:  0.21
  • Reputação:   132
  • Pontos/Conquistas:  3.143
  • Conteúdo Resolvido:  0
  • Dias Ganho:  63
  • Status:  Offline
  • Idade:  35
  • Dispositivo:  Android

@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.

Link para comentar
Compartilhar em outros sites

  • 2 semanas depois...

  • Tópicos Que Criei:  1
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.01
  • Reputação:   1
  • Pontos/Conquistas:  41
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline

Foi isso mesmo que eu fiz aqui, acabou funcionando.

  • Like 1
Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

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

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.