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
Analista e desenvolvedor de sistemas. Técnico em Informática pelo CTI da Unesp. Graduado em Banco de Dados pela Fatec Bauru. Entusiasta de soluções Open Source e blogueiro nas horas vagas.

2 Responses

  1. Rone disse:

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

Deixe uma resposta