Friday, April 14, 2017

Program to check transport request status across different systems

*&---------------------------------------------------------------------*
*& Report  ZWF_TRANSPORT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT  zwf_transport NO STANDARD PAGE HEADING LINE-COUNT 30.

TABLES: tmsbufreq, tstrfcofil, e070.
TYPE-POOLS: ctslg, slis, icon.

SELECTION-SCREEN BEGIN OF BLOCK b1 .
SELECT-OPTIONS:
request FOR e070-trkorr,
date FOR e070-as4date,
user FOR e070-as4user NO INTERVALS NO-EXTENSION,
sys1 FOR tstrfcofil-tarsystem NO INTERVALS DEFAULT 'TST',
sys2 FOR tstrfcofil-tarsystem NO INTERVALS DEFAULT 'PRD'.
SELECTION-SCREEN END OF BLOCK b1.

TYPES: BEGIN OF info,
icon TYPE icon-id,
indicator TYPE c, " Indicator
indicator2 TYPE c,
systemid TYPE tarsystem, " target system
clientid TYPE mandt," target client
rc TYPE i, " return code
date TYPE as4date,
time TYPE as4time,
trkorr TYPE trkorr,
trfunction TYPE e070-trfunction,
as4user TYPE tr_as4user,
emailid TYPE string,
as4text TYPE e07t-as4text,
cdate TYPE as4date,
 uname TYPE ad_namtext,
END OF info.

DATA: itab TYPE TABLE OF info,
data TYPE info,
jtab TYPE TABLE OF info,
data1 TYPE info,
ktab TYPE TABLE OF info,
data2 TYPE info.

TYPES:BEGIN OF ty_request,
trkorr TYPE e070-trkorr,
as4date TYPE e070-as4date,
as4user TYPE e070-as4user,
trfunction TYPE e070-trfunction,
END OF ty_request.

DATA: it_request TYPE TABLE OF ty_request,
      wa_request TYPE ty_request.

TYPES: BEGIN OF prod,
 trkorr TYPE trkorr,
as4user TYPE as4user,
END OF prod.

TYPES:BEGIN OF ty_e07t,
  trkorr TYPE e07t-trkorr,
  as4text TYPE e07t-as4text,
      END OF ty_e07t.

DATA: it_text TYPE TABLE OF ty_e07t,
      wa_text LIKE LINE OF it_text.

DATA: es_cofile TYPE ctslg_cofile,
system TYPE ctslg_system,
step TYPE ctslg_step,
action TYPE ctslg_action.

DATA: text(20) TYPE c VALUE 'Transport Details'.
DATA: catalog TYPE slis_fieldcat_alv, "FIELDCAT
tcatalog TYPE slis_t_fieldcat_alv, "IT FIELDCAT
event TYPE slis_alv_event, "EVENT
tevent TYPE slis_t_event, "IT EVENT
layout TYPE slis_layout_alv, "LAYOUT
pg_top TYPE slis_formname VALUE 'TOP_OF_PAGE',
pg_head TYPE slis_t_listheader,
exit1 TYPE slis_exit_by_user,
sortf TYPE slis_sortinfo_alv,
tsort TYPE slis_t_sortinfo_alv,
var1 TYPE disvariant,
var2 TYPE disvariant,
v_uname TYPE ad_namtext.

INITIALIZATION.

  LOOP AT SCREEN.
  IF  screen-name = 'SYS1-LOW' OR screen-name = 'SYS2-LOW'.
    screen-input = 0.
    MODIFY SCREEN.
  ENDIF.
  ENDLOOP.

AT SELECTION-SCREEN .

  IF request IS INITIAL AND date IS INITIAL AND user IS INITIAL.
    MESSAGE 'Enter atleast 1 value' TYPE 'E'.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.

   LOOP AT SCREEN.
  IF  screen-name = 'SYS1-LOW' OR screen-name = 'SYS2-LOW'.
    screen-input = 0.
    MODIFY SCREEN.
  ENDIF.
  ENDLOOP.

START-OF-SELECTION.

  PERFORM data_retrieval.
  PERFORM build_fieldcatalog.
  PERFORM build_events USING tevent.
  PERFORM text USING pg_head.
  PERFORM display_alv_report.

**********************************************************************
* FORM : DATA_RETRIEVAL
**********************************************************************
FORM data_retrieval .

  SELECT trkorr as4date as4user trfunction INTO CORRESPONDING FIELDS OF TABLE
   it_request FROM e070
   WHERE trkorr IN request
   AND ( trfunction = 'K' OR trfunction = 'W' )
   AND as4date IN date
   AND as4user IN user.

  SORT it_request BY trkorr.

  LOOP AT it_request INTO wa_request.

    CALL FUNCTION 'TR_READ_GLOBAL_INFO_OF_REQUEST'
      EXPORTING
        iv_trkorr = wa_request-trkorr
      IMPORTING
        es_cofile = es_cofile.

    IF es_cofile-exists = 'X'.

      LOOP AT es_cofile-systems INTO system WHERE systemid IN sys1 OR systemid IN sys2. " target system

        LOOP AT system-steps INTO step WHERE clientid = ' '. " step of transport
          CLEAR data.
          data-systemid = system-systemid.
*        data-clientid = step-clientid.
          data-rc = step-rc.

          LOOP AT step-actions INTO action. " action
            data-date = action-date.
            data-time = action-time.
          ENDLOOP.

          data-trkorr = wa_request-trkorr.
          data-as4user = wa_request-as4user.
          data-cdate = wa_request-as4date.
          data-trfunction = wa_request-trfunction.
          COLLECT data INTO itab.
        ENDLOOP.
      ENDLOOP.

    ELSE.

      CLEAR data.
      data-trkorr = wa_request-trkorr.
      data-as4user = wa_request-as4user.
      data-cdate = wa_request-as4date.
      data-trfunction = wa_request-trfunction.
      APPEND data TO itab.

    ENDIF.

    DELETE ADJACENT DUPLICATES FROM itab COMPARING trkorr systemid .

  ENDLOOP.


ENDFORM. "DATA_RETRIEVAL

**********************************************************************
* FORM : build_fieldcatalog.
**********************************************************************

FORM build_fieldcatalog.

  DATA: pos TYPE i.
  DATA : name(25) TYPE c.", spac VALUE ' '.
  DATA: name2(25) TYPE c.

  CONCATENATE 'TR in ' sys2-low INTO name SEPARATED BY space.

  CONCATENATE 'TR in ' sys1-low INTO name2 SEPARATED BY space.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'ICON'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_l = 'Status'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'TRKORR'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_l = 'Request no'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'TRFUNCTION'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = 'Request type'.
*  catalog-no_zero = 'X'.
*  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'AS4USER'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = 'Request owner'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'UNAME'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_l = 'User name'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'INDICATOR2'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = name2.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'INDICATOR'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = name.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'CDATE'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = 'TR release date'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'DATE'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_m = 'TR transport date'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

  pos = pos + 1.
  CLEAR: catalog.
  catalog-col_pos = pos.
  catalog-fieldname = 'AS4TEXT'.
  catalog-tabname = 'ITAB'.
  catalog-seltext_l = 'Request Description'.
  catalog-no_zero = 'X'.
  catalog-fix_column = 'X'.
  APPEND catalog TO tcatalog.

ENDFORM. " build_fieldcatalog.

**********************************************************************
* FORM : build_events.
**********************************************************************

FORM build_events USING p_tevent.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 1
    IMPORTING
      et_events   = tevent.

  READ TABLE tevent WITH KEY name = slis_ev_top_of_page INTO event.

  IF sy-subrc = 0.
    MOVE pg_top TO event-form.
    APPEND event TO tevent.
  ENDIF.
ENDFORM. "build_events.

*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM top_of_page .
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      i_logo             = ' '
      it_list_commentary = pg_head.
* I_END_OF_LIST_GRID =
* I_ALV_FORM = .
ENDFORM. "TOP-OF-PAGE

**********************************************************************
* FORM : TEXT
**********************************************************************
FORM text USING v_head TYPE slis_t_listheader.

  DATA: line TYPE slis_listheader.
  CLEAR line.
  line-typ = 'H'.
  line-info = 'Transport request log'.
  APPEND line TO pg_head..
  CLEAR line.
ENDFORM. "TEXT

**********************************************************************
* FORM : display_alv_report.
**********************************************************************
FORM display_alv_report.
  layout-colwidth_optimize = 'X'.
  layout-box_tabname = 'IT'.
  layout-info_fieldname = 'LINE_COLOR'.
  layout-zebra = 'X'.
  layout-cell_merge = 'X'.

  jtab = itab .

  LOOP AT itab INTO data.
    CLEAR data1.
    LOOP AT jtab INTO data1 WHERE trkorr = data-trkorr AND systemid = sys2-low.
    ENDLOOP.
    IF sy-subrc = 0.
      data-indicator = 'X'.
      MODIFY itab FROM data INDEX sy-tabix.
    ENDIF.
  ENDLOOP.

  ktab = itab .

  LOOP AT itab INTO data.
    CLEAR data2.
    LOOP AT ktab INTO data2 WHERE trkorr = data-trkorr AND systemid = sys1-low.
    ENDLOOP.
    IF sy-subrc = 0.
      data-indicator2 = 'X'.
      MODIFY itab FROM data INDEX sy-tabix.
    ENDIF.
  ENDLOOP.

  SORT itab BY trkorr date DESCENDING.
  DELETE ADJACENT DUPLICATES FROM itab COMPARING trkorr.

  SELECT * FROM e07t INTO CORRESPONDING FIELDS OF TABLE it_text
    FOR ALL ENTRIES IN itab
    WHERE trkorr = itab-trkorr.

  LOOP AT itab INTO data.

    CLEAR wa_text.
    READ TABLE it_text INTO wa_text WITH KEY trkorr = data-trkorr.

    IF sy-subrc = 0.
      data-as4text = wa_text-as4text.
      MODIFY itab FROM data INDEX sy-tabix.
    ENDIF.

  ENDLOOP.

  LOOP AT itab INTO data.

    IF data-indicator2 EQ 'X' AND data-indicator EQ 'X'.
      data-icon = icon_green_light.
      MODIFY itab FROM data INDEX sy-tabix.
    ELSEIF data-indicator2 EQ 'X' AND data-indicator NE 'X'.
      data-icon = icon_yellow_light.
      MODIFY itab FROM data INDEX sy-tabix.
    ELSE.
      data-icon = icon_red_light.
      MODIFY itab FROM data INDEX sy-tabix.
    ENDIF.

  ENDLOOP.

  LOOP AT itab INTO data.

   CLEAR v_uname.
    SELECT SINGLE name_text FROM user_addrp INTO v_uname
    WHERE bname = data-as4user.

   IF sy-subrc = 0.
   data-uname = v_uname.
   MODIFY itab FROM data INDEX sy-tabix.
   ENDIF.

  ENDLOOP.

 SORT itab BY trkorr.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
  i_callback_program = sy-repid
  is_layout = layout
  it_fieldcat = tcatalog
*  it_events = tevent[]
  TABLES
  t_outtab = itab
   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. "display_alv_report.

Saturday, June 11, 2016

Logically delete a single workflow instance

To logically delete a single workflow: • Open the workflow log using SWIA transaction • select first line (top level workflow) • choose the menu item Goto > Technical Workitem Display • choose the menu item Edit > Change • click the 'Logically Delete' button

Friday, February 5, 2016

Display logo in selection screen of report


REPORT  zgm_test  NO STANDARD PAGE HEADING LINE-SIZE 255.


DATAok_ode TYPE sy-ucomm,
      r_dock_container  TYPE REF TO cl_gui_docking_container,
      r_dock_container1 TYPE REF TO cl_gui_docking_container,
      htmlviewer TYPE REF TO cl_gui_html_viewer,
      r_grid TYPE REF TO cl_gui_alv_grid,
      picture_control_1 TYPE REF TO cl_gui_picture,
      picture TYPE REF TO cl_gui_picture,
      url(256TYPE c,
      repid TYPE sy-repid,
      file_name TYPE sapb-sapfiles,
      file_type TYPE bdn_con-mimetype.


  PARAMETERSUser TYPE sy-uname.

AT SELECTION-SCREEN OUTPUT.

  CHECK r_dock_container IS INITIAL.

  CREATE OBJECT r_dock_container
    EXPORTING
*          PARENT                      =
      repid                       repid
      dynnr                       sy-dynnr
      side                        cl_gui_docking_container=>dock_at_right
      extension                   800
    EXCEPTIONS
      cntl_error                  1
      cntl_system_error           2
      create_error                3
      lifetime_error              4
      lifetime_dynpro_dynpro_link 5
      OTHERS                      6
      .

  repid sy-repid.

  IF htmlviewer IS INITIAL.
    CREATE OBJECT picture_control_1
      EXPORTING
        parent r_dock_container.
  ENDIF.

  CHECK sy-subrc 0.

  CALL METHOD picture_control_1->set_3d_border
    EXPORTING
      border 0.

* ZLOGO2 needs to be maintained in SMW0 transaction

  CALL FUNCTION 'DP_PUBLISH_WWW_URL'
    EXPORTING
      objid                 'ZLOGO2'
      lifetime              'T'
    IMPORTING
      url                   url
    EXCEPTIONS
      dp_invalid_parameters 1
      no_object             2
      dp_error_publish      3
      OTHERS                4.
  IF sy-subrc 0.
    CALL METHOD picture_control_1->load_picture_from_url_async
      EXPORTING
        url url.
  ENDIF.

Saturday, May 9, 2015

Update workitem id in z table using program exit


* WI_CONTEXT Instance Attribute Private Type Ref To IF_WAPI_WORKITEM_CONTEXT
* PROCESS_STATUS Instance Attribute Private Type STRING

  DATA: l_s_wihead TYPE swr_wihdr,
        l_wa_itab TYPE zwffi_mon,
        l_swfdname TYPE swfdname VALUE 'V_FIPP'.


  DATA: l_bukrs TYPE bkpf-bukrs,
        l_belnr TYPE bkpf-belnr,
        l_gjahr TYPE bkpf-gjahr.

  DATA: l_tmp TYPE REF TO if_swf_ifs_parameter_container.

  DATA: l_zwf_cl_fi TYPE swotobjid.



  DATA: l_process_id TYPE swwwihead,
        l_wi_id TYPE sww_wiid.


  CALL METHOD wi_context->get_wf_container "ok
    RECEIVING
      re_container = l_tmp.


  CALL METHOD l_tmp->get
    EXPORTING
      name  = l_swfdname
    IMPORTING
      value = l_zwf_cl_fi.

  l_bukrs = l_zwf_cl_fi-objkey+0(4).
  l_belnr = l_zwf_cl_fi-objkey+4(10).
  l_gjahr = l_zwf_cl_fi-objkey+14(4).

**Get work item ID
  CALL METHOD wi_context->get_workitem_id
    RECEIVING
      re_workitem = l_wi_id.

  IF sy-subrc = 0.
    UPDATE zwffi_mon SET zzwf_id = l_wi_id
    WHERE bukrs = l_bukrs
    AND   belnr = l_belnr
    AND   gjahr = l_gjahr.
  ENDIF.

Friday, January 23, 2015

Utility to download all programs in a package

&--------------------------------------------------------------------*
*& Program To Download All The Programs Present In A Package (Dev. Class) To Desktop
*&--------------------------------------------------------------------*
REPORT  z_downloadall_to_desktop.
***********************************************************************
*                           Table declaration                         *
***********************************************************************
TABLES: tadir.
***********************************************************************
*                           Data declaration                          *
***********************************************************************
TYPES: abapline(255) TYPE c.
TYPES: BEGIN OF ty_reposit,
         pgmid    TYPE tadir-pgmid,
         object   TYPE tadir-object,
         obj_name TYPE tadir-obj_name,
         devclass TYPE tadir-devclass,
      END OF ty_reposit.
DATA: it_reposit TYPE STANDARD TABLE OF ty_reposit,
      wa_reposit TYPE ty_reposit.
DATA: it_repsrc TYPE STANDARD TABLE OF abapline,
      wa_repsrc TYPE abapline.
DATA: prog(60)    TYPE c,
      mc_filename TYPE rlgrap-filename,
      filename    TYPE string.
***********************************************************************
*                           Selection Screen                          *
***********************************************************************
PARAMETERS: p_dev TYPE tadir-devclass.                    "Package Name
*****Program Logic
SELECT pgmid
       object
       obj_name
       devclass
  FROM tadir
  INTO TABLE it_reposit
  WHERE pgmid    = 'R3TR' AND
        object   = 'PROG' AND
        devclass = p_dev.

IF sy-subrc NE 0.
  MESSAGE s001(00) WITH 'No programs available in the given package'.
  EXIT.
ENDIF.
LOOP AT it_reposit INTO wa_reposit.
  prog = wa_reposit-obj_name.
  READ REPORT prog INTO it_repsrc.
  CONCATENATE 'C:\Documents and Settings\Administrator\Desktop\My ABAP Programs\Report'
              prog
              '.txt'
         INTO mc_filename.
  filename = mc_filename.
*****Function module for download files into local system
  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename                = filename
    TABLES
      data_tab                = it_repsrc
    EXCEPTIONS
      file_write_error        = 1
      no_batch                = 2
      gui_refuse_filetransfer = 3
      invalid_type            = 4
      no_authority            = 5
      unknown_error           = 6
      header_not_allowed      = 7
      separator_not_allowed   = 8
      filesize_not_allowed    = 9
      header_too_long         = 10
      dp_error_create         = 11
      dp_error_send           = 12
      dp_error_write          = 13
      unknown_dp_error        = 14
      access_denied           = 15
      dp_out_of_memory        = 16
      disk_full               = 17
      dp_timeout              = 18
      file_not_found          = 19
      dataprovider_exception  = 20
      control_flush_error     = 21
      OTHERS                  = 22.
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  CLEAR prog.
  CLEAR wa_repsrc.
ENDLOOP.
*****After download all the programs to intimate user.
MESSAGE S001(00) WITH 'Check your folder for the Programs downloaded'.

Saturday, September 13, 2014

How to Debug a Smart form ?

One way to debug smart form is to debug the Function Module of those smart forms. If you want to debug particular smart form node then the solution would be, insert a "Program Line" just above the node you want to debug and this program line write a normal ABAP breakpoint. So whenever you call the smart forms, it will stop at this breakpoint and you can debug onwards.

Friday, February 14, 2014

standard HR forms


Standard HR forms ( PE51 transaction )



BRF1 Remuneration statement
BRRE Remuneration statement
CF01 Remuneration statement for Switzerland
FF01 Example wage/salary form
FFS1 Payment of garnishment claim
GB01 Alternative sample pay slip
GF01 Alternative sample pay slip
IN01 Standard remuneration form (India)
IN02 Standard remuneration form (India)
IR01 Sample pay slip
JF01 Payroll Pay Slip
BK01 Payroll account
CK01 Payroll account for Switzerland
CNK1 Standard SAP payroll account

Monday, August 26, 2013

Program to find status of transport request in different servers

*&---------------------------------------------------------------------* *& Report ZTRANSPORT *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZTRANSPORT NO STANDARD PAGE HEADING LINE-COUNT 30. TABLES: tmsbufreq, tstrfcofil, e070. TYPE-POOLS: ctslg, slis. SELECTION-SCREEN BEGIN OF BLOCK b1 . SELECT-OPTIONS: request FOR e070-trkorr, date FOR e070-as4date, user FOR e070-as4user NO INTERVALS NO-EXTENSION, sys1 FOR tstrfcofil-tarsystem NO INTERVALS DEFAULT 'DEV', sys2 FOR tstrfcofil-tarsystem NO INTERVALS DEFAULT 'TST'. SELECTION-SCREEN END OF BLOCK b1. TYPES: BEGIN OF info, indicator TYPE c, " Indicator indicator2 TYPE c, systemid TYPE tarsystem, " target system clientid TYPE mandt," target client rc TYPE i, " return code date TYPE as4date, time TYPE as4time, trkorr TYPE trkorr, as4user TYPE tr_as4user, emailid TYPE string, as4text TYPE e07t-as4text, cdate TYPE as4date, END OF info. DATA: itab TYPE TABLE OF info, data TYPE info, jtab TYPE TABLE OF info, data1 TYPE info, ktab TYPE TABLE OF info, data2 TYPE info. TYPES:BEGIN OF ty_request, trkorr TYPE e070-trkorr, as4date TYPE e070-as4date, as4user TYPE e070-as4user, END OF ty_request. DATA: it_request TYPE TABLE OF ty_request, wa_request TYPE ty_request. TYPES: BEGIN OF prod, trkorr TYPE trkorr, as4user TYPE as4user, END OF prod. TYPES:BEGIN OF ty_e07t, trkorr TYPE e07t-trkorr, as4text TYPE e07t-as4text, END OF ty_e07t. DATA: it_text TYPE TABLE OF ty_e07t, wa_text LIKE LINE OF it_text. DATA: es_cofile TYPE ctslg_cofile, system TYPE ctslg_system, step TYPE ctslg_step, action TYPE ctslg_action. DATA: text(20) TYPE c VALUE 'Transport Details'. DATA: catalog TYPE slis_fieldcat_alv, "FIELDCAT tcatalog TYPE slis_t_fieldcat_alv, "IT FIELDCAT event TYPE slis_alv_event, "EVENT tevent TYPE slis_t_event, "IT EVENT layout TYPE slis_layout_alv, "LAYOUT pg_top TYPE slis_formname VALUE 'TOP_OF_PAGE', pg_head TYPE slis_t_listheader, exit1 TYPE slis_exit_by_user, sortf TYPE slis_sortinfo_alv, tsort TYPE slis_t_sortinfo_alv, var1 TYPE disvariant, var2 TYPE disvariant. START-OF-SELECTION. PERFORM data_retrieval. PERFORM build_fieldcatalog. PERFORM build_events USING tevent. PERFORM text USING pg_head. PERFORM display_alv_report. ********************************************************************** * FORM : DATA_RETRIEVAL ********************************************************************** FORM data_retrieval . SELECT trkorr as4date as4user INTO CORRESPONDING FIELDS OF TABLE it_request FROM e070 WHERE trkorr IN request AND trfunction = 'K' AND as4date IN date AND as4user IN user. SORT it_request BY trkorr. LOOP AT it_request INTO wa_request. CALL FUNCTION 'TR_READ_GLOBAL_INFO_OF_REQUEST' EXPORTING iv_trkorr = wa_request-trkorr IMPORTING es_cofile = es_cofile. IF es_cofile-exists = 'X'. LOOP AT es_cofile-systems INTO system WHERE systemid IN sys1 OR systemid IN sys2. " target system LOOP AT system-steps INTO step WHERE clientid = ' '. " step of transport CLEAR data. data-systemid = system-systemid. * data-clientid = step-clientid. data-rc = step-rc. LOOP AT step-actions INTO action. " action data-date = action-date. data-time = action-time. ENDLOOP. data-trkorr = wa_request-trkorr. data-as4user = wa_request-as4user. data-cdate = wa_request-as4date. COLLECT data INTO itab. ENDLOOP. ENDLOOP. ELSE. CLEAR data. data-trkorr = wa_request-trkorr. data-as4user = wa_request-as4user. data-cdate = wa_request-as4date. APPEND data TO itab. ENDIF. DELETE ADJACENT DUPLICATES FROM itab COMPARING trkorr systemid . ENDLOOP. ENDFORM. "DATA_RETRIEVAL ********************************************************************** * FORM : build_fieldcatalog. ********************************************************************** FORM build_fieldcatalog. DATA: pos TYPE i. DATA : name(25) TYPE c.", spac VALUE ' '. DATA: name2(25) TYPE c. CONCATENATE 'REQUEST IN ' sys2-low INTO name SEPARATED BY space. CONCATENATE 'REQUEST IN ' sys1-low INTO name2 SEPARATED BY space. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'CDATE'. catalog-tabname = 'ITAB'. catalog-seltext_l = 'REQUEST CREATION DATE'. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'TRKORR'. catalog-tabname = 'ITAB'. catalog-seltext_l = 'REQUEST NO'. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'INDICATOR2'. catalog-tabname = 'ITAB'. catalog-seltext_l = name2. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'INDICATOR'. catalog-tabname = 'ITAB'. catalog-seltext_l = name. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'DATE'. catalog-tabname = 'ITAB'. catalog-seltext_l = 'REQUEST TRANSPORT DATE'. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'AS4USER'. catalog-tabname = 'ITAB'. catalog-seltext_l = 'REQUEST OWNER'. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. pos = pos + 1. CLEAR: catalog. catalog-col_pos = pos. catalog-fieldname = 'AS4TEXT'. catalog-tabname = 'ITAB'. catalog-seltext_l = 'DESCRIPTION'. catalog-no_zero = 'X'. catalog-fix_column = 'X'. APPEND catalog TO tcatalog. ENDFORM. " build_fieldcatalog. ********************************************************************** * FORM : build_events. ********************************************************************** FORM build_events USING p_tevent. CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 1 IMPORTING et_events = tevent. READ TABLE tevent WITH KEY name = slis_ev_top_of_page INTO event. IF sy-subrc = 0. MOVE pg_top TO event-form. APPEND event TO tevent. ENDIF. ENDFORM. "build_events. *&---------------------------------------------------------------------* *& Form TOP_OF_PAGE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM top_of_page . CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING i_logo = ' ' it_list_commentary = pg_head. * I_END_OF_LIST_GRID = * I_ALV_FORM = . ENDFORM. "TOP-OF-PAGE ********************************************************************** * FORM : TEXT ********************************************************************** FORM text USING v_head TYPE slis_t_listheader. DATA: line TYPE slis_listheader. CLEAR line. line-typ = 'H'. line-info = 'Transport request log'. APPEND line TO pg_head.. CLEAR line. ENDFORM. "TEXT ********************************************************************** * FORM : display_alv_report. ********************************************************************** FORM display_alv_report. layout-colwidth_optimize = 'X'. layout-box_tabname = 'IT'. layout-info_fieldname = 'LINE_COLOR'. layout-zebra = 'X'. layout-cell_merge = 'X'. jtab = itab . LOOP AT itab INTO data. clear data1. LOOP AT jtab INTO data1 WHERE trkorr = data-trkorr AND systemid = sys2-low. ENDLOOP. IF sy-subrc = 0. data-indicator = 'X'. MODIFY itab FROM data INDEX sy-tabix. ENDIF. ENDLOOP. ktab = itab . LOOP AT itab INTO data. clear data2. LOOP AT ktab INTO data2 WHERE trkorr = data-trkorr AND systemid = sys1-low. ENDLOOP. IF sy-subrc = 0. data-indicator2 = 'X'. MODIFY itab FROM data INDEX sy-tabix. ENDIF. ENDLOOP. SORT itab BY trkorr date DESCENDING. DELETE ADJACENT DUPLICATES FROM itab COMPARING trkorr. SELECT * FROM e07t INTO CORRESPONDING FIELDS OF TABLE it_text FOR ALL ENTRIES IN itab WHERE trkorr = itab-trkorr. LOOP AT itab INTO data. CLEAR wa_text. READ TABLE it_text INTO wa_text WITH KEY trkorr = data-trkorr. IF sy-subrc = 0. data-as4text = wa_text-as4text. MODIFY itab FROM data INDEX sy-tabix. ENDIF. ENDLOOP. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = layout it_fieldcat = tcatalog * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = it_events = tevent[] * 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 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * I_HTML_HEIGHT_TOP = * I_HTML_HEIGHT_END = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = itab 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. "display_alv_report.

Tuesday, July 23, 2013

How to remove execute button from report selection screen


TABLES: smp_dyntxt, sscrfields,mara.

DATA: gt_exclude TYPE TABLE OF rsexfcode,
      gtt_exclude TYPE rsexfcode.

SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_matnr FOR mara-matnr.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN FUNCTION KEY 1.  "Will have a function code of 'FC01'
SELECTION-SCREEN FUNCTION KEY 2.  "Will have a function code of 'FC02'
SELECTION-SCREEN FUNCTION KEY 3.
SELECTION-SCREEN FUNCTION KEY 4.
SELECTION-SCREEN FUNCTION KEY 5.

SELECTION-SCREEN END OF BLOCK block1.

INITIALIZATION.

* Add displayed text string to buttons

  MOVE 'VF04' TO sscrfields-functxt_01.
  MOVE 'Excecute report' TO sscrfields-functxt_02.
  MOVE 'Test' TO sscrfields-functxt_03.

  gtt_exclude-fcode = 'ONLI'.

  APPEND gtt_exclude TO gt_exclude.


AT SELECTION-SCREEN.

  IF sscrfields-ucomm = 'FC01'.

    CALL TRANSACTION 'VF04'.

  ELSEIF sscrfields-ucomm = 'FC02'.

  ELSEIF sscrfields-ucomm = 'FC03'.

  ENDIF.


AT SELECTION-SCREEN OUTPUT.

  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  = '%_00'
      p_program = 'RSSYSTDB'
    TABLES
      p_exclude = gt_exclude.

Friday, November 30, 2012

Some important transactions in ABAP





SE80 ABAP/4 Development Workbench                                                                   
SE03 Groups together most of the tools that you need for doing transports.                        
SE09 Workbench Organizer
SE11 ABAP/4 Dictionary Maintenance                                                                        
SE12 ABAP/4 Dictionary Display                                                                                  
SE16N Table Browser (the N stands for New, it replaces SE16).
SE17 General Table Display                                                                                                             SE24 Class Builder
SE30 ABAP/4 Run time Analysis
SE36 ABAP/4: Logical Databases
SE37 ABAP/4 Function Modules
SE38 ABAP Editor
SE39 Split screen Editor: Program Compare
SE41 Menu Painter
SE43 Maintain Area Menu
SE51 Screen Painter: Initial Screen.
SE54 Generate View Maintenance Module
SE61 R/3 Documentation
SE63 Translation
SE71 SAP script Layouts Create/Change
SE72 SAP script styles
SE73 SAP script font maintenance (revised)
SE75 SAP script Settings
SE83 Reuse Library.
SE91 Maintain Messages
SE93 Maintain Transaction.

Tuesday, August 14, 2012

Download IDOC data to excel format

Go to transaction IDOC

Select the radio button “Analyse IDoc field values” and click on Execute.
Enter an IDoc number and select the check box “Also output empty fields”. Click on “Output in Internal Form”. Click on Execute.

Now in menu click on List -> Save/Send -> File.
Now select the required format and hit Enter. The IDoc is now stored on your system in the required format.

Tuesday, September 6, 2011

How to create a workflow for a transaction

1. Find a standard business object - which relates to the desired master data.
Transaction SWLD - Business ObjectàDefinition Tools Builder
Click on the Business Object Builder button.
Either search for an object by name in short description or use the IMG structure, which is accessed via the Business Object Repository button.
2:Create a subtypeq of this business object.
Once the relevant business object is selected press the Create Subtype button - this will automatically create an object, which inherits all characteristics from the basic business object. Give the subtype a name prefixed with Z_.
Enter the following fields with values:
Object type: Z_TESTXX
Object name: Object_Name_for_XX
Name: Object Name: XX
Description: Object Description: XX
Program: Z_TESTXX
Application: *
3:Create an event.q
When you change your subtype the first step is to create a new event, this is done by selecting the Event node and clicking the create button. Give the event a name and a description. Next set the status of this object type component to implemented.
Event: Z_EVENT_XX
Name: Event name: XX
Description: Event Description: XX
Click on the new event and… Object Typeà Change Release Status àEdit Implemented àComponent
4:Create a method.q
Next a method must be created without using any function module template. When creating the method ensure that the method call is synchronous - this means that the method doesn't require a terminating event. Next set the status of this object type component to implemented.
Method: Z_METHODXX
Name: Method name: XX
Description: Method Description: XX
Implementedà Object Type Component à Change Release Status àEdit q
5. Create Key fields.Create key fields with ABAP dictionary field proposal. Enter ‘BKPF’ in table name field and select all the key fields. Press Continue button. Next set the status of these key fields to implemented.à Object Type Component à Change Release Status àEdit Implemented
6:Implement business object.qThe whole business object needs to be implemented so click on the business object title and…àEdit Implementedà Object Type àChange Release Status
7:Link a changeq document to the business object & an event.Now the event you created in the new business object subtype needs to be linked to the relevant change document type. This will enable the event to be triggered on creation of the relevant change document.
Transaction SWLD… EventàDefinition Tools Linkageà Change Documents àCreation Click the New Entries buttonEnter the relevant Change Document Type, your Business Object Subtype & the related Event from the Business object subtype.This new entry is assigned to a particular type of change document (Create, Change or Delete) so for each type of change document we need to create a respective event in the business object subtype & link these here.
Note 1. The starting point of a workflow is the object/event trigger. Without this the possibility of building a workflow is ruled out. The triggering of events is achieved through a number of mechanisms some of them are listed below:• Triggered using Change document objects.• Triggered using Status control.• Triggered through Message long text.• FI Validation Trigger• And a few others, which are closely, intertwined with config. e.g. Workflow events for Purchase orders using output determination.• Publish events through User exits. This requires custom coding.For this demo example, you will create an event by writing a custom code.
8:Create workflow task.qNow we need to create a workflow task, this will be triggered by the event and will call the desired method in your business object subtype.Transaction SWLD Createà Tasks/Task Group àDefinition Tools This task will be of type TS (Standard Task) after this is entered click the create icon.This will bring up the main task window. Under the Basic Data tab enter the Abbreviated Name, Name and Work Item Text. Enter your business object subtype name as the Object Type and enter the Method you created within the subtype. If you tick Background Processing as the execution mode, the work item is executed without need for manual intervention.Next move to the Triggering Events tab. Insert a new entry in the table here - referencing the business object subtype and the relevant event.
9:Set up containers.qThere are a number of data containers, which are used in this process to transport relevant data between events, tasks and methods, we need to make a few small modifications to these.Click on the Containers button. Create three fields in the container with reference to the database table. Now go back to the Triggering Event tab, highlight the newly created record in the table and click the Binding Definition button. This shows us how data is transferred from the Event container into the Task container. There should be four records. Now click on the Event Parameter Container button, this shows us what data is present in the event for transfer to the task. If there is matching data in the Event Parameter Container, copy the element name from the screen and insert it in to the associated slot in the binding definition (Enclosed in &'s).The last step of all is to activate the event linkage, by pressing the small button to the left-hand side of the event record. This creates the link between the event and the task - which will call the method, which in turn calls the required transaction or reports or function module.

Saturday, July 23, 2011

SAP release dates

SAP R/3 Enterprise Release 4.0B
Release Date June 1998

SAP R/3 Enterprise Release 4.5B
Release Date March 1999

SAP R/3 Enterprise Release 4.6C
December 1999

SAP R/3 Enterprise Release 4.6C
April 2001

SAP R/3 and R/3 Enterprise 4.70 SR1
Release Date March - December 2003

ERP Central Component
Release 5.0 SR1
Release Date August 2005

ERP Central Component
Online Update April 2007
Release 6.0 SR1 SP08
Release Date June 2006

SAP enhancement package 1 for SAP ERP 6.0
Release Date December 2006

ERP Central Component
Release SAP enhancement package 2 for SAP ERP 6.0
Release Date July 2007

SAP NetWeaver 2004 (SPS 20)
File Type HTML (PlainHTML)
Release Date May 2007

Knowledge Center for SAP NetWeaver 7.0 (2004s)Support Package Stack 13, September 2007

SAP NetWeaver Mobile 7.1 SPS 02
Release Date July 2007

Monday, April 11, 2011

Restrict number of logins per user

Limits the number of login sessions per user with User Exits


* Transaction CMOD -> Utiliteis -> SAP Enhancements

* Exit Name SUSR0001

* Double click EXIT_SAPLSUSF_001

* Double click ZXUSRU01

* Insert -> include zsesschk.
* zsesschk limits the number of login sessions per user

* in a certain client

* It runs from user exit SUSR0001 after the SAP Login

* n-1 is the number of concurrent sessions allowed

TABLES: UINFO.

DATA: N TYPE I VALUE 2. "Upper limit of login sessions

DATA: OPCODE TYPE X VALUE 2, I TYPE I, A(60).

DATA: BEGIN OF BDC_TAB1 OCCURS 5.

INCLUDE STRUCTURE BDCDATA.

DATA: END OF BDC_TAB1.

DATA: BEGIN OF USR_TABL OCCURS 10.

INCLUDE STRUCTURE UINFO.

DATA: END OF USR_TABL.

* Exclude Limit login by Users

IF SY-UNAME <> 'XXX'

AND SY-UNAME <> 'XXX'.

CALL 'ThUsrInfo' ID 'OPCODE' FIELD OPCODE

ID 'TAB' FIELD USR_TABL-*SYS*.

LOOP AT USR_TABL.

IF SY-UNAME = USR_TABL-BNAME AND SY-MANDT = USR_TABL-MANDT.

I = I + 1.

ENDIF.

ENDLOOP.

IF I >= N.

A = 'You have already '.

A+17(2) = I - 1.

A+19(25) = 'login sessions in client '.

A+44(4) = SY-MANDT.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

TITEL = 'UNSUCCESSFUL LOGIN'

TXT1 = A

TXT2 = 'You are not allowed to log in'.

MOVE: 'SAPMSSY0' TO BDC_TAB1-PROGRAM,

'120' TO BDC_TAB1-DYNPRO,

'X' TO BDC_TAB1-DYNBEGIN.

APPEND BDC_TAB1.CLEAR BDC_TAB1.

MOVE: 'BDC_OKCODE' TO BDC_TAB1-FNAM,

'/nex' TO BDC_TAB1-FVAL.

APPEND BDC_TAB1.CLEAR BDC_TAB1.

CALL TRANSACTION 'SM04' USING BDC_TAB1 MODE 'N'.

ENDIF.

ENDIF.



Friday, December 24, 2010

Steps to create field exit

Step 1: Execute program ‘RSMODPRF’, entering the data element of the field
Step 2: Create function module when prompted, and add you code to the source section using the parameter
‘INPUT’ as the field value you are checking.
Step 3: Save and activate Function and execute transaction ‘CMOD’.
Step 4: Choose option: Goto-> Text Enhancements->Data elements->New DE cust docu.
Step 5: Enter data element
Step 6: Save and activate
Step 7: Execute program ‘RSMODPRF’ again but this time leave data element field blank.
Step 8: Select the checkbox for the data element you have just created and choose option: Field exit->Activate

This will now be active for all instances of this data element, but you can assign specific program and screen
combinations by pressing the ‘Assign prog./screen’ button. You can also change the code you entered in the field
exit function module by pressing the ‘Edit FM’ button.

Saturday, March 20, 2010

Important transactions in workflow

TCode
Transaction text
SBWP
SAP Business Workplace
SWDA
Alphanumeric Workflow Builder
SWDB
Create workflow
SWDC_DEFINITION
Workflow Builder Administration
SWDC_RUNTIME
Maintain Administrator for Runtime
SWDD
Workflow Builder
SWDM
Business Workflow Explorer
SWDS
Workflow Builder (Selection)
SWI11
Where-Used List for Tasks
SWI13
Task Profile
SWI2_FREQ
Work Items per Task
SWI5
Workload Analysis
SWI6
Workflows for Object
SWIA
WI Administration Report
SWIE
Unlock Work Item
SWPA
Runtime System Customizing
SWPC
WFM: Continue Workflow
SWPR
WFM: Restart Workflow
SWU2
Workflow RFC Monitor
SWU3
Automatic Workflow Customizing
SWU7
Consistency Test for Workflow Templ.
SWU9
Display Workflow Trace
SWUI
Start Workflow
SWUI_DEMO
Start Demo Workflows
SWUI_VERIFY
Start Test Workflows
SWUS
Test Workflow
SWUY
Workflow-Message Linkage
SWXF
DEMO: Create Notification of Absence
SWXML
XML Document Selection

Saturday, February 20, 2010

Creating your own SAP Customized Main Menu

• Goto Transaction SE43 - Area Menu
• Click the copy button. Copy from S000 to ZXXX
• After copying, click Change (area menu ZXXX)
• Double click on Logistics and add in your transaction code in the Area Menu.
• Remembers to Activate it.
• Next Goto Transaction SU01 - Maintain users
• Type in the user name and click the Defaults button
• Type in the area menu (ZXXX) in the Start Menu field.
• Click Save
• The user will be able to see the additional transaction on the next logon.

Wednesday, July 29, 2009

Important function modules related to dates

HR_99S_INTERVAL_BETWEEN_DATES : Difference between two dates in days, weeks, months

WEEK_GET_FIRST_DAY : Get the first day of the week

FIMA_DAYS_AND_MONTHS_AND_YEARS : Find the difference between two dates in years, months and days.

DATE_TO_DAY : Returns the Day for the entered date.

Color single row in ALV

REPORT z_alv_color.

TYPE-POOLS: slis.

DATA: BEGIN OF it_flight OCCURS 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-fldate,
seatsmax LIKE sflight-seatsmax,
seatsocc LIKE sflight-seatsocc,
color(4),
END OF it_flight.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
layout TYPE slis_layout_alv.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'IT_FLIGHT'
i_inclname = sy-repid
CHANGING
ct_fieldcat = it_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2.

SELECT carrid
connid
fldate
seatsmax
seatsocc
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE it_flight
UP TO 20 ROWS.
*-conditionally populate the color
LOOP AT it_flight.

IF it_flight-seatsocc eq 0.
it_flight-color = 'C600'.
ENDIF.
MODIFY it_flight.
ENDLOOP.
*-Pass the color field information to layout
layout-info_fieldname = 'COLOR'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = layout
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_flight
EXCEPTIONS
program_error = 1.

Sunday, June 7, 2009

Important tables in FI

Financial Accounting tables

BKPF Accounting Document Header
BSEG Accounting Document Segment
BSID Accounting: Secondary Index for Customers
BSAD Accounting: Secondary Index for Customers (Cleared Items)
BSIK Accounting: Secondary Index for Vendors
BSAK Accounting: Secondary Index for Vendors (Cleared Items)
BSIP Index for Vendor Validation
BVOR Inter Company Posting Procedure
FRUN Run Date of a Program
KNB4 Customer Payment History
KNB5 Customer Master Dunning Data
KNBK Customer Master Bank Details
KNC1 Customer Master Transaction Figures
KNC3 Customer Master Special GL Transactions Figures
LFB5 Vendor Master Dunning Data
LFBK Vendor Master Bank Details
LFC1 Vendor Master Transaction Figures
LFC3 Vendor Master Special GL Transactions
KNB1 Customer Master (Company Code)
LFA1 Vendor Master (General Section)
LFB1 Vendor Master (company Code Section)
SKA1 G/L Account Master (Chart of Accounts)
SKAT G/L Account Master (Chart of Accounts Description)

Important tables in PP

Production Planning Tables

STKO BOM Header
STPO BOM Positions (detail)
MAPL Assignment fo Task Lists to Materials
PLKO Routing Group Header
PLSO Routing Group Sequence
PLPO Routing Group Operations
AFKO Production Order Header
AFPO Production Order Position (details)

Important tables in MM

Materials Management Tables

EINA Purchasing Info Record- General Data
EINE Purchasing Info Record- Purchasing Organization Data
MAKT Material Descriptions
MARA General Material Data
MARC Plant Data for Material
MARD Storage Location Data for Material
MAST Material to BOM Link
MBEW Material Valuation
MKPF Header- Material Document
MSEG Document Segment- Material
MVER Material Consumption
MVKE Sales Data for materials
RKPF Document Header- Reservation
T023 Mat. groups
T024 Purchasing Groups
T156 Movement Type
T157H Help Texts for Movement Types
Purchasing TablesA501 Plant/Material
EBAN Purchase Requisition
EBKN Purchase Requisition Account Assignment
EKAB Release Documentation
EKBE History per Purchasing Document
EKET Scheduling Agreement Schedule Lines
EKKN Account Assignment in Purchasing Document
EKKO Purchasing Document Header
EKPO Purchasing Document Item
IKPF Header- Physical Inventory Document
ISEG Physical Inventory Document Items
LFA1 Vendor Master (General section)
LFB1 Vendor Master (Company Code)
NRIV Number range intervals
RESB Reservation/dependent requirements
T161T Texts for Purchasing Document Types

Important tables in SD

Sales and Distribution Tables

KONV Conditions for Transaction Data
KONP Conditions for Items
LIKP Delivery Header Data
LIPS Delivery: Item data
VBAK Sales Document: Header Data
VBAP Sales Document: Item Data
VBBE Sales Requirements: Individual Records
VBEH Schedule line history
VBEP Sales Document: Schedule Line Data
VBFA Sales Document Flow
VBLB Sales document: Release order data
VBLK SD Document: Delivery Note Header
VBPA Sales Document: Partner
VBRK Billing: Header Data
VBRP Billing: Item Data
VBUK Sales Document: Header Status and Administrative Data
VBUP Sales Document: Item Status
VEKP Handling Unit - Header Table
VEPO Packing: Handling Unit Item (Contents)
VEPVG Delivery Due Index

Reports

Reports:

A report is an executable program which takes some input, fetches the relevant data, processes it and gives some output.

There are 7 types of reports. They are:

1. Interactive reports
2. Classic reports
3. Logical database reports
4. Alv reports
5. Graphic reports.
6. ABAP query
7. Report writer.

1. Classical Reports

In classic reports, we can see the output in single list where as in interactive reports we can see the output in multiple lists.

These are the simplest reports. Programmers learn this one first. It is just an output of data using the Write statement inside a loop.
• Classical reports are normal reports. These reports are not having any sub reports. IT IS HAVING ONLY ONE SCREEN/LIST FOR OUTPUT.
Events In Classical Reports.
• INTIALIZATION: This event triggers before selection screen display.
• AT-SELECTION-SCREEN: This event triggers after processing user input still selection screen is in active mode.
• START OF SELECTION: Start of selection screen triggers after processing selection screen.
• END-OF-SELECTION: It is for Logical Database Reporting.


2. Interactive Reports

As the name suggests, the user can Interact with the report. We can have a drill down into the report data. For example, Column one of the report displays the material numbers, and the user feels that he needs some more specific data about the vendor for that material, he can HIDE that data under those material numbers.
And when the user clicks the material number, another report (actually sub report/secondary list) which displays the vendor details will be displayed.
We can have a basic list (number starts from 0) and 20 secondary lists (1 to 21).
Events associated with Interactive Reports are:
1. AT LINE-SELECTION
2. AT USER-COMMAND
3. AT PF
4. TOP-OF-PAGE DURING LINE-SELECTION.
HIDE statement holds the data to be displayed in the secondary list.
sy-lisel: contains data of the selected line.
sy-lsind : contains the level of report (from 0 to 21)
Interactive Report Events:
• AT LINE-SELECTION : This Event triggers when we double click a line on the list, when the event is triggered a new sublist is going to be generated. Under this event what ever the statements that are been return will be displayed on newly generated sublist.
• AT PFn: For predefined function keys...
• AT USER-COMMAND : It provides user functions keys.
• TOP-OF-PAGE DURING LINE-SELECTION :top of page event for secondary list.


3.Logical Database Reports

Logical database is another tool for ABAP reports. Using LDB we can provide extra features for ABAP reports.
While using LDB there is no need for us to declare Parameters.
Selection-screen as they will be generated automatically.
We have to use the statement NODES in ABAP report.
If there are many tables the Performance will be slow as all the table data will be read from top node to bottom node .

4. Alv reports

ALV means ABAP List Viewer.
ALV is available in two modes: list and grid. List mode is good old list processing with standard functionalities, and grid mode is using a new OCX object displaying grids

ALV LIST- the commonly used ALV functions are
1.REUSE_ALV_VARIANT_DEFAULT_GET
2.REUSE_ALV_VARIANT_F4
3.REUSE_ALV_VARIANT_EXISTENCE
4.REUSE_ALV_EVENTS_GET
5.REUSE_ALV_COMMENTARY_WRITE
6.REUSE_ALV_FIELDCATALOG_MERGE
7.REUSE_ALV_LIST_DISPLAY
8.REUSE_ALV_POPUP_TO_SELECT

5) Graphical reports

Graphical -- Redirecting sap data into Business graphics
Here by using
Graph_2D, Graph_3D function modules we can get the 2D and 3D graphical reports.

6. ABAP Query Reports

ABAP query is another tool for ABAP. It provides efficency for ABAP reports. These reports are very accurate.
Transaction Code : SQ01
Report Writer
Key Concept :
Super users and end users can use Report Painter/Report Writer tools to write their own reports.
Giving them the ability to report on additional fields at their discretion shifts the report maintenance burden to them, saving SAP support groups time and effort normally spent creating and maintaining the reports.
Instead of using ABAP code to write a report in FI and CO, many users build a Report Painter/ Report Writer library using transaction MC27.
However, this workaround has some drawbacks. Little known transaction GRCT solves these problems in most cases, and eliminates the need to use transaction MC27.

7. report painter / report writer

You use the Report Painter to create reports from data in the Special Purpose Ledger (FI-SL) application component and other SAP application components to meet your specific reporting requirements.
Many reporting requirements can be met using the standard reports provided by various SAP application components. However, if your reporting requirements are not fulfilled by SAP’s standard reports, you can use the Report Painter to quickly and easily define your own reports.

The Special Purpose Ledger (FI-SL) application component does not provide any standard Report Painter reports because you must first install your FI-SL system setup (database tables and so on) to meet your specific business requirements.
Advantages of the Report Painter include:
• Easy and flexible report definition
• Report definition without using sets
• Direct layout control

In addition to the Report painter, you can use the Report Writer to define reports. You use the Report Writer to create reports from data in the Special Purpose Ledger (FI-SL) application component and other SAP application components to meet your specific reporting requirements.
The Report Writer is a tool using which you can define reports.
Many reporting requirements can be met using the standard reports provided by various SAP application components. However, if your reporting requirements are not fulfilled by SAP's standard reports, you can also define complex reports using the Report Writer.
With the Report Writer, you can organize reports to meet the specific needs of your enterprise. The Report Writer uses reporting building blocks, such as sets, which can be used in any report.

ABAP Report Types
ABAP report types are those ones available in some report's attributes screen, i.e. :
• Executable program
• Function group (containing function modules)
• Include
• Interface pool
• Class pool
• Module pool
• Subroutine pool

Wednesday, May 20, 2009

BAPI

A Business Application Programming Interface (BAPI) is a precisely defined interface providing access to processes and data in business application systems such as R/3.

BAPIs are defined as API methods of SAP business object types. These business object types and their BAPIs are described and stored in the Business Object Repository (BOR). A BAPI is implemented as a function module, that is stored and described in the Function Builder.
As of Release 4.5A BAPIs can also describe interfaces, implemented outside the R/3 System that can be called in external systems by R/3 Systems. These BAPIs are known as BAPIs used for outbound processing. The target system is determined for the BAPI call in the distribution model of Application Link Enabling (ALE).


BAPIs used for outbound processing are defined in the Business Object Repository (BOR) as API methods of SAP Interface Types. Functions implemented outside the R/3 System can be standardized and made available as BAPIs. For further information see BAPIs Used For Outbound Processing.

BAPIs can be called within the R/3 System from external application systems and other programs. BAPIs are the communication standard for business applications. BAPI interface technology forms the basis for the following developments:
· Connecting:
· New R/3 components, for example, Advanced Planner and Optimizer (APO) and Business Information Warehouse (BW).
· Non-SAP software
· Legacy systems
· Isolating components within the R/3 System in the context of Business Framework
· Distributed R/3 scenarios with asynchronous connections using Application Link Enabling (ALE)
· Connecting R/3 Systems to the Internet using Internet Application Components (IACs)
· PC programs as front-end to the R/3 System, for example, Visual Basic (Microsoft) or Visual Age for Java (IBM).
· Workflow applications that extend beyond system boundaries
· Customers' and partners' own developments

ALE


Application Link Enabling (ALE) is a set of business processes and tools that allow applications on different computer systems to be linked. This can be done between different SAP systems as well as between SAP and non-SAP systems.
In a single SAP system different applications are integrated via a single database (e.g. finance, sales, production, human resources). However, many companies do not have just one integrated system but a distributed environment with different applications running on different systems. To run the whole business in such an environment the distributed applications have to be linked. This can be done through Application Link Enabling (ALE).
ALE provides distributed business processes that can be used to link the applications on different platforms. There are some ALE business processes delivered in the standard SAP system. Furthermore, there are tools that can be used to change the existing ALE business processes or to implement new distributed business processes.
Besides the business processes there are special ALE services that are required to set up and control a distributed environment. These services include a distribution model, business object synchronization and tools for monitoring or error handling. ALE is a major part of SAP's Business Framework Architecture. Besides the basis middleware, that provides the communication between components, and the interfaces (BAPIs), ALE business processes and ALE services enable the cooperation of the single components within the framework. That makes ALE the glue of the Business Framework

Different types of views

Views:
A view is a logical view on one or more tables, that is, a view is not actually physically stored, instead being derived from one or more other tables.
Types:
Database views
The view defined in the ABAP Dictionary is reproduced in the underlying database. You can use both ABAP Open SQL and ABAP Native SQL to access such views from ABAP programs, but you can only define them using transparent tables. If you define a database view using only one table, you can make changes to the view. For database views containing several tables, however, only read accesses are allowed.
Projection views
Projection views are used to suppress certain fields from a table in the interests of minimizing interfaces. A projection view can only refer to one table and, in contrast to database views, you cannot specify any restrictions with regard to table type. This view type also permits both read and write accesses with ABAP Open SQL.
Help views
Help views are used as the selection method of elementary search helps if the selection is too complex to be defined with a single database table. In contrast to database views, help views implement an outer join. For this reason they are suitable for linking supplementary information such as explanatory text from secondary tables. If the supplementary information were missing in an inner join, the entire dataset would not be selected.
Maintenance views
Maintenance views provide you with a business view of the data. You can change it either with the table maintenance transaction SM30, which allows you to maintain data from the base tables in a view at the same time, or with the customizing transaction. The mechanisms for data maintenance such as screens and processing programs can be created with a special transaction (SE54).

Types of tables in Data Dictionary

Transparent table
There is a physical table on the database for each transparent table. The names of the physical tables and the logical table definition in the ABAP/4 Dictionary correspond.
All business data and application data are stored in transparent tables.
On the other hand, pooled tables and cluster tables are not created in the database. The data of these tables is stored in the corresponding table pool or table cluster. It is not necessary to create indexes and technical settings for pooled and cluster tables.
Pooled table
Pooled tables can be used to store control data (e.g. screen sequences, program parameters or temporary data). Several pooled tables can be combined to form a table pool. The table pool corresponds to a physical table on the database in which all the records of the allocated pooled tables are stored.
Cluster table
Cluster tables contain continuous text, for example, documentation. Several cluster tables can be combined to form a table cluster. Several logical lines of different tables are combined to form a physical record in this table type. This permits object-by-object storage or object-by-object access. In order to combine tables in clusters, at least parts of the keys must agree. Several cluster tables are stored in one corresponding table on the database.

How to Debug a Sap Script ?

They are two ways to debug the SAP Script.
1. Use Tools - Word Processing - Layout Set (SE71). Enter name of layout set and then Utilities - Activate Debugger. It is of no consequence which layout set you enter when selecting the SAP script debugger. (Menu path: Tools-Word processing - Forms, Utilities - Activate Debugger) The next layout set called will invoke the debugger.
2. Another way to set the SAP Script debugger is to run program RSTXDBUG.
When you debug Print program it is same as you debug any other ABAP program. While when you debug SAP Script, you actually debug the code ( scripting) you have written SAP Script Form.In transaction SMARTFORMS look up the name of the generated function module for your smart form. Copy the name and go to transaction SE37. Get into the source code of the function module; via menu Go to -> Main Program and then find your piece of code by SEARCH 'VBELN1 = GS_HD_REF-ORDER_NUMB'. Put a breakpoint there and print your smart form. It will stop at the breakpoint.Script: In SE71 give your form name and in Utilities-->Active debugger.Then put a break point in your print program where ever you want to stop it.After that you need to go to your transaction like VF03/../..Etc for Invoice you need to execute it by giving Output type. Then it will debug step by step .

Wednesday, October 8, 2008

Program to count lines of abap code


*&---------------------------------------------------------------------*
*& Report ZCOUNT_ABAPCODE *
*&---------------------------------------------------------------------*
*& *
*&---------------------------------------------------------------------*
REPORT ZCOUNT_ABAPCODE .
tables: trdir.
types: begin of ty_proginfo,
program type programm,
counter type i,
empty type i,
comment type i,
source type i,
end of ty_proginfo.
data: st_proginfo type ty_proginfo,
it_proginfo type table of ty_proginfo,
st_progline type ty_proginfo.


field-symbols: type ty_proginfo.
select-options: so_progr for trdir-name.
select name from trdir into table it_proginfo
where name in so_progr.

loop at it_proginfo assigning .
perform count_program changing .
add: -counter to st_proginfo-counter,
-empty to st_proginfo-empty,
-comment to st_proginfo-comment,
-source to st_proginfo-source.
endloop.

write:/ 'Programs', 20 st_proginfo-counter,
/ 'Empty lines', 20 st_proginfo-empty,
/ 'Comment lines', 20 st_proginfo-comment,
/ 'Source lines', 20 st_proginfo-source.

*&---------------------------------------------------------------------*
*& Form count_program
*&---------------------------------------------------------------------*
FORM count_program USING p_proginfo TYPE ty_proginfo.

data: abaptab type standard table of string,
abaplin type string.
read report p_proginfo-program into abaptab.
check sy-subrc = 0.
add 1 to p_proginfo-counter.
loop at abaptab into abaplin.
if abaplin is initial.
add 1 to p_proginfo-empty.
elseif abaplin(1) = '*'.
add 1 to p_proginfo-comment.
else.
add 1 to p_proginfo-source.
endif.
endloop.
ENDFORM. " count_program

Friday, August 22, 2008

Steps to create custom infotype

1) Go to Transaction PM01.
2) Enter the custom Infotype number which you want to create (Should be a 4 digit number, start with 9).
3) Select the 'Employee Infotype' radio button.
4) Select the 'PS Structure Infotype'.
5) Click on Create... A separate table maintenance window appears...
6) Create a PS structure with all the fields you want on the Infotype
7) Save and Activate the PS structure
8) Go back to the initial screen of PM01.
9) Click on 'All' push button. It takes a few moments.
10) Click on 'Technical Characteristics'. Infotype list screen appears
11) Click on 'Change'(pencil) button
12) Select your Infotype and click on 'Detail' (magnifying glass) button
13) Give 'T591A' as subtype table
14) Give 'T591S' as subtype txt tab
15) Give your subtype field as subtype field
16) Save and come back to PM01 initial screen
17) Click on 'Infotype Characteristics' ... Infotype list screen appears
18) Click on 'Change' (pencil) button
19) Click on 'New Entries'
20) Enter your Infotype number and short text
21) Here we have to set different Infotype Characteristics as per the requirement. (Better open another session with some standard Infotype's infotype characteristics screen and use as the reference to fill yours)
22) Save your entries.
23) Now the Infotype is created and ready to use.
24) If you want to change the layout of the Infotype as per your requirement...
25) In the PM01 initial screen...Select 'Screen' radio button and give 2000 as the screen name, then click on edit.
26) In the next screen.. Select 'Layout Editor' and click 'Change'.
27) Screen default layout appears...here you can design/modify the screen..change the attributes of the fields..etc.
28) Save and activate. (Don't forget to 'Activate at every level)

Monday, August 18, 2008

Enhance standard infotypes in HR

1. Go to transaction PM01 and press tab ‘Enhance Standard Infotypes’:
2. Enter the Infotype to be enhanced and press ‘Create’.If the Infotype is enhanced earlier, it will throw an error ‘Structure already exists’Press ‘Edit’ in this case.
3. Add fields to be displayed on the Infotype screen to structure CI_PXXXX (Where XXXX is Infotype Number).
4. Save and activate the CI include.
5. Press ‘back’ to go to first screen of transaction PM01.
6. Enter ‘Include screen’ number and press ‘Create All ’.
6. Press ‘Assign Enhancement’.
7. For module pool MPXXXX00, and a screen of Infotype to be modified, assign program ZPXXXX00 and screen specified in PM01.
E.g: For infotype 0006, screen 2037 is to be modified.
8. Go to transaction SE80, in program ZPXXXX00, the screen created with added fields can be seen in screen painter. Modify the screen if required. This screen will be seen in transaction PA30 along with standard screen of that infotype.
9. Processing logic for these added fields can be written in PBO and PAI of this screen. (The data of standard Infotype screen will be present in this program ZPXXXX00 automatically)

Tuesday, May 27, 2008

Sample BDC program for Material master creation in MM01


REPORT zgm_bdc_mm01 NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPES : BEGIN OF ty_mat,
        mbrsh(1) TYPE c,
        mtart(4) TYPE c,
        maktx(40) TYPE c,
        meins(3)  TYPE c,
        matkl(9) TYPE c,
        END OF ty_mat.

DATA: it_mat TYPE STANDARD TABLE OF ty_mat,
      wa_mat TYPE ty_mat.


DATA: it_bdcdata TYPE STANDARD TABLE OF bdcdata,
      wa_bdcdata TYPE bdcdata.

DATA: wa_opt TYPE ctu_params.

DATA : filename TYPE string.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS : p_file TYPE rlgrap-filename OBLIGATORY.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

wa_opt-nobinpt = 'X'.
wa_opt-updmode = 'A'.

*upload data form presentation server to internal table

 CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  = syst-cprog
      dynpro_number = syst-dynnr
      field_name    = ' '
    IMPORTING
      file_name     = p_file.


 START-OF-SELECTION.

  filename = p_file.

  IF filename IS NOT INITIAL.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    filename                      = filename
   filetype                      = 'ASC'
   has_field_separator           = 'X'
  TABLES
    data_tab                      = it_mat
* CHANGING
*   ISSCANPERFORMED               = ' '
 EXCEPTIONS
   file_open_error               = 1
   file_read_error               = 2
   no_batch                      = 3
   gui_refuse_filetransfer       = 4
   invalid_type                  = 5
   no_authority                  = 6
   unknown_error                 = 7
   bad_data_format               = 8
   header_not_allowed            = 9
   separator_not_allowed         = 10
   header_too_long               = 11
   unknown_dp_error              = 12
   access_denied                 = 13
   dp_out_of_memory              = 14
   disk_full                     = 15
   dp_timeout                    = 16
   OTHERS                        = 17
          .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

ENDIF.

END-OF-SELECTION.

LOOP AT it_mat INTO wa_mat.

PERFORM bdc_dynpro      USING 'SAPLMGMM' '0060'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'RMMG1-MTART'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTR'.
PERFORM bdc_field       USING 'RMMG1-MBRSH'
                               wa_mat-mbrsh.
PERFORM bdc_field       USING 'RMMG1-MTART'
                               wa_mat-mtart.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '0070'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MSICHTAUSW-DYTXT(02)'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=ENTR'.
PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(01)'
                              'X'.
PERFORM bdc_field       USING 'MSICHTAUSW-KZSEL(02)'
                              'X'.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '/00'.
PERFORM bdc_field       USING 'MAKT-MAKTX'
                              wa_mat-maktx.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MARA-MATKL'.
PERFORM bdc_field       USING 'MARA-MEINS'
                              wa_mat-meins.
PERFORM bdc_field       USING 'MARA-MATKL'
                              wa_mat-matkl.
PERFORM bdc_field       USING 'MARA-MTPOS_MARA'
                              'NORM'.
PERFORM bdc_dynpro      USING 'SAPLMGMM' '4004'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '/00'.
PERFORM bdc_field       USING 'BDC_CURSOR'
                              'MAKT-MAKTX'.
PERFORM bdc_field       USING 'MAKT-MAKTX'
                               wa_mat-maktx.
PERFORM bdc_dynpro      USING 'SAPLSPO1' '0300'.
PERFORM bdc_field       USING 'BDC_OKCODE'
                              '=YES'.

CALL TRANSACTION 'MM01' USING it_bdcdata OPTIONS FROM wa_opt.

CLEAR wa_mat.
REFRESH it_bdcdata.

ENDLOOP.

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR wa_bdcdata.
  wa_bdcdata-program  = program.
  wa_bdcdata-dynpro   = dynpro.
  wa_bdcdata-dynbegin = 'X'.
  APPEND wa_bdcdata TO it_bdcdata.
ENDFORM.

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
    CLEAR wa_bdcdata.
    wa_bdcdata-fnam = fnam.
    wa_bdcdata-fval = fval.
    APPEND wa_bdcdata TO it_bdcdata.
  ENDFORM.