Tuesday, April 7, 2020

Mass update of Credit limit FD32 via Excel

            Mass update of Credit limit FD32 via Excel


Main Code :
*&---------------------------------------------------------------------*
*& Report  ZSD_CREDIT_LIMIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsd_credit_limit.
INCLUDE zsd_credit_limit_top.
refresh : it_tab , it_message .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      field_name = 'filename'
    IMPORTING
      file_name  = filename.

START-OF-SELECTION.


  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
*     I_FIELD_SEPERATOR    =
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = filename
    TABLES
      i_tab_converted_data = it_tab
    EXCEPTIONS
      conversion_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.
  ENDIF.

  IF it_tab[] IS NOT INITIAL.
    LOOP AT it_tab INTO wa_tab.
      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  = wa_tab-kunnr
        IMPORTING
          output = wa_tab-kunnr.

      wa_output-klimk = wa_tab-klimk.
      wa_output-kunnr = wa_tab-kunnr.
      SELECT SINGLE * FROM knkk INTO  CORRESPONDING FIELDS OF  i_knkk
       WHERE kunnr = wa_output-kunnr.
      SELECT SINGLE * FROM knka INTO CORRESPONDING FIELDS OF i_knka
        WHERE kunnr = wa_output-kunnr.
*-----------------For Log Report : We are updating CDPOS , CDHDR -----------------*

      DATA: lv_objectclass       TYPE cdobjectcl,
            lv_objectid          TYPE cdobjectv,
            lv_changenr          TYPE cdchangenr,
            ls_workarea_knkk_new TYPE knkk,
            ls_workarea_knkk_old TYPE knkk.

      ls_workarea_knkk_old = i_knkk.
      MOVE-CORRESPONDING ls_workarea_knkk_old TO ls_workarea_knkk_new.
      ls_workarea_knkk_new-klimk = wa_output-klimk.
      lv_objectclass = 'KLIM'.
      lv_objectid = wa_output-kunnr.

      CALL FUNCTION 'CHANGEDOCUMENT_OPEN'
        EXPORTING
          objectclass      = lv_objectclass
          objectid         = lv_objectid
        EXCEPTIONS
          sequence_invalid = 1
          OTHERS           = 2.

      IF sy-subrc = 0.
        CALL FUNCTION 'CHANGEDOCUMENT_SINGLE_CASE'
          EXPORTING
            change_indicator       = 'U'
            tablename              = 'KNKK'
            workarea_new           = ls_workarea_knkk_new
            workarea_old           = ls_workarea_knkk_old
          EXCEPTIONS
            nametab_error          = 1
            open_missing           = 2
            position_insert_failed = 3
            OTHERS                 = 4.
        IF sy-subrc = 0.

          CALL FUNCTION 'CHANGEDOCUMENT_CLOSE'
            EXPORTING
              date_of_change          = sy-datum
              objectclass             = lv_objectclass
              objectid                = lv_objectid
              tcode                   = 'ZFD32A'
              time_of_change          = sy-uzeit
              username                = sy-uname
              object_change_indicator = 'U'
            EXCEPTIONS
              header_insert_failed    = 1
              no_position_inserted    = 2
              object_invalid          = 3
              open_missing            = 4
              position_insert_failed  = 5
              OTHERS                  = 6.
          CLEAR : ls_workarea_knkk_new, ls_workarea_knkk_old,lv_objectid.
        ENDIF.
      ENDIF.
*--------------------------------EOC : 12/09/2019 -------------------------------------------*


      IF i_knkk IS NOT INITIAL .  " check to ensure that if has data then only it updates value
        i_knkk-klimk = wa_output-klimk.
        i_knkk-aedat = sy-datum. "SY-DATUM WHEN CHANGED
        i_knkk-aenam = sy-uname. "SY-NAME OF USER WHO CHANGED IT .
        upd_knkk = 'U'. "update
      ELSE.
        upd_knkk = 'I'.  "insert
      ENDIF.
      IF i_knka IS NOT INITIAL .
        upd_knka = 'U'.
      ELSE.
        upd_knka = 'I'.
      ENDIF.


*checking whether i_knkk and i_knka is initial to update or insert
      IF i_knkk IS  INITIAL.
        i_knkk-mandt = sy-mandt.
        i_knkk-kunnr = wa_output-kunnr.
        i_knkk-knkli = wa_output-kunnr.
        i_knkk-kkber =  '1000'.
        i_knkk-klimk = wa_output-klimk.
        i_knkk-ernam = sy-uname. "ADDED ON 30/08/2019
        i_knkk-erdat = sy-datum. "added on 30/08/2019
      ENDIF.
      IF i_knka IS INITIAL .
        i_knka-mandt = sy-mandt.
        i_knka-kunnr = wa_output-kunnr. "FOR TESTING CLOSED
        i_knka-waers = 'INR'.   "FOR TESTING CLOSED
      ENDIF . " TO FILL ONLY IF DATA IS NOT AVAILABLE
*
*  Call FM to update Customer Credit Limit

      CALL FUNCTION 'CREDITLIMIT_CHANGE'
        EXPORTING
          i_knka   = i_knka " ->DONE TESING PURPOSE
          i_knkk   = i_knkk
          upd_knka = upd_knka
          upd_knkk = upd_knkk
*         XNEUA    = ' '
*         XREFL    = ' '
          yknka    = yknka
          yknkk    = yknkk.
      COMMIT WORK AND WAIT .
      MODIFY IT_TAB FROM WA_TAB TRANSPORTING KUNNR.
      CLEAR : WA_TAB.
    ENDLOOP.
    IF sy-subrc IS INITIAL.

    ENDIF.
  ENDIF.

  WAIT UP TO 2 SECONDS.

  SELECT    KNA1~kunnr,
            KNA1~NAME1,
            KNKK~klimk,
            KNKK~knkli,
            KNKK~ctlpc
            FROM knkk
            INNER JOIN KNA1 ON KNA1~KUNNR = KNKK~KUNNR
            INTO TABLE @DATA(it_knkk1)
            FOR ALL ENTRIES IN @it_tab
            WHERE KNKK~kunnr = @it_tab-kunnr.



  SORT it_tab BY kunnr.
  SORT it_knkk1 BY kunnr.
  LOOP AT  it_tab INTO wa_tab .
    wa_message-kunnr = wa_tab-kunnr.
    READ TABLE it_knkk1 INTO DATA(wa_knkk) WITH  KEY kunnr = wa_tab-kunnr
                                                            BINARY SEARCH.
    IF sy-subrc IS INITIAL.
      wa_message-klimk  = wa_knkk-klimk.
      wa_message-NAME1  = wa_knkk-NAME1.
      CLEAR : wa_knkk.
    ENDIF.
    APPEND wa_message TO it_message.
    CLEAR : wa_message,wa_tab.
  ENDLOOP.




*Display Data
** Declaration for ALV Grid **
  DATA : gr_table  TYPE REF TO cl_salv_table,
         g_column  TYPE REF TO cl_salv_column,
         g_columns TYPE REF TO cl_salv_columns_table.
** Declarations for ALV Functions
  DATA : gr_functions TYPE REF TO cl_salv_functions_list.
  DATA : gr_display TYPE REF TO cl_salv_display_settings,
         gr_layout  TYPE REF TO cl_salv_layout,
         key        TYPE salv_s_layout_key,
         lv_title   TYPE lvc_title.

  CLEAR : gr_table.
  TRY.
      CALL METHOD cl_salv_table=>factory
        EXPORTING
          list_display = if_salv_c_bool_sap=>false
        IMPORTING
          r_salv_table = gr_table
        CHANGING
          t_table      = it_message.
    CATCH cx_salv_msg .
  ENDTRY.
  IF gr_table IS INITIAL.
    MESSAGE text-008  TYPE 'I' DISPLAY LIKE 'E'.
    STOP.
  ENDIF.
** Get functions details
  gr_functions = gr_table->get_functions( ).

** Activate All Buttons in Tool Bar
  gr_functions->set_all( if_salv_c_bool_sap=>true ).
* Layout Save Option
  gr_layout = gr_table->get_layout( ).
  key-report = sy-repid.
  gr_layout->set_key( key ).
*pass the folling values to the SET_SAVE_RESTRICTION method.
*RESTRICT_NONE
*RESTRICT_USER_DEPENDANT
*RESTRICT_USER_INDEPENDANT
  gr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
******* Global Display Settings  *******
  CLEAR : gr_display.
*  MOVE 'Sales Order Details' TO lv_title.
  gr_display = gr_table->get_display_settings( ).               " Global Display settings"
  gr_display->set_striped_pattern( if_salv_c_bool_sap=>true ).  "Activate Strip Pattern"
*  GR_DISPLAY->SET_LIST_HEADER( LV_TITLE ).

  TRY.
      g_columns = gr_table->get_columns( ).
      g_column = g_columns->get_column( 'KUNNR' ).
      g_column->set_short_text( 'Customer' ).
      g_column->set_medium_text( 'Customer Code' ).
      g_column->set_long_text( 'Customer Code' ).

    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.


  TRY.
      g_columns = gr_table->get_columns( ).
      g_column = g_columns->get_column( 'NAME1' ).
      g_column->set_short_text( 'Name' ).
      g_column->set_medium_text( 'Customer Name' ).
      g_column->set_long_text( 'Customer Name' ).

    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.

  TRY.
      g_columns = gr_table->get_columns( ).
      g_column = g_columns->get_column( 'KLIMK' ).
      g_column->set_short_text( 'Cr.Limit' ).
      g_column->set_medium_text( 'Cr.Limit' ).
      g_column->set_long_text( 'Credit Limit' ).

    CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  ENDTRY.


  CALL METHOD gr_table->display.
---------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------
Now paste this code in TOP  Include :

*&---------------------------------------------------------------------*
*&  Include           ZSD_CREDIT_LIMIT_TOP
*&---------------------------------------------------------------------*
TABLES : vbrp, mara, vbrk.
TYPE-POOLS: slis.
TYPES : BEGIN OF TY_MESSAGE,
        KUNNR TYPE KUNNR,  "kunnr
        NAME1 TYPE NAME1,
        KLIMK TYPE KLIMK, "credit limit
        END OF TY_MESSAGE.
DATA : IT_MESSAGE TYPE TABLE OF TY_MESSAGE, "Dt : 10.1.2020
       WA_MESSAGE TYPE          TY_MESSAGE. "dt : 10.1.2020

DATA : lr_alv     TYPE REF TO cl_salv_table,
       gr_columns TYPE REF TO cl_salv_columns_table,
       l_column   TYPE REF TO cl_salv_column.

DATA : it_raw     TYPE truxs_t_text_data.
TYPES : BEGIN OF ty_main,
          KUNNR     TYPE KUNNR,
          KLIMK     TYPE NETWR,
        END OF ty_main.



      DATA: i_knka   TYPE knka,
            i_knkk   TYPE knkk,
            upd_knka TYPE cdpos-chngind,
            upd_knkk TYPE cdpos-chngind,
            yknka    TYPE knka,
            yknkk    TYPE knkk.
DATA : it_main TYPE TABLE OF TY_MAIN,
       it_tab  TYPE TABLE OF ty_main,
       wa_main TYPE          ty_main,
       wa_tab  TYPE           ty_main.
DATA : IT_OUTPUT TYPE TABLE OF TY_MAIN,
       WA_OUTPUT TYPE          TY_MAIN.
SELECTION-SCREEN:BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : filename TYPE  rlgrap-filename .
SELECTION-SCREEN: END OF BLOCK b1.
-----------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------