Hoje vou mostrar como calcular os impostos, usando como base as tabelas de Orçamento de Venda (SCJ e SCK).
Eu fiz um artigo no passado, mostrando como calcular impostos em um pedido de venda – https://terminaldeinformacao.com/2017/01/17/funcao-retorna-total-pedido-de-vendas-com-impostos-em-advpl/
Acontece, que um dos meus alunos me perguntou como fazer o cálculo, mas usando as tabelas de Orçamentos. Basicamente jovens, o processo é o mesmo, só é invertido a tabela SC5 pela SCJ e a SC6 pela SCK, e os campos que não existem, você pode informar um valor default.
Então por exemplo, supondo que eu queira saber a alíquota de IPI ou de ICMS de um item, eu teria que usar o MaFisIni passando o tipo do cliente, depois o MaFisAdd, adicionando o item (ou os itens) da SCK, e depois de tudo, conseguir usar o MaFisRet para buscar o valor, e encerrar com o MaFisEnd. Abaixo o código de exemplo:
//Posiciona no cliente atual
DbSelectArea("SA1")
SA1->(DbSeek(FWxFilial("SA1") + SCJ->CJ_CLIENTE + SCJ->CJ_LOJA))
//Define o valor das variáveis que serão usadas
cTipoCli := SA1->A1_TIPO
nQuant := SCK->CK_QTDVEN
nVlUnit := SCK->CK_PRCVEN
nVlrTotal := SCK->CK_VALOR
//Inicializa a função fiscal para poder simular os valores dos impostos
MaFisIni(SA1->A1_COD, SA1->A1_LOJA, "C", "S", cTipoCli, , , .F., "SB1")
//Posiciona no produto atual
DbSelectArea("SB1")
SB1->(DbSeek(FWxFilial("SB1") + SCK->CK_PRODUTO))
//Adicionando o produto para o cálculo dos impostos
MaFisAdd(SB1->B1_COD, SCK->CK_TES, nQuant, nVlUnit, 0, "", "", , 0, 0, 0, 0, nVlrTotal, 0, SB1->(RecNo()))
//Retorna a alíquota de IPI e de ICMS do item 1
nAliqIPI := MaFisRet(1, 'IT_ALIQIPI')
nAliqICM := MaFisRet(1, 'IT_ALIQICM')
//Se tiver alíquota de IPI
If(nAlqIPI > 0)
cMensIPI := "IPI Não Incluso"
EndIf
//Encerra a função fiscal
MaFisEnd()
Bom pessoal, por hoje é só.
Abraços e até a próxima.