Linha de Produto: | Microsiga Protheus |
Segmento: | Supply Chain - Logística |
Módulo: | SIGAGFE |
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: |
| ||||||||||||||||||||||||
Retorno: |
|
#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} |