|
|
Mensagem do
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
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() |
|
|
Mensagem do
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 |
|
|
Mensagem do
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 |
|
|
Mensagem do
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
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.
|
|
|
Mensagem do
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. |
|
|
Mensagem do
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 |
|
|
Mensagem do
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 |
|
|
Mensagem do
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
|
|
|
Mensagem do
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
|
|