06/03/2006

Problemas Com Geração De Horários capitulo 10

Estou com o seguinte problema:
No form tenho um edit com o dia inicial e outro com a data final e um combo que lista a sala de atendimento e um bitbtn com caption gerar horários.

Quando Testo em um MEMO antes de passar os códigos para o sistema conseguo gerar os horários, porem quando tenho que juntar com a informação da tabela AGENDA(CAMPOS: Tipo de atendimento, dia da semana, hora inicial, hora final, minutos) dá erro pois o sistema não calcula os horários por TIPO de atendimento.

Como Eu fasso para que o sistema gere os horários.

Desde já agradeço a quem me ajudar.


Exvasp

Respostas

06/03/2006

Xandyr

Estou com o seguinte problema: No form tenho um edit com o dia inicial e outro com a data final e um combo que lista a sala de atendimento e um bitbtn com caption gerar horários. Quando Testo em um MEMO antes de passar os códigos para o sistema conseguo gerar os horários, porem quando tenho que juntar com a informação da tabela AGENDA(CAMPOS: Tipo de atendimento, dia da semana, hora inicial, hora final, minutos) dá erro pois o sistema não calcula os horários por TIPO de atendimento. Como Eu fasso para que o sistema gere os horários. Desde já agradeço a quem me ajudar.


Seja mais específico, pois eu não entendi direito o que vc quer fazer, quer inserir esses dados em uma tabela é isso, então é só fz um insert na tabela:
insert into tbl_agenda
(Tipo_de_atendimento, dia_da_semana, hora_inicial, hora_final, minutos))
Values(´Tipo de atendimento´, ´10/12/2005´, ´12:45´, ´13:45´)


Responder Citar

06/03/2006

Rjun

Como Eu [b:e515ac01d3]fasso[/b:e515ac01d3] para que o sistema gere os horários.


Se você não descrever melhor o seu problema ficará dificil conseguir ajuda.


Responder Citar

06/03/2006

Paullsoftware

qual erro que dá?
como vc está fazendo no memo?
como vc está fazendo na hora do erro?
mostre o código, como está tentando fazer... :wink:


Responder Citar

06/03/2006

Exvasp

qual erro que dá? como vc está fazendo no memo? como vc está fazendo na hora do erro? mostre o código, como está tentando fazer... :wink:


Olá!!!
Em primeiro lugar desculpe por não ter conseguido explicar corretamente
vou tentar colocar da forma mais detalhada possivel:

Em segundo lugar não estou conseguindo fazer.

O meu problema é assim

Tenho duas tabelas no banco de dados:
AGENDA: Tabela onde já se encontram cadastrados os tipos de especies de atendimento com os campos:

CODIGO (Int) autoincremento
SALA_COD(int) Tenho salas cadastradas por código: 1, 4, 3 e 2
DIA_SEMANA_COD(int) possuo os dias cadastrados por código: 1(domingo), 2(segunda), 3(terça) e assim por diante até chegar sabado.
ESPECIE_ATENDIMENTO(int) possuo cadastrado por código: 1(clinica médica), 2(ortopedia) e assim por diante
HORA_INICIAL(smalldatetime) possuo cadastrado: 8:00:00, 10:00:00, 13:00:00 e 14:00:00
HORA_FINAL(smalldatetime) possuo cadastrado: 12:00:00, 12:00:00, 16:00:00 e 17:00:00
TEMPO_MINUTOS(smallint) possuo cadastrado os minutos por atendimento: 30, 40 e 50(para o sistema pegar a hora inicial e a hora final e gerar os horários com base nos minutos de intevalo de tempo.

AGENDAMENTO: Tabela para onde os horários de atendimento gerados vão ser armazenados e possui os campos:
Código(int) autoincremento
SALA_COD(Int) recebe a sala cadastrada na tabela anterior DIA_AGENDADO(smalldatetime) recebe o dia gerado pelo sistema por exemplo (10/03/2006) apartir da informação do código do dia(DIA_SEMANA_COD)(int) que se encontra informado na
tabela anterior
HORARIO_AGENDADO(smalldatetime) recebe a hora agendada com base no calculo gerado pelo sistema apartir da informação da tabela anterior por exemplo na tabela anterior tem o campo: SALA_COD(1), HORA_INICIAL(8:00:00), HORA_FINAL(12:00:00), TEMPO_MINUTOS(30), significa que o sistema tera que GERAR os horários de agendamento por exemplo SALA_COD(1) 8:00:00, 8:30:00, 9:00:00, 9:30:00, 10:00:00, 10:30:00, 11:00:00, 11:30:00, 12:00:00
Abaixo coloquei dessa forma para que o entedimento fique mais claro

Estado da TABELA AGENDAMENTO após clicar em gerar horários

SALA_COD - ESPECIE_ATENDIMENTO- DIA_AGENDADO - HORARIO_AGENDADO
1 ----------------------- 2(ortopedia)----------- 10/03/2006 ---------8:00:00
1 ----------------------- 2 ----------------------- 10/03/2006---------8:30:00
1 ----------------------- 2 ----------------------- 10/03/2006----------9:00:00
1------------------------ 2 ----------------------- 10/03/2006----------9:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------10:00:00
1------------------------ 2 ----------------------- 10/03/2006---------10:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------11:00:00
1------------------------ 2 ----------------------- 10/03/2006---------11:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------12:00:00
4 ----------------------- 1(clinica médica)------- 14/03/2006---------9:00:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:20:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:40:00
4------------------------ 1 ----------------------- 14/03/2006---------10:00:00
4------------------------ 1 ----------------------- 14/03/2006---------10:20:00
4------------------------ 1 ----------------------- 14/03/2006---------10:40:00
4------------------------ 1 ----------------------- 14/03/2006---------11:00:00
4------------------------ 1 ----------------------- 14/03/2006---------11:20:00
4------------------------ 1 ------------------------ 14/03/2006--------11:40:00
4------------------------ 1 ----------------------- 14/03/2006---------12:00:00
E assim por diante

No form tenho um Edit (data inicial) por exemplo:03/03/2006 e outro edit (data final) por exemplo: 12/03/2006 e um botão(gerar horários)
Como Eu fasso para que os sistema gere APENAS e dias e os respectivos horarios de atendimento com base nas informações
cadastradas na Tabela AGENDA para armazenar isso na tabela AGENDAMENTO.

Se alguem que ler tiver dúvida por favor poste pois quero tentar solucionar este problea
Agradeço muito, mas muito a todos que tentaram me ajudar a resolver esse problema


Responder Citar

06/03/2006

Exvasp

Desculpa mas havia esquecido o código:

Esse código foi o que tentei por ultimo colocando edits, de data inicial e final e hora inicial e final para testar, mas não consigo fazer.

//Retorna o dia da semana
function DiaSemanaExt (Data: TDate): String;
Const Dia: array [1..7&93; of String =(´Domingo´, ´Segunda-Feira´, ´Terça-Feira´, ´Quarta-Feira´, ´Quinta-Feira´,
           ´Sexta-Feira´, ´Sábado´);
begin
   Result := Dia&91;DayofWeek (Data)&93;;
end;


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);
begin
  DataInicial := StrToDate(Edit1.Text);
  DataFinal := StrToDate(Edit3.Text);
  DataAtual := DataInicial;

  Memo1.Clear;
  while (DataAtual <= DataFinal) do
  begin 
    HoraInicial := StrToTime(Edit2.Text); 
    HoraFinal := StrToTime(Edit4.Text); 
    HoraAtual := HoraInicial;

    while (HoraAtual <= HoraFinal) do
    begin
{::::::::::::::::::::::CÓDIGO PARA GRAVAÇÃO::::::::::::::::::::::::::::::::::::}
      With ClientDataSet1 do
      begin
        close;
        CommandText:=Memo3.Text;
        Open;
        First;
       ClientDataSet2.first;
        Dataminuto := ClientDataSet2MD_AG_MEDI_TEMP_MED.AsInteger;
              While Not Eof do
        begin
              if DiaSemanaExt (DataAtual) = ClientDataSet1DI_SEMA_NOM.Text then
                 Memo1.Lines.Add((ClientDataSet1DI_SEMA_NOM.Text) +´ ´ +  (TimeToStr(HoraAtual)) +´ ´ + (DateToStr(DataAtual) + ´ ´ + (IntToStr(Dataminuto))));
        ClientDataSet2.next;
        Dataminuto := ClientDataSet2MD_AG_MEDI_TEMP_MED.AsInteger;
          Next;
        end;
      end;//
{::::::::::::::::::::::::FIM DO CÓDIGO:::::::::::::::::::::::::::::::::::::::::}
       HoraAtual := IncMinuto(HoraAtual, Dataminuto);
    end;
    DataAtual := IncDia(DataAtual, 1);
  end;
end;

end.



Responder Citar

06/03/2006

Rjun

Desculpa, mas não resisto. [b:9b4074fe7a]FASSO?????[/b:9b4074fe7a]

1) Se a hora inicial e hora final estão em um campo da tabela, por que você esta pegando esses valores dos Edit2 e Edit4?

2) Foi eu que postei esse código. Era para você adaptar a seu caso.

3) No tópico anterior eu havia postado que as funções [b:9b4074fe7a]IncDia[/b:9b4074fe7a] e [b:9b4074fe7a]IncMinuto[/b:9b4074fe7a] já existem no Delphi (IncDays e IncMinute). Não vejo razão para reinventar a roda.

4) Também falei que seu código para saber se o ano bissexto está errado.


Responder Citar

06/03/2006

Exvasp

Desculpa, mas não resisto. [b:6881dfee03]FASSO?????[/b:6881dfee03] 1) Se a hora inicial e hora final estão em um campo da tabela, por que você esta pegando esses valores dos Edit2 e Edit4? 2) Foi eu que postei esse código. Era para você adaptar a seu caso. 3) No tópico anterior eu havia postado que as funções [b:6881dfee03]IncDia[/b:6881dfee03] e [b:6881dfee03]IncMinuto[/b:6881dfee03] já existem no Delphi (IncDays e IncMinute). Não vejo razão para reinventar a roda. 4) Também falei que seu código para saber se o ano bissexto está errado.


Sim o seu código funciona perfeitamente, mas se adapto a este caso que é o que estou precisando ele gera apenas com base no primeiro registro da tabela AGENDA e não gera com base nos demais registros que é o que não estou conseguindo fazer, desculpe mas não sei fazer mesmo.


Responder Citar

06/03/2006

Exvasp

Desculpa, mas não resisto. [b:5d865af54c]FASSO?????[/b:5d865af54c] 1) Se a hora inicial e hora final estão em um campo da tabela, por que você esta pegando esses valores dos Edit2 e Edit4? 2) Foi eu que postei esse código. Era para você adaptar a seu caso. 3) No tópico anterior eu havia postado que as funções [b:5d865af54c]IncDia[/b:5d865af54c] e [b:5d865af54c]IncMinuto[/b:5d865af54c] já existem no Delphi (IncDays e IncMinute). Não vejo razão para reinventar a roda. 4) Também falei que seu código para saber se o ano bissexto está errado.


Coloquei a explicação de forma errada sendo que a correta que quero conseguir é essa:

Após clicar no botão gerar horários o sistema deverá gerar os horários conforme abaixo:
Estado da TABELA AGENDAMENTO após clicar em gerar horários

SALA_COD - ESPECIE_ATENDIMENTO- DIA_AGENDADO - HORARIO_AGENDADO
1 ----------------------- 2(ortopedia)----------- 10/03/2006 ---------8:00:00
1 ----------------------- 2 ----------------------- 10/03/2006---------8:30:00
1 ----------------------- 2 ----------------------- 10/03/2006----------9:00:00
1------------------------ 2 ----------------------- 10/03/2006----------9:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------10:00:00
1------------------------ 2 ----------------------- 10/03/2006---------10:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------11:00:00
1------------------------ 2 ----------------------- 10/03/2006---------11:30:00
1 ----------------------- 2 ----------------------- 10/03/2006---------12:00:00
4 ----------------------- 1(clinica médica)------- 14/03/2006---------9:00:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:20:00
4 ----------------------- 1 ----------------------- 14/03/2006----------9:40:00
4------------------------ 1 ----------------------- 14/03/2006---------10:00:00
4------------------------ 1 ----------------------- 14/03/2006---------10:20:00
4------------------------ 1 ----------------------- 14/03/2006---------10:40:00
4------------------------ 1 ----------------------- 14/03/2006---------11:00:00
4------------------------ 1 ----------------------- 14/03/2006---------11:20:00
4------------------------ 1 ------------------------ 14/03/2006--------11:40:00
4------------------------ 1 ----------------------- 14/03/2006---------12:00:00

É isso que não estou conseguindo fazer.

Se puder me ajudar agradeço muito. mas muito mesmo!!!!


Responder Citar

07/03/2006

Rjun

Você precisa fazer um loop externo para que ele possa percorrer cada registro de sua tabela. Do jeito que está ele só faz para o primeiro registro.


Responder Citar

08/03/2006

Exvasp

Você precisa fazer um loop externo para que ele possa percorrer cada registro de sua tabela. Do jeito que está ele só faz para o primeiro registro.


Muito obrigado por ter respondido!!!
Caso Eu não consiga Eu volto a postar mensagem neste tópico


Responder Citar