Переход с редакции 2.0 на 3.0 в «1С:Бухгалтерия предприятия» — это не простое обновление, а полноценная конвертация данных. В процессе этого перехода архитектура базы данных претерпевает значительные изменения: многие данные из документов переносятся в новые регистры сведений, которые в старой версии отсутствовали. Одной из наиболее частых проблем, с которой сталкиваются технические специалисты, является ошибка записи в регистр Виды занятости сотрудников из-за пустого значения реквизита Сотрудник. Разберем подробно, почему это происходит и как решить данную проблему несколькими способами.
Проанализируем ситуацию: ошибка обычно возникает на этапе выполнения обработок обновления (примерно на 50–60% процесса), когда система начинает формировать кадровые данные для новой редакции. В редакции 3.0 учет сотрудников и их видов занятости (основное место работы, внешнее совместительство и т.д.) стал более строгим. Если в исходной базе 2.0 есть документы Прием на работу, которые были созданы ошибочно, не заполнены до конца или не проведены, конвертер данных все равно пытается обработать их движения.
Выясним причину технически: при обновлении вызывается процедура конвертации кадровой истории. Она считывает данные из документов 2.0 и пытается записать их в регистр сведений Виды занятости сотрудников в 3.0. Поскольку в новой версии поле Сотрудник является обязательным и не может быть пустым, платформа блокирует запись и прерывает весь процесс обновления.
Самый правильный и «чистый» метод — это устранение первопричины в исходной базе. Разберем по шагам, что необходимо сделать перед запуском обновления:
Прием на работу. Настройте список так, чтобы видеть колонку Сотрудник. Проверьте, нет ли документов с пустым сотрудником. Часто это бывают черновики или помеченные на удаление объекты.<Объект не найден>. Это происходит, если карточка сотрудника была физически удалена из справочника, а ссылка в документе осталась.Прием на работу без указания сотрудника, их необходимо либо корректно заполнить, либо полностью удалить (сначала пометить на удаление, а затем использовать стандартную процедуру «Удаление помеченных объектов»).РегистрСведений.РаботникиОрганизаций на наличие записей с пустым измерением Сотрудник.Если после удаления таких записей и документов запустить обновление снова, ошибка, как правило, исчезает.
Если база огромная, и найти проблемную запись вручную не удается, или если ошибка повторяется даже после чистки, можно внести временные изменения в программный код конвертера. Рассмотрим, как это реализовать. Нам необходимо найти процедуру, отвечающую за миграцию данных о занятости, и добавить в нее проверку на заполненность.
Проанализируем структуру общего модуля ЗарплатаИКадрыОбновлениеСПредыдущейРедакции. В нем нас интересует процедура КонвертироватьДвиженияПриемаНаРаботу. В этой процедуре вызывается вложенный метод, который и провоцирует ошибку.
Рассмотрим пример модификации кода:
Процедура КонвертироватьДвиженияПриемаНаРаботу(ДанныеВыгружаемогоДокумента, СоответствиеКонвертированныхОбъектов, НовыйРегистратор)
КлючПорцииДанных = Новый Структура("Регистратор, Сотрудник", ДанныеВыгружаемогоДокумента.Ссылка, ДанныеВыгружаемогоДокумента.Сотрудник);
КонвертироватьПорциюДанныхКадровойИстории(КлючПорцииДанных, СоответствиеКонвертированныхОбъектов, Ложь, НовыйРегистратор);
// Блокируем вызов процедуры, которая пытается записать вид занятости для потенциально пустого сотрудника
// КонверитроватьДанныеОВидеЗанятостиСотрудникаДокумента(ДанныеВыгружаемогоДокумента, СоответствиеКонвертированныхОбъектов, НовыйРегистратор);
КонвертироватьПорциюДанныхПлановыхНачислений(КлючПорцииДанных, СоответствиеКонвертированныхОбъектов, Ложь, НовыйРегистратор);
КонецПроцедуры
После того как вы закомментируете вызов КонверитроватьДанныеОВидеЗанятостиСотрудникаДокумента, обновление должно пройти успешно до конца. Однако важно понимать: данные в регистре Виды занятости сотрудников по этим документам созданы не будут. Поэтому после успешного входа в базу 3.0 необходимо будет найти эти документы Прием на работу и перепровести их вручную, чтобы движения по регистрам сформировались корректно уже по правилам новой редакции.
В процессе перехода система создает специальные документы Перенос данных (иногда их называют ДП — документ переноса). Эти документы имитируют движения из старой базы. Если обновление «вылетает» с ошибкой, но при этом база открывается в режиме «1С:Предприятие», можно попробовать следующее:
Найдите в списке документов (через «Все функции» или «Функции для технического специалиста») документы Перенос данных. Просмотрите те из них, которые делают записи в регистр Виды занятости сотрудников. Если вы обнаружите строки с пустым сотрудником — удалите их прямо из табличной части документа и проведите его. Это позволит продолжить отложенные обработчики обновления без правки программного кода.
Рассмотрим еще один важный технический аспект — версию платформы. При переходе с 2.0 на 3.0 (особенно на современные релизы 3.0.100 и выше) крайне важно использовать актуальную версию платформы. Рекомендуем использовать 8.3.21 или выше, так как старые версии (например, 8.3.16) могут вести себя нестабильно при конвертации больших объемов данных и закрываться без вывода сообщений об ошибках.
Перед любыми действиями обязательно выполните следующие шаги:
Таким образом, мы рассмотрели комплексный подход к решению проблемы. Сочетание предварительной очистки данных в редакции 2.0 и, при необходимости, временной модификации кода модуля обновления гарантирует успешный переход на новую редакцию программы.