evet ama döngüden bahsettim yani her 24 günde bir tekrar eden bir tablo
ilgili günü 03.01.2020 çıkarıp farkı mod 24 göre bulduğumuzda tablodan hangi vardiyanın 08:16 olduğunu buluyoruz
mesela 03.02.2020 için bulunan MOD24(03.02.2020 - 03.01.20207) = 7 değerine göre çalışan vardiyalar "4d-4a-4b" yani sabahçı olan "4d" oluyor
0.gün --> 4c-4d-4a
...........
5.gün --> 4c-4d-4a
6.gün --> 4d-4a-4b
...........
11.gün --> 4d-4a-4b
12.gün --> 4a-4b-4c
...........
17.gün --> 4a-4b-4c
18.gün --> 4b-4c-4d
...........
23.gün --> 4b-4c-4d
0.gün --> 4c-4d-4a
bu tabloya göre MOD24(11.12.2020 - 03.01.20207) = 7 olduğu için
11.12.2020 de çalışan sabahçı vardiya yine "4d" oluyor
function arraybul(ilktarih as date, sontarih as date) as Arraylist
dim vardiya as string
dim liste as Arraylist
for ilktarih to sontarih
vardiya = tablodanal(mod((tarih - 03.01.2020),24))
liste.add tarih&vardiya
next
arraybul = liste
end function
function tablodanal(mod as integer) as String
dim result as string
if(mod > -1 and mod < 6) then
result = "4c"
elseif(mod >5 and mod < 12) then
result = "4d"
elseif(mod >5 and mod < 12) then
result = "4a"
elseif(mod >5 and mod < 12) then
result = "4b"
endif
Ben anladiklarimi soyleyeyim
1 - personel tablosu : kisi - vardiya - işe giriş tarihi
2 - vardiya tablosu : tarih - vardiya - saat aralığı ( 8-16 gibi)
3 - eğitim tablosu : tarih - kisi
Tabloları varsa bu 3 tabloyu tek sorguda birleştirip kriterlerle sadece gerekli kişiler alabilirsiniz
personelden : şubat ayında ise başlayanları seçip vardiya tablosuyla birleştirirseniz hangi gun kim çalışıyor bulabilirsiniz ve eğitim tablosunda yer almayanlari kriter olarak belirlerseniz sadece eğitim almamış kişiler kalır , gerisi sadece do while döngüsü ve günü 1 artırma fonksiyonu
Günlerin pazar yada salı olması önemli mi
Zaten her gün çalışan 3 vardiya var
evet eğitim için çünkü eğitimi verecek kişi sadece hafta içi çalışıyor
kotamda yer kaldıysa iki tablo ekleyeyim
sn.berduş
liste tablosunda id, vardiya,işegiriştarihi var
vardiya tablosunda modlara göre saat aralığına göre hangi vardiya sabahçı olacak tablosu var ben fonksiyona değer olarak
(03.02.2020, 28.02.2020) göndereceğim oda bana
hafta içi günlere göre liste verecek mesela
03.02.2020
ahmet
hasan
ali
04.02.2020
mesut
zeynep
fadime
problemin birinci kısmı ilgili tarihlerde sabahçı olacak personeli bulmak
lakin ikinci kısmı var ki işi biraz daha zorlaştırıyor
biz şubat ayı içinde gelecek 400 kişiyi bulduk diyelim
elimizde 20 gün kutusu var
400 kişi kartı var
bu kartları mümkün olduğu kadar kutulara eşit böleceğiz
ali kartını 03.02.2020 kutusuna koyabilmek için şartlarımız
- şubatta girmiş olmalı(şubatın 1 inde girmiş olabilir 28 inde de girmiş olabilir farketmiyor)
- 03.02.2020 de sabahçı vardiya olan "4c" de olmalı
- kutu çok dolu olmamalı
ali kartı 20 kutudan beşine konulabiliyor diyelim ki elimizde son bir kart kaldı bunu
konulabilecek beş kutudan en az dolu olanına koyarız değil mi
bunu accesse anlatmamız lazım ki kutular arasında mümkün olduğu kadar eşit bir dağılım olsun
eğitim tablosu da yok muydu?