FWMBrowse usando query ou tabela temporária

Estou desenvolvendo uma tela onde preciso usar uma query com os dados a serem apresentados em um browse. Tentei montar usando o FWMBrowse porém eu não consigo fazer a pesquisa funcionar fica apresentando erro log.

THREAD ERROR ([17620], cirilorocha, NBK061)   30/01/2023 16:13:15
array out of bounds ( 3 of 2 )  on FWMBROWSE:SEEKCHANGE(FWMBROWSE.PRW) 30/12/2022 14:25:06 line : 2623

[TOTVS build: 7.00.210324P-20221215]
Called from FWMBROWSE:ACTIVATE(FWMBROWSE.PRW) 30/12/2022 14:25:06 line : 556
Called from U_CXTESTE(CXTESTE.prw) 30/01/2023 16:12:57 line : 43

Queria fazer a tela de forma a manter o máximo das facilidades desse componente (como filtros, pesquisa, etc.). Não tenho certeza se o componente mais indicado é este ou outro, também eu poderia gravar os dados em uma tabela temporária se for necessário. Só queria mesmo manter essas característica de filtro e pesquisa, vão ajudar muito meu usuário a operar esta tela.

Abaixo o fonte que eu comecei a montar, este é só um exemplo resumido do que pretendo fazer:

#INCLUDE 'RWMake.ch'
#INCLUDE 'Totvs.ch'
#INCLUDE 'ParmType.ch'
#INCLUDE 'FWBrowse.ch'

User Function CXTeste()    AS Logical

    Local lRet         := .F.
    Local aArea        := GetArea()
    Local cAlias    := GetNextAlias()
    Local cQuery    := ""
    Local oBrw        := NIL

    Local aIndex    := {"A1_COD"}
    Local aSeek     := {{"Código", {"LookUp","C",TamSX3("A1_COD")[1],0,"",,} ,1,.t. }}

    cQuery += " SELECT A1_COD,A1_NOME,CC2_MUN "+CRLF
    cQuery += "FROM "+RetSqlName('SA1')+" SA1 "+CRLF
    cQuery += "INNER JOIN "+RetSqlName('CC2')+" CC2 "+CRLF
    cQuery += "    ON CC2.D_E_L_E_T_='' "+CRLF
    cQuery += "    AND CC2_FILIAL = '' "+CRLF
    cQuery += "    AND CC2_EST = A1_EST "+CRLF
    cQuery += "    AND CC2_CODMUN = A1_COD_MUN "+CRLF

    oBrw := FWMBrowse():New()
    oBrw:SetDataQuery()
    oBrw:SetAlias(cAlias)
    oBrw:SetQuery(cQuery)

    oBrw:AddButton( 'OK'    , {|| lRet := .T., oBrw:End() } ,, 2 ) //"Confirmar"
    oBrw:AddButton( 'Fechar', {|| oBrw:End() } ,, 2 ) //"Cancelar"

    oBrw:SetQueryIndex(aIndex)
    oBrw:SetSeek(.T.,aSeek)

    ADD COLUMN oColumn DATA {|| A1_COD     } TITLE 'Código'    SIZE TamSX3('A1_COD')[1]  OF oBrw //"Chave"
    ADD COLUMN oColumn DATA {|| A1_NOME    } TITLE 'Nome'         SIZE TamSX3('A1_NOME')[1] OF oBrw //"Descrição"
    ADD COLUMN oColumn DATA {|| CC2_MUN    } TITLE 'Município'    SIZE TamSX3('CC2_MUN')[1] OF oBrw //"Descrição"

    oBrw:Activate()

    RestArea(aArea)

Return lRet
compartilhar
  • Eu até consegui montar usando o FWFormBrowse porém a pesquisa apresenta um erro log:

    THREAD ERROR ([11160], cirilorocha, NBK061) 30/01/2023 16:44:39 type mismatch on compare on FWBROWSE:SEEKACTION(FWBROWSE.PRW) 13/12/2022 14:23:45 line : 8090

    [TOTVS build: 7.00.210324P-20221215] Called from {|| SELF:SEEKACTION(), SELF:SETFOCUS() }(FWBROWSE.PRW) 13/12/2022 14:23:45 line : 10090 Called from {||SELF:VALIDSEEK( SELF:CSEEK ) .AND. EVAL(SELF:BACTION,SELF:CSEEK,SELF:ORDERSELECTED())}(FWSEEK.PRW) 13/12/2022 14:23:45 line : 1015 Called from ::MSDIALOG:ACTIVATE

    Cirilo Rocha   30 de Jan de 2023
  • Acho que deu erro pelo fato que você passou o aIndex, sendo que o alias de query não possui index, acho que seria melhor fazer com tabela temporária mesmo, já tentou?

    Saulo Gomes Martins   30 de Jan de 2023
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags fwmbrowse browse fwbrowse fwformbrowse advpl ou faça a sua própria pergunta.