При работе в программах «1С:Зарплата и управление персоналом» (ЗУП) и «1С:Комплексная автоматизация» (КА) многие пользователи и системные администраторы столкнулись с неприятной ситуацией. При попытке заполнить или обновить графики работы сотрудников за май и июнь 2020 года система неожиданно помечала практически все рабочие дни этих месяцев как «Оплачиваемые нерабочие дни» (с кодом «ОН» в табеле учета рабочего времени). Это происходило даже в тех организациях, которые продолжали работать в обычном режиме, а в настройках графика стоял флаг Учитывать нерабочие дни.
В этой статье мы подробно разберем техническую природу этой программной ошибки, проанализируем её последствия для расчета среднего заработка, выясним различия в логике отражения памятных дат лета 2020 года и рассмотрим все возможные способы исправления ситуации: от временных ручных манипуляций в регистрах до глобального обновления программных продуктов 1С.
Для того чтобы понять, почему программа повела себя таким образом, заглянем в конфигуратор и исследуем алгоритм, который отвечает за определение периодов нерабочего времени. Проблема кроется в процедуре и функции под названием ПериодОплатыНерабочихДней2020(), которая расположена в общем модуле системы.
Изначально разработчики фирмы 1С проектировали данный механизм под непрерывный период нерабочих дней, объявленный весной 2020 года в связи с неблагоприятной эпидемиологической обстановкой. Функция была написана по упрощенной схеме и возвращала объект типа СтандартныйПериод. Особенность этого типа данных в платформе 1С заключается в том, что он может содержать в себе строго одну дату начала и одну дату окончания. Он физически не умеет хранить «рваные» интервалы или списки разрозненных периодов с рабочими днями между ними.
Проанализируем упрощенный алгоритм работы старой версии этой функции:
Функция ПериодОплатыНерабочихДней2020() Экспорт
// Выбираются все записи из регистра сведений ПериодыНерабочихДнейКалендаря
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПериодыНерабочихДней.ДатаНачала КАК ДатаНачала,
| ПериодыНерабочихДней.ДатаОкончания КАК ДатаОкончания
|ИЗ
| РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДней";
Выборка = Запрос.Выполнить().Выбрать();
МинимальнаяДата = '39991231';
МаксимальнаяДата = '00010101';
Пока Выборка.Следующий() Цикл
Если Выборка.ДатаНачала < МинимальнаяДата Тогда
МинимальнаяДата = Выборка.ДатаНачала;
КонецЕсли;
Если Выборка.ДатаОкончания > МаксимальнаяДата Тогда
МаксимальнаяДата = Выборка.ДатаОкончания;
КонецЕсли;
КонецЦикла;
// Возвращается единый объединенный период
Возврат Новый СтандартныйPeriod(МинимальнаяДата, МаксимальнаяДата);
КонецФункции
До определенного момента в регистре сведений ПериодыНерабочихДнейКалендаря хранились только весенние периоды, которые шли практически непрерывно друг за другом (с конца марта до середины мая). Программа успешно справлялась с задачей. Однако позже, в соответствии с Указом Президента РФ от 29.05.2020 № 345, день проведения Парада Победы — 24 июня 2020 года — был объявлен нерабочим днем с сохранением заработной платы.
Фирма 1С выпустила обновление классификаторов, и в регистр ПериодыНерабочихДнейКалендаря добавилась новая изолированная строка с периодом действия с 24.06.2020 по 24.06.2020. Из-за этого простейший алгоритм поиска минимума и максимума в функции ПериодОплатыНерабочихДней2020() дал критический сбой. Функция взяла самую раннюю дату начала из регистра (30.03.2020) и самую позднюю дату окончания (24.06.2020), объединив их в один колоссальный непрерывный интервал нерабочих дней.
В результате программа «потеряла» все законные рабочие дни во второй половине мая и в июне. При автоматическом заполнении или обновлении графиков система видела, что любой день внутри этого огромного интервала якобы относится к оплачиваемым нерабочим дням, и без разбора присваивала рабочим сменам вид времени ОН.
Данная проблема выходит далеко за рамки простого эстетического дефекта в графиках или табелях учета рабочего времени. Неверное заполнение периодов влечет за собой серьезные законодательные риски при расчете выплат сотрудникам:
ОН), а также начисленные за них суммы, подлежат обязательному исключению из расчета среднего заработка для отпусков, командировок и других аналогичных случаев.ОН, она полностью выбрасывает эти месяцы из расчетного периода для среднего заработка будущих периодов. Это приводит к грубейшим искажениям сумм отпускных и компенсаций, нарушая права работников или приводя к нецелевому расходу средств работодателя.Именно поэтому оставлять эту проблему нерешенной или просто «подправлять циферки в табеле вручную» категорически не рекомендуется. Требуется исправить сам механизм определения периодов и перезаполнить графики работы.
При настройке производственных календарей и графиков работы важно понимать, что разработчики 1С заложили принципиально разный подход к учету двух главных летних нерабочих дней 2020 года:
ОН (Оплачиваемые нерабочие дни) с сохранением запланированных рабочих часов (например, 8 часов).В (Выходные дни), а не кодом нерабочих дней ОН.Разница в трактовке этих дней требует аккуратности при их автоматическом или ручном вводе в систему.
Рассмотрим несколько вариантов решения проблемы в зависимости от возможности оперативного обновления вашей информационной базы.
Если вы не имеете возможности прямо сейчас обновить конфигурацию или установить официальные патчи, а рассчитать зарплату и заполнить графики нужно срочно, можно прибегнуть к ручной корректировке регистра сведений. Разберем по шагам, как это сделать:
Периоды нерабочих дней календаря.ОН исчез с рабочих дат.Оплачиваемые нерабочие дни.Для пользователей программных продуктов 1С, находящихся на официальной поддержке и имеющих доступ к порталу ИТС, разработчики выпустили оперативные патчи (исправления). Они позволяют устранить проблему автоматически без изменения конфигурации базы данных:
ПериодОплатыНерабочихДней2020() будет скорректирован патчем динамически.Наиболее надежным и правильным решением является обновление конфигурации до актуальных версий (для ЗУП — это релизы ветки 3.1.14.60/61, 3.1.10.470 и выше; для КА — релизы 2.4.12.75 и старше). В этих обновлениях разработчики полностью переработали архитектуру учета нерабочих дней:
Почасовая оплата или в общих настройках расчета вместо одного глобального флага теперь присутствует табличная часть со списком конкретных периодов нерабочих дней 2020 года.ОН с сохранением нормы времени и запланированных часов.Проанализируем еще одну тонкость, с которой сталкиваются организации, имеющие филиалы в субъектах РФ с собственными праздничными днями (Татарстан, Башкортостан, Крым и др.).
Для таких регионов в программе создаются отдельные региональные производственные календари, являющиеся подчиненными по отношению к общегосударственному календарю РФ. При автоматическом обновлении классификаторов ИТС иногда может происходить сбой: общегосударственный календарь обновляется корректно, а в региональных календарях сведения о нерабочем дне 24 июня не появляются автоматически.
Если вы столкнулись с такой ситуацией, выполните следующие действия:
При заполнении учитывать нерабочие дни, после чего перезаполните графики.Выполнив указанные шаги, вы полностью восстановите корректный кадровый учет и расчет заработной платы в вашей системе, исключите риски искажения среднего заработка при расчете отпускных и обеспечите полное соответствие ведения учета требованиям трудового законодательства.