alv отчет sap что это

ABAP: Красивый

Эта публикация предназначена ABAP-разработчикам в SAP ERP и всем им сочувствующим.

Немногие знают, что в fullscreen ALV можно подключать HTML-заголовки. Еще больше не знают, что можно сделать красивый стандартный выпадающий список, он же select-box, только для такой по сути стандартной фичи, потребуется много вашего Z-кода.

Выглядит примерно так:

Добро пожаловать под кат.

Поехали! Определим глобальные переменные:

— Выходная таблица нашего отчета, пусть она будет на основе всем известной таблицы MARA;
— Переменная, в которой мы будем хранить текущее значение выбранной в селект-боксе;
— константу с подпрограммой для HTML-header;
— класс-handler, который будет срабатывать при выборе данных, и объект handler.

Напишем главную программу отчета и подпрограммы по инициализации, получении данных и выводе отчета. Здесь особо отмечу, что нужно создать объект handler и подключить HTML-заголовок: i_callback_html_top_of_page = gc_form_top.

Для HTML-хедера создаем подпрограмму с именем, указанным в глобальном константе. Вызовем из нее подпрограмму, которая создаст нашу красоту:

Посмотрим подпрограмму по созданию селект-бокса. Здесь отмечу, что если в отчете была команда, снять фильтры, зачищаем нашу глобальную переменную (gv_matnr) со значением. Потом создаем линию, в которую добавляем заголовок фильтра, вызываем подпрограмму, которая заполнит нам значения в нем, и сам фильтр на форму, закрываем линию:

В программе по заполнению фильтра добавим сначала то значение, которое сейчас выбрано, чтобы оно было первым в списке. Потом добавим значение Все, если у нас в таблице больше одного значения. И потом все записи из таблицы:

Внедрим наш handler. Здесь в sender->value значение, выбранное пользователем. Запишем его сразу в нашу глобальную переменную gv_matnr. В подпрограмме set_filter по обработке стандартной фильтрации:

1) Получим глобальный grid в локальный объект;
2) Получим уже установленные параметры фильтрации, и снимем уже установленный ранее фильтр, по полю, которое мы фильтруем, через селект-бокс;
3) Добавим новые параметры фильтрации;
4) Сохраним фильтр;
5) Обновим отчет.

Запускаем! Любуемся на итог страданий:

UPDATE: можно довести до:

Вроде простая штука, а в SAPе нужно постараться еще. Всем спасибо.

Источник

Глава 1. Создание ALV GRID. Часть 1

ABAP OBJECTS ALV

Рис. 1

Для этого нам необходимо создать следующие объекты:

Создание данных объектов описано в параграфах 1 – 7. В 8 параграфе на примере кнопки «Обновить» представлено взаимодействие класса представления данных и класса модели через класс контроллер.

§ 1. Создание объектов словаря

Необходимо создать следующие объекты:

Передача данных с селекционного экрана в класс контроллер

Отображение полей в ALV отчете

Структура выходной таблицы. Включает в себя структуру ZST_MVC_001_ALV и дополнительные поля необходимые в процессе выборки

Тип таблицы на основе структуры ZST_MVC_001_OUTTAB

Прежде чем переходить к созданию данных объектов, остановимся на небольшой инструкции поиска стандартных типов таблиц RANGE. Нужны нам будут данные типы таблиц для передачи SELECT-OPTIONS с селекционного экрана в класс контроллер.

Поиск структуры RANGE осуществляется в таблице DD03L. Мы знаем, что в структуре есть поле LOW интересующего нас типа (в данном примере домен S_CARR_ID).

Рис. 1

Рис. 2

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Комментарий от Олег Точенюк 20 октября 2014, 00:15

Комментарий от Александр Дублин 20 октября 2014, 09:35

Комментарий от Олег Точенюк 20 октября 2014, 16:11

Комментарий от Багдат Кенжалиев 22 октября 2014, 14:56

Комментарий от неизвестного пользователя 22 октября 2014, 20:30

По-моему, самое простое это воспользоваться ФМ «REUSE_ALV_GRID_DISPLAY» или на худой конец использовать класс «cl_salv_table». Согласен с Олегом Точенюком, зачем плодить объекты словаря.

Глава 1. Создание ALV GRID. § 1. Создание объектов словаря
Думаю логично почему в данном параграфе рассказывается о создании объектов словаря.

Да, можно использовать ФМ «REUSE_ALV_GRID_DISPLAY».
А можно все засунуть в 10000 строк кода без инклудов с локальными переменными.

Данная инструкция на простейших примерах объясняет как создавать сложные ALV отчеты с 2,3,4 alv на одном экране, которые взаимодействуют
друг с другом. В главах 2 и 3 примеры с двумя ALV.

Просьба дождаться выхода хотя бы первой главы и делать выводы.

Читайте также:  12 на 30 минуту что значит в ставках

Комментарий от Олег Точенюк 22 октября 2014, 22:49

Глава 1. Создание ALV GRID. § 1. Создание объектов словаря
Думаю логично почему в данном параграфе рассказывается о создании объектов словаря.

Да, можно использовать ФМ «REUSE_ALV_GRID_DISPLAY».
А можно все засунуть в 10000 строк кода без инклудов с локальными переменными.

Данная инструкция на простейших примерах объясняет как создавать сложные ALV отчеты с 2,3,4 alv на одном экране, которые взаимодействуют
друг с другом. В главах 2 и 3 примеры с двумя ALV.

Просьба дождаться выхода хотя бы первой главы и делать выводы.

Комментарий от Багдат Кенжалиев 23 октября 2014, 06:53

Глава 1. Создание ALV GRID. § 1. Создание объектов словаря
Думаю логично почему в данном параграфе рассказывается о создании объектов словаря.

Да, можно использовать ФМ «REUSE_ALV_GRID_DISPLAY».
А можно все засунуть в 10000 строк кода без инклудов с локальными переменными.

Данная инструкция на простейших примерах объясняет как создавать сложные ALV отчеты с 2,3,4 alv на одном экране, которые взаимодействуют
друг с другом. В главах 2 и 3 примеры с двумя ALV.

Просьба дождаться выхода хотя бы первой главы и делать выводы.

Шамиль, может после окончания всех статей по данной теме Вы скинете все в один PDF файл. Чтобы можно было читать офлайн.

С уважением,
Багдат.

Комментарий от неизвестного пользователя 23 октября 2014, 07:52

Шамиль, может после окончания всех статей по данной теме Вы скинете все в один PDF файл. Чтобы можно было читать офлайн.

С уважением,
Багдат.

Пишите отвечу на вопросы по поводу материалов

Комментарий от неизвестного пользователя 23 октября 2014, 08:00

Да можно все конечно объединить в колонке, что-то типа от обезьяны до профессионального SAP консультанта, но вот именно к работе с ALV это будет мало соотносимо. Если вы переживаете, что сама по себе работа с ALV таблицами не тема колонки, то зря, одно из описаний, что я видел, тянуло страниц на 170 десятого шрифта, да и то, там много интересных тем было упущено. Поэтому я бы не распылялся на расскажу про все что знаю, а брал бы тему ALV и старался бы ее раскрыть, а так вы про словарь данных не рассказали собственно ничего, например там дальше когда объявляете свой тип таблицы через словарь, интересная закладочка индексы есть, вот вы про нее ничего не сказали. а ведь кто-то может индекс нарисовать для быстродействия, а потом получить проблемы при отражении такой таблицы через ALV-компоненты. Так что я просто к тому что не надо распыляться. Словарь данных сам по себе штука очень мощная, начиная с определения доменов данных и дальше по восходящей.

Описание колонки: В этой колонке будет опубликована инструкция по созданию ALV отчётов с использованием шаблонов программирования Model-View-Controller.

Не про «словарь данных»,»интересная закладочка индексы», «кто-то может индекс нарисовать для быстродействия».

Дальше продолжать спор нет ни времени, ни желания.

У нас свободная демократическая страна можно просто не читать.

Комментарий от Олег Точенюк 23 октября 2014, 13:00

Источник

SAP — ABAP. Изменение строки подсуммирования в ALV grid

Работаю ABAP разработчиком в одной из отечественных компаний, внедряющих SAP.

На днях от консультанта пришла спецификация с задачей сделать специальную строку подсуммирования (ALV GRID), в который будут всевозможные суммы, значения, наименования и т.д., которых по стандарту в ней быть не должно. Также нужно реализовать возможность пользователю изменять данные в этой строке вручную.

Для тех, кто в танке: строки подсуммирования — желтенькие, в них выводятся подсуммы, в данном случае по дебитору.

Второй вариант — а так вообще можно?! Получив от начальства одобрение на исследование вопроса, полез гуглить, и на первой же ссылке добрый индус объясняет, что это вполне законно и реально. В классе CL_GUI_ALV_GRID есть метод GET_SUBTOTALS, возвращающий ссылки на таблицы с суммами всех уровней, которые можно спокойно изменять в своей программе. Выглядит он так:

Читайте также:  Автобокс на крышу автомобиля хендай крета

Ура, товарищи! Задача понятна, и даже наметился план действий. Левые значения нужно вставлять только в строки подсуммировавния для дебиторов. Т.е. передаем в метод SET_TABLE_FOR_FIRST_DISPLAY параметр IT_SORT, в котором указываем первый уровень сортировки — сортировку по дебитору. Вытаскиваем таблицу сумм 1-ого уровня (это будут суммы для дебиторов) и подставляем туда нужные значения:

Схематически выглядит так:

«Неужели это сработает?!», подумал я, и трясущимися руками запустил отчет. Сработало. Но не совсем верно. Значения вывелись только в сабтоталы, оказавшиеся «под» экраном. Т.е. те, к которым нужно скроллить вниз. Решение нашлось довольно быстро на просторах интернета: вызвать мягкое обновление ALV после изменения подсумм:

Если не указывать параметр i_soft_refresh, то обновление пересчитает все сабтоталы и затрет наши данные.

Все?! Можно отдавать на тест?! Ну, это было не так уж и сл… так, стойте… а если пользователь изменит сортировку? Или отфильтрует данные? Или вообще сделает что угодно с нашей таблицей!? Она же обновится и все наши значения исчезнут! Черт…

Но, как оказалось, в классе CL_GUI_ALV_GRID есть волшебное и очень полезное событие: AFTER_REFRESH, которое запускается каждый раз, когда ALV обновляется. На этот раз план действия таков:

4. Устанавливаем верные критерии сортировки: go_alv_grid->set_sort_criteria( lt_sort );
5. Далее запускаем обновление ALV с пересчетом сумм (здесь надо быть аккуратнее, что бы не запустить бесконечную рекурсию, т.к. событие AFTER_REFRESH отработает еще раз);
6. Событие отработает 2-ой раз, но критерии сортировки будут верными, и запустится заполнение строк сабтотала (кстати тут проблема — необходимо сделать проверку, на случай если установлены верные суммы, что бы программа не зависла из-за бесконечной рекурсии, т.к. после изменения сумм нам нужно запустить мягкое обновление ALV).

Профит! Получаем похвалу от начальства и консультанта! Как бы пользователь не мучил ALV, на первом уровне сортировки всегда будет дебитор, для него всегда будет строка подсуммировки с нужными значениями.

Осталась только одна проблема — изменять данные вручную пользователь до сих пор не может. А хочет. Но, пообщавшись с консультантом, решили отлавливать даблклик по такой строке и выкидывать окошко с полями ввода, которые заполнит пользователь, нажмет Enter и они попадут в необходимые поля в таблице. Возникает вопрос, как строку подсуммировки отличить от обычной? Ответ: да легко конечно! Что вообще за глупые вопросы? В событии DOUBLE_CLICK есть отличный параметр: is_row-rowtype. Он пустой в обычных строках, и заполнен в служебных. Заполнен он обычно строкой такого типа:

Экспериментальным путем выяснилось, что S — строка подсуммировки (есть еще значение T — итоговая строка сумм), 0101 — уровень сортировки (по крайней мере последние 2 цифры). Второе поле структуры is_row (index) содержит номер строки таблицы сумм необходимого уровня. Вся информация есть! Действуем:

1. Проверяем, что пользователь кликнул по сабтоталу;
2. Получаем таблицу сумм первого уровня: go_alv_grid->get_subtotals;
3. Читаем необходимую строку sub_total_tab[ is_row-index ];
4. Показываем пользователю окно с полями ввода (вставляем в них текущие значения строки);
5. Получаем пользовательские данные;
6. Вставляем пользовательские данные в нашу строку;
7. Мягко обновляем ALV.

Ну вот вроде и все! Все довольны, все работает! Ну по крайней мере у меня, пока консультант в отпуске и еще не проверял.

Источник

Ограничения на изменения общесистемных вариантов отчета

Николова Мария

Предотвратите изменения форматов вывода отчетов SAP List Viewer со стороны пользователей с помощью ограничения на доступ к объекту полномочий S_ALV_LAYO.

Ключевое понятие

S_ALV_LAYO – объект авторизации, использование которого позволяет контролировать доступ пользователей к общесистемному изменению форматов отчетов SAP List Viewer.

S_ALV_LAYO – позволяет авторизовать пользовательскую роль, которая предоставляет необходимые права для доступа к данным компании и их редактирования.

SAP List Viewer (ALV) (просмотр списков SAP) упрощает работу со списками и отчетами, предоставляя пользователям стандартизированные интерфейсы и форматы списков. ALV grid control (табличное представление ALV), являясь частью функционала ALV, представляет отчеты в табличной форме. Когда Вы запускаете некоторый отчет в SAP SCM, ALV grid control автоматически активируется. Например, запустите транзакцию IW38 (Изменение заказов ТОРО: список заказов) и Вы обнаружите отчет, в котором ALV grid control автоматически активирован (Рис. 1). Рис. 1 показывает заказы ТОРО в табличной форме с функциями ALV grid control, запускаемыми через панель инструментов. В представленной таблице, ALV дает следующие возможности: изменение размера столбцов, перемещение столбцов с помощью мыши, одновременная сортировка нескольких колонок..

Читайте также:  храм похвала божией матери в зябликово

Оформите подписку sappro и получите полный доступ к материалам SAPPRO

Источник

Alv отчет sap что это

ALV grid с «Шапкой»

Ассистент

Зарегистрирован:
Пт, ноя 05 2004, 04:13
Сообщения: 36
Пол: Мужской

Подскажите, пожалуйста, как при выводе отчета в ALV расположить над ним «Шапку» с каким-либо текстом (например с критериями виборки)

ЗЫ: Использую CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’

Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

Подскажите, пожалуйста, как при выводе отчета в ALV расположить над ним «Шапку» с каким-либо текстом (например с критериями виборки)

ЗЫ: Использую CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’

Подскажите, пожалуйста, как при выводе отчета в ALV расположить над ним «Шапку» с каким-либо текстом (например с критериями виборки)

ЗЫ: Использую CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’

проще было бы, если вы разместили его в форуме

для этого нам необходимо использовать события:

data: it_events type slis_t_event with header line.

* укажем форму для вывода шапки

it_events-name = ‘TOP_OF_PAGE’.
it_events-form = ‘TOP_OF_PAGE_FORM’.
append it_events. clear it_events.

* при вызове CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’ не забудем
* передать таблицу событий
.
it_events = it_events[]
.

* ну а в самой форме TOP_OF_PAGE_FORM выводим все что нам нужно

form top_of_page_form.
format color col_group.
write ‘Наша шапка’.
format color off.
endform.

Старший специалист

Зарегистрирован:
Пн, окт 24 2005, 15:55
Сообщения: 296
Пол: Мужской

Гуру-эксперт

Зарегистрирован:
Вт, авг 24 2004, 07:19
Сообщения: 3952
Откуда: ECC 6.0, South Kazakhstan

Специалист

Зарегистрирован:
Чт, апр 13 2006, 08:44
Сообщения: 133
Откуда: 56
Пол: Мужской

Как сделать без
CALL FUNCTION ‘REUSE_ALV_LIST_DISPLAY’
но с
CALL METHOD ref_alv->set_table_for_first_display
CALL METHOD ref_alv->refresh_table_display.

Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 17:44
Сообщения: 97
Откуда: Москва
Пол: Мужской

Посмотрите примеры, особенно вызов функции REUSE_ALV_COMMENTARY_WRITE.

А если конкретно, то вот так можно сделать простейший заголовок:

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_save = ‘X’
i_callback_program = g_repid
is_print = is_print
it_fieldcat = gt_fieldcat[]
it_events = gt_events[]
TABLES
t_outtab = gt_outtab.

FORM event_build USING rt_events TYPE slis_t_event.
DATA: lt_event TYPE slis_alv_event.
CLEAR lt_event.
lt_event-name = ‘TOP_OF_PAGE’.
lt_event-form = ‘MAKE_TOP_OF_PAGE’.
APPEND lt_event TO rt_events.
CLEAR lt_event.
lt_event-name = ‘USER_COMMAND’.
lt_event-form = ‘USER_COMMAND’.
APPEND lt_event TO rt_events.

FORM make_top_of_page.
DATA: lt_top_of_page TYPE slis_t_listheader.
DATA: lt_top_string TYPE slis_listheader.

CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
it_list_commentary = lt_top_of_page.
ENDFORM. «make_top_of_page

Специалист

Зарегистрирован:
Чт, апр 13 2006, 08:44
Сообщения: 133
Откуда: 56
Пол: Мужской

Да вот только мне надо чтобы объектами было.

в BCALV_TREE_DEMO похоже на правду:

* create emty tree-control
call method tree1->set_table_for_first_display
exporting
——> is_hierarchy_header = l_hierarchy_header Морской

Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288

LS_EVENT-name = ‘TOP_OF_PAGE’.
LS_EVENT-form = ‘TOP_OF_PAGE’.
APPEND LS_EVENT to GT_EVENTS.

CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = SY-REPID
i_grid_title = ‘Выгрузка данных по з/плате’
is_layout = alv_layout
it_fieldcat = alv_fieldcat
i_default = ‘X’
I_SAVE = ‘A’
is_variant = stru_disvar
IT_EVENTS = GT_EVENTS[]
TABLES
t_outtab = z_body
EXCEPTIONS
program_error = 1
OTHERS = 2.

FORM TOP_OF_PAGE.
CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
I_LOGO = ‘ENJOYSAP_LOGO’
IT_LIST_COMMENTARY = GT_LIST_TOP_OF_PAGE.
ENDFORM.

Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 17:44
Сообщения: 97
Откуда: Москва
Пол: Мужской

Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288

Почетный гуру

Зарегистрирован:
Пт, авг 04 2006, 20:56
Сообщения: 1005
Откуда: 37 МИКРОРАЙОН
Пол: Мужской

Старший специалист

Зарегистрирован:
Вт, ноя 15 2005, 11:00
Сообщения: 288

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

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

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

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

Логотип © 2006 Андрей Горшков
Поддержка: Кирилл Андреев, 2011-…

Источник

Автомобильный онлайн портал