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:
Relatório Imprime infinitamente
Versão:
12.1.2210
Plataforma:
Microsoft
Complemento:
Windows 11 - 64Bit
DB:
SQL Server
Complemento:
relatorioINfinito.png (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 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

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 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 Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN 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.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 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

 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