Base de conhecimento
Encontre respostas para suas dúvidas em quatro fontes de conhecimento diferentes ao mesmo tempo, simplificando o processo de pesquisa.

Cross Segmento - TOTVS Backoffice Linha Protheus - ADVPL - Consulta especifica com retorno em variável

time.pngTempo aproximado para leitura: 00:04:00 min

Ocorrência

Ao executar uma Consulta específica é gerado o erro abaixo:

invalid typecast in file d:\bamboo-agent-5.7.2\xml-data\build-dir\tp11-buildv2appsrv-tec11win32rpo32\advtec9_tt11\advpl\instrvar.inl at line 781
on FWPOSSHOW(PROTHEUSLOOKUP.PRW)


Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 12.1.17

Causa
Este erro é reproduzido quando a função contida no campo Expressão retorna um valor diferente de lógico.

Solução
Retornar um valor lógico na função contida no campo Expressão e atribuir o conteúdo desejado em uma variável estática que será resgatada por uma função (contida no mesmo fonte da variável estática).

Fonte
No exemplo abaixo atribuímos o valor desejado em MP_CONPAD e recuperamos o conteúdo utilizando a função T200GET():

// BIBLIOTECAS NECESSÁRIAS
#Include "TOTVS.ch"

// VARIÁVEL DE RETORNO
Static MP_CONPAD As Character

//-------------------------------------------------------
// CONSULTA PADRÃO COM CAIXA DE MARCAÇÃO (MARKBROWSE)
//-------------------------------------------------------
User Function T200CONPAD()
    Local aArea As Array // ÁREA DE TRABALHO CORRENTE
    Local lFind As Logical // CONTROLE DE VARIÁVEL ENCONTRADA
    Local oDialog As Object // CAIXA DE DIÁLOGO

    // INICIALIZAÇÃO DE VARIÁVEIS
    lFind := .F.
    aArea := GetArea()
    oDialog := GenDialog(50)

    // INCORPORA A GRID
    GenMarkBrw(@oDialog)

    // EXIBE A CAIXA DE DIÁLOGO
ACTIVATE MSDIALOG oDialog CENTERED

    // RESTAURA A ÁREA DE TRABALHO ANTERIOR
    RestArea(aArea)

    // VALIDA SE ALGO FOI SELECIONADO
    IIf (MP_CONPAD != NIL .And. Len(MP_CONPAD) > 0, lFind := .T., lFind := .F.)
Return (lFind)

//--------------------------------------------------------
// EFETUA A MONTAGEM DA CAIXA DE DIÁLOGO DE FUNDO
//--------------------------------------------------------
Static Function GenDialog(nPercent As Numeric)
    Local oSize As Object // TAMANHO DOS COMPONENTES
    Local oDialog As Object // CAIXA DE DIÁLOGO

    // INICIALIZAÇÃO DE VARIÁVEIS
    oSize := FwDefSize():New(.F.)

// DEFINIÇÃO DA CAIXA DE DIÁLOGO
    DEFINE MSDIALOG oDialog TITLE "Consulta Padrão - Tipos" FROM 000,000 TO Round(oSize:aWindSize[3] * (nPercent/100), 0), Round(oSize:aWindSize[4] * (nPercent/100), 0) PIXEL
Return (oDialog)

//--------------------------------------------------------
// INCORPORA A GRID EM UMA CAIXA DE DIÁLOGO
//--------------------------------------------------------
Static Function GenMarkBrw(oDialog As Object)
    Local oMark As Object // GRID DE SELEÇÃO
    Local aFields As Array // CAMPOS DO NAVEGADOR

    // INICIALIZAÇÃO DE VARIÁVEIS
    cAlias := GetNextAlias()
    aFields := {}

    // MONTA A ESTRUTURA E O CONTEÚDO DOS CAMPOS
    GenTable(cAlias)

    // CAMPOS DO NAVEGADOR
AAdd(aFields, {"Código", "TRB_COD", "C", 04, 00})
AAdd(aFields, {"Descrição", "TRB_DESC", "C", 30, 00})

    // DEFINIÇÕES DO NAVEGADOR
    oMark := FwMarkBrowse():New()
        oMark:SetIgnoreARotina(.T.)
        oMark:SetMenuDef("T200CONPAD")
        oMark:SetAlias(cAlias)
        oMark:SetTemporary(.T.)
        oMark:SetFields(aFields)
        oMark:SetFieldMark("TRB_OK")
        oMark:SetOwner(oDialog)
        oMark:IsInvert(.T.)
        oMark:SetDescription("Tipos")
        oMark:SetOnlyFields({"TRB_OK", "TRB_COD", "TRB_DESC"})

        // BOTÕES DA ROTINA
        oMark:AddButton("Confirmar", {|| CheckSelected(@oMark)})
    oMark:Activate()
Return (NIL)

//--------------------------------------------------------
// GERA O ARQUIVO DE TRABALHO
//--------------------------------------------------------
Static Function GenTable(cAlias As Character)
    Local oTable As Object // OBJETO DA TABELA TEMPORÁRIA
    Local aFields As Array // VETOR DE CAMPOS
    Local aData As Array // CONTEÚDO DOS CAMPOS
    Local nX As Numeric // CONTROLADOR DE LAÇO

    // INICIALIZAÇÃO DE VARIÁVEIS
    nX := 0
    aData := {}
    aFields := {}
    oTable := FwTemporaryTable():New(cAlias)

    // DEFINE A ESTRUTURA DE CAMPOS
    AAdd(aFields, {"TRB_OK", "C", 02, 00})
AAdd(aFields, {"TRB_COD", "C", 04, 00})
AAdd(aFields, {"TRB_DESC", "C", 30, 00})

    // INSERE OS CAMPOS NA TABELA TEMPORÁRIA
oTable:SetFields(aFields)

    // ÍNDICE DA TABELA TEMPORÁRIA
oTable:AddIndex("01", {"TRB_COD"})

    // CRIA A TABELA
    oTable:Create()

    // SELECIONA A ÁREA PARA NÃO PRECISAR APONTAR
DbSelectArea(cAlias)

    // DADOS QUE SERÃO INSERIDOS NA TABELA
    AAdd(aData, {"PC", "Produto ao Consumidor"})
    AAdd(aData, {"PI", "Produto de Origem Industrial"})
    AAdd(aData, {"BC", "Bem de Conveniência"})
    AAdd(aData, {"BI", "Bem de Impulso"})
    AAdd(aData, {"BE", "Bem de Emergência"})
    AAdd(aData, {"BCC", "Bem de Compra Comprada"})

// INSERE OS DADOS NA TABELA TEMPORÁRIA
For nX := 1 To Len(aData)
        RecLock(cAlias, .T.)
            TRB_COD := aData[nX][1]
            TRB_DESC := aData[nX][2]
        MsUnlock()
Next nX

// POSICIONA NO INÍCIO DO ARQUIVO
DbGoTop()
Return (NIL)

//--------------------------------------------------------
// PREPARA O RETORNO PARA O CAMPO
//--------------------------------------------------------
Static Function CheckSelected(oMark As Object)
    Local cSelected As Character // RETORNO DA CONSULTA

    // INICIALIZAÇÃO DE VARIÁVEIS
    cSelected := Space(0)

    // PERCORRE A TABELA CORRENTE E CONCATENA CAMPOS MARCADOS
    DbGoTop()
    DbEval({|| IIf(oMark:IsMark(oMark:Mark()), cSelected += "+" + AllTrim(TRB_COD), cSelected += Space(0))})

    // REMOVE O PRIMEIRO CARACTERE E ATRIBUI A VARIÁVEL DE RETORNO
    MP_CONPAD := IIf(Len(cSelected) > 0, SubStr(cSelected, 2), cSelected)

    // FECHA A CAIXA DE DIÁLOGO
    oMark:oBrowse:oOwner:End()
Return (NIL)

//--------------------------------------------------------
// SOBRESCRIÇÃO DAS OPERAÇÕES DA ROTINA PADRÃO
//--------------------------------------------------------
Static Function MenuDef()
    Local aRotina As Array // OPERAÇÕES DA ROTINA

    // INICIALIZAÇÃO DE VARIÁVEIS
    aRotina := {}
Return (aRotina)

//--------------------------------------------------------
// RETORNA A VARIÁVEL ESTÁTICA PARA O CAMPO
//--------------------------------------------------------
User Function T200GET()
Return (MP_CONPAD)
Esse artigo foi útil?
Usuários que acharam isso útil: 0 de 0

0 Comentários

Por favor, entre para comentar.
X Fechar

Olá ,

Há pendência referente a um de seus produtos contratados para a empresa ().

Entre em contato com o Centro de Serviços TOTVS para tratativa.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cobrança – Verificação de pendências financeiras . clique aqui.

TOTVS

X Fechar

Olá ,

Seu contato não está cadastrado no Portal do Cliente como um perfil autorizado a solicitar consultoria telefônica.

Por gentileza, acione o administrador do Portal de sua empresa para: (1)configurar o seu acesso ou (2)buscar um perfil autorizado para registro desse atendimento.

Em caso de dúvidas sobre a identificação do contato administrador do Portal, ligue (11) 4003-0015, opção 7 e, em seguida, opção 4 para buscar o suporte com o time de Assessoria ao Portal do Cliente. . clique aqui.

TOTVS

X Fechar

Olá ,

Para o atendimento de "Consultoria Telefônica" você deverá estar de acordo com o Faturamento.

TOTVS

X Fechar

Olá,

Algo inesperado ocorreu, e o usuario nao foi reconhecido ou você nao se encontra logado

Por favor realize um novo login

Em caso de dúvidas, entre em contato com o administrador do Portal de Clientes de sua empresa para verificação do seu usuário, ou Centro de Serviços TOTVS.

Ligue! 4003-0015 opção 4 e 9 ou registre uma solicitação para CST – Cadastros . clique aqui.

TOTVS

Chat _

Preencha os campos abaixo para iniciar o atendimento:

Chat _