Fórum Calculo de impostos #372312

15/07/2009

0

pessoal to com um problemao aqui com uns impostos

fiz umas rotinas esta me dando um problema ela so me soma os valores quando esta 100 dos impostos se eu colocar um valos menor tipo 50¬ ele naum me da o valor de venda correto do produto a funcao q estou usando e essa

quando vou somar os impostos para m dar o valor de venda ele naum soma correto

 prmPercentTributar      := (prmTempIcmsSaida+prmTempPis+prmTempCofins+prmTempContrSocial+prmTempIR+prmTempComissoes+prmTempDespOperacionais+prmTempMargemLucro);
  lbl_percentual_custo_compra.Caption := FloatToStr(prmPercentTributar);
  prmPercentTributar      := 100 - prmPercentTributar;

  lbl_custo_venda.Caption := FormatFloat(´#,0.00´,       // fucoes de prmPrecoVenda
  ((prmCustoCompra * prmTempIcmsSaida) / 100) +
  ((prmCustoCompra * prmTempPis) / 100) +
  ((prmCustoCompra * prmTempCofins) / 100)+
  ((prmCustoCompra * prmTempContrSocial) / 100)+
  ((prmCustoCompra * prmTempIR) / 100)+
  ((prmCustoCompra * prmTempComissoes) / 100)+
  ((prmCustoCompra * prmTempDespOperacionais) / 100)+
  ((prmCustoCompra * prmTempMargemLucro) / 100));

  if prmPercentTributar = 0 then// para evitar erros de divizão;
   prmPercentTributar := 1;

 // prmPrecoVenda           := prmCustoCompra+((prmCustoCompra * 100) / prmPercentTributar);
//  lbl_preco_venda.Caption := FormatFloat(´#,0.00´,prmPrecoVenda);

  prmPrecoVenda           := prmCustoCompra+((prmCustoCompra) / prmPercentTributar);

  lbl_preco_venda.Caption := FormatFloat(´,0.00´,prmPrecoVenda);

  lbl_icms_saida.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempIcmsSaida) / 100);
  lbl_pis.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempPis) / 100);
  lbl_cofins.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempCofins) / 100);
  lbl_contr_social.Caption := FormatFloat(´#,0.00´,(prmCustoCompra * prmTempContrSocial) / 100);
  lbl_imposto_renda.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempIR) / 100);
  lbl_comissao.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempComissoes) / 100);
  lbl_desp_operacionais.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempDespOperacionais) / 100);
  lbl_margem_lucro.Caption := FormatFloat(´,0.00´,(prmCustoCompra * prmTempMargemLucro) / 100);



Tchucky

Tchucky

Responder

Posts

15/07/2009

Nasguone

Sua formatação não esta errada, porem eu particularmente não gosto de fazer formatflot neste estilo:
FormatFloat(´#,0.00´,(prmCustoCompra * prmTempPis) / 100);


To te passando um exemplo que fiz rapidinho aqui para testar as formatações do seu problema, veja se te ajuda em algo.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
edtValorCompra: TEdit;
edtPercentual: TEdit;
Button1: TButton;
edtResPerc: TEdit;
edtValorfinal: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
ValorProduto : string;
Percentual,resulta : string;
valor :currency;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
valorproduto := edtValorCompra.text;
Percentual := edtPercentual.text;
edtResPerc.text:= Format(´¬f´,[((StrToFloat(valorproduto)*StrToFloat(percentual))/100)]); //[CurrToStr(valor)]
edtValorfinal.Text := FloatToStr(StrToFloat(Valorproduto)+StrToFloat(edtResPerc.Text));

end;

end.


Responder

Gostei + 0

16/07/2009

Osocram

cara eu me perdi no que vc flw...
Poderia explicar mais detalhado e passar um exemplo de valor e qual o resultado da sua função e qual deveria ser o resultado correto?

e outra dica vc faz
(prmCustoCompra * prmTempIcmsSaida) / 100)

duas vezes.. pq não joga o valor numa variavel p não ter que ficar recalculando denovo?

E em vez de fazer isso.
if prmPercentTributar = 0 then// para evitar erros de divizão;
   prmPercentTributar := 1;
 // prmPrecoVenda           := prmCustoCompra+((prmCustoCompra * 100) / prmPercentTributar);
//  lbl_preco_venda.Caption := FormatFloat(´#,0.00´,prmPrecoVenda);
  prmPrecoVenda           := prmCustoCompra+((prmCustoCompra) / prmPercentTributar);
  lbl_preco_venda.Caption := FormatFloat(´,0.00´,prmPrecoVenda); 

faz assim
if prmPercentTributar = 0 then
  prmPrecoVenda           := prmCustoCompra+((prmCustoCompra) )
else
  prmPrecoVenda           := prmCustoCompra+((prmCustoCompra) / prmPercentTributar);


Mas o seu problema em si eu não entendi...


Responder

Gostei + 0

16/07/2009

Tchucky

O problema esta sendo aqui

if prmPercentTributar = 0 then// para evitar erros de divizão;
   prmPercentTributar := 1;

  prmPrecoVenda           := prmCustoCompra+(prmCustoCompra / prmPercentTributar);
  lbl_preco_venda.Caption := FormatFloat(´#,0.00´,prmPrecoVenda);


pois oq esta acontecendo vou fazer um exemplo previo

eu tenho 8 tipo de impostos eles calculam o valor certinho em cima do custo de compra... eu tenho q somar o valor dos impostos para tirar o valor da venda dos produtos ai q esta acontecendo o erro por exemplo

na Margem de lucro eu posso ter 10,50,100 ¬ de lucro

se eu tiver um valor de custo de 88,00 e uma margem de lucro de 100¬ que da 88,00 ai ele vai somar custo+lucro = 176,00 ai ele soma certinho...

agora se eu tiver um custo de 88,00 e uma margem de lucro de 50¬ que da 44,00 quando ele soma esta m dando um valor de 89,76 totalmente errado sendo q o correto e 132,00

esse esta sendo o problema quando adiciono uma porcentagem menor de 100¬ ele me soma errado


Responder

Gostei + 0

16/07/2009

Osocram

o certo não seria assim?
prmPrecoVenda := prmCustoCompra+(prmCustoCompra * (prmPercentTributar/100)); 


flw.


Responder

Gostei + 0

16/07/2009

Tchucky

osocram dessa forma ele ja m traz os valores somados e quando eu vou diminuir os porcentagens ele traz totalmente errado o valor da venda


Responder

Gostei + 0

16/07/2009

Osocram

tira o prmPercentTributar := 100 - prmPercentTributar;
osocram dessa forma ele ja m traz os valores somados e quando eu vou diminuir os porcentagens ele traz totalmente errado o valor da venda



Responder

Gostei + 0

16/07/2009

Tchucky

essa e minha estrutura de calculos oq sera q pode esta errado a variaveis sao REAL

Var
 fPercet: Real;
begin
  if (Sender is TEdit) and (Trim((Sender as TEdit).Text) <> ´´) then
  begin
    try
      fPercet := StrToFloat((Sender as TEdit).Text);
    except
      fPercet := 0;
    end;
  end
  else
   fPercet := 0;

  case (Sender as TEdit).Tag of
   0: prmTempIcmsSaida := fPercet;
   1: prmTempPis := fPercet;
   2: prmTempCofins := fPercet;
   3: prmTempContrSocial := fPercet;
   4: prmTempIR := fPercet;
   5: prmTempComissoes := fPercet;
   6: prmTempDespOperacionais := fPercet;
   7: prmTempMargemLucro := fPercet;
  end;

  prmPercentTributar      := (prmTempIcmsSaida+prmTempPis+prmTempCofins+prmTempContrSocial+prmTempIR+prmTempComissoes+prmTempDespOperacionais+prmTempMargemLucro);
  lbl_percentual_custo_compra.Caption := FloatToStr(prmPercentTributar);
  prmPercentTributar      := 100 - prmPercentTributar;
  lbl_custo_venda.Caption := FormatFloat(´#,0.00´,
  ((prmPrecoVenda * prmTempIcmsSaida) / 100) +
  ((prmPrecoVenda * prmTempPis) / 100) +
  ((prmPrecoVenda * prmTempCofins) / 100)+
  ((prmPrecoVenda * prmTempContrSocial) / 100)+
  ((prmPrecoVenda * prmTempIR) / 100)+
  ((prmPrecoVenda * prmTempComissoes) / 100)+
  ((prmPrecoVenda * prmTempDespOperacionais) / 100)+
  ((prmPrecoVenda * prmTempMargemLucro) / 100));

  if prmPercentTributar = 0 then// para evitar erros de divizão;
   prmPercentTributar := 1;
   
  prmPrecoVenda           := ((prmCustoCompra * 100) / prmPercentTributar);
  lbl_preco_venda.Caption := FormatFloat(´,0.00´,prmPrecoVenda);

  lbl_icms_saida.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempIcmsSaida) / 100);
  lbl_pis.Caption := FormatFloat(´#,0.00´,(prmPrecoVenda * prmTempPis) / 100);
  lbl_cofins.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempCofins) / 100);
  lbl_contr_social.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempContrSocial) / 100);
  lbl_imposto_renda.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempIR) / 100);
  lbl_comissao.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempComissoes) / 100);
  lbl_desp_operacionais.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempDespOperacionais) / 100);
  lbl_margem_lucro.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempMargemLucro) / 100);



Responder

Gostei + 0

16/07/2009

Carlos Bernardo

Troque essa linha
prmPercentTributar := 100 - prmPercentTributar

por

prmPercentTributar := (100 - prmPercentTributar) /100
Ai vai dar certo...


Responder

Gostei + 0

16/07/2009

Tchucky

rausch dessa forma ai os valores vao alem do valor real...

esse problema esta m deixando careca


Responder

Gostei + 0

16/07/2009

Osocram

Vou repetir novamente oq eu disse nos post anteriores... acho q vc não fez oq eu disse.
Ou não entendi o que vc disse.

e tira a linha
prmPercentTributar := 100 - prmPercentTributar; 


faça assim
prmPrecoVenda := prmCustoCompra+(prmCustoCompra * (prmPercentTributar/100)); [/code]



com o seu exemplo passado
c 100¬
prmPrcoVenda := 88 + (88*(100/100))
:= 88 + (88*1)
:= 176

agora c 50¬
prmPrcoVenda := 88 + (88*(50/100))
:= 88 + (88*0.5)
:= 88 + 44

Foi isso q eu passei nos meus 2 ultimos post... E acho que esta correto...
A não ser que eu tenha entendi errado o q vc quer.


Responder

Gostei + 0

16/07/2009

Carlos Bernardo

Desculpa pela resposta anterior...

Analisando seu sistema, e simulando vi alguns erros....

Vou postar as alterações, baseados na sua forma de cálculo.


prmPercentTributar := (prmTempIcmsSaida+prmTempPis+prmTempCofins+
prmTempContrSocial+prmTempIR+prmTempComissoes+
prmTempDespOperacionais+prmTempMargemLucro);

lbl_percentual_custo_compra.Caption := FloatToStr(prmPercentTributar);
//
lbl_custo_venda.Caption := FormatFloat(´#,0.00´,
((prmCustoCompra * prmTempIcmsSaida) / 100) +
((prmCustoCompra * prmTempPis) / 100) +
((prmCustoCompra * prmTempCofins) / 100)+
((prmCustoCompra * prmTempContrSocial) / 100)+
((prmCustoCompra * prmTempIR) / 100)+
((prmCustoCompra * prmTempComissoes) / 100)+
((prmCustoCompra * prmTempDespOperacionais) / 100)+
((prmCustoCompra * prmTempMargemLucro) / 100));

//

prmPrecoVenda := prmCustoCompra+(prmCustoCompra * (prmPercentTributar/100));
lbl_preco_venda.Caption := FormatFloat(´#,0.00´,prmPrecoVenda);

lbl_icms_saida.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempIcmsSaida) / 100);
lbl_pis.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempPis) / 100);
lbl_cofins.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempCofins) / 100);
lbl_contr_social.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempContrSocial) / 100);
lbl_imposto_renda.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempIR) / 100);
lbl_comissao.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempComissoes) / 100);
lbl_desp_operacionais.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempDespOperacionais) / 100);
lbl_margem_lucro.Caption := FormatFloat(´,0.00´,(prmPrecoVenda * prmTempMargemLucro) / 100);

Seguinte não sei se vc está querendo obter uma espécie de formação de preço... Se for... de qq forma está completamente errado... mas dessa maneira aki funcionou...

Qq coisa avisa q eu ajudo a formular o preço...


Responder

Gostei + 0

16/07/2009

Tchucky

osocram fiz da forma q vc passou sim mas naum deu certo tambem oq acontece ele ja ja vem somando tudo sem eu colocar valor nem um no campo de porcentangem ele ja me retorna 176 sem eu digitar nada...


Responder

Gostei + 0

16/07/2009

Osocram

Mas dae ja é um erro na logica dessa sua rotina, hein...
saca so

prmPrcoVenda := 88 + (88*(50/100)) 

se vc passar zero deveria ficar assim
  prmPrcoVenda := 88 + (88*(0/100)) 
                        := 88 + (88*0) 
                        := 88 + 0 

então acho que esta falando vc inicializar alguma variavel.

osocram fiz da forma q vc passou sim mas naum deu certo tambem oq acontece ele ja ja vem somando tudo sem eu colocar valor nem um no campo de porcentangem ele ja me retorna 176 sem eu digitar nada...



Responder

Gostei + 0

16/07/2009

Tchucky

eu fiz dessa forma ai tambem naum deu

testei dessa forma


prmPercentTributar      := 100 - prmPercentTributar;
prmPrecoVenda :=  (prmCustoCompra*(prmPercentTributar/100));


a diferença e q ao invez de somar ela esta diminuindo pelo valor dos impostos esse esta sendo o problema agora


Responder

Gostei + 0

16/07/2009

Tchucky

pessoal consegui resolver o problema

prmPercentTributar      := 100 + prmPercentTributar;
prmPrecoVenda :=  (prmCustoCompra*(prmPercentTributar/100));


so mudei o prmPercentTributar := 100 - prmPercentTributar;

para

prmPercentTributar := 100 + prmPercentTributar;


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar