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