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.
-----------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------