Boa tarde, preciso montar um FWMarkBrowser com uma consulta SQL, nenhuma forma que encontrei funcionou. Alguém já fez isso e deu certo? Obrigado.
Boa tarde, preciso montar um FWMarkBrowser com uma consulta SQL, nenhuma forma que encontrei funcionou. Alguém já fez isso e deu certo? Obrigado.
Boa tarde, Felipe!
Possuo um FwMarkBrowse mas que funciona com tabela temporária, acredito que com algumas modificações dê pra fazer usando query. Ou dependendo da situação, dá pra utilizar com a tabela temporária mesmo assim, pois sempre que você chamar a função estática fLoadData o conteúdo do browse será atualizado com o conteúdo da query. Segue em anexo um exemplo:
User Function FINA07MK
Private aCpoInfo := {}
Private aCampos := {}
Private aCpoData := {}
Private oTable := Nil
Private oMarkBrow := Nil
Private cCadastro := 'Seleção de Títulos'
FwMsgRun(,{ || fLoadData() }, cCadastro, 'Carregando dados...')
oMarkBrow := FwMarkBrowse():New()
oMarkBrow:SetAlias('TRB')
oMarkBrow:SetTemporary()
oMarkBrow:SetColumns(aCampos)
oMarkBrow:SetFieldMark('TMP_OK')
oMarkBrow:SetMenuDef('FINA07MK')
oMarkBrow:SetDescription('Títulos para Cobrança')
oMarkBrow:SetAllMark( { || fInvert() } )
oMarkBrow:Activate()
If(Type('oTable') <> 'U')
oTable:Delete()
oTable := Nil
Endif
Return
Static Function MenuDef
Local aRotina := {}
Add Option aRotina Title 'Efetuar Comando' Action 'U_FINA07EF()' Operation 3 Access 0
Add Option aRotina Title 'Exportar Excel' Action 'U_FINA07EX()' Operation 6 Access 0
Add Option aRotina Title 'Marcar Todos' Action 'U_FINA07MD(.T.)' Operation 6 Access 0
Add Option aRotina Title 'Desmarcar Todos' Action 'U_FINA07MD(.F.)' Operation 8 Access 0
Return(aRotina)
Static Function fLoadData
Local nI := 0
Local _cAlias := GetNextAlias()
If(Type('oTable') <> 'U')
oTable:Delete()
oTable := Nil
Endif
oTable := FwTemporaryTable():New('TRB')
aCampos := {}
aCpoInfo := {}
aCpoData := {}
aAdd(aCpoInfo, {'Marcar' , '@!' , 1})
aAdd(aCpoInfo, {'Filial' , '@!' , 1})
aAdd(aCpoInfo, {'Cliente' , '@!' , 1})
aAdd(aCpoInfo, {'Loja' , '@!' , 1})
aAdd(aCpoInfo, {'CNPJ' , '@R 99.999.999.9999/99' , 1})
aAdd(aCpoInfo, {'Nome' , '@!' , 1})
aAdd(aCpoInfo, {'Endereco' , '@!' , 1})
aAdd(aCpoInfo, {'Bairro' , '@!' , 1})
aAdd(aCpoInfo, {'Cidade' , '@!' , 1})
aAdd(aCpoData, {'TMP_OK' , 'C' , 2 , 0})
aAdd(aCpoData, {'TMP_FILIAL', TamSx3('E1_FILIAL')[3] , TamSx3('E1_FILIAL')[1] , 0})
aAdd(aCpoData, {'TMP_CLIENT', TamSx3('E1_CLIENTE')[3] , TamSx3('E1_CLIENTE')[1] , 0})
aAdd(aCpoData, {'TMP_LOJA' , TamSx3('E1_LOJA')[3] , TamSx3('E1_LOJA')[1] , 0})
aAdd(aCpoData, {'TMP_CGC' , TamSx3('A1_CGC')[3] , TamSx3('A1_CGC')[1] , 0})
aAdd(aCpoData, {'TMP_NOMCLI', TamSx3('E1_NOMCLI')[3] , TamSx3('E1_NOMCLI')[1] , 0})
aAdd(aCpoData, {'TMP_END' , TamSx3('A1_END')[3] , TamSx3('A1_END')[1] , 0})
aAdd(aCpoData, {'TMP_BAIRRO', TamSx3('A1_BAIRRO')[3] , TamSx3('A1_BAIRRO')[1] , 0})
aAdd(aCpoData, {'TMP_MUN' , TamSx3('A1_MUN')[3] , TamSx3('A1_MUN')[1] , 0})
For nI := 1 To Len(aCpoData)
If(aCpoData[nI][1] <> 'TMP_OK' .and. aCpoData[nI][1] <> 'TMP_RECNO')
aAdd(aCampos, FwBrwColumn():New())
aCampos[Len(aCampos)]:SetData( &('{||' + aCpoData[nI,1] + '}') )
aCampos[Len(aCampos)]:SetTitle(aCpoInfo[nI,1])
aCampos[Len(aCampos)]:SetPicture(aCpoInfo[nI,2])
aCampos[Len(aCampos)]:SetSize(aCpoData[nI,3])
aCampos[Len(aCampos)]:SetDecimal(aCpoData[nI,4])
aCampos[Len(aCampos)]:SetAlign(aCpoInfo[nI,3])
EndIf
Next nI
oTable:SetFields(aCpoData)
oTable:Create()
BeginSql Alias _cAlias
%NoParser%
SELECT
SE1.E1_FILIAL,
SE1.E1_CLIENTE,
SE1.E1_LOJA,
SE1.E1_NOMCLI,
SA1.A1_CGC,
SA1.A1_TEL,
SA1.A1_TELEX,
SA1.A1_FAX,
SA1.A1_END,
SA1.A1_BAIRRO,
SA1.A1_MUN,
FROM %TABLE:SE1% (NOLOCK) SE1
INNER JOIN %TABLE:SA1% (NOLOCK) SA1 ON
SA1.A1_FILIAL = %xFilial:SA1% AND
SA1.A1_COD = SE1.E1_CLIENTE AND
SA1.A1_LOJA = SE1.E1_LOJA AND
SA1.%NOTDEL%
WHERE
SE1.E1_FILIAL BETWEEN %Exp:MV_PAR01% AND %Exp:MV_PAR02% AND
((%Exp:MV_PAR05% = 'S' AND SE1.E1_HIST = '') OR (%Exp:MV_PAR05% = 'N')) AND
SE1.E1_SALDO > 0 AND
SE1.E1_YFORMPG IN ('007','010') AND
DATEDIFF(DAY,SE1.E1_VENCREA,CONVERT(DATE,GETDATE())) BETWEEN %Exp:MV_PAR03% AND %Exp:MV_PAR04% AND
SE1.%NOTDEL%
ORDER BY
SE1.E1_NUM,
SE1.E1_PARCELA
EndSQL
(_cAlias)->(DbGoTop())
DbSelectArea('TRB')
While(!(_cAlias)->(EoF()))
RecLock('TRB', .T.)
TRB->TMP_FILIAL := (_cAlias)->E1_FILIAL
TRB->TMP_CLIENT := (_cAlias)->E1_CLIENTE
TRB->TMP_LOJA := (_cAlias)->E1_LOJA
TRB->TMP_CGC := (_cAlias)->A1_CGC
TRB->TMP_NOMCLI := (_cAlias)->E1_NOMCLI
TRB->TMP_END := (_cAlias)->A1_END
TRB->TMP_BAIRRO := (_cAlias)->A1_BAIRRO
TRB->TMP_MUN := (_cAlias)->A1_MUN
TRB->(MsUnlock())
(_cAlias)->(DbSkip())
EndDo
TRB->(DbGoTop())
(_cAlias)->(DbCloseArea())
Return
Olá, Felipe. Eu fiz com o exemplo deste link https://www.blogadvpl.com/usando-a-classe-fwmarkbrowse-com-tabela-temporaria/
— Yenny Delgado 26 de Jun de 2020