ABAP

ABAP

Thursday, June 21, 2012

Paralel Processing Example,Program Ex. With Background Job (Monitoring SM37 )...


Paralel Processing


data: h_parallel(1type c value space,
      gv_counter type i,
      gv_row     type i,
      gv_paralel type i,
      gv_taskname(30).

data: gt_mara like table of mara with header line,
      gt_marc like table of marc with header line,
      gt_marc2 like table of marc with header line.
parameters: p_rfcgr  like bdfields-rfcgr default ' '.



* Parallel >>>>>>>>>>>>>>>>
if p_rfcgr <> space.
  h_parallel = 'X'.
else.
  h_parallel = space.
endif.

if h_parallel = 'X'.
  translate p_rfcgr to lower case.
  call function 'SPBT_INITIALIZE'
    exporting
      group_name                   = p_rfcgr
    exceptions
      invalid_group_name           = 1
      internal_error               = 2
      pbt_env_already_initialized  = 3
      currently_no_resources_avail = 4
      no_pbt_resources_found       = 5
      others                       = 6.
  if sy-subrc = 1 or sy-subrc = 2 or sy-subrc = 5 or sy-subrc = 6.
    h_parallel = space.
  endif.
endif.

select * from mara into table gt_mara up to 100000 rows.

describe table gt_mara lines gv_counter.

if h_parallel = 'X'.
  clear gv_paralel.
  loop at gt_mara.
    clear: gt_marc, gt_marc[].
    concatenate 'MM_' gt_mara-matnr into gv_taskname.
    call function 'YTEST'
      starting new task gv_taskname
      destination in group p_rfcgr
      performing f_return_here on end of task
      exporting
        i_matnr               = gt_mara-matnr
      tables
        t_marc                = gt_marc
      exceptions
        communication_failure = 1
        system_failure        = 2
        resource_failure      = 3.

    if sy-subrc <> 0.
      call function 'YTEST'
        exporting
          i_matnr = gt_mara-matnr
        tables
          t_marc  = gt_marc.
      clear gv_row.
      describe table gt_marc lines gv_row.
      append lines of gt_marc to gt_marc2.
      gv_counter = gv_counter - 1.

    endif.

  endloop.
else.
  loop at gt_mara.
    call function 'YTEST'
      exporting
        i_matnr = gt_mara-matnr
      tables
        t_marc  = gt_marc.
    append lines of gt_marc to gt_marc2.
  endloop.
endif.

if h_parallel = 'X'.
  wait until gv_counter = 0.
endif.

write gv_paralel.


*&---------------------------------------------------------------------*
*&      Form  f_return_here
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_TASKNAME text
*----------------------------------------------------------------------*
form f_return_here using p_taskname.
  gv_counter = gv_counter - 1.
  receive results from function 'YTEST'
  tables
    t_marc = gt_marc.
*  DESCRIBE TABLE gt_marc LINES gv_row.
  append lines of gt_marc to gt_marc2.
  add 1 to gv_paralel.
endform.                    "f_return_here


function ytest.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_MATNR) TYPE  MATNR OPTIONAL
*"  TABLES
*"      T_MARC STRUCTURE  MARC
*"----------------------------------------------------------------------

select * from marc into table t_marc
        where matnr = i_matnr.

endfunction.





***Paralel Processing Example,Program Ex. With Background Job (Monitoring SM37 )

report  ytest.

data: gv_jobname  like tbtcjob-jobname value 'TEST',
      gv_jobgroup like tbtcjob-jobgroup,
      gv_jobcount like tbtcjob-jobcount.

perform f_create_job.
form f_create_job .
call function 'JOB_OPEN'
exporting
jobname = gv_jobname
importing
jobcount = gv_jobcount
exceptions
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
others = 4.

if sy-subrc ne 0.
write: /1 'JOB_OPEN FAILED reason code :', sy-subrc.
check 1 = 2.
endif.
  submit yolcay_v2
    with p_rfcgr = 'parallel_generators'
    user sy-uname
    via job gv_jobname number gv_jobcount
    and return.
call function 'JOB_CLOSE'
exporting
jobcount = gv_jobcount
jobname =  gv_jobname
strtimmed = 'X'
exceptions
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
others = 9.
if sy-subrc <> 0.

 message id sy-msgid type sy-msgty number sy-msgno
 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

else.
message i000(yuauth) with gv_jobname.
endif.

endform.                    " f_create_job

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.

Monday, March 12, 2012

Smartform ' a Giris & subtotal & total


       gv_formname type tdsfname value 'FORMUN ADI'
       gv_fm_name  type rs38l_fnam,


  call function 'SSF_FUNCTION_MODULE_NAME'
    exporting
      formname           = gv_formname
    importing
      fm_name            = gv_fm_name
    exceptions
      no_form            = 1
      no_function_module = 2
      others             = 3


    call function gv_fm_name
          exporting
            control_parameters = ls_control_parameters
            output_options     = ls_output_options
            user_settings        = ''
            gs_header            = gs_header
            gv_kunnr             = gv_kunnr
            gv_ubknt             = gv_ubknt
            gv_total               = gv_total
          importing
            job_output_info   = gs_return
          tables
            gt_send               = gt_send
          exceptions
            formatting_error   = 1
            internal_error       = 2
            send_error           = 3
            user_canceled      = 4
            others                  = 5.

exporting ler   smartform'da form interface kısmında tanımlanır programdaki type ne ise o olacak sekılde  .

data : begin of gt_header occurs 0.
        include structure ypkfih001.
data :  end of gt_header.
  gs_header   like line of gt_header,

gt_header ise bızım yarattıgımız structure imız olur . Burdan text translationda yapmak mumkundur .


GS_HEADER LIKE YPKFIH001
GV_KUNNR LIKE YPKFII001-KUNNR
GV_UBKNT TYPE CHAR20
GV_TOTAL LIKE YPKFII001-DMBTR


Aynı sekılde tables olarak gonderılen GT_SEND form interface icinde tables tabında tanımlanır .


Smartformda kullanacagımız degıskenler ıse global defınatıons kısmında tanımlanarak kullanılır .



Main loop ta tableda donerken calculations tabında  istedigimiz alanın toplamını alabılırız bunun icin
istedigimiz alanı fieldname  'e yazıyoruz  bir adet sonuc olusturacak fieldname atıyoruz ve yapacagımız operationu seciyoruz aynı sekılde kac ıtem oldugunuda saydırabılırız .


Bu basit ornegimizde yukarıdaki gibi subtotal ve kac adet ıtem oldugunu bulabılıyoruz bunları footerda yazdıyoruz aynı sekılde clear ettirerek her sayfada subtotali baska bir degıskene atıp toplatarakta son totali bulabılırız .

Monday, January 9, 2012

ALV subtotal yaptırtma.

  DATA lt_sort TYPE slis_t_sortinfo_alv. "sort catalog
  DATA ls_sort TYPE slis_sortinfo_alv.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name     = sy-repid
      i_internal_tabname = 'ITAB_S'
      i_inclname         = sy-repid
*      i_bypassing_buffer = 'X'
    CHANGING
      ct_fieldcat        = gt_fieldcat[].
******lt_sort tablosuna hangi alan bazında toplayacaksak onu yazıyoruz..
    ls_sort-spos      = 1.
    ls_sort-fieldname = 'AUFNR'.
    ls_sort-tabname = 'ITAB_S' .
    ls_sort-up = 'X'.
    ls_sort-subtot = 'X'.
    APPEND ls_sort TO lt_sort.
***hangi alanı toplayacaksak onu da fieldcat te yazıyoruz.
    READ TABLE gt_fieldcat WITH KEY fieldname = 'GMNGA'.
    IF sy-subrc = 0.
        gt_fieldcat-col_pos = '4'.
        gt_fieldcat-hotspot = 'X'.
        gt_fieldcat-do_sum  = 'X'.
        MODIFY gt_fieldcat INDEX sy-tabix.
    ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
*      i_bypassing_buffer = 'X'
      i_callback_program = sy-repid
      i_callback_user_command  = 'F_USER_COMMAND'
      i_callback_pf_status_set = 'F_SET_EKRAN'
      i_callback_top_of_page   = 'F_ALV_INFO'
      it_fieldcat        = gt_fieldcat[]
      is_layout          = gs_layout
      it_sort            = lt_sort[]
      i_save             = 'A'
    TABLES
      t_outtab           = itab_s
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.


Total Pageviews