Fórum Calculo de impostos #372312
15/07/2009
0
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
Curtir tópico
+ 0Posts
15/07/2009
Nasguone
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.
Gostei + 0
16/07/2009
Osocram
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...
Gostei + 0
16/07/2009
Tchucky
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
Gostei + 0
16/07/2009
Osocram
prmPrecoVenda := prmCustoCompra+(prmCustoCompra * (prmPercentTributar/100));
flw.
Gostei + 0
16/07/2009
Tchucky
Gostei + 0
16/07/2009
Osocram
Gostei + 0
16/07/2009
Tchucky
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);
Gostei + 0
16/07/2009
Carlos Bernardo
prmPercentTributar := 100 - prmPercentTributar
por
prmPercentTributar := (100 - prmPercentTributar) /100
Ai vai dar certo...
Gostei + 0
16/07/2009
Tchucky
esse problema esta m deixando careca
Gostei + 0
16/07/2009
Osocram
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.
Gostei + 0
16/07/2009
Carlos Bernardo
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...
Gostei + 0
16/07/2009
Tchucky
Gostei + 0
16/07/2009
Osocram
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.
Gostei + 0
16/07/2009
Tchucky
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
Gostei + 0
16/07/2009
Tchucky
prmPercentTributar := 100 + prmPercentTributar; prmPrecoVenda := (prmCustoCompra*(prmPercentTributar/100));
so mudei o prmPercentTributar := 100 - prmPercentTributar;
para
prmPercentTributar := 100 + prmPercentTributar;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)