Olá pessoal
Hoje vou postar uma rotina para que possamos criar facilmente um markbrowse editável, assim o usuário pode selecionar os registros e tambem editar as informações.
Abaixo o código fonte, a rotina é bem simples basta compilar e executar para ver um exemplo.
#Include "Protheus.ch"
/*/{Protheus.doc} SPMarkTe
Função SPMarkTe, cria um markbrowse editavel.
@param Não recebe parâmetros
@return Não retorna nada
@author Rafael Goncalves
@owner sempreju.com.br
@version Protheus 12
@since Out|2020
/*/
User Function SPMarkTe()
Private lMarker := .T.
Private aDespes := {}
//Alimenta o array
BUSDATA()
DEFINE MsDIALOG o3Dlg TITLE 'Clientes' From 0, 4 To 650, 1180 Pixel
oPnMaster := tPanel():New(0,0,,o3Dlg,,,,,,0,0)
oPnMaster:Align := CONTROL_ALIGN_ALLCLIENT
oDespesBrw := fwBrowse():New()
oDespesBrw:setOwner( oPnMaster )
oDespesBrw:setDataArray()
oDespesBrw:setArray( aDespes )
oDespesBrw:disableConfig()
oDespesBrw:disableReport()
oDespesBrw:SetLocate() // Habilita a Localização de registros
//Create Mark Column
oDespesBrw:AddMarkColumns({|| IIf(aDespes[oDespesBrw:nAt,01], "LBOK", "LBNO")},; //Code-Block image
{|| SelectOne(oDespesBrw, aDespes)},; //Code-Block Double Click
{|| SelectAll(oDespesBrw, 01, aDespes) }) //Code-Block Header Click
oDespesBrw:addColumn({"Codigo" , {||aDespes[oDespesBrw:nAt,02]}, "C", "@!" , 1, 20 , , .T. , , .F.,, "aDespes[oDespesBrw:nAt,02]",, .F., .T., , "ETDESPES1" })
oDespesBrw:addColumn({"Nome" , {||aDespes[oDespesBrw:nAt,03]}, "C", "@!" , 1, 100 , , .T. , , .F.,, "aDespes[oDespesBrw:nAt,03]",, .F., .T., , "ETDESPES2" })
oDespesBrw:addColumn({"End" , {||aDespes[oDespesBrw:nAt,04]}, "C", "@!" , 1, 100 , , .T. , , .F.,, "aDespes[oDespesBrw:nAt,04]",, .F., .T., , "ETDESPES3" })
oDespesBrw:addColumn({"Cidade" , {||aDespes[oDespesBrw:nAt,05]}, "C", "@!" , 1, 100 , , .T. , , .F.,, "aDespes[oDespesBrw:nAt,05]",, .F., .T., , "ETDESPES4" })
oDespesBrw:setEditCell( .T. , { || .T. } ) //activa edit and code block for validation
/*
oDespesBrw:acolumns[2]:ledit := .T.
oDespesBrw:acolumns[2]:cReadVar:= 'aDespes[oBrowse:nAt,2]'*/
oDespesBrw:Activate(.T.)
Activate MsDialog o3Dlg
return .t.
Static Function SelectOne(oBrowse, aArquivo)
aArquivo[oDespesBrw:nAt,1] := !aArquivo[oDespesBrw:nAt,1]
oBrowse:Refresh()
Return .T.
Static Function SelectAll(oBrowse, nCol, aArquivo)
Local _ni := 1
For _ni := 1 to len(aArquivo)
aArquivo[_ni,1] := lMarker
Next
oBrowse:Refresh()
lMarker:=!lMarker
Return .T.
//Alimenta a tabela temporaria
Static Function BUSDATA()
Local cQuery as Character
Local cQryT3 as Character
cQuery := ""
cQryT3 := GetNextAlias()
aDespes := {}
cQuery+="SELECT * FROM " + RetSqlName("SA1")
cQuery+=" WHERE D_E_L_E_T_=''"
cQuery:=ChangeQuery(cQuery)
dbUseArea( .T., "TOPCONN", TcGenQry( ,, cQuery ) , cQryT3, .T., .F. )
(cQryT3)->(DbGoTop())
While (cQryT3)->(!EOF())
aadd(aDespes,{.f.,alltrim((cQryT3)->A1_COD+(cQryT3)->A1_LOJA),alltrim((cQryT3)->A1_NOME),alltrim((cQryT3)->A1_END),alltrim((cQryT3)->A1_MUN) })
(cQryT3)->(dbSkip())
EndDo
(cQryT3)->(dbCloseArea())
DbSelectArea('SA1')
Return .t.
O código fonte desse e outros exemplos podem ser encontrados em nosso git.
Post interessantes:
Ponto de entrada ao acessar o sistema aqui.
Aprenda a instalar o Protheus no Windows aqui.
Aprenda a instalar o Protheus no Linux aqui.
Retornar datas por extenso aqui.
Barras de progresso aqui.
Dúvidas e sugestões, entre em contato.
Obrigado e até a próxima!
0 comentário