Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Produto:

Protheus

Ocorrência:Qual

o motivo de apresentar a mensagem A200NAONEG ao incluir um produto na estruturaComo utilizar a rotina Empenhos Múltiplos (MATA381) via execução automática (MsExecAuto)?

Passo a passo:Essa situação ocorre pois o parâmetro MV_NEGESTR está desativado.
Este parâmetro tem a finalidade de permite incluir itens negativos na estrutura.

Para realizar manutenção nos empenhos da ordem de produção, pode-se utilizar o programa MATA381. Através da execução automática do programa MATA381 é possível realizar a alteração de empenhos em lotes.

Cada execução do programa MATA381 irá permitir alterar os empenhos de determinada ordem de produção. A execução automática do programa MATA381 recebe 3 parâmetros.

  • Parâmetro 1 → Array com as informações do cabeçalho do programa de empenhos múltiplos (MATA381). Obrigatório enviar o número da ordem de produção. Pode ser enviado neste array o índice de busca dos dados na tabela SD4 e também o parâmetro AUTZERAEMP. Ambos serão citados nos exemplos.
  • Parâmetro 2 → Array com as informações dos empenhos que serão processados pelo programa. Para as operações de Exclusão de empenhos e Zerar empenhos, este parâmetro é opcional.
  • Parâmetro 3 → Operação que será executada pela rotina automática. Os valores aceitos são: 3 → Inclusão; 4 → Alteração; 5 → Exclusão.

Exemplo para inclusão de empenhos:

No array com as informações do cabeçalho, é necessário enviar apenas o número da ordem de produção.
No array de itens, é necessário informar todas as informações do empenho que será incluído. Informações de Endereços podem ser enviadas através da opção AUT_D4_END conforme exemplo.

Quando o empenho possui controle de lote e o lote é enviado para geração do empenho, não é necessário enviar a data de validade do lote. O programa MATA381 preenche a validade do lote automaticamente.

Para inclusão dos empenhos, enviar o 3° parâmetro do MATA381 com o valor 3.

Bloco de código
languagecpp
firstline1
titleExemplo de inclusão de empenhos
linenumberstrue
collapsetrue
User Function Inc381Auto()
	Local aCab       := {}
	Local aLine      := {}
	Local aItens     := {}
	Local aEnder     := {}
	Local aLineEnder := {}

	PRIVATE lMsErroAuto := .F.

	//Monta o cabeçalho com o número da OP que será utilizada para inclusão dos empenhos.
	aCab := {{"D4_OP","00130301001",NIL}}
	
	//Adiciona novo empenho	
	aLine := {}
	aAdd(aLine,{"D4_OP"     ,"00130301001"     ,NIL})
	aAdd(aLine,{"D4_COD"    ,"MP01"            ,NIL})
	aAdd(aLine,{"D4_LOCAL"  ,"01"              ,NIL})
	aAdd(aLine,{"D4_DATA"   ,CtoD("18/09/2018"),NIL})
	aAdd(aLine,{"D4_QTDEORI",10                ,NIL})
	aAdd(aLine,{"D4_QUANT"  ,10                ,NIL})
	aAdd(aLine,{"D4_TRT"    ,"001"             ,NIL})
	//Adiciona a linha do empenho no array de itens.
	aAdd(aItens,aLine)

	//Adiciona novo empenho	com utilização de Lote. 
	//A data de validade do lote é preenchida automaticamente pelo programa e não precisa ser enviada no array.
	aLine := {}
	aAdd(aLine,{"D4_OP"     ,"00130301001"     ,NIL})
	aAdd(aLine,{"D4_COD"    ,"MP02"            ,NIL})
	aAdd(aLine,{"D4_LOCAL"  ,"01"              ,NIL})
	aAdd(aLine,{"D4_DATA"   ,CtoD("18/09/2018"),NIL})
	aAdd(aLine,{"D4_QTDEORI",3                 ,NIL})
	aAdd(aLine,{"D4_QUANT"  ,3                 ,NIL})
	aAdd(aLine,{"D4_LOTECTL","L1"              ,NIL})
	aAdd(aLine,{"D4_TRT"    ,"002"             ,NIL})
	//Adiciona a linha do empenho no array de itens.
	aAdd(aItens,aLine)

	//Adiciona novo empenho	com endereço e lote
	aLine := {}
	aAdd(aLine,{"D4_OP"     ,"00130301001"     ,NIL})
	aAdd(aLine,{"D4_COD"    ,"MP03"            ,NIL})
	aAdd(aLine,{"D4_LOCAL"  ,"01"              ,NIL})
	aAdd(aLine,{"D4_DATA"   ,CtoD("17/09/2018"),NIL})
	aAdd(aLine,{"D4_QTDEORI",10                ,NIL})
	aAdd(aLine,{"D4_QUANT"  ,10                ,NIL})
	aAdd(aLine,{"D4_LOTECTL","L1"              ,NIL})
	aAdd(aLine,{"D4_TRT"    ,"003"             ,NIL})
	aAdd(aLine,{"D4_ROTEIRO","01"              ,NIL})

	//Informações do endereço
	aEnder     := {}
	aLineEnder := {}
	aAdd(aLineEnder,{"DC_LOCALIZ","END01",Nil})
	aAdd(aLineEnder,{"DC_QUANT"  ,5      ,Nil})
	//Primeiro endereço que será utilizado
	aAdd(aEnder,aLineEnder)

	aLineEnder := {}
	aAdd(aLineEnder,{"DC_LOCALIZ","END02",Nil})
	aAdd(aLineEnder,{"DC_QUANT"  ,5      ,Nil})
	//Segundo endereço que será utilizado
	aAdd(aEnder,aLineEnder)

	//Adiciona os endereços na linha do empenho
	aAdd(aLine,{"AUT_D4_END",aEnder,Nil})
	//Adiciona a linha do empenho no array de itens.
	aAdd(aItens,aLine)

	//Executa o MATA381, com a operação de Inclusão.
	MSExecAuto({|x,y,z| mata381(x,y,z)},aCab,aItens,3)
	If lMsErroAuto
		//Se ocorrer erro.
		MostraErro()
	Else
		Alert("Incluído com sucesso.")
	EndIf
Return



Observações: