Разблокировка табельного номера в динамическом мероприятии

«Сегодня ты мероприятие настроешь, а завтра на динамику глаз поднимешь. А послезавтра и вовсе захочешь 1С из САПа сделать», — навеяно сегодняшним совещанием.

Банальная ситуация с вредным кадровиком в главной роли. Нужно сформировать приказ на отпуск на будущий период авансом. Отпуск еще не заработан, отрицательное расходование разрешено. Вот только в приказе надо и периоды отразить будущие, правильные, красивые. Для этого нужно запустить оценку времени на будущий период перед проведением мероприятия, чтобы сформировался лимит на будущий период (если через оценку). А главный герой не хочет — не царское это дело.

Приходится искать пути. Например, в динамическом мероприятии можно спросить, по какое число изволите отпуск брать, запустить оценку времени, создать отсутствие и выпустить приказ. Но не умеет система так. Табельник-то блокирован нашим героем. SM12 по PREL тоже подтвердит. И приходится тут вспоминать старый трюк, который мне в свое время Серега Аксенов и Ромка Величко говорили — обмани врага — разблокируй табельный номер в динамическом мероприятии, сделай свое дело, заблокируй — враг не поймет. Так и приходится делать.

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


Трюк синхронизации делового партнера с персоналом

Нашел трюк! Если вы делаете мероприятие перевода, то в нем обычно ничего такого не меняется, что может вызвать синхронизацию данных «Делового партнера — Центрального лица — Табельник». В коде жестко проверяется весь 2, 6, 9 инфотип по ряду полей и статус работника. Следовательно, перевод не может вызвать синхронизацию. А нам надо!

Чтобы обмануть систему, сделал динамическое мероприятие, которое в ИТ0002 в поле Nickname записывает текущую дату. Это поле нигде в системе не используется, поэтому можно туда немного нагадить ради благой цели. И система слопала!

Вот такое мероприятие:

0001 06 401 P T001P-MOLGA=’10’
0001 06 410 I MOD,0002/D
0001 06 415 W P0002-RUFNM = SY-DATUM

САП как UNIX — система костылей и подпорок 🙂


Динамические мероприятия

Итак, есть боевая задача. Нужно сделать динамическое мероприятие для отслеживания изменения грейда сотрудника при переводе. Если грейд поменялся, то для назначения новой программы ДМС (Добровольное Медицинское Страхование) нужно создать управляющую запись в определенном инфотипе.

Читать далее


Потеря MASSN, MASSG при мероприятии

Ситуация. Мероприятие прием на работу. Заполняем все правильно и красиво. Доходим до ИТ0298 и причина мероприятия оказывается пустой, хотя в 0000 мы ее указали. Оказывается проблема в том, что ряд инфо-типов очищает внутренние структуры, которые как раз и хранят наши код и причину мероприятия. Например, ИТ2006. Если вы его поставите в инфо-группе до 0298, то в ИТ0298 поле причины мероприятия будет пустым. Если ИТ2006 поставить после 0298, то все будет отлично.

Проблема в том, что данные по отпуску должны выводиться в приказ о приеме, поэтому 2006 должен быть раньше 0298. Чтобы решить проблему нужно после ИТ0000 где-то сохранить эти значения. Например, в динамическом мероприятии, а затем восстановить перед ИТ0298. Сделать это можно через собственную процедуру, которая будет вызываться и сохранять в памяти значения. Либо как-то еще — на ваш выбор.

Решить можно вот так. Прописываем в динамических мероприятиях для ИТ0000.

0000 04 390 *— FIX MASSG LOSING FOR 0298 —
0000 04 391 P T001P-MOLGA=’33’
0000 04 392 F EXPORT_MASSN_MASSG(MP029800)

Обратная подпрограмма для чтения в ИТ0298 тоже есть, вызывается при заполнении структуры, т.е. больше ничего делать не надо.