Cria uma tela com marcação de dados utilizando uma tabela temporária
Exemplo 1- Criando a FWMarkBrowse com a tabela temporária:
#include 'protheus.ch' #INCLUDE 'totvs.ch' #INCLUDE 'FWMVCDEF.CH' User Function TmpMarkBrowse() Local aArea := GetArea() Local oTempTable := Nil Local cTempTable := "" Local nIndice := 0 Local aColumns := {} Local oMarkBrowse //Constrói estrutura da temporária cTempTable := fBuildTmp(@oTempTable) DbSelectArea(cTempTable) (cTempTable)->( DbSetOrder(1) ) (cTempTable)->( DbGoTop() ) lAcao := .T. //Alimenta a tabela temporária para teste. For nIndice := 1 To 10 If( RecLock(cTempTable, lAcao) ) (cTempTable)->ANO := "2020" (cTempTable)->PRODUTO := "PRODUTO - "+cValToChar(nIndice) MsUnLock() EndIf Next //Constrói estrutura das colunas do FWMarkBrowse aColumns := fBuildColumns() //Criando o FWMarkBrowse oMarkBrowse := FWMarkBrowse():New() oMarkBrowse:SetAlias(cTempTable) oMarkBrowse:SetDescription('Seleção Tabela Temporária') oMarkBrowse:DisableReport() oMarkBrowse:SetFieldMark( 'OK' ) //Campo que será marcado/descmarcado oMarkBrowse:SetTemporary(.T.) oMarkBrowse:SetColumns(aColumns) //Inicializa com todos registros marcados oMarkBrowse:AllMark() //Ativando a janela oMarkBrowse:Activate() oTempTable:Delete() oMarkBrowse:DeActivate() FreeObj(oTempTable) FreeObj(oMarkBrowse) RestArea( aArea ) Return /* Descrição: Constrói tabela temporária. Data : 26/05/2020 Param : Object, Endereço do content da temporária Return : Character, nome da tabela criada. */ Static Function fBuildTmp(oTempTable) Local cAliasTemp := "ZMARC_"+FWTimeStamp(1) Local aFields := {} //Monta estrutura de campos da temporária aAdd(aFields, { "OK" , "C", 2, 0 }) aAdd(aFields, { "ANO" , "C", 4, 0 }) aAdd(aFields, { "PRODUTO" , GetSx3Cache("B1_COD","X3_TIPO"), GetSx3Cache("B1_COD","X3_TAMANHO"), GetSx3Cache("B1_COD","X3_DECIMAL") }) oTempTable:= FWTemporaryTable():New(cAliasTemp) oTemptable:SetFields( aFields ) oTempTable:AddIndex("01", {"PRODUTO"} ) oTempTable:Create() Return oTempTable:GetAlias() /* Descrição: Constrói estrutura das colunas que serão apresentadas na tela. Data : 26/05/2020 Return : Nil */ Static Function fBuildColumns() Local nX := 0 Local aColumns := {} Local aStruct := {} AAdd(aStruct, {"OK" , "C", 2 , 0}) AAdd(aStruct, {"ANO" , "C", 4 , 0}) AAdd(aStruct, {"PRODUTO" , "C",20 , 0}) For nX := 2 To Len(aStruct) AAdd(aColumns,FWBrwColumn():New()) aColumns[Len(aColumns)]:SetData( &("{||"+aStruct[nX][1]+"}") ) aColumns[Len(aColumns)]:SetTitle(aStruct[nX][1]) aColumns[Len(aColumns)]:SetSize(aStruct[nX][3]) aColumns[Len(aColumns)]:SetDecimal(aStruct[nX][4]) Next nX Return aColumns
Exemplo em Vídeo:
Clique nesse link para ver um exemplo em Vídeo da nossa Maratona de Exemplos.
Observações:
- Caso tenha dúvidas ou problemas com os exemplos, entre em contato;
- Se tiver sugestões de rotinas, pode entrar em contato;
- Função e documentação enviada por Súlivan Simões;