Почему не проходит обработчик обновления в 1С:Бухгалтерия 2.0 и как исправить ошибку Поле объекта не обнаружено (ОбменДанными)

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

При переходе на релиз 2.0.66.144 конфигурации «Бухгалтерия предприятия» редакции 2.0 многие пользователи столкнулись с критической ошибкой, которая прерывает процесс обновления информационной базы. Ошибка возникает на этапе выполнения дополнительных процедур обработки данных и сопровождается следующим сообщением:

{Обработка.ОбновлениеИнформационнойБазы.МодульОбъекта(11254)}: Поле объекта не обнаружено (ОбменДанными) НаборЗаписей.ОбменДанными.Загрузка = Истина;

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

Разбор причины ошибки: технический анализ

Проанализируем ситуацию в конфигураторе. Проблема локализована в процедуре ЗаполнитьКрайнийСрокУплатыВРегистреНДФЛРасчетыСБюджетом. Ошибка носит чисто программный характер: разработчики при подготовке релиза допустили опечатку. В коде обработчика переменной НаборЗаписей в определенный момент присваивается не объект типа «Набор записей регистра», а Менеджер регистра накопления.

У объекта типа РегистрНакопленияМенеджер отсутствует свойство ОбменДанными, которое есть у наборов записей или объектов документов. Соответственно, при попытке установить флаг Загрузка = Истина, система закономерно выдает ошибку о необнаруженном поле.

Важный нюанс: ошибка проявляется не у всех. Она возникает только в том случае, если в вашей базе есть записи в регистре «НДФЛ расчеты с бюджетом» с видом строки «Удержание», где крайний срок уплаты попадает на период с 4 по 7 мая 2021 года. Эти дни были объявлены нерабочими, и алгоритм обновления пытается программно пересчитать сроки уплаты, но из-за ошибки в коде процесс прерывается.

Вариант 1: Официальное исправление (Рекомендуемый способ)

Самый правильный и безопасный путь — это установка исправительного релиза. Компания 1С оперативно выпустила версию 2.0.66.145, в которой данная ошибка полностью устранена. Рассмотрим последовательность действий:

  1. Скачайте дистрибутив обновления версии 2.0.66.145 (или выше).
  2. Если вы уже «застряли» на ошибке в версии 144, восстановите базу из резервной копии, созданной перед обновлением.
  3. Выполните обновление конфигурации через Конфигуратор сразу до версии 145.
  4. Запустите базу в режиме «Предприятие», и обработчики обновления пройдут штатно.

Если же вы не можете откатиться к копии, можно попробовать накатить cf-файл 145-го релиза поверх «битой» конфигурации 144-го через сравнение-объединение или полную загрузку конфигурации, предварительно убедившись в наличии актуального бэкапа.

Вариант 2: Обход ошибки через манипуляцию с документами

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

  1. Восстановите базу из копии (до начала обновления).
  2. Найдите документы «Начисление зарплаты работникам» и документы выплаты («Зарплата к выплате», «РКО» или «Списание с расчетного счета»), датированные концом апреля 2021 года (обычно от 30.04.21).
  3. Снимите эти документы с проведения.
  4. Запустите процесс обновления конфигурации. Поскольку движений в проблемном периоде больше нет, обработчик обновления пропустит этот блок кода.
  5. После успешного завершения обновления в режиме «Предприятие» проведите документы обратно.

Вариант 3: Исправление программного кода (для программистов)

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

  1. Откройте конфигурацию и перейдите в обработку ОбновлениеИнформационнойБазы.
  2. Найдите строку, указанную в ошибке (примерно 11254).
  3. Проанализируйте код. Вы увидите, что в цикле или условии переменной НаборЗаписей присваивается значение РегистрыНакопления.НДФЛРасчетыСБюджетом.
  4. Исправьте код так, чтобы создавался именно набор записей. Пример правильной логики:

// Вместо ошибочного обращения к менеджеру:
// НаборЗаписей = РегистрыНакопления.НДФЛРасчетыСБюджетом; 

// Должно быть создание набора с фильтром по регистратору:
НаборЗаписей = РегистрыНакопления.НДФЛРасчетыСБюджетом.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ТекущийРегистратор);
НаборЗаписей.ОбменДанными.Загрузка = Истина;

После внесения правок сохраните конфигурацию базы данных (F7) и продолжите обновление. После успешного завершения процедуры рекомендуется вернуть конфигурацию на поддержку, обновив её до корректного 145-го релиза через cf.

Вариант 4: Использование COM-соединения для обхода блокировки

Если база уже обновлена в Конфигураторе, но не открывается в Предприятии (сразу запускается обработчик и падает), можно применить хитрость с COM-соединением. Это позволит войти в базу, не запуская монопольный процесс обновления, и распровести проблемные документы.

Разберем, как это работает. Система не запускает обновление, если не может получить монопольный доступ. Мы можем «занять» базу другим соединением. Посмотрим на пример кода, который можно запустить из другой базы 1С или через Excel:


// Пример для запуска из внешней обработки другой базы
V8 = Новый COMОбъект("V83.ComConnector");
ПутьКБазе = "File=""C:\Bases\Buh2""; Usr=""Администратор""; Pwd=""пароль"";";
Попытка
    Соединение = V8.Connect(ПутьКБазе);
    // Теперь база занята этим соединением
    Предупреждение("База занята. Теперь попробуйте войти в неё обычным клиентом.");
    // В это время входим в основную базу, отказываемся от закрытия при сообщении о монопольности
    // И выполняем нужные действия (распроведение документов)
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Когда вы попытаетесь войти в обновляемую базу обычным пользователем, система сообщит, что не может получить монопольный доступ для обновления. В некоторых случаях это позволит зайти в интерфейс (отказавшись от завершения работы), где вы сможете найти и распровести документы по НДФЛ за апрель 2021 года.

Диагностика данных в регистре

Чтобы точно понять, какие именно записи мешают обновлению, можно воспользоваться консолью запросов (если есть возможность запустить её до падения обновления). Проанализируем состояние регистра НДФЛРасчетыСБюджетом следующим запросом:


ВЫБРАТЬ
    ДанныеОНалогах.Регистратор,
    ДанныеОНалогах.Период,
    ДанныеОНалогах.КрайнийСрокУплаты
ИЗ
    РегистрНакопления.НДФЛРасчетыСБюджетом КАК ДанныеОНалогах
ГДЕ
    ДанныеОНалогах.ВидСтроки = ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Удержание)
    И ДанныеОНалогах.КрайнийСрокУплаты МЕЖДУ ДАТАВРЕМЯ(2021, 5, 4) И ДАТАВРЕМЯ(2021, 5, 7)

Если этот запрос возвращает строки — именно эти документы-регистраторы являются причиной сбоя. Чаще всего это документы выплаты зарплаты за апрель, где дата выплаты или рассчитанный срок уплаты НДФЛ попали на майские праздники 2021 года.

Резюме

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

  1. Лучшее решение — обновиться до версии 2.0.66.145.
  2. Если нужно быстро — распроведите документы выплаты зарплаты за конец апреля 2021 года.
  3. Если вы разработчик — исправьте опечатку в коде через расширение или временное снятие с поддержки.

Всегда делайте резервную копию перед любыми манипуляциями с кодом или массовым перепроведением документов в процессе обновления.

← На главную