Árvore de páginas

Versões comparadas

Chave

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

...

Ponto de Entrada:GFEXFB16

Descrição:

Altera o valor do pedágio no cálculo do frete

Localização:

Na função de cálculo do frete. função CalcRatPed - Calcula o rateio do desconto de pedágio

Programa Fonte:

GFEXFUNB - Serviço de Integração do Frete Embarcador (SIGAGFE)

Parâmetros:

Não se aplica.

Retorno:

Numérico

Nome

Tipo

Descrição

Obrigatório

nVlrPed

Numérico

aVlRoteiro

Array

Possui as seguintes informações: Numero Cálculo, Sequencia do Trecho, Valor para rateio, Valor total do Cálculo, Quantidade de cálculos por Unidade de cálculo, Realiza Rateio.

Sim

aRatPedArrayPossui as seguintes informações: Numero Cálculo, Classificação de frete, Tipo de Operação, Sequencia, Componente, Categoria Valor, Quantidade, Valor.Sim
lRetLógicoIndica se realiza o rateio padrão do pedágioSim
Bloco de código
languagedelphi
titleExemplo: GFEA1108GFEXFB16
linenumberstrue
#INCLUDE#Include "PROTHEUS.CH"'Protheus.ch'

User Function GFEXFB16()
		
	Local aVlrPedaVlRoteiro := {}
	Local nI cSeq := ""
	Local aVlRoteiroaRatPed := {}
	Local lRet := .T.
	Local nRoteiro
	Local cSeq nValorTotal := 0
	Local nValor := 0
	Local nPedagio := 0
	Local nX := 0
	Local aParamComp := ""{}
		
	
	If IsInCallStack("GFEWSSIMULATION")
	
		Ifif ValType(cVlPedagioaPedEsp) = "CA"

			for nPedagio = 1 to len(aPedEsp)

			nSeqTrecho := nSeqTrecho + 1
		
			if cVlPedagio != "" 
				
				aVlrPed := StrTokArr(cVlPedagio, "\")
				For nI	if aPedEsp[nPedagio][2] != "" .and. VAL(aPedEsp[nPedagio][2]) != 0

					aAdd(aVlRoteiro,{aPedEsp[nPedagio][1],'01',VAL(aPedEsp[nPedagio][2]),0,0,.T.})

				endif
			next nPedagio

			// Lógica para gravação do rateio do pedágio foi transferido do programa padrão para o específico		
			GFEXFB_1AREA(lTabTemp,cTRBTCF, @aTRBTCF1)
			GFEXFB_BORDER(lTabTemp,cTRBTCF,01,5)
			GFEXFB_2TOP(lTabTemp, cTRBTCF, @aTRBTCF1, 5)

			GFEXFB_1AREA(lTabTemp,cTRBCCF, @aTRBCCF1)
			GFEXFB_BORDER(lTabTemp,cTRBCCF,01,9)
			While !GFEXFB_3EOF(lTabTemp, cTRBTCF, @aTRBTCF1, 5)

				cNrCalc := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"NRCALC")
				cCdTrp  := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"CDTRP")
				cNrTab  := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"NRTAB")
				cNrNeg  := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"NRNEG")
				cCdClFr := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"CDCLFR")
				cCdTpOp := GFEXFB_5CMP(lTabTemp, cTRBTCF, @aTRBTCF1, 5,"CDTPOP")

				GFEXFB_1AREA(lTabTemp,cTRBTRE, @aTRBTRE2)
				GFEXFB_BORDER(lTabTemp,cTRBTRE,01,7)
				If GFEXFB_CSEEK(lTabTemp, cTRBTRE, @aTRBTRE2, 7,{cNrCalc})

					lRet := .F.

					cNrDc := GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE2, 7,"NRDC")
					cSeq := GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE2, 7,"SEQ")

					For nRoteiro := 1 to Len(aVlRoteiro)

						if alltrim(aVlRoteiro[nRoteiro][1]) == alltrim(cNrDc) .and. alltrim(aVlRoteiro[nRoteiro][2]) == alltrim( aVlrPed )
cSeq)

							GV9 -> ( dbSetOrder(01))
							If GV9->( dbSeek(xFilial("GV9")+cCdTrp+cNrTab+cNrNeg)	)
							
								If !Empty(aVlrPed[nI])					
(GV9->GV9_DESPED) // Somente tabelas que tem configurado o componente de desconto de pedágio pode participar do cálculo 

									nValor  := GFETotFret(cNrCalc)
									cCdComp := GV9->GV9_DESPED

									GFEXFB_1AREA(lTabTemp,cTRBCCF, @aTRBCCF1) //dbSelectArea(cTRBCCF)
									GFEXFB_BORDER(lTabTemp,cTRBCCF,01,9) //dbSetOrder(01)
									If GFEXFB_CSEEK(lTabTemp, cTRBCCF, @aTRBCCF1, 9,{cNrCalc,cCdClFr, cCdTpOp,cCdComp}) //dbSeek()
										cCatVal := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"CATVAL")
									if nSeqTrecho == nI					
	nQtde   := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"QTDE")
										cTotFre := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"TOTFRE")
										cBasImp := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"BASIMP")
										cBapIco := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"BAPICO")
										cFreMin := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"FREMIN")
									if val(aVlrPed[nI]) != 0
	cIdMin  := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"IDMIN")
										nVlrMi  := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"VLFRMI")
									Else
									cSeq	cCatVal := "0" + ltrim(str(nI))Posicione("GV2", 1, xFilial("GV2") + cCdComp, "GV2_CATVAL")
										nQtde   := 0
										GUY -> ( dbSetOrder(01))
										If GUY->( dbSeek(xFilial("GUY") + cCdTrp + cNrTab + cNrNeg + cCdComp ))
											cTotFre := GUY->GUY_TOTFRE
											cBasImp := GUY->GUY_BASIMP
											cBapIco := GUY->GUY_BAPICO
											cFreMin := GUY->GUY_FREMIN
										EndIf
										cIdMin  := "2"
										nVlrMi  := 0
									EndIf
									lCompInfor := .T.

								aAdd(aVlRoteiro,{'',cSeq,VAL(aVlrPed[nI]),0,0,.F.})
							Endif	
						Endif				
					EndIf
					
				next nI						
					
			Endif
		Endif
	Endif
	
Return 	If aScan(aRatPed,{|x| x[1] == cNrCalc}) == 0
										nValorTotal := nValorTotal + nValor 
									EndIf

									nVlrPed := aVlRoteiro[nRoteiro][3] * IIF(GV9->GV9_ACVPED == '2', 1, -1)

									aVlRoteiro[nRoteiro][1] := cNrCalc
									aVlRoteiro[nRoteiro][4] += nValor
									aVlRoteiro[nRoteiro][5] += 1
									aVlRoteiro[nRoteiro][6] := .T.
									//aAdd(aRatPed, {cNrCalc,cCdClFr, cCdTpOp, cCdComp, cCatVal, nQtde, nValor, cTotFre, cBasImp, cBapIco, cFreMin, cIdMin, nVlrMi, aVlRoteiro[nRoteiro][2], GV9->GV9_ACVPED})
									aAdd(aRatPed, {cNrCalc,cCdClFr, cCdTpOp, cCdComp, cCatVal, nQtde, nVlrPed, cTotFre, cBasImp, cBapIco, cFreMin, cIdMin, nVlrMi, aVlRoteiro[nRoteiro][2], GV9->GV9_ACVPED})
								EndIf

							Endif
						Endif

					next
				Endif

				GFEXFB_1AREA(lTabTemp,cTRBTCF, @aTRBTCF1)
				GFEXFB_8SKIP(lTabTemp, cTRBTCF, 5)
			EndDo		
				
		Endif
		
		For nX := 1 to Len(aRatPed)
	
			GFEXFB_1AREA(lTabTemp,cTRBCCF, @aTRBCCF1)
			GFEXFB_BORDER(lTabTemp,cTRBCCF,01,9)
	
			If GFEXFB_CSEEK(lTabTemp, cTRBCCF, @aTRBCCF1, 9,{aRatPed[nX][1], ;
							aRatPed[nX][2], ;
							aRatPed[nX][3], ;
							aRatPed[nX][4]})

				GFEXFB_DRECLOCK(lTabTemp,cTRBCCF,.F.)
				GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"VALOR", aRatPed[nX][7])
				GFEXFB_EMSUNLOCK(lTabTemp,cTRBCCF)
			Else
	
				If lTabTemp
					RecLock(cTRBCCF,.T.)
					(cTRBCCF)->NRCALC := aRatPed[nX][1]
					(cTRBCCF)->CDCLFR := aRatPed[nX][2]
					(cTRBCCF)->CDTPOP := aRatPed[nX][3]
					(cTRBCCF)->CDCOMP := aRatPed[nX][4]
					(cTRBCCF)->CATVAL := aRatPed[nX][5]
					(cTRBCCF)->VALOR  := aRatPed[nX][7]
					(cTRBCCF)->QTDE   := aRatPed[nX][6]
					(cTRBCCF)->TOTFRE := aRatPed[nX][8]
					(cTRBCCF)->BASIMP := aRatPed[nX][9]
					(cTRBCCF)->BAPICO := aRatPed[nX][10]
					(cTRBCCF)->FREMIN := aRatPed[nX][11]
					(cTRBCCF)->IDMIN  := "2"
					MsUnLock(cTRBCCF)
				Else
					aAdd(aTRBCCF1,{	aRatPed[nX][1],; //NRCALC
					aRatPed[nX][2],; //CDCLFR
					aRatPed[nX][3],; // CDTPOP
					Space(04),; //SEQ
					aRatPed[nX][4],; //CDCOMP 
					aRatPed[nX][5],; //CATVAL
					aRatPed[nX][6],; //QTDE
					aRatPed[nX][7],; //VALOR
					aRatPed[nX][8],; //TOTFRE
					aRatPed[nX][9],; //BASIMP
					aRatPed[nX][10],; //BAPICO
					aRatPed[nX][11],; //FREMIN
					"2",; //IDMIN
					0,; //VLFRMI
					"0",; //DELETADO
					Space(6),; //NRLCENT
					Space(1)}) //CPEMIT
				EndIf
				GFEParamComp({	aRatPed[nX,4], ;
				aRatPed[nX,8], ;
				aRatPed[nX,9], ;
				aRatPed[nX,10], ;
				aRatPed[nX,11], ;
				aRatPed[nX,1]},@aParamComp) 
			EndIf
		Next nX
	
		If !lTabTemp
			aTRBCCF2 := aClone(aTRBCCF1)
			aTRBCCF3 := aClone(aTRBCCF1)
			aSort(aTRBCCF1  ,,,{|x,y| x[01]+x[02]+x[03]+x[05]      < y[01]+y[02]+y[03]+y[05]})
			aSort(aTRBCCF2  ,,,{|x,y| x[01]+x[05]                  < y[01]+y[05]})
			aSort(aTRBCCF3  ,,,{|x,y| x[01]+x[02]+x[03]+x[04]      < y[01]+y[02]+y[03]+y[04]})
		EndIf		

	Endif

Return {aVlRoteiro, aRatPed, lRet}