При обновлении конфигурации 1С:Зарплата и управление персоналом (редакция 3) пользователи и технические специалисты часто сталкиваются со специфической проблемой. В процессе обновления (особенно при переходе на промежуточные релизы веток 3.1.5, 3.1.8, 3.1.10 и выше) система выдает ошибку, ссылаясь на регистр сведений КадроваяИсторияСотрудников или связанные с ним интервальные регистры. При детальном анализе выясняется, что по проблемному сотруднику в регистре присутствуют две записи, причем одна из них датирована 31.12.1899 с видом события «Неподтвержденные данные», а вторая содержит корректные актуальные сведения.
В этой статье мы подробно проанализируем причины возникновения этой системной коллизии, разберем внутреннюю логику работы программы 1С:ЗУП 3 и рассмотрим пошаговые практические методы устранения данной ошибки.
Прежде чем приступать к исправлению, давайте разберем логику разработчиков фирмы 1С. Запись с датой 31.12.1899 и статусом кадрового события Неподтвержденные данные — это не случайный сбой СУБД и не признак повреждения базы данных. Это штатный технический механизм платформы.
Данная запись автоматически формируется специализированным документом «Начальная штатная расстановка». Этот документ используется при переносе кадровых и расчетных данных из старых версий программы (например, при переходе с 1С:ЗУП 2.5 на 1С:ЗУП 3.1). При проведении документа система делает сразу две записи в регистр сведений КадроваяИсторияСотрудников по каждому сотруднику:
Начальные данные.Неподтвержденные данные.Для чего это нужно? Данный "нулевой" срез необходим программе для корректного построения временных интервалов. Система должна знать состояние сотрудника (его ставку, подразделение, должность) до момента официального начала ведения учета в новой базе. Если в первый же месяц работы происходят кадровые изменения (переводы, увольнения), программе требуется отправная точка для сравнения и расчетов, роль которой и выполняет запись на 1899 год.
Проблема заявляет о себе в тот момент, когда запускаются обработчики обновления ИБ (информационной базы). В современных релизах ЗУП 3 существенно переработана логика работы со штатным расписанием и интервальными показателями. Для ускорения расчетов разработчики ввели новые регистры:
КадроваяИсторияСотрудниковИнтервальныйЗанятостьПозицийШтатногоРасписанияИнтервальныйПри обновлении конфигурации программа пытается автоматически пересчитать и заполнить эти интервальные таблицы на основе базовых кадровых регистров. Если в вашей базе включена опция «Ведется история изменений штатного расписания», то при переносе данных возникает конфликт. Две записи кадровой истории (техническая на 1899 год и реальная начальная) начинают одновременно претендовать на одну и ту же позицию (ставку) в штатном расписании. Происходит физическое задвоение записей. В результате обработчик обновления аварийно завершает работу, а пользователи при попытке провести новые кадровые документы получают блокирующие ошибки вида: «Сотрудника необходимо принять на работу ранее кадрового события "Неподтвержденные данные"».
Как показывает практика практикующих специалистов и опыт обсуждения данной проблемы на форумах, самым быстрым и эффективным решением является актуализация записей штатного расписания. Дело в том, что при обновлении структуры регистров записи "зависают" из-за рассинхронизации статусов занятости ставок.
Рассмотрим по шагам, как решить проблему через перепроведение:
УтверждениеШтатногоРасписания).Ctrl + A).После перепроведения документов штатного расписания у технических записей на 1899 год обновляется статус, что позволяет платформе успешно сопоставить их с реальными ставками и завершить реструктуризацию таблиц без ошибок.
Если перепроведение штатного расписания не исправило ситуацию по конкретному сотруднику, источником проблемы может выступать сам первичный документ переноса. В этом случае нам необходимо заставить систему перезаписать движения по регистру КадроваяИсторияСотрудников.
Для этого выполните следующие действия:
Для массового перепроведения документов НачальнаяШтатнаяРасстановка программисты могут воспользоваться простой обработкой со следующим кодом:
Выборка = Документы.НачальнаяШтатнаяРасстановка.Выбрать();
Пока Выборка.Следующий() Цикл
ДокументОбъект = Выборка.ПолучитьОбъект();
Если ДокументОбъект.Проведен Тогда
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Успешно перепроведен документ: " + Строка(ДокументОбъект));
Исключение
Сообщить("Ошибка проведения: " + Строка(ДокументОбъект) + ". Причина: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
В некоторых случаях обычное перепроведение существующего документа не помогает очистить "зависшие" в регистрах записи. Это происходит, если структура регистра сведений была повреждена при прерванном ранее обновлении.
Проанализируем этот сценарий по шагам:
Начальная штатная расстановка и скопируйте его содержимое во временный файл или просто сделайте его копию в базе (командой Скопировать).КадроваяИсторияСотрудников с отбором по проблемному сотруднику — записи на дату 31.12.1899 и реальную дату должны полностью исчезнуть.Когда период кадрового учета жестко закрыт, расчетная база сдана, а перепроводить документы прошлых периодов категорически запрещено аудиторами, исправление выполняют путем точечной корректировки записей интервальных регистров. Для этого можно воспользоваться обработкой для редактирования записей в регистре «Кадровая история сотрудников интервальный».
Для реализации этого метода программисту необходимо:
Кадровая история сотрудников интервальный и Занятость позиций штатного расписания интервальный.Чтобы избежать подобных проблем при последующих обновлениях баз 1С:ЗУП 3, придерживайтесь следующих правил технического сопровождения: