Одна из самых интересных нот у SAP

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

1818219 – Debugging the payroll Schema

На всякий случай прикладываю PDF версию здесь.

Debugging PY schema

P.S. Спасибо Наталье за эту ценную информацию.

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


Продвинутые перцы переходят на SE16H

Да. Появилась новая транзакция SE16H вместо SE16N для работы с таблицами. Основные новшества это возможность группировки полей таблицы, возможность пользовательской сортировки до начала выборки данных, возможность делать простые JOIN вьюхи. Не ахти что, но САП показал морковку.


Волшебная клавиша в отладчике

Бес в ребро, седина мне в бороду.

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

Встаете на строчку, куда нужно перейти из текущего положения и нажимаете Shift-F12. Система не выполняет код между текущим и целевым положением, а просто перепрыгивает. Команда JMP в ассемблере, GOTO в бейсике.

Супер-удобно!


Как работают лимиты отсутствий

Лимит это банка, в которой лежат орешки. Достали орешек, количество лимита уменьшилось. Вернули – увеличилось. В системе есть два вида лимитов: лимиты отсутствий (инфотип 2006) и лимиты присутствий (инфотип 2007). Когда мы вводим отсутствие или присутствие, которое исчерпывает лимит (забирает орешек), система сокращает так называемое базовое право. Базовое право это количество орешков в банке – сколько всего дней или часов можно взять за определенный период.

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

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

Чтобы отслеживать связь отсутствий с лимитом (аналогично связь присутствия с лимитом присутствия) система использует промежуточную таблицу. Таблица PTQUODED содержит несколько важных параметров: ссылку на лимит, ссылку на отсутствие, табельный номер и сколько орешков было взято. При создании отсутствия или лимита система генерирует уникальный номер, который справа добавляется номером инфотипа: XXXXXX2006 или XXXXX2001. Даже если вы не сохраняете запись, номер все равно выделяется.

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

Если мы вносим погашение лимита через 416 инфотип, то такая запись также имеет свой уникальный номер с суффиксом 0416, а в PTQUODED сохраняется одной строчкой. Когда мы создаем запись ИТ0416, где указывается несколько лимитов для компенсации, то на самом деле создается несколько записей в PTQUODED, по одной на каждый лимит, а экранная логика 0416 собирает по PTQUODED внешний вид инфотипа.

Таким образом система всегда знает кто и каким образом исчерпал лимит (стащил орешки). Именно с помощью PTQUODED система в приказе на отпуск в российской локализации определяет за какой период был этот отпуск.

Еще интересный момент. В 2001, 2006, 0416 инфотипах есть отдельное поле для логической системы. То есть система учитывает в какой системе было внесено отсутствие, лимит или 416. При этом у SAP нет стандартных механизмов для удаленной работы с лимитами или 416 инфотипом. Казалось бы загадка, для чего нужна логическая система? Ответ простой – CATS. Это единственный инструмент, который как и организацинонный мендежмент относится к Cross Application Components – универсальный инструмент для всех модулей системы. CATS может учитывать время из разных систем, а так как в CATS есть отсутствия и присутствия, то они могут сливаться в HR из разных систем через стандартные BAPI интерфейсы. Здесь-то и нужна логическая система, чтобы понять откуда прилетело отсутствие или присутствие.

В системе нет ни одного IDOC для передачи 2001, 2006 или 0416 инфотипов. Это также связано с тем, что уникальные номера генерируются в каждой системе в рамках своих диапазонов, а значит есть риск пересечения, когда данные попадут в одну систему. Видимо поэтому вендор и отказался от реализации интеграции по этим инфотипам. Если вы хотите сделать реализацию передачи этих инфотипов, то нужно помнить о нумерации и PTQUODED. При приеме такого самодельного IDOC с одним из вышеуказанных инфотипов нужно самостоятельно отслеживать и формировать уникальные номера, учитывать их в PTQUODED, пересчитывать лимиты. Вы же помните, что IDOC ложится в базу “как есть”, без логики инфотипа?

Как сделать свой IDOC можно здесь Передача российских инфотипов по ALE

Подписывайтесь, распространяйте материал – скоро я расскажу про специфику передачи отдельных инфотипов по ALE. Об этом никто кроме отладчика вам не расскажет. Разве что заядлые интеграторы, но таких я всего пару-тройку человек в стране знаю.


Основы работы с большими данными в SAP

Рано или поздно каждый консультант сталкивается с задачей быстрой и эффективной обработки большого массива данных из системы. Предметная область тут неважна. Многие компании практически не используют современные аналитические решения на благо повседневной трудовой деятельности. Причин тому много, но сегодня речь о другом. Наиболее типичные ситуации, это сверка данных при миграции данных или выгрузка большого объема данных из системы с целью последующей обработки в MS Excel. В 99% случаев будут именно такие задачи.

Вроде бы что сложного в выгрузке данных из отчета в системе? Совершенно ничего, когда мы говорим о паре десятков или сотен строк. Если речь идет о десятках тысяч строк или сотен тысяч строк, то мировоззрение начинает меняться. Попробуйте в ваших системах запустить оперативный запрос с даты старта SAP по паре инфотипов. А потом все это выгрузите и нарисуйте несколько формул рядом.

Исходя из моего опыта, могу дать некоторые базовые советы.

Совет 1. Выгрузка в MS Excel может быть осуществлена множеством способов. Даже нажимая одну кнопочку выгрузки разные системы обрабатывают событие по-разному. В ALV отчетах есть две возможность выгрузить данные в файл.

Левая кнопочка  зависимости от версии системы либо откроет MS Excel Inplace (то есть внутри системы откроется XLS файл). Очень неудобно, мелко, но достаточно для просмотра пары записей. Файл можно сохранить. В другом случае система спросит, в каком формате желаете выгрузить данные.

По умолчанию у всех стоит первый вариант – MHTML. И не дай вам чебурашке выгружать тысячи записей в этом формате. Система внутри готовит данные, потом запускает XLST трансформацию и вываливает все это в страшненький полу-HTML код. Это занимает очень много памяти на сервере и часто приводит к дампам. При открытии такого файла Excel наоборот производит конвертацию из XML файла в свой XLS формат, что, по сути, дублирует работу. Если выгружать сразу в Excel XLS/XLSX формате, то лишние действия не производятся, файл выгружается существенно быстрее.

Читать далее