FWMarkbrowse - Exemplo

Galera Bom Dia,

Tudo bem?

Alguém tem algum exemplo de utilização da rotina FWMarkBrowse com a montagem do filtro sendo o resultado de uma query?

Tenho uma função hoje de impressão do pedido de compra em PDF, queria montar os pedidos em aberto dos clientes e enviar o e-mail para eles.

Valeu.

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?

Boa 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.

Galera,

Por gentileza ninguém teria um exemplo?

Preciso muito de um FWMarkbrowse onde o Alias que seja aberto, seja o retorno de uma Query.

Obrigado a todos.

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

Giordano,

Muito obrigado pelo fonte, vou tentar ver se consigo montar uma Query, qual é o intuito desse Markbrowse que preciso, tenho um fonte que gera os pedidos de venda em PDF com um Layout mais agradável do que o Padrão, vou criar um filtro no SQL com os pedidos em aberto na SC7 de acordo com o fornecedor informado e posteriormente chamar a função de envio de impressão e outra função para enviar o pedido direto no e-mail do fornecedor.

Muito obrigado.

Fernando, dependendo dá pra usar a própria tabela temporária, preenchendo ela com o retorno da query. Igual está no meu exemplo.

Giordano, poderia por o exemplo das rotinas que vc colocou no menudef ?

Buenas tche!

Fernando! Ve esse exemplo te ajuda!

Local oMark Local cMark := GetMark() Local aNotasMarcadas := {}

oMark := FWMarkBrowse():New()

oMark:SetAlias( "SF3" ) oMark:SetDescription( "Notas Fiscais" ) oMark:SetFieldMark( "F3_OK" ) oMark:SetOnlyFields( { 'F3_NFISCAL', 'F3_SERIE', 'F3_CLIEFOR', 'F3_LOJA', 'F3_EMISSAO', 'F3_ESPECIE', 'F3_DTCANC', 'F3_OK', 'F3_SDOC', ; 'F3_EMINFE', 'F3_CODNFE', 'F3_NFELETR', 'F3_CHVNFE', 'F3_CODRET', 'F3_CODRSEF', 'F3_HORNFE', 'F3_DESCRET'} )

oMark:SetIgnoreARotina(.T.) oMark:SetMenuDef("ROTINA")

oMark:DisableReport()

oMark:SetMark( cMark, "SF3", "F3_OK" )

//oMark:SetFilterDefault( "@" + P200FiltroQuery( cNotaInicial, cNotaFinal, cSerie, dDtaEmiIni, dDtaEmiFin ) )

//cQuery := "F3_FILIAL = '" + xFilial("SF3") + "' " cQuery := "F3_SERIE = '" + cSerie + "' " cQuery += ".AND. F3_DTCANC = '" + Space(8) + "' " cQuery += ".AND. F3_EMISSAO >= '" + DtoS(dDtaEmiIni) + "' .AND. F3_EMISSAO <= '" + DtoS(dDtaEmiFin) + "' " cQuery += ".AND. F3_NFISCAL >= '" + cNotaInicial + "' .AND. F3_NFISCAL <= '" + cNotaFinal + "' " // cQuery += ".AND. F3_ESTADO <> 'EX' // cQuery += ".AND. F3_TIPO <> 'D' "

VarInfo( "cFiltro", cQuery )

oMark:SetFilterDefault( cQuery ) oMark:AddButton( "Confirmar", {|| Self:End()} )

oMark:Activate()