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.