Fórum ECF - incrementando tabela IBPT #466926
14/01/2014
0
Rodrigo Bernal
Curtir tópico
+ 0Posts
07/02/2014
Leonardo Rehder
Boa tarde, RCBernal. Tudo bem?
Eu fiz desta forma, quem sabe te ajuda. Só que trabalho com postgres.
Baixe os arquivo no site do IBPT, segue o link abaixo.
http://deolhonoimposto.ibpt.org.br/
Cria uma tabela no banco de dados com a seguinte estrutura.
-- Table: tri_ncmsh_fonte_ibpt
-- DROP TABLE tri_ncmsh_fonte_ibpt;
CREATE TABLE tri_ncmsh_fonte_ibpt
(
cncmsh character varying(10) NOT NULL, -- Indica se o código da tabela da nomenclatura comum do mercosul.
codexp integer NOT NULL, -- Indica se o código do exemplo da nomenclatura comum do mercosul.
codtab integer NOT NULL, -- Indica se o código da tabela da nomenclatura comum do mercosul.
dncmsh character varying(1000) NOT NULL, -- Indica se o descrição da nomenclatura comum do mercosul.
alinac numeric(6,2) NOT NULL DEFAULT 0.00, -- Indica se a alíquota de mercadorias nacionais.
aliimp numeric(6,2) NOT NULL DEFAULT 0.00, -- Indica se a alíquota de mercadorias importadas.
CONSTRAINT tri_ncmsh_fonte_ibpt_pkey PRIMARY KEY (cncmsh, codexp, codtab)
)
WITH (
OIDS=FALSE,
autovacuum_enabled=true
);
ALTER TABLE tri_ncmsh_fonte_ibpt OWNER TO postgres;
GRANT ALL ON TABLE tri_ncmsh_fonte_ibpt TO public;
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.cncmsh IS 'Indica se o código da tabela da nomenclatura comum do mercosul.';
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.codexp IS 'Indica se o código do exemplo da nomenclatura comum do mercosul.';
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.codtab IS 'Indica se o código da tabela da nomenclatura comum do mercosul.';
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.dncmsh IS 'Indica se o descrição da nomenclatura comum do mercosul.';
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.alinac IS 'Indica se a alíquota de mercadorias nacionais.';
COMMENT ON COLUMN tri_ncmsh_fonte_ibpt.aliimp IS 'Indica se a alíquota de mercadorias importadas.';
Faz um rotina que o usuário posso importar esta tabela de tempo em tempo caso seja necessário.
No seu cadastro de produtos.
Cria um campo que o usuário possa informar ou pesquisar na tabela descrita acima o código do ncm/sh.
Você também precisara de um campo para o usuário informar se a mercadoria e nacional ou importada que a alíquota de carga tributaria tem diferença entre a origem da mercadoria.
Feito isso. Após o usuário ter informado o ncm/sh e a origem uma função passando este parâmetros que retorna a alíquota da carga tributaria.
No DDChannel9 da Daruma tem um vídeo muito bom ensinando como calcular o imposta na hora da impressão do cupom fiscal. Segue o link abaixo.
http://www.youtube.com/watch?v=YtwmET8V_Lc
Bom acredito que seja isso. Qualquer dúvida e só postar, que tentamos ajudar da melhor forma possível! rs
Espero que te ajude, forte abraço ate mais ver!
Gostei + 0
24/03/2014
Daniel Qualhato
o primeiro passo você precisa acrescentar na sua tabela de cadastro de produtos o campo cst para saber qual o destino da mercadoria, se é nacional ou importado.
se você for observar na tabela IBPT a dois campos de alíquota: AliqNasc e AliqImp. E é justamente através do campo cst que você irá identificar se a mercadoria é nacional ou importada. veja meu exemplo:
procedure TfrmSaidas.tbl_itensSaidaBeforePost(DataSet: TDataSet);
var Alq:Currency;
begin
if((tbl_localizaProdEST_CST.AsInteger <> 0)and
(tbl_localizaProdEST_CST.AsInteger <> 3)and
(tbl_localizaProdEST_CST.AsInteger <> 4)and
(tbl_localizaProdEST_CST.AsInteger <> 5))then
Alq := tbl_localizaProdEST_ALIQIMP.AsCurrency
else
Alq := tbl_localizaProdEST_ALIQNASC.AsCurrency;
tbl_itensSaidaISAI_VALORIMPOSTO.AsCurrency := (tbl_itensSaidaISAI_TOTAL.AsCurrency * Alq);
end;Observe que eu acrescentei um campo na minha tabela de itensSaidaProdutos(Tabela filha) o campo VALORIMPOSTO este campos vai pegar o valor total do item que é (Quantidade * valor do item) e multiplicar pela alíquota do produto referente a tabela IBPT.
Depois é só calcular o campo VALORIMPOSTO. Veja meu exemplo:
PercentualImposto := frmSaidas.TotalImposto / valorTotal;
frmSaidas.TotalImposto := frmSaidas.TotalImposto / 100;
if(frmSaidas.tbl_saidasSAI_CLIENTE_ID.AsInteger > 0)then
begin
NomeCliente := ColocaTextoEsq('Cliente: ' + tbl_listaClientesCLI_NOME.AsString, 48, ' ');
if(tbl_listaClientesCLI_CPF.AsString <> '')then
CpfCnpj := ColocaTextoEsq('CPF: ' + tbl_listaClientesCLI_CPF.AsString, 48, ' ')
else
CpfCnpj := ColocaTextoEsq('CNPJ: ' + tbl_listaClientesCLI_CNPJ.AsString, 48, ' ');
MsgTributo := ColocaTextoEsq('Val Aprox dos Tributos R$ ' + FormatFloat('0.00', frmSaidas.TotalImposto) + ' (' + FormatFloat('0.00', PercentualImposto) + '%)', 48, ' ');
MsgPromocao := ColocaTextoEsq('Agradecemos a Preferência. Volte Sempre!', 48, ' ');
Msg := #27 + #69 + MsgTributo + #27 + #70 + ColocaTextoEsq('-',48,'-') + NomeCliente + CpfCnpj + ColocaTextoEsq('-',48,'-') + MsgPromocao;
end
else
begin
MsgTributo := ColocaTextoEsq('Val Aprox dos Tributos R$ ' + FormatFloat('0.00', frmSaidas.TotalImposto) + ' (' + FormatFloat('0.00', PercentualImposto) + '%)', 48, ' ');
MsgPromocao := ColocaTextoEsq('Agradecemos a Preferência. Volte Sempre!', 48, ' ');
Msg := #27 + #69 + MsgTributo + #27 + #70 + ColocaTextoEsq(' ',48,' ') + MsgPromocao;
end;Nu tem muito segredo na implantação não. o difícil mesmo é entender a logica de calculo desse imposto.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)