TYPES: BEGIN OF ty_vbak,
* vbeln TYPE vbak-vbeln,
erdat TYPE vbak-erdat,
audat TYPE vbak-audat,
vbtyp TYPE vbak-vbtyp,
kunnr TYPE vbak-kunnr,
END OF ty_vbak.
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kna1-kunnr,
land1 TYPE kna1-land1,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
regio TYPE kna1-regio,
aufsd TYPE kna1-aufsd,
erdat TYPE kna1-erdat,
faksd TYPE kna1-faksd,
lifsd TYPE kna1-lifsd,
END OF ty_kna1.
TYPES: BEGIN OF ty_knvv,
kunnr TYPE knvv-kunnr,
vkorg TYPE knvv-vkorg,
vtweg TYPE knvv-vtweg,
spart TYPE knvv-spart,
END OF ty_knvv.
TYPES: BEGIN OF ty_knb1,
kunnr TYPE knb1-kunnr,
bukrs TYPE knb1-bukrs,
END OF ty_knb1.
TYPES: BEGIN OF ty_final,
kunnr TYPE kna1-kunnr, " CUSTOMER NUMBER
name1 TYPE kna1-name1, " CUSTOMER NAME
ort01 TYPE kna1-ort01, " CITY
regio TYPE kna1-regio, " REGION
bezei TYPE t005u-bezei, " Description
land1 TYPE kna1-land1, " Country
landx TYPE t005t-landx, " Country Name
bukrs TYPE knb1-bukrs, " Company Code
vkorg TYPE knvv-vkorg, " Sales Organization
vtweg TYPE knvv-vtweg, " Distribution channel
spart TYPE knvv-spart, " Division
erdat TYPE kna1-erdat, " date
check TYPE flag,
END OF ty_final.
DATA: gt_vbak TYPE TABLE OF ty_vbak,
gs_vbak TYPE ty_vbak,
gt_kna1 TYPE TABLE OF ty_kna1,
gs_kna1 TYPE ty_kna1,
gt_t005u TYPE TABLE OF t005u,
gs_t005u TYPE t005u,
gt_knvv TYPE TABLE OF ty_knvv,
gs_knvv TYPE ty_knvv,
gt_t005t TYPE TABLE OF t005t,
gs_t005t TYPE t005t,
gt_knb1 TYPE TABLE OF ty_knb1,
gs_knb1 TYPE ty_knb1,
gt_final TYPE TABLE OF ty_final,
gs_final TYPE ty_final.
DATA : gs_layout TYPE slis_layout_alv,
gt_fcat TYPE slis_t_fieldcat_alv,
gs_fcat LIKE LINE OF gt_fcat.
DATA: w_textout LIKE t100-text.
**For bdc
*INCLUDE bdcrecx1.
DATA : gt_msg TYPE TABLE OF bdcmsgcoll,
gs_msg TYPE bdcmsgcoll,
bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
INITIALIZATION.
*******Date Calculation**********
DATA: lv_date TYPE d.
lv_date = sy-datum.
lv_date = lv_date - 365.
AT SELECTION-SCREEN OUTPUT.
START-OF-SELECTION.
PERFORM select_data.
PERFORM display.
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data .
REFRESH : gt_vbak, gt_kna1, gt_knvv, gt_t005u, gt_t005t.
**Getting all customers
SELECT
kunnr
land1
name1
ort01
regio
aufsd
erdat
faksd
lifsd
FROM kna1
INTO TABLE gt_kna1.
**Checking customer's current year transaction
IF gt_kna1[] IS NOT INITIAL.
SELECT
* vbeln
erdat
audat
vbtyp
kunnr
FROM vbak
INTO TABLE gt_vbak
FOR ALL ENTRIES IN gt_kna1
WHERE kunnr = gt_kna1-kunnr
AND vbtyp IN ('C','G')
AND audat GT lv_date.
ENDIF.
**deleting active customers
LOOP AT gt_vbak INTO gs_vbak .
DELETE gt_kna1 WHERE kunnr = gs_vbak-kunnr.
ENDLOOP.
**Getting text
IF gt_kna1[] IS NOT INITIAL.
SELECT *
FROM t005u
INTO TABLE gt_t005u
FOR ALL ENTRIES IN gt_kna1
WHERE land1 = gt_kna1-land1
AND bland = gt_kna1-regio
AND spras = 'EN'.
SELECT
kunnr
vkorg
vtweg
spart
FROM knvv
INTO TABLE gt_knvv
FOR ALL ENTRIES IN gt_kna1
WHERE kunnr = gt_kna1-kunnr.
SELECT *
FROM t005t
INTO TABLE gt_t005t
FOR ALL ENTRIES IN gt_kna1
WHERE land1 = gt_kna1-land1
AND spras = 'EN'.
* ** Getting company code
SELECT
kunnr
bukrs
FROM knb1
INTO TABLE gt_knb1
FOR ALL ENTRIES IN gt_kna1
WHERE kunnr = gt_kna1-kunnr.
ENDIF.
ENDFORM. " SELECT_DATA
* *&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display .
CLEAR : gs_kna1, gs_t005u, gs_t005t, gs_knvv, gs_final.
DELETE ADJACENT DUPLICATES FROM gt_kna1 COMPARING kunnr.
SORT gt_kna1 BY kunnr.
SORT gt_knvv BY kunnr.
SORT gt_knb1 BY kunnr.
LOOP AT gt_kna1 INTO gs_kna1.
gs_final-kunnr = gs_kna1-kunnr.
gs_final-name1 = gs_kna1-name1.
gs_final-ort01 = gs_kna1-ort01.
gs_final-regio = gs_kna1-regio.
gs_final-land1 = gs_kna1-land1.
gs_final-erdat = gs_kna1-erdat.
****company code
READ TABLE gt_knb1 INTO gs_knb1 WITH KEY kunnr = gs_kna1-kunnr.
IF sy-subrc = 0.
gs_final-bukrs = gs_knb1-bukrs.
ENDIF.
READ TABLE gt_t005u INTO gs_t005u WITH KEY land1 = gs_kna1-land1
bland = gs_kna1-regio.
IF sy-subrc = 0.
gs_final-bezei = gs_t005u-bezei.
ENDIF.
READ TABLE gt_t005t INTO gs_t005t WITH KEY land1 = gs_kna1-land1.
IF sy-subrc = 0.
gs_final-landx = gs_t005t-landx.
ENDIF.
READ TABLE gt_knvv INTO gs_knvv WITH KEY kunnr = gs_kna1-kunnr.
IF sy-subrc IS INITIAL.
LOOP AT gt_knvv INTO gs_knvv FROM sy-tabix WHERE kunnr = gs_kna1-kunnr.
CLEAR : gs_final-vkorg, gs_final-vtweg, gs_final-spart.
IF gs_knvv IS NOT INITIAL.
gs_final-vkorg = gs_knvv-vkorg.
gs_final-vtweg = gs_knvv-vtweg.
gs_final-spart = gs_knvv-spart.
APPEND gs_final TO gt_final.
CLEAR : gs_knvv.
ENDIF.
ENDLOOP.
ELSE.
* Delete empty kunnr from final table
IF gs_final-kunnr IS NOT INITIAL.
APPEND gs_final TO gt_final.
ENDIF.
ENDIF.
CLEAR : gs_kna1, gs_t005u, gs_t005t, gs_knvv, gs_final.
ENDLOOP.
FREE : gs_kna1, gs_t005u, gs_t005t, gs_knvv, gs_final.
ENDFORM. " DISPLAY
END-OF-SELECTION.
PERFORM prepare_fcat.
PERFORM output.
*&---------------------------------------------------------------------*
*& Form PREPARE_FCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepare_fcat .
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
gs_fcat-col_pos = '1' .
gs_fcat-fieldname = 'KUNNR'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_s = 'Customer'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '2' .
gs_fcat-fieldname = 'NAME1'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_l = 'Customer Name'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '3' .
gs_fcat-fieldname = 'ORT01'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_s = 'City'.
.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '4' .
gs_fcat-fieldname = 'REGIO'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_s = 'Region'.
gs_fcat-seltext_l = 'Region (State, Province, County)'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '5' .
gs_fcat-fieldname = 'BEZEI'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_l = 'Description'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '6' .
gs_fcat-fieldname = 'LAND1'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_m = 'County'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '7' .
gs_fcat-fieldname = 'LANDX'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_m = 'County Name'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '8' .
gs_fcat-fieldname = 'BUKRS'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_l = 'Company Code'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '9' .
gs_fcat-fieldname = 'VKORG'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_l = 'Sales Organization'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '10' .
gs_fcat-fieldname = 'VTWEG'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_l = 'Distribution Channel'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '11' .
gs_fcat-fieldname = 'SPART'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-seltext_s = 'Division'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
gs_fcat-col_pos = '12' .
gs_fcat-fieldname = 'CHECK'.
gs_fcat-tabname = 'GT_FINAL'.
gs_fcat-checkbox = 'X'.
gs_fcat-edit = 'X'.
gs_fcat-seltext_l = 'Select to Block Cutomer'.
APPEND gs_fcat TO gt_fcat.
CLEAR : gs_fcat.
ENDFORM. " PREPARE_FCAT
*&---------------------------------------------------------------------*
*& Form OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output .
gs_layout-zebra = 'X'.
gs_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
i_grid_title = 'OUT DATED CUSTOMER'
* I_GRID_SETTINGS =
is_layout = gs_layout
it_fieldcat = gt_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_final
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " OUTPUT
FORM set_status USING pfstat TYPE slis_t_extab.
SET PF-STATUS 'ZRSD_OUTDATED_TOOL' EXCLUDING pfstat.
ENDFORM.
FORM user_command USING okcode LIKE sy-ucomm
wa_selfield TYPE slis_selfield.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
CASE okcode.
WHEN 'BLOCK'.
IF ref_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
ENDIF.
IF NOT ref_grid IS INITIAL.
CALL METHOD ref_grid->check_changed_data .
ENDIF.
* *Calling BDC to block multiple cusomter
PERFORM bdc_block_cust.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BDC_BLOCK_CUST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM bdc_block_cust.
DATA lv_mode TYPE c LENGTH 1.
CLEAR : gs_final.
lv_mode = 'A'.
break wipabap9.
LOOP AT gt_final INTO gs_final WHERE check = 'X'.
PERFORM bdc_dynpro USING 'SAPMF02D' '0500'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RF02D-SPART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RF02D-KUNNR'
gs_final-kunnr. " 'CPCL001'.
PERFORM bdc_field USING 'RF02D-BUKRS'
gs_final-bukrs. "'999'.
PERFORM bdc_field USING 'RF02D-VKORG'
gs_final-vkorg. "'999'.
PERFORM bdc_field USING 'RF02D-VTWEG'
gs_final-vtweg. "'01'.
PERFORM bdc_field USING 'RF02D-SPART'
gs_final-spart. "'05'.
PERFORM bdc_dynpro USING 'SAPMF02D' '0510'.
PERFORM bdc_field USING 'BDC_CURSOR'
'KNVV-CASSD'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=UPDA'.
PERFORM bdc_field USING 'KNA1-SPERR'
'X'.
PERFORM bdc_field USING 'KNB1-SPERR'
'X'.
PERFORM bdc_field USING 'KNA1-AUFSD'
'01'.
PERFORM bdc_field USING 'KNVV-AUFSD'
'01'.
PERFORM bdc_field USING 'KNA1-LIFSD'
'01'.
PERFORM bdc_field USING 'KNVV-LIFSD'
'01'.
PERFORM bdc_field USING 'KNA1-FAKSD'
'01'.
PERFORM bdc_field USING 'KNVV-FAKSD'
'01'.
PERFORM bdc_field USING 'KNA1-CASSD'
'X'.
PERFORM bdc_field USING 'KNVV-CASSD'
'X'.
CALL TRANSACTION 'XD05'
USING bdcdata
MODE lv_mode
UPDATE 'S'
MESSAGES INTO gt_msg.
*****display error messages
PERFORM bdc_msg.
CLEAR : bdcdata, gs_final.
REFRESH: bdcdata.
ENDLOOP.
ENDFORM. " BDC_BLOCK_CUST
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
FORM bdc_field USING fnam fval.
* IF FVAL <> NODATA.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
* ENDIF.
ENDFORM. "BDC_FIELD
*&---------------------------------------------------------------------*
*& Form BDC_MSG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM bdc_msg .
CLEAR: gs_msg.
REFRESH :gt_msg.
LOOP AT gt_msg INTO gs_msg.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = gs_msg-msgid
msgnr = gs_msg-msgnr
msgv1 = gs_msg-msgv1
msgv2 = gs_msg-msgv2
msgv3 = gs_msg-msgv3
msgv4 = gs_msg-msgv4
IMPORTING
message_text_output = w_textout.
IF gs_msg-msgtyp = 'E'.
WRITE:/ w_textout COLOR 6.
ELSE.
WRITE:/ w_textout.
ENDIF.
CLEAR: gs_msg.
ENDLOOP.