Thursday, January 25, 2018

Add Material classification field in QA32/QA33 ALV

1. Append the structure qals_d02 in se11 with the field you want to display..

2. Append the same field in QALS table in se11. (to save you from dump on running QA32)

(e.g. you want to add Functional Criticality in the alv of QA32. go to se11, append 'ZATWRT' in the qals_d02 structure, then goto se11 again and append 'ZATWRT' in QALS table. activate both. )


3. in subroutine CALL_LISTVIEWER_F14 , implement an implicit enhancement with the code at the beginning to modify object_tab internal table which displays data. Activate the enhancement.

ENHANCEMENT 1  ZMATERIAL_CRITICALITY.    "active version
*----------------------------------------------------------------------*
*New logic for retrieving the Functional Criticality of the Material in QA32/QA33.

DATALT_VALUENUM  TYPE STANDARD TABLE OF BAPI1003_ALLOC_VALUES_NUM  WITH EMPTY KEY,
      LT_VALUECHAR TYPE STANDARD TABLE OF BAPI1003_ALLOC_VALUES_CHAR WITH EMPTY KEY,
      LT_VALUECURR TYPE STANDARD TABLE OF BAPI1003_ALLOC_VALUES_CURR WITH EMPTY KEY,
      LT_RETURN    TYPE STANDARD TABLE OF BAPIRET2.

DATALV_OBJKEY    TYPE BAPI1003_KEY-OBJECT,
      LV_OBJKEY1    TYPE BAPI1003_KEY-OBJECT,
      LV_PRUEFLOS  TYPE BAPI1003_KEY-OBJECT,
      LV_OBJTABLE  TYPE BAPI1003_KEY-OBJECTTABLE VALUE 'MARA',
      LV_CLASSNUM  TYPE BAPI1003_KEY-CLASSNUM VALUE 'TABLE_FILES',
      LV_CLASSNUM1  TYPE BAPI1003_KEY-CLASSNUM VALUE 'MPN_CLASS',
      LV_CLASSTYPE TYPE BAPI1003_KEY-CLASSTYPE VALUE '001',
      LV_ZZCRTFN   TYPE ZMM_CRTFN,
      LV_MATNR           TYPE CHAR18,
      lv_src_value TYPE string.

DATALV_TABIX TYPE SY-TABIX.

CONSTANTS:  LC_001(3)       TYPE VALUE '001',
            LC_FUNC         TYPE BAPICHARACTKEY-CHARACTNAME VALUE 'FN-CRITICALITY',
            LC_FUNC1        TYPE BAPICHARACTKEY-CHARACTNAME VALUE 'SOURCING-APRCH'.

* GET ALL CLASSIFICATION DETAILS
FIELD-SYMBOLS <WA> TYPE ANY,
                <F_LINE> TYPE ANY,
               <F_FIELD> TYPE ANY,
               <F_FIELD1> TYPE ANY,
               <LV_OBJKEY> TYPE ANY,
               <LV_OBJKEY1> TYPE ANY,
               <LV_PRUEFLOS> TYPE ANY.

LOOP AT P_OBJECT_TAB ASSIGNING <WA>.

ASSIGN COMPONENT  'ATWRT' OF STRUCTURE <WA> TO <F_FIELD>.
ASSIGN COMPONENT  'ZPURSOURCE' OF STRUCTURE <WA> TO <F_FIELD1>.
ASSIGN COMPONENT  'MATNR' OF STRUCTURE <WA> TO <LV_OBJKEY>.
ASSIGN COMPONENT  'EMATNR' OF STRUCTURE <WA> TO <LV_OBJKEY1>.
ASSIGN COMPONENT  'PRUEFLOS' OF STRUCTURE <WA> TO <LV_PRUEFLOS>.


LV_OBJKEY    <LV_OBJKEY>.
LV_OBJKEY1    <LV_OBJKEY1>.
LV_PRUEFLOS  <LV_PRUEFLOS>.

CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
  EXPORTING
    OBJECTKEY       LV_OBJKEY
    OBJECTTABLE     LV_OBJTABLE
    CLASSNUM        LV_CLASSNUM
    CLASSTYPE       LV_CLASSTYPE
    KEYDATE         SY-DATUM
  TABLES
    ALLOCVALUESNUM  LT_VALUENUM
    ALLOCVALUESCHAR LT_VALUECHAR
    ALLOCVALUESCURR LT_VALUECURR
    RETURN          LT_RETURN.

ASSIGN LT_VALUECHAR[ CHARACT LC_FUNC ] TO FIELD-SYMBOL(<LFS_CHAR>).

* GET THE FUNCTIONAL CRITICALITY
IF SY-SUBRC EQ 0.
   <F_FIELD> <LFS_CHAR>-VALUE_CHAR.

IF  <F_FIELD> NE SPACE.
   UPDATE QALS SET ATWRT <F_FIELD> WHERE PRUEFLOS LV_PRUEFLOS AND ATWRT EQ SPACE.


IF SY-SUBRC EQ 0.
COMMIT WORK.
WAIT UP TO SECONDS.
ENDIF.
ENDIF.

ENDIF.


* To get the Sourcing Approach for MPN material

IF LV_OBJKEY NE LV_OBJKEY1 AND LV_OBJKEY1 NE SPACE.
*IF LV_OBJKEY1 NE SPACE.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
  EXPORTING
    OBJECTKEY       LV_OBJKEY1
    OBJECTTABLE     LV_OBJTABLE
    CLASSNUM        LV_CLASSNUM1
    CLASSTYPE       LV_CLASSTYPE
    KEYDATE         SY-DATUM
  TABLES
    ALLOCVALUESNUM  LT_VALUENUM
    ALLOCVALUESCHAR LT_VALUECHAR
    ALLOCVALUESCURR LT_VALUECURR
    RETURN          LT_RETURN.

ASSIGN LT_VALUECHAR[ CHARACT LC_FUNC1 ] TO FIELD-SYMBOL(<LFS_CHAR1>).

* GET THE PURCHASING SOURCE
IF SY-SUBRC EQ 0.

   <F_FIELD1> <LFS_CHAR1>-VALUE_CHAR.

IF  <F_FIELD1> NE SPACE.
   UPDATE QALS SET ZPURSOURCE <F_FIELD1> WHERE PRUEFLOS LV_PRUEFLOS AND ZPURSOURCE EQ SPACE.

IF SY-SUBRC EQ 0.
COMMIT WORK.
WAIT UP TO SECONDS.
ENDIF.

ENDIF.

ENDIF.
CLEAR LV_OBJKEY.
CLEAR LV_OBJKEY1.
ENDIF.

ENDLOOP.
ENDENHANCEMENT.

Changing Validity Period / Net Price of Contract through BAPI_CONTRACT_CHANGE

DATA:  it_header TYPE STANDARD TABLE OF bapimeoutheader,
       wa_header TYPE bapimeoutheader.

DATA:  it_item           TYPE STANDARD TABLE OF bapimeoutitem,
       wa_item           TYPE bapimeoutitem,
       wa_itemx          TYPE bapimeoutitemx.

DATA:  it_itemx  TYPE STANDARD TABLE OF bapimeoutitemx.

DATA:  wa_headerx TYPE bapimeoutheaderx.
DATA:  it_headerx TYPE STANDARD TABLE OF bapimeoutheaderx.


DATA:  it_return  TYPE STANDARD TABLE OF bapiret2,
       it_return1 TYPE STANDARD TABLE OF bapiret2,
       wa_return  TYPE bapiret2.


  data lt_item_out         type bapimeoutitem   occurs 0 with header line.
  data lt_itemx_out        type bapimeoutitemx  occurs 0 with header line.
  data l_t685a             type t685a.
  data  lt_account          type mepoaccounting  occurs 0 with header line.
  data lt_accountx         type mepoaccountingx occurs 0 with header line.
  data lt_account_out      type bapimeoutaccount occurs 0 with header line.
  data lt_accountx_out     type bapimeoutaccountx occurs 0 with header line.
  data l_conditionx          type bapimeoutconditionx.
  data l_item_condition      type bapimeoutcondition.
  data l_validity            type bapimeoutvalidity.
  data l_validityx           type bapimeoutvalidityx.
  data lt_delivery_address   type standard table of bapimeoutaddrdelivery with header line.
* fill condiiton data
  data lt_item_condition     type standard table of bapimeoutcondition.
  data tl_item_condition     type standard table of bapimeoutcondition.
  data lt_item_conditionx    type standard table of bapimeoutconditionx.
  data lt_tem_cond_validity  type standard table of bapimeoutvalidity.
  data lt_tem_cond_validityx type standard table of bapimeoutvalidityx.
  data tl_item_conditionx    type standard table of bapimeoutconditionx.
  data tl_tem_cond_validity  type standard table of bapimeoutvalidity.
  data tl_tem_cond_validityx type standard table of bapimeoutvalidityx.
* adjust price conditions
  field-symbols <t_condition>  type bapimeoutcondition.
  field-symbols <t_conditionx> type bapimeoutconditionx.
  field-symbols <t_item_out>   type bapimeoutitem .
  field-symbols <t_validity>   type bapimeoutvalidity.
  field-symbols <t_text>       type bapiekpotx .
  field-symbols <t_account>    type mepoaccounting.
  field-symbols <t_accountx>   type mepoaccountingx.


    IF p_create EQ 'X'. " Creating Contract 
      CALL FUNCTION 'BAPI_CONTRACT_CREATE'
        EXPORTING
          header  = wa_header
          headerx = wa_headerx
        TABLES
          return  = it_return
          item    = it_item
          itemx   = it_itemx.


      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = wa_return.
      PERFORM display_messages.
    ENDIF.

    IF p_change EQ 'X'. " Updating Contract

    tl_item_condition[]     = lt_item_condition[].
    tl_item_conditionx[]    = lt_item_conditionx[].
    tl_tem_cond_validity[]  = lt_tem_cond_validity[].
    tl_tem_cond_validityx[] = lt_tem_cond_validityx[].


    call function 'BAPI_CONTRACT_GETDETAIL'
      exporting
        purchasingdocument = wa_header-number
        condition_data     = 'X'
      tables
        item_condition     = lt_item_condition
        item_cond_validity = lt_tem_cond_validity.

* adjust price conditions
    loop at lt_item_condition assigning <t_condition> where calctypcon = 'C'.
* check condition type
      if l_t685a-kschl ne <t_condition>-cond_type.
        call function 'SD_COND_T685_SELECT'
          exporting
            cts_error = space
            cts_kappl = 'M'
            cts_kschl = <t_condition>-cond_type
            cts_kvewe = 'A'
          importing
            cts_t685a = l_t685a.
      endif.
* price only
      check l_t685a-koaid = 'B'.
      read table lt_item_out assigning <t_item_out> with key item_no = <t_condition>-item_no binary search.
      if sy-subrc is initial.
        move <t_item_out>-net_price to <t_condition>-cond_value.
      endif.
      append <t_condition> to tl_item_condition.
* fill change data
      l_conditionx-item_no = <t_condition>-item_no.
      l_conditionx-serial_id = <t_condition>-serial_id.
      l_conditionx-cond_count = <t_condition>-cond_count.
      l_conditionx-cond_value = 'X'.
      l_conditionx-currency = 'X'.
      append l_conditionx to tl_item_conditionx.
      read table lt_tem_cond_validity assigning <t_validity> with key item_no = <t_condition>-item_no
                                                            serial_id = <t_condition>-serial_id.
      if sy-subrc is initial.

          <t_validity>-valid_from = lv_sdate. "validity From Date  You have to declare some where
          <t_validity>-valid_to = lv_date.      "validity To Date       You have to declare some where
   append <t_validity>  to tl_tem_cond_validity.
      endif.
    endloop.

    call function 'BAPI_CONTRACT_CHANGE'
      exporting
        purchasingdocument  = wa_header-number
        header              = wa_header
        headerx             = wa_headerx
*        vendor_address      = l_vendor_ad
*        testrun             = i_testrun
*      importing
*        exp_header          = ls_header_out
      tables
        return              = it_return
        item                = it_item
        itemx               = it_itemx
        account             = lt_account_out
        accountx            = lt_accountx_out
*        delivery_address    = lt_delivery_address
        item_cond_validity  = tl_tem_cond_validity
        item_condition      = tl_item_condition
        item_conditionx     = tl_item_conditionx
        item_cond_validityx = tl_tem_cond_validityx.

  endif.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait   = 'X'
        IMPORTING
          return = wa_return.

      PERFORM display_messages.