ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Calculos [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Dom Abr 28, 2013 10:21 pm    Assunto: Calculos [RESOLVIDO] Responder com Citação

Boa noite a todos, me chamo Lauro Becker.
Estou trabalhando em um sistema de recibos sendo que preciso calcular o INSS o procedimento abaixo recebe o valor e teoricamente deveria identificar a faixa de percentual e calcular e alimentar a variavel inss, o procedimento esta calculando corretamente com as procentagens de 9 e 11%, mas na de 8% ele não calcula... Peço perdão pela minha falta de experiência tenho uns 2 meses que estou estudando pela net, isso quando esta esta funcionando... Desde já agradeço a compreensão de todos... Obrigado.
Segue código:
procedure Tfrm_principal.CalculaINSS;
begin
if (CB_INSS_SIM.Checked = true) and (DB_Vlr_Bruto.Field.Value > 0) then
begin
if (DB_Vlr_Bruto.Field.Value > 100) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx01.Field.Value)
then
inss := (DB_Vlr_Bruto.Field.Value * Cool/100;
lb_idc_inss.Caption := '8,00';

if (DB_Vlr_Bruto.Field.Value >= frm_config.DBE_inss_fx02.Field.Value) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx03.Field.Value)
then
inss := (DB_Vlr_Bruto.Field.Value * 9)/100;
lb_idc_inss.Caption := '9,00';
if (DB_Vlr_Bruto.Field.Value >= frm_config.DBE_inss_fx04.Field.Value) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx05.Field.Value)
then
inss := (DB_Vlr_Bruto.Field.Value * 11)/100;
lb_idc_inss.Caption := '11,00';
if (DB_Vlr_Bruto.Field.Value > frm_config.DBE_inss_fx05.Field.Value)
then
inss := (frm_config.DBE_inss_fx05.Field.Value * 11)/100;
lb_idc_inss.Caption := '11,00';
end
else
inss := 0;
end;


Editado pela última vez por lbeckerf em Qua Mai 01, 2013 10:31 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
felipekk
Colaborador
Colaborador


Registrado: Quinta-Feira, 5 de Janeiro de 2012
Mensagens: 1531
Localização: Pirapora - MG

MensagemEnviada: Seg Abr 29, 2013 9:00 am    Assunto: Responder com Citação

Bom dia e seja bem vindo ao fórum.
Vc verificou se essas condições estão sendo satisfeitas?
Código:
if (CB_INSS_SIM.Checked = true) and (DB_Vlr_Bruto.Field.Value > 0) then
begin
if (DB_Vlr_Bruto.Field.Value > 100) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx01.Field.Value)
then

_________________
"Esteja ligado em melhora contínua: hoje melhor do que ontem e pior do que amanhã."


Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Abr 29, 2013 10:50 am    Assunto: Responder com Citação

Bom dia,

Para executar mais de um comando dentro de um If é necessário delimitar os comandos dentro de um bloco Begin / End mais ou menos como segue:

Código:
if {condições} then
  begin
    // comandos
    // comandos
  end
else
    if {outras condições} then
      begin
        // comandos
        // comandos
      end
    else
      begin
        // comandos
        // comandos
      end;


Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-em-guarulhos
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Seg Abr 29, 2013 1:38 pm    Assunto: Responder com Citação

felipekk escreveu:
Bom dia e seja bem vindo ao fórum.
Vc verificou se essas condições estão sendo satisfeitas?
Código:
if (CB_INSS_SIM.Checked = true) and (DB_Vlr_Bruto.Field.Value > 0) then
begin
if (DB_Vlr_Bruto.Field.Value > 100) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx01.Field.Value)
then


Boa tarde!

Muito obrigado pela atenção Felipe. Sim esta condição esta sendo satisfeita, ja bati cabeça e nada se vc quiser e tiver tempo posso te mandar por email o meu projeto para vc. Obrigado e boa tarde!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Seg Abr 29, 2013 1:40 pm    Assunto: Responder com Citação

imex escreveu:
Bom dia,

Para executar mais de um comando dentro de um If é necessário delimitar os comandos dentro de um bloco Begin / End mais ou menos como segue:

Código:
if {condições} then
  begin
    // comandos
    // comandos
  end
else
    if {outras condições} then
      begin
        // comandos
        // comandos
      end
    else
      begin
        // comandos
        // comandos
      end;


Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imoveis-em-guarulhos


Boa tarde!

Imex muito obrigado pela orientação, esta ja não sai mais da minha cabeça. Agradeço antecipadamente a ajuda de todos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Seg Abr 29, 2013 4:03 pm    Assunto: Responder com Citação

Desculpe mas não entendi o que você quis dizer.
Acho que você vai conseguir resolver essa questão se colocar os comandos a serem executas para cada condição dentro de um bloco Begin / End.

Qualquer coisa volte a postar.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Seg Abr 29, 2013 11:11 pm    Assunto: Responder com Citação

Imex, boa noite! quando falei "essa não saia mais da minha cabeça" estava falando da sua orientação sobre a organização do codigo...
Sobre o problema: este codigo é para cacular o valor do inss que incide sobre o valor nas faixas de 8%, 9% e 11% e o teto maximo é de R$ 457,27:
valor ate 1247,11 desconta 8%, valor de 1247,12 ate 2078,52 desconta 9%, valor de 2078,53 ate 4157,05 desconta 11%, valor acima de 4157,05 desconta teto maximo de 11%, ou seja 457,27. O sistema esta calculando corretamente todas as faixas, o erro esta quando o valor bruto é menor que 1000, dae ele calcula direto o teto maximo, como se o valor bruto fosse maior que 4157,05..... Ja mudei o codigo veja:

procedure Tfrm_principal.CalculaINSS;
begin
if (DB_Vlr_Bruto.Field.Value > 100) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx01.Field.Value)
then
begin
inss := (DB_Vlr_Bruto.Field.Value * Cool/100;
lb_idc_inss.Caption := '8,00';
end
else
if (DB_Vlr_Bruto.Field.Value >= frm_config.DBE_inss_fx02.Field.Value) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx03.Field.Value)
then
begin
inss := (DB_Vlr_Bruto.Field.Value * 9)/100;
lb_idc_inss.Caption := '9,00';
end
else
if (DB_Vlr_Bruto.Field.Value >= frm_config.DBE_inss_fx04.Field.Value) and (DB_Vlr_Bruto.Field.Value <= frm_config.DBE_inss_fx05.Field.Value)
then
begin
inss := (DB_Vlr_Bruto.Field.Value * 11)/100;
lb_idc_inss.Caption := '11,00';
end
else
if (DB_Vlr_Bruto.Field.Value > frm_config.DBE_inss_fx05.Field.Value)
then
begin
inss := (frm_config.DBE_inss_fx05.Field.Value * 11)/100;
lb_idc_inss.Caption := '11,00';
end
else
inss := 0;
end;

Desde ja agradeço a ajuda e boa noite a todos!!!!!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Ter Abr 30, 2013 2:31 pm    Assunto: Responder com Citação

Boa tarde,

Confirma uma coisa... o erro está ocorendo quando o valor bruto é menor ou igual a 100 ou 1000?
Acho que você teria que verificar e/ou postar os valores que estão em frm_config.DBE_inss_fx01 a frm_config.DBE_inss_fx05 para analisarmos melhor o seu código.
Acho também que seria melhor ter um campo para a aliquota de cada faixa (ex: frm_config.DBE_inss_aliq01 a frm_config.DBE_inss_aliq05) e outro para o teto do valor bruto, pois dessa forma esses valores não ficariam fixos no código.

Qualquer coisa volte a postar.

Espero que ajude.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Ter Abr 30, 2013 9:42 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Confirma uma coisa... o erro está ocorendo quando o valor bruto é menor ou igual a 100 ou 1000?
Acho que você teria que verificar e/ou postar os valores que estão em frm_config.DBE_inss_fx01 a frm_config.DBE_inss_fx05 para analisarmos melhor o seu código.
Acho também que seria melhor ter um campo para a aliquota de cada faixa (ex: frm_config.DBE_inss_aliq01 a frm_config.DBE_inss_aliq05) e outro para o teto do valor bruto, pois dessa forma esses valores não ficariam fixos no código.

Qualquer coisa volte a postar.

Espero que ajude.


Boa noite a todos!

Imex, o erro ocorre quando o valor bruto é menor que 1000, acima deste valor o calculo é efetuado corretamente.. segue os valores:
frm_config.DBE_inss_fx01.Field.Value = 1247,11
frm_config.DBE_inss_fx02.Field.Value = 1247,12
frm_config.DBE_inss_fx03.Field.Value = 2078,52
frm_config.DBE_inss_fx04.Field.Value = 2078,53
frm_config.DBE_inss_fx05.Field.Value = 4157,05

A lógica é a seguinte:
Se o valor_bruto for menor ou igual a 1247,11 então o desconto de inss do valor_bruto é de 8%.

Se o valor_bruto for maior ou igual a 1247,12 e menor ou igual a 2078,52 então o desconto de inss do valor_bruto é de 9%.

Se o valor_bruto for maior ou igual a 2078,53 e menor ou igual a 4157,05 então o desconto de inss do valor_bruto é de 11%.

Se o valor_bruto for maior ou igual a 4157,05 então o desconto de inss do valor_bruto é de 11%.

Desde já agradeço o tempo que vc tem disponibilizado para me ajudar!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Mai 01, 2013 9:17 pm    Assunto: Responder com Citação

Boa noite,

Fiz algumas alterações no seu código (substitui DB_Vlr_Bruto.Field.Value pela variável vVlr_Bruto, e frm_config.DBE_inss_fx01.Field.Value a frm_config.DBE_inss_fx05.Field.Value pelas constantes cFx01 a cFx05) apenas para testa-lo em relação ao problema que você relatou quando o valor bruto é menor que 1000 (não testei outros valores) e o problema não ocorreu. Segue o código:

Código:
procedure Tfrm_principal.CalculaINSS;
const
  cFx01 = 1247.11;
  cFx02 = 1247.12;
  cFx03 = 2078.52;
  cFx04 = 2078.53;
  cFx05 = 4157.05;
var
  vVlr_Bruto: currency;
  inss: currency;
begin
  vVlr_Bruto := 900;
  if (vVlr_Bruto > 100) and (vVlr_Bruto <= cFx01) then
    begin
      inss := (vVlr_Bruto * 8) / 100;
      lb_idc_inss.Caption := '8,00';
    end
  else
      if (vVlr_Bruto >= cFx02) and (vVlr_Bruto <= cFx03) then
        begin
          inss := (vVlr_Bruto * 9)/100;
          lb_idc_inss.Caption := '9,00';
        end
      else
          if (vVlr_Bruto >= cFx04) and (vVlr_Bruto <= cFx05) then
            begin
              inss := (vVlr_Bruto * 11)/100;
              lb_idc_inss.Caption := '11,00';
            end
          else
              if (vVlr_Bruto > cFx05) then
                begin
                  inss := (cFx05 * 11)/100;
                  lb_idc_inss.Caption := '11,00';
                end
              else
                  inss := 0;
  ShowMessage('INSS = ' + FormatFloat('#,##0.00', inss));
end;


Também acho que é possível melhorar a lógica utilizada nos Ifs.

Espero que seja útil.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lbeckerf
Novato
Novato


Registrado: Quarta-Feira, 27 de Março de 2013
Mensagens: 6

MensagemEnviada: Qua Mai 01, 2013 10:30 pm    Assunto: Responder com Citação

imex escreveu:
Boa noite,

Fiz algumas alterações no seu código (substitui DB_Vlr_Bruto.Field.Value pela variável vVlr_Bruto, e frm_config.DBE_inss_fx01.Field.Value a frm_config.DBE_inss_fx05.Field.Value pelas constantes cFx01 a cFx05) apenas para testa-lo em relação ao problema que você relatou quando o valor bruto é menor que 1000 (não testei outros valores) e o problema não ocorreu. Segue o código:

Código:
procedure Tfrm_principal.CalculaINSS;
const
  cFx01 = 1247.11;
  cFx02 = 1247.12;
  cFx03 = 2078.52;
  cFx04 = 2078.53;
  cFx05 = 4157.05;
var
  vVlr_Bruto: currency;
  inss: currency;
begin
  vVlr_Bruto := 900;
  if (vVlr_Bruto > 100) and (vVlr_Bruto <= cFx01) then
    begin
      inss := (vVlr_Bruto * 8) / 100;
      lb_idc_inss.Caption := '8,00';
    end
  else
      if (vVlr_Bruto >= cFx02) and (vVlr_Bruto <= cFx03) then
        begin
          inss := (vVlr_Bruto * 9)/100;
          lb_idc_inss.Caption := '9,00';
        end
      else
          if (vVlr_Bruto >= cFx04) and (vVlr_Bruto <= cFx05) then
            begin
              inss := (vVlr_Bruto * 11)/100;
              lb_idc_inss.Caption := '11,00';
            end
          else
              if (vVlr_Bruto > cFx05) then
                begin
                  inss := (cFx05 * 11)/100;
                  lb_idc_inss.Caption := '11,00';
                end
              else
                  inss := 0;
  ShowMessage('INSS = ' + FormatFloat('#,##0.00', inss));
end;


Também acho que é possível melhorar a lógica utilizada nos Ifs.

Espero que seja útil.


Boa noite a todos!

imex meu irmão, problema resolvido.... muito obrigado pelo o tempo que disponibilizou para me ajudar, espero que este tópico sirva para alguém que assim como eu estava com esta dúvida... Cara te desejo todo o sucesso. Obrigado e qualquer coisa é só falar!! vlw!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB