1

Konu: Aylara Göre Toplam İzin

Selamlar.
Özetler aşağıdaki datadan aylara göre toplam kullanılan izin raporu almak istiyorum.
Burada aşamadığım konu  2 den fazla ayı içeren izin kayıtlarında aylara nasıl bölebilirim?
Şimdiden teşekkürler.

CreateCursor_CRSONUC()


Procedure CreateCursor_CRSONUC
LOCAL lcData, lcTemp
lcTemp = SYS(2015)+'.tmp'
TEXT TO m.lcData noshow
18,"Vizite",10/02/2012 00:00:00,10/02/2012 00:00:00,0,0,"KAYIP"
18,"Vizite",31/01/2012 00:00:00,01/02/2012 00:00:00,1,1,"KAYIP"
18,"İzin",02/01/2012 00:00:00,16/01/2012 00:00:00,12,12,"İZİN"
31,"Üsİzin",03/01/2012 00:00:00,06/02/2012 00:00:00,29,29,"KAYIP"
31,"Üsİzin",03/01/2012 00:00:00,06/02/2012 00:00:00,29,29,"KAYIP"
37,"Vizite",27/03/2012 00:00:00,28/03/2012 00:00:00,1,1,"KAYIP"
37,"Vizite",20/03/2012 00:00:00,21/03/2012 00:00:00,1,1,"KAYIP"
37,"Vizite",27/02/2012 00:00:00,28/02/2012 00:00:00,1,1,"KAYIP"
46,"Vizite",02/03/2012 00:00:00,03/03/2012 00:00:00,1,1,"KAYIP"
49,"İzin",30/01/2012 00:00:00,03/02/2012 00:00:00,4,4,"İZİN"
49,"İzin",09/04/2012 00:00:00,16/04/2012 00:00:00,6,6,"İZİN"
49,"Vizite",24/02/2012 00:00:00,25/02/2012 00:00:00,1,1,"KAYIP"
61,"İzin",10/01/2012 00:00:00,16/01/2012 00:00:00,5,5,"İZİN"
70,"Üsİzin",30/03/2012 00:00:00,02/04/2012 00:00:00,2,2,"KAYIP"
70,"Vizite",19/03/2012 00:00:00,20/03/2012 00:00:00,1,1,"KAYIP"
70,"İzin",06/01/2012 00:00:00,13/01/2012 00:00:00,6,6,"İZİN"
70,"Vizite",09/04/2012 00:00:00,10/04/2012 00:00:00,1,1,"KAYIP"
70,"Vizite",05/03/2012 00:00:00,06/03/2012 00:00:00,1,1,"KAYIP"
70,"Üsİzin",02/04/2012 00:00:00,04/04/2012 00:00:00,2,2,"KAYIP"
70,"Vizite",02/05/2012 00:00:00,03/05/2012 00:00:00,1,1,"KAYIP"
70,"Vizite",30/04/2012 00:00:00,01/05/2012 00:00:00,0,0,"KAYIP"
79,"İzin",23/04/2012 00:00:00,30/04/2012 00:00:00,5,5,"İZİN"
97,"İzin",31/01/2012 00:00:00,03/02/2012 00:00:00,3,3,"İZİN"
97,"İzin",23/02/2012 00:00:00,24/02/2012 00:00:00,1,1,"İZİN"
100,"Vizite",20/02/2012 00:00:00,21/02/2012 00:00:00,1,1,"KAYIP"
106,"Vefat",16/01/2012 00:00:00,19/01/2012 00:00:00,3,3,"KAYIP"
106,"İzin",19/01/2012 00:00:00,23/01/2012 00:00:00,3,3,"İZİN"
122,"Vizite",02/01/2012 00:00:00,03/01/2012 00:00:00,1,1,"KAYIP"
130,"Vizite",03/04/2012 00:00:00,04/04/2012 00:00:00,1,1,"KAYIP"
130,"Vizite",21/03/2012 00:00:00,22/03/2012 00:00:00,1,1,"KAYIP"
130,"Üsİzin",13/04/2012 00:00:00,16/04/2012 00:00:00,2,2,"KAYIP"
130,"İzin",02/01/2012 00:00:00,09/01/2012 00:00:00,6,6,"İZİN"
130,"Vizite",17/02/2012 00:00:00,18/02/2012 00:00:00,1,1,"KAYIP"
139,"Vizite",07/02/2012 00:00:00,08/02/2012 00:00:00,1,1,"KAYIP"
139,"İzin",24/04/2012 00:00:00,02/05/2012 00:00:00,7,7,"İZİN"
139,"Vizite",16/01/2012 00:00:00,17/01/2012 00:00:00,1,1,"KAYIP"
139,"İzin",22/02/2012 00:00:00,29/02/2012 00:00:00,6,6,"İZİN"
139,"Vizite",04/04/2012 00:00:00,05/04/2012 00:00:00,1,1,"KAYIP"
139,"Vizite",09/03/2012 00:00:00,10/03/2012 00:00:00,1,1,"KAYIP"
145,"Vizite",23/01/2012 00:00:00,24/01/2012 00:00:00,1,1,"KAYIP"
145,"İzin",16/04/2012 00:00:00,02/05/2012 00:00:00,13,13,"İZİN"
145,"Vizite",03/02/2012 00:00:00,04/02/2012 00:00:00,1,1,"KAYIP"
145,"Vizite",10/01/2012 00:00:00,11/01/2012 00:00:00,1,1,"KAYIP"
153,"Rapor",02/05/2012 00:00:00,03/05/2012 00:00:00,1,1,"KAYIP"
153,"Vizite",10/02/2012 00:00:00,11/02/2012 00:00:00,1,1,"KAYIP"
153,"Rapor",16/04/2012 00:00:00,21/04/2012 00:00:00,5,5,"KAYIP"
153,"İzin",23/01/2012 00:00:00,30/01/2012 00:00:00,6,6,"İZİN"
153,"Vizite",12/03/2012 00:00:00,13/03/2012 00:00:00,1,1,"KAYIP"
153,"Vizite",24/04/2012 00:00:00,24/04/2012 00:00:00,0,0,"KAYIP"
155,"Vizite",13/01/2012 00:00:00,14/01/2012 00:00:00,1,1,"KAYIP"
159,"Vizite",30/01/2012 00:00:00,31/01/2012 00:00:00,1,1,"KAYIP"
163,"İzin",24/04/2012 00:00:00,02/05/2012 00:00:00,7,7,"İZİN"
163,"Üsİzin",09/01/2012 00:00:00,10/01/2012 00:00:00,1,1,"KAYIP"
179,"Vizite",06/04/2012 00:00:00,07/04/2012 00:00:00,1,1,"KAYIP"
179,"Vizite",20/04/2012 00:00:00,20/04/2012 00:00:00,0,0,"KAYIP"
179,"Vizite",13/04/2012 00:00:00,13/04/2012 00:00:00,0,0,"KAYIP"
182,"İzin",16/04/2012 00:00:00,24/04/2012 00:00:00,6,6,"İZİN"
190,"Vizite",20/02/2012 00:00:00,21/02/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",17/02/2012 00:00:00,18/02/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",01/02/2012 00:00:00,02/02/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",05/04/2012 00:00:00,06/04/2012 00:00:00,1,1,"KAYIP"
190,"Üsİzin",02/01/2012 00:00:00,10/01/2012 00:00:00,7,7,"KAYIP"
190,"Vizite",05/03/2012 00:00:00,06/03/2012 00:00:00,1,1,"KAYIP"
190,"Üsİzin",12/01/2012 00:00:00,13/01/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",13/01/2012 00:00:00,14/01/2012 00:00:00,1,1,"KAYIP"
190,"Rapor",28/03/2012 00:00:00,31/03/2012 00:00:00,3,3,"KAYIP"
190,"Üsİzin",14/01/2012 00:00:00,24/01/2012 00:00:00,8,8,"KAYIP"
190,"Üsİzin",07/02/2012 00:00:00,08/02/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",13/03/2012 00:00:00,14/03/2012 00:00:00,1,1,"KAYIP"
190,"Vizite",09/02/2012 00:00:00,10/02/2012 00:00:00,1,1,"KAYIP"
190,"Rapor",06/03/2012 00:00:00,09/03/2012 00:00:00,3,3,"KAYIP"
190,"Rapor",30/04/2012 00:00:00,05/05/2012 00:00:00,5,5,"KAYIP"
190,"Vizite",16/03/2012 00:00:00,17/03/2012 00:00:00,1,1,"KAYIP"
190,"Üsİzin",27/03/2012 00:00:00,28/03/2012 00:00:00,1,1,"KAYIP"
190,"İzin",10/04/2012 00:00:00,30/04/2012 00:00:00,16,16,"İZİN"
190,"Vizite",12/03/2012 00:00:00,13/03/2012 00:00:00,1,1,"KAYIP"
190,"Rapor",22/03/2012 00:00:00,24/03/2012 00:00:00,2,2,"KAYIP"
190,"Vizite",09/04/2012 00:00:00,10/04/2012 00:00:00,1,1,"KAYIP"
190,"Rapor",19/03/2012 00:00:00,22/03/2012 00:00:00,3,3,"KAYIP"
190,"Vizite",09/03/2012 00:00:00,10/03/2012 00:00:00,1,1,"KAYIP"
190,"Üsİzin",26/01/2012 00:00:00,27/01/2012 00:00:00,1,1,"KAYIP"
191,"İzin",30/01/2012 00:00:00,06/02/2012 00:00:00,6,6,"İZİN"
191,"Üsİzin",05/03/2012 00:00:00,06/03/2012 00:00:00,1,1,"KAYIP"
205,"Vizite",27/01/2012 00:00:00,27/01/2012 00:00:00,0,0,"KAYIP"
210,"İzin",02/01/2012 00:00:00,06/01/2012 00:00:00,4,4,"İZİN"
210,"Vizite",20/04/2012 00:00:00,21/04/2012 00:00:00,1,1,"KAYIP"
210,"Üsİzin",26/03/2012 00:00:00,27/03/2012 00:00:00,1,1,"KAYIP"
215,"İzin",18/01/2012 00:00:00,27/01/2012 00:00:00,8,8,"İZİN"
215,"Vizite",19/03/2012 00:00:00,19/03/2012 00:00:00,0,0,"KAYIP"
215,"Vizite",05/04/2012 00:00:00,06/04/2012 00:00:00,1,1,"KAYIP"
215,"Vizite",27/03/2012 00:00:00,27/03/2012 00:00:00,0,0,"KAYIP"
215,"Vizite",09/03/2012 00:00:00,09/03/2012 00:00:00,0,0,"KAYIP"
215,"Vizite",26/03/2012 00:00:00,27/03/2012 00:00:00,1,1,"KAYIP"
215,"Vizite",14/03/2012 00:00:00,16/03/2012 00:00:00,2,2,"KAYIP"
230,"Vizite",21/03/2012 00:00:00,22/03/2012 00:00:00,1,1,"KAYIP"
230,"Vizite",03/02/2012 00:00:00,04/02/2012 00:00:00,1,1,"KAYIP"
230,"Vizite",13/04/2012 00:00:00,14/04/2012 00:00:00,1,1,"KAYIP"
236,"İzin",06/01/2012 00:00:00,23/01/2012 00:00:00,14,14,"İZİN"
236,"İzin",05/03/2012 00:00:00,26/03/2012 00:00:00,18,18,"İZİN"
236,"Rapor",26/03/2012 00:00:00,16/04/2012 00:00:00,21,21,"KAYIP"

ENDTEXT

STRTOFILE(m.lcData,m.lcTemp)

create CURSOR CRSONUC ;
( ;
  SICILNO N(12,0)  NULL  ;
  ,ITUR C(10,0)  NULL  ;
  ,IBASTAR T(8,0)  NULL  ;
  ,IBITTAR T(8,0)  NULL  ;
  ,KIZIN N(7,0)  NULL  ;
  ,TOPLAM N(7,0)  NULL  ;
  ,SONITUR C(5,0)  NOT  NULL  ;
  )

APPEND FROM (m.lcTemp) TYPE delimited
ERASE (m.lcTemp)
endproc

Bilmediğin Neyse Yanıldığındır.

2 Son düzenleyen, ugurlu2001 (11.05.2012 14:44:17)

Re: Aylara Göre Toplam İzin

Visual Fox Pro
SELECT ;

        Year(IBASTAR) As Yil,;
        MONTH(IBASTAR) As Ay,;
        SicilNo, ;
        SUM(CAST(Ibittar As Date) - CAST(IBASTAR As Date)) As izinGunu ;
    From CrSonuc ;
    GROUP BY 1,2,3 ;
    ORDER BY 3

Not: Aynı gün sadece vizite için izin kullanan kişileri bir sayaç ile de eklemek isteyebilirsin.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

3 Son düzenleyen, ugurlu2001 (11.05.2012 15:08:01)

Re: Aylara Göre Toplam İzin

Aşağıdaki de ay sayısı 2 den fazla olanlar için :

Visual Fox Pro
SELECT ;

        Year(IBASTAR) As Yil,;
        MONTH(IBASTAR) As Ay,;
        SicilNo, ;
        SUM(CAST(Ibittar As Date) - CAST(IBASTAR As Date)) As izinGunu ;
    From CrSonuc ;
    WHERE SicilNo IN(SELECT SicilNo FROM (SELECT SicilNo, COUNT(Ay) As Sayac From ;
    (SELECT ;
            Year(IBASTAR) As Yil,;
            MONTH(IBASTAR) As Ay,;
            SicilNo, ;
            SUM(CAST(Ibittar As Date) - CAST(IBASTAR As Date)) As izinGunu ;
        From CrSonuc ;
        GROUP BY 1,2,3;
        ORDER BY 3) As CurTempX;
    GROUP BY SicilNo ;
    HAVING Sayac >= 3) As TempX);
    GROUP BY 1,2,3 ;
    ORDER BY SicilNo
Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: Aylara Göre Toplam İzin

Cevabın için çok teşekkür ederim.
İsterdiğimi tam olarak anlatamadım. Aşağıdaki resmedi gibi olacaktı.
Satırda birden fazla ay içeren kayıtların değerlerinin aylara göre bölünmesi gerekiyor.
Bunu yapamadım.

İleti eklentileri

Aylara_gore.jpg
Aylara_gore.jpg 29.72 kb, 3 kez indirildi, 2012-05-14 tarihinden itibaren 

Bu iletideki eklenti/leri indirmeye yetkiniz yok.
Bilmediğin Neyse Yanıldığındır.

5 Son düzenleyen, ugurlu2001 (14.05.2012 10:33:15)

Re: Aylara Göre Toplam İzin

Ramazan;

İstediğin yanıt bir tek sorgu olabilir mi diye birkaç deneme yaptım.  Benim SQL bilgi düzeyime göre senin istediğin türde bir sonuç alamadım. Özellikle izin gün sayısı 1 ay ı geçen durumlarda ( mesela personel bir seferde 60+ gün lük izin kullanırsa ) durum içinden çıkılmaz bir hale geliyor.

Ben böyle bir durumda, bir kaç cursor oluşturup SCAN / ENDSCAN ile tarama yapmayı tercih ederdim.

Eğer izin gün sayısı < 2Ay ise ( 60 gün ve altı ) yaklaşık bir sonuç alınabilir.

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

6 Son düzenleyen, mrduyar (14.05.2012 11:17:47)

Re: Aylara Göre Toplam İzin

son şeklini aldı.
Aşağıdaki koddan sonra ugur un kodu ile tam uyum sağlamış oldu.
Bundan sonraki aşama. Tatil günlerini ve hafta sonlarını çıkartıp rapor haline getirmek.
İlginiz için teşkkürler.

Visual Fox Pro
Select * From CrSonuc Readwrite Where kizin=131414123434 Into Cursor CrSonuc1

Local Lcay1,Lcay2
Lcay1=0
Lcay2=0
Lcsayi=0
Select CrSonuc
Locate
Scan
    Lcay1=Month(ibastar)
    Lcay2=Month(ibittar)
    Do Case
    Case Lcay1=Lcay2
        Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
            VALUES (CrSonuc.sicilno,CrSonuc.itur,CrSonuc.ibastar,CrSonuc.ibittar,9,CrSonuc.toplam,CrSonuc.sonitur)
        Lcsayi=Lcsayi+1
    Case Lcay1<>Lcay2
 
        If Val(Substr(diffinymdy(Ttod(ibastar),Ttod(ibittar)),5,2))=0
*kontrol için
*            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,CrSonuc.ibastar,CrSonuc.ibittar,0,CrSonuc.toplam,CrSonuc.sonitur)
 
            Lcibastar=CrSonuc.ibastar
            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,CrSonuc.ibastar,Gomonth(Lcibastar, 1) - Day(Gomonth(Lcibastar, 1)),1,CrSonuc.toplam,CrSonuc.sonitur)
 
            Lcibittar=CrSonuc.ibittar
            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,;
                Gomonth(Lcibittar, Iif(Day(Lcibittar)=1,1,0)) - Day(Gomonth(Lcibittar, Iif(Day(Lcibittar)=1,1,0))-1),;
                CrSonuc.ibittar,2,CrSonuc.toplam,CrSonuc.sonitur)
            Lcsayi=Lcsayi+1
        Else
            Lcayadet=Val(Substr(diffinymdy(Ttod(ibastar),Ttod(ibittar)),5,2))
*kontrol için
*            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,CrSonuc.ibastar,CrSonuc.ibittar,0,CrSonuc.toplam,CrSonuc.sonitur)
*ilk ay
            Lcibastar=CrSonuc.ibastar
            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,CrSonuc.ibastar,Gomonth(Lcibastar, 1) - Day(Gomonth(Lcibastar, 1)),1,CrSonuc.toplam,CrSonuc.sonitur)
*son ay
            Lcibittar=CrSonuc.ibittar
            Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                VALUES (CrSonuc.sicilno,CrSonuc.itur,;
                Gomonth(Lcibittar, Iif(Day(Lcibittar)=1,1,0)) - Day(Gomonth(Lcibittar, Iif(Day(Lcibittar)=1,1,0))-1),;
                CrSonuc.ibittar,2,CrSonuc.toplam,CrSonuc.sonitur)
**** ay sayısı kadar değer
 
            For Lca=1 To Lcayadet-1
                Lcicaylar=Date(Year(CrSonuc.ibastar),Month(CrSonuc.ibastar)+Lca,1)
                Insert Into CrSonuc1 (sicilno,itur,ibastar,ibittar,kizin,toplam,sonitur);
                    VALUES (CrSonuc.sicilno,CrSonuc.itur,;
                    Gomonth(Lcicaylar, 1) - Day(Gomonth(Lcicaylar, 1)),;
                    Gomonth(Lcicaylar, Iif(Day(Lcicaylar)=1,1,0)) - Day(Gomonth(Lcicaylar, Iif(Day(Lcicaylar)=1,1,0))-1),3,CrSonuc.toplam,CrSonuc.sonitur)
            Endfor
            Lcsayi=Lcsayi+1
        Endif
    Endcase
Endscan
? Lcsayi
Bilmediğin Neyse Yanıldığındır.

7

Re: Aylara Göre Toplam İzin

Selam,

Bir dummy tablon yoksa oluşturup aşağıdaki gibi bir sorgu ile istediğini alırsın tatil günlerini tuttuğun tabloyu da ekledinmi istediğin olur

create table dummy (tarih D) && örnek olarak buraya 10 yıllık tarih ekle

Visual Fox Pro
Select sicilno,Year(tarih) as yil,Month(tarih) as ay,Count(*) as adet From ;

(;
Select a.sicilno,b.tarih From crsonuc a Right Join dummy b On b.tarih between Cast(a.ibastar as date) And Cast(a.ibittar as date) ;
) as a Where !Isnull(sicilno) And Dow(tarih,0)<>6 And Dow(tarih,0)<>7 Group By sicilno,yil,ay

8 Son düzenleyen, konuka (14.05.2012 17:08:11)

Re: Aylara Göre Toplam İzin

Ramazan,
örneklediğin çözümü neden aşağıdaki gibi basitçe yapmıyorsun ? (günümüz hızlarında sorun olmaz)
Ayrıca, bence basit bir yapısal hata var: Bir personel ayın ikisinde hastaneye gidip aynı gün dönerse, o gün işgücü kaybıdır. Yani bence 145 idli personelin 23.01.2012 başlayıp 24.01.2012 bitirdiği izin veya ne ise 2 gün yazmalı. Aşağıdakini öyle yazdım - yoksa döngüyü

Visual Fox Pro
DO WHIL m.ilktar < TTOD(crSonuc.Ibittar)

şeklinde yaparsın.

Visual Fox Pro
CREATE CURSOR crToplamIzin (Ay I, sicilno I, ToplamIzin I )

INDEX ON STR(Ay)+STR(sicilno) TAG aysicil
 
SELECT crSonuc
SCAN
  m.ilktar=TTOD(crSonuc.Ibastar)
  DO WHIL m.ilktar <= TTOD(crSonuc.Ibittar)
    IF SEEK(STR(MONTH(m.ilktar))+STR(crSonuc.sicilno),'crToplamIzin')
      REPLACE crToplamIzin.ToplamIzin WITH crToplamIzin.ToplamIzin+1 IN crToplamIzin
    ELSE
      INSERT INTO crToplamIzin VALUES (MONTH(m.ilktar),crSonuc.sicilno,1)
    ENDIF
    m.ilktar=m.ilktar+1
  ENDD
ENDSCAN
 
SELECT crToplamIzin
brow
VFP9 SP2

9

Re: Aylara Göre Toplam İzin

Veridğiniz bilgiler için teşekkürler.

Bilmediğin Neyse Yanıldığındır.