Buscando informações do MarkBrowse com ThisInv e ThisMark – Maratona AdvPL e TL++ 492

Nesse vídeo demonstraremos a utilização das funções ThisInv e ThisMark, que servem para buscar informações de antigos MarkBrowse.

Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:

//Bibliotecas
#Include "TOTVS.ch"
#Include "TopConn.ch"

/*/{Protheus.doc} User Function zExe492
Busca informações do MarkBrowse aberto (se esta invertido e qual é a marcação)
@type Function
@author Atilio
@since 04/04/2023
@obs 

    ThisInv
    Parâmetros
        Função não tem parâmetros
    Retorno
        Retorna se o MarkBrow esta invertido (.T.) ou não (.F.)

    ThisMark
    Parâmetros
        Função não tem parâmetros
    Retorno
        Retorna a string usada na marcação da coluna do MarkBrow

    **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/

User Function zExe492()
    Local aArea      := FWGetArea()
    Local cSQL       := ""
    Local cMensagem  := ""
    Local cMascQtd   := PesqPict("SC9", "C9_QTDLIB")
    Local lContinua  := .T.
    Local cMarca     := ThisMark() 
    Local lInverte   := ThisInv()  
    
    //Criando a consulta
    cSQL += " SELECT " + CRLF
    cSQL += "  C9_PEDIDO AS PEDIDO, " + CRLF
    cSQL += "  C9_PRODUTO AS PRODUTO, " + CRLF
    cSQL += "  B1_DESC AS DESCRI, " + CRLF
    cSQL += "  C9_QTDLIB AS QUANTID, " + CRLF
    cSQL += "  B2_QATU AS SALDO " + CRLF
    cSQL += " FROM "+RetSQLName("SC9")+" SC9 " + CRLF
    cSQL += "   INNER JOIN "+RetSQLName("SC5")+" SC5 ON (" + CRLF
    cSQL += "       SC5.D_E_L_E_T_='' " + CRLF
    cSQL += "       AND C5_FILIAL = C9_FILIAL " + CRLF
    cSQL += "       AND C5_NUM = C9_PEDIDO " + CRLF
    cSQL += "   ) " + CRLF
    cSQL += "   INNER JOIN "+RetSQLName("SB1")+" SB1 ON ( " + CRLF
    cSQL += "		B1_FILIAL = '' " + CRLF
    cSQL += "		AND B1_COD = C9_PRODUTO " + CRLF
    cSQL += "		AND SB1.D_E_L_E_T_ = ' ' " + CRLF
    cSQL += "   ) " + CRLF
    cSQL += "   INNER JOIN "+RetSQLName("SB2")+" SB2 ON ( " + CRLF
    cSQL += "		B2_FILIAL = C9_FILIAL " + CRLF
    cSQL += "		AND B2_COD = C9_PRODUTO " + CRLF
    cSQL += "		AND B2_LOCAL = C9_LOCAL " + CRLF
    cSQL += "		AND SB2.D_E_L_E_T_ = ' ' " + CRLF
    cSQL += "   ) " + CRLF
    cSQL += "   INNER JOIN "+RetSQLName("SC6")+" SC6 ON ( " + CRLF
    cSQL += "		C6_FILIAL = C9_FILIAL " + CRLF
    cSQL += "		AND C6_NUM = C9_PEDIDO " + CRLF
    cSQL += "		AND C6_PRODUTO = C9_PRODUTO " + CRLF
    cSQL += "		AND C6_ITEM = C9_ITEM " + CRLF
    cSQL += "		AND SC6.D_E_L_E_T_ = ' ' " + CRLF
    cSQL += "   ) " + CRLF
    cSQL += "   INNER JOIN "+RetSQLName("SF4")+" SF4 ON ( " + CRLF
    cSQL += "		F4_FILIAL = '" + FWxFilial("SF4") + "' " + CRLF
    cSQL += "		AND F4_CODIGO = C6_TES " + CRLF
    cSQL += "		AND F4_ESTOQUE = 'S' " + CRLF
    cSQL += "		AND SF4.D_E_L_E_T_ = ' ' " + CRLF
    cSQL += "   ) " + CRLF
    cSQL += " WHERE SC9.D_E_L_E_T_ = ' ' " + CRLF
    cSQL += "  AND C9_FILIAL='"+FWxFilial("SC9")+"' " + CRLF
    cSQL += "  AND C9_OK"+Iif(lInverte, "<>", "=")+ "'"+cMarca+"' " + CRLF
    cSQL += "  AND C9_CLIENTE >= '" + MV_PAR07 + "' AND C9_CLIENTE <= '" + MV_PAR08 + "' " + CRLF
    cSQL += "  AND C9_LOJA >= '" + MV_PAR09 + "' AND C9_LOJA <= '" + MV_PAR10 + "' " + CRLF
    cSQL += "  AND C9_DATALIB >= '" + dToS(MV_PAR11) + "' AND C9_DATALIB <= '" + dToS(MV_PAR12) + "' " + CRLF
    cSQL += "  AND C9_PEDIDO >= '" + MV_PAR05 + "' AND C9_PEDIDO <= '" + MV_PAR06 + "' " + CRLF
    cSQL += "  AND C9_BLEST = '' AND C9_BLCRED = ''" + CRLF
    TCQuery cSQL New Alias "QRY_SC9"

    //Percorrendo os dados e incrementando a mensagem
    While ! QRY_SC9->(Eof())
            cMensagem += "* "
            cMensagem += "Pedido '" + QRY_SC9->PEDIDO + "', "
            cMensagem += "Produto '" + QRY_SC9->PRODUTO + "' (" + Left(QRY_SC9->DESCRI, 15) + "), "
            cMensagem += "Vendeu '" + Transform(QRY_SC9->QUANTID, cMascQtd) + "', tem saldo de '" + Transform(QRY_SC9->SALDO, cMascQtd) + "'"
            cMensagem += CRLF

        QRY_SC9->(DbSkip())
    EndDo
    QRY_SC9->(DbCloseArea())

    //Se existir mensagem, será exibida
    If ! Empty(cMensagem)
        cMensagem := "Produtos marcados: " + CRLF + CRLF + cMensagem
        ShowLog(cMensagem)
    EndIf

    FWRestArea(aArea)
Return lContinua

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação