Como calcular impostos usando as tabelas de Orçamento (SCJ e SCK)

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação