Recuperar Filtro smartview

Bom dia !

Por favor, poderia auxiliar sobre o assunto. As documentações não são completas.

Segue fonte do objeto de negocio. Criei dois parâmetros:

self:addParameter(“FILIAL”, “Filial do Pedido”, “string”, .T., “SC5.C5_FILIAL”)
self:addParameter(“NUMERO”, “Numero do Pedido”, “string”, .T., “SC5.C5_NUM”)

Preciso recuperar os parâmetros informados pelo usuário no Smartview. Tentei algumas opções disponíveis no TDN, porém se sucesso.

Fonte completo: (Os filtros estão fixos no SQL para testes)

#include “msobject.ch”
#include “totvs.framework.treports.integratedprovider.th”

//-------------------------------------------------------------------
//*/{Protheus.doc} SC5TReportsBusinessObject
//Objeto de Negócio (TReports) para visualização de Pedidos de Venda (SC5)
//-------------------------------------------------------------------
namespace custom.faturamento.pedidos.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T., team=“SIGAFAT”, tables=“SC5,SC6,SA1,SA3,SB1”, name=“PEDIDOSCUSTOM”, country=“ALL”, initialRelease=“12.1.2210”)
class SC5TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider

public method new() as object
public method getData() as object
public method getSchema() as object

endclass

/*

| new()
| Construtor da classe. Define as informações básicas do Objeto de Negócio.

*/
method new() class SC5TReportsBusinessObject
_Super:new()

self:appendArea("Local")
self:setDisplayName("PEDIDOS CUSTOM")
self:setDescription("PRO COM LOCAL")

return self

/*

| getData()
| Prepara e define a consulta SQL que será executada.

*/
method getData() as object class SC5TReportsBusinessObject
local cQuery as character

self:setPageSize(500)

// A sua nova query foi inserida aqui. A ordem dos campos é a mesma do getSchema().
cQuery := "SELECT SC5.C5_FILIAL, SC5.C5_NUM, SC5.C5_EMISSAO, SA1.A1_NOME, SA1.A1_TIPO, SA1.A1_CGC, SA1.A1_INSCR, " +;
          "       SA1.A1_EST, SA1.A1_MUN, SA1.A1_BAIRRO, SA1.A1_CEP, SA1.A1_END, SA1.A1_EMAIL, SA1.A1_DDD, " +;
          "       SA1.A1_TEL, SC5.C5_REDESP, SC6.C6_ITEM, SC6.C6_PRODUTO, SC6.C6_DESCRI, SC6.C6_ESTPAI, SC6.C6_ESTPAII, " +;
          "       SC6.C6_UM, SB1.B1_DESCOME, SB1.B1_LINKIMG, SC5.C5_CONDPAG, ISNULL(SC5.C5_FRETE, 0) AS C5_FRETE, SC5.C5_USUARIO, " +;
          "       SA3.A3_NREDUZ, SC6.C6_TES, SC6.C6_CF, ISNULL(SC6.C6_QTDVEN, 0) AS C6_QTDVEN, ISNULL(SC6.C6_PRUNIT, 0) AS C6_PRUNIT, " +;
          "       ISNULL(SC6.C6_VALDESC, 0) AS C6_VALDESC, ISNULL(SC6.C6_VALOR, 0) AS C6_VALOR, ISNULL(SC6.C6_IPI, 0) AS C6_IPI, " +;
          "       ISNULL(SC6.C6_VALIPI, 0) AS C6_VALIPI, ISNULL(SC6.C6_PICM, 0) AS C6_PICM, ISNULL(SC6.C6_VALICM, 0) AS C6_VALICM, " +;
          "       ISNULL(SC6.C6_PRCVEN, 0) AS C6_PRCVEN, SC6.C6_ENTREG, ISNULL(SC6.C6_ACRSFIN, 0) AS C6_ACRSFIN " +;
          "FROM " + RetSqlName("SC5") + " SC5 " +;
          "INNER JOIN " + RetSqlName("SC6") + " SC6 ON SC5.C5_FILIAL = SC6.C6_FILIAL AND SC5.C5_NUM = SC6.C6_NUM  AND SC5.C5_FILIAL = '01' AND SC5.C5_NUM = '894660' " +;
          "INNER JOIN " + RetSqlName("SB1") + " SB1 ON SC6.C6_PRODUTO = SB1.B1_COD " +;
          "INNER JOIN " + RetSqlName("SA3") + " SA3 ON SC5.C5_VEND1 = SA3.A3_COD " +;
          "INNER JOIN " + RetSqlName("SA1") + " SA1 ON SC5.C5_CLIENTE = SA1.A1_COD AND SC5.C5_LOJACLI = SA1.A1_LOJA "

// Cláusula WHERE com os filtros, incluindo a macro %Filter()% para que você possa filtrar na tela.
//self:setWhere("SC5.D_E_L_E_T_ = ' ' AND SC6.D_E_L_E_T_ = ' ' AND SA1.D_E_L_E_T_ = ' ' AND SA3.D_E_L_E_T_ = ' ' AND SB1.D_E_L_E_T_ = ' ' AND SC6.C6_TES <> '999' %Filter()%")
self:setWhere("%Filial('SC5')% AND SC5.D_E_L_E_T_ = ' ' AND SC6.D_E_L_E_T_ = ' ' AND SA1.D_E_L_E_T_ = ' ' AND SA3.D_E_L_E_T_ = ' ' AND SB1.D_E_L_E_T_ = ' ' AND SC6.C6_TES <> '999' %Filter()%")

self:setQuery(cQuery)
self:setOrder("SC6.C6_ITEM")

// O retorno deve ser o objeto de dados (self:oData).

return self:oData

/*

| getSchema()
| Define a estrutura (colunas/propriedades) que estarão disponíveis no SmartView.

*/
method getSchema() as object class SC5TReportsBusinessObject

// Adicionando os parâmetros com a sintaxe correta que você forneceu

self:addParameter("FILIAL", "Filial do Pedido", "string", .T., "SC5.C5_FILIAL")
self:addParameter("NUMERO", "Numero do Pedido", "string", .T., "SC5.C5_NUM")

self:addProperty("C5_FILIAL", "Filial", "string", "Filial do Pedido", "SC5.C5_FILIAL")
self:addProperty("C5_NUM", "Numero", "string", "Número do Pedido", "SC5.C5_NUM")
self:addProperty("C5_EMISSAO", "Emissão", "date", "Data de Emissão", "SC5.C5_EMISSAO")

self:addProperty("A1_NOME", "Nome Cliente", "string", "Nome do Cliente", "SA1.A1_NOME")
self:addProperty("A1_TIPO", "Tipo Pessoa", "string", "Tipo de Pessoa (F ou J)", "SA1.A1_TIPO")
self:addProperty("A1_CGC", "CNPJ/CPF", "string", "CNPJ ou CPF", "SA1.A1_CGC")
self:addProperty("A1_INSCR", "Insc. Estadual", "string", "Inscrição Estadual", "SA1.A1_INSCR")
self:addProperty("A1_EST", "Estado", "string", "Estado", "SA1.A1_EST")
self:addProperty("A1_MUN", "Município", "string", "Município", "SA1.A1_MUN")
self:addProperty("A1_BAIRRO", "Bairro", "string", "Bairro", "SA1.A1_BAIRRO")
self:addProperty("A1_CEP", "CEP", "string", "CEP", "SA1.A1_CEP")
self:addProperty("A1_END", "Endereço", "string", "Endereço", "SA1.A1_END")
self:addProperty("A1_EMAIL", "E-mail", "string", "E-mail", "SA1.A1_EMAIL")
self:addProperty("A1_DDD", "DDD", "string", "DDD", "SA1.A1_DDD")
self:addProperty("A1_TEL", "Telefone", "string", "Telefone", "SA1.A1_TEL")

self:addProperty("C5_REDESP", "Redespacho", "string", "Código da Redespachadora", "SC5.C5_REDESP")

self:addProperty("C6_ITEM", "Item", "string", "Item do Pedido", "SC6.C6_ITEM")
self:addProperty("C6_PRODUTO", "Produto", "string", "Código do Produto", "SC6.C6_PRODUTO")
self:addProperty("C6_DESCRI", "Descrição Item", "string", "Descrição do Item", "SC6.C6_DESCRI")
self:addProperty("C6_ESTPAI", "Estrutura Pai", "string", "Estrutura Pai", "SC6.C6_ESTPAI")
self:addProperty("C6_ESTPAII", "Item Estrutura Pai", "string", "Item da Estrutura Pai", "SC6.C6_ESTPAII")
self:addProperty("C6_UM", "UM", "string", "Unidade de Medida", "SC6.C6_UM")

self:addProperty("B1_DESCOME", "Desc. Produto", "string", "Descrição Comercial do Produto", "SB1.B1_DESCOME")
self:addProperty("B1_LINKIMG", "Link da Imagem", "string", "Link da Imagem do Produto", "SB1.B1_LINKIMG")

self:addProperty("C5_CONDPAG", "Cond. Pagamento", "string", "Condição de Pagamento", "SC5.C5_CONDPAG")
self:addProperty("C5_FRETE", "Valor Frete", "number", "Valor do Frete", "SC5.C5_FRETE")
self:addProperty("C5_USUARIO", "Usuário", "string", "Usuário do Pedido", "SC5.C5_USUARIO")

self:addProperty("A3_NREDUZ", "Nome Vendedor", "string", "Nome Reduzido do Vendedor", "SA3.A3_NREDUZ")

self:addProperty("C6_TES", "TES", "string", "Tipo de Entrada e Saída", "SC6.C6_TES")
self:addProperty("C6_CF", "CF", "string", "Código Fiscal", "SC6.C6_CF")
self:addProperty("C6_QTDVEN", "Qtd. Venda", "number", "Quantidade Vendida", "SC6.C6_QTDVEN")
self:addProperty("C6_PRUNIT", "Preço Unitário", "number", "Preço Unitário", "SC6.C6_PRUNIT")
self:addProperty("C6_VALDESC", "Valor Desc. Item", "number", "Valor de Desconto do Item", "SC6.C6_VALDESC")
self:addProperty("C6_VALOR", "Valor Total Item", "number", "Valor Total do Item", "SC6.C6_VALOR")
self:addProperty("C6_IPI", "IPI", "number", "Aliquota IPI", "SC6.C6_IPI")
self:addProperty("C6_VALIPI", "Valor IPI", "number", "Valor do IPI", "SC6.C6_VALIPI")
self:addProperty("C6_PICM", "PIS", "number", "Aliquota ICMS", "SC6.C6_PICM")
self:addProperty("C6_VALICM", "Valor PIS", "number", "Valor do ICMS", "SC6.C6_VALICM")
self:addProperty("C6_PRCVEN", "Preço Venda", "number", "Preço de Venda", "SC6.C6_PRCVEN")
self:addProperty("C6_ENTREG", "Entrega", "date", "Data de Entrega", "SC6.C6_ENTREG")
self:addProperty("C6_ACRSFIN", "Acréscimo Financeiro Item", "number", "Acréscimo Financeiro do Item", "SC6.C6_ACRSFIN")

return self:oSchema

Grato

Tentei o metodo desse exemplo. Não filtra os dados informados.

Exibir origem

Olá Daniel, segue uma implementação de getDate que fiz, espero que ajude.

/*/{Protheus.doc} getData
  (Retorna os dados do objeto de negócio)
  @author Leandro Lemos
  @since 07/02/2025
  @version P12
  @param nPage as numeric, param_type, param_descr
  @return return_var, return_type, return_description
  /*/
method getData(nPage as numeric, oFilter as object) as object class PvNEntregueTReportsBusinessObject
	local cQuery as character
	local nSkip as numeric
	local nCount as numeric
	local nX as numeric
	local jItems as json
	local aPDFields as array
	local lUseParams as logical
	Local cAlias := "getDataFatA" as character

	nCount := 0

	cQuery:=" SELECT
	cQuery+=" C5_FILIAL,C5_NUM,C5_EMISSAO,A1_COD,A1_LOJA,A1_NOME,A1_NREDUZ,C6_ITEM,C6_PRODUTO,B1_DESC,C6_UM,C6_QTDVEN,C6_QTDENT,C6_PRCVEN,C6_VALOR,C5_VEND1,A3_NOME,
cQuery+=" B1_GRUPO,BM_DESC
cQuery+=" FROM " + RetSQLName("SC5") + " SC5
cQuery+=" INNER JOIN " + RetSQLName("SC6") + " SC6 ON " + FWJoinFilial( "SC6", "SC5" ) + " AND C5_NUM = C6_NUM
cQuery+=" INNER JOIN " + RetSQLName("SB1") + " SB1 ON " + FWJoinFilial( "SB1", "SC5" ) + " AND C6_PRODUTO = B1_COD
cQuery+=" INNER JOIN " + RetSQLName("SA1") + " SA1 ON " + FWJoinFilial( "SA1", "SC5" ) + " AND C5_CLIENTE = A1_COD AND C5_LOJACLI = A1_LOJA
cQuery+=" INNER JOIN " + RetSQLName("SA3") + " SA3 ON " + FWJoinFilial( "SA3", "SC5" ) + " AND C5_VEND1 = A3_COD
cQuery+=" INNER JOIN " + RetSQLName("SBM") + " SBM ON " + FWJoinFilial( "SBM", "SC5" ) + " AND BM_GRUPO = B1_GRUPO
cQuery+=" WHERE
cQuery+=" SC5.D_E_L_E_T_ = ' '
cQuery+=" AND SC6.D_E_L_E_T_ = ' '
cQuery+=" AND SA1.D_E_L_E_T_ = ' '
cQuery+=" AND SA3.D_E_L_E_T_ = ' '
cQuery+=" AND SBM.D_E_L_E_T_ = ' '
cQuery+=" AND C5_FILIAL = "+ValToSql(xFilial("SC5"))
cQuery+=" AND C6_FILIAL = "+ValToSql(xFilial("SC6"))
cQuery+=" AND ROUND(C6_QTDVEN,2) > ROUND(C6_QTDENT,2)
cQuery+=" AND C5_NOTA  <> 'XXXXXX'
cQuery+=" AND C6_BLQ  <> 'R'

lUseParams := .T.

//Os filtros serão setados na interface do novo TReports
if oFilter:hasFilter()
	cQuery += " AND " + oFilter:getSQLExpression()
endif

jParams := oFilter:getParameters() //metodo para retorno do json dos parâmetros

if ValType(jParams["01"]) <> "A" .and. ValType(jParams["02"]) <> "A" ;
		.or. ( ValType(jParams["03"]) <> "A" .and. ValType(jParams["04"]) <> "A" ) ;
		.or. (ValType(jParams["05"]) <> "A" .and. ValType(jParams["06"]) <> "A") ;
		.or. (ValType(jParams["07"]) <> "A" .and. ValType(jParams["08"]) <> "A") ;
		.or. (ValType(jParams["09"]) <> "A" .and. ValType(jParams["10"]) <> "A") ;
		.or. ValType(jParams["11"]) <> "A"
	lUseParams := .F.
endif

//Pedido
if lUseParams .and. !empty(jParams["01"][1]) .and. !empty(jParams["02"][1])
	cQuery += " AND C5_NUM BETWEEN " + ValToSql(jParams['01'][1]) + " AND " +  ValToSql(jParams['02'][1])
endif

//Cliente
if lUseParams .and. !empty(jParams["03"][1]) .and. !empty(jParams["04"][1])
	cQuery += " AND C5_CLIENTE BETWEEN " + ValToSql(jParams['03'][1]) + " AND " +  ValToSql(jParams['04'][1])
endif

//Vendedor
if lUseParams .and. !empty(jParams["05"][1]) .and. !empty(jParams["06"][1])
	cQuery += " AND C5_VEND1 BETWEEN " + ValToSql(jParams['05'][1]) + " AND " +  ValToSql(jParams['06'][1])
endif

//Grupo
if lUseParams .and. !empty(jParams["07"][1]) .and. !empty(jParams["08"][1])
	cQuery += " AND B1_GRUPO BETWEEN " + ValToSql(jParams['07'][1]) + " AND " +  ValToSql(jParams['08'][1])
endif

//Emissão
if lUseParams .and. !empty(jParams["09"][1]) .and. !empty(jParams["10"][1])
	cQuery += " AND C5_EMISSAO BETWEEN " +ValToSql(DTOS(fwDateTimeToLocal(jParams['09'][1],0)[1])) + " AND " +  ValToSql(DTOS(fwDateTimeToLocal(jParams['10'][1],0)[1]))
endif

//Produtos excluidos
if lUseParams .and. !empty(jParams["11"][1])
	cQuery += " AND C5_NUM NOT IN ( SELECT C6_NUM FROM  " + RetSQLName("SC6") + " SC6 WHERE C6_FILIAL = "+ValToSql(xFilial("SC6"))+" AND SC6.D_E_L_E_T_ = ' ' AND C6_PRODUTO IN" + FormatIn(jParams['11'][1],",") +" GROUP BY C6_NUM)"
endif

//Filial
/* 
if lUseParams .and. !empty(jParams["12"][1])
	cQuery += " AND C5_FILIAL = " +  ValToSql(jParams['12'][1])
endif
*/

PLSQuery(cQuery,cAlias)

conout('pvnentregue->cQuery->',cQuery)

if nPage == 1
	(cAlias)->(dbGoTop())
else
	//Encontra a quantidade de itens que irá pular de acordo com a página atual
	nSkip := ((nPage - 1) * self:getPageSize())

	(cAlias)->(dbSkip(nSkip))
endif

//Verifica se precisa fazer o tratamento para LGPD
	aPDFields := FwProtectedDataUtil():UsrAccessPDField(__cUserID, self:aFields)
	lObfuscated := len( aPDFields ) != Len(self:aFields)
	nLin := 0
	while !(cAlias)->(Eof())
		jItems := JsonObject():new()
		/* 
		for nX := 1 To Len(self:aStruct)
			if lObfuscated .and. aScan(aPDFields, self:aStruct[nX][3]) == 'date'
				jItems[self:aStruct[nX][1]] := FWTimeStamp(6,(cAlias)->&(self:aStruct[nX][5]),"00:00:00")
			else
				jItems[self:aStruct[nX][1]] := (cAlias)->&(self:aStruct[nX][5])
			endif
		next nX
 */
		for nX := 1 To Len(self:aStruct)
			if lObfuscated .and. aScan(aPDFields, self:aStruct[nX][5]) == 0
				if self:aStruct[nX][3] == "date"
					jItems[self:aStruct[nX][1]] := nil
				elseif  self:aStruct[nX][3] == "number"
					jItems[self:aStruct[nX][1]] := Val( Replicate( "9", Len((cAlias)->&(self:aStruct[nX][5])) ) )
				else
					jItems[self:aStruct[nX][1]] := FwProtectedDataUtil():ValueAsteriskToAnonymize((cAlias)->&(self:aStruct[nX][5]))
				endif
			elseif self:aStruct[nX][3] == "date"
				if ValType((cAlias)->&(self:aStruct[nX][5])) == 'D'
					xValue := DToS((cAlias)->&(self:aStruct[nX][5]))
				else
					xValue := (cAlias)->&(self:aStruct[nX][5])
				endif
				jItems[self:aStruct[nX][1]] := totvs.framework.treports.date.stringToTimeStamp(xValue)
			else
				jItems[self:aStruct[nX][1]] := (cAlias)->&(self:aStruct[nX][5])
			endif
		next nX
		self:oData:appendData(jItems)

		(cAlias)->(DBSkip())
		nCount++

		//Sai do loop quando chegar no tamanho de itens da página
		if nCount == self:getPageSize()
			exit
		endif
	enddo

//Se não for o último registro indica que terá próxima página
	self:setHasNext(!(cAlias)->(Eof()))

	(cAlias)->(DBCloseArea())
	Conout('pvnentregue: chegou ao final do getData')
return self:oData

Bom dia Leandro. Agradeço pelo retorno.
Nunca tinha desenvolvido um objeto de negócios, testei vários métodos e nenhum funcionava. Foi na tentativa e erro. A parte boa é que você aprende.
Vou deixar o código que consegui aqui. A Totvs tem dificuldade ou desinteresse de disponibilizar um código completo.

Não sei se são as melhores praticas, mas pode ser util para quem está iniciando:

#include “protheus.ch”
#include “msobject.ch”
#include “totvs.framework.treports.integratedprovider.th”

//-------------------------------------------------------------------
//*/{Protheus.doc} SC5TReportsBusinessObject
//Objeto de Negócio (SmartView) para visualização de Proposta comercial (Pedidos de Venda) no SmartView.
//
//@author Daniel Alves
//@since 21/09/2025
//@version 1.0
//-------------------------------------------------------------------

namespace custom.faturamento.pedidos.integratedprovider

@totvsFrameworkTReportsIntegratedProvider(active=.T., team=“SIGAFAT”, tables=“SC5,SC6,SA1,SA3,SB1”, name=“PEDIDOSCUSTOM”, country=“ALL”, initialRelease=“12.1.2210”)
class SC5TReportsBusinessObject from totvs.framework.treports.integratedprovider.IntegratedProvider

public method new() as object
public method getData(nPage as numeric, oFilter as object) as object
public method getSchema() as object

endclass

//------------------------------------------------------------------------------
// Método: new()
//------------------------------------------------------------------------------
method new() class SC5TReportsBusinessObject

_Super:new()

self:appendArea("EMPRESA")
self:setDisplayName("PEDIDOS CUSTOM")
self:setDescription("PRO COM EMPRESA")

return self

//------------------------------------------------------------------------------
// Método: getData()
//------------------------------------------------------------------------------
method getData(nPage as numeric, oFilter as object) as object class SC5TReportsBusinessObject
local cQuery := “”
local jParams := NIL
local lUseParams as logical

self:setPageSize(500)

cQuery := "SELECT SC5.C5_FILIAL, SC5.C5_NUM, SC5.C5_EMISSAO, SA1.A1_NOME, SA1.A1_TIPO, SA1.A1_CGC, SA1.A1_INSCR, " +;
          "SA1.A1_EST, SA1.A1_MUN, SA1.A1_BAIRRO, SA1.A1_CEP, SA1.A1_END, SA1.A1_EMAIL, SA1.A1_DDD, SA1.A1_TEL, " +;
          "SC5.C5_REDESP, SC6.C6_ITEM, SC6.C6_PRODUTO, SC6.C6_DESCRI, SC6.C6_ESTPAI, SC6.C6_ESTPAII, SC6.C6_UM, " +;
          "SB1.B1_DESCOME, SB1.B1_LINKIMG, SC5.C5_CONDPAG, ISNULL(SC5.C5_FRETE,0) AS C5_FRETE, SC5.C5_USUARIO, " +;
          "SA3.A3_NREDUZ, SC6.C6_TES, SC6.C6_CF, ISNULL(SC6.C6_QTDVEN,0) AS C6_QTDVEN, ISNULL(SC6.C6_PRUNIT,0) AS C6_PRUNIT, " +;
          "ISNULL(SC6.C6_VALDESC,0) AS C6_VALDESC, ISNULL(SC6.C6_VALOR,0) AS C6_VALOR, ISNULL(SC6.C6_IPI,0) AS C6_IPI, " +;
          "ISNULL(SC6.C6_VALIPI,0) AS C6_VALIPI, ISNULL(SC6.C6_PICM,0) AS C6_PICM, ISNULL(SC6.C6_VALICM,0) AS C6_VALICM, " +;
          "ISNULL(SC6.C6_PRCVEN,0) AS C6_PRCVEN, SC6.C6_ENTREG, ISNULL(SC6.C6_ACRSFIN,0) AS C6_ACRSFIN " +;
          "FROM " + RetSqlName("SC5") + " SC5 " +;
          "JOIN " + RetSqlName("SC6") + " SC6 ON SC5.C5_FILIAL = SC6.C6_FILIAL AND SC5.C5_NUM = SC6.C6_NUM " +;
          "JOIN " + RetSqlName("SB1") + " SB1 ON SC6.C6_PRODUTO = SB1.B1_COD " +;
          "JOIN " + RetSqlName("SA3") + " SA3 ON SC5.C5_VEND1 = SA3.A3_COD " +;
          "JOIN " + RetSqlName("SA1") + " SA1 ON SC5.C5_CLIENTE = SA1.A1_COD AND SC5.C5_LOJACLI = SA1.A1_LOJA " +;
          "WHERE SC5.D_E_L_E_T_ = ' ' AND SC6.D_E_L_E_T_ = ' ' AND SA1.D_E_L_E_T_ = ' ' AND SA3.D_E_L_E_T_ = ' ' AND SB1.D_E_L_E_T_ = ' '  "

lUseParams := .T.

    //Os filtros serão setados na interface do novo TReports
    if oFilter:hasFilter()
        cQuery += " AND " + oFilter:getSQLExpression()
    endif

// Parâmetros definidos no getSchema()
if ValType(oFilter) == "O"
    jParams := oFilter:getParameters()

    if !Empty(jParams["FILIAL"][1])
        cQuery += " AND SC5.C5_FILIAL = '" + AllTrim(jParams["FILIAL"][1]) + "'"
    endif

    if jParams != NIL .and. !Empty(jParams["NUMERO"][1])
        cQuery += " AND SC5.C5_NUM = '" + AllTrim(jParams["NUMERO"][1]) + "'"
    endif
endif

self:setQuery(cQuery)
self:setOrder("SC6.C6_ITEM")

return self:oData

//------------------------------------------------------------------------------
// Método: getSchema()
//------------------------------------------------------------------------------
method getSchema() class SC5TReportsBusinessObject

// Parâmetros que virão da tela do SmartView
self:addParameter("FILIAL", "Filial do Pedido", "string", .F., "SC5.C5_FILIAL")
self:addParameter("NUMERO", "Número do Pedido", "string", .F., "SC5.C5_NUM")

// Optional: Lookup para facilitar escolha dos parâmetros
self:setCustomURL("01", "api/framework/v1/genericLookupService/smartview/SMO", 2)
self:setCustomURL("02", "api/framework/v1/genericLookupService/smartview/SC5", 2)

// Define propriedades exibidas no relatório
self:addProperty("C5_FILIAL", "Filial", "string", "Filial do Pedido", "SC5.C5_FILIAL")
self:addProperty("C5_NUM", "Número", "string", "Número do Pedido", "SC5.C5_NUM")
self:addProperty("C5_EMISSAO", "Emissão", "date", "Data de Emissão", "SC5.C5_EMISSAO")
self:addProperty("A1_NOME", "Nome Cliente", "string", "Nome do Cliente", "SA1.A1_NOME")
self:addProperty("A1_TIPO", "Tipo Pessoa", "string", "Tipo de Pessoa", "SA1.A1_TIPO")
self:addProperty("A1_CGC", "CNPJ/CPF", "string", "Documento", "SA1.A1_CGC")
self:addProperty("A1_INSCR", "IE", "string", "Inscrição Estadual", "SA1.A1_INSCR")
self:addProperty("A1_EST", "Estado", "string", "Estado", "SA1.A1_EST")
self:addProperty("A1_MUN", "Cidade", "string", "Município", "SA1.A1_MUN")
self:addProperty("A1_BAIRRO", "Bairro", "string", "Bairro", "SA1.A1_BAIRRO")
self:addProperty("A1_CEP", "CEP", "string", "CEP", "SA1.A1_CEP")
self:addProperty("A1_END", "Endereço", "string", "Endereço", "SA1.A1_END")
self:addProperty("A1_EMAIL", "E-mail", "string", "E-mail", "SA1.A1_EMAIL")
self:addProperty("A1_DDD", "DDD", "string", "DDD", "SA1.A1_DDD")
self:addProperty("A1_TEL", "Telefone", "string", "Telefone", "SA1.A1_TEL")

self:addProperty("C5_REDESP", "Redespacho", "string", "Código da Redespachadora", "SC5.C5_REDESP")
self:addProperty("C6_ITEM", "Item", "string", "Item do Pedido", "SC6.C6_ITEM")
self:addProperty("C6_PRODUTO", "Produto", "string", "Código do Produto", "SC6.C6_PRODUTO")
self:addProperty("C6_DESCRI", "Descrição", "string", "Descrição do Produto", "SC6.C6_DESCRI")
self:addProperty("C6_ESTPAI", "Estrutura Pai", "string", "", "SC6.C6_ESTPAI")
self:addProperty("C6_ESTPAII", "Item Estrutura", "string", "", "SC6.C6_ESTPAII")
self:addProperty("C6_UM", "Unidade", "string", "Unidade", "SC6.C6_UM")
self:addProperty("B1_DESCOME", "Desc. Comercial", "string", "Descrição Comercial", "SB1.B1_DESCOME")
self:addProperty("B1_LINKIMG", "Imagem", "string", "Link da Imagem", "SB1.B1_LINKIMG")
self:addProperty("C5_CONDPAG", "Cond. Pagamento", "string", "Condição", "SC5.C5_CONDPAG")
self:addProperty("C5_FRETE", "Frete", "number", "Valor do Frete", "SC5.C5_FRETE")
self:addProperty("C5_USUARIO", "Usuário", "string", "Usuário", "SC5.C5_USUARIO")
self:addProperty("A3_NREDUZ", "Vendedor", "string", "Nome do Vendedor", "SA3.A3_NREDUZ")
self:addProperty("C6_TES", "TES", "string", "Tipo de Entrada", "SC6.C6_TES")
self:addProperty("C6_CF", "CF", "string", "Código Fiscal", "SC6.C6_CF")
self:addProperty("C6_QTDVEN", "Qtd.", "number", "Quantidade Vendida", "SC6.C6_QTDVEN")
self:addProperty("C6_PRUNIT", "Preço Unit.", "number", "Preço Unitário", "SC6.C6_PRUNIT")
self:addProperty("C6_VALDESC", "Desc.", "number", "Desconto", "SC6.C6_VALDESC")
self:addProperty("C6_VALOR", "Total", "number", "Valor Total", "SC6.C6_VALOR")
self:addProperty("C6_IPI", "IPI (%)", "number", "IPI", "SC6.C6_IPI")
self:addProperty("C6_VALIPI", "Valor IPI", "number", "Valor do IPI", "SC6.C6_VALIPI")
self:addProperty("C6_PICM", "ICMS (%)", "number", "ICMS", "SC6.C6_PICM")
self:addProperty("C6_VALICM", "Valor ICMS", "number", "Valor do ICMS", "SC6.C6_VALICM")
self:addProperty("C6_PRCVEN", "Preço Venda", "number", "Preço de Venda", "SC6.C6_PRCVEN")
self:addProperty("C6_ENTREG", "Entrega", "date", "Data de Entrega", "SC6.C6_ENTREG")
self:addProperty("C6_ACRSFIN", "Acréscimo", "number", "Acréscimo Financeiro", "SC6.C6_ACRSFIN")

return self:oSchema