Nesse vídeo demonstraremos a utilização da CalcEst que retorna informações de um produto em um determinado armazém e em uma determinada data.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe070
Exemplo para retornar o saldo do estoque de um produto
@type Function
@author Atilio
@since 06/12/2022
@see https://centraldeatendimento.totvs.com/hc/pt-br/articles/4880693700375-Cross-Segmento-Backoffice-Linha-Protheus-SIGAEST-Fun%C3%A7%C3%A3o-CalcEst-
@obs
Função CalcEst
Parâmetros
+ cCod , Caractere , Código do Produto
+ cLocal , Caractere , Código do Armazém
+ dData , Data , Data a computar o saldo
+ cFilAux , Caractere , Filial (parâmetro em desuso)
+ lConsTesTerc , Lógico , .T. se considera poder de terceiros ou .F. se não
+ lCusRep , Lógico , .T. se considera custo de reposição ou .F. se não
Retorno
+ aSaldo , Array , Array contendo os dados encontrados (verificar as posições abaixo)
Posições do aSaldo:
aSaldo[01] : Quantidade
aSaldo[02] : Valor Moeda 1
aSaldo[03] : Valor Moeda 2
aSaldo[04] : Valor Moeda 3
aSaldo[05] : Valor Moeda 4
aSaldo[06] : Valor Moeda 5
aSaldo[07] : Quantidade da segunda unidade de medida
aSaldo[08] : Custo Médio 1
aSaldo[09] : Custo Médio 2
aSaldo[10] : Custo Médio 3
aSaldo[11] : Custo Médio 4
aSaldo[12] : Custo Médio 5
Caso seja informado o lCusRep:
aSaldo[13] : Custo de Reposição Unitário da Moeda 1
aSaldo[14] : Custo de Reposição Unitário da Moeda 2
aSaldo[15] : Custo de Reposição Unitário da Moeda 3
aSaldo[16] : Custo de Reposição Unitário da Moeda 4
aSaldo[17] : Custo de Reposição Unitário da Moeda 5
aSaldo[18] : Custo de Reposição da Moeda 1
aSaldo[19] : Custo de Reposição da Moeda 2
aSaldo[20] : Custo de Reposição da Moeda 3
aSaldo[21] : Custo de Reposição da Moeda 4
aSaldo[22] : Custo de Reposição da Moeda 5
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe070()
Local aArea := FWGetArea()
Local cProduto := ""
Local cArmazem := ""
Local dDataFim
Local aSaldos := {}
//Define os parâmetros que serão usados no CalcEst
cProduto := AvKey("F0001", "B1_COD")
cArmazem := "01"
dDataFim := DaySum(Date(), 1)
//Abre a tabela de produtos
DbSelectArea("SB1")
SB1->(DbSetOrder(1)) // B1_FILIAL + B1_COD
//Posiciona no cadastro
If SB1->(MsSeek(FWxFilial("SB1") + cProduto))
//Busca os saldos
aSaldos := CalcEst(cProduto, cArmazem, dDataFim)
FWAlertInfo("Saldo atual é de: " + cValToChar(aSaldos[1]), "Teste CalcEst")
EndIf
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Uma dica importante é que essa função faz uso de stored procedure, então para aumento de performance é importante que as stored procedures estejam instaladas.
Bom dia mano Súlivan, tudo joia?
Opa excelente adendo, obrigado pelo comentário.
Um forte abraço.
Existe alguma função que consiga fazer o calcest de um determinado horário do dia? pois o calcest dessa forma pega o saldo do fim do dia correto?
Bom dia Vinicius, tudo joia?
Infelizmente eu desconheço se tem alguma função assim.
Mas você poderia criar uma tabela de saldos, e colocar um ponto de entrada em cada rotina de movimentação, ai você vai e atualiza essa tabela, conforme a hora, então por exemplo, você vai ter um p.e. quando alimenta a sd1, sd2, sd3.
Ai nesse fonte, você vai e verifica a TES, se movimentar estoque, você armazena, o produto, o armazém, a data, a hora e o saldo que estava no momento da movimentação.
Depois disso, você consegue usar as informações dessa tabela.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.