Sap query инструкция на русском

Время на прочтение
8 мин

Количество просмотров 66K

Система SAP ERP содержит множество отчетов с огромным количеством полей. Для настройки отображения нужных полей существует механизм, позволяющий скрыть лишние поля, изменить порядок, выполнить сортировку, подвести промежуточные и общие итоги. Ко всему прочему, система позволяет хранить несколько вариантов настроек и быстро выбирать требуемый.

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

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

Инструмент SAP Query позволяет создавать отчёты без значительных трудозатрат.

Ниже будет рассмотрен пример создания отчета средствами SAP Query.

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

  1. Создание инфо-набора
  2. Создание группы пользователей, присвоение ей инфо-набора
  3. Создание запроса на базе инфо-набора.

Постановка задачи

Время от времени появляются ситуации, в которых пользователь не может разобраться с причинами ошибки «Превышена стоимость договора» в заказах на поставку. В большинстве случаев причину подобной ошибки легко найти.
Но если в контракте 1000 позиций, и по какой-то из них стоимость в поступлении больше, чем стоимость в позиции контракта (при этом стоимость в контракте равна стоимости в заказах), то выявить данную позицию становится проблематично.

В системе существуют отчеты, показывающие стоимость позиций заказа к позиции контракта или документы поступления со ссылками на заказ на поставку. Единого отчета нет.

Необходимо создать отчет, отображающий заданные контракты по позициям. Каждая позиция должна отображать свою стоимость, стоимость позиций заказов на поставку, стоимость поступлений, стоимость счетов-фактур. Все стоимости должны отображаться во внутренней валюте.
Так же необходимо добавить признак, позволяющий отображать только проблемные позиции.

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

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

Запустите транзакцию SQ02.

image

  • Введите имя Инфо-набора «Z_SUPPLY_TO_CONTRACT»и нажмите кнопку «Создать»
  • Определите описание инфо-набора «Поступление к контрактам»
  • Введите имя таблицы EKPO (см. Рисунок 2). Это стандартная таблица с позициями документов закупки, включая контракты.

image

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

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

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

Далее отмечаем пункт «Включить ключевые поля» и подтверждаем создание.

image

Теперь мы находимся на первом экране ведения инфо-набора.

image

Экран разделен на 3 части:

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

Если на предыдущем экране выбран тот же пункт с ключевыми полями, то в группе полей должны отображаться номер документа закупки и позиция. Если нет, то включите эти поля (правой кнопкой мы по полю из таблицы и выбрать пункт «включить поле в группу полей»), или исключите лишние.

Затем следует добавить оставшиеся поля, необходимые для нашего отчета. Для этого следует нажать кнопку на панели инструментов «Дополнительная информация» (F5). Для переключения в исходное положение следует нажать кнопку «Группы полей» (F6).

image

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

Создадим требуемые нам поля. Для этого необходимо нажать на кнопку «Создать» (кнопка в виде белого листа). В открывшемся окне следует указать имя нового поля и выбрать пункт «Дополнительное поле»

image

Далее следует заполнить наименование, текст заголовка в отчете и ссылку на поле-образец «EKPO-BRTWR». Формат нашего поля будет скопирован с образца.

image

Следующее поле создается аналогично, за исключением порядкового номера поля.

image

Стоимость поступлений и стоимость счетов-фактур будем брать из истории заказа на поставку из таблицы EKBE.

image

image

Добавленные поля отображаются в левом блоке в ветке «дополнительные поля».
Данные поля следует добавить в группу полей. Для этого переключитесь в режим группы полей (кнопка «Группа полей») и щелкнув правой кнопкой мыши выберите пункт «Добавить в группу полей».
Затем возвращаемся обратно в режим дополнительной информации.

Определим правила формирования стоимости позиции контракта.
Для этого необходимо установить курсор мыши на требуемой позиции и нажать кнопку «Кодировка для дополнений».

image

Зададим следующий код для поля «BRTWR»:

data:
  ii_WKURS like EKKO-WKURS.

SELECT SINGLE WKURS INTO ii_WKURS FROM EKKO
  WHERE EBELN = EKPO-EBELN.

CLEAR BRTWR.

IF EKPO-LOEKZ IS INITIAL.
  BRTWR = EKPO-NETPR / EKPO-PEINH * EKPO-KTMNG * ii_WKURS.
ELSE.
  BRTWR = '0'.
ENDIF.

Определяем переменную для курса валюты, в которой ведется контракт. Затем получаем ее значение.
Если позиций контракта не удалена, то стоимость равна произведения количества и цены, с учетом количества единицы цены и курса валюты. Если контракт в валюте учета, то система автоматически равна 1.
Если позиция удалена, то стоимость рана 0.

Код для поля «ORDER_BRTWR»:

data:
  s_NETPR like EKPO-NETPR,
  s_PEINH like EKPO-PEINH,
  s_MENGE like EKPO-MENGE,
  c_BRTWR like ORDER_BRTWR,
  i_ebeln like EKKO-EBELN,
  i_WKURS like EKKO-WKURS.

ORDER_BRTWR = '0'.

select NETPR PEINH MENGE EBELN
  INTO (s_NETPR, s_PEINH, s_MENGE, i_ebeln)
  from EKPO as e
  where
    e~KONNR = EKPO-EBELN AND
    e~KTPNR = EKPO-EBELP AND
    e~LOEKZ = ''.

  SELECT SINGLE WKURS INTO i_WKURS FROM EKKO
    WHERE EBELN = i_ebeln.

    CLEAR c_BRTWR.
    c_BRTWR = s_NETPR / s_PEINH * s_MENGE * i_WKURS.
    ORDER_BRTWR = ORDER_BRTWR + c_BRTWR.
endselect.

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

Код для поля «DMBTR»:

data:
  s_SHKZG like ekbe-SHKZG,
  s_DMBTR like ekbe-DMBTR.

DMBTR = '0'.

select DMBTR SHKZG INTO (s_DMBTR, s_SHKZG) from EKBE as e
  INNER JOIN EKPO as z
    ON e~EBELN EQ z~EBELN AND
      e~EBELP EQ z~EBELP
  where
    z~KONNR = EKPO-EBELN AND
    z~KTPNR = EKPO-EBELP AND
    e~VGABE = '1'.
  if s_SHKZG = 'S'.
    DMBTR = DMBTR + s_DMBTR.
  else.
    DMBTR = DMBTR - s_DMBTR.
  endif.
endselect.

Для документов поступления мы сразу берем в расчет стоимость во внутренней валюте. По этой причине нет необходимости пересчитывать валюту. В документах поступления отсутствует признак удаления, так как для бухгалтерских проводок возможно только сторнирование. В связи с этим по полю «EKBE-SHKZG» определяем прямой это документ или сторнирующий.

Код для поля «F_DMBTR»:

data:
  s_SHKZG_f like ekbe-SHKZG,
  s_DMBTR_f like ekbe-DMBTR.

F_DMBTR = '0'.

select DMBTR SHKZG INTO (s_DMBTR_f, s_SHKZG_f) from EKBE as e
  INNER JOIN EKPO as z
    ON e~EBELN EQ z~EBELN AND
      e~EBELP EQ z~EBELP
  where
    z~KONNR = EKPO-EBELN AND
    z~KTPNR = EKPO-EBELP AND
    ( e~VGABE = '2' OR e~VGABE = '3' ).
  if s_SHKZG_f = 'S'.
    F_DMBTR = F_DMBTR + s_DMBTR_f.
  else.
    F_DMBTR = F_DMBTR - s_DMBTR_f.
  endif.
endselect.

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

Далее следует перейти во вкладку «Критерии выбора». Там мы создадим поле «Номер контракта» и признак «только позиции с превышением».

При создании следует учитывать, что «Критерий выбора» — это поле, по которому выполняется ограничение, а «Параметр» — это некий признак, которому следует задать некий функционал.

Создадим критерий выбора «Номер контракта».

image

и параметр «Только позиции с превышением»

image

Обратите внимание на то, что параметр в поле «ДопИнфо» содержит текст «AS CHECKBOX» для того, чтобы отобразиться в качестве чекбокса.

Для критериев выбора «Номер контракта» каких то дополнительных настроек не требуется. Отчет будет ограничиваться по полю, указанному в настройках. Для параметра же внесем ограничения в формируемый отчет. Для этого перейдем на вкладку «Кодировки» и выберем фрагмент кодировки «5 Обработка записей».

image

и добавив код:

CHECK EKPO-BSTYP = 'K'.

IF Z_ONLY = 'X'.
  CHECK BRTWR < DMBTR.
ENDIF.

Этим кодом мы ограничиваем вывод только тех записей, для которых BRTWR < DMBTR, т.е. стоимость позиции контракта меньше стоимости поступлений. Так же мы ограничиваем записи по типу «Контракт».

Обратите внимание, что на момент проверок данные поля должны быть рассчитаны. Именно по этой причине для данной проверки последовательный номер был указан равным 10 (любой номер, превышающий номера предыдущих полей).

Теперь сохраняем инфо-набор и генерируем его image.

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

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

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

image

  • Вводим имя группы пользователей «ZMM»
  • Нажимаем кнопку «Создать»

image

  • Определяем название «Отчеты ММ»
  • Нажимаем кнопку «Сохранить». На этом этапе система может запросить ключ разработчика или запрос на перенос
  • Нажимаем кнопку «Присвоить пользователей и инфо-наборы»
  • В открывшемся окне вводим пользователей, для которых предназначен данный отчет
  • Сохраняем внесенные изменения

image

  • Нажимаем кнопку «Присвоить инфо-наборы»

image

  • Прокручиваем список вниз, чтобы найти пользовательские инфо-наборы и отмечаем созданный ранее инфо-набор «Z_SUPPLY_TO_CONTRACT»
  • Сохраняем

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

Запрос — это следующий шаг формирования отчета после создания инфо-набора и группы пользователей. На этом шаге определяется окончательный состав полей, которые войдут в отчет, порядок полей, внешний вид отчета, сортировка, итоги и прочее.

Запускаем транзакцию SQ01.

image

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

Вводим имя «Z_SUPPLY» и нажимаем кнопку «Создать». Система выведет список инфо-наборов, привязанных к данной группе пользователей. Выбираем наш инфо-набор и подтверждаем ввод.

Формат списка желательно сопоставить с существующим форматом печати, иначе отчет не может быть напечатан. Распространенные форматы: 65×132 и 65×80. Оставим формат по умолчанию: 0 строк (без ограничения) и 83 столбца.

image

Назовем отчет «Поступление к контрактам» и перейдем непосредственно к «рисованию» отчета, нажав кнопку «Основной список».

image

На экране основного списка в левой части расположены поля, которые можно добавить в отчет. В левой нижней части отображены свойства выделенного элемента, а основная часть — это графическое представление будущего отчета.

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

Внесем небольшие коррективы. Стоимостные поля отображаются с доп. полем «Валюта» значение которого нам не требуется. Чтобы убрать отображение валюты, выделим стоимостное поле и в левой нижней части экрана выделим пункт «Без поля валюты». Затем нажмем «Apply».

image

На этом наш отчет можно считать сформированным. Сохраняем отчет.

Тут же его можно протестировать, нажав кнопку «Тест».

Создание транзакции для отчета

Убедившись, что отчет полностью удовлетворяет нашим потребностям, следует создать для его запуска транзакцию.

  1. Изначально генерируем программу. Для этого переходим на первый экран транзакции SQ01. В данной транзакции выделяем созданный нами запрос и выбираем в меню «Запрос» -> «Другие функции» -> «Сгенерировать программу».
  2. После генерации программы получаем имя программы в меню «Запрос» -> «Другие функции» -> «Просмотреть имя отчета».
  3. Формируем транзакцию через SE93.
    1. Указываем имя транзакции
    2. Нажимаем кнопку «Создать»
    3. Указываем название транзакции
    4. Отмечаем пункт «Программа и экран выбора»
    5. Подтверждаем ввод
    6. В открывшемся экране в поле «Программа» вводим ранее полученное имя отчета
    7. Отмечаем GUI-способность
    8. Сохраняем

image

Теперь можно формировать отчет, используя транзакцию.

image

P.S.

  1. На некоторых экранах может отображаться в заголовке «Изменение» вместо «Создание». Это связано с тем, что отчет был создан ранее
  2. Приведенный код вряд ли является наиболее оптимальным. Если Вы считаете, что Ваш вариант лучше, готов его рассмотреть и заменить
  3. Существует несколько вариантов формирования данного отчета в SAP Query. Приведенный вариант не является оптимальным. Но он раскрывает возможности SAP Query
  4. Я всегда рад конструктивной критике

Думаю, за историю внедрения SAP ERP (SAP S/4HANA) накопилось довольно много документов, описывающих создание отчета с использованием SAP Query. И думаю, многие консультанты умеют обращаться с этой функциональностью или у них есть документ, описывающий процесс создания таких отчетов. Тем не менее выкладываю старый пример создания отчета SAP Query (нашел в закромах, разбирая накопившиеся за годы файлы) сделанный по принципу “how to” может кому-то пригодится и он найдет что-то новое. Отчет будет с использованием нескольких таблиц и с разными принципами их соединения и запускаться через транзакцию с вариантом.

Документ был создан во времена классической SAP ERP, но и в эпоху S/4HANA SAP Query все еще актуален. По тексту даны комментарии для особенностей S/4HANA.

Введение

Итак, бизнес-ситуация:

Есть MM-заказ, поступление материала, поступление счета, FI-документ. В заголовке FI-документа указан номер счета-фактуры, а в позиции кредитора – дата получения счета-фактуры. Все стандартно.

Есть таблица, в которой хранится дополнительная информация по этой бизнес-операции (например, какие-то статусы). В данном случае, что это за дополнительная информация и что это за таблица (пусть даже это Z-таблица) – не важно, эта таблица нас интересует, прежде всего, с точки зрения варианта ее соединения в Query для получения данных в отчете.

Пусть, для примера, это будет таблица, где хранятся документы DMS – таб. DRAW и нас интересует статус документа, поле DOKST.

Задача: сверить значение статуса в таблице с наличием в FI-документе данных о номере счета-фактуры и даты получения счета-фактуры.

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

Как известно, в первоначальном FI-документе, после сторно поступления счета в MM, данные о том, каким документом он сторнирован, не появляются. Для этого нужно анализировать данные в MM (в данном случае тр. J3RCREV не запускалась и позиции не выравнены).

И, самое главное усложнение – общее количество документов несколько сотен тысяч, так что вариант ручной проверки исключается.

Что делать консультанту? Звать на помощь программиста, объяснять ему на пальцах как сделать простенький проверочный отчет или писать спецификацию? Или оперировать сотнями тысяч записей в Excel?

Или использовать инструмент Query?

Запускаем тр. SQ02 «Инфо-набор» (я не буду указывать пути по меню, желающие могут найти эти пути, воспользовавшись кнопкой «Бинокль» на основном экране SAP Easy Access или тр. SEARCH_SAP_MENU «Поиск в SAP-меню»).

1.     Выбор рабочей области

Выбираем стандартную рабочую область – наши инфо-набор и запрос будут видны только в нашем манданте:

Результат:

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

Создадим группу пользователей Z_DEMO_QUERY.

Находясь в тр. SQ02 переходим в ведение групп пользователей.

или тр. SQ03

3.     Присвоение пользователя группе пользователей

тр. SQ03.

Указываем своего пользователя:

Присваиваем своего пользователя нашей группе:

Сохранить.

Потом этой группе присвоим еще и инфо-набор.

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

Приготовления закончены, теперь, собственно дело…

Назовем наш инфо-сет Z_DEMO_QUERY_INFO_SET

Находясь в тр. SQ03 переходим к созданию инфо-набора:

или тр. SQ02

Дальше:

Выберем «включить ключевые поля», если нужно потом добавим другие.

Дальше:

Нажимаем «Оператор соединения»:

Переходим в графический редактор и пытаемся соединиться с таблицей RBKP. Нажимаем «Вставить таблицу», указываем RBKP:

И получаем соединение:

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

Но, у нас есть другая связка, в поле BKPF-AWKEY лежит номер MM-фактуры и год. Пытаемся соединиться.

Удаляем соединение через контекстное меню соединения:

И проводим мышкой линию от BELNR к AWKEY:

И резонно получаем ошибку:

Поля то разные. Тут нужен другой способ соединения.

Удаляем таблицу RBKP – выделяем таблицу и нажимаем «Удалить таблицу»:

Возвращаемся на экран изменения инфо-набора – нажимаем «Инфо-набор».

Способ соединения таблиц №1

Нажимаем «Дополнительная информация» на экране изменения инфо-набора:

На вкладке «ДопИнфо» Нажимаем «Создать»:

Выбираем «Дополнительная таблица», указываем RBKP:

По умолчанию система опять предлагает соединение по номеру документа:

Но мы изменим это на AWKEY:

Важно отметить, что это не совсем правильно. Поле AWKEY это поле типа CHAR длинной 20 символов и там лежит 14 символов: Номер MM-документа + Год, а мы это поле присваиваем полю BELNR типа CHAR длинной 10 символов. Но на наше счастье в AWEKEY первые 10 символов и есть номер MM-документа и система не ругается на несовпадение полей, ошибку «Некорректные условия соединения» мы не получаем. Если все делать правильно, то можно воспользоваться способом №2 с использованием кодирования, а тут пока так.

Создали соединение таблиц BKPF и RBKP:

Теперь нужно соединиться с таблицей со статусами, пусть это будет таб. DRAW.

На экране «Изменение инфо-набора» нажимаем «Дополнительная информация»

На вкладке «ДопИнфо» Нажимаем «Создать»:

Способ, который был описан ранее, в данном случае не работает, так как нам нужна выборка по неключевому полю DOKST, которое мы будем связывать, например, с BKPF-XREF1_HD.

Способ соединения таблиц №2

Придется воспользоваться услугами кодирования.

Для начала создадим поле Z_STATUS, куда поместим считанный из соединенной таблицы DRAW статус.

На экране изменения инфо-набора нажимаем «Дополнительная информация»

На вкладке «ДопИнфо» Нажимаем «Создать»:

Выбираем создания дополнительного поля Z_STATUS:

Определим поле. Формат можно указать явно:

а можно через ссылочное поле DRAW-DOKST:

И не забываем указать последовательность фрагмента кода. Для порядка это будет = 2.

Теперь у нас определено поле, которое можно использовать в отчете и заполнить данными из связанной таблицы:

На вкладке «ДопИнфо» помещаем курсор на строчку определения поля Z_STATUS и нажимаем «Кодировка для дополнения»:

Сам код:

clear Z_STATUS.        <em>«очистить</em><em> </em><em>поле</em>

data N25(25) type N.   <em>«для появления ведущих 0</em>

N25 = BKPFXREF1_HD+0(11). <em>«добавляем ведущие 0</em>

if BKPFXREF1_HD ne SPACE. <em>«с пусто не работаем</em>

select single DOKST    <em>«считываем поле DOKST</em>

from DRAW            <em>«из таб. </em><em>DRAW</em>

into Z_STATUS        <em>«</em><em>в</em><em> </em><em>поле</em><em> Z_STATUS</em>

where PRENR = N25.   <em>«условие выборки из БД (считаем его уникальным, это пример)</em>

endif.

Нажимаем «Сохранить» и «Сгенерировать». На предупреждения о том, что поля нет в группе полей пока не обращаем внимание.

Способ соединения таблиц №3

Теперь нужно присоединить таблицу с позицией FI-документа.

Нажимаем «Оператор соединения» на экране изменения инфо-набора. Опять попадаем в графический редактор соединений таблиц:

Примечание: для SAP HANA подход другой, там BSEG прозрачная таблица, можно соединять с нет, ниже описано для классической SAP ERP.

Думаете, будем добавлять BSEG? Нет, BSEG присоединить не получится, это кластерная таблица. Нажимаем «Вставить таблицу»:

Получаем ошибку:

Будем добавлять BSIK и BSAK.

Тут есть один момент. Запись будет или в BSIK или в BSAK, соответственно, если мы сделаем обычное соединение BKPF с BSIK и BKPF с BSAK, то записи у нас никогда не выберутся, так как JOIN дает результат, только если записи есть во всех таблицах.

Тут нам на помощь придет левый JOIN. При таком соединении возвращаются все данные из «левой» таблицы, даже если не найдено соответствий в «правой» таблице. Вдаваться в подробности не буду, о JOIN’ах можно почитать в интернете, например, тут (Рисунок 4).

Итак, добавляем BSIK, соединяем ее по номеру документа, БЕ и году с BKPF. Поля соединяем «ниткой» простым перетаскиванием с нажатой правой кнопкой мыши от одного поля к другому.

В контекстном меню соединения выбираем «Левый внешний оператор соединения»:

Аналогично делаем для BSAK. Получается так:

Способ соединения таблиц №4

Теперь самый простой способ соединения.

Нам нужно получить электронный адрес автора документа.

Добавляем таблицы USR21 и ADR6:

Поля с одинаковым названием система соединила сама, нам остается соединить BKPF и USR21 по имени пользователя:

Нажимаем «Инфо-набор» и на экране изменения инфо-набора нажимаем «Сохранить» и «Сгенерировать».

С соединениями все. Теперь выбираем поля, которые будут использоваться в отчете.

На экране изменения инфо-набора нажимаем «Группы полей» и выбираем Группа полей 01 (заголовок группы полей, куда будем добавлять поля, должен быть активен). Групп полей можно создать несколько, но в данном случае сложим все в одну:

Слева разворачиваем список полей таблиц и выделяем поля, которые хотим добавить в группу 01:

Через контекстное меню добавляем поля в группу (или нажимаем кнопку на панели инструментов левого фрейма).

  • Из таб. BKPF нас интересует поле XBLNR – там лежит номер фактуры и XREF1_HD – там связка со статусом. Также добавим поля «Вид документа» и «Дата проводки» для ограничений выборки;
  • Из таб. RBKP нас интересует поле STBLG – там лежит номер документа сторно;
  • Из таб. BSIK нас интересует поле XREF1 – там лежит дата получения сч.ф;
  • Из таб. BSAK нас интересует поле XREF1 – там лежит дата получения сч.ф;
  • Из таб. ADR6 нас интересуют поле Адрес электронной почты;
  • Также добавим дополнительное поле Z_STATUS.

Вроде бы все. Но есть один нюанс…

У нас 2 поля XREF1. Одно из BSIK, другое из BSAK. C этим можно смериться, а можно переложить все в одно поле, которое и будет в отчете.

Нажимаем «Дополнительная информация»:

Нажимаем «Создать»:

И создаем дополнительное поле Z_XREF1:

Не забываем про последовательность фрагмента кода, у нас он уже = 3

Теперь немного кодирования. Находясь на нужной записи нажимаем «Кодирование для дополнения»:

И пишем простой код:

CLEAR Z_XREF1.

IF BSIKXREF1 NE SPACE.

Z_XREF1 = BSIKXREF1.

ENDIF.

IF BSAKXREF1 NE SPACE.

Z_XREF1 = BSAKXREF1.

ENDIF.

Нажимаем «Сохранить» и «Сгенерировать»

Не забываем добавить поле в группу полей.

Также не забываем присвоить группу пользователей нашему инфо-набору в тр. SQ03:

С инфо-набором все.

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

Если мы находимся НЕ в стандартной рабочей области – переходим в стандартную рабочую область (см. п.1).

Находясь в тр. SQ02 переходим к ведению запросов:

или тр. SQ01.

Если мы находимся не в нашей группе пользователей, то меняем группу пользователей на нашу:

Указываем имя нашего запроса Z_DEMO_QUERY и создаем его:

Выбираем наш инфо-сет:

Заполняем заголовок и нажимаем «Основной список»:

Раздвигаем левый фрейм и выбираем нужные нам поля для селекционного экрана нашего отчета и для вывода в самом отчете:

Нажимаем «Сохранить», потом «Тест» запрос генерируется.

Далее появляется окно:

Варианта ALV-отчета у нас еще нет, а позиций ставим побольше, у нас ведь много документов:

Заполняем селекционный экран, нажимаем на кнопку и получаем результат:

Дополнение

Это не обязательно, но желательно…

Когда мы будем создавать транзакцию, можно указать вариант селекционного экрана, с которым эта транзакция будет запускаться. В принципе, всегда нужно создавать вариант по умолчанию, чтобы можно было управлять действиями пользователей, и они не запускали «тяжёлые» отчеты без указания критериев выбора и эти отчеты не нагружали систему, а потом не вываливались по таймауту.

Итак, на селекционном экране нашего запроса нажимаем «Сохранить» и создаем вариант ZMAIN, который включим потом в транзакцию. Указываем атрибуты полей и, если нужно, значения:

Сохраняем.

Если что-то меняем в инфо-наборе, не забываем зайти в изменение запроса и сохранить его для того, чтобы перегенерировался код.

6.     Создание транзакции для запуска отчета

Теперь нужно обеспечить этот запрос соответствующей транзакцией.

Запускаем тр. SE93. Указываем имя будущей транзакции Z_DEMO_QUERY:

Указываем краткий текст. Выбираем «Транзакция с параметрами»:

В качестве транзакции, запускающий наш отчет будем использовать START_REPORT:

Заполняем параметры:

D_SREPOVARIREPORTTYPE = AQ

D_SREPOVARIREPORT = Z_DEMO_QUERY (имя нашей группы пользователей)

D_SREPOVARIEXTDREPORT = Z_DEMO_QUERY (имя нашего запроса)

D_SREPOVARIVARIANT = ZMAIN (имя варианта селекционного экрана)

Сохраняем.

Теперь наш отчет можно запустить транзакцией Z_DEMO_QUERY и поля Дата проводки, БЕ, Финансовый год будут обязательными для заполнения:

7.     «Проваливание»

Если мы хотим «провалиться» в документ из нашего отчета, например, используя тр. FB03 посмотреть FI-документ, то нужно присвоить транзакцию FB03 механизму «отче-отчет» для нашего запроса.

Запускаем тр. SQ01.

Выбираем наш запрос и изменяем его.

Далее выбираем пункт меню «Присвоение отчета»:

Нажимаем «Вставить строчку»:

Выбираем «Другой тип отчета»:

Выбираем «Транзакция»:

Указываем FB03:

Сохраняем присвоение отчетов

Сохраняем запрос.

Запускаем отчет и проваливаемся в строку отчета:

И получаем ошибку:

Транзакция запущена верная, FB03, но, по каким-то причинам, вместо номера документа система подставляет номер документа сторно MM-фактуры.

В принципе, механизм передачи параметров в вызываемую транзакцию основан на PID (GET PARAMETER и SET PARAMETER). У каждого поля свой ID (их можно посмотреть в технической информации к полю).

Вот тут и происходит ошибка (это было в классической SAP ERP EhP7 SP5, может сейчас в S/4HANA такого нет). Система передает и для номера FI-документа и для номера MM-документа одно имя параметра ‘BLN’. Запись для поля STBLG идет после BELNR, так что кто последний, тот и попадет в транзакцию через ее GET PARAMETER:

В данном случае способ борьбы с этим: поиск нот, выставление клиентских сообщений в службу поддержки или удаление поля STBLG из отображаемых на экране отчета. На селекционном экране оно остается, ведь мы должны выбрать только не сторнированные в MM документы. То есть, по большому счету, поля STBLG и не должно быть на экране отчета, так что мы ничего не теряем.

Изменяем запрос, удаляем поля из списка отображаемых в отчете:

Сохраняем запрос.

Получаем отчет, в котором можно провалиться в FI-документ:

8.     Перенос между системами

Если мы находимся не в стандартной рабочей области – переходим в стандартную рабочую область (см. п.1).

Находясь в тр. SQ02 переходим к переносу:

Выбираем «Перенос инфо-наборов и запросов», указываем инфо-набор Z_DEMO_QUERY_INFO_SET и запрос Z_DEMO_QUERY. Выбираем опции «Выгрузка»:

Примечание: в данном примере перенос через файл, но можно и через транспортный запрос, для этого выбираем “Экспорт”, а в целевой системе “Импорт”.

Запускаем в тестовом режиме, проверяем что выгрузка возможна:

Возвращаемся, снимаем флаг «Тестовый прогон» и запускаем. Система просит указать имя файла в котором будет сохранено описание нашего инфо-набора и запроса (по умолчанию это в папке по пути: Мои документы -> SAP -> SAP GUI). Указываем имя Z_DEMO_QUERY и сохраняем:

Примечание: появление этого окна зависит от настроек SAP LOGON (можно поменять: в SAP GUI нажимаем кнопку «Настройка локального формата» или нажимаем Alt + F12, потом выбираем пункт меню «Опции…», далее раскрываем папку «Безопасность» и выбираем пункт «Настройки безопасности»):

.

Еще нам нужно перенести нашу группу пользователей Z_DEMO_QUERY. Перенос выполняется аналогично:

Теперь нужно загрузить наш проект в другую систему.

Запускаем тр. SQ02 в другой системе.

Переходим в стандартную рабочую область.

Выбираем пункт меню: Среда -> Переносы.

Выбираем опции «Загрузка» и «Перенос групп пользователей». Снимаем флаг «Тестовый прогон»:

Выбираем файл с нашей группой пользователей:

Аналогично поступаем с файлом с инфо-набором и с запросом:

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

Все, можно пользоваться запросом в новой системе.

В статье демонстрируется применение базовой функциональности 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). Только один инфо-набор может быть выбран для создания запроса. Это означает, что все поля, которые вы хотите включить отчет, должны быть в одном инфо-наборе. Дважды щелкните по инфо-набору для его выбора в качестве базы для создания запроса.

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

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

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

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

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

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

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

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

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

Зарегистрироваться

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

Войти

3 комментария

zond

2 ноября, 2009 в 9:35 дп

Добрый день. Адрес ссылки cannot be found.
Подскажите пожалуйста, есть другие источники, где можно почитать информацию по SAP Query?

zond

2 ноября, 2009 в 9:35 дп

Добрый день. Адрес ссылки cannot be found.
Подскажите пожалуйста, есть другие источники, где можно почитать информацию по SAP Query?

VirVit

2 ноября, 2009 в 2:14 пп

Чего-то внятного в виде книжки или памятки я не встречал.

VVL

3 ноября, 2009 в 1:07 пп

о кверях много интересного можно почерпнуть из 580 курса. Особо вы отметил 2 вещи по SQ02: переключатели (например, чтобы в ОМ выводились записи на одном языке…) и дополнительные структуры, которые используют функциональные модули RPAQ_GET_AF_*

Система SAP ERP содержит множество отчетов с огромным количеством полей. Для настройки отображения нужных полей существует механизм, позволяющий скрыть лишние поля, изменить порядок, выполнить сортировку, подвести промежуточные и общие итоги. Ко всему прочему, система позволяет хранить несколько вариантов настроек и быстро выбирать требуемый.

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

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

Инструмент SAP Query позволяет создавать отчёты без значительных трудозатрат.

Ниже будет рассмотрен пример создания отчета средствами SAP Query.

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

  1. Создание инфо-набора
  2. Создание группы пользователей, присвоение ей инфо-набора
  3. Создание запроса на базе инфо-набора.
Постановка задачи

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

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

В системе существуют отчеты, показывающие стоимость позиций заказа к позиции контракта или документы поступления со ссылками на заказ на поставку. Единого отчета нет.

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

Так же необходимо добавить признак, позволяющий отображать только проблемные позиции.

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

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

Запустите транзакцию SQ02.

image

  • Введите имя Инфо-набора «Z_SUPPLY_TO_CONTRACT»и нажмите кнопку «Создать»
  • Определите описание инфо-набора «Поступление к контрактам»
  • Введите имя таблицы EKPO (см. Рисунок 2). Это стандартная таблица с позициями документов закупки, включая контракты.

image

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

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

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

Далее отмечаем пункт «Включить ключевые поля» и подтверждаем создание.

image

Теперь мы находимся на первом экране ведения инфо-набора.

image

Экран разделен на 3 части:

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

Если на предыдущем экране выбран тот же пункт с ключевыми полями, то в группе полей должны отображаться номер документа закупки и позиция. Если нет, то включите эти поля (правой кнопкой мы по полю из таблицы и выбрать пункт «включить поле в группу полей»), или исключите лишние.

Затем следует добавить оставшиеся поля, необходимые для нашего отчета. Для этого следует нажать кнопку на панели инструментов «Дополнительная информация» (F5). Для переключения в исходное положение следует нажать кнопку «Группы полей» (F6).

image

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

Создадим требуемые нам поля. Для этого необходимо нажать на кнопку «Создать» (кнопка в виде белого листа). В открывшемся окне следует указать имя нового поля и выбрать пункт «Дополнительное поле»

image

Далее следует заполнить наименование, текст заголовка в отчете и ссылку на поле-образец «EKPO-BRTWR». Формат нашего поля будет скопирован с образца.

image

Следующее поле создается аналогично, за исключением порядкового номера поля.

image

Стоимость поступлений и стоимость счетов-фактур будем брать из истории заказа на поставку из таблицы EKBE.

image

image

Добавленные поля отображаются в левом блоке в ветке «дополнительные поля».

Данные поля следует добавить в группу полей. Для этого переключитесь в режим группы полей (кнопка «Группа полей») и щелкнув правой кнопкой мыши выберите пункт «Добавить в группу полей».

Затем возвращаемся обратно в режим дополнительной информации.

Определим правила формирования стоимости позиции контракта.

Для этого необходимо установить курсор мыши на требуемой позиции и нажать кнопку «Кодировка для дополнений».

image

Зададим следующий код для поля «BRTWR»:


data:
ii_WKURS like EKKO-WKURS.

SELECT SINGLE WKURS INTO ii_WKURS FROM EKKO
WHERE EBELN = EKPO-EBELN.

CLEAR BRTWR.

IF EKPO-LOEKZ IS INITIAL.
BRTWR = EKPO-NETPR / EKPO-PEINH * EKPO-KTMNG * ii_WKURS.
ELSE.
BRTWR = '0'.
ENDIF.


Определяем переменную для курса валюты, в которой ведется контракт. Затем получаем ее значение.

Если позиций контракта не удалена, то стоимость равна произведения количества и цены, с учетом количества единицы цены и курса валюты. Если контракт в валюте учета, то система автоматически равна 1.

Если позиция удалена, то стоимость рана 0.

Код для поля «ORDER_BRTWR»:


data:
s_NETPR like EKPO-NETPR,
s_PEINH like EKPO-PEINH,
s_MENGE like EKPO-MENGE,
c_BRTWR like ORDER_BRTWR,
i_ebeln like EKKO-EBELN,
i_WKURS like EKKO-WKURS.

ORDER_BRTWR = '0'.

select NETPR PEINH MENGE EBELN
INTO (s_NETPR, s_PEINH, s_MENGE, i_ebeln)
from EKPO as e
where
e~KONNR = EKPO-EBELN AND
e~KTPNR = EKPO-EBELP AND
e~LOEKZ = ''.

SELECT SINGLE WKURS INTO i_WKURS FROM EKKO
WHERE EBELN = i_ebeln.

CLEAR c_BRTWR.
c_BRTWR = s_NETPR / s_PEINH * s_MENGE * i_WKURS.
ORDER_BRTWR = ORDER_BRTWR + c_BRTWR.
endselect.


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

Код для поля «DMBTR»:


data:
s_SHKZG like ekbe-SHKZG,
s_DMBTR like ekbe-DMBTR.

DMBTR = '0'.

select DMBTR SHKZG INTO (s_DMBTR, s_SHKZG) from EKBE as e
INNER JOIN EKPO as z
ON e~EBELN EQ z~EBELN AND
e~EBELP EQ z~EBELP
where
z~KONNR = EKPO-EBELN AND
z~KTPNR = EKPO-EBELP AND
e~VGABE = '1'.
if s_SHKZG = 'S'.
DMBTR = DMBTR + s_DMBTR.
else.
DMBTR = DMBTR - s_DMBTR.
endif.
endselect.


Для документов поступления мы сразу берем в расчет стоимость во внутренней валюте. По этой причине нет необходимости пересчитывать валюту. В документах поступления отсутствует признак удаления, так как для бухгалтерских проводок возможно только сторнирование. В связи с этим по полю «EKBE-SHKZG» определяем прямой это документ или сторнирующий.

Код для поля «F_DMBTR»:


data:
s_SHKZG_f like ekbe-SHKZG,
s_DMBTR_f like ekbe-DMBTR.

F_DMBTR = '0'.

select DMBTR SHKZG INTO (s_DMBTR_f, s_SHKZG_f) from EKBE as e
INNER JOIN EKPO as z
ON e~EBELN EQ z~EBELN AND
e~EBELP EQ z~EBELP
where
z~KONNR = EKPO-EBELN AND
z~KTPNR = EKPO-EBELP AND
( e~VGABE = '2' OR e~VGABE = '3' ).
if s_SHKZG_f = 'S'.
F_DMBTR = F_DMBTR + s_DMBTR_f.
else.
F_DMBTR = F_DMBTR - s_DMBTR_f.
endif.
endselect.


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

Далее следует перейти во вкладку «Критерии выбора». Там мы создадим поле «Номер контракта» и признак «только позиции с превышением».

При создании следует учитывать, что «Критерий выбора» — это поле, по которому выполняется ограничение, а «Параметр» — это некий признак, которому следует задать некий функционал.

Создадим критерий выбора «Номер контракта».

image

и параметр «Только позиции с превышением»

image

Обратите внимание на то, что параметр в поле «ДопИнфо» содержит текст «AS CHECKBOX» для того, чтобы отобразиться в качестве чекбокса.

Для критериев выбора «Номер контракта» каких то дополнительных настроек не требуется. Отчет будет ограничиваться по полю, указанному в настройках. Для параметра же внесем ограничения в формируемый отчет. Для этого перейдем на вкладку «Кодировки» и выберем фрагмент кодировки «5 Обработка записей».

image

и добавив код:


IF Z_ONLY = 'X'.
CHECK BRTWR < DMBTR.
ENDIF.

Этим кодом мы ограничиваем вывод только тех записей, для которых BRTWR

Обратите внимание, что на момент проверок данные поля должны быть рассчитаны. Именно по этой причине для данной проверки последовательный номер был указан равным 10 (любой номер, превышающий номера предыдущих полей).

Теперь сохраняем инфо-набор и генерируем его image.

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

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

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

image

  • Вводим имя группы пользователей «ZMM»
  • Нажимаем кнопку «Создать»

image

  • Определяем название «Отчеты ММ»
  • Нажимаем кнопку «Сохранить». На этом этапе система может запросить ключ разработчика или запрос на перенос
  • Нажимаем кнопку «Присвоить пользователей и инфо-наборы»
  • В открывшемся окне вводим пользователей, для которых предназначен данный отчет
  • Сохраняем внесенные изменения

image

  • Нажимаем кнопку «Присвоить инфо-наборы»

image

  • Прокручиваем список вниз, чтобы найти пользовательские инфо-наборы и отмечаем созданный ранее инфо-набор «Z_SUPPLY_TO_CONTRACT»
  • Сохраняем
Создание запроса

Запрос — это следующий шаг формирования отчета после создания инфо-набора и группы пользователей. На этом шаге определяется окончательный состав полей, которые войдут в отчет, порядок полей, внешний вид отчета, сортировка, итоги и прочее.

Запускаем транзакцию SQ01.

image

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

Вводим имя «Z_SUPPLY» и нажимаем кнопку «Создать». Система выведет список инфо-наборов, привязанных к данной группе пользователей. Выбираем наш инфо-набор и подтверждаем ввод.

Формат списка желательно сопоставить с существующим форматом печати, иначе отчет не может быть напечатан. Распространенные форматы: 65×132 и 65×80. Оставим формат по умолчанию: 0 строк (без ограничения) и 83 столбца.

image

Назовем отчет «Поступление к контрактам» и перейдем непосредственно к «рисованию» отчета, нажав кнопку «Основной список».

image

На экране основного списка в левой части расположены поля, которые можно добавить в отчет. В левой нижней части отображены свойства выделенного элемента, а основная часть — это графическое представление будущего отчета.

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

Внесем небольшие коррективы. Стоимостные поля отображаются с доп. полем «Валюта» значение которого нам не требуется. Чтобы убрать отображение валюты, выделим стоимостное поле и в левой нижней части экрана выделим пункт «Без поля валюты». Затем нажмем «Apply».

image

На этом наш отчет можно считать сформированным. Сохраняем отчет.

Тут же его можно протестировать, нажав кнопку «Тест».

Создание транзакции для отчета

Убедившись, что отчет полностью удовлетворяет нашим потребностям, следует создать для его запуска транзакцию.

  1. Изначально генерируем программу. Для этого переходим на первый экран транзакции SQ01. В данной транзакции выделяем созданный нами запрос и выбираем в меню «Запрос» -> «Другие функции» -> «Сгенерировать программу».
  2. После генерации программы получаем имя программы в меню «Запрос» -> «Другие функции» -> «Просмотреть имя отчета».
  3. Формируем транзакцию через SE93.

    1. Указываем имя транзакции
    2. Нажимаем кнопку «Создать»
    3. Указываем название транзакции
    4. Отмечаем пункт «Программа и экран выбора»
    5. Подтверждаем ввод
    6. В открывшемся экране в поле «Программа» вводим ранее полученное имя отчета
    7. Отмечаем GUI-способность
    8. Сохраняем

image

Теперь можно формировать отчет, используя транзакцию.

image

P.S.

  1. На некоторых экранах может отображаться в заголовке «Изменение» вместо «Создание». Это связано с тем, что отчет был создан ранее
  2. Приведенный код вряд ли является наиболее оптимальным. Если Вы считаете, что Ваш вариант лучше, готов его рассмотреть и заменить
  3. Существует несколько вариантов формирования данного отчета в SAP Query. Приведенный вариант не является оптимальным. Но он раскрывает возможности SAP Query
  4. Я всегда рад конструктивной критике

This entry passed through the Full-Text RSS service — if this is your content and you’re reading it on someone else’s site, please read the FAQ at http://ift.tt/jcXqJW.

Понравилась статья? Поделить с друзьями:
  • Sanyo rcs tm80bg инструкция на русском
  • Sanyo rcs sh80ag инструкция на русском
  • Sanyo em p7 el17 инструкция микроволновка
  • Sanyo em d7 dl17 инструкция pdf
  • Sanyo dsr 3716 инструкция на русском