Rotina que popula dados em um arquivo do Excel através do Protheus. Tutorial de como usar: Integração do Protheus com Excel – populando arquivos Vídeo Tutorial de como usar: Logs de Atualização: GitHub: github.com/dan-atilio/zExcelXML Versão Data Observação Download 1.0 07/09/2015 Criação do projeto Clique Aqui
Importação de Tabelas no Protheus de forma Genérica. Tutorial de como usar: Carga Dados Genéricos no Protheus Vídeo Tutorial de como usar: Logs de Atualização: GitHub: github.com/dan-atilio/zCargaGen Versão Data Observação Download 1.0 25/10/2015 Criação do projeto, com a importação dos cadastros: 01 - MATA070 - SA6 - Bancos 02 -…
Aplicativo desenvolvido em Java para realizar a troca de RPO no Protheus. Tutorial de como usar: Como fazer uma compilação a quente no Protheus (Troca de RPO) Vídeo Tutorial de como usar: Logs de Atualização: GitHub: github.com/dan-atilio/PChangeRPO Versão Data Observação Download 1.2 - Aplicativo 23/04/2022 Executável do Aplicativo…
Com 18 comentários
29 de janeiro de 2017
Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.
Boa tarde, estou com duvida na ferramenta, se puder esclarecer melhor agradeço.
Fiz uma consulta SQL usando seu exemplo e usei o grupo de parâmetro MTR080 (já existente do protheus)
SELECT *
FROM SB1010
WHERE B1_COD >= ‘ ‘ AND B1_COD <= 'ZZZ'
Compilei e fui na rotina pra gerar o relatório, ele carregou os parâmetros corretamente. Informei no parâmetro produto De 000008, Produto Até 000008 pois só quero esse produto, mas quando exporto para Excel aparece todos os produtos, ou seja, não obedeceu o parâmetro.
Boa tarde, Dan_Atilio
Obrigado pelo retorno.
Então mesmo colocando o grupo de perguntas na rotina, depois editar o fonte e colocar os parâmetros pra cada pergunta, por exemplo se tiver pergunta do parâmetro de data emissão, devo fazer a mesma coisa por exemplo no D1_EMISSAO colocando o parâmetro no fonte assim com no B1_COD, correto?
Bom dia Marcello, tudo bem?
Sim, você deve colocar, lembrando que se o parâmetro não for do tipo Caracter, você tem que usar funções de conversão para concatenar com a string, por exemplo, dToS para parâmetros de data.
Abraços.
Boa noite Wagner, tudo bem?
Existe forma sim, porém nesse aplicativo, ele gera apenas de uma seção. O que você pode fazer, é gerar dois relatórios e ir comparando e adicionar a outra seção a seu relatório.
Irei anotar, para uma possível atualização, eu adicionar duas seções no aplicativo.
Abraços.
Grande Wagner, tudo bem?
Rapaz, primeiramente muito obrigado pelo contato e por apreciar o Ti.
Você já tentou gerar o relatório do Excel em formato Tabela?
Existe um combo em que você define o tipo de Planilha, faça um teste com o tipo Tabela.
Abraços.
Alguem saberia deixar o cabeçalho das células somente na primeira página quando o relatório é gerado em excel? Quando gero ele adiciona uma linha com o cabeçalho das células na quebra de página.
Boa noite Wagner, tudo bem?
Acho que você pode realizar dois testes.
1- Gerar o relatório do Excel com o formato tabela, existe um combo na tela do TReport que você define o tipo de planilha Excel que será gerada, tente colocar o tipo Tabela;
2- Você pode tentar alterar o atributo lXlsHeader do seu objeto do TReport, por exemplo, oReport:lXlsHeader := .F. (essa operação nunca testei);
Qualquer dúvida, fico à disposição.
Abraços.
Boa noite Wagner, tudo bem?
Fiz uma há muito tempo, nem utilizei o SchedDef, utilizei o RPCSetEnv.
Abaixo o exemplo que fiz (só a user function que está chamando, sem a criação do TReport, que geralmente faço no fReportDef).
+ Expandir Código (Duplo Clique para Selecionar tudo)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
User Function zRAuto()
Local aArea := GetArea()
Local oReport
Local cPara := ""
Private cPerg := "X_ZRAUTO"
ConOut("> [zRAuto] Início às "+Time()+"!")
//Se o dicionário não tiver aberto, faz a conexão para a empresa e filial 01
If Select("SX2") == 0
RPCSetEnv("01", "01", "", "", "", "", {})
EndIf
Pergunte(cPerg, .F.)
MV_PAR01 := dDataBase //Data De
MV_PAR02 := dDataBase //Data Até
cPara := "teste@teste.com.br"
//Definindo e disparando o TReport
oReport := fReportDef()
oReport:nRemoteType := NO_REMOTE //Aponta de que forma o Server está gerando o relatório. Opções: 1-Sem Remote, 2-Remote Delphi,3-Remote Windows e 4-Remote Linux
oReport:cEmail := cPara
oReport:nDevice := 3 //1-Arquivo,2-Impressora,3-email,4-Planilha e 5-Html
Boa tarde, compilei o fonte porem mesmo chamando a função nao abre, verifiquei no inspetor de objeto e não esta la tambem, sabe oque pode ser ? estou usando o p11.8
Primeiro quero agradecer pela iniciativa, está ótimo o post.
Eu editei o fonte e após informar os parâmetros de 01/05/2017 até 31/05/2017, o sistema mostra barra de status do andamento… mas está bem longe de finalizar… tanto que eu tenho que derrubar o usuário.. é como se tivesse colocado um período bem maior no parâmetro…
O que está errado?
Então Marcello, foi aquilo que provavelmente você me mandou no e-Mail.
Estava com um comentário no meio do trecho ( — ). Através disso, quando se usa o ChangeQuery e ele tira os -Enters-, ficou numa linha só, invalidando o resto do seu Where.
Abraços.
Bom dia Dan, parabéns por compartilhar seu fonte me ajudou bastante,
sou novato em advpl e estou com uma dúvida, como faço para totalizar um campo por agrupamento ?
Att, Túlio
Boa noite Túlio, tudo bem?
Não entendi muito bem a dúvida, mas você pode criar TRFunctions que totalizam, e você pode passar qual é a célula, e inclusive qual é a quebra, caso queira totalizar pela quebra.
Abaixo os parâmetros do método New, que eu conheço:
oCell – Objeto da classe TRCell que o totalizador se refere
cName – Identificação do totalizador
cFunction – Função que será utilizada pelo totalizador. Exemplo: SUM, COUNT, MAX, MIN
oBreak – Objeto da classe TRBreak que define em qual quebra o totalizador será impresso
cTitle – Título do totalizador. Se não informado será utilizado o título da célula que o totalizador se refere
cPicture – Máscara de impressão do totalizador. Se não informado será utilizado a máscara da célula que o totalizador se refere
uFormula – Tipo Caracter: Expressão ADVPL para macro execução. Tipo Bloco de código: Bloco de Código com a expressão ADVPL para execução
lEndSection – Se verdadeiro. Indica se totalizador será impresso na quebra de seção
lEndReport – Se verdadeiro. Indica se totalizador será impresso no final do relatório
lEndPage – Se verdadeiro. Indica se totalizador será impresso no final de cada página
oParent – Objeto da classe TRSection que o totalizador se refere
bCondition – Bloco de código com a condição de atualização dos valores do totalizador
lDisable – Se verdadeiro. Define que não irá atualizar os valores do totalizador
bCanPrint – Bloco de código com a condição de impressão dos valores do totalizador
Bom dia Fernando, tudo bem?
Infelizmente não, talvez futuramente seja adaptado para fazer.
Mas como o código é open source, caso você necessite, pode dar uma alterada também.
Um grande abraço.
Boa noite Gilson, tudo bem?
Ali no corpo da página tem a parte de Download, está escrito “Clique Aqui”, é o código fonte que disponibilizo.
Um grande abraço.
Amigo meus parabéns excelente ajuda para todos, eu particularmente nunca me dei bem com os desenvolvimentos padrões do Protheus, utilizava o Ireports antes mas era muito trabalhoso configurar. você tem algum modelo no qual é possível fazer cabeçalhos roda-pés ?
Boa tarde Lucas, tudo bem?
Esse outro tipo de relatório deve ser feito com FWMSPrinter, se quiser, me adicione no Skype, que te ajudo a montar.
Um grande abraço.
Consegui compilar o fonte e montar um relatório.
Porém, percebo que quando executo a consulta diretamente no SQL SERVER, me informa um valor diferente de quando eu gero o relatório criado.
Boa tarde
Primeiramente quero parabenizar pela ferramenta, sou novo em advpl e está me ajudando a criar diversos relatórios.
Não estou conseguindo exibir uma data no relatório no formato dd/mm/aaaa.
Obrigado
+-, você teria que tratar no while da impressão. A ideia seria +- assim:
1. Criar uma variável de controle, que a cada vez que o laço passar, verificar, se mudar os dados, atualizar a variável (por exemplo matrícula)
2. Ao alterar a variável, dar um setPrint nas células para que possa ser feita a impressão
3. Se a variável for igual ao conteúdo, dar um setPrint com textos “” para sair a impressão vazia
Caso tenha dúvidas, pode nos mandar email ou entrar no nosso fórum no Discord que nós ajudamos.
Grande abraço.
Boa noite jovem.
No caso, eu nunca precisei usar código de barras em TReport, mas você pode verificar se tem algum método para imprimir. https://tdn.totvs.com/display/public/PROT/TReport
Grande abraço.
Você tem duas opções, quebrar manualmente no seu while, ou o primeiro registro, você faz um select fantasma dele, apenas para o TReport enxergar e fazer a quebra.
Boa tarde,
Primeiramente parabéns pela ferramenta, têm-me sido muito útil!
Uma dúvida, ela está preparada para a 27 do Protheus com dicionário no banco?
Obrigado.
Giancarlo
Primeiramente muito obrigado.. baita ferramenta.. ainda mais pra mim que estou começando no ADVPL
Uma dúvida. Tem como eu colocar o nome de uma coluna variável? Por exemplo… quero fazer um relatório pegando os ultimos 12 meses… e 12 colunas teria que ficar com o nome da coluna teria q ficar o mês e ano…, tentei somente mudando ali no TRCell colocando o função de data atual mas não deu..
EX: TRCell():New(oSectDad, “A1_QTD”, “QRY_AUX”, MONTH(DATE()), /Picture/, 15…..
Boa tarde Diego, tudo bem?
Obrigado pelo feedback.
Até dá, existem duas formas, a mais fácil, seria mostrar uma tela de parâmetros com ParamBox, antes da chamada do ReportDef, e aí você conseguiria setar o nome das colunas com os meses.
A outra forma, você teria que pegar o objeto da célula e alterar o title dela, mas como você comentou que está iniciando, tente a primeira alternativa.
Qualquer dúvida, fico à disposição.
Olá, tudo certo com vocês? essa é minha primeira interação por aqui, estou com um pouco de dúvidas no quesito perguntas, sei que foi a primeira coisa a ser respondida porém eu sou novo no Protheus, eu tenho um grupo de perguntas já, eu preciso colocar ele na query que vai no fonte? ou devo alterar o fonte posteriormente e inserir?
se precisar ser na query eu vou precisar fazer um relatório de tipo de baixa, especifica pra um titulo, segue query:
select E5_FILIAL,
E5_DATA,
e5_tipo,
e5_prefixo,
e5_numero,
e5_parcela,
(case when E5_TIPO’NCC’ then E5_VALOR else -E5_VALOR end) AS DACAO
from SE5000 SE5
WHERE SE5.D_E_L_E_T_=”
AND E5_DATA between ‘20210801’ and ‘20210831’
AND E5_RECPAG=’R’
AND E5_MOTBX= ‘DAC’
AND E5_SITUACA’C’
Bom dia Tiago, tudo sim graças a Deus e você?
No caso, você aciona a sua pergunta através da função Pergunte() antes do relatório ser gerado.
Ai dentro da sua query, você concatena os parâmetros, por exemplo, se tiver o parâmetro de data de/até, e eles forem os parâmetros MV_PAR01 e MV_PAR02 respectivamente, sua query nesse trecho ficaria:
cQuery += “AND E5_DATA between ‘” + dToS(MV_PAR01) + “‘ and ‘” + dToS(MV_PAR02) + “‘ ”
No caso, se quiser também, utilize o Autumn, nele é possível você usar seus parâmetros, veja um vídeo – https://youtu.be/thfA89QPFos
Usamos cookies e outras tecnologias semelhantes para melhorar a sua experiência em nosso site. Ao continuar navegando, você concorda com o uso destes cookies. Leia nossa Política de Privacidade e Cookies para saber mais.Ok
Como faço na query para colocar um grupo de pergunta já criado?
Tenho que filtrar uma data porém não estou conseguindo fazer
Boa noite Wagner, tudo bem?
Primeiramente, prepare a consulta SQL, por exemplo:
SELECT
*
FROM
SB1010
WHERE
B1_COD >=
' '
AND
B1_COD <=
'ZZZ'
Ao gerar o código, ele terá as linhas que você pode editar, então edite a linha conforme os parâmetros que você tem, por exemplo.
cQryAux +=
" WHERE B1_COD >= ' ' AND B1_COD <= 'ZZZ' "
+ STR_PULA
Após isso, altere conforme os parâmetros que você tem.
cQryAux +=
" WHERE B1_COD >= '"
+MV_PAR01+
"' AND B1_COD <= '"
+MV_PAR02+
"' "
+ STR_PULA
Caso queira, no fonte já é criado a variável cPerg, ai você pode colocar uma pergunta que você já tem criada na SX1.
Private cPerg :=
"SUA_PERGUNTA"
Espero ter ajudado.
Abraços.
Boa tarde, estou com duvida na ferramenta, se puder esclarecer melhor agradeço.
Fiz uma consulta SQL usando seu exemplo e usei o grupo de parâmetro MTR080 (já existente do protheus)
SELECT *
FROM SB1010
WHERE B1_COD >= ‘ ‘ AND B1_COD <= 'ZZZ'
Compilei e fui na rotina pra gerar o relatório, ele carregou os parâmetros corretamente. Informei no parâmetro produto De 000008, Produto Até 000008 pois só quero esse produto, mas quando exporto para Excel aparece todos os produtos, ou seja, não obedeceu o parâmetro.
Estou fazendo alguma coisa errada?
Bom dia Marcello, tudo bem?
Após gerar o fonte, vc vai ter que alterar o seu filtro, por exemplo, o fonte gerado vai ter esse trecho:
cQuery +=
" WHERE B1_COD >= ' ' AND B1_COD <= 'ZZZ' "
Ai você terá que editar e colocar os seus parâmetros (verifique qual MV_PAR é o produto de/até):
cQuery +=
" WHERE B1_COD >= '"
+MV_PAR01+
"' AND B1_COD <= '"
+MV_PAR02+
"' "
Abraços.
Boa tarde, Dan_Atilio
Obrigado pelo retorno.
Então mesmo colocando o grupo de perguntas na rotina, depois editar o fonte e colocar os parâmetros pra cada pergunta, por exemplo se tiver pergunta do parâmetro de data emissão, devo fazer a mesma coisa por exemplo no D1_EMISSAO colocando o parâmetro no fonte assim com no B1_COD, correto?
Bom dia Marcello, tudo bem?
Sim, você deve colocar, lembrando que se o parâmetro não for do tipo Caracter, você tem que usar funções de conversão para concatenar com a string, por exemplo, dToS para parâmetros de data.
Abraços.
Tudo certo, fiz o teste e funcionou. muito obrigado!!
Bom dia Dan,
Teria alguma forma de eu criar um relatório com duas sessoes?
Quando coloco dois selects o programa tá juntando tudo.
Muito obrigado pela sua atenção.
Boa noite Wagner, tudo bem?
Existe forma sim, porém nesse aplicativo, ele gera apenas de uma seção. O que você pode fazer, é gerar dois relatórios e ir comparando e adicionar a outra seção a seu relatório.
Irei anotar, para uma possível atualização, eu adicionar duas seções no aplicativo.
Abraços.
Bom dia Dan,
Tem algum exemplo para me passar??
To ate hoje quebrando a cabeça e procurando soluções para isso.
Então Wagner, pretendo voltar com as vídeo aulas ainda em Junho, e algumas com foco em TReport.
Fique ligado nas novidades.
Um grande abraço.
Fala Dan,
Houve alguma alteração no programa que você tenha feito para criar as 2 sessoes?
Obrigado
Boa noite Wagner, tudo bem?
Infelizmente não, não estou tendo tempo para mexer =/.
Se eu atualizar, pode ficar tranquilo que te aviso.
Abraços.
Olá Dan,
Olha eu apurrinhando aqui de novo. rsrsrs
Estou pesquisando como faço para tirar a d.ref, hora e emissão do relatório.
Quando gero no excel ele vem no inicio com essas informações, mas nao consigo tirar.
Me da um help.
Mais uma vez muiiiiito obrigado e parabens pelo site, está cada dia melhor.
Grande Wagner, tudo bem?
Rapaz, primeiramente muito obrigado pelo contato e por apreciar o Ti.
Você já tentou gerar o relatório do Excel em formato Tabela?
Existe um combo em que você define o tipo de Planilha, faça um teste com o tipo Tabela.
Abraços.
Alguem saberia deixar o cabeçalho das células somente na primeira página quando o relatório é gerado em excel? Quando gero ele adiciona uma linha com o cabeçalho das células na quebra de página.
Boa noite Wagner, tudo bem?
Acho que você pode realizar dois testes.
1- Gerar o relatório do Excel com o formato tabela, existe um combo na tela do TReport que você define o tipo de planilha Excel que será gerada, tente colocar o tipo Tabela;
2- Você pode tentar alterar o atributo lXlsHeader do seu objeto do TReport, por exemplo, oReport:lXlsHeader := .F. (essa operação nunca testei);
Qualquer dúvida, fico à disposição.
Abraços.
Bom dia Dan,
Você teria algum exemplo do programa funcionando junto com o schedule.
Tenho que enviar de forma automatica mas não estou conseguindo acrescentar o schedule no fonte.
Boa noite Wagner, tudo bem?
Fiz uma há muito tempo, nem utilizei o SchedDef, utilizei o RPCSetEnv.
Abaixo o exemplo que fiz (só a user function que está chamando, sem a criação do TReport, que geralmente faço no fReportDef).
User Function zRAuto()
Local aArea := GetArea()
Local oReport
Local cPara :=
""
Private cPerg :=
"X_ZRAUTO"
ConOut(
"> [zRAuto] Início às "
+Time()+
"!"
)
//Se o dicionário não tiver aberto, faz a conexão para a empresa e filial 01
If Select(
"SX2"
) == 0
RPCSetEnv(
"01"
,
"01"
,
""
,
""
,
""
,
""
, {})
EndIf
Pergunte(cPerg, .F.)
MV_PAR01 := dDataBase
//Data De
MV_PAR02 := dDataBase
//Data Até
cPara :=
"teste@teste.com.br"
//Definindo e disparando o TReport
oReport := fReportDef()
oReport:nRemoteType := NO_REMOTE
//Aponta de que forma o Server está gerando o relatório. Opções: 1-Sem Remote, 2-Remote Delphi,3-Remote Windows e 4-Remote Linux
oReport:cEmail := cPara
oReport:nDevice := 3
//1-Arquivo,2-Impressora,3-email,4-Planilha e 5-Html
oReport:SetPreview(.F.)
oReport:Print(.F.,
""
, .T.)
ConOut(
"> [zRAuto] Término às "
+Time()+
"!"
)
RestArea(aArea)
Return
Abraços.
Boa tarde, compilei o fonte porem mesmo chamando a função nao abre, verifiquei no inspetor de objeto e não esta la tambem, sabe oque pode ser ? estou usando o p11.8
Boa tarde Paulo, tudo bem?
Rapaz, nunca vi isso não, ele deu algum erro de compilação?
Dan_Atilio, boa tarde
Primeiro quero agradecer pela iniciativa, está ótimo o post.
Eu editei o fonte e após informar os parâmetros de 01/05/2017 até 31/05/2017, o sistema mostra barra de status do andamento… mas está bem longe de finalizar… tanto que eu tenho que derrubar o usuário.. é como se tivesse colocado um período bem maior no parâmetro…
O que está errado?
segue trecho do fonte.
//Montando consulta de dados
cQryAux := “”
cQryAux += “SELECT D2_FILIAL, D2_CLIENTE, D2_ITEM, D2_SERIE, D2_CF, D2_DOC, D2_EMISSAO, D2_COD, B1_COD, D2_QUANT, D2_PRCVEN, D2_TOTAL, D2_TIPO, D2_TP, D2_CONTA, B1_BASE3, A1_GRPTRIB” + STR_PULA
cQryAux += “FROM SD2010 A” + STR_PULA
cQryAux += “INNER JOIN SB1010 B” + STR_PULA
cQryAux += “ON A.D2_COD = B.B1_COD” + STR_PULA
cQryAux += “AND A.D2_FILIAL = B.B1_FILIAL” + STR_PULA
cQryAux += “INNER JOIN SA1010 C” + STR_PULA
cQryAux += “ON A.D2_CLIENTE = C.A1_COD” + STR_PULA
cQryAux += “AND A.D2_LOJA = C.A1_LOJA” + STR_PULA
cQryAux += “–AND A.D2_FILIAL = C.A1_FILIAL” + STR_PULA
cQryAux += “WHERE A.D_E_L_E_T_ = ” AND B.D_E_L_E_T_ = ”” + STR_PULA
cQryAux += “AND D2_EMISSAO >= ‘”+Dtos(MV_PAR01)+”‘” + STR_PULA
cQryAux += “AND D2_EMISSAO = ‘”+MV_PAR03+”‘” + STR_PULA
cQryAux += “AND D2_CF = ‘”+MV_PAR05+”‘” + STR_PULA
cQryAux += “AND D2_FILIAL <= '"+MV_PAR06+"' " + STR_PULA
cQryAux := ChangeQuery(cQryAux)
Alterado para:
cQryAux += “SELECT D2_FILIAL, D2_CLIENTE, D2_ITEM, D2_SERIE, D2_CF, D2_DOC, D2_EMISSAO, D2_COD, B1_COD, D2_QUANT, D2_PRCVEN, D2_TOTAL, D2_TIPO, D2_TP, D2_CONTA, B1_BASE3, A1_GRPTRIB” + STR_PULA
cQryAux += “FROM SD2010 A” + STR_PULA
cQryAux += “INNER JOIN SB1010 B” + STR_PULA
cQryAux += “ON A.D2_COD = B.B1_COD” + STR_PULA
cQryAux += “AND A.D2_FILIAL = B.B1_FILIAL” + STR_PULA
cQryAux += “INNER JOIN SA1010 C” + STR_PULA
cQryAux += “ON A.D2_CLIENTE = C.A1_COD” + STR_PULA
cQryAux += “AND A.D2_LOJA = C.A1_LOJA” + STR_PULA
cQryAux += “–AND A.D2_FILIAL = C.A1_FILIAL” + STR_PULA
cQryAux += “WHERE A.D_E_L_E_T_ = ” AND B.D_E_L_E_T_ = ”” + STR_PULA
cQryAux += “AND D2_EMISSAO >= ‘”+Dtos(MV_PAR01)+”‘” + STR_PULA
cQryAux += “AND D2_EMISSAO = ‘”+MV_PAR03+”‘” + STR_PULA
cQryAux += “AND D2_CF = ‘”+MV_PAR05+”‘” + STR_PULA
cQryAux += “AND D2_FILIAL <= '"+MV_PAR06+"' " + STR_PULA
Então Marcello, foi aquilo que provavelmente você me mandou no e-Mail.
Estava com um comentário no meio do trecho ( — ). Através disso, quando se usa o ChangeQuery e ele tira os -Enters-, ficou numa linha só, invalidando o resto do seu Where.
Abraços.
Bom dia Dan, parabéns por compartilhar seu fonte me ajudou bastante,
sou novato em advpl e estou com uma dúvida, como faço para totalizar um campo por agrupamento ?
Att, Túlio
Boa noite Túlio, tudo bem?
Não entendi muito bem a dúvida, mas você pode criar TRFunctions que totalizam, e você pode passar qual é a célula, e inclusive qual é a quebra, caso queira totalizar pela quebra.
Abaixo os parâmetros do método New, que eu conheço:
oCell – Objeto da classe TRCell que o totalizador se refere
cName – Identificação do totalizador
cFunction – Função que será utilizada pelo totalizador. Exemplo: SUM, COUNT, MAX, MIN
oBreak – Objeto da classe TRBreak que define em qual quebra o totalizador será impresso
cTitle – Título do totalizador. Se não informado será utilizado o título da célula que o totalizador se refere
cPicture – Máscara de impressão do totalizador. Se não informado será utilizado a máscara da célula que o totalizador se refere
uFormula – Tipo Caracter: Expressão ADVPL para macro execução. Tipo Bloco de código: Bloco de Código com a expressão ADVPL para execução
lEndSection – Se verdadeiro. Indica se totalizador será impresso na quebra de seção
lEndReport – Se verdadeiro. Indica se totalizador será impresso no final do relatório
lEndPage – Se verdadeiro. Indica se totalizador será impresso no final de cada página
oParent – Objeto da classe TRSection que o totalizador se refere
bCondition – Bloco de código com a condição de atualização dos valores do totalizador
lDisable – Se verdadeiro. Define que não irá atualizar os valores do totalizador
bCanPrint – Bloco de código com a condição de impressão dos valores do totalizador
Espero ter ajudado.
Abraços.
Ele faz para duas sessão?
Bom dia Fernando, tudo bem?
Infelizmente não, talvez futuramente seja adaptado para fazer.
Mas como o código é open source, caso você necessite, pode dar uma alterada também.
Um grande abraço.
Ele funciona na versão 12 ?
Boa noite Henrique.
É para funcionar sim, deu algum erro?
Bom dia,
Dan,
você tem este fonte para disponibilizar? Zreport ?
Atenciosamente,
Boa noite Gilson, tudo bem?
Ali no corpo da página tem a parte de Download, está escrito “Clique Aqui”, é o código fonte que disponibilizo.
Um grande abraço.
Fantástica ferramenta. Recomendo. Muito fácil de usar e relatórios prontos em menos de 10 min.
Boa noite Godoy.
Obrigado jovem.
Um grande abraço.
Show em Atilio.
Parabéns.
Obrigado Pedroso san.
Um grande abraço.
Amigo meus parabéns excelente ajuda para todos, eu particularmente nunca me dei bem com os desenvolvimentos padrões do Protheus, utilizava o Ireports antes mas era muito trabalhoso configurar. você tem algum modelo no qual é possível fazer cabeçalhos roda-pés ?
Boa tarde Lucas, tudo bem?
Esse outro tipo de relatório deve ser feito com FWMSPrinter, se quiser, me adicione no Skype, que te ajudo a montar.
Um grande abraço.
Amigo, boa tarde!
Consegui compilar o fonte e montar um relatório.
Porém, percebo que quando executo a consulta diretamente no SQL SERVER, me informa um valor diferente de quando eu gero o relatório criado.
Bom dia.
Pode ser o ChangeQuery, comente essa linha. Se por acaso continuar, gere a consulta debugando e compare com o seu SQL.
Um grande abraço.
Boa tarde
Primeiramente quero parabenizar pela ferramenta, sou novo em advpl e está me ajudando a criar diversos relatórios.
Não estou conseguindo exibir uma data no relatório no formato dd/mm/aaaa.
Obrigado
Boa noite Elisandro, tudo bem?
Utilize a função TCSetField – https://terminaldeinformacao.com/knowledgebase/tcsetfield/
Um grande abraço.
Como dar cor ao totalizador?
Até onde sei, ele herda da célula (TRCell). Pode ser que criaram algum método novo, mas desconheço e também não tem no TDN.
sensacional !! muito bom
Obrigado pelo comentário jovem.
Abraços.
pessoal, tem alguma forma de colocar uma condicao no relatorio feito no Zreport para ficar conforme imagem no link ?
https://drive.google.com/open?id=1HdVQ1g9HHHe8ntO-kiJ44fXNL5c2es-e
+-, você teria que tratar no while da impressão. A ideia seria +- assim:
1. Criar uma variável de controle, que a cada vez que o laço passar, verificar, se mudar os dados, atualizar a variável (por exemplo matrícula)
2. Ao alterar a variável, dar um setPrint nas células para que possa ser feita a impressão
3. Se a variável for igual ao conteúdo, dar um setPrint com textos “” para sair a impressão vazia
Caso tenha dúvidas, pode nos mandar email ou entrar no nosso fórum no Discord que nós ajudamos.
Grande abraço.
Top Daniel;
Teria como colocar um campo em formato de códigos de barras?
Abraço
Boa noite jovem.
No caso, eu nunca precisei usar código de barras em TReport, mas você pode verificar se tem algum método para imprimir.
https://tdn.totvs.com/display/public/PROT/TReport
Grande abraço.
Ótimo exemplo! Como faz para a quebra de seção seja antes do primeiro registro? Só vai a partir do seguindo registro da seção!
Você tem duas opções, quebrar manualmente no seu while, ou o primeiro registro, você faz um select fantasma dele, apenas para o TReport enxergar e fazer a quebra.
Boa tarde,
Primeiramente parabéns pela ferramenta, têm-me sido muito útil!
Uma dúvida, ela está preparada para a 27 do Protheus com dicionário no banco?
Obrigado.
Giancarlo
Bom dia.
Obrigado pelo feedback. Para o dicionário no Banco não, ai você pode tentar adaptar usando a OpenSXs: https://terminaldeinformacao.com/knowledgebase/opensxs/
Ou se quiser, utilize o Autumn Code Maker, que além de relatórios, ele também gera telas de cadastro: https://youtu.be/thfA89QPFos
Primeiramente muito obrigado.. baita ferramenta.. ainda mais pra mim que estou começando no ADVPL
Uma dúvida. Tem como eu colocar o nome de uma coluna variável? Por exemplo… quero fazer um relatório pegando os ultimos 12 meses… e 12 colunas teria que ficar com o nome da coluna teria q ficar o mês e ano…, tentei somente mudando ali no TRCell colocando o função de data atual mas não deu..
EX: TRCell():New(oSectDad, “A1_QTD”, “QRY_AUX”, MONTH(DATE()), /Picture/, 15…..
Boa tarde Diego, tudo bem?
Obrigado pelo feedback.
Até dá, existem duas formas, a mais fácil, seria mostrar uma tela de parâmetros com ParamBox, antes da chamada do ReportDef, e aí você conseguiria setar o nome das colunas com os meses.
A outra forma, você teria que pegar o objeto da célula e alterar o title dela, mas como você comentou que está iniciando, tente a primeira alternativa.
Qualquer dúvida, fico à disposição.
Estamos 2021 e esse fonte não envelheceu, segue ajudando em novos relatórios.
Muito obrigado
Opa, eu que agradeço o comentário Lucas.
Grande abraço.
Olá, tudo certo com vocês? essa é minha primeira interação por aqui, estou com um pouco de dúvidas no quesito perguntas, sei que foi a primeira coisa a ser respondida porém eu sou novo no Protheus, eu tenho um grupo de perguntas já, eu preciso colocar ele na query que vai no fonte? ou devo alterar o fonte posteriormente e inserir?
se precisar ser na query eu vou precisar fazer um relatório de tipo de baixa, especifica pra um titulo, segue query:
select E5_FILIAL,
E5_DATA,
e5_tipo,
e5_prefixo,
e5_numero,
e5_parcela,
(case when E5_TIPO’NCC’ then E5_VALOR else -E5_VALOR end) AS DACAO
from SE5000 SE5
WHERE SE5.D_E_L_E_T_=”
AND E5_DATA between ‘20210801’ and ‘20210831’
AND E5_RECPAG=’R’
AND E5_MOTBX= ‘DAC’
AND E5_SITUACA’C’
Bom dia Tiago, tudo sim graças a Deus e você?
No caso, você aciona a sua pergunta através da função Pergunte() antes do relatório ser gerado.
Ai dentro da sua query, você concatena os parâmetros, por exemplo, se tiver o parâmetro de data de/até, e eles forem os parâmetros MV_PAR01 e MV_PAR02 respectivamente, sua query nesse trecho ficaria:
cQuery += “AND E5_DATA between ‘” + dToS(MV_PAR01) + “‘ and ‘” + dToS(MV_PAR02) + “‘ ”
No caso, se quiser também, utilize o Autumn, nele é possível você usar seus parâmetros, veja um vídeo – https://youtu.be/thfA89QPFos
Boa noite, Daniel.
Tem como ordenar por algum campo? Faço a quebra por cliente (E1_CLIENTE) e queria ordenar por ele também.
Bom dia Paulo, tudo joia?
Sim, na query SQL, adicione no fim dela, o comando para ordenar, por exemplo, ORDER BY E1_CLIENTE.
Que daí ele já vai se basear na sua query para montagem do relatório.
Tenha uma ótima e abençoada quarta feira.
Um grande abraço.