Versão atual:

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

Versão (1):

Ver a versão formatada

Calculo de Impostos Orçamento de Vendas

  • criado 21 de Jul de 2023

Comentário

new question