Boa tarde, Fernando!
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. Segue em anexo um exemplo:
User Function FINA07MK
Private aCpoInfo := {}
Private aCampos := {}
Private aCpoData := {}
Private oTable := Nil
Private oMarkBrow := Nil
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
Bom dia Fernando, você deseja que o filtro de um alias aberto na FWMarkBrowse seja feito via query ou deseja que o alias principal da FWMarkBrowse seja uma query? O que o FWMarkBrowse influência no envio de e-mail de pedidos em aberto?
— Daniel Mendes 03 de Apr de 2020Boa Tarde Daniel,
Talvez me expressei mal, exatamente isso eu desejo que o filtro de um alias seja aberto na FWMarkBrowse feito via query, essa query irá me trazer os pedidos em aberto de determinado fornecedor, o usuário irá marca-los e irei enviar um PDF dos pedidos marcados para o e-mail do fornecedor.
— Fernando Vernier 04 de Apr de 2020