Как исправить ошибку "Поле объекта не обнаружено (Многопоточный)" при обновлении 1С:БП КОРП 3.0.90.45?

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

При обновлении конфигурации 1С:Бухгалтерия Предприятия КОРП до версии 3.0.90.45 или аналогичных релизов, пользователи могут столкнуться с критической ошибкой: "Поле объекта не обнаружено (Многопоточный)". Эта проблема возникает в процессе выполнения обработчиков обновления и препятствует его успешному завершению. Мы рассмотрим причины возникновения этой ошибки и предложим несколько подробных решений, включая то, которое помогло автору исходной темы на форуме.

Анализ ошибки и её причин

Прежде чем перейти к решениям, давайте разберем, почему возникает данная ошибка и что она означает в контексте обновления 1С.

Механизм многопоточного обновления:

Современные конфигурации 1С, построенные на Библиотеке стандартных подсистем (БСП), используют механизм многопоточного выполнения обработчиков обновления. Это означает, что система может запускать несколько фоновых заданий параллельно для обработки больших объемов данных, что значительно ускоряет процесс обновления информационной базы. Для управления этими обработчиками существует регистр сведений ОбработчикиОбновления, в котором для каждого обработчика может быть установлен флажок Многопоточный, указывающий на возможность его параллельного выполнения.

Суть ошибки "Поле объекта не обнаружено (Многопоточный)":

Сообщение об ошибке "Поле объекта не обнаружено (Многопоточный)" указывает на то, что в какой-то момент выполнения кода программа пытается обратиться к свойству или реквизиту с именем "Многопоточный" у объекта, у которого это свойство отсутствует. Судя по стеку вызова (ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль), проблема возникает при попытке определить, является ли текущий обработчик обновления многопоточным, через конструкцию Если ОбработчикОбновления.Многопоточный Тогда.

Возможные корневые причины:

  1. "Косяк в релизе конфигурации": Одна из наиболее вероятных причин, упомянутых в обсуждении, заключается в ошибках со стороны разработчиков 1С. Может случиться так, что в структуре регистра сведений ОбработчикиОбновления поле Многопоточный существует, но запрос, который получает данные об обработчиках, был забыт обновить и не включает это поле в выборку. В результате, при попытке обратиться к ОбработчикОбновления.Многопоточный, оно просто не будет найдено в результирующей выборке запроса.
  2. Отсутствие или некорректная настройка конкретного обработчика: Проблема может быть связана с определенным обработчиком обновления, который некорректно сконфигурирован или отсутствует в базе данных, либо же его флажок Многопоточный вызывает проблемы взаимодействия.
  3. Повреждение базы данных: Любые нарушения в структуре или данных информационной базы могут приводить к непредсказуемым ошибкам, включая невозможность корректно читать метаданные или данные из регистров.
  4. Несоответствие версии платформы: Использование устаревшей или нерекомендованной версии платформы 1С для данного релиза конфигурации также может быть причиной сбоев в работе механизмов обновления.

Пошаговые решения проблемы

Теперь рассмотрим конкретные шаги, которые помогут вам устранить ошибку "Поле объекта не обнаружено (Многопоточный)".

Решение 1: Отключение многопоточности для конкретного обработчика через регистр сведений

Этот способ является обходным и может помочь, если проблема связана с конкретным обработчиком, который некорректно работает в многопоточном режиме. Если в трассировке стека или по другим признакам вы можете идентифицировать проблемный обработчик (например, РегистрыСведений.ПодписываемыеВидыЭД.ОбработатьДанныеДляПереходаНаНовуюВерсию, как было в одном из предложений), попробуйте выполнить следующие действия:

  1. Запустите 1С в режиме "Конфигуратор".
  2. Откройте регистр сведений ОбработчикиОбновления.
    • Для этого в дереве конфигурации перейдите в ветку Регистры сведений.
    • Найдите регистр сведений с именем ОбработчикиОбновления.
    • Правой кнопкой мыши вызовите контекстное меню и выберите пункт "Открыть данные" (или "Все функции" -> "Стандартные" -> "Регистры сведений" -> "ОбработчикиОбновления" -> "Открыть", если прямого доступа нет).
  3. Найдите проблемный обработчик.
    • В открывшемся списке записей регистра сведений вам необходимо найти строку, соответствующую проблемному обработчику. В нашем случае это был РегистрыСведений.ПодписываемыеВидыЭД.ОбработатьДанныеДляПереходаНаНовуюВерсию.
    • Внимательно просмотрите список, возможно, придется использовать поиск по имени.
  4. Снимите флажок "Многопоточный".
    • Откройте найденную запись обработчика двойным щелчком.
    • Найдите реквизит (флажок) с названием Многопоточный.
    • Снимите этот флажок.
    • Сохраните изменения и закройте форму записи регистра.
  5. Повторите попытку обновления.
    • Запустите 1С в режиме предприятия и попробуйте продолжить обновление.

Что делать, если такого обработчика нет?

Как было отмечено в исходной теме, иногда конкретного обработчика (например, РегистрыСведений.ПодписываемыеВидыЭД.ОбработатьДанныеДляПереходаНаНовуюВерсию) может не быть в списке, или все оставшиеся обработчики уже не имеют флажка Многопоточный. В таком случае, данное решение не применимо, и необходимо искать другую причину.

Решение 2: Корректировка запроса к регистру сведений ОбработчикиОбновления

Это решение направлено на устранение "косяка в релизе конфигурации", когда в запросе, используемом для получения информации об обработчиках обновления, отсутствует поле Многопоточный, несмотря на его наличие в структуре регистра сведений. Для реализации этого решения требуются навыки работы в Конфигураторе и понимание кода 1С.

  1. Запустите 1С в режиме "Конфигуратор".
  2. Найдите запрос к регистру сведений ОбработчикиОбновления.
    • Обычно такой запрос находится в общих модулях, отвечающих за обновление информационной базы. В данном случае, судя по стеку вызова, это модуль ОбновлениеИнформационнойБазыСлужебный.
    • Откройте этот модуль и поищите в нем код, который обращается к регистру сведений ОбработчикиОбновления. Чаще всего это происходит через конструкции вида Запрос.Текст = "ВЫБРАТЬ ...".
    • Обратите внимание на фрагменты кода, где формируется список обработчиков для выполнения.
  3. Добавьте поле "Многопоточный" в выборку запроса.
    • Когда вы найдете соответствующий запрос, убедитесь, что в его секции ВЫБРАТЬ присутствует поле ОбработчикиОбновления.Многопоточный.
    • Если этого поля нет, его необходимо добавить.

Пример предполагаемого фрагмента запроса до изменений:


ВЫБРАТЬ
    ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика,
    ОбработчикиОбновления.Порядок КАК Порядок,
    ОбработчикиОбновления.ЭтоОбработчикЗавершения КАК ЭтоОбработчикЗавершения
    // ... другие поля
ИЗ
    РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления
ГДЕ
    // ... условия выборки

После изменений, с добавленным полем Многопоточный:


ВЫБРАТЬ
    ОбработчикиОбновления.ИмяОбработчика КАК ИмяОбработчика,
    ОбработчикиОбновления.Порядок КАК Порядок,
    ОбработчикиОбновления.Многопоточный КАК Многопоточный, // Добавлено это поле
    ОбработчикиОбновления.ЭтоОбработчикЗавершения КАК ЭтоОбработчикЗавершения
    // ... другие поля
ИЗ
    РегистрСведений.ОбработчикиОбновления КАК ОбработчикиОбновления
ГДЕ
    // ... условия выборки

После внесения изменений обязательно сохраните конфигурацию базы данных ("Обновить конфигурацию базы данных").

Как указал автор, после этого действия исходная ошибка "Поле объекта не обнаружено (Многопоточный)" перестала появляться, однако возникла новая проблема (например, "Заполняет вид операции в документе "Отчет производства за смену""). Это означает, что одно препятствие устранено, но могут быть другие проблемы с данными или логикой обработчиков, которые теперь становятся видимыми.

Решение 3: Установка однопоточного режима обработки данных (эффективное решение автора)

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

Как установить однопоточный режим:

Конкретный способ установки однопоточного режима может отличаться в зависимости от версии платформы и конфигурации, но обычно это делается через параметр запуска или непосредственно в процессе обновления:

  1. Через параметры запуска 1С:Предприятия:
    • Найдите ярлык для запуска 1С:Предприятия.
    • Откройте его свойства (правая кнопка мыши -> "Свойства").
    • В поле "Объект" (где указан путь к 1cv8.exe и параметры запуска базы) попробуйте добавить параметр, который ограничивает количество потоков до одного. К сожалению, универсального параметра для всех версий нет, но иногда это можно сделать через специальные утилиты или настройки.
  2. В процессе обновления информационной базы (рекомендованный способ, если доступен):
    • При запуске 1С:Предприятия после обновления конфигурации, система обычно предлагает выполнить дополнительные процедуры обработки данных.
    • В диалоговом окне или параметрах запуска этих процедур внимательно посмотрите на доступные опции. Часто бывает пункт, позволяющий выбрать режим выполнения обработчиков: "В один поток", "Однопоточный режим" или ограничение количества фоновых заданий до 1.
    • Выберите эту опцию и продолжите обновление.
  3. Через общие настройки фоновых заданий (для более продвинутых пользователей):
    • В некоторых случаях можно временно ограничить количество фоновых заданий, доступных для обновления, через специальные настройки системы или параметризации в конфигураторе. Однако этот метод более сложен и требует глубокого понимания внутренних механизмов 1С.

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

Общие рекомендации и профилактика

Чтобы избежать подобных проблем в будущем и обеспечить стабильность процесса обновления, всегда следуйте этим рекомендациям:

  1. Всегда делайте резервное копирование: Перед любым обновлением конфигурации обязательно создавайте полную резервную копию информационной базы. Это ваш спасательный круг в случае возникновения критических ошибок.
  2. Проверяйте версию платформы: Убедитесь, что установленная версия платформы 1С:Предприятия соответствует рекомендованной для текущего релиза конфигурации. Информацию о рекомендованных версиях можно найти на сайте 1С или в документации к обновлению. В рассматриваемом случае платформа 8.3.18 использовалась, что в целом достаточно свежая, но всегда стоит перепроверить конкретные требования релиза.
  3. Соблюдайте последовательность обновлений: Старайтесь обновлять конфигурацию последовательно, не пропуская ключевые релизы. Пропуск нескольких релизов может привести к непредсказуемым ошибкам в данных и логике.
  4. Очищайте кэш 1С: Накопленный или поврежденный кэш на компьютере пользователя или сервере может вызывать различные сбои. Регулярно очищайте кэш, удаляя соответствующие папки (обычно расположены в %LOCALAPPDATA%\1C\1cv8).
  5. Выполняйте тестирование и исправление информационной базы: Периодически используйте встроенную утилиту chdbfl.exe (Тестирование и исправление информационной базы) или соответствующий функционал в Конфигураторе для проверки и исправления ошибок в структуре и данных базы.
  6. Анализируйте журнал регистрации: Внимательно изучайте журнал регистрации 1С. В нем фиксируются все события и ошибки, что крайне полезно для диагностики и выявления корневых причин проблем, особенно если после устранения одной ошибки появляется другая (как это было с ошибкой "Заполняет вид операции в документе 'Отчет производства за смену'").
  7. Устанавливайте актуальные патчи: Разработчики 1С часто выпускают патчи, которые исправляют мелкие ошибки и недочеты. Регулярно проверяйте и устанавливайте актуальные патчи для вашей конфигурации.

Следуя этим рекомендациям и применяя предложенные решения, вы сможете успешно справиться с ошибкой "Поле объекта не обнаружено (Многопоточный)" и обеспечить стабильное обновление вашей информационной базы 1С:БП КОРП.

← На главную