Função para criar Saldo Inicial no Produto

Olá pessoal…

Hoje vou mostrar um exemplo de como criar Saldo Inicial via AdvPL (tabela SB9).

Algumas vezes precisamos criar um Saldo Inicial para um produto em um armazém, e através do execauto da Mata220 isso é possível.

Foi criado uma função que recebe por parâmetro o Produto, o Armazém e o Saldo.

//Bibliotecas
#Include "Protheus.ch"
 
/*/{Protheus.doc} zGeraB9
Função que gera saldo inicial
@author Daniel Atilio
@since 16/02/2015
@version 1.0
@param cCodProd, Caracter, Código do Produto
@param cArmazem, Caracter, Código do Armazém
@param nQuant, Numérico, Quantidade do saldo inicial
@example
u_zGeraB9("00000001", "01", 3000)
/*/
 
User Function zGeraB9(cCodProd, cArmazem, nQuant)
Local aArea := GetArea()
 
DbSelectArea("SB9")
DbSetOrder(1) //B9_FILIAL+B9_COD+B9_LOCAL+DTOS(B9_DATA)
 
//Setando valores da rotina automática
lMsErroAuto := .F.
aVetor :={;
{"B9_FILIAL" ,cFilAnt                          ,Nil},;
{"B9_COD"    ,cCodProd                       ,Nil},;
{"B9_LOCAL"  ,cArmazem                          ,Nil},;
{"B9_QINI"      ,nQuant                         ,Nil}}
 
//Iniciando transação e executando saldos iniciais
Begin Transaction
MSExecAuto({|x,y| Mata220(x,y)}, aVetor)
 
//Se houve erro, mostra mensagem
If lMsErroAuto
  lHouveErro := .T.
  MostraErro()
  DisarmTransaction()
EndIf
End Transaction
 
RestArea(aArea)
Return

Dessa forma, você consegue fazer um for, um while ou várias chamadas para criar o saldo inicial de vários produtos.

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.

4 Responses

  1. Rone disse:

    Boa tarde, legal Dan talvez seja interessante colocar o custo também.

  2. Jose Antonio disse:

    Esse função poderia ser utilizada dentro de um ponto de entrada?

Deixe uma resposta para RoneCancelar resposta

Terminal de Informação