Árvore de páginas

Versões comparadas

Chave

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

GFEXFB19 – Cálculo

rateio

de

pedágio

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:

Alterar o valor do componente de frete no cálculo de frete. 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 a cidade de destino do cálculo estiver marcado como "Suframa", no cadastro de Cidades do SIGAGFE. Além disso o componente que se deseja alterar no ponto de entrada deve estar marcado como Suframa igual a 1-Não se aplica ou igual a 2-Tarifa Tab. Frete, no cadastro de Componentes do SIGAGFEo campo Desconto de pedágio (GV9_DESPED) existir na base de dados.

Localização:

Ao final do cálculo do valor de cada componentevale pedágio.

Programa Fonte:

GFEXFUNB - Cálculo de Frete

Parâmetro:

NomeTipoDescriçãoObrigatório
PARAMIXB[1]NuméricoArrayArray que resume os parâmetros dos componentesValor resultante do cálculo do Componente de FreteSim
PARAMIXB[2]CaractereLogicalIndica se é uma simulaçãoCódigo do Componente de FreteSim

Retorno:

Nome

Tipo

Descrição

Obrigatório

nValorlError

Numérico

Logical

Indica se ocorreu erro Novo valor do componente de frete. Caso não haja alteração no valor, deve-se retornar o valor recebido como parâmetro (PARAMIXB[1]).

Sim

 

Bloco de código
languagedelphi
titleExemplo: GFEXFB17GFEXFB19
linenumberstrue
User Function GFEXFB18GFEXFB19()
	Local nValoraParamComp := ParamIxbPARAMIXB[1]
	Local cComp	lSimulacao := ParamIxb[2]

	IF nValor < 1000 .AND. cComp = "FRETE PESO          "
		nValor += 150
	EndIf

Return nValor 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