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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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