Boa tarde pessoal,
estou utilizando a tabela ibpt para calcular o de olho no imposto mais não sei se esta certo gostaria da opinião de vocês
fiz essa rotina para calcular item a item baseado em que encontrei aqui no fórum
veja como ficou
/////////////////////////////////////////////////
//Função utilizada para truncar um valor real
/////////////////////////////////////////////////
Function Truncar(Value:Real;Casas:Integer):Real;
/////////////////////////////////////////////////
Var sValor:String;
nPos:Integer;
begin
//Transforma o valor em string
sValor := FloatToStr(Value);
//Verifica se possui pondo decimal
nPos := Pos(DecimalSeparator,sValor);
If ( nPos > 0 ) Then begin
sValor := Copy(sValor,1,nPos+Casas);
End;
Result := StrToFloat(sValor);
end;
//função para calcular impostos federal, estadual e municipal
function CalculaTributos(vTotalItem : Double; NCM : String; servico : Boolean;
fci : String; ex : String) : Double;
var
qryConsulta : TZQuery;
vTributosF, vTributosE, vTributosM : Double;
begin
try
qryConsulta := TZQuery.Create(Application);
with qryConsulta do
begin
Active := False;
Connection := frmmodulo.conexao;
SQL.Clear;
SQL.Add('SELECT COALESCE(ALIQNACIONAL_IBPT,0) AS ALIQNACIONAL_IBPT,');
SQL.Add('COALESCE(ALIQINTERNACIONAL_IBPT,0) AS ALIQINTERNACIONAL_IBPT,');
SQL.Add('COALESCE(ALIQESTADUAL_IBPT,0) AS ALIQESTADUAL_IBPT,');
SQL.Add('COALESCE(ALIQMUNICIPAL_IBPT,0) AS ALIQMUNICIPAL_IBPT');
SQL.Add('FROM NCM WHERE NCM = :NCM AND EX_IBPT = :EX_IBPT');
SQL.Add('AND TABELA_IBPT = :TABELA_IBPT;');
ParamByName('NCM').AsString := StringReplace(NCM, '.', '',
[rfReplaceAll, rfIgnoreCase]);
ParamByName('EX_IBPT').AsString := ex;
if servico then
ParamByName('TABELA_IBPT').AsString := '1'
else
ParamByName('TABELA_IBPT').AsString := '0';
Active := True;
First;
end;
if qryConsulta.Eof then
begin
vTributosF := 0;
vTributosE := 0;
vTributosM := 0;
end
else
begin
if fci = '' then
begin
vTributosF := Truncar((vTotalItem * qryConsulta['ALIQNACIONAL_IBPT']) / 100, 2);
vTributosE := Truncar((vTotalItem * qryConsulta['ALIQESTADUAL_IBPT']) / 100, 2);
vTributosM := Truncar((vTotalItem * qryConsulta['ALIQMUNICIPAL_IBPT']) / 100, 2);
end
else
begin
vTributosF := Truncar((vTotalItem * qryConsulta['ALIQINTERNACIONAL_IBPT']) / 100, 2);
vTributosE := Truncar((vTotalItem * qryConsulta['ALIQESTADUAL_IBPT']) / 100, 2);
vTributosM := Truncar((vTotalItem * qryConsulta['ALIQMUNICIPAL_IBPT']) / 100, 2);
end;
end;
Result := vTributosF + vTributosE + vTributosM;
except
Result := 0;
end;
end;
para obter o resultado fiz assim sera que é isso mesmo?