Doğrudan seri üretim gibi algılamıştım, şimdi daha doğru anlamış olabilirim. Benzer bir hesaplama daha önce gerekmişti. Tekrar basitçe bir iki test yaptım, çalışıyor gibi. Uzun süre sonra bakınca özellikle karışıl olmasını beğenmedim aslında. Siz de bir kontrol edin, belki işe yarıyabilir.
Fonkisyon 6 gün tam mesai, pazar tatil şeklinde çalılıyor. (aslında çalışma günleri de parametrik yapılabilirmiş, o zaman ihtiyaç değildi) Fonksiyona 4 parametere gönderiyoruz, o da bize saniye cinsinden farkı veriyor.
SureFarki ( BaslamaZamani ; BitisZamani ; MesaiBaslama ; MesaiBitis )
Let (
[ btarih = GetAsDate ( BaslamaZamani ) ;
bsaat = GetAsTime ( BaslamaZamani );
xtarih = GetAsDate ( BitisZamani ) ;
xsaat = GetAsTime ( BitisZamani );
gunsay = xtarih - btarih ;
kalanzamanbugun = MesaiBitis - bsaat ;
mesaisuresi = MesaiBitis - MesaiBaslama ;
gunmax = 7 - DayOfWeek ( BaslamaZamani)
] ;
Case (
gunsay = 0 ; BitisZamani - BaslamaZamani ;
kalanzamanbugun + ( gunsay - 1 ) * mesaisuresi + xsaat - MesaiBaslama
-
If (
gunsay > gunmax ;
( 1 + Int ( ( gunsay - gunmax + 1 ) / 7 ) ) * mesaisuresi
)
)
)
Fonksiyonu bir dosyaya aktrdım ekliyorum. Buradan indirebilirsiniz.