Найти в Дзене
rustabapclub

Работа с производственным календарем (SCAL / OY05) (factory calendar), полезные ФМы и best-practise

В одной из предыдущих статей мы рассматривали как работать с датами и временем: прибавлять и отнимать количество дней/секунд, а также форматировать (статья1, статья2). Однако, зачастую приходится работать именно с датами производственного календаря, а не с простой последовательностью дат. Производственный календарь – это календарь с учетом рабочих и праздничных дней. Его цель – правильно спланировать производственные мощности, сориентироать клиента по срокам производства/доставки, корректно начислить зар.плату, отпуск и другие начисления. Список рабочих и нерабочих дней на 2025 год можно видеть на сайте, например, консультантПлюс: https://www.consultant.ru/law/ref/calendar/proizvodstvennye/2025/. Сам календарь утверждается Правительством РФ. Однако, это не значит, что все предприятия и/или их подразделения обязаны работать в соответствии с этим календарем. Существуют отрасли/производства, которые останавливаются очень редко, а постоянство работы обеспечивается сменами. В SAP ERP для в
Оглавление

В одной из предыдущих статей мы рассматривали как работать с датами и временем: прибавлять и отнимать количество дней/секунд, а также форматировать (статья1, статья2). Однако, зачастую приходится работать именно с датами производственного календаря, а не с простой последовательностью дат.

Производственный календарь – это календарь с учетом рабочих и праздничных дней. Его цель – правильно спланировать производственные мощности, сориентироать клиента по срокам производства/доставки, корректно начислить зар.плату, отпуск и другие начисления. Список рабочих и нерабочих дней на 2025 год можно видеть на сайте, например, консультантПлюс: https://www.consultant.ru/law/ref/calendar/proizvodstvennye/2025/. Сам календарь утверждается Правительством РФ.

Однако, это не значит, что все предприятия и/или их подразделения обязаны работать в соответствии с этим календарем. Существуют отрасли/производства, которые останавливаются очень редко, а постоянство работы обеспечивается сменами.

Ведение производственного календаря (мастер-данные)

В SAP ERP для ведения производственного календаря имеется транзакция SCAL (или OY05). В транзакции SCAL указываются: идентификатор производственного календаря, а также календарь с набором праздников (Holiday Calendar) и рабочие дни недели (Рис.1)

Рис. 1 Производственный календарь - Z9 (для целей демонстрации)
Рис. 1 Производственный календарь - Z9 (для целей демонстрации)

Внутри транзакции SCAL мы также обозначает праздничные дни и присваиваем их нужному Календарю праздничных дней.

Рис. 2 Меню для ведения праздничных дней
Рис. 2 Меню для ведения праздничных дней

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

Рис. 3 Присвоение праздничных дней календарю выходных дней
Рис. 3 Присвоение праздничных дней календарю выходных дней

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

Идентификатор производственного календаря присваивается через настройки к различным орг.единицам: Балансовой единице, Заводу, складу, пункту отгрузки. Поэтому правило: не стоит «хардкодить» ID-производственного календаря, а лучше брать его идентификатор из настроек. Обращу внимание, что не все подразделения компании могут работать по единому производственному календарю. Это может быть в силу специфики отрасли или в силу региональных особенностей.

Ближайший рабочий день – используем ФМ DATE_CONVERT_TO_FACTORYDATE

Чтобы узнать ближайший рабочий день – мы можем использовать ФМ DATE_CONVERT_TO_FACTORYDATE с параметрами

Параметры ФМа
Параметры ФМа
Рис. 4 Пример работы ФМа DATE_CONVERT_TO_FACTORYDATE
Рис. 4 Пример работы ФМа DATE_CONVERT_TO_FACTORYDATE

В результате мы видим, что по производственному календарю Z9 – 5января является выходным днем, а ближайший рабочий день – 9 января 2025.

Чтобы прибавить/отнять N-производственных дней к дате: ФМ BKK_ADD_WORKINGDAY

Если Вы получаете заказ 20 января, а на его исполнение Вам нужно 10 рабочих дней, то готов к отгрузке он будет… 3 февраля.

Рис. 5 Расчёт производственной даты "через 10 дней"
Рис. 5 Расчёт производственной даты "через 10 дней"

Для отнимания даты – использовать отрицательное количество в параметре I_DAYS.

Рис. 6 Вычисление предыдущей производственной даты
Рис. 6 Вычисление предыдущей производственной даты

Обратим внимание на алгоритм расчета (еще вернемся к этой теме): мы проверяем каждый день на пути к полному сложению (вычитанию) дней. Для небольших периодов (не более 100 дней) – это не так принципиально (а именно таких расчётов 99%). Как думаете можно ли улучшить этот порядок действий? 😊 и почему используется (использовался) именно этот подход?

Чтобы узнать день недели (а не пятница ли сегодня?): ФМом несколько

Для этой цели есть несколько ФМов.

ФМ DAY_IN_WEEK возвращает номер дня в недели. 9 января 2025 – это четверг и ФМ возвращает 4.

Рис. 7 Узнаем день недели по дате с помощью ФМа DAY_IN_WEEK
Рис. 7 Узнаем день недели по дате с помощью ФМа DAY_IN_WEEK

Текст с днем недели можно получить с помощью ФМа BKK_GET_DAY_OF_WEEK.

Рис. 8 Текст с днем недели (на языке входа в систему)
Рис. 8 Текст с днем недели (на языке входа в систему)

А можно сразу и то и другое с помощью ФМа ISH_GET_DAY_OF_WEEK.

Рис. 9 Получаем параметры дня недели с помощью ФМа ISH_GET_DAY_OF_WEEK
Рис. 9 Получаем параметры дня недели с помощью ФМа ISH_GET_DAY_OF_WEEK

А как Вы работаете с производственным календарём? Какие функции Вам важны?

Best-practise

Хотелось бы обозначить несколько best-practise при работе с производственным календарем как таковым.

0. Распечатайте этот календарь и имейте его под рукой

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

2. Уточните отпуск у ключевых пользователей / руководителя / коллег и также обозначьте их на календаре

3. Зарезервируйте 2 "случайных" отсутствия на ближайший квартал при планировании

4. Обозначьте возможные командировки

5. Обозначьте обучение (внутренее, внешнее, SAPLAND-курсы).

6. Каждый спринт или месяц (как удобнее Вам) - отмечайте безопасные/опасные дни для переносов (в том числе с учетом закрытия).

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