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_DATA"	 ,dDataBase		                 ,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 Atilio (Daniel Atilio)
Especialista em Engenharia de Software pela FIB. Entusiasta de soluções Open Source. E blogueiro nas horas vagas.

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