PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Treport
Versão:
.
Plataforma:
.
Complemento:
DB:
.
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário ANDRE.MONT ANDRE.MONT em 20/05/2023, 01:05 h
Local: RJ  Registro: 30/03/2023  Postagens: 8
Galera, tenho um relatório e gostaria que ele imprimisse os produtos por grupo onde:

1 seção - grupo
2 seção - produtos pertencentes ao grupo


O que está acontecendo é que quando 2 ou mais produtos possuem o mesmo grupo, ao inves dele agrupar os 2 produtos numa seção, ele abre 2 sessões. exemplo produto 1 e produto 2 possuem o codigo de grupo 004. o programa faz

004
produto 1


004
produto 2

e não

004
produto 1
produto 2


Segue o código.


Static Function RptDef(cNome)
     Local oReport
     Local oSection1 := Nil
     Local oSection2 := Nil
     Local cPerg := "RELAT001"
     
     //Criação do componente de impressão
     oReport := TReport():New(     "RELAT001",;          //Nome do Relatório
                                        "Estoque Mínimo x Saldo Atual",;          //Título
                                        cPerg,;          //Pergunte ... Se eu defino a pergunta aqui, será impresso uma página com os parâmetros, conforme privilégio 101
                                        {|oReport| ReportPrint(oReport)},;          //Bloco de código que será executado na confirmação da impressão
                                        )          //Descrição
     oReport:SetTotalInLine(.F.)
     oReport:lParamPage := .F.
     oReport:oPage:SetPaperSize(9) //Folha A4
     oReport:SetLandscape()
     
     //Criando a seção de dados
     oSection1 := TRSection():New(     oReport,;          //Objeto TReport que a seção pertence
                                             "Agrupador",;          //Descrição da seção
                                             {"cNewAlias"})          //Tabelas utilizadas, a primeira será considerada como principal da seção
     oSection1:SetTotalInLine(.F.) //Define se os totalizadores serão impressos em linha ou coluna. .F.=Coluna; .T.=Linha
     
     //Colunas do relatório
     TRCell():New(oSection1, "B1_GRUPO", "cNewAlias", "Grupo", /*Picture*/, 4, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     
     
     //Criando a seção de dados                                        
     oSection2 := TRSection():New(     oReport,;          //Objeto TReport que a seção pertence
                                             "Dados",;          //Descrição da seção
                                             {"cNewAlias"})          //Tabelas utilizadas, a primeira será considerada como principal da seção
     oSection2:SetTotalInLine(.F.) //Define se os totalizadores serão impressos em linha ou coluna. .F.=Coluna; .T.=Linha
     
     //Colunas do relatório
     TRCell():New(oSection2, "B1_COD", "cNewAlias", "Codigo", /*Picture*/, 15, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     TRCell():New(oSection2, "B1_DESC", "cNewAlias", "Descricao", /*Picture*/, 30, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     TRCell():New(oSection2, "BZ_ESTSEG", "cNewAlias", "Estoque Mínimo", /*Picture*/, 12, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     TRCell():New(oSection2, "B2_LOCAL", "cNewAlias", "Armazém", /*Picture*/, 2, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     TRCell():New(oSection2, "B2_QATU", "cNewAlias", "Saldo Atual", /*Picture*/, 14, /*lPixel*/,/*{|| code-block de impressao }*/,/*cAlign*/,/*lLineBreak*/,/*cHeaderAlign */,/*lCellBreak*/,/*nColSpace*/,/*lAutoSize*/,/*nClrBack*/,/*nClrFore*/,/*lBold*/)
     
     
     
     //Aqui, farei uma quebra por seção
     oSection1:SetPageBreak(.T.)
     oSection1:SetTotalText(" ")               
Return(oReport)

Static Function ReportPrint(oReport)
    Local aArea    := GetArea()
     Local oSection1 := oReport:Section(1)
     Local oSection2 := oReport:Section(2)
     Local cGrupo     := ""      
     Local cNewAlias   

    
    cNewAlias := GetNextAlias()

     BeginSQL Alias cNewAlias

          select
               B1.B1_COD, B1.B1_DESC, B1.B1_GRUPO, BZ.BZ_ESTSEG, B2.B2_LOCAL, B2.B2_QATU
          from
             %table:SB1% B1
          inner join
             %table:SB2% B2
             ON B2.B2_COD = B1.B1_COD
        inner join
             %table:SBZ% BZ
             ON BZ.BZ_COD = B1.B1_COD
          where
             B1.B1_COD BETWEEN %exp:(mv_par01)% and %exp:(mv_par02)%

EndSQL
     
      (cNewAlias)->(dbGoTop())
     
     oReport:SetMeter( (cNewAlias)->(LastRec()))     

     //Irei percorrer todos os meus registros
     (cNewAlias)->(DbGoTop())
     While ! (cNewAlias)->(Eof())
     
          If oReport:Cancel()
               Exit
          EndIf
     
     
          //inicializo a primeira seção
          oSection1:Init()

          oReport:IncMeter()

          IncProc("Imprimindo Grupos "+alltrim((cNewAlias)->B1_GRUPO))
          
          //imprimo a primeira seção                    
          oSection1:Cell("B1_GRUPO"):SetValue((cNewAlias)->B1_GRUPO)     

          cGrupo := (cNewAlias)->B1_GRUPO          

          oSection1:Printline()
          
          
          //inicializo a segunda seção

          oSection2:init()

          While ! (cNewAlias)->(Eof()) .AND. (cNewAlias)->B1_GRUPO = cGrupo
          //verifico se o codigo da NCM é mesmo, se sim, imprimo o produto
               oReport:IncMeter()          
               IncProc("Imprimindo produto "+alltrim( (cNewAlias)->B1_COD))
               oSection2:Cell("B1_COD"):SetValue( (cNewAlias)->B1_COD)
               oSection2:Cell("B1_DESC"):SetValue( (cNewAlias)->B1_DESC)
               oSection2:Cell("BZ_ESTSEG"):SetValue( (cNewAlias)->BZ_ESTSEG)               
               oSection2:Cell("B2_LOCAL"):SetValue( (cNewAlias)->B2_LOCAL)
               oSection2:Cell("B2_QATU"):SetValue( (cNewAlias)->B2_QATU)                    
               oSection2:Printline()
     
                (cNewAlias)->(dbSkip())
          End     
          
          //finalizo a segunda seção para que seja reiniciada para o proximo registro
          oSection2:Finish()
          //imprimo uma linha para separar uma NCM de outra
          oReport:ThinLine()
          //finalizo a primeira seção
          oSection1:Finish()
     END
     (cNewAlias)->(DbCloseArea())
     RestArea(aArea)
     Return

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal