среда, 9 апреля 2014 г.

Загрузка данных из файла EXCEL во внутреннюю таблицу SAP


Одна ячейка в EXCEL-таблице соответствует одному полю во внутренней таблице.
Допустим есть EXCEL-таблица













Перенесем ее в нашу внутреннюю таблицу SAP.

*&---------------------------------------------------------------------*
*& Report  ZDOWNLOAD_ME41
*&
*&---------------------------------------------------------------------*
report  zdownload_me41.
"структура соответствует загружаемому файлу из EXCEL <<<
typesbegin of ta_excel,
   
        txz01 type ekpo-txz01,
           anmng 
type rm06e-anmng,
           meins 
type ekpo-meins,
         
end of ta_excel,
">>>
        tt_excel 
type standard table of ta_excel.
data:  excel_tab type tt_excel.
parametersfilename like  rlgrap-filename obligatory.
"Событие - обработка F4 для имени файла
at selection-screen on value-request for filename.

  
"Запрос имени файла
  
call function 'WS_FILENAME_GET'
    
exporting
      def_filename     
' '
      
mask             ',*.xls,*.xls.'
      
mode             'O'
      
title            'Выбор файла'
    
importing
      filename         
filename
    exceptions
      inv_winsys       
01
      no_batch         
02
      selection_cancel 
03
      selection_error  
04.
start-of-selection.
*собственно сама загрузка excel файл во внутр.таблицу
  
perform select_from_excel.
*&---------------------------------------------------------------------*
*&      Form  SELECT_FROM_EXCEL
*&---------------------------------------------------------------------*
*       Данные из EXCEL в табл.
*----------------------------------------------------------------------*
form select_from_excel .
  
datalt_raw          type truxs_t_text_data.

  
call function 'TEXT_CONVERT_XLS_TO_SAP'
    
exporting
*     I_FIELD_SEPERATOR    =
*     I_LINE_HEADER        =
      i_tab_raw_data       
lt_raw
      i_filename           
filename
    
tables
      i_tab_converted_data 
excel_tab
    
exceptions
      conversion_failed    
1
      
others               2.
  
if sy-subrc <> 0.
    
message 'Ошибка загрузки данных из файлаtype 'E'.
  endif.
endform.                    " SELECT_FROM_EXCEL

Результат данных манипуляций

Средство поиска

Средство поиска будем создавать непосредственно в коде программы. Это удобней и быстрей чем через SE11 (по крайней мере для меня), если мы только не предполагаем использовать это средство поиска из различных программ.
Все достаточно просто, поэтому без комментариев.

  databegin of wa_zdogov,
          zdognr 
type zdogov-zdognr,
         znumclt 
type zdogov-znumclt,
          
end of wa_zdogov,
          lt_zdogov 
like standard table of wa_zdogov,
          lt_return 
type standard table of ddshretval,
          wa_return 
type ddshretval.

  
select zdognr znumclt
    
into table lt_zdogov
    
from zdogov
   
where zdognr eq zk2dog and
         suname eq sy-uname.
  if sy-subrc ne 0.
    
message 'Данных не найденоtype 'S'.
    
exit.
  
endif.

  
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
    
exporting
      retfield   
'ZNUMCLT'
      pvalkey    
'X'
      value_org  
'S'
    
tables
      value_tab  
lt_zdogov
      return_tab 
lt_return.

    
read table lt_return into wa_return index 1.
    
check sy-subrc eq 0.
    zta_oil-znumclt 
wa_return-fieldval.

понедельник, 24 марта 2014 г.

Быстрый способ вывода ALV

Реализовано все на том же классе CL_SALV_TABLE. 
Что нужно:
Создаем экран.
Помещаем на него «спец. упр. элемент» и называем его, например 'CONT'.
В PBO экрана создаем модуль, внутрь которого копируем код указанный внизу, подставляем свою внутреннюю таблицу и вызываем экран.

data:
  gr_container 
type ref to cl_gui_custom_container,
      gr_table 
type ref to cl_salv_table,
  gr_functions 
type ref to cl_salv_functions_list.


  
if gr_container is not bound.

    
create object gr_container
      
exporting
        container_name 
'CONT'.


    
try.
        cl_salv_table
=>factory(
          
exporting
            r_container    
gr_container
            container_name 
'CONT'
          
importing
            r_salv_table   
gr_table
          
changing
            t_table        
gt_outtab ). "это наша табл. с данными
      catch cx_salv_msg.
    endtry.

"это функциональные кнопки для ALV (выводить по желанию)
   
 gr_functions gr_table->get_functions( ).
    gr_functions
->set_default( ).
"вывод alv
    gr_table
->display( ).
  
endif.
Я пользуюсь этим способом для вывода каких-либо журналов работы, справочной информации и т.п. Очень удобно и быстро.