MaPosSb2
Retorna posicionamento de saldo SB2 (estoque) por produto+armazem na data informada. Considera empenho, reserva, saldo bloqueado.
Assinatura: MaPosSb2(cProduto, cArmazem, [dData]) -> aSaldos
Retorna: Array
Posiciona o SB2 e retorna o estado completo de estoque. Mais robusto que ler SB2 direto porque considera empenhos, reservas e bloqueios na data.
aSaldo := MaPosSb2("100001", "01", dDataBase)
// aSaldo[1] = saldo atual SB2_QATU
// aSaldo[2] = empenho SB2_QEMP
// aSaldo[3] = reservado SB2_RESERVA
// aSaldo[4] = saldo disponivel calculado
ConOut("Disponivel: " + cValToChar(aSaldo[4]))
Pegadinhas
- Saldo "disponivel" depende de regra empresa — alguns clientes contam empenho, outros nao.
- Custo da consulta — chamadas repetidas em loop matam performance; cache em variavel se for ler mesmo produto N vezes.
- Multifilial — assume xFilial atual; pra outra filial, faca
cFilAnttempora antes (cuidado).