Smartforms

     Özellikle ECC 6.0 ile kullanımı ile yaygınlaşan Smartform ile artık ABAP uygulamalarınızda birçok tasarımı 
Script'e oranla daha basit ve pratik yapabilirsiniz. Fakat Smartfom bir çok noktada malesefki çok smart değil :)
Örneğin crystal report ile karşılaştıracak olursam, smartforms un çok eksik ve zahmetli olduğunu rahatlıkla söyleyebilirim.Fakat script ile karşılaştıracak olursam mükemmel... Smartform un içerisinde zaten script özellikleride kullanabildiğinizden, script ten smartforma geçecekseniz hiç zorluk çekmessiniz.Scriptte yapılamayan bir çok özelliği smartform ile çok rahatlıkla ve daha keyifli yapabilirsiniz.

      Form çalışmasını bir function gibi düşünebilirsiniz. Formunuzu yarattığınızda arka planda bir function olarak yaratılır ve sizin forma verdiğiniz isimden, sistem kendine özgü bir türeterek (örneğin /1BCDWB/SF00000054) saklar. Zaten sistemin verdiği isimle , se37 ekranına giderseniz smartformun aslında arka planda bir functiona dönüştüğünü görebilirsiniz.Sizin yapmanız gereken ise aynı function da olduğu gibi forma, structurelarınızı ve fieldlarınızı yollamak... hatta formu kapattığınızda, formdan return değerleri de alabilirsiniz. Önemli olan formun da bir function mantığıyla alış veriş yaptığını kavramak.

      Form ilk çalıştığında dışarıdan yani programın içerisinden hangi verilerin geldiğine bakar sonra form kullanacağınız stilleri işler daha sonra type verileri olup olmadığını kontrol edip Initialization bölümünde ki kodları işler bunları işlerkende performlarınız varsa form routines kısımlarında da bu verileri okur, sayısal (miktar, para vb.) alanlar için referanslar varsa PB/Miktar alanları alanlarından referans fieldlara göre şeklini burada belirler ve main bölümüne geçerek form işlemesine devam eder ve sonuçta veriler print olarak çıkar yada ekranda görüntülenir.

       Örnek uygulama tablarında konuları en basit düzeyden başlayarak adım adım resimli anlatımlarımla takip edebilirsiniz.

 

       Senaryo ;

  • MARA tablosundan malzemelerin listesini gösteren bir çıktı tasarımı

Plan ;

·         MARA tablosundan, malzeme listesi çeken ve yazdır butonuna basıldığında formu görüntüleyecek, "Z" 'li basit bir alv rapor yazımı.( ZZMMRP0001)
 ·         Verilerin aktarılacağı Structure yaratılması. ( ZZMMST0001 )
·         Yaratılacak olan formun isminin belirlenmesi. ( ZZMMFORM0001 )
·         İstenilen koşullara uygun Smartform 'un tasarımı.
·         Test 
  • Z 'li programın içeriğine eklenecek alanlar
       
        Senaryo gereği yazmış olduğum ZZMMRP0001 isimli rapora, ilk önce buton kontrolü ekliyorum. Bu buton kontrolü rapor ekrana geldikten sonra bilgileri forma göndermemi bu sayede de ekran yada yazıcıdan çıktı almamı sağlayacak... Butona verdiğim isim " print " dolayısıyla butona basıldığında sistemin bana geri döneceği sy-ucomm değeri  " sy-ucomm = print " olacak. Eğer bu butona basıldıysa sistem ilgili formu çağıracak.
         Programımın en başında, smartformu çağırmak için kullanacağım, functionun ihityacı olan fieldların tanımlamalarını ekledim ;
data : fm_name       type rs38l_fnam,
           cparam        
type ssfctrlop,
           outop         
type ssfcompop.
data : document_output_info type  ssfcrespd,
          job_output_info            
type  ssfcrescl,
          job_output_options      
type  ssfcresop.
         Programın buton kontrol kısmını aşağıdaki kod bloğuna ekledim ;
                    
form set_user_command using r_ucomm     like sy-ucomm
                         rs_selfield 
type slis_selfield. 
 
  case r_ucomm.
    
when 'PRINT'.
      
perform call_form.
  
endcase.
endform.  
         Daha sonra sırasıyla programa şu alanları ekledim ;
 
form call_form .
  
call function 'SSF_FUNCTION_MODULE_NAME'
    
exporting
      formname           = 
'ZZMMFORM0001'
    
importing
      fm_name            = fm_name
    
exceptions
      no_form                        = 
1
      no_function_module = 
2
      
others                            = 3.
  
if sy-subrc eq 1.
    
if sy-langu eq 'T'.
      
message i999 with 'İlgili Form bulunamadı! '.
    
else.
      
message i999 with 'No form! '.
    
endif.
  
endif.
  
if sy-subrc eq 2.
    
if sy-langu eq 'T'.
      
message i999 with 'İlgili Forma ait smartform programı bulunamadı! '.
    
else.
      
message i999 with 'No smartforms! '.
    
endif.
  
endif.

  
call function fm_name
    
exporting
      control_parameters   = cparam
      output_options           = outop
      user_settings              = space
    
importing
      document_output_info = document_output_info
      job_output_info              = job_output_info
      job_output_options       = job_output_options
    
tables
      it_report                             = it_report
    
exceptions
      formatting_error              = 
1
      internal_error                   = 
2
      send_error                        = 
3
      user_canceled                 = 
4
      
others                                 = 5.
endform.                
  
     Smartformum için kullanacağım alanların tümünü, önceden planlamış olduğum gibi progragramda tanıttım ve şuan programım Formu çağırabilecek şekilde hazır.

Smartformu yaratmaya başlamadan önce dilerseniz Smartform editör ekranının görüntüsünü değiştirebilirsiniz. Standart olarak editörde, local deki makinanıza yüklü Office uygulamasına ait toolbar gelir ve birkaç eklenti paketi gelir. Bunları kullanmak istemiyorsanız ki ben kullanmıyorum çünkü kullanılacak birşey değiller... Değiştirmeye karar verdiyseniz ; I18N transaction ı içerisinde bulunan I18N Customizing tab ı altındaki "MS Word as Editor"  e çift tıklayın, açılan pencerede SAPScript ve Smartforms 'un yanında bulunan tıkları kaldırın daha sonra Active butonuna basarak değişikliği aktifleştirin. Oturumununu kapatıp tekrar login olduğunuzda değişiklik geçerli olacaktır.  

      Smartformun yaratılması

        Smartformu yaratmaya başlamadan önce dilerseniz Smartform editör ekranının görüntüsünü değiştirebilirsiniz. Standart olarak editörde, local deki makinanıza yüklü Office uygulamasına ait toolbar ile birlikte birkaç eklenti paketi gelir. Bunları kullanmak istemiyorsanız, bu değişikliği yapabilirsiiz ki ben kullanmıyorum çünkü kullanılacak birşey değiller... Değiştirmeye karar verdiyseniz ; I18N transaction ı içerisinde bulunan I18N Customizing tab ı altındaki "MS Word as Editor"  e çift tıklayın, açılan pencerede SAPScript ve Smartforms 'un yanında bulunan tıkları kaldırın daha sonra Active butonuna basarak değişikliği aktifleştirin. Oturumununu kapatıp tekrar login olduğunuzda değişiklik geçerli olacaktır

 

                            Transaction; SMARTFORMS

              Smartform ilk açıldığında resimde görüldüğü gibi, “Form” yazan kısmında smartform için bir isim belirliyoruz.  Örneğin planımızda yaptığımız gibi formumuzun ismini “ZMMFORM0001” yazdıktan sonra “Yarat (Create)” butonuna bastım.

 

 

 

 

 

 

 

 

 Karşınıza aşağıdaki şekilde görüldüğü tarzda bir ekran gelmiş olmalı...

 

Şimdi form tasarımı sırasında sıklıkla kullanacağımız stili yaratmak için yeni bir oturum açın. Açılan oturumda “Transaction” bölümüne “Smartforms yazarak girin.
Not : Kesinlikle her form için ayrı bir stil yaratılmasını, stillerin ortak kullanılmamasını öneriyorum. Çünkü zaman geçince hangi form hangi stil ile eşleşiyor bilgisi yok oluyor. Her nekadar döküman ile takipte etseniz tecrübelerim göstermiştir ki mutlaka karışıklıklar oluyor. Bu tarz karışıklıklara yolaçmamak için kesinlikle bir form = bir stil olmalı....
Stil, Script ile tasarım yada Smartform ile tasarım da sıklıkla kullanılır, kullanılmalıdırda. Scripte bunu yapmak zaten nerdeyse zorunluyken Smartforms ta aslında stil zorunlu değil, standart olarak system stili dendiğinde, standart stil kullanılır fakat bunun içerisinde cetvel ölçüsü vs. bulunmaz, bu standartı kullanan kişilerde genelde tablo yada şablon görüntüleriyle oynar. Oysaki bu şekildeki yöntemler oldukça gereksiz ve zahmetlidir. Datalarınız hangi milimden başlasın, sorna neler yapsın gibi her türlü formatını Stil içerisinde yaratabilir (yaratmalısınız) daha sonra sağdan, soldan, üstten gibi her türlü detay değişikliğini bir defa stil içerisinden yaparsınız ve değiştirdiğiniz sitili kullanılan form da aynı anda değişmiş olur. Bu sebeplerden mutlaka stadandart stil yerinede kendi yaratacağınız stili kullanmanız oldukça önemli.
Karşınıza gelen ekranda resimde de görmüş olduğunuz gibi sol tarafta bulunan menüneden “Paragraf Biçimi (Paragraph Formats)”  üzerine gelip mouse yardımıyla sağ tuş yapın ve düğüm yaratı (create node) seçin. Karşınıza gelen “Paragraf Biçimi (Paragraph Format)” kısmına “ST” yazın ve onaylayın.
 
 
 
 
 
Onaylandıktan sonra karşınıza yaratmış olduğunuz “ST” isimli paragraf biçimine ait özellikleri gösteren bir pencere açılacak. Bu pencerede bulunan “Tanım” kısmına “standart yazın ve “Yazı Tipi (Font)” tabına geçin. (Bu örnek için stil örneğini çok fazla detaylandırmadan hızlıca geçiyorum) “Yazı Türünden (font family)” “Times” ı seçin. “Yazı Büyüklüğüne (Font Size)” “10” yazın ve Kaydet (Save) butonuna basarak girşinizi kaydedin.
 
 
 
 
Sol tarafta bulunan menüden “Başlık Verileri (Header Data)” kısmına mouse yardımıyla çift tıklayın, stili ilk yarattığınız ekrana geri dönmüş olucaksınız, bu ekranda bulunan “Standart Paragraf (Standard Paragraph)” yazan yere gelin ve buradan bir önceki adımda oluşturmuş olduğunuz “ST” isimli pargraf biçimini seçin ve Kaydet (Save) butonuna basın. Daha sonra aynı pencerede bulunan “Yazı Türünden (Font Family)”  “Times” ı, “Yazı Büyüklüğüne de (Font Size)” “10 yazın ve tekrar Kaydet (Save) butonuna bastıktan sonra stili aktifleştirin. Şimdilik bu uygulama için stilimizi taslak olarak hazırladık ve aktiflştirdik. Form tasarımı süresince, stil ekranı açık olsun çünkü bu ekranıda sıklıkla kullanıcaz.
 
Not :
Smartform içerisinde stil tanımı en tepede Form Niteliği (Form Attributes) yaptıktan sonra diğer yarattığınız metin, pencere vb. yerlerde tekrardan stil tanımlamanız gerekmez. En üstte tanımlanan stil aşağı doğru yaratılan her nesnede geçerlilik kazanır. Fakat istediğiniz zaman istediğiniz pencere, metin vb. gibi yerlerde farklı stiller kullanabilirsiniz. Bu kullanım sonunda kullandığınız yerde formun üstünde tanıtmış olduğunuz stil değil, yeni stiliniz geçerli olur.
Smartforma geri dönün, orta kısımda bulunan “ Tanım (Meaning)“ yazan yere form ile ilgili kısa açıklama metni girin. Örneğin “ form deneme – 01” . Orta bölümde bulunan “Çıktı Seçenekleri (Output Options) tab ını seçip aşağıdaki değişiklikleri yapın.
Sayfa biçimi (Page Format)                                   = DINA4
Stil (style)                                                                 = ZZMMFORM0001
Değişiklikleri yaptıktan sonra Kaydet (Save) butonuna basın ve Smartformu aktifleştirin.
 
Genel Ayarlar menüsü altından , Form arayüzü yazan yere çift tıklayın, orta kısımda açılan (Form Painter ‘ın açık olduğunu varsayarak orta kısım diyorum… Eğer Form Painter açık değil ise sağ kısımda açılan…) bölümde İçe Aktar, Dışa Aktar, Tablolar, İstisnalar şeklinde 4 adet tab göreceksiniz. Bu tablardan Tablolar olanına gelin. (Diğer tab ları daha sonra anlatacağım.) Parametre Adı yazan yerin hemen altına it_report, Tip Belirleme yazan yerin hemen altına like, Associated Type  yazan yerin hemen altına ZZMMST0001. Check butonu ile hata kontrolü yapın. Form ara yüzündeki işimizi hatasız bitirdikten sonra Genel TanımlarGenel Tanımlar yazan yere gelin ve çift tıklayın, Değişken Adı yazan yerin hemen altına lt_it_report, Type Assignment yazan yerin hemen altına type, Associated Typeyazan yerin hemen altına ZZMMST0001 yazın. Check butonu ile hata kontrolü yapın, hiçbir hata yoksa Kaydet ve Aktifleştir butonuna basarak formu aktifleştirin.
%Page1 New Page yazan yere gelin ve çift tıklayın, orta kısımda açılan bölümde, üst kısımda bulunan Sayfa yazan yere Page1, Tanım yazan yeride boş bırakın. (Ben bu örnekler için bu tanımlamaları yaptım bu kısma istediğiniz şekilde y,tanımlama yapabilirsiniz. Fakat formunuza başka sayfalarda ekleye bileceğinizi düşünerek belli bir planda “Sayfa” isimleri vermenizi öneririm.) Bu tanımlamaları yazdıktasn sonra Enter tuşuna basın. Sonraki sayfa yazan yerin değiştiğini göreceksiniz.( Bu kısımların anlatımlarını ilerki bölümlerde anlatacağım.)
MenüŞuanda sol taraftaki menü listesinde PAGE1 görüyor olmalısınız.Bu yazının hemen solunda bulunan ve default olarak sağ tarafı gösteren ufak ok işaretine basak PAGE1 ‘e ait alt menü listesini açın. Bu alanda MAIN kısmını görüyor olmalısınız.
Buraya kadar her şeyi en basidi ile anlattım ve Eğitim – 1 bölümünde yer alan bu örnek içinde en basidi ile devam etmeyi planlıyorum. Şuanki ilerleyişte şablon yapılarından, kodlardan, doğruluklardan, folderlardan bahsetmeden ilerleyip, formu direk loop döngüsüne sokup, structure daki verilerin en basit şekliyle nasıl düzenli yazdırılacağını göstermeyi ve Smartform ‘un çalışma yapısının mantığını en basit şekliyle anlatmayı planlıyorum. Ls StilStil Menü
Şimdi bu Formu kapatmadan yeni bir oturum yaratın ve Smartforms transaciton ‘u ile ZZMMFORM0001 yaratmış olduğunuz stil ‘i değiştir butonu ile açın. Daha önceden yaratmış olduğunuz ST paragraf öğesi gibi aynı şekilde LS isimli bir paragraf oluşturun. LS isimli paragrafı oluşturduktan sonra üzerine gelip çift tıklayın ve sağ kısımda açılan bölümden Girinti ve Aralıklar tab ‘ına gelin, Sol kenar boşluğuna 1 Cm değerini verin ve Enter tuşuna basın.Sekmeler tab ‘ına gelin. Şimdi burada formumuzdaki düzeni oluşturucağız. Cetvel ölçüleriyle Malzeme nosu sayfanın kaçıncı santiminden başlasın, malzemenin yaratıldığı tarih kaçıncı santimden başlasın şeklinde formda çıkmasını istediğimiz sütünların düzgünlüğü açısından planlayacağız. İlk BO Stilsütün için zaten girinti tab ‘ında 1 cm. olarak ayarlamıştık bu şu demek ilk sütün her zaman kağıdın sol 1 cm içerisinden başlayacak. Sekmeler bölümünde ise ilk sütündan sonraki sütünlar hangi cm. lerden başlasın bunu belirleyeceğiz. Sekmeler tab ‘ı altında yer alan Kalem başlığının hemen altına 4 yazıp enter yapın. Bu örnekte ikinci sütunu 4 nci cm. ‘den yazdırmak istiyorum ve üçüncü sütünunda 13 nci cm. den başlamasını istiyorum ve ikinci satırada bu yüzden 13 değerini yazıp enter tuşuna basın. Stili hatasız değiştirdiyseniz Kaydet butonuna bastıktan sonra, Sol tarafta bulunan menüden Karakter Biçimlendir ‘e gelip sağ tuşa basın ve Düğüm Yarat ‘ı seçin. Çıkan ufak penceredeki Karakter biçimi yazan yere BO yazın ve yeşil OK butonuna basın. Sağ tarafta çıkan bölümde Tanım yazan yere Bold yazın ve Yazı tipi tab ‘ına gelin, Yazı türü yazan yerden TIMES ‘ı Yazı büyüklüğü yazan yerden 10 ‘u Yazı Stili yazan yerden Bold ‘u seçin. Stili hatasız değiştirdiyseniz Kaydet butonuna bastıktan sonra Aktifleştir butonu ile aktifleştirin ve tekrar forma geri dönün.
 
 
Metin DüzenleyiciMainDüzenleyicilümünün üzerinde sağ tuş ile tıklayın ve çıkan menüden Yarat => Metin öğesini seçin. Main bölümünün altında oluşan %TEXT ‘in üzerine gidip çift tıklayın, orta kısımda açılan bölümde, üst kısımda user_specificbulunan Metin yazan yere Text1 yazın ve Enter tuşuna basın. Yine orta bölümde bulunan Metin Tipinin hemen altında solda bulunan butonlardan üsttekine Metin Düzenleyici butonuna basın. Metin öğesi düzenleme kısmına girdikten sonra üstteki menüden Git ‘in altında bulunan Düzenleyiciyi ayarla ‘yı seçin, açılan pencereden SAPScript tab ‘ına gelin ve PC Eitor başlığı altında yer alan Graphical PC Editor ‘un tıkını kaldırın ve yeşil OK butonuna pasarak pencereyi kapatın. Bu işlem sonrasında Metin edütörünün değiştiğini göreceksiniz. Metin öğesi düzenle editörünüz şuan şekildeki gibi olmalı.

 

Text1
 
Sol tarafta bulunan ufak kutuya bir önceki adımda yaratmış olduğunuz stili yani LS ‘yi bu ufak kutuya yazın ve Enter tuşuna BASMAYIN hemen yan tarafdaki büyük kutuya ise sırasıyla <BO>Malzeme No,,Malzeme Açıklaması,,Tarih</> yazın ve yeşil geri tuşuna birkez basın, metin öğesine geri dönmüş olucaksınız ve Kaydet butonuna basarak formu kaydedin ve hatasız bir işlem yapmışsanız Aktifleştir butonuna basarak formunuzu aktifleştirin. (burada kullanmış olduğunuz <BO> yazı stilinin bold olarak çıkmasını sağlayacaktır. Komut <BO> ile başlar </> ile biter. BO ise stil içerisinde yaratmış olduğunuz Karakter Biçimidir.)
TEXT1 ‘in hemen üzerinde sağ tuş ile tıklayın ve çıkan menüden Yarat => Akış => Döngü öğesini seçin. Seçtiğiniz zaman MAIN altında bir LOOP döngüsünün eklendiğini göreceksiniz. %Loop1 Yazan yere çift tıklayın. Döngü yazanLoop yere Loop1 yazıp Enter tuşuna basın. Orta kısımdaki bölümden Veriler tab ‘ı altındaki LOOP döngüsü başlıklı bölümde Dahili Tablonun seçili (tıklı) olduğunu göreceksiniz. Burada ki ilk kutuya it_report yazın, ikinci kutudan I INTO yu seçin üçüncü kutuya lt_it_report yazın ve Enter tuşuna basın.Yaratmış olduğunuz LOOP1 döngüsü üzerinde sağ tuş ile tıklayın ve çıkan menüden Yarat => Metin öğesini seçin. LOOP1 döngüsü altında oluşan %TEXT ‘in üzerine gidip çift tıklayın, orta kısımda açılan bölümde, üst kısımda bulunan Metin yazan yere Text2 yazın ve Enter tuşuna basın. Yine orta bölümde bulunan Metin Tipinin hemen altında solda bulunan butonlardan üsttekine Metin Düzenleyici butonuna basın.Sol tarafta bulunan ufak kutuya bir önceki adımda yaratmış olduğunuz stili yani LS ‘yi bu ufak kutuya yazın ve Enter tuşuna BASMAYIN hemen yan tarafdaki büyük kutuya ise &lt_it_report-matnr&,,&lt_it_report-maktx&,,&lt_it_report-ersda&(Stilde sekme yani hangi sütün hangi cm. den başlasın şeklinde belirleme yapmıştık. Form içerisinde kullanacağımız her çift virgül “,,” sekmede yaratmış olduğunuz satıra denk gelir.)
Text2
Text2
 
Buraya kadar her şeyi adım adım yapmışsanız ALV programınızı çalıştırıp formunuzu çağırın, sonuç sekildeki gibi olacaktır.
Rapor
Form çıktısı 
 
 
 
 
 

 

Bu sitede yer alan ticari marka ve urunler, kendi sahiplerine aittir. abapdanismani.com & abapspecialist.com ticari ve marka bagimsiz bir portal sistemidir, hicbir ticari marka ve urunle iliskisi yoktur.

ABAP is/are the trademark(s) or registered trademark(s) of SAP AG in Germany and in several other countries.

SAP is a registered trademark of SAP AG in Germany and in several other countries.

Google Translate



© 2008 - 2010 abapdanismani.com & abapspecialist.com