Buscando o saldo de um lote de produto com a SB8Saldo – Maratona AdvPL e TL++ 431

Nesse vídeo demonstraremos a utilização da função SB8Saldo, que serve para buscar o saldo de um lote de um produto no sistema.

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

//Bibliotecas
#Include "TOTVS.ch"

/*/{Protheus.doc} User Function zExe431
Exemplo para retornar o saldo do estoque de um produto de um lote específico
@type Function
@author Atilio
@since 30/03/2023
@obs 
    Função SB8Saldo
    Parâmetros
        Flag .T. ou .F. para considerar empenho
        Flag .T. ou .F. para considerar lotes vencidos
        Flag .T. ou .F. para considerar saldo a classificar
        Flag .T. ou .F. se deve calcular na segunda unidade de medida
        Alias que será considerado para buscar o lote
        Flag .T. ou .F. que indica se esta baixando empenho previsto
        Flag .T. ou .F. se é uma consulta de saldo
        Data de Referência para compor o Saldo
        Flag .T. ou .F. que indica se considera apenas o campo B8_SALDO
        Código da Ordem de Produção
    Retorno
        Retorna o Saldo encontrado no lote na SB8

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

User Function zExe431()
    Local aArea    := FWGetArea()
    Local lQtdPrev := .F.
    Local cQuery   := ""
    Local cCodProd := ""
    Local cLoteCtl := ""
    Local nSaldo   := 0

    //Pegando conteúdo do parâmetro
    lQtdPrev := GetMV("MV_QTDPREV") == "S"

    //Define o produto e o lote que serão buscados
    cCodProd := "A0002"
    cLoteCtl := "AUTO000001"
    
    //Criando a consulta que irá buscar os dados do Produto
    cQuery := " SELECT "
    cQuery += "     * "
    cQuery += " FROM "
    cQuery += "     " + RetSqlName('SB8') + " SB8 "
    cQuery += " WHERE "
    cQuery += "     B8_FILIAL = '" + FWxFilial('SB8') + "' "
    cQuery += "     AND B8_PRODUTO = '" + cCodProd + "' "
    cQuery += "     AND B8_LOTECTL = '" + cLoteCtl + "' "
    cQuery += "     AND SB8.D_E_L_E_T_ = ' ' "
    PLSQuery(cQuery, 'QRY_SB8')
    
    //Se houver dados da consulta
    If ! QRY_SB8->(EoF())
        
        //Percorre todas as linhas da query
        While ! QRY_SB8->(EoF())
            //Pega o saldo
            nSaldo += SB8Saldo(Nil, Nil, Nil, Nil, "QRY_SB8", lQtdPrev, .T.)
            
            QRY_SB8->(DbSkip())
        EndDo

        FWAlertInfo("O saldo encontrado foi de " + cValToChar(nSaldo), "Teste SB8Saldo")
    EndIf
    QRY_SB8->(DbCloseArea())

    FWRestArea(aArea)
Return

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