× Linguagem de Programação ADVPL

Perguntas Markbrow... Mbrowse... Listbox... etc...

Mais
11 anos 1 mês atrás #17508 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 !

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 1 mês atrás #17513 por kanaamlrr
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
#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.

Tempo para a criação da página:0.112 segundos
Joomla templates by a4joomla