Fórum Criar comando if else para registro de Horas #596209

11/08/2018

0

Daew galera
Estou com problema para criar um comando em uma aplicaçoa minha, sou novo no delphi, por isso sinto muita dificuldade aina nessa parte, meu problema eh:
fazer um botao para registro de horas. Meu banco é o firebird, e os campos estao como varchar
tenho 4 campos uma de entrada1, saida1, entrada2,saida2, preciso que ao clicar no botao, ele veja qual foi o horario, e lance ele no campo correto.
Desde ja agradeço!!!
Ismael

Ismael

Responder

Post mais votado

12/08/2018

Bom dia!

Para isso você precisa de Jornadas.

Segue um exemplo : Rápido, analise e adapte de acordo sua necessidade.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    Entrada_1: TDateTimePicker;
    Saida1: TDateTimePicker;
    Entrada_2: TDateTimePicker;
    Saida2: TDateTimePicker;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;

    Procedure Carrega_Jornadas_BD(ID_Funcionário:integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  Var Jornada_Entrada1,
      Jornada_Entrada2,
      Jornada_Saida1,
      Jornada_Saida2:TTime;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
 if Entrada_1.Time<>Jornada_Entrada1 then
 Entrada_1.Time:=Jornada_Entrada1;

 if Saida1.Time<>Jornada_Saida1 then
 Saida1.Time:=Jornada_Saida2;

  if Entrada_2.Time<>Jornada_Entrada2 then
 Entrada_2.Time:=Jornada_Entrada2;

  if Saida2.Time<>Jornada_Saida2 then
 Saida2.Time:=Jornada_Saida2;

end;

procedure TForm1.Carrega_Jornadas_BD(ID_Funcionário: integer);
begin
// Você precisará de um cadastro de Jornadas e posteriormente enquadrar os funcionários nesta jornada.
// Assim que abrir o form você seleciona um funcionário e faz um select

//Exemplo

Jornada_Entrada1:=StrToTime('08:00:00');
Label1.Caption:=TimeToStr(Jornada_Entrada1);

Jornada_Saida1:=StrToTime('12:00:00');

Label2.Caption:=TimeToStr(Jornada_Saida1);

Jornada_Entrada2:=StrToTime('13:00:00');
Label3.Caption:=TimeToStr(Jornada_Entrada2);

Jornada_Saida2:=StrToTime('18:00:00');
Label4.Caption:=TimeToStr(Jornada_Saida2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Carrega_Jornadas_BD(1); // Este deve ser o código do funcionário selecionado
end;

end.

Raimundo Pereira

Raimundo Pereira
Responder

Gostei + 2

Mais Posts

11/08/2018

Ismael

Acredito que terá que fazer uma pesquisa pelo código do funcionário, mais a data tinha mas como fazer eu não sei.
Responder

Gostei + 0

12/08/2018

Ismael

P2 Técnico

a questao da jornada seria nescesaria??

pois o funcionario chegaria vamos supor alem do horario das 08:00, vamos supor que o funcionario chegue as 09:00
ele ira subentender que esse seria o horario de chegada dele ??
Responder

Gostei + 0

12/08/2018

Ismael

P2 Técnico

a questão da jornada seria necessitaria??

pois o funcionario chegaria vamos supor alem do horario das 08:00, vamos supor que o funcionario chegue as 09:00
ele ira subentender que esse seria o horário de chegada dele ??


pois eu preciso que ele pegue a hora do sistema
Responder

Gostei + 0

12/08/2018

Raimundo Pereira

Geralmente os relatórios de pontos, quando é impresso pelo RH, existe um campo observação.

Quando o funcionário marca antes o sistema ao gerar o relatório coloca no campo de observação marcação antecipada.
Quando o funcionário marca depois o sistema ao gerar o relatório coloca no campo de observação marcação atrasada.

Isso tudo vem da validação da jornada e marcação, você me diz se é necessário ou não.

Como a questão inicial era if e else nos horários, disponibilizei um pequeno exemplo.
Para que o fórum possa ajudar mais, especifique do que você precisa agora e nos disponibilize uma parte do código para que um de nois possa analisar e contribuir com ideias.

"P2 Técnico a questão da jornada seria necessitaria?? pois o funcionario chegaria vamos supor alem do horario das 08:00, vamos supor que o funcionario chegue as 09:00 ele ira subentender que esse seria o horário de chegada dele ??"

Você precisa especificar o que você precisa:
No caso acima o sistema iria setar sim para 08:00

Para setar para o horário atual, basta realizar o now

Jornada_Entrada1:=(now); // Now é igual o horário de agora.
Responder

Gostei + 1

15/08/2018

Ismael

as jornadas de trabalho eu não poderia criar direto na tabela do fucionario? ou faço uma tabela separada ?
Responder

Gostei + 0

15/08/2018

Ismael

Bom dia!

Para isso você precisa de Jornadas.

Segue um exemplo : Rápido, analise e adapte de acordo sua necessidade.
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    Entrada_1: TDateTimePicker;
    Saida1: TDateTimePicker;
    Entrada_2: TDateTimePicker;
    Saida2: TDateTimePicker;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;

    Procedure Carrega_Jornadas_BD(ID_Funcionário:integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  Var Jornada_Entrada1,
      Jornada_Entrada2,
      Jornada_Saida1,
      Jornada_Saida2:TTime;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
 if Entrada_1.Time<>Jornada_Entrada1 then
 Entrada_1.Time:=Jornada_Entrada1;

 if Saida1.Time<>Jornada_Saida1 then
 Saida1.Time:=Jornada_Saida2;

  if Entrada_2.Time<>Jornada_Entrada2 then
 Entrada_2.Time:=Jornada_Entrada2;

  if Saida2.Time<>Jornada_Saida2 then
 Saida2.Time:=Jornada_Saida2;

end;

procedure TForm1.Carrega_Jornadas_BD(ID_Funcionário: integer);
begin
// Você precisará de um cadastro de Jornadas e posteriormente enquadrar os funcionários nesta jornada.
// Assim que abrir o form você seleciona um funcionário e faz um select

//Exemplo

Jornada_Entrada1:=StrToTime('08:00:00');
Label1.Caption:=TimeToStr(Jornada_Entrada1);

Jornada_Saida1:=StrToTime('12:00:00');

Label2.Caption:=TimeToStr(Jornada_Saida1);

Jornada_Entrada2:=StrToTime('13:00:00');
Label3.Caption:=TimeToStr(Jornada_Entrada2);

Jornada_Saida2:=StrToTime('18:00:00');
Label4.Caption:=TimeToStr(Jornada_Saida2);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Carrega_Jornadas_BD(1); // Este deve ser o código do funcionário selecionado
end;

end.
Responder

Gostei + 0

15/08/2018

Ismael

Me passa um contato seu de Skype , dai podemos trocar umas ideias melhor
Responder

Gostei + 0

15/08/2018

Raimundo Pereira

SAC@P2TECNICO.COM.BR
Responder

Gostei + 0

15/08/2018

Ismael

Var Jornada_Entrada1,
Jornada_Entrada2,
Jornada_Saida1,
Jornada_Saida2:Ttime;

implementation

uses Udm_dados, UHoras;

{$R *.dfm}

procedure TfrmPonto.btPontoClick(Sender: TObject);

begin
if dm_dados.tbl_horasHORAS_ENTRADA_P1.time<>Jornada_Entrada1 then
dm_dados.tbl_horasHORAS_ENTRADA_P1:= Jornada_Entrada1;
showmessage('Bom Dia!/n Otimo trabalho') ;

if dm_dados.tbl_horasHORAS_SAIDA_P1.time<>Jornada_Saida1 then
dm_dados.tbl_horasHORAS_SAIDA_P1:=Jornada_Saida2;
showmessage(' Otimo Almoço') ;

if dm_dados.tbl_horasHORAS_ENTRADA_P2.time<>Jornada_Entrada2 then
dm_dados.tbl_horasHORAS_ENTRADA_P2:=Jornada_Entrada2;
showmessage('Boa Tarde /n Otimo Trabalho') ;

if dm_dados.tbl_horasHORAS_SAIDA_P2.time<>Jornada_Saida2 then
dm_dados.tbl_horasHORAS_SAIDA_P2:=Jornada_Saida2;
showmessage('Otimo Descanso') ;


isso aqui foi o erro que estourou

Checking project dependencies...
Compiling Ponto.dproj (Debug configuration)
[DCC Error] UPonto.pas(82): E2003 Undeclared identifier: 'time'
[DCC Error] UPonto.pas(83): E2010 Incompatible types: 'TIBStringField' and 'TTime'
[DCC Error] UPonto.pas(86): E2003 Undeclared identifier: 'time'
[DCC Error] UPonto.pas(87): E2010 Incompatible types: 'TIBStringField' and 'TTime'
[DCC Error] UPonto.pas(90): E2003 Undeclared identifier: 'time'
[DCC Error] UPonto.pas(91): E2010 Incompatible types: 'TIBStringField' and 'TTime'
[DCC Error] UPonto.pas(94): E2003 Undeclared identifier: 'time'
[DCC Error] UPonto.pas(95): E2010 Incompatible types: 'TIBStringField' and 'TTime'
[DCC Error] UPonto.pas(132): E2250 There is no overloaded version of 'StrToTime' that can be called with these arguments
[DCC Error] UPonto.pas(135): E2250 There is no overloaded version of 'StrToTime' that can be called with these arguments
[DCC Error] UPonto.pas(139): E2250 There is no overloaded version of 'StrToTime' that can be called with these arguments
[DCC Error] UPonto.pas(142): E2250 There is no overloaded version of 'StrToTime' that can be called with these arguments
[DCC Fatal Error] UPrincipal.pas(52): F2063 Could not compile used unit 'UPonto.pas'
Failed
Responder

Gostei + 0

16/08/2018

Raimundo Pereira

if dm_dados.tbl_horasHORAS_SAIDA_P1.time<>Jornada_Saida1 then
dm_dados.tbl_horasHORAS_SAIDA_P1.value:=Jornada_Saida2;
Responder

Gostei + 1

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

Aceitar