Puantaj Toplama İşlemi

1 2
18/02/2019, 14:59

IceMan7

Sevgili Hocalarım;
Bilgi birikimlerinizden yıllardır faydalanıyoruz hepinize öncelikle teşekkür ederim.
Sizlerden ricam yine bu siteden hocalarımdan sayın ozguryasin hocamın yıllar evvel paylaşmış olduğu PUANTAJ programını hobi amaçlı geliştirmek istiyorum. Öğrenme ve bilgi edinme adına bir çalışma yapmak istiyorum. Yapmak istediğim kısımları aşağıda açıklamaya çalışacağım.

1-Puantaj girişindeki değerleri 1 2 gibi rakamlar ile değil "X","Yİ","Mİ","İ","D", Gibi değerler girmek istiyorum. puantajda çalışanın toplam geldiği günler toplarken şu işlemi yapsın istiyorum.

X=Çalıştığı Gün
İ= Yıllık İzin
Y=Yarım Gün Yıllık İzin
Mİ= Mazeret İzni
D=Devamsız Gelmediği Gün
Ü=Ücretsiz İzin
H=Hafta Tatili
RT=Resmi Tatil
R=Raporlu
HR=Raporlu(3 Gün ve üzerindeki raporların yazıldığı durumlarda)

Yapmak istediğim şöyle Personelin geldiği günlerin ve hasta yada raporlu yada ücretsiz izin aldığı durumlarda şu işlemi yapsın istiyorum.
excel de kullandığım puantaj formunu özgür hocamın yaptığı Access formunda kullanmak istiyorum.
Hem Excel hemde acces örnekleri ektedir.

Not: Avans gibi parasal kısımların hiçbirini eklemeye gerek duymuyorum çünkü sadece personelin raporlarını ve geldiği gelmediği günleri saysın yeterli.
18/02/2019, 16:30

ozanakkaya

Merhaba, X için Gün alanına X Sayısını toplatmak için,

- G01 den G31'e kadar tüm metin kutularının isimlerini değiştir, metin kutusunun denetim kaynağı G11 ise metin kutusunun adı da G11 olmalı, şu anda alt formda denetim kaynağı G10 olan metin kutusunun adı Metin107. Metin107 değil G10 olacak.

- Calisan_Puantaj_Hes tablosundaki G01, G02.... G31 şeklindeki alanların veri türünü metin olarak değiştir. bu tabloya Gun adında yeni alan ekle,

- Calisan_Puantaj_Hes 1 isimli alt formun satır kaynağına eklenen Gun : G01 + G02 şeklinde alan var bu alanı iptal et, yerine tablodaki Gun alanını ekle.

- Calisan_Puantaj_Hes 1 isimli alt forma 

Sub Hesapla()

Dim GSayi As Integer

GSayi = 0
For ss = 1 To 31

ss = Format(ss, "00")


If Controls("G" & ss).Value = "X" Then

GSayi = GSayi + 1

End If

Next ss

Me.Gun = GSayi

End Sub

kodu ekle,

Alt formun geçerli olduğunda olayına ve G01, G02 isimli metin kutularının (G31'e kadar) güncelleştirme sonrasında olayına
Call Hesapla

Kodu ekle. Bu şekilde, metin kutusuna X yazdığında Gun alanına X toplamını yazar.

Anlaşılmayan durum var ise belirtin.
22/02/2019, 10:24

IceMan7

Ozan Hocam kolay gelsin hayırlı işler dilerim.
Dediklerinizi yaptım fakat sanırım bi yeri yanlış mı yaptım nedir anlamadım yaptığım örnek ektedir. acaba yardımcı olabilirmisiniz?
daha sonrasında yövmiyeleri felan silecem onların yerine raporlu hasta raporlu gibi devamsız gibi alanlar ekleyecem ama öncelikli olarak X leri toplatmayı beceremedim. saygılarımla.
22/02/2019, 12:40

ozanakkaya

1- ) Yazdığınız kod

Private Sub Form_Current()
Sub Hesapla()

Dim GSayi As Integer

GSayi = 0
For ss = 1 To 31

ss = Format(ss, "00")


If Controls("G" & ss).Value = "X" Then

GSayi = GSayi + 1

End If

Next ss

Me.Gun = GSayi

End Sub

bu şekilde kod yazım şekli yok. Doğru kod;

Private Sub Form_Current()
Call Hesapla
End Sub

Sub Hesapla()

Dim GSayi As Integer

GSayi = 0
For ss = 1 To 31

ss = Format(ss, "00")


If Controls("G" & ss).Value = "X" Then

GSayi = GSayi + 1

End If

Next ss

Me.Gun = GSayi

End Sub

Ayrıca, formdaki alt formunun kaynak nesnesi "Calisan_Puantaj_Hes" isimli form olmasına rağmen siz kodu "Calisan_Puantaj_Hes1" isimli alt forma eklemişsiniz.

2- Önceki mesajımda "Calisan_Puantaj_Hes 1 isimli alt formun satır kaynağına eklenen Gun : G01 + G02 şeklinde alan var bu alanı iptal et, yerine tablodaki Gun alanını ekle." şeklinde ibare var. Eklediğiniz örnekte alt formun satır kaynağındaki sorguda halen 

Gun: ([G01]+[G02]+[G03]+[G04]+[G05]+[G06]+[G07]+[G08]+[G09]+[G10]+[G11]+[G12]+[G13]+[G14]+[G15]+[G16]+[G17]+[G18]+[G19]+[G20]+[G21]+[G22]+[G23]+[G24]+[G25]+[G26]+[G27]+[G28]+[G29]+[G30]+[G31])*1

Şeklinde kod mevcut, bunun silinip Sadece Gun yazılması gerekiyor.

Bunları düzeltirseniz çalışır,
22/02/2019, 16:25

IceMan7

Ozan Hocam;
Dediklerinizi yaptım sanırım oldu bi kontrol edebilir misiniz?

Şimdi bir sonraki aşama olan Gun= "X"+"H"+"RT"+"İ"+"Mİ"+"R" Harfleri olsa bile Toplam gün sayımız 30 ise yine 30 kalması lazım. Yani ahmet kişisinin 1 ay içinde tüm günleri "x" de olsa günlerinin içinde hem "x" hemde "i" harfleri olsa bile toplam gün sayısının değişmemesi 30 olması lazım.

Ayrıca diğer bir aşama ise eğer günlerin içinde yukardaki yazdıklarımın dışında "HR","D","Ü" Yazdığımız zaman toplam gün sayısınından düşmesini istiyorum. Yardımcı olabilirmisiniz. Örnek ektedir.
22/02/2019, 18:00

ozanakkaya

(22/02/2019, 16:25)IceMan7 yazdı: Şimdi bir sonraki aşama olan Gun= "X"+"H"+"RT"+"İ"+"Mİ"+"R" Harfleri olsa bile Toplam gün sayımız 30 ise yine 30 kalması lazım. Yani ahmet kişisinin 1 ay içinde tüm günleri "x" de olsa günlerinin içinde hem "x" hemde "i" harfleri olsa bile toplam gün sayısının değişmemesi 30 olması lazım.


If Controls("G" & ss).Value = "X" Then

üstteki kodu 


If Controls("G" & ss).Value = "X" or Controls("G" & ss).Value = "h" Then


şeklinde değiştirirsen X ile birlikte h yi de sayar, bu koda diğer koşulları da eklemelisiniz.

(22/02/2019, 16:25)IceMan7 yazdı: Ayrıca diğer bir aşama ise eğer günlerin içinde yukardaki yazdıklarımın dışında "HR","D","Ü" Yazdığımız zaman toplam gün sayısınından düşmesini istiyorum.

Hesaplama işlemindeki koşulda HR, D ve Ü harfleri sayılmadığı için zaten gün hesabına dahil olmuyor.
1 2