0% found this document useful (0 votes)
11 views31 pages

Upload File Format

The document describes a program titled 'APO Setup Matrix Creation' authored by Senthil Manthaiyan, aimed at creating an APO Group setup matrix for the /SAPAPO/CDPSC7 transaction code. It outlines the program's purpose, input requirements, and output specifications, noting that it runs on request and is classified under the development class ZWPS_APO_CIF. The program includes various procedures for authority checks, file uploads, and data processing to manage setup matrices effectively.

Uploaded by

V Chilukuri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views31 pages

Upload File Format

The document describes a program titled 'APO Setup Matrix Creation' authored by Senthil Manthaiyan, aimed at creating an APO Group setup matrix for the /SAPAPO/CDPSC7 transaction code. It outlines the program's purpose, input requirements, and output specifications, noting that it runs on request and is classified under the development class ZWPS_APO_CIF. The program includes various procedures for authority checks, file uploads, and data processing to manage setup matrices effectively.

Uploaded by

V Chilukuri
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

************************************************************************

* Program Title : APO Setup Matrix Creation *


* Author : Senthil Manthaiyan *
* Date : 30-SEP-2024 *
* SAP Change Request : DS4K9A0JGV *
*----------------------------------------------------------------------*
* Description: : This program is used to create the APO Group *
* setup matrix for /SAPAPO/CDPSC7 tcode *
* Type: : Conversion *
* Run Frequency: : On request *
* Development Class: : ZWPS_APO_CIF *
* Requirement Ref. : GAP 1354407 / HE0281 *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : N/A *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : N/A *
*----------------------------------------------------------------------*
REPORT zapo_create_setup_matrix.
*
*----------------------------------------------------------------------*
* I N C L U D E *
*----------------------------------------------------------------------*
INCLUDE zapo_create_setup_matrix_top.
INCLUDE zapo_create_setup_matrix_sel.
INCLUDE zapo_create_setup_matrix_f01.
*
************************************************************************
* I N I T I A L I Z A T I O N *
************************************************************************
INITIALIZATION.
sscrfields-functxt_01 = 'Download Upload File Format'(ss2).
*
************************************************************************
* A T S E L E C T I O N - S C R E E N *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.
PERFORM value_request_ifile USING p_ifile c_p.
*
AT SELECTION-SCREEN.
IF sscrfields-ucomm = c_fc01.
PERFORM download_file_format.
ENDIF.
*
************************************************************************
* S T A R T - O F - S E L E C T I O N *
************************************************************************
START-OF-SELECTION.
*
PERFORM authority_check.
PERFORM upload_file.
PERFORM data_process.
*
************************************************************************
* E N D - O F - S E L E C T I O N *
************************************************************************
END-OF-SELECTION.
*
PERFORM display_log.

************************************************************************
* Program Title : APO Setup Matrix Creation *
* Author : Senthil Manthaiyan *
* Date : 30-SEP-2024 *
* SAP Change Request : DS4K9A0JGV *
*----------------------------------------------------------------------*
* Description: : This program is used to create the APO Group *
* setup matrix for /SAPAPO/CDPSC7 tcode *
* Type: : Conversion *
* Run Frequency: : On request *
* Development Class: : ZWPS_APO_CIF *
* Requirement Ref. : GAP 1354407 / HE0281 *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : N/A *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : N/A *
*----------------------------------------------------------------------*
*
*&---------------------------------------------------------------------*
*& Include ZAPO_CREATE_SETUP_MATRIX_TOP
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
* T A B L E S *
*----------------------------------------------------------------------*
*
TABLES : sscrfields.
*
*----------------------------------------------------------------------*
* T Y P E S *
*----------------------------------------------------------------------*
*
TYPES: BEGIN OF ty_input,
locno TYPE /sapapo/locno, "Location
mname TYPE /sapapo/cdps_matrix_name, "Name of Setup Matrix
mtext TYPE /sapapo/cdps_prf_text, "Setup Matrix Description
group TYPE /sapapo/cdps_setup_group, "Setup Group
END OF ty_input.
*
TYPES: BEGIN OF ty_output,
locno TYPE /sapapo/locno, "Location
mname TYPE /sapapo/cdps_matrix_name, "Name of Setup Matrix
mtext TYPE /sapapo/cdps_prf_text, "Setup Matrix Description
prede TYPE /sapapo/cdps_setup_group, "Predecssr Setup Group
succe TYPE /sapapo/cdps_setup_group, "Successor Setup Group
setup TYPE char16, "Setup Time
unit TYPE /sapapo/cdps_duration_unit, "Setup Time Unit
msgtyp TYPE bdc_mart, "Message Type
mesage TYPE char128, "Message
END OF ty_output.
*
*----------------------------------------------------------------------*
* I N T E R N A L T A B L E S *
*----------------------------------------------------------------------*
*
DATA: lt_input TYPE STANDARD TABLE OF ty_input,
lt_output TYPE STANDARD TABLE OF ty_output,
lt_bdcdata TYPE STANDARD TABLE OF bdcdata,
lt_messtab TYPE STANDARD TABLE OF bdcmsgcoll.
*
*----------------------------------------------------------------------*
* W O R K A R E A *
*----------------------------------------------------------------------*
*
DATA: lwa_input TYPE ty_input,
lwa_input1 TYPE ty_input,
lwa_output TYPE ty_output,
lwa_bdcdata TYPE bdcdata,
lwa_options TYPE ctu_params.
*
*----------------------------------------------------------------------*
* G L O B A L V A R I A B L E *
*----------------------------------------------------------------------*
*
DATA: l_file TYPE string,
l_server TYPE char1,
l_head TYPE int2,
l_group TYPE /sapapo/cdps_setup_group,
l_message TYPE bapiret2-message.
*
DATA: l_key TYPE salv_s_layout_key,
l_msg TYPE string,
l_fval TYPE scrtext_m,
l_column TYPE lvc_fname.
*
*----------------------------------------------------------------------*
* C O N S T A N T S *
*----------------------------------------------------------------------*
*
CONSTANTS: c_x TYPE char1 VALUE 'X',
c_e TYPE char1 VALUE 'E',
c_s TYPE char1 VALUE 'S',
c_p TYPE char1 VALUE 'P',
c_update TYPE c LENGTH 1 VALUE 'S',
c_mode TYPE c LENGTH 1 VALUE 'N',
c_unit TYPE c LENGTH 3 VALUE 'MIN',
c_fc01 TYPE c LENGTH 4 VALUE 'FC01'.
*
CONSTANTS: c_tab TYPE char1 VALUE cl_abap_char_utilities=>horizontal_tab.

*----------------------------------------------------------------------*
* C L A S S *
*----------------------------------------------------------------------*
CLASS lcl_main DEFINITION DEFERRED.
*
DATA: lo_alv TYPE REF TO lcl_main ##needed,
lcl_alv_ref TYPE REF TO cl_salv_table,
lcl_layout TYPE REF TO cl_salv_layout,
lcl_functions TYPE REF TO cl_salv_functions,
lcl_col_tab TYPE REF TO cl_salv_columns_table,
lcl_col TYPE REF TO cl_salv_column_table,
lo_events1 TYPE REF TO cl_salv_events_table,
lcl_salv_not_found TYPE REF TO cx_salv_not_found,
lt_cols TYPE salv_t_column_ref.
*
DATA: lo_grid TYPE REF TO cl_salv_form_layout_grid,
lr_action TYPE REF TO cl_salv_form_action_info,
lo_label TYPE REF TO cl_salv_form_label,
l_lines TYPE i,
l_lines1 TYPE i,
l_line TYPE char10,
l_text1 TYPE string,
l_text2 TYPE string.
*
CREATE OBJECT lo_grid.
*
CLASS lcl_main DEFINITION.
* Set Component Hotspot/Doubleclick.
*
PUBLIC SECTION.
METHODS:
set_hotspot
CHANGING
co_alv TYPE REF TO cl_salv_table
co_report TYPE REF TO lcl_main.
*
METHODS: on_after_events
FOR EVENT after_salv_function OF cl_salv_events_table.
*
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
*
METHOD set_hotspot.
*
lo_events1 = lcl_alv_ref->get_event( ).
CREATE OBJECT co_report.
*
* event handler
SET HANDLER co_report->on_after_events FOR lo_events1.
*
ENDMETHOD. "set_hotspot
METHOD on_after_events.
*
DATA: lit_filter TYPE slis_t_filtered_entries.
*
CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_GET'
IMPORTING
et_filtered_entries = lit_filter
EXCEPTIONS
no_infos = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DESCRIBE TABLE lit_filter LINES l_lines1.


l_line = l_lines - l_lines1.
CONCATENATE TEXT-t12 l_line
INTO l_text2 SEPARATED BY space.
*
CREATE OBJECT lr_action
EXPORTING
text = l_text2.
*
lcl_alv_ref->set_end_of_list( lr_action ).

ENDMETHOD. "on_after_events
*
ENDCLASS.
*

************************************************************************
* Program Title : APO Setup Matrix Creation *
* Author : Senthil Manthaiyan *
* Date : 30-SEP-2024 *
* SAP Change Request : DS4K9A0JGV *
*----------------------------------------------------------------------*
* Description: : This program is used to create the APO Group *
* setup matrix for /SAPAPO/CDPSC7 tcode *
* Type: : Conversion *
* Run Frequency: : On request *
* Development Class: : ZWPS_APO_CIF *
* Requirement Ref. : GAP 1354407 / HE0281 *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : N/A *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : N/A *
*----------------------------------------------------------------------*
*
*&---------------------------------------------------------------------*
*& Include ZAPO_CREATE_SETUP_MATRIX_SEL
*&---------------------------------------------------------------------*
************************************************************************
* S E L E C T I O N - S C R E E N *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-ss1.
PARAMETERS: p_ifile TYPE string OBLIGATORY LOWER CASE,
p_head TYPE int2 OBLIGATORY DEFAULT 1.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_same TYPE /sapapo/cdps_duration OBLIGATORY,
p_diff TYPE /sapapo/cdps_duration OBLIGATORY.
SELECTION-SCREEN SKIP 1.
PARAMETERS: rb_creat RADIOBUTTON GROUP rb1 MODIF ID cl,
rb_chang RADIOBUTTON GROUP rb1 MODIF ID cl.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN FUNCTION KEY 1.

************************************************************************
* Program Title : APO Setup Matrix Creation *
* Author : Senthil Manthaiyan *
* Date : 30-SEP-2024 *
* SAP Change Request : DS4K9A0JGV *
*----------------------------------------------------------------------*
* Description: : This program is used to create the APO Group *
* setup matrix for /SAPAPO/CDPSC7 tcode *
* Type: : Conversion *
* Run Frequency: : On request *
* Development Class: : ZWPS_APO_CIF *
* Requirement Ref. : GAP 1354407 / HE0281 *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : N/A *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : N/A *
*----------------------------------------------------------------------*
*
*&---------------------------------------------------------------------*
*& Include ZZAPO_CREATE_SETUP_MATRIX_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form authority_check
*&---------------------------------------------------------------------*
FORM authority_check .
*
AUTHORITY-CHECK OBJECT 'C_APO_MSP'
ID 'ACTVT' FIELD '02'.
IF sy-subrc NE 0.
MESSAGE TEXT-t01 TYPE c_s DISPLAY LIKE c_e.
LEAVE LIST-PROCESSING.
ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form VALUE_REQUEST_IFILE
*&---------------------------------------------------------------------*
*& Value Request for File
*&---------------------------------------------------------------------*
FORM value_request_ifile USING p_file TYPE string
p_server TYPE char1.
DATA: l_file TYPE string,
l_server TYPE char1.
*
l_file = p_file.
l_server = p_server.
CALL METHOD zcl_bci000_util=>f4_get_filename
EXPORTING
im_location = l_server
CHANGING
ch_filename = l_file.
IF sy-subrc = 0.
p_file = l_file.
ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form upload_file
*&---------------------------------------------------------------------*
FORM upload_file .
*
l_file = p_ifile.
l_head = p_head.
l_server = c_p.
*
CALL METHOD zcl_bci000_util=>upload_file
EXPORTING
im_file_name = l_file
im_separator = c_tab
im_location = l_server
CHANGING
tab_data = lt_input
EXCEPTIONS
file_open_error = 1
file_close_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE e116(zqm_06) WITH l_file.
ENDIF.
*
DO l_head TIMES.
DELETE lt_input INDEX 1.
ENDDO.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form data_process
*&---------------------------------------------------------------------*
FORM data_process .
*
SORT lt_input.
*
lwa_options-racommit = abap_true.
lwa_options-updmode = c_update.
lwa_options-dismode = c_mode.
lwa_options-nobinpt = abap_true.
lwa_options-defsize = abap_true.
*
LOOP AT lt_input ASSIGNING FIELD-SYMBOL(<fs>).
TRANSLATE <fs>-mname TO UPPER CASE.
ENDLOOP.
DATA(lt_input1) = lt_input.
DELETE ADJACENT DUPLICATES FROM lt_input1 COMPARING locno mname.
*
IF lt_input1 IS NOT INITIAL.

SELECT a~matrix_id, a~locid, a~matrix_name,


b~locno
FROM /sapapo/set_mid AS a INNER JOIN /sapapo/loc AS b
ON a~locid = b~locid
INTO TABLE @DATA(lt_matrix)
FOR ALL ENTRIES IN @lt_input1
WHERE b~locno = @lt_input1-locno
AND a~matrix_name = @lt_input1-mname.
ENDIF.
*
* Create Matrix
IF rb_creat = c_x.
*
LOOP AT lt_input1 INTO lwa_input1.
*
TRY .
DATA(lwa_matrix) = lt_matrix[ locno = lwa_input1-locno
matrix_name = lwa_input1-mname ].
CATCH cx_sy_itab_line_not_found.
PERFORM create_matrix.
ENDTRY.

ENDLOOP.
WAIT UP TO 2 SECONDS.
lt_input1 = lt_input.
LOOP AT lt_input INTO lwa_input.

lwa_input1-group = '*'.
PERFORM create_group.

LOOP AT lt_input1 INTO lwa_input1


WHERE locno = lwa_input-locno
AND mname = lwa_input-mname.

PERFORM create_group.
*
ENDLOOP.
CLEAR: lwa_input1.
ENDLOOP.
ELSE.
*
lt_input1 = lt_input.
LOOP AT lt_input INTO lwa_input.
*
TRY .
lwa_matrix = lt_matrix[ locno = lwa_input-locno
matrix_name = lwa_input-mname ].
CATCH cx_sy_itab_line_not_found.
PERFORM matrix_log.
CONTINUE.
ENDTRY.
*
lwa_input1-group = '*'.
PERFORM change_group.
*
LOOP AT lt_input1 INTO lwa_input1
WHERE locno = lwa_input-locno
AND mname = lwa_input-mname.

PERFORM change_group.
*
ENDLOOP.
CLEAR: lwa_input1.
ENDLOOP.

ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form create_matrix
*&---------------------------------------------------------------------*
FORM create_matrix .
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MNAME-LOW'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'LOCNO-LOW' lwa_input1-locno.
PERFORM bdc_field USING 'MNAME-LOW' lwa_input1-mname.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0010'.
PERFORM bdc_field USING 'BDC_OKCODE' '=NEWENTRIES'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0010'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0010_STR-LOCNO(01)'
lwa_input1-locno.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0010_STR-MATRIX_NAME(01)'
lwa_input1-mname.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0010_STR-MATRIX_TXT(01)'
lwa_input1-mtext.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0010'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EEXIT'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EENDE'.
CALL TRANSACTION '/SAPAPO/CDPSC7' USING lt_bdcdata
OPTIONS FROM lwa_options
MESSAGES INTO lt_messtab.
*
CLEAR:lwa_output.
lwa_output-locno = lwa_input1-locno.
lwa_output-mname = lwa_input1-mname.
lwa_output-mtext = lwa_input1-mtext.
*
LOOP AT lt_messtab[] ASSIGNING FIELD-SYMBOL(<fs_messtab>).

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
id = <fs_messtab>-msgid
lang = sy-langu
no = <fs_messtab>-msgnr
v1 = <fs_messtab>-msgv1
v2 = <fs_messtab>-msgv2
v3 = <fs_messtab>-msgv3
v4 = <fs_messtab>-msgv4
IMPORTING
msg = l_message
EXCEPTIONS
not_found = 1
OTHERS = 2 ##FM_SUBRC_OK.
*
IF lwa_output-msgtyp IS INITIAL.
lwa_output-msgtyp = <fs_messtab>-msgtyp.
ENDIF.
CONCATENATE lwa_output-mesage l_message
INTO lwa_output-mesage
SEPARATED BY space.
*
CLEAR l_message.
ENDLOOP.
APPEND lwa_output TO lt_output.
CLEAR: lwa_output, lt_messtab,lt_bdcdata.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_GROUP
*&---------------------------------------------------------------------*
FORM create_group .
*
CLEAR: l_group.
IF lwa_input-group = lwa_input1-group.
l_group = p_same.
ELSE.
l_group = p_diff.
ENDIF.
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MNAME-LOW'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'LOCNO-LOW' lwa_input-locno.
PERFORM bdc_field USING 'MNAME-LOW' lwa_input-mname.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0010'.
PERFORM bdc_field USING 'BDC_OKCODE' '=DETAIL'.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0010_STR-MARKED(01)' c_x.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '=NEWENTRIES'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-
SETUP_GROUP_FROM(01)' lwa_input1-group.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-
SETUP_GROUP_TO(01)' lwa_input-group.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-DURATION(01)'
l_group.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-
DURATION_UNIT(01)' c_unit.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EEXIT'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EENDE'.

CALL TRANSACTION '/SAPAPO/CDPSC7' USING lt_bdcdata


OPTIONS FROM lwa_options
MESSAGES INTO lt_messtab.
*
CLEAR:lwa_output.
CONDENSE l_group.
lwa_output-locno = lwa_input-locno.
lwa_output-mname = lwa_input-mname.
lwa_output-prede = lwa_input1-group.
lwa_output-succe = lwa_input-group.
lwa_output-setup = l_group.
lwa_output-unit = c_unit.
*
LOOP AT lt_messtab[] ASSIGNING FIELD-SYMBOL(<fs_messtab>).

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
id = <fs_messtab>-msgid
lang = sy-langu
no = <fs_messtab>-msgnr
v1 = <fs_messtab>-msgv1
v2 = <fs_messtab>-msgv2
v3 = <fs_messtab>-msgv3
v4 = <fs_messtab>-msgv4
IMPORTING
msg = l_message
EXCEPTIONS
not_found = 1
OTHERS = 2 ##FM_SUBRC_OK.
*
IF lwa_output-msgtyp IS INITIAL.
lwa_output-msgtyp = <fs_messtab>-msgtyp.
ENDIF.
CONCATENATE lwa_output-mesage l_message
INTO lwa_output-mesage
SEPARATED BY space.
*
CLEAR l_message.
ENDLOOP.
APPEND lwa_output TO lt_output.
CLEAR: lwa_output.
CLEAR: lt_messtab,lt_bdcdata.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHANGE_GROUP
*&---------------------------------------------------------------------*
FORM change_group .
*
CLEAR: l_group.
IF lwa_input-group = lwa_input1-group.
l_group = p_same.
ELSE.
l_group = p_diff.
ENDIF.
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_CURSOR' 'MNAME-LOW'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.
PERFORM bdc_field USING 'LOCNO-LOW' lwa_input-locno.
PERFORM bdc_field USING 'MNAME-LOW' lwa_input-mname.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0010'.
PERFORM bdc_field USING 'BDC_OKCODE' '=DETAIL'.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0010_STR-MARKED(01)' c_x.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '=POSI'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0060'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTER'.
PERFORM bdc_field USING '/SAPAPO/N2C_D0020_STR-SETUP_KEY_FROM'
lwa_input1-group.
PERFORM bdc_field USING '/SAPAPO/N2C_D0020_STR-SETUP_KEY_TO'
lwa_input-group.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-DURATION(01)'
l_group.
PERFORM bdc_field USING '/SAPAPO/CDPS_MATRIX_D0020_STR-MARKED(01)'
c_x.
*
PERFORM bdc_dynpro USING '/SAPAPO/SAPLCDPS_MATRIX_GUI' '0020'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EEXIT'.
*
PERFORM bdc_dynpro USING '/SAPAPO/SETUP_MATRIX_MAINTAIN' '1000'.
PERFORM bdc_field USING 'BDC_OKCODE' '/EENDE'.
*
CALL TRANSACTION '/SAPAPO/CDPSC7' USING lt_bdcdata
OPTIONS FROM lwa_options
MESSAGES INTO lt_messtab.
*
CLEAR:lwa_output.
CONDENSE l_group.
lwa_output-locno = lwa_input-locno.
lwa_output-mname = lwa_input-mname.
lwa_output-prede = lwa_input1-group.
lwa_output-succe = lwa_input-group.
lwa_output-setup = l_group.
lwa_output-unit = c_unit.
*
LOOP AT lt_messtab[] ASSIGNING FIELD-SYMBOL(<fs_messtab>).

CALL FUNCTION 'FORMAT_MESSAGE'


EXPORTING
id = <fs_messtab>-msgid
lang = sy-langu
no = <fs_messtab>-msgnr
v1 = <fs_messtab>-msgv1
v2 = <fs_messtab>-msgv2
v3 = <fs_messtab>-msgv3
v4 = <fs_messtab>-msgv4
IMPORTING
msg = l_message
EXCEPTIONS
not_found = 1
OTHERS = 2 ##FM_SUBRC_OK.
*
IF lwa_output-msgtyp IS INITIAL.
lwa_output-msgtyp = <fs_messtab>-msgtyp.
ENDIF.
CONCATENATE lwa_output-mesage l_message
INTO lwa_output-mesage
SEPARATED BY space.
*
CLEAR l_message.
ENDLOOP.
APPEND lwa_output TO lt_output.
CLEAR: lwa_output.
CLEAR: lt_messtab,lt_bdcdata.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form matrix_log
*&---------------------------------------------------------------------*
FORM matrix_log .
*
CLEAR:lwa_output.
lwa_output-locno = lwa_input1-locno.
lwa_output-mname = lwa_input1-mname.
lwa_output-mtext = lwa_input1-mtext.
lwa_output-mesage = TEXT-e01.
APPEND lwa_output TO lt_output.
CLEAR: lwa_output.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_log
*&---------------------------------------------------------------------*
FORM display_log .
*
DATA: lo_events1 TYPE REF TO cl_salv_events_table.
FIELD-SYMBOLS: <lfs_cols> TYPE salv_s_column_ref.
*
IF lt_output IS NOT INITIAL.
*
SORT lt_output BY locno
mname
mtext DESCENDING
prede
succe.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = lcl_alv_ref
CHANGING
t_table = lt_output.
CATCH cx_salv_msg .
ENDTRY.

* Set PF-Stauts
lcl_functions = lcl_alv_ref->get_functions( ).
lcl_functions->set_all( abap_true ).

* Set Layout button


lcl_layout = lcl_alv_ref->get_layout( ).
l_key-report = sy-repid.
lcl_layout->set_key( l_key ).
lcl_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

* Get columns
lcl_col_tab = lcl_alv_ref->get_columns( ).
lcl_col_tab->set_optimize( 'X' ). "optimise colums of SALV grid

* Get the ALV Columns


lt_cols = lcl_col_tab->get( ).
*
LOOP AT lt_cols ASSIGNING <lfs_cols>.
* Change the cloumn header
TRY.
l_column = <lfs_cols>-columnname.
lcl_col ?= lcl_col_tab->get_column( l_column ).

CATCH cx_salv_not_found INTO lcl_salv_not_found.


l_msg = lcl_salv_not_found->get_text( ).
MESSAGE l_msg TYPE c_e .
ENDTRY.
CASE l_column.

WHEN 'MTEXT'.
l_fval = 'Descrption'(h06).
lcl_col->set_medium_text( l_fval ).
WHEN 'PREDE'.
l_fval = 'Predecessor'(h01).
lcl_col->set_medium_text( l_fval ).

WHEN 'SUCCE'.
l_fval = 'Successor '(h02).
lcl_col->set_medium_text( l_fval ).

WHEN 'SETUP'.
l_fval = 'Setup Time '(h05).
lcl_col->set_medium_text( l_fval ).

WHEN 'MSGTYP'.
l_fval = '[Link]'(h03).
lcl_col->set_medium_text( l_fval ).

WHEN 'MESAGE'.
l_fval = 'Message'(h04).
lcl_col->set_medium_text( l_fval ).
ENDCASE.
ENDLOOP.
*
* Header Information
* Total No. of Records Selected
DESCRIBE TABLE lt_output LINES l_lines.
l_line = l_lines.
CONCATENATE TEXT-t11 l_line
INTO l_text1 SEPARATED BY space.
CONCATENATE TEXT-t12 l_line
INTO l_text2 SEPARATED BY space.
*
* Add row
lo_grid->add_row( ).
* Label Information
lo_label = lo_grid->create_label( row = 1 column = 1
text = l_text1
tooltip = l_text1 ).
* Top of List
lcl_alv_ref->set_top_of_list( lo_grid ).
CLEAR: lo_label, lo_grid.
CREATE OBJECT lo_grid.

* End of List
CREATE OBJECT lr_action
EXPORTING
text = l_text2.
lcl_alv_ref->set_end_of_list( lr_action ).

DATA: lo_functions TYPE REF TO cl_salv_functions_list.


lo_functions = lcl_alv_ref->get_functions( ).
lo_functions->set_all( abap_true ).
*
CREATE OBJECT lo_alv.
CALL METHOD lo_alv->set_hotspot
CHANGING
co_alv = lcl_alv_ref
co_report = lo_alv.
*
* Display output
CALL METHOD lcl_alv_ref->display.
*
ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form download_file_format
*&---------------------------------------------------------------------*
FORM download_file_format .
*
TYPES : BEGIN OF lty_make_excel,
column01(25),
column02(25),
column03(25),
column04(25),
END OF lty_make_excel.
*
DATA : lit_make_excel TYPE STANDARD TABLE OF lty_make_excel,
lwa_make_excel LIKE LINE OF lit_make_excel.
*
CONSTANTS : lv_dext TYPE string VALUE 'xls',
lv_fdirec TYPE string VALUE 'c:_,
lc_x TYPE char1 VALUE 'X'.
*
DATA : lv_fname TYPE string,
ld_filename TYPE string,
ld_path TYPE string,
ld_fullpath TYPE string,
ld_result TYPE i.
*
lv_fname = 'Setup Matrix'(t02).
lwa_make_excel-column01 = TEXT-t03. "Location
lwa_make_excel-column02 = TEXT-t04. "Setup Matrix Name
lwa_make_excel-column03 = TEXT-t05. "Setup Matrix Description
lwa_make_excel-column04 = TEXT-t06. "Setup Group
APPEND lwa_make_excel TO lit_make_excel.
* Sample Data
lwa_make_excel-column01 = 'SGJU'.
lwa_make_excel-column02 = 'MATRIX NAME'.
lwa_make_excel-column03 = 'Matrix Description'.
lwa_make_excel-column04 = 'GROUP01'.
APPEND lwa_make_excel TO lit_make_excel.
lwa_make_excel-column01 = 'SGJU'.
lwa_make_excel-column02 = 'MATRIX NAME'.
lwa_make_excel-column03 = 'Matrix Description'.
lwa_make_excel-column04 = 'GROUP02'.
APPEND lwa_make_excel TO lit_make_excel.
*
IF lit_make_excel IS NOT INITIAL.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = lv_dext
default_file_name = lv_fname
initial_directory = lv_fdirec
CHANGING
filename = ld_filename
path = ld_path
fullpath = ld_fullpath
user_action = ld_result
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = ld_fullpath
write_field_separator = lc_x
TABLES
data_tab = lit_make_excel[].
ENDIF.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
FORM bdc_dynpro USING p_program p_screen .
*
lwa_bdcdata-program = p_program.
lwa_bdcdata-dynpro = p_screen.
lwa_bdcdata-dynbegin = abap_true.
APPEND lwa_bdcdata TO lt_bdcdata.
CLEAR lwa_bdcdata.
*
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
FORM bdc_field USING p_field p_value.
*
lwa_bdcdata-fnam = p_field.
lwa_bdcdata-fval = p_value.
CONDENSE lwa_bdcdata-fval.
APPEND lwa_bdcdata TO lt_bdcdata.
CLEAR lwa_bdcdata.
*
ENDFORM.

class ZCL_IM_ENH_PO_SRV_LIMIT definition


public
final
create public .
public section.

interfaces IF_BADI_INTERFACE .
interfaces IF_EX_ME_PROCESS_PO_CUST .
protected section.
private section.

constants GC_TDOBJECT_EKKO type THEAD-TDOBJECT value 'EKKO' ##NO_TEXT.


constants GC_SO10_SHIPPING_INST type THEAD-TDNAME value
'ZS2P_STO_SHIPPING TEXT_' ##NO_TEXT.
data G_TEXT_F06_SET type BOOLEAN .
constants GC_F06_TXTID type TDID value 'F06' ##NO_TEXT.

methods SET_HDR_TEXT_FROM_S010
importing
!IM_HEADER type ref to IF_PURCHASE_ORDER_MM
!IM_TDOBJECT type THEAD-TDOBJECT
!IM_TDNAME type THEAD-TDNAME
!IM_TDID type TDID .
ENDCLASS.

CLASS ZCL_IM_ENH_PO_SRV_LIMIT IMPLEMENTATION.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~CHECK
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_HOLD TYPE MMPUR_BOOL
* | [--->] IM_PARK TYPE MMPUR_BOOL(optional)
* | [<-->] CH_FAILED TYPE MMPUR_BOOL
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~check.
************************************************************************
* Program Title : PO Service Limit Validation *
* Author : Venkateshwarlu Chilukuri *
* Date : 01/09/2024 *
* SAP Change Request #: DS4K9A02LW *
*----------------------------------------------------------------------*
* Description: : This program is to validate the overall limit *
* is in the toelarance range for Purchase order *
* Type: : Enhancment *
* Run Frequency: : On request *
* Development Class: : ZWPS_MM_PUR *
* Requirement Ref. : GAP 1058891/ *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : *
*----------------------------------------------------------------------*

* message handler macros


INCLUDE mm_messages_mac.

DATA: lv_waers TYPE waers,


lo_services TYPE REF TO if_services_mm,
lit_esll TYPE mmsrv_esll,
lit_esuh TYPE mmsrv_esuh,
lit_esuc TYPE mmsrv_esuc,
lit_eskl TYPE mmsrv_eskl,
lv_sumtotal TYPE summ9,
lv_comtotal TYPE summ9,
lv_sumtotal_h TYPE summ9,
lv_comtotal_h TYPE summ9,
lv_s_total TYPE esuh-sumlimit,
lv_c_total TYPE esuh-sumlimit,
lv_diff TYPE esuh-sumlimit,
lv_per TYPE esuh-sumlimit,
lit_msgs TYPE bapiret2_t,
lwa_msg TYPE bapiret2.

CONSTANTS : c_zs2p_po_srvlimit TYPE tvarvc-name VALUE


'ZS2P_PO_SRVLIMIT'.

IF im_header IS NOT INITIAL.


*--Read Header data
CALL METHOD im_header->get_data
RECEIVING
re_data = DATA(lwa_poheader).
*--Read Item data
CALL METHOD im_header->get_items
RECEIVING
re_items = DATA(lit_poitems).

IF lit_poitems IS NOT INITIAL.


SELECT SINGLE name, low INTO @DATA(lwa_uname) "User ID
FROM tvarvc WHERE name EQ 'Z_UNAME_PO'
AND low EQ @sy-uname.
IF sy-subrc NE 0.
CLEAR : lv_sumtotal, lv_comtotal.
LOOP AT lit_poitems INTO DATA(lwa_item).
CLEAR : lit_esll, lit_esuh, lit_esuc, lit_eskl.
* Get current item data
CALL METHOD lwa_item-item->get_data
RECEIVING
re_data = DATA(lwa_po_item).
IF ( lwa_po_item-pstyp = '9' OR lwa_po_item-pstyp = '1' )
AND lwa_po_item-loekz EQ abap_false.
lv_waers = lwa_po_item-waers.
TRY.
* Casting
lo_services ?= lwa_item-item.
CATCH cx_sy_move_cast_error.
RETURN.
ENDTRY.
* Get data from Services and Limits tabs
CALL METHOD lo_services->get_srv_data
EXPORTING
im_packno = lwa_po_item-packno
IMPORTING
ex_esll = lit_esll
ex_esuh = lit_esuh
ex_esuc = lit_esuc
ex_eskl = lit_eskl
EXCEPTIONS
failure = 1
OTHERS = 2.

IF lit_esuh IS NOT INITIAL.


READ TABLE lit_esuh INTO DATA(lwa_esuh) INDEX 1.
IF sy-subrc EQ 0.
lv_sumtotal = lwa_esuh-sumlimit.
lv_comtotal = lwa_esuh-commitment.
lv_sumtotal_h = lv_sumtotal_h + lwa_esuh-sumlimit.
lv_comtotal_h = lv_comtotal_h + lwa_esuh-commitment.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = sy-datum
foreign_amount = lv_sumtotal
foreign_currency = lv_waers
local_currency = 'USD'
IMPORTING
local_amount = lv_s_total
EXCEPTIONS
no_rate_found = 1
overflow = 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'


EXPORTING
date = sy-datum
foreign_amount = lv_comtotal
foreign_currency = lv_waers
local_currency = 'USD'
IMPORTING
local_amount = lv_c_total
EXCEPTIONS
no_rate_found = 1
overflow = 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

lv_diff = lv_s_total - lv_c_total.


SELECT SINGLE * FROM tvarvc INTO @DATA(ls_tvarvc) WHERE
name = @c_zs2p_po_srvlimit. "#EC CI_NOORDER
IF sy-subrc = 0 AND ls_tvarvc-low IS NOT INITIAL AND
ls_tvarvc-high IS NOT INITIAL.
IF lv_diff <= ls_tvarvc-high.
lv_per = lv_c_total * ( ls_tvarvc-low / 100 ) .
IF lv_diff > lv_per .
mmpur_business_obj_id lwa_po_item-id.
mmpur_message_forced 'E' 'ZS4H_MSG' '999'
lwa_po_item-ebelp 'Overall limit is greater than'
ls_tvarvc-low '% of expected value'.
ch_failed = abap_true.
ENDIF.
ELSE.
CONCATENATE 'Overall limit is greater than'
ls_tvarvc-low '% or' INTO DATA(lv_msg) SEPARATED BY space.
mmpur_business_obj_id lwa_po_item-id.
mmpur_message_forced 'E' 'ZS4H_MSG' '999'
lwa_po_item-ebelp lv_msg ls_tvarvc-high 'USD of
expected value'.
ch_failed = abap_true.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
* Validation Cumulative limits
IF lv_sumtotal_h IS NOT INITIAL AND lv_comtotal_h IS NOT INITIAL.
CLEAR : lv_s_total, lv_c_total.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = sy-datum
foreign_amount = lv_sumtotal_h
foreign_currency = lv_waers
local_currency = 'USD'
IMPORTING
local_amount = lv_s_total
EXCEPTIONS
no_rate_found = 1
overflow = 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
date = sy-datum
foreign_amount = lv_comtotal_h
foreign_currency = lv_waers
local_currency = 'USD'
IMPORTING
local_amount = lv_c_total
EXCEPTIONS
no_rate_found = 1
overflow = 2
no_factors_found = 3
no_spread_found = 4
derived_2_times = 5
OTHERS = 6.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

lv_diff = lv_s_total - lv_c_total.


IF ls_tvarvc-low IS NOT INITIAL AND ls_tvarvc-high IS NOT
INITIAL.
IF lv_diff > ls_tvarvc-high.
mmpur_message_forced 'E' 'ZS4H_MSG' '999'
'' 'Maximum allowable cap of' ls_tvarvc-high 'USD'.
ch_failed = abap_true.
ENDIF.
ENDIF.
ENDIF.

ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~CLOSE
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~CLOSE.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_INITIATOR TYPE
MEPO_INITIATOR(optional)
* | [<-->] CH_FIELDSELECTION TYPE
TTYP_FIELDSELECTION_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER_REFKEYS
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [<-->] CH_KEY0 TYPE BREFN
* | [<-->] CH_KEY1 TYPE BREFN
* | [<-->] CH_KEY2 TYPE BREFN
* | [<-->] CH_KEY3 TYPE BREFN
* | [<-->] CH_KEY4 TYPE BREFN
* | [<-->] CH_KEY5 TYPE BREFN
* | [<-->] CH_KEY6 TYPE BREFN
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER_REFKEYS.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_ITEM TYPE REF TO
IF_PURCHASE_ORDER_ITEM_MM
* | [<-->] CH_FIELDSELECTION TYPE
TTYP_FIELDSELECTION_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM.
************************************************************************
* Program Title : Need to enable and Disable the screen for *
* some specific PO document type which has PO *
* history and Src and Final stock type condition*
* Author : Satya Panda *
* Date : 15/03/2024 *
* SAP Change Request #: DS4K9A0683 *
*----------------------------------------------------------------------*
* Description: : This Method is used to Disable the screen for *
* Src and Final stock type as per PO History *
* Type: : Enhancment *
* Run Frequency: : On request *
* Development Class: : ZWPS_MM_PUR *
* Requirement Ref. : GAP-1118347/HE0031 *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Screen Enable and disable *
* Other : *
*----------------------------------------------------------------------*

DATA: LRO_ITEM TYPE REF TO IF_PURCHASE_ORDER_ITEM_MM,


LS_ITEM TYPE MEPOITEM,
LS_HEADER TYPE MEPOHEADER,
LS_TVARVC TYPE TVARVC,
LS_TVARVC_USR TYPE TVARVC,
LV_COUNT TYPE I,
LT_HIST TYPE ME_EKBE,
LS_HISTORY TYPE EKBE.

DATA: L_PERSISTENT TYPE MMPUR_BOOL.

CONSTANTS: LC_STODOCTYPE TYPE CHAR20 VALUE 'ZS2P_STODOCTYPE',


LC_UNAME_PO TYPE CHAR20 VALUE 'Z_UNAME_PO',
LC_INSMK_SRC TYPE CHAR30 VALUE 'MEPO1313-SPE_INSMK_SRC',
LC_INSMK TYPE CHAR20 VALUE 'MEPO1313-INSMK'.

FIELD-SYMBOLS: <FS> LIKE LINE OF CH_FIELDSELECTION.

CHECK IM_ITEM IS NOT INITIAL AND IM_HEADER IS NOT INITIAL.

* Get the Item details


CALL METHOD IM_HEADER->GET_DATA
RECEIVING
RE_DATA = LS_HEADER.

SELECT SINGLE * FROM TVARVC INTO LS_TVARVC WHERE LOW = LS_HEADER-BSART


AND NAME = LC_STODOCTYPE.
IF SY-SUBRC = 0.
* Get the Item details
CALL METHOD IM_ITEM->GET_DATA
RECEIVING
RE_DATA = LS_ITEM.

* Get the History details


CALL METHOD IM_ITEM->GET_HISTORY
IMPORTING
EX_HISTORY = LT_HIST.

SELECT SINGLE * FROM TVARVC INTO LS_TVARVC_USR WHERE LOW = SY-UNAME


AND NAME = LC_UNAME_PO.
IF SY-SUBRC NE 0.

LOOP AT LT_HIST INTO DATA(LS_HIST).

LV_COUNT = LS_HIST-MENGE + LV_COUNT.

ENDLOOP.

IF LT_HIST[] IS NOT INITIAL AND LV_COUNT IS NOT INITIAL.

LOOP AT SCREEN.
CASE SCREEN-NAME.
WHEN LC_INSMK_SRC.

SCREEN-INPUT = 0.
MODIFY SCREEN.
WHEN LC_INSMK.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDCASE.
ENDLOOP.

ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM_REFKEYS
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_ITEM TYPE REF TO
IF_PURCHASE_ORDER_ITEM_MM
* | [<-->] CH_KEY0 TYPE BREFN
* | [<-->] CH_KEY1 TYPE BREFN
* | [<-->] CH_KEY2 TYPE BREFN
* | [<-->] CH_KEY3 TYPE BREFN
* | [<-->] CH_KEY4 TYPE BREFN
* | [<-->] CH_KEY5 TYPE BREFN
* | [<-->] CH_KEY6 TYPE BREFN
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_ITEM_REFKEYS.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~INITIALIZE
*
+--------------------------------------------------------------------------
-----------------------+
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~INITIALIZE.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~OPEN
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_TRTYP TYPE TRTYP
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [<-->] CH_VALID TYPE MMPUR_BOOL
* | [<-->] CH_DISPLAY_ONLY TYPE MMPUR_BOOL
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~OPEN.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~POST
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_EBELN TYPE EBELN
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~POST.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_ACCOUNT TYPE REF TO
IF_PURCHASE_ORDER_ACCOUNT_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ACCOUNT.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD if_ex_me_process_po_cust~process_header.
************************************************************************
* Program Title : Update the Shipping instructions *
* Author : Venkateshwarlu Chilukuri *
* Date : 06/17/2024 *
* SAP Change Request #: DS4K9A0BR4 & DS4K9A0HP7 *
*----------------------------------------------------------------------*
* Description: : Update the Shipping instructions in the PO *
* header from SO10 text *
* Type: : Enhancment *
* Run Frequency: : On request *
* Development Class: : ZWPS_MM_PUR *
* Requirement Ref. : GAP 1230424/ *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : *
*----------------------------------------------------------------------*
CONSTANTS : lc_zs2p_sto_sipping_text TYPE tvarvc-name VALUE
'ZS2P_STO_SHIPPING_TEXT'.

DATA : lv_pallet_instruc TYPE thead-tdname,


lwa_mepoheader TYPE mepoheader,
zcl_po TYPE REF TO cl_po_header_handle_mm,
lt_items TYPE purchase_order_items,
lwa_mepoitem TYPE mepoitem,
lit_textlines TYPE mmpur_t_textlines.

*get header and item data


lwa_mepoheader = im_header->get_data( ).

IF lwa_mepoheader-ebeln IS INITIAL. " In create mode only

*created a second instance from cl_po_header_handle_mm


CREATE OBJECT zcl_po
EXPORTING
im_po_number = lwa_mepoheader-ebeln.

*--------------------------------------------------**
* Extract PO Item Information **
*--------------------------------------------------**
REFRESH : lt_items.
lt_items = zcl_po->if_purchase_order_mm~get_items( ).
LOOP AT lt_items INTO DATA(lwa_items).
lwa_mepoitem = lwa_items-item->get_data( ).
EXIT.
ENDLOOP.

SELECT * FROM tvarvc INTO TABLE @DATA(lit_tvarvc)


WHERE name = @lc_zs2p_sto_sipping_text.
READ TABLE lit_tvarvc INTO DATA(lwa_tvarvc) WITH KEY high =
lwa_mepoitem-werks
low =
lwa_mepoheader-bsart.
IF lwa_mepoitem-werks EQ lwa_tvarvc-high AND lwa_mepoitem-werks IS
NOT INITIAL.
*--Check whether text has already been populated.
CLEAR lit_textlines.
CALL METHOD im_header->if_longtexts_mm~get_text
EXPORTING
im_tdid = me->gc_f06_txtid
IMPORTING
ex_textlines = lit_textlines.

IF ( lit_textlines[] IS INITIAL AND


me->g_text_f06_set IS INITIAL ) OR lwa_mepoheader-ebeln IS
INITIAL.
CLEAR me->g_text_f06_set.

CLEAR lv_pallet_instruc.
CONCATENATE me->gc_so10_shipping_inst lwa_mepoitem-bukrs INTO
lv_pallet_instruc. "so10 text maintained at company code level

me->set_hdr_text_from_s010(
im_header = im_header
im_tdobject = me->gc_tdobject_ekko
im_tdname = lv_pallet_instruc
im_tdid = me->gc_f06_txtid
).
me->g_text_f06_set = 'X'.
ENDIF.
ENDIF.
ENDIF.

ENDMETHOD.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_ITEM TYPE REF TO
IF_PURCHASE_ORDER_ITEM_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Public Method ZCL_IM_ENH_PO_SRV_LIMIT-
>IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_SCHEDULE TYPE REF TO
IF_PURCHASE_ORDER_SCHEDULE_MM
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
method IF_EX_ME_PROCESS_PO_CUST~PROCESS_SCHEDULE.
endmethod.

*
<SIGNATURE>----------------------------------------------------------------
-----------------------+
* | Instance Private Method ZCL_IM_ENH_PO_SRV_LIMIT->SET_HDR_TEXT_FROM_S010
*
+--------------------------------------------------------------------------
-----------------------+
* | [--->] IM_HEADER TYPE REF TO IF_PURCHASE_ORDER_MM
* | [--->] IM_TDOBJECT TYPE THEAD-TDOBJECT
* | [--->] IM_TDNAME TYPE THEAD-TDNAME
* | [--->] IM_TDID TYPE TDID
*
+--------------------------------------------------------------------------
------------</SIGNATURE>
METHOD set_hdr_text_from_s010.
************************************************************************
* Program Title : Read SO10 Text *
* Author : Venkateshwarlu Chilukuri *
* Date : 06/17/2024 *
* SAP Change Request #: DS4K9A0BR4 *
*----------------------------------------------------------------------*
* Description: : Update the Shipping instructions in the PO *
* header from SO10 text *
* Type: : Enhancment *
* Run Frequency: : On request *
* Development Class: : ZWPS_MM_PUR *
* Requirement Ref. : GAP 1230424/ *
*----------------------------------------------------------------------*
* INPUTS *
* Variants : None *
* Input file name : N/A *
* Other : *
*----------------------------------------------------------------------*
* OUTPUTS *
* Files : N/A *
* Errors : Standard error messages *
* Other : *
*----------------------------------------------------------------------*
DATA: im_textlines TYPE mmpur_t_textlines,
wa_textlines LIKE LINE OF im_textlines,
text_tab TYPE TABLE OF tline,
wa_text_tab TYPE tline.

CALL FUNCTION 'READ_TEXT'


EXPORTING
id = 'ST'
language = sy-langu
name = im_tdname
object = 'TEXT'
TABLES
lines = text_tab
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc EQ 0 AND text_tab[] IS NOT INITIAL.

LOOP AT text_tab INTO wa_text_tab .


wa_textlines-tdformat = wa_text_tab-tdformat.
wa_textlines-tdline = wa_text_tab-tdline.
APPEND wa_textlines TO im_textlines.
ENDLOOP .

*--Set header information


wa_textlines-tdobject = im_tdobject.
wa_textlines-tdid = im_tdid.

MODIFY im_textlines FROM wa_textlines


TRANSPORTING tdobject tdid
WHERE tdobject IS INITIAL.

CALL METHOD im_header->if_longtexts_mm~set_text


EXPORTING
im_tdid = im_tdid
im_textlines = im_textlines.
ENDIF.
ENDMETHOD.
ENDCLASS.

You might also like