GFEXFB19 – Cálculo de Vale Pedágio

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Supply Chain - Logística

Módulo:

SIGAGFE

Ponto de Entrada - GFEXFB19 

Descrição:

Permite realizar o cálculo do vale pedágio para a simulação do frete.

Restrições para uso do ponto:

Esse ponto de entrada apenas poderá ser usado se o campo Desconto de pedágio (GV9_DESPED) existir na base de dados.

Localização:

Ao final do cálculo do vale pedágio.

Programa Fonte:

GFEXFUNB - Cálculo de Frete

Parâmetro:

NomeTipoDescriçãoObrigatório
PARAMIXB[1]ArrayArray que resume os parâmetros dos componentesSim
PARAMIXB[2]LogicalIndica se é uma simulaçãoSim

Retorno:

Nome

Tipo

Descrição

Obrigatório

lError

Logical

Indica se ocorreu erro 

Sim

 

User Function GFEXFB19()
	Local aParamComp := PARAMIXB[1]
	Local lSimulacao := PARAMIXB[2]
	Local cCidDe
	Local cCidAte
	Local cCatPed := ""
	Local nNrEixos
	Local cCatPed
	Local nCalPorEixo
	Local nX
	Local aRetPrPed := {}
	Local nVlrPed := 0
	Local lError := .F.
	
	if lSimulacao 	

		GFEXFB_1AREA(lTabTemp,cTRBAGRU, @aAgrFrt)
		GFEXFB_BORDER(lTabTemp,cTRBAGRU, 1,0)
		GFEXFB_2TOP(lTabTemp, cTRBAGRU, @aAgrFrt, 0)
		While !GFEXFB_3EOF(lTabTemp, cTRBAGRU, @aAgrFrt, 0)	
			
         	nNrEixos := POSICIONE("GV3",1,xFilial("GV3") + GFEXFB_5CMP(lTabTemp, cTRBAGRU, @aAgrFrt, 0,"CDTPVC"),"GV3_EIXOS")
         	cCatPed := POSICIONE("GV3",1,xFilial("GV3") + GFEXFB_5CMP(lTabTemp, cTRBAGRU, @aAgrFrt, 0,"CDTPVC"),"GV3_CATPED")			
					
			GFEXFB_1AREA(lTabTemp,cTRBUNC, @aTRBUNC2)
			GFEXFB_BORDER(lTabTemp,cTRBUNC,02,6)
			GFEXFB_CSEEK(lTabTemp, cTRBUNC, @aTRBUNC2, 6,{GFEXFB_5CMP(lTabTemp, cTRBAGRU, @aAgrFrt, 0,"NRAGRU")}) 
			While  !GFEXFB_3EOF(lTabTemp, cTRBUNC, @aTRBUNC2, 6) .AND. ;
					GFEXFB_5CMP(lTabTemp, cTRBUNC, @aTRBUNC2, 6,"NRAGRU") == GFEXFB_5CMP(lTabTemp, cTRBAGRU, @aAgrFrt, 0,"NRAGRU")				
					
				// Verifica as tabelas do calculo de frete
				GFEXFB_1AREA(lTabTemp,cTRBTCF, @aTRBTCF1)
				GFEXFB_BORDER(lTabTemp,cTRBTCF,01,5)
				GFEXFB_CSEEK(lTabTemp, cTRBTCF, @aTRBTCF1, 5,{GFEXFB_5CMP(lTabTemp, cTRBUNC, @aTRBUNC2, 6,"NRCALC")})
	
				While !GFEXFB_3EOF(lTabTemp, cTRBTCF, @aTRBTCF1, 5) .AND. GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"NRCALC") == GFEXFB_5CMP(lTabTemp, cTRBUNC, @aTRBUNC2, 6,"NRCALC")


					GFEXFB_1AREA(.F.,, @aTRBGRB1)
					GFEXFB_BORDER(.F.,,03,4) 
					If GFEXFB_CSEEK(.F.,, @aTRBGRB1, 4,{GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"NRGRUP")}) 
				
						GFEXFB_1AREA(lTabTemp,cTRBTRE, @aTRBTRE2)
						GFEXFB_BORDER(lTabTemp,cTRBTRE,02,7) 
						if GFEXFB_CSEEK(lTabTemp, cTRBTRE, @aTRBTRE2, 7,{GFEXFB_5CMP(.F.     ,        , @aTRBGRB1, 4,"CDTPDC"	), ;
																		 GFEXFB_5CMP(.F.     ,        , @aTRBGRB1, 4,"EMISDC"	), ;
																		 GFEXFB_5CMP(.F.     ,        , @aTRBGRB1, 4,"SERDC"	), ;
																		 GFEXFB_5CMP(.F.     ,        , @aTRBGRB1, 4,"NRDC"	), ;
																		 GFEXFB_5CMP(lTabTemp, cTRBUNC, @aTRBUNC2, 6,"SEQTRE")})
																		 

								cCidDe := GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE2, 7,"ORIGEM")
								cCidAte := GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE2, 7,"DESTIN")
																		
								aRetPrPed := GFEXFB19BPP(cCidDe,cCidAte,cCatPed)

								For nX := 1 To Len(aRetPrPed)
								
									// Quando tarifa com categoria por Eixo, calcula Valor do Pedágio x Nr Eixos 
									If !Empty(aRetPrPed[Nx][4])
										
										nCalPorEixo := aRetPrPed[Nx][2] * nNrEixos  
										nVlrPed += nCalPorEixo

									Else 
										nVlrPed += aRetPrPed[nX][2]
									EndIf
								Next nX																
						EndIf
					EndIf
					GFEXFB_1AREA(lTabTemp,cTRBTCF, @aTRBTCF1) 
					GFEXFB_8SKIP(lTabTemp, cTRBTCF, 6) 
				EndDo								
					
				GFEXFB_1AREA(lTabTemp,cTRBUNC, @aTRBUNC2) 
				GFEXFB_8SKIP(lTabTemp, cTRBUNC, 6) 
			EndDo								
			GFEXFB_1AREA(lTabTemp,cTRBAGRU, @aAgrFrt) 
			GFEXFB_8SKIP(lTabTemp, cTRBAGRU, 6) 
		EndDo	

	    lError := CalcRatPed(@aParamComp, nVlrPed, "0")		
	    
	Endif		


Return lError