Меню

Пошаговые рекомендации по созданию отчётов с использованием SAP Query

|

В статье демонстрируется применение базовой функциональности SAP Query как мощного и современного средства создания пользовательских отчётов. Применяя приведённые в статье пошаговые рекомендации, вы сможете создать любой необходимый вам отчёт. Список поставляемых SAP инфо-наборов может быть использован в качестве образца для создания собственных отчётов. Вкупе с использованием логических баз данных и программированием дополнительных полей, SAP Query позволяет создавать сложные и функциональные отчёты, которые полностью или в значительной степени удовлетворяют потребностям конечных пользователей, облегчают работу и значительно снижают затраты времени на поиск и обработку информации.

Введение

У конечных пользователей системы SAP ERP часто возникает необходимость создания отчёта, который содержал бы как часть полей стандартного отчёта, так и дополнительные поля. В качестве примеров таких отчётов можно назвать: список клиентов, история по счёту главной книги, открытые счета-фактуры от поставщиков. В системе SAP ERP соответствующие стандартные отчёты содержат избыточную информацию, являются трудночитаемыми и не содержат «нужного» пользователю поля.

Функциональность SAP Query даёт возможность создать «оптимизированные» отчёты в нужном формате без значительных трудозатрат.

В статье я подробно рассмотрю процесс создания «оптимизированного» отчёта средствами SAP Query.

Основные шаги для создания запроса:

  • Создайте инфо-набор.
  • Создайте группу пользователей и присвойте ей инфо-набор.
  • Создайте запрос на базе инфо-набора.

Бизнес-кейс

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

Создание инфо-набора

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

Запустите транзакцию SQ02 (см. Рисунок 1).

  • Введите имя Инфо-набора «ZZ_SAMPLE_ACCOUNTING»и нажмите кнопку Cоздать.
  • Определите описание инфо-набора «Пример инфо-набора: Бухучет»
  • Введите имя логической базы данных SDF (см. Рисунок 2). Это стандартная логическая база данных, содержащая данные по бухгалтерским документам и счетам главной книги.

SAP предлагает несколько источников для создания инфо-набора, это:

  • объединение таблиц (англ. join),
  • считывание таблицы напрямую,
  • логическая база данных,
  • сбор данных программой.

Каждый из источников данных имеет свои особенности, которые не обсуждаются в настоящей статье. Мы выбрали стандартный источник данных – поставляемую SAP логическую базу данных, которая представляет собой программу, написанную оптимальным и корректным образом, что обеспечивает высокую скорость работы инфо-набора и, как следствие, запроса.

  • Подтвердите ввод, нажав кнопку подтверждения .

В открывшемся окне вы увидите список таблиц, которые входят в структуру логической базы данных SDF.

  • Выберите таблицы, которые вы будете использовать в инфо-наборе (см. Рисунок 3). В нашем примере это следующие таблицы:

SKA1 Основные записи основных счетов (план счетов),

SKB1 Основные записи основных счетов (балансовая единица),

BSIS Бухгалтерия: вторичный индекс для основных счетов.

  • Подтвердите ввод.

Теперь мы находимся на первом экране ведения инфо-набора (см. Рисунок 4.) Экран разделен на три части.

  1. Левый блок – список таблиц и полей в них.
  2. Правый верхний блок – список групп полей. Группы полей соответствуют таблицам, выбранным для создания отчета. Чтобы сделать поле доступным для запроса, необходимо включить его в группу полей. Не присвоенное группе поле не может быть включено в отчет.
  3. Правый нижний блок – детальные параметры поля. Здесь можно изменить описание поля, которое будет отображаться в отчете. Двойной щелчок по полю из левого блока вызовет отображение деталей поля в правом нижнем блоке.
  • Щелкните по группе полей Основные записи основных счетов (план счетов) в верхнем правом блоке.
  • Откройте папку Основные записи основных счетов (план счетов) в левой секции, щелкнув по стрелке слева от папки. Откроется список полей таблицы.
  • Выделите поле Номер основного счета одним щелчком мыши.
  • Нажмите кнопку Добавить поле. В результате поле Номер основного счета перемещается в выделенную группу полей.
  • Следуя этим шагам, аккуратно переместите перечисленные ниже поля в соответствующие группы полей.
    • Из таблицы SKA1: Основные записи основных счетов (план счетов)
      • План счетов
      • Номер основного счета
    • Из таблицы SKB1: Основные записи основных счетов (балансовая единица)
      • Балансовая единица
    • Из таблицы BSIS: Бухгалтерия: вторичный индекс для основных счетов
      • Номер бухгалтерского документа
      • Номер позиции бухгалтерского документа
      • Дата проводки документа
      • Сумма во внутренней валюте
      • Место возникновения затрат
  • Сохраните инфо-набор.
  • На этом шаге система может запросить ключ разработчика или запрос на перенос изменений (см. Рисунок 5). Если вы не знаете, какие данные вводить, обратитесь в вашу техническую команду.
  • Сгенерируйте инфо-набор, нажав на кнопку генерации .
  • Нажмите кнопку Назад, чтобы вернуться на первый экран ведения инфо-набора.
Рис. 1 Первый экран инфо-набора
Рис. 2 Выбор источника данных для инфо-набора
Рис. 3 Выбор таблиц логической базы данных
Рис. 4 Выбор полей инфо-набора
Рис. 5 Сохранение инфо-набора в пакет

Создание группы пользователей

Группы пользователей обеспечивают контроль доступа к инфо-наборам и запросам. Инфо-наборы и пользователи присваиваются к группам пользователей. Когда пользователь создает или запускает запрос, то группа пользователей определяет список инфо-наборов, к которым у пользователя есть доступ.

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

Перейдите по меню Среда>Группы пользователей с первого экрана ведения инфо-набора.

Экран на рисунке 6 предназначен для ведения групп пользователей и присвоения инфо-наборов к группам пользователей.

  • Введите имя группы пользователей «ZZ_SAPMLE».
  • Нажмите кнопку Создать.
  • Определите описание группы пользователей «Пример: Бухучет» (рисунок 7).
  • Нажмите кнопку Сохранить. На этом шаге система может запросить ключ разработчика или запрос на перенос изменений. Если вы не знаете, какие данные вводить, обратитесь в вашу техническую команду.
  • Когда описание определено, перейдите назад и нажмите кнопку Присвоить пользователей и инфо-наборы.
  • Введите пользователей, которые трудятся в финансовой службе.
  • Нажмите кнопку Сохранить.
  • Нажмите кнопку Присвоить инфо-наборы (рисунок 8).
  • Система отобразит как стандартные, так и пользовательские инфо-наборы. Прокрутите список вниз, чтобы найти пользовательские инфо-наборы (рисунок 9).
  • Выберите инфо-набор, установив индикатор напротив его.
  • Нажмите кнопку Сохранить.
Рис. 6 Экран ведения группы пользователей
Рис. 7 Описание группы пользователей
Рис. 8 Присвоение группы пользователей пользователям
Рис. 9 Присвоение инфо-набора группе пользователей

Создание запроса

Мы создали инфо-набор и группу пользователей. Следующий шаг – создание запроса. На этом шаге поля инфо-набора включаются в отчет, определяется сортировка и суммирование, а также счетчик для количества документов и возможность перехода в ведение счета и документа. Для доступа к запросам Запустите транзакцию SQ01.

Убедитесь, что вы работаете с группой пользователей, созданной ранее. (см. название группы в верхней части экрана). Если нет, нажмите кнопку Другая группа пользователей (первая кнопка слева в ряду кнопок под названием экрана на рисунке 10) и выберите нужную группу пользователей.

  • Введите имя запроса «Z_ACCOUNTING».
  • Нажмите кнопку Создать.

Если группа пользователей уже содержит присвоенные ей запросы, то они будут выведены на экран. Пользователь может выполнить любой из запросов в его группе пользователей, если имеет необходимые полномочия.

Система выведет список инфо-наборов, привязанных к группе пользователей (рисунок 11). Только один инфо-набор может быть выбран для создания запроса. Это означает, что все поля, которые вы хотите включить отчет, должны быть в одном инфо-наборе. Дважды щелкните по инфо-набору для его выбора в качестве базы для создания запроса.

Заголовок отчета появляется на экране, когда запрос выполняется.

Формат списка должен соответствовать существующему формату печати в управлении выводом, иначе отчет не может быть напечатан. Наиболее распространенные форматы: 65x132 и 65x80. В нашем примере мы оставили формат по умолчанию: 0 строк (без ограничения) и 83 столбца.

  • Введите описание запроса «Пример запроса: Бухучет», как показано на рисунке 12.
  • Нажмите на кнопку Основной список в верхней части экрана.

Откроется графический экран построения запроса, как показано на рисунке 13. Запрос в целом строится на этом экране с использованием выделения объектов и их перетаскивания.

Доступные поля для построения запроса отображаются в левой части экрана в виде таблицы, как показано на рисунке 13.

  • Раскройте каждую секцию слева, чтобы отобразить все поля, включенные в инфо-набор.
  • Для выбора полей, которые будут отображены в отчете, установите индикатор напротив каждого поля в столбце Поля списка. Выберите следующие поля: номер основного счета, текст основного счета, балансовая единица, сумма во внутренней валюте, дата проводки, номер бухгалтерского документа.
  • Определите поля, которые будут отображены на экране выбора, установив индикатор Поля выбора в строке поля Номер бухгалтерского документа. Это второй столбец. Некоторые поля, например, Номер основного счета, уже определены для выбора и не могут быть изменены. Это означает, что поле уже установлено как поле для выбора в логической базе данных. На экране выбора запроса отображаются все поля, помеченные для выбора данных: и определенные в логической базе данных, и те, которые определили вы.

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

  • Для того, чтобы определить подсчет суммы на уровне счета и балансовой единицы, щелкните по полю в области формата отчета и перетащите его в область сортировки.
  • Перейдите в меню Инструменты>Поля подсчета вкл/выкл. Появится новая панель инструментов для подсчета. Подсчет суммирует количество строк по полю. В нашем примере в область подсчета помещено поле Номер документа для подсчета числа документов, проведенных для каждой балансовой единицы и каждого счета.
  • Чтобы активировать подсчет на уровне счета и балансовой единицы, выделите поле в области формата и переместите его в область Поля подсчета (см. рисунок 14).
  • Для изменения текста

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

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

Войти

Обсуждения Количество комментариев15

Комментарий от  

Александр Филинов

  |  18 апреля 2012, 22:49

Красиво и полезно.
Было бы не плохо добавить шаг про создание транзакции, было бы полное описание.

Комментарий от  

Олег Точенюк

  |  18 апреля 2012, 23:43

Красиво и полезно.
Было бы не плохо добавить шаг про создание транзакции, было бы полное описание.

А что SE93 представляет собой нечто супер сложное?!

Комментарий от  

Александр Филинов

  |  19 апреля 2012, 07:06

А что SE93 представляет собой нечто супер сложное?!

Как вариант. Но если мы говорим о простоте, то можно создавать (генерировать)  и через PFCG.

Комментарий от  

Олег Точенюк

  |  19 апреля 2012, 21:39

Как вариант. Но если мы говорим о простоте, то можно создавать (генерировать)  и через PFCG.

А у вас профиль-генератор типа всем разработчикам доступен? Ну тоже тогда хороший вариант.

Комментарий от  

Вячеслав Контарев

  |  22 апреля 2012, 23:56

Красиво и полезно.
Было бы не плохо добавить шаг про создание транзакции, было бы полное описание.

Для присвоения транзакции к запросу необходимо знать имя программы. Его можно получить в транзакции SQ01, меню Запрос-Другие функции-просмотреть имя отчета. Далее, создаем транзакцию в SE93 и присваиваем ей отчет запроса. Далее включаем транзакцию в существующую роль или создаем новую роль.

Комментарий от  

Александр Филинов

  |  24 апреля 2012, 08:02

Для присвоения транзакции к запросу необходимо знать имя программы. Его можно получить в транзакции SQ01, меню Запрос-Другие функции-просмотреть имя отчета. Далее, создаем транзакцию в SE93 и присваиваем ей отчет запроса. Далее включаем транзакцию в существующую роль или создаем новую роль.

Вячеслав спасибо.
Небольшой вопрос к Вам.
У вас получалось привязать к запросу Z*таблицы. Сейчас нет под рукой 6 версии, в 4.7 я просто не вижу эти таблицы.

Комментарий от  

Василь Мандрика

  |  03 мая 2012, 15:38

Вопрос по присвоению отчета или транзакции, что бы Вы посоветовали для присвоения транзакции просмотра заказа на поставку (ME23n)?  Проблема в том что эта транзакция не принимает  номер документа из отчета а берет последний отредактированный пользователем документ.

Комментарий от  

Олег Точенюк

  |  03 мая 2012, 21:00

Вопрос по присвоению отчета или транзакции, что бы Вы посоветовали для присвоения транзакции просмотра заказа на поставку (ME23n)?  Проблема в том что эта транзакция не принимает  номер документа из отчета а берет последний отредактированный пользователем документ.

Задать параметр и вызвать просмотр документа типа так:
 
SET PARAMETER ID 'BES' FIELD <номер заказа>.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
 
Или более правильно использовать специальный ФМ:
 
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
          EXPORTING
            i_ebeln = <номере документа>
            i_ebelp = <позиция документа>
            i_enjoy = 'X'
          EXCEPTIONS
            OTHERS  = 1.

Комментарий от  

Василь Мандрика

  |  04 мая 2012, 17:16

Задать параметр и вызвать просмотр документа типа так:
 
SET PARAMETER ID 'BES' FIELD <номер заказа>.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
 
Или более правильно использовать специальный ФМ:
 
CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT'
          EXPORTING
            i_ebeln = <номере документа>
            i_ebelp = <позиция документа>
            i_enjoy = 'X'
          EXCEPTIONS
            OTHERS  = 1.

Спасибо за подсказку. С Вашей подсказкой нашел это: scn.sap.com/community/erp

Комментарий от  

Вадим Новак

  |  29 августа 2012, 12:30

Вопрос по присвоению отчета или транзакции, что бы Вы посоветовали для присвоения транзакции просмотра заказа на поставку (ME23n)?  Проблема в том что эта транзакция не принимает  номер документа из отчета а берет последний отредактированный пользователем документ.

Когда Вы присваиваете транзакцию или отчет, Query должен содержать те же названия полей, что и экран присваиваемого объекта. Например, Query создан по таблице EKPO, в ней есть поле MATNR, но присвоенная транзакция ММ03 не будет открывать именно тот номер материала, который выведен в строке отчета Query, а тот MATNR, чей PID передавался последним. Это связано с тем, что на экране транзакции ММ03, поле материала - RMMG1-MATNR, а не EKPO-MATNR. Так что без ABAP’а тут не обойтись.

Комментарий от  

Олег Точенюк

  |  29 августа 2012, 18:29

Когда Вы присваиваете транзакцию или отчет, Query должен содержать те же названия полей, что и экран присваиваемого объекта. Например, Query создан по таблице EKPO, в ней есть поле MATNR, но присвоенная транзакция ММ03 не будет открывать именно тот номер материала, который выведен в строке отчета Query, а тот MATNR, чей PID передавался последним. Это связано с тем, что на экране транзакции ММ03, поле материала - RMMG1-MATNR, а не EKPO-MATNR. Так что без ABAP’а тут не обойтись.

Извините конечно, но RMMG1-MATNR как и EKPO-MATNR ссылаются на одинаковый элемент данных MATNR которому присвоен PID -> MAT, так что с этим то как раз все в порядке, но есть одно но, PID заполняется из диалоговых полей и может содержать только одно значение в текущий момент времени, а тут мы имеем отчет, который содержит множество строк, соответственно заполнения PID не происходит да и не может быть, так как не ясно в принципе какое значение сохранять. Конечно же SAP мог бы подумать и передавать в PID данные текущей выделенной строки для всех колонок, которые имеют в элементе данных прописанный код PID. Однако данную возможность стандартно не реалзовали и оставили на откуп пользователям.

Комментарий от  

Вадим Новак

  |  30 августа 2012, 12:00

Извините конечно, но RMMG1-MATNR как и EKPO-MATNR ссылаются на одинаковый элемент данных MATNR которому присвоен PID -> MAT, так что с этим то как раз все в порядке, но есть одно но, PID заполняется из диалоговых полей и может содержать только одно значение в текущий момент времени, а тут мы имеем отчет, который содержит множество строк, соответственно заполнения PID не происходит да и не может быть, так как не ясно в принципе какое значение сохранять. Конечно же SAP мог бы подумать и передавать в PID данные текущей выделенной строки для всех колонок, которые имеют в элементе данных прописанный код PID. Однако данную возможность стандартно не реалзовали и оставили на откуп пользователям.

В Query предусмотрен механизм передачи PID. Отчет построенный на, скажем, таблице MSEG по дабл клику будет нормально открывать именно тот документ материала, что указан в строке отчета. Правда нормально эта функция работает с не Enjoy-транзакциями . Т.е. для MSEGa нормально будет работать MB03, а не MIGO.
Я с Вами полностью согласен, по поводу того, что SAP мог бы подумать и передавать в PID данные текущей выделенной строки для всех колонок. В Query для обеспечения универсальности генерируется куча ненужного ABAP кода и лишних 5-10 строк кода для передачи PID погоды не сделали бы.

Комментарий от  

Евгений Ермолаев

  |  07 сентября 2012, 16:44

Ещё бы добавить описание по использованию Drilldown и был бы комплект 8))

Комментарий от  

Евгений Каноплич

  |  27 июня 2013, 10:17

Красиво и полезно.
Было бы не плохо добавить шаг про создание транзакции, было бы полное описание.

Навернное все уже пользовались транзакциями с параметрами. Там нехитро получается вызвать квери при помощи START_REPORT и набора параметров
D_SREPOVARI-REPORT
D_SREPOVARI-EXTDREPORT
D_SREPOVARI-VARIANT
D_SREPOVARI-REPORTTYPE
 
И проще этого придумать наверное сложно. Не говоря про генерацию отчетов и т.д.

Комментарий от  

Анвар Байгулов

  |  07 мая 2019, 13:29

Рисунки не видны на браузере. Прошу автора проверить.