Aug 8, 2012

Pricing Conditions Upload with IDOC

These are some codes to simulate Pricing Conditions upload using IDOC


*&------------------------------------------------------------------------
*&      Form  map_idoc_structure
*&------------------------------------------------------------------------
*      Map E1KOMG, E1KONH, E1KONP segment fields
*-------------------------------------------------------------------------
FORM map_idoc_structure
              USING fp_condition_table TYPE kotabnr
                    fp_rate            TYPE z_cs_cpp_rate
                    fp_condition_type  TYPE kschl
                    fp_rate_type       TYPE z_cs_file_type.

*-- Local Data Declaration
  DATA: lw_e1komg TYPE e1komg, "Filter seg. with separated condition key
        lw_e1konh TYPE e1konh, "Data from condition header
        lw_e1konp TYPE e1konp, "Conditions Items
        lv_delete TYPE konp-loevm_ko. " Delete Indicator

*-- IDoc data internal table
  DATA: i_idoc_data TYPE TABLE OF edidd
                    INITIAL SIZE 0
                    WITH HEADER LINE.

  CLEAR: lw_e1komg,
         lw_e1konh,
         lw_e1konp,
         lv_delete,
         v_segnum,
         w_e1komg,
         v_rate_type.

  REFRESH i_idoc_data.

  v_rate_type = fp_rate_type.

  PERFORM conversion_alpha_input
      USING w_crp_data-kunnr CHANGING w_crp_data-kunnr.

  PERFORM conversion_matn1_input
     USING w_crp_data-matnr CHANGING w_crp_data-matnr.

*E1KOMG: Filter segment with separated condition key
  i_idoc_data-segnam  = 'E1KOMG'.
  lw_e1komg-kvewe     =  c_usage_cond_tab.
  lw_e1komg-kotabnr   =  fp_condition_table.
  lw_e1komg-kappl     =  c_cond_type.
  lw_e1komg-kschl     =  fp_condition_type.

  CONCATENATE p_vkorg p_vtweg p_spart p_hienr p_matnr.
  CONCATENATE w_crp_data-vkorg w_crp_data-vtweg
              w_crp_data-kunnr w_crp_data-matnr
              INTO lw_e1komg-vakey.

  lw_e1komg-vakey_long = lw_e1komg-vakey.
  lw_e1komg-vkorg      = w_crp_data-vkorg.
  lw_e1komg-vtweg      = w_crp_data-vtweg.
  lw_e1komg-spart      = w_crp_data-spart.
  lw_e1komg-kunnr      = w_crp_data-kunnr.
  lw_e1komg-matnr      = w_crp_data-matnr.

  i_idoc_data-sdata = lw_e1komg.
  APPEND i_idoc_data TO i_idoc_data.

*Segment E1KONH - condition header
  i_idoc_data-segnam  = 'E1KONH'.
  lw_e1konh-datab     = w_crp_data-datab.
  lw_e1konh-datbi     = w_crp_data-datbi.
  lw_e1konh-knuma_pi  = v_promotion.
  lw_e1konh-knuma_ag  = v_sales_deal.

  i_idoc_data-sdata = lw_e1konh.
  APPEND i_idoc_data TO i_idoc_data.

  IF fm_process_type EQ c_pt_dep.
    lv_delete = c_x.              " Deletion Indicator
  ENDIF.

*Segment E1KONP - condition items
  i_idoc_data-segnam = 'E1KONP'.
  lw_e1konp-kschl     = fp_condition_type.
  lw_e1konp-kbetr     = fp_rate.
  lw_e1konp-konwa     = w_crp_data-waers.
  lw_e1konp-kpein     = v_cond_pric.
  lw_e1konp-kmein     = v_cond_unit.
  lw_e1konp-knuma_pi  = v_promotion.
  lw_e1konp-knuma_ag  = v_sales_deal.
  lw_e1konp-loevm_ko  = lv_delete.

  i_idoc_data-sdata = lw_e1konp.
  APPEND i_idoc_data TO i_idoc_data.

*-- Post Idoc for Creating Pricing Condition
  PERFORM post_idoc
         TABLES i_idoc_data.

ENDFORM.                    " map_idoc_structure

*&------------------------------------------------------------------------
*&      Form  post_idoc TABLES i_idoc_data.
*&------------------------------------------------------------------------
*      Post Idoc for Creating Pricing Condition
*------------------------------------------------------------------------
FORM post_idoc
          TABLES i_idoc_data STRUCTURE edidd.

*-- Local data declaration
  DATA: lv_komg         LIKE komg,         " Condition Structures
        lv_subrc        LIKE sy-subrc,     " Sy-subrc
        lw_messages     TYPE rsuvm_msg,    " Message Description
        lw_idoc_status  TYPE bdidocstat.   " ALE IDoc status

  DATA: idoc_contrl                        " IDoc Control data
            LIKE edidc OCCURS 1 WITH HEADER LINE.

*-- Initialize Internal Tables
  CLEAR:  t_konh,
          t_konp,
          t_konm,
          t_konw,
          i_idoc_status,
          t_kona.

  REFRESH: t_konh,
           t_konp,
           t_konm,
           t_konw,
           i_idoc_status,
           t_kona,
           i_messages.
************************************************************************
*This code is taken from IDOC_INPUT_COND_A
************************************************************************
  PERFORM fill_appl_structures(saplvkoi)
                  TABLES i_idoc_data
                         t_konh
                         t_konp
                         t_konm
                         t_konw
                         i_idoc_status
                         t_kona
                   USING lv_komg
                         lv_subrc
                         idoc_contrl-docnum
                         idoc_contrl-mestyp.
  IF lv_subrc = 0.
************************************************************************
*This code is taken from IDOC_INPUT_COND_A
************************************************************************
    PERFORM idoc_in_datenbank(saplvkoi)
              TABLES idoc_contrl
                     t_konh
                     t_konp
                     t_konm
                     t_konw
                     i_idoc_status
                     t_kona
              USING  lv_komg
                     lv_subrc
                     idoc_contrl-docnum.

    IF lv_subrc = 0.
      COMMIT WORK AND WAIT.
    Endif.


Jul 26, 2012

Find User-Exit in Transaction Code

Use this program to find User-Exit by simply put on the Transaction Code

*&---------------------------------------------------------------------*
*& Report  ZTES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT z_find_userexit NO STANDARD PAGE HEADING.

*&---------------------------------------------------------------------*
*&  Enter the transaction code that you want to search through in order
*&  to find which Standard SAP User Exits exists.
*&
*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*

TABLES : tstc,     "SAP Transaction Codes
         tadir,    "Directory of Repository Objects
         modsapt,  "SAP Enhancements - Short Texts
         modact,   "Modifications
         trdir,    "System table TRDIR
         tfdir,    "Function Module
         enlfdir,  "Additional Attributes for Function Modules
         tstct.    "Transaction Code Texts

*&---------------------------------------------------------------------*
*& Variables
*&---------------------------------------------------------------------*

DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.

*&---------------------------------------------------------------------*
*& Selection Screen Parameters
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK a01 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK a01.

*&---------------------------------------------------------------------*
*& Start of main program
*&---------------------------------------------------------------------*

START-OF-SELECTION.

* Validate Transaction Code
  SELECT SINGLE * FROM tstc
    WHERE tcode EQ p_tcode.

* Find Repository Objects for transaction code
  IF sy-subrc EQ 0.
    SELECT SINGLE * FROM tadir
       WHERE pgmid    = 'R3TR'
         AND object   = 'PROG'
         AND obj_name = tstc-pgmna.

    MOVE : tadir-devclass TO v_devclass.

    IF sy-subrc NE 0.
      SELECT SINGLE * FROM trdir
         WHERE name = tstc-pgmna.

      IF trdir-subc EQ 'F'.

        SELECT SINGLE * FROM tfdir
          WHERE pname = tstc-pgmna.

        SELECT SINGLE * FROM enlfdir
          WHERE funcname = tfdir-funcname.

        SELECT SINGLE * FROM tadir
          WHERE pgmid    = 'R3TR'
            AND object   = 'FUGR'
            AND obj_name = enlfdir-area.

        MOVE : tadir-devclass TO v_devclass.
      ENDIF.
    ENDIF.

* Find SAP Modifactions
    SELECT * FROM tadir
      INTO TABLE jtab
      WHERE pgmid    = 'R3TR'
        AND object   = 'SMOD'
        AND devclass = v_devclass.

    SELECT SINGLE * FROM tstct
      WHERE sprsl EQ sy-langu
        AND tcode EQ p_tcode.

    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
    WRITE:/(19'Transaction Code - ',
    20(20) p_tcode,
    45(50) tstct-ttext.
    SKIP.
    IF NOT jtab[] IS INITIAL.
      WRITE:/(95) sy-uline.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
      WRITE:/1 sy-vline,
      2 'Exit Name',
      21 sy-vline ,
      22 'Description',
      95 sy-vline.
      WRITE:/(95) sy-uline.

      LOOP AT jtab.
        SELECT SINGLE * FROM modsapt
        WHERE sprsl = sy-langu AND
        name = jtab-obj_name.
        FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
        WRITE:/1 sy-vline,
        2 jtab-obj_name HOTSPOT ON,
        21 sy-vline ,
        22 modsapt-modtext,
        95 sy-vline.
      ENDLOOP.

      WRITE:/(95) sy-uline.
      DESCRIBE TABLE jtab.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No of Exits:' , sy-tfill.
    ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95'No User Exit exists'.
    ENDIF.
  ELSE.
    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
    WRITE:/(95'Transaction Code Does Not Exist'.
  ENDIF.

* Take the user to SMOD for the Exit that was selected.
AT LINE-SELECTION.
  GET CURSOR FIELD field1.
  CHECK field1(4EQ 'JTAB'.
  SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
  CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.




Jul 5, 2012

Changing the development class (Package) of a SAPScript


Following is an SAPScript (ZSAPTECHNICAL) assigned to a development class ZTEST. Let us look at the procedure in changing the development class to some other class. 

 

To change the development class:
Go to transaction SE03. 

 

Enter the values as shown in the above screenshot and press Execute. 

 

Now double-click on your form name (in this case it is ZSAPTECHNICAL. 
A Pop-up would appear with the development class in change mode. Change the development class to the desired one and press ENTER. See the change in the development class in the screenshot below: