Imprimi Página | Fechar janela |
Treport Impresso de: Helpfacil - Portal do conhecimento Nome do Forum: ADVPL Descrição do Forum: Dúvidas sobre a programação em ADVPL URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=44260 Data da Impressão: sábado, 3 de junho de 2023 at 01:29 Topico: Treport Postado por: ANDRE.MONT Assunto: Treport Data Postagem: sábado, 20 de maio de 2023 at 01:05 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 |
Imprimir Página | Fechar Janela |