Sunday 17 March 2013

Timestamp in yyyymmddhhmmss format in ABAP

REPORT  ZTESTR_TS.

DATA :  lv            TYPE string.

WRITE : / sy-datum , sy-timlo , sy-uzeit.

CONCATENATE sy-datum+0(4) sy-datum+4(2) sy-datum+6(2) sy-timlo+0(2) sy-timlo+2(2) sy-timlo+4(2)  INTO lv.

WRITE : / lv.

Saturday 16 March 2013

Validating Select-options in SAP ABAP

Generally , while validating select-options we write the code as below.

*It is only partially correct , refer the codes below
select matnr from mara into lv_mara
                             where matnr in so_matnr.
if sy-subrc is not initial.
   "error message
endif.

but above code , is wrong . Now suppose the user enters two material number , 0000000002 and
0000000045 where the 2nd one does not exist in the system .But sy-subrc will become 0 , and the error message will not be executed .
So , we have to consider the following codes that will help !!!

REPORT  ztestr_14.

TABLES : mara.

SELECT-OPTIONS : so_matnr FOR mara-matnr.

TYPES : BEGIN OF ty_matnr,
          matnr TYPE matnr,
        END OF   ty_matnr.

DATA : li_matnr TYPE STANDARD TABLE OF ty_matnr.
FIELD-SYMBOLS : <fls_matnr> TYPE ty_matnr.

IF so_matnr IS NOT INITIAL.

  SELECT matnr FROM mara
               INTO TABLE li_matnr
               WHERE matnr IN so_matnr.

  IF sy-subrc IS INITIAL.

    SORT li_matnr ASCENDING BY matnr.

    LOOP AT so_matnr.

      READ TABLE li_matnr ASSIGNING <fls_matnr>
                          WITH KEY  matnr = so_matnr-low
                          BINARY SEARCH.

      IF sy-subrc IS NOT INITIAL.

        PERFORM error_handling USING text-e01 so_matnr-low.

      ENDIF.

    ENDLOOP.

    IF so_matnr-high IS NOT INITIAL.

      READ TABLE li_matnr ASSIGNING <fls_matnr>
                          WITH KEY  matnr = so_matnr-high
                          BINARY SEARCH.

      IF sy-subrc IS NOT INITIAL.

        PERFORM error_handling USING text-e01 so_matnr-high.

      ENDIF.

    ENDIF.

  ELSE.

     PERFORM error_handling USING text-e01 so_matnr-low.

  ENDIF.

ENDIF.

form ERROR_HANDLING  using    p_text_e01 TYPE string
                              value type any.

       DATA : lv_message TYPE string.
       CONSTANTS : lc_plach1 TYPE char2 VALUE '&1'.
        CLEAR : lv_message.
        lv_message = p_text_e01." where text-e01 = Material number &1 does not exist
        REPLACE lc_plach1 WITH value
        INTO lv_message.
        MESSAGE e000(zh) WITH lv_message.

endform.                    " ERROR_HANDLING

Sunday 3 March 2013

Validating Local/Presentation path exist or not in SAP ABAP

Following is the program that checks whether the local path entered is valid or not.

TYPE-POOLS : abap.

Paramaters : p_zloc type rlgrap-filename.

    DATA : lv_dir TYPE string,
           lv_bol TYPE abap_bool,
           lv_string TYPE rlgrap-filename.
    DATA lv_w_string TYPE string.
    DATA : lv_i TYPE i,
                  lv_j TYPE i.

    lv_string   = p_zloc.
    lv_w_string = lv_string.

    DO.
      SEARCH lv_w_string FOR '\'.
      IF sy-subrc EQ 0.
        lv_i = sy-fdpos + 1.
        lv_j = lv_i + lv_j.
        lv_w_string = lv_w_string+lv_i.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.

    lv_dir = lv_string+0(lv_j).

    CALL METHOD cl_gui_frontend_services=>directory_exist
      EXPORTING
        directory            = lv_dir
      RECEIVING
        result               = lv_bol
      EXCEPTIONS
        cntl_error           = 1
        error_no_gui         = 2
        wrong_parameter      = 3
        not_supported_by_gui = 4
        OTHERS               = 5.
    IF  lv_bol NE 'X'." if lv_bol = 'X' the path is a vlid path
      MESSAGE e000(zh) WITH text-008.
    ENDIF.

How to separate path name and file name in abap

parameters : p_locpth type RGGRAP-FILENAME. " Parameter where user input the full path

    DATA : lv_w_string TYPE string,
                  lv_string TYPE rlgrap-filename.

    DATA : lv_i TYPE i,
                  lv_j TYPE i.

    lv_string   = p_locpth.
    lv_w_string = lv_string.

    DO.
      SEARCH lv_w_string FOR '\'.
      IF sy-subrc EQ 0.
        lv_i = sy-fdpos + 1.  " sy-fdpos gives the location of the character you are searching and it *starts with 0
        lv_j = lv_i + lv_j.
        lv_w_string = lv_w_string+lv_i.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.

    lv_dir = lv_string+0(lv_j).

write : / lv_dir.