Как обновить данные в интервальных регистрах ЗУП 3.1, если в отчетах отображаются старые оклады?

Программист 1С v8.3 (Управляемые формы)
← На главную

При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 (особенно начиная с релизов ветки 3.1.6) пользователи часто сталкиваются с парадоксальной ситуацией: заработная плата сотруднику рассчитывается абсолютно верно, исходя из актуального оклада, однако в Расчетном листке, отчете Т-51 или Анализе зарплаты продолжают фигурировать старые данные. Разберем подробно, почему это происходит и как исправить эту проблему программными и пользовательскими методами.

Причина возникновения проблемы: механизм интервальных регистров

Для начала проанализируем внутреннюю архитектуру системы. Начиная с версии 3.1.6, разработчики 1С внедрили механизм так называемых интервальных регистров. К ним относятся такие объекты, как:

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

Проблема: При проведении документа (например, Кадровый перевод или Изменение оплаты труда) запись в основные регистры (ПлановыеНачисления) происходит корректно, а вот триггер, отвечающий за обновление связанного интервального регистра, иногда не срабатывает. В результате данные для расчета (которые берутся из основных регистров) актуальны, а данные для отчетов (из интервальных) — безнадежно устарели.

Метод 1. Ручное перепроведение (индивидуальное решение)

Как показывает практика и обсуждения на форумах, самым простым, хотя и трудозатратным способом является «передергивание» документа. Рассмотрим этот процесс пошагово:

  1. Найдем документ, который должен был изменить оклад (например, Кадровый перевод).
  2. Отменим проведение документа.
  3. Проведем документ заново.

Почему это помогает? При интерактивном проведении документа в модуле объекта срабатывают дополнительные процедуры, которые инициируют пересчет интервалов для конкретного сотрудника. Посмотрим на ситуацию, описанную пользователями: часто ошибка проявляется, если в одном документе Кадровый перевод одновременно меняется и оклад, и рабочее место (подразделение/позиция штатного расписания). В этом случае стандартный алгоритм обновления интервалов может «сбоить».

Метод 2. Массовое обновление интервальных данных

Если сотрудников сотни, перепроводить документы вручную невозможно. Проанализируем системные возможности для массового исправления. В конфигурации существует специальное регламентное задание «Обновление данных для подбора и формирования отчетов».

Если данные не актуализируются, выполним следующие действия:

  1. Перейдем в раздел Администрирование — Обслуживание — Регламентные операции.
  2. Найдем указанное задание и убедимся, что оно включено и выполняется без ошибок.
  3. Попробуем запустить его принудительно.

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

Метод 3. Программное решение (для разработчиков)

Выясним, как можно программно форсировать обновление данных, если типовые средства не помогают. Для этого в менеджере регистра ПлановыеНачисленияИнтервальный предусмотрены экспортные методы. Мы можем создать небольшую внешнюю обработку, которая обновит данные по списку сотрудников.

Рассмотрим пример кода:


// Пример программного обновления интервального регистра плановых начислений
СписокСотрудников = Новый Массив;
СписокСотрудников.Добавить(СсылкаНаНужногоСотрудника);

// Вызов метода обновления из модуля менеджера соответствующего регистра
РегистрыСведений.ПлановыеНачисленияИнтервальный.ОбновитьДанныеСотрудников(СписокСотрудников);

// Аналогично для ФОТ, так как оклад в расчетном листке часто тянется именно оттуда
РегистрыСведений.ПлановыйФОТИтоги.ОбновитьДанныеСотрудников(СписокСотрудников);

Этот код принудительно очистит существующие интервалы по указанным сотрудникам и сформирует их заново на основании записей в основных периодических регистрах сведений.

Особенности документа «Начальная штатная расстановка»

Проанализируем ситуацию, упомянутую в теме: переход на ЗУП 3.1 через ввод начальных данных. Документ Начальная штатная расстановка является специфическим «фундаментом» для системы. В ранних релизах 3.1.6 существовала ошибка: если после этого документа вводились изменения, интервальный механизм не всегда корректно «схлопывал» границы периодов, считая записи расстановки приоритетными и неизменными.

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

Связь с Фондом оплаты труда (ФОТ)

Нужно учитывать, что значение оклада в печатной форме Расчетного листка часто берется не напрямую из начислений, а из регистра ПлановыйФОТИтоги. Это сделано для того, чтобы показать «плановую» ставку сотрудника на конец месяца. Если в этом регистре «зависло» старое значение, никакие изменения в текущих расчетах не изменят цифру в шапке отчета.

Поэтому при решении проблемы всегда проверяйте оба интервальных регистра одновременно. Если вы видите, что начисление идет верно (например, 50 000 руб.), а в шапке листка стоит старый оклад (40 000 руб.), — это стопроцентный признак того, что интервальный регистр ПлановыйФОТИтоги не синхронизирован с первичными документами.

Итоги

Подводя итог, можно выделить следующую стратегию действий при обнаружении неверных окладов в отчетах ЗУП 3.1:

Помните, что интервальные регистры — это всего лишь «отражение» реальных данных. Их можно и нужно обновлять при возникновении расхождений между расчетом и отчетностью.

← На главную