GARANTIR DESCONTO

Fórum datas, presciso de filtrar as datas em mês 1,2,3... #352987

04/02/2008

0

e aí. blz ? estou numa parte do meu programa onde presciso calcular o caixa do mês, explicando melhor.

mês 01
caixa do dia 1 = 10
caixa do dia 2 = 05
caixa do dia 3 = 35

=saldo 50,00

mês 02
xxxxxxx
xxxxxxx
xxxxxxx

=saldo 300,00

mês 03
xxxxxxx
xxxxxxx
xxxxxxx

= saldo 150,00

e por aí vai, tenho uma tabela onde todos os dias entro com valores referente ao caixa do dia e nesta tabela existe os campos de date, o que eu quero seria isso, um jeito de filtar a tabela que recebeu os valores pelo campo date, e o filtro seria de forma que todos o regidtros dakele mês ficassem na ordem por data. ou seja o filtro teria que determinar todos os meses e os valores decorrente akele mês, más presciso inicialmente desta função função de filtar as datas.

vlw


Gigatel

Gigatel

Responder

Posts

04/02/2008

Darkrme

Amigo, eu fiz um relatorio... assim..

eu tenho uma tabela... com um campo data_fechamento.. ou seja.. esse campo guarda qnd uma conta foi finalizada... ai eu precisava saber... o saldo atual do mes... qnt teve de entradas.. e qnt teve de saida... e o saldo final do mes...

a minha função ficou mais ou menos assim:

var saldo_anterior : array[1..12] of real;
    saldo_atual : array[1..12] of real;
    entradas : array[1..12] of real;
    saidas : array[1..12] of real;
    entrada_anual, saida_anual, saldo_anual : real;
    i,j, contador : integer;
    vencimento_inicial, vencimento_final, mes, dia, ano, conta_corrente : String;
begin
  if (Edit1.Text = ´´) or (MaskEdit1.Text = ´    ´) or (ComboBox1.Text = ´Escolha...´) then
  begin
    Application.MessageBox(´Você deve digitar o Saldo Anterior e o Ano para gerar o Relatório!´,
    ´Atenção´,MB_ICONEXCLAMATION+MB_OK);
    Edit1.SetFocus;
  end
  else begin
    saldo_anterior[1] := StrToInt(Edit1.Text);
    contador := 1;
    ano := MaskEdit1.Text;
    conta_corrente := ComboBox1.Text;
    for i := 1 to 12 do
      begin
        saidas[i] := 0;
        entradas[i] := 0;
        if i < 10 then
        begin
          mes :=´0´+IntToStr(i);
        end
        else begin
          mes := IntToStr(i);
        end;
        dia := IntToStr(DiasPorMes(StrToInt(ano), i));
        vencimento_inicial := ´01/´ + mes +´/´ + ano;
        vencimento_final := dia + ´/´ + mes + ´/´ + ano;

        dm.QryRelatorioCaixaMensal.Open;
        dm.QryRelatorioCaixaMensal.Close;
        dm.QryRelatorioCaixaMensal.SQL.Text :=
        ´SELECT valor_total, pagar_receber, data_vencimento FROM conta_pagar_receber ´ +
        ´WHERE data_fechamento >= ´´´ + vencimento_inicial + ´´´´ +
        ´and data_fechamento <= ´´´ + vencimento_final + ´´´ and status = ´´False´´´ +
        ´ and numero_conta = ´´´ + conta_corrente + ´´´´;
        dm.QryRelatorioCaixaMensal.Open;
        if dm.QryRelatorioCaixaMensal.RecordCount > 0 then
        begin
          dm.QryRelatorioCaixaMensal.First;
          for j := 1 to dm.QryRelatorioCaixaMensal.RecordCount do
            begin
              if dm.QryRelatorioCaixaMensalpagar_receber.Value = ´Pagar´ then
              begin
                saidas[i] := (saidas[i] + dm.QryRelatorioCaixaMensalvalor_total.Value);
              end
              else begin
                entradas[i] := (entradas[i] + dm.QryRelatorioCaixaMensalvalor_total.Value);
              end;
              dm.QryRelatorioCaixaMensal.Next;
            end;
        end;
        contador := contador + 1;
        saldo_atual[i] := (saldo_anterior[i] + entradas[i]) - saidas[i];
        if contador < 13 then
        begin
          saldo_anterior[contador] := saldo_atual[i];
        end;
      end;
    entrada_anual := 0;
    saida_anual := 0;
    for i := 1 to 12 do
      begin
        entrada_anual := entrada_anual + entradas[i];
        saida_anual := saida_anual + saidas[i];
      end;
    saldo_anual := entrada_anual - saida_anual;


Bom.. eu acho que deve ser mais ou menos isso que vc ta precisando.. ali eu uso a função: DiasPorMes, nessa linha:
        dia := IntToStr(DiasPorMes(StrToInt(ano), i));


Essa função eh a seguinte:
function DiasPorMes(Ayear, AMonth: Integer): Integer;
const DaysInMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
Result := DaysInMonth[AMonth];
if (AMonth = 2) and AnoBiSexto(AYear) then
Inc(Result);
end;


de uma olhada no codigo.. espero ter ajudado =)


Responder

Gostei + 0

04/02/2008

Darkrme

Suto com a funcao DiasPorMes tem a do ano bisexto tb:
function AnoBiSexto(Ayear: Integer): Boolean;
begin
// Verifica se o ano é Bi-Sexto
Result := (AYear mod 4 = 0) and ((AYear mod 100 <> 0) or
(AYear mod 400 = 0));
end;



Responder

Gostei + 0

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

Aceitar