2007 Nov 15 6:10 AM
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.
2007 Nov 15 6:28 AM
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
2007 Nov 15 6:30 AM
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |