Olá pessoal…
Recentemente desenvolvi uma rotina, em que, ao colar uma consulta sql, basta clicar em um botão Gerar, e ele gera um código .prw completo para compilação e utilização.
A intenção é que quando temos a consulta sql pronta, possamos fazer um relatório rapidamente.
Ao executar o zReport, é mostrado a tela, tendo duas abas, a primeira são as definições do relatório (como orientação padrão, título, se irá enviar por e-Mail, etc).
A segunda aba, é a de dados, onde é possível informar a consulta SQL, agrupamento e totalizadores.
Ao gerar, será perguntado se deseja abrir o arquivo.
Ao compilar o arquivo gerado, ele será um TReport normal, com as possibilidades de gerar pdf, planilha, etc.
Abaixo um print da impressão.
Agora, caso você tenha uma consulta “SELECT * FROM …” e deseja especificar as colunas mais detalhadamente (inclusive com opções de cores), insira a consulta e marque a opção “Deseja informar as colunas manualmente?”, e informe os dados necessários.
Por último, basta imprimir. Abaixo um print de exemplo.
Caso queira fazer o download do .prw, clique aqui.
Vídeo tutorial de como usar:
Abraços e até a próxima.
Parabéns show de bola. São coisas assim que a totvs deveria nos entregar por padrão.
Bom dia Luiz.
Muito obrigado, realmente com ferramentas assim seria bem mais fácil.
Abraços brother.
Boa Mestree !! Fera !
Grande Newtão.
Um abraço brow.
Parabéns Daniel por compartilhar este material!
Boa tarde Artur.
Obrigado.
Abraços.
Muito bom, você está de parabéns
Boa tarde Philippe, muito obrigado.
Um grande abraço.
Parabéns Grande Mestre Atílio! Ficou show de bola!
Ahoo grande Georgito, muito obrigado jovem.
Abraços.
Boa tarde Atílio, realmente seu fonte e muito bom, podemos acrescentar muitas coisas nele para ficar muito melhor.
Ex.: a opção do próprio usuário de criar as perguntas e o sistema as cria, eu já faço isso em relatórios que eu mesmo crio.
Boa noite Roberto.
Rapaz, muito obrigado.
Realmente, eu deixo esses fontes genéricos abertos, pois sempre podemos melhorá-los né.
Como diria Philippe Kahn:
“The power of Open Source is the power of the people. The people rule.”
Um grande abraço.
Boa noite Dan,
Show de bola.
Abs
Grande Vagner.
Valeu brow.
Abraços.
Excelente! Muchas gracias!
Eu que agradeço Dario.
Abraços.
Muito bom cara, genial.
Me ajudou muito.
Muito obrigado
Eu que agradeço Alexsandro.
Um grande abraço.
Obrigado, muito bom mesmo !
Boa Tarde,
Gostaria se possível de um exemplo de relatório tendo Multi Thread, estou com problemas em performance deles.
Boa noite Mauricio, tudo bem?
Se tiver o fonte, pode entrar em contato para eu dar uma olhada.
Depois irei preparar algum conteúdo sobre multi thread.
Um grande abraço.
Que isso hem !! TOPÍSSIMO !! PARABENS !
Valeu jovem.
Um grande abraço.
Como faço para adicionar no menu do usuário?
Boa noite Ariel.
Você quer adicionar o zReport no menu?
Abraços.
Há didática e pedagogia em suas aulas, classe, objetos, métodos e a propriedade é dele mesmo. Parabéns Daniel, construindo conhecimentos da melhor maneira, simples e eficiente.
Boa noite Tavares.
Muito obrigado pelo comentário.
Um grande abraço.
Fala Dan. Antes de tudo, agradeço por compartilhar todo esse conhecimento.
Gostaria de pedir uma ajuda:
_ Eu compilei o seu fonte (na integra) no meu ambiente de testes. No próprio TDS, chamei a rotina “U_ZREPORT” para testar, mas está dando um erro ao executa-la:
THREAD ERROR ([20910], maicon.macedo, IT-00061) 08/11/2018 14:32:58
Alias does not exist SX3 on MSNEWGETDADOS:NEW(APLIB170.PRW) 03/01/2018 17:40:20 line : 270
[TOTVS build: 7.00.131227A-20180425 NG]
Called from MSNEWGETDADOS:NEW(APLIB170.PRW) 03/01/2018 17:40:20 line : 270
Called from U_ZREPORT(ZREPORT.PRW) 08/11/2018 14:21:22 line : 168
Called from STATICCALL(ZREPORT.PRW) 08/11/2018 14:21:22 line : 168
[TOTVS Ambiente: ENV]
[TOTVS Environment RPODB: top]
[TOTVS Environment Trace: Nenhum]
[TOTVS Environment IBXLog: Nenhum]
[TOTVS Environment KillStack: Nenhum]
[TOTVS Environment TraceStack: Nenhum]
[TOTVS Environment SpecialKey: 9439]
[TOTVS Environment LocalFiles: ctree]
[TOTVS Environment LogProfiler: Nenhum]
[TOTVS Environment TopMemoMega: Nenhum]
[TOTVS Environment RPOLanguage: Portuguese]
[TOTVS Environment RegionalLanguage: BRA]
[TOTVS Environment LocalDBExtension: .dtc]
[TOTVS Environment ConnectionTimeOut: Nenhum]
[TOTVS Environment General CTreeMode: server]
[TOTVS Environment General ConsoleLog: 1]
[TOTVS Environment General ConsoleFile: /outsourcing/totvs/protheus_data/logs/console_app.log]
[TOTVS Environment General MaxQuerySize: Nenhum]
[TOTVS Environment General MaxStringSize: Nenhum]
[TOTVS Remote Lib: QT-4.5.2 WIN]
[TOTVS Tipo Remoto: Microsoft Windows]
[TOTVS Build Remota: 7.00.131227A-20180507]
[TOTVS Tipo de Servidor: Console]
[TOTVS Server Build: 7.00.131227A-20180425 NG]
[TOTVS Server Unix: Sim]
[TOTVS Database: mssql]
[TOTVS Framework Versão: 20180108]
[TOTVS Framework Data: 20180103-193932]
[TOTVS Framework Comita: 764df3ca6bf8bb29a74d895a81ad23cb4bc778cc]
[TOTVS RPO Release: 12.1.017]
Publicas
Public 1: CPAISLOC(C) :BRA
Public 2: ASX8(A) :
STACK STATICCALL(ZREPORT.PRW) 08/11/2018 14:21:22
STACK U_ZREPORT(ZREPORT.PRW) 08/11/2018 14:21:22
Private 1: CAUTOR(C) :zReport
Private 2: CDATA(C) :11/08/18
Private 3: NJANLARG(N) :800
Private 4: NJANALTU(N) :500
Private 5: ODLGPVT(O) :O
Private 6: OBTNFEC(U) :NIL
Private 7: OBTNGER(U) :NIL
Private 8: ATPPAD(A) :
Private 9: OSAYUSERF(O) :O
Private 10: OGETUSERF(O) :O
Private 11: CGETUSERF(C) :xRelat
Private 12: OSAYDIREC(O) :O
Private 13: OGETDIREC(O) :O
Private 14: CGETDIREC(C) :C:\Users\MAICON~1.MAC\AppData\Local\Temp\
Private 15: OSAYTITUL(O) :O
Private 16: OGETTITUL(O) :O
Private 17: CGETTITUL(C) :Relatorio
Private 18: NLENDIREC(N) :120
Private 19: ATPORI(A) :
Private 20: ATPFON(A) :
Private 21: OSAYORIEN(O) :O
Private 22: OCMBORIEN(O) :O
Private 23: CCMBORIEN(C) :R
Private 24: OSAYFONTE(O) :O
Private 25: OCMBFONTE(O) :O
Private 26: CCMBFONTE(C) 😛
Private 27: OSAYUTILI(O) :O
Private 28: OCMBUTILI(O) :O
Private 29: CCMBUTILI(C) :N
Private 30: OSAYPERGU(O) :O
Private 31: OGETPERGU(O) :O
Private 32: CGETPERGU(C) :
Private 33: OSAYMOSTR(O) :O
Private 34: OCMBMOSTR(O) :O
Private 35: CCMBMOSTR(C) :N
Private 36: OSAYENVIA(O) :O
Private 37: OCMBENVIA(O) :O
Private 38: CCMBENVIA(C) :N
Private 39: OSAYEMAIL(O) :O
Private 40: OGETEMAIL(O) :O
Private 41: CGETEMAIL(C) :
Private 42: OSAYSQL(O) :O
Private 43: OPANELSQL(O) :O
Private 44: OEDITSQL(O) :O
Private 45: CEDITSQL(C) :
Private 46: OSAYQUEBR(O) :O
Private 47: OGETQUEBR(O) :O
Private 48: CGETQUEBR(C) :
Private 49: OCHKEDIT(O) :O
Private 50: LCHKEDIT(L) :.F.
Private 51: OMSGETCAM(U) :NIL
Private 52: AHEADERCAM(A) :
Private 53: ACOLSCAM(A) :
Private 54: OCHKTOT(U) :NIL
Private 55: LCHKTOT(L) :.F.
Private 56: OMSGETTOT(U) :NIL
Private 57: AHEADERTOT(A) :
Private 58: ACOLSTOT(A) :
Private 59: OFOLDERPVT(O) :O
Private 60: OSCROLLREL(O) :O
Private 61: OSCROLLSQL(O) :O
Local 1: AAREA(A) :
Local 2: OGRPGER(O) :O
Local 3: OGRPDEF(O) :O
Local 4: OGRPPAR(O) :O
Local 5: OGRPEMA(O) :O
STACK MSNEWGETDADOS:NEW(APLIB170.PRW) 03/01/2018 17:40:20
Param 1: NTOP(N) : 85
Param 2: NLEFT(N) : 3
Param 3: NBOTTOM(N) : 145
Param 4: NRIGHT(N) : 373
Param 5: NSTYLE(N) : 7
Param 6: ULINHAOK(C) : AllwaysTrue()
Param 7: UTUDOOK(U) : NIL
Param 8: CINICPOS(C) :
Param 9: AALTER(U) : NIL
Param 10: NFREEZE(N) : 0
Param 11: NMAX(N) : 99
Param 12: CFIELDOK(C) : AllwaysTrue()
Param 13: USUPERDEL(U) : NIL
Param 14: UDELOK(U) : NIL
Param 15: OWND(O) : O
Param 16: @APARHEADER(A) :
Param 17: @APARCOLS(A) :
Param 18: UCHANGE(U) : NIL
Param 19: CTELA(U) : NIL
Local 1: SELF(O) :O
Local 2: NTOP(N) :85
Local 3: NLEFT(N) :3
Local 4: NBOTTOM(N) :145
Local 5: NRIGHT(N) :373
Local 6: NSTYLE(N) :7
Local 7: ULINHAOK(C) :AllwaysTrue()
Local 8: UTUDOOK(U) :NIL
Local 9: CINICPOS(C) :
Local 10: AALTER(U) :NIL
Local 11: NFREEZE(N) :0
Local 12: NMAX(N) :99
Local 13: CFIELDOK(C) :AllwaysTrue()
Local 14: USUPERDEL(U) :NIL
Local 15: UDELOK(U) :NIL
Local 16: OWND(O) :O
Local 17: APARHEADER(A) :
Local 18: APARCOLS(A) :
Local 19: UCHANGE(U) :NIL
Local 20: CTELA(U) :NIL
Local 21: NI(N) :1
Local 22: NX3ORD(U) :NIL
Local 23: CTIPO(U) :NIL
Local 24: CSVALIAS(C) :
Local 25: LADDLINE(L) :.T.
Local 26: NBYTE(N) :6
Local 27: NRESTO(N) :1
Local 28: NX(N) :1
Local 29: CBINARIO(C) :00000111
Local 30: ACOMBO(U) :NIL
Local 31: NSIZE(U) :NIL
Local 32: LSX3OPENNED(L) :.F.
Local 33: LINTELA(L) :.F.
Local 34: AINTELA(U) :NIL
Local 35: NJ(U) :NIL
Local 36: LSKIP(U) :NIL
Local 37: OFONT(U) :NIL
Local 38: CATEXPRESSION(C) :Iif( Len( Self:aCOLS ) >= Self:oBrowse:nAt, Self:oBrowse:nAt, Len( Self:aCOLS ) )
Local 39: LISP12(L) :.T.
STACK { | e | ErrorDialog( e ) }(APLIB240.PRW) 03/01/2018 17:40:20
Local CodeBlock 1: E(O) :O
STACK ERRORDIALOG(APLIB240.PRW) 03/01/2018 17:40:20
Local 1: E(O) :O
Local 2: LINSIGA(L) :.F.
Local 3: CMSG(U) :NIL
Local 4: NI(U) :NIL
Local 5: CX(U) :NIL
Local 6: URETURN(U) :NIL
Local 7: CERROR(U) :NIL
Local 8: LSKIPERROR(L) :.F.
Local 9: AOBJLOG(A) :
Local 10: NX(U) :NIL
STACK ERRORDLG(APLIB240.PRW) 03/01/2018 17:40:20
Local 1: OERR(O) :O
Local 2: CMSG(U) :NIL
Local 3: ODLG(U) :NIL
Local 4: OFONT(U) :NIL
Local 5: OBMP(U) :NIL
Local 6: OPANEL(U) :NIL
Local 7: OPANELBMP(U) :NIL
Local 8: ODETAIL(U) :NIL
Local 9: OSEND(U) :NIL
Local 10: OCLOSE(U) :NIL
Local 11: OSAVE(U) :NIL
Local 12: OERROR(U) :NIL
Local 13: CERROR(U) :NIL
STACK CLEARPASS(APLIB240.PRW) 03/01/2018 17:40:20
Local 1: CENV(U) :NIL
Files
Boa noite Maicon, tudo bem?
Opa, primeiramente muito obrigado pelo carinho.
Esse erro é por que o Protheus não foi “preparado” com o famoso RPCSetEnv ou Prepare Environment. Portanto, o ideal é executar a rotina, direto pelo Menu dentro do sistema, ou no Fórmulas.
Ou seja, executar o SIGAMDI / SIGAADV, e depois sim abrir o zReport.
Espero ter ajudado. Qualquer dúvida, fico à disposição.
Um grande abraço.
Dan, boa tarde.
Antes de tudo, obrigado por compartilhar todo esse conhecimento.
Eu compilei o seu fonte (na integra) no meu ambiente de teste (minha plataforma é cloud). Ao testa-lo, no próprio TDS, ocorre um erro:
THREAD ERROR ([20910], maicon.macedo, IT-00061) 08/11/2018 14:32:58
Alias does not exist SX3 on MSNEWGETDADOS:NEW(APLIB170.PRW) 03/01/2018 17:40:20 line : 270
Pode me dar uma ajuda?
Obrigado novamente.
Boa noite Maicon, tudo bem?
Opa, primeiramente muito obrigado pelo carinho.
Esse erro é por que o Protheus não foi “preparado” com o famoso RPCSetEnv ou Prepare Environment. Portanto, o ideal é executar a rotina, direto pelo Menu dentro do sistema, ou no Fórmulas.
Ou seja, executar o SIGAMDI / SIGAADV, e depois sim abrir o zReport.
Espero ter ajudado. Qualquer dúvida, fico à disposição.
Um grande abraço.
Cara, você arrebentou..!!!!
Eu desenvolvo desde 2001, mas sempre tive “medo” do TREPORT..kkkkkkk
Cara, valeu mesmo. Muito boa, excelente essa sua ferramenta.
Meus parabéns e muito, muito obrigado por disponibilizar.
Eu que agradeço Welinton.
Um grande abraço jovem.
Eu Incluo os parâmetros das perguntas na query da mesma forma que faço em ADVPL????
ex: ” AND RC_PERIODO = ‘” + mv_par03 + “‘ “
Sim Eduardo, após criar o fonte, basta colocar um Pergunte ou ParamIXB e utilizar os MV_PAR.
Um duvida, a minha consulta sql retorna 1183 registros, mas a extracao do relatorio da rotina do retornou 183 registros, há alguma limitacao no fonte?
Então Edelmar, pode ser duas coisas, a primeira é a utilização do ChangeQuery, qualquer coisa, comente essa linha.
O que você pode fazer também, é gerar a query com MemoWrite e testar no SQL para ver se na execução não teve alguma alteração.
Caso queira ver um exemplo, veja o exemplo 4 nesse link – https://terminaldeinformacao.com/knowledgebase/memowrite/
Após executar, inclui no menu, mas quando tento acessar informar que a função não está disponível, como resolvo isso?
Dan, quando executo diz que a função não existe, como resolver isso?
Bom dia Cleidson, tudo bem?
Se possível nos encaminhe um print do erro ou um vídeo do problema.
Lembrando que o zReport é uma versão já antiga, se quiser ver uma versão mais nova, fizemos o Autumn Code Maker, segue o link de um vídeo de como usar: https://youtu.be/thfA89QPFos
Grande abraço.