Calculo de Impostos Orçamento de Vendas

Fala pessoal, boa tarde tudo bom?

Estou desenvolvendo um fonte onde irá calcular o valor total do orçamento com impostos para os orçamentos de vendas.

Porém o calculo está divergente do valor total da nota (planilha financeira).

Estou espelhando com um fonte que possuo da MATA410 e nela funciona normalmente.

Abaixo segue o meu fonte:

User Function TotOrc(cNumOrc, nTipo)
    Local aArea     := GetArea()
    Local aAreaCJ   := SCJ->(GetArea())
    Local aAreaB1   := SCK->(GetArea())
    Local aAreaC6   := SB1->(GetArea())
    Local cQryIte   := ""
    Local nValOrc   := 0
    Local nNritem   := 0
    //Local nAtu
    Default cNumOrc := SCJ->CJ_NUM
    Default nTipo   := 1

    //Se for no Browse, já traz o valor total
    If nTipo == 1
        cQryIte := " SELECT "
        cQryIte += "    CK_ITEM, "
        cQryIte += "    CK_PRODUTO "
        cQryIte += " FROM "
        cQryIte += "    "+RetSQLName('SCK')+" SCK "
        cQryIte += "    LEFT JOIN "+RetSQLName('SB1')+" SB1 ON ( "
        cQryIte += "        B1_FILIAL = '"+FWxFilial('SB1')+"' "
        cQryIte += "        AND B1_COD = SCK.CK_PRODUTO "
        cQryIte += "        AND SB1.D_E_L_E_T_ = ' ' "
        cQryIte += "    ) "
        cQryIte += " WHERE "
        cQryIte += "    CK_FILIAL = '"+FWxFilial('SCK')+"' "
        cQryIte += "    AND CK_NUM = '"+cNumOrc+"' "
        cQryIte += "    AND SCK.D_E_L_E_T_ = ' ' "
        cQryIte += " ORDER BY "
        cQryIte += "    CK_ITEM "
        cQryIte := ChangeQuery(cQryIte)
        TCQuery cQryIte New Alias "QRY_ITE"

        cTipoCli  := SA1->A1_TIPO
        nQuant    := SCK->CK_QTDVEN
        nVlUnit   := SCK->CK_PRCVEN
        nVlrTotal := SCK->CK_VALOR


        DbSelectArea("SA1")
        SA1->(DbSeek(FWxFilial("SA1") + SCJ->CJ_CLIENTE + SCJ->CJ_LOJA))
        MaFisEnd() 
        MaFisIni(SA1->A1_COD,SA1->A1_LOJA,"C","N",cTipoCli,,,,"SB1",)                          

        //Pega o total de itens
        QRY_ITE->(DbGoTop())
        While ! QRY_ITE->(EoF())
            nNritem++
            QRY_ITE->(DbSkip())
        EndDo

        //Preenchendo o valor total
        QRY_ITE->(DbGoTop())
        nTotIPI := 0
        While ! QRY_ITE->(EoF())
            DbSelectArea("SB1")
            SB1->(DbSeek(FWxFilial("SB1")+QRY_ITE->CK_PRODUTO))
            SCK->(DbSeek(FWxFilial("SCK")+cNumOrc+QRY_ITE->CK_ITEM))    
            MaFisAdd(  SCK->CK_PRODUTO,;                                           // 1-Codigo do Produto                 ( Obrigatorio )
                    SCK->CK_TES,;                                                   // 2-Codigo do TES                     ( Opcional )
                    SCK->CK_QTDVEN,;                                            // 3-Quantidade                     ( Obrigatorio )
                    SCK->CK_PRCVEN,;                                            // 4-Preco Unitario                 ( Obrigatorio )
                    SCK->CK_ZZVLRDS,;                                           // 5 desconto
                    0,;                                                         // 6-Numero da NF Original             ( Devolucao/Benef )
                    0,;                                                         // 7-Serie da NF Original             ( Devolucao/Benef )
                    0,;                                                         // 8-RecNo da NF Original no arq SD1/SD2
                    0,;                                                         // 9-Valor do Frete do Item         ( Opcional )
                    0,;                                         
                    0,;                     
                    0,;                     
                    SCK->CK_VALOR,;                                              // 13-Valor da Mercadoria             ( Obrigatorio )
                    0,;                                                          // 14-Valor da Embalagem             ( Opcional )
                    SB1->(RecNo()),;                                             // 15-RecNo do SB1
                    0)                                                           // 16-RecNo do SF4        
            QRY_ITE->(DbSkip())
        EndDo

        //Pegando totais
        nTotICM   := MaFisRet(1,'IT_VALICM')
        nTotIPI   := MaFisRet(1,'IT_VALIPI')
        nTotNF    := MaFisRet(1,'IT_TOTAL')
        nTotFrete := MaFisRet(1,'IT_FRETE')
        nTotISS   := MaFisRet(1,'IT_VALISS')
        nTotPis   := MaFisRet(1,'IT_VALPS2')
        nTotCof   := MaFisRet(1,'IT_VALCF2')

        QRY_ITE->(DbCloseArea())
        MaFisEnd()
    EndIf

    nValOrc := nTotNF + nTotIPI + nTotFrete + nTotISS

    RestArea(aAreaC6)
    RestArea(aAreaB1)
    RestArea(aAreaCJ)
    RestArea(aArea)
Return nValOrc
compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl sigafat orcamento impostos ou faça a sua própria pergunta.