0% found this document useful (0 votes)
786 views20 pages

Long Text Upload For TCode AC01 - Service Master

This document describes steps to create a service master record in SAP from data in an Excel file. It involves: 1. Creating a custom FM to read data from the Excel file and store it in an internal table 2. Creating a custom program to validate the data, download the file if errors found, read long texts using the custom FM, and create the service master record using BAPI_SERVICE_CREATE.

Uploaded by

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

Long Text Upload For TCode AC01 - Service Master

This document describes steps to create a service master record in SAP from data in an Excel file. It involves: 1. Creating a custom FM to read data from the Excel file and store it in an internal table 2. Creating a custom program to validate the data, download the file if errors found, read long texts using the custom FM, and create the service master record using BAPI_SERVICE_CREATE.

Uploaded by

maulik parekh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 20

1. Introduction.

Long Text (4096 characters) Upload for TCode AC01 Service Master/ Activity Number

2. Steps.

I. Create a Custom FM to read Long Text from input.XLS file and stores in o/p table (line size as Character 50)

Custom FM: ZALSM_EXCEL_TO_IT


FUNCTION zalsm_excel_to_it .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(FILENAME) LIKE RLGRAP-FILENAME
*" VALUE(I_BEGIN_COL) TYPE I
*" VALUE(I_BEGIN_ROW) TYPE I
*" VALUE(I_END_COL) TYPE I
*" VALUE(I_END_ROW) TYPE I
*" TABLES
*" ET_EXCEL_TAB STRUCTURE ZST_CHAR50
*" EXCEPTIONS
*" INCONSISTENT_PARAMETERS
*" UPLOAD_OLE
*"----------------------------------------------------------------------
TYPES:
*& line type of sender table
BEGIN OF ty_s_senderline,
line(4096) TYPE c,
END OF ty_s_senderline.

DATA:
lt_excel_tab TYPE STANDARD TABLE OF ty_s_senderline ,
application TYPE ole2_object ,
workbook TYPE ole2_object ,
range TYPE ole2_object ,
worksheet TYPE ole2_object ,
h_cell TYPE ole2_object ,
h_cell1 TYPE ole2_object ,
ld_rc TYPE i , " Return value of the method "clipboard_e
xport"
wa_et_excel_tab TYPE zst_char50 ,
lv_offset TYPE int4 .

FIELD-SYMBOLS <fs_excel_tab> TYPE ty_s_senderline.

*& Macro for error handling of methods


DEFINE m_message.
case sy-subrc.
when 0.
when 1.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
when others.
raise upload_ole.
endcase.
END-OF-DEFINITION.

*& check parameters


IF i_begin_row > i_end_row.
RAISE inconsistent_parameters.
ENDIF.

IF i_begin_col > i_end_col.


RAISE inconsistent_parameters.
ENDIF.

*& Open file in Excel


IF application-header = space OR application-handle = -1.
CREATE OBJECT application 'Excel.Application'.
m_message.
ENDIF.

CALL METHOD OF
application
'Workbooks' = workbook.
m_message.

CALL METHOD OF
workbook
'Open'

EXPORTING
#1 = filename.
m_message.

*& set property of application 'Visible' = 1.


* m_message.
GET PROPERTY OF
application
'ACTIVESHEET' = worksheet.
m_message.

*& Mark whole Spread Sheet


CALL METHOD OF
worksheet
'Cells' = h_cell
EXPORTING
#1 = i_begin_row
#2 = i_begin_col.
m_message.

CALL METHOD OF
worksheet
'Cells' = h_cell1
EXPORTING
#1 = i_end_row
#2 = i_end_col.
m_message.

CALL METHOD OF
worksheet
'RANGE' = range
EXPORTING
#1 = h_cell
#2 = h_cell1.
m_message.

CALL METHOD OF
range
'SELECT'.
m_message.

*& Copy marked area (whole Spread Sheet) into Clippboard


CALL METHOD OF
range
'COPY'.
m_message.

*& Read clipboard into ABAP


CALL METHOD cl_gui_frontend_services=>clipboard_import
IMPORTING
data = lt_excel_tab " Data Table
* length = " Data length
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE a037(alsmex). " Error during import of clipboard contents
ENDIF.

*& Extract Data from Internal Table to FM o/p Table (50 characters per line in i
nternal table;
*& Entire 4096 characters of Long Text, occupies 82 Lines (81*50 + 1*46)
LOOP AT lt_excel_tab ASSIGNING <fs_excel_tab>.

DO 82 TIMES.
IF sy-index = 82 .
wa_et_excel_tab-line_50 = <fs_excel_tab>-line+lv_offset(46).
ELSE.
wa_et_excel_tab-line_50 = <fs_excel_tab>-line+lv_offset(50).
ENDIF.

APPEND wa_et_excel_tab TO et_excel_tab.


lv_offset = lv_offset + 50.
ENDDO.

CLEAR lv_offset.
ENDLOOP.

*& Clear clipboard


CLEAR lt_excel_tab[].
CALL METHOD cl_gui_frontend_services=>clipboard_export
* EXPORTING
* no_auth_check = SPACE " Switch off Check for Access Rights
IMPORTING
data = lt_excel_tab " Data
CHANGING
rc = ld_rc " Return code
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
no_authority = 4
OTHERS = 5
.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

*& Quit Excel and free ABAP Object - unfortunately, this does not kill the Excel
process
CALL METHOD OF
application
'QUIT'.
m_message.

*& To kill the Excel process it's necessary to free all used objects - Refer SAP
note 575877
FREE OBJECT h_cell.
m_message.

FREE OBJECT h_cell1.


m_message.

FREE OBJECT range.


m_message.

FREE OBJECT worksheet.


m_message.

FREE OBJECT workbook.


m_message.

FREE OBJECT application.


m_message.
ENDFUNCTION.
II. Create a Custom program to Create Service Master Record

*& 1. Read Excel File (FM: TEXT_CONVERT_XLS_TO_SAP)


*& 2. Validate Data read from File (other than Long Text)
*& 3. Download file if any Erroneous record found (FM: GUI_DOWNLOAD)
*& 4. Read Long Text for each record (FM: ZALSM_EXCEL_TO_IT)
*& 5. Creation of a Service Master Record (BAPI: BAPI_SERVICE_CREATE)

Custom Program: ZMMBAPI_AC01

REPORT ZMMBAPI_AC01 NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPES:
BEGIN OF ty_fin,
asnum TYPE asmd-asnum , " service number
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096),
END OF ty_fin,

BEGIN OF ty_service,
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096),
END OF ty_service,
BEGIN OF ty_service2,
sno TYPE i ,
asktx TYPE asmdt-asktx , " service short text
astyp TYPE asmd-astyp , " service category
meins TYPE asmd-meins , " base unit of measurement
matkl TYPE asmd-matkl , " material group
spart TYPE asmd-spart , " division
bklas TYPE asmd-bklas , " valuation class
taxtariffcode TYPE asmd-taxtariffcode , " Tax Tariff Code
lngtxt(4096) ,
END OF ty_service2 ,

BEGIN OF ty_err ,
sno(20) ,
text1(4096) ,
END OF ty_err .

DATA:
gr_salv TYPE REF TO cl_salv_table , " ALV Reference
gt_fin TYPE STANDARD TABLE OF ty_fin ,
lt_service TYPE STANDARD TABLE OF ty_service ,
lt_service2 TYPE STANDARD TABLE OF ty_service2 ,
wa_service2 TYPE ty_service2 ,
lt_err TYPE STANDARD TABLE OF ty_err ,
wa_err TYPE ty_err ,
wa_fin TYPE ty_fin ,

sno TYPE i ,
i_var TYPE i ,
wf_meins TYPE asmd-meins ,

mask(64) VALUE
'Tab Delimited Text Files(*.txt)|*.txt|,All Files(*.*)|*.*|',

it_raw TYPE truxs_t_text_data ,


wf_fname(150) TYPE c ,
ug_astyp(4) TYPE c ,
ug_meins(3) TYPE c ,
ug_matkl(9) TYPE c ,

wa_service_data TYPE bapisrv_asmd ,


wa_service_datax TYPE bapisrv_asmdx ,
wa_service TYPE bapisrv_asmd-service ,
wa_ex_service_data TYPE bapisrv_asmd ,
wa_ex_service_datax TYPE bapisrv_asmdx ,
lt_return TYPE STANDARD TABLE OF bapiret2 ,
wa_return TYPE bapiret2 ,
lt_srv_desc TYPE STANDARD TABLE OF bapisrv_asmdt,
wa_srv_desc TYPE bapisrv_asmdt ,
lt_srv_long_texts TYPE STANDARD TABLE OF bapisrv_text ,
wa_srv_long_texts TYPE bapisrv_text ,
lv_offset TYPE int4 ,
lv_asnum TYPE asnum ,
wa_asmd TYPE asmd ,
ls_t025 TYPE t025 ,
ls_t604f TYPE t604f ,
ls_t362 TYPE t362 ,
ls_t006 TYPE t006 ,
ls_t023 TYPE t023 ,
l_filename TYPE string .

FIELD-SYMBOLS:
<fs_service> TYPE ty_service ,
<fs_service2> TYPE ty_service2 .

********************************************************************
*& SELECTION-SCREEN
********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECTION-SCREEN:
BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE .

PARAMETERS
p_fname TYPE rlgrap-filename OBLIGATORY.

SELECTION-SCREEN:
BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 1(79) text-002 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 7(79) text-003 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 1(79) text-100 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-004 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-005 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-006 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-007 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-008 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-009 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-011 ,
END OF LINE ,

BEGIN OF LINE ,
COMMENT 11(79) text-010 ,
END OF LINE .
SELECTION-SCREEN END OF BLOCK b1.

************************************************************************
*& AT SELECTION-SCREEN FOR F4 VALUE
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname. "GUI_UPLOAD

PERFORM
f_get_f4_filename USING mask CHANGING p_fname.

CLEAR wf_fname.
wf_fname = p_fname.
TRANSLATE wf_fname TO UPPER CASE.

p_fname = wf_fname.

**********************************************************************
*& START-OF-SELECTION
**********************************************************************
START-OF-SELECTION.
PERFORM
f_get_upload_data.

**********************************************************************
*& END-OF-SELECTION
**********************************************************************
END-OF-SELECTION.
CLEAR i_var.
i_var = lines( lt_err ).

IF lt_err[] IS NOT INITIAL.


*& Downlod .XLS File with Erroneous data & Do not Create/ Post any record
IF i_var GT 1.
CLEAR l_filename.
l_filename = 'Excel.XLS' .

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
* BIN_FILESIZE =
filename = l_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 = lt_err
* 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.
ENDIF.

CALL METHOD cl_gui_frontend_services=>execute


EXPORTING
* DOCUMENT =
application = l_filename
* PARAMETER =
* DEFAULT_DIRECTORY =
* MAXIMIZED =
* MINIMIZED =
* SYNCHRONOUS =
* OPERATION = 'OPEN'
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
bad_parameter = 3
file_not_found = 4
path_not_found = 5
file_extension_unknown = 6
error_execute_failed = 7
synchronous_failed = 8
not_supported_by_gui = 9
OTHERS = 10.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
PERFORM:
f_set_data_update ,
f_set_display_alv .
ENDIF.
ENDIF.

*&---------------------------------------------------------------------*
*& Form F_GET_F4_FILENAME
*&---------------------------------------------------------------------*
FORM f_get_f4_filename USING mask CHANGING p_file.

CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'


EXPORTING
* DEF_FILENAME = ' '
* DEF_PATH = ' '
mask = mask
mode = 'O'
* TITLE = ' '
IMPORTING
filename = p_fname
* PATH =
* FILE =
EXCEPTIONS
selection_cancel = 1
selection_error = 2
OTHERS = 3.
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. "F_GET_F4_FILENAME

*&---------------------------------------------------------------------*
*& Form F_GET_UPLOAD_DATA
*&---------------------------------------------------------------------*
FORM f_get_upload_data .

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'


EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_raw " WORK TABLE
i_filename = p_fname
TABLES
i_tab_converted_data = lt_service "ACTUAL 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.
ENDIF.

LOOP AT lt_service ASSIGNING <fs_service>.


ug_astyp = <fs_service>-astyp .
TRANSLATE ug_astyp TO UPPER CASE.
<fs_service>-astyp = ug_astyp.

ug_meins = <fs_service>-meins.
TRANSLATE ug_meins TO UPPER CASE.
<fs_service>-meins = ug_meins.

ug_matkl = <fs_service>-matkl.
TRANSLATE ug_matkl TO UPPER CASE.
<fs_service>-matkl = ug_matkl.

CLEAR: ug_astyp,ug_meins,ug_matkl.

ENDLOOP.

CLEAR lt_service2[].
LOOP AT lt_service ASSIGNING <fs_service>.
wa_service2-asktx = <fs_service>-asktx .
wa_service2-astyp = <fs_service>-astyp .
wa_service2-meins = <fs_service>-meins .
wa_service2-matkl = <fs_service>-matkl .
wa_service2-spart = <fs_service>-spart .
wa_service2-bklas = <fs_service>-bklas .
wa_service2-taxtariffcode = <fs_service>-taxtariffcode .
wa_service2-lngtxt = <fs_service>-lngtxt .

APPEND wa_service2 TO lt_service2.


CLEAR wa_service2.
ENDLOOP.

*& Add Serial nos in Excel file data uploaded


CLEAR sno.
LOOP AT lt_service2 ASSIGNING <fs_service2>.
<fs_service2>-sno = sno + 1.
sno = sno + 1.
ENDLOOP.

*& Insert 1 record in Internal Table for Erroneous data


CLEAR lt_err[].

wa_err-sno = 'Excel Line Number'.


wa_err-text1 = 'Error Description'.
APPEND wa_err TO lt_err.
CLEAR wa_err.

**& Remove all records where 'SERVICE SHORT TEXT' is not maintained
* DELETE i_service2 WHERE asktx EQ space.

*& Validate Each records in file uploaded


LOOP AT lt_service2 ASSIGNING <fs_service2>.
*& Validate SERVICE SHORT TEXT
IF <fs_service2>-asktx IS INITIAL.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'SERVICE SHORT TEXT is Blank'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ENDIF.

*& Validate BASE UNIT OF MEASUREMENT


CLEAR ls_t006.
SELECT SINGLE *
FROM t006
INTO ls_t006
WHERE msehi EQ <fs_service2>-meins.
IF sy-subrc NE 0.
CLEAR wf_meins.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
input = <fs_service2>-meins
language = sy-langu
IMPORTING
output = wf_meins
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Check unit of measurement.'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ELSE.
CLEAR ls_t006.
SELECT SINGLE *
FROM t006
INTO ls_t006
WHERE msehi EQ wf_meins.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Check unit of measurement.'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.
ENDIF.
ENDIF.

*& Validate MATERIAL/ SERVICE GROUP


CLEAR ls_t023.
SELECT SINGLE *
FROM t023
INTO ls_t023
WHERE matkl EQ <fs_service2>-matkl.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.

CONCATENATE 'Material/Service Group is' 'In-Valid'


INTO wa_err-text1 SEPARATED BY space.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate SERVICE CATEGORY


CLEAR ls_t362.
SELECT SINGLE *
FROM t362
INTO ls_t362
WHERE astyp EQ <fs_service2>-astyp.
IF sy-subrc NE 0.
wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Service Category Error.'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate TAX TARRIEF CODE


CLEAR ls_t604f.
SELECT SINGLE *
FROM t604f
INTO ls_t604f
WHERE steuc EQ <fs_service2>-taxtariffcode.
IF sy-subrc NE 0.
MOVE-CORRESPONDING <fs_service2> TO wa_err.

wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'TAX Tarrief Code'.

APPEND wa_err TO lt_err.


CLEAR wa_err.
ENDIF.

*& Validate VALUATION CLASS


CLEAR ls_t025.
SELECT SINGLE *
FROM t025
INTO ls_t025
WHERE kkref EQ ls_t362-kkref
AND bklas EQ <fs_service2>-bklas.
IF sy-subrc NE 0.
MOVE-CORRESPONDING <fs_service2> TO wa_err.

wa_err-sno = <fs_service2>-sno + 1.
wa_err-text1 = 'Valuation Class Error.'.

APPEND wa_err TO lt_err .


CLEAR wa_err.
ENDIF.
ENDLOOP.
ENDFORM. "F_GET_UPLOAD_DATA

*&---------------------------------------------------------------------*
*& Form F_SET_DATA_UPDATE
*&---------------------------------------------------------------------*
FORM f_set_data_update .
DATA:
lv_row TYPE int4,
et_excel_tab TYPE STANDARD TABLE OF zst_char50.

FIELD-SYMBOLS <fs_excel_tab> TYPE zst_char50.

lv_row = lines( lt_service ).


lv_row = lv_row + 1.

CLEAR et_excel_tab[].
CALL FUNCTION 'ZALSM_EXCEL_TO_IT'
EXPORTING
filename = p_fname
i_begin_col = '8'
i_begin_row = '2'
i_end_col = '8'
i_end_row = lv_row
TABLES
et_excel_tab = et_excel_tab
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.

DATA:
lv_string(4096) TYPE c , " string.
lv_tabix TYPE sy-tabix ,
lv_mod TYPE int4 ,
lv_div TYPE int4 .

CLEAR gt_fin[].
LOOP AT et_excel_tab ASSIGNING <fs_excel_tab>.
CLEAR lv_tabix.
lv_tabix = sy-tabix.

CONCATENATE lv_string <fs_excel_tab>-line_50 INTO lv_string.

CLEAR lv_mod.
lv_mod = lv_tabix MOD 82.

IF lv_mod IS INITIAL.
CLEAR lv_div.
lv_div = lv_tabix DIV 82.

READ TABLE lt_service ASSIGNING <fs_service> INDEX lv_div.


IF sy-subrc IS INITIAL.
<fs_service>-lngtxt = lv_string.

CLEAR:
wa_service_data ,
wa_service_datax ,
wa_service ,
wa_ex_service_data ,
wa_ex_service_datax ,
lt_return[] ,
wa_return ,
lt_srv_desc[] ,
wa_srv_desc ,
lt_srv_long_texts[] ,
wa_srv_long_texts .

wa_service_data-matl_group = <fs_service>-matkl.
wa_service_data-base_uom = <fs_service>-meins.
wa_service_data-serv_cat = <fs_service>-astyp.
wa_service_data-division = <fs_service>-spart.
wa_service_data-val_class = <fs_service>-bklas.

wa_service_datax-matl_group = abap_true.
wa_service_datax-base_uom = abap_true.
wa_service_datax-serv_cat = abap_true.
wa_service_datax-division = abap_true.
wa_service_datax-val_class = abap_true.

wa_srv_desc-change_id = 'I'.
wa_srv_desc-language = 'E'.
wa_srv_desc-language_iso = 'EN'.
wa_srv_desc-short_text = <fs_service>-asktx.

APPEND wa_srv_desc TO lt_srv_desc.


CLEAR wa_srv_desc.

DO 32 TIMES.
IF sy-index = 1 .
wa_srv_long_texts-format = '*'.
ENDIF.

wa_srv_long_texts-language = 'E'.
wa_srv_long_texts-language_iso = 'EN'.
* wa_srv_long_texts-format = .
wa_srv_long_texts-change_id = 'I'.

IF sy-index = 32 .
wa_srv_long_texts-line = lv_string+lv_offset(4).
ELSE.
wa_srv_long_texts-line = lv_string+lv_offset(132).
ENDIF.

APPEND wa_srv_long_texts TO lt_srv_long_texts.


CLEAR wa_srv_long_texts.

lv_offset = lv_offset + 132.


ENDDO.

CLEAR lv_offset.

*& BAPI to Creation of a Service Master Record


CALL FUNCTION 'BAPI_SERVICE_CREATE'
EXPORTING
im_service_data = wa_service_data
im_service_datax = wa_service_datax
* NO_NUMBER_RANGE_CHECK =
* TESTRUN =
IMPORTING
service = wa_service
ex_service_data = wa_ex_service_data
ex_service_datax = wa_ex_service_datax
TABLES
return = lt_return
service_description = lt_srv_desc
service_long_texts = lt_srv_long_texts
* EXTENSION_IN =
* EXTENSION_OUT =
.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = /artec/pd_cl_common=>gc_value_x
* IMPORTING
* RETURN =
.
IF sy-subrc IS INITIAL.

READ TABLE lt_return INTO wa_return WITH KEY type = 'S'


id = 'BAPI'
number = '000'
message_v1 = 'Service'.
IF sy-subrc IS INITIAL.
lv_asnum = wa_return-message_v2.

wa_fin-asnum = lv_asnum.
wa_fin-asktx = <fs_service>-asktx.
wa_fin-astyp = <fs_service>-astyp.
wa_fin-meins = <fs_service>-meins.
wa_fin-matkl = <fs_service>-matkl.
wa_fin-spart = <fs_service>-spart.
wa_fin-bklas = <fs_service>-bklas.
wa_fin-taxtariffcode = <fs_service>-taxtariffcode.
wa_fin-lngtxt = <fs_service>-lngtxt.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
input = lv_asnum
IMPORTING
output = lv_asnum.

CLEAR wa_asmd.
SELECT SINGLE *
FROM asmd
INTO wa_asmd
WHERE asnum EQ lv_asnum.
IF sy-subrc IS INITIAL.
wa_asmd-taxtariffcode = <fs_service>-taxtariffcode.
wa_fin-asnum = lv_asnum.

MODIFY asmd FROM wa_asmd.

APPEND wa_fin TO gt_fin.


ENDIF.
ENDIF.
ENDIF.
ENDIF.

CLEAR: lv_string,wa_asmd,wa_fin.
ENDIF.
ENDLOOP.
ENDFORM. "F_SET_DATA_UPDATE

*&---------------------------------------------------------------------*
*& Form f_set_display_alv
*&---------------------------------------------------------------------*
FORM f_set_display_alv .
DATA:
lc_msg TYPE REF TO cx_salv_msg ,
lr_salv_dsp_set TYPE REF TO cl_salv_display_settings ,
lr_functions TYPE REF TO cl_salv_functions_list ,
lr_header TYPE REF TO cl_salv_form_layout_grid ,
lr_h_label TYPE REF TO cl_salv_form_label ,
lr_h_flow TYPE REF TO cl_salv_form_layout_flow ,
lr_footer TYPE REF TO cl_salv_form_layout_grid ,
lr_f_label TYPE REF TO cl_salv_form_label ,
lr_f_flow TYPE REF TO cl_salv_form_layout_flow ,
lr_cols TYPE REF TO cl_salv_columns_table .

CREATE OBJECT:
*& Header object
lr_header,
*& Footer Object
lr_footer.

*----------------------------------------------------------------------*
*& We are calling the static Factory method which will give back
*& the ALV object reference.
*----------------------------------------------------------------------*
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_salv
CHANGING
t_table = gt_fin.

CATCH cx_salv_msg INTO lc_msg .


ENDTRY.

**********************************************************************
*& set output control
**********************************************************************
lr_salv_dsp_set = gr_salv->get_display_settings( ).
lr_salv_dsp_set->set_striped_pattern( abap_true ).

************************************************************************
*& Properties to the ALV
************************************************************************
*& Setting Default PF-STATUS
*& Default functions
lr_functions = gr_salv->get_functions( ).
*& activate ALV generic Functions
lr_functions->set_all( abap_true ).

**********************************************************************
*& Setting TOP_OF_PAGE
**********************************************************************
*& Information in Bold
lr_h_label = lr_header->create_label( row = 1
column = 1 ).
lr_h_label->set_text('Date:').

*& Information in tabular format


lr_h_flow = lr_header->create_flow( row = 1
column = 2 ).
lr_h_flow->create_text( text = sy-datum ).

lr_h_label = lr_header->create_label( row = 2


column = 1 ).
lr_h_label->set_text('Upload File Path:' ).

lr_h_flow = lr_header->create_flow( row = 2


column = 2 ).
lr_h_flow->create_text( text = p_fname ).

*& Set the top of list using the header for Online
gr_salv->set_top_of_list( lr_header ).
*& Set the top of list using the header for Print
gr_salv->set_top_of_list_print( lr_header ).

**********************************************************************
*& Setting END_OF_PAGE
**********************************************************************
*& Information in Bold
lr_f_label = lr_footer->create_label( row = 1
column = 1 ).
lr_f_label->set_text('No. of Records:').

*& Tabular Information


lr_f_flow = lr_footer->create_flow( row = 1
column = 2 ).
lr_f_flow->create_text( text = lines( gt_fin ) ).

*& Set the end of list using the header for Online
gr_salv->set_end_of_list( lr_footer ).
*& Set the End of list using the header for Print
gr_salv->set_end_of_list_print( lr_footer ).

**********************************************************************
*& Field Catalog
**********************************************************************
lr_cols = gr_salv->get_columns( ).
lr_cols->set_optimize( abap_true ).
lr_cols->set_key_fixation( abap_true ).
PERFORM:
f_set_field_cat USING lr_cols 'ASNUM' 'SerNo' 'Ser Number' '
Service Number' abap_true ,
f_set_field_cat USING lr_cols 'ASKTX' 'SerText' 'SerText' '
Service short text' abap_false ,
f_set_field_cat USING lr_cols 'ASTYP' 'SerText' 'SerText' '
Service category' abap_false ,
f_set_field_cat USING lr_cols 'MEINS' 'BUM' 'BUM' '
Base unit of measurement' abap_false ,
f_set_field_cat USING lr_cols 'MATKL' 'MatGrp' 'Material group' '
Material group' abap_false ,
f_set_field_cat USING lr_cols 'SPART' 'Division' 'Division' '
Division' abap_false ,
f_set_field_cat USING lr_cols 'BKLAS' 'ValClass' 'Valuation class' '
Valuation class' abap_false ,
f_set_field_cat USING lr_cols 'TAXTARIFFCODE' 'TaxTCode' 'TaxTCode' '
Tax Tariff Code' abap_false ,
f_set_field_cat USING lr_cols 'LNGTXT' 'Long Text' 'Long Text' '
Long Text' abap_false .

*& Displaying the ALV


gr_salv->display( ).

ENDFORM. " F_SET_DISPLAY_ALV

*&---------------------------------------------------------------------*
*& Form F_SET_FIELD_CAT
*&---------------------------------------------------------------------*
FORM f_set_field_cat USING p_lr_cols TYPE REF TO cl_salv_columns_table
p_column TYPE lvc_fname
p_s_txt TYPE scrtext_s
p_m_txt TYPE scrtext_m
p_l_txt TYPE scrtext_l
p_key TYPE sap_bool.
DATA
lr_col TYPE REF TO cl_salv_column_table.

TRY.
lr_col ?= p_lr_cols->get_column( p_column ).

lr_col->set_short_text( p_s_txt ).
lr_col->set_medium_text( p_m_txt ).
lr_col->set_long_text( p_l_txt ).

IF p_key = abap_true.
lr_col->set_key( abap_true ).
ENDIF.

CATCH cx_salv_not_found. "#EC NO_HANDLER


ENDTRY.
ENDFORM. " F_SET_FIELD_CAT
3. Summary.

I. Read Excel File (FM: TEXT_CONVERT_XLS_TO_SAP)

II. Validate Data read from File (other than Long Text)

III. Download file if any Erroneous record found (FM: GUI_DOWNLOAD)

IV. Read Long Text for each record(FM: ZALSM_EXCEL_TO_IT)

V. Creation of a Service Master Record (BAPI: BAPI_SERVICE_CREATE)

You might also like