Como fazer para o sistema inserir horarios?
13/02/2006
0
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
Posts
13/02/2006
Aroldo Zanela
Não entendi sua questão. Você quer saber como obter a data e hora do sistema? É isso?
13/02/2006
Exvasp
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.
13/02/2006
Aroldo Zanela
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);
13/02/2006
Aroldo Zanela
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.
13/02/2006
Exvasp
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!!!!
13/02/2006
Exvasp
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;
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!!!!
14/02/2006
Exvasp
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;
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
14/02/2006
Aroldo Zanela
Por favor, coloque o código que você alterou para que possamos trabalhar sobre ele.
14/02/2006
Exvasp
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.
Clique aqui para fazer login e interagir na Comunidade :)