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

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)
«MVC или как писать отчеты быстро и просто»
Олег Точенюк:
>>"Самое главное - это расположить инклуды с моделью и представлением до инклуда с контроллером"   А может проще написать в начале что-то типа: CLASS: <имя> DEFINITION...

Три простых шага для написания ABAP отчета ALV

10755
30

В системе SAP ERP существует большое количество стандартных отчетов по продажам, производству, закупкам, однако, иногда требуется создать новый отчет под конкретные требования и задачи. Лучше всего для этого подходит язык программирования ABAP.

Разработку нового отчета можно осуществить в три «простых» шага:

  • первый шаг - задание начальных параметров,
  • второй шаг - запись данных во внутреннюю таблицу,
  • третий шаг - вывод данных в таблицу ALV (ABAP LIST VIEWER).

Задача: создать отчет с колонками: заказчик, дата отгрузки, номер накладной, номер счет фактуры и пункт отгрузки.

Решение.

Шаг 1.  На первом шаге через оператор REPORT определяем имя программы, через оператор TABLES таблицы, с которыми будем работать, через операторы SELECT-OPTIONS поля на экране выбора, которые должен будет указать пользователь, и через оператор TYPES и DATA описываем структуру нашего будущего отчета.

Тест программы:

REPORT  ztd_journal.

TYPE-POOLS: slis.

TABLES: vbrk, likp.

SELECT-OPTIONS:
 fkdat FOR vbrk-fkdat,
 vkorg FOR vbrk-vkorg,
 vstel FOR likp-vstel,
 kunag FOR vbrk-kunag.


TYPES:  BEGIN OF t_journal,
  kunag TYPE vbrk-kunag,
  name1 TYPE kna1-name1,
  ort01 TYPE kna1-ort01,
  vbeln TYPE vbrk-vbeln,
  vbelv TYPE vbfa-vbelv,
  fkdat TYPE vbrk-fkdat,
  netwr TYPE vbrk-netwr,
  mwsbk TYPE vbrk-mwsbk,
  vstel TYPE likp-vstel,
  zz_fctor TYPE likp-zz_fctor,

  END OF t_journal.

DATA: journal TYPE TABLE OF t_journal WITH HEADER LINE,
      wa_journal TYPE t_journal.

При запуске программы появится начальный экран с параметрами отчета (Рис.1)

Рис .1. Начальный экран отчета

Шаг 2. На этом шаге через оператор SELECT и SELECT SINGLE делаем выборку из таблиц базы данных. Предполагается, что разработчик знает таблицы, из которых нужно брать данные

Текст созданного запроса:

SELECT vbeln fkdat kunag netwr mwsbk FROM vbrk INTO CORRESPONDING FIELDS OF wa_journal WHERE fkdat IN fkdat AND vkorg IN vkorg AND kunag IN kunag AND fksto = '' AND sfakn = ''.
  SELECT SINGLE vbelv FROM vbfa INTO wa_journal-vbelv WHERE vbeln = wa_journal-vbeln AND vbtyp_v = 'J'.
  SELECT SINGLE vstel  FROM likp INTO wa_journal-vstel WHERE vbeln = wa_journal-vbelv AND vstel IN vstel.
  SELECT SINGLE name1 ort01 FROM kna1 INTO (wa_journal-name1, wa_journal-ort01) WHERE kunnr = wa_journal-kunag.
  wa_journal-netwr = wa_journal-netwr + wa_journal-mwsbk.
  APPEND wa_journal TO journal.
ENDSELECT.

SORT journal BY fkdat kunag.

В результате работы запроса в табличке VBRK «увидим» неотсторнированные фактуры, в табличке VBFA по потоку документов ищем номер накладной, в табличке LIKP ищем пункт отгрузки, а в табличке KNA1 информацию о клиенте.
 

Шаг 3. На третьем шаге описываем названия колонок в конечном отчете, а также настраиваем переход в другой отчет.

PERFORM call_alv.

*&---------------------------------------------------------------------*
*&    Form  call_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM call_alv.

  DATA: ifc TYPE slis_t_fieldcat_alv.
  DATA: xfc TYPE slis_fieldcat_alv.
  DATA: repid TYPE sy-repid.

  repid = sy-repid.

  CLEAR xfc. REFRESH ifc.

  CLEAR xfc.
  xfc-reptext_ddic = ‘Покупатель’.
  xfc-fieldname    = ‘KUNAG’.
  xfc-tabname      = ‘JOURNAL’.
  xfc-outputlen    = ‘15’.
  APPEND xfc TO ifc.

  CLEAR xfc.
  xfc-reptext_ddic = ‘Наименование’.
  xfc-fieldname    = ‘NAME1’.
  xfc-tabname      = ‘JOURNAL’.
  xfc-outputlen    = ‘45’.

Ограниченный доступ

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

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

Олег Башкатов (Рейтинг: 7740) 00:45, 10 сентября 2013

от HEADER LINE нужно уходить.
так советует Karl-Heinz Kühnhauser и Thorsten Franz  в своих книгах.
 
вот пример двухуровневого ALV
 
wiki.scn.sap.com/wiki/display
11:08, 10 сентября 2013

Сергей Косяченко (Рейтинг: 76)

То есть HEADER LINE - это самое страшное, что здесь продемонстрировано?
11:46, 10 сентября 2013

Олег Башкатов (Рейтинг: 7740)

согласен.
ENDSELECT как-то опустил из виду.
 
Что Вы хотите, чтобы я переписывал коды с одного портала на другой?))
ссылку, где можно найти кусочки кода я привел; там есть в том числе и пример с классом cl_salv_table.
13:09, 10 сентября 2013

Сергей Косяченко (Рейтинг: 76)

ФМ или класс не суть важно. Кому как нравится. Но вот выборки, да и заполнение хардкодом выходной структуры...Хотя, лишь бы работало. Просто, утомительно все это на саппорте разгребать. После таких примеров...
21:55, 10 сентября 2013

Олег Башкатов (Рейтинг: 7740)

а вот тут ошибаетесь, на мой взгляд)))
объектный подход предпочтительней, ибо память лучше использует
22:08, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Олег, я вам уже говорил, куда повесить свой глазок и что прежде чем что либо утверждать, определенное на ваш глазок, а особенно про память, желательно воспользоваться специальными средствами анализа, а потом уже с приведенным цифрами утверждать что ибо... а ибо не надо говорить о том, о чем имеете весьма смутное представление.
 
PS: Вот же обещал себе, не комментировать вас... но извините не удержался.
22:43, 10 сентября 2013

Олег Башкатов (Рейтинг: 7740)

опять сочувствую Вам.
 
Вы еще и про объекты не имеете представления.
лучше бы читали книги реальных авторов, а не писали всякую ...
ну вообщем Вы поняли.
 
sapland.ru/books/rekomendatsii-po-optimizatsii-programm-na-yazike-abap.html
 

у уважаемых авторов в книгах про ABAP всегда есть место про объектный подход, а вот у Вас нет ни слова. но это оптимизация в вашем стиле.
 
открою Вам секрет: объектный подход всегда быстрее (и не только в ABAP).
 
а п.лить (простите, говорить), Вы можете сколько угодно - других признаков жизни у Вас не замечено.
22:46, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Спасибо... что раскрыли про быстроту объектного кода над процедурным, не буду вас дальше расстраивать...
22:51, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Кстати, вы там в Москве к SAP-у поближе, будете на Космодамианской набережной, зайдете в учебный центр SAP, передайте эти же слова Василию Ковальскому, а то я х... написал, он ее рецензировал... в общем все вокруг у вас ... один вы похоже на белом коне и с оркестром.
 
PS: Иногда лучше жевать.. чем что то писать.
01:19, 11 сентября 2013

Олег Башкатов (Рейтинг: 7740)

Олег Витальевич, прекратите прекрываться третьими лицами.
Это уже как-то даже некрасиво, ибо не 1ый раз.
Вы еще на типографию "скиньте" или на алфавит с буквами.
 
В вашем случае утверждение "Иногда лучше жевать.. чем что то писать." получено на собственном опыте
01:21, 11 сентября 2013

Олег Башкатов (Рейтинг: 7740)

Замечу, что слово для своего творения Вы сами подобрали.
вероятно, Вам видней.
 
я Ваш труд так не называл и называть не буду.
Это же все-таки книга...
23:03, 10 сентября 2013

Александр Дублин (Рейтинг: 13408)

Олег, "за базар надо отвечать" :-)
 
Предлагаю взять примеры из книги Олега, для ЭТИХ примеров провести замеры без "объектного подхода" и с "объектным подходом". Результаты оформить в виде статьи.
 
И тебе "уважуха" после этого будет и людям польза.
23:08, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Ну зачем же из книги, там же х..я написана, зачем же читать всякую ерунду, да светлую голову забивать :-)
01:24, 11 сентября 2013

Олег Башкатов (Рейтинг: 7740)

Если, конечно, Олег Витальевич не против...
10:57, 11 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Бог в помощь и электричка на встречу, только когда будете измерения делать, свой глазок не используйте... а так вперед, кто ж вам что-то запретить может.
11:33, 11 сентября 2013

Михаил Сковородин (Рейтинг: 682)

Олег и Олег,
 
При всем уважении, перепалка с переходом на личности, нисколько не красит. Просьба перевести обсуждение в конструктивное русло.
 
Каждый может иметь свое мнение. Каждый может ошибаться.  Аргументы, контраргументы, ... Такая "дуэль" гораздо интересней, полезней и красивей.
12:40, 11 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Так а я то - что, я только за, подождем сертификат соответствия на измерительный прибора "глазок ...", потом сделаем замеры и посмотрим кому к умным, а кому к красивым :-)
 
PS: Да далее, молчу, молчу и еще раз молчу :-)
22:39, 10 сентября 2013

Александр Дублин (Рейтинг: 13408)

Олег, может лучше на книгу ссылку дать. И людям приятнее будет и порталу продажи повысишь :-)
22:47, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Александр, не буду... так как вот к примеру Олег Башкатов, он этих устриц не ел, но сразу установил, что я там всякую х..ю написал, так зачем же :-)
01:22, 11 сентября 2013

Олег Башкатов (Рейтинг: 7740)

Олег Витальевич, не хочу Вас расстраивать, но Александр имел ввиду авторов полезных книг.
Посмотрите, на подчиненность комментариев.
 
Вот ссылка - выбирайте любую
sapland.ru/books/the-essential-abap-collection.html
 
Судя, по всему Ваш глазок натянут на одно место; поэтому не указывайте, что мне делать с моим.
Сам разберусь.
11:01, 11 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Дублин я думаю и без вас ответит, что он имел в виду.
 
А вам предлагаю провести рекламную акцию, только сегодня и только сейчас, универсальный измерительный прибор: "Глазок Олег Башкатов", измеряет скорость, массу, объем, теплопроводность и вот те 80 с лишним единиц измерения из справочника T006 системы SAP. Ваш начальник идиот и говорит, что программа работает медленно и не правильно? Купите и примените в ответ, что на "Глазок Олега Башкатов-а" все работает замечательно и быстро. Используются нанотехнологии и наноглазологии.

Сергей Косяченко (Рейтинг: 76) 11:07, 10 сентября 2013

1. Создаем структуру под поля экрана выборки.
2. Создаем структуру под вывод данных
3. Делаем выборку данных. Без всяких вложенных селектов и селект/енд_селект.
4. Выводим alv. Если только для просмотра, то:
      cl_salv_table=>factory(
        IMPORTING
          r_salv_table = lr_salv_table
        CHANGING
          t_table = lt_alv ).
      
      lr_salv_table->display( ).

Николай Кронский (Рейтинг: 345) 15:06, 10 сентября 2013

Печалька... О чем эта статья, на кого она расчитана? Возможно, это попытка человека, далекого от разработки, показать, что "я тоже могу"?
Любой отчет подпадает под шаги:
1) задать параметры выбора;
2) выбрать данные;
3) показать данные;
4) обработать данные (опционально).
Однако, тонкости неисчислимы:
Где красивый читабельный код, соответствующий хоть каким-то нормам наименования?
Где проверка полномочий?
Где возможность использования разработки в мультиязычной среде?
Где оптимальный код, который все еще будет отрабатывать в обозримый интервал времени на базах более десятка терабайт?
Где возможности расширения отчета без дополнительного кодирования в нескольких местах программы, например, при желании вытащить еще хотя бы одно значение?
Где ...?
Статья, к сожалению, напоминает отрывок из книги "АВАР за 5 дней". Наверное, для решения задачи "на коленке" имеет смысл обратиться к инструменту попроще, чем АВАР? Например, QuickViewer?
Субъективно, статья воспринимается как дискредитация деятельности людей, занимающихся разработкой на АВАР профессионально.
 
P.S.: Заранее приношу извинения за некоторую резкость суждения.
17:39, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Ну как бы внизу статьи уже все написано:
 
Белобродский Андрей Андреевич, к.э.н., руководитель отдела автоматизации ЗАО «АВС Фарбен», член Пользовательского Экспертного Совета SAP, автор статей по настройке и использованию SAP.
 

А в профиле есть уточнения:
 
Должность: Руководитель отдела автоматизации бизнес процессов
Стаж работы с SAP: 7 лет
Реализовано проектов SAP: Siemens Enterprise Networks, Nokia Siemens Networks, Siemens Healthcare, L'Oreal, Myllycoski, ABC Farben
17:44, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

Хотя каюсь, сам вот это вот:
 
CLEAR xfc.
  xfc-reptext_ddic = ‘Сумма с НДС’.
  xfc-fieldname    = ‘NETWR’.
  xfc-tabname      = ‘JOURNAL’.
  xfc-outputlen    = ‘15’.
  APPEND xfc TO ifc.
 
часто предпочитаю использованию какого-нить REUSE_ALV_FIELDCATALOG_MERGE или чего позабористее.
22:19, 10 сентября 2013

Олег Точенюк (Рейтинг: 10189)

===
Субъективно, статья воспринимается как дискредитация деятельности людей, занимающихся разработкой на АВАР профессионально.
===
Пока ехал тут с работы, подумал, что на самом деле дискредитирует не эта статья. Андрей Белобродский не является сотрудником компании SAP и пишет в своей системе, на что имеет полное право. А вот что именно дискредитирует, так это люди которые пишут, то что называется решением для страны России или в Украине аддоном, вот это точно полная дискредитация, когда человек для проверки уникальности записей во внутренней таблице, созданной со ссылкой на структуру словаря данных с 83 кажется полями, не находит ничего лучше, чем создать создать для этой таблицы первичный ключ с перечислением всех этих полей. А потом когда другой разработчик добавляет в таблицу словаря новое поле, программа этого первого наивного чукотского мальчика начинает при определенных значениях валиться в дамп, при этом чтобы добиться исправления этой ошибки надо потратить месяц переписки.. а исправляется все это, да именно добавлением этих полей в первичный ключ... ну гениально решение. Или написание проверки в условии WHERE, для операции BETWEEN с условием <переменная> BETWEEN <верхняя граница>  AND <нижняя граница> и даже не удивляться что эта конструкция всегда возвращает sy-subrc = 4.
 
А ты потом открываешь этот абаповский код компании SAP и понимаешь, что в принципе у других все не так уже и плохо в этой жизни, солнышко светит, подумаешь: - "Где проверка полномочий?" Да какая проверка, оно хоть работает, в отличии от того кода, который в принципе никогда не работает...
(Комментарий удалён)
(Комментарий удалён)
14:26, 11 сентября 2013

Андрей Белобродский (Рейтинг: 1054)

Большое спасибо за подробные и полезные комментарии. Данная статья не предназначена для программистов, а для специалистов с полномочиями на ABAP, которых уже не устраивает инструмент SAP Query, который я описывал здесь sapland.ru/articles/stats
 
Так как сам не программист, с удовольствием прочитаю здесь статью с красивым кодом как получить отчет, в котором для пункта отгрузки на дату показывались номера накладной и счета фактуры ):
14:35, 11 сентября 2013

Андрей Белобродский (Рейтинг: 1054)

Да, Николай действительно мы целый год пользовались Quick Viewer, но в отчет попадали данные только если в поставке была позиция с номером 10. Пришлось по интернету смотреть как сделать отчет в ABAP ALV.

Олег Башкатов (Рейтинг: 7740) 23:48, 08 декабря 2014

В некоторых комментариях позволил себе нелестно отозваться о книге
 
sapland.ru/books/rekomendatsii-po-optimizatsii-programm-na-yazike-abap.html
 
Посетив мастер-класс и прочитав эту книгу год назад, понял что был неправ.
 
Однако, используя инфу в этой книге, а также подход по анализу кода (назову его "код в студию ... и запускаем по F8"), удалось даже сдать успешно сертификат C_TAW12_731 (training.sap.com/shop/certification)
 
Так сказать, пришло время взять слова обратно и извиниться ))) и написать новые)))
 
Олег, спасибо тебе за книгу. Мне она помогла.
12:22, 17 августа 2016

Пётр Ромащенко (Рейтинг: 150)

Надо же, какой хеппи-энд симпатичный... Чин-чин, Олег и Олег :-)

Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП»