Wednesday, April 13, 2011

Radio Button ( Toggle) on selection screen

This program helps to maintain selection screen based on Radio button selection.

When we have two radio buttons on the selection screen and while selecting the first button only few fields should display. Rest fields should be hidden.



A Simple program logic is given as below.

First create radio button with user command.
Then create selection screen fields with modification id numbers.

After this event 'At Selection Screen On Output' is called to display the fields based on radio button selection.

TABLES: mara.
TABLES sscrfields.


PARAMETERS : rb_one RADIOBUTTON GROUP rb1
USER-COMMAND xyz
DEFAULT 'X',
rb_two RADIOBUTTON GROUP rb1.

selection-screen begin of block b1 with frame .
PARAMETERS: p_file TYPE rlgrap-filename MODIF ID id1.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
SELECT-OPTIONS: s_mara FOR mara-matnr MODIF ID id2,
s_date FOR sy-datum MODIF ID id2.
SELECTION-SCREEN END OF BLOCK b2.


AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF rb_one EQ 'X'.
IF screen-group1 = 'ID1'.
* screen-required = 1.
screen-active = 1.
MODIFY SCREEN.
ENDIF.
ELSEIF rb_two EQ 'X'.
IF screen-group1 = 'ID2'.
screen-active = 0.
MODIFY SCREEN.
ENDIF..

ENDIF.
ENDLOOP.

Thursday, April 7, 2011

Upload Program to Create Notification

This program helps to upload legacy system data to SAP system to create Notification.

F4 help id provided at selection screen to upload data in excel file format.

After program execution Notification will be created. Error log file will be created at presentation server.

Program logic is given as below.

REPORT zpmcima0001
NO STANDARD PAGE HEADING LINE-SIZE 255.
TYPE-POOLS: truxs.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_data,
notif_type LIKE bapi2080-notif_type,
short_text LIKE bapi2080_nothdri-short_text, "Short Text for Notification
funct_loc LIKE bapi2080_nothdri-funct_loc, "Functional location,
equipment LIKE bapi2080_nothdri-equipment, "Equipment

* long_text TYPE CHAR2000,
plangroup LIKE bapi2080_nothdri-plangroup, "PlannerGroup
maintplant LIKE bapi2080_nothdri-maintplant, "Plant
pm_wkctr LIKE bapi2080_nothdri-pm_wkctr, "Maint. Work Center
reportedby LIKE bapi2080_nothdri-reportedby, "Reported By
priority LIKE bapi2080_nothdri-priority, "Priority
strmlfndate LIKE bapi2080_nothdri-strmlfndate, "Malfunction Start (DDMMYYYY)
strmlfntime LIKE bapi2080_nothdri-strmlfntime, "Malfunction StartTime (HHMMSS)(24 hour format)
endmlfndate LIKE bapi2080_nothdri-endmlfndate, "Malfunction End (DDMMYYYY)
endmlfntime LIKE bapi2080_nothdri-endmlfntime, "Malfunction EndTime (HHMMSS)(24 hour format)
desstdate LIKE bapi2080_nothdri-desstdate, "Required Start (DDMMYYYY)
dessttime LIKE bapi2080_nothdri-dessttime, "Required Starttime (HHMMSS)(24 hour format)"
desenddate LIKE bapi2080_nothdri-desenddate, "Required End (DDMMYYYY)
desendtm LIKE bapi2080_nothdri-desendtm, "Required End Time (HHMMSS)(24 hour format)"
breakdown LIKE bapi2080_nothdri-breakdown, "Break down Indicator (Y or N)
long_text LIKE bapi2080_notfulltxti-text_line, "Long text
item_sort_no LIKE bapi2080_notitemi-item_sort_no, "Item Sort Number
dl_codegrp LIKE bapi2080_notitemi-dl_codegrp, "Object part code group
dl_code LIKE bapi2080_notitemi-dl_code, "Object part code
d_codegrp LIKE bapi2080_notitemi-d_codegrp, "Damage code group
d_code LIKE bapi2080_notitemi-d_code, "Damage code
descript LIKE bapi2080_notitemi-descript, "Item Text
item_key LIKE bapi2080_notcausi-item_key, "Item Key for Cause "New Added
cause_sort_no LIKE bapi2080_notcausi-cause_sort_no, "Cause Sort Number "New Added
cause_codegrp LIKE bapi2080_notcausi-cause_codegrp, "Cause code group
cause_code LIKE bapi2080_notcausi-cause_code, "Cause code
causetext LIKE bapi2080_notcausi-causetext, "Cause Text

act_key LIKE bapi2080_notactvi-act_key, "Iteam Key for Activity "New Addded
act_sort_no LIKE bapi2080_notactvi-act_sort_no, "Activity Sort Number
act_codegrp LIKE bapi2080_notactvi-act_codegrp, "Activity code group
act_code LIKE bapi2080_notactvi-act_code, "Activity code
acttext LIKE bapi2080_notactvi-acttext, "Activity Text
start_date LIKE bapi2080_notactvi-start_date, "START_DATE Activity Start date
start_time LIKE bapi2080_notactvi-start_time, "START_TIME Activity Start Time
end_date LIKE bapi2080_notactvi-end_date, "END_DATE Activity End date
end_time LIKE bapi2080_notactvi-end_time, "END_TIME Activity End Time
END OF ty_data.

TYPES: BEGIN OF ty_log,
notif_type(2),
short_text(40),
funct_loc(30),
equipment(18),
plangroup(3) ,
maintplant(4) ,
pm_wkctr(8) ,
reportedby(12),
priority(1) ,
strmlfndate(8),
strmlfntime(6),
endmlfndate(8),
endmlfntime(6),
desstdate(8) ,
dessttime(6) ,
desenddate(8),
desendtm(6) ,
breakdown(1) ,
text TYPE char255,
END OF ty_log.

TYPES: BEGIN OF ty_log1,
notification_type(4),
notification_text(40),
functional_location(30),
equipment(18),
planner_group(15),
plant(8),
maint_work_center(16),
reported_by(12),
priority(10),
malfunction_startdate(20),
malfunction_starttime(20),
malfunction_enddate(20),
malfunction_endtime(20),
required_startdate(20),
required_starttime(20),
required_enddate(20),
required_endtime(20),
breakdown_indicator(20),
text TYPE char255,
END OF ty_log1.

TYPES: BEGIN OF ty_equi,
equnr LIKE equi-equnr,
iwerk LIKE equz-iwerk,
tplnr LIKE iloa-tplnr,
END OF ty_equi.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_nothdri TYPE STANDARD TABLE OF bapi2080_nothdri WITH HEADER LINE,
it_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
it_nothdre TYPE STANDARD TABLE OF bapi2080_nothdre WITH HEADER LINE,
it_notfulltxti TYPE STANDARD TABLE OF bapi2080_notfulltxti WITH HEADER LINE,
it_notitemi TYPE STANDARD TABLE OF bapi2080_notitemi WITH HEADER LINE,
it_notcausi TYPE STANDARD TABLE OF bapi2080_notcausi WITH HEADER LINE,
it_notactvi TYPE STANDARD TABLE OF bapi2080_notactvi WITH HEADER LINE,
it_data TYPE STANDARD TABLE OF ty_data,
it_raw TYPE truxs_t_text_data,
it_equi TYPE STANDARD TABLE OF ty_equi,
it_log TYPE STANDARD TABLE OF ty_log,
wa_equi TYPE ty_equi,
wa_data TYPE ty_data.

************************************************************************
* Data Declaration *
************************************************************************
DATA: wa_log TYPE ty_log,
wa_t100 TYPE t100,
g_flag TYPE c,
g_flag1 TYPE c, "Used for log file
g_type LIKE bapi2080-notif_type,
g_count_item LIKE bapi2080_notitemi-item_sort_no,
g_count_in_error TYPE i,
error_text(200) TYPE c,
g_count_confirmed TYPE i.

************************************************************************
* Selection Screen *
************************************************************************
*Upload File Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.
*Log File selection screen
*SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
*PARAMETERS : p_file1 LIKE rlgrap-filename OBLIGATORY .
*SELECTION-SCREEN END OF BLOCK b2.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
*
* CALL FUNCTION 'F4_FILENAME'
* EXPORTING
* program_name = syst-cprog
* dynpro_number = syst-dynnr
* field_name = ' '
* IMPORTING
* file_name = p_file1.
************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
*Read the data from the file to internal table.
PERFORM read_data.
*Create Measuring Doc
PERFORM create_notification.
*Download Log File
PERFORM download_file.

*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_data[]
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RAISE upload_problem.
ENDIF.
ENDFORM. " READ_DATA


*&---------------------------------------------------------------------*
*& Form CREATE_NOTIFICATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_notification .
DATA: l_type TYPE qmart,
ls_notifheader TYPE bapi2080_nothdre,
l_equnr TYPE equnr,
l_tplnr TYPE tplnr.
*Select Equipment Number and Plant combination into an internal table
SELECT equnr iwerk tplnr
INTO TABLE it_equi
FROM v_equi
WHERE iwerk = 'I302'.

SORT it_equi BY equnr tplnr.
DELETE ADJACENT DUPLICATES FROM it_equi.
g_count_item = 1.

LOOP AT it_data INTO wa_data.
CLEAR: it_notitemi,
it_notcausi,
it_notactvi.

IF ( wa_data-notif_type IS NOT INITIAL AND g_flag IS INITIAL ).
g_type = wa_data-notif_type.
*Check plant whether it belongs to gpec (i302) or not.
IF wa_data-equipment IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-equipment
IMPORTING
output = l_equnr.

READ TABLE it_equi INTO wa_equi
WITH KEY equnr = l_equnr.
IF sy-subrc <> 0.
PERFORM build_log_header.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Equipment' wa_data-equipment 'does not belong to GPEC plant' INTO wa_log-text
SEPARATED BY space.
APPEND wa_log TO it_log.
PERFORM build_error_output.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSE.
it_nothdri-equipment = wa_data-equipment. "'900000000'."'10000030'.
ENDIF.
ENDIF.
IF wa_data-funct_loc IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
EXPORTING
input = wa_data-funct_loc
i_flg_check_internal = 'X'
IMPORTING
output = l_tplnr.
READ TABLE it_equi INTO wa_equi
WITH KEY tplnr = l_tplnr.
IF sy-subrc <> 0.
PERFORM build_log_header.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Functiona Location' wa_data-funct_loc 'does not belong to GPEC plant' INTO wa_log-text
SEPARATED BY space.
APPEND wa_log TO it_log.
PERFORM build_error_output.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSEIF sy-subrc EQ 0 .
* it_nothdri-funct_loc = wa_data-funct_loc.
it_nothdri-funct_loc = l_tplnr.
ENDIF.
ENDIF.
* create header data
it_nothdri-refobjectkey = wa_data-notif_type. "'B2'."'PJAREF'.
it_nothdri-reportedby = wa_data-reportedby. "'ASC3832'.
it_nothdri-short_text = wa_data-short_text. "'AKS Short Test from BAPI'.
it_nothdri-priority = wa_data-priority. "'2'."High
it_nothdri-plangroup = wa_data-plangroup.
it_nothdri-maintplant = wa_data-maintplant.
it_nothdri-pm_wkctr = wa_data-pm_wkctr.
it_nothdri-strmlfndate = wa_data-strmlfndate.
it_nothdri-strmlfntime = wa_data-strmlfntime.
it_nothdri-endmlfndate = wa_data-endmlfndate.
it_nothdri-endmlfntime = wa_data-endmlfntime.
it_nothdri-desstdate = wa_data-desstdate.
it_nothdri-dessttime = wa_data-dessttime.
it_nothdri-desenddate = wa_data-desenddate.
it_nothdri-desendtm = wa_data-desendtm.
IF wa_data-breakdown = 'Y'.
it_nothdri-breakdown = 'X'.
ENDIF.

*Create long text
PERFORM create_long_text USING wa_data-long_text.

*Item
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ENDIF.

*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.

*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
g_flag = 'X'.
ELSEIF ( wa_data-notif_type IS INITIAL AND g_flag IS NOT INITIAL ).
g_count_item = g_count_item + 1.
*Create long text
PERFORM create_long_text USING wa_data-long_text.
*Insert Item level data
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ELSE.
it_notitemi-item_key = g_count_item.
it_notitemi-item_sort_no = g_count_item.
APPEND it_notitemi.
ENDIF.
*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
IF wa_data-item_sort_no IS INITIAL.
it_notcausi-item_sort_no = g_count_item.
ELSE.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
ENDIF.
*i_BAPI2080_NOTCAUSI-ITEM_KEY =.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.

*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
ELSEIF ( wa_data-notif_type IS NOT INITIAL AND g_flag IS NOT INITIAL ).
*Call BAPI to Create Notification
PERFORM call_bapi.
CLEAR: g_flag,g_count_item.
g_count_item = 1.
g_type = wa_data-notif_type.
*Check plant whether it belongs to gpec (i302) or not.
IF wa_data-equipment IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-equipment
IMPORTING
output = l_equnr.
READ TABLE it_equi INTO wa_equi
WITH KEY equnr = l_equnr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Equipment' wa_data-equipment 'does not belong to GPEC plant'
INTO wa_log-text SEPARATED BY space.
APPEND wa_log TO it_log.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSE.
it_nothdri-equipment = wa_data-equipment. "'900000000'."'10000030'.
ENDIF.
ENDIF.
IF wa_data-funct_loc IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_TPLNR_INPUT'
EXPORTING
input = wa_data-funct_loc
i_flg_check_internal = 'X'
IMPORTING
output = l_tplnr.
READ TABLE it_equi INTO wa_equi
WITH KEY tplnr = l_tplnr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING wa_data TO wa_log.
CONCATENATE 'Functiona Location' wa_data-funct_loc 'does not belong to GPEC plant'
INTO wa_log-text SEPARATED BY space.
APPEND wa_log TO it_log.
CLEAR: wa_equi,wa_data.
CONTINUE.
ELSEIF sy-subrc EQ 0.
* it_nothdri-funct_loc = wa_data-funct_loc.
it_nothdri-funct_loc = l_tplnr.
ENDIF.
ENDIF.
* create header data
it_nothdri-refobjectkey = wa_data-notif_type. "'B2'."'PJAREF'.
it_nothdri-reportedby = wa_data-reportedby. "'ASC3832'.
it_nothdri-short_text = wa_data-short_text. "'AKS Short Test from BAPI'.
it_nothdri-priority = wa_data-priority. "'2'."High
it_nothdri-plangroup = wa_data-plangroup.
it_nothdri-maintplant = wa_data-maintplant.
it_nothdri-pm_wkctr = wa_data-pm_wkctr.
it_nothdri-strmlfndate = wa_data-strmlfndate.
it_nothdri-strmlfntime = wa_data-strmlfntime.
it_nothdri-endmlfndate = wa_data-endmlfndate.
it_nothdri-endmlfntime = wa_data-endmlfntime.
it_nothdri-desstdate = wa_data-desstdate.
it_nothdri-dessttime = wa_data-dessttime.
it_nothdri-desenddate = wa_data-desenddate.
it_nothdri-desendtm = wa_data-desendtm.
IF wa_data-breakdown = 'Y'.
it_nothdri-breakdown = 'X'.
ENDIF.
*Create long text
PERFORM create_long_text USING wa_data-long_text.
*Item
IF wa_data-item_sort_no IS NOT INITIAL.
it_notitemi-item_key = wa_data-item_sort_no.
it_notitemi-item_sort_no = wa_data-item_sort_no. "'1'.
it_notitemi-descript = wa_data-descript."'Test Item '.
it_notitemi-d_codegrp = wa_data-d_codegrp." 'FCSCP001'.
it_notitemi-d_code = wa_data-d_code. "'CP01'.
it_notitemi-dl_codegrp = wa_data-dl_codegrp. "'FCP001'.
it_notitemi-dl_code = wa_data-dl_code. "'P001'.
APPEND it_notitemi.
ELSE.
it_notitemi-item_key = g_count_item.
it_notitemi-item_sort_no = g_count_item.
ENDIF.
*Cause
IF wa_data-cause_sort_no IS NOT INITIAL. "'1'..
it_notcausi-cause_sort_no = wa_data-cause_sort_no. "'1'.
IF wa_data-item_sort_no IS INITIAL.
it_notcausi-item_sort_no = g_count_item.
ELSE.
it_notcausi-item_sort_no = wa_data-item_sort_no. "'1'.
ENDIF.
*i_BAPI2080_NOTCAUSI-ITEM_KEY =.
it_notcausi-item_key = wa_data-item_key.
it_notcausi-causetext = wa_data-causetext."'Test Cause'.
it_notcausi-cause_codegrp = wa_data-cause_codegrp."'FCVNP001'.
it_notcausi-cause_code = wa_data-cause_code. "'CC01'.
APPEND it_notcausi.
ENDIF.
*Activity
IF wa_data-act_key IS NOT INITIAL.
it_notactvi-act_key = wa_data-act_key.
it_notactvi-act_sort_no = wa_data-act_sort_no. "'1'.
it_notactvi-item_sort_no = wa_data-act_key. " '1'.
it_notactvi-acttext = wa_data-acttext."'Test Activity'.
it_notactvi-act_codegrp = wa_data-act_codegrp."'FCVNP001'.
it_notactvi-act_code = wa_data-act_code. "'RM06'.
it_notactvi-start_date = wa_data-start_date."'06.10.2010'.
it_notactvi-start_time = wa_data-start_time. "'182118'.
it_notactvi-end_date = wa_data-end_date."'06.10.2010'.
it_notactvi-end_time = wa_data-end_time. "'182139'.
APPEND it_notactvi.
ENDIF.
g_flag = 'X'.
ENDIF.
ENDLOOP.
*Create Notification for the last Notification item
IF it_nothdri IS NOT INITIAL.
PERFORM call_bapi.
CLEAR g_flag.
ENDIF.

ENDFORM. " CREATE_NOTIFICATION
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM download_file .

DATA: l_dsn LIKE rlgrap-filename,
l_filelen TYPE i,
gui_filename TYPE string,
l_path TYPE string,
l_line TYPE i.
* Prepare the error log file location and file name
l_filelen = STRLEN( p_file ).
l_filelen = l_filelen - 3.
CONCATENATE p_file(l_filelen) 'ERR.txt' INTO l_dsn.

gui_filename = l_dsn.

DESCRIBE TABLE it_log LINES l_line.
IF l_line = 0.
wa_log-text = 'Error not found. Upload process completed!'.
APPEND wa_log TO it_log.
CLEAR wa_log.
ENDIF.


CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = gui_filename
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
TABLES
data_tab = it_log
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
SKIP.
CONCATENATE 'Error file downloaded at' l_dsn INTO l_path
SEPARATED BY space.
WRITE:/ l_path.
ENDIF.
ENDFORM. " DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*& Form CALL_BAPI
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_bapi .
DATA ls_notifheader TYPE bapi2080_nothdre.
*Call BAPI to create Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_CREATE'
EXPORTING
* EXTERNAL_NUMBER =
notif_type = g_type
notifheader = it_nothdri
* TASK_DETERMINATION = ' '
* SENDER =
* ORDERID =
IMPORTING
notifheader_export = it_nothdre
TABLES
notitem = it_notitemi
notifcaus = it_notcausi
notifactv = it_notactvi
* NOTIFTASK =
* NOTIFPARTNR =
longtexts = it_notfulltxti
* KEY_RELATIONSHIPS =
return = it_bapiret2.

*Save Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE'
EXPORTING
number = it_nothdre-notif_no
IMPORTING
notifheader = ls_notifheader
* TABLES
* RETURN =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
*Update Error messages into log file.
LOOP AT it_bapiret2 WHERE type = 'E'.
PERFORM log_error.
ENDLOOP.
*Append blank lines in error log
IF it_bapiret2 IS NOT INITIAL.
CLEAR wa_log.
APPEND wa_log TO it_log.
ENDIF.
*Delete Items with Blank fields.
IF ls_notifheader-notif_no IS NOT INITIAL.
* CLEAR wa_log.
* CONCATENATE 'Notification' ls_notifheader-notif_no 'created for' g_type
* 'Type' INTO wa_log-text SEPARATED BY space.
** wa_log-text = ls_notifheader-notif_no.
* APPEND wa_log TO it_log.
* CLEAR wa_log.
* APPEND wa_log TO it_log.

WAIT UP TO 2 SECONDS.
PERFORM delete_notif_items USING ls_notifheader-notif_no .
ENDIF.
CLEAR: g_type,ls_notifheader.
REFRESH: it_nothdri,
it_bapiret2,
it_nothdre,
it_notfulltxti,
it_notitemi,
it_notcausi ,
it_notactvi.
ENDFORM. " CALL_BAPI
*&---------------------------------------------------------------------*
*& Form DELETE_NOTIF_ITEMS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LS_NOTIFHEADER_NOTIF_NO text
*----------------------------------------------------------------------*
FORM delete_notif_items USING p_notif_no.
DATA: lt_notitem TYPE STANDARD TABLE OF bapi2080_notiteme WITH HEADER LINE,
lt_notitem1 TYPE STANDARD TABLE OF bapi2080_notitemi WITH HEADER LINE,
lt_bapiret2 TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
ls_notifheader1 TYPE bapi2080_nothdre.

CALL FUNCTION 'BAPI_ALM_NOTIF_GET_DETAIL'
EXPORTING
number = p_notif_no
TABLES
notitem = lt_notitem.

LOOP AT lt_notitem
WHERE d_codegrp EQ space
AND d_code EQ space
AND dl_codegrp EQ space
AND dl_code EQ space
AND delete_flag EQ space.
lt_notitem1-item_key = lt_notitem-item_key. " = '0005'.
lt_notitem1-item_sort_no = lt_notitem-item_sort_no. " = '0005'.
APPEND lt_notitem1.
ENDLOOP.

CALL FUNCTION 'BAPI_ALM_NOTIF_DATA_DELETE'
EXPORTING
number = p_notif_no
TABLES
notitem = lt_notitem1[]
return = lt_bapiret2.

* Save Notification
CALL FUNCTION 'BAPI_ALM_NOTIF_SAVE'
EXPORTING
number = p_notif_no
IMPORTING
notifheader = ls_notifheader1
* TABLES
* RETURN =
.
*WRITE:/ ls_notifheader1-notif_no.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.
CLEAR : lt_notitem,lt_notitem1,lt_bapiret2,p_notif_no.
REFRESH: lt_notitem,lt_notitem1,lt_bapiret2.
ENDFORM. " DELETE_NOTIF_ITEMS
*&---------------------------------------------------------------------*
*& Form CREATE_LONG_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_DATA_LONG_TEXT text
*----------------------------------------------------------------------*
FORM create_long_text USING p_long_text.

it_notfulltxti-format_col = 'U1'.
it_notfulltxti-objtype = 'QMEL'.
it_notfulltxti-text_line = p_long_text.
APPEND it_notfulltxti.
ENDFORM. " CREATE_LONG_TEXT
*&---------------------------------------------------------------------*
*& Form LOG_ERROR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM log_error .
* IF g_flag1 IS INITIAL.
PERFORM build_log_header.
* APPEND wa_log TO it_log.
* g_flag1 = 'X'.
* ENDIF.

ADD 1 TO g_count_in_error.
SELECT SINGLE * FROM t100 INTO wa_t100
WHERE sprsl = sy-langu
AND arbgb = sy-msgid
AND msgnr = sy-msgno.
MOVE wa_t100-text TO error_text.
IF error_text CS '&1'.
REPLACE '&1' WITH sy-msgv1 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv1 INTO error_text.
ENDIF.
IF error_text CS '&2'.
REPLACE '&2' WITH sy-msgv2 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv2 INTO error_text.
ENDIF.
IF error_text CS '&3'.
REPLACE '&3' WITH sy-msgv3 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv3 INTO error_text.
ENDIF.
IF error_text CS '&4'.
REPLACE '&4' WITH sy-msgv4 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv4 INTO error_text.
ENDIF.
CONDENSE error_text.

*Write Error log on the output screen
WRITE:
/(4) g_type,
(40) it_nothdri-short_text,
(30) it_nothdri-funct_loc,
(18) it_nothdri-equipment,
(15) it_nothdri-plangroup,
(8) it_nothdri-maintplant,
(16) it_nothdri-pm_wkctr,
(12) it_nothdri-reportedby,
(10) it_nothdri-priority,
(20) it_nothdri-strmlfndate,
(20) it_nothdri-strmlfntime,
(20) it_nothdri-endmlfndate,
(20) it_nothdri-endmlfntime,
(20) it_nothdri-desstdate,
(20) it_nothdri-dessttime,
(20) it_nothdri-desenddate,
(20) it_nothdri-desendtm,
(20) it_nothdri-breakdown,
(80) error_text.

wa_log-notif_type = g_type.
wa_log-short_text = it_nothdri-short_text.
wa_log-funct_loc = it_nothdri-funct_loc.
wa_log-equipment = it_nothdri-equipment.
wa_log-plangroup = it_nothdri-plangroup.
wa_log-maintplant = it_nothdri-maintplant.
wa_log-pm_wkctr = it_nothdri-maintplant.
wa_log-reportedby = it_nothdri-reportedby.
wa_log-priority = it_nothdri-priority.
wa_log-strmlfndate = it_nothdri-strmlfndate.
wa_log-strmlfntime = it_nothdri-strmlfntime.
wa_log-endmlfndate = it_nothdri-endmlfndate.
wa_log-endmlfntime = it_nothdri-strmlfntime.
wa_log-desstdate = it_nothdri-desstdate.
wa_log-dessttime = it_nothdri-dessttime.
wa_log-desenddate = it_nothdri-desenddate.
wa_log-desendtm = it_nothdri-desendtm.
wa_log-breakdown = it_nothdri-breakdown.
wa_log-text = error_text.
APPEND wa_log TO it_log.
ENDFORM. " LOG_ERROR
*&---------------------------------------------------------------------*
*& Form BUILD_LOG_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_log_header .
IF g_flag1 IS INITIAL.
wa_log-notif_type = 'Notif_Type'.
wa_log-short_text = 'Notification Text'.
wa_log-funct_loc = 'Function Location'.
wa_log-equipment = 'Notification'.
wa_log-plangroup = 'Planner Grp'.
wa_log-maintplant = 'MPlnt'.
wa_log-pm_wkctr = 'Work Centre'.
wa_log-reportedby = 'Reported by'.
wa_log-priority = 'Priority'.
wa_log-strmlfndate = 'Mf_st_dt'.
wa_log-strmlfntime = 'Mf_st_t'.
wa_log-endmlfndate = 'Mf_end_date'.
wa_log-endmlfntime = 'Mf_end_time'.
wa_log-desstdate = 'Req_st_date'.
wa_log-dessttime = 'Req_st_time'.
wa_log-desenddate = 'Req_end_date'.
wa_log-desendtm = 'Req_end_time'.
wa_log-breakdown = 'Breakdown'.
wa_log-text ='Error text'.
APPEND wa_log TO it_log.

*Write header on report output.
WRITE:/ wa_log-notif_type,
wa_log-short_text,
wa_log-funct_loc,
wa_log-equipment,
wa_log-plangroup,
wa_log-maintplant,
wa_log-pm_wkctr,
wa_log-reportedby,
wa_log-priority,
wa_log-strmlfndate,
wa_log-strmlfntime,
wa_log-endmlfndate,
wa_log-endmlfntime,
wa_log-desstdate,
wa_log-dessttime,
wa_log-desenddate,
wa_log-desendtm,
wa_log-breakdown,
wa_log-text.
SKIP.

CLEAR wa_log.
APPEND wa_log TO it_log.
g_flag1 = 'X'.
ENDIF.

ENDFORM. " BUILD_LOG_HEADER
*&---------------------------------------------------------------------*
*& Form BUILD_ERROR_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_error_output .
*Write Error on the output screen
WRITE:/ wa_log-notif_type,
wa_log-short_text,
wa_log-funct_loc,
wa_log-equipment,
wa_log-plangroup,
wa_log-maintplant,
wa_log-pm_wkctr,
wa_log-reportedby,
wa_log-priority,
wa_log-strmlfndate,
wa_log-strmlfntime,
wa_log-endmlfndate,
wa_log-endmlfntime,
wa_log-desstdate,
wa_log-dessttime,
wa_log-desenddate,
wa_log-desendtm,
wa_log-breakdown,
wa_log-text.
CLEAR wa_log.
ENDFORM. " BUILD_ERROR_OUTPUT

Material Requirement Planning for PM between Two Dates

This Program helps to understand the Material Requirement Planning for Maintenance Plan between two dates. *Selection Screen *Report Output

REPORT zpmcipr0005
NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPE-POOLS: truxs,slis.
************************************************************************
* Table Declaration *
************************************************************************
TABLES: mpla,mpos.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_vimpla,
warpl LIKE mpla-warpl, "Maintenance Plan
strat LIKE mpla-strat, "Maintenance strategy
equnr LIKE mpla-equnr, "Equipment Number
tplnr LIKE mpla-tplnr, "Functional Location
abnum LIKE mpla-abnum, "Maintenance Plan Call Number
objnr LIKE mpla-objnr, "Object number
mptyp LIKE mpla-mptyp, "Maintenance plan category
plan_sort LIKE mpla-plan_sort, "Sort field for maintenance plans
wapos LIKE mpos-wapos, "Maintenance item
plnty LIKE mpos-plnty, "Task List Type
plnnr LIKE mpos-plnnr, "Key for Task List Group
plnal LIKE mpos-plnal, "Group Counter
wpgrp LIKE mpos-wpgrp, "Planner Group
iwerk LIKE mpos-iwerk, "Maintenance Planning Plant
inact LIKE mpos-inact, "indicator that maintenance item
"is inactive
std_avo LIKE mpos-std_avo, "Number of the task list node
mityp LIKE mpos-mityp, "Maintenance item category
apfkt LIKE mpos-apfkt, "Execution Factor
END OF ty_vimpla.

TYPES: BEGIN OF ty_mhis,
warpl LIKE mhis-warpl,
abnum LIKE mhis-abnum,
zaehl LIKE mhis-zaehl,
nplda LIKE mhis-nplda,
tsenm LIKE mhis-tsenm,
tstat LIKE mhis-tstat,
END OF ty_mhis.
TYPES: BEGIN OF ty_mhis1,
warpl LIKE mpla-warpl, "Maintenance Plan
zaehl LIKE mhis-zaehl,
count TYPE i,
END OF ty_mhis1.
TYPES: BEGIN OF ty_plmz,
plnty LIKE plmz-plnty,
plnnr LIKE plmz-plnnr,
zuonr LIKE plmz-zuonr,
zaehl LIKE plmz-zaehl,
loekz LIKE plmz-loekz,
plnal LIKE plmz-plnal,
plnkn LIKE plmz-plnkn,
stlty LIKE plmz-stlty,
stlnr LIKE plmz-stlnr,
stlal LIKE plmz-stlal,
stlkn LIKE plmz-stlkn,
imeng LIKE plmz-imeng,
imein LIKE plmz-imein,
stpoz LIKE stpo-stpoz,
idnrk LIKE stpo-idnrk,
END OF ty_plmz.

TYPES: BEGIN OF ty_plwp,
plnty LIKE plwp-plnty,
plnnr LIKE plwp-plnnr,
plnal LIKE plwp-plnal,
plnfl LIKE plwp-plnfl,
plnkn LIKE plwp-plnkn,
paket LIKE plwp-paket,
zaehl LIKE plwp-zaehl,
strat LIKE plwp-strat,
vornr LIKE plpo-vornr,
arbid LIKE plpo-arbid,
aufkt LIKE plpo-aufkt,
END OF ty_plwp.

TYPES: BEGIN OF ty_t006a,
spras LIKE t006a-spras,
msehi LIKE t006a-msehi,
msehl LIKE t006a-msehl,
END OF ty_t006a.

TYPES: BEGIN OF ty_output,
warpl LIKE mpla-warpl, "Maintenance Plan
wapos LIKE mpos-wapos, "Maintenance item
plnty LIKE mpos-plnty, "Task List Type
plnnr LIKE mpos-plnnr, "Key for Task List Group
plnal LIKE mpos-plnal, "Group Counter
wpgrp LIKE mpos-wpgrp, "Planner Group
equnr LIKE mpla-equnr, "Equipment Number
tplnr LIKE mpla-tplnr, "Functional Location
matnr LIKE mara-matnr, "Material
maktx LIKE makt-maktx, "Material Description
mityp LIKE mpos-mityp, "Maintenance item category
imeng LIKE plmz-imeng, "Quantity
imein LIKE t006a-msehl, "UOM
nplda LIKE mhis-nplda, "Next due date
paket LIKE plwp-paket, "Package
END OF ty_output.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_vimpla TYPE STANDARD TABLE OF ty_vimpla,
it_mhis TYPE STANDARD TABLE OF ty_mhis,
it_mhis1 TYPE STANDARD TABLE OF ty_mhis1,
it_mhis2 TYPE STANDARD TABLE OF ty_mhis,
it_plwp TYPE STANDARD TABLE OF ty_plwp,
it_plmz TYPE STANDARD TABLE OF ty_plmz,
it_makt TYPE STANDARD TABLE OF makt,
it_t006a TYPE STANDARD TABLE OF ty_t006a,
it_jest TYPE STANDARD TABLE OF jest,
it_output TYPE STANDARD TABLE OF ty_output,
it_fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: wa_vimpla TYPE ty_vimpla,
wa_mhis TYPE ty_mhis,
wa_mhis1 TYPE ty_mhis1,
wa_mhis2 TYPE ty_mhis,
wa_plwp TYPE ty_plwp,
wa_plmz TYPE ty_plmz,
wa_makt TYPE makt,
wa_t006a TYPE ty_t006a,
wa_jest TYPE jest,
wa_output TYPE ty_output.
************************************************************************
* Data Declaration *
************************************************************************
DATA: ls_layout TYPE slis_layout_alv.
************************************************************************
* Constants Declaration *
************************************************************************
CONSTANTS: c_a TYPE c VALUE 'A'.
************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_warpl FOR mpla-warpl,
s_strat FOR mpla-strat,
s_mptyp FOR mpla-mptyp,
s_psort FOR mpla-plan_sort,
s_wpgrp FOR mpos-wpgrp,
s_iwerk FOR mpos-iwerk OBLIGATORY,
s_period FOR sy-datum OBLIGATORY NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON BLOCK b1.
PERFORM screen_field_check.
************************************************************************
* Initialization *
************************************************************************
INITIALIZATION.

************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
PERFORM get_data.
PERFORM build_output.
PERFORM build_fieldcatalog.


************************************************************************
* End of Selection *
************************************************************************
END-OF-SELECTION.
IF it_output IS NOT INITIAL.
PERFORM display_output.
ELSE.
MESSAGE 'No data found' TYPE 'I'.
ENDIF.

*&---------------------------------------------------------------------*
*& Form SCREEN_FIELD_CHECK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM screen_field_check .
DATA: l_warpl TYPE warpl,
l_wpgrp TYPE wpgrp,
l_psort TYPE plan_sort,
l_mptyp TYPE mptyp,
l_strat TYPE strat,
l_iwerk TYPE iwerk.
TYPES: BEGIN OF ty_iwerk,
iwerk TYPE iwerk,
END OF ty_iwerk.
DATA: it_iwerk TYPE STANDARD TABLE OF ty_iwerk,
wa_iwerk TYPE ty_iwerk.

LOOP AT s_warpl.
SELECT SINGLE warpl INTO l_warpl
FROM mpos
WHERE warpl = s_warpl-low
AND wpgrp IN s_wpgrp.
IF sy-subrc <> 0.
MESSAGE e004(zpm_clpi) WITH s_warpl-low.
ENDIF.
ENDLOOP.
IF s_warpl-high IS NOT INITIAL.
LOOP AT s_warpl.
SELECT SINGLE warpl INTO l_warpl
FROM mpos
WHERE warpl = s_warpl-high
AND wpgrp IN s_wpgrp.
IF sy-subrc <> 0.
MESSAGE e004(zpm_clpi) WITH s_warpl-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Planner Group
LOOP AT s_wpgrp.
SELECT SINGLE ingrp INTO l_wpgrp
FROM t024i
WHERE ingrp = s_wpgrp-low
AND iwerk IN s_iwerk.
IF sy-subrc <> 0.
MESSAGE e005(zpm_clpi) WITH s_wpgrp-low.
ENDIF.
ENDLOOP.
IF s_wpgrp-high IS NOT INITIAL.
LOOP AT s_wpgrp.
SELECT SINGLE ingrp INTO l_wpgrp
FROM t024i
WHERE ingrp = s_wpgrp-high
AND iwerk IN s_iwerk.
IF sy-subrc <> 0.
MESSAGE e005(zpm_clpi) WITH s_wpgrp-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Maintenance Plan Sort
TYPES: BEGIN OF ty_psort,
plan_sort LIKE t399g-plan_sort,
END OF ty_psort.
DATA: it_psort TYPE STANDARD TABLE OF ty_psort,
wa_psort TYPE ty_psort.

IF s_psort CA '*'.
SELECT plan_sort INTO TABLE it_psort
FROM t399g
WHERE plan_sort IN s_psort.
IF sy-subrc EQ 0.
REFRESH s_psort.
LOOP AT it_psort INTO wa_psort.
s_psort-sign = 'I'.
s_psort-option = 'CP'.
s_psort-low = wa_psort-plan_sort.
APPEND s_psort.
CLEAR wa_psort.
ENDLOOP.
ELSE .
MESSAGE e006(zpm_clpi) WITH s_psort-low.
ENDIF.
ELSE.
LOOP AT s_psort.
SELECT SINGLE plan_sort INTO l_psort
FROM t399g
WHERE plan_sort = s_psort-low.
IF sy-subrc <> 0.
MESSAGE e006(zpm_clpi) WITH s_psort-low.
ENDIF.
ENDLOOP.
IF s_psort-high IS NOT INITIAL.
LOOP AT s_psort.
SELECT SINGLE plan_sort INTO l_psort
FROM t399g
WHERE plan_sort = s_psort-high.
IF sy-subrc <> 0.
MESSAGE e006(zpm_clpi) WITH s_psort-high.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
*Validate Maintenance Plan Category field
TYPES: BEGIN OF ty_mptyp,
mptyp LIKE t399w-mptyp,
END OF ty_mptyp.
DATA: it_mptyp TYPE STANDARD TABLE OF ty_mptyp,
wa_mptyp TYPE ty_mptyp.
IF s_mptyp CA '*'.
SELECT mptyp INTO TABLE it_mptyp
FROM t399w
WHERE mptyp IN s_mptyp.
IF sy-subrc EQ 0.
REFRESH s_mptyp.
LOOP AT it_mptyp INTO wa_mptyp.
s_mptyp-sign = 'I'.
s_mptyp-option = 'CP'.
s_mptyp-low = wa_mptyp-mptyp.
APPEND s_mptyp.
CLEAR wa_mptyp.
ENDLOOP.
ELSE.
MESSAGE e007(zpm_clpi) WITH s_mptyp-low.
ENDIF.
ENDIF.

LOOP AT s_mptyp.
SELECT SINGLE mptyp INTO l_mptyp
FROM t399w
WHERE mptyp = s_mptyp-low.
IF sy-subrc <> 0.
MESSAGE e007(zpm_clpi) WITH s_mptyp-low.
ENDIF.
ENDLOOP.
IF s_mptyp-high IS NOT INITIAL.
LOOP AT s_mptyp.
SELECT SINGLE mptyp INTO l_mptyp
FROM t399w
WHERE mptyp = s_mptyp-high.
IF sy-subrc <> 0.
MESSAGE e007(zpm_clpi) WITH s_mptyp-high.
ENDIF.
ENDLOOP.
ENDIF.

*Validate Maintenance Plan Strategy field
LOOP AT s_strat.
SELECT SINGLE strat INTO l_strat
FROM t351
WHERE strat = s_strat-low.
IF sy-subrc <> 0.
MESSAGE e008(zpm_clpi) WITH s_strat-low.
ENDIF.
ENDLOOP.
IF s_strat-high IS NOT INITIAL.
LOOP AT s_strat.
SELECT SINGLE strat INTO l_strat
FROM t351
WHERE strat = s_strat-high.
IF sy-subrc <> 0.
MESSAGE e008(zpm_clpi) WITH s_strat-high.
ENDIF.
ENDLOOP.
ENDIF.
* Validate Plant

IF s_iwerk-low IS NOT INITIAL AND
s_iwerk-high IS NOT INITIAL.
SELECT iwerk FROM t399i INTO TABLE it_iwerk
WHERE iwerk IN s_iwerk.
IF sy-subrc EQ 0.
LOOP AT it_iwerk INTO wa_iwerk.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD wa_iwerk-iwerk.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH wa_iwerk-iwerk.
ENDIF.
ENDLOOP.
ENDIF.
ELSEIF s_iwerk-low IS NOT INITIAL.
LOOP AT s_iwerk.
SELECT SINGLE iwerk INTO l_iwerk
FROM t399i
WHERE iwerk = s_iwerk-low.
IF sy-subrc <> 0.
MESSAGE e009(zpm_clpi) WITH s_iwerk-low.
ELSE.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD s_iwerk-low.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH s_iwerk-low.
ENDIF.
ENDIF.
CLEAR l_iwerk.
ENDLOOP.
IF s_iwerk-high IS NOT INITIAL.
LOOP AT s_iwerk.
SELECT SINGLE iwerk INTO l_iwerk
FROM t399i
WHERE iwerk = s_iwerk-high.
IF sy-subrc <> 0.
MESSAGE e009(zpm_clpi) WITH s_iwerk-high.
ELSE.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' FIELD 'ZPMCI10'
ID 'IWERK' FIELD s_iwerk-high.
IF sy-subrc <> 0.
MESSAGE e011(zpm_clpi) WITH s_iwerk-high.
ENDIF.
ENDIF.
CLEAR l_iwerk.
ENDLOOP.
ENDIF.
ENDIF.


*Check Period as it should be in future
IF s_period-low < sy-datum.
MESSAGE e010(zpm_clpi) WITH s_period-low.
ENDIF.
ENDFORM. " SCREEN_FIELD_CHECK
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data .
DATA: l_warpl TYPE warpl,
l_zaehl TYPE paketzaehl,
l_count_zaehl TYPE i.
*Get Maintenance plan data from View VIMPLA
SELECT warpl
strat
equnr
tplnr
abnum
objnr
mptyp
plan_sort
wapos
plnty
plnnr
plnal
wpgrp
iwerk
inact
std_avo
mityp
apfkt
INTO TABLE it_vimpla
FROM vimpla
WHERE warpl IN s_warpl
AND strat IN s_strat
AND mptyp IN s_mptyp
AND plan_sort IN s_psort
AND wpgrp IN s_wpgrp
AND iwerk IN s_iwerk
AND plnty EQ 'A'
AND inact EQ space.

IF sy-subrc EQ 0.
SORT it_vimpla BY warpl wapos .
SELECT * FROM jest INTO TABLE it_jest
FOR ALL ENTRIES IN it_vimpla
WHERE objnr = it_vimpla-objnr.
*For Checking packages SELECT data from MHIS table
SELECT warpl
abnum
zaehl
nplda
tsenm
tstat
FROM mhis AS h
INTO TABLE it_mhis
FOR ALL ENTRIES IN it_vimpla
WHERE warpl = it_vimpla-warpl
AND nplda IN s_period
* AND TSABR = 'X'
* AND tsenq = 'X'
* AND tsvbt = 'X'
AND tsenm = space
AND tstat <> 'X'.
SORT it_mhis BY warpl zaehl.
*Applying loop on MHIS data to count the package and repition of the package.
LOOP AT it_mhis INTO wa_mhis.
IF l_warpl IS INITIAL.
l_warpl = wa_mhis-warpl.
ENDIF.
IF wa_mhis-warpl = l_warpl.
IF l_zaehl IS INITIAL.
l_zaehl = wa_mhis-zaehl.
ENDIF.
IF wa_mhis-zaehl = l_zaehl.
l_count_zaehl = l_count_zaehl + 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ELSE.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
CLEAR wa_mhis1.
l_zaehl = wa_mhis-zaehl.
l_count_zaehl = 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ENDIF.
ELSE.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
CLEAR wa_mhis1.
CLEAR: l_warpl,l_zaehl.
l_warpl = wa_mhis-warpl.
l_zaehl = wa_mhis-zaehl.
l_count_zaehl = 1.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
ENDIF.
ENDLOOP.
IF wa_mhis-warpl IS NOT INITIAL.
wa_mhis1-warpl = wa_mhis-warpl.
wa_mhis1-zaehl = wa_mhis-zaehl.
wa_mhis1-count = l_count_zaehl.
APPEND wa_mhis1 TO it_mhis1.
ENDIF.

CLEAR: l_warpl,l_zaehl,l_count_zaehl.

*Get the No of operations from table PLMZ
SELECT p~plnty
p~plnnr
p~zuonr
p~zaehl
p~loekz
p~plnal
p~plnkn
p~stlty
p~stlnr
p~stlal
p~stlkn
p~imeng
p~imein
s~stpoz
s~idnrk
INTO TABLE it_plmz
FROM plmz AS p
INNER JOIN stpo AS s ON p~stlty = s~stlty
AND p~stlnr = s~stlnr
AND p~stlkn = s~stlkn
FOR ALL ENTRIES IN it_vimpla
WHERE p~plnty = it_vimpla-plnty
AND p~plnnr = it_vimpla-plnnr
AND p~loekz = space
AND p~plnal = it_vimpla-plnal.

*Get the Package number & Operation number against Task list
SELECT p~plnty
p~plnnr
p~plnal
p~plnfl
p~plnkn
p~paket
p~zaehl
p~strat
o~vornr
o~arbid
o~aufkt
INTO TABLE it_plwp
FROM plwp AS p
INNER JOIN plpo AS o ON p~plnty = o~plnty
AND p~plnnr = o~plnnr
AND p~plnkn = o~plnkn
FOR ALL ENTRIES IN it_vimpla
WHERE p~plnty = it_vimpla-plnty
AND p~plnnr = it_vimpla-plnnr
AND p~plnal = it_vimpla-plnal
AND p~strat = it_vimpla-strat
AND p~loekz <> 'X'. "10-01-2011
*Get Material Description
SELECT * FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_plmz
WHERE matnr = it_plmz-idnrk
AND spras = sy-langu.

SORT it_makt BY matnr.
*Get Quantity description
SELECT spras
msehi
msehl
INTO TABLE it_t006a
FROM t006a
FOR ALL ENTRIES IN it_plmz
WHERE spras = sy-langu
AND msehi = it_plmz-imein.
*Get Maintenance Plan History data for 'Next Due Date' and 'Package'
*irrespective of period on selection screen
SELECT warpl
abnum
zaehl
nplda
tsenm
tstat
FROM mhis AS h
INTO TABLE it_mhis2
FOR ALL ENTRIES IN it_vimpla
WHERE warpl = it_vimpla-warpl
AND tsenq = 'X'
AND tsvbt = 'X'.
*Sort this by planned date.
SORT it_mhis2 BY warpl nplda.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_output .
IF it_vimpla IS NOT INITIAL.
LOOP AT it_vimpla INTO wa_vimpla.
*Check Inactive/Delete Flag
READ TABLE it_jest INTO wa_jest
WITH KEY objnr = wa_vimpla-objnr
stat = 'I0320'
inact = space.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.

READ TABLE it_jest INTO wa_jest
WITH KEY objnr = wa_vimpla-objnr
stat = 'I0076'
inact = space.
IF sy-subrc EQ 0.
CONTINUE.
ENDIF.

wa_output-warpl = wa_vimpla-warpl.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-warpl
IMPORTING
output = wa_output-warpl.
*When Task List is not available
IF wa_vimpla-plnnr IS INITIAL.
CONTINUE.
ELSE.
wa_output-plnnr = wa_vimpla-plnnr.
ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-plnnr
IMPORTING
output = wa_output-plnnr.
wa_output-plnal = wa_vimpla-plnal.

wa_output-wapos = wa_vimpla-wapos.
wa_output-wpgrp = wa_vimpla-wpgrp.
wa_output-mityp = wa_vimpla-mityp.

wa_output-equnr = wa_vimpla-equnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_output-equnr
IMPORTING
output = wa_output-equnr.

wa_output-tplnr = wa_vimpla-tplnr.

CALL FUNCTION 'CONVERSION_EXIT_TPLNR_OUTPUT'
EXPORTING
input = wa_output-tplnr
IMPORTING
output = wa_output-tplnr.

LOOP AT it_plwp INTO wa_plwp
WHERE plnty = wa_vimpla-plnty
AND plnnr = wa_vimpla-plnnr
AND plnal = wa_vimpla-plnal.

LOOP AT it_plmz INTO wa_plmz
WHERE plnty = wa_plwp-plnty
AND plnnr = wa_plwp-plnnr
AND plnal = wa_plwp-plnal
AND plnkn = wa_plwp-plnkn.
*Read frequecy(count) for the Package against the frequency
READ TABLE it_mhis1 INTO wa_mhis1
WITH KEY warpl = wa_vimpla-warpl
zaehl = wa_plwp-paket.
IF sy-subrc EQ 0.
wa_output-imeng = wa_output-imeng + ( wa_plmz-imeng * wa_mhis1-count ).
ELSE.
* wa_output-imeng = wa_output-imeng + wa_plmz-imeng.
CONTINUE.
ENDIF.
*Multiply Output Quantity with Operation Execution factor (PLPO-AUFKT)
IF wa_plwp-aufkt IS NOT INITIAL.
wa_output-imeng = wa_output-imeng * wa_plwp-aufkt.
ENDIF.
*Multiplt Output Quantity to Execution factor of whole Task List (MPOS-APFKT)
IF wa_vimpla-apfkt IS NOT INITIAL.
wa_output-imeng = wa_output-imeng * wa_vimpla-apfkt.
ENDIF.

*Material Number
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = wa_plmz-idnrk
IMPORTING
output = wa_output-matnr.
*Material Description
READ TABLE it_makt INTO wa_makt
WITH KEY matnr = wa_plmz-idnrk.
IF sy-subrc EQ 0.
wa_output-maktx = wa_makt-maktx.
ENDIF.
*Unit of measure
READ TABLE it_t006a INTO wa_t006a
WITH KEY spras = sy-langu
msehi = wa_plmz-imein.
IF sy-subrc EQ 0.
wa_output-imein = wa_t006a-msehl.
ELSE.
wa_output-imein = wa_plmz-imein.
ENDIF.
*Next Due Date
READ TABLE it_mhis2 INTO wa_mhis2
WITH KEY warpl = wa_vimpla-warpl.
wa_output-nplda = wa_mhis2-nplda.
*Package
wa_output-paket = wa_mhis2-zaehl.
*When No Material in Task List
IF wa_output-matnr IS INITIAL.
CLEAR: wa_output-matnr,wa_output-imeng,wa_plmz,wa_mhis1,
wa_mhis2.
CONTINUE.
ENDIF.

COLLECT wa_output INTO it_output.
CLEAR: wa_output-matnr,wa_output-imeng,wa_plmz,wa_mhis1,
wa_mhis2.
ENDLOOP.
CLEAR wa_plwp.
ENDLOOP.
IF sy-subrc <> 0.
*When No Task list/No Material in Task List
IF wa_output-matnr IS INITIAL.
CLEAR: wa_output,wa_plmz,wa_plwp,wa_mhis1,
wa_mhis2.
CONTINUE.
ENDIF.

COLLECT wa_output INTO it_output.
ENDIF.
CLEAR: wa_vimpla,wa_output.
ENDLOOP.
SORT it_output BY warpl wapos wpgrp plnnr plnal equnr matnr.
ENDIF.
ENDFORM. " BUILD_OUTPUT
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcatalog .
it_fieldcatalog-fieldname = 'WARPL'.
it_fieldcatalog-seltext_l = 'Maintenance Plan'.
it_fieldcatalog-col_pos = 1.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'WAPOS'.
it_fieldcatalog-seltext_l = 'Maintenance item'.
it_fieldcatalog-col_pos = 2.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'WPGRP'.
it_fieldcatalog-seltext_l = 'Planner Group'.
it_fieldcatalog-col_pos = 3.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PLNNR'.
it_fieldcatalog-seltext_l = 'Task List Group'.
it_fieldcatalog-col_pos = 4.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PLNAL'.
it_fieldcatalog-seltext_l = 'Group Counter'.
it_fieldcatalog-col_pos = 5.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'EQUNR'.
it_fieldcatalog-seltext_l = 'Equipment'.
it_fieldcatalog-col_pos = 6.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'TPLNR'.
it_fieldcatalog-seltext_l = 'Functional Location'.
it_fieldcatalog-col_pos = 7.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MATNR'.
it_fieldcatalog-seltext_l = 'Material No.'.
it_fieldcatalog-col_pos = 8.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MAKTX'.
it_fieldcatalog-seltext_l = 'Material Description'.
it_fieldcatalog-col_pos = 9.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'MITYP'.
it_fieldcatalog-seltext_l = 'Maintenance item category'.
it_fieldcatalog-col_pos = 10.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'IMENG'.
it_fieldcatalog-seltext_l = 'Quantity'.
it_fieldcatalog-col_pos = 11.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'IMEIN'.
it_fieldcatalog-seltext_l = 'Unit of Measure'.
it_fieldcatalog-col_pos = 12.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'NPLDA'.
it_fieldcatalog-seltext_l = 'Next Due Date'.
it_fieldcatalog-col_pos = 13.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.

it_fieldcatalog-fieldname = 'PAKET'.
it_fieldcatalog-seltext_l = 'Package'.
it_fieldcatalog-col_pos = 14.
APPEND it_fieldcatalog TO it_fieldcatalog.
CLEAR it_fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_output .
ls_layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP_OF_PAGE'
it_fieldcat = it_fieldcatalog[]
TABLES
t_outtab = it_output
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DISPLAY_OUTPUT
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
*ALV Header declarations
DATA: t_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader,
l_info TYPE slis_listheader-info,
l_from(10) TYPE c,
l_to(10) TYPE c.

wa_header-typ = 'H'.
wa_header-info = 'Material Requirement Planning for PM between Two Dates'.
APPEND wa_header TO t_header.
CLEAR wa_header.

CONCATENATE s_period-low+6(2) '-' s_period-low+4(2) '-' s_period-low+0(4)
INTO l_from.
CONCATENATE s_period-high+6(2) '-' s_period-high+4(2) '-' s_period-high+0(4)
INTO l_to.

CONCATENATE 'Period From:' l_from ' ' 'To:' l_to
INTO l_info SEPARATED BY space.
wa_header-typ = 'S'.
wa_header-info = l_info.
APPEND wa_header TO t_header.
CLEAR wa_header.


CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_header.
ENDFORM. "top_of_page

Upload program to create Measuring Document

This is an upload program to create Measuring document in SAP PM module. This program uploads the data file in excel format from the presentation server.
Call transaction method is used create Measuring document.
Error log file is downloaded at the file location.
Entire program is given as below.


REPORT zpmcipr0003
NO STANDARD PAGE HEADING LINE-SIZE 1023.
TYPE-POOLS: truxs.
TABLES: t100.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_data,
point LIKE imrg-point, "Measuring Point
date_time(17) TYPE c, "Date and Time
readc LIKE rimr0-readc, "Measurement Reading
vlcod LIKE imrg-vlcod, "Valuation Code
mdtxt LIKE imrg-mdtxt, "Measurement Document Text
uname LIKE sy-uname,
prest LIKE imrg-prest,
TIDNR LIKE EQUZ-TIDNR, "Tech Identification numebr
PTTXT LIKE IMPTT-PTTXT, "Mea Point Description
END OF ty_data.

TYPES: BEGIN OF ty_log,
text TYPE char255,
END OF ty_log.

TYPES: BEGIN OF ty_imptt,
point LIKE imptt-point,
indct LIKE imptt-indct,
mptyp LIKE imptt-mptyp,
END OF ty_imptt.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_data TYPE STANDARD TABLE OF ty_data,
bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE,
it_raw TYPE truxs_t_text_data,
wa_data TYPE ty_data,
l_ascii_list(200) TYPE c OCCURS 0 WITH HEADER LINE,
l_abap_list TYPE abaplist OCCURS 0 WITH HEADER LINE,
it_log TYPE STANDARD TABLE OF ty_log,
wa_log TYPE ty_log,
wa_t100 TYPE t100,
it_imptt TYPE STANDARD TABLE OF ty_imptt,
wa_imptt TYPE ty_imptt.

DATA: BEGIN OF t_error OCCURS 100,
row(10), "row number
point(13), "Measuring point
date_time(17), "Measuring date and time
text(80),
END OF t_error.
************************************************************************
* Data Declaration *
************************************************************************
DATA: ctumode LIKE ctu_params-dismode,
g_count_confirmed TYPE i,
g_count_in_error TYPE i,
error_text(200) TYPE c,
l_line TYPE i,
g_flag TYPE c,
l_equnr TYPE equi-equnr,
l_objnr TYPE equi-objnr,
l_point TYPE imptt-point.
************************************************************************
* Constants Declaration *
************************************************************************
CONSTANTS: c_bdcname LIKE apqi-groupid VALUE 'IK11_UPLOAD',
c_tcode LIKE tstc-tcode VALUE 'IK11'.

************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.

************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
*Read the data from the file to internl table.
PERFORM read_data.
*Create Measuring Doc
PERFORM create_measuring_doc.
*Download Error log file
PERFORM download_error_log.
*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_data[]
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RAISE upload_problem.
ENDIF.
ENDFORM. " READ_DATA
*&---------------------------------------------------------------------*
*& Form CREATE_MEASURING_DOC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_measuring_doc .

DATA: l_indct LIKE imptt-indct,
l_mode TYPE c VALUE 'N',
l_smode TYPE c VALUE 'S',
l_mptyp TYPE imptt-mptyp,
l_index TYPE sy-tabix.

LOOP AT it_data INTO wa_data.
l_index = sy-tabix.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = wa_data-point
IMPORTING
output = wa_data-point.
IF wa_data-point = ''.

select SINGLE a~EQUNR b~OBJNR
INTO (l_equnr, l_objnr )
FROM EQUZ AS a
INNER JOIN EQUI AS b ON a~EQUNR = b~EQUNR
WHERE a~TIDNR = wa_data-TIDNR
AND a~DATBI = '99991231'
AND ( b~EQTYP = '5' or b~EQTYP = '6' or b~EQTYP = '7') .

* SELECT SINGLE OBJNR into l_objnr FROM EQUI WHERE EQUNR = l_equnr.
SELECT SINGLE POINT
INTO l_point
FROM IMPTT
WHERE MPOBJ = l_objnr
AND PTTXT = wa_data-pttxt
* AND ( mptyp = '1' OR
* mptyp = '2' OR
* mptyp = '3' )
.
wa_data-point = l_point.
ENDIF.
MODIFY it_data FROM wa_data INDEX l_index.
CLEAR: l_index,wa_data.
ENDLOOP.
*Get data from table imptt
SELECT point indct mptyp FROM imptt
INTO TABLE it_imptt
FOR ALL ENTRIES IN it_data
WHERE point = it_data-point
AND ( mptyp = '1' OR
mptyp = '2' OR
mptyp = '3' ).

LOOP AT it_data INTO wa_data.
l_index = sy-tabix.
CLEAR wa_imptt.
READ TABLE it_imptt INTO wa_imptt
WITH KEY point = wa_data-point.
IF sy-subrc NE 0.
*Write Heading
IF g_flag IS INITIAL.
WRITE:
/(10) 'Row',
(16) 'Measuring Point',
(26) 'Measuring Date & Time',
(80) 'Error Text'.
* (20) 'Equipment Number',
* (30) 'Tech. Identification ID',
* (40) 'Measurement Point Desc'.
SKIP.
*Write heading in log file.
t_error-row = 'Row number'.
t_error-point = 'Measuring Pnt'.
t_error-date_time = 'Measrng Date_Time'.
t_error-text = 'Error Text'.
APPEND t_error.
CLEAR t_error.
APPEND t_error.
g_flag = 'X'.
ENDIF.
ADD 1 TO g_count_in_error.
error_text = 'Measuring Point catagory is not 1,2 or 3'.
CONDENSE error_text.
WRITE:
/(10) l_index LEFT-JUSTIFIED,
(16) wa_data-point,
(26) wa_data-date_time,
(80) error_text,
(20) l_equnr,
(30) wa_data-TIDNR,
(40) wa_data-PTTXT.
SKIP.
MOVE-CORRESPONDING wa_data TO t_error.
MOVE error_text TO t_error-text.
MOVE l_index TO t_error-row.
APPEND t_error.
CLEAR t_error.
* APPEND t_error.
CONTINUE.
ENDIF.

PERFORM bdc_dynpro USING 'SAPLIMR0' '1210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'IMRG-POINT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'IMRG-POINT'
wa_data-point. "'141164'.
PERFORM bdc_field USING 'RIMR0-DFTIM'
wa_data-date_time+9(8)."'19:47:35'.
PERFORM bdc_field USING 'RIMR0-DFDAT'
wa_data-date_time+0(8). "'22.09.2010'.
PERFORM bdc_field USING 'RIMR0-DFRDR'
sy-uname. "'ASC6898'.
PERFORM bdc_dynpro USING 'SAPLIMR0' '5210'.
PERFORM bdc_field USING 'BDC_CURSOR'
'IMRG-MDTXT'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'IMRG-ITIME'
wa_data-date_time+9(8)."'19:47:35'.
PERFORM bdc_field USING 'IMRG-IDATE'
wa_data-date_time+0(8). "'22.09.2010'.

l_indct = wa_imptt-indct.

IF l_indct IS INITIAL.
PERFORM bdc_field USING 'RIMR0-READC'
wa_data-readc. "'20'.
ELSE.
PERFORM bdc_field USING 'RIMR0-CNTRC'
wa_data-readc. "'40'.
* perform bdc_field using 'RIMR0-CDIFC'
* '+______________.__'.
ENDIF.
PERFORM bdc_field USING 'IMRG-VLCOD'
wa_data-vlcod. "'V001'.
PERFORM bdc_field USING 'IMRG-MDTXT'
wa_data-mdtxt. "'Test text'.
PERFORM bdc_field USING 'IMRG-READR'
wa_data-uname. "'ASC6898'.
PERFORM bdc_field USING 'IMRG-READR'
wa_data-uname. "'ASC6898'.
PERFORM bdc_field USING 'IMRG-PREST'
wa_data-prest.
CALL TRANSACTION 'IK11' USING bdcdata
MODE l_mode
UPDATE l_smode.
IF sy-subrc EQ 0.
ADD 1 TO g_count_confirmed.
ELSE.
*Write Heading
IF g_flag IS INITIAL.
WRITE:
/(16) 'Measuring Point',
(26) 'Measuring Date & Time',
(80) 'Error Text'.
SKIP.
*Write heading in log file
t_error-point = 'Measuring Pnt'.
t_error-date_time = 'Measrng Date_Time'.
t_error-text = 'Error Text'.
APPEND t_error.
CLEAR t_error.
APPEND t_error.
g_flag = 'X'.
ENDIF.

ADD 1 TO g_count_in_error.
SELECT SINGLE * FROM t100 INTO wa_t100
WHERE sprsl = sy-langu
AND arbgb = sy-msgid
AND msgnr = sy-msgno.
MOVE wa_t100-text TO error_text.
IF error_text CS '&1'.
REPLACE '&1' WITH sy-msgv1 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv1 INTO error_text.
ENDIF.
IF error_text CS '&2'.
REPLACE '&2' WITH sy-msgv2 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv2 INTO error_text.
ENDIF.
IF error_text CS '&3'.
REPLACE '&3' WITH sy-msgv3 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv3 INTO error_text.
ENDIF.
IF error_text CS '&4'.
REPLACE '&4' WITH sy-msgv4 INTO error_text.
ELSE.
REPLACE '&' WITH sy-msgv4 INTO error_text.
ENDIF.
CONDENSE error_text.

WRITE:
/(10) sy-tabix,
(16) wa_data-point,
(26) wa_data-date_time,
(25) wa_data-TIDNR,
(40) wa_data-PTTXT,
(80) error_text.
SKIP.
MOVE-CORRESPONDING wa_data TO t_error.
MOVE error_text TO t_error-text.
APPEND t_error.
CLEAR t_error.
APPEND t_error.
ENDIF.
REFRESH: bdcdata.
CLEAR : wa_data,l_indct.
ENDLOOP.
ENDFORM. " CREATE_MEASURING_DOC
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro

*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
IF fnam CS 'MENGE'.
bdcdata-fval = fval.
CONDENSE bdcdata-fval.
ELSE.
bdcdata-fval = fval.
ENDIF.
APPEND bdcdata.
ENDFORM. "bdc_field
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_ERROR_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM download_error_log .
DATA: l_dsn LIKE rlgrap-filename,
l_filelen TYPE i,
gui_filename TYPE string,
l_path TYPE string.
* Prepare the error log file location and file name
l_filelen = STRLEN( p_file ).
l_filelen = l_filelen - 3.
CONCATENATE p_file(l_filelen) 'ERR.txt' INTO l_dsn.

DESCRIBE TABLE t_error LINES l_line.
IF l_line = 0.
t_error-text = 'Error not found. Upload process completed!'.
APPEND t_error.
ENDIF.

gui_filename = l_dsn.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
* BIN_FILESIZE =
filename = gui_filename
filetype = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
* HEADER = '00'
* TRUNC_TRAILING_BLANKS = ' '
* WRITE_LF = 'X'
* COL_SELECT = ' '
* COL_SELECT_MASK = ' '
* DAT_MODE = ' '
* CONFIRM_OVERWRITE = ' '
* NO_AUTH_CHECK = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* WRITE_BOM = ' '
* TRUNC_TRAILING_BLANKS_EOL = 'X'
* WK1_N_FORMAT = ' '
* WK1_N_SIZE = ' '
* WK1_T_FORMAT = ' '
* WK1_T_SIZE = ' '
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = ABAP_TRUE
* IMPORTING
* FILELENGTH =
TABLES
data_tab = t_error
* FIELDNAMES =
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
SKIP.

IF l_line = 0.
WRITE:/ 'Error not found. Upload process completed!'.
ELSE.
CONCATENATE 'Error file downloaded at' l_dsn INTO l_path
SEPARATED BY space.
WRITE:/ l_path.
ENDIF.
ENDIF.

ENDFORM. " DOWNLOAD_ERROR_LOG

Upload program to create Class

This is an upload program to create Class in SAP PM module. This program uploads the data file in excel format from the presentation server. BDC session is created for uploading the data. Session log can be checked using tcode SM35. Entire program is given as below. Selection Screen *Output Entire Program logic is given as below.

REPORT zpmcipr0002
NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPE-POOLS: truxs.
************************************************************************
* Struture Declaration *
************************************************************************
TYPES: BEGIN OF ty_data,
idef(1) TYPE c, "Indentifier
class TYPE rmclm-class, "Class
klart TYPE rmclm-klart, "Class Type
klbez TYPE rmclm-klbez, "Description
statu TYPE rmclm-statu, "Status
vondt TYPE rmclm-vondt, "Valid from
merkma TYPE rmclm-merkma, "Characteristics
END OF ty_data.
************************************************************************
* Intrnal Table Declaration *
************************************************************************
DATA: it_data TYPE STANDARD TABLE OF ty_data,
it_datah TYPE STANDARD TABLE OF ty_data,
bdcdata TYPE STANDARD TABLE OF bdcdata WITH HEADER LINE,
it_raw TYPE truxs_t_text_data,
ctumode LIKE ctu_params-dismode,
wa_data TYPE ty_data,
wa_datah TYPE ty_data,
l_ascii_list(200) TYPE c OCCURS 0 WITH HEADER LINE,
l_abap_list TYPE abaplist OCCURS 0 WITH HEADER LINE.
************************************************************************
* Constants Declaration *
************************************************************************
CONSTANTS: c_bdcname LIKE apqi-groupid VALUE 'CL01_UPLOAD',
c_tcode LIKE tstc-tcode VALUE 'CL01'.
************************************************************************
* Selection Screen *
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename OBLIGATORY .
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* At Selection Screen *
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.
************************************************************************
* Start of Selection *
************************************************************************
START-OF-SELECTION.
*Read the data from the file to internl table.
PERFORM read_data.
*Create Class
PERFORM create_class.
*&---------------------------------------------------------------------*
*& Form READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_data .
DATA: l_date(8) TYPE c,
l_tabix LIKE sy-tabix.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_data[]
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RAISE upload_problem.
ENDIF.
*Begin of insert 22.03.2011
*Convert date format from YYYYMMDD to MMDDYYYY
IF it_data IS NOT INITIAL.
LOOP AT it_data INTO wa_data.
l_tabix = sy-tabix.
l_date+0(2) = wa_data-vondt+6(2).
l_date+2(2) = wa_data-vondt+4(2).
l_date+4(4) = wa_data-vondt+0(4).
wa_data-vondt = l_date.
MODIFY it_data FROM wa_data INDEX l_tabix.
CLEAR: l_tabix,l_date,wa_data.
ENDLOOP.
ENDIF.
*End of insert 22.03.2011
ENDFORM. " READ_DATA
*&---------------------------------------------------------------------*
*& Form CREATE_CLASS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_class .
DATA : l_pos TYPE i,
l_posnr TYPE sposn,
l_postp(20) TYPE c,
l_idnrk(20) TYPE c,
l_menge(20) TYPE c,
l_field(20) TYPE c.
"added by sachin 11.02.2011
TYPES : BEGIN OF ls_data.
INCLUDE TYPE ty_data.
TYPES : idx TYPE i.
TYPES : END OF ls_data.
DATA : lt_data TYPE TABLE OF ls_data.
FIELD-SYMBOLS : ,,.
"end of addition.
**** SORT it_data BY class.
LOOP AT it_data INTO wa_data
WHERE idef = 'H'.
DELETE it_data INDEX sy-tabix.
APPEND wa_data TO it_datah.
CLEAR wa_data.
ENDLOOP.

**** SORT : it_datah BY class,
**** it_data BY class.
"added by sachin 11.02.2011
lt_data[] = it_data[].
LOOP AT lt_data ASSIGNING .
ASSIGN COMPONENT 'CLASS' OF STRUCTURE TO .
IF sy-subrc EQ 0.
AT NEW .
CLEAR l_pos.
ENDAT.
l_pos = l_pos + 1.
ASSIGN COMPONENT 'IDX' OF STRUCTURE TO .
IF sy-subrc EQ 0.
= l_pos.
ENDIF.
ENDIF.
ENDLOOP.

CLEAR it_data[].
SORT lt_data BY class idx DESCENDING.

LOOP AT lt_data ASSIGNING .
MOVE-CORRESPONDING TO wa_data.
APPEND wa_data TO it_data.
CLEAR wa_data.
ENDLOOP.
"end of addition.

*Create Session
PERFORM open_session USING c_bdcname.

*perform open_group.
LOOP AT it_datah INTO wa_datah.

PERFORM bdc_dynpro USING 'SAPLCLMO' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMCLM-KLART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'RMCLM-CLASS'
wa_datah-class. "'TST_CLPI_J004'.
PERFORM bdc_field USING 'RMCLM-KLART'
wa_datah-klart. "'002'.
PERFORM bdc_dynpro USING 'SAPLCLMO' '0100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.

PERFORM bdc_dynpro USING 'SAPLCLMO' '7777'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=MERK'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMCLM-BISDT'.
PERFORM bdc_field USING 'RMCLM-KLBEZ'
wa_datah-klbez. "'Test Class'.
PERFORM bdc_field USING 'RMCLM-STATU'
wa_datah-statu. "'1'.
*Begin of commenting
* PERFORM bdc_field USING 'RMCLM-KLAGR'
* 'CLP_CLASS'.
*End of commenting
PERFORM bdc_field USING 'RMCLM-VONDT'
wa_datah-vondt. "'15.09.2010'.
PERFORM bdc_field USING 'RMCLM-BISDT'
'31.12.9999'.
PERFORM bdc_field USING 'RMCLM-PRAUS'
'X'.
PERFORM bdc_dynpro USING 'SAPLCLMO' '7777'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RMCLM-MERKMA(03)'.
**** IF l_pos is INITIAL .
**** l_pos = 1.
**** ENDIF.

LOOP AT it_data INTO wa_data
WHERE class = wa_datah-class
AND idef = 'D'.
DELETE it_data INDEX sy-tabix.

"added by sachin 11.02.2011
PERFORM bdc_dynpro USING 'SAPLCLMO' '7777'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SMEI'.

PERFORM bdc_field USING 'RMCLM-MERKMA(01)'"l_field "'RMCLM-MERKMA(01)'
wa_data-merkma. "'J001CHR02'.
**** l_pos = l_pos + 1.


PERFORM bdc_field USING 'BDC_CURSOR'
'RMCLM-MERKMA(01)'."l_field.
"end of addition.
CLEAR wa_data.


ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLCLMO' '7777'.
PERFORM bdc_field USING 'BDC_OKCODE'
'SAVE'.
*perform bdc_transaction using 'CL01'.
* CALL TRANSACTION 'CL01' USING BDCDATA MODE 'A'.

PERFORM bdc_insert TABLES bdcdata
USING c_tcode.
REFRESH: bdcdata.
CLEAR : wa_datah,l_pos.

ENDLOOP.
* Close the session
PERFORM close_session.
* Process the session
PERFORM bdc_submit.
*perform close_group.
ENDFORM. " CREATE_CLASS

*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "bdc_dynpro

*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
IF fnam CS 'MENGE'.
bdcdata-fval = fval.
CONDENSE bdcdata-fval.
ELSE.
bdcdata-fval = fval.
ENDIF.
APPEND bdcdata.
ENDFORM. "bdc_field

*&---------------------------------------------------------------------*
*& Form open_session *
*&---------------------------------------------------------------------*
FORM open_session USING p_sess.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
group = p_sess
keep = 'X'
user = sy-uname
* importing
* qid =
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
ENDFORM. "open_session

*&---------------------------------------------------------------------*
*& Form bdc_insert *
*&---------------------------------------------------------------------*
FORM bdc_insert TABLES bdcdata
STRUCTURE bdcdata
USING v_tcode.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = v_tcode
TABLES
dynprotab = bdcdata
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.
ENDFORM. "bdc_insert

*&---------------------------------------------------------------------*
*& Form close_session
*&---------------------------------------------------------------------*
FORM close_session .
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
ENDFORM. " close_session

*&---------------------------------------------------------------------*
*& Form bdc_submit
*&---------------------------------------------------------------------*
* Process the sessions created
*----------------------------------------------------------------------*
FORM bdc_submit .
SUBMIT rsbdcsub AND RETURN EXPORTING LIST TO MEMORY
WITH mappe = c_bdcname
WITH z_verarb = 'X'
WITH fehler = ' '.

COMMIT WORK AND WAIT.

* Retrieve the output from memory and place into l_abap_list
CLEAR l_abap_list.
FREE l_abap_list.

CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = l_abap_list
EXCEPTIONS
not_found = 1
OTHERS = 2.
IF sy-subrc EQ 0.
CLEAR l_ascii_list.
FREE l_ascii_list.
CALL FUNCTION 'LIST_TO_ASCI'
EXPORTING
list_index = -1
TABLES
listasci = l_ascii_list
listobject = l_abap_list
EXCEPTIONS
empty_list = 1
list_l_indexex_invalid = 2
OTHERS = 3.
IF sy-subrc NE 0.
* MESSAGE W368 WITH TEXT-006.
ELSE.
LOOP AT l_ascii_list.
WRITE: / l_ascii_list.
ENDLOOP.
SKIP.
WRITE: / text-002 , '"',c_bdcname,'"', text-003.
ENDIF.
ENDIF.

ENDFORM. " bdc_submit

*&---------------------------------------------------------------------*
*& Form write.
*&---------------------------------------------------------------------*
FORM write.
LOOP AT l_ascii_list.
WRITE: / l_ascii_list.
ENDLOOP.
SKIP.
WRITE: / text-004 , '"',c_bdcname,'"', text-005.
ENDFORM. "WRITE