Wednesday, February 4, 2015

ABAP ilə ekran (Screen proqramlaşdırma Dərs 1) yaratmaq...


Bunun üçün ilk olaraq SE80 əməliyyat kodunu çağırırq və açılan pəncərədə yeni bir proqram yaradırıq. Proqram adının üzərində mausun sağ düyməsini basırıq ve açilan pəncərədə  CREATE ->>  SCREEN bölməsinə daxil oluruq.



Açılan pəncərədə  yaratmaq istədiyimiz SCREEN-ə 4 rəqəmli nömrə veririk.(1000 nömrəsindən başqa. Çünki  1000 nömrəli screen nömrəsi proqram terefinden yaradilan standart screen-dir). Screen number bölməsinə 0100 yazaraq enter düyməsinə vururuq. Hal hazırda biz 0100 nömrəli ekran yaratmiş olduq. 



  • Screen yaratdiqdan sonra screen-nin özəlliklərini (ATRİBUTLARİNİ ) daxil edirik.

1. Description (screen başlıgı).
2. Screen type.
  •   Normal screen SAP-nin yaratdıgı adi 1000 screen-nin ekvivalentdir.ve butun ekranı əhatə edir.
  •   Subscreen normal screen-nin alt hissəsi başa anlamına gəlir və yeni subscreen-i ayrılıqda istifadə etmek mümkün deyil, yalniz onu basqa screen-nin bir hissəsini təşkil edə bilər.
  •   modal dialog box normal screene oxsayir lakin onu butun ekran yox istediyimiz ölçüdə istifadə edə bilərik.

Biz hələlik nümunə ücün  normal screen seçək. Digər screen növlərini sonrakı dərslərimizdə öyrənəciyik.
  •  ELEMENT LİST screen-də olan elementləri özündə saxlayır.

Screen elementində standart olaraq TYPE-ı OK olan element yaranır.Bu element ekranda click olunan elementin function kodunu ozundə saxlayır.Bu elementə istediyimiz adı verə bilərik.Ancaq  SAP-nin standartında bu element OK_CODE və ya F_CODE adi ilə verilir.Bu adlardan istifadə etmək daha məsləhətlidi.
Screen-ə digər elementləri əlavə eləmək ücun toolbar-dadüyməsi var.Bu düymə screen painter-i açır və oradan istediyimiz elementləri screen-ə əlavə edə bilərik.



Yuxarıdakı şəkildə göründüyü kimi sol tərəfdə olan  elementləri  screen-ə əlavə edək və bunu kiçik bir misal üzərində edək.
  • Ekrana 2 ədəd parametr  və 1 ədəd də düymə yerləşdirək. Düyməyə basıldıgında isə 2 paramet-də olan məlumatı info mesaji kimi ekrana cixardaq.
  • Lazım olan elementləri screen-ə əlavə edək və əlavə etdiyimiz hər bir elementə ad verək.
  • Button-a təkcə ad vermək kifayət etmir. Bunun üçün her bir elementin üzərində 2 dəfə click olunduğu zaman həmin elementin atribut pəncərəsi acilir və bu pəncərədə elementin lazım olan məlumatlarını daxil edirk. İlkin olaraq button üçün yalniz FCODE (function code) daxil edirik.


Elementləri əlavə etdikdən sonra bu elementləri proqramda təyin edirik. Ancaq proqramda yaradilacaq dəyişənlər elementlərin adlari ilə eyni olmalıdir.Əgər eyni olmazsa elementdən dəyişənə məlumat gəlməyəcək.


  • FLOW LOGIC  screen-nin olaylarini gostərir.Yəni  screen göstərilmədən baş verən olay (PBO) - və screen göstərildikdən sonra baş verən olay (PAI). Button-a basıldıqda info mesaj-nı ekranda görmək üçün kodu  PAI olayında yazırıq. Standart olaraq SAP-i bize module user_command modulunu verir (comment veziyyetinde) və  isteye gore  bu modulu  ve ya yeni modulu istifade ede bilerik. Biz standart modulu istifadə edək.


Bu modulu comment-dən cıxardıqdan sonra üzərində 2 dəfə click edərək "bu modulu yaratmaq isteyirsizmi?" mesaj-ı gələcək. YES düyməsi basıldıqdan sonra bu modulu harada yerləşdirəcəyini soruşur.
İstərsək bu modulu ana proqrama və ya yeni  include proqrama əlavə edə bilərik. Biz yeni includ-a əlavə edək.


Enter düyməsini vurduqdan sonra kod pəncərəsi açılır ve burada kodu aşagıdakı kimi yazaq.
DATA : MSJ TYPE STRING.
CASE ok_code.
  
WHEN 'INFO'.
    
CONCATENATE P1 P2 INTO MSJ SEPARATED BY SPACE.
   
MESSAGE MSJ TYPE 'I'.
ENDCASE.
Ekranda olan 2 ayrı-ayrı dəyişəni birləşdirmək üçün msj adında dəyişən teyin etdik və
CONCATENATE operatoru vasitəsilə 2 dəyişəni birləsdirdik. Case operatorunda yazdığımız 'INFO' button-a verdiyimiz fcode-dur.
Nəticə...

























Tuesday, February 3, 2015

SAP-da Hesabat Modulu Quickviewer (QuickViewer necə hazırlanır?)...

ABAP (Advanced Business Application Programming) proqramına ehtiyac duymadan lazım olsa birdən çox table-ı bir-birinə bağlayaraq sorğular üzərindən hesabat hazırlamaq mümkündür. Bunun üçün hər hansı bir proqramlaşdırma dili bilməmizə ehtiyac yoxdur. Əhəmiyyətli olan istifadə edəcəyimiz table-rı və bu table-da iştirak edən, açar sahələrini və digər sahələri bilməkdir.

Əgər səlahiyyət məhdudlaşdırmanız yoxsa;


İstifadəçi Menyusundan;  SAP Menyusu -> Tools -> ABAP Workbench -> Utilities      -> QuickViewer (SQVI) və ya birbaşa olaraq əməliyyat kodu pəncərəsinə SQVI yazaraq bu modula çata bilərsiniz.

Əməliyyat kodu (TCODE) : SQVI

Bu nümunəmizdə 2 table-dan istifadə edəcəyəm.
İstifadə edəcəyim table-dan birisi SCARR o birisi isə SPFLİ table-rı olacaq.

SQVI əməliyyat kodunu yazaraq açılan pəncərədə yeni QuickView yaradaq. QuickView-ın adını ZHESABAT yazaraq Create düyməsinə vururuq.


Açılan pəncərədə Title bölməsinə qisa şərh yazırıq. Data sourse bölməsində isə iki ayrı Table-dan istifadə etdiyimiz üçün Table Join seçirik və Enter düyməsinə vururuq.


Shift F1 qısa yolu üzərindən əlavə etmək istədiyiniz table soruşulacaq. Və ya aşağıdakı düymə köməyi ilə əlaqədar table-ı əlavə edək.


İlkin olaraq SCARR Table-nı seçirik və Enter düyməsinə vururuq.


İkinci Table-ı isə SPFLİ olaraq seçirik.


Bu proseslərin ardından açar sahələr arasında proqramçılar tərəfindən təyin olunan avtomatik bir əlaqə görünəcək. Bu bağ iki table arasındakı əlaqəni göstərir.


 Table-mızı seçdikdən sonra F3 düyməsi ilə təkrar əvvəlki  pəncərəyə geri dönək.


Bu isə bir daha vizual bir hesabata daha istiqamətli səhifə genişliyini, hesabatda sahələrin yerləri ölçüləri , sıralaması, sütun xəttləri və ya axtar, cəmlə, kimi bir çox əlavə etmələri asanlıqla edə bilər. Aşağıdakı kimi sorğuda istifadə edəcəyimiz və hesabatda çıxmasını istədiyimiz sahələrin önünə tık qoyaq. Ardından bu sahələrdən birinə və ya bir neçəsinə görə sıralama aparaq.


Sonra Execute düyməsinə vuraraq hesabatı çalışdıraq.


Hesabat forması aşağıdakı kimidir.


















Thursday, January 8, 2015

SAGESSE Consultancy Şirkətinin Tanıtımı...


Tükiyənin SAP Texnologiyaları sahəsində fəaliyyət göstərən böyük şirkətlərdən biri olan SAGESSE Consultancy şirkəti SAP sisteminin tətbiqi, real proyektlər, onların həlli, SAP təlimlər üçün artıq Azərbaycanda "SAGESSE Azərbaycan" şirkəti olaraq fəaliyyətə başlayır...

Əlaqə üçün: sap_courses@mail.ru,
                    tbirakoglu@sagesseconsultancy.com,
                    sukru_birakoglu@yahoo.de                  
                    






Thursday, December 11, 2014

Dərs 30: Data Dictionary Nümunə Table yaradılması...


Yeni bir Database Table yaratmaq üçün SE11 əməliyyat kodundan istifadə edirik. Bizim yaradacağımız Table Z ilə başlamalıdır. Database Table sahəsinə ZTELEBE yazıb və create düyməsini vurun. Əvvəla table-ın zəruri sahələri doldurmaq məcburiyyətindəyik.


  Short Description qisminə Table-ın qısa şərhini yazıb Delivery Class-ı A, Data Browser/ Table View Maintenances-i X seçirik.


Sonra Fields sahəsinə keçərək ilk stünun adını yazırıq. Əgər biz Table yaradacıyıqsa ilk stün mütləq MANDT və dataelementi isə MANDT olmaq məcburiyyətindədir.


İkinci stün olaraq isə ID Yazaq. Data Element qisiminə gəlincə isə Predefined Type düyməsinə vurun və açılan pəncərədə göreceksinizki Data Element adı yazmaq yerinə birbaşa stünun tipini özümüz yaza biləcəyik. F4-ə bassaq giriş köməyi pəncərəsi açılacaq.


Biz ID üçün NUMC xarakterini seçirik. İnitial valuesi və keyi bu sahədə də seçməliyik. açarsız və mandt-sız table olmaz. Çox nadir table-lar mand-sız olar. Bizim yaratdığımız hər table-da mandt olmalıdır.

Tələbənin adını və soyadını ardıcıl olaraq daxil edin.




Tələbənin adı və soyadı üçün biz özümüz Data Element yaradaq. 

Ən son table-ı aktiv etməyə çalışaq. Əvvəla olaraq table-ın Technical Settings hissəsini nizamlayaq. Onu menyudan GOTO-> Technical settings orada verilən classı APPL0 və kateqoriyanı 0 seçin. 























Wednesday, December 3, 2014

Dərs 29: ALV hesabat (FIELDCAT istifadəsi)...

ALV hesabatda FİELDCAT-dan istifadə edərək hazırlanması.








*&---------------------------------------------------------------------*
*& Report  ZTEST_FIELDCAT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZTEST_FIELDCAT.

TYPE-POOLS slis.
TABLES spfli.

DATA BEGIN OF gt_spfli OCCURS 0,
         carrid  LIKE spfli-carrid,
         connid  LIKE spfli-connid,
         countryfr  LIKE spfli-countryfr,
         cityfrom  LIKE spfli-cityfrom,
       END OF gt_spfli.

DATA gv_repid TYPE sy-repid.

SELECT-OPTIONS so_carid FOR spfli-carrid.


START-OF-SELECTION.
  gv_repid sy-repid.
  SELECT FROM spfli
           INTO CORRESPONDING FIELDS OF TABLE gt_spfli
           WHERE carrid IN so_carid.

  IF sy-subrc NE 0.
    MESSAGE 'Seçilmiş kriteriyaya görə məlumat yoxdur' TYPE 'I'.
    RETURN.
  ELSE.
    PERFORM alv_goster.
  ENDIF.
*&---------------------------------------------------------------------*
*&      Form  ALV_GOSTER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_goster .

  DATA lt_fieldcat TYPE slis_t_fieldcat_alv.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name               gv_repid
      i_internal_tabname           'GT_SPFLI'
*     I_STRUCTURE_NAME             =
*     I_CLIENT_NEVER_DISPLAY       = 'X'
      i_inclname                   gv_repid
*     I_BYPASSING_BUFFER           =
*     I_BUFFER_ACTIVE              =
*     I_MODE                       =
   CHANGING
     ct_fieldcat                  lt_fieldcat
*   EXCEPTIONS
*     INCONSISTENT_INTERFACE       = 1
*     PROGRAM_ERROR                = 2
*     OTHERS                       = 3
           .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*     I_INTERFACE_CHECK                 = ' '
*     I_BYPASSING_BUFFER                = ' '
*     I_BUFFER_ACTIVE                   = ' '
*     I_CALLBACK_PROGRAM                = ' '
*     I_CALLBACK_PF_STATUS_SET          = ' '
*     I_CALLBACK_USER_COMMAND           = ' '
*     I_CALLBACK_TOP_OF_PAGE            = ' '
*     I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*     I_CALLBACK_HTML_END_OF_LIST       = ' '
*     I_STRUCTURE_NAME                  =
*     I_BACKGROUND_ID                   = ' '
*     I_GRID_TITLE                      =
*     I_GRID_SETTINGS                   =
*     IS_LAYOUT                         =
      IT_FIELDCAT                       lt_fieldcat[]
*     IT_EXCLUDING                      =
*     IT_SPECIAL_GROUPS                 =
*     IT_SORT                           =
*     IT_FILTER                         =
*     IS_SEL_HIDE                       =
*     I_DEFAULT                         = 'X'
*     I_SAVE                            = ' '
*     IS_VARIANT                        =
*     IT_EVENTS                         =
*     IT_EVENT_EXIT                     =
*     IS_PRINT                          =
*     IS_REPREP_ID                      =
*     I_SCREEN_START_COLUMN             = 0
*     I_SCREEN_START_LINE               = 0
*     I_SCREEN_END_COLUMN               = 0
*     I_SCREEN_END_LINE                 = 0
*     I_HTML_HEIGHT_TOP                 = 0
*     I_HTML_HEIGHT_END                 = 0
*     IT_ALV_GRAPHICS                   =
*     IT_HYPERLINK                      =
*     IT_ADD_FIELDCAT                   =
*     IT_EXCEPT_QINFO                   =
*     IR_SALV_FULLSCREEN_ADAPTER        =
*   IMPORTING
*     E_EXIT_CAUSED_BY_CALLER           =
*     ES_EXIT_CAUSED_BY_USER            =
    TABLES
      t_outtab                          gt_spfli
*   EXCEPTIONS
*     PROGRAM_ERROR                     = 1
*     OTHERS                            = 2
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


ENDFORM.                    " ALV_GOSTER

Monday, December 1, 2014

Dərs 28: Table-ın əlaqələrini görmək üçün...


Əvvəla SE11 əməliyyat kodu ilə table-ı ğöstəririk, sonra isə Ctrl-Shift-F11 düymələrini basırıq.
Beləcə Grafic View-ı çalışaraq üzərindəki table-ın əlaqələrini qrafik olaraq görüntüləyirik.
Burada, SPFLİ table-ı seçildi və SPFLİ Table-na bağlı olan bütün Table-lar ekranda göstərildi.




Thursday, November 27, 2014

Dərs 27: İnternal Table-lar üzərində Əməliyyat etmək...

1) APPEND:
APPEND dəyişən TO I_TAB. Dəyişən-i I_TAB-ın son sətirinə yaz".
APPEND INITIAL LINE TO I_TAB. I_TAB-ın son sətirinə boş dəyər yaz".
APPEND LINES OF I_TAB1 TO I_TAB2. I_TAB1-in sətirlərini I_TAB2-nin sətirlərinin sonuna yaz".
APPEND LINES OF I_TAB2 FROM INDEX1 TO INDEX2 TO I_TAB1. “I_TAB1 in INDEX1 ile INDEX2 arasında qalan sətirlərini I_TAB2-in sətirlərinin sonuna əlavə edir".

2) INSERT:
INSERT dəyişən INTO TABLE I_TAB“Dəyişəni I_TAB-ın son sətirinə əlavə edir".
INSERT dəyişən  INTO I_TAB INDEX 3. “Dəyişəni I_TAB-ın 3-cü sətirinə əlavə edir".

3) MODİFY:
MODIFY I_TAB INDEX 2 FROM dəyişən. “I_TAB-ın 2-ci indeksindəki dəyəri dəyişənin qiyməti ilə yeniləyər".

4) DELETE:
DELETE I_TAB INDEX 2. I_TAB-ın 2-ci indeksindəki dəyəri sil".
DELETE I_TAB WHERE ID = 2. I_TAB-ın içindən ID-si 2 olan dəyəri sil".

5) SORT:
SORT I_TAB BY ID DESCENDING/ASCENDING“I_TAB-ın sətirlərini ID dəyərlərinə görə sırala".

6) READ:
READ TABLE I_TAB INTO dəyişən INDEX 1“I_TAB-ın index1-dəki dəyərini dəyişənin içinə at".
READ TABLE I_TAB INTO dəyişən  WITH KEY ID = 10“I_TAB-ın ID-si 10 olan ilk dəyərini dəyişənin içinə at".

7) LOOP:
LOOP AT I_TAB INTO STRUCTURE.
  * I_TAB-ın bütün sətirlərində gəz".
ENDLOOP.

LOOP AT I_TAB INTO STRUCTURE WHERE ID = 10.
  * I_TAB-ın ID dəyəri 10 olan sətirlərində gəz".
ENDLOOP.

LOOP AT I_TAB INTO STRUCTURE FROM INDEX1 TO INDEX2.
  * I_TAB-ın INDEX1 ilə INDEX2 sətirləri arasında gəz".
ENDLOOP.