Рассмотрим довольно распространенную и неприятную ситуацию, с которой сталкиваются пользователи программы 1С:Зарплата и управление персоналом 3.1. При формировании типовых кадровых отчетов, таких как «Анализ штатного расписания», «Штатные сотрудники» или отчеты по личным данным, в строках начинают задваиваться сотрудники и занимаемые ими ставки. Разберем по шагам, откуда берется эта проблема, проанализируем причины ее возникновения и рассмотрим несколько действенных способов исправления испорченных данных.
Проанализируем ситуацию на конкретном примере. Предположим, мы берем сотрудника и проводим на него документ отсутствия (например, отпуск или больничный), а затем по какой-то причине сразу же отменяем проведение этого документа. В результате в системе происходит сбой алгоритмов записи: в регистре сведений СостоянияСотрудников формируются две одинаковые записи по этому сотруднику с состоянием «Работа» и открытым периодом «До».
Выясним дополнительную закономерность: чаще всего массовые дубли со статусом «Работа» формируются в том случае, если кадровые документы приходятся на переходный период между годами (например, начало отсутствия в декабре одного года, а окончание — в январе следующего). Чаще всего фантомные записи зависают на дату 1 января (например, на 01.01.2021), но иногда встречаются и на другие даты.
Поскольку кадровые отчеты при построении обращаются к данным этого регистра сведений, наличие двух действующих записей о состоянии «Работа» на один и тот же период приводит к тому, что в отчете сотрудник выводится дважды.
Разработчики фирмы 1С признали данное поведение ошибочным (зарегистрирована ошибка под кодом 000103489). Начиная с релиза 3.1.14.394, ошибка была исправлена. В частности, программисты 1С подправили процедуру ОбновитьСостоянияСотрудников() общего модуля СостоянияСотрудников.
Однако посмотрим на ситуацию после обновления: вы успешно обновили базу, все регламентные задания отработали штатно, но задвоения в отчетах никуда не исчезли! Почему так происходит? Дело в том, что установка нового релиза устраняет только причину появления новых дублей. Обновление конфигурации не производит автоматическую реструктуризацию или очистку уже испорченных исторических данных. Если в регистре уже зависли две записи за прошлые периоды, они там и останутся. Вычищать регистр необходимо самостоятельно постфактум. Рассмотрим подробнее, как именно это можно сделать.
Для исправления исторических данных разработчики 1С выпустили специальную внешнюю обработку. Обычно она распространяется под названием «Обновить состояния сотрудников».
Данная обработка автоматически анализирует записи регистра сведений СостоянияСотрудников, сопоставляет их с первичными документами и регистром ДанныеСостоянийСотрудников, находит некорректные задвоенные записи и аккуратно удаляет их из базы. Это самый безопасный и рекомендуемый способ, если вы имеете доступ к партнерским материалам 1С или линии консультаций, где можно запросить этот файл.
Если готовой обработки под рукой нет, очистку можно провести вручную или написать небольшой скрипт. Разберем логику действий:
СостоянияСотрудников через функцию "Функции для технического специалиста".ДанныеСостоянийСотрудников — именно он является основанием, по которому строятся итоговые состояния.СостоянияСотрудников с помощью стандартных команд удаления или с использованием универсальной обработки изменения данных. Сразу после удаления фантомной записи отчеты начнут формироваться корректно.Важно: Будьте осторожны при ручном удалении записей. Если сотр был уволен в течение прошлого года, а с 1 января ему ошибочно "воткнуло" состояние «Работа», эту запись также необходимо удалить, иначе уволенный человек будет числиться работающим.
Рассмотрим очень элегантный и рабочий способ массово очистить регистр от дублей без использования внешних обработок, прямого редактирования таблиц и написания кода. Этот метод использует сами механизмы 1С для пересчета регистра. Разберем по шагам:
Что при этом происходит "под капотом"? В момент проведения документа типовые алгоритмы 1С принудительно пересчитывают записи в проблемном регистре СостоянияСотрудников на указанную дату для всех выбранных людей. При отмене проведения алгоритм снова пересчитывает данные, но уже по исправленным правилам обновленного релиза. В результате этого действия лишние строки состояния «Работа» исчезают автоматически, структура данных восстанавливается, а кадровые отчеты приходят в норму.