Personel çalışma saatlerini hesaplarken nasıl bir mantık?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Personel çalışma saatlerini hesaplarken nasıl bir mantık?

Mesaj gönderen fduman »

Firebird'den tablodan çektiğim:

Kod: Tümünü seç

ID	PERSONEL_ID	GİRİŞ_ZAMANI	            ÇIKIŞ_ZAMANI
10	1	                10.02.2005 05:45:00	    10.02.2005 09:00:00
14	1	                10.02.2005 12:00:00	    10.02.2005 16:15:00
11	1	                10.02.2005 18:00:00	    11.02.2005 00:15:00 
değerler personelin bir puantaj gününde yaptığı hareketler. Bu personelin 10.02.2005'deki çalışma vardiyası 06:00 ve 16:00 saatleri arası.

- Adam ilk harekette 15 dak. erken gelmiş, işi çıkmış (izin vs.) 09:00 da çıkmış.
- İşini bitirip 12:00'de geri gelmiş ve 15 dak. geç çıkarak vardiyasını tamamlamış.
- Sonra bunu geri çağırmışlar bir iş var diye. Atlamış gelmiş 18:00'da ve ertesi güne sarkan 00:15 de çıkmış gitmiş. ( Ne bahtsız adammış bu :D )

Uygulamada bu adamın, fazla mesaisini, eksik çalışmasını, normal çalışma saatinin dakika olarak hesaplanması isteniyor.

Yanlız bazı kısıtlar var:

- Eğer işe erken gelmişse 15 dakikaya kadar bu fazla mesai sayılmayacak, 15 dakikadan daha fazla bir erken geliş ise fazla mesai yazılacak. Yani örnekteki 05:45 girişinin fazla mesai sayılmaması gerekir.

- Geç çıkmışsa 30 dakikaya kadar olan sayılmayacak, 30 dakikadan sonrası fazla mesai olarak hesaplanacak. Yani örnekteki 16:15 'in 15 dakikası fazla mesai değildir. Ancak 18:00-00:15 arası fazla mesai sayılmalıdır.

SP'ler ile bir algoritma kurmaya çalışıyorum ancak pek başarılı olduğum söylenemez. Nasıl bir mantık ile fazla çalışma, eksik çalışma, normal çalışma saatlerini bulabilirim. Bu konuda tecrübesi olanlar, görüşlerini paylaşırlarsa çok mutlu olurum.

İyi günler dilerim.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7602
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

benzer bir olayı Fahrettin abi daha önce yazmıştı forumda. Arayarak bulabilirsiniz sanırım. Ancak mevcut kodlar Sybase için yazılmıştı. En azından fikir vereceğini umuyorum.

Kolay gelsin.
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

temel mantık olarak;

çalışma türleri
1 günlük vardiyalar
1 haftalık çalışma
1 yıllık çalışma şeklinde bir yapı kurmanız gerekiyor.

a-1 günlük vardiya, çalışma türlerinden oluşmalı. mesela 1 nolu normal çalışma türü. 2 nolu devamsızlık, 3 nolu fazla mesai%50 olsun. Bu durumda vardiyanı tanımlarken 08:00-18:00 arası 1 nolu çalışma(normal çalışma) . 18:00-08:00 arası 3 nolu çalışma(fm %50).
b-çalışma türlerinide bir biri içerisine belli kriterlerle göndermelisin. mesela normal çalışma türünün detayına, bu adam gelmezse , gelmediği kadarını kes demen lazım. buda normal çalışmanın içerisine devamsızlığı tutmak ile alakalı. :!: cümle birz düşük oldu ama genel ve heryerde kullanılan parametrik mantık böyle olmalı.
c-oluşturduğun vardiyalar ile farklı farklı postalar(1 haftalık çalışmalar) tanımlaya bilmelisin. örneğin yukarıda oluşturduğumuz vardiya hafta içi çalışması olsun. birde hafta tatili vardiyası oluşturup(örneğin: 08:00- obür gün 08:00'a kadar fazla mesai (3)) bunu bir haftalık posta haline getirmek. bu durumda 5 gün 1 nolu vardiyaya göre çalışılacak. 2 gün 2 nolu vardiyaya göre çalışılacak. gibi.

Not: programda birden fazla posta tanımlayabilmelisin ayrıca otomatik posta dönüşümlerini yakalatabilmen lazım. Tabi bunun matığını burada açıklamak epey bir yer ve zaman alır.

Soruna gelecek olursak;

kişinin o gün için hangi vardiyada çalıştığını biliyor olmalısın, ayrıca her vardiya tanımının erken giriş, geç giriş,erken çıkış , geç çıkış toleransları olmalı. bu durumda vardiyanın gün dönüm saatine bakarak hesaplama yapılabilir.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sağolasın. Kafamda yeni fikirler oluşturdun. Aylardır boğuştuğum problemlerin çözümünde yeni fikirler verdin.

Bu konuda tecrüben olduğuna göre ilerde birkaç soru daha sormama izin verirsin umarım.

Teşekkürler, iyi günler dilerim.
bgoktas
Kıdemli Üye
Mesajlar: 769
Kayıt: 27 Nis 2004 10:32
Konum: istanbul

Mesaj gönderen bgoktas »

Elimden geldiğince yardımcı olmaya çalışırım... :)
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Tek hareketlerin kontrolünde nasıl bir yaklaşımda bulunabilirim? Yani giriş yapıp, çıkışta kart basmayı unutanlar veya tam tersi gibi.

Ben bunun için şöyle düşündüm ancak pek emin değilim. Emin olmadığım nokta kullanıcı sonradan hatayı nasıl düzeltecek?

Mesela ham hareket verisi şöyle olsun:

Kod: Tümünü seç

PERSONEL_ID   GECIS_ZAMANI
1                     10.02.2005 05:45:00       
1                     10.02.2005 09:00:00
1                     10.02.2005 12:00:00       
1                     10.02.2005 16:15:00
1                     10.02.2005 18:00:00       
1                     11.02.2005 00:15:00
Hareket bilgilerini şu şekilde sırayla tabloya hiçbir kontrol olmadan yazdırıyorum:

Kod: Tümünü seç

ID   PERSONEL_ID GİRİŞ_ZAMANI               ÇIKIŞ_ZAMANI
10   1                   10.02.2005 05:45:00       10.02.2005 09:00:00
14   1                   10.02.2005 12:00:00       10.02.2005 16:15:00
11   1                   10.02.2005 18:00:00       11.02.2005 00:15:00
Sanki personel bir girmiş bir çıkmış gibi farzediyorum. Kart basmayı unutmuşsa bile bir hareket yönüne atanıyor.

Daha sonra giriş_zamanı ve çıkış_zamanı arasındaki süreyi bulup, bu değer maksimum çalışma süresini aşıyorsa burada bir hata vardır, mantığı ile kullanıcıya rapor edip, düzeltmesini bekliyorum.. gibi.

Ancak kullanıcı nasıl düzeltecek. Zorlu bir işlem.
Aslında giriş mi çıkış mı olduğunu algılatabilsem ve giriş yapmayı unutmuşsa giriş_zamanı bölümünü null bıraksam veya çıkış yapmayı unutmuşsa çikiş_zamanı bölümünü. daha güzel ve kolay olacak. ancak bunu nasıl algılatırım bunu çözemedim.

Fikirlerini dinlemekten memnun olurum.

İyi günler dilerim.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

pdks bilgilerini toplayan cihaz bu kontrolu yapıyor olabilir,
mesela bizde bir cihaz vardı giris yaptıktan sonra tekrar giris yaptıgında mesajla uyarıyordu.yada cihazı siz tasarlıyorsanız giris cıkıs yonunu bir sinyal iile belirleyip personele geri bildirim yapabilirsiniz.
eger bir problem olmus ise anında duzeltilir.
ÜŞENME,ERTELEME,VAZGEÇME
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bizdeki geçişlerde bu sinyalin kontrolü yapılamıyor. Çünkü her cihazda turnike yok veya olandan da personel geçmeyebiliyor. Çekiyor kartını gidiyor başka kapıdan geçiyor.

Onun için, yönü anlayabilecek akıllı bir algoritma araştırıyorum. İlginize teşekkürler.
Cevapla