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

 |
 |
Assunto: |
Relatório Imprime infinitamente |
|
Versão: |
12.1.2210 |
|
Plataforma: |
Microsoft |
Complemento: |
Windows 11 - 64Bit |
|
DB: |
SQL Server |
Complemento: |
|
|
relatorioINfinito.png (anexo) | |
|
|
|
Mensagem do
TI-02
em 30/07/2024, 14:41 h
Local: SP Registro: 29/07/2024 Postagens: 17 |
Estou desenvolvendo um código para gerar um relatório na empresa que trabalho, porém ao imprimir as sessões ele fica imprimindo infinitamente e não acaba nunca.
código fonte:
#include ‘totvs.ch‘
#include ‘topconn.ch‘
User Function RltMar()
Local oReport := Nil
oReport := RptStruc("Relatório de Marcas")
oReport:PrintDialog()
Return
Static Function RPTStruc(cNome)
Local oReport := Nil
Local oSection1 := Nil
Local oSection2 := Nil
Local aMarcas := {}
//TRSection():New(oParent, cTitle, uTable, aOrder, lLoadCells, lLoadOrder, uTotalText, lTotalInLine, lHeaderPage, lHeaderBreak, lPageBreak, lLineBreak, nLeftMargin, lLineStyle, nColSpace, lAutoSize, cCharSeparator, nLinesBefore, nCols, nClrBack, nClrFore, nPercentage)
// Nome Tipo Descrição
// oParent Objeto Objeto da classe TReport ou TRSection que será o pai da classe TRSection
// cTitle Caracter Título da seção
// uTable Caracter/Array Tipo Caracter: Tabela que sera utilizada pela seção
// Tipo Array: Lista de tabelas que serão utilizadas pela seção
// aOrder Array Array contendo a descrição das ordens. Elemento: 1-Descrição, como por exemplo, Filial+Código
// lLoadCells Lógico Carrega os campos do Dicionário de Campos (SX3) das tabelas da seção como células
// lLoadOrder Lógico Carrega os índices do Dicionário de Índices (SIX)
// uTotalText Caracter/Bloco de Código Texto do totalizador da seção, podendo ser caracter ou bloco de código
// lTotalInLine Lógico Imprime as células em linha
// lHeaderPage Lógico Cabeçalho da seção no topo da página
// lHeaderBreak Lógico Imprime cabeçalho na quebra da seção
// lPageBreak Lógico Imprime cabeçalho da seção na quebra de página
// lLineBreak Lógico Quebra a linha na impressão quando as informações não couberem na página
// nLeftMargin Numérico Tamanho da margem à esquerda da seção
// lLineStyle Lógico Imprime a seção em linha
// nColSpace Numérico Espaçamento entre as colunas
// lAutoSize Lógico Ajusta o tamanho das células para que caiba emu ma página
// cCharSeparator Caracter Define o caracter que separa as informações na impressão em linha
// nLinesBefore Numérico Aponta a quantidade de linhas a serem saltadas antes da impressão da seção
// nCols Numérico Quantidade de colunas a serem impressas
// nClrBack Numérico Cor de fundo das células da seção
// nClrFore Numérico Cor da fonte das células da seção
// nPercentage Numérico Tamanho da página a ser considerada na impressão em percentual
//TRCell():New(oParent, cName, cAlias, cTitle, cPicture, nSize, lPixel, bBlock, cAlign, lLineBreak, cHeaderAlign, lCellBreak, nColSpace, lAutoSize, nClrBack, nClrFore, lBold)
// Nome Tipo Descrição
// oParent Objeto Objeto da classe TRSection que a célula pertence
// cName Caracter Nome da célula
// cAlias Caracter Tabela utilizada pela célula
// cTitle Caracter Título da célula
// cPicture Caracter Mascara da célula
// nSize* Numérico Tamanho da célula
// lPixel Lógico Aponta se o tamanho foi informado em pixel
// bBlock Bloco de Código Bloco de código com o retorno do campo
// cAlign Caracter Alinhamento da célula. "LEFT", "RIGHT" e "CENTER"
// lLineBreak Lógico Quebra linha se o conteúdo estourar o tamanho do campo
// cHeaderAlign Caracter Alinhamento do cabeçalho da célula. "LEFT", "RIGHT" e "CENTER"
// lCellBreak Lógico Compatibilidade - Não utilizado
// nColSpace Numérico Espaçamento entre as células
// lAutoSize** Lógico Ajusta o tamanho da célula com base no tamanho da página e as informações impressas
// nClrBack Numérico Cor de fundo da célula
// nClrFore Numérico Cor da fonte da célula
// lBold Lógico Imprime a fonte em negrito
AAdd(aMarcas, "Agratto")
AAdd(aMarcas, "Carrier")
AAdd(aMarcas, "Fujitsu")
AAdd(aMarcas, "Gree")
AAdd(aMarcas, "Midea")
AAdd(aMarcas, "Springer Midea")
oReport := TReport():New(cNome,"Relatório de marcas por tipo",cNome,{|oRperot| RPTPRINT(oReport)},"Descricao do Help")
oReport:SetLandscape()
//Sessão 1: Marca dos produtos
oSection1 := TRSection():New(oReport, "Equipamentos", {"SX5"}, NIL, .F., .T., /*uTotalText*/, .F./*lTotalInLine*/, /*lHeaderPage*/ , /*lHeaderBreak*/ , /*lPageBreak*/ , .T./*lLineBreak*/, 0/*nLeftMargin*/, /*lLineStyle*/ , 1/*nColSpace*/, .T./*lAutoSize*/, /*cCharSeparator*/, /*nLinesBefore*/, 12/*nCols*/, /*nClrBack*/ , /*nClrFore*/ , 100/*nPercentage*/)
TRCell():New(/*oParent:*/oSection1,/*cName:*/"MARCA",/*cAlias:*/"SX5",/*cTitle:*/"Marca",/*cPicture:*/"@!",/*nSize:*/800,/*lPixel:*/,/*{|| code-block de impressao }:*/,/*cAlign:*/"CENTER",/*lLineBreak:*/.F.,/*cHeaderAlign:*/"CENTER",/*lCellBreak:*/,/*nColSpace:*/1,/*lAutoSize***/.T.,/*nClrBack:*/,/*nClrFore*/,/*lBold:*/)
// oSection1:SetPageBreak(.F.) //Quebra de seção
//Sessão 2: tipo de equipamento
oSection2 := TRSection():New(oReport, "Equipamentos", {"SX5"}, NIL, .F., .T., /*uTotalText*/, .F./*lTotalInLine*/, /*lHeaderPage*/ , /*lHeaderBreak*/ , /*lPageBreak*/ , .T./*lLineBreak*/, 0/*nLeftMargin*/, /*lLineStyle*/ , 1/*nColSpace*/, .T./*lAutoSize*/, /*cCharSeparator*/, /*nLinesBefore*/, 12/*nCols*/, /*nClrBack*/ , /*nClrFore*/ , 100/*nPercentage*/)
TRCell():New(;
/*oParent:*/oSection2,;
/*cName:*/"TIPO",;
/*cAlias:*/"SX5", ;
/*cTitle:*/"Tipo",;
/*cPicture:*/"@!",;
/*nSize:*/800, ;
/*lPixel:*/.F., ;
/*{|| code-block de impressao }:*/, ;
/*cAlign:*/"CENTER",;
/*lLineBreak:*/.F., ;
/*cHeaderAlign:*/"CENTER",;
/*lCellBreak:*/.F.,;
/*nColSpace:*/0, ;
/*lAutoSize***/.T., ;
/*nClrBack:*/, ;
/*nClrFore*/, ;
/*lBold:*/.F.;
)
// oSection2:SetPageBreak(.F.) //Quebra de seção
//Sessão 3: Equipamnetos correspondentes a sua respectiva marca e tipo
// oSection3 := TRSection():New(oReport, "Equipamentos", {"SBF", "SB1", "SX5", "DA1"}, NIL, .F., .T., /*uTotalText*/, .F./*lTotalInLine*/, /*lHeaderPage*/ , /*lHeaderBreak*/ , /*lPageBreak*/ , .T./*lLineBreak*/, 0/*nLeftMargin*/, /*lLineStyle*/ , 1/*nColSpace*/, .T./*lAutoSize*/, /*cCharSeparator*/, /*nLinesBefore*/, 12/*nCols*/, /*nClrBack*/ , /*nClrFore*/ , 100/*nPercentage*/)
// TRCell():New(;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "CODIGO", ;
// /*cAlias:*/ "SBF", ;
// /*cTitle:*/ "Código", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 25, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "LEFT", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "DESCRICAO", ;
// /*cAlias:*/ "SB1", ;
// /*cTitle:*/ "Descrição", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 40, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "LEFT", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "ARMAZEM", ;
// /*cAlias:*/ "SBF", ;
// /*cTitle:*/ "Arm.", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 15, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "CENTER", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "MODELO", ;
// /*cAlias:*/ "SX5", ;
// /*cTitle:*/ "Modelo", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 30, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "CENTER", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "CAPACIDADE", ;
// /*cAlias:*/ "SX5", ;
// /*cTitle:*/ "Capacidade", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 30, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "CENTER", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "AVISTA", ;
// /*cAlias:*/ "DA1", ;
// /*cTitle:*/ "A Vista", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 30, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "CENTER", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
// TRCell():New
// (;
// /*oParent:*/ oSection3, ;
// /*cName:*/ "APRAZO", ;
// /*cAlias:*/ "DA1", ;
// /*cTitle:*/ "A Prazo", ;
// /*cPicture:*/ "@!", ;
// /*nSize:*/ 30, ;
// /*lPixel:*/ .F., ;
// /*{|| code-block de impressao }:*/ , ;
// /*cAlign:*/ "CENTER", ;
// /*lLineBreak:*/ .F., ;
// /*cHeaderAlign:*/ "CENTER", ;
// /*lCellBreak:*/ .F., ;
// /*nColSpace:*/ 4, ;
// /*lAutoSize***/ .T., ;
// /*nClrBack:*/ , ;
// /*nClrFore*/ , ;
// /*lBold:*/ .F. ;
// )
Return (oReport)
Static Function RPTPrint(oReport)
Local oSection1 := oReport:Section(1)
Local oSection2 := oReport:Section(2)
Local cQryAux := ""
Local cAlias := "TMPMLT"
cQryAux := " SELECT " + CRLF
cQryAux += " B1_COD, " + CRLF
cQryAux += " B1_DESC, " + CRLF
cQryAux += " BF.BF_LOCAL AS ARMAZEM, " + CRLF
cQryAux += " ISNULL((X5.X5_DESCRI),‘‘) AS MARCA, " + CRLF
cQryAux += " ISNULL((X4.X5_DESCRI),‘‘) AS MODELO, " + CRLF
cQryAux += " ISNULL((X3.X5_DESCRI),‘‘) AS CAPACIDADE, " + CRLF
cQryAux += " ISNULL((X2.X5_DESCRI),‘‘) AS TIPO, " + CRLF
cQryAux += " DA1_ZZPRV AS AVISTA, " + CRLF
cQryAux += " DA1_PRCVEN AS APRAZO " + CRLF
cQryAux += " FROM " + CRLF
cQryAux += " " + RetSQLName(‘SB1010‘) + " B1 " + CRLF
cQryAux += " INNER JOIN " + RetSQLName(‘SBF010‘) + " BF ON BF_PRODUTO = B1.B1_COD AND " + CRLF
cQryAux += " BF.BF_LOCAL IN (‘01‘,‘02‘,‘04‘,‘05‘,‘06‘,‘07‘,‘T0‘,‘T1‘,‘SR‘) AND BF.D_E_L_E_T_ <> ‘*‘ " + CRLF
cQryAux += " INNER JOIN " + RetSQLName(‘DA1010‘) + " DA1 ON DA1.DA1_CODPRO = B1.B1_COD " + CRLF
cQryAux += " INNER JOIN " + RetSQLName(‘DA0010‘) + " DA0 ON DA0.DA0_CODTAB = DA1.DA1_CODTAB " + CRLF
cQryAux += " LEFT JOIN " + RetSQLName(‘SX5010‘) + " X5 ON X5.X5_CHAVE = B1.B1_ZZMARCA AND X5.X5_TABELA = ‘Z0‘ " + CRLF
cQryAux += " LEFT JOIN " + RetSQLName(‘SX5010‘) + " X4 ON X4.X5_CHAVE = B1.B1_ZZMODEL AND X4.X5_TABELA = ‘Z1‘ " + CRLF
cQryAux += " LEFT JOIN " + RetSQLName(‘SX5010‘) + " X3 ON X3.X5_CHAVE = B1.B1_ZZCAPAC AND X3.X5_TABELA = ‘Z2‘ " + CRLF
cQryAux += " LEFT JOIN " + RetSQLName(‘SX5010‘) + " X2 ON X2.X5_CHAVE = B1.B1_ZZTIPO AND X2.X5_TABELA = ‘Z3‘ " + CRLF
cQryAux += " WHERE " + CRLF
cQryAux += " B1.B1_FILIAL = ‘ ‘ AND " + CRLF
cQryAux += " (B1.B1_GRUPO = ‘T000‘ OR SUBSTRING(B1.B1_GRUPO,1,3) IN (‘E00‘,‘E20‘)) AND " + CRLF
cQryAux += " B1.D_E_L_E_T_ <> ‘*‘ AND DA1.D_E_L_E_T_ <> ‘*‘ AND " + CRLF
cQryAux += " DA1.DA1_FILIAL = ‘ ‘ AND DA1.DA1_CODTAB = ‘V00‘ " + CRLF
cQryAux += " ORDER BY 1,2,3,4,5,6,7 " + CRLF
TCQUERY cQryAux Alias cAlias New
// Tratamento de adequação da query
cQryAux := ChangeQuery(cQryAux)
// Cria e seleciona a tabela temporária
dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQryAux), cAlias, .F., .T.)
DbSelectArea(cAlias)
cAlias->(dbGoTop())
oReport:SetMeter(cAlias->(LastRec()))
While !(cAlias)->(EOF())
If oReport:Cancel()
Exit
EndIf
//Iniciando a primeira seção
oSection1:Init()
oReport:IncMeter()
IncProc("Imprimindo Cliente "+ Alltrim(cAlias->B1_COD))
//Imprimindo primeira seção:
oSection1:Cell("MARCA"):SetValue(AllTrim(cAlias->MARCA))
oSection1:Printline()
//Iniciando a segunda seção
oSection2:Init()
// oReport:IncMeter()
// IncProc("Imprimindo Cliente "+ Alltrim(cAlias->B1_COD))
//Imprimindo primeira seção:
oSection2:Cell("TIPO"):SetValue(Alltrim(cAlias->TIPO))
oSection2:Printline()
// Iniciar a impressão da seção 3
// oSection3:Init()
// //verifica se o codigo do cliente é o mesmo, se sim, imprime os dados do pedido
// oReport:IncMeter()
// IncProc("Imprimindo produtos..."+ Alltrim(cAlias->B1_COD))
// oSection3:Cell("B1_COD"):SetValue(cAlias->B1_COD)
// oSection3:Cell("B1_DESC"):SetValue(cAlias->B1_DESC)
// oSection3:Cell("ARMAZEM"):SetValue(cAlias->ARMAZEM)
// oSection3:Cell("MODELO"):SetValue(cAlias->MODELO)
// oSection3:Cell("CAPACIDADE"):SetValue(cAlias->CAPACIDADE)
// oSection3:Cell("AVISTA"):SetValue(cAlias->AVISTA)
// oSection3:Cell("APRAZO"):SetValue(cAlias->APRAZO)
// oSection3:Printline()
// cAlias->(dbSkip())
// oSection3:Finish()
oSection1:Finish()
oSection2:Finish()
EndDo
DbCloseArea()
Return
|
|
|
Mensagem do
TI-02
em 30/07/2024, 14:43 h
Local: SP Registro: 29/07/2024 Postagens: 17 |
Segue anexo de um print do problema. |
|
|
Mensagem do
ROBERTOMEN
em 30/07/2024, 17:25 h
Local: PR Registro: 04/07/2017 Postagens: 550 |
Tire o comentário que vc colocou no dbskip.
Senão o do while fica em loop e não termina nunca. |
|
|
Mensagem do
TI-02
em 31/07/2024, 10:26 h
Local: SP Registro: 29/07/2024 Postagens: 17 |
Foi exatamente isso, Obrigado ROBERTOMEN |
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|