Árvore de páginas

01. CN121PED - Tratamento especifico antes da geração do Pedido de Compra ou de Venda

Produto:

TOTVS Backoffice

Linha de Produto:

Linha Protheus

Segmento:

Backoffice

Módulo:Gestão de Contratos
Função:CNTA121 - Medições
Ponto de Entrada:CN121PED

02. DETALHES

Descrição:

Possibilita ao desenvolvedor realizar tratamentos específicos antes da geração do pedido de compra ou de venda, podendo manipular o cabeçalho e itens se necessário.

Eventos:

Executado uma vez por pedido gerado pela medição

Programa Fonte:

CNTA121.PRW

Função:

CN121GerDoc

Parâmetros:
PosiçãoTipoDescrição
PARAMIXB[1]Vetor

Contêm o cabeçalho do pedido. Se for pedido de compra, será a tabela SC7, se for de venda, tabela SC5.

O vetor contêm a estrutura abaixo:

PosiçãoTipoDescrição
1Caractere

Nome do campo

2VariávelValor do campo
3Nulo

Compatibilidade

PARAMIXB[2]Vetor

Contêm os itens do pedido. Se for pedido de compra, será a tabela SC7, se for de venda, tabela SC6.

Cada posição do vetor contêm a estrutura abaixo:

PosiçãoTipoDescrição
1CaractereNome do campo
2VariávelValor do campo
3NuloCompatibilidade
Retorno:
ValorTipoDescrição
aResultVetor

Deve seguir a mesma estrutura recebida no ParamIXB, ou seja, duas posições.

A posição 1 deve conter o cabeçalho e a posição 2 conter os itens do pedido.


 

Importante

Este ponto de entrada irá substituir os PE's CN120IT7, CN120ITM, CN120PED e CN120AEP da antiga rotina de medições(CNTA120)


Exemplo simples
#include "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"

User Function CN121PED()	
	Local aCab		:= PARAMIXB[1]	
	Local aItens	:= PARAMIXB[2]
	Local aResult	:= Array(2)
	Local oModel	:= Nil
	Local lVenda	:= .F.
	Local lCompra	:= .F.

	If !(Empty(aCab) .Or. Empty(aItens))
		oModel := FwModelActive()//Modelo do CNTA121		
		/*Para obter dados do modelo, usar oModel:GetValue(cModelId, cCampo). 
		  Exemplo: oModel:GetValue("CNDMASTER", "CND_CONTRA")		  
		*/

		lVenda	:= Cn121RetSt( "VENDA"	, 0, /*cPlan*/, /*cContra*/, .T., oModel )
		lCompra	:= Cn121RetSt( "COMPRA"	, 0, /*cPlan*/, /*cContra*/, .T., oModel )		

		/*Realizar a operação desejada aqui...*/
	EndIf

	aResult[1] := aCab
	aResult[2] := aItens
Return aResult
Liberando um pedido de venda
#include "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TBICONN.CH"

User Function CN121PED()	
	Local aCab		:= PARAMIXB[1]	
	Local aItens	:= PARAMIXB[2]
	Local aResult	:= Array(2)
	Local oModel	:= Nil
	Local lVenda	:= .F.
	Local aUmItem 	:= {}
	Local nIndex	:= 0
	Local nX		:= 0
	Local aTemp		:= {}

	If !(Empty(aCab) .Or. Empty(aItens))
		oModel := FwModelActive()		
		lVenda := Cn121RetSt( "VENDA",0, /*cPlan*/, /*cContra*/, .T., oModel )		
		If lVenda
			for nX := 1 to Len(aItens)
				aUmItem := aItens[nX]
				nIndex	:= aScan(aUmItem, {|x| AllTrim(x[1]) == "C6_QTDVEN"})
				if nIndex > 0
					aTemp 	:= aClone(aUmItem[nIndex])
					aTemp[1]:= "C6_QTDLIB"
					aAdd(aUmItem, aTemp) //Equaliza a quantidade liberada com a quantidade, dessa forma o pedido é automaticamente liberado.
					/*É importante frisar que com essa liberação, ao tentar estornar a medição, será apresentado o alerta A410LIBER */
				endif
			next nX
		EndIf
	EndIf

	aResult[1] := aCab
	aResult[2] := aItens
Return aResult