|
Bem Vindo, Visitante
|
Todos os Fórums
ADVPL
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|

 |
 |
Assunto: |
Treport |
|
Versão: |
. |
|
Plataforma: |
. |
Complemento: |
|
|
DB: |
. |
Complemento: |
|
|
|
|
|
Mensagem do
ANDRE.MONT
em 20/05/2023, 01:05 h
Local: RJ Registro: 30/03/2023 Postagens: 7 |
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
|
|