Как исправить ошибку «Поле объекта не обнаружено (БухгалтерскиеВзаиморасчетыССотрудниками)» при переходе с 1С:Бухгалтерия 2.0 на 3.0?

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

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

Анализ проблемы и техническая причина сбоя

Давайте проанализируем текст ошибки, которую выдает система:

{ОбщийМодуль.ВзаиморасчетыССотрудникамиБазовый.Модуль(19)}: Поле объекта не обнаружено (БухгалтерскиеВзаиморасчетыССотрудниками)

Эта ошибка возникает в момент работы обработчика обновления ЗарплатаКадрыОбновлениеСПредыдущейРедакции.ЗарплатаКадрыОбновлениеС20. Суть процесса заключается в том, что система пытается программно создать записи в новом регистре накопления БухгалтерскиеВзаиморасчетыССотрудниками. Этот объект отсутствует в редакции 2.0 и появляется только в 3.0 для унификации учета зарплаты.

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

Решение 1: Использование «переходного» промежуточного релиза (Рекомендуемое)

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

  1. Подготовка копии: Все действия выполняем строго на копии базы. Перед началом убедимся, что база 2.0 обновлена до последнего актуального релиза своей ветки (например, 2.0.66.57).
  2. Выбор промежуточной версии: Вместо версии 3.0.63 или выше, выберем более раннюю версию редакции 3.0. Практика подтверждает, что релиз 3.0.54.20 или 3.0.60.46 содержит более стабильные механизмы миграции для этой цепочки обновлений.
  3. Техническое обновление: Выполняем переход на выбранный промежуточный релиз штатным способом (через «Обновление конфигурации» или «Сравнение и объединение» с полным дистрибутивом _upd20).
  4. Запуск и обработка данных: Запускаем базу в режиме «Предприятие». Дожидаемся завершения всех процедур обновления данных. Важно, чтобы счетчик отложенных обновлений дошел до 100%.
  5. Финальный рывок: Только после успешного завершения всех процедур в промежуточной базе, выполняем обновление до самого последнего актуального релиза 3.0.

Решение 2: Подготовка исходной базы в редакции 2.0

Иногда корни проблемы уходят в логическую целостность данных старой редакции. Если в базе 2.0 есть «битые» ссылки в зарплатных регистрах, типовой механизм 3.0 не может корректно определить организацию или период для создания движений. Рассмотрим, что нужно сделать перед переходом:

Запустим процедуру Тестирование и исправление (ТиИ) со следующими настройками:

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

Решение 3: Обновление платформы и очистка кэша

Выясним причину возможного влияния платформы. Ошибка Поле объекта не обнаружено при наличии самого объекта в метаданных — классический признак проблем с кэшем.

Проделаем следующие действия:

  1. Установим последнюю стабильную версию платформы (на момент выхода релизов 3.0.63 рекомендуется использовать не ниже 8.3.12.1644).
  2. Перед запуском обновления в пользовательском режиме полностью удалим базу из списка в стартере 1С и добавим её заново. Это гарантирует полную очистку локального кэша метаданных на компьютере.
  3. Если используется серверный вариант, необходимо перезапустить службу 1C:Enterprise Server Administration для очистки серверного кэша.

Решение 4: Исправление кода для разработчиков (Hard Way)

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

Найдем строку 19 в общем модуле ВзаиморасчетыССотрудникамиБазовый и добавим проверку существования регистра в коллекции движений:


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

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

Важно: Этот метод является «костылем». После завершения обновления базы необходимо обязательно вернуться к типовому коду и проверить, заполнились ли данные в регистре БухгалтерскиеВзаиморасчетыССотрудниками. Если они остались пустыми, расчеты с персоналом в новой базе будут некорректными.

Почему важно использовать полный дистрибутив?

Часто программисты пытаются обновиться через .cfu файл (файл обновления). Однако при переходе между редакциями (2.0 -> 3.0) крайне рекомендуется использовать полный дистрибутив (файл .cf), который идет в комплекте поставки для перехода (дистрибутив с пометкой _upd20). При использовании .cfu некоторые связи между новыми объектами и обработчиками обновления могут инициализироваться некорректно, что и приводит к ошибкам «Поле объекта не обнаружено».

Подведем итог: если вы столкнулись с данной ошибкой, не пытайтесь «пробить» её на актуальном релизе. Вернитесь к копии, сделайте Тестирование и исправление в 2.0, обновитесь до 3.0.54.20, дайте системе завершить все фоновые задания, и только потом переходите на актуальную версию. Это сэкономит вам часы отладки и гарантирует сохранность данных учета.

← На главную