Thursday, December 6, 2012

Abap Identify Number and Characters

The following sample shows how to identify number and characters in a string.

report z_identify.

data: test(10) type c value 'ABC123456'.
data: length type i.

length = strlen( test ).

if test(length) co '1234567890'.
  write:/ 'This is a number'.
else.
  write:/ 'This is not a number'.
endif.

Saturday, September 15, 2012

Abap send email library

The below include program is used to send email with CC and attachment functionality:

*&---------------------------------------------------------------------*
*&  Include         
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*  Purpose:
*  Provide generic subroutines for any ABAP programs with intention of
*  sending email (SAPOffice or Internet) with attachments
*&---------------------------------------------------------------------*


  DATA: objpack LIKE sopcklsti1 OCCURS  2 WITH HEADER LINE"Packing list
  DATA: objhead LIKE solisti1   OCCURS  1 WITH HEADER LINE"Object header
  DATA: objtxt  LIKE solisti1   OCCURS 10 WITH HEADER LINE"Email body message
  DATA: objbin  LIKE solisti1   OCCURS 10 WITH HEADER LINE"Binary attachments (PDF)
  DATA: objhex  LIKE solix      OCCURS 10 WITH HEADER LINE"Hex attachments (XLS)
  DATA: reclist LIKE somlreci1  OCCURS  5 WITH HEADER LINE"Recipient list
  DATA: doc_chng LIKE sodocchgi1. "Email information

  DATA: tab_lines LIKE sy-tabix. "Number of records of the content table being filled

  DATA: pk_lines LIKE sy-tabix. "Number of lines of the attachment packing list


*&---------------------------------------------------------------------*
*&      Form  initialize_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM initialize_email.
    REFRESH: objpack,
             objhead,
             objtxt,
             objbin,
             objhex,
             reclist.
    CLEAR:   doc_chng, pk_lines.
  ENDFORM.                    "initialize_email

*&---------------------------------------------------------------------*
*&      Form  build_email_body
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->L_SUBJ     text
*----------------------------------------------------------------------*
  FORM build_email_body TABLES it_body STRUCTURE solisti1
                        USING l_subj.

* Setup the email body message
    IF NOT it_body[] IS INITIAL.
      REFRESH objtxt.
      objtxt[] = it_body[].
    ELSE.
      objtxt = l_subj.
      APPEND objtxt.
    ENDIF.

* Subject of email
    MOVE l_subj TO doc_chng-obj_descr.

    DESCRIBE TABLE objtxt LINES tab_lines.
    READ TABLE objtxt INDEX tab_lines.

    doc_chng-doc_size = ( tab_lines - 1 ) * 255 + STRLEN( objtxt ).

* Prepare the packing list for email body
*    DESCRIBE TABLE objpack LINES pk_lines.
    CLEAR objpack-transf_bin.
    objpack-head_start = 1.
    objpack-head_num   = 0.
    objpack-body_start = 1.
    objpack-body_num   = tab_lines.
    objpack-doc_type   = 'RAW'.
    APPEND objpack.
  ENDFORM.                    "build_email_body

*&---------------------------------------------------------------------*
*&      Form  build_hex_attachment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM build_hex_attachment TABLES it_hex
                            USING l_filename LIKE sopcklsti1-obj_descr
                                  l_filetype LIKE sopcklsti1-doc_type.

    DATA: it_objhex LIKE solix OCCURS 0 WITH HEADER LINE.

    IF NOT it_hex[] IS INITIAL.
      CALL FUNCTION 'SCMS_TEXT_TO_BINARY'
*       EXPORTING
*         FIRST_LINE            = 0
*         LAST_LINE             = 0
*         APPEND_TO_TABLE       = ' '
*         MIMETYPE              = ' '
*         ENCODING              =
*       IMPORTING
*         OUTPUT_LENGTH         =
        TABLES
          text_tab              = it_hex
          binary_tab            = it_objhex
        EXCEPTIONS
          failed                = 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.
      ELSE.
        APPEND LINES OF it_objhex TO objhex.

* IT_OBJHEX is used as OBJHEX can contain multiple attachments

        DESCRIBE TABLE it_objhex LINES tab_lines.

        objpack-transf_bin = 'X'.
        objpack-head_start = 1.
        objpack-head_num   = 0.
        objpack-body_start = pk_lines + 1.
        objpack-body_num   = tab_lines.
        objpack-doc_type   = l_filetype.
*        objpack-obj_name   = 'ATTACHMENT'.
        objpack-obj_descr = l_filename.
        objpack-doc_size   = tab_lines * 255.
        APPEND objpack.

        pk_lines = objpack-body_start + objpack-body_num - 1.
      ENDIF.

    ENDIF.
  ENDFORM.                    "build_hex_attachment

*&---------------------------------------------------------------------*
*&      Form  build_recip_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM build_recip_list USING l_recipient
                              l_reciptype LIKE somlreci1-rec_type.
    MOVE l_recipient TO reclist-receiver.

    reclist-rec_type = l_reciptype.
    reclist-copy = ''.

    APPEND reclist.
  ENDFORM.                    "build_recip_list


*&---------------------------------------------------------------------*
*&      Form  build_recip_cc_list
*&---------------------------------------------------------------------*

  FORM build_recip_cc_list USING l_recipient
                              l_reciptype LIKE somlreci1-rec_type.
    MOVE l_recipient TO reclist-receiver.

    reclist-rec_type = l_reciptype.
    reclist-copy = 'X'.

    APPEND reclist.
  ENDFORM.                    "build_recip_cc_list


*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
  FORM send_email.

    IF reclist[] IS INITIAL.
      PERFORM build_recip_list USING sy-uname
                                     'B'.
    ENDIF.

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
      EXPORTING
        document_data                    = doc_chng
*     PUT_IN_OUTBOX                    = ' '
       commit_work                      = 'X'
*   IMPORTING
*     SENT_TO_ALL                      =
*     NEW_OBJECT_ID                    =
      TABLES
        packing_list                     = objpack
       object_header                    = objhead
*{   REPLACE        DEVK935771                                        2
*\*     CONTENTS_BIN                     =
      CONTENTS_BIN                     = objbin
*}   REPLACE
       contents_txt                     = objtxt
       contents_hex                     = objhex
*     OBJECT_PARA                      =
*     OBJECT_PARB                      =
        receivers                        = reclist
     EXCEPTIONS
       too_many_receivers               = 1
       document_not_sent                = 2
       document_type_not_exist          = 3
       operation_no_authorization       = 4
       parameter_error                  = 5
       x_error                          = 6
       enqueue_error                    = 7
       OTHERS                           = 8
              .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*{   DELETE         DEVK935721                                        1
*\    ELSE.
*\      SUBMIT rsconn01 AND RETURN.
*}   DELETE
    ENDIF.


  ENDFORM.                    "send_email



*&---------------------------------------------------------------------*
*&      Form  send_email_w_from_addr
*&---------------------------------------------------------------------*
*       T01K918835
*----------------------------------------------------------------------*
  FORM send_email_w_from_addr USING l_from.

    TYPES:
      BEGIN OF ty_s_imp00,
        imp01 TYPE c,                    "Sent To All
        imp02 TYPE sofolenti1-object_id, "New Object ID
        imp03 TYPE soudk,                "Sender ID
      END OF ty_s_imp00.

    DATA:
      lw_imp00     TYPE ty_s_imp00,
      lt_sosct     TYPE sosctab,
      lt_obcat     TYPE TABLE OF sxobjcat.

    IF reclist[] IS INITIAL.
      PERFORM build_recip_list USING sy-uname
                                     'B'.
    ENDIF.


    CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
      EXPORTING
        document_data              = doc_chng
        put_in_outbox              = 'X'
        sender_address             = l_from
        sender_address_type        = 'SMTP'
        commit_work                = 'X'
      IMPORTING
        sent_to_all                = lw_imp00-imp01
        new_object_id              = lw_imp00-imp02
        sender_id                  = lw_imp00-imp03
      TABLES
        packing_list               = objpack
*       contents_bin               =
        contents_hex               = objhex
        contents_txt               = objtxt
        receivers                  = reclist
      EXCEPTIONS
       too_many_receivers               = 1
       document_not_sent                = 2
       document_type_not_exist          = 3
       operation_no_authorization       = 4
       parameter_error                  = 5
       x_error                          = 6
       enqueue_error                    = 7
       OTHERS                           = 8.
    .
    IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
* Force the email sending immediately.

      CLEAR: lt_sosct, lt_obcat.
      COMMIT WORK AND WAIT.

      SELECT  * FROM sosc
        INTO TABLE lt_sosct
        WHERE objtp = lw_imp00-imp02+0(3AND
              objyr = lw_imp00-imp02+3(2AND
              objno = lw_imp00-imp02+5.

      IF sy-subrc = 0.

        CALL FUNCTION 'SX_SEND_DISPATCHER'
          EXPORTING
            sosc_tab          = lt_sosct
          TABLES
            obj_cat           = lt_obcat
          EXCEPTIONS
            internal_error    = 1
            directsend_failed = 2
            OTHERS            = 3.

        IF sy-subrc <> 0.
          MESSAGE s005(z1) WITH space 'Email' 'Sent'.
        ELSE.
          MESSAGE s004(z1) WITH space 'Email' 'Sent'.
        ENDIF.

      ELSE.
        MESSAGE s005(z1) WITH space 'Email' 'Sent'.
      ENDIF.


    ENDIF.



  ENDFORM.                    "send_email
*{   INSERT         DEVK935771                                        1
FORM build_pdf_attachment TABLES it_pdf
                            USING l_filename LIKE sopcklsti1-obj_descr
                                  l_filetype LIKE sopcklsti1-doc_type.

  DATA: it_objbin  LIKE solisti1 OCCURS 0 WITH HEADER LINE.

  if it_pdf[] is not initial.
    CALL FUNCTION 'SX_TABLE_LINE_WIDTH_CHANGE'
*     EXPORTING
*       LINE_WIDTH_SRC                    =
*       LINE_WIDTH_DST                    =
*       TRANSFER_BIN                      = ' '
      TABLES
        content_in                        = it_pdf
        content_out                       = it_objbin
     EXCEPTIONS
       ERR_LINE_WIDTH_SRC_TOO_LONG       = 1
       ERR_LINE_WIDTH_DST_TOO_LONG       = 2
       ERR_CONV_FAILED                   = 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.
    else.
        APPEND LINES OF it_objbin TO objbin.
* IT_OBJBIN is used as OBJBIN can contain multiple attachments

        DESCRIBE TABLE it_objbin LINES tab_lines.

        objpack-transf_bin = 'X'.
        objpack-head_start = 1.
        objpack-head_num   = 0.
        objpack-body_start = pk_lines + 1.
        objpack-body_num   = tab_lines.
        objpack-doc_type   = l_filetype.
*        objpack-obj_name   = 'ATTACHMENT'.
        objpack-obj_descr = l_filename.
        objpack-doc_size   = tab_lines * 255.
        APPEND objpack.

        pk_lines = objpack-body_start + objpack-body_num - 1.
    ENDIF.

  ENDIF.
ENDFORM.
*}   INSERT

ABAP Folder Selection input box

The below program will create a input selection that will pop up the folder selection box.




REPORT  z_select_folder.

CONSTANTS: c_default_folder TYPE rlgrap-filename VALUE 'C:\'.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002.
PARAMETERS :  p_folder LIKE rlgrap-filename OBLIGATORY DEFAULT c_default_folder.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.
  PERFORM select_folder CHANGING p_folder.


FORM select_folder  CHANGING p_p_folder.
  DATA: l_path TYPE string.

  CALL METHOD cl_gui_frontend_services=>directory_browse
    EXPORTING
      window_title         = 'Select Folder'
      initial_folder       = 'C:\'
    CHANGING
      selected_folder      = l_path
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 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.

  MOVE l_path TO p_p_folder.
ENDFORM.                    " SELECT_FOLDER

Sunday, February 12, 2012

SAP Execute MIRO using BAPI_INCOMINGINVOICE_CREATE

This is the sample program to create incoming vendor invoice (MIRO) using BAPI_INCOMINGINVOICE_CREATE



REPORT  zt_bapimiro.

DATA: wa_header LIKE bapi_incinv_create_header.

DATA: it_item TYPE STANDARD TABLE OF bapi_incinv_create_item,
      wa_item TYPE bapi_incinv_create_item.

DATA: it_ret LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

DATA: g_invno LIKE bapi_incinv_fld-inv_doc_no,
      g_fyear LIKE bapi_incinv_fld-fisc_year.

wa_header-invoice_ind = 'X'.
wa_header-doc_date = '20120131'.   "Enter the document date
wa_header-pstng_date = '20120208'"Enter the posting date
wa_header-ref_doc_no = 'Test'.
wa_header-comp_code = '3100'.
wa_header-gross_amount = '5908.11'.  "Enter the gross amount(aft. tax) for the invoice
wa_header-calc_tax_ind = 'X'.
wa_header-currency = 'USD'.

wa_item-invoice_doc_item = '000001'.
wa_item-po_number = '4590038150'.    "Enter the PO number
wa_item-po_item = '00120'.           "Enter the PO item number
wa_item-ref_doc = '5007548571'.      "Enter the GR number
wa_item-ref_doc_year = '2012'.       "Enter the GR fiscal year
wa_item-ref_doc_it = '0001'.         "Enter the GR item number
wa_item-tax_code = 'V7'.             "Enter the tax code applicable
wa_item-item_amount = '5521.60'.     "Enter the item amount
wa_item-quantity = '2380'.           "Enter the invoice quantity
wa_item-po_unit = 'EA'.              "Enter the UoM
APPEND wa_item TO it_item.

CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE'
  EXPORTING
    headerdata                = wa_header
*   ADDRESSDATA               =
 IMPORTING
   invoicedocnumber          = g_invno
   fiscalyear                = g_fyear
  TABLES
    itemdata                  = it_item
*   ACCOUNTINGDATA            =
*   GLACCOUNTDATA             =
*   MATERIALDATA              =
*   TAXDATA                   =
*   WITHTAXDATA               =
*   VENDORITEMSPLITDATA       =
    return                    = it_ret
*   EXTENSIONIN               =
          .

IF g_invno IS NOT INITIAL.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
*   EXPORTING
*     WAIT          =
*   IMPORTING
*     RETURN        =
            .
ENDIF.
WRITE:/1 g_invno, g_fyear.

LOOP AT it_ret.
  WRITE:/1 it_ret-message.
ENDLOOP.

Wednesday, December 21, 2011

ABAP Field Symbols

One of the most useful of Field Symbols in ABAP is Dynamic assign statement, meaning if you don't know the name of field to assign to the field symbols during writing your program, you can use this :

ASSIGN (<f>) TO <FS>.
Normally this can be used if you are writing a program to read the name of the field from a customized table, then you can retrieve the value of the field from the field symbols.  


Sample:

Suppose we have three programs. The main program:

REPORT demo_field_symbols_dynami_as_1.
TABLES sbook.
sbook-fldate = sy-datum.
PERFORM form1 IN PROGRAM demo_form1.


The other two programs are:  

REPORT demo_form1.
FORM form1.
  PERFORM form2 IN PROGRAM demo_form2.
ENDFORM.


and

REPORT demo_form2.
FORM form2.
  DATA name(20) TYPE c VALUE 'SBOOK-FLDATE'.
FIELD-SYMBOLS <fs> TYPE ANY.
  ASSIGN (name) TO <fs>.
  IF sy-subrc EQ 0.
    WRITE / <fs>.
ENDIF.
ENDFORM.


The output looks something like this: 02.06.1998

More Detail? please visit :


http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb38d5358411d1829f0000e829fbfe/content.htm

Tuesday, December 6, 2011

SAP FM Exchange Rate

The function is used to convert an amount to other currency.

Function Module: CONVERT_AMOUNT_TO_CURRENCY

Sample:

         CALL FUNCTION 'CONVERT_AMOUNT_TO_CURRENCY'
         EXPORTING
             DATE             = posting_date
             FOREIGN_CURRENCY = doc_curr
             FOREIGN_AMOUNT   = unitprice_lc2
             LOCAL_CURRENCY   = gv_lc2
         IMPORTING
             LOCAL_AMOUNT     = unitprice_lc2.

Note: The exchange rates are maintained in T-code F-62.

Monday, November 14, 2011

Replace Characters using ABAP

REPLACE ALL OCCURRENCES OF <Text to be replaced> IN <Original Text> WITH <Text to replace>.

if the material description consist special characters like "--", that will causing the output excel file out of alignment. 

Using above code to replace all the "--" to blank or space:

For example:

gv_text = 'Material--ABC is a Raw material'.

REPLACE ALL OCCURRENCES OF '--' IN gv_text WITH ' '.

Output:

Material ABC is a Raw material.