- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com relatório
×
Linguagem de Programação ADVPL
Perguntas Ajuda com relatório
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
11 anos 5 meses atrás #14860
por will3698
Ajuda com relatório foi criado por will3698
Ola boa tarde !
estou com um problema ao customizar um relatório ( ESPELHO DE PONTO ) , precisava colocar a informação de banco de horas do funcionário nesse relatório , para que o mesmo tivesse a informação ao assina-lo.
desenvolvi um script que funcionou perfeitamente quando é somente 1 funcionário no range.
mas quando é mais de 1 ele acumula o valor do banco de horas .
sou bem fraco em advpl, me viro um pouco no PL/SQL, não faço idéia de como vou fazer pro comando entender quando se tratar de um range , que o mesmo terá uma infomação diferente pra cada matricula .
segue a customização:
_cQuery :=" SELECT (MAX( "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '045') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '012') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '014') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '007') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '010'))) AS PI_QUANT from SPI010 "
TCQUERY _cQuery New Alias 'TRB'
DbSelectArea("TRB")
DbGoTop()
_cBanco := TRB->PI_QUANT
att
estou com um problema ao customizar um relatório ( ESPELHO DE PONTO ) , precisava colocar a informação de banco de horas do funcionário nesse relatório , para que o mesmo tivesse a informação ao assina-lo.
desenvolvi um script que funcionou perfeitamente quando é somente 1 funcionário no range.
mas quando é mais de 1 ele acumula o valor do banco de horas .
sou bem fraco em advpl, me viro um pouco no PL/SQL, não faço idéia de como vou fazer pro comando entender quando se tratar de um range , que o mesmo terá uma infomação diferente pra cada matricula .
segue a customização:
_cQuery :=" SELECT (MAX( "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '045') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '012') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '014') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '007') - "
_cQuery +=" (SELECT SUM(PI_QUANT) FROM SPI010 WHERE (PI_MAT BETWEEN '" + ALLTRIM(mv_par07) + "' AND '" + ALLTRIM(mv_par08) + "') AND D_E_L_E_T_ <> '*' AND PI_PD = '010'))) AS PI_QUANT from SPI010 "
TCQUERY _cQuery New Alias 'TRB'
DbSelectArea("TRB")
DbGoTop()
_cBanco := TRB->PI_QUANT
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 5 meses atrás - 11 anos 5 meses atrás #14865
por will3698
Respondido por will3698 no tópico Ajuda com relatório
Ola bom dia !
consegui resolver essa questão ...
ao invés de usar o mv_par que continha a sequência da matricula , eu utilizei o SRA->RA_MAT
que o próprio fonte usava em SRA->RA_MAT(INICIAL) + 1 ATÉ SRA->RA_MAT(FINAL), sendo assim , usei o proprio Looping do fonte pra me ajudar nessa . !
att
obs: Agora o funcionário ao assinar o espelho do seu ponto do periodo, vai ter a informação de quantas horas ele possuiu no Banco de Horas !
consegui resolver essa questão ...
ao invés de usar o mv_par que continha a sequência da matricula , eu utilizei o SRA->RA_MAT
que o próprio fonte usava em SRA->RA_MAT(INICIAL) + 1 ATÉ SRA->RA_MAT(FINAL), sendo assim , usei o proprio Looping do fonte pra me ajudar nessa . !
att
obs: Agora o funcionário ao assinar o espelho do seu ponto do periodo, vai ter a informação de quantas horas ele possuiu no Banco de Horas !
Ultima edição: 11 anos 5 meses atrás por will3698.
Por favor Acessar ou Registrar para participar da conversa.
- Sombra
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 593
- Obrigados Recebidos: 1
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
- will3698
- Autor do Tópico
- Desconectado
- Membro Dourado
Menos
Mais
- Postagens: 310
- Obrigados Recebidos: 1
11 anos 5 meses atrás #14868
por will3698
Respondido por will3698 no tópico Ajuda com relatório
acabei de Subir. tive que mexer na query, pois em casos específicos algum item da soma dos eventos estava vindo (null), o que fazia com que todo o calculo tivesse retorno (null), utilizei então a função NVL(), que resolveu o problema
Lembrando que cabe a cada um que for utilizar verificar os eventos listados na query, e adaptar aos eventos da sua base.
att
Lembrando que cabe a cada um que for utilizar verificar os eventos listados na query, e adaptar aos eventos da sua base.
att
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com relatório
Tempo para a criação da página:0.105 segundos