- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Markbrow... Mbrowse... Listbox... etc...
×
Linguagem de Programação ADVPL
Perguntas Markbrow... Mbrowse... Listbox... etc...
- vcardoso
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 119
- Obrigados Recebidos: 0
11 anos 1 mês atrás #17508
por vcardoso
Markbrow... Mbrowse... Listbox... etc... foi criado por vcardoso
Fala galera!
Bom dia!!
Eu tenho o seguinte filtro abaixo:
****************************************************************************************************
cIndexName := Criatrab(Nil,.F.)
cIndexKey := "CN9_NOMECL"
_CSQL := "SELECT CN9_FILIAL, CN9_CLIENT, CN9_NUMERO, CN9_DTINIC, CN9_OK, "
_CSQL += "CN9_DTFIM, CN9_TPCTO, CN9_CONDPG, CN9_SALDO, CN9_NOMECL, "
_CSQL += "CNB_PRODUT, CNB_DESCRI, CNB_VLTOT, CNB_ITEM, CNB_CONTRA "
_CSQL += "FROM "+ RETSQLNAME("CN9") + " CN9 "
_CSQL += "INNER JOIN "+RETSQLNAME("CNB")+""
_CSQL += " CNB ON CN9_NUMERO = CNB_CONTRA "
_CSQL += "WHERE "
_CSQL += "CN9.D_E_L_E_T_ = ' ' "
_CSQL += "AND CN9_NUMERO BETWEEN '" + MV_PAR01 + "' AND '" + MV_PAR02 + "' "
_CSQL += "AND CN9_CLIENT BETWEEN '" + MV_PAR03 + "' AND '" + MV_PAR04 + "' "
_CSQL += "AND CN9_DTINIC BETWEEN '" + DTOS(MV_PAR07) + "' AND '" + DTOS(MV_PAR08) + "' "
_CSQL += "AND CN9_SALDO > 0.00"
_CSQL += "ORDER BY "
_CSQL += "CN9_NUMERO, CN9_DTINIC"
dbUseArea( .T.,"TOPCONN", TcGenQry( ,,_CSQL ), "TRB", .T., .F. )
IF !TRB->(eof())
DO WHILE !TRB->(eof())
AADD(aCampos, TRB->CN9_FILIAL ,;
aCampos, TRB->CN9_CLIENTE ,;
aCampos, TRB->CN9_NUMERO ,;
aCampos, TRB->CN9_DTFIM ,;
aCampos, TRB->CN9_TPCTO ,;
aCampos, TRB->CN9_CONDPG ,;
aCampos, TRB->CN9_SALDO ,;
aCampos, TRB->CN9_OK ,;
aCampos, TRB->CNB_PRODUT ,;
aCampos, TRB->CNB_DESCRI ,;
aCampos, TRB->CNB_VLTOT)
TRB->(dbskip())
enddo
else
MSGALERT("Nenhum contrato encontrado para o criterio informado.")
TRB->(dbclosearea())
Return Nil
endif
TRB->(dbclosearea())
***************************************************************************************************
Eu já havia feito isso antes, mas estou completamente esquecido de como fiz.
Depois dessa linha de código, o próximo passo é criar uma tela que recebe esse filtro e mostra na tela com a opção de marcar qual contrato(CN9) eu quero gerar um relatório.
É semelhante à opção de gerar boleto, mas nesse caso é pra gerar um relatório, o que coincide é a tela.
Se alguem tiver um exemplo e puder ajudar, fico grato!
Valeu pessoal !
Bom dia!!
Eu tenho o seguinte filtro abaixo:
****************************************************************************************************
cIndexName := Criatrab(Nil,.F.)
cIndexKey := "CN9_NOMECL"
_CSQL := "SELECT CN9_FILIAL, CN9_CLIENT, CN9_NUMERO, CN9_DTINIC, CN9_OK, "
_CSQL += "CN9_DTFIM, CN9_TPCTO, CN9_CONDPG, CN9_SALDO, CN9_NOMECL, "
_CSQL += "CNB_PRODUT, CNB_DESCRI, CNB_VLTOT, CNB_ITEM, CNB_CONTRA "
_CSQL += "FROM "+ RETSQLNAME("CN9") + " CN9 "
_CSQL += "INNER JOIN "+RETSQLNAME("CNB")+""
_CSQL += " CNB ON CN9_NUMERO = CNB_CONTRA "
_CSQL += "WHERE "
_CSQL += "CN9.D_E_L_E_T_ = ' ' "
_CSQL += "AND CN9_NUMERO BETWEEN '" + MV_PAR01 + "' AND '" + MV_PAR02 + "' "
_CSQL += "AND CN9_CLIENT BETWEEN '" + MV_PAR03 + "' AND '" + MV_PAR04 + "' "
_CSQL += "AND CN9_DTINIC BETWEEN '" + DTOS(MV_PAR07) + "' AND '" + DTOS(MV_PAR08) + "' "
_CSQL += "AND CN9_SALDO > 0.00"
_CSQL += "ORDER BY "
_CSQL += "CN9_NUMERO, CN9_DTINIC"
dbUseArea( .T.,"TOPCONN", TcGenQry( ,,_CSQL ), "TRB", .T., .F. )
IF !TRB->(eof())
DO WHILE !TRB->(eof())
AADD(aCampos, TRB->CN9_FILIAL ,;
aCampos, TRB->CN9_CLIENTE ,;
aCampos, TRB->CN9_NUMERO ,;
aCampos, TRB->CN9_DTFIM ,;
aCampos, TRB->CN9_TPCTO ,;
aCampos, TRB->CN9_CONDPG ,;
aCampos, TRB->CN9_SALDO ,;
aCampos, TRB->CN9_OK ,;
aCampos, TRB->CNB_PRODUT ,;
aCampos, TRB->CNB_DESCRI ,;
aCampos, TRB->CNB_VLTOT)
TRB->(dbskip())
enddo
else
MSGALERT("Nenhum contrato encontrado para o criterio informado.")
TRB->(dbclosearea())
Return Nil
endif
TRB->(dbclosearea())
***************************************************************************************************
Eu já havia feito isso antes, mas estou completamente esquecido de como fiz.
Depois dessa linha de código, o próximo passo é criar uma tela que recebe esse filtro e mostra na tela com a opção de marcar qual contrato(CN9) eu quero gerar um relatório.
É semelhante à opção de gerar boleto, mas nesse caso é pra gerar um relatório, o que coincide é a tela.
Se alguem tiver um exemplo e puder ajudar, fico grato!
Valeu pessoal !
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
11 anos 1 mês atrás #17513
por kanaamlrr
Respondido por kanaamlrr no tópico Markbrow... Mbrowse... Listbox... etc...
Victor,
Nesse fonte que está na área de downloads eu utilizei essa estrutura que você precisa.
Dá uma olhada.
A única diferença é que eu estou carregando os dados de um array e você vai carregar da query
Tem esse outro também que eu com base em uma query
Espero que te ajude.
Nesse fonte que está na área de downloads eu utilizei essa estrutura que você precisa.
Dá uma olhada.
A única diferença é que eu estou carregando os dados de um array e você vai carregar da query
Tem esse outro também que eu com base em uma query
#Include "Protheus.ch"
#include "TopConn.ch"
#Define ENTER chr(13)+chr(10)
/*
Funcao : RelCCBalc
Objetivos : Relatório de Movimentações de balconistas
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 01/06/2012
*/
*---------------------*
User Function RelCCBalc()
*---------------------*
Local oDlg
Local oCodIni
Local oCodFim
Local oDtIni
Local oDtFim
Local bOk := {||lOk := .T., oDlg:End() }
Local bCancel := {||lOk := .F., oDlg:End() }
Local nLin := 19
Local nCol1 := 5
Local nCol2 := 40
Local nPulaLinha := 15
Local lOk := .F.
Local lDados := .F.
Private oReport
Private cCodIni := Space(6)
Private cCodFim := "ZZZZZZ"
Private dDtIni := CTOD("")
Private dDtFim := CTOD("")
Define MsDialog oDlg Title 'Filtro por Produto' From 7,10 To 18,60 Of oMainWnd
*
@ nLin,nCol1 Say 'Codigo Inicial: ' Of oDlg Pixel
@ nLin,nCol2 MsGet oCodIni VAR cCodIni F3 "SZ3" VALID (VAZIO() .OR. EXISTCPO('SZ3')) Size 60,09 Of oDlg Pixel
*
nLin += nPulaLinha
*
@ nLin,nCol1 Say 'Codigo Final: ' Of oDlg Pixel
@ nLin,nCol2 MsGet oCodFim VAR cCodFim F3 "SZ3" VALID (cCodFim=="ZZZZZZ" .OR. EXISTCPO('SZ3')) Size 60,09 Of oDlg Pixel
*
nLin += nPulaLinha
*
@ nLin,nCol1 Say 'Data Inicial: ' Of oDlg Pixel
@ nLin,nCol2 MsGet oDtIni VAR dDtIni VALID (Vazio() .OR. dDtIni<=dDataBase) Size 60,09 Of oDlg Pixel
*
nLin += nPulaLinha
*
@ nLin,nCol1 Say 'Data Final: ' Of oDlg Pixel
@ nLin,nCol2 MsGet oDtFim VAR dDtFim VALID (Vazio() .OR. dDataBase<=dDtFim) Size 60,09 Of oDlg Pixel
*
Activate MsDialog oDlg On Init Enchoicebar(oDlg,bOk,bCancel) Centered
If lOk
Processa({||lDados := ProcDados()},'Pesquisando Dados...')
If lDados
Processa({|| oReport := ReportDef(),oReport:PrintDialog()},'Imprimindo Dados...')
EndIf
Q_QRY->(dbCloseArea())
EndIf
Return
/*
Funcao : ProcDados
Objetivos : Processa dados de acordo com o filtro
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 31/05/2012
*/
*--------------------------*
Static Function ProcDados()
*--------------------------*
Local cQry := ""
cQry := "SELECT Z3_CODIGO, Z3_CPF, Z3_NOME, Z3_SALDO, "
cQry += "Z9_DTOPER, Z9_TIPOPER, "
cQry += "Z9_PONTOS, Z9_SALDO, Z9_OBS, Z9_USERLOG, Z9_QTDEPRE, "
//trazer a descrição do prêmio
cQry += "(SELECT ZD_DESCRI "
cQry += "FROM "+RetSqlName("SZD")+" SZD "
cQry += "WHERE "+RetSqlCond("SZD")+" "
cQry += "AND SZD.ZD_CODIGO=Z9_CODPREM) AS ZD_DESCRI, "
//trazer a descrição do cliente
cQry += "(SELECT A1_NOME "
cQry += "FROM "+RetSqlName("SA1")+" SA1 "
cQry += "WHERE "+RetSqlCond("SA1")+" "
cQry += "AND SA1.A1_COD=Z9_LOJA) AS A1_NOME, "
//Tratamento do tipo de operação
cQry += "(CASE Z9_TIPOPER "
cQry += " WHEN 'I' THEN 'Inicial' "
cQry += " WHEN 'S' THEN 'Saida' "
cQry += " ELSE 'Entrada' "
cQry += " END) as Z9_TIPOPER "
cQry += "FROM "+RetSqlName("SZ3")+" SZ3, "
cQry += RetSqlName("SZ9")+" SZ9 "
cQry += "WHERE "+RetSqlCond("SZ3")+" "
cQry += "AND "+RetSqlCond("SZ9")+" "
cQry += "AND Z3_CODIGO = Z9_CODBALC "
cQry += "AND Z3_CODIGO >='"+cCodIni+"' "
cQry += "AND Z3_CODIGO <='"+cCodFim+"' "
If !Empty(dDtIni)
cQry += "AND Z9_DTOPER >='"+DTOS(dDtIni)+"' "
EndIf
If !Empty(dDtFim)
cQry += "AND Z9_DTOPER <='"+DTOS(dDtFim)+"' "
EndIf
//executa a query
If !GerTCQuery(cQry,"Q_QRY",.T.)
MsgAlert("Ocorreu um erro na busca dos dados."+ENTER+;
"Entre em contato com o setor de TI.")
Return .F.
EndIf
If Q_QRY->(EOF()) .AND. Q_QRY->(BOF())
MsgAlert("Não existem registros para o filtro selecionado.")
EndIf
//
Return .T.
/*
Funcao : ReportDef
Objetivos : Define estrutura de impressão
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 31/05/2012
*/
*--------------------------*
Static Function ReportDef()
*--------------------------*
//
oReport := TReport():New("RELCCBALC","Movimentação Balconistas",;
"",{|oReport| ReportPrint(oReport)},"Este relatorio irá Imprimir as movimentações das balconistas")
//Inicia o relatório como paisagem.
oReport:oPage:lLandScape := .T.
oReport:oPage:lPortRait := .F.
//Define o objeto com a seção do relatório
oSecao := TRSection():New(oReport,"BALCONISTAS" ,"Q_QRY",{})
oSecao1 := TRSection():New(oReport,"MOVIMENTACOES","Q_QRY",{})
//Dados do balconista
TRCell():New(oSecao,"Z3_CODIGO","Q_QRY",AVSX3("Z3_CODIGO",5),AVSX3("Z3_CODIGO",6),AVSX3("Z3_CODIGO",3),,,"CENTER")
TRCell():New(oSecao,"Z3_CPF" ,"Q_QRY",AVSX3("Z3_CPF" ,5),AVSX3("Z3_CPF" ,6),AVSX3("Z3_CPF" ,3),,,"CENTER")
TRCell():New(oSecao,"Z3_NOME" ,"Q_QRY",AVSX3("Z3_NOME" ,5),AVSX3("Z3_NOME" ,6),AVSX3("Z3_NOME" ,3),,,"LEFT" )
TRCell():New(oSecao,"Z3_SALDO" ,"Q_QRY",AVSX3("Z3_SALDO" ,5),AVSX3("Z3_SALDO" ,6),AVSX3("Z3_SALDO" ,3),,,"RIGHT" )
//Dados da movimentação
TRCell():New(oSecao1,"Z9_DTOPER" ,"Q_QRY",AVSX3("Z9_DTOPER" ,5),"@D" ,AVSX3("Z9_DTOPER" ,3),,,"CENTER")
TRCell():New(oSecao1,"Z9_TIPOPER","Q_QRY",AVSX3("Z9_TIPOPER",5),AVSX3("Z9_TIPOPER",6), 7,,,"LEFT" )
TRCell():New(oSecao1,"Z9_QTDEPRE","Q_QRY",AVSX3("Z9_QTDEPRE",5),AVSX3("Z9_QTDEPRE",6),AVSX3("Z9_QTDEPRE",3),,,"LEFT" )
TRCell():New(oSecao1,"ZD_DESCRI" ,"Q_QRY","Prêmio" ,AVSX3("ZD_DESCRI" ,6), 40,,,"LEFT" )
TRCell():New(oSecao1,"A1_NOME" ,"Q_QRY","Cliente" ,AVSX3("A1_NOME" ,6),AVSX3("A1_NOME" ,3),,,"LEFT" )
TRCell():New(oSecao1,"Z9_PONTOS" ,"Q_QRY",AVSX3("Z9_PONTOS" ,5),AVSX3("Z9_PONTOS" ,6),AVSX3("Z9_PONTOS" ,3),,,"RIGHT" )
TRCell():New(oSecao1,"Z9_SALDO" ,"Q_QRY",AVSX3("Z9_SALDO" ,5),AVSX3("Z9_SALDO" ,6),AVSX3("Z9_SALDO" ,3),,,"RIGHT" )
TRCell():New(oSecao1,"Z9_OBS" ,"Q_QRY",AVSX3("Z9_OBS" ,5),AVSX3("Z9_OBS" ,6),AVSX3("Z9_OBS" ,3),,,"LEFT" )
TRCell():New(oSecao1,"Z9_USERLOG","Q_QRY",AVSX3("Z9_USERLOG",5),AVSX3("Z9_USERLOG",6),AVSX3("Z9_USERLOG",3),,,"LEFT" )
Return oReport
/*
Funcao : ReportPrint
Objetivos : Imprime os dados filtrados
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 31/05/2012
*/
*----------------------------------*
Static Function ReportPrint(oReport)
*----------------------------------*
Local cBalc := ""
oReport:SetMeter(Q_QRY->(RecCount()))
Do While Q_QRY->(!EoF()) .And. !oReport:Cancel()
If cBalc != Q_QRY->Z3_CODIGO
oReport:Section("BALCONISTAS"):Init()
oReport:Section("BALCONISTAS"):PrintLine() //Impressão da linha
oReport:SkipLine()
cBalc := Q_QRY->Z3_CODIGO
oReport:Section("MOVIMENTACOES"):Init()
EndIf
oReport:Section("MOVIMENTACOES"):PrintLine() //Impressão da linha
oReport:IncMeter() //Incrementa a barra de progresso
Q_QRY->( dbSkip() )
If cBalc != Q_QRY->Z3_CODIGO
oReport:Section("MOVIMENTACOES"):Finish()
oReport:Section("BALCONISTAS"):Finish()
oReport:SkipLine(3)
EndIf
EndDo
//Fim da impressão da seção
Return .T.
/*
Funcao : GerTCQuery
Objetivos : Executa a query de busca
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 31/05/2012
*/
*-------------------------------------------------*
Static Function GerTCQuery(cQuery,cAlias,lEraseLog)
*-------------------------------------------------*
Local nCod
Default lEraseLog := .T.
If lEraseLog
nCod := FCreate("cQuery.TXT")
Else
nCod := FOpen("cQuery.TXT",2)
EndIf
If nCod # -1
FWRITE(nCod,cQuery)
Fclose(nCod)
EndIf
cQuery := ChangeQuery(cQuery)
If Select(cAlias) # 0
(cAlias)->(dbCloseArea())
EndIf
TcQuery cQuery ALIAS (cAlias) NEW
If !USED()
Return .F.
EndIf
//
Return .T.
Espero que te ajude.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Markbrow... Mbrowse... Listbox... etc...
Tempo para a criação da página:0.112 segundos