Текущее время: Сб, июл 19 2025, 23:47

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Группировки в EXCELе через DOI
СообщениеДобавлено: Вт, окт 24 2006, 18:34 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
Не знаю, наверное опять хочу того, чего не должна хотеть... :oops: , но очень надо.

Короче, есть ALV с субтоталами по полю "А" (вложено "Б" (вложено "С" )). Поле "С" свернуто (expa = 'х')

Требуется: вывести алв в ексел как есть на экране + строка сверху таблицы, + шапка таблицы, + после алв еще другая it + еще много чего. Без шаблонов.

Делаю как:
Выгружаю в ексел через i_oi_spreadsheet. Делаю группы через spreadsheet->set_hierarchy_table.
Вот тут подсмотрела, да не все есть. (Ссылка на важные таблицы есть, но нет описания таблицы иерархии)
http://help.sap.com/saphelp_47x200/helpdata/en/21/b53144e1ba11d2bdbe080009b4534c/frameset.htm
Субтоталы считаю вручную и вывожу соответственно в строку, следующую после последней строки в группе.


Как сделать, чтобы итоги были снизу? :roll: Как в екселе(данные - группа и структура - настройка - птичка итоги в строках под данными)
Как сделать, чтобы группы были свернутыми (+) ?

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

Code:
ATA: sytab_ind   LIKE sy-tabix.

DATA: wa_s_ktrart TYPE t_sum_line,
      wa_s_hkont  TYPE t_sum_line,
      wa_s_vbund  TYPE t_sum_line
      .
DATA: wa_h_ktrart LIKE LINE OF hierarchy_table,
      wa_h_hkont  LIKE LINE OF hierarchy_table,
      wa_h_vbund  LIKE LINE OF hierarchy_table
      .

DATA: am_ktrart LIKE sy-tabix,
      am_hkont  LIKE sy-tabix,
      am_vbund  LIKE sy-tabix.

* Achtung! Very inflexible alhorythm. Only for ktrart->hkont->vbund

  SORT it_liste BY ktrart hkont vbund shkzg.

  LOOP AT it_liste.
    sytab_ind = sy-tabix.

    AT NEW vbund.
      wa_h_vbund-firstline = k_y + 1.
      CLEAR: am_vbund.
    ENDAT.

    AT NEW hkont.
      wa_h_hkont-firstline = k_y + 1.
      CLEAR: am_hkont.
    ENDAT.

    AT NEW ktrart.
      wa_h_ktrart-firstline = k_y + 1.
      CLEAR: am_ktrart.
    ENDAT.
* - count amount of rows in hierarhy
    am_ktrart = am_ktrart + 1.
    am_hkont  = am_hkont  + 1.
    am_vbund  = am_vbund  + 1.

* --- gather account sum table
    MOVE-CORRESPONDING it_liste TO it_acc_sums.
    COLLECT it_acc_sums.

* --- write data to table cells like excel cells
    CLEAR: it_excel. " it-header
    k_y = k_y + 1.
    WRITE: it_liste-ktrart    TO it_excel-b,
           it_liste-hkont     TO it_excel-c,
           it_liste-vbund     TO it_excel-e.
    WRITE it_liste-shkzg     TO it_excel-d.

    PERFORM write_sum_to_excel USING it_liste-dmbtr_its
                               CHANGING it_excel-f.
    PERFORM write_sum_to_excel USING it_liste-dmbtr_sap
                               CHANGING it_excel-g.
    PERFORM write_sum_to_excel USING it_liste-delta
                               CHANGING it_excel-h.
    APPEND it_excel.

* --- formatting data cells
    CLEAR cell_format.
    IF sytab_ind = 1.
      cell_format-frametyp = 66.
    ENDIF.
    cell_format-top  = k_y.
    cell_format-left = k_x + 4.
    cell_format-rows = 1.
    cell_format-columns = 2.
    cell_format-number = 1.
    cell_format-decimals = 2.
    APPEND cell_format.
    CLEAR cell_format.

* -- Count global total sums
    gsum_dmbtr_its = gsum_dmbtr_its + it_liste-dmbtr_its.
    gsum_dmbtr_sap = gsum_dmbtr_sap + it_liste-dmbtr_sap.
    gsum_delta     = gsum_delta     + it_liste-delta.
* -- Count subtotals
    wa_s_ktrart-its   = wa_s_ktrart-its + it_liste-dmbtr_its.
    wa_s_ktrart-sap   = wa_s_ktrart-its + it_liste-dmbtr_sap.
    wa_s_ktrart-delta = wa_s_ktrart-its + it_liste-delta.

    wa_s_hkont-its   = wa_s_hkont-its + it_liste-dmbtr_its.
    wa_s_hkont-sap   = wa_s_hkont-its + it_liste-dmbtr_sap.
    wa_s_hkont-delta = wa_s_hkont-its + it_liste-delta.

    wa_s_vbund-its   = wa_s_vbund-its + it_liste-dmbtr_its.
    wa_s_vbund-sap   = wa_s_vbund-its + it_liste-dmbtr_sap.
    wa_s_vbund-delta = wa_s_vbund-its + it_liste-delta.

    AT END OF vbund.
      am_ktrart = am_ktrart + 1.
      am_hkont  = am_hkont  + 1.
* - hierarhy
      wa_h_vbund-length = am_vbund.
      APPEND wa_h_vbund TO hierarchy_table.
      CLEAR: am_vbund, wa_h_vbund.
* -- output sum
      CONCATENATE '... ' it_liste-vbund '-Summe'(t18) INTO it_excel-b.
      PERFORM write_sum_to_excel USING wa_s_vbund-its
                                 CHANGING it_excel-f.
      PERFORM write_sum_to_excel USING wa_s_vbund-sap
                                 CHANGING it_excel-g.
      PERFORM write_sum_to_excel USING wa_s_vbund-delta
                                 CHANGING it_excel-h.
      CLEAR: it_excel-c, it_excel-d,
              it_excel-e, cell_format.
      APPEND it_excel.
* -- format sum line
      k_y = k_y + 1.
      cell_format-top  = k_y.
      cell_format-left = k_x.
      cell_format-rows = 1.
      cell_format-columns = columns_number - 3.
      cell_format-back = 0.
      cell_format-bold = 1.
      APPEND cell_format.

      cell_format-left = k_x + columns_number - 3.
      cell_format-columns = 3.
      cell_format-frametyp = 134.  " =
      cell_format-number = 1.
      cell_format-decimals = 2.
      APPEND cell_format.
      CLEAR: it_excel, cell_format, wa_s_vbund.
    ENDAT.

    AT END OF hkont.
      am_ktrart = am_ktrart + 1.
* - hierarhy
      wa_h_hkont-length = am_hkont.
      APPEND wa_h_hkont TO hierarchy_table.
      CLEAR: am_hkont, wa_h_hkont.
* -- output sum
      CONCATENATE '.. ' it_liste-hkont '-Summe'(t18) INTO it_excel-b.
      PERFORM write_sum_to_excel USING wa_s_hkont-its
                                 CHANGING it_excel-f.
      PERFORM write_sum_to_excel USING wa_s_hkont-sap
                                 CHANGING it_excel-g.
      PERFORM write_sum_to_excel USING wa_s_hkont-delta
                                 CHANGING it_excel-h.
      CLEAR: it_excel-c, it_excel-d,
              it_excel-e, cell_format.
      APPEND it_excel.
* -- format sum line
      k_y = k_y + 1.
      cell_format-top  = k_y.
      cell_format-left = k_x.
      cell_format-rows = 1.
      cell_format-columns = columns_number - 3.
      cell_format-back = 0.
      cell_format-bold = 1.
      APPEND cell_format.

      cell_format-left = k_x + columns_number - 3.
      cell_format-columns = 3.
      cell_format-frametyp = 134.  " =
      cell_format-number = 1.
      cell_format-decimals = 2.
      APPEND cell_format.
      CLEAR: it_excel, cell_format, wa_s_hkont.
    ENDAT.

    AT END OF ktrart.
* - hierarhy
      wa_h_ktrart-length = am_ktrart.
      APPEND wa_h_ktrart TO hierarchy_table.
      CLEAR: am_ktrart, wa_h_ktrart.
* -- output sum
      CONCATENATE '. ' it_liste-ktrart '-Summe'(t18) INTO it_excel-b.
      PERFORM write_sum_to_excel USING wa_s_ktrart-its
                                 CHANGING it_excel-f.
      PERFORM write_sum_to_excel USING wa_s_ktrart-sap
                                 CHANGING it_excel-g.
      PERFORM write_sum_to_excel USING wa_s_ktrart-delta
                                 CHANGING it_excel-h.
      CLEAR: it_excel-c, it_excel-d,
              it_excel-e, cell_format.
      APPEND it_excel.
* -- format sum line
      k_y = k_y + 1.
      cell_format-top  = k_y.
      cell_format-left = k_x.
      cell_format-rows = 1.
      cell_format-columns = columns_number - 3.
      cell_format-back = 0.
      cell_format-bold = 1.
      APPEND cell_format.

      cell_format-left = k_x + columns_number - 3.
      cell_format-columns = 3.
      cell_format-frametyp = 134.  " =
      cell_format-number = 1.
      cell_format-decimals = 2.
      APPEND cell_format.
      CLEAR: it_excel, cell_format, wa_s_ktrart.
    ENDAT.

  ENDLOOP.

тут правда еще группы пока по-дурацки разбиваются


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 25 2006, 09:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Итог снизу - это MODE <> 0 в таблице иерархий.

Кстати, целиком расчитывать итоги самостоятельно не нужно. Они есть почти готовые
Code:
  grid->get_subtotals(
    IMPORTING
      ep_collect00   = lp_collect00
      ep_collect01   = lp_collect01
      ep_collect02   = lp_collect02
      ep_collect03   = lp_collect03
      ep_collect04   = lp_collect04
      ep_collect05   = lp_collect05
      ep_collect06   = lp_collect06
      ep_collect07   = lp_collect07
      ep_collect08   = lp_collect08
      ep_collect09   = lp_collect09
      et_grouplevels = lt_grouplevels[]
  ).

lp_collectXX содержат ссылки на итоговые таблицы по 10-ти уровням + общий итог.
Итоги почти готовые в том смысле, что например для получения среднего придётся ещё делить сумму в итоге на кол-во строк, участвующих в группе


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 25 2006, 10:00 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
а можно про mode поподробнее? я просто пробовала ставить его 1, но это работает если только 1 уровень иерархии. Если несколько, то при mode = '1' итоги "перепрытивают вверх". Пробовала мод 1 2 3 и 3 2 1, все равно итоги прыгают вверх.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 25 2006, 10:48 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
А mode = 1 во всех строках? Вот пример, у меня работает
Code:
  DATA:
    table TYPE soi_hierarchy_table,
    wa    LIKE LINE OF table.

  wa-mode  = 1.
  wa-firstline = 1.

  DO 5 TIMES.
    wa-length = sy-index.
    APPEND wa TO table.
  ENDDO.

  wa-firstline = 7.

  DO 5 TIMES.
    wa-length = sy-index.
    APPEND wa TO table.
  ENDDO.

  spreadsheet->set_hierarchy_table( no_flush = 'X' table = table[] ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, окт 25 2006, 11:31 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, авг 22 2005, 14:50
Сообщения: 1285
Откуда: с работы
Пол: Женский
да, пример рабочий, значит что-то не так с координатами. Буду искать, спасибо


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB