- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- CALCULO DE BANCO DE HORAS
×
Linguagem de Programação ADVPL
Perguntas CALCULO DE BANCO DE HORAS
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
11 anos 4 meses atrás #15416
por will3698
CALCULO DE BANCO DE HORAS foi criado por will3698
Ola boa tarde .
estou customizando um relátorio de espelho de ponto(IMPESP) e não consigo entender o calculo feito pelo protheus para chegar a um total.
a customização consiste em somar todos os eventos proventos e deduzir disso, a soma de todos os eventos descontos. isso me retorna um valor x, MAS no protheus , o valor é maior, ex : 163,23 x 187,87
Já li algo sobre conversão de horas sexgesimal em centesimal, mas existem casos em que a diferença é grande , e acredito que isso nao seja o caso , mas enfim , se alguém souber como o protheus calcula o banco ....
andei analisando o fonte do relatorio de banco de horas , encontrei funções que só a totvs mesmo pra saber oque elas fazem # triste
estou customizando um relátorio de espelho de ponto(IMPESP) e não consigo entender o calculo feito pelo protheus para chegar a um total.
a customização consiste em somar todos os eventos proventos e deduzir disso, a soma de todos os eventos descontos. isso me retorna um valor x, MAS no protheus , o valor é maior, ex : 163,23 x 187,87
Já li algo sobre conversão de horas sexgesimal em centesimal, mas existem casos em que a diferença é grande , e acredito que isso nao seja o caso , mas enfim , se alguém souber como o protheus calcula o banco ....
andei analisando o fonte do relatorio de banco de horas , encontrei funções que só a totvs mesmo pra saber oque elas fazem # triste
Por favor Acessar ou Registrar para participar da conversa.
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
11 anos 4 meses atrás #15551
por will3698
Respondido por will3698 no tópico CALCULO DE BANCO DE HORAS
Ola amigos !
Consegui resolver aqui o problema via query.
por tentativa e erro acabei percebendo como funcionava o calculo . montei duas querys, uma vai somar somente a parte inteira do numero.
a outra vai somar somente a parte decimal .. sobre esta apliquei o calculo de nHoras/60*100
e no final somei o resultado das duas querys , e o total bateu com aquele que o protheus pratica..
tentei fazer via advpl , com a função [somahoras()], mas não consegui , pois meu conhecimento de advpl , é limitado , então o velho e bom ORACLE, me ajudou nessa.
segue o print da query no developer .
estarei postando o fonte corrigido na area de downloads . !
att
Consegui resolver aqui o problema via query.
por tentativa e erro acabei percebendo como funcionava o calculo . montei duas querys, uma vai somar somente a parte inteira do numero.
a outra vai somar somente a parte decimal .. sobre esta apliquei o calculo de nHoras/60*100
e no final somei o resultado das duas querys , e o total bateu com aquele que o protheus pratica..
tentei fazer via advpl , com a função [somahoras()], mas não consegui , pois meu conhecimento de advpl , é limitado , então o velho e bom ORACLE, me ajudou nessa.
segue o print da query no developer .
estarei postando o fonte corrigido na area de downloads . !
att
Por favor Acessar ou Registrar para participar da conversa.
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
11 anos 4 meses atrás #15554
por will3698
Respondido por will3698 no tópico CALCULO DE BANCO DE HORAS
Segue a mesma query, simplificada
SELECT (MAX(
(SELECT NVL(SUM((PI_QUANT)-TRUNC(PI_QUANT))/60*100,0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('045','023')
AND PI_FILIAL BETWEEN '01' AND '01') -
(SELECT NVL(SUM((PI_QUANT)-TRUNC(PI_QUANT))/60*100,0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('012','014','007','034','047','048','009','011','099','010','024')
AND PI_FILIAL BETWEEN '01' AND '01') +
(SELECT NVL(SUM(TRUNC(PI_QUANT)),0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('045','023')
AND PI_FILIAL BETWEEN '01' AND '01') -
(SELECT NVL(SUM(TRUNC(PI_QUANT)),0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('012','014','007','034','047','048','009','011','099','010','024')
AND PI_FILIAL BETWEEN '01' AND '01')
)) AS PI_QUANT from SPI010;
SELECT (MAX(
(SELECT NVL(SUM((PI_QUANT)-TRUNC(PI_QUANT))/60*100,0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('045','023')
AND PI_FILIAL BETWEEN '01' AND '01') -
(SELECT NVL(SUM((PI_QUANT)-TRUNC(PI_QUANT))/60*100,0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('012','014','007','034','047','048','009','011','099','010','024')
AND PI_FILIAL BETWEEN '01' AND '01') +
(SELECT NVL(SUM(TRUNC(PI_QUANT)),0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('045','023')
AND PI_FILIAL BETWEEN '01' AND '01') -
(SELECT NVL(SUM(TRUNC(PI_QUANT)),0)
FROM SPI010
WHERE (PI_MAT BETWEEN '001969' AND '001969')
AND D_E_L_E_T_ <> '*'
AND PI_PD IN ('012','014','007','034','047','048','009','011','099','010','024')
AND PI_FILIAL BETWEEN '01' AND '01')
)) AS PI_QUANT from SPI010;
Os seguintes usuário(s) disseram Obrigado: sidneyoa
Por favor Acessar ou Registrar para participar da conversa.
- sidneyoa
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 19
- Obrigados Recebidos: 0
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- CALCULO DE BANCO DE HORAS
Tempo para a criação da página:0.110 segundos