Árvore de páginas

GFEXFB16 - PERMITIR ALTERAR O VALOR DO PEDÁGIO NO CÁLCULO DO FRETE

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Supply Chain - Logística

Módulo:

SIGAGFE

  

Ponto de Entrada:GFEXFB16

Descrição:

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

Localização:

Na 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:

Nome

Tipo

Descrição

Obrigatório

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
Exemplo: GFEXFB16
#Include 'Protheus.ch'

User Function GFEXFB16()
		
	Local aVlRoteiro := {}
	Local cSeq := ""
	Local aRatPed := {}
	Local lRet := .T.
	Local nRoteiro
	Local nValorTotal := 0
	Local nValor := 0
	Local nPedagio := 0
	Local nX := 0
	Local aParamComp := {}
		
	
	If IsInCallStack("GFEWSSIMULATION")
	
		if ValType(aPedEsp) = "A"

			for nPedagio = 1 to len(aPedEsp)

				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(cSeq)

							GV9 -> ( dbSetOrder(01))
							If GV9->( dbSeek(xFilial("GV9")+cCdTrp+cNrTab+cNrNeg)	)
							
								If !Empty(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")
										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")
										cIdMin  := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"IDMIN")
										nVlrMi  := GFEXFB_5CMP(lTabTemp, cTRBCCF, @aTRBCCF1, 9,"VLFRMI")
									Else
										cCatVal := 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.

									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}