wiki-framework-fis-kernel

FİŞ KERNEL

Konu başlıkları

Fiş Kernel Nedir ?

Form Kernel'ın özellikleri miras yoluyla kazandırılmış , abstract bir sınıftır.Form Kernel'dan farkı bir kayda ait farklı bilgileri tabloya satır satır ekleme yapabilme özelliğidir.Sınıfın temel amacı Form Kernel vasıtasıyla kayıtlara ait minimum bilgi alınarak , kayıtla ilgili başka bilgileri hızlı bir şekilde eklemektir.

Mesela , öğrencilerin numara , ad / soyad , telefon bilgilerini , adres bilgilerini , … gibi tüm bilgilerini tutan bir tablomuz var.Bu öğrencilerin notlarını yeni bir tabloya eklemek istiyoruz.Fiş Kernel ile bunu kolayca yapabiliriz. Fiş Kernel'daki Form Kernel vasıtasıyla öğrencinin isim ve numara bilgilerini ulaşırız. Bu bilgilere bakarak öğrencinin notlarını , Fiş Kernel'daki tabloya hızlı bir şekilde ekleyebiliriz.Fiş Kernel , minimum bilgiyle , öğrencinin numara ve isim bilgileri dışında hiç bir bilgiyle uğraşmayarak , öğrenciye ait bilgileri hızlı bir şekilde kaydetmemizi sağladı.

Fiş Kernel Sınıfı

Sınıf Form Kernel'dan türetilmiştir.Sınıfın zorunlu fonksiyonlarını oluşturacağımız Fiş Kernel mantığımıza göre kodlayarak kendi Fiş Kernel'larımızı oluşturabiliriz.

Kendi Fiş Kernel'ımızı oluştururken , kayda it minimum bilgilerimizi alacağımız ve satır satır bilgi ekleyeceğimiz tablomuzu içeren ekranımızı tasarlamalıyız..

 Bu sınıfı satıcı_id , satıcı kodu ve satıcı ismi bilgileri tutan crm_satıcılar tablosu ile satıcı_id , satıcı_prim_id , prim_tarihi , ve prim_tutarı bilgilerini
 tutan crm_satıcı_primleri tablolarını kullanarak oluştuduğumuz örnekle anlatalım.
 Satıcılar tablosundaki her satıcı kaydı için , satıcı primleri tablosuna satır satır kayıt ekleyelim..

Zorunlu Fonksiyonlar

Sınıfın abstract olmasına neden olan fonksiyonlardır.Sınıfın kendine ait fonksiyonları , Form Kernel'daki fonksiyonlar referans edilerek Fiş Kernel'a göre davranması için yeniden oluşturulmuştur.Şimdi bu fonksiyonları inceleyelim..

SETUP_FORM

Bu fonksiyon Form Kernel'dan gelen zorunlu fonksiyondur.Fonksiyonda , Fiş Kernel için oluşturduğumuz ekranımızdaki tablomuzun başlık bilgilerini , ekranın ismini , tablo üzerine eklenecek butonları ve isimlerini , .. gibi ayarlamaları yaparız.

  • Örneğimize göre , satıcı tablosundan satıcı kodu ve satıcı bilgilerini almak , satıcı primleri tablosundan prim tarihi , prim tutarı , prim hakkında yapılan açıklama bilgilerini almak için fiş ekranımızı tasarlayalım..
FIS_EKRANI_TASARIMI
  • Şimdi bu formun özleliklerini ayarlayalım.. Prim tablomuzu kernel'a tanıttık, prim tablomuzdaki kolon isimlerini , açıldığında gizlenmesi gereken kolonları ayarladık.Tablomuzun her satırında veri gireceğimiz widgetlarımızı oluşturduk.Pencere başlığını , tablodaki kolon genişliklerini ayarladık.
void CRM_SATICI_PRIMLERI_FISI::SETUP_FORM()
{
   REGISTER_BUTTONS_WIDGET ( m_ui->kernel_buttons_widget );
   REGISTER_TABLE_WIDGET ( m_ui->tablewidget_fis_satirlari, 6 );
   SET_FIS_ORDER_COLUMN_NUMBER ( ORDER_NUMBER_COLUMN );
   SET_FORM_ID_COLUMN_POSITION ( FIS_ID_COLUMN );
   SET_ROW_ID_COLUMN_POSITION ( ROW_ID_COLUMN );
   SET_NUMBER_OF_HIDDEN_COLUMN ( 3 );
   SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN  , WIDGET_DATE_EDIT );
   SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN  , WIDGET_LINE_EDIT );
   SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_ACIKLAMA , WIDGET_LINE_EDIT);
   SET_FIRST_FOCUS_WIDGET ( m_ui->lineEdit_satici_kodu );
   SET_PAGE_TITLE    (tr("CRM SATICI PRİMLERİ FİŞİ EKRANI"));
   SET_SETTING_NAME  ("CRM_SATICI_PRIMLERI_FISI");
   SET_HELP_PAGE     ("CRM_SATICI_PRIMLERI_FISI.html");
   m_ui->lineEdit_satici_kodu->setMaxLength(25);
   m_ui->lineEdit_satici_ismi->setMaxLength(50);
   m_ui->tablewidget_fis_satirlari->setHorizontalHeaderLabels ( QStringList() << "row_id" <<"fis_id"<<"order_column"
                                                                            <<"prim_tarihi" << "prim_tutari" << "aciklama" << "" << "" ) ;
   m_ui->tablewidget_fis_satirlari->setColumnWidth(  CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN , 40 );
   m_ui->tablewidget_fis_satirlari->setColumnWidth(  CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN , 40 );
   m_ui->tablewidget_fis_satirlari->setColumnWidth(  CRM_SATICI_PRIMLERI_ACIKLAMA , 180 );
   FOCUS_FIRST_WIDGET ();
}
  • Kernel Açılırken arda arda fonksiyonlar çağırılarak , fiş ekranı hazırlanır..
FIS_EKRANI_TASARIMI
CLEAR_FORM_MEMBERS

Bu fonksiyon Form Kernel'dan gelen zorunlu fonksiyondur.Fonksiyon , bir işlem bittikten sonra başka bir işlem için formu hazırlamak için çağırılır.Burada form üzerinde temizlemek istediğimiz widget'larımızı temizleyebilir yada değişkenlerimize default değerler atayabiliriz..

NEW_FIS_RECORD

Bu fonksiyon Form Kernel'daki NEW_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Bu fonksiyonda bir işlem bittikten sonra başka bir işlem için formu hazırlamak için çağırılır.Burada gizlemek istediğimiz widget'larımızı gizleyebilir , görünmesini istediğimiz widget'ların görünürlüğünü açabiliriz.

  • Ekran üzerinde bir satıcı bilgisi varken tüm ekrandaki widgetlar yeni bir işlem yapılmak için sadece default değerler olacak şekilde hazırlanmaktadır.. :
YENI_KAYIT_EKRANI_1
YENI_KAYIT_EKRANI_2
  • Fonksiyon Yeni Kayıt butonuna basıldığında da çağırılmaktadır.. :
FIS_EKRANI_TASARIMI
GET_FIS_RECORD

Bu fonksiyon Form Kernel'daki GET_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur. Kernel , bu fonksiyonu record_id ile çağırarak , bu id'ye sahip kaydın form üzerinde istenen bilgilerini ilgili widget'lara doldurur.Ayrıca kayıt ile ilgili satır bilgileride burda tabloya doldurulur.

  • Satıcı primleri fişi örneğine bakalım.Kullanıcı ekrana satıcı kodu olarak 1 giriyor ve Getir Butonuna basıyor.. :
GET_FIS_RECORD_1
GET_FIS_RECORD_2
  • Örneğimizin kodunda da satıcılar tablosundan girilen satıcı koduna göre satıcı id bulunup , satıcının satıcı primleri tablosundaki bilgileri order_number ( yani kullanıcının satırları prim tablosuna eklediği sıra numarası ) 'a göre sıralanarak tablodaki widgetlara dolduruluyor.. :
int CRM_SATICI_PRIMLERI_FISI::GET_FIS_RECORD ( int record_id )
{
   SQL_QUERY query_saticilar( DB );
   query_saticilar.PREPARE_SELECT( "crm_saticilar" , "satici_kodu , satici_ismi" , "satici_id=:satici_id");
   query_saticilar.SET_VALUE( ":satici_id" , record_id );
   if( query_saticilar.SELECT() EQ 0 ){
       MSG_WARNING( "Satıcı kaydı bulunamadı.." , this );
       return CEREN_FAIL ;
   }
   query_saticilar.NEXT() ;
   m_ui->lineEdit_satici_kodu->setText( query_saticilar.VALUE(0).toString() );
   m_ui->lineEdit_satici_ismi->setText( query_saticilar.VALUE(1).toString() );
   SQL_QUERY query_prim ( DB ) ;
   query_prim.PREPARE_SELECT( "crm_satici_primleri" , "satici_primleri_id , prim_tarihi , prim_tutari , aciklama , order_number" , "satici_id=:satici_id");
   query_prim.SET_VALUE( ":satici_id" , record_id );
   query_prim.SELECT( "order_number");
   int current_row = -1 ;
   double toplam = 0.0;
   while( query_prim.NEXT() ){
       current_row = ADD_NEW_LINE();
       QDateEdit * prim_tarihi  = ( QDateEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( current_row , CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN );
       QLineEdit * prim_tutari  = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( current_row , CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN );
       QLineEdit * aciklama     = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( current_row , CRM_SATICI_PRIMLERI_ACIKLAMA );
       prim_tarihi->setDate( query_prim.VALUE(1).toDate() );
       prim_tutari->setText( query_prim.VALUE(2).toString() );
       aciklama->setText( query_prim.VALUE(3).toString() );
       m_ui->tablewidget_fis_satirlari->setItem ( current_row, ROW_ID_COLUMN, new QTableWidgetItem ( query_prim.VALUE( 0 ).toString() ) );
       m_ui->tablewidget_fis_satirlari->setItem ( current_row, FIS_ID_COLUMN, new QTableWidgetItem ( QVariant ( record_id ).toString() ) );
       m_ui->tablewidget_fis_satirlari->setItem ( current_row, ORDER_NUMBER_COLUMN , new QTableWidgetItem ( query_prim.VALUE( 4 ).toString()  ) );
       toplam += prim_tutari->text().toDouble();
   }
   m_ui->commaedit_toplam_prim->SET_DOUBLE( toplam );
   return CEREN_OK;
}
  • Kullanıcı satıcı kodu girip getir butonuna bastığında , Fiş kernel satıcı bilgilerini ekrandaki widget'lara basmak için bu fonksiyonları çağırmaktadır..:

 

GET_FIS_RECORD_AKIS_SEMASI

 

CHECK_FIS_FORM_VAR

Bu fonksiyon Form Kernel'daki CHECK_VAR fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Form üzerindeki widget'lara girilen değerlerle işlem yapmadan önce bu değerleri kontrol etmek için çağırılır. Burada değişkenlerimizin doğruluğunu kontrol edebiliriz.

  • Satıcı örneğimize bakacak olursak , satıcı kodu bilgisine harf ve rakam dışında karakter girilmesini , satıcı ismi olarakta harf dışında karakter girilmesini engelledik.. Satıcı kodu ve satıcı ismi için kullanılan değişkenlerimizi burada kontrol etmiş olduk..
int CRM_SATICI_PRIMLERI_FISI::CHECK_FIS_FORM_VAR ( QObject * object )
{
   if( object EQ m_ui->lineEdit_satici_kodu ){
       if( CONTROL_VAR( m_ui->lineEdit_satici_kodu->text() , 1 ) EQ false ){
           MSG_WARNING( "Satıcı koduna harf ve rakam dışında karakter girilemez.." , this);
           return CEREN_FAIL ;
       }
   }
   if( object EQ m_ui->lineEdit_satici_ismi ){
       if( CONTROL_VAR( m_ui->lineEdit_satici_ismi->text() , 2 ) EQ false ){
           MSG_WARNING( "Satıcı ismine harf dışında karakter girilemez.." , this );
           return CEREN_FAIL ;
       }
   }
   return CEREN_OK;
}
  • Örnek çıktılar.. :
CHECK_FIS_FORM_VAR_1
CHECK_FIS_FORM_VAR_2
CHECK_FIS_FORM_EMPTY

Bu fonksiyon Form Kernel'daki CHECK_EMPTY fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , kaydetme veya guncelleme yapılmadan önce form üzerinde boş alanları kontrol etmek için çağırılır. Burda form üzerinde boş bırakılmaması gereken widget'ları kontrol ederiz.

  • Satıcı örneğimizde , satıcı kodu ve satıcı ismi alanlarının kullanıcı tarafından boş bırakılıp bırakılmadığını bu fonksiyonda kontrol edebiliriz.
int CRM_SATICI_PRIMLERI_FISI::CHECK_FIS_FORM_EMPTY()
{
   if( m_ui->lineEdit_satici_kodu->text() EQ NULL ){
       MSG_ERROR( "Satıcı kodu alanı boş bırakılamaz..", this);
       return CEREN_FAIL ;
   }
   if( m_ui->lineEdit_satici_ismi->text() EQ NULL ){
       MSG_ERROR( "Satıcı ismi alanı boş bırakılamaz..", this);
       return CEREN_FAIL ;
   }
   return CEREN_OK;
}
  • Örneğimizin çıktısı.. :
CHECK_FIS_FORM_EMPTY_1
CHECK_FIS_FORM_EMPTY_2
CHECK_FIS_RECORD_ADD

Bu fonksiyon Form Kernel'daki CHECK_ADD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Kaydet butonuna basıldığında çağırılır. Burda fiş ekranında oluşturulanları kaydetmeden önce bu kaydetmeye engel olacak durumlar kontrol edilir. Aynı kaydın daha önce yapılmış olmasını burada engelleyebiliriz.

  • Satıcı örneğimizde , kullanıcının girdiği satıcı kodu ile kayıtlı bir satıcı kaydı bulunup bulunmadığını bu fonkisyonda kontrol edebiliriz.. :
int CRM_SATICI_PRIMLERI_FISI::CHECK_FIS_RECORD_ADD ()
{
   SQL_QUERY query(DB);
   query.PREPARE_SELECT( "crm_saticilar" , "satici_id" , "satici_kodu=:satici_kodu");
   query.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   if( query.SELECT() NE 0 ){
       MSG_ERROR("Bu satıcı kodunda başka bir kayıt bulunmaktadır..",this);
       return CEREN_FAIL;
   }
   return CEREN_OK;
}
  • Örneğimizin çıktısı.. :

 

CHECK_FIS_RECORD_ADD

 

 

ADD_FIS_RECORD

Bu fonksiyon Form Kernel'daki ADD_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , CHECK_FIS_RECORD_ADD fonksiyonu ile kontroller tamamlandıktan sonra çağırılır.Bu fonksiyonda , sisteme yeni kayıt eklenir.

  • Satıcı fişi örneğinde kullanıcı yeni kayıt girip Kaydet butonuna basıyor ve bilgiler kontrol edilerek sisteme kaydediliyor.Daha sonra kaydın eklenip eklenmediğini satıcı kodu girip Getir butonuna basarak kontrol ediliyor..
    • Kayıt Eklendi..
ADD_FIS_RECORD_1
    • Kaydın eklenip eklenmediği kaydedilen satıcı kodu girip Getir butonuna basarak kontrol ediliyor..
ADD_FIS_RECORD_2
ADD_FIS_RECORD_3
  • Bu örneğe kodumuzu yazalım.. Kullanıcı bilgilerini alıp veri tabanımıza ekleyelim..
int CRM_SATICI_PRIMLERI_FISI::ADD_FIS_RECORD ()
{
   SQL_QUERY query(DB);
   query.PREPARE_INSERT("crm_saticilar" ,"satici_id", "satici_kodu , satici_ismi");
   query.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   query.SET_VALUE( ":satici_ismi" , m_ui->lineEdit_satici_ismi->text() );
   int record_id = query.INSERT();
   return record_id ;
}
  • Sisteme kayıt eklenirken kernel , sırasıyla aşağıdaki gibi fonksiyonları çağırır , kontrolleri yapar ve kaydı ondan sonra sisteme ekler.. :

 

KAYIT_EKLEME_AKIS_SEMASI

 

CHECK_FIS_RECORD_UPDATE

Bu fonksiyon Form Kernel'daki CHECK_UPDATE fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , kayıt üzerinde değişiklik yapılıp Kaydet butonuna basıldığında çağırılır.Burada kayıt üzerinde yapılan değişikliklerde , kaydın güncellenmesini engelleyecek durumların olup olmadığı kontrol edilir.

  • Satıcı Fişi örneğimizde bu fonksiyonda , kullanıcının girdiği güncel bilgilerde , sistemimizde kayıt olup olmadığına bakıyoruz.. :
int CRM_SATICI_PRIMLERI_FISI::CHECK_FIS_RECORD_UPDATE ( int record_id )
{
   MSG_INFO("CHECK_FIS_RECORD_UPDATE " ,this);
   SQL_QUERY query(DB);
   query.PREPARE_SELECT( "crm_saticilar" , "satici_id" , "satici_kodu=:satici_kodu");
   query.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   query.SELECT();
   query.NEXT();
   if( query.VALUE(0).toInt() NE record_id ){
       MSG_ERROR( "Bu satıcı kodunda başka bir kayıt bulunmaktadır..", this);
       return CEREN_FAIL;
   }
   return CEREN_OK;
}
  • Örneğimizin Çıktısı :
    • Kullanıcı satıcı kodu 1 olan satıcının satıcı kodunu ve satıcı ismini değiştirmek istiyor.
CHECK_FIS_RECORD_UPDATE_1
CHECK_FIS_RECORD_UPDATE_2
    • Aynı satıcı kodunda kayıt bulunduğu için güncelleme işlemi engelleniyor..
CHECK_FIS_RECORD_UPDATE_3
UPDATE_FIS_RECORD

Bu fonksiyon Form Kernel'daki UPDATE_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , CHECK_FIS_RECORD_UPDATE fonksiyonu çağırılarak güncelleme kontrolleri tamamlandıktan sonra , bu fonksiyon çağırılarak kayıt ile ilgili güncellemeler yapılır.Burada değişiklikleri , kayıda uygularız.

  • Satıcı primleri fişi örneğinde , güncelleme bilgilerimiz , kontrolden geçtikten sonra , kernel bu fonksiyonu çağırarak , kaydı satıcılar tablosunda günceller.
void CRM_SATICI_PRIMLERI_FISI::UPDATE_FIS_RECORD ( int record_id )
{
   SQL_QUERY query_satici(DB);
   query_satici.PREPARE_UPDATE("crm_saticilar","satici_id","satici_kodu , satici_ismi" , "satici_id=:satici_id");
   query_satici.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   query_satici.SET_VALUE( ":satici_ismi" , m_ui->lineEdit_satici_ismi->text() );
   query_satici.SET_VALUE( ":satici_id" , record_id );
   query_satici.UPDATE();
}
  • Örnek Çıktı :
    • Kullanıcı satıcı kodu 1 olan satıcı kaydını güncellemek istiyor. Satıcı kaydının ismini değiştirip kaydet butonuna basıyor..
UPDATE_FIS_RECORD_1
UPDATE_FIS_RECORD_2
    • Güncelleme tamamlandıktan sonra satıcı kodu 1 olan kaydımızı , Getir butonuna basarak kontrol ettiğimizde güncellemenin başarılı olduğunu görüyoruz..
UPDATE_FIS_RECORD_3
  • Bir kayıt üzerinde güncelleme yapılırken kernel güncelleme bilgilerini kontrol eder , sonra güncelleme işlemini yapar.. :

 

UPDATE_FIS_RECORD_AKIS_SEMASI

 

CHECK_FIS_RECORD_DELETE

Bu fonksiyon Form Kernel'daki CHECK_DELETE fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , bir kayıt silinmek istendiğinde çağırılır.Burada kaydın sistemden silinmesi için bir engel olup olmadığına bakılır.

DELETE_FIS_RECORD

Bu fonksiyon Form Kernel'daki DELETE_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , CHECK_FIS_RECORD_DELETE fonksiyonu çağırılarak , silmek için kontroller yapıldıktan sonra , bu fonksiyon çağırılarak kayıt sistemden silinir.Kayıt silinirken kayda ait satırlarda burada silinir.

  • Satıcı Primleri Fişi örneğimizde , bu fonksiyonda satıcı ait bilgileri , hem crm_satıcı tablosundan , hemde crm_satici_primleri tablosundan siliyoruz..
void CRM_SATICI_PRIMLERI_FISI::DELETE_FIS_RECORD ( int record_id )
{
   SQL_QUERY query_saticilar(DB);
   query_saticilar.PREPARE_DELETE( "crm_saticilar" , "satici_id=:satici_id");
   query_saticilar.SET_VALUE(":satici_id",record_id );
   query_saticilar.DELETE();
   SQL_QUERY query_prim(DB);
   query_prim.PREPARE_DELETE( "crm_satici_primleri" , "satici_id=:satici_id" );
   query_prim.SET_VALUE(":satici_id" , record_id );
   query_prim.DELETE();
}
  • Örnek Çıktı :
    • Kullanıcı satıcı kodu 1 olan kaydı siliyor.Daha sonra satıcı kodu bilgisine 1 girerek satıcı kaydını aradığımızda silme işleminin başarılı olduğunu görüyoruz..
DELETE_FIS_RECORD_1
DELETE_FIS_RECORD_2
  • Bir kayıt silinmek istendiğinde kernel , kaydı silmek için engel olup olmadığını kontrol eder , sonra kaydı siler .. :

 

DELETE_FIS_RECORD_AKIS_SEMASI

 

SELECT_FIS_RECORD

Bu fonksiyon Form Kernel'daki SELECT_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Ara/Bul butonuna basıldığında çağırılır. Burada kullanıcının girdiği bilgilere göre , arama yapmak için oluşturulan Arama Kernel çağırılır.

  • Satici Primleri fişi örneğinde , FIND_FIS_RECORD fonksiyonunda yaptığımızı işlemlerin aynısını burada da yaptık.Burada asıl yapılması gereken , Arama Kernel'i bir arama penceresi açmak , arama sonuçlarından birini seçmektir.
  • Kernel , bu Ara/Bul butonuna basıldığında , akış şeması şekildeki gbidir.

 

SELECT_FIS_RECORD_AKISSEMASI

 

FIND_FIS_RECORD

Bu fonksiyon Form Kernel'daki FIND_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Getir butonuna basıldığında çağırılır. Burada kullanıcının girdiği bilgilere göre kayıt aranır ve kaydın id'si return edilir.

  • Satıcı Primleri Fişi örneğinde , girilen satıcı koduna göre satıcılar tablosunda satıcı kaydını aradık ve kaydın id'sini kernel'a verdik.
int CRM_SATICI_PRIMLERI_FISI::FIND_FIS_RECORD()
{
   SQL_QUERY query(DB);
   query.PREPARE_SELECT( "crm_saticilar" , "satici_id" , "satici_kodu=:satici_kodu");
   query.SET_VALUE(":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   if( query.SELECT() EQ 0 ){
       MSG_WARNING( "Aranan satıcı bulunamadı.." ,this );
       return -1 ;
   }
   query.NEXT();
   return query.VALUE(0).toInt() ;
}
FIND_NEXT_FIS_RECORD

Bu fonksiyon Form Kernel'daki FIND_NEXT_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Sonraki butonuna basıldığında çağırılır. Burada form üzerindeki kayıttan sonraki gelen kayıt bulunurak id'si return edilir.

  • Satıcı Primleri Fişi örneğimizde bu fonksiyonda , o an ekran üzerinde gösterilen widget'lardaki kayıttan sonra eklenen kaydı aradık ve kaydın id'sini kernel'a verdik.
int CRM_SATICI_PRIMLERI_FISI::FIND_NEXT_FIS_RECORD()
{
   SQL_QUERY query(DB);
   query.PREPARE_SELECT("crm_saticilar" , "satici_id" , "satici_kodu =:satici_kodu");
   if( m_ui->lineEdit_satici_kodu->text() EQ NULL ){
       return 0 ;
   }
   query.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   query.SELECT();
   query.NEXT();
   int record_id = query.VALUE(0).toInt();
   query.PREPARE_SELECT("crm_saticilar" , "satici_id" , "satici_id >:satici_id");
   query.SET_VALUE(":satici_id" , record_id );
   int kayit_sayisi = query.SELECT("satici_id ");
   query.NEXT();
   if( kayit_sayisi < 1 ){
       return 0;
   }
   return query.VALUE(0).toInt();
}
  • Örnek Çıktı :
    • Kullanıcı ekranda bir kayıt gösteriliyorken Sonraki butonuna basıyor ve sonraki kaydın bilgileri ekrandaki widgetlara dolduruluyor..
FIND_NEXT_FIS_RECORD_1
FIND_NEXT_FIS_RECORD_2
  • Sonraki kaydı bulmak için kernel , bu akış sırasına göre fonksiyonları çağırmaktadır..

 

FIND_NEXT_FIS_RECORD_AKISSEMASI

 

FIND_PREV_FIS_RECORD

Bu fonksiyon Form Kernel'daki FIND_PREV_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Önceki butonuna basıldığında çağırılır. Burada form üzerindeki kayıttan önce gelen kayıt bulunurak id'si return edilir.

  • Satıcı Primleri Fişi örneğimizde bu fonksiyonda , o an ekran üzerinde gösterilen widget'lardaki kayıttan önce eklenen kaydı aradık ve kaydın id'sini kernel'a verdik.
int CRM_SATICI_PRIMLERI_FISI::FIND_PREV_FIS_RECORD()
{
   SQL_QUERY query(DB);
   query.PREPARE_SELECT("crm_saticilar" , "satici_id" , "satici_kodu =:satici_kodu");
   if( m_ui->lineEdit_satici_kodu->text() EQ NULL ){
       return 0 ;
   }
   query.SET_VALUE( ":satici_kodu" , m_ui->lineEdit_satici_kodu->text() );
   query.SELECT();
   query.NEXT();
   int record_id = query.VALUE(0).toInt();
   query.PREPARE_SELECT("crm_saticilar" , "satici_id" , "satici_id <:satici_id");
   query.SET_VALUE(":satici_id" , record_id );
   int kayit_sayisi = query.SELECT("satici_id DESC");
   query.NEXT();
   if( kayit_sayisi < 1 ){
       return 0;
   }
   return query.VALUE(0).toInt();
}
  • Örnek Çıktı :
    • Kullanıcı ekranda bir kayıt gösteriliyorken Önceki butonuna basıyor ve sonraki kaydın bilgileri ekrandaki widgetlara dolduruluyor..
FIND_PREV_FIS_RECORD_1
FIND_PREV_FIS_RECORD_2
  • Önceki kaydı bulmak için kernel , bu akış sırasına göre fonksiyonları çağırmaktadır..

 

FIND_PREV_AKISSEMASI

 

FIND_FIRST_FIS_RECORD

Bu fonksiyon Form Kernel'daki FIND_FIRST_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , İlk Kayıt butonuna basıldığında çağırılır. Burada sisteme ilk kaydedilen kayıt bulunarak id'si return edilir.

  • Satıcı Primleri örneğimizde bu fonksiyonda , ilk kaydı bulabilmek için , satıcılar tablosundaki kayıtları satıcı id'lerine göre küçükten büyüğe doğru sıralı getirecek şekilde bir sorgu hazırladık.Bu sorgunun ilk sonucu bizim veri tabanına kaydettiğimiz ilk kayıt olmuş oldu.
int CRM_SATICI_PRIMLERI_FISI::FIND_FIRST_FIS_RECORD()
{
   MSG_INFO("FIND_FIRST_FIS_RECORD" ,this);
   SQL_QUERY query(DB);
   query.PREPARE_SELECT("crm_saticilar" , "satici_id");
   query.SELECT( "satici_id" );
   query.NEXT();
   return query.VALUE(0).toInt();
}
  • Örnek Çıktı :
    • Kullanıcı program boş fiş ekranında İlk Kayıt butonuna basıyor. Ve Kernel , veri tabanına kaydedilen ilk satıcının bilgilerini widgetlara dolduruyor.
FIND_FIRST_FIS_RECORD_1
FIND_FIRST_FIS_RECORD_2
  • Kernel, İlk Kaydı bu akış sırasına göre bulmaktadır..

 

FIND_FIRST_FIS_RECORD_AKISSEMASI

 

FIND_LAST_FIS_RECORD

Bu fonksiyon Form Kernel'daki FIND_LAST_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından , Son Kayıt butonuna basıldığında çağırılır. Burada sisteme son kaydedilen kayıt bulunarak id'si return edilir.

  • Satıcı Primleri örneğimizde bu fonksiyonda , son kaydı bulabilmek için , satıcılar tablosundaki kayıtları satıcı id'lerine göre büyükten küçüğe doğru sıralı getirecek şekilde bir sorgu hazırladık.Bu sorgunun ilk sonucu bizim veri tabanına kaydettiğimiz son kayıt olmuş oldu.
int CRM_SATICI_PRIMLERI_FISI::FIND_LAST_FIS_RECORD()
{
   SQL_QUERY query(DB);
   query.PREPARE_SELECT("crm_saticilar" , "satici_id");
   query.SELECT( "satici_id DESC" );
   query.NEXT();
   return query.VALUE(0).toInt();
}
  • Kullanıcı , boş fiş ekranında Son Kayıt butonuna basıyor.. Kernel , son kaydı bulup , bilgilerini widgetlara dolduruyor..
FIND_LAST_FIS_RECORD_1
FIND_LAST_FIS_RECORD_2
  • Kernel , Son Kaydı bu akış sırasına göre bulmaktadır..

 

FIND_LAST_FIS_RECORD_AKISSEMASI

 

LOCK_FIS_RECORD

Bu fonksiyon Form Kernel'daki LOCK_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur. Kernel tarafından, bir kayıt üzerinde güncelleme yapılırken çağırılır.Kernel kaydı kullanıcı için kilitler, diğer kullanıcıların değiştirmesine izin vermez.Burada DB'in LOCK_ROW fonksiyonunu , kilitleyeceğimiz satırın id'sini vererek çağırmalıyız ve bu fonksiyondan dönen değeri burada return etmeliyiz.

  • Satıcı Primleri Fişi örneğimizde , satıcılar tablosundaki , record_id ile verilen satırı kilitledik..
int CRM_SATICI_PRIMLERI_FISI::LOCK_FIS_RECORD ( int record_id )
{
   return DB->LOCK_ROW ( "record_id", "crm_saticilar", QString ( "record_id = %1" ).arg ( record_id ));
}
UNLOCK_FIS_RECORD

Bu fonksiyon Form Kernel'daki UNLOCK_RECORD fonksiyonu referans alınarak Fiş Kernel için oluşturulmuştur.Kernel tarafından, bir kayıt üzerinde yapacağımızı işlem bittiğinde çağırılır.Kernel kaydın kilidini kullanıcılar için açar, diğer kullanıcıların kayda erişimine izin verir.Burada DB'in UNLOCK_ROW fonksiyonunu , kilidini açacağımız satırın id'sini vererek çağırmalıyız ve bu fonksiyondan dönen değeri burada return etmeliyiz.

  • Satıcı Primleri Fişi örneğimizde , satıcılar tablosundaki , record_id ile verilen satırın kilidini açtık..
void CRM_SATICI_PRIMLERI_FISI::UNLOCK_FIS_RECORD ( int record_id )
{
   DB->UNLOCK_ROW ( "record_id", "crm_saticilar", QString ( "record_id = %1" ).arg ( record_id ));
}
SET_LINE_DEFAULTS

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir. Kernel , bu fonksiyonu , tabloya her satır eklendikten sonra çağırır. Oluşturulacak yeni satırın default ayarlarını burada yaparız.Satır üzerindeki yönlendirici , kısıtlayıcı özellikleri burada ayarlarız.

  • Satıcı Primleri Fişi örneğimizde bu fonksiyonda , tablodaki tarih widget'ına default olarak bugünün tarihinin atanmasını istedik.Artık tablonunun her yeni satırında tarih bu şekilde ayarlanacaktır.
void CRM_SATICI_PRIMLERI_FISI::SET_LINE_DEFAULTS ( int row_number )
{
   QDateEdit * prim_tarihi = ( QDateEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN );
   prim_tarihi->setDate( QDate::currentDate() );
}
CHECK_LINE_VAR

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel bu fonksiyonu , tablo üzerindeki bir satırdaki widget'lardan birisine veri girilip , focusun bu widget'tan alınmak istendiği zaman çağırır.Burada satır üzerindeki widget'a girilen verinin doğuruluğu kontrol edi lir.

  • Satıcı Primleri örneğimizde bu fonksiyonda , tablomuzdaki Prim Tutarı için oluşturulan widget'a girilen değeri kontrol ettik.Ayrıca girilen Prim Tarihinin bugünün tarihinden küçük olup olmadığını kontrol ettik.
int CRM_SATICI_PRIMLERI_FISI::CHECK_LINE_VAR ( int row_number, QObject * object )
{
   QLineEdit * prim_tutari = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN );
   if( object EQ prim_tutari ){
       if( prim_tutari->text().toInt() <= 0 ){
           MSG_ERROR("Prim tutarı 0'dan küçük olamaz..",this);
           return CEREN_FAIL;
       }
   }
   QDateEdit * prim_tarihi = ( QDateEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN );
   if( object EQ prim_tarihi ){
       if(  prim_tarihi->date() < QDate::currentDate() ){
           MSG_ERROR("Prim tarihi bugünden önceki bir tarih olamaz..",this);
           return CEREN_FAIL;
       }
   }
   return CEREN_OK;
}
  • Kullanıcının , prim tarihi olarak önceki bir tarih giriyor ve prim tutarı olarak negatif bir tutar giriyor..
CHECK_LINE_VAR_1
CHECK_LINE_VAR_2
CHECK_LINE_EMPTY

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Burada da CHECK_LINE_VAR'da olduğu gibi satır üzerindeki widget'lar kontrol edilir.Burada bu widget'ların boş bırakılıp bırakılmadığına bakılır.

  • Satıcı Primleri Fişi örneğinde bu fonksiyonda , tablodaki Prim Tutarı kolonundaki widget'ın boş bırakılıp bırakılmadığını kontrol ettik..
int CRM_SATICI_PRIMLERI_FISI::CHECK_LINE_EMPTY ( int row_number )
{
   QLineEdit * prim_tutari = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN );
   if( prim_tutari->text() EQ NULL ){
       MSG_ERROR( "Prim tutarı boş bırakılamaz" , this );
       return CEREN_FAIL;
   }
   return CEREN_OK;
}
  • Kullanıcı satıcı primleri tutarını boş bırakıyor..
CHECK_LINE_EMPTY
CHECK_ADD_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel bu fonksiyonu , satıra girilen bilgiler kaydedilmek istendiğinde kaydetmeden önce çağırır.Bu fonksiyonda , tablo üzerindeki satıra girilen bilgileri kaydetmeye engel birşey olup olmadığına bakılır.

ADD_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel bu fonksiyonu , satıra girilen bilgiler CHECK_ADD_LINE fonksiyonu çağırılarak satıra girilen bilgilerin doğruluğu onayladıktan sonra çağırır.Burada satıra girilen bilgileri sisteme eklemeliyiz.

Tablodaki veriler bir alt satıra geçildiğinde yada kaydet butonuna basıldığında kaydedilir.Amaç hızlı bir şekilde kayıt ekleyebilmektir.

  • Satıcı Primleri Fişi örneğimizde , bu fonksiyonda , tablomuza girilen prim tarihi , prim tutarı ve açıklama widget'larına girilen bilgileri , veri tabanımızdaki crm_satici_primleri tablomuza kaydedttik.

Ayrıca , tabloya veri girme sırasınıda , gizlenen kolonlardan biri olan ORDER_NUMBER_COLUMN kolonundan alıp veri tabanında satırın bilgilerine kaydettik. Bunu kullanıcı , bu kaydın prim bilgilerine bakmak istediğinde , prim satırlarını girdiği sıra ile tabloya doldurmak için yaptık.

void CRM_SATICI_PRIMLERI_FISI::ADD_LINE ( int record_id, int row_number )
{
   QDateEdit * prim_tarihi = ( QDateEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN );
   QLineEdit * prim_tutari = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN );
   QLineEdit * aciklama    = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_ACIKLAMA );
   QTableWidgetItem * order_number = ( QTableWidgetItem * ) m_ui->tablewidget_fis_satirlari->item( row_number , ORDER_NUMBER_COLUMN );
   SQL_QUERY query_prim(DB);
   query_prim.PREPARE_INSERT("crm_satici_primleri" , "satici_primleri_id" , "satici_id , prim_tarihi , prim_tutari , aciklama , order_number");
   query_prim.SET_VALUE( ":satici_id"   , record_id );
   query_prim.SET_VALUE( ":prim_tarihi" , prim_tarihi->text() );
   query_prim.SET_VALUE( ":prim_tutari" , prim_tutari->text().toDouble() );
   query_prim.SET_VALUE( ":aciklama"    , aciklama->text() );
   query_prim.SET_VALUE( ":order_number"    , order_number->text() );
   query_prim.INSERT();
}
  • Örnek Çıktı :
    • Kullanıcı satıcı kodu 2 olan satıcıya , satıcı primleri tablosunda prim değerleri ekliyor.
ADD_LINE_1
ADD_LINE_2
    • Eklenen prim kayıtları daha sonra satıcı kodu girilerek kontrol edildiğinde satır kaydetmenin başarılı olduğunu görüyoruz..
ADD_LINE_3
ADD_LINE_4
  • Kernel , tablodaki verileri bu akışa göre eklemektedir.

 

ADD_LINE_AKISSEMASI

 

CHECK_UPDATE_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir. Kernel bu fonksiyonu , kullanıcı satır üzerindeki bir widget'taki bilgiyi değiştirip Kaydet butonuna bastığında çağırır.Burada güncellenen kayıt bilgileri kaydedilmeden önce kontrol edilir.

UPDATE_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel , CHECK_UPDATE_LINE fonksiyonu çağırırarak güncelleme bilgilerini kontrolden geçirde,ikten sonra bu fonksiyonu çağırarak , kayıt üzerindeki güncellemeleri sistemde kaydeder. Bu fonksiyonda satır üzerindeki güncellemeler sisteme kaydedilir.

Tablodaki bir satır güncellenip diğer satıra geçildiğinde yada kaydet butonuna basıldığında güncel bilgiler veri tabanına kaydedilmektedir.

  • Satıcı Primleri Fişi örneğinde , bu fonksiyonda , güncellenen satırdaki tüm widgetlardaki bilgileri veri tabanımızdaki satıcı primleri tablosunda güncelledik.
void CRM_SATICI_PRIMLERI_FISI::UPDATE_LINE ( int record_id, int row_number )
{
   QDateEdit * prim_tarihi = ( QDateEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN );
   QLineEdit * prim_tutari = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN );
   QLineEdit * aciklama    = ( QLineEdit * ) m_ui->tablewidget_fis_satirlari->cellWidget( row_number , CRM_SATICI_PRIMLERI_ACIKLAMA );
   int prim_id = -1;
   prim_id = m_ui->tablewidget_fis_satirlari->item( row_number , ROW_ID_COLUMN )->text().toInt();
   SQL_QUERY query( DB );
   query.PREPARE_UPDATE( "crm_satici_primleri" , "satici_primleri_id" , "prim_tarihi , prim_tutari , aciklama " , "satici_primleri_id=:satici_primleri_id");
   query.SET_VALUE(":prim_tutari" , prim_tutari->text() );
   query.SET_VALUE( ":prim_tarihi" , prim_tarihi->text() );
   query.SET_VALUE( ":aciklama" , aciklama->text() );
   query.SET_VALUE( ":satici_primleri_id" , prim_id );
   query.UPDATE();
   Q_UNUSED(record_id);
}
  • Örnek Çıktı :
    • Tablonun son satırındaki açıklama güncellenmektedir.
UPDATE_LINE_1
UPDATE_LINE_2
    • Kayıt satıcı kodu ile arandığında , güncelleme işleminin başarılı olduğu görülmektedir.
UPDATE_LINE_3
UPDATE_LINE_4
  • Kernel , tablodaki verileri bu akışa göre güncellemektedir..

 

UPDATE_LINE_AKISSEMASI

 

CHECK_DELETE_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel , bu fonksiyonu satırladan birini silmek istediğimizde çağırır.Burada , satırdaki bilgileri silmeyi engelleyecek bir durum olup olmadığına bakılır.

DELETE_LINE

Bu fonksiyon , formumuz üzerindeki tablo üzerindeki işlemler için oluşturulmuş fonksiyonlardan biridir.Kernel , CHECK_DELETE_LINE fonksiyonunu çağırarak satırı silmeyi kontrol ettikten sonra bu fonksiyonu çağırır.Bu fonksiyonda satır üzerindeki bilgiler sistemden silinir.

  • Satıcı Primleri Fişi örneğinde bu fonksiyonda , silinmek istenen satırı crm_satici_primleri tablosundan siliyoruz.
void CRM_SATICI_PRIMLERI_FISI::DELETE_LINE ( int record_id, int row_number )
{
   SQL_QUERY query(DB);
   query.PREPARE_DELETE( "crm_satici_primleri" , "satici_primleri_id=:satici_primleri_id");
   int prim_id = -1;
   prim_id = m_ui->tablewidget_fis_satirlari->item( row_number , ROW_ID_COLUMN )->text().toInt();
   query.SET_VALUE( ":satici_primleri_id" , prim_id );
   query.DELETE();
   Q_UNUSED ( record_id );
}
  • Örnek Çıktı :
    • Kullanıcı satıcı kodu 2 olan kayda ait satıcı primleri tablosundaki 2.satırdaki prim kaydını siliyor..
DELETE_LINE_1
DELETE_LINE_2
    • Daha sonra 2 nolu satıcıyı sistemde aradığımızda , satıcı primleri tablosunda 2.satırdaki bilginin silindiğini , yani silme işleminin başarılı olduğunu görüyoruz..
DELETE_LINE_3
DELETE_LINE_4
  • Kernel , satırdaki bir kaydı silerken bu akışa göre fonksiyonları çağırır..

 

DELETE_LINE_AKISSEMASI

 

 Hazir Fonksiyonlar

ADD_NEW_LINE

Tablewidget'a yeni boş bir satır ekler ve satırın tablodaki satır numarasını geri verir.

current_row = ADD_NEW_LINE();
SET_TABLE_WIDGET_FOCUS

Table Widget'ta focus atanmak istendiğinde kullanılabilir.Tablewidget'ın verilen satır ve sütünuna focus atanır.

SET_TABLE_ROW_WIDGET

Bu fonksiyon , tablomuzdaki satırlarda olmasını istediğimiz widget'ları tabloya eklemektedir. Bu widget'larla kullanıcıdan bilgiler alınmaktadır.

  • Satıcı primleri örneğine göre bir satırdaki , prim tarihi , prim tutarı ve açıklama kolonlarına yerleştirilmesini istediğimiz widget'ları atıyoruz.
 SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN  , WIDGET_DATE_EDIT );
 SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN  , WIDGET_LINE_EDIT );
 SET_TABLE_ROW_WIDGETS ( CRM_SATICI_PRIMLERI_ACIKLAMA , WIDGET_LINE_EDIT);
REGISTER_TABLE_WIDGET

Ekranımızda satır satır ekleme yapacağımız tablewidget register edilir.Tablewidget ve tablewidget'ın kolon sayısı parametre olarak verilir.

  • Satıcı Primleri Fişi örneğinde , 6 kolonlu bir tablewidget'ı kernel'a tanıtıyoruz.. İlk 3 kolon , ROW_ID , FIS_ID ve ORDER_NUMBER için oluşturuluyor. Diğer 3 tanesi prim tarihi , prim tutarı ve açıklama kolonlarımız olacak.
 REGISTER_TABLE_WIDGET ( m_ui->tablewidget_fis_satirlari, 6 );
SET_FIS_ORDER_DATABASE

Bu fonksiyon her satırın , tablo adı , order number kolonun adı ve tablo id'si bilgilerine göre order number bilgilerini günceller.

  • Satıcı primleri fişi örneğimizde , tablomuzun adını , order numaralarını tutan kolonumuzun adını ve bu tablonun id'sini tutan kolonun adı ile bu fonksiyon çağırılımıştır.

Tablomuzdaki order numaraları , satıcı primleri id'leri yardımıyla kernel tarafından güncellenecektir. Güncellemek için kernel ,REORGANIZE_ORDER_NUMBER fonksiyonunu çağırır. Güncelleme , order numarası alt veya üstteki satıra yaklaştığı zaman olmaktadır.

SET_FIS_ORDER_DATABASE( "crm_satici_primleri" , "order_number" , "satici_primleri_id");
SET_FIS_ORDER_COLUMN_NUMBER

Satırları sıramak için kullanılacak kolonu , kolon numarası verilen kolon olarak belirler. Alt alta satır eklenmek istendiğinde 1024'er artmaktadır.Satırların arasına bir satır eklenmek istendiğinde , ekleyeceğimiz satıra alt ve üstteki order numaralarının ortalamasını order number olarak vermektedir.

  • Satıcı Primleri Fişi örneğinde indeksi 2 olan kolonu order number kolon yaptık. Bu kolonda , her yere satır ekleyebilmek için her satıra kernel'ın verdiği değerler gelecektir.
 SET_FIS_ORDER_COLUMN_NUMBER ( ORDER_NUMBER_COLUMN );
  • 1.ci ve 2.ci satırların arasına yeni bir satır ekleniyor.Order number görüldüğü üzere araya eklenecek yeni satır için iki satırın ortalaması olarak verildi..
ORDER_NUMBER_1
ORDER_NUMBER_2
  • Daha sonra satıcı tekrar arandığında , tablo kayıtları girdiğimiz sırayla widget'lara dolduruldu..
ORDER_NUMBER_3
ORDER_NUMBER_4
REORGANIZE_ORDER_NUMBER

SET_FIS_ORDER_DATABASE fonksiyonunda atanan değerlere göre database'in order_number_column değişkenini günceller. Tabloda iki satır arasına değer yeni bir satır eklenir iki satırın order numaralarının ortlamasını alınır ve yeni satıra bu değer order numarası olarak verilir.Ortalama değer , uçlardan birinin değeri olduğunda , kernel bu fonksiyonu çağırarak order numaralarını yeniden düzenler.

SET_FORM_ID_COLUMN_POSITION

Tabloda fişin id'sini tutacak olan kolondur.Bu id , fiş ekranındaki bilgileri olan kaydın veri tabanındaki tablodaki id değeridir.

  • Satıcı primleri fişi örneğinde bu kolonu indeksi 1 olan kolon olarak belirledik..
SET_FORM_ID_COLUMN_POSITION ( FIS_ID_COLUMN )
SET_NUMBER_OF_HIDDEN_COLUMN

TableWidget üzerinde gizlenmek istemek istediğimiz kolonu gizler.

Dikkat : fonksiyon ilk kolondan ( yani sıfırıncı kolon ) itibaren parametre olarak verilen değer kadar kolonu gizler.

  • Satıcı primleri tablosunda , 0.cı , 1.ci ve 2.ci kolonları gizledik..
SET_NUMBER_OF_HIDDEN_COLUMN ( 3 ) ;
SET_LINE_BUTTON_ICON

Tablewidget üzerindeki satırlara ekleyeceğimiz buttonlara isim atamak için kullanılır. Buttonlarin eklenme sirasina gore isimler gonderilmelidir.Bu fonksiyon, INIT_FIS_KERNEL'dan önce kullanılmalıdır.

SET_LINE_CHECK_BOX_TEXT

Tablewidget'taki satırlara eklenecek check box'ların görünür isimlerini atamak için kullanılır.

 SET_COMMA_EDIT_PRECISION

Bu fonksiyonla , tablewidget'taki comma editlerin hassasiyet değerleri atanabilir.Eger hassasiyet değeri 0 olursa , comma edit 'int' değer kabul eder ve ondalık kısmı eklemez.

SET_CELL_WIDGET

Tablewidget'taki her hücredeki widget'lara dinamik olarak widget atamak için kullanılır. Widget turu,column ve row gonderilir. Eğer row gönderilmezse o an kullanılan row kullanılır.

REGISTER_LINE_WIDGET

Bu fonksiyonla , tablewidget dışında bulunan widgetların, line widget olarak kullanılmasını sağlayabiliriz. Bu widgetlarin degerlerini SELECTED_LINE'da doldurmaliyiz.

REFRESH_FIS_RECORD

Gönderilen id'ye gore fişi yeniler.Eğer id gönderilmezse açık olan fiş yenilenir.

LINE_CHANGER_BUTTON_CLICKED

Changer buttona tiklanıca bu fonksiyon çağırılır.Geri dönüş değeri CEREN_RECORD_CHANGED ve CEREN_RECORD_UNCHANGED değerleridir. Bu değerlere göre , kernel gerekli butonları erişilebilir yapar.

[ FORM KERNEL Tasariminda Dikkat Edilmesi Gereken Kurallar

  • Tabloda gizlenecek bu 3 kolon için , define tanımlanmalıdır.
 #define ROW_ID_COLUMN               0
 #define FIS_ID_COLUMN               1
 #define ORDER_NUMBER_COLUMN         2
  • Tabloda kullanacağımız kolonlar için define tanımlanmalıdır. Mesela tablomuzda , prim tutarı , prim tarihi ve açıklama kolonları var.Kolonlar için define tanımlamalarımız ;
 #define CRM_SATICI_PRIMLERI_PRIM_TARIHI_COLUMN              3
 #define CRM_SATICI_PRIMLERI_PRIM_TUTARI_COLUMN              4
 #define CRM_SATICI_PRIMLERI_ACIKLAMA                        5