ABAP

ABAP

Tuesday, May 29, 2012

Bir programın içinden çağrılan bir programın sonucunu export etme

DATA list_tab TYPE TABLE OF abaplist.

DATA :       rspar_tab  TYPE TABLE OF rsparams,
             rspar_line LIKE LINE OF rspar_tab.
DATA: n TYPE i.




DATABEGIN OF vlist1 OCCURS 0,
fields1(2048TYPE c,
END OF vlist1.


DATABEGIN OF gs_out,
        none  TYPE char01,
        matnr TYPE matnr,
        werks TYPE werks_d,
        lgort TYPE lgort_d,
        lvorm TYPE char02,
        charg TYPE char10,
        meins TYPE char03,
        labst TYPE char18,
        umlme TYPE char18,
        insme TYPE char18,
        einme TYPE char18,
        speme TYPE char18,
        retme TYPE char18,
     END OF gs_out,
     gt_out LIKE TABLE OF gs_out.


rspar_line-selname = 'MATNR'.
rspar_line-kind    = 'S'.
rspar_line-sign    = 'I'.
rspar_line-option  = 'EQ'.
rspar_line-low     = '000000000000011241'.
APPEND rspar_line TO rspar_tab.


*MB52'nin programının selection screen ine yukardaki data ları gönderdik. Ve bunun sonucunu memoryye aldık.
SUBMIT rm07mlbs WITH SELECTION-TABLE rspar_tab
                EXPORTING LIST TO MEMORY
                AND RETURN.

*Memory'den  list_tab tablomuza aldık kendi formatında.
CALL FUNCTION 'LIST_FROM_MEMORY'
  TABLES
    listobject = list_tab
  EXCEPTIONS
    not_found  = 1
    OTHERS     = 2.

IF sy-subrc = 0.

  DESCRIBE TABLE list_tab LINES n .

*list_tab internal tablosunu asci formatına çeviriyoruz.
  CALL FUNCTION 'LIST_TO_ASCI'
    EXPORTING
      list_index         = -1
      with_line_break    = 'X'
    TABLES
      listasci           = vlist1
      listobject         = list_tab
    EXCEPTIONS
      empty_list         = 1
      list_index_invalid = 2
      OTHERS             = 3.

*ASCI'ye çevirdiğimiz internal tablomuzda  alanlar '|' ile ayrılmış. Bunu da bizim istediğimiz formata çeviriyoruz.
  LOOP AT vlist1.
    IF sy-tabix >= 4.
      SPLIT vlist1-fields1 AT '|' INTO       gs_out-none
                                             gs_out-matnr
                                             gs_out-werks
                                             gs_out-lgort
                                             gs_out-lvorm
                                             gs_out-charg
                                             gs_out-meins
                                             gs_out-labst
                                             gs_out-umlme
                                             gs_out-insme
                                             gs_out-einme
                                             gs_out-speme
                                             gs_out-retme.
      APPEND gs_out TO gt_out.
    ENDIF.

  ENDLOOP.


  *CALL FUNCTION 'DISPLAY_LIST'
*   EXPORTING
*     FULLSCREEN                  =
*     CALLER_HANDLES_EVENTS       =
*     STARTING_X                  = 10
*     STARTING_Y                  = 10
*     ENDING_X                    = 60
*     ENDING_Y                    = 20
*   IMPORTING
*     USER_COMMAND                =
    TABLES
      listobject                  = list_tab.
*   EXCEPTIONS
*     EMPTY_LIST                  = 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.

*  CALL FUNCTION 'WRITE_LIST'
*    TABLES
*      listobject = list_tab.
ENDIF.

Monday, May 28, 2012

Object Oriented ALV kısa örnek

*Internal table i tanımladık
DATA: gt_mara     TYPE mara OCCURS 0 WITH HEADER LINE,
*Classlarımız için objelerimizi tanımlıyoruz.
      r_container TYPE REF TO cl_gui_custom_container,
      r_grid      TYPE REF TO cl_gui_alv_grid.


*İlk önce datayı çekiyoruz.
SELECT * FROM mara INTO TABLE gt_mara UP TO 5 ROWS.

*Ve sonra screen i çagırıyoruz.Screen in için CONTAINER isminde custom container çizdik.

CALL SCREEN 1000.

MODULE status_1000 OUTPUT.

*Objeleri yaratıyoruz.
  CREATE OBJECT r_container
    EXPORTING
      container_name = 'CONTAINER'.
  CREATE OBJECT r_grid
    EXPORTING
      i_parent = r_container.


*Methodu çagırıyoruz.
  CALL METHOD r_grid->set_table_for_first_display
    EXPORTING
      i_structure_name = 'MARA'
    CHANGING
      it_outtab        = gt_mara[].


ENDMODULE

Ve sonuç olarak output aşağıdaki gibi olur.

bapi_sales_order change

constants :gc_x(1type c value 'X'.
  databegin of gt_return_all occurs 0,
        log_nmb(4)   type c,
        doc_nmb(10)  type c,
        itm_nmb(6)   type c,
        log_dsc(100type c,
      end of gt_return_all.
  data"gv_funcname(29) VALUE 'YUSD_GATP_GET_UPDATE_RSC_DONE',
        lv_vbeln type bapivbeln-vbeln,
        lv_posnr type posnr_va,
       " lv_spart TYPE vbap-spart,
        ls_order_header_in  like bapisdh1,
        ls_order_header_inx like bapisdh1x.
  data: lt_ord_itm     like bapisditm occurs 0 with header line,
        lt_ord_itm_x   like bapisditmx occurs 0 with header line,
        lt_return      like bapiret2 occurs 0 with header line,
        lt_extensionin like bapiparex occurs 0 with header line.
  data: ls_exsi like bape_vbap,
        ls_exsx like bape_vbapx.
*  DATA: A(1) Value 1.
*  WHILE A = 1.
*  ENDWHILE.

  loop at gt_data.
    clear: lv_vbeln, lv_posnr,
           ls_order_header_in,
           ls_order_header_inx.

    ls_order_header_inx-updateflag = 'U'.
    lv_vbeln = gt_data-delnr.
    lv_posnr = gt_data-delps.

    clear: lt_extensionin[],
           lt_ord_itm[],
           lt_ord_itm_x[],
           lt_return.
*
    ls_exsi-vbeln    = lv_vbeln.
    ls_exsi-posnr    = lv_posnr.
    ls_exsi-zzresch  = gc_x.
*
    lt_extensionin-structure = 'BAPE_VBAP'.
    lt_extensionin-valuepart1 = ls_exsi.
    append lt_extensionin.

    ls_exsx-vbeln   = lv_vbeln.
    ls_exsx-posnr   = lv_posnr.
    ls_exsx-zzresch = 'X'.

    lt_extensionin-structure = 'BAPE_VBAPX'.
    lt_extensionin-valuepart1 = ls_exsx.
    append lt_extensionin.
*    CLEAR : lv_spart .
*    SELECT SINGLE spart
*             FROM vbap
*             INTO lv_spart
*            WHERE vbeln EQ lv_vbeln
*              AND posnr EQ lv_posnr.

    lt_ord_itm-itm_number  = lv_posnr.
    append lt_ord_itm.

    lt_ord_itm_x-itm_number = lv_posnr.
    lt_ord_itm_x-updateflag = 'U'.

*    lt_ord_itm_x-division   = 'X'.
    append lt_ord_itm_x.
*    EXPORT gv_funcname TO MEMORY ID 'gv_funcname'.
    call function 'BAPI_SALESORDER_CHANGE'
      exporting
        salesdocument    = lv_vbeln
        order_header_in  = ls_order_header_in
        order_header_inx = ls_order_header_inx
      tables
        return           = lt_return
        order_item_in    = lt_ord_itm
        order_item_inx   = lt_ord_itm_x
        extensionin      = lt_extensionin.
    read table lt_return with key type = 'E'.
    if sy-subrc ne 0.
      call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          wait = 'X'.
    else.
      call function 'BAPI_TRANSACTION_ROLLBACK'.
      loop at lt_return.
        clear :gt_return_all.
        gt_return_all-log_nmb = ''.
        gt_return_all-doc_nmb = lv_vbeln.
        gt_return_all-itm_nmb = lv_posnr.
        gt_return_all-log_dsc = lt_return-message.
        append gt_return_all.
      endloop.
    endif.
  endloop.

Screen PushButton Checkbox



Checkboxları bir grup olarak tanımlamak icin tek tek ctrl ile secip sag tıklayıp define radio button olarak tanımlamamız gerekıyor .

Bunlara bir function code atıyoruz  gv_okcode olarak tanımladıgımız degere doluyor bu functıon code  . Eger radio olarak bir function kod atadıysak PAI'da  yakalıyoruz atadıgımız kodu  .


PBO 'da  baslık ve toolbarı ayarlıyoruz .
module status_0100 output.
  set pf-status 'GATP'.
  set titlebar  'GATP'.

endmodule.                 " STATUS_0100  OUTPUT








module user_command_0100 input.
  select single low
           from tvarvc
           into gv_system
          where name eq 'ZLOGSYS'.
  if gv_okcode eq 'RADIO'.
    if radio1 = 'X'.
      perform f_call_transaction using 'ZRGGATP_002' gv_system.
    elseif radio2 = 'X'.
      perform f_call_transaction using 'SM37'        gv_system.
    elseif radio3 = 'X'.
      perform f_call_transaction using 'ZRGGATP_004' gv_system.
    endif.
  elseif gv_okcode eq 'PUSH'.
    perform f_call_transaction using 'ZRGGATP_002' gv_system.
  elseif gv_okcode eq 'PUSH1'.
    perform f_call_transaction using 'SM37'        gv_system.
  elseif gv_okcode eq 'PUSH2'.
    perform f_call_transaction using 'ZRGGATP_004' gv_system.
  endif.
endmodule





Ayrıca gui statuste back tusu veya exit tusu ıcın functional type exit command girip daha sonra kodumuzdada 
asagıdakı gıbı bır modul yazdıgımızda cıkıs ıslemı yapıyor bu tuslara bastıgımızda . 
*&---------------------------------------------------------------------*
*&      Module  exit  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module exit input.
  leave program.
endmodule.                 " exit  INPUT 

Friday, March 23, 2012

Custom Container'da ALV yaratma

Screen'de yarattığımız Custom Container 'CC' ismini verdik.
DATA: gv_custom_container   TYPE REF TO cl_gui_custom_container,
      gv_grid               TYPE REF TO cl_gui_alv_grid,
      gt_itab LIKE TABLE OF vbap WITH HEADER LINE,
      gt_fcat               TYPE lvc_t_fcat.

    IF gv_custom_container IS INITIAL .
      CREATE OBJECT gv_custom_container
        EXPORTING
          container_name = 'CC'.
      CREATE OBJECT gv_grid
        EXPORTING
          i_parent = gv_custom_container.
      CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
        EXPORTING
          i_structure_name       = 'VBAP'
        CHANGING
          ct_fieldcat            = gt_fcat
        EXCEPTIONS
          inconsistent_interface = 1
          program_error          = 2
          OTHERS                 = 3.
      SELECT * FROM vbap INTO CORRESPONDING FIELDS OF TABLE
        gt_itab UP TO 5 ROWS.
      CALL METHOD gv_grid->set_table_for_first_display
        EXPORTING
          i_save                        = 'A'
        CHANGING
          it_outtab                     = gt_itab[]
          it_fieldcatalog               = gt_fcat[]
        EXCEPTIONS
          invalid_parameter_combination = 1
          program_error                 = 2
          too_many_lines                = 3
          OTHERS                        = 4.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDIF

Tuesday, March 20, 2012

Custom table silme işlemi delete

1. DELETE FROM dbtab WHERE condition. 
DELETE FROM (dbtabname) WHERE condition. 
2. DELETE dbtab. 
DELETE *dbtab. 
DELETE (dbtabname) ... 
3. DELETE dbtab FROM TABLE itab. 
DELETE (dbtabname) FROM TABLE itab. 
4. DELETE dbtab VERSION vers. 
DELETE *dbtab VERSION vers.  

Wednesday, March 14, 2012

ALE EDI arasındaki fark

ALE sistemler arasındaki köprüyü oluşturuyor. EDI ise dataları SAP ve nonSAP sistemlerine belirli bir düzende taşıyan bir araç denilebilir. IDOC bu data ları taşıyan konteynır lardır.

Total Pageviews