GFEXFB23 – Permitir alterar o Peso/Qtde Alternativa

Características do Requisito

Linha de Produto:

Microsiga Protheus

Segmento:

Supply Chain - Logística

Módulo:

SIGAGFE

Ponto de Entrada - GFEXFB23

Descrição:

Permitir alterar o Peso/Qtde Alternativa

Localização:

Na função que retorna o valor para cálculo de acordo com o atributo do componente

Programa Fonte:

GFEXFUNB - Cálculo de Frete

Parâmetro:

NomeTipoDescriçãoObrigatório
(cTRBITE)Tabela TemporáriaTabela temporária do itemSim
(cTRBTRE)Tabela TemporáriaTabela temporária do trechoSim
cNrCalculoCaracterNúmero do cálculoSim
cCdClFrCaracterClassificação de freteSim
nFatorCubNuméricoFator de cubagem Sim

Retorno:

NomeTipoDescriçãoObrigatório
aRetPE[1]ArrayValor/Peso AlternativoSim
aRetPE[2]ArrayDescrição retornada do específicoSim



 

#Include 'Protheus.ch'

User Function GFEXFB23()
	Local aItem := PARAMIXB[1]
	Local aTrec := PARAMIXB[2] 
	Local cNrCalc := PARAMIXB[3] 
	Local cCdClFr  := PARAMIXB[4] 
    Local nFatorCub  := PARAMIXB[5] 
	Local lNovoMod := !(SuperGetMv("MV_GFEBRF",.F.,"1") == "2")
    local nPesoAlte := 0
    Local nPesoReal := 0
    Local nPesoCubado  := 0
    Local nPesoAtual := 0
    Local cMsg 

    if !lNovoMod

		dbSelectArea(aTrec)
		dbSetOrder(01)
		dbSeek(cNrCalc,.T.)
		While !(aTrec)->(Eof()) .And. cNrCalc == (aTrec)->NRCALC
		
			dbSelectArea(aItem)
			dbSetOrder(01)
			dbSeek((aTrec)->CDTPDC+(aTrec)->EMISDC+(aTrec)->SERDC+(aTrec)->NRDC,.T.)
		
			//percorre todos os itens para calcular peso cubado
			While !(aItem)->(Eof()) .And. ;
			   	   (aTrec)->CDTPDC == (aItem)->CDTPDC .And. ;
				   (aTrec)->EMISDC == (aItem)->EMISDC .And. ;
				   (aTrec)->SERDC  == (aItem)->SERDC  .And. ;
				   (aTrec)->NRDC   == (aItem)->NRDC	

                IF 	(aItem)->QTDALT == 0 .AND. 	(aItem)->PESOC == 0

                    nPesoCubado := (aItem)->VOLUME * nFatorCub
                    nPesoReal   := (aItem)->PESOR
                    nPesoAlte  += If(nPesoCubado > nPesoReal, nPesoCubado, nPesoReal)                

                ENDIF

				(aItem)->(dbSkip())
			EndDo
						
			(aTrec)->(dbSkip())
		EndDo
	
	Else
	
		GFEXFB_1AREA(lTabTemp,cTRBTRE, @aTRBTRE1)
		GFEXFB_BORDER(lTabTemp,cTRBTRE,01,7)
		GFEXFB_CSEEK(lTabTemp, cTRBTRE, @aTRBTRE1, 7,{cNrCalc}) 
		While !GFEXFB_3EOF(lTabTemp, cTRBTRE, @aTRBTRE1, 7) .And. cNrCalc == GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"NRCALC")
		
			GFEXFB_1AREA(lTabTemp,cTRBITE, @aTRBITE1)
			GFEXFB_BORDER(lTabTemp,cTRBITE,01,8)
			GFEXFB_CSEEK(lTabTemp, cTRBITE, @aTRBITE1, 8,{	GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"CDTPDC"), ;
															GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"EMISDC"), ;
															GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"SERDC") , ;
															GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"NRDC")})
	
			//percorre todos os itens para calcular peso cubado
			While  !GFEXFB_3EOF(lTabTemp, cTRBITE, @aTRBITE1, 8) .And. ;
					GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"CDTPDC") == GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"CDTPDC") .And. ;
					GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"EMISDC") == GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"EMISDC") .And. ;
					GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"SERDC")  == GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"SERDC")  .And. ;
					GFEXFB_5CMP(lTabTemp, cTRBTRE, @aTRBTRE1, 7,"NRDC")   == GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"NRDC")
	
                IF 	GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"QTDALT") == 0 .AND. GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"PESOC") == 0
                    nPesoCubado := (GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"VOLUME") * nFatorCub)
                    nPesoReal := GFEXFB_5CMP(lTabTemp, cTRBITE, @aTRBITE1, 8,"PESOR")
                    nPesoAlte  += If(nPesoCubado > nPesoReal, nPesoCubado, nPesoReal)

                ENDIF                				

				GFEXFB_8SKIP(lTabTemp, cTRBITE, 8) 
			EndDo			
							
			GFEXFB_8SKIP(lTabTemp, cTRBTRE, 7) 
		EndDo
	Endif

    nPesoAtual := nPesoAlte
    cMsg := CRLF + CRLF +  "Ponto de Entrada GFEXFB03 - utiliza maior valor entre peso real e cubado por item: " + cvaltochar(nPesoAtual)  + CRLF + CRLF
    
Return {nPesoAtual, cMsg}