В свое время писал вот такую прогу, пользуйся. немного докрутишь под себя и все будет гуд.
В личку могу в нормальном виде скинуть код со структурами.
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