No vídeo de hoje, vamos demonstrar em como editar o conteúdo de um campo usando FWBrowse.
Hoje, a dúvida foi feita pelo grande Fernando, onde ele perguntou como usar uma grid customizada com FWBrowse com edição de campos.
Então foi criado as tratativas nas colunas através de FWBrwColumn.
E abaixo o código fonte desenvolvido para exemplificar:
#Include "Totvs.ch" /*/{Protheus.doc} User Function zVid0039 Função que demonstra como atualizar valores da grid usando FWBrowse @type Function @author Atilio @since 01/09/2021 @version version /*/ User Function zVid0039() Local aArea := GetArea() //Fontes Local cFontUti := "Tahoma" Local oFontAno := TFont():New(cFontUti,,-38) Local oFontSub := TFont():New(cFontUti,,-20) Local oFontSubN := TFont():New(cFontUti,,-20,,.T.) Local oFontBtn := TFont():New(cFontUti,,-14) //Janela e componentes Private oDlgGrp Private oPanGrid Private oGetGrid Private aColunas := {} Private cAliasTab := "TMPSBM" //Tamanho da janela Private aTamanho := MsAdvSize() Private nJanLarg := aTamanho[5] Private nJanAltu := aTamanho[6] //Cria a temporária oTempTable := FWTemporaryTable():New(cAliasTab) //Adiciona no array das colunas as que serão incluidas (Nome do Campo, Tipo do Campo, Tamanho, Decimais) aFields := {} aAdd(aFields, {"XXCODIGO", "C", 6, 0}) aAdd(aFields, {"XXDESCRI", "C", 30, 0}) aAdd(aFields, {"XXQUANTI", "N", 9, 2}) aAdd(aFields, {"XXEMISSA", "D", 8, 0}) aAdd(aFields, {"XXOBSERV", "C", 100, 0}) //Define as colunas usadas, adiciona indice e cria a temporaria no banco oTempTable:SetFields( aFields ) oTempTable:AddIndex("1", {"XXCODIGO"} ) oTempTable:Create() //Monta o cabecalho fMontaHead() //Montando os dados, eles devem ser montados antes de ser criado o FWBrowse FWMsgRun(, {|oSay| fMontDados(oSay) }, "Processando", "Buscando grupos") //Criando a janela DEFINE MSDIALOG oDlgGrp TITLE "Dados" FROM 000, 000 TO nJanAltu, nJanLarg COLORS 0, 16777215 PIXEL //Labels gerais @ 004, 003 SAY "FAT" SIZE 200, 030 FONT oFontAno OF oDlgGrp COLORS RGB(149,179,215) PIXEL @ 004, 050 SAY "Listagem Genérica de" SIZE 200, 030 FONT oFontSub OF oDlgGrp COLORS RGB(031,073,125) PIXEL @ 014, 050 SAY "Dados Temporários" SIZE 200, 030 FONT oFontSubN OF oDlgGrp COLORS RGB(031,073,125) PIXEL //Botões @ 006, (nJanLarg/2-001)-(0052*01) BUTTON oBtnFech PROMPT "Fechar" SIZE 050, 018 OF oDlgGrp ACTION (oDlgGrp:End()) FONT oFontBtn PIXEL //Dados @ 024, 003 GROUP oGrpDad TO (nJanAltu/2-003), (nJanLarg/2-003) PROMPT "Browse" OF oDlgGrp COLOR 0, 16777215 PIXEL oGrpDad:oFont := oFontBtn oPanGrid := tPanel():New(033, 006, "", oDlgGrp, , , , RGB(000,000,000), RGB(254,254,254), (nJanLarg/2 - 13), (nJanAltu/2 - 45)) oGetGrid := FWBrowse():New() oGetGrid:DisableFilter() oGetGrid:DisableConfig() oGetGrid:DisableReport() oGetGrid:DisableSeek() oGetGrid:DisableSaveConfig() oGetGrid:SetFontBrowse(oFontBtn) oGetGrid:SetAlias(cAliasTab) oGetGrid:SetDataTable() oGetGrid:SetEditCell(.T., {|| .T.}) oGetGrid:lHeaderClick := .F. oGetGrid:AddLegend(cAliasTab + "->XXQUANTI == 0", "YELLOW", "Quantidade zerada") oGetGrid:AddLegend(cAliasTab + "->XXQUANTI < 0", "RED", "Quantidade menor que zero") oGetGrid:AddLegend(cAliasTab + "->XXQUANTI > 0", "GREEN", "Quantidade maior que zero") oGetGrid:SetColumns(aColunas) oGetGrid:SetOwner(oPanGrid) oGetGrid:Activate() ACTIVATE MsDialog oDlgGrp CENTERED //Deleta a temporaria oTempTable:Delete() RestArea(aArea) Return Static Function fMontaHead() Local nAtual Local aHeadAux := {} //Adicionando colunas //[1] - Campo da Temporaria //[2] - Titulo //[3] - Tipo //[4] - Tamanho //[5] - Decimais //[6] - Máscara //[7] - Editável? .T. = sim, .F. = não aAdd(aHeadAux, {"XXCODIGO", "Código", "C", 6, 0, "", .F.}) aAdd(aHeadAux, {"XXDESCRI", "Descricao", "C", 30, 0, "", .F.}) aAdd(aHeadAux, {"XXQUANTI", "Quantidade", "N", 9, 2, "@E 999,999.99", .T.}) aAdd(aHeadAux, {"XXEMISSA", "Emissão", "D", 8, 0, "", .T.}) aAdd(aHeadAux, {"XXOBSERV", "Observação", "C", 100, 0, "", .T.}) //Percorrendo e criando as colunas For nAtual := 1 To Len(aHeadAux) oColumn := FWBrwColumn():New() oColumn:SetData(&("{|| " + cAliasTab + "->" + aHeadAux[nAtual][1] +"}")) oColumn:SetTitle(aHeadAux[nAtual][2]) oColumn:SetType(aHeadAux[nAtual][3]) oColumn:SetSize(aHeadAux[nAtual][4]) oColumn:SetDecimal(aHeadAux[nAtual][5]) oColumn:SetPicture(aHeadAux[nAtual][6]) //Se for ser possível ter o duplo clique If aHeadAux[nAtual][7] oColumn:SetEdit(.T.) oColumn:SetReadVar(aHeadAux[nAtual][1]) //oColumn:SetValid({|| fSuaValid()}) EndIf aAdd(aColunas, oColumn) Next Return Static Function fMontDados(oSay) Local aArea := GetArea() Local nAtual := 0 Local nTotal := 50 Local dDtRef := Date() Local cCodAtu := "000000" Local cDescri := "" Local nQuanti := 0 Local dEmissa := sToD("") //Faz um laço de repetição For nAtual := 1 To nTotal //Muda a mensagem na regua nAtual++ oSay:SetText("Adicionando registro " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "...") //Pega as variáveis que vão ser gravadas cCodAtu := Soma1(cCodAtu) cDescri := "[" + Time() + "] Teste - " + cCodAtu nQuanti := Randomize(-5, 5) dEmissa := DaySub(dDtRef, nAtual) //Insere os dados na temporária RecLock(cAliasTab, .T.) (cAliasTab)->XXCODIGO := cCodAtu (cAliasTab)->XXDESCRI := cDescri (cAliasTab)->XXQUANTI := nQuanti (cAliasTab)->XXEMISSA := dEmissa (cAliasTab)->XXOBSERV := "" (cAliasTab)->(MsUnlock()) Next RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Bom dia, sabe como faço para que apareça o campo de pesquisa?
Bom dia Mauricio, tudo bem?
Com FWBrowse eu nunca precisei, mas você pode dar uma olhada nesse artigo, que eu demonstro em como fazer no FWMarkBrowse, pode ser que funcione: https://terminaldeinformacao.com/2023/03/06/criando-pesquisa-em-uma-fwmarkbrowse-ti-responde-046/
Abraços.