Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

adding a field in a report

Former Member
0 Likes
886

Hi SDN

i have a small problem where iam unable to add fields in the final internal table

i have to add two fields i.e., COMMITMENT AND ACTVALUE from ESUH TABLE

AND the final internal table is l_i_ekpo.

we have to add only two fields COMMITMENT and a ....variable = COMMITMENT - ACTVALUE. which is already done in the program.

here iam attaching a program.

TABLES: ekpo.

DATA: i_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.

DATA: i_directory_sel LIKE popuptext OCCURS 0 WITH HEADER LINE.

*{ INSERT PS010306UPGR

CLASS cl_abap_char_utilities DEFINITION LOAD.

*} INSERT

DATA: BEGIN OF tab,

*{ REPLACE PS010306UPGR

  • T(1) TYPE X VALUE '09', "HEX!

t(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab, "Unicode

*} REPLACE

END OF tab.

DATA: ekpo_konnr LIKE ekpo-konnr.

DATA: ekpo_ktpnr LIKE ekpo-ktpnr.

DATA: BEGIN OF t_bapiessrc OCCURS 0.

INCLUDE STRUCTURE zbapiessrc_chars.

DATA: END OF t_bapiessrc.

DATA: t_bapiessrc_tab(301) OCCURS 0." with header line.

DATA: wa_bapiessrc_tab(301).

DATA: BEGIN OF t_headertext OCCURS 0,

ext_number LIKE zbapiessrc_chars-ext_number,

linno(4) TYPE n,

tcode(20),

recordname(30),

txpargraph(2),

txline(72),

text_mark,

END OF t_headertext.

DATA: BEGIN OF t_itemtext OCCURS 0,

ext_number LIKE zbapiessrc_chars-ext_number,

ext_line(18),

linno(4) TYPE n,

tcode(20),

recordname(30),

txpargraph(2),

txline(72),

text_mark,

ext_linno(6),

END OF t_itemtext.

DATA: t_headertext_tab(180) OCCURS 0.

DATA: wa_headertext_tab(180).

DATA: t_itemtext_tab(190) OCCURS 0.

DATA: wa_itemtext_tab(190).

DATA: BEGIN OF t_bapiesllc OCCURS 0.

  • ext_number like bapiessrc-ext_number.

INCLUDE STRUCTURE zbapiesllc_chars.

DATA: END OF t_bapiesllc.

DATA: t_bapiesllc_tab(650) OCCURS 0." with header line.

DATA: wa_bapiesllc_tab(650).

DATA: no_of_files LIKE sy-index.

DATA: perc_uploaded TYPE i.

DATA: text_uploaded(50).

DATA: text_fi_not_upl1(30), text_fi_not_upl2(30).

DATA: continue_yn.

DATA: file TYPE localfile.

FIELD-SYMBOLS .

DATA: BEGIN OF clbp_content OCCURS 0.

INCLUDE STRUCTURE solisti1.

DATA: END OF clbp_content.

DATA w_mode VALUE 'A'.

CONSTANTS: c_update VALUE 'S'.

DATA: BEGIN OF bdcdata OCCURS 0. " BDC Table

INCLUDE STRUCTURE bdcdata.

DATA: END OF bdcdata.

DATA: BEGIN OF bdcmsgcoll OCCURS 0. " BDC Messages

INCLUDE STRUCTURE bdcmsgcoll.

DATA: END OF bdcmsgcoll.

DATA params LIKE pri_params.

DATA list_text LIKE pri_params-prtxt.

DATA: days(1) TYPE n VALUE 2,

count(3) TYPE n VALUE 1,

valid TYPE c.

DATA t_bapi_essr LIKE bapiessrc OCCURS 0.

DATA t_bapi_essr_log LIKE bapiessrc OCCURS 0 WITH HEADER LINE.

DATA t_bapi_esll LIKE bapiesllc OCCURS 0.

DATA t_bapi_esll_log LIKE bapiesllc OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF output_prot OCCURS 0.

INCLUDE STRUCTURE essr.

INCLUDE STRUCTURE bdcmsgcoll.

DATA: END OF output_prot.

DATA: BEGIN OF i_sgcses_struc OCCURS 0,

po_number LIKE zbapiessrc_chars-po_number,

po_item LIKE zbapiessrc_chars-po_item,

short_text LIKE zbapiessrc_chars-short_text,

xblnr LIKE essr-xblnr,

ref_date LIKE zbapiessrc_chars-ref_date,

service LIKE zbapiesllc_chars-service,

flag,

quantity LIKE zbapiesllc_chars-quantity,

final,

END OF i_sgcses_struc.

  • start of insert >>>

DATA: l_ses_no LIKE essr-lblni.

TYPES: BEGIN OF t_ekpo,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

werks LIKE ekpo-werks,

packno LIKE ekpo-packno,

END OF t_ekpo.

DATA: i_ekpo TYPE STANDARD TABLE OF t_ekpo.

  • end of insert <<<

$$----

-


S E L E C T I O N S C R E E N -

-


*

PARAMETERS: p_path TYPE localfile DEFAULT

'C: empBasellInterfacesSesSES-Daten'.

***parameters: p_dismod type ctu_mode default 'A'.

PARAMETERS: p_dismod TYPE ctu_mode DEFAULT 'E'.

PARAMETERS: p_spnam TYPE tsp01-rq2name DEFAULT 'SES_UPL.....'

OBLIGATORY.

PARAMETERS: cb_serv AS CHECKBOX DEFAULT 'X'.

PARAMETERS: cb_text AS CHECKBOX DEFAULT 'X'.

PARAMETERS: cb_chck AS CHECKBOX DEFAULT 'X'.

$$----

-


A T S E L E C T I O N S C R E E N -

-


*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.

DATA: len TYPE i,

testchar(1).

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

EXPORTING

mask = 'C:*.txt'

static = 'X'

CHANGING

file_name = p_path.

DESCRIBE FIELD p_path LENGTH len IN CHARACTER MODE.

DO len TIMES.

len = len - 1.

testchar = p_path+len(1).

IF testchar = ''.

len = len + 1.

p_path = p_path(len).

EXIT.

ENDIF.

ENDDO.

$$----

-


S T A R T O F S E L E C T I O N -

-


*

START-OF-SELECTION.

PERFORM select_files.

  • PERFORM spool_settings.

PERFORM upload_files.

PERFORM select_additional_data.

$$----

-


E N D O F S E L E C T I O N -

-


*

END-OF-SELECTION.

  • PERFORM spool_settings.

CLEAR: perc_uploaded, no_of_files, text_uploaded.

DESCRIBE TABLE t_bapiessrc LINES no_of_files.

  • Loop over header-records: for each header-record one call transaction:

LOOP AT t_bapiessrc.

perc_uploaded = ( 100 * sy-tabix ) / no_of_files.

IF cb_serv = 'X'.

PERFORM prepare_clipboard.

  • Upload Service Entry Sheets:

PERFORM call_transaction_upload.

  • Italian Version begin

IMPORT output_prot FROM MEMORY ID 'OUT_PROT'.

PERFORM write_prot_to_spool.

FREE MEMORY ID 'OUT_PROT'.

REFRESH: output_prot.

  • Italian Version end

PERFORM find_ses_number.

PERFORM check_estimated_value.

ENDIF.

IF cb_text = 'X'.

  • Upload SES Texts:

PERFORM upload_texts.

ENDIF.

  • start of insert >>>

PERFORM change_account.

IF cb_serv = 'X'.

PERFORM release_ses.

ENDIF.

  • end of insert <<<

ENDLOOP.

  • In case only text and no services shall be uploaded:

IF NOT cb_text IS INITIAL.

  • In case also services are uploaded this loop won't apply cause

  • t_headertext-entries are deleted after they were processed in the

  • loop above!

LOOP AT t_headertext.

MOVE t_headertext-ext_number TO t_bapiessrc-ext_number.

*only for test cases since data file is not correct:

  • move t_headertext-ext_number to t_bapiessrc-ref_doc_no.

*only for test cases since data file is not correct:END

PERFORM upload_texts.

ENDLOOP.

ENDIF.

PERFORM log_upload_success.

  • NEW-PAGE PRINT OFF.

PERFORM delete_files.

  • WRITE: / text-001.

  • write: / 'Check spools for correct processing (Transaction SP01)!'.

$$----

-


T O P O F P A G E -

-


*

TOP-OF-PAGE.

*--at user-command--


*

AT USER-COMMAND.

*--top of page-during line selection--


*

TOP-OF-PAGE DURING LINE-SELECTION.

$$----

-


F O R M - R O U T I N E S -

-


*

*&----


*

*& Form SPLIT_BAPIESSRC

*&----


*

FORM split_bapiessrc.

DATA: l_score_time(3),

l_score_qual(3),

l_essr_lblni LIKE essr-lblni.

  • start of insert >>>

TABLES: esuc.

DATA: l_packno LIKE ekpo-packno.

  • end of insert <<<

CLEAR: t_bapiessrc, ekpo_konnr, ekpo_ktpnr, ekpo.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_bapiessrc-sheet_no t_bapiessrc-ext_number

t_bapiessrc-person_int t_bapiessrc-person_ext

t_bapiessrc-location t_bapiessrc-ref_date

t_bapiessrc-begdate t_bapiessrc-enddate

t_bapiessrc-pckg_no t_bapiessrc-short_text

  • Only for testing due to wrong data

t_bapiessrc-po_number t_bapiessrc-po_item

  • ekpo_konnr ekpo_ktpnr

  • Only for testing due to wrong data END

t_bapiessrc-block_ind t_bapiessrc-score_time

t_bapiessrc-score_qual t_bapiessrc-doc_date

t_bapiessrc-post_date t_bapiessrc-ref_doc_no

  • Only for testing due to wrong data

  • t_bapiessrc-po_number t_bapiessrc-po_item

  • Only for testing due to wrong data END

t_bapiessrc-accasscat t_bapiessrc-comm_no

t_bapiessrc-user_field t_bapiessrc-acceptance

  • Only for testing due to wrong data

ekpo_konnr ekpo_ktpnr t_bapiessrc-final.

  • Only for testing due to wrong data END

MOVE '0000000001' TO t_bapiessrc-pckg_no.

SHIFT t_bapiessrc-po_item RIGHT DELETING TRAILING space.

TRANSLATE t_bapiessrc-po_item USING ' 0'.

  • start of delete >>>

  • IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.

  • SELECT SINGLE konnr ktpnr FROM ekpo

  • INTO (ekpo-konnr, ekpo-ktpnr)

  • WHERE ebeln = t_bapiessrc-po_number

  • AND ebelp = t_bapiessrc-po_item.

  • IF NOT sy-subrc IS INITIAL.

  • WRITE:/ text-101, t_bapiessrc-ext_number,

  • text-102,

  • t_bapiessrc-po_number,

  • text-103,

  • t_bapiessrc-po_item,

  • text-104.

  • WRITE: / text-105.

  • EXIT.

  • ELSE.

  • IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.

  • WRITE:/ text-101, t_bapiessrc-ext_number,

  • text-106,

  • ekpo_konnr, '/',

  • ekpo_ktpnr,

  • text-107,

  • t_bapiessrc-po_number,

  • text-103, t_bapiessrc-po_item, ')'.

  • WRITE: / text-105.

  • EXIT.

  • ENDIF.

  • ENDIF.

  • ENDIF.

  • end of delete <<<

  • start of insert >>>

" check contract number

IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.

SELECT SINGLE konnr ktpnr packno

FROM ekpo

INTO (ekpo-konnr, ekpo-ktpnr, l_packno)

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

IF sy-subrc NE 0.

" no corresponding PO, no update will be performed

WRITE:/ text-101, t_bapiessrc-ext_number,

text-102,

t_bapiessrc-po_number,

text-103,

t_bapiessrc-po_item,

text-104.

WRITE: / text-105.

EXIT.

ELSE.

" check contract number against table ESUC first.

SELECT SINGLE *

FROM esuc

WHERE packno EQ l_packno

AND ebeln EQ ekpo_konnr

AND ebelp EQ ekpo_ktpnr.

IF sy-subrc NE 0.

" check against PO line

IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.

WRITE:/ text-101, t_bapiessrc-ext_number,

text-106,

ekpo_konnr, '/',

ekpo_ktpnr,

text-107,

t_bapiessrc-po_number,

text-103, t_bapiessrc-po_item, ')'.

WRITE: / text-105.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_bapiessrc-ext_number.

IF sy-subrc IS INITIAL.

WRITE:/ 'External SES', t_bapiessrc-ext_number,

'is already uploaded. SES-Number: ', l_essr_lblni.

WRITE: / 'No update of this sheet was accomplished!'.

EXIT.

ENDIF.

ENDIF.

APPEND t_bapiessrc.

ENDFORM. " SPLIT_BAPIESSRC

*&----


*

*& Form SPLIT_BAPIESLLC

*&----


*

FORM split_bapiesllc.

DATA: l_outl_level(3), l_ovf_tol(3), l_price_unit(5), l_gr_price(23),

l_target_val(23), l_userf2_num(13), l_quantity(13),

l_form_val1(13), l_form_val2(13), l_form_val3(13),

l_form_val4(13), l_form_val5(13), l_ext_number(16).

CLEAR: t_bapiesllc.

  • TRANSLATE doc_content-line USING '#;'.

SPLIT AT '§' INTO

t_bapiesllc-ext_number

t_bapiesllc-pckg_no t_bapiesllc-line_no

t_bapiesllc-ext_line t_bapiesllc-outl_level

t_bapiesllc-outl_no t_bapiesllc-outl_ind

t_bapiesllc-subpckg_no t_bapiesllc-service

t_bapiesllc-serv_type t_bapiesllc-edition

t_bapiesllc-ssc_item t_bapiesllc-ext_serv

t_bapiesllc-quantity t_bapiesllc-base_uom

t_bapiesllc-uom_iso t_bapiesllc-ovf_tol

t_bapiesllc-ovf_unlim t_bapiesllc-price_unit

t_bapiesllc-gr_price t_bapiesllc-from_line

t_bapiesllc-to_line t_bapiesllc-short_text

t_bapiesllc-distrib t_bapiesllc-pers_no

t_bapiesllc-wagetype t_bapiesllc-pln_pckg

t_bapiesllc-pln_line t_bapiesllc-con_pckg

t_bapiesllc-con_line t_bapiesllc-tmp_pckg

t_bapiesllc-tmp_line t_bapiesllc-ssc_lim

t_bapiesllc-limit_line t_bapiesllc-target_val

t_bapiesllc-basline_no t_bapiesllc-basic_line

t_bapiesllc-alternat t_bapiesllc-bidder

t_bapiesllc-supp_line t_bapiesllc-open_qty

t_bapiesllc-inform t_bapiesllc-blanket

t_bapiesllc-eventual t_bapiesllc-tax_code

t_bapiesllc-taxjurcode t_bapiesllc-price_chg

t_bapiesllc-matl_group t_bapiesllc-date

t_bapiesllc-begintime t_bapiesllc-endtime

t_bapiesllc-extpers_no t_bapiesllc-formula

t_bapiesllc-form_val1 t_bapiesllc-form_val2

t_bapiesllc-form_val3 t_bapiesllc-form_val4

t_bapiesllc-form_val5 t_bapiesllc-userf1_num

t_bapiesllc-userf2_num t_bapiesllc-userf1_txt

t_bapiesllc-userf2_txt t_bapiesllc-hi_line_no.

  • start of insert >>> "AP13022007i

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_bapiesllc-line_no

IMPORTING

output = t_bapiesllc-line_no.

  • end of insert <<< "AP13022007i

TRANSLATE t_bapiesllc-quantity USING ',.'.

MOVE '0000000002' TO t_bapiesllc-pckg_no. "TS20082002

APPEND t_bapiesllc.

ENDFORM. " SPLIT_BAPIESLLC

*&----


*

*& Form SELECT_FILES

*&----


*

FORM select_files.

CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'

EXPORTING

i_path = p_path

  • IMPORTING

  • E_PURE_PATH =

TABLES

e_directory = i_directory_list

EXCEPTIONS

download = 1

upload = 2

execute = 3

directory_not_exist = 4

directory = 5

OTHERS = 6

.

IF sy-subrc <> 0.

*{ REPLACE PS010306UPGR

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

MESSAGE w208(00) WITH 'Enter existing directory'(003).

*} REPLACE

EXIT.

ENDIF.

LOOP AT i_directory_list.

CHECK i_directory_list(1) CA 'KPLT'.

  • check i_directory_list cs '.XLS' or i_directory_list cs '.TXT'.

CHECK i_directory_list CS '.TXT'.

CLEAR i_directory_sel.

MOVE 'X' TO i_directory_sel-text(1).

MOVE i_directory_list(79) TO i_directory_sel-text+1(79).

APPEND i_directory_sel.

ENDLOOP.

CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'

EXPORTING

popup_title = 'Select Files for SES-Upload'

start_column = 10

start_row = 1

end_column = 50

end_row = 16

IMPORTING

sy_ucomm = sy-ucomm

TABLES

x_popuptext = i_directory_sel.

*Check which Files shall be uploaded:

LOOP AT i_directory_sel.

CHECK i_directory_sel-text(1) NE 'Y'.

DELETE i_directory_sel.

ENDLOOP.

SORT i_directory_sel.

DESCRIBE TABLE i_directory_sel LINES no_of_files.

ENDFORM. " SELECT_FILES

*&----


*

*& Form UPLOAD_FILES

*&----


*

FORM upload_files.

*{ INSERT PS010306UPGR

DATA: fname TYPE string.

*} INSERT

LOOP AT i_directory_sel.

CLEAR: file.

UNASSIGN: .

perc_uploaded = ( 100 * sy-tabix ) / no_of_files.

CONCATENATE i_directory_sel-text+1(31) 'uploaded from disk'

INTO text_uploaded

SEPARATED BY space.

CONCATENATE p_path i_directory_sel-text+1(31) INTO file.

  • Choose the right structure for <doc_content> and <wa_doc_content>

  • depending on file type K, P, T or L via assignment of field symbols:

CASE i_directory_sel-text+1(1).

WHEN 'K'. "Kopfdaten

ASSIGN t_bapiessrc_tab TO .

ENDCASE.

*{ REPLACE PS010306UPGR

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FILE

  • TABLES

  • DATA_TAB = <DOC_CONTENT>

  • EXCEPTIONS

  • CONVERSION_ERROR = 1

  • FILE_OPEN_ERROR = 2

  • FILE_READ_ERROR = 3

  • INVALID_TABLE_WIDTH = 4

  • INVALID_TYPE = 5

  • NO_BATCH = 6

  • UNKNOWN_ERROR = 7

  • GUI_REFUSE_FILETRANSFER = 8

  • CUSTOMER_ERROR = 9

  • OTHERS = 10.

fname = file.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = fname

CHANGING

data_tab = 0.

CLEAR: text_fi_not_upl1, text_fi_not_upl2, continue_yn.

CONCATENATE 'File' i_directory_sel-text+1(21) ': upload failed!'

INTO text_fi_not_upl1 SEPARATED BY space.

MOVE 'Continue Program?' TO text_fi_not_upl2.

CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'

EXPORTING

defaultoption = 'N'

textline1 = text_fi_not_upl1

textline2 = text_fi_not_upl2

titel = 'Upload Failed'

start_column = 25

start_row = 6

cancel_display = ' '

IMPORTING

answer = continue_yn.

IF continue_yn = 'N'.

EXIT.

ENDIF.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

  • Move uploaded File records line by line into correct internal table:

  • t_bapiessrc for K__.txt

  • t_bapiesllc for P__.txt

  • t_headertext for T__.txt

  • t_itemtext for L__.txt

LOOP AT .

IF NOT sy-subrc IS INITIAL. EXIT. ENDIF.

ENDDO.

CASE i_directory_sel-text+1(1).

WHEN 'K'. "Kopfdaten

PERFORM split_bapiessrc.

WHEN 'T'.

PERFORM split_headertext.

WHEN 'P'.

PERFORM split_bapiesllc.

WHEN 'L'.

PERFORM split_itemtext.

ENDCASE.

ENDLOOP.

ENDIF.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = perc_uploaded

text = text_uploaded.

ENDLOOP.

SORT t_bapiessrc BY ext_number.

SORT t_headertext BY ext_number linno.

  • SORT t_bapiesllc BY ext_number. "

SORT t_bapiesllc BY ext_number pckg_no line_no.

      • sort t_bapiesllc by ext_number line_no.

SORT t_itemtext BY ext_number ext_linno ext_line linno.

ENDFORM. " UPLOAD_FILES

*&----


*

*& Form PREPARE_CLIPBOARD

*&----


*

FORM prepare_clipboard.

CLEAR: clbp_content.

REFRESH: clbp_content.

DATA: l_line TYPE n.

DATA: l_tabix LIKE sy-tabix.

CLEAR l_tabix.

*Assemble the File-Structure out of the internal tables t_bapiessrc

  • and t_bapiesllc which is expected by the user exit

  • exit_saplmlsx_002 and move it to the clipboard:

MOVE 'K' TO clbp_content(1). "Flag for header record

MOVE t_bapiessrc TO clbp_content+1(246).

APPEND clbp_content.

READ TABLE t_bapiesllc WITH KEY ext_number = t_bapiessrc-comm_no

BINARY SEARCH.

CHECK sy-subrc IS INITIAL.

MOVE sy-tabix TO l_tabix.

  • insert dummy row for connection between pach_no and sub_packno:

CLEAR l_line.

CLEAR: clbp_content, t_bapiesllc.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1). "Flag for service-record

MOVE l_line TO clbp_content+1(1).

MOVE '0000000001' TO t_bapiesllc-pckg_no.

MOVE '0000000002' TO t_bapiesllc-subpckg_no.

WRITE t_bapiesllc16(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc261(245) TO clbp_content3(245).

APPEND clbp_content.

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

MOVE 'E' TO clbp_content+2(1).

WRITE t_bapiesllc506(27) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

  • end insert

LOOP AT t_bapiesllc FROM l_tabix.

CLEAR l_line.

CLEAR clbp_content.

IF t_bapiesllc-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1). "Flag for service-record

  • 'P'-service records are split into three clipbord-lines since

  • structure t_bapiesllc is too long for one line

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc16(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc261(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

MOVE 'E' TO clbp_content+2(1).

WRITE t_bapiesllc506(27) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ENDLOOP.

******Italy version of upload

PERFORM include_italy.

  • export t_bapiessrc to memory id 'GER_ESSRC'.

  • export t_bapiesllc to memory id 'GER_ESLLC'.

EXPORT t_bapi_essr TO MEMORY ID 'GER_ESSRC'.

EXPORT t_bapi_esll TO MEMORY ID 'GER_ESLLC'.

CHECK 1 = 2.

******Italy version of upload END

CALL FUNCTION 'CLPB_EXPORT'

TABLES

data_tab = clbp_content

EXCEPTIONS

clpb_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. " PREPARE_CLIPBOARD

*&----


*

*& Form CALL_TRANSACTION_UPLOAD

*&----


*

FORM call_transaction_upload.

REFRESH bdcdata.

PERFORM bdc_dynpro USING: 'RM11RL00' '1000'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=UPL'.

PERFORM bdc_field USING: 'S_LBLNI-LOW' ' '.

PERFORM bdc_field USING: 'S_LBLNI-HIGH' ' '.

PERFORM bdc_field USING: 'P_BSTNR' ' '.

PERFORM bdc_field USING: 'S_BSTPO-LOW' ' '.

PERFORM bdc_field USING: 'S_BSTPO-HIGH' ' '.

*Italian upload version -> comments set|remove comments for Germ.Version

  • perform bdc_dynpro using: 'SAPLMLSX' '0480'.

  • perform bdc_field using: 'BDC_OKCODE' '=EXEC'.

  • perform bdc_dynpro using: 'SAPLGRAP' '0210'.

  • perform bdc_field using: 'BDC_OKCODE' '=UPL_FR_CLP'.

PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'MARKIERT' 'X'.

*Italian upload version -> comments set; END

CASE p_dismod.

WHEN 'A'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=LITE'.

WHEN 'N'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=HIND'.

WHEN 'E'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=DARK'.

ENDCASE.

  • Here the call transcation of SAP-standard takes place for creating the

  • service entry sheet

  • After SAP-standard call transaction: analyze the popup with the

*Italian upload version -> comments set|remove comments for Germ.Version

PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'BDC_OKCODE' '=PRI'.

  • perform bdc_dynpro using: 'SAPLSPRI' '0100'.

  • perform bdc_field using: 'BDC_OKCODE' '=PRIN'.

  • perform bdc_field using: 'PRI_PARAMS-PLIST' p_spnam.

  • perform bdc_field using: 'PRI_PARAMS-PRIMM' ' '.

  • perform bdc_field using: 'PRI_PARAMS-PRREL' ' '.

  • perform bdc_field using: 'PRI_PARAMS-PRNEW' ' '.

  • perform bdc_dynpro using: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'BDC_OKCODE' '=EXEC'.

*Italian upload version -> remove the following line for Germ. version:

PERFORM bdc_field USING: 'BDC_OKCODE' '/00'.

w_mode = p_dismod.

  • currently w_mode and p_dismod are set to the same value:

  • foregroud, background or error. But it could also be set to differnt

  • values: Foreground for upload clipboard,

CALL TRANSACTION 'ML81' USING bdcdata MODE w_mode UPDATE c_update

MESSAGES INTO bdcmsgcoll.

ENDFORM. " CALL_TRANSACTION_UPLOAD

*&----


*

*& Form BDC_DYNPRO

*&----


*

FORM bdc_dynpro

USING program TYPE c

dynpro TYPE c.

*

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. " BDC_DYNPRO

*&----


*

*& Form BDC_FIELD

*&----


*

FORM bdc_field

USING fnam TYPE c

fval TYPE c.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM. " BDC_FIELD

*&----


*

*& Form UPLOAD_TEXTS

*&----


*

FORM upload_texts.

DATA l_lblni LIKE essr-lblni.

DATA l_tabix_header_start LIKE sy-tabix.

DATA l_tabix_item_start LIKE sy-tabix.

DATA: p(2) TYPE c.

DATA: w LIKE sy-index.

DATA: w_field(20) TYPE c.

DATA: l_ext_line_save LIKE t_itemtext-ext_line.

DATA: l_ext_linno_save LIKE t_itemtext-ext_linno.

DATA: l_extrow(10)." like ml_esll-extrow.

DATA: l_messg LIKE message.

DATA: l_msgno LIKE sy-msgno.

*only for test cases since data file is not correct:

  • read table t_headertext with key ext_number = t_bapiessrc-ref_doc_no.

READ TABLE t_headertext WITH KEY ext_number = t_bapiessrc-ext_number

BINARY SEARCH.

*only for test cases since data file is not correct:END

IF NOT sy-subrc IS INITIAL.

  • MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

  • WITH text-202.

WRITE: / text-202.

EXIT.

ENDIF.

l_tabix_header_start = sy-tabix.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_lblni

  • where xblnr = t_headertext-ext_number.

WHERE user1 = t_headertext-ext_number

AND loekz = ' '.

IF NOT sy-subrc IS INITIAL.

  • MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

  • WITH text-203.

WRITE: / text-203.

EXIT.

ENDIF.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

PERFORM bdc_dynpro USING 'RM11RL00' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.

PERFORM bdc_field USING 'S_LBLNI-LOW' l_lblni. " '1000001748'.

PERFORM bdc_field USING 'BDC_CURSOR' 'P_LIST'.

PERFORM bdc_field USING 'P_LIST' ' '.

PERFORM bdc_field USING 'P_DIRECT' 'X'.

PERFORM bdc_field USING 'P_LISTU' ' '.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXT'.

  • perform bdc_field using 'ESSR-TXZ01' t_headertext-txline(40).

PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.

CLEAR w.

ADD 1 TO w.

LOOP AT t_headertext FROM l_tabix_header_start.

  • Is t_bapiessrc-ext_number really filled?

IF t_headertext-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

ADD 1 TO w.

UNPACK w TO p.

CLEAR w_field.

w_field+00(17) = 'RSTXT-TXPARGRAPH('.

w_field+17(02) = p.

w_field+19(01) = ')'.

PERFORM bdc_field USING w_field t_headertext-txpargraph.

CLEAR w_field.

w_field+00(13) = 'RSTXT-TXLINE('.

w_field+13(02) = p.

w_field+15(01) = ')'.

PERFORM bdc_field USING w_field t_headertext-txline .

  • delete line from internal table so that Upload Texts is not

  • processed twice when perform_upload_texts is called without up-

  • loading services:

DELETE t_headertext.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SERV'.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.

READ TABLE t_itemtext WITH KEY

ext_number = t_bapiessrc-ext_number.

l_tabix_item_start = sy-tabix.

CLEAR l_ext_line_save.

LOOP AT t_itemtext FROM l_tabix_item_start.

IF t_itemtext-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

SHIFT t_itemtext-ext_line RIGHT DELETING TRAILING space.

TRANSLATE t_itemtext-ext_line USING ' 0'.

IF ( t_itemtext-ext_line NE l_ext_line_save )

OR ( t_itemtext-ext_linno NE l_ext_linno_save ).

***find line number:

  • break michalska.

SELECT SINGLE extrow FROM ml_esll INTO l_extrow

WHERE extrow = t_itemtext-ext_linno

AND srvpos = t_itemtext-ext_line

AND ebeln = l_lblni.

IF NOT sy-subrc IS INITIAL.

CONTINUE.

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_extrow.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ZLT'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESLL-EXTROW(01)'.

PERFORM bdc_field USING 'RM11P-SELKZ(01)' 'X'.

PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.

CLEAR w.

ADD 1 TO w.

ENDIF.

ADD 1 TO w.

UNPACK w TO p.

CLEAR w_field.

w_field+00(17) = 'RSTXT-TXPARGRAPH('.

w_field+17(02) = p.

w_field+19(01) = ')'.

PERFORM bdc_field USING w_field t_itemtext-txpargraph.

CLEAR w_field.

w_field+00(13) = 'RSTXT-TXLINE('.

w_field+13(02) = p.

w_field+15(01) = ')'.

PERFORM bdc_field USING w_field t_itemtext-txline .

l_ext_line_save = t_itemtext-ext_line.

l_ext_linno_save = t_itemtext-ext_linno.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAV'.

CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

IF sy-tabix = 1.

WRITE AT: /1 text-002,

  • write at: /1 'Log for text uploads of entry sheet ',

37 l_lblni, 48 ':'.

ENDIF.

  • check bdcmsgcoll-msgtyp = 'E' or bdcmsgcoll-msgtyp = 'A'.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDFORM. " UPLOAD_TEXTS

*&----


*

*& Form SPLIT_HEADERTEXT

*&----


*

FORM split_headertext.

DATA: l_essr_lblni LIKE essr-lblni.

CLEAR: t_headertext.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_headertext-ext_number

t_headertext-linno

t_headertext-tcode

t_headertext-recordname

t_headertext-txpargraph

t_headertext-txline

t_headertext-text_mark.

  • start of insert >>>

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_headertext-linno

IMPORTING

output = t_headertext-linno.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_headertext-ext_number.

IF sy-subrc IS INITIAL.

IF t_headertext-linno = 1.

WRITE:/ 'External SES', t_headertext-ext_number,

'is already uploaded. SES-Number: ', l_essr_lblni.

WRITE: / 'No update of this sheet-texts was accomplished!'.

ENDIF.

EXIT.

ENDIF.

ENDIF.

  • start of insert >>>

IF NOT cb_serv IS INITIAL.

" check

READ TABLE t_bapiessrc WITH KEY ext_number = t_headertext-ext_number

BINARY SEARCH.

IF sy-subrc NE 0.

EXIT.

ENDIF.

ENDIF.

  • end of insert <<<

APPEND t_headertext.

ENDFORM. " SPLIT_HEADERTEXT

*&----


*

*& Form SPLIT_ITEMTEXT

*&----


*

FORM split_itemtext.

DATA: l_essr_lblni LIKE essr-lblni.

CLEAR: t_itemtext.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_itemtext-ext_number

t_itemtext-ext_line

t_itemtext-linno

t_itemtext-tcode

t_itemtext-recordname

t_itemtext-txpargraph

t_itemtext-txline

t_itemtext-text_mark

t_itemtext-ext_linno.

  • start of insert >>>

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_itemtext-ext_linno

IMPORTING

output = t_itemtext-ext_linno.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_itemtext-ext_number.

IF sy-subrc IS INITIAL.

  • write:/ 'External SES', t_itemtext-ext_number,

  • 'is already uploaded. SES-Number: ', l_essr_lblni.

  • write: / 'No update of this sheet was accomplished!'.

EXIT.

ENDIF.

ENDIF.

APPEND t_itemtext.

ENDFORM. " SPLIT_ITEMTEXT

  • start of delete >>>

*&----


*

*& Form SPOOL_SETTINGS

*&----


*

*FORM spool_settings.

*

  • MOVE p_spnam TO list_text.

  • CALL FUNCTION 'GET_PRINT_PARAMETERS'

  • EXPORTING " destination = 'dest'

  • copies = 1

  • list_name = p_spnam

  • list_text = list_text

  • immediately = ' '

  • release = ' '

  • new_list_id = ' '

  • expiration = 9

  • line_size = 125

  • line_count = 23

  • layout = 'X_65_132'

  • sap_cover_page = ' '

  • receiver = 'SAP*'

  • department = 'System'

  • no_dialog = 'X'

  • IMPORTING

  • out_parameters = params

  • valid = valid.

*

  • IF valid <> space.

  • NEW-PAGE PRINT ON PARAMETERS params NO DIALOG.

  • ENDIF.

*ENDFORM. " SPOOL_SETTINGS

  • end of delete <<<

*&----


*

*& Form DELETE_FILES

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM delete_files.

*{ REPLACE PS010306UPGR

  • DATA: l_return.

DATA: l_return TYPE i.

DATA: fname TYPE string.

*} REPLACE

LOOP AT i_directory_sel.

  • move space to i_directory_sel-text(1).

MOVE 'X' TO i_directory_sel-text(1).

MODIFY i_directory_sel.

ENDLOOP.

*{ REPLACE

  • CLEAR i_directory_sel.

  • MOVE'Xdir_file.bat' TO i_directory_sel-text.

  • APPEND i_directory_sel.

*

  • CLEAR i_directory_sel.

  • MOVE'Xdir_file.txt' TO i_directory_sel-text.

  • APPEND i_directory_sel.

DATA: l_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'

EXPORTING

i_path = p_path

TABLES

e_directory = l_directory_list

EXCEPTIONS

OTHERS = 6.

IF sy-subrc <> 0.

LOOP AT l_directory_list.

IF l_directory_list CS 'dir_file.bat'.

CLEAR i_directory_sel.

MOVE'Xdir_file.bat' TO i_directory_sel-text.

APPEND i_directory_sel.

ELSEIF l_directory_list CS 'dir_file.txt'.

CLEAR i_directory_sel.

MOVE'Xdir_file.txt' TO i_directory_sel-text.

APPEND i_directory_sel.

ENDIF.

ENDLOOP.

ENDIF.

*}

CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'

EXPORTING

popup_title = 'Select Files for DELETION'

start_column = 10

start_row = 1

end_column = 50

end_row = 16

IMPORTING

sy_ucomm = sy-ucomm

TABLES

x_popuptext = i_directory_sel.

*Check which Files shall be uploaded:

CHECK sy-ucomm = 'OK'.

LOOP AT i_directory_sel.

CHECK i_directory_sel-text(1) = 'Y'.

CLEAR file.

CONCATENATE p_path i_directory_sel-text+1(31) INTO file.

*{ REPLACE PS010306UPGR

  • CALL FUNCTION 'WS_FILE_DELETE'

  • EXPORTING

  • FILE = FILE

  • IMPORTING

  • RETURN = L_RETURN.

fname = file.

CALL METHOD cl_gui_frontend_services=>file_delete

EXPORTING

filename = fname

CHANGING

rc = l_return

EXCEPTIONS

OTHERS = 9.

*} REPLACE

IF NOT l_return = '0'.

MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

WITH text-201 i_directory_sel-text+1(31).

ENDIF.

ENDLOOP.

ENDFORM. " DELETE_FILES

*&----


*

*& Form INCLUDE_ITALY

*&----


*

FORM include_italy.

$$- Start of INCLUDE ZXMLUU24 --$$

*----


*

  • INCLUDE ZXMLUU24 *

*----


*

*Data structure in DOC_CONTENT:

*1st letter: type - K header / P lines

*2nd letter: line number in DOC_CONTENT which belong to one data line

*3rd letter: if 'E': last line indicator for one data line

DATA doc_id LIKE sofolenti1-doc_id.

DATA l_offset TYPE i.

DATA lt_bapi_essr LIKE bapiessrc OCCURS 0.

DATA lt_bapi_esll LIKE bapiesllc OCCURS 0.

DATA lwa_bapi_essr LIKE bapiessrc.

DATA lwa_bapi_esll LIKE bapiesllc.

DATA l_zbapiesllc_chars LIKE zbapiesllc_chars.

DATA l_zbapiessrc_chars LIKE zbapiessrc_chars.

*field-symbols .

CLEAR: l_offset.

CLEAR sy-uname.

LOOP AT clbp_content.

IF clbp_content(15) CO ' 0123456789'. "Italy File Structure

READ TABLE lt_bapi_essr INDEX 1 INTO lwa_bapi_essr.

IF sy-subrc IS INITIAL.

CHECK lwa_bapi_essr-po_number = clbp_content(10).

CHECK lwa_bapi_essr-po_item = clbp_content+10(5).

ENDIF.

  • -> move fields to interface structures:

CLEAR: lwa_bapi_essr, lwa_bapi_esll.

MOVE space TO: l_zbapiesllc_chars, l_zbapiessrc_chars.

READ TABLE lt_bapi_essr WITH KEY po_number = clbp_content(10)

po_item = clbp_content+10(5)

INTO lwa_bapi_essr.

IF NOT sy-subrc IS INITIAL.

CLEAR: lwa_bapi_essr.

MOVE: clbp_content(10) TO l_zbapiessrc_chars-po_number,

clbp_content+10(5) TO l_zbapiessrc_chars-po_item,

clbp_content+15(40) TO l_zbapiessrc_chars-short_text,

clbp_content+71(8) TO l_zbapiessrc_chars-ref_date.

MOVE-CORRESPONDING l_zbapiessrc_chars TO lwa_bapi_essr.

  • start of insert >>>

IF l_zbapiessrc_chars-final EQ 'X'.

lwa_bapi_essr-fin_entry = l_zbapiessrc_chars-final.

ENDIF.

  • end of insert <<<

APPEND lwa_bapi_essr TO lt_bapi_essr.

ENDIF.

MOVE: clbp_content+79(18) TO l_zbapiesllc_chars-service,

clbp_content+98(13) TO l_zbapiesllc_chars-quantity.

MOVE-CORRESPONDING l_zbapiesllc_chars TO lwa_bapi_esll.

APPEND lwa_bapi_esll TO lt_bapi_esll.

ELSE. "SES for Germany

  • clear l_offset.

  • case clbp_content(1).

  • when 'K'.

  • assign lt_bapi_essr to <bapi_struc>.

  • assign lwa_bapi_essr to <wa_bapi_struc>.

  • when 'P'.

  • assign lt_bapi_esll to <bapi_struc>.

  • assign lwa_bapi_esll to <wa_bapi_struc>.

  • when others.

  • endcase.

  • Daten erst in die Struktur des Programms ZPLX0009 überführen und dann

  • je nach Typ move oder write in die einzelnen Felder

IF clbp_content(1) = 'K'.

MOVE clbp_content+1(246) TO l_zbapiessrc_chars.

ELSEIF clbp_content(1) = 'P'.

CASE clbp_content+1(1).

WHEN 1.

MOVE clbp_content3(243) TO l_zbapiesllc_chars16(245).

WHEN 2.

MOVE clbp_content3(243) TO l_zbapiesllc_chars261(245).

WHEN 3.

MOVE clbp_content3(243) TO l_zbapiesllc_chars506(96).

ENDCASE.

ELSEIF clbp_content(1) = 'L'.

ELSEIF clbp_content(1) = 'T'.

ENDIF.

  • l_offset = ( clbp_content+1(1) - 1 ) * 245.

IF clbp_content+2(1) = 'E' OR clbp_content(1) = 'K'.

CASE clbp_content(1).

WHEN 'K'.

MOVE-CORRESPONDING l_zbapiessrc_chars TO lwa_bapi_essr.

  • start of insert >>> "AP13022006i

IF l_zbapiessrc_chars-final EQ 'X'.

lwa_bapi_essr-fin_entry = l_zbapiessrc_chars-final.

ENDIF.

  • end of insert <<< "AP13022006i

APPEND lwa_bapi_essr TO lt_bapi_essr.

WHEN 'P'.

MOVE-CORRESPONDING l_zbapiesllc_chars TO lwa_bapi_esll.

APPEND lwa_bapi_esll TO lt_bapi_esll.

WHEN 'L'.

WHEN 'T'.

ENDCASE.

ENDIF.

ENDIF. "Country determination

ENDLOOP.

MOVE: lt_bapi_essr[] TO t_bapi_essr[],

lt_bapi_esll[] TO t_bapi_esll[].

*

$$--- End of INCLUDE ZXMLUU24 --$$

ENDFORM. " INCLUDE_ITALY

*&----


*

*& Form WRITE_PROT_TO_SPOOL

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM write_prot_to_spool.

DATA: l_message LIKE message.

DATA: l_msgno(3) TYPE n.

DATA: l_wa_sgcses_struc LIKE i_sgcses_struc.

READ TABLE output_prot WITH KEY msgid = 'SE'

msgnr = '212'.

*if t_headertext-ext_number ne t_bapiessrc-ext_number.

IF sy-subrc IS INITIAL.

APPEND LINES OF t_bapi_essr TO t_bapi_essr_log.

APPEND LINES OF t_bapi_esll TO t_bapi_esll_log.

ENDIF.

CHECK NOT sy-subrc IS INITIAL.

  • No Text Upload if SES Upload was not successful:

DELETE t_headertext WHERE ext_number = t_bapiessrc-ext_number.

IF NOT t_bapiesllc[] IS INITIAL.

FORMAT COLOR 1 INTENSIFIED ON.

WRITE AT: /1 'Ext. Communic. Num',

20 'Purchase Order', 35 'Item', 46 'Entry Sheet Text',

87 'Service Number',

111 'Quantity'.

ENDIF.

FORMAT COLOR 2 INTENSIFIED ON.

LOOP AT t_bapiesllc.

WRITE AT: /1 t_bapiessrc-ext_number,

20 t_bapiessrc-po_number,

35 t_bapiessrc-po_item,

46 t_bapiesllc-short_text,

87 t_bapiesllc-service,

106 t_bapiesllc-quantity RIGHT-JUSTIFIED.

ENDLOOP.

SKIP 1.

WRITE AT /1 'Error Messages:'.

FORMAT COLOR OFF INTENSIFIED ON.

LOOP AT output_prot.

CLEAR: l_message, l_msgno.

MOVE output_prot-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = output_prot-msgid

msgno = l_msgno

msgty = output_prot-msgtyp

msgv1 = output_prot-msgv1

msgv2 = output_prot-msgv2

msgv3 = output_prot-msgv3

msgv4 = output_prot-msgv4

IMPORTING

messg = l_message.

IF NOT output_prot-lblni IS INITIAL.

WRITE AT: /1 'Entry Sheet Number:', 22 l_message-msgtx.

ELSE.

WRITE AT: /1 output_prot-msgid(5),

6 output_prot-msgtyp,

8 l_msgno,

12 l_message-msgtx.

ENDIF.

ENDLOOP.

SKIP 3.

ENDFORM. " WRITE_PROT_TO_SPOOL

*&----


*

*& Form LOG_UPLOAD_SUCCESS

*&----


*

FORM log_upload_success.

DATA: BEGIN OF l_i_ekpo OCCURS 0,

werks LIKE ekpo-werks,

konnr LIKE ekpo-konnr,

ktpnr LIKE ekpo-ktpnr,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

txz01 LIKE ekpo-txz01,

user1 LIKE essr-user1,

lwert LIKE essr-lwert,

waers LIKE essr-waers,

END OF l_i_ekpo.

DATA: BEGIN OF l_i_kontr OCCURS 0,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

txz01 LIKE ekpo-txz01,

END OF l_i_kontr.

DATA: l_i_ekpo_2 LIKE l_i_ekpo OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF l_essr,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

lblni LIKE essr-lblni,

lwert LIKE essr-lwert,

user1 LIKE essr-user1,

waers LIKE essr-waers,

END OF l_essr.

DATA: l_t_essr LIKE l_essr OCCURS 0 WITH HEADER LINE.

DATA: l_sy_datum LIKE sy-datum.

DATA: l_sy_uname LIKE sy-uname.

MOVE sy-datum TO l_sy_datum.

MOVE sy-uname TO l_sy_uname.

IF NOT t_bapi_essr_log[] IS INITIAL.

SELECT werks konnr ktpnr ebeln ebelp FROM ekpo

INTO TABLE l_i_ekpo

FOR ALL ENTRIES IN t_bapi_essr_log

WHERE ebeln = t_bapi_essr_log-po_number

AND ebelp = t_bapi_essr_log-po_item.

IF NOT l_i_ekpo[] IS INITIAL.

SELECT ebeln ebelp txz01 FROM ekpo

INTO TABLE l_i_kontr

FOR ALL ENTRIES IN l_i_ekpo

WHERE ebeln = l_i_ekpo-konnr

AND ebelp = l_i_ekpo-ktpnr.

SORT l_i_kontr.

ENDIF.

ENDIF.

LOOP AT l_i_ekpo.

CLEAR: l_essr, l_t_essr, l_i_kontr. REFRESH l_t_essr.

  • select single ebeln ebelp max( lblni ) lwert xblnr from essr

  • into l_essr

  • where ebeln = l_i_ekpo-ebeln

  • and ebelp = l_i_ekpo-ebelp

  • and erdat = sy-datum

  • and ernam = sy-uname

  • group by ebeln ebelp "no lblni!!

  • lwert xblnr.

  • SELECT ebeln ebelp lblni lwert user1 FROM essr

SELECT ebeln ebelp lblni lwert user1 waers FROM essr

INTO TABLE l_t_essr

WHERE ebeln = l_i_ekpo-ebeln

AND ebelp = l_i_ekpo-ebelp

AND erdat = l_sy_datum

AND ernam = l_sy_uname.

IF sy-subrc IS INITIAL.

SORT l_t_essr BY lblni DESCENDING.

  • read table l_t_essr index 1 into l_essr.

LOOP AT l_t_essr.

READ TABLE t_bapi_essr_log WITH KEY po_number = l_i_ekpo-ebeln

po_item = l_i_ekpo-ebelp

ext_number = l_t_essr-user1.

IF sy-subrc IS INITIAL.

MOVE: l_t_essr-lwert TO l_i_ekpo-lwert,

l_t_essr-waers TO l_i_ekpo-waers,

l_t_essr-user1 TO l_i_ekpo-user1.

  • modify l_i_ekpo.

DELETE t_bapi_essr_log WHERE po_number = l_i_ekpo-ebeln

AND po_item = l_i_ekpo-ebelp

AND ext_number = l_t_essr-user1.

APPEND l_i_ekpo TO l_i_ekpo_2.

ENDIF.

ENDLOOP.

ELSE.

DELETE l_i_ekpo.

ENDIF.

ENDLOOP.

CLEAR l_i_ekpo.

REFRESH l_i_ekpo.

MOVE l_i_ekpo_2[] TO l_i_ekpo[].

IF l_i_ekpo[] IS INITIAL.

WRITE AT: /1 'No data uploaded.'.

ELSE.

FORMAT COLOR 1 INTENSIFIED ON.

WRITE AT: /1 'Plant', 7 'Contract', 18 'Item',

29 'Contract Item Description',

69 'Purch.Ord.',

81 'Item', 87 'Reference', 113 'Value '.

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

SDN -

-


This is the final Internal table Here u have to add field after 105

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

LOOP AT l_i_ekpo.

READ TABLE l_i_kontr WITH KEY ebeln = l_i_ekpo-konnr

ebelp = l_i_ekpo-ktpnr

BINARY SEARCH.

FORMAT COLOR 2 INTENSIFIED ON.

WRITE AT: /1 l_i_ekpo-werks, 7 l_i_ekpo-konnr, 18 l_i_ekpo-ktpnr,

  • 29 l_i_ekpo-txz01,

29 l_i_kontr-txz01,

69 l_i_ekpo-ebeln, 81 l_i_ekpo-ebelp,

  • 87 l_i_ekpo-user1, 105 l_i_ekpo-lwert. "SG24082007d

87 l_i_ekpo-user1. "SG24082007i

WRITE AT: 105 l_i_ekpo-lwert CURRENCY l_i_ekpo-waers. "SG24082007i

ENDFORM. " LOG_UPLOAD_SUCCESS

  • start of insert >>> "AP13022007i

*&----


*

*& Form release_ses

*&----


*

FORM release_ses.

DATA: l_frgce LIKE zpl_ses_relcodes-frgce,

s_ekpo TYPE t_ekpo,

l_msgno TYPE sy-msgno,

l_messg LIKE message.

CHECK NOT l_ses_no IS INITIAL.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

WRITE: / text-206.

READ TABLE i_ekpo INTO s_ekpo WITH KEY ebeln = t_bapiessrc-po_number

ebelp = t_bapiessrc-po_item.

IF sy-subrc NE 0.

WRITE AT: /3 text-204.

EXIT.

ENDIF.

SELECT SINGLE frgce

INTO l_frgce

FROM zpl_ses_relcodes

WHERE bname EQ sy-uname

AND werks EQ s_ekpo-werks.

IF sy-subrc NE 0 OR l_frgce IS INITIAL.

WRITE AT: /3 text-204.

WRITE AT: /3 text-205.

EXIT.

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SELP'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0340'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11R-LBLNI'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

PERFORM bdc_field USING 'RM11R-LBLNI' l_ses_no.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=AKCH'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESSR-TXZ01'.

PERFORM bdc_field USING 'BDC_OKCODE' '=RSET'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11R-FRGCE'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

PERFORM bdc_field USING 'RM11R-FRGCE' l_frgce.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0110'.

PERFORM bdc_field USING 'BDC_CURSOR' 'IMKPF-BLDAT'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

CALL TRANSACTION 'ML81N' USING bdcdata

MODE w_mode

UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDFORM. " release_ses

*&----


*

*& Form find_ses_number

*&----


*

FORM find_ses_number .

CLEAR l_ses_no.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_ses_no

WHERE user1 = t_bapiessrc-ext_number

AND loekz = ' '.

IF sy-subrc NE 0.

WRITE: / text-206.

WRITE: / text-204.

ENDIF.

ENDFORM. " find_ses_number

*&----


*

*& Form select_additional_data

*&----


*

FORM select_additional_data.

DATA: lines TYPE i.

DESCRIBE TABLE t_bapiessrc LINES lines.

CHECK lines NE 0.

SELECT ebeln ebelp werks packno

INTO TABLE i_ekpo

FROM ekpo

FOR ALL ENTRIES IN t_bapiessrc

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

ENDFORM. " select_additional_data

*&----


*

*& Form check_estimated_value

*&----


*

FORM check_estimated_value.

DATA: s_ekpo TYPE t_ekpo,

l_mesg(200),

l_commitment LIKE esuh-commitment,

l_actvalue LIKE esuh-actvalue,

l_exc_value LIKE esuh-commitment,

l_tmptext1(30),

l_tmptext2(30),

l_waers LIKE esuh-waers.

READ TABLE i_ekpo INTO s_ekpo WITH KEY ebeln = t_bapiessrc-po_number

ebelp = t_bapiessrc-po_item.

CHECK sy-subrc EQ 0.

" check estimated value

  • SELECT SINGLE commitment actvalue

  • INTO (l_commitment, l_actvalue)

SELECT SINGLE commitment actvalue waers

INTO (l_commitment, l_actvalue, l_waers)

FROM esuh

WHERE packno = s_ekpo-packno.

CHECK sy-subrc EQ 0.

IF l_actvalue > l_commitment.

l_exc_value = l_actvalue - l_commitment.

WRITE: l_commitment TO l_tmptext1

CURRENCY l_waers,

l_exc_value TO l_tmptext2

CURRENCY l_waers.

CONCATENATE text-207 l_tmptext1 text-208

l_tmptext2 text-209 INTO l_mesg

SEPARATED BY space.

CONDENSE l_mesg.

WRITE: / l_mesg.

ENDIF.

ENDFORM. " check_estimated_value

  • end of insert <<<

  • begin of insert >> SG24082007i

FORM change_account.

DATA: i_sakto TYPE STANDARD TABLE OF ekkn-sakto,

l_sakto TYPE ekkn-sakto,

l_line(10) TYPE c,

l_msgno TYPE sy-msgno,

l_messg LIKE message,

p(2) TYPE c,

w LIKE sy-index,

w_field(20) TYPE c.

CLEAR l_ses_no.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_ses_no

WHERE user1 = t_bapiessrc-ext_number

AND loekz = ' '.

IF sy-subrc EQ 0.

SELECT sakto FROM ekkn

INTO TABLE i_sakto

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

IF sy-subrc EQ 0.

PERFORM bdc_dynpro USING 'RM11RL00' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.

PERFORM bdc_field USING 'S_LBLNI-LOW' l_ses_no.

PERFORM bdc_field USING 'P_LIST' ' '.

PERFORM bdc_field USING 'P_DIRECT' 'X'.

PERFORM bdc_field USING 'P_LISTU' ' '.

PERFORM bdc_field USING 'BDC_CURSOR' 'P_DIRECT'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SERV'.

LOOP AT t_bapiesllc WHERE ext_number EQ t_bapiessrc-ext_number.

l_line = t_bapiesllc-line_no.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'BDC_OKCODE' '=CONT'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_line.

PERFORM bdc_dynpro USING 'SAPLMLSK' '0200'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESKN-SAKTO(01)'.

PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.

CLEAR: p, w.

LOOP AT i_sakto INTO l_sakto.

ADD 1 TO w.

CLEAR: w_field, p.

UNPACK w TO p.

w_field+00(11) = 'ESKN-SAKTO('.

w_field+11(02) = p.

w_field+13(01) = ')'.

PERFORM bdc_field USING w_field l_sakto.

ENDLOOP.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESLL-KTEXT1(01)'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAV'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_line.

CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

IF sy-tabix = 1.

WRITE AT: /1 text-210.

ENDIF.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM. "change_account

waiting for your reply.

thanking you in anticipation.

Hi SDN

i have a small problem where iam unable to add fields in the final internal table

i have to add two fields i.e., COMMITMENT AND ACTVALUE from ESUH TABLE

AND the final internal table is l_i_ekpo.

we have to add only two fields COMMITMENT and a ....variable = COMMITMENT - ACTVALUE. which is already done in the program.

here iam attaching a program.

TABLES: ekpo.

DATA: i_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.

DATA: i_directory_sel LIKE popuptext OCCURS 0 WITH HEADER LINE.

*{ INSERT PS010306UPGR

CLASS cl_abap_char_utilities DEFINITION LOAD.

*} INSERT

DATA: BEGIN OF tab,

*{ REPLACE PS010306UPGR

  • T(1) TYPE X VALUE '09', "HEX!

t(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab, "Unicode

*} REPLACE

END OF tab.

DATA: ekpo_konnr LIKE ekpo-konnr.

DATA: ekpo_ktpnr LIKE ekpo-ktpnr.

DATA: BEGIN OF t_bapiessrc OCCURS 0.

INCLUDE STRUCTURE zbapiessrc_chars.

DATA: END OF t_bapiessrc.

DATA: t_bapiessrc_tab(301) OCCURS 0." with header line.

DATA: wa_bapiessrc_tab(301).

DATA: BEGIN OF t_headertext OCCURS 0,

ext_number LIKE zbapiessrc_chars-ext_number,

linno(4) TYPE n,

tcode(20),

recordname(30),

txpargraph(2),

txline(72),

text_mark,

END OF t_headertext.

DATA: BEGIN OF t_itemtext OCCURS 0,

ext_number LIKE zbapiessrc_chars-ext_number,

ext_line(18),

linno(4) TYPE n,

tcode(20),

recordname(30),

txpargraph(2),

txline(72),

text_mark,

ext_linno(6),

END OF t_itemtext.

DATA: t_headertext_tab(180) OCCURS 0.

DATA: wa_headertext_tab(180).

DATA: t_itemtext_tab(190) OCCURS 0.

DATA: wa_itemtext_tab(190).

DATA: BEGIN OF t_bapiesllc OCCURS 0.

  • ext_number like bapiessrc-ext_number.

INCLUDE STRUCTURE zbapiesllc_chars.

DATA: END OF t_bapiesllc.

DATA: t_bapiesllc_tab(650) OCCURS 0." with header line.

DATA: wa_bapiesllc_tab(650).

DATA: no_of_files LIKE sy-index.

DATA: perc_uploaded TYPE i.

DATA: text_uploaded(50).

DATA: text_fi_not_upl1(30), text_fi_not_upl2(30).

DATA: continue_yn.

DATA: file TYPE localfile.

FIELD-SYMBOLS .

DATA: BEGIN OF clbp_content OCCURS 0.

INCLUDE STRUCTURE solisti1.

DATA: END OF clbp_content.

DATA w_mode VALUE 'A'.

CONSTANTS: c_update VALUE 'S'.

DATA: BEGIN OF bdcdata OCCURS 0. " BDC Table

INCLUDE STRUCTURE bdcdata.

DATA: END OF bdcdata.

DATA: BEGIN OF bdcmsgcoll OCCURS 0. " BDC Messages

INCLUDE STRUCTURE bdcmsgcoll.

DATA: END OF bdcmsgcoll.

DATA params LIKE pri_params.

DATA list_text LIKE pri_params-prtxt.

DATA: days(1) TYPE n VALUE 2,

count(3) TYPE n VALUE 1,

valid TYPE c.

DATA t_bapi_essr LIKE bapiessrc OCCURS 0.

DATA t_bapi_essr_log LIKE bapiessrc OCCURS 0 WITH HEADER LINE.

DATA t_bapi_esll LIKE bapiesllc OCCURS 0.

DATA t_bapi_esll_log LIKE bapiesllc OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF output_prot OCCURS 0.

INCLUDE STRUCTURE essr.

INCLUDE STRUCTURE bdcmsgcoll.

DATA: END OF output_prot.

DATA: BEGIN OF i_sgcses_struc OCCURS 0,

po_number LIKE zbapiessrc_chars-po_number,

po_item LIKE zbapiessrc_chars-po_item,

short_text LIKE zbapiessrc_chars-short_text,

xblnr LIKE essr-xblnr,

ref_date LIKE zbapiessrc_chars-ref_date,

service LIKE zbapiesllc_chars-service,

flag,

quantity LIKE zbapiesllc_chars-quantity,

final,

END OF i_sgcses_struc.

  • start of insert >>>

DATA: l_ses_no LIKE essr-lblni.

TYPES: BEGIN OF t_ekpo,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

werks LIKE ekpo-werks,

packno LIKE ekpo-packno,

END OF t_ekpo.

DATA: i_ekpo TYPE STANDARD TABLE OF t_ekpo.

  • end of insert <<<

$$----

-


S E L E C T I O N S C R E E N -

-


*

PARAMETERS: p_path TYPE localfile DEFAULT

'C: empBasellInterfacesSesSES-Daten'.

***parameters: p_dismod type ctu_mode default 'A'.

PARAMETERS: p_dismod TYPE ctu_mode DEFAULT 'E'.

PARAMETERS: p_spnam TYPE tsp01-rq2name DEFAULT 'SES_UPL.....'

OBLIGATORY.

PARAMETERS: cb_serv AS CHECKBOX DEFAULT 'X'.

PARAMETERS: cb_text AS CHECKBOX DEFAULT 'X'.

PARAMETERS: cb_chck AS CHECKBOX DEFAULT 'X'.

$$----

-


A T S E L E C T I O N S C R E E N -

-


*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.

DATA: len TYPE i,

testchar(1).

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

EXPORTING

mask = 'C:*.txt'

static = 'X'

CHANGING

file_name = p_path.

DESCRIBE FIELD p_path LENGTH len IN CHARACTER MODE.

DO len TIMES.

len = len - 1.

testchar = p_path+len(1).

IF testchar = ''.

len = len + 1.

p_path = p_path(len).

EXIT.

ENDIF.

ENDDO.

$$----

-


S T A R T O F S E L E C T I O N -

-


*

START-OF-SELECTION.

PERFORM select_files.

  • PERFORM spool_settings.

PERFORM upload_files.

PERFORM select_additional_data.

$$----

-


E N D O F S E L E C T I O N -

-


*

END-OF-SELECTION.

  • PERFORM spool_settings.

CLEAR: perc_uploaded, no_of_files, text_uploaded.

DESCRIBE TABLE t_bapiessrc LINES no_of_files.

  • Loop over header-records: for each header-record one call transaction:

LOOP AT t_bapiessrc.

perc_uploaded = ( 100 * sy-tabix ) / no_of_files.

IF cb_serv = 'X'.

PERFORM prepare_clipboard.

  • Upload Service Entry Sheets:

PERFORM call_transaction_upload.

  • Italian Version begin

IMPORT output_prot FROM MEMORY ID 'OUT_PROT'.

PERFORM write_prot_to_spool.

FREE MEMORY ID 'OUT_PROT'.

REFRESH: output_prot.

  • Italian Version end

PERFORM find_ses_number.

PERFORM check_estimated_value.

ENDIF.

IF cb_text = 'X'.

  • Upload SES Texts:

PERFORM upload_texts.

ENDIF.

  • start of insert >>>

PERFORM change_account.

IF cb_serv = 'X'.

PERFORM release_ses.

ENDIF.

  • end of insert <<<

ENDLOOP.

  • In case only text and no services shall be uploaded:

IF NOT cb_text IS INITIAL.

  • In case also services are uploaded this loop won't apply cause

  • t_headertext-entries are deleted after they were processed in the

  • loop above!

LOOP AT t_headertext.

MOVE t_headertext-ext_number TO t_bapiessrc-ext_number.

*only for test cases since data file is not correct:

  • move t_headertext-ext_number to t_bapiessrc-ref_doc_no.

*only for test cases since data file is not correct:END

PERFORM upload_texts.

ENDLOOP.

ENDIF.

PERFORM log_upload_success.

  • NEW-PAGE PRINT OFF.

PERFORM delete_files.

  • WRITE: / text-001.

  • write: / 'Check spools for correct processing (Transaction SP01)!'.

$$----

-


T O P O F P A G E -

-


*

TOP-OF-PAGE.

*--at user-command--


*

AT USER-COMMAND.

*--top of page-during line selection--


*

TOP-OF-PAGE DURING LINE-SELECTION.

$$----

-


F O R M - R O U T I N E S -

-


*

*&----


*

*& Form SPLIT_BAPIESSRC

*&----


*

FORM split_bapiessrc.

DATA: l_score_time(3),

l_score_qual(3),

l_essr_lblni LIKE essr-lblni.

  • start of insert >>>

TABLES: esuc.

DATA: l_packno LIKE ekpo-packno.

  • end of insert <<<

CLEAR: t_bapiessrc, ekpo_konnr, ekpo_ktpnr, ekpo.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_bapiessrc-sheet_no t_bapiessrc-ext_number

t_bapiessrc-person_int t_bapiessrc-person_ext

t_bapiessrc-location t_bapiessrc-ref_date

t_bapiessrc-begdate t_bapiessrc-enddate

t_bapiessrc-pckg_no t_bapiessrc-short_text

  • Only for testing due to wrong data

t_bapiessrc-po_number t_bapiessrc-po_item

  • ekpo_konnr ekpo_ktpnr

  • Only for testing due to wrong data END

t_bapiessrc-block_ind t_bapiessrc-score_time

t_bapiessrc-score_qual t_bapiessrc-doc_date

t_bapiessrc-post_date t_bapiessrc-ref_doc_no

  • Only for testing due to wrong data

  • t_bapiessrc-po_number t_bapiessrc-po_item

  • Only for testing due to wrong data END

t_bapiessrc-accasscat t_bapiessrc-comm_no

t_bapiessrc-user_field t_bapiessrc-acceptance

  • Only for testing due to wrong data

ekpo_konnr ekpo_ktpnr t_bapiessrc-final.

  • Only for testing due to wrong data END

MOVE '0000000001' TO t_bapiessrc-pckg_no.

SHIFT t_bapiessrc-po_item RIGHT DELETING TRAILING space.

TRANSLATE t_bapiessrc-po_item USING ' 0'.

  • start of delete >>>

  • IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.

  • SELECT SINGLE konnr ktpnr FROM ekpo

  • INTO (ekpo-konnr, ekpo-ktpnr)

  • WHERE ebeln = t_bapiessrc-po_number

  • AND ebelp = t_bapiessrc-po_item.

  • IF NOT sy-subrc IS INITIAL.

  • WRITE:/ text-101, t_bapiessrc-ext_number,

  • text-102,

  • t_bapiessrc-po_number,

  • text-103,

  • t_bapiessrc-po_item,

  • text-104.

  • WRITE: / text-105.

  • EXIT.

  • ELSE.

  • IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.

  • WRITE:/ text-101, t_bapiessrc-ext_number,

  • text-106,

  • ekpo_konnr, '/',

  • ekpo_ktpnr,

  • text-107,

  • t_bapiessrc-po_number,

  • text-103, t_bapiessrc-po_item, ')'.

  • WRITE: / text-105.

  • EXIT.

  • ENDIF.

  • ENDIF.

  • ENDIF.

  • end of delete <<<

  • start of insert >>>

" check contract number

IF NOT ekpo_konnr IS INITIAL AND NOT ekpo_ktpnr IS INITIAL.

SELECT SINGLE konnr ktpnr packno

FROM ekpo

INTO (ekpo-konnr, ekpo-ktpnr, l_packno)

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

IF sy-subrc NE 0.

" no corresponding PO, no update will be performed

WRITE:/ text-101, t_bapiessrc-ext_number,

text-102,

t_bapiessrc-po_number,

text-103,

t_bapiessrc-po_item,

text-104.

WRITE: / text-105.

EXIT.

ELSE.

" check contract number against table ESUC first.

SELECT SINGLE *

FROM esuc

WHERE packno EQ l_packno

AND ebeln EQ ekpo_konnr

AND ebelp EQ ekpo_ktpnr.

IF sy-subrc NE 0.

" check against PO line

IF ekpo_konnr NE ekpo-konnr OR ekpo_ktpnr NE ekpo-ktpnr.

WRITE:/ text-101, t_bapiessrc-ext_number,

text-106,

ekpo_konnr, '/',

ekpo_ktpnr,

text-107,

t_bapiessrc-po_number,

text-103, t_bapiessrc-po_item, ')'.

WRITE: / text-105.

EXIT.

ENDIF.

ENDIF.

ENDIF.

ENDIF.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_bapiessrc-ext_number.

IF sy-subrc IS INITIAL.

WRITE:/ 'External SES', t_bapiessrc-ext_number,

'is already uploaded. SES-Number: ', l_essr_lblni.

WRITE: / 'No update of this sheet was accomplished!'.

EXIT.

ENDIF.

ENDIF.

APPEND t_bapiessrc.

ENDFORM. " SPLIT_BAPIESSRC

*&----


*

*& Form SPLIT_BAPIESLLC

*&----


*

FORM split_bapiesllc.

DATA: l_outl_level(3), l_ovf_tol(3), l_price_unit(5), l_gr_price(23),

l_target_val(23), l_userf2_num(13), l_quantity(13),

l_form_val1(13), l_form_val2(13), l_form_val3(13),

l_form_val4(13), l_form_val5(13), l_ext_number(16).

CLEAR: t_bapiesllc.

  • TRANSLATE doc_content-line USING '#;'.

SPLIT AT '§' INTO

t_bapiesllc-ext_number

t_bapiesllc-pckg_no t_bapiesllc-line_no

t_bapiesllc-ext_line t_bapiesllc-outl_level

t_bapiesllc-outl_no t_bapiesllc-outl_ind

t_bapiesllc-subpckg_no t_bapiesllc-service

t_bapiesllc-serv_type t_bapiesllc-edition

t_bapiesllc-ssc_item t_bapiesllc-ext_serv

t_bapiesllc-quantity t_bapiesllc-base_uom

t_bapiesllc-uom_iso t_bapiesllc-ovf_tol

t_bapiesllc-ovf_unlim t_bapiesllc-price_unit

t_bapiesllc-gr_price t_bapiesllc-from_line

t_bapiesllc-to_line t_bapiesllc-short_text

t_bapiesllc-distrib t_bapiesllc-pers_no

t_bapiesllc-wagetype t_bapiesllc-pln_pckg

t_bapiesllc-pln_line t_bapiesllc-con_pckg

t_bapiesllc-con_line t_bapiesllc-tmp_pckg

t_bapiesllc-tmp_line t_bapiesllc-ssc_lim

t_bapiesllc-limit_line t_bapiesllc-target_val

t_bapiesllc-basline_no t_bapiesllc-basic_line

t_bapiesllc-alternat t_bapiesllc-bidder

t_bapiesllc-supp_line t_bapiesllc-open_qty

t_bapiesllc-inform t_bapiesllc-blanket

t_bapiesllc-eventual t_bapiesllc-tax_code

t_bapiesllc-taxjurcode t_bapiesllc-price_chg

t_bapiesllc-matl_group t_bapiesllc-date

t_bapiesllc-begintime t_bapiesllc-endtime

t_bapiesllc-extpers_no t_bapiesllc-formula

t_bapiesllc-form_val1 t_bapiesllc-form_val2

t_bapiesllc-form_val3 t_bapiesllc-form_val4

t_bapiesllc-form_val5 t_bapiesllc-userf1_num

t_bapiesllc-userf2_num t_bapiesllc-userf1_txt

t_bapiesllc-userf2_txt t_bapiesllc-hi_line_no.

  • start of insert >>> "AP13022007i

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_bapiesllc-line_no

IMPORTING

output = t_bapiesllc-line_no.

  • end of insert <<< "AP13022007i

TRANSLATE t_bapiesllc-quantity USING ',.'.

MOVE '0000000002' TO t_bapiesllc-pckg_no. "TS20082002

APPEND t_bapiesllc.

ENDFORM. " SPLIT_BAPIESLLC

*&----


*

*& Form SELECT_FILES

*&----


*

FORM select_files.

CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'

EXPORTING

i_path = p_path

  • IMPORTING

  • E_PURE_PATH =

TABLES

e_directory = i_directory_list

EXCEPTIONS

download = 1

upload = 2

execute = 3

directory_not_exist = 4

directory = 5

OTHERS = 6

.

IF sy-subrc <> 0.

*{ REPLACE PS010306UPGR

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

MESSAGE w208(00) WITH 'Enter existing directory'(003).

*} REPLACE

EXIT.

ENDIF.

LOOP AT i_directory_list.

CHECK i_directory_list(1) CA 'KPLT'.

  • check i_directory_list cs '.XLS' or i_directory_list cs '.TXT'.

CHECK i_directory_list CS '.TXT'.

CLEAR i_directory_sel.

MOVE 'X' TO i_directory_sel-text(1).

MOVE i_directory_list(79) TO i_directory_sel-text+1(79).

APPEND i_directory_sel.

ENDLOOP.

CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'

EXPORTING

popup_title = 'Select Files for SES-Upload'

start_column = 10

start_row = 1

end_column = 50

end_row = 16

IMPORTING

sy_ucomm = sy-ucomm

TABLES

x_popuptext = i_directory_sel.

*Check which Files shall be uploaded:

LOOP AT i_directory_sel.

CHECK i_directory_sel-text(1) NE 'Y'.

DELETE i_directory_sel.

ENDLOOP.

SORT i_directory_sel.

DESCRIBE TABLE i_directory_sel LINES no_of_files.

ENDFORM. " SELECT_FILES

*&----


*

*& Form UPLOAD_FILES

*&----


*

FORM upload_files.

*{ INSERT PS010306UPGR

DATA: fname TYPE string.

*} INSERT

LOOP AT i_directory_sel.

CLEAR: file.

UNASSIGN: .

perc_uploaded = ( 100 * sy-tabix ) / no_of_files.

CONCATENATE i_directory_sel-text+1(31) 'uploaded from disk'

INTO text_uploaded

SEPARATED BY space.

CONCATENATE p_path i_directory_sel-text+1(31) INTO file.

  • Choose the right structure for <doc_content> and <wa_doc_content>

  • depending on file type K, P, T or L via assignment of field symbols:

CASE i_directory_sel-text+1(1).

WHEN 'K'. "Kopfdaten

ASSIGN t_bapiessrc_tab TO .

ENDCASE.

*{ REPLACE PS010306UPGR

  • CALL FUNCTION 'WS_UPLOAD'

  • EXPORTING

  • FILENAME = FILE

  • TABLES

  • DATA_TAB = <DOC_CONTENT>

  • EXCEPTIONS

  • CONVERSION_ERROR = 1

  • FILE_OPEN_ERROR = 2

  • FILE_READ_ERROR = 3

  • INVALID_TABLE_WIDTH = 4

  • INVALID_TYPE = 5

  • NO_BATCH = 6

  • UNKNOWN_ERROR = 7

  • GUI_REFUSE_FILETRANSFER = 8

  • CUSTOMER_ERROR = 9

  • OTHERS = 10.

fname = file.

CALL METHOD cl_gui_frontend_services=>gui_upload

EXPORTING

filename = fname

CHANGING

data_tab = 0.

CLEAR: text_fi_not_upl1, text_fi_not_upl2, continue_yn.

CONCATENATE 'File' i_directory_sel-text+1(21) ': upload failed!'

INTO text_fi_not_upl1 SEPARATED BY space.

MOVE 'Continue Program?' TO text_fi_not_upl2.

CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'

EXPORTING

defaultoption = 'N'

textline1 = text_fi_not_upl1

textline2 = text_fi_not_upl2

titel = 'Upload Failed'

start_column = 25

start_row = 6

cancel_display = ' '

IMPORTING

answer = continue_yn.

IF continue_yn = 'N'.

EXIT.

ENDIF.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ELSE.

  • Move uploaded File records line by line into correct internal table:

  • t_bapiessrc for K__.txt

  • t_bapiesllc for P__.txt

  • t_headertext for T__.txt

  • t_itemtext for L__.txt

LOOP AT .

IF NOT sy-subrc IS INITIAL. EXIT. ENDIF.

ENDDO.

CASE i_directory_sel-text+1(1).

WHEN 'K'. "Kopfdaten

PERFORM split_bapiessrc.

WHEN 'T'.

PERFORM split_headertext.

WHEN 'P'.

PERFORM split_bapiesllc.

WHEN 'L'.

PERFORM split_itemtext.

ENDCASE.

ENDLOOP.

ENDIF.

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = perc_uploaded

text = text_uploaded.

ENDLOOP.

SORT t_bapiessrc BY ext_number.

SORT t_headertext BY ext_number linno.

  • SORT t_bapiesllc BY ext_number. "

SORT t_bapiesllc BY ext_number pckg_no line_no.

      • sort t_bapiesllc by ext_number line_no.

SORT t_itemtext BY ext_number ext_linno ext_line linno.

ENDFORM. " UPLOAD_FILES

*&----


*

*& Form PREPARE_CLIPBOARD

*&----


*

FORM prepare_clipboard.

CLEAR: clbp_content.

REFRESH: clbp_content.

DATA: l_line TYPE n.

DATA: l_tabix LIKE sy-tabix.

CLEAR l_tabix.

*Assemble the File-Structure out of the internal tables t_bapiessrc

  • and t_bapiesllc which is expected by the user exit

  • exit_saplmlsx_002 and move it to the clipboard:

MOVE 'K' TO clbp_content(1). "Flag for header record

MOVE t_bapiessrc TO clbp_content+1(246).

APPEND clbp_content.

READ TABLE t_bapiesllc WITH KEY ext_number = t_bapiessrc-comm_no

BINARY SEARCH.

CHECK sy-subrc IS INITIAL.

MOVE sy-tabix TO l_tabix.

  • insert dummy row for connection between pach_no and sub_packno:

CLEAR l_line.

CLEAR: clbp_content, t_bapiesllc.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1). "Flag for service-record

MOVE l_line TO clbp_content+1(1).

MOVE '0000000001' TO t_bapiesllc-pckg_no.

MOVE '0000000002' TO t_bapiesllc-subpckg_no.

WRITE t_bapiesllc16(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc261(245) TO clbp_content3(245).

APPEND clbp_content.

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

MOVE 'E' TO clbp_content+2(1).

WRITE t_bapiesllc506(27) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

  • end insert

LOOP AT t_bapiesllc FROM l_tabix.

CLEAR l_line.

CLEAR clbp_content.

IF t_bapiesllc-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1). "Flag for service-record

  • 'P'-service records are split into three clipbord-lines since

  • structure t_bapiesllc is too long for one line

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc16(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

WRITE t_bapiesllc261(245) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ADD 1 TO l_line.

MOVE 'P' TO clbp_content(1).

MOVE l_line TO clbp_content+1(1).

MOVE 'E' TO clbp_content+2(1).

WRITE t_bapiesllc506(27) TO clbp_content3(245).

APPEND clbp_content.

CLEAR clbp_content.

ENDLOOP.

******Italy version of upload

PERFORM include_italy.

  • export t_bapiessrc to memory id 'GER_ESSRC'.

  • export t_bapiesllc to memory id 'GER_ESLLC'.

EXPORT t_bapi_essr TO MEMORY ID 'GER_ESSRC'.

EXPORT t_bapi_esll TO MEMORY ID 'GER_ESLLC'.

CHECK 1 = 2.

******Italy version of upload END

CALL FUNCTION 'CLPB_EXPORT'

TABLES

data_tab = clbp_content

EXCEPTIONS

clpb_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. " PREPARE_CLIPBOARD

*&----


*

*& Form CALL_TRANSACTION_UPLOAD

*&----


*

FORM call_transaction_upload.

REFRESH bdcdata.

PERFORM bdc_dynpro USING: 'RM11RL00' '1000'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=UPL'.

PERFORM bdc_field USING: 'S_LBLNI-LOW' ' '.

PERFORM bdc_field USING: 'S_LBLNI-HIGH' ' '.

PERFORM bdc_field USING: 'P_BSTNR' ' '.

PERFORM bdc_field USING: 'S_BSTPO-LOW' ' '.

PERFORM bdc_field USING: 'S_BSTPO-HIGH' ' '.

*Italian upload version -> comments set|remove comments for Germ.Version

  • perform bdc_dynpro using: 'SAPLMLSX' '0480'.

  • perform bdc_field using: 'BDC_OKCODE' '=EXEC'.

  • perform bdc_dynpro using: 'SAPLGRAP' '0210'.

  • perform bdc_field using: 'BDC_OKCODE' '=UPL_FR_CLP'.

PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'MARKIERT' 'X'.

*Italian upload version -> comments set; END

CASE p_dismod.

WHEN 'A'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=LITE'.

WHEN 'N'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=HIND'.

WHEN 'E'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=DARK'.

ENDCASE.

  • Here the call transcation of SAP-standard takes place for creating the

  • service entry sheet

  • After SAP-standard call transaction: analyze the popup with the

*Italian upload version -> comments set|remove comments for Germ.Version

PERFORM bdc_dynpro USING: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'BDC_OKCODE' '=PRI'.

  • perform bdc_dynpro using: 'SAPLSPRI' '0100'.

  • perform bdc_field using: 'BDC_OKCODE' '=PRIN'.

  • perform bdc_field using: 'PRI_PARAMS-PLIST' p_spnam.

  • perform bdc_field using: 'PRI_PARAMS-PRIMM' ' '.

  • perform bdc_field using: 'PRI_PARAMS-PRREL' ' '.

  • perform bdc_field using: 'PRI_PARAMS-PRNEW' ' '.

  • perform bdc_dynpro using: 'SAPMSSY0' '0120'.

  • perform bdc_field using: 'BDC_OKCODE' '=EXEC'.

*Italian upload version -> remove the following line for Germ. version:

PERFORM bdc_field USING: 'BDC_OKCODE' '/00'.

w_mode = p_dismod.

  • currently w_mode and p_dismod are set to the same value:

  • foregroud, background or error. But it could also be set to differnt

  • values: Foreground for upload clipboard,

CALL TRANSACTION 'ML81' USING bdcdata MODE w_mode UPDATE c_update

MESSAGES INTO bdcmsgcoll.

ENDFORM. " CALL_TRANSACTION_UPLOAD

*&----


*

*& Form BDC_DYNPRO

*&----


*

FORM bdc_dynpro

USING program TYPE c

dynpro TYPE c.

*

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. " BDC_DYNPRO

*&----


*

*& Form BDC_FIELD

*&----


*

FORM bdc_field

USING fnam TYPE c

fval TYPE c.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

ENDFORM. " BDC_FIELD

*&----


*

*& Form UPLOAD_TEXTS

*&----


*

FORM upload_texts.

DATA l_lblni LIKE essr-lblni.

DATA l_tabix_header_start LIKE sy-tabix.

DATA l_tabix_item_start LIKE sy-tabix.

DATA: p(2) TYPE c.

DATA: w LIKE sy-index.

DATA: w_field(20) TYPE c.

DATA: l_ext_line_save LIKE t_itemtext-ext_line.

DATA: l_ext_linno_save LIKE t_itemtext-ext_linno.

DATA: l_extrow(10)." like ml_esll-extrow.

DATA: l_messg LIKE message.

DATA: l_msgno LIKE sy-msgno.

*only for test cases since data file is not correct:

  • read table t_headertext with key ext_number = t_bapiessrc-ref_doc_no.

READ TABLE t_headertext WITH KEY ext_number = t_bapiessrc-ext_number

BINARY SEARCH.

*only for test cases since data file is not correct:END

IF NOT sy-subrc IS INITIAL.

  • MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

  • WITH text-202.

WRITE: / text-202.

EXIT.

ENDIF.

l_tabix_header_start = sy-tabix.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_lblni

  • where xblnr = t_headertext-ext_number.

WHERE user1 = t_headertext-ext_number

AND loekz = ' '.

IF NOT sy-subrc IS INITIAL.

  • MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

  • WITH text-203.

WRITE: / text-203.

EXIT.

ENDIF.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

PERFORM bdc_dynpro USING 'RM11RL00' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.

PERFORM bdc_field USING 'S_LBLNI-LOW' l_lblni. " '1000001748'.

PERFORM bdc_field USING 'BDC_CURSOR' 'P_LIST'.

PERFORM bdc_field USING 'P_LIST' ' '.

PERFORM bdc_field USING 'P_DIRECT' 'X'.

PERFORM bdc_field USING 'P_LISTU' ' '.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXT'.

  • perform bdc_field using 'ESSR-TXZ01' t_headertext-txline(40).

PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.

CLEAR w.

ADD 1 TO w.

LOOP AT t_headertext FROM l_tabix_header_start.

  • Is t_bapiessrc-ext_number really filled?

IF t_headertext-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

ADD 1 TO w.

UNPACK w TO p.

CLEAR w_field.

w_field+00(17) = 'RSTXT-TXPARGRAPH('.

w_field+17(02) = p.

w_field+19(01) = ')'.

PERFORM bdc_field USING w_field t_headertext-txpargraph.

CLEAR w_field.

w_field+00(13) = 'RSTXT-TXLINE('.

w_field+13(02) = p.

w_field+15(01) = ')'.

PERFORM bdc_field USING w_field t_headertext-txline .

  • delete line from internal table so that Upload Texts is not

  • processed twice when perform_upload_texts is called without up-

  • loading services:

DELETE t_headertext.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SERV'.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.

READ TABLE t_itemtext WITH KEY

ext_number = t_bapiessrc-ext_number.

l_tabix_item_start = sy-tabix.

CLEAR l_ext_line_save.

LOOP AT t_itemtext FROM l_tabix_item_start.

IF t_itemtext-ext_number NE t_bapiessrc-ext_number.

EXIT.

ENDIF.

SHIFT t_itemtext-ext_line RIGHT DELETING TRAILING space.

TRANSLATE t_itemtext-ext_line USING ' 0'.

IF ( t_itemtext-ext_line NE l_ext_line_save )

OR ( t_itemtext-ext_linno NE l_ext_linno_save ).

***find line number:

  • break michalska.

SELECT SINGLE extrow FROM ml_esll INTO l_extrow

WHERE extrow = t_itemtext-ext_linno

AND srvpos = t_itemtext-ext_line

AND ebeln = l_lblni.

IF NOT sy-subrc IS INITIAL.

CONTINUE.

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' 'ENTER'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_extrow.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ZLT'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESLL-EXTROW(01)'.

PERFORM bdc_field USING 'RM11P-SELKZ(01)' 'X'.

PERFORM bdc_dynpro USING 'SAPLSTXX' '1100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=TXBA'.

CLEAR w.

ADD 1 TO w.

ENDIF.

ADD 1 TO w.

UNPACK w TO p.

CLEAR w_field.

w_field+00(17) = 'RSTXT-TXPARGRAPH('.

w_field+17(02) = p.

w_field+19(01) = ')'.

PERFORM bdc_field USING w_field t_itemtext-txpargraph.

CLEAR w_field.

w_field+00(13) = 'RSTXT-TXLINE('.

w_field+13(02) = p.

w_field+15(01) = ')'.

PERFORM bdc_field USING w_field t_itemtext-txline .

l_ext_line_save = t_itemtext-ext_line.

l_ext_linno_save = t_itemtext-ext_linno.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAV'.

CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

IF sy-tabix = 1.

WRITE AT: /1 text-002,

  • write at: /1 'Log for text uploads of entry sheet ',

37 l_lblni, 48 ':'.

ENDIF.

  • check bdcmsgcoll-msgtyp = 'E' or bdcmsgcoll-msgtyp = 'A'.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDFORM. " UPLOAD_TEXTS

*&----


*

*& Form SPLIT_HEADERTEXT

*&----


*

FORM split_headertext.

DATA: l_essr_lblni LIKE essr-lblni.

CLEAR: t_headertext.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_headertext-ext_number

t_headertext-linno

t_headertext-tcode

t_headertext-recordname

t_headertext-txpargraph

t_headertext-txline

t_headertext-text_mark.

  • start of insert >>>

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_headertext-linno

IMPORTING

output = t_headertext-linno.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_headertext-ext_number.

IF sy-subrc IS INITIAL.

IF t_headertext-linno = 1.

WRITE:/ 'External SES', t_headertext-ext_number,

'is already uploaded. SES-Number: ', l_essr_lblni.

WRITE: / 'No update of this sheet-texts was accomplished!'.

ENDIF.

EXIT.

ENDIF.

ENDIF.

  • start of insert >>>

IF NOT cb_serv IS INITIAL.

" check

READ TABLE t_bapiessrc WITH KEY ext_number = t_headertext-ext_number

BINARY SEARCH.

IF sy-subrc NE 0.

EXIT.

ENDIF.

ENDIF.

  • end of insert <<<

APPEND t_headertext.

ENDFORM. " SPLIT_HEADERTEXT

*&----


*

*& Form SPLIT_ITEMTEXT

*&----


*

FORM split_itemtext.

DATA: l_essr_lblni LIKE essr-lblni.

CLEAR: t_itemtext.

  • TRANSLATE doc_content-line USING '#;'. ZBAPIESSRC_CHARS

SPLIT AT '§' INTO

t_itemtext-ext_number

t_itemtext-ext_line

t_itemtext-linno

t_itemtext-tcode

t_itemtext-recordname

t_itemtext-txpargraph

t_itemtext-txline

t_itemtext-text_mark

t_itemtext-ext_linno.

  • start of insert >>>

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = t_itemtext-ext_linno

IMPORTING

output = t_itemtext-ext_linno.

  • end of insert <<<

IF cb_chck = 'X'.

SELECT SINGLE lblni FROM essr INTO l_essr_lblni

WHERE loekz = ' '

AND user1 = t_itemtext-ext_number.

IF sy-subrc IS INITIAL.

  • write:/ 'External SES', t_itemtext-ext_number,

  • 'is already uploaded. SES-Number: ', l_essr_lblni.

  • write: / 'No update of this sheet was accomplished!'.

EXIT.

ENDIF.

ENDIF.

APPEND t_itemtext.

ENDFORM. " SPLIT_ITEMTEXT

  • start of delete >>>

*&----


*

*& Form SPOOL_SETTINGS

*&----


*

*FORM spool_settings.

*

  • MOVE p_spnam TO list_text.

  • CALL FUNCTION 'GET_PRINT_PARAMETERS'

  • EXPORTING " destination = 'dest'

  • copies = 1

  • list_name = p_spnam

  • list_text = list_text

  • immediately = ' '

  • release = ' '

  • new_list_id = ' '

  • expiration = 9

  • line_size = 125

  • line_count = 23

  • layout = 'X_65_132'

  • sap_cover_page = ' '

  • receiver = 'SAP*'

  • department = 'System'

  • no_dialog = 'X'

  • IMPORTING

  • out_parameters = params

  • valid = valid.

*

  • IF valid <> space.

  • NEW-PAGE PRINT ON PARAMETERS params NO DIALOG.

  • ENDIF.

*ENDFORM. " SPOOL_SETTINGS

  • end of delete <<<

*&----


*

*& Form DELETE_FILES

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM delete_files.

*{ REPLACE PS010306UPGR

  • DATA: l_return.

DATA: l_return TYPE i.

DATA: fname TYPE string.

*} REPLACE

LOOP AT i_directory_sel.

  • move space to i_directory_sel-text(1).

MOVE 'X' TO i_directory_sel-text(1).

MODIFY i_directory_sel.

ENDLOOP.

*{ REPLACE

  • CLEAR i_directory_sel.

  • MOVE'Xdir_file.bat' TO i_directory_sel-text.

  • APPEND i_directory_sel.

*

  • CLEAR i_directory_sel.

  • MOVE'Xdir_file.txt' TO i_directory_sel-text.

  • APPEND i_directory_sel.

DATA: l_directory_list LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE.

CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'

EXPORTING

i_path = p_path

TABLES

e_directory = l_directory_list

EXCEPTIONS

OTHERS = 6.

IF sy-subrc <> 0.

LOOP AT l_directory_list.

IF l_directory_list CS 'dir_file.bat'.

CLEAR i_directory_sel.

MOVE'Xdir_file.bat' TO i_directory_sel-text.

APPEND i_directory_sel.

ELSEIF l_directory_list CS 'dir_file.txt'.

CLEAR i_directory_sel.

MOVE'Xdir_file.txt' TO i_directory_sel-text.

APPEND i_directory_sel.

ENDIF.

ENDLOOP.

ENDIF.

*}

CALL FUNCTION 'Z_SL018_POPUP_WITH_TEXT_TO_SEL'

EXPORTING

popup_title = 'Select Files for DELETION'

start_column = 10

start_row = 1

end_column = 50

end_row = 16

IMPORTING

sy_ucomm = sy-ucomm

TABLES

x_popuptext = i_directory_sel.

*Check which Files shall be uploaded:

CHECK sy-ucomm = 'OK'.

LOOP AT i_directory_sel.

CHECK i_directory_sel-text(1) = 'Y'.

CLEAR file.

CONCATENATE p_path i_directory_sel-text+1(31) INTO file.

*{ REPLACE PS010306UPGR

  • CALL FUNCTION 'WS_FILE_DELETE'

  • EXPORTING

  • FILE = FILE

  • IMPORTING

  • RETURN = L_RETURN.

fname = file.

CALL METHOD cl_gui_frontend_services=>file_delete

EXPORTING

filename = fname

CHANGING

rc = l_return

EXCEPTIONS

OTHERS = 9.

*} REPLACE

IF NOT l_return = '0'.

MESSAGE ID 'ZV' TYPE 'I' NUMBER '011'

WITH text-201 i_directory_sel-text+1(31).

ENDIF.

ENDLOOP.

ENDFORM. " DELETE_FILES

*&----


*

*& Form INCLUDE_ITALY

*&----


*

FORM include_italy.

$$- Start of INCLUDE ZXMLUU24 --$$

*----


*

  • INCLUDE ZXMLUU24 *

*----


*

*Data structure in DOC_CONTENT:

*1st letter: type - K header / P lines

*2nd letter: line number in DOC_CONTENT which belong to one data line

*3rd letter: if 'E': last line indicator for one data line

DATA doc_id LIKE sofolenti1-doc_id.

DATA l_offset TYPE i.

DATA lt_bapi_essr LIKE bapiessrc OCCURS 0.

DATA lt_bapi_esll LIKE bapiesllc OCCURS 0.

DATA lwa_bapi_essr LIKE bapiessrc.

DATA lwa_bapi_esll LIKE bapiesllc.

DATA l_zbapiesllc_chars LIKE zbapiesllc_chars.

DATA l_zbapiessrc_chars LIKE zbapiessrc_chars.

*field-symbols .

CLEAR: l_offset.

CLEAR sy-uname.

LOOP AT clbp_content.

IF clbp_content(15) CO ' 0123456789'. "Italy File Structure

READ TABLE lt_bapi_essr INDEX 1 INTO lwa_bapi_essr.

IF sy-subrc IS INITIAL.

CHECK lwa_bapi_essr-po_number = clbp_content(10).

CHECK lwa_bapi_essr-po_item = clbp_content+10(5).

ENDIF.

  • -> move fields to interface structures:

CLEAR: lwa_bapi_essr, lwa_bapi_esll.

MOVE space TO: l_zbapiesllc_chars, l_zbapiessrc_chars.

READ TABLE lt_bapi_essr WITH KEY po_number = clbp_content(10)

po_item = clbp_content+10(5)

INTO lwa_bapi_essr.

IF NOT sy-subrc IS INITIAL.

CLEAR: lwa_bapi_essr.

MOVE: clbp_content(10) TO l_zbapiessrc_chars-po_number,

clbp_content+10(5) TO l_zbapiessrc_chars-po_item,

clbp_content+15(40) TO l_zbapiessrc_chars-short_text,

clbp_content+71(8) TO l_zbapiessrc_chars-ref_date.

MOVE-CORRESPONDING l_zbapiessrc_chars TO lwa_bapi_essr.

  • start of insert >>>

IF l_zbapiessrc_chars-final EQ 'X'.

lwa_bapi_essr-fin_entry = l_zbapiessrc_chars-final.

ENDIF.

  • end of insert <<<

APPEND lwa_bapi_essr TO lt_bapi_essr.

ENDIF.

MOVE: clbp_content+79(18) TO l_zbapiesllc_chars-service,

clbp_content+98(13) TO l_zbapiesllc_chars-quantity.

MOVE-CORRESPONDING l_zbapiesllc_chars TO lwa_bapi_esll.

APPEND lwa_bapi_esll TO lt_bapi_esll.

ELSE. "SES for Germany

  • clear l_offset.

  • case clbp_content(1).

  • when 'K'.

  • assign lt_bapi_essr to <bapi_struc>.

  • assign lwa_bapi_essr to <wa_bapi_struc>.

  • when 'P'.

  • assign lt_bapi_esll to <bapi_struc>.

  • assign lwa_bapi_esll to <wa_bapi_struc>.

  • when others.

  • endcase.

  • Daten erst in die Struktur des Programms ZPLX0009 überführen und dann

  • je nach Typ move oder write in die einzelnen Felder

IF clbp_content(1) = 'K'.

MOVE clbp_content+1(246) TO l_zbapiessrc_chars.

ELSEIF clbp_content(1) = 'P'.

CASE clbp_content+1(1).

WHEN 1.

MOVE clbp_content3(243) TO l_zbapiesllc_chars16(245).

WHEN 2.

MOVE clbp_content3(243) TO l_zbapiesllc_chars261(245).

WHEN 3.

MOVE clbp_content3(243) TO l_zbapiesllc_chars506(96).

ENDCASE.

ELSEIF clbp_content(1) = 'L'.

ELSEIF clbp_content(1) = 'T'.

ENDIF.

  • l_offset = ( clbp_content+1(1) - 1 ) * 245.

IF clbp_content+2(1) = 'E' OR clbp_content(1) = 'K'.

CASE clbp_content(1).

WHEN 'K'.

MOVE-CORRESPONDING l_zbapiessrc_chars TO lwa_bapi_essr.

  • start of insert >>> "AP13022006i

IF l_zbapiessrc_chars-final EQ 'X'.

lwa_bapi_essr-fin_entry = l_zbapiessrc_chars-final.

ENDIF.

  • end of insert <<< "AP13022006i

APPEND lwa_bapi_essr TO lt_bapi_essr.

WHEN 'P'.

MOVE-CORRESPONDING l_zbapiesllc_chars TO lwa_bapi_esll.

APPEND lwa_bapi_esll TO lt_bapi_esll.

WHEN 'L'.

WHEN 'T'.

ENDCASE.

ENDIF.

ENDIF. "Country determination

ENDLOOP.

MOVE: lt_bapi_essr[] TO t_bapi_essr[],

lt_bapi_esll[] TO t_bapi_esll[].

*

$$--- End of INCLUDE ZXMLUU24 --$$

ENDFORM. " INCLUDE_ITALY

*&----


*

*& Form WRITE_PROT_TO_SPOOL

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM write_prot_to_spool.

DATA: l_message LIKE message.

DATA: l_msgno(3) TYPE n.

DATA: l_wa_sgcses_struc LIKE i_sgcses_struc.

READ TABLE output_prot WITH KEY msgid = 'SE'

msgnr = '212'.

*if t_headertext-ext_number ne t_bapiessrc-ext_number.

IF sy-subrc IS INITIAL.

APPEND LINES OF t_bapi_essr TO t_bapi_essr_log.

APPEND LINES OF t_bapi_esll TO t_bapi_esll_log.

ENDIF.

CHECK NOT sy-subrc IS INITIAL.

  • No Text Upload if SES Upload was not successful:

DELETE t_headertext WHERE ext_number = t_bapiessrc-ext_number.

IF NOT t_bapiesllc[] IS INITIAL.

FORMAT COLOR 1 INTENSIFIED ON.

WRITE AT: /1 'Ext. Communic. Num',

20 'Purchase Order', 35 'Item', 46 'Entry Sheet Text',

87 'Service Number',

111 'Quantity'.

ENDIF.

FORMAT COLOR 2 INTENSIFIED ON.

LOOP AT t_bapiesllc.

WRITE AT: /1 t_bapiessrc-ext_number,

20 t_bapiessrc-po_number,

35 t_bapiessrc-po_item,

46 t_bapiesllc-short_text,

87 t_bapiesllc-service,

106 t_bapiesllc-quantity RIGHT-JUSTIFIED.

ENDLOOP.

SKIP 1.

WRITE AT /1 'Error Messages:'.

FORMAT COLOR OFF INTENSIFIED ON.

LOOP AT output_prot.

CLEAR: l_message, l_msgno.

MOVE output_prot-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = output_prot-msgid

msgno = l_msgno

msgty = output_prot-msgtyp

msgv1 = output_prot-msgv1

msgv2 = output_prot-msgv2

msgv3 = output_prot-msgv3

msgv4 = output_prot-msgv4

IMPORTING

messg = l_message.

IF NOT output_prot-lblni IS INITIAL.

WRITE AT: /1 'Entry Sheet Number:', 22 l_message-msgtx.

ELSE.

WRITE AT: /1 output_prot-msgid(5),

6 output_prot-msgtyp,

8 l_msgno,

12 l_message-msgtx.

ENDIF.

ENDLOOP.

SKIP 3.

ENDFORM. " WRITE_PROT_TO_SPOOL

*&----


*

*& Form LOG_UPLOAD_SUCCESS

*&----


*

FORM log_upload_success.

DATA: BEGIN OF l_i_ekpo OCCURS 0,

werks LIKE ekpo-werks,

konnr LIKE ekpo-konnr,

ktpnr LIKE ekpo-ktpnr,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

txz01 LIKE ekpo-txz01,

user1 LIKE essr-user1,

lwert LIKE essr-lwert,

waers LIKE essr-waers,

END OF l_i_ekpo.

DATA: BEGIN OF l_i_kontr OCCURS 0,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

txz01 LIKE ekpo-txz01,

END OF l_i_kontr.

DATA: l_i_ekpo_2 LIKE l_i_ekpo OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF l_essr,

ebeln LIKE ekpo-ebeln,

ebelp LIKE ekpo-ebelp,

lblni LIKE essr-lblni,

lwert LIKE essr-lwert,

user1 LIKE essr-user1,

waers LIKE essr-waers,

END OF l_essr.

DATA: l_t_essr LIKE l_essr OCCURS 0 WITH HEADER LINE.

DATA: l_sy_datum LIKE sy-datum.

DATA: l_sy_uname LIKE sy-uname.

MOVE sy-datum TO l_sy_datum.

MOVE sy-uname TO l_sy_uname.

IF NOT t_bapi_essr_log[] IS INITIAL.

SELECT werks konnr ktpnr ebeln ebelp FROM ekpo

INTO TABLE l_i_ekpo

FOR ALL ENTRIES IN t_bapi_essr_log

WHERE ebeln = t_bapi_essr_log-po_number

AND ebelp = t_bapi_essr_log-po_item.

IF NOT l_i_ekpo[] IS INITIAL.

SELECT ebeln ebelp txz01 FROM ekpo

INTO TABLE l_i_kontr

FOR ALL ENTRIES IN l_i_ekpo

WHERE ebeln = l_i_ekpo-konnr

AND ebelp = l_i_ekpo-ktpnr.

SORT l_i_kontr.

ENDIF.

ENDIF.

LOOP AT l_i_ekpo.

CLEAR: l_essr, l_t_essr, l_i_kontr. REFRESH l_t_essr.

  • select single ebeln ebelp max( lblni ) lwert xblnr from essr

  • into l_essr

  • where ebeln = l_i_ekpo-ebeln

  • and ebelp = l_i_ekpo-ebelp

  • and erdat = sy-datum

  • and ernam = sy-uname

  • group by ebeln ebelp "no lblni!!

  • lwert xblnr.

  • SELECT ebeln ebelp lblni lwert user1 FROM essr

SELECT ebeln ebelp lblni lwert user1 waers FROM essr

INTO TABLE l_t_essr

WHERE ebeln = l_i_ekpo-ebeln

AND ebelp = l_i_ekpo-ebelp

AND erdat = l_sy_datum

AND ernam = l_sy_uname.

IF sy-subrc IS INITIAL.

SORT l_t_essr BY lblni DESCENDING.

  • read table l_t_essr index 1 into l_essr.

LOOP AT l_t_essr.

READ TABLE t_bapi_essr_log WITH KEY po_number = l_i_ekpo-ebeln

po_item = l_i_ekpo-ebelp

ext_number = l_t_essr-user1.

IF sy-subrc IS INITIAL.

MOVE: l_t_essr-lwert TO l_i_ekpo-lwert,

l_t_essr-waers TO l_i_ekpo-waers,

l_t_essr-user1 TO l_i_ekpo-user1.

  • modify l_i_ekpo.

DELETE t_bapi_essr_log WHERE po_number = l_i_ekpo-ebeln

AND po_item = l_i_ekpo-ebelp

AND ext_number = l_t_essr-user1.

APPEND l_i_ekpo TO l_i_ekpo_2.

ENDIF.

ENDLOOP.

ELSE.

DELETE l_i_ekpo.

ENDIF.

ENDLOOP.

CLEAR l_i_ekpo.

REFRESH l_i_ekpo.

MOVE l_i_ekpo_2[] TO l_i_ekpo[].

IF l_i_ekpo[] IS INITIAL.

WRITE AT: /1 'No data uploaded.'.

ELSE.

FORMAT COLOR 1 INTENSIFIED ON.

WRITE AT: /1 'Plant', 7 'Contract', 18 'Item',

29 'Contract Item Description',

69 'Purch.Ord.',

81 'Item', 87 'Reference', 113 'Value '.

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

SDN -

-


This is the final Internal table Here u have to add field after 105

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

LOOP AT l_i_ekpo.

READ TABLE l_i_kontr WITH KEY ebeln = l_i_ekpo-konnr

ebelp = l_i_ekpo-ktpnr

BINARY SEARCH.

FORMAT COLOR 2 INTENSIFIED ON.

WRITE AT: /1 l_i_ekpo-werks, 7 l_i_ekpo-konnr, 18 l_i_ekpo-ktpnr,

  • 29 l_i_ekpo-txz01,

29 l_i_kontr-txz01,

69 l_i_ekpo-ebeln, 81 l_i_ekpo-ebelp,

  • 87 l_i_ekpo-user1, 105 l_i_ekpo-lwert. "SG24082007d

87 l_i_ekpo-user1. "SG24082007i

WRITE AT: 105 l_i_ekpo-lwert CURRENCY l_i_ekpo-waers. "SG24082007i

ENDFORM. " LOG_UPLOAD_SUCCESS

  • start of insert >>> "AP13022007i

*&----


*

*& Form release_ses

*&----


*

FORM release_ses.

DATA: l_frgce LIKE zpl_ses_relcodes-frgce,

s_ekpo TYPE t_ekpo,

l_msgno TYPE sy-msgno,

l_messg LIKE message.

CHECK NOT l_ses_no IS INITIAL.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

WRITE: / text-206.

READ TABLE i_ekpo INTO s_ekpo WITH KEY ebeln = t_bapiessrc-po_number

ebelp = t_bapiessrc-po_item.

IF sy-subrc NE 0.

WRITE AT: /3 text-204.

EXIT.

ENDIF.

SELECT SINGLE frgce

INTO l_frgce

FROM zpl_ses_relcodes

WHERE bname EQ sy-uname

AND werks EQ s_ekpo-werks.

IF sy-subrc NE 0 OR l_frgce IS INITIAL.

WRITE AT: /3 text-204.

WRITE AT: /3 text-205.

EXIT.

ENDIF.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SELP'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0340'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11R-LBLNI'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

PERFORM bdc_field USING 'RM11R-LBLNI' l_ses_no.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=AKCH'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESSR-TXZ01'.

PERFORM bdc_field USING 'BDC_OKCODE' '=RSET'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11R-FRGCE'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

PERFORM bdc_field USING 'RM11R-FRGCE' l_frgce.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0400'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAVE'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' '1'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0110'.

PERFORM bdc_field USING 'BDC_CURSOR' 'IMKPF-BLDAT'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ENTE'.

CALL TRANSACTION 'ML81N' USING bdcdata

MODE w_mode

UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDFORM. " release_ses

*&----


*

*& Form find_ses_number

*&----


*

FORM find_ses_number .

CLEAR l_ses_no.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_ses_no

WHERE user1 = t_bapiessrc-ext_number

AND loekz = ' '.

IF sy-subrc NE 0.

WRITE: / text-206.

WRITE: / text-204.

ENDIF.

ENDFORM. " find_ses_number

*&----


*

*& Form select_additional_data

*&----


*

FORM select_additional_data.

DATA: lines TYPE i.

DESCRIBE TABLE t_bapiessrc LINES lines.

CHECK lines NE 0.

SELECT ebeln ebelp werks packno

INTO TABLE i_ekpo

FROM ekpo

FOR ALL ENTRIES IN t_bapiessrc

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

ENDFORM. " select_additional_data

*&----


*

*& Form check_estimated_value

*&----


*

FORM check_estimated_value.

DATA: s_ekpo TYPE t_ekpo,

l_mesg(200),

l_commitment LIKE esuh-commitment,

l_actvalue LIKE esuh-actvalue,

l_exc_value LIKE esuh-commitment,

l_tmptext1(30),

l_tmptext2(30),

l_waers LIKE esuh-waers.

READ TABLE i_ekpo INTO s_ekpo WITH KEY ebeln = t_bapiessrc-po_number

ebelp = t_bapiessrc-po_item.

CHECK sy-subrc EQ 0.

" check estimated value

  • SELECT SINGLE commitment actvalue

  • INTO (l_commitment, l_actvalue)

SELECT SINGLE commitment actvalue waers

INTO (l_commitment, l_actvalue, l_waers)

FROM esuh

WHERE packno = s_ekpo-packno.

CHECK sy-subrc EQ 0.

IF l_actvalue > l_commitment.

l_exc_value = l_actvalue - l_commitment.

WRITE: l_commitment TO l_tmptext1

CURRENCY l_waers,

l_exc_value TO l_tmptext2

CURRENCY l_waers.

CONCATENATE text-207 l_tmptext1 text-208

l_tmptext2 text-209 INTO l_mesg

SEPARATED BY space.

CONDENSE l_mesg.

WRITE: / l_mesg.

ENDIF.

ENDFORM. " check_estimated_value

  • end of insert <<<

  • begin of insert >> SG24082007i

FORM change_account.

DATA: i_sakto TYPE STANDARD TABLE OF ekkn-sakto,

l_sakto TYPE ekkn-sakto,

l_line(10) TYPE c,

l_msgno TYPE sy-msgno,

l_messg LIKE message,

p(2) TYPE c,

w LIKE sy-index,

w_field(20) TYPE c.

CLEAR l_ses_no.

CLEAR: bdcdata, bdcmsgcoll.

REFRESH: bdcdata, bdcmsgcoll.

SELECT SINGLE MAX( lblni ) FROM essr INTO l_ses_no

WHERE user1 = t_bapiessrc-ext_number

AND loekz = ' '.

IF sy-subrc EQ 0.

SELECT sakto FROM ekkn

INTO TABLE i_sakto

WHERE ebeln = t_bapiessrc-po_number

AND ebelp = t_bapiessrc-po_item.

IF sy-subrc EQ 0.

PERFORM bdc_dynpro USING 'RM11RL00' '1000'.

PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI'.

PERFORM bdc_field USING 'S_LBLNI-LOW' l_ses_no.

PERFORM bdc_field USING 'P_LIST' ' '.

PERFORM bdc_field USING 'P_DIRECT' 'X'.

PERFORM bdc_field USING 'P_LISTU' ' '.

PERFORM bdc_field USING 'BDC_CURSOR' 'P_DIRECT'.

PERFORM bdc_dynpro USING 'SAPLMLSR' '0100'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SERV'.

LOOP AT t_bapiesllc WHERE ext_number EQ t_bapiessrc-ext_number.

l_line = t_bapiesllc-line_no.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_CURSOR' 'RM11P-NEW_ROW'.

PERFORM bdc_field USING 'BDC_OKCODE' '=CONT'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_line.

PERFORM bdc_dynpro USING 'SAPLMLSK' '0200'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESKN-SAKTO(01)'.

PERFORM bdc_field USING 'BDC_OKCODE' '=BACK'.

CLEAR: p, w.

LOOP AT i_sakto INTO l_sakto.

ADD 1 TO w.

CLEAR: w_field, p.

UNPACK w TO p.

w_field+00(11) = 'ESKN-SAKTO('.

w_field+11(02) = p.

w_field+13(01) = ')'.

PERFORM bdc_field USING w_field l_sakto.

ENDLOOP.

ENDLOOP.

PERFORM bdc_dynpro USING 'SAPLMLSP' '0210'.

PERFORM bdc_field USING 'BDC_CURSOR' 'ESLL-KTEXT1(01)'.

PERFORM bdc_field USING 'BDC_OKCODE' '=SAV'.

PERFORM bdc_field USING 'RM11P-NEW_ROW' l_line.

CALL TRANSACTION 'ML81' USING bdcdata MODE p_dismod UPDATE c_update

MESSAGES INTO bdcmsgcoll.

LOOP AT bdcmsgcoll.

IF sy-tabix = 1.

WRITE AT: /1 text-210.

ENDIF.

CHECK bdcmsgcoll-msgnr CO ' 0123456789'.

MOVE bdcmsgcoll-msgnr TO l_msgno.

CALL FUNCTION 'WRITE_MESSAGE'

EXPORTING

msgid = bdcmsgcoll-msgid

msgno = l_msgno

msgty = bdcmsgcoll-msgtyp

msgv1 = bdcmsgcoll-msgv1

msgv2 = bdcmsgcoll-msgv2

msgv3 = bdcmsgcoll-msgv3

msgv4 = bdcmsgcoll-msgv4

IMPORTING

messg = l_messg.

WRITE AT: /3 l_messg-msgtx.

ENDLOOP.

ENDIF.

ENDIF.

ENDFORM. "change_account

waiting for your reply.

thanking you in anticipation.

2 REPLIES 2
Read only

Former Member
0 Likes
627

HI

add that fileds in the all locations where you need it like

in internal table declaration , write statement , select statement

these are the main areas where you have to add that 2 fileds

Read only

Former Member
0 Likes
627

add two fields.

declearstion.

select

write final field cat.