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 

Total Pageviews