Como realizar descontos de valores nas notas de entrada
Processo
Para configurar o sistema visando permitir o desconto de valores na nota fiscal de entrada, deve-se seguir os passos:
- Neste exemplo, será configurado o sistema para cálculo dos fundos FETHAB e IMAFIR do MT, porém o processo pode ser realizado para atender outros cenários;
- Primeiro, é necessário criar os campos necessários para cadastro dos percentuais na tabela E075PRO (Cadastro de Produtos), por meio da ferramenta CBDS.exe (aplicativo utilizado como dicionário de dados. Ele apresenta vários recursos, como gerar base, backup, usuário no banco, consistência de base e outros recursos referentes ao banco de dados).
Por exemplo: criados os campos % FETHAB e % IMAFIR; - Em seguida, deve-se inserir os novos campos na tela Cadastro de Produtos (F075PRO);
- Na tela Cadastro de Moedas (F031AIM), deve-se cadastrar uma moeda do tipo UPF (Unidade Padrão Fiscal), do estado do Mato Grosso;
- Por fim, na tela Cadastro de Identificador de Regras (F098REG), deve-se utilizar o identificador CPR-440ALDSC01 e a seguinte regra:
definir numero CprNCodEmp; /* Código da empresa */
definir numero CprNCodFil; /* Código da filial */
definir numero CprNCodFor; /* Código do fornecedor */
definir alfa CprACodPro; /* Código do produto */
definir data CprDDatEmi; /* Data de demissão na nota fiscal */
definir numero CprNQtdRec; /* Quantidade recebida na nota fiscal */
definir alfa CprAUniNfc; /* Unidade de medida na nota fiscal */
definir alfa xComandoSql;
definir alfa xCodigoMoeda;
definir numero xVlrUpf;
definir numero xPerFethab;
definir numero xPerImafir;
definir alfa Cursor_E031Imo;
definir alfa Cursor_E075Pro;
definir alfa Cursor_E095For;
definir alfa Cursor_E070Fil;
inicio
/* !!!ATENÇÃO!!! Definir aqui o código da moeda cadastrado na tela F031AIM */
xCodigoMoeda = "UPF";
/* Filtrando filiais do estado do MT */
SQL_Criar(Cursor_E070Fil);
SQL_DefinirComando(Cursor_E070Fil, "select 1 from E070FIL where codemp = :codemp and codfil = :codfil and sigufs = 'MT' ");
SQL_DefinirInteiro(Cursor_E070Fil,"CODEMP",CprNCodEmp);
SQL_DefinirInteiro(Cursor_E070Fil,"CODFIL",CprNCodFil);
SQL_AbrirCursor(Cursor_E070Fil);
Se(SQL_Eof(Cursor_E070Fil) = 0)
inicio
/* Filtrando apenas fornecedores do estado do MT */
SQL_Criar(Cursor_E095For);
SQL_DefinirComando(Cursor_E095For, "select 1 from E095FOR where codfor = :codfor and sigufs = 'MT' ");
SQL_DefinirInteiro(Cursor_E095For,"CODFOR",CprNCodFor);
SQL_AbrirCursor(Cursor_E095For);
Se(SQL_Eof(Cursor_E095For) = 0)
inicio
SQL_Criar(Cursor_E075Pro);
SQL_DefinirComando(Cursor_E075Pro, "select USU_PERFET, USU_PERIMA from E075PRO where codemp = :codemp and codpro = :codpro and (USU_PERFET > 0 or USU_PERIMA > 0) ");
SQL_DefinirInteiro(Cursor_E075Pro,"CODEMP",CprNCodEmp);
SQL_DefinirAlfa(Cursor_E075Pro,"CODPRO",CprACodPro);
SQL_AbrirCursor(Cursor_E075Pro);
Se(SQL_Eof(Cursor_E075Pro) = 0)
Inicio
SQL_RetornarFlutuante(Cursor_E075Pro,"USU_PERFET", xPerFethab);
SQL_RetornarFlutuante(Cursor_E075Pro,"USU_PERIMA", xPerImafir);
xComandoSql = "select datmoe, vlrcot \
from E031IMO \
where codmoe = '"+xCodigoMoeda+"' \
and datmoe <= :datmoe \
order by datmoe desc ";
SQL_Criar(Cursor_E031Imo);
SQL_DefinirComando(Cursor_E031Imo, xComandoSql);
SQL_DefinirData(Cursor_E031Imo,"DATMOE",CprDDatEmi);
SQL_AbrirCursor(Cursor_E031Imo);
Se(SQL_Eof(Cursor_E031Imo) = 0)
Inicio
SQL_RetornarFlutuante(Cursor_E031Imo,"VLRCOT", xVlrUpf);
se (xPerFethab > 0)
inicio
CprNVlrDs4 = ((xPerFethab * xVlrUpf) / 100) * CprNQtdRec;
se (CprAUniNfc = "KG")
CprNVlrDs4 = CprNVlrDs4 / 1000;
fim;
se (xPerImafir > 0)
inicio
CprNVlrDs5 = ((xPerImafir * xVlrUpf) / 100) * CprNQtdRec;
se (CprAUniNfc = "KG")
CprNVlrDs5 = CprNVlrDs5 / 1000;
fim;
fim;
SQL_FecharCursor(Cursor_E031Imo);
SQL_Destruir(Cursor_E031Imo);
Fim;
SQL_FecharCursor(Cursor_E075Pro);
SQL_Destruir(Cursor_E075Pro);
fim;
SQL_FecharCursor(Cursor_E095For);
SQL_Destruir(Cursor_E095For);
fim;
SQL_FecharCursor(Cursor_E070Fil);
SQL_Destruir(Cursor_E070Fil);
fim;
Importante
A partir da versão 5.10.2.86 de 24/03/2023, não existe mais a necessidade da utilização da regra e dos campos de usuário, pois o sistema irá tratar os percentuais via tela Impostos por produto (F075IMP).
Para maiores informações, consulte a documentação completa dos Impostos Específicos para o Estado do Mato Grosso.