Árvore de páginas

Versões comparadas

Chave

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

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

Produto:

Solucoes_totvs_cross
SolucaoCrossTOTVS Backoffice

Linha de Produto:

Linhas_totvs
SegmentoDistribuição
RegionConstrução Projetos
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoBackoffice

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

Ponto de Entrada

Descrição:

O ponto de entrada poderá ser utilizado para tratamentos específicos antes da geração do pedido de compra ou de venda, podendo manipular o cabeçalho, itens e rateio se necessário.

Este ponto de entrada irá substituir os PE's CN120IT7, CN120ITM, CN120PED e CN120AEP da rotina de medições nas versões anteriores ao Protheus 12.1.16

Eventos:

Na função da rotina CNTA121

Programa Fonte:

CNTA121.prw

Função:

CN121GerDoc()

Retorno:

Nome

Tipo

 aRet (aCab,aItem)

Array

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
Nilnulo

Não é necessário nenhum retorno


 

Informações
titleImportante

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


Bloco de código
firstline1
titleExemplo simples
linenumberstrue
#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
Bloco de código
firstline1
titleLiberando um pedido de venda
linenumberstrue

Exemplo:

#Include 'Protheus.ch'

User Function CN121PED()

Local aCab := PARAMIXB[1] 

Local aItem := PARAMIXB[2]

//Validações do usuario

Return {aCab,aItem}
#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.
				endif
			next nX
		EndIf
	EndIf

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