- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Duvida Relatório ADVPL - TReport
×
Linguagem de Programação ADVPL
Perguntas Duvida Relatório ADVPL - TReport
- henry.charriere
- Autor do Tópico
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 492
- Obrigados Recebidos: 0
11 anos 4 meses atrás #15121
por henry.charriere
Duvida Relatório ADVPL - TReport foi criado por henry.charriere
Pessoal, Boa Tarde! Estou com uma dúvida aqui na confecção de um rel.
Precisava fazer um somatório, mas não consegui com as funções do advpl/treport.
Tive que fazer um ajeito técnico. Só consegui fazer minha somatoria bater depois desse UNION ai em baixo.
Alguém sabe alguma forma de fazer isso elegantemente? Alguma forma de setar valores no rel. fazer o somatório?
SELECT %Exp:cAgreg%, SUM(Z16_QTNAT) Z16_QTNAT,
CASE WHEN SUM(Z16_QTNAT) = 0 THEN 0 ELSE SUM(Z16_PMNAT) / SUM(Z16_QTNAT) END AS Z16_PMNAT, SUM(Z16_QTENAT) Z16_QTENAT,
CASE WHEN SUM(Z16_QTENAT) = 0 THEN 0 ELSE SUM(Z16_PMEMB) / SUM(Z16_QTENAT) END AS Z16_PMEMB, SUM (Z16_QTLIQ) Z16_QTLIQ,
CASE WHEN SUM (Z16_QTLIQ) = 0 THEN 0 ELSE SUM(Z16_PMLIQ) / SUM(Z16_QTLIQ) END AS Z16_PMLIQ,
SUM(DCMDCO) AS DCMDCO,SUM(QTDEV) QTDEV,SUM(QTBONI) QTBONI,SUM(QTREP) QTREP,SUM(QTDBAGEM) QTDBAGEM,SUM(VLRDB) VLRDB, ISNULL(COUNT(DISTINCT CLIENTE), 0) CLIENTE
FROM (
SELECT UPPER(A3_NREDUZ) A3_NREDUZ, Z16_CAT, Z16_QTNAT, (Z16_QTNAT * Z16_PMNAT) Z16_PMNAT, Z16_QTENAT, (Z16_QTENAT * Z16_PMEMB) Z16_PMEMB, Z16_QTLIQ, (Z16_QTLIQ * Z16_PMLIQ) Z16_PMLIQ, DCMDCO, Z16_QTDEV QTDEV, Z16_QTBONI QTBONI, Z16_QTREP QTREP, Z16_DBAGEM QTDBAGEM, Z16_VLRDB VLRDB, (SELECT DISTINCT A1_COD FROM SA1010 WHERE A1_COD = Z16_CLIENT) CLIENTE
FROM FATMENSAL
INNER JOIN SA3010 ON Z16_VEND = A3_COD
INNER JOIN SX5010 ON X5_TABELA = 'A2' AND Z16_REGEST = X5_CHAVE AND X5_FILIAL = '01'
WHERE %Exp:cParam%
) B
GROUP BY %Exp:cAgreg%
UNION ALL
SELECT %Exp:cAgregSoma%, SUM(Z16_QTNAT) Z16_QTNAT,
CASE WHEN SUM(Z16_QTNAT) = 0 THEN 0 ELSE SUM(Z16_PMNAT) / SUM(Z16_QTNAT) END AS Z16_PMNAT, SUM(Z16_QTENAT) Z16_QTENAT,
CASE WHEN SUM(Z16_QTENAT) = 0 THEN 0 ELSE SUM(Z16_PMEMB) / SUM(Z16_QTENAT) END AS Z16_PMEMB, SUM (Z16_QTLIQ) Z16_QTLIQ,
CASE WHEN SUM (Z16_QTLIQ) = 0 THEN 0 ELSE SUM(Z16_PMLIQ) / SUM(Z16_QTLIQ) END AS Z16_PMLIQ,
SUM(DCMDCO) AS DCMDCO,SUM(QTDEV) QTDEV,SUM(QTBONI) QTBONI,SUM(QTREP) QTREP,SUM(QTDBAGEM) QTDBAGEM,SUM(VLRDB) VLRDB, ISNULL(COUNT(DISTINCT CLIENTE), 0) CLIENTE
FROM (
SELECT A3_NREDUZ, Z16_CAT, Z16_QTNAT, (Z16_QTNAT * Z16_PMNAT) Z16_PMNAT, Z16_QTENAT, (Z16_QTENAT * Z16_PMEMB) Z16_PMEMB, Z16_QTLIQ, (Z16_QTLIQ * Z16_PMLIQ) Z16_PMLIQ, DCMDCO, Z16_QTDEV QTDEV, Z16_QTBONI QTBONI, Z16_QTREP QTREP, Z16_DBAGEM QTDBAGEM, Z16_VLRDB VLRDB, (SELECT DISTINCT A1_COD FROM SA1010 WHERE A1_COD = Z16_CLIENT) CLIENTE
FROM FATMENSAL
INNER JOIN SA3010 ON Z16_VEND = A3_COD
INNER JOIN SX5010 ON X5_TABELA = 'A2' AND Z16_REGEST = X5_CHAVE AND X5_FILIAL = '01'
WHERE %Exp:cParam%
) B
ORDER BY A3_NREDUZ DESC
Precisava fazer um somatório, mas não consegui com as funções do advpl/treport.
Tive que fazer um ajeito técnico. Só consegui fazer minha somatoria bater depois desse UNION ai em baixo.
Alguém sabe alguma forma de fazer isso elegantemente? Alguma forma de setar valores no rel. fazer o somatório?
SELECT %Exp:cAgreg%, SUM(Z16_QTNAT) Z16_QTNAT,
CASE WHEN SUM(Z16_QTNAT) = 0 THEN 0 ELSE SUM(Z16_PMNAT) / SUM(Z16_QTNAT) END AS Z16_PMNAT, SUM(Z16_QTENAT) Z16_QTENAT,
CASE WHEN SUM(Z16_QTENAT) = 0 THEN 0 ELSE SUM(Z16_PMEMB) / SUM(Z16_QTENAT) END AS Z16_PMEMB, SUM (Z16_QTLIQ) Z16_QTLIQ,
CASE WHEN SUM (Z16_QTLIQ) = 0 THEN 0 ELSE SUM(Z16_PMLIQ) / SUM(Z16_QTLIQ) END AS Z16_PMLIQ,
SUM(DCMDCO) AS DCMDCO,SUM(QTDEV) QTDEV,SUM(QTBONI) QTBONI,SUM(QTREP) QTREP,SUM(QTDBAGEM) QTDBAGEM,SUM(VLRDB) VLRDB, ISNULL(COUNT(DISTINCT CLIENTE), 0) CLIENTE
FROM (
SELECT UPPER(A3_NREDUZ) A3_NREDUZ, Z16_CAT, Z16_QTNAT, (Z16_QTNAT * Z16_PMNAT) Z16_PMNAT, Z16_QTENAT, (Z16_QTENAT * Z16_PMEMB) Z16_PMEMB, Z16_QTLIQ, (Z16_QTLIQ * Z16_PMLIQ) Z16_PMLIQ, DCMDCO, Z16_QTDEV QTDEV, Z16_QTBONI QTBONI, Z16_QTREP QTREP, Z16_DBAGEM QTDBAGEM, Z16_VLRDB VLRDB, (SELECT DISTINCT A1_COD FROM SA1010 WHERE A1_COD = Z16_CLIENT) CLIENTE
FROM FATMENSAL
INNER JOIN SA3010 ON Z16_VEND = A3_COD
INNER JOIN SX5010 ON X5_TABELA = 'A2' AND Z16_REGEST = X5_CHAVE AND X5_FILIAL = '01'
WHERE %Exp:cParam%
) B
GROUP BY %Exp:cAgreg%
UNION ALL
SELECT %Exp:cAgregSoma%, SUM(Z16_QTNAT) Z16_QTNAT,
CASE WHEN SUM(Z16_QTNAT) = 0 THEN 0 ELSE SUM(Z16_PMNAT) / SUM(Z16_QTNAT) END AS Z16_PMNAT, SUM(Z16_QTENAT) Z16_QTENAT,
CASE WHEN SUM(Z16_QTENAT) = 0 THEN 0 ELSE SUM(Z16_PMEMB) / SUM(Z16_QTENAT) END AS Z16_PMEMB, SUM (Z16_QTLIQ) Z16_QTLIQ,
CASE WHEN SUM (Z16_QTLIQ) = 0 THEN 0 ELSE SUM(Z16_PMLIQ) / SUM(Z16_QTLIQ) END AS Z16_PMLIQ,
SUM(DCMDCO) AS DCMDCO,SUM(QTDEV) QTDEV,SUM(QTBONI) QTBONI,SUM(QTREP) QTREP,SUM(QTDBAGEM) QTDBAGEM,SUM(VLRDB) VLRDB, ISNULL(COUNT(DISTINCT CLIENTE), 0) CLIENTE
FROM (
SELECT A3_NREDUZ, Z16_CAT, Z16_QTNAT, (Z16_QTNAT * Z16_PMNAT) Z16_PMNAT, Z16_QTENAT, (Z16_QTENAT * Z16_PMEMB) Z16_PMEMB, Z16_QTLIQ, (Z16_QTLIQ * Z16_PMLIQ) Z16_PMLIQ, DCMDCO, Z16_QTDEV QTDEV, Z16_QTBONI QTBONI, Z16_QTREP QTREP, Z16_DBAGEM QTDBAGEM, Z16_VLRDB VLRDB, (SELECT DISTINCT A1_COD FROM SA1010 WHERE A1_COD = Z16_CLIENT) CLIENTE
FROM FATMENSAL
INNER JOIN SA3010 ON Z16_VEND = A3_COD
INNER JOIN SX5010 ON X5_TABELA = 'A2' AND Z16_REGEST = X5_CHAVE AND X5_FILIAL = '01'
WHERE %Exp:cParam%
) B
ORDER BY A3_NREDUZ DESC
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Duvida Relatório ADVPL - TReport
Tempo para a criação da página:0.096 segundos