В свое время писал вот такую прогу, пользуйся. немного докрутишь под себя и все будет гуд.
В личку могу в нормальном виде скинуть код со структурами.
Code:
*&---------------------------------------------------------------------*
*& Report Z_FI_BP_OST
*&
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
* Название : Программа массового ввода ACC
*
*** Цель: Программа массового ввода ACC
*&---------------------------------------------------------------------*
report z_fi_bp_ost.
types ty_t_acc type table of z_salv_zacc.
tables: t001.
data gt_data type ty_t_acc.
data ok_code type syucomm.
class lcl_event definition deferred.
data g_container type ref to cl_gui_docking_container.
data g_grid type ref to cl_gui_alv_grid.
data g_error.
data gt_return type bapiret2_t.
data g_log type ref to zcl_msg_log.
************************************************************************
selection-screen begin of block par with frame.
parameter sp_acr type tacac_objtyp-acac_objtype.
parameter sp_bldat type bkpf-bldat default sy-datum obligatory.
parameter sp_fname type rlgrap-filename obligatory.
selection-screen end of block par.
at selection-screen output.
set cursor field 'SP_FNAME'.
at selection-screen on value-request for sp_fname.
perform get_fname.
************************************************************************
start-of-selection.
perform free.
perform select_data.
call screen 9100.
************************************************************************
class lcl_event definition.
public section.
class-methods:
handle_double_click
for event double_click of cl_gui_alv_grid
importing e_row e_column es_row_no,
handle_toolbar
for event toolbar of cl_gui_alv_grid
importing e_object e_interactive,
handle_user_command
for event user_command of cl_gui_alv_grid
importing e_ucomm.
* PRIVATE SECTION.
endclass. "lcl_event DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
class lcl_event implementation.
method handle_double_click.
perform double_click using e_row
e_column
es_row_no.
"sender.
endmethod. "handle_double_click
method handle_toolbar.
data: s_toolbar type stb_button,
separator type tb_btype value 3,
s_btnmenu type stb_btnmnu.
delete e_object->mt_toolbar where function eq :
* '&MB_SUM',
* '&MB_SUBTOT',
'&&SEP05',
'&PRINT_BACK',
'&MB_VIEW',
'&&SEP06',
'&GRAPH',
'&&SEP07',
'&INFO',
**
'&CHECK',
'&REFRESH',
'&&SEP01',
'&LOCAL&CUT',
'&LOCAL©',
'&LOCAL&PASTE',
'&LOCAL&UNDO',
'&&SEP02',
'&LOCAL&APPEND',
'&LOCAL&INSERT_ROW',
'&LOCAL&DELETE_ROW',
'&LOCAL©_ROW',
'&&SEP03'.
clear s_toolbar.
move separator to s_toolbar-butn_type.
append s_toolbar to e_object->mt_toolbar.
clear s_toolbar.
move 'CREATE' to s_toolbar-function.
move icon_create to s_toolbar-icon.
move 'Создать объекты ACC' to s_toolbar-quickinfo.
move 'Создать ACC' to s_toolbar-text.
append s_toolbar to e_object->mt_toolbar.
endmethod. "handle_toolbar
method handle_user_command.
case e_ucomm.
when 'CREATE'.
perform create_acc.
perform refresh_alv.
* IF g_error = abap_false.
** LEAVE TO SCREEN 0.
* ENDIF.
endcase.
endmethod. "handle_user_command
endclass. "lcl_event IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form double_click
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
form double_click using p_e_row type lvc_s_row
p_e_column type lvc_s_col
p_es_row_no type lvc_s_roid.
data:
l_ref_key type ace_ref_key.
field-symbols: <fw> like line of gt_data.
check p_e_row-rowtype is initial.
read table gt_data assigning <fw> index p_e_row-index.
check sy-subrc = 0.
case p_e_column-fieldname.
when 'ACAC_OBJNUMBER'.
check <fw>-acac_objnumber is not initial.
clear: l_ref_key.
l_ref_key = <fw>-acac_objnumber.
submit acac_basisdata_sel_for_main
with p_keydte = <fw>-vality_from
with so_bukrs-low = sp_bukrs
with so_objnm-low = l_ref_key
and return.
when 'ICON'.
check <fw>-acac_objnumber is not initial.
clear: l_ref_key.
l_ref_key = <fw>-acac_objnumber.
submit acac_basisdata_sel_for_main
with p_keydte = <fw>-vality_from
with so_bukrs-low = sp_bukrs
with so_objnm-low = l_ref_key
and return.
when others.
endcase.
endform. "double_click
*&---------------------------------------------------------------------*
*& Form refresh_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form refresh_alv.
data stable type lvc_s_stbl.
stable-row = 'X'.
stable-col = 'X'.
call method g_grid->refresh_table_display
exporting
is_stable = stable
exceptions
finished = 1
others = 2.
* CLEAR: save_code, save_code2.
* call method cl_gui_cfw=>flush.
endform. "refresh_alv
*&---------------------------------------------------------------------*
*& Form GET_FNAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form get_fname .
data rc type i.
data t_fname type filetable.
data s_fname type file_table.
call method cl_gui_frontend_services=>file_open_dialog
* EXPORTING
* window_title =
* default_extension =
* default_file_name =
* with_encoding =
* file_filter =
* initial_directory =
changing
file_table = t_fname
rc = rc
* user_action =
* file_encoding =
exceptions
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
others = 5.
if sy-subrc ne 0.
return.
endif.
if rc = 1.
read table t_fname into sp_fname index 1.
endif.
endform. " GET_FNAME
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form select_data .
field-symbols <data> type zec_salv_zacc.
Выборка из EXCEL
loop at gt_data assigning <data>.
<data>-bukrs = sp_bukrs.
call function 'CONVERSION_EXIT_CUNIT_INPUT'
exporting
input = <data>-unit_b
importing
output = <data>-unit_b.
call function 'CONVERSION_EXIT_CUNIT_INPUT'
exporting
input = <data>-unit_n
importing
output = <data>-unit_n.
<data>-bldat = sp_bldat.
endloop.
endform. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Module STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_9100 output.
set pf-status 'MAIN9100'.
set titlebar 'MAIN9100'.
endmodule. " STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module exit_command_9100 input.
case ok_code.
when 'CANCEL'.
leave to screen 0.
endcase.
endmodule. " EXIT_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_9100 input.
case ok_code.
when 'BACK' or 'EXIT' or 'CANCEL'.
leave to screen 0.
endcase.
endmodule. " USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
*& Module ALV_OUTPUT OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module alv_output output.
if g_container is not bound.
perform alv_output.
endif.
endmodule. " ALV_OUTPUT OUTPUT
*&---------------------------------------------------------------------*
*& Form CREATE_OS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form create_acc .
data s_return type bapiret2.
if g_log is bound.
g_log->clear_log( ).
else.
create object g_log.
endif.
refresh gt_return.
clear g_error.
perform acc_create.
endform.
*&---------------------------------------------------------------------*
*& Form ALV_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form alv_output .
create object g_container
exporting
* repid = sy-repid
* dynnr = sy-dynnr
side = cl_gui_docking_container=>dock_at_top
extension = cl_gui_docking_container=>ws_maximizebox
* ratio =
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
if sy-subrc ne 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
check g_container is bound.
create object g_grid
exporting
i_parent = g_container.
data t_fcat type lvc_t_fcat.
data s_layout type lvc_s_layo.
field-symbols <fcat> type lvc_s_fcat.
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_buffer_active = ''
i_structure_name = 'Z_SALV_ZACC'
i_bypassing_buffer = 'X'
changing
ct_fieldcat = t_fcat
exceptions
inconsistent_interface = 1
program_error = 2
others = 3.
loop at t_fcat assigning <fcat>.
case <fcat>-fieldname.
when 'ACCRULE_B'.
<fcat>-reptext = 'Предписание по отчетности БУ'.
<fcat>-scrtext_l = 'Предписание по отчетности БУ'.
<fcat>-scrtext_m = 'Предписание по отчетности БУ'.
<fcat>-scrtext_s = 'Предписание по отчетности БУ'.
when 'AMOUNT_B'.
<fcat>-reptext = 'Общая сумма БУ'.
<fcat>-scrtext_l = 'Общая сумма БУ'.
<fcat>-scrtext_m = 'Предписание БУ'.
<fcat>-scrtext_s = 'Предписание БУ'.
when 'CURRENCY_B'.
<fcat>-reptext = 'Валюта БУ'.
<fcat>-scrtext_l = 'Валюта БУ'.
<fcat>-scrtext_m = 'Валюта БУ'.
<fcat>-scrtext_s = 'Валюта БУ'.
when 'QUANTITY_B'.
<fcat>-reptext = 'Колич БУ'.
<fcat>-scrtext_l = 'Колич БУ'.
<fcat>-scrtext_m = 'Колич БУ'.
<fcat>-scrtext_s = 'Колич БУ'.
when 'UNIT_B'.
<fcat>-reptext = 'Ед.из БУ'.
<fcat>-scrtext_l = 'Ед.из БУ'.
<fcat>-scrtext_m = 'Ед.из БУ'.
<fcat>-scrtext_s = 'Ед.из БУ'.
when 'ACRMETHOD_B'.
<fcat>-reptext = 'Мет.разг БУ'.
<fcat>-scrtext_l = 'Мет.разг БУ'.
<fcat>-scrtext_m = 'Мет.разг БУ'.
<fcat>-scrtext_s = 'Мет.разг БУ'.
when 'ACCRULE_N'.
<fcat>-reptext = 'Предписание по отчетности НУ'.
<fcat>-scrtext_l = 'Предписание по отчетности НУ'.
<fcat>-scrtext_m = 'Предписание по отчетности НУ'.
<fcat>-scrtext_s = 'Предписание по отчетности НУ'.
when 'AMOUNT_N'.
<fcat>-reptext = 'Общая сумма НУ'.
<fcat>-scrtext_l = 'Общая сумма НУ'.
<fcat>-scrtext_m = 'Предписание НУ'.
<fcat>-scrtext_s = 'Предписание НУ'.
when 'CURRENCY_N'.
<fcat>-reptext = 'Валюта НУ'.
<fcat>-scrtext_l = 'Валюта НУ'.
<fcat>-scrtext_m = 'Валюта НУ'.
<fcat>-scrtext_s = 'Валюта НУ'.
when 'QUANTITY_N'.
<fcat>-reptext = 'Колич НУ'.
<fcat>-scrtext_l = 'Колич НУ'.
<fcat>-scrtext_m = 'Колич НУ'.
<fcat>-scrtext_s = 'Колич НУ'.
when 'UNIT_N'.
<fcat>-reptext = 'Ед.из НУ'.
<fcat>-scrtext_l = 'Ед.из НУ'.
<fcat>-scrtext_m = 'Ед.из НУ'.
<fcat>-scrtext_s = 'Ед.из НУ'.
when 'ACRMETHOD_N'.
<fcat>-reptext = 'Мет.разг НУ'.
<fcat>-scrtext_l = 'Мет.разг НУ'.
<fcat>-scrtext_m = 'Мет.разг НУ'.
<fcat>-scrtext_s = 'Мет.разг НУ'.
when 'ZLIFNR'.
<fcat>-reptext = 'Контрагент'.
<fcat>-scrtext_l = 'Контрагент'.
<fcat>-scrtext_m = 'Контрагент'.
<fcat>-scrtext_s = 'Контрагент'.
when 'ZDZUONR'.
<fcat>-reptext = 'Договор'.
<fcat>-scrtext_l = 'Договор'.
<fcat>-scrtext_m = 'Договор'.
<fcat>-scrtext_s = 'Договор'.
when 'ICON'.
<fcat>-reptext = 'Статус'.
<fcat>-scrtext_l = 'Статус'.
<fcat>-scrtext_m = 'Статус'.
<fcat>-scrtext_s = 'Статус'.
when others.
endcase.
endloop.
s_layout-zebra = 'X'.
s_layout-sel_mode = 'N'.
s_layout-cwidth_opt = 'X'.
data s_variant type disvariant.
s_variant-report = sy-repid.
* s_variant-variant = 'DEFAULT'.
set handler lcl_event=>handle_toolbar for g_grid.
set handler lcl_event=>handle_user_command for g_grid.
set handler lcl_event=>handle_double_click for g_grid.
* CALL METHOD grid->set_variant( s_variant ).
call method g_grid->set_table_for_first_display
exporting
i_bypassing_buffer = 'X'
i_buffer_active = ''
is_variant = s_variant
i_save = 'A'
is_layout = s_layout
* it_toolbar_excluding = t_exclude
changing
it_outtab = gt_data
it_fieldcatalog = t_fcat
* it_sort = t_sort
exceptions
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.
if sy-subrc ne 0.
endif.
endform. " ALV_OUTPUT
*&---------------------------------------------------------------------*
*& Form FREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form free .
refresh gt_data.
if g_grid is bound.
g_grid->free( ).
endif.
if g_container is bound.
g_container->free( ).
endif.
endform. " FREE
*&---------------------------------------------------------------------*
*& Form ACC_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form acc_create .
data:
is_assignments type ace_assignments,
it_accounts type aceds_accounts_t,
it_params type aceds_param_t,
id_effdate type ace_effdate,
is_post_params type aceps_manual_posting_params.
data:
ed_data_created type flag,
ed_data_changed type flag,
et_docitems type aceps_ace_doc_extended_t,
et_return type bapiret2_t,
et_accdoc_return type ace_accdoc_return_t.
data: cs_object type acac_object_header_ext,
ct_object_items type aceds_items_t.
data: wa_object_items type aceds_object_item_ext.
data: wa_params type aceds_object_parameter_ext.
field-symbols <data> type zec_salv_zacc.
loop at gt_data assigning <data> where acac_objnumber is initial.
clear: cs_object, is_assignments, id_effdate, wa_object_items, ed_data_created,
ed_data_changed .
refresh: it_params[], et_return[], et_docitems[], et_accdoc_return[],ct_object_items[].
"Заголовок
cs_object-bukrs = sp_bukrs.
cs_object-acac_objtype = sp_acr.
cs_object-date_from = sp_bldat.
cs_object-text = <data>-text.
cs_object-acac_resperson = <data>-acac_resperson.
cs_object-vality_from = <data>-vality_from.
cs_object-vality_to = <data>-vality_to.
"контировка
is_assignments-costcenter = <data>-costcenter.
"Дата
id_effdate = sp_bldat.
"
* it_accounts-
"позиции
move:
<data>-acrtype to wa_object_items-acrtype,
<data>-accrule_b to wa_object_items-accrule,
<data>-amount_b to wa_object_items-amount,
<data>-currency_b to wa_object_items-currency,
<data>-quantity_b to wa_object_items-quantity,
<data>-unit_b to wa_object_items-unit,
<data>-acrmethod_b to wa_object_items-acrmethod.
append wa_object_items to ct_object_items[].
clear: wa_object_items.
move: <data>-acrtype to wa_object_items-acrtype,
<data>-accrule_n to wa_object_items-accrule,
<data>-amount_n to wa_object_items-amount,
<data>-currency_n to wa_object_items-currency,
<data>-quantity_n to wa_object_items-quantity,
<data>-unit_n to wa_object_items-unit,
<data>-acrmethod_n to wa_object_items-acrmethod.
append wa_object_items to ct_object_items[].
"даты
is_post_params-pstng_date = sp_bldat.
is_post_params-fisc_year = sp_bldat(4).
is_post_params-fis_period = sp_bldat+4(2).
" параметры
if <data>-zlifnr is not initial.
clear: wa_params.
wa_params-param_name = 'ZLIFNR'.
wa_params-content = <data>-zlifnr.
append wa_params to it_params.
endif.
if <data>-zdzuonr is not initial.
clear: wa_params.
wa_params-param_name = 'ZDZUONR'.
wa_params-content = <data>-zdzuonr.
append wa_params to it_params.
endif.
if <data>-zanln1 is not initial.
clear: wa_params.
wa_params-param_name = 'ZANLN1'.
wa_params-content = <data>-zanln1.
append wa_params to it_params.
endif.
call function 'ACAC_OBJECT_MODIFY_EXT'
exporting
is_assignments = is_assignments
it_accounts = it_accounts
it_params = it_params
id_effdate = id_effdate
is_post_params = is_post_params
id_testrun = abap_false
importing
ed_data_created = ed_data_created
ed_data_changed = ed_data_changed
et_docitems = et_docitems
et_return = et_return
et_accdoc_return = et_accdoc_return
changing
cs_object = cs_object
ct_object_items = ct_object_items.
break ecsflas01.
<data>-acac_objnumber = cs_object-acac_objnumber.
if cs_object-acac_objnumber is not initial and ed_data_created eq abap_true .
<data>-icon = '@08@'.
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
<data>-icon = '@0A@'.
endif.
endloop.
endform. " ACC_CREATE
*GUI Texts
*----------------------------------------------------------
* MAIN9100 --> Загрузка объектов ACC
*Selection texts
*----------------------------------------------------------
* SP_ACR Вид объекта разграничения
* SP_BLDAT Дата документа
* SP_BUKRS Балансовая единица
* SP_FNAME Имя файла
*Messages
*----------------------------------------------------------
*
* Message class: PM
*276 Нет полномочий для БЕ &1