If you need to update entry sheets by program, here’s a simple test program to help you. I used it with S/4HANA ON PREMISE 2023 01 (02/2024) FPS.
The methods are:
CONVERT_TABLES_TO_BAPI_PARAM: it converts the tables ESSR, ESLL, ESKN, ESKL into the parameters of BAPI_ENTRYSHEET_CREATECOPY: it reads the database tables for one existing entry sheet (method SELECT_TABLES) and calls the method CREATE to create a copy of the existing entry sheetCREATE: it calls BAPI_ENTRYSHEET_CREATEDELETE: it calls BAPI_ENTRYSHEET_DELETEGET_DETAIL: it calls BAPI_ENTRYSHEET_GETDETAIL, it returns nothing so it’s for debug only.IS_SUCCESS: to simplify the analysis of BAPI result parameter RETURNRELEASE: it calls BAPI_ENTRYSHEET_RELEASEREVOKE_ACCEPTANCE_OF_SES: batch input based on ZCL_TOOL_BI_TRANSACTION (blog post: https://community.sap.com/t5/technology-blogs-by-members/community-project-batch-input-toolbox-for-abap/ba-p/14068601; code: https://github.com/jrgkraus/tool-bi)SELECT_TABLES: it returns the contents of tables ESSR, ESLL, ESKN, ESKL.
Concerning the code to revoke acceptance, it’s the same as the one posted here: Re: BAPI to unaccept service entry sheet – SAP Community.
REPORT zzsr2_test.
PARAMETERS p_lblni TYPE essr-lblni DEFAULT ‘6000066408’.
PARAMETERS getdetai RADIOBUTTON GROUP rb1.
PARAMETERS copy RADIOBUTTON GROUP rb1.
PARAMETERS release RADIOBUTTON GROUP rb1.
PARAMETERS revoke RADIOBUTTON GROUP rb1 DEFAULT ‘X’.
PARAMETERS delete RADIOBUTTON GROUP rb1.
PARAMETERS datrevok TYPE d DEFAULT ‘20250731’.
CLASS lcl_app DEFINITION DEFERRED.
CLASS lcl_entry_sheet DEFINITION DEFERRED.
START-OF-SELECTION.
DATA go_app TYPE REF TO lcl_app.
CREATE OBJECT go_app TYPE (‘LCL_APP’).
CALL METHOD go_app->(‘START_OF_SELECTION’).
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS start_of_selection.
ENDCLASS.
CLASS lcl_entry_sheet DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
TYPES tt_entrysheetaccountassignment TYPE STANDARD TABLE OF bapiesknc WITH DEFAULT KEY.
TYPES tt_entrysheetservices TYPE STANDARD TABLE OF bapiesllc WITH DEFAULT KEY.
TYPES tt_entrysheetsrvaccassvalues TYPE STANDARD TABLE OF bapiesklc WITH DEFAULT KEY.
TYPES tt_entrysheetservicestexts TYPE STANDARD TABLE OF bapieslltx WITH DEFAULT KEY.
TYPES tt_entrysheetheadertext TYPE STANDARD TABLE OF bapiessrtx WITH DEFAULT KEY.
TYPES tt_esll TYPE STANDARD TABLE OF esll WITH DEFAULT KEY.
TYPES tt_eskn TYPE STANDARD TABLE OF eskn WITH DEFAULT KEY.
TYPES tt_eskl TYPE STANDARD TABLE OF eskl WITH DEFAULT KEY.
CLASS-METHODS convert_tables_to_bapi_param
IMPORTING is_essr TYPE essr
it_esll TYPE tt_esll
it_eskn TYPE tt_eskn
it_eskl TYPE tt_eskl
EXPORTING es_entrysheetheader TYPE bapiessrc
et_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment
et_entrysheetservices TYPE tt_entrysheetservices
et_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues
et_entrysheetservicestexts TYPE tt_entrysheetservicestexts
et_entrysheetheadertext TYPE tt_entrysheetheadertext.
CLASS-METHODS copy
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
iv_force_acceptance TYPE abap_bool DEFAULT abap_false
iv_force_not_deleted TYPE abap_bool DEFAULT abap_true
EXPORTING ev_entrysheet TYPE bapiessr-sheet_no
et_return TYPE tt_return.
CLASS-METHODS create
IMPORTING is_entrysheetheader TYPE bapiessrc
it_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment OPTIONAL
it_entrysheetservices TYPE tt_entrysheetservices OPTIONAL
it_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues OPTIONAL
it_entrysheetservicestexts TYPE tt_entrysheetservicestexts OPTIONAL
it_entrysheetheadertext TYPE tt_entrysheetheadertext OPTIONAL
testrun TYPE testrun DEFAULT space
no_commit TYPE char1 DEFAULT space
EXPORTING ev_entrysheet TYPE bapiessr-sheet_no
et_return TYPE tt_return.
CLASS-METHODS delete
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
EXPORTING et_return TYPE tt_return.
“! For debug only – To check the parameters to pass to CREATE
CLASS-METHODS get_detail
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no.
CLASS-METHODS is_success
IMPORTING it_return TYPE tt_bapiret2
RETURNING VALUE(rv_result) TYPE abap_bool.
CLASS-METHODS release
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
CHANGING rt_return TYPE tt_return.
“! Batch input to revoke acceptance of service entry sheet
“! based on ZCL_TOOL_BI_TRANSACTION:
“! Blog: https://community.sap.com/t5/technology-blogs-by-members/community-project-batch-input-toolbox-for-abap/ba-p/14068601
“! Code: https://github.com/jrgkraus/tool-bi
CLASS-METHODS revoke_acceptance_of_ses
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
iv_revoke_date TYPE d DEFAULT sy-datum.
CLASS-METHODS select_tables
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
EXPORTING es_essr TYPE essr
et_esll TYPE tt_esll
et_eskn TYPE tt_eskn
et_eskl TYPE tt_eskl.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD start_of_selection.
SELECT SINGLE lblni, loekz, kzabn
FROM essr
WHERE lblni = @p_lblni
INTO @DATA(ls_essr).
IF sy-subrc <> 0.
MESSAGE ” TYPE ‘S’ DISPLAY LIKE ‘E’.
RETURN.
ENDIF.
CASE abap_true.
WHEN getdetai.
” For debug only.
lcl_entry_sheet=>get_detail( p_lblni ).
WHEN copy.
DATA lv_new_entrysheet TYPE essr-lblni.
DATA lt_return TYPE tt_return.
lcl_entry_sheet=>copy( EXPORTING iv_entrysheet = p_lblni
iv_force_not_deleted = abap_true
IMPORTING ev_entrysheet = lv_new_entrysheet
et_return = lt_return ).
IF lv_new_entrysheet IS NOT INITIAL.
WRITE : / ‘Sheet created:’, lv_new_entrysheet.
ELSE.
WRITE / ‘Errors when trying to create sheet:’.
LOOP AT lt_return REFERENCE INTO DATA(ls_return).
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO DATA(lv_texte_message).
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN release.
lcl_entry_sheet=>release( EXPORTING iv_entrysheet = p_lblni
CHANGING rt_return = lt_return ).
IF lcl_entry_sheet=>is_success( lt_return ).
WRITE : / ‘Sheet released:’, p_lblni.
ELSE.
WRITE / ‘Errors when trying to release sheet:’.
LOOP AT lt_return REFERENCE INTO ls_return.
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO lv_texte_message.
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN revoke.
” Sheet must be in status “received” (essr-kzabn = ‘X’).
” After revoking, status will be “not received” (essr-kzabn = ”).
lcl_entry_sheet=>revoke_acceptance_of_ses( iv_entrysheet = p_lblni
iv_revoke_date = datrevok ).
WHEN delete.
” Sheet must be in status “not received” (essr-kzabn = ”) and not deleted (essr-loekz = ”).
” After being deleted, essr-loekz = ‘X’.
lcl_entry_sheet=>delete( EXPORTING iv_entrysheet = p_lblni
IMPORTING et_return = lt_return ).
IF lcl_entry_sheet=>is_success( lt_return ).
WRITE : / ‘Sheet deleted:’, p_lblni.
ELSE.
WRITE / ‘when trying to delete sheet:’.
LOOP AT lt_return REFERENCE INTO ls_return.
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO lv_texte_message.
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN OTHERS.
write / ‘Bug – Ask developer’.
ENDCASE.
ENDMETHOD.
ENDCLASS.
CLASS lcl_entry_sheet IMPLEMENTATION.
METHOD convert_tables_to_bapi_param.
DATA ls_eskn TYPE REF TO eskn.
DATA ls_esll TYPE REF TO esll.
DATA ls_eskl TYPE REF TO eskl.
DATA ls_entrysheetaccountassignment TYPE bapiesknc.
DATA ls_entrysheetservices TYPE bapiesllc.
DATA ls_entrysheetsrvaccassvalues TYPE bapiesklc.
es_entrysheetheader-person_int = is_essr-sbnamag.
es_entrysheetheader-person_ext = is_essr-sbnaman.
es_entrysheetheader-location = is_essr-dlort.
es_entrysheetheader-ref_date = is_essr-lbldt.
es_entrysheetheader-begdate = is_essr-lzvon.
es_entrysheetheader-enddate = is_essr-lzbis.
es_entrysheetheader-pckg_no = is_essr-packno.
es_entrysheetheader-short_text = is_essr-txz01.
es_entrysheetheader-po_number = is_essr-ebeln.
es_entrysheetheader-po_item = is_essr-ebelp.
es_entrysheetheader-acceptance = is_essr-kzabn.
es_entrysheetheader-fin_entry = is_essr-final.
es_entrysheetheader-block_ind = is_essr-f_lock.
es_entrysheetheader-score_time = is_essr-pwwe.
es_entrysheetheader-score_qual = is_essr-pwfr.
es_entrysheetheader-doc_date = is_essr-bldat.
es_entrysheetheader-post_date = is_essr-budat.
es_entrysheetheader-ref_doc_no = is_essr-xblnr.
es_entrysheetheader-accasscat = is_essr-knttp.
es_entrysheetheader-comm_no = is_essr-user1.
es_entrysheetheader-user_field = is_essr-user2.
LOOP AT it_eskn REFERENCE INTO ls_eskn.
CLEAR ls_entrysheetaccountassignment.
ls_entrysheetaccountassignment-pckg_no = ls_eskn->packno.
ls_entrysheetaccountassignment-serial_no = ls_eskn->zekkn.
ls_entrysheetaccountassignment-gl_account = ls_eskn->sakto.
ls_entrysheetaccountassignment-bus_area = ls_eskn->gsber.
ls_entrysheetaccountassignment-costcenter = ls_eskn->kostl.
ls_entrysheetaccountassignment-sd_doc = ls_eskn->vbeln.
ls_entrysheetaccountassignment-itm_number = ls_eskn->vbelp.
ls_entrysheetaccountassignment-asset_no = ls_eskn->anln1.
ls_entrysheetaccountassignment-sub_number = ls_eskn->anln2.
ls_entrysheetaccountassignment-order = ls_eskn->aufnr.
ls_entrysheetaccountassignment-co_area = ls_eskn->kokrs.
ls_entrysheetaccountassignment-to_costctr = ls_eskn->xbkst.
ls_entrysheetaccountassignment-to_order = ls_eskn->xbauf.
ls_entrysheetaccountassignment-to_project = ls_eskn->xbpro.
ls_entrysheetaccountassignment-cost_obj = ls_eskn->kstrg.
ls_entrysheetaccountassignment-profit_segm_no_alpha = ls_eskn->paobjnr.
ls_entrysheetaccountassignment-profit_ctr = ls_eskn->prctr.
WRITE ls_eskn->ps_psp_pnr TO ls_entrysheetaccountassignment-wbs_elem.
ls_entrysheetaccountassignment-network = ls_eskn->nplnr.
ls_entrysheetaccountassignment-routing_no = ls_eskn->aufpl.
ls_entrysheetaccountassignment-rl_est_key = ls_eskn->imkey.
ls_entrysheetaccountassignment-counter = ls_eskn->aplzl.
ls_entrysheetaccountassignment-part_acct = ls_eskn->vptnr.
* ls_entrysheetaccountassignment-cmmt_item = ls_eskn->fipos.
ls_entrysheetaccountassignment-cmmt_item_long = ls_eskn->fipos.
ls_entrysheetaccountassignment-rec_ind = ls_eskn->recid.
ls_entrysheetaccountassignment-funds_ctr = ls_eskn->fistl.
ls_entrysheetaccountassignment-fund = ls_eskn->geber.
ls_entrysheetaccountassignment-func_area_long = ls_eskn->fkber.
ls_entrysheetaccountassignment-res_doc = ls_eskn->kblnr.
ls_entrysheetaccountassignment-res_item = ls_eskn->kblpos.
ls_entrysheetaccountassignment-grant_nbr = ls_eskn->grant_nbr.
ls_entrysheetaccountassignment-budget_period = ls_eskn->budget_pd.
INSERT ls_entrysheetaccountassignment INTO TABLE et_entrysheetaccountassignment.
ENDLOOP.
LOOP AT it_esll REFERENCE INTO ls_esll.
CLEAR ls_entrysheetservices.
ls_entrysheetservices-pckg_no = ls_esll->packno.
ls_entrysheetservices-line_no = ls_esll->introw.
ls_entrysheetservices-ext_line = ls_esll->extrow.
ls_entrysheetservices-delete_ind = ls_esll->del.
ls_entrysheetservices-service = ls_esll->srvpos.
ls_entrysheetservices-outl_level = ls_esll->rang.
ls_entrysheetservices-outl_no = ls_esll->extgroup.
ls_entrysheetservices-subpckg_no = ls_esll->sub_packno.
ls_entrysheetservices-serv_type = ls_esll->lbnum.
ls_entrysheetservices-edition = ls_esll->ausgb.
ls_entrysheetservices-ssc_item = ls_esll->stlvpos.
ls_entrysheetservices-ext_serv = ls_esll->extsrvno.
ls_entrysheetservices-quantity = ls_esll->menge.
ls_entrysheetservices-base_uom = ls_esll->meins.
ls_entrysheetservices-ovf_tol = ls_esll->uebto.
ls_entrysheetservices-ovf_unlim = ls_esll->uebtk.
ls_entrysheetservices-price_unit = ls_esll->peinh.
ls_entrysheetservices-gr_price = ls_esll->brtwr.
ls_entrysheetservices-net_value = ls_esll->netwr.
ls_entrysheetservices-from_line = ls_esll->frompos.
ls_entrysheetservices-to_line = ls_esll->topos.
ls_entrysheetservices-short_text = ls_esll->ktext1.
ls_entrysheetservices-distrib = ls_esll->vrtkz.
ls_entrysheetservices-pers_no = ls_esll->pernr.
ls_entrysheetservices-wagetype = ls_esll->lgart.
ls_entrysheetservices-pln_pckg = ls_esll->pln_packno.
ls_entrysheetservices-pln_line = ls_esll->pln_introw.
ls_entrysheetservices-con_pckg = ls_esll->knt_packno.
ls_entrysheetservices-con_line = ls_esll->knt_introw.
ls_entrysheetservices-tmp_pckg = ls_esll->tmp_packno.
ls_entrysheetservices-tmp_line = ls_esll->tmp_introw.
ls_entrysheetservices-ssc_lim = ls_esll->stlv_lim.
ls_entrysheetservices-limit_line = ls_esll->limit_row.
ls_entrysheetservices-target_val = ls_esll->zielwert.
ls_entrysheetservices-basline_no = ls_esll->alt_introw.
ls_entrysheetservices-basic_line = ls_esll->basic.
ls_entrysheetservices-alternat = ls_esll->alternat.
ls_entrysheetservices-bidder = ls_esll->bidder.
ls_entrysheetservices-supp_line = ls_esll->supple.
ls_entrysheetservices-open_qty = ls_esll->freeqty.
ls_entrysheetservices-inform = ls_esll->inform.
ls_entrysheetservices-blanket = ls_esll->pausch.
ls_entrysheetservices-eventual = ls_esll->eventual.
ls_entrysheetservices-tax_code = ls_esll->mwskz.
ls_entrysheetservices-taxjurcode = ls_esll->txjcd.
ls_entrysheetservices-price_chg = ls_esll->prs_chg.
ls_entrysheetservices-matl_group = ls_esll->matkl.
ls_entrysheetservices-external_item_id = ls_esll->externalid.
ls_entrysheetservices-service_item_key = ls_esll->srvmapkey.
ls_entrysheetservices-date = ls_esll->sdate.
ls_entrysheetservices-begintime = ls_esll->begtime.
ls_entrysheetservices-endtime = ls_esll->endtime.
ls_entrysheetservices-extpers_no = ls_esll->persext.
ls_entrysheetservices-formula = ls_esll->formelnr.
ls_entrysheetservices-form_val1 = ls_esll->frmval1.
ls_entrysheetservices-form_val2 = ls_esll->frmval2.
ls_entrysheetservices-form_val3 = ls_esll->frmval3.
ls_entrysheetservices-form_val4 = ls_esll->frmval4.
ls_entrysheetservices-form_val5 = ls_esll->frmval5.
ls_entrysheetservices-userf1_num = ls_esll->userf1_num.
ls_entrysheetservices-userf2_num = ls_esll->userf2_num.
ls_entrysheetservices-userf1_txt = ls_esll->userf1_txt.
ls_entrysheetservices-userf2_txt = ls_esll->userf2_txt.
ls_entrysheetservices-hi_line_no = ls_esll->knobj.
ls_entrysheetservices-extrefkey = ls_esll->chgtext.
ls_entrysheetservices-per_sdate = ls_esll->per_sdate.
ls_entrysheetservices-per_edate = ls_esll->per_edate.
INSERT ls_entrysheetservices INTO TABLE et_entrysheetservices.
ENDLOOP.
LOOP AT it_eskl REFERENCE INTO ls_eskl.
CLEAR ls_entrysheetsrvaccassvalues.
ls_entrysheetsrvaccassvalues-pckg_no = ls_eskl->packno.
ls_entrysheetsrvaccassvalues-line_no = ls_eskl->introw.
ls_entrysheetsrvaccassvalues-serno_line = ls_eskl->numkn.
ls_entrysheetsrvaccassvalues-quantity = ls_eskl->menge.
ls_entrysheetsrvaccassvalues-percentage = ls_eskl->wproz.
ls_entrysheetsrvaccassvalues-net_value = ls_eskl->netwr.
ls_entrysheetsrvaccassvalues-serial_no = ls_eskl->zekkn.
INSERT ls_entrysheetsrvaccassvalues INTO TABLE et_entrysheetsrvaccassvalues.
ENDLOOP.
ENDMETHOD.
METHOD copy.
DATA ls_entrysheetheader TYPE bapiessrc.
DATA lt_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment.
DATA lt_entrysheetservices TYPE tt_entrysheetservices.
DATA lt_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues.
DATA ls_entrysheetservices TYPE REF TO bapiesllc.
DATA lt_esll TYPE tt_esll.
DATA ls_essr TYPE essr.
DATA lt_eskn TYPE tt_eskn.
DATA lt_eskl TYPE tt_eskl.
CLEAR ev_entrysheet.
CLEAR et_return.
” TODO texts to be read
select_tables( EXPORTING iv_entrysheet = iv_entrysheet
IMPORTING es_essr = ls_essr
et_esll = lt_esll
et_eskn = lt_eskn
et_eskl = lt_eskl ).
convert_tables_to_bapi_param( EXPORTING is_essr = ls_essr
it_esll = lt_esll
it_eskn = lt_eskn
it_eskl = lt_eskl
IMPORTING es_entrysheetheader = ls_entrysheetheader
et_entrysheetaccountassignment = lt_entrysheetaccountassignment
et_entrysheetservices = lt_entrysheetservices
et_entrysheetsrvaccassvalues = lt_entrysheetsrvaccassvalues ).
* TODO texts to be created
* et_entrysheetservicestexts = lt_entrysheetservicestexts
* et_entrysheetheadertext = lt_entrysheetheadertext
IF iv_force_acceptance = abap_true.
ls_entrysheetheader-acceptance = abap_true.
ENDIF.
IF iv_force_not_deleted = abap_true.
LOOP AT lt_entrysheetservices REFERENCE INTO ls_entrysheetservices.
ls_entrysheetservices->delete_ind = abap_false.
ENDLOOP.
ENDIF.
create( EXPORTING is_entrysheetheader = ls_entrysheetheader
it_entrysheetaccountassignment = lt_entrysheetaccountassignment
it_entrysheetservices = lt_entrysheetservices
it_entrysheetsrvaccassvalues = lt_entrysheetsrvaccassvalues
* testrun = space
* no_commit = space
IMPORTING ev_entrysheet = ev_entrysheet
et_return = et_return ).
ENDMETHOD.
METHOD create.
CLEAR ev_entrysheet.
CLEAR et_return.
CALL FUNCTION ‘BAPI_ENTRYSHEET_CREATE’
EXPORTING
entrysheetheader = is_entrysheetheader
testrun = space
no_commit = space
IMPORTING
entrysheet = ev_entrysheet
TABLES
entrysheetaccountassignment = it_entrysheetaccountassignment
entrysheetservices = it_entrysheetservices
entrysheetsrvaccassvalues = it_entrysheetsrvaccassvalues
return = et_return
entrysheetservicestexts = it_entrysheetservicestexts
entrysheetheadertext = it_entrysheetheadertext.
” Success message in RETURN:
” TYPE ID NUMBER MESSAGE LOG_NO LOG_MSG_NO MESSAGE_V1
” S SE 534 Entry sheet 6000066413 created 000000 6000066413
ENDMETHOD.
METHOD delete.
” This BAPI does a COMMIT WORK.
CALL FUNCTION ‘BAPI_ENTRYSHEET_DELETE’
EXPORTING entrysheet = iv_entrysheet
TABLES return = et_return.
ENDMETHOD.
METHOD get_detail.
TYPES tt_entrysheet_account_assignme TYPE STANDARD TABLE OF bapieskn WITH EMPTY KEY.
TYPES tt_entrysheet_services TYPE STANDARD TABLE OF bapiesll WITH EMPTY KEY.
TYPES tt_entrysheet_srv_accass_value TYPE STANDARD TABLE OF bapieskl WITH EMPTY KEY.
TYPES tt_bapireturn1 TYPE STANDARD TABLE OF bapireturn1 WITH EMPTY KEY.
TYPES tt_entrysheet_header_text TYPE STANDARD TABLE OF bapiessrtx WITH EMPTY KEY.
TYPES tt_entrysheet_services_texts TYPE STANDARD TABLE OF bapieslltx WITH EMPTY KEY.
DATA ls_entrysheet_header TYPE bapiessr ##NEEDED.
DATA lt_entrysheet_account_assignme TYPE tt_entrysheet_account_assignme.
DATA lt_entrysheet_services TYPE tt_entrysheet_services.
DATA lt_entrysheet_srv_accass_value TYPE tt_entrysheet_srv_accass_value.
DATA lt_return TYPE tt_bapireturn1.
DATA lt_entrysheet_header_text TYPE tt_entrysheet_header_text.
DATA lt_entrysheet_services_texts TYPE tt_entrysheet_services_texts.
” For debug only
CALL FUNCTION ‘BAPI_ENTRYSHEET_GETDETAIL’
EXPORTING entrysheet = iv_entrysheet
long_texts = abap_true
IMPORTING entrysheet_header = ls_entrysheet_header
TABLES entrysheet_account_assignment = lt_entrysheet_account_assignme
entrysheet_services = lt_entrysheet_services
entrysheet_srv_accass_values = lt_entrysheet_srv_accass_value
return = lt_return
entrysheet_header_text = lt_entrysheet_header_text
entrysheet_services_texts = lt_entrysheet_services_texts.
ENDMETHOD.
METHOD is_success.
rv_result = abap_true.
LOOP AT it_return TRANSPORTING NO FIELDS
WHERE type = ‘A’
OR type = ‘E’
OR type = ‘X’.
rv_result = abap_false.
EXIT.
ENDLOOP.
ENDMETHOD.
METHOD release.
CALL FUNCTION ‘BAPI_ENTRYSHEET_RELEASE’
EXPORTING entrysheet = iv_entrysheet
rel_code = ”
* no_commit_work = space
TABLES return = rt_return.
ENDMETHOD.
METHOD revoke_acceptance_of_ses.
DATA(lo_ml81n) = NEW zcl_tool_bi_transaction( ‘ML81N’ ).
” 1st screen of ML81N: click on the Other command button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=SELP’ ).
” Popup asking which service sheet to display
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0340’
)->field( ‘RM11R-LBLNI’ )->value( iv_entrysheet
)->ok_code( ‘=ENTE’ ).
” Screen showing the service sheet in display mode, click on the Edit button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=AKCH’ ).
” Screen showing the service sheet in modification mode, click on the Revoke Acceptance button
” NB: potential errors:
” – If the sheet is not accepted (ESSR-KZABN = ”), the Revoke Acceptance button is not shown: The function code cannot be selected (Message No. 00255)
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=ACCR’ ).
” Screen showing the service sheet in modification mode, click on the Save button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=SAVE’ ).
” Popup asking for document date and accounting date
DATA lv_revoke_date_external_format TYPE c LENGTH 10.
lv_revoke_date_external_format = |{ iv_revoke_date DATE = USER }|.
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0110’
)->field( ‘IMKPF-BLDAT’ )->value( lv_revoke_date_external_format
)->field( ‘IMKPF-BUDAT’ )->value( lv_revoke_date_external_format
)->ok_code( ‘ENTE’ ).
DATA lv_mode TYPE ctu_params-dismode VALUE ‘N’.
DATA lo_logger TYPE REF TO zif_logger.
DATA lv_result_call_transaction TYPE sysubrc.
lo_logger = zcl_logger_factory=>create_log( ).
lo_ml81n->mode( lv_mode )->update( ‘L’ ).
lv_result_call_transaction = lo_ml81n->run( lo_logger ).
IF lv_result_call_transaction <> 0.
” < 1000 : error message (A or E) during batch input execution,
” = 1001 : technical error (messages S00341 to S00349)
lo_logger->popup( ).
ENDIF.
ENDMETHOD.
METHOD select_tables.
DATA lt_packno TYPE SORTED TABLE OF essr-packno WITH UNIQUE KEY table_line.
DATA lt_packno_2 TYPE SORTED TABLE OF essr-packno WITH UNIQUE KEY table_line.
DATA ls_esll TYPE REF TO esll.
CLEAR es_essr.
CLEAR et_esll.
CLEAR et_eskn.
CLEAR et_eskl.
SELECT SINGLE *
FROM essr
WHERE lblni = @iv_entrysheet
INTO @ES_essr.
IF sy-subrc <> 0.
message ‘Sheet does not exist’ type ‘I’ display like ‘E’.
return.
ENDIF.
SELECT *
FROM eskn
WHERE packno = @iv_entrysheet
INTO TABLE @ET_eskn. “#EC CI_SUBRC
lt_packno = VALUE #( ( es_essr-packno ) ).
lt_packno_2 = lt_packno.
WHILE lt_packno_2 IS NOT INITIAL.
SELECT *
FROM esll
FOR ALL ENTRIES IN @LT_packno_2
WHERE packno = @LT_packno_2-table_line
APPENDING TABLE @ET_esll. “#EC CI_SUBRC
lt_packno_2 = VALUE #( ).
LOOP AT et_esll REFERENCE INTO ls_esll
WHERE sub_packno IS NOT INITIAL.
INSERT ls_esll->sub_packno INTO TABLE lt_packno.
IF sy-subrc = 0.
INSERT ls_esll->sub_packno INTO TABLE lt_packno_2.
ENDIF.
ENDLOOP.
ENDWHILE.
IF lt_packno IS NOT INITIAL.
SELECT *
FROM eskl
FOR ALL ENTRIES IN @LT_packno
WHERE packno = @LT_packno-table_line
INTO TABLE @ET_eskl. “#EC CI_SUBRC
ENDIF.
ENDMETHOD.
ENDCLASS.
If you need to update entry sheets by program, here’s a simple test program to help you. I used it with S/4HANA ON PREMISE 2023 01 (02/2024) FPS.The methods are:CONVERT_TABLES_TO_BAPI_PARAM: it converts the tables ESSR, ESLL, ESKN, ESKL into the parameters of BAPI_ENTRYSHEET_CREATECOPY: it reads the database tables for one existing entry sheet (method SELECT_TABLES) and calls the method CREATE to create a copy of the existing entry sheetCREATE: it calls BAPI_ENTRYSHEET_CREATEDELETE: it calls BAPI_ENTRYSHEET_DELETEGET_DETAIL: it calls BAPI_ENTRYSHEET_GETDETAIL, it returns nothing so it’s for debug only.IS_SUCCESS: to simplify the analysis of BAPI result parameter RETURNRELEASE: it calls BAPI_ENTRYSHEET_RELEASEREVOKE_ACCEPTANCE_OF_SES: batch input based on ZCL_TOOL_BI_TRANSACTION (blog post: https://community.sap.com/t5/technology-blogs-by-members/community-project-batch-input-toolbox-for-abap/ba-p/14068601; code: https://github.com/jrgkraus/tool-bi)SELECT_TABLES: it returns the contents of tables ESSR, ESLL, ESKN, ESKL.Concerning the code to revoke acceptance, it’s the same as the one posted here: Re: BAPI to unaccept service entry sheet – SAP Community.REPORT zzsr2_test.
PARAMETERS p_lblni TYPE essr-lblni DEFAULT ‘6000066408’.
PARAMETERS getdetai RADIOBUTTON GROUP rb1.
PARAMETERS copy RADIOBUTTON GROUP rb1.
PARAMETERS release RADIOBUTTON GROUP rb1.
PARAMETERS revoke RADIOBUTTON GROUP rb1 DEFAULT ‘X’.
PARAMETERS delete RADIOBUTTON GROUP rb1.
PARAMETERS datrevok TYPE d DEFAULT ‘20250731’.
CLASS lcl_app DEFINITION DEFERRED.
CLASS lcl_entry_sheet DEFINITION DEFERRED.
START-OF-SELECTION.
DATA go_app TYPE REF TO lcl_app.
CREATE OBJECT go_app TYPE (‘LCL_APP’).
CALL METHOD go_app->(‘START_OF_SELECTION’).
CLASS lcl_app DEFINITION.
PUBLIC SECTION.
METHODS start_of_selection.
ENDCLASS.
CLASS lcl_entry_sheet DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
TYPES tt_entrysheetaccountassignment TYPE STANDARD TABLE OF bapiesknc WITH DEFAULT KEY.
TYPES tt_entrysheetservices TYPE STANDARD TABLE OF bapiesllc WITH DEFAULT KEY.
TYPES tt_entrysheetsrvaccassvalues TYPE STANDARD TABLE OF bapiesklc WITH DEFAULT KEY.
TYPES tt_entrysheetservicestexts TYPE STANDARD TABLE OF bapieslltx WITH DEFAULT KEY.
TYPES tt_entrysheetheadertext TYPE STANDARD TABLE OF bapiessrtx WITH DEFAULT KEY.
TYPES tt_esll TYPE STANDARD TABLE OF esll WITH DEFAULT KEY.
TYPES tt_eskn TYPE STANDARD TABLE OF eskn WITH DEFAULT KEY.
TYPES tt_eskl TYPE STANDARD TABLE OF eskl WITH DEFAULT KEY.
CLASS-METHODS convert_tables_to_bapi_param
IMPORTING is_essr TYPE essr
it_esll TYPE tt_esll
it_eskn TYPE tt_eskn
it_eskl TYPE tt_eskl
EXPORTING es_entrysheetheader TYPE bapiessrc
et_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment
et_entrysheetservices TYPE tt_entrysheetservices
et_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues
et_entrysheetservicestexts TYPE tt_entrysheetservicestexts
et_entrysheetheadertext TYPE tt_entrysheetheadertext.
CLASS-METHODS copy
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
iv_force_acceptance TYPE abap_bool DEFAULT abap_false
iv_force_not_deleted TYPE abap_bool DEFAULT abap_true
EXPORTING ev_entrysheet TYPE bapiessr-sheet_no
et_return TYPE tt_return.
CLASS-METHODS create
IMPORTING is_entrysheetheader TYPE bapiessrc
it_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment OPTIONAL
it_entrysheetservices TYPE tt_entrysheetservices OPTIONAL
it_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues OPTIONAL
it_entrysheetservicestexts TYPE tt_entrysheetservicestexts OPTIONAL
it_entrysheetheadertext TYPE tt_entrysheetheadertext OPTIONAL
testrun TYPE testrun DEFAULT space
no_commit TYPE char1 DEFAULT space
EXPORTING ev_entrysheet TYPE bapiessr-sheet_no
et_return TYPE tt_return.
CLASS-METHODS delete
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
EXPORTING et_return TYPE tt_return.
“! For debug only – To check the parameters to pass to CREATE
CLASS-METHODS get_detail
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no.
CLASS-METHODS is_success
IMPORTING it_return TYPE tt_bapiret2
RETURNING VALUE(rv_result) TYPE abap_bool.
CLASS-METHODS release
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
CHANGING rt_return TYPE tt_return.
“! Batch input to revoke acceptance of service entry sheet
“! based on ZCL_TOOL_BI_TRANSACTION:
“! Blog: https://community.sap.com/t5/technology-blogs-by-members/community-project-batch-input-toolbox-for-abap/ba-p/14068601
“! Code: https://github.com/jrgkraus/tool-bi
CLASS-METHODS revoke_acceptance_of_ses
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
iv_revoke_date TYPE d DEFAULT sy-datum.
CLASS-METHODS select_tables
IMPORTING iv_entrysheet TYPE bapiessr-sheet_no
EXPORTING es_essr TYPE essr
et_esll TYPE tt_esll
et_eskn TYPE tt_eskn
et_eskl TYPE tt_eskl.
ENDCLASS.
CLASS lcl_app IMPLEMENTATION.
METHOD start_of_selection.
SELECT SINGLE lblni, loekz, kzabn
FROM essr
WHERE lblni = @p_lblni
INTO @DATA(ls_essr).
IF sy-subrc <> 0.
MESSAGE ” TYPE ‘S’ DISPLAY LIKE ‘E’.
RETURN.
ENDIF.
CASE abap_true.
WHEN getdetai.
” For debug only.
lcl_entry_sheet=>get_detail( p_lblni ).
WHEN copy.
DATA lv_new_entrysheet TYPE essr-lblni.
DATA lt_return TYPE tt_return.
lcl_entry_sheet=>copy( EXPORTING iv_entrysheet = p_lblni
iv_force_not_deleted = abap_true
IMPORTING ev_entrysheet = lv_new_entrysheet
et_return = lt_return ).
IF lv_new_entrysheet IS NOT INITIAL.
WRITE : / ‘Sheet created:’, lv_new_entrysheet.
ELSE.
WRITE / ‘Errors when trying to create sheet:’.
LOOP AT lt_return REFERENCE INTO DATA(ls_return).
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO DATA(lv_texte_message).
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN release.
lcl_entry_sheet=>release( EXPORTING iv_entrysheet = p_lblni
CHANGING rt_return = lt_return ).
IF lcl_entry_sheet=>is_success( lt_return ).
WRITE : / ‘Sheet released:’, p_lblni.
ELSE.
WRITE / ‘Errors when trying to release sheet:’.
LOOP AT lt_return REFERENCE INTO ls_return.
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO lv_texte_message.
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN revoke.
” Sheet must be in status “received” (essr-kzabn = ‘X’).
” After revoking, status will be “not received” (essr-kzabn = ”).
lcl_entry_sheet=>revoke_acceptance_of_ses( iv_entrysheet = p_lblni
iv_revoke_date = datrevok ).
WHEN delete.
” Sheet must be in status “not received” (essr-kzabn = ”) and not deleted (essr-loekz = ”).
” After being deleted, essr-loekz = ‘X’.
lcl_entry_sheet=>delete( EXPORTING iv_entrysheet = p_lblni
IMPORTING et_return = lt_return ).
IF lcl_entry_sheet=>is_success( lt_return ).
WRITE : / ‘Sheet deleted:’, p_lblni.
ELSE.
WRITE / ‘when trying to delete sheet:’.
LOOP AT lt_return REFERENCE INTO ls_return.
MESSAGE ID ls_return->id TYPE ls_return->type NUMBER ls_return->number
WITH ls_return->message_v1 INTO lv_texte_message.
WRITE / lv_texte_message.
ENDLOOP.
ENDIF.
WHEN OTHERS.
write / ‘Bug – Ask developer’.
ENDCASE.
ENDMETHOD.
ENDCLASS.
CLASS lcl_entry_sheet IMPLEMENTATION.
METHOD convert_tables_to_bapi_param.
DATA ls_eskn TYPE REF TO eskn.
DATA ls_esll TYPE REF TO esll.
DATA ls_eskl TYPE REF TO eskl.
DATA ls_entrysheetaccountassignment TYPE bapiesknc.
DATA ls_entrysheetservices TYPE bapiesllc.
DATA ls_entrysheetsrvaccassvalues TYPE bapiesklc.
es_entrysheetheader-person_int = is_essr-sbnamag.
es_entrysheetheader-person_ext = is_essr-sbnaman.
es_entrysheetheader-location = is_essr-dlort.
es_entrysheetheader-ref_date = is_essr-lbldt.
es_entrysheetheader-begdate = is_essr-lzvon.
es_entrysheetheader-enddate = is_essr-lzbis.
es_entrysheetheader-pckg_no = is_essr-packno.
es_entrysheetheader-short_text = is_essr-txz01.
es_entrysheetheader-po_number = is_essr-ebeln.
es_entrysheetheader-po_item = is_essr-ebelp.
es_entrysheetheader-acceptance = is_essr-kzabn.
es_entrysheetheader-fin_entry = is_essr-final.
es_entrysheetheader-block_ind = is_essr-f_lock.
es_entrysheetheader-score_time = is_essr-pwwe.
es_entrysheetheader-score_qual = is_essr-pwfr.
es_entrysheetheader-doc_date = is_essr-bldat.
es_entrysheetheader-post_date = is_essr-budat.
es_entrysheetheader-ref_doc_no = is_essr-xblnr.
es_entrysheetheader-accasscat = is_essr-knttp.
es_entrysheetheader-comm_no = is_essr-user1.
es_entrysheetheader-user_field = is_essr-user2.
LOOP AT it_eskn REFERENCE INTO ls_eskn.
CLEAR ls_entrysheetaccountassignment.
ls_entrysheetaccountassignment-pckg_no = ls_eskn->packno.
ls_entrysheetaccountassignment-serial_no = ls_eskn->zekkn.
ls_entrysheetaccountassignment-gl_account = ls_eskn->sakto.
ls_entrysheetaccountassignment-bus_area = ls_eskn->gsber.
ls_entrysheetaccountassignment-costcenter = ls_eskn->kostl.
ls_entrysheetaccountassignment-sd_doc = ls_eskn->vbeln.
ls_entrysheetaccountassignment-itm_number = ls_eskn->vbelp.
ls_entrysheetaccountassignment-asset_no = ls_eskn->anln1.
ls_entrysheetaccountassignment-sub_number = ls_eskn->anln2.
ls_entrysheetaccountassignment-order = ls_eskn->aufnr.
ls_entrysheetaccountassignment-co_area = ls_eskn->kokrs.
ls_entrysheetaccountassignment-to_costctr = ls_eskn->xbkst.
ls_entrysheetaccountassignment-to_order = ls_eskn->xbauf.
ls_entrysheetaccountassignment-to_project = ls_eskn->xbpro.
ls_entrysheetaccountassignment-cost_obj = ls_eskn->kstrg.
ls_entrysheetaccountassignment-profit_segm_no_alpha = ls_eskn->paobjnr.
ls_entrysheetaccountassignment-profit_ctr = ls_eskn->prctr.
WRITE ls_eskn->ps_psp_pnr TO ls_entrysheetaccountassignment-wbs_elem.
ls_entrysheetaccountassignment-network = ls_eskn->nplnr.
ls_entrysheetaccountassignment-routing_no = ls_eskn->aufpl.
ls_entrysheetaccountassignment-rl_est_key = ls_eskn->imkey.
ls_entrysheetaccountassignment-counter = ls_eskn->aplzl.
ls_entrysheetaccountassignment-part_acct = ls_eskn->vptnr.
* ls_entrysheetaccountassignment-cmmt_item = ls_eskn->fipos.
ls_entrysheetaccountassignment-cmmt_item_long = ls_eskn->fipos.
ls_entrysheetaccountassignment-rec_ind = ls_eskn->recid.
ls_entrysheetaccountassignment-funds_ctr = ls_eskn->fistl.
ls_entrysheetaccountassignment-fund = ls_eskn->geber.
ls_entrysheetaccountassignment-func_area_long = ls_eskn->fkber.
ls_entrysheetaccountassignment-res_doc = ls_eskn->kblnr.
ls_entrysheetaccountassignment-res_item = ls_eskn->kblpos.
ls_entrysheetaccountassignment-grant_nbr = ls_eskn->grant_nbr.
ls_entrysheetaccountassignment-budget_period = ls_eskn->budget_pd.
INSERT ls_entrysheetaccountassignment INTO TABLE et_entrysheetaccountassignment.
ENDLOOP.
LOOP AT it_esll REFERENCE INTO ls_esll.
CLEAR ls_entrysheetservices.
ls_entrysheetservices-pckg_no = ls_esll->packno.
ls_entrysheetservices-line_no = ls_esll->introw.
ls_entrysheetservices-ext_line = ls_esll->extrow.
ls_entrysheetservices-delete_ind = ls_esll->del.
ls_entrysheetservices-service = ls_esll->srvpos.
ls_entrysheetservices-outl_level = ls_esll->rang.
ls_entrysheetservices-outl_no = ls_esll->extgroup.
ls_entrysheetservices-subpckg_no = ls_esll->sub_packno.
ls_entrysheetservices-serv_type = ls_esll->lbnum.
ls_entrysheetservices-edition = ls_esll->ausgb.
ls_entrysheetservices-ssc_item = ls_esll->stlvpos.
ls_entrysheetservices-ext_serv = ls_esll->extsrvno.
ls_entrysheetservices-quantity = ls_esll->menge.
ls_entrysheetservices-base_uom = ls_esll->meins.
ls_entrysheetservices-ovf_tol = ls_esll->uebto.
ls_entrysheetservices-ovf_unlim = ls_esll->uebtk.
ls_entrysheetservices-price_unit = ls_esll->peinh.
ls_entrysheetservices-gr_price = ls_esll->brtwr.
ls_entrysheetservices-net_value = ls_esll->netwr.
ls_entrysheetservices-from_line = ls_esll->frompos.
ls_entrysheetservices-to_line = ls_esll->topos.
ls_entrysheetservices-short_text = ls_esll->ktext1.
ls_entrysheetservices-distrib = ls_esll->vrtkz.
ls_entrysheetservices-pers_no = ls_esll->pernr.
ls_entrysheetservices-wagetype = ls_esll->lgart.
ls_entrysheetservices-pln_pckg = ls_esll->pln_packno.
ls_entrysheetservices-pln_line = ls_esll->pln_introw.
ls_entrysheetservices-con_pckg = ls_esll->knt_packno.
ls_entrysheetservices-con_line = ls_esll->knt_introw.
ls_entrysheetservices-tmp_pckg = ls_esll->tmp_packno.
ls_entrysheetservices-tmp_line = ls_esll->tmp_introw.
ls_entrysheetservices-ssc_lim = ls_esll->stlv_lim.
ls_entrysheetservices-limit_line = ls_esll->limit_row.
ls_entrysheetservices-target_val = ls_esll->zielwert.
ls_entrysheetservices-basline_no = ls_esll->alt_introw.
ls_entrysheetservices-basic_line = ls_esll->basic.
ls_entrysheetservices-alternat = ls_esll->alternat.
ls_entrysheetservices-bidder = ls_esll->bidder.
ls_entrysheetservices-supp_line = ls_esll->supple.
ls_entrysheetservices-open_qty = ls_esll->freeqty.
ls_entrysheetservices-inform = ls_esll->inform.
ls_entrysheetservices-blanket = ls_esll->pausch.
ls_entrysheetservices-eventual = ls_esll->eventual.
ls_entrysheetservices-tax_code = ls_esll->mwskz.
ls_entrysheetservices-taxjurcode = ls_esll->txjcd.
ls_entrysheetservices-price_chg = ls_esll->prs_chg.
ls_entrysheetservices-matl_group = ls_esll->matkl.
ls_entrysheetservices-external_item_id = ls_esll->externalid.
ls_entrysheetservices-service_item_key = ls_esll->srvmapkey.
ls_entrysheetservices-date = ls_esll->sdate.
ls_entrysheetservices-begintime = ls_esll->begtime.
ls_entrysheetservices-endtime = ls_esll->endtime.
ls_entrysheetservices-extpers_no = ls_esll->persext.
ls_entrysheetservices-formula = ls_esll->formelnr.
ls_entrysheetservices-form_val1 = ls_esll->frmval1.
ls_entrysheetservices-form_val2 = ls_esll->frmval2.
ls_entrysheetservices-form_val3 = ls_esll->frmval3.
ls_entrysheetservices-form_val4 = ls_esll->frmval4.
ls_entrysheetservices-form_val5 = ls_esll->frmval5.
ls_entrysheetservices-userf1_num = ls_esll->userf1_num.
ls_entrysheetservices-userf2_num = ls_esll->userf2_num.
ls_entrysheetservices-userf1_txt = ls_esll->userf1_txt.
ls_entrysheetservices-userf2_txt = ls_esll->userf2_txt.
ls_entrysheetservices-hi_line_no = ls_esll->knobj.
ls_entrysheetservices-extrefkey = ls_esll->chgtext.
ls_entrysheetservices-per_sdate = ls_esll->per_sdate.
ls_entrysheetservices-per_edate = ls_esll->per_edate.
INSERT ls_entrysheetservices INTO TABLE et_entrysheetservices.
ENDLOOP.
LOOP AT it_eskl REFERENCE INTO ls_eskl.
CLEAR ls_entrysheetsrvaccassvalues.
ls_entrysheetsrvaccassvalues-pckg_no = ls_eskl->packno.
ls_entrysheetsrvaccassvalues-line_no = ls_eskl->introw.
ls_entrysheetsrvaccassvalues-serno_line = ls_eskl->numkn.
ls_entrysheetsrvaccassvalues-quantity = ls_eskl->menge.
ls_entrysheetsrvaccassvalues-percentage = ls_eskl->wproz.
ls_entrysheetsrvaccassvalues-net_value = ls_eskl->netwr.
ls_entrysheetsrvaccassvalues-serial_no = ls_eskl->zekkn.
INSERT ls_entrysheetsrvaccassvalues INTO TABLE et_entrysheetsrvaccassvalues.
ENDLOOP.
ENDMETHOD.
METHOD copy.
DATA ls_entrysheetheader TYPE bapiessrc.
DATA lt_entrysheetaccountassignment TYPE tt_entrysheetaccountassignment.
DATA lt_entrysheetservices TYPE tt_entrysheetservices.
DATA lt_entrysheetsrvaccassvalues TYPE tt_entrysheetsrvaccassvalues.
DATA ls_entrysheetservices TYPE REF TO bapiesllc.
DATA lt_esll TYPE tt_esll.
DATA ls_essr TYPE essr.
DATA lt_eskn TYPE tt_eskn.
DATA lt_eskl TYPE tt_eskl.
CLEAR ev_entrysheet.
CLEAR et_return.
” TODO texts to be read
select_tables( EXPORTING iv_entrysheet = iv_entrysheet
IMPORTING es_essr = ls_essr
et_esll = lt_esll
et_eskn = lt_eskn
et_eskl = lt_eskl ).
convert_tables_to_bapi_param( EXPORTING is_essr = ls_essr
it_esll = lt_esll
it_eskn = lt_eskn
it_eskl = lt_eskl
IMPORTING es_entrysheetheader = ls_entrysheetheader
et_entrysheetaccountassignment = lt_entrysheetaccountassignment
et_entrysheetservices = lt_entrysheetservices
et_entrysheetsrvaccassvalues = lt_entrysheetsrvaccassvalues ).
* TODO texts to be created
* et_entrysheetservicestexts = lt_entrysheetservicestexts
* et_entrysheetheadertext = lt_entrysheetheadertext
IF iv_force_acceptance = abap_true.
ls_entrysheetheader-acceptance = abap_true.
ENDIF.
IF iv_force_not_deleted = abap_true.
LOOP AT lt_entrysheetservices REFERENCE INTO ls_entrysheetservices.
ls_entrysheetservices->delete_ind = abap_false.
ENDLOOP.
ENDIF.
create( EXPORTING is_entrysheetheader = ls_entrysheetheader
it_entrysheetaccountassignment = lt_entrysheetaccountassignment
it_entrysheetservices = lt_entrysheetservices
it_entrysheetsrvaccassvalues = lt_entrysheetsrvaccassvalues
* testrun = space
* no_commit = space
IMPORTING ev_entrysheet = ev_entrysheet
et_return = et_return ).
ENDMETHOD.
METHOD create.
CLEAR ev_entrysheet.
CLEAR et_return.
CALL FUNCTION ‘BAPI_ENTRYSHEET_CREATE’
EXPORTING
entrysheetheader = is_entrysheetheader
testrun = space
no_commit = space
IMPORTING
entrysheet = ev_entrysheet
TABLES
entrysheetaccountassignment = it_entrysheetaccountassignment
entrysheetservices = it_entrysheetservices
entrysheetsrvaccassvalues = it_entrysheetsrvaccassvalues
return = et_return
entrysheetservicestexts = it_entrysheetservicestexts
entrysheetheadertext = it_entrysheetheadertext.
” Success message in RETURN:
” TYPE ID NUMBER MESSAGE LOG_NO LOG_MSG_NO MESSAGE_V1
” S SE 534 Entry sheet 6000066413 created 000000 6000066413
ENDMETHOD.
METHOD delete.
” This BAPI does a COMMIT WORK.
CALL FUNCTION ‘BAPI_ENTRYSHEET_DELETE’
EXPORTING entrysheet = iv_entrysheet
TABLES return = et_return.
ENDMETHOD.
METHOD get_detail.
TYPES tt_entrysheet_account_assignme TYPE STANDARD TABLE OF bapieskn WITH EMPTY KEY.
TYPES tt_entrysheet_services TYPE STANDARD TABLE OF bapiesll WITH EMPTY KEY.
TYPES tt_entrysheet_srv_accass_value TYPE STANDARD TABLE OF bapieskl WITH EMPTY KEY.
TYPES tt_bapireturn1 TYPE STANDARD TABLE OF bapireturn1 WITH EMPTY KEY.
TYPES tt_entrysheet_header_text TYPE STANDARD TABLE OF bapiessrtx WITH EMPTY KEY.
TYPES tt_entrysheet_services_texts TYPE STANDARD TABLE OF bapieslltx WITH EMPTY KEY.
DATA ls_entrysheet_header TYPE bapiessr ##NEEDED.
DATA lt_entrysheet_account_assignme TYPE tt_entrysheet_account_assignme.
DATA lt_entrysheet_services TYPE tt_entrysheet_services.
DATA lt_entrysheet_srv_accass_value TYPE tt_entrysheet_srv_accass_value.
DATA lt_return TYPE tt_bapireturn1.
DATA lt_entrysheet_header_text TYPE tt_entrysheet_header_text.
DATA lt_entrysheet_services_texts TYPE tt_entrysheet_services_texts.
” For debug only
CALL FUNCTION ‘BAPI_ENTRYSHEET_GETDETAIL’
EXPORTING entrysheet = iv_entrysheet
long_texts = abap_true
IMPORTING entrysheet_header = ls_entrysheet_header
TABLES entrysheet_account_assignment = lt_entrysheet_account_assignme
entrysheet_services = lt_entrysheet_services
entrysheet_srv_accass_values = lt_entrysheet_srv_accass_value
return = lt_return
entrysheet_header_text = lt_entrysheet_header_text
entrysheet_services_texts = lt_entrysheet_services_texts.
ENDMETHOD.
METHOD is_success.
rv_result = abap_true.
LOOP AT it_return TRANSPORTING NO FIELDS
WHERE type = ‘A’
OR type = ‘E’
OR type = ‘X’.
rv_result = abap_false.
EXIT.
ENDLOOP.
ENDMETHOD.
METHOD release.
CALL FUNCTION ‘BAPI_ENTRYSHEET_RELEASE’
EXPORTING entrysheet = iv_entrysheet
rel_code = ”
* no_commit_work = space
TABLES return = rt_return.
ENDMETHOD.
METHOD revoke_acceptance_of_ses.
DATA(lo_ml81n) = NEW zcl_tool_bi_transaction( ‘ML81N’ ).
” 1st screen of ML81N: click on the Other command button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=SELP’ ).
” Popup asking which service sheet to display
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0340’
)->field( ‘RM11R-LBLNI’ )->value( iv_entrysheet
)->ok_code( ‘=ENTE’ ).
” Screen showing the service sheet in display mode, click on the Edit button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=AKCH’ ).
” Screen showing the service sheet in modification mode, click on the Revoke Acceptance button
” NB: potential errors:
” – If the sheet is not accepted (ESSR-KZABN = ”), the Revoke Acceptance button is not shown: The function code cannot be selected (Message No. 00255)
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=ACCR’ ).
” Screen showing the service sheet in modification mode, click on the Save button
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0400’
)->ok_code( ‘=SAVE’ ).
” Popup asking for document date and accounting date
DATA lv_revoke_date_external_format TYPE c LENGTH 10.
lv_revoke_date_external_format = |{ iv_revoke_date DATE = USER }|.
lo_ml81n->new_dynpro(
)->program( ‘SAPLMLSR’
)->dynpro( ‘0110’
)->field( ‘IMKPF-BLDAT’ )->value( lv_revoke_date_external_format
)->field( ‘IMKPF-BUDAT’ )->value( lv_revoke_date_external_format
)->ok_code( ‘ENTE’ ).
DATA lv_mode TYPE ctu_params-dismode VALUE ‘N’.
DATA lo_logger TYPE REF TO zif_logger.
DATA lv_result_call_transaction TYPE sysubrc.
lo_logger = zcl_logger_factory=>create_log( ).
lo_ml81n->mode( lv_mode )->update( ‘L’ ).
lv_result_call_transaction = lo_ml81n->run( lo_logger ).
IF lv_result_call_transaction <> 0.
” < 1000 : error message (A or E) during batch input execution,
” = 1001 : technical error (messages S00341 to S00349)
lo_logger->popup( ).
ENDIF.
ENDMETHOD.
METHOD select_tables.
DATA lt_packno TYPE SORTED TABLE OF essr-packno WITH UNIQUE KEY table_line.
DATA lt_packno_2 TYPE SORTED TABLE OF essr-packno WITH UNIQUE KEY table_line.
DATA ls_esll TYPE REF TO esll.
CLEAR es_essr.
CLEAR et_esll.
CLEAR et_eskn.
CLEAR et_eskl.
SELECT SINGLE *
FROM essr
WHERE lblni = @iv_entrysheet
INTO @ES_essr.
IF sy-subrc <> 0.
message ‘Sheet does not exist’ type ‘I’ display like ‘E’.
return.
ENDIF.
SELECT *
FROM eskn
WHERE packno = @iv_entrysheet
INTO TABLE @ET_eskn. “#EC CI_SUBRC
lt_packno = VALUE #( ( es_essr-packno ) ).
lt_packno_2 = lt_packno.
WHILE lt_packno_2 IS NOT INITIAL.
SELECT *
FROM esll
FOR ALL ENTRIES IN @LT_packno_2
WHERE packno = @LT_packno_2-table_line
APPENDING TABLE @ET_esll. “#EC CI_SUBRC
lt_packno_2 = VALUE #( ).
LOOP AT et_esll REFERENCE INTO ls_esll
WHERE sub_packno IS NOT INITIAL.
INSERT ls_esll->sub_packno INTO TABLE lt_packno.
IF sy-subrc = 0.
INSERT ls_esll->sub_packno INTO TABLE lt_packno_2.
ENDIF.
ENDLOOP.
ENDWHILE.
IF lt_packno IS NOT INITIAL.
SELECT *
FROM eskl
FOR ALL ENTRIES IN @LT_packno
WHERE packno = @LT_packno-table_line
INTO TABLE @ET_eskl. “#EC CI_SUBRC
ENDIF.
ENDMETHOD.
ENDCLASS. Read More Technology Blog Posts by Members articles
#SAP
#SAPTechnologyblog