Pedro pelo que entendi esse trecho de código é para ser utilizado em um MarkBrowser, é uma utilização muito comum de tabelas temporárias. Se fossemos apenas olhar para este ponto seria apenas alterar o código para utilizar o objeto FwTemporaryTable (https://tdn.totvs.com/display/public/framework/FWTemporaryTable) e estaria resolvido.
Porém essa imposição de revisão dos códigos é para atentar que existem soluções mais interessantes e robustas, fazendo a gente usar novas rotinas do sistema. Deste modo e imaginando que seus dados não sejam tão extensos que necessitem de uma tabela temporária, eu sempre uso browsers montados a partir de arrays funciona super bem para pequenas quantidades de dados.
Montei um pequeno exemplo que acredito ser semelhante ao que você precisa. Espero que ajude.
#INCLUDE "RWMake.ch"
#INCLUDE "Totvs.ch"
#INCLUDE "ParmType.ch"
//##################################################################################################
//##+========+=================================+=======+====================+======+=============+##
//##|Programa| MSDTeste | Autor | Cirilo Rocha | Data | 29/12/2022 |##
//##+========+=================================+=======+====================+======+=============+##
//##|Desc. | Função de exemplo de uso do TCBrowse como MarkBrowser usando arrays como origem |##
//##+========+==========+========================================================================+##
//##| DATA | ANALISTA | MANUTENÇÃO EFETUADA |##
//##+========+==========+========================================================================+##
//##| | | |##
//##| | | |##
//##| | | |##
//##+========+==========+========================================================================+##
//##################################################################################################
User Function MSDTeste()
//Declaração de Variáveis----------------------------------------------------------------------
Local aSX5 := {} AS Array
Local lOk := .F. AS Logical
Local nX AS Numeric
Local oOK := LoadBitmap(NIL,'LBTIK') AS Object
Local oNO := LoadBitmap(NIL,'LBNO') AS Object
//Tamanho dos botões da tela
Local nLarBt := 050 AS Numeric
Local nAltBt := 015 AS Numeric
//Posições do array aDados
Local lBL_MARK := 01 AS Numeric
Local cBL_COD := 02 AS Numeric
Local cBL_DESC := 03 AS Numeric
Local nBL_TAMARR := 03 AS Numeric
//Posições de retorno da função FwGetSX5
Local _X5_FILIAL := 01 AS Numeric
Local _X5_TABELA := 02 AS Numeric
Local _X5_CHAVE := 03 AS Numeric
Local _X5_DESCRI := 04 AS Numeric
//Deixei privado caso alguma função chamada precise manipular a tela
Private aDados := {} AS Array
Private oDlg AS Object
Private oLst AS Object
//Carrega dados para o array da lista----------------------------------------------------------
aSX5 := FwGetSX5('12',/*cChave*/) //Retorna os dados SX5, USEI A TABELA 12 ESTADOS APENAS COMO EXEMPLO
For nX := 1 to Len(aSX5)
aAdd(aDados,Array(nBL_TAMARR))
aTail(aDados)[lBL_MARK] := .F. //Por padrão vem desmarcado
aTail(aDados)[cBL_COD] := aSX5[nX][_X5_CHAVE]
aTail(aDados)[cBL_DESC] := aSX5[nX][_X5_DESCRI]
Next
If Len(aDados) == 0
ApMsgStop( 'Nenhum dado localizado para seleção.','! ! ! ATENÇÃO ! ! !')
Return .F.
EndIf
//---------------------------------------------------------------------------------------------
oDlg := MSDialog():New( 000,000,550,650,'Selecione os registros',/*cPar6*/,/*nPar7*/,/*lPar8*/,;
/*DS_MODALFRAME*/,/*anClrText*/,/*anClrBack*/,/*oPar12*/,/*oWnd*/,.T.,,,,/*lTransparent*/)
// Cria Browse dos produtos da NF
oLst := TCBrowse():New( 010,010,(oDlg:nWidth/2)-15,(oDlg:nHeight/2)-20-2*nAltBt,,/*aHeaders*/,/*aColSizes*/,;
oDlg,,,,,{||},,,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oLst:SetArray(aDados)
//Nao permite deletar linhas
oLst:bDelOk := {|| .F.}
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oLst:bLDblClick := {|| aDados[oLst:nAt][lBL_MARK] := !aDados[oLst:nAt][lBL_MARK] }
// Monta a linha a ser exibina no Browse
//TCColumn():New(<cTitulo>,<bData>,[cPict],[uPar4],[uPar5],[cAlinha],[nLarg],[lBmp],[lEdit],[uPar10],[bVld],[uPar12],[uPar13],[uPar14] )
oLst:addColumn( TCColumn():New("#" ,{|| If(aDados[oLst:nAt,lBL_MARK],oOK,oNO)} ,/*cPicture*/ ,,, "CENTER" , 10, .T., .F.,,,,,) )
oLst:addColumn( TCColumn():New("UF" ,{|| aDados[oLst:nAt][cBL_COD]} ,/*cPicture*/ ,,, "LEFT" , 20, .F., .F.,,,,,) )
oLst:addColumn( TCColumn():New("Nome" ,{|| aDados[oLst:nAt][cBL_DESC]} ,/*cPicture*/ ,,, "LEFT" , 50, .F., .F.,,,,,) )
//oLst:addColumn( TCColumn():New("Valor",{|| aDados[oLst:nAt][nBL_VALTIT]} ,FwGetSx3Cache('E1_VALOR','X3_PICTURE'),,, "RIGHT" , 40, .F., .F.,,,,,) ) //EXEMPLO USANDO UM CAMPO NUMÉRICO
//-----------------------------------------------------------------------------------------
tButton():New(250,005,'Cancelar' ,oDlg,{|| lOk := .F. , oDlg:End() },nLarBt,nAltBt,,,,.T.)
//AQUI PODEM SER IMPLEMENTADOS BOTÕES DO TIPO MARCA TODOS, DESMARCA TODOS, INVERTE SELEÇÃO
tButton():New(250,269,'OK' ,oDlg,{|| IIf((lOk := VldOK()),oDlg:End(),) },nLarBt,nAltBt,,,,.T.)
// ativa diálogo centralizado
oDlg:Activate(/*uPar1*/,/*uPar2*/,/*uPar3*/,.T./*lCenter*/,/*{|Self| Valid }*/,/*uPar6*/,/*{|Self| Init }*/ )
If lOK
//COLOQUE AQUI ALGUMA GRAVAÇÃO OU PROCESSAMENTO CASO O USUÁRIO TENHA CONFIRMADO A TELA#####
EndIf
Return lOk
//-------------------------------------------------------------------------------------------------
Static Function VldOK()
//Declaração de variáveis----------------------------------------------------------------------
Local lOK := .T. AS Logical
//COLOQUE AQUI AS VALIDAÇÕES DOS DADOS#########################################################
Return lOK