Excel To SAP

XLS uzantılı excel dökümanı içerisinde yer alan satırların SAP üzerinde ALV raporu olarak gösterilmesi. Yüklenecek Excel dosyasının seçilmesi için Selection-Screen üzerinde localfile tipinde seçilmesi zorunlu olarak P_FILE değişkeni tanımlanır. Uzantı tipi sabit bir değişkende .xls olarak oluşturulur.

 

PARAMETERS: P_FILE   TYPE LOCALFILE OBLIGATORY.
CONSTANTS:  C_EXT_XLS TYPE STRING    VALUE '*.xls'.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE, 
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV.
TYPES: BEGIN OF TY_EXCEL,
	  MATNR        TYPE MATNR,
	  PLANT        TYPE WERKS_D,
	  BLDAT        TYPE BLDAT,
          BUDAT        TYPE BUDAT,
       END OF TY_EXCEL.
DATA: LT_EXCEL TYPE TABLE OF TY_EXCEL,
      LS_EXCEL TYPE TY_EXCEL.

Excel’den okudunan her bir hücreye ait satırın eşleniğini bulabilmek için satırın numarası tipinden oluşan bir tablo tibi oluşturulur. Bu kısmı excel dosyası seçildikten sonra kullanacağız.

TYPES: BEGIN OF TY_ROWS,
         ROW TYPE NUMC4,
       END OF TY_ROWS.
 DATA: LT_ROWS TYPE TABLE OF TY_ROWS,
FIELD-SYMBOLS: <WA_ROW> TYPE TY_ROWS.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

Dosyayı okutabilmek için file dialog fonksiyonu açılması gerekir. Fonksiyondan dönen FileTable tablosu içerisinde seçilen dosyanın PATH’ine erişerek oluşturduğumuz P_FILE değişkenine atıyoruz.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE            = 'Excel File Upload'
      DEFAULT_EXTENSION       = C_EXT_XLS
    CHANGING
      FILE_TABLE              = LT_FILETABLE
      RC                      = LV_RETURN_CODE
    EXCEPTIONS
      FILE_OPEN_DIALOG_FAILED = 1
      CNTL_ERROR              = 2
      ERROR_NO_GUI            = 3
      NOT_SUPPORTED_BY_GUI    = 4
      OTHERS                  = 5.

  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  READ TABLE LT_FILETABLE INTO LX_FILETABLE INDEX 1.
  P_FILE = LX_FILETABLE-FILENAME.

Excel’e ait file path’in yer aldığı P_FILE değişkenini FileName parametresine veriyoruz. Excel üzerinden okumak istediğimiz alanları kısıtlayabilmek adına başlangıç kolon ve satır numarası ile bitiş kolon ve satır numaralarını belirleyebilirz. ‘ALSM_EXCEL_TO_INTERNAL_TABLE’ fonksiyonundan okunan satırlar INTERN tablosu içerisinde döndürülür.

START-OF-SELECTION.
DATA LT_TMP_EXC TYPE TABLE OF ALSMEX_TABLINE.
  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                = P_FILE
      I_BEGIN_COL             = 1
      I_BEGIN_ROW             = 3
      I_END_COL               = 1000
      I_END_ROW               = 1000
    TABLES
      INTERN                  = LT_TMP_EXC[]
    EXCEPTIONS
      INCONSISTENT_PARAMETERS = 1
      UPLOAD_OLE              = 2
      OTHERS                  = 3.
IF LINES( LT_TMP_EXC ) > 0.
DATA: WA_TMP_EXCEL TYPE ALSMEX_TABLINE.

Toplamda kaç satır bulunduğunu bulmak için satır bazında tablo sıralanır ve aynı satırlar silinerek elimizde sadece satır bazında filtrelenmiş tablo kalır.

    MOVE-CORRESPONDING LT_TMP_EXC TO LT_ROWS.
    SORT LT_ROWS BY ROW.
    DELETE ADJACENT DUPLICATES FROM LT_ROWS COMPARING ROW.

Her bir satır içerisinde dönerken mevcut satıra ait değeri alabilmek için o satıra ait excel tablosu içerisindeki satıra gidilir.
Excelden okunan satırlara ait kolon numarasına göre ilerlenir ve oluşturduğumuz tablo tipindeki eş değer kısıma eşitlenir. Her bir satırda gelen kolon numarası yükleyeceğimiz exceldeki kolon numarasına bakılarak o kolon ve satırdaki değer tabloya yazdırılır.

LOOP AT LT_ROWS ASSIGNING <WA_ROW>.
      CLEAR : LS_EXCEL , WA_TMP_EXCEL.

      LOOP AT LT_TMP_EXC INTO WA_TMP_EXCEL
        WHERE ROW EQ <WA_ROW>-ROW.
        IF WA_TMP_EXCEL-COL EQ 1.
          LS_EXCEL-MATNR = WA_TMP_EXCEL-VALUE.
          CLEAR WA_TMP_EXCEL-VALUE.

        ELSEIF WA_TMP_EXCEL-COL EQ 2.
          LS_EXCEL-PLANT = WA_TMP_EXCEL-VALUE.
          CLEAR WA_TMP_EXCEL-VALUE.

        ELSEIF WA_TMP_EXCEL-COL EQ 3.
          LS_EXCEL-BLDAT = WA_TMP_EXCEL-VALUE. 
          CLEAR WA_TMP_EXCEL-VALUE.

        ELSEIF WA_TMP_EXCEL-COL EQ 4.
          LS_EXCEL-BUDAT = WA_TMP_EXCEL-VALUE.
          CLEAR WA_TMP_EXCEL-VALUE.
       ENDIF.
      ENDLOOP.

      APPEND LS_EXCEL TO LT_EXCEL.
ENDLOOP.

Exceldeki tüm değerler LT_EXCEL Internal Table içerisinde toplandı. Artık bu tabloyu ALV Rapor olarak ekrana bastırabiliriz.

  IF LT_EXCEL IS NOT INITIAL.
    PERFORM BUILD_FIELD_CATALOG.
    PERFORM BUILD_LAYOUT.
    PERFORM DISPLAY_ALV_REPORT. 
  ENDIF.

FORM BUILD_FIELD_CATALOG .

  	FIELDCATALOG-FIELDNAME   = 'MATNR'.
  	FIELDCATALOG-SELTEXT_M   = 'Malzeme Numarası'.
  	APPEND FIELDCATALOG TO FIELDCATALOG.
  	CLEAR FIELDCATALOG.

        FIELDCATALOG-FIELDNAME   = 'PLANT'.
  	FIELDCATALOG-SELTEXT_M   = 'Üretim Yeri'.
  	APPEND FIELDCATALOG TO FIELDCATALOG.
  	CLEAR FIELDCATALOG.

        FIELDCATALOG-FIELDNAME   = 'BLDAT'.
  	FIELDCATALOG-SELTEXT_M   = 'Belge Tarihi'.
  	APPEND FIELDCATALOG TO FIELDCATALOG.
  	CLEAR FIELDCATALOG.

        FIELDCATALOG-FIELDNAME   = 'BUDAT'.
  	FIELDCATALOG-SELTEXT_M   = 'Kayıt Tarihi'.
  	APPEND FIELDCATALOG TO FIELDCATALOG.
  	CLEAR FIELDCATALOG.
ENDFORM.  

FORM BUILD_LAYOUT.
 GD_LAYOUT-ZEBRA             = 'X'.
 GD_LAYOUT-NO_INPUT          = 'X'.
 GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
 GD_LAYOUT-TOTALS_TEXT       = 'Totals'(201).
ENDFORM.

FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN' EXCLUDING RT_EXTAB .
  SET TITLEBAR 'TITLE'.
ENDFORM. 

FORM DISPLAY_ALV_REPORT .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      IS_LAYOUT                = GD_LAYOUT
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      IT_FIELDCAT              = FIELDCATALOG[]
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      I_SAVE                   = 'X'
    TABLES
      T_OUTTAB                 = LT_EXCEL
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
  ENDIF.
ENDFORM.

Reklam

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s