При переходе на релиз 2.0.66.144 конфигурации «Бухгалтерия предприятия» редакции 2.0 многие пользователи столкнулись с критической ошибкой, которая прерывает процесс обновления информационной базы. Ошибка возникает на этапе выполнения дополнительных процедур обработки данных и сопровождается следующим сообщением:
{Обработка.ОбновлениеИнформационнойБазы.МодульОбъекта(11254)}: Поле объекта не обнаружено (ОбменДанными) НаборЗаписей.ОбменДанными.Загрузка = Истина;
В этой статье мы подробно разберем, почему возникает данная ситуация, проанализируем техническую сторону проблемы и рассмотрим все доступные способы её решения — от простых пользовательских манипуляций до внесения правок в программный код.
Проанализируем ситуацию в конфигураторе. Проблема локализована в процедуре ЗаполнитьКрайнийСрокУплатыВРегистреНДФЛРасчетыСБюджетом. Ошибка носит чисто программный характер: разработчики при подготовке релиза допустили опечатку. В коде обработчика переменной НаборЗаписей в определенный момент присваивается не объект типа «Набор записей регистра», а Менеджер регистра накопления.
У объекта типа РегистрНакопленияМенеджер отсутствует свойство ОбменДанными, которое есть у наборов записей или объектов документов. Соответственно, при попытке установить флаг Загрузка = Истина, система закономерно выдает ошибку о необнаруженном поле.
Важный нюанс: ошибка проявляется не у всех. Она возникает только в том случае, если в вашей базе есть записи в регистре «НДФЛ расчеты с бюджетом» с видом строки «Удержание», где крайний срок уплаты попадает на период с 4 по 7 мая 2021 года. Эти дни были объявлены нерабочими, и алгоритм обновления пытается программно пересчитать сроки уплаты, но из-за ошибки в коде процесс прерывается.
Самый правильный и безопасный путь — это установка исправительного релиза. Компания 1С оперативно выпустила версию 2.0.66.145, в которой данная ошибка полностью устранена. Рассмотрим последовательность действий:
Если же вы не можете откатиться к копии, можно попробовать накатить cf-файл 145-го релиза поверх «битой» конфигурации 144-го через сравнение-объединение или полную загрузку конфигурации, предварительно убедившись в наличии актуального бэкапа.
Если вам необходимо срочно завершить обновление именно на 144-м релизе, можно воспользоваться методикой временного изменения данных. Выясним причину: обработчик «спотыкается» о конкретные записи регистра за апрель-май 2021 года. Проделаем следующие шаги:
Рассмотрим вариант, когда базу нужно «протолкнуть» через обновление без отката к копии. Для этого придется внести временные изменения в код. Посмотрим на алгоритм действий:
ОбновлениеИнформационнойБазы.НаборЗаписей присваивается значение РегистрыНакопления.НДФЛРасчетыСБюджетом.
// Вместо ошибочного обращения к менеджеру:
// НаборЗаписей = РегистрыНакопления.НДФЛРасчетыСБюджетом;
// Должно быть создание набора с фильтром по регистратору:
НаборЗаписей = РегистрыНакопления.НДФЛРасчетыСБюджетом.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ТекущийРегистратор);
НаборЗаписей.ОбменДанными.Загрузка = Истина;
После внесения правок сохраните конфигурацию базы данных (F7) и продолжите обновление. После успешного завершения процедуры рекомендуется вернуть конфигурацию на поддержку, обновив её до корректного 145-го релиза через cf.
Если база уже обновлена в Конфигураторе, но не открывается в Предприятии (сразу запускается обработчик и падает), можно применить хитрость с 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 является классическим примером «человеческого фактора» при разработке. Если вы столкнулись с ней:
Всегда делайте резервную копию перед любыми манипуляциями с кодом или массовым перепроведением документов в процессе обновления.