Еще один отзыв о SAP-е. В этот раз он взят с PC Magazine/RE — SAP-вуду, или О чем не говорят «саперы» от 10.04.2009 года. Отзыв, по-моему, спорный — в нем есть много голословных утверждений. Кроме того, я где-то видел обсуждение этой статьи саперами — они были очень сильно не согласны с автором и обвиняли его в незнании матчасти (к сожалению, ссылку эту найти сейчас не могу). Но почитайте лучше сами, и выводы делайте сами:
Первое и самое сильное впечатление, возникающее у человека, сталкивающегося с SAP вживую, — ужас. Эргономика не выдерживает никакой критики, а об интуитивности интерфейса говорить даже не приходится. Задание логически связанных параметров разбросано по разным местам. Предназначение программ, полей ввода, колонок таблиц обычно никак не следует из их названий. Это поражает.
Прикинуть стоимость внедрения можно было бы на самых ранних стадиях, просто взглянув на снимки экрана с примерами форм, но… Их-то как раз не публикуют. Бывает и еще веселее: некоторые элементы управления программы появляются не в ее окне, а в меню клиента посреди его собственных элементов управления. Не знаешь – не догадаешься.
Следует иметь в виду, что SAP не предоставляет покупателям документацию. Ни на каком языке. Да, именно так — ПО продается без документации. Не нравится? Отправляйте сотрудников на обучение, только будьте готовы к тому, что и учебные курсы будут неэффективными. Как показывает практика, чему-то научиться сотрудники могут, только помотав (в первую очередь себе) нервы на реальном проекте.
Есть серьезное подозрение, что так называемые «курсы», например (привожу из знакомой мне области) HR505 — по организационному менеджменту, HR305 — по администрированию персонала, HR306 — по учету рабочего времени и т.д., выпускаются с искажениями, причем их масштаб настолько велик, что настройка по ним попросту невозможна. Это при том, что «курсы» выдаются после обучения, а передача их третьим лицам преследуется по закону (что, впрочем, не мешает пользователям SAP обмениваться ими на соответствующих форумах).
Из уст в уста
Почему так? Казалось бы, это очень странная позиция. Видимо, таким образом фирма SAP защищает свои интересы и интересы своих партнеров. Литературы по системе тоже очень мало. Месячная зарплата «сапера» превышает гонорар, который может предложить за книгу издательство, поэтому новички отказываются от планов «издать книгу» (а такая мысль поначалу возникает у многих), когда дорастают до специалистов. В итоге знания передаются из уст в уста. Чтобы не быть голословным, опишу типичную настройку и укажу курсы, которые ей соответствуют, чтобы вы могли убедиться, насколько сильно официальные материалы расходятся с действительностью.
Для покупателей это означает, что они не имеют ни малейшего шанса настроить SAP самостоятельно. Единственный способ справиться с проблемой — заключить договор об обслуживании с фирмой — партнером SAP. Для тех, кто занимается ИТ, это значит, что они не имеют ни малейшего шанса изучить SAP «в домашних условиях». Единственный способ — наняться на работу в компанию, которая заключила договор об обслуживании, или в фирму-партнер. (Пиратам же стоит иметь в виду, что устойчивого долговременного спроса на болванки с SAP не будет.)
Странно спроектированный интерфейс и традиции устной передачи знаний приводят к тому, что первые два года новичок работает за 600–700 долл. в месяц, после чего происходит резкий скачок зарплаты в диапазон 3–5 тыс. долл. в месяц. Настройщики (checkbox’еры) получают столько же, сколько программисты (abap’еры), и это совершенно справедливо: ниже будет, понятно, почему. Сравните: потолок для программиста на Cи++ или Java сегодня можно оценить в 1500 долл. в месяц — и это при высокой квалификации. Максимально же известная сумма, которую запрашивал «сапер» (причем фрилансер), составляет 19 тыс. долл. в месяц.
Взгляд изнутри
Теперь посмотрим на систему поближе, на примере работы с модулем HR (humain resources, он же HCM, humain capital management; предназначен для управления человеческими ресурсами). Тут придется перейти на терминологию SAP (сохранившуюся неизменной с каких-то доисторических времен). Программы здесь называются report‘ами. SAP написан на языке ABAP, в котором существуют три разновидности процедур — function, form, report. Report может иметь второе, дополнительное имя, называемое транзакцией (которое не имеет никакого отношения к транзакциям баз данных вообще и той базы данных, с которой работает SAP, в частности). Только report может иметь транзакционное имя. Дают его в транзакции SE93. Каждый раз, когда встречается слово «отчет», знайте, это — не отчет, а report (т.е. процедура).
Когда пользователь регистрируется в клиентском ПО, он видит дерево ярлыков (как в Windows Explorer, только оформлено оно чуть иначе) для запуска прикладных транзакций. Корень этого дерева называется Меню SAP и не имеет ничего общего с меню клиента. Кроме того, в клиентской программе есть командная строка, через которую также можно запускать транзакции.
Транзакцию Implementation Guide, она же SPRO, нужно упомянуть, поскольку она занимает совершенно особое место — демонстрирует дерево ярлыков для запуска транзакций, с которыми работает настройщик. Далее — то, что в СУБД называют view («виды»), в SAP называют ракурсами. Часть таблиц модуля HR называют не таблицами, а инфотипами, их записи — записями инфотипов. Имена всех таблиц, инфотипов, ракурсов — это просто их порядковые номера, что отнюдь не упрощает их использование. При этом порядковые номера содержат не только цифры, но и буквы.
ABAP работает с именами, указанными в Data Dictionary — своего рода «прокладке» между ним и СУБД. Для обработки записей таблицы или ракурса с помощью GUI можно в транзакции SE11 создать специальную программу, называемую диалогом ведения (для этого во время транзакции SE11 в меню клиента (!) выбрать «утилиты», затем «генератор ведения таблиц»), которую затем запустить в транзакции SM30 (указав имя таблицы). Если несколько таблиц/ракурсов связаны (по всей видимости, посредством foreign key), то редактировать их содержимое, отображая для записи одной таблицы связанные с нею записи другой таблицы, можно, создав в транзакции SE54 специальную программу, называемую кластер ракурсов, которую затем запустить в SM34 (несмотря на название, кластер ракурсов родствен диалогу ведения, а не ракурсу). Кроме того, существуют кластерные таблицы (например, BSEG), не являющиеся плоскими таблицами, для которых нельзя создать ни диалог ведения, ни кластер ракурсов, из них нельзя делать select. Диалог ведения для инфотипов создается всегда, но SM30 с ним не работает — разные подгруппы инфотипов создаются, а затем обрабатываются разными транзакциями, например PPCI и PPOME, PM01 и PA30 и т.д.
Существует понятие подтип инфотипа, это — инфотип с определенным значением в его поле SUBTY. Например, инфотип «члены семьи» может иметь подтипы «брат», «отец» и т.д. Соответственно идентификатор подтипа — это значение данного поля (оно может оставаться незаполненным). В последующих статьях будем добавлять термины по мере надобности.
Найдите где-нибудь, например, курсы HR315 и HR530 и попытайтесь настроить или по крайней мере своими словами сформулировать последовательность действий, которые придется произвести, и помните об ответственности. Даже в SPRO нужные транзакции вы не найдете. В это невозможно поверить, но так оно и есть.
Годовая стоимость настройки SAP (не считая стоимости выявления бизнес-процессов организации, проводимой более дешевым персоналом) в десятки раз превышает стоимость самого SAP как комплекта ПО. Учитывая, что ниже приведен едва ли не самый безобидный образчик «черной магии» SAP, неудивительно, что «сапер» стоит в пять раз больше, чем проектировщик, занятый переработкой бизнес-процессов организации…
Практический пример

Дадим подсказку: на самом деле задача и методы ее решения формулируются так: «создать новое мероприятие в перечне мероприятий прикладной транзакции PB40».
Предварительные действия, без которых не удастся увидеть то, что было настроено, — выставить себе правильный идентификатор группы пользователей. Он указывается в меню клиента «Система/Постоянные значения пользователя/Собственные данные», вкладка «Параметры», переменная UGR. Значение не означает ничего (в этом смысле оно произвольно), кроме того, что оно будет сравниваться на совпадение с соответствующим полем обрабатываемых таблиц.
Порядок действий по настройке. Запустите транзакцию SPRO. На рисунке показана только часть дерева; отмечены пункты, имеющие отношение к созданию нового мероприятия в PB40. Позиции с «часиками» — это транзакции, остальные — папки.
1. Запустите «Изменение инфогрупп». Появится окно «Название операции».
Первая позиция «зависимость групп пользователей от меню и инфогрупп» вообще-то неправильно именована! — правильнее ее называть «зависимость инфогрупп от групп пользователей». Эту позицию и запустите. В появившейся таблице создайте новую запись (этим создадите новую инфогруппу, т.е. группу инфотипов).
Предназначение колонок:
  • Меню — никакое это не меню! Это только что нами придуманный идентификатор инфогруппы! В общем случае нельзя начинать идентификатор с произвольного символа, не рискуя нарушить работу системы. С каких символов может начинаться идентификатор, можно узнать в транзакции SM30 в таблице TRESC (далее необходимо указать название таблицы, в которую вы добавляете идентификатор. А его, в свою очередь, можно узнать, нажав в любом поле той таблицы клавишу F1, затем во вновь появившемся окне кнопку «Техническая информация»).
  • Название — придуманное название инфогруппы.
  • Ссылка — никакая это не ссылка! Это ваш придуманный идентификатор группы пользователей (при несовпадении идентификатора пользователя и идентификатора, прописанного здесь, демонстрируется предупреждение).

Остальные колонки оставьте пустыми. Сохранитесь, выйдите. Запустите «инфогруппа». В появившемся окне введите тот же идентификатор инфогруппы, нажмите «Ввод». 
В появившейся таблице создайте новые записи (в них вы перечисляете инфотипы, входящие в эту инфогруппу). 
Предназначение колонок:
  • ГруппаПользователей — введите тот же идентификатор группы пользователей.
  • № — порядок предъявления инфотипов, задается положительными числами. Рекомендуется шаг изменения номеров больше 1, чтобы между любыми двумя последовательно предъявляемыми инфотипами можно было вставить третий, установив его номер меньшим первого инфотипа, но большим второго. Примерно как в BASIC.
  • Операция — кодовое обозначение операции, которую вы позволяете (и одновременно заставляете) выполнить над инфотипом. Вас интересуют следующие значения: DIS=просмотр данных инфотипа (вы предъявляете инфотип, чтобы пользователь убедился, что работает с нужным набором данных), MOD=просмотр и изменение данных, INS=внесение данных, INSS=разрешено и MOD, и INS.
  • Инфотип — номер инфотипа (перечень разрешенных инфотипов приведен в таблице T582C, посмотреть которую можно транзакцией SM30).
  • Подтип — идентификатор подтипа инфотипа.

Значение в колонку «Текст инфотипа» SAP подставит. Сохраняемся, выходим.
2. Запустите «Изменение мероприятий кандидатов». В появившейся таблице (все колонки не уместились по ширине в страницу, пришлось расположить в два ряда) создайте новую запись (этим создадите новое мероприятие).
Предназначение колонок:
  • ВидМероприятияКандидата — ваш придуманный идентификатор мероприятия.
  • НазваниеВидаМероприятия — ваше придуманное название мероприятия.
  • Инфогруппа — введите тот же идентификатор инфогруппы. Если для мероприятия не указана инфогруппа, то демонстрируется инфотип 4000.

Сохранитесь, выйдите.
3. Запустите «Изменение меню мероприятий». Появится окно настройки мероприятия.
Запустите «Меню мероприятий: кандидаты». В появившейся таблице создайте новую запись (этим мы «прописываем» новое мероприятие в перечне мероприятий).
Предназначение колонок:
  • ГруппаПользователей — введите тот же идентификатор группы пользователей (демонстрируются только мероприятия, идентификатор которых, прописанный здесь, совпадает с идентификатором пользователя).
  • № — порядковый номер мероприятия в перечне мероприятий.
  • Мероприятие — введите тот же идентификатор мероприятия.

Значение в колонку «НазваниеВидаМероприятия» SAP подставит сам. Сохранитесь, выйдите.
4. «Создание динамических мероприятий» уведет нас далеко в сторону, поэтому описывать его не будем, а только упомянем для завершенности общей картины.