понедельник, 29 июля 2013 г.

Выгрузка в Excel через BDS (Business Document Service)

Еще один способ выгрузки, со своими плюсами и минусами, подробно описано тут:
работа с сервисом бизнес-документов http://abaphr.ru/bds_oaor/
работа с шаблонами бизнес-документов из ABAP http://abaphr.ru/bds_aba/
Я только дополню более подробно сам момент, выгрузки внутренней таблицы в эксель форму.
Предположим, что все, что описано в контексте этой статьи, сделано, создан бизнес-документ, выбран тот документ, который нам нужен, выполнено его открытие, выполнена инициализация интерфейса. Остается лишь перенести внутреннюю таблицу в эксель.
В первую очередь, в шаблоне эксель, необходимо, присвоить имя диапазону ячеек, для дальнейшей работы с ним. Диапазон будет расширяться динамический, в зависимости от количества выводимых столбцов и значений, но начинаться будет всегда на той строке, где он стоит изначально. На рисунке область диапазона выделена серым цветом, и ей присвоено имя «table1».

















 Далее, я создаю подпрограмму в блоке инициализация интерфейса.

if not has is initial.
    call method document->get_spreadsheet_interface
      
importing
        sheet_interface 
handle.
    
perform fill_exl_tab using lt_outtab.
endif.

lt_outtab эта наша внутренняя таблицаданные которой необходимо перенести в excel.
Создаю простейший макрос для заполнения таблицы сont, тип которой определен ранее как soi_generic_table.
define fill_cont.
  
clear wa_cont.
"тут интуитивно все понятно, но все же пропишу
  &2 = &2 + "При каждом входе наращиваем значение, т.к. каждая последующая запись, в одной строке эксель формы, должна быть записана в новую ячейку
  wa_cont-row    = &1"Строка в эксель форме   
  wa_cont-column = &2"Колонка в эксель форме  
 
 wa_cont-value  = &3"Значение в ячейкев эксель форме
  
append wa_cont to cont.
end-of-definition.
Далее, в подпрограмме fill_exl_tab, запускаем цикл по выходной таблице, используя созданный макрос.
  loop at lt_outtab into wa_ottab.
    add to s_tbx. "Наращиваем счетчик по строкам
    
clearcolumn"Сбрасываем счетчик по колонкам
    fill_cont:
            s_tbx column  wa_ottab-zplanz    
,
            s_tbx column  wa_ottab-gjahr     
,
            s_tbx column  wa_ottab-zfact     
,
            s_tbx column  wa_ottab-zdatadem  
,
            s_tbx column  wa_ottab-diam      
,
            s_tbx column  wa_ottab
-wall      .
  endloop.
Далее, меняем диапазон в зависимости от количества записей в выгружаемой таблице.
  call method handle->change_range
    
exporting
      rangename 
'table1'  "имя диапазона в эксель форме
      
rows      lineslt_outtab "количество строк
      columns   
6"количество столбцов
Этими же значениями заполняем таблицу диапазона ran определенную ранее как soi_range_list
  rangei-name 'table1'.
  rangei
-rows lineslt_outtab ).
  rangei
-columns 6.
  
append rangei to ran.

Переносим данные в ексель форму.
  call method handle->set_ranges_data
    
exporting
      
ranges   ran
      contents 
cont.

И еще один момент. Если делать выгрузку без запуска основного отчета, то можно заметить, не вооруженным глазом, что после того как выгрузятся данные, excel-файл закрывается. Что бы этого не произошло, необходимо следом за выгрузкой вывести какое-либо информационное окно.

Комментариев нет:

Отправить комментарий