Как исправить ошибку «Значение поля "Сотрудник" не может быть пустым!» при переходе с БП 2.0 на БП 3.0?

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

Переход с редакции 2.0 на 3.0 в «1С:Бухгалтерия предприятия» — это не простое обновление, а полноценная конвертация данных. В процессе этого перехода архитектура базы данных претерпевает значительные изменения: многие данные из документов переносятся в новые регистры сведений, которые в старой версии отсутствовали. Одной из наиболее частых проблем, с которой сталкиваются технические специалисты, является ошибка записи в регистр Виды занятости сотрудников из-за пустого значения реквизита Сотрудник. Разберем подробно, почему это происходит и как решить данную проблему несколькими способами.

Анализ причины возникновения ошибки

Проанализируем ситуацию: ошибка обычно возникает на этапе выполнения обработок обновления (примерно на 50–60% процесса), когда система начинает формировать кадровые данные для новой редакции. В редакции 3.0 учет сотрудников и их видов занятости (основное место работы, внешнее совместительство и т.д.) стал более строгим. Если в исходной базе 2.0 есть документы Прием на работу, которые были созданы ошибочно, не заполнены до конца или не проведены, конвертер данных все равно пытается обработать их движения.

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

Способ 1: Очистка данных в исходной базе 2.0 (Рекомендуемый)

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

  1. Поиск пустых документов: В базе редакции 2.0 откройте список документов Прием на работу. Настройте список так, чтобы видеть колонку Сотрудник. Проверьте, нет ли документов с пустым сотрудником. Часто это бывают черновики или помеченные на удаление объекты.
  2. Проверка на «битые» ссылки: Иногда поле визуально заполнено, но содержит объект <Объект не найден>. Это происходит, если карточка сотрудника была физически удалена из справочника, а ссылка в документе осталась.
  3. Удаление проблемных объектов: Если вы нашли документы Прием на работу без указания сотрудника, их необходимо либо корректно заполнить, либо полностью удалить (сначала пометить на удаление, а затем использовать стандартную процедуру «Удаление помеченных объектов»).
  4. Анализ регистра «Работники организаций»: В версии 2.0 именно этот регистр является источником данных. Рекомендуется воспользоваться консолью запросов и проверить таблицу РегистрСведений.РаботникиОрганизаций на наличие записей с пустым измерением Сотрудник.

Если после удаления таких записей и документов запустить обновление снова, ошибка, как правило, исчезает.

Способ 2: Программный обход в общем модуле (Для опытных специалистов)

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

Проанализируем структуру общего модуля ЗарплатаИКадрыОбновлениеСПредыдущейРедакции. В нем нас интересует процедура КонвертироватьДвиженияПриемаНаРаботу. В этой процедуре вызывается вложенный метод, который и провоцирует ошибку.

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


Процедура КонвертироватьДвиженияПриемаНаРаботу(ДанныеВыгружаемогоДокумента, СоответствиеКонвертированныхОбъектов, НовыйРегистратор)
    КлючПорцииДанных = Новый Структура("Регистратор, Сотрудник", ДанныеВыгружаемогоДокумента.Ссылка, ДанныеВыгружаемогоДокумента.Сотрудник);
    
    КонвертироватьПорциюДанныхКадровойИстории(КлючПорцииДанных, СоответствиеКонвертированныхОбъектов, Ложь, НовыйРегистратор);
    
    // Блокируем вызов процедуры, которая пытается записать вид занятости для потенциально пустого сотрудника
    // КонверитроватьДанныеОВидеЗанятостиСотрудникаДокумента(ДанныеВыгружаемогоДокумента, СоответствиеКонвертированныхОбъектов, НовыйРегистратор);
    
    КонвертироватьПорциюДанныхПлановыхНачислений(КлючПорцииДанных, СоответствиеКонвертированныхОбъектов, Ложь, НовыйРегистратор);
КонецПроцедуры

После того как вы закомментируете вызов КонверитроватьДанныеОВидеЗанятостиСотрудникаДокумента, обновление должно пройти успешно до конца. Однако важно понимать: данные в регистре Виды занятости сотрудников по этим документам созданы не будут. Поэтому после успешного входа в базу 3.0 необходимо будет найти эти документы Прием на работу и перепровести их вручную, чтобы движения по регистрам сформировались корректно уже по правилам новой редакции.

Способ 3: Работа с техническими документами «Перенос данных»

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

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

Важные рекомендации по платформе и тестированию

Рассмотрим еще один важный технический аспект — версию платформы. При переходе с 2.0 на 3.0 (особенно на современные релизы 3.0.100 и выше) крайне важно использовать актуальную версию платформы. Рекомендуем использовать 8.3.21 или выше, так как старые версии (например, 8.3.16) могут вести себя нестабильно при конвертации больших объемов данных и закрываться без вывода сообщений об ошибках.

Перед любыми действиями обязательно выполните следующие шаги:

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

← На главную