FilemakerTurk, AYS Bilişim ve Beyaz Net tarafından desteklenmektedir.
Filemaker Danışmanınız
AYS Bilişim
Mehmet KAYA
 0532 231 07 27
 0216 318 55 80
 mkaya@aysbilisim.net
						

İkinci bir Sınıf için yerleştirme yapacak isek??

+1 oy
638 kez görüntülendi
1. sınıfımız için 15 adet 8. sınıf öğrencisi 13 adet 6. sınıf öğrencisi yerleştirdik. Dolayısıyla Dağıtım adlı tablomuzda 15 adet recordumuz var. 2. sınıfımız için dağıtımını yaparken new record deyip 16. kaydı açacağız ve belirtilen kadar örneğin (16 kişi) 8. sınıf öğrencisini yerleştireceğiz. Peki belirtilen kadar örneğin (13 kişi) 6. sınıf öğrencisini yerleştirirken (tablomuzun sağ tarafı) 16. kayda nasıl gideceğiz??
12, Kasım, 2015 Scripts kategorisinde Fatih Baştürk (22,610 puan) tarafından soruldu

4 Cevaplar

+2 oy
 
En İyi Cevap
Fatih Bey, Bu durumda size tüm 6 ları sonra tüm 8 leri atamak yerine 1 nolu derslik için 6. ve 8. sınıfları aynı anda atayan sonra 2 nolu dersliğe geçip atama yapan sonra 3 nolu dersliğe geçecek şekilde konfigüre edebileceğiniz kodu aşağıya yazdım. Açıklayıcı olması için İçerisine not eklemeye çalıştım

Debug edemedim yazım hataları olabilir. Kusura bakmayın.

 

 

Allow User Abort [Off Set Error Capture [On]
 If [ANA SAYFA::SINIF DÜZEYİ = "6. Sınıf - 8. Sınıf"
Go to Layout [“ANA SAYFA” (ANA SAYFA)
Set Variable [$$XSAY; Value:ANA SAYFA::X1]

Set Variable [$$YSAY; Value:ANA SAYFA::Y1]  
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 1]
Set Variable [$a; Value:1]

Set Variable [$b; Value:1]

Loop
If [$$XSAY>$$YSAY]

Loop

Go to Layout [“öğrenci listesi” (öğrenci listesi)]

Enter Find Mode [  ]
Set Field [öğrenci listesi::Sınıfı; "6"]
New Record/Request
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Omit Record
Perform Find [  ]
If [Get ( LastError ) = 401]
Show Custom Dialog [Title:"UYARI"; Message: "Öğrenci dağıtımları başarı ile tamamlanmıştır."; Default Button:“TAMAM”, Commit:“Yes”] Exit Script [  ]

End If
Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı1; Value:öğrenci listesi::Adı]
Set Variable [$$soyadı1; Value:öğrenci listesi::Soyadı]
Set Variable [$$sınıfı1; Value:öğrenci listesi::Sınıfı]
Set Variable [$$no1; Value:öğrenci listesi::No]
Set Field [öğrenci listesi::Durumu; "yerleşti"]

If [$a>$$YSAY]

Set Variable [$$adı2; Value:""]
Set Variable [$$soyadı2; Value:""]
Set Variable [$$sınıfı2; Value:""]
Set Variable [$$no2; Value:""]

Else

Go to Layout [“öğrenci listesi” (öğrenci listesi)]
Enter Find Mode [  ]
Set Field [öğrenci listesi::Sınıfı; "8"]
New Record/Request
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Omit Record
Perform Find [  ]

Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı2; Value:öğrenci listesi::Adı
Set Variable [$$soyadı2; Value:öğrenci listesi::Soyadı
Set Variable [$$sınıfı2; Value:öğrenci listesi::Sınıfı]
Set Variable [$$no2; Value:öğrenci listesi::No]
Set Field [öğrenci listesi::Durumu; "yerleşti"]

End If

Go to Layout [“DAĞITIM” (DAĞITIM)]
New Record/Request
Set Field [DAĞITIM::ADI; $$adı]
Set Field [DAĞITIM::SOYADI; $$soyadı]
Set Field [DAĞITIM::SINIFI; $$sınıfı]
Set Field [DAĞITIM::NO; $$no]
Set Field [DAĞITIM::Derslik ADI; $$derslikadı]

Set Field [DAĞITIM::ADI2; $$adı2]
Set Field [DAĞITIM::SOYADI2; $$soyadı2]
Set Field [DAĞITIM::SINIFI2; $$sınıfı2]
Set Field [DAĞITIM::NO2; $$no2]
Set Field [DAĞITIM::DERSLİK ADI2; $$derslikadı]

Set Variable [$a; Value:$a+1]

Exit Loop If [$a>$$XSAY]

End Loop

Else

Go to Layout [“öğrenci listesi” (öğrenci listesi)]

Enter Find Mode [  ]
Set Field [öğrenci listesi::Sınıfı; "8"]
New Record/Request
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Omit Record
Perform Find [  ]
If [Get ( LastError ) = 401]
Show Custom Dialog [Title:"UYARI"; Message: "Öğrenci dağıtımları başarı ile tamamlanmıştır."; Default Button:“TAMAM”, Commit:“Yes”] Exit Script [  ]

Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı2; Value:öğrenci listesi::Adı]
Set Variable [$$soyadı2; Value:öğrenci listesi::Soyadı]
Set Variable [$$sınıfı2; Value:öğrenci listesi::Sınıfı]
Set Variable [$$no2; Value:öğrenci listesi::No]
Set Field [öğrenci listesi::Durumu; "yerleşti"]

If [$a>$$XSAY]

Set Variable [$$adı; Value:""]
Set Variable [$$soyadı; Value:""]
Set Variable [$$sınıfı; Value:""]
Set Variable [$$no; Value:""]

Else

Go to Layout [“öğrenci listesi” (öğrenci listesi)]
Enter Find Mode [  ]
Set Field [öğrenci listesi::Sınıfı; "6"]
New Record/Request
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Omit Record
Perform Find [  ]

Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı; Value:öğrenci listesi::Adı
Set Variable [$$soyadı; Value:öğrenci listesi::Soyadı
Set Variable [$$sınıfı; Value:öğrenci listesi::Sınıfı]
Set Variable [$$no; Value:öğrenci listesi::No]
Set Field [öğrenci listesi::Durumu; "yerleşti"]

Go to Layout [“DAĞITIM” (DAĞITIM)]
New Record/Request
Set Field [DAĞITIM::ADI; $$adı]
Set Field [DAĞITIM::SOYADI; $$soyadı]
Set Field [DAĞITIM::SINIFI; $$sınıfı]
Set Field [DAĞITIM::NO; $$no]
Set Field [DAĞITIM::Derslik ADI; $$derslikadı]

Set Field [DAĞITIM::ADI2; $$adı2]
Set Field [DAĞITIM::SOYADI2; $$soyadı2]
Set Field [DAĞITIM::SINIFI2; $$sınıfı2]
Set Field [DAĞITIM::NO2; $$no2]
Set Field [DAĞITIM::DERSLİK ADI2; $$derslikadı]

Set Variable [$a; Value:$a+1]

Exit Loop If [$a>$$YSAY]

End Loop

End If

Set Variable [$b; Value:$b+1]

If  [$b=2]

Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 2]

Else If [$b=3]

Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 2]   -->Derslik sayısı kadar Else If eklenmelidir.

End If

Exit Loop If [$b>X]   -->Derslik sayısı kaç ise X yerine o yazılmalıdır.

End Loop
13, Kasım, 2015 InDusTry (27,210 puan) tarafından cevaplandı
3, Aralık, 2015 Fatih Baştürk tarafından seçilmiş
muratkusci uğraşlarınız için teşekkür ederim. Fakat biryerlerde yanlışlık yapıyor olmalıyım ki istediğim gibi dağıtmıyor... Ben en başa dönüp her sınıf için bir layout açtım ve daha sonra da tabloları birleştirdim... Acemilik işte... Çok teşekkür ediyorum tekrardan...
0 oy
ilk dağıtım bittikten sonra muhtemelen raporun çıktısını alacaksınız.

Ana Sayfa layout'unuza bir buton ekleyin ve butonda Dağıtım layoutuna gidip tüm kayıtları silmesini isteyin.

"Go to Layout [Dağıtım]

Delete all records"

 

Bu script dağıtım listesini boşaltır. Yerleştirme yaptığınız butona tekrar tıkladığınızda yeni random değerlerle öğrencileri yerleştirecektir diye düşünüyorum.
12, Kasım, 2015 InDusTry (27,210 puan) tarafından cevaplandı
Ben bütün öğrencilerin dağıtımını yaptıktan sonra raporlama işlemine başlayacağım çünkü iki tür rapor almam gerekiyor. 1. si x sınıfının listesi; bu raporda x sınıfı listelenecek ve öğrencilerin hangi sınıfta sınava girdikleri görülecek. 2. si ise x sınıfında sınava hangi öğrenciler girecek. Dolayısıyla tüm dağıtımı yaptırmam lazım.
Sınıf sayısı kadar Dağıtım Tablosu açıp yapabilirsiniz.
5 sınıfınız var diyelim Adları A,B,C,D,E bunlar için A_Dağıtım, B_Dağıtım, C_Dağıtım, D_Dağıtım, E_Dağıtım tabloları açarsınız. Ana Sayfa layoutunuzda drop down list ile sınıf seçtirirsiniz. script içerisinde seçilen sınıf için ilgili dağıtım tablosuna atama yapmasını sağlayabilirsiniz.

Yok farklı tablolar olmasın diyorsanız: Dağıtım tablonuza Sınıf Adı ve sıra numarası diye iki field açarsınız. Döngüler çalışırken setfield ile ilgili sütunlara sınıf adı ve sıra numarasını yazdırabilirsiniz. sıra numarasını bir önceki soruda yaptığımız sayaç ile yazabilirsiniz.
Bu vermiş olduğunuz yanıt yerleştirme adına kesinlikle bir çözüm. fakat benim raporlama işimi çözmüyor. Raporlamayı doğru yapabilmem için tek tablom olmalı...
tek tabloyla ilgili olarak yorumumu güncellemiştim.
Aşağıdaki açıklama işinizi görür mü?

Yok farklı tablolar olmasın diyorsanız: Dağıtım tablonuza Sınıf Adı ve sıra numarası diye iki field açarsınız. Döngüler çalışırken setfield ile ilgili sütunlara sınıf adı ve sıra numarasını yazdırabilirsiniz. sıra numarasını bir önceki soruda yaptığımız sayaç ile yazabilirsiniz.
Sıra numarası ve sınıf adını yazdırıyorum zaten tabloya... Benim sorunum ikinci sınıf dağıtılırken aşağıdaki resimde görüldüğü gibi 15 kişiyi dağıttıktan sonra 13 kişiyi dağıtırken (tablonun sağ tarafı) ikinci sınıfın ilk öğrencisinin yanına yazdıramamak... Açıklayamadım sanırım...
Anladım sanırım siz önce 6. sınıfların tamamını sonra 8. sınıfları atıyorsunuz.
Ben önce 8-A için 6. sınıf ardından 8-A için 8. sınıf öğrencileri atandıktan sonra 8-B'ye geçiyorsunuz diye düşünmüştüm.
Bu kurgu daha kolay olur gibi geliyor bana.

Sizin kurgunuzda ise şöyle olabilir:

Set Variable [$a; Value:1]
Loop
Loop
Go to Layout [“öğrenci listesi” (öğrenci listesi)]
Enter Find Mode [  ]
Set Field [öğrenci listesi::Sınıfı; "6"]
New Record/Request
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Omit Record
Perform Find [  ]
If [Get ( LastError ) = 401]
Show Custom Dialog [Title:"UYARI"; Message: "6. sınıf öğrencilerinin sınav yeri dağıtımları başarı ile tamamlanmıştır."; Default Button:“TAMAM”, Commit:“Yes”] Exit Script [  ]
End If
Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı2; Value:öğrenci listesi::Adı
Set Variable [$$soyadı2; Value:öğrenci listesi::Soyadı
Set Variable [$$sınıfı2; Value:öğrenci listesi::Sınıfı]
Set Variable [$$no2; Value:öğrenci listesi::No]
Set Field [öğrenci listesi::Durumu; "yerleşti"]
Go to Layout [“DAĞITIM” (DAĞITIM)]
Go to Record/Request/Page [$a]
Set Field [DAĞITIM::ADI2; $$adı2]
Set Field [DAĞITIM::SOYADI2; $$soyadı2]
Set Field [DAĞITIM::SINIFI2; $$sınıfı2]
Set Field [DAĞITIM::NO2; $$no2]
Exit Loop If [$a = $$YSAY]    
End Loop
Set Variable [$a; Value:ANA SAYFA::X1+1]  -->sayacı 8'den 11'e çıkarmak
Set Variable [$$YSAY; Value:$$YSAY + ANA SAYFA::Y2]  -->YSAY'ı 8+13=21 e eşitlemek
End Loop

kod bloğu işinizi görür sanırım.

Fakat bu da 3. ve 4. sınıflar için atama yapmayacaktır. En güzeli Ana sayfadaki tüm X1 leri XSAY1, XSAY2 şeklinde değişkenlere atamak, yine aynı şekilde Ana sayfadaki tüm Y'leri de YSAY1, YSAY2 şeklinde almak ve 2 loop arasında onları da saydırmak. Şu an elimin altında Filemaker olmadığı için hata yapmış olabilirim belki. Birazdan tüm kodunuzun en güncel şeklini ileteceğim. Eve gidince de dosya paylaşabilirseniz deneyebilirim.
eve geçince uygulayıp sonucunu yazarım. Uğraşlarınız için teşekkürler..
0 oy

Sınıflarda sınava girecek öğrenci sayıları değişken olduğu için şöyle bir sayfa hazırladım.. Dolayısıyla her sınıfın sınav yerleştirme işlemini yaptıktan sonra çıktılarını almam lazım... Sorun şu an ikinci sınıf yerleştirilirken tablonun sol sütunu dağıtıldıktan sonra sağ sütunu dağıtılırken ikinci sınıfın ilk kaydından başlamalı...

12, Kasım, 2015 Fatih Baştürk (22,610 puan) tarafından cevaplandı
0 oy

 

Allow User Abort [Off Set Error Capture [On]
 If [ANA SAYFA::SINIF DÜZEYİ = "6. Sınıf - 8. Sınıf" 
Go to Layout [“ANA SAYFA” (ANA SAYFA) 
Set Variable [$$XSAY; Value:ANA SAYFA::X1] 
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 1]
Set Variable [$b; Value:1]
Set Variable [$$cikis; Value:Get(RecordNumber)]
 Loop 
Loop 
Go to Layout [“öğrenci listesi” (öğrenci listesi)] 
Enter Find Mode [  ] 
Set Field [öğrenci listesi::Sınıfı; "8"] 
New Record/Request 
Set Field [öğrenci listesi::Durumu; "yerleşti"] 
Omit Record 
Perform Find [  ] 
If [Get ( LastError ) = 401] 
Show Custom Dialog [Title:"UYARI"; Message: "8. sınıf öğrencilerinin sınav yeri dağıtımları başarı ile tamamlanmıştır."; Default Button:“TAMAM”, Commit:“Yes”] End If 
Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog] 
Set Variable [$$adı; Value:öğrenci listesi::Adı] 
Set Variable [$$soyadı; Value:öğrenci listesi::Soyadı] 
Set Variable [$$sınıfı; Value:öğrenci listesi::Sınıfı] 
Set Variable [$$no; Value:öğrenci listesi::No] 
Set Field [öğrenci listesi::Durumu; "yerleşti"] 
Go to Layout [“DAĞITIM” (DAĞITIM)] 
New Record/Request 
Set Field [DAĞITIM::ADI; $$adı] 
Set Field [DAĞITIM::SOYADI; $$soyadı] 
Set Field [DAĞITIM::SINIFI; $$sınıfı] 
Set Field [DAĞITIM::NO; $$no] 
Set Field [DAĞITIM::Derslik ADI; $$derslikadı] 
Exit Loop If [Get ( RecordNumber ) = $$XSAY] 
End Loop 
Exit Loop if [$b=$$cikis]

Set Variable [$b=$b+1]

İf [$b=2]

Set Variable [$$XSAY; Value: ANA SAYFA::X2 ]
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 2]

Else if [$b=3]  -->Kaç sınıf varsa ona uygun sayıda elseif yazılmalıdır.

Set Variable [$$XSAY; Value: ANA SAYFA::X3 ]        
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 3]

End if
End Loop 
End If 
Go to Layout [“ANA SAYFA” (ANA SAYFA)] 
Set Variable [$$YSAY; Value:ANA SAYFA::Y1] 

Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 1]
Set Variable [$a; Value:1] 

Set Variable [$b; Value:1]
Loop
Loop 
Go to Layout [“öğrenci listesi” (öğrenci listesi)] 
Enter Find Mode [  ] 
Set Field [öğrenci listesi::Sınıfı; "6"] 
New Record/Request 
Set Field [öğrenci listesi::Durumu; "yerleşti"] 
Omit Record 
Perform Find [  ] 
If [Get ( LastError ) = 401] 
Show Custom Dialog [Title:"UYARI"; Message: "6. sınıf öğrencilerinin sınav yeri dağıtımları başarı ile tamamlanmıştır."; Default Button:“TAMAM”, Commit:“Yes”] Exit Script [  ] 
End If 
Go to Record/Request/Page [Round ( Random * ( Get ( FoundCount ) - 1) ; 0 ) + 1] [No dialog]
Set Variable [$$adı2; Value:öğrenci listesi::Adı 
Set Variable [$$soyadı2; Value:öğrenci listesi::Soyadı 
Set Variable [$$sınıfı2; Value:öğrenci listesi::Sınıfı] 
Set Variable [$$no2; Value:öğrenci listesi::No] 
Set Field [öğrenci listesi::Durumu; "yerleşti"] 
Go to Layout [“DAĞITIM” (DAĞITIM)] 
Go to Record/Request/Page [$a] 
Set Field [DAĞITIM::ADI2; $$adı2] 
Set Field [DAĞITIM::SOYADI2; $$soyadı2] 
Set Field [DAĞITIM::SINIFI2; $$sınıfı2] 
Set Field [DAĞITIM::NO2; $$no2] 
Set Field [DAĞITIM::DERSLİK ADI2; $$derslikadı] 
Exit Loop If [$a = $$YSAY]    
End Loop

Exit Loop if [$b=$$cikis]

Set Variable [$b=$b+1]

İf [$b=2]

Set Variable [$a; Value:ANA SAYFA::X1+1]  --> sayacı 8'den 11'e çıkarmak
Set Variable [$$YSAY; Value: ANA SAYFA::Y2 ]  --> YSAY'ı 8+13=21 e eşitlemek
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 2]

Else if [$b=3]   -->Kaç sınıf varsa ona uygun sayıda elseif yazılmalıdır.

Set Variable [$a; Value:ANA SAYFA::X2+1]  

Set Variable [$$YSAY; Value: ANA SAYFA::Y3 ]         
Set Variable [$$derslikadı; Value:ANA SAYFA::Derslik Adı 3]

End if

End Loop

 

şeklinde birşey hazırladım, fakat fm sürümüm advance olmadığı için debug edemedim. Sizin fm sürümünüz advanced ise debug edebilirsiniz.

Hatalı kısım varsa üstadlar düzeltebilirler mi acaba?

12, Kasım, 2015 InDusTry (27,210 puan) tarafından cevaplandı
Muratkusci birkaç yer hariç dağıtımı yapıyor. Onları da ben düzeltmeye çalıştım. 8. sınıfları 8 tarafına 6. sınıfları 6. sınıf tarafına dağıtıyor. Ama 8 leri alt alta 6 ları alt alta dağıtıyor. Benim istediğim bir sınıfta 12 8. sınıf 10 6. sınıf dağıtsın. Sonra diğer sınıfa geçsin ve ordaki sayılara göre de o sınıfın dağıtımını yapsın. Tabi bu arada her zaman 8. sınıfların sayısı fazla olacak değil. Bazı sınıflarda 8. sınıf sayısı 6. sınıflardan daha az olabilir. Bu durumda da yeni bir record açtırmak icap eder... Benim kafam biraz karıştı... Stabil bir şekilde dağıtım yaptırmam lazım ama nasıl...
...