Páginas filhas
  • LGX - LCONSTRUCT

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Pagetitle
LGX - LCONSTRUCT
LGX - LCONSTRUCT
Cria e executa uma tela de pesquisa, onde são informados filtros utilizados na seleção de registros.

As tabelas e colunas que poderão ser filtradas podem ser informadas manualmente ou recuperadas através do conteúdo metadado.

Nesta tela podem ser informados filtros no formato básico (apenas com valores), avançado (utilizando valores e comandos especiais) e também permite definir a ordenação dos registros. Este componente não executa nenhum comando na base de dados, apenas monta um filtro no formato SQL para que seja utilizado em uma pesquisa.


Hierarquia



Sintaxe


Bloco de código
_ADVPL_create_component( NULL, "LCONSTRUCT" )


Métodos GET


Métodos acessíveis através da função _ADVPL_get_property que permite recuperar e manipular os valores do componente:


Expandir
titleGET INIT_CONSTRUCT

Método GET: INIT_CONSTRUCT 

Inicia a execução da tela de filtro de pesquisa e retorna se o filtro foi ou não confirmado pelo usuário.

Sintaxe



Bloco de código
_ADVPL_get_property( <cReference>, "INIT_CONSTRUCT" ) => Boolean

Retorno



TipoDescrição
BOOLEAN

Verdadeiro se o filtro foi confirmado pelo usuário, falso se foi cancelado


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
  LET l_status = _ADVPL_get_property( <cReference>, "INIT_CONSTRUCT" )



Expandir
titleGET WHERE_CLAUSE

Método GET: WHERE_CLAUSE

Retorna o filtro informado na tela de pesquisa, no formato SQL.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "WHERE_CLAUSE" ) => Char

Retorno



TipoDescrição
CHAR

Filtro informado na tela de pesquisa no formato SQL.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE" )



Expandir
titleGET WHERE_CLAUSE_TABLE_COLUMN

Método GET: WHERE_CLAUSE_TABLE_COLUMN

Retorna o filtro no formato SQL, informado para determinada coluna da tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "WHERE_CLAUSE_TABLE_COLUMN", <cTable>, <cColumn> ) => Char

Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.Sim


Retorno



TipoDescrição
CHAR

Filtro no formato SQL informado para a coluna.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE_TABLE_COLUMN", <cTable>, <cColumn> )



Expandir
titleGET ORDER_BY

Método GET: ORDER_BY

Retorna a ordenação informada na tela de pesquisa, no formato SQL.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "ORDER_BY") => Char

Retorno



TipoDescrição
CHAR

Ordenação informada na tela de pesquisa, no formato SQL.


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_order_by = _ADVPL_get_property( <cReference>, "ORDER_BY" )



Expandir
titleGET CONSTRUCT_NAME

Método GET: CONSTRUCT_NAME

Retorna o nome identificador definido para o componente.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "CONSTRUCT_NAME") => Char

Retorno



TipoDescrição
CHAR

Nome identificador definido para o componente.

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_construct_name = _ADVPL_get_property( <cReference>, "CONSTRUCT_NAME" )



Expandir
titleGET WHERE_CLAUSE_BY_TABLE

Método GET: WHERE_CLAUSE_BY_TABLE

Retorna o filtro no formato SQL, informado para determinada tabela da tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "WHERE_CLAUSE_BY_TABLE", <cTable>) => Char

 Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela.Sim


Retorno



TipoDescrição
CHAR

Filtro no formato SQL, informado para a tabela.

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_where_clause = _ADVPL_get_property( <cReference>, "WHERE_CLAUSE_BY_TABLE", <cTable> )



Expandir
titleGET ORDER_BY_TABLE

Método GET: ORDER_BY_TABLE

Retorna a ordenação no formato SQL, informado para determinada tabela da tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_get_property( < creference >, "ORDER_BY_TABLE", <cTable> ) => Char

Retorno



TipoDescrição
CHAR

Ordenação no formato SQL informado para a tabela.


Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela.Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
LET l_order_by = _ADVPL_get_property( <cReference>, "ORDER_BY", <cTable> )




Métodos SET

Métodos acessíveis

/ utilizando a função _ADVPL_set_property que permite alterar e manipular os valores do componente.


Expandir
titleSET ADD_TABLE

Método SET: ADD_TABLE

Adiciona uma tabela, cadastrada no metadado, na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property(< cReference >,"ADD_TABLE",< cTable />)

Parâmetros



NomeTipoDescriçãoObrigatório?
  cTable CHARNome da tabela.Sim

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
CALL _ADVPL_set_property( <cReference>, "ADD_TABLE", <cTable> )




Expandir
titleSET ADD_COLUMN

Método SET: ADD_COLUMN

Valor quando a caixa de seleção estiver assinalada.

Sintaxe



Bloco de código
_ADVPL_set_property(< cReference >,"ADD_COLUMN",, <cTable>, <cColumn>, [cParent], [cZoom])

Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.Sim
cParentCHARNome do objeto pai da coluna (para colunas virtuais).opcional, padrão: NULL
cZoomCHARNome do zoom da coluna.opcional, padrão: NULL


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
CALL _ADVPL_set_property( <cReference>, "ADD_COLUMN", <cTable>, <cColumn>, [cParent], [cZoom] )




Expandir
titleSET ADD_VIRTUAL_TABLE

Método SET: ADD_VIRTUAL_TABLE

Adiciona uma tabela na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADD_VIRTUAL_TABLE", <cTable>, <cLabel> )

Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela.Sim
cLabelCHARDescrição da tabela.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "ADD_VIRTUAL_TABLE", <cTable>, <cLabel> )     




Expandir
titleSET ADD_VIRTUAL_COLUMN

Método SET: ADD_VIRTUAL_COLUMN

Adiciona uma coluna da tabela na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADD_VIRTUAL_COLUMN", <cTable>, <cColumn>, <cLabel>, <nType>, <nSize>, [nPrecision], [cZoom], [cPicture] )

Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cColumnCHARNome da coluna.
cLabelCHARDescrição da tabela.Sim
nTypeINTEGER

Tipo de dado da coluna, sendo:

1–CHAR,

2–SMALLINT,

3–INTEGER,

4–DECIMAL,

5–DATE,

6–DATETIME,

7–VARCHAR,

8–SERIAL e

9–IMAGE

Sim
nSizeINTEGERTamanho da coluna.Sim
nPrecisionINTEGERPrecisão da coluna.opcional, padrão: 0
cZoomCHARNome do zoom da coluna.opcional, padrão: NULL
cPictureCHAR
Máscara de edição da coluna
*** válido a partir do pacote Logix 12.1.15 ***
opcional, padrão: NULL


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
CALL _ADVPL_set_property( <cReference>, "ADD_VIRTUAL_COLUMN", <cTable>, <cColumn>, <cLabel>, <nType>, <nSize>, [nPrecision], [cZoom], [cPicture] )




Expandir
titleSET VISIBLE_ORDER_BY

Método SET: VISIBLE_ORDER_BY

Habilita/desabilita a aba de ordenação de registros.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "VISIBLE_ORDER_BY", <nVisible>)

Parâmetros



NomeTipoDescriçãoObrigatório?
nVisibleBOOLEANVerdadeiro para habilitar a aba de ordenação, falso para desabilitar.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "VISIBLE_ORDER_BY", <nVisible> )   




Expandir
titleSET ADDVISIBLE_VIRTUALFILTER_TABLEBASIC

Método SET:

VISIBLE_FILTER_BASIC

Habilita/desabilita a aba de filtro básicoAdiciona uma tabela na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADDVISIBLE_VIRTUALFILTER_TABLEBASIC", <cTable>, <cLabel><nVisible> )

Parâmetros



cLabel
NomeTipoDescriçãoObrigatório?
cTablenVisibleCHARBOOLEANVerdadeiro para habilitar a aba de filtro básico, falso para desabilitarNome da tabela.Sim


Exemplo



Bloco de código
CHARDescrição da tabela.Sim
language

Exemplo

Bloco de código
languageruby
themeConfluence
linenumberstrue
       CALL _ADVPL_set_property( <cReference>, "ADDVISIBLE_VIRTUALFILTER_TABLEBASIC", <cTable>, <cLabel><nVisible> )     




Expandir
titleSET ADDVISIBLE_VIRTUALFILTER_TABLEADVANCED

Método SET:

VISIBLE_FILTER_ADVANCED

Habilita/desabilita a aba de filtro avançadoAdiciona uma tabela na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADDVISIBLE_VIRTUALFILTER_TABLEADVANCED", <cTable>, <cLabel><nVisible> )

Parâmetros



NomeTipoDescriçãoObrigatório?
cTablenVisibleCHARBOOLEANVerdadeiro para habilitar a aba de filtro avançado, falso para desabilitarNome da tabela.Sim
cLabelCHARDescrição da tabela.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "ADDVISIBLE_VIRTUALFILTER_TABLEADVANCED", <cTable>, <cLabel><nVisible> )     




Expandir
titleSET ADDCONSTRUCT_VIRTUAL_TABLENAME

Método SET:

CONSTRUCT_NAME

Define um identificador para o componenteAdiciona uma tabela na tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADDCONSTRUCT_VIRTUAL_TABLENAME", <cTable>, <cLabel><cName> )

Parâmetros



cLabel
NomeTipoDescriçãoObrigatório?
cTablecNameCHARNome da tabelaidentificador para o componente.SimCHARDescrição da tabela.Sim


Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "ADDCONSTRUCT_VIRTUAL_TABLENAME", <cTable>, <cLabel><cName> )     




Expandir
titleSET ADDAPPEND_VIRTUALWHERE_TABLECLAUSE

Método SET:

APPEND_WHERE_CLAUSE

Adiciona um filtro temporário que será descartado após a finalização da Adiciona uma tabela na tela de pesquisa.

Sintaxe

Se uma tabela não for informada neste método, o filtro será geral para todas as tabelas do componente. 

Sintaxe



Bloco de código
_ADVPL_
Bloco de código
_ADVPL_set_property( <cReference>, "ADDAPPEND_VIRTUALWHERE_TABLECLAUSE", <cTable><cWhere>, <cLabel>[cTable] )

Parâmetros



Sim
NomeTipoDescriçãoObrigatório?
cWhereCHAR
Sim
cTableCHARNome da tabela.SimcLabelCHARDescrição da tabela.opcional, padrão: NULL
Nota

Método válido apenas para programas desenvolvidos em metadado.

Exemplo



Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "ADDAPPEND_VIRTUALWHERE_TABLECLAUSE", <cTable><cWhere>, <cLabel>[cTable] )     




Expandir
titleSET ADDAPPEND_VIRTUALORDER_TABLEBY

Método SET:

APPEND_ORDER_BY

Adiciona uma tabela na ordenação temporária para uma determinada coluna, a ordenação será descartada após a finalização da tela de pesquisa.

Sintaxe



Bloco de código
_ADVPL_set_property( <cReference>, "ADDAPPEND_VIRTUALORDER_TABLEBY", <cTable>, <cLabel><cColumn>, <cOrder> )

Parâmetros



NomeTipoDescriçãoObrigatório?
cTableCHARNome da tabela da coluna.Sim
cLabelcColumnCHARDescrição Nome da tabelacoluna.Sim
Exemplo
cOrderCHAR

Tipo de ordenação, sendo:

  • ASC - Ordenação crecente ou
  • DESC - Ordenação decrescente
Sim
Nota

Método válido apenas para programas desenvolvidos em metadado.

Exemplo



Bloco de código
languageruby
Bloco de código
languageruby
themeConfluence
linenumberstrue
     CALL _ADVPL_set_property( <cReference>, "ADDAPPEND_VIRTUALORDER_TABLEBY", <cTable>, <cColumn>, <cLabel><cOrder> )     





Exemplo



Expandir
titleExemplo de utilização
Bloco de código
languageruby
themeConfluence
linenumberstrue
DATABASE logix

 DEFINE ma_tela ARRAY[1000] OF
                RECORD
                    cod_empresa CHAR(02),
                    den_empresa CHAR(36),
                    cod_item    CHAR(15),
                    den_item    CHAR(76)
                END RECORD

 DEFINE m_statusbar_reference,
        m_grid_reference,
        m_construct_reference VARCHAR(10)

 DEFINE m_max_item SMALLINT

#--------------------#
 FUNCTION const0001()
#--------------------#
     DEFINE l_dialog_reference,
            l_menubar_reference,
            l_menubutton_reference,
            l_panel_reference,
            l_layout_reference,
            l_column_reference VARCHAR(10)

     INITIALIZE ma_tela TO NULL

     #Define a quantidade máxima de itens dentro da grid, deve ser alterada
     #sempre que o tamanho do ARRAY ma_tela for alterado também
     LET m_max_item = 1000

     #Conecta-se ao banco de dados
     CALL LOG_connectDatabase("DEFAULT")

     LET l_dialog_reference = _ADVPL_create_component(NULL,"LDIALOG")
     CALL _ADVPL_set_property(l_dialog_reference,"SIZE",640,480)
     CALL _ADVPL_set_property(l_dialog_reference,"TITLE","Exemplo de Utilização: LLAYOUTMANAGER")

     LET m_statusbar_reference = _ADVPL_create_component(NULL,"LSTATUSBAR",l_dialog_reference)
     CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_ABOUT",FALSE)
     CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_HOTKEY",FALSE)
     CALL _ADVPL_set_property(m_statusbar_reference,"VISIBLE_RESIZE",FALSE)

     LET l_menubar_reference = _ADVPL_create_component(NULL,"LMENUBAR",l_dialog_reference)
     CALL _ADVPL_set_property(l_menubar_reference,"HELP_VISIBLE",FALSE)

     LET l_menubutton_reference = _ADVPL_create_component(NULL,"LFINDBUTTON",l_menubar_reference)
     CALL _ADVPL_set_property(l_menubutton_reference,"EVENT","const0001_find_event")
     CALL _ADVPL_set_property(l_menubutton_reference,"TYPE","NO_CONFIRM")
     CALL _ADVPL_create_component(NULL,"LQUITBUTTON",l_menubar_reference)

     LET l_panel_reference = _ADVPL_create_component(NULL,"LPANEL",l_dialog_reference)
     CALL _ADVPL_set_property(l_panel_reference,"ALIGN","CENTER")

     LET l_layout_reference = _ADVPL_create_component(NULL,"LLAYOUTMANAGER",l_panel_reference)
     CALL _ADVPL_set_property(l_layout_reference,"MARGIN",TRUE)
     CALL _ADVPL_set_property(l_layout_reference,"COLUMNS_COUNT",1)
     CALL _ADVPL_set_property(l_layout_reference,"EXPANSIBLE",TRUE)

     LET m_grid_reference = _ADVPL_create_component(NULL,"LTABLEEX",l_layout_reference)
     CALL _ADVPL_set_property(m_grid_reference,"ALIGN","CENTER")

     LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference)
     CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",55)
     CALL _ADVPL_set_property(l_column_reference,"HEADER","Empresa")
     CALL _ADVPL_set_property(l_column_reference,"VARIABLE","cod_empresa")

     LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference)
     CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",200)
     CALL _ADVPL_set_property(l_column_reference,"HEADER","Descrição da empresa")
     CALL _ADVPL_set_property(l_column_reference,"VARIABLE","den_empresa")

     LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference)
     CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",120)
     CALL _ADVPL_set_property(l_column_reference,"HEADER","Item")
     CALL _ADVPL_set_property(l_column_reference,"VARIABLE","cod_item")

     LET l_column_reference = _ADVPL_create_component(NULL,"LTABLECOLUMNEX",m_grid_reference)
     CALL _ADVPL_set_property(l_column_reference,"COLUMN_WIDTH",400)
     CALL _ADVPL_set_property(l_column_reference,"HEADER","Descrição do item")
     CALL _ADVPL_set_property(l_column_reference,"VARIABLE","den_item")

     CALL _ADVPL_set_property(m_grid_reference,"SET_ROWS",ma_tela,0)

     CALL _ADVPL_set_property(l_dialog_reference,"ACTIVATE",TRUE)
 END FUNCTION

#-------------------------------#
 FUNCTION const0001_find_event()
#-------------------------------#
     DEFINE l_status SMALLINT
     DEFINE l_where_clause CHAR(500)

     #Se a tela de pesquisa não foi criada, deverá criá-la no primeiro uso
     IF  m_construct_reference IS NULL THEN
         CALL const0001_create_construct_component()
     END IF

     #Inicia a tela de pesquisa
     LET l_status = _ADVPL_get_property(m_construct_reference,"INIT_CONSTRUCT")

     #Verifica se o usuário cancelou a pesquisa
     IF  NOT l_status THEN
         CALL _ADVPL_set_property(m_statusbar_reference,"WARNING_TEXT","Pesquisa cancelada.")
         RETURN FALSE
     END IF

     #Retorna o filtro informado
     LET l_where_clause = _ADVPL_get_property(m_construct_reference,"WHERE_CLAUSE")

     #Efetua a pesquisa na base de dados e exibe em tela
     IF  NOT const0001_find_confirm(l_where_clause) THEN
         CALL _ADVPL_set_property(m_statusbar_reference,"WARNING_TEXT","Argumentos de pesquisa não encontrados.")
         RETURN FALSE
     END IF

     CALL _ADVPL_set_property(m_statusbar_reference,"INFO_TEXT","Pesquisa efetuada com sucesso.")

     RETURN TRUE
 END FUNCTION

#-----------------------------------------------#
 FUNCTION const0001_create_construct_component()
#-----------------------------------------------#
     LET m_construct_reference = _ADVPL_create_component(NULL,"LCONSTRUCT")
     CALL _ADVPL_set_property(m_construct_reference,"CONSTRUCT_NAME","CONS0001_FILTER")

     #Desabilita a aba de ordenação de registros
     CALL _ADVPL_set_property(m_construct_reference,"VISIBLE_ORDER_BY",FALSE)

     #Adiciona a tabela empresa para a consulta e suas colunas
     #Esta tabela não possui cadastro no metadado, então será "virtual"
     CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_TABLE","empresa","Empresa")
     CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_COLUMN","empresa","cod_empresa","Empresa",1 {CHAR},2,0,"zoom_empresa")
     CALL _ADVPL_set_property(m_construct_reference,"ADD_VIRTUAL_COLUMN","empresa","den_empresa","Descrição da empresa",1 {CHAR},36,0)

     #Adiciona a tabela item para a consulta e suas colunas
     #Esta tabela possui cadastro no metadado, então não será "virtual"
     CALL _ADVPL_set_property(m_construct_reference,"ADD_TABLE","item")
     CALL _ADVPL_set_property(m_construct_reference,"ADD_COLUMN","item","cod_item",NULL {PARENT},"zoom_item")
     CALL _ADVPL_set_property(m_construct_reference,"ADD_COLUMN","item","den_item")
 END FUNCTION

#-----------------------------------------------#
 FUNCTION const0001_find_confirm(l_where_clause)
#-----------------------------------------------#
     DEFINE l_where_clause CHAR(0500),
            l_sql_stmt     CHAR(1000)

     DEFINE l_ind SMALLINT

     LET l_ind = 1

     LET l_sql_stmt = 'SELECT empresa.cod_empresa,empresa.den_empresa,item.cod_item,item.den_item ',
                      'FROM empresa ',
                      'INNER JOIN item ',
                      'ON empresa.cod_empresa = item.cod_empresa ',
                      'WHERE ',l_where_clause CLIPPED,' ',
                      'ORDER BY 1,3'

     WHENEVER ERROR CONTINUE
     PREPARE var_item FROM l_sql_stmt
     WHENEVER ERROR STOP
     IF  sqlca.sqlcode <> 0 THEN
         CALL log003_err_sql("PREPARE SQL","var_item")
         RETURN FALSE
     END IF

     WHENEVER ERROR CONTINUE
     DECLARE cq_item CURSOR FOR var_item
     WHENEVER ERROR STOP
     IF  sqlca.sqlcode <> 0 THEN
         CALL log003_err_sql("DECLARE CURSOR","cq_item")
         RETURN FALSE
     END IF

     WHENEVER ERROR CONTINUE
     FOREACH cq_item INTO ma_tela[l_ind].cod_empresa,
                          ma_tela[l_ind].den_empresa,
                          ma_tela[l_ind].cod_item,
                          ma_tela[l_ind].den_item

         IF  sqlca.sqlcode <> 0 THEN
             CALL log003_err_sql("FOREACH CURSOR","cq_item")
             EXIT FOREACH
         END IF

         LET l_ind = l_ind + 1

         IF  l_ind > m_max_item THEN
             CALL log0030_mensagem("Quantidade máxima de itens ultrapassados.","excl")
             EXIT FOREACH
         END IF
     END FOREACH

     FREE var_item
     FREE cq_item
     WHENEVER ERROR STOP

     LET l_ind = l_ind - 1

     CALL _ADVPL_set_property(m_grid_reference,"ITEM_COUNT",l_ind)
     CALL _ADVPL_set_property(m_grid_reference,"REFRESH")

     RETURN (l_ind > 0)
 END FUNCTION


Visualização


Image Added