Árvore de páginas

01. DADOS GERAIS

Linha de Produto:Microsiga Protheus®
Segmento:Serviços
Módulo:Fiscal

02. DESCRIÇÃO

Este ponto de entrada tem a finalidade de fornecer flexibilidade de regra do preenchimento, na Portaria CAT 44 de São Paulo (Registro dos Estoques), dos valores para os campos:

  • Valores de alíquota;
  • Preço;
  • Margem de valor agregado;
  • Preço final

Por meio desse ponto de entrada, poderão ser identificados os valores por regra da exceção fiscal, ultimas notas, média dos itens em estoque, etc, de acordo com a necessidade de cada empresa.

03. ESPECIFICAÇÃO

Parâmetros do ponto de entrada:

PRCAT44( < cCodProd> , < nAliqICMS> , < nUltPrec> , < nMVA> , < nPrcFin> )

Nome

Tipo

Descrição

PARAMIXB    Array of Record

[1] = Código do Produto

[2] = Alíquota ICMS (com base na tabela SB1)

[3] = Último preço de venda (com base na tabela SB1)

[4] = Margem Valor Agregado na Entrada (com base na tabela SB1)

[5] = Preço final (com base na tabela SB1)

Retorno:

Nome

Tipo

Descrição


Array of Record

Retorna um array com 4 posições, sendo:

[1] = Alíquota ICMS,

[2] = Último preço de venda,

[3] = Margem Valor Agregado na Entrada,

[4] = Preço final

O ponto de entrada deverá retornar obrigatoriamente os 4 valores indicados, sendo que os valores padrão são passados como parâmetro. Caso não exista nenhuma regra específica para algum dos valores, o conteúdo padrão pode ser utilizado como retorno.

Caso não seja utilizado o ponto de entrada, o preenchimento dos campos continuará com a mesma regra, buscando as informações da tabela cadastro de produtos (SB1) campos:

- Aliq. ICMS (B1_PICM)
- Ult. Preço (B1_UPRC)
- Solid. Entr. (B1_PICMENT)
- Preço de Venda (B1_PRV1)

04. EXEMPLO DE UTILIZAÇÃO


PRCAT44
User Function PRCCAT44() 
	Local nCodigo 	:= PARAMIXB[1]
	Local MV_IVAST 	:= GetNewPar("MV_IVAST",0)                      
	Local nIVAP		:= 0
	Local nAliqP 	:= 0
	Local nPrecFiP	:= 0
	Local nPrecP 	:= 0
	Local cAliasSD1	:= "SD1"
	Local aStruSD1 	:= 	{}
	Local cQuery   	:=	""
	Local nY		:= 0
	Local nX		:= 1
	Local dDtIni := LastDay(mv_par02)+1 
	Local dDti := mv_par01
	Local dDtf := mv_par02

	dbSelectArea("SFK") 

	If SFK->(MsSeek(xFilial('SFK')+nCodigo+Dtos(dDtIni)))	
		nAliqP 	:= Iif(!empty(SFK->FK_AICMS),SFK->FK_AICMS,0)
	EndIf

	dbSelectArea("SD1")

	For nX := 1 To 36	
		cAliasSD1 := "AliasSD1"	
		aStruSD1  := SD1->(dbStruct())
		
		cQuery    := "SELECT D1_DOC,D1_FILIAL,D1_LOJA,D1_VUNIT "	
		cQuery    += "FROM " + RetSqlName("SD1") + " "	
		cQuery    += "WHERE D1_FILIAL = '" + xFilial("SD1") + "' AND "	
		cQuery    += "D1_COD = '" + nCodigo + "' AND "	
		cQuery    += "D1_DTDIGIT > '" + Dtos(dDti) + "' AND "	
		cQuery    += "D1_DTDIGIT <= '" + Dtos(dDtf) + "' AND "	 	
		cQuery    += "D1_TIPO = 'N' AND "				
		cQuery    += "D_E_L_E_T_= ' ' "	
		cQuery    += "ORDER BY D1_DTDIGIT DESC"	
		cQuery    := ChangeQuery(cQuery)	

		dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cAliasSD1,.T.,.T.)	

		For nY := 1 To Len(aStruSD1)
			If ( aStruSD1[nY][2] <> "C" )			
				TcSetField(cAliasSD1,aStruSD1[nY][1],aStruSD1[nY][2],aStruSD1[nY][3],aStruSD1[nY][4])		
			EndIf	
		Next nY		

		If (cAliasSD1)->(EOF())
			dbSelectArea(cAliasSD1)		
			dbCloseArea()
			dDti :=  Ctod("01/"+ StrZero(Iif(Month(dDti)==1,12,Month(dDti) -1 ),2)+ "/" +StrZero(Iif(Month(dDti)==1 ,year(dDti)-1,year(dDti)),4), "ddmmyy")	 	
			dDtf := LastDay(dDti)  	
		Else				
			nPrecP := (cAliasSD1)->D1_VUNIT		
			Exit	
		EndIf
	Next nX		

	nIVAP    := MV_IVAST  // Margem de Valor Agregadon
	PrecFiP := 0		// Preco Final
	dbCloseArea()		

Return ({nAliqP,nPrecP,nIVAP,nPrecFiP})

05. DEMAIS INFORMAÇÕES

Não se aplica.