0% found this document useful (0 votes)
2 views

File

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)
2 views

File

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
You are on page 1/ 31

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

* 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 = 'Mes.Type'(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