Como fazer para o sistema inserir horarios?

13/02/2006

Olá, Tenho uma dúvida:
Tenho um formulário com campo: Dia inicial, dia final, hora inicial, hora final e tempo por agendamento em minutos.
O sistema deverá calcular assim: informo o dia inicial e o dia final, hora inicial de atendimento e hora final de atendimento e tempo por agendamento.
Como fazer o sistema gerar o horarios de agendamento gravando na tabela?

Por exemplo informo dia incial: 01/03/2006 e dia final 03/03/2006 e hora incial de atendimento 13h00 e hora final 16h00 e tempo por atendimento 30 minutos.

A todos que puderem me ajudar agradeço muito!!!


Exvasp

Respostas

13/02/2006

Sremulador

tente contactenar....


Responder Citar

13/02/2006

Aroldo Zanela

Colega,

Não entendi sua questão. Você quer saber como obter a data e hora do sistema? É isso?


Responder Citar

13/02/2006

Exvasp

[quote:6f2f425b1d=´Aroldo Zanela´]Colega,

Não entendi sua questão. Você quer saber como obter a data e hora do sistema? É isso?[/quote:6f2f425b1d]

Obrigado por ter lido minha pergunta, desculpe por não ter explicado melhor.

É assim:

Preciso que o sistema insira na tabela os horários de agendamento (Clicando no botão criar horários que coloquei no form) assim fazendo esse calculo com base nos edits que tenho no form, sendo assim:


Tenho um formulário com um Edit para data inicial (01/03/2006) + edits com o horario de trabalho do atendente(hora de inicio(8:00) e outro informando a hora final(15:00)) e outro edit para informar a data final(03/03/2006) e mais outro edit para informar ao sistema que ele deverá colocar os intervalos de atendimento de acordo a quantidade de minutos que o atendente informar Exemplo intervalos de 30 em 30 minutos , gostaria que me ajudasse como fazer esse form gerar os horarios gravando no banco de dados. Uso SQL Server 2000.


Responder Citar

13/02/2006

Aroldo Zanela

Colega,

Adicione DateUtils na lista de uses de seu formulário.

  dtpINICIAL.Time  := StrToTime(medtINICIAL.Text);
  dtpFINAL.Time     := StrToTime(medtFINAL.Text);

  mmoAGENDA.Lines.Clear;
  while dtpINICIAL.DateTime < dtpFINAL.DateTime do
  begin
    mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
    dtpINICIAL.Time:= IncMinute(dtpINICIAL.DateTime, 30);
  end;


Onde:

dtpINICIAL, dtpFINAL = DateTimePicker (Win32);
medtINICIAL, medtFINAL = MaskEdit (Additional);
mmoAGENDA = Memo (Standard);


Responder Citar

13/02/2006

Aroldo Zanela

Colega,

Correção:

var Data: TDateTime;
begin
  dtpINICIAL.Time:= StrToTime(medtINICIAL.Text);
  dtpFINAL.Time     := StrToTime(medtFINAL.Text);
  mmoAGENDA.Lines.Clear;
  while dtpINICIAL.DateTime < dtpFINAL.DateTime do
  begin
    Data := dtpINICIAL.DateTime;
    dtpINICIAL.Time:= IncMinute(dtpINICIAL.DateTime, 30);
    if dtpINICIAL.DateTime<Data then
    dtpINICIAL.DateTime := IncDay(dtpINICIAL.DateTime,1);
    mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
  end;
end;


Tem um BUG com a troca de datas ainda, mas estou sem tempo agora para corrigir.


Responder Citar

13/02/2006

Exvasp

[quote:b8c04b0d75=´Aroldo Zanela´]Colega,

Correção:

var Data: TDateTime;
begin
  dtpINICIAL.Time:= StrToTime(medtINICIAL.Text);
  dtpFINAL.Time     := StrToTime(medtFINAL.Text);
  mmoAGENDA.Lines.Clear;
  while dtpINICIAL.DateTime < dtpFINAL.DateTime do
  begin
    Data := dtpINICIAL.DateTime;
    dtpINICIAL.Time:= IncMinute(dtpINICIAL.DateTime, 30);
    if dtpINICIAL.DateTime<Data then
    dtpINICIAL.DateTime := IncDay(dtpINICIAL.DateTime,1);
    mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
  end;
end;


Tem um BUG com a troca de datas ainda, mas estou sem tempo agora para corrigir.[/quote:b8c04b0d75]


Obrigado por ter me ajudado!!!!
Muito Obrigado Mesmo!!!!


Responder Citar

13/02/2006

Exvasp

[quote:4088563715=´Aroldo Zanela´]Colega, Correção:
var Data: TDateTime;
begin
  dtpINICIAL.Time:= StrToTime(medtINICIAL.Text);
  dtpFINAL.Time     := StrToTime(medtFINAL.Text);
  mmoAGENDA.Lines.Clear;
  while dtpINICIAL.DateTime < dtpFINAL.DateTime do
  begin
    Data := dtpINICIAL.DateTime;
    dtpINICIAL.Time:= IncMinute(dtpINICIAL.DateTime, 30);
    if dtpINICIAL.DateTime<Data then
    dtpINICIAL.DateTime := IncDay(dtpINICIAL.DateTime,1);
    mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
  end;
end;
Tem um BUG com a troca de datas ainda, mas estou sem tempo agora para corrigir.



Obrigado por ter me ajudado!!!!
Muito Obrigado Mesmo!!!![/quote:4088563715]


Funcionou acrescentei as funções: IncDia + IncMinuto

Deus lhe pague!!!!
Vc me ajudou e muito pois estava muito preocupado com isso pois sou novo na empresa!!!!


Responder Citar

14/02/2006

Exvasp

[quote:24348edc39=´EXVASP´][quote:24348edc39=´Aroldo Zanela´]Colega, Correção:
var Data: TDateTime;
begin
  dtpINICIAL.Time:= StrToTime(medtINICIAL.Text);
  dtpFINAL.Time     := StrToTime(medtFINAL.Text);
  mmoAGENDA.Lines.Clear;
  while dtpINICIAL.DateTime < dtpFINAL.DateTime do
  begin
    Data := dtpINICIAL.DateTime;
    dtpINICIAL.Time:= IncMinute(dtpINICIAL.DateTime, 30);
    if dtpINICIAL.DateTime<Data then
    dtpINICIAL.DateTime := IncDay(dtpINICIAL.DateTime,1);
    mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
  end;
end;
Tem um BUG com a troca de datas ainda, mas estou sem tempo agora para corrigir.



Obrigado por ter me ajudado!!!!
Muito Obrigado Mesmo!!!![/quote:24348edc39]


Funcionou acrescentei as funções: IncDia + IncMinuto

Deus lhe pague!!!!
Vc me ajudou e muito pois estava muito preocupado com isso pois sou novo na empresa!!!![/quote:24348edc39]

Aroldo desculpe te encomodar mais uma vez, mas se puder me ajudar fico imensamente agradecido.

Como Eu fasso para o código acima apenas informar os atendimentos no horario de trabalho do atendente, já que o código acima continua gerando horário de atendimentos depois expediente do funcionario até chegar a data final?

O funcionário trabalha diariamente das 12:30 até as 16:00
Exemplo como está gerando:
13/02/2006 12:30:00
13/02/2006 13:00:00
13/02/2006 13:30:00
13/02/2006 14:00:00
13/02/2006 14:30:00
13/02/2006 15:00:00
13/02/2006 15:30:00
13/02/2006 16:00:00
13/02/2006 16:30:00
13/02/2006 17:00:00
13/02/2006 17:30:00
13/02/2006 18:00:00
13/02/2006 18:30:00
13/02/2006 19:00:00
13/02/2006 19:30:00
13/02/2006 20:00:00
13/02/2006 20:30:00
13/02/2006 21:00:00
13/02/2006 21:30:00
13/02/2006 22:00:00
13/02/2006 22:30:00
13/02/2006 23:00:00
13/02/2006 23:30:00
14/02/2006
14/02/2006 00:30:00
14/02/2006 01:00:00
14/02/2006 01:30:00
14/02/2006 02:00:00
14/02/2006 02:30:00
14/02/2006 03:00:00
14/02/2006 03:30:00
14/02/2006 04:00:00
14/02/2006 04:30:00
14/02/2006 05:00:00
14/02/2006 05:30:00
14/02/2006 06:00:00
14/02/2006 06:30:00
14/02/2006 07:00:00
14/02/2006 07:30:00
14/02/2006 08:00:00
14/02/2006 08:30:00
14/02/2006 09:00:00
14/02/2006 09:30:00
14/02/2006 10:00:00
14/02/2006 10:30:00
14/02/2006 11:00:00
14/02/2006 11:30:00
14/02/2006 12:00:00
14/02/2006 12:30:00
14/02/2006 13:00:00
14/02/2006 13:30:00
14/02/2006 14:00:00
14/02/2006 14:30:00
14/02/2006 15:00:00
14/02/2006 15:30:00
14/02/2006 16:00:00


Responder Citar

14/02/2006

Aroldo Zanela

Colega,

Por favor, coloque o código que você alterou para que possamos trabalhar sobre ele.


Responder Citar

14/02/2006

Exvasp

[quote:55926108bc=´Aroldo Zanela´]Colega,

Por favor, coloque o código que você alterou para que possamos trabalhar sobre ele.[/quote:55926108bc]

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
mmoAGENDA: TMemo;
dtpINICIAL: TDateTimePicker;
dtpFINAL: TDateTimePicker;
medtINICIAL: TMaskEdit;
medtFINAL: TMaskEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function AnoBis (Ano: Integer): Boolean;
var
Resto: Integer;
begin
Resto := Ano mod 4;
if Resto = 0 then Result := True //o ano é bissexto
else Result := False;//o ano não é bissexto
end;

function DiasNoMes (Data: TDate): Integer;
var
Y, M, D: Word;
Dias: Integer;
begin
Dias := 0;
DecodeDate (Data, Y, M, D);
//Especificando o número de dias de cada mês.
if M = 1 then Dias := 31;
if M = 2 then
begin
if AnoBis (Y) then Dias := 29
else Dias := 28;
end;
if M = 3 then Dias := 31;
if M = 4 then Dias := 30;
if M = 5 then Dias := 31;
if M = 6 then Dias := 30;
if M = 7 then Dias := 31;
if M = 8 then Dias := 31;
if M = 9 then Dias := 30;
if M = 10 then Dias := 31;
if M = 11 then Dias := 30;
if M = 12 then Dias := 31;
//Retornando o número do mês especificado.
Result := Dias;
end;

function IncDia (Data: TDate; Valor: Integer): TDate;
var
A, M, D: Word;
begin
DecodeDate (Data, A, M, D);
D := D + Valor;
if D > DiasNoMes (Data) then
begin
D := 1;
M := M+1;
end;
if M = 13 then
begin
M := 1;
A := A +1;
end;
Result := StrToDate (FormatFloat (´00/´, D)+FormatFloat (´00/´, M)+IntToStr (A));
end;




function IncMinuto (Hora: TTime; Valor: Integer): TTime;
var
H, M, S, Ms: Word;
begin
DecodeTime (Hora, H, M, S, Ms);
M := M + Valor;
if M = 60 then
begin
M := 0;
H := H +1;
end;
if H = 24 then H := 0;
Result := StrToTime (FormatFloat (´00:´,H)+FormatFloat (´00:´,M)+FormatFloat (´00´,S));
end;

procedure TForm1.Button1Click(Sender: TObject);
var Data: TDateTime;
begin
dtpINICIAL.Time := StrToTime(medtINICIAL.Text);
dtpFINAL.Time := StrToTime(medtFINAL.Text);
mmoAGENDA.Lines.Clear;
while dtpINICIAL.DateTime < dtpFINAL.DateTime do
begin
Data := dtpINICIAL.DateTime;
dtpINICIAL.Time := IncMinuto(dtpINICIAL.DateTime, 30);
if dtpINICIAL.DateTime<Data then
dtpINICIAL.DateTime := IncDia(dtpINICIAL.DateTime,1);
mmoAGENDA.Lines.Add(DateTimeToStr(dtpINICIAL.DateTime));
end;
end;


end.


Responder Citar