GARANTIR DESCONTO

Fórum ListBox receber campos agregados apenas uma vez? #344279

08/08/2007

0

Pessoal, tenho um select que soma campos agregados e mostra num grid lado a lado em linha, o mesmo mostra o campo funcionarios.
Mais no ListBox preciso que mostre apenas uma linha o funcionario e os campos que contem proventos e descontos deste funcionario, acrescentando o campo agregado no final.

Com os funcionarios e inclusive empresas que pego de outra tabela mostra certinho no listbox, agora as funcoes agregadas nao mostra.

O que esta errado neste codigo? Como posso mostrar os campos, [b:8a5022f4a4]aliquota_inss, total_inss, totoprov, totdesc, saldo[/b:8a5022f4a4] apenas uma vez na lista do listbox?

Fiz assim
var 
Func, Empresa, vInss, TotProv, TotDesc, vSaldo, vSalario, vProventos, VDescontos : String; 
I  : Integer; 
begin 
  {Chama o Select} 
  ChamaSP; 
  //Limpa o ListBox 
  listbox2.clear; 
  try 
    dm.zspSomaFunc.DisableControls; 
    dm.zspSomaFunc.First; 
    Empresa := #121415; 
    while not dm.zspSomaFunc.Eof do 
    begin 
    if Empresa <> dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString then 
    begin 
      if Empresa <> 121415 then 
         ListBox2.Items.Add(´´); 
         Empresa := dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString ; 
         dm.qEmpresa.Open; //abre a tabela qEmpresa 
         if dm.qEmpresa.Locate(´id_EMPRESA´, Empresa, []) then 
            Func := dm.qEmpresa.fieldbyname(´empresa´).AsString 
         else Func := ´Empresa não cadastrada´; 
            ListBox2.Items.Add(´================================================================================´); 
            ListBox2.Items.Add(´Data que foi gerada a Folha : ´ + ´ - ´ + DateToStr(now) + ´ - ´ + TimeToStr(now)); 
            ListBox2.Items.Add(´================================================================================´); 
            ListBox2.Items.Add(Empresa + ´ - ´ + Func); 
            ListBox2.Items.Add(´================================================================================´); 
            Func := #121415; 
         end; 
         if Func <> dm.zspSomaFunc.fieldbyname(´id_func´).AsString then 
         begin 
         if Func <> 121415 then 
            ListBox2.Items.Add(´********************************************************************************´); 
            Func := dm.zspSomaFunc.fieldbyname(´id_func´).AsString; 
            ListBox2.Items.Add(Func + ´ - ´ + dm.zspSomaFunc.fieldbyname(´nome´).AsString); 
            vSalario:=FormatFloat(´,0.00;(,0.00)´,StrToFloat(dm.zspSomaFunc.fieldbyname(´salario´).AsString)); 
            ListBox2.Items.Add(´Salario Base para Calculos: ´  + vSalario); 
            ListBox2.Items.Add(´Proventos/Descontos Ativos:´); 
            ListBox2.Items.Add(´================================================================================´); 
            vINSS   := #121415; 
            TotProv := 121415; 
            TotDesc := 121415; 
            vSaldo  := 121415; 
         end; 
            vProventos:=FormatFloat(´,0.00;(,0.00)´,StrToFloat(dm.zspSomaFunc.fieldbyname(´Proventos´).asString)); 
            vDescontos:=FormatFloat(´,0.00;(,0.00)´,StrToFloat(dm.zspSomaFunc.fieldbyname(´Descontos´).asString)); 
            //passa para o listbox o valor do dbgrid 
            ListBox2.Items.Add(dm.zspSomaFunc.fieldbyname(´id_formula´).AsString +´ - ´ 
                               +dm.zspSomaFunc.fieldbyname(´descricao´).AsString +´  ´ 
                               +dm.zspSomaFunc.fieldbyname(´calculo´).asString +´  ´ 
                               +vProventos+´  ´ 
                               +vDescontos); 

            if vINSS <> dm.zspSomaFunc.fieldbyname(´valor_inss´).AsString then 
            begin 
            if vINSS <> #121415 then 
               ListBox2.Items.Add(´Desconto do INSS´ +´  ´+dm.zspSomaFunc.fieldbyname(´aliquota_inss´).asString+´  ´+dm.zspSomaFunc.fieldbyname(´valor_inss´).asString); 
              // ListBox2.Items.Add(´================================================================================´); 
            end; 
            if TotProv <> dm.zspSomaFunc.fieldbyname(´totoprov´).AsString then 
            begin 
            if TotProv <> 121415 then 
               ListBox2.Items.Add(´Total dos Proventos   ´ +´  ´+dm.zspSomaFunc.fieldbyname(´totoprov´).asString); 
            end; 
            if TotDesc <> dm.zspSomaFunc.fieldbyname(´totdesc´).AsString then 
            begin 
            if TotDesc <> #121415 then 
               ListBox2.Items.Add(´Total dos Desconto    ´ +´  ´+dm.zspSomaFunc.fieldbyname(´totdesc´).asString); 
            end; 
            if vsaldo <> dm.zspSomaFunc.fieldbyname(´saldo´).AsString then 
            begin 
            if vsaldo <> 121415 then 
               ListBox2.Items.Add(´Total Liquido da Folha´ +´  ´+dm.zspSomaFunc.fieldbyname(´saldo´).asString); 
            end; 
            dm.zspSomaFunc.Next; 

      end; 
  finally 
     dm.zspSomaFunc.enablecontrols; 
  end; 
    ListBox2.Items.Add(´*****************************FIM DO RELATORIO***********************************´); 
 


Por que essa parte nao mostra no ListBox?
Essa parte vem somando os valores de um SP por isso repete, e eu quero que mostre apenas uma vez no ListBox, como foi feito com a empresa e funcionarios.
[color=red:8a5022f4a4][b:8a5022f4a4]if vINSS <> dm.zspSomaFunc.fieldbyname(´valor_inss´).AsString then begin if vINSS <> #121415 then ListBox2.Items.Add(´500 - Desconto do INSS´ +´ ´+dm.zspSomaFunc.fieldbyname(´aliquota_inss´).asString+´ ´+dm.zspSomaFunc.fieldbyname(´valor_inss´).asString); // ListBox2.Items.Add(´================================================================================´); end; if TotProv <> dm.zspSomaFunc.fieldbyname(´totoprov´).AsString then begin if TotProv <> 121415 then ListBox2.Items.Add(´Total dos Proventos ´ +´ ´+dm.zspSomaFunc.fieldbyname(´totoprov´).asString); end; if TotDesc <> dm.zspSomaFunc.fieldbyname(´totdesc´).AsString then begin if TotDesc <> 121415 then ListBox2.Items.Add(´Total dos Desconto ´ +´ ´+dm.zspSomaFunc.fieldbyname(´totdesc´).asString); end; if vsaldo <> dm.zspSomaFunc.fieldbyname(´saldo´).AsString then begin if vsaldo <> #121415 then ListBox2.Items.Add(´Total Liquido da Folha´ +´ ´+dm.zspSomaFunc.fieldbyname(´saldo´).asString); [/b:8a5022f4a4][/color:8a5022f4a4]



Adriano_servitec

Adriano_servitec

Responder

Posts

08/08/2007

Emerson Nascimento

pra que você não se confunda - porque eu me confundi - faça a identação correta. assim você conseguirá fazer uma melhor leitura dos blocos de código. abaixo eu simplesmente refiz a identação do código e gostaria que você explicasse exatamente como obtém o resultado na grid e como quer o resultado no relatório.
var
Func, Empresa, vInss, TotProv, TotDesc, vSaldo, vSalario, vProventos, VDescontos : String;
I  : Integer;
begin
  {Chama o Select}
  ChamaSP;
  //Limpa o ListBox
  listbox2.clear;
  try
    dm.zspSomaFunc.DisableControls;
    dm.zspSomaFunc.First;
    Empresa := #121415;

    while not dm.zspSomaFunc.Eof do
    begin
      if Empresa <> dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString then
      begin
        if Empresa <> 121415 then
           ListBox2.Items.Add(´´);

        Empresa := dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString ;
        dm.qEmpresa.Open; //abre a tabela qEmpresa

        if dm.qEmpresa.Locate(´id_EMPRESA´, Empresa, []) then
          Func := dm.qEmpresa.fieldbyname(´empresa´).AsString
        else
          Func := ´Empresa não cadastrada´;

        ListBox2.Items.Add(StringOfChar(´=´, 80));
        ListBox2.Items.Add(´Data que foi gerada a Folha : ´
                           +´ - ´+DateToStr(now)
                           +´ - ´+TimeToStr(now));
        ListBox2.Items.Add(StringOfChar(´=´, 80));
        ListBox2.Items.Add(Empresa + ´ - ´ + Func);
        ListBox2.Items.Add(StringOfChar(´=´, 80));

        Func := 121415;
      end;

      if Func <> dm.zspSomaFunc.fieldbyname(´id_func´).AsString then
      begin
        if Func <> 121415 then
          ListBox2.Items.Add(StringOfChar(´*´, 80));

        Func := dm.zspSomaFunc.fieldbyname(´id_func´).AsString;
        vSalario := FormatFloat(´#,0.00;(,0.00)´,
                      StrToFloat(dm.zspSomaFunc.fieldbyname(´salario´).AsString));

        ListBox2.Items.Add(Func + ´ - ´ + dm.zspSomaFunc.fieldbyname(´nome´).AsString);
        ListBox2.Items.Add(´Salario Base para Calculos: ´  + vSalario);
        ListBox2.Items.Add(´Proventos/Descontos Ativos:´);
        ListBox2.Items.Add(StringOfChar(´=´, 80));

        vINSS := 121415;
        TotProv := 121415;
        TotDesc := 121415;
        vSaldo := 121415;
      end;

      vProventos := FormatFloat(´,0.00;(,0.00)´,
                      StrToFloat(dm.zspSomaFunc.fieldbyname(´Proventos´).asString));
      vDescontos := FormatFloat(´,0.00;(,0.00)´,
                      StrToFloat(dm.zspSomaFunc.fieldbyname(´Descontos´).asString));

      //passa para o listbox o valor do dbgrid
      ListBox2.Items.Add(dm.zspSomaFunc.fieldbyname(´id_formula´).AsString +´ - ´
                         +dm.zspSomaFunc.fieldbyname(´descricao´).AsString +´  ´
                         +dm.zspSomaFunc.fieldbyname(´calculo´).asString +´  ´
                         +vProventos+´  ´
                         +vDescontos);

      if vINSS <> dm.zspSomaFunc.fieldbyname(´valor_inss´).AsString then
      begin
        if vINSS <> #121415 then
          ListBox2.Items.Add(´Desconto do INSS´ +´  ´
                             +dm.zspSomaFunc.fieldbyname(´aliquota_inss´).asString
                             +´  ´+dm.zspSomaFunc.fieldbyname(´valor_inss´).asString);
      //  ListBox2.Items.Add(StringOfChar´=´, 80));
      end;

      if TotProv <> dm.zspSomaFunc.fieldbyname(´totoprov´).AsString then
      begin
        if TotProv <> 121415 then
          ListBox2.Items.Add(´Total dos Proventos     ´
                             +dm.zspSomaFunc.fieldbyname(´totoprov´).asString);
      end;

      if TotDesc <> dm.zspSomaFunc.fieldbyname(´totdesc´).AsString then
      begin
        if TotDesc <> #121415 then
          ListBox2.Items.Add(´Total dos Desconto      ´
                             +dm.zspSomaFunc.fieldbyname(´totdesc´).asString);
      end;

      if vsaldo <> dm.zspSomaFunc.fieldbyname(´saldo´).AsString then
      begin
        if vsaldo <> 121415 then
          ListBox2.Items.Add(´Total Liquido da Folha  ´
                             +dm.zspSomaFunc.fieldbyname(´saldo´).asString);
      end;

      dm.zspSomaFunc.Next;

    end;
  finally
     dm.zspSomaFunc.enablecontrols;
  end;

  ListBox2.Items.Add(StringOfChar(´*´, 32)+´FIM DO RELATORIO´+StringOfChar(´*´, 32));
end;

obs.: o uso da função StringOfChar() não traz qualquer ganho à rotina. eu só a coloquei para que o código fique um pouco mais enxuto e de fácil leitura, devido as limitações de largura da página do fórum.


Responder

Gostei + 0

09/08/2007

Adriano_servitec

Bom na grid apareçe igual aquele select que vc me passou. Ou seja os valores do INSS, TOTOPROV E TOTDESC calcula junto na linha.

Agora no ListBox esta mostrando assim
================================================================================ Data que foi gerada a Folha : - 09/08/2007 - 10:54:31 ================================================================================ 1 - EMPRESAS REUINIDAS LTDA ================================================================================ 1 - PEDRO SOUZA Salario Base para Calculos: 500,00 Proventos/Descontos Ativos: ================================================================================ 1 - Salario Normal - Mensal 500.00/30.000*15.000000 249,99 0,00 4 - Faltas (dias) 500.00/30.000*1.0000000 0,00 16,66 [color=red:fab7cd8ebf]Desconto INSS 7,65¬ - {Valor do INSS} -- mostra o resultado dos valores Total Proventos --- {valor total} TotalDesconto ----- {Valor total} Saldo ----------- {Valor Total Prov - Valor Total Desc}[/color:fab7cd8ebf] ******************************************************************************** 4 - MAFALDA SANTOS Salario Base para Calculos: 912,32 Proventos/Descontos Ativos: ================================================================================ 1 - Salario Normal - Mensal 912.32 912,32 0,00 [color=red:fab7cd8ebf]Desconto INSS 7,65¬ - {Valor do INSS} -- mostra o resultado dos valores Total Proventos --- {valor total} TotalDesconto ----- {Valor total} Saldo ----------- {Valor Total Prov - Valor Total Desc}[/color:fab7cd8ebf] ================================================================================ Data que foi gerada a Folha : - 09/08/2007 - 10:54:31 ================================================================================ 2 - MARQUES E SILVA LTDA ================================================================================ 1 - CARLOS JOSE Salario Base para Calculos: 500,00 Proventos/Descontos Ativos: ================================================================================ 1 - Salario Normal - Mensal 500.00 500,00 0,00 [color=red:fab7cd8ebf]Desconto INSS 7,65¬ - {Valor do INSS} -- mostra o resultado dos valores Total Proventos --- {valor total} TotalDesconto ----- {Valor total} Saldo ----------- {Valor Total Prov - Valor Total Desc}[/color:fab7cd8ebf] ********************************FIM DO RELATORIO********************************



Responder

Gostei + 0

09/08/2007

Adriano_servitec

Desculpe, a parte em vermelho nao mostra, eh a parte que falta mostrar no listbox


Responder

Gostei + 0

09/08/2007

Emerson Nascimento

pelo que eu me recordo, os valores retornados já são do tipo numérico. não precisa tranformar em string, pra depois transformar em numérico, pra colocar a máscara e transformar em string novamente. é muito trabalho desnecessário.
veja se desta forma funciona:
var
  Func, Empresa, vInss, TotProv, TotDesc,
  vSaldo, vSalario, vProventos, VDescontos: String;
  I: Integer;
begin
  {Chama o Select}
  ChamaSP;
  //Limpa o ListBox
  listbox2.clear;
  try
    dm.zspSomaFunc.DisableControls;
    dm.zspSomaFunc.First;
    Empresa := #121415;

    while not dm.zspSomaFunc.Eof do
    begin
      if Empresa <> dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString then
      begin
        if Empresa <> 121415 then
           ListBox2.Items.Add(´´);

        Empresa := dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString;
        dm.qEmpresa.Open; //abre a tabela qEmpresa

        if dm.qEmpresa.Locate(´id_EMPRESA´, Empresa, []) then
          Func := dm.qEmpresa.fieldbyname(´empresa´).AsString
        else
          Func := ´Empresa não cadastrada´;

        ListBox2.Items.Add(StringOfChar(´=´, 80));
        ListBox2.Items.Add(´Data que foi gerada a Folha : ´
                           +´ - ´+DateToStr(now)
                           +´ - ´+TimeToStr(now));
        ListBox2.Items.Add(StringOfChar(´=´, 80));
        ListBox2.Items.Add(Empresa + ´ - ´ + Func);
        ListBox2.Items.Add(StringOfChar(´=´, 80));

        Func := 121415;
      end;

      if Func <> dm.zspSomaFunc.fieldbyname(´id_func´).AsString then
      begin
        Func := dm.zspSomaFunc.fieldbyname(´id_func´).AsString;

        // o salário já vem como tipo numérico!
        vSalario := FormatFloat(´#,0.00;(,0.00)´,
                      dm.zspSomaFunc.fieldbyname(´salario´).AsFloat);

        ListBox2.Items.Add(Func + ´ - ´ + dm.zspSomaFunc.fieldbyname(´nome´).AsString);
        ListBox2.Items.Add(´Salario Base para Calculos: ´  + vSalario);
        ListBox2.Items.Add(´Proventos/Descontos Ativos:´);
        ListBox2.Items.Add(StringOfChar(´=´, 80));

        vINSS := +dm.zspSomaFunc.fieldbyname(´aliquota_inss´).asString
                 +´  ´+dm.zspSomaFunc.fieldbyname(´valor_inss´).asString;
        TotProv := dm.zspSomaFunc.fieldbyname(´totoprov´).asString;
        TotDesc := dm.zspSomaFunc.fieldbyname(´totdesc´).asString;
        vSaldo := dm.zspSomaFunc.fieldbyname(´saldo´).asString;
      end;

      vProventos := FormatFloat(´,0.00;(,0.00)´,
                      dm.zspSomaFunc.fieldbyname(´Proventos´).AsFloat);
      vDescontos := FormatFloat(´#,0.00;(,0.00)´,
                      dm.zspSomaFunc.fieldbyname(´Descontos´).AsFloat);

      //passa para o listbox o valor do dbgrid
      ListBox2.Items.Add(dm.zspSomaFunc.fieldbyname(´id_formula´).AsString +´ - ´
                         +dm.zspSomaFunc.fieldbyname(´descricao´).AsString +´  ´
                         +dm.zspSomaFunc.fieldbyname(´calculo´).asString +´  ´
                         +vProventos+´  ´
                         +vDescontos);

      dm.zspSomaFunc.Next;

      if dm.zspSomaFunc.Eof or
         (Empresa <> dm.zspSomaFunc.fieldbyname(´id_EMPRESA´).AsString) or
         (Func <> dm.zspSomaFunc.fieldbyname(´id_func´).AsString) then
      begin
        ListBox2.Items.Add(´Desconto do INSS  ´+vINSS);
        ListBox2.Items.Add(´Total dos Proventos     ´+TotProv);
        ListBox2.Items.Add(´Total dos Desconto      ´+TotDesc);
        ListBox2.Items.Add(´Total Liquido da Folha  ´+vSaldo);
        if not dm.zspSomaFunc.Eof then
          ListBox2.Items.Add(StringOfChar(´*´, 80));
      end;
    end;
  finally
     dm.zspSomaFunc.Enablecontrols;
  end;

  ListBox2.Items.Add(StringOfChar(´*´, 32)+´FIM DO RELATORIO´+StringOfChar(´*´, 32));
end;



Responder

Gostei + 0

09/08/2007

Adriano_servitec

Eh isso mesmo amigo.

Muito obrigado

Valeu


Responder

Gostei + 0

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

Aceitar