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:
Erro: variable is not an object
Versão:
12.1.2210
Plataforma:
Microsoft
Complemento:
Windows 11 - 64Bit
DB:
SQL Server
Complemento:
download.jpg (anexo)
4 - TABELA VENDA 07-2024 PISO TETO.pdf (anexo)
RltMar.prw (anexo)
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 05/08/2024, 10:08 h
Local: SP  Registro: 29/07/2024  Postagens: 17
estou tentando criar um relatório usando Treport com multiplas sessões, e quebra entre elas, e to preso com um erro dizendo que a variável não é um objeto,

error log:

THREAD ERROR ([13088], Victor, TI-01)   05/08/2024 09:29:42
variable is not an object on RPTPRINT(RLTMAR.PRW) 05/08/2024 09:28:37 line : 407

[TOTVS build: 7.00.210324P-20240703]
Called from {|OREPORT| RPTPRINT(OREPORT)}(RLTMAR.PRW) 05/08/2024 09:28:37 line : 79
Called from {|| IIF(SELF:INIT(),(LACTION := EVAL(SELF:BACTION,SELF),SELF:FINISH()),LOK:= .F. ),LEND := .T. ,ODLG:END()}(REPORT01.PRW) 06/10/2023 09:02:56 line : 2246
Called from ::MSDIALOG:ACTIVATE
Called from TREPORT:PRINT(REPORT01.PRW) 06/10/2023 09:02:56 line : 2259
Called from TREPORT:PRINTDIALOG(REPORT01.PRW) 06/10/2023 09:02:56 line : 3523
Called from U_RLTMAR(RLTMAR.PRW) 05/08/2024 09:28:37 line : 9
Called from SIGAIXB(APLIB190.PRW) 06/10/2023 09:02:56 line : 254
Called from __EXECUTE(APLIB090.PRW) 06/10/2023 09:02:56 line : 668
Called from MDIEXECUTE(APLIB260.PRW) 06/10/2023 09:02:56 line : 924

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 oSection3     := Nil
     Local oBreak1     := Nil
     Local oBreak2     := Nil
     Local oBreak3     := Nil
     Local aMarcas      := {}
     Local cPergta      := ""
     Public cAItem      := "TMPQR1"
     Public cAMarca      := "TMPQR2"
     Public cATipo      := "TMPQR3"

     //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, cAItem, 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
     // cAItem          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     ")
     AAdd(aMarcas, "TCL                    ")

     oReport := TReport():New(cNome + dToS(Date()) + "_" + StrTran(Time(), ‘:‘, ‘-‘),"Relatório de marcas por tipo", cPergta,{|oReport| 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",/*cAItem:*/"SX5",/*cTitle:*/"Marca",/*cPicture:*/"@!",/*nSize:*/80,/*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(oSection1, "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",                         ;
          /*cAItem:*/"SX5",                          ;
          /*cTitle:*/"Tipo",                         ;
          /*cPicture:*/"@!",                         ;
          /*nSize:*/80,                               ;
          /*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(oSection2, "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",                     ;
          /*cAItem:*/                                        "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",                ;
          /*cAItem:*/                                        "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",                     ;
          /*cAItem:*/                                        "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",                     ;
          /*cAItem:*/                                        "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",                ;
          /*cAItem:*/                                        "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",                     ;
          /*cAItem:*/                                        "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",                     ;
          /*cAItem:*/                                        "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.                              ;
     )

     oBreak1 := TRBreak():New( oSection1,{|| (cAItem)->B1_ZZMARCA })
     oBreak2 := TRBreak():New( oSection2,{|| (cAItem)->B1_ZZTIPO      })
     oBreak3 := TRBreak():New( oSection3,{|| (cAItem)->B1_COD      })

Return (oReport)

Static Function RPTPrint(oReport)
     Local oSection1 := oReport:Section(1)
     Local oSection2 := oReport:Section(1):Section(1)
     Local oSection3 := oReport:Section(1):Section(2)
     Local cQryAux      := ""
     Local cQryAux2      := ""
     Local cQryAux3      := ""

     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 += "     B1_ZZMARCA,"                                                                                              + CRLF
     cQryAux += "     B1_ZZTIPO"                                                                                              + 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_ZZMARCA <> ‘‘AND "                                                                            + CRLF
     cQryAux += "     B1.B1_ZZTIPO <> ‘‘     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 cAItem New

     // Tratamento de adequação da query
     cQryAux := ChangeQuery(cQryAux)

     // Cria e seleciona a tabela temporária
     dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQryAux), cAItem, .F., .T.)

     cAItem->(dbGoTop())

     cQryAux2 := " SELECT DISTINCT "                               + CRLF
     cQryAux2 += "     X5_CHAVE, "                                 + CRLF
     cQryAux2 += "     X5_DESCRI "                                 + CRLF
     cQryAux2 += " FROM "                                         + CRLF
     cQryAux2 += "     " +           RetSQLName(‘SX5010‘) + " X5 "     + CRLF
     cQryAux2 += " WHERE "                                         + CRLF
     cQryAux2 += "     X5.X5_TABELA = ‘Z0‘ AND "                   + CRLF
     cQryAux2 += "     X5.D_E_L_E_T_ <> ‘*‘ "                      + CRLF
     cQryAux2 += " ORDER BY "                                      + CRLF
     cQryAux2 += "       X5_CHAVE "                                + CRLF

     TCQUERY cQryAux2 Alias cAMarca New

     // Tratamento de adequação da query
     cQryAux2 := ChangeQuery(cQryAux2)

     // Cria e seleciona a tabela temporária
     dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQryAux2), cAMarca, .F., .T.)

     cAMarca->(dbGoTop())
     
     cQryAux3 := " SELECT DISTINCT "                               + CRLF
     cQryAux3 += "     X5_CHAVE, "                                 + CRLF
     cQryAux3 += "     X5_DESCRI "                                 + CRLF
     cQryAux3 += " FROM "                                         + CRLF
     cQryAux3 += "     " +           RetSQLName(‘SX5010‘) + " X5 "     + CRLF
     cQryAux3 += " WHERE "                                         + CRLF
     cQryAux3 += "     X5.X5_TABELA = ‘Z3‘ AND "                   + CRLF
     cQryAux3 += "     X5.D_E_L_E_T_ <> ‘*‘ "                      + CRLF
     cQryAux3 += " ORDER BY "                                      + CRLF
     cQryAux3 += "       X5_CHAVE "                                + CRLF

     TCQUERY cQryAux3 Alias cATipo New

     // Tratamento de adequação da query
     cQryAux3 := ChangeQuery(cQryAux3)

     // Cria e seleciona a tabela temporária
     dbUseArea(.T., "TOPCONN", TCGENQRY(,,cQryAux3), cATipo, .F., .T.)
     
     cATipo->(dbGoTop())

     oReport:SetMeter(cAItem->(LastRec()))
     
     While (cAMarca)->(!Eof())
          If oReport:Cancel()
               Exit
          EndIf

          oReport:IncMeter()
          IncProc("Imprimindo Cliente "+ Alltrim(cAItem->B1_COD))

          // Inicializo a primeira seção
          oSection1:Init()

          // Imprimo a seção, relacionando os campos da section com os valores da tabela
          oSection1:SetLineBreak(.F.)

          //Imprimindo primeira seção:
          oSection1:Cell("MARCA"):SetValue(AllTrim(cAItem->MARCA))
          oSection1:Printline()

          While (cATipo)->(!Eof())
               oSection2:Init()

               // Imprimo a seção, relacionando os campos da section com os valores da tabela
               oSection2:SetLineBreak(.F.)

               //Imprimindo primeira seção:
               oSection2:Cell("TIPO"):SetValue(AllTrim(cAItem->TIPO))
               oSection2:Printline()

               While !(cAItem)->(EOF()) .AND. (cAItem->TIPO) == (cATipo->X5_CHAVE) .AND. (cAItem->MARCA) == (cAMarca->X5_CHAVE)
                    // Inicializo a primeira seção
                    oSection3:Init()

                    // Imprimo a seção, relacionando os campos da section com os valores da tabela
                    oSection3:SetLineBreak(.F.)

                    //Imprimindo primeira seção:
                    oSection3:Cell("B1_COD"):SetValue(cAItem->B1_COD)
                    oSection3:Cell("B1_DESC"):SetValue(cAItem->B1_DESC)
                    oSection3:Cell("ARMAZEM"):SetValue(cAItem->ARMAZEM)
                    oSection3:Cell("MODELO"):SetValue(cAItem->MODELO)
                    oSection3:Cell("CAPACIDADE"):SetValue(cAItem->CAPACIDADE)
                    oSection3:Cell("AVISTA"):SetValue(cAItem->AVISTA)
                    oSection3:Cell("APRAZO"):SetValue(cAItem->APRAZO)
                    oSection3:Printline()

                    (cAItem)->(dbSkip())
               EndDo

               (cATipo)->(dbSkip())
          EndDo

          (cAMarca)->(dbSkip())
     EndDo

     oSection1:Finish()
     oSection2:Finish()
     oSection3:Finish()

     (cAItem)->(dbCloseArea())

Return

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 05/08/2024, 13:13 h
Local: PR  Registro: 04/07/2017  Postagens: 544
Inicialize a oSection1 da linha 363, antes do do while, da linha 354

Assim:

     // Inicializo a primeira seção
     oSection1:Init()

     While (cAMarca)->(!Eof())
          If oReport:Cancel()
               Exit
          EndIf

          oReport:IncMeter()
          IncProc("Imprimindo Cliente "+ Alltrim(cAItem->B1_COD))

          // Imprimo a seção, relacionando os campos da section com os valores
          oSection1:SetLineBreak(.F.)

          //Imprimindo primeira seção:
          oSection1:Cell("MARCA"):SetValue(AllTrim(cAItem->MARCA))
          oSection1:Printline()

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 05/08/2024, 13:38 h
Local: SP  Registro: 29/07/2024  Postagens: 17
tentei porém continua apresentando o mesmo erro, ao depurar eu percebi que o código nunca entra no 3º While

ou seja o erro ta na hora de imprmir
mas ja deixei conforme a recomendação

// Inicializo a primeira seção
     oSection1:Init()
     
     While (cAMarca)->(!Eof())
          If oReport:Cancel()
               Exit
          EndIf

          oReport:IncMeter()
          IncProc("Imprimindo Cliente "+ Alltrim(cAItem->B1_COD))

          // Imprimo a seção, relacionando os campos da section com os valores da tabela
          oSection1:SetLineBreak(.F.)

          //Imprimindo primeira seção:
          oSection1:Cell("MARCA"):SetValue(AllTrim(cAItem->MARCA))
          oSection1:Printline()

          While (cATipo)->(!Eof())
               oSection2:Init()

               // Imprimo a seção, relacionando os campos da section com os valores da tabela
               oSection2:SetLineBreak(.F.)

               //Imprimindo primeira seção:
               oSection2:Cell("TIPO"):SetValue(AllTrim(cAItem->TIPO))
               oSection2:Printline()

               While !(cAItem)->(EOF()) .AND. (Alltrim(cAItem->B1_ZZTIPO)) == (Alltrim(cATipo->X5_CHAVE)) .AND. Alltrim((cAItem->B1_ZZMARCA)) == Alltrim((cAMarca->X5_CHAVE))
                    // Inicializo a primeira seção
                    oSection3:Init()

                    // Imprimo a seção, relacionando os campos da section com os valores da tabela
                    oSection3:SetLineBreak(.F.)

                    //Imprimindo primeira seção:
                    oSection3:Cell("B1_COD"):SetValue(cAItem->B1_COD)
                    oSection3:Cell("B1_DESC"):SetValue(cAItem->B1_DESC)
                    oSection3:Cell("ARMAZEM"):SetValue(cAItem->ARMAZEM)
                    oSection3:Cell("MODELO"):SetValue(cAItem->MODELO)
                    oSection3:Cell("CAPACIDADE"):SetValue(cAItem->CAPACIDADE)
                    oSection3:Cell("AVISTA"):SetValue(cAItem->AVISTA)
                    oSection3:Cell("APRAZO"):SetValue(cAItem->APRAZO)
                    oSection3:Printline()

                    (cAItem)->(dbSkip())
               EndDo

               (cATipo)->(dbSkip())
          EndDo

          (cAMarca)->(dbSkip())
     EndDo

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 05/08/2024, 13:39 h
Local: SP  Registro: 29/07/2024  Postagens: 17
enviei o arquivo para melhor analise se preferir

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 05/08/2024, 14:56 h
Local: SP  Registro: 29/07/2024  Postagens: 17
pelo que eu to vendo aqui ele não ta iterando o valor dos alias de marca e tipo, por isso não t entrando no while de itens

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 05/08/2024, 16:05 h
Local: PR  Registro: 04/07/2017  Postagens: 544
ótimo, o problema vc já sabe.

não entra no while então faça o mesmo, suba o oSection3:Init() pra cima do while.

Não via gerar o erro, mas também não vai imprimir nada pois a sua query da cAMarca e cATipo não está ponteirando junto com a query da cAItem.

use Apenas a query cAItem pois lá já tem o Join com a Marca e o Tipo

Vc não precisa das querys cAMarca e cATipo.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 06/08/2024, 07:56 h
Local: SP  Registro: 29/07/2024  Postagens: 17
o trecho do código atual:

// Inicializo as sessões
     oSection1:Init()
     oSection2:Init()
     // oSection3:Init()

     While (cAMarca)->(!Eof())
          If oReport:Cancel()
               Exit
          EndIf

          oReport:IncMeter()
          IncProc("Imprimindo Cliente "+ Alltrim(cAItem->B1_COD))

          // Imprimo a seção, relacionando os campos da section com os valores da tabela
          // oSection1:SetLineBreak(.F.)

          //Imprimindo primeira seção:
          oSection1:Cell("MARCA"):SetValue(AllTrim(cAMarca->X5_DESCRI))
          oSection1:Printline()

          While (cATipo)->(!Eof())
               // Imprimo a seção, relacionando os campos da section com os valores da tabela
               // oSection2:SetLineBreak(.F.)

               //Imprimindo primeira seção:
               oSection2:Cell("TIPO"):SetValue(AllTrim(cATipo->X5_DESCRI))
               oSection2:Printline()

               oSection3:Init()
               While (cAItem)->(!EOF())
                    // Imprimo a seção, relacionando os campos da section com os valores da tabela
                    // oSection3:SetLineBreak(.F.)

                    if ((Alltrim(cAItem->B1_ZZTIPO)) == Alltrim(cATipo->X5_CHAVE)) .AND. Alltrim((cAItem->B1_ZZMARCA)) == Alltrim((cAMarca->X5_CHAVE))


                         // Imprimindo primeira seção:
                         oSection3:Cell("B1_COD")     :SetValue(cAItem->B1_COD)
                         oSection3:Cell("B1_DESC")     :SetValue(cAItem->B1_DESC)
                         oSection3:Cell("ARMAZEM")     :SetValue(cAItem->ARMAZEM)
                         oSection3:Cell("MODELO")     :SetValue(cAItem->MODELO)
                         oSection3:Cell("CAPACIDADE"):SetValue(cAItem->CAPACIDADE)
                         oSection3:Cell("AVISTA")     :SetValue(cAItem->AVISTA)
                         oSection3:Cell("APRAZO")     :SetValue(cAItem->APRAZO)
                         oSection3:Printline()

                    endif


                    (cAItem)->(dbSkip())

               EndDo
               oSection3:Finish()

               (cATipo)->(dbSkip())

          EndDo

          (cAMarca)->(dbSkip())
     EndDo

     oSection1:Finish()
     oSection2:Finish()



o probelma é que eu preciso deles pra classificar os itens, eu vou imprimir o relatório por marca e tipo, então se eu tenho 4 tipos e 8 marcas por exemplo, a ideia era comparar cada uma das marcas e tipos, com cada item do cAitem, e imprimir ele quando ambos (marca e tipo) fossem equivalentes.

não sei se ficou claro vou tentar mandar um pdf de exemplo do que to tentando montar. Não precisa ficar igual ao PDF, ele é só um modelo do que pretendo fazer.

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 06/08/2024, 08:19 h
Local: SP  Registro: 29/07/2024  Postagens: 17
mesmo com o oSection3 acima do while ele permanece no mesmo erro

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário IROCHINHA IROCHINHA em 06/08/2024, 08:19 h
Local: SP  Registro: 09/08/2008  Postagens: 5
Amiguinhos,

Faça esta pequena alteração na user function:

#include 'totvs.ch'
#include 'topconn.ch'

User Function RltMar()

     Local oReport := Nil

     oReport := RptStruc("Relatório de Marcas ")
     if valtype( oReport ) <> "O"
        // Coloque sua mensagem de critica: Atenção - relatório não será gerado. Verifique.
        return
     endif
     oReport:PrintDialog()
Return

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário IROCHINHA IROCHINHA em 06/08/2024, 08:28 h
Local: SP  Registro: 09/08/2008  Postagens: 5
Amiguinhos,

User Function RltMar()

     Local oReport := Nil <--- Criação da variável oReport

     oReport := RptStruc("Relatório de Marcas ")
     oReport:PrintDialog()
Return

Static Function RPTStruc(cNome)
     Local oReport      := Nil <-- Redundância de variável pode anular anterior

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário TI-02 TI-02 em 09/08/2024, 17:00 h
Local: SP  Registro: 29/07/2024  Postagens: 17
inseri o arquivo novamente com todas as atualizaç~eso feitas até agora, e permanece com o mesmo erro,

User Function RltMar()

     Local oReportRe := Nil

     oReportRe := RptStruc("Relatório de Marcas ")
     if valtype(oReportRe) <> "O"
          FWAlertError("O relatório está com defeito, chame o Batman", "Erro")
          return
    endif
     oReportRe:PrintDialog()
Return

a RLTMar eu alterei pro que o irochinha falou sobre redundancia de variáveis, e alterei também o while como o robertomen havia falado

// Inicializo as sessões
     oSection1:Init()
     oSection2:Init()
     oSection3:Init()

     While (cAItem)->(!Eof())
          If oReport:Cancel()
               Exit
          EndIf

          oReport:IncMeter()
          IncProc("Imprimindo Cliente "+ Alltrim(cAItem->B1_COD))

          // Imprimo a seção, relacionando os campos da section com os valores da tabela
          // oSection1:SetLineBreak(.F.)

          oSection1:Cell("MARCA"):SetValue(AllTrim(cAItem->MARCA))
          oSection1:Printline()

          oSection2:Cell("TIPO"):SetValue(AllTrim(cAItem->TIPO))
          oSection2:Printline()
          
          oSection3:Cell("B1_COD")     :SetValue(cAItem->B1_COD)
          oSection3:Cell("B1_DESC")     :SetValue(cAItem->B1_DESC)
          oSection3:Cell("ARMAZEM")     :SetValue(cAItem->ARMAZEM)
          oSection3:Cell("MODELO")     :SetValue(cAItem->MODELO)
          oSection3:Cell("CAPACIDADE"):SetValue(cAItem->CAPACIDADE)
          oSection3:Cell("AVISTA")     :SetValue(cAItem->AVISTA)
          oSection3:Cell("APRAZO")     :SetValue(cAItem->APRAZO)
          oSection3:Printline()
          (cAItem)->(dbSkip())

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