Как исправить ошибку в регистре «Кадровая история сотрудников» с технической датой 31.12.1899 при обновлении 1С:ЗУП 3

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

При обновлении конфигурации 1С:Зарплата и управление персоналом (редакция 3) пользователи и технические специалисты часто сталкиваются со специфической проблемой. В процессе обновления (особенно при переходе на промежуточные релизы веток 3.1.5, 3.1.8, 3.1.10 и выше) система выдает ошибку, ссылаясь на регистр сведений КадроваяИсторияСотрудников или связанные с ним интервальные регистры. При детальном анализе выясняется, что по проблемному сотруднику в регистре присутствуют две записи, причем одна из них датирована 31.12.1899 с видом события «Неподтвержденные данные», а вторая содержит корректные актуальные сведения.

В этой статье мы подробно проанализируем причины возникновения этой системной коллизии, разберем внутреннюю логику работы программы 1С:ЗУП 3 и рассмотрим пошаговые практические методы устранения данной ошибки.

Выясняем причину: откуда берется дата 31.12.1899 и «Неподтвержденные данные»

Прежде чем приступать к исправлению, давайте разберем логику разработчиков фирмы 1С. Запись с датой 31.12.1899 и статусом кадрового события Неподтвержденные данные — это не случайный сбой СУБД и не признак повреждения базы данных. Это штатный технический механизм платформы.

Данная запись автоматически формируется специализированным документом «Начальная штатная расстановка». Этот документ используется при переносе кадровых и расчетных данных из старых версий программы (например, при переходе с 1С:ЗУП 2.5 на 1С:ЗУП 3.1). При проведении документа система делает сразу две записи в регистр сведений КадроваяИсторияСотрудников по каждому сотруднику:

  1. Запись на реальную дату начала эксплуатации базы: например, на 01.01.2023. Ей присваивается вид события Начальные данные.
  2. Запись на минимальную дату в системе (31.12.1899): ей присваивается статус кадрового события Неподтвержденные данные.

Для чего это нужно? Данный "нулевой" срез необходим программе для корректного построения временных интервалов. Система должна знать состояние сотрудника (его ставку, подразделение, должность) до момента официального начала ведения учета в новой базе. Если в первый же месяц работы происходят кадровые изменения (переводы, увольнения), программе требуется отправная точка для сравнения и расчетов, роль которой и выполняет запись на 1899 год.

Почему возникает конфликт при обновлении конфигурации

Проблема заявляет о себе в тот момент, когда запускаются обработчики обновления ИБ (информационной базы). В современных релизах ЗУП 3 существенно переработана логика работы со штатным расписанием и интервальными показателями. Для ускорения расчетов разработчики ввели новые регистры:

При обновлении конфигурации программа пытается автоматически пересчитать и заполнить эти интервальные таблицы на основе базовых кадровых регистров. Если в вашей базе включена опция «Ведется история изменений штатного расписания», то при переносе данных возникает конфликт. Две записи кадровой истории (техническая на 1899 год и реальная начальная) начинают одновременно претендовать на одну и ту же позицию (ставку) в штатном расписании. Происходит физическое задвоение записей. В результате обработчик обновления аварийно завершает работу, а пользователи при попытке провести новые кадровые документы получают блокирующие ошибки вида: «Сотрудника необходимо принять на работу ранее кадрового события "Неподтвержденные данные"».


Способ 1. Перепроведение документов штатного расписания (Основное решение)

Как показывает практика практикующих специалистов и опыт обсуждения данной проблемы на форумах, самым быстрым и эффективным решением является актуализация записей штатного расписания. Дело в том, что при обновлении структуры регистров записи "зависают" из-за рассинхронизации статусов занятости ставок.

Рассмотрим по шагам, как решить проблему через перепроведение:

  1. Перейдите в раздел Кадры и откройте журнал документов Изменения штатного расписания (или документы УтверждениеШтатногоРасписания).
  2. Выделите все документы в списке (используйте комбинацию клавиш Ctrl + A).
  3. Нажмите правой кнопкой мыши по выделенным строкам и выберите команду Провести.
  4. Если база содержит большой объем кадровой информации, дождитесь окончания процесса перепроведения. Система пересчитает занятость позиций и автоматически скорректирует интервальные регистры.
  5. Запустите процедуру обновления данных (через форму Поддержка и обслуживание — Обновление программы — Результаты обновления) повторно.

После перепроведения документов штатного расписания у технических записей на 1899 год обновляется статус, что позволяет платформе успешно сопоставить их с реальными ставками и завершить реструктуризацию таблиц без ошибок.

Способ 2. Перепроведение документов «Начальная штатная расстановка»

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

Для этого выполните следующие действия:

  1. Найдите документ Начальная штатная расстановка, в котором числится проблемный сотрудник (его можно найти через меню Администрирование — Переносы данных или через Все функции/Функции для технического специалиста — Документы — Начальная штатная расстановка).
  2. Отмените проведение этого документа. Внимание! Убедитесь, что период не закрыт для редактирования, либо временно откройте период для исправления.
  3. Проведите документ заново. При этом программа очистит старые некорректные записи в подчиненных регистрах и сформирует новые, выровняв временные метки документов с точностью до секунды.

Для массового перепроведения документов НачальнаяШтатнаяРасстановка программисты могут воспользоваться простой обработкой со следующим кодом:


Выборка = Документы.НачальнаяШтатнаяРасстановка.Выбрать();
Пока Выборка.Следующий() Цикл
    ДокументОбъект = Выборка.ПолучитьОбъект();
    Если ДокументОбъект.Проведен Тогда
        Попытка
            ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
            Сообщить("Успешно перепроведен документ: " + Строка(ДокументОбъект));
        Исключение
            Сообщить("Ошибка проведения: " + Строка(ДокументОбъект) + ". Причина: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
КонецЦикла;

Способ 3. Пересоздание документа переноса (для сложных случаев)

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

Проанализируем этот сценарий по шагам:

  1. Откройте проблемный документ Начальная штатная расстановка и скопируйте его содержимое во временный файл или просто сделайте его копию в базе (командой Скопировать).
  2. Оригинальный документ пометьте на удаление.
  3. Проверьте регистр КадроваяИсторияСотрудников с отбором по проблемному сотруднику — записи на дату 31.12.1899 и реальную дату должны полностью исчезнуть.
  4. В новом (скопированном) документе проверьте корректность заполнения всех реквизитов (подразделение, должность, ставка, плановые начисления) и проведите его.
  5. Убедитесь, что в регистре появились ровно две корректные записи, которые больше не конфликтуют друг с другом.

Способ 4. Корректировка регистров вручную (для разработчиков)

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

Для реализации этого метода программисту необходимо:

  1. Создать документ Перенос данных (раздел Администрирование — Переносы данных).
  2. Настроить состав регистров, добавив в него регистры Кадровая история сотрудников интервальный и Занятость позиций штатного расписания интервальный.
  3. Вручную или программно с помощью внешней обработки заполнить движения по проблемному физическому лицу, компенсируя или удаляя некорректную "лишнюю" строку на 31.12.1899.

Рекомендации по профилактике подобных ошибок

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

← На главную