При работе с механизмами расчета заработной платы в программе 1С:Зарплата и управление персоналом 2.5 (ЗУП 2.5) разработчики и расчетчики периодически сталкиваются с неочевидным поведением регистров расчета. Одна из таких сложных и «мистических» проблем — отсутствие записей по начисленному больничному листу в виртуальной таблице Фактический период действия (ФПД), несмотря на то, что в самом документе сторнирование оклада за прошлый период отражено и рассчитано корректно.
В этой статье мы подробно разберем физику работы платформенных механизмов вытеснения, выясним, почему возникает подобная коллизия, и как ее успешно разрешить на практическом примере.
Для начала проанализируем, как платформа «1С:Предприятие 8» формирует виртуальную таблицу Фактического периода действия. Этот механизм опирается на настройки вытеснения, заданные в Плане видов расчета (ПВР), и подчиняется жестким платформенным правилам.
Главное правило механизма вытеснения звучит так: записи с более поздним периодом регистрации ни при каких обстоятельствах не могут вытеснить записи с более ранним периодом регистрации напрямую. Платформа защищает прошлые закрытые периоды от непреднамеренного изменения. Если мы регистрируем больничный лист в январе (период регистрации), но его действие относится к декабрю (период действия), платформа видит, что декабрь уже «занят» начислением оклада (которое было зарегистрировано в декабре).
Чтобы «освободить» время в прошлом периоде для нового начисления, используется механизм сторнирования. Сторно-запись (запись с флагом Сторно = Истина) решает две задачи:
Рассмотрим ситуацию, с которой столкнулся пользователь. В январе регистрируется больничный лист за декабрь. В документе рассчитывается сам больничный и одновременно сторнируется оклад за декабрь. Но в виртуальной таблице ФПД за этот период видны только сторно-записи оклада, а сам больничный лист отсутствует.
Проанализируем структуру регистра расчета с помощью простого запроса:
ВЫБРАТЬ
Регистратор,
ВидРасчета,
ПериодДействияНачало,
ПериодДействияКонец,
ФактическийПериодДействияНачало,
ФактическийПериодДействияКонец
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия
ГДЕ
Сотрудник = &Сотрудник
При выполнении этого запроса мы увидим, что для записи больничного листа колонки фактического периода действия остаются пустыми. Это означает, что платформа по какой-то причине считает данный период времени заблокированным другим начислением, которое имеет более ранний период регистрации и не было сторнировано.
Выясним причину этой блокировки. Если оклад за декабрь был успешно сторнирован, но больничный все равно не получает свой ФПД, значит, в декабре действовало еще одно начисление, которое конкурирует за этот временной интервал.
В рассматриваемом примере таким начислением оказалась "Доплата за питание". Давайте разберем по шагам, почему она заблокировала расчет:
Использует период действия. Это необходимо, чтобы рассчитывать доплату пропорционально отработанным дням.Как только мы сторнируем "Доплату за питание" (или исключаем ее влияние), платформа тут же освобождает временной интервал, и ФПД больничного листа рассчитывается корректно.
Для устранения этой коллизии нам необходимо выполнить несколько последовательных действий:
Прежде всего, необходимо убедиться, что все вытесняемые виды расчета правильно указаны в настройках больничного листа. Выполним следующие шаги:
Основные начисления организаций.Оплата больничных листов.Прочее и проанализируем список вытесняющих видов расчета.Если автоматическое сторнирование в одном документе отрабатывает некорректно из-за сложной цепочки начислений, рекомендуется воспользоваться разделением операций:
Перерасчет зарплаты (или ручное стонирование), который отменит все начисления за спорный период (оклад, доплаты, надбавки).Начисление по больничному листу. В этом случае платформа увидит абсолютно «чистый» и освобожденный от прошлых начислений период действия, и ФПД сформируется без ошибок.Посмотрим на эту ситуацию шире и проанализируем, почему аналогичная проблема не возникает в современных версиях программы, например, в 1С:Зарплата и управление персоналом 3.1.
В версии 2.5 расчет времени и сумм жестко завязан на платформенные механизмы регистров расчета. Если разработчик или пользователь допустил малейшую ошибку в настройках связей вытеснения в ПВР, платформа бескомпромиссно заблокирует расчет ФПД.
В ЗУП 3.1 разработчики фирмы "1С" кардинально изменили архитектуру учета времени:
Данные о времени, хранящий информацию о днях и часах явок и отсутствий по приоритетам.Таким образом, понимание физики работы Фактического периода действия в 1С:ЗУП 2.5 позволяет быстро диагностировать подобные ошибки, находить "скрытые" начисления, блокирующие расчеты, и поддерживать корректность ведения учета в базах данных.