Почему не отображаются предопределенные элементы в справочнике «Драйверы оборудования» при внедрении 1С:БПО и как это исправить?

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

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

Выясним причину проблемы

Ситуация, когда метаданные содержат описание предопределенных элементов, а база данных — нет, обусловлена механизмом работы платформы 1С 8.3 и спецификой самой БПО. Проанализируем основные факторы:

  1. Режим обновления предопределенных данных. В современных версиях платформы у каждого справочника есть свойство «Обновление предопределенных данных». Если оно установлено в значение Авто, платформа может не создать записи в таблицах БД мгновенно после объединения конфигураций.
  2. Специфика заполнения БПО. Справочник драйверов в БПО — это не просто перечень имен. Каждый элемент жестко связан с двоичными данными (макетами), содержащими файлы драйверов. Элементы могут быть «невидимы» для стандартных форм и запросов, если их обязательные реквизиты (например, обработчик драйвера или поставляемый макет) еще не заполнены из метаданных.
  3. Отсутствие инициализации. При простом сравнении и объединении конфигураций выполняются только структурные изменения. Логика первичного заполнения данных, заложенная разработчиками БПО, автоматически не запускается.

Решение 1: Использование параметров запуска платформы

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

/ЗапуститьОбновлениеИнформационнойБазы

Этот параметр заставляет систему выполнить процедуры, прописанные в обработчиках обновления БСП (если она используется) и инициирует сверку предопределенных данных метаданных с данными в таблицах SQL или файловой базы.

Решение 2: Программный вызов инициализации драйверов (для БПО 2.х и ниже)

Если обновление через ключ запуска не помогло, необходимо принудительно запустить процедуру инициализации поставляемых драйверов. В составе БПО есть специальные методы, которые считывают данные из макетов и создают/обновляют элементы справочника ДрайверыОборудования.

Для версий БПО старого образца (например, 2.1) используем следующий код, который можно выполнить во внешней обработке или в консоли кода с ИИ-помощником:

МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера();

Этот метод просканирует метаданные, найдет все предопределенные драйверы и заполнит их реквизиты данными из соответствующих макетов конфигурации.

Решение 3: Программный вызов инициализации (для БПО 3.1 и выше)

В новых редакциях библиотеки (3.1 и выше) структура модулей изменилась. Рассмотрим, как программно восстановить драйверы в этом случае. Разберем пример вызова метода из общего модуля:

МенеджерОборудования.ОбновитьПоставляемыеДрайвера();

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

Решение 4: Настройка свойств справочника в Конфигураторе

Если программные методы не помогают, проверим настройки самого объекта метаданных. Выясним, как установлено управление данными:

  1. Откроем свойства справочника ДрайверыОборудования.
  2. Найдем поле «Обновление предопределенных данных».
  3. Если установлено Не обновлять автоматически, то платформа никогда не создаст элементы сама. Установим значение Обновлять автоматически.
  4. Сохраним конфигурацию и выполним обновление базы данных (F7).

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

Решение 5: Принудительное создание через метод платформы

Если вы столкнулись с ошибкой «Предопределенный элемент отсутствует в данных» при попытке получить ссылку через Справочники.ДрайверыОборудования.ИмяЭлемента, можно воспользоваться низкоуровневым методом платформы для восстановления связи метаданных и таблиц базы данных:

Справочники.ДрайверыОборудования.СоздатьПредопределенныеДанные();

Этот метод рекомендуется использовать с осторожностью. После его выполнения обязательно запустите процедуру из Решения 3 (ОбновитьПоставляемыеДрайвера), чтобы наполнить созданные «пустышки» реальными файлами драйверов и настройками.

Дополнительные проверки

Если после всех манипуляций справочник всё еще пуст, проанализируем следующие моменты:

Таким образом, внедрение БПО требует не только механического переноса объектов, но и запуска внутренних механизмов инициализации данных. Использование метода ОбновитьПоставляемыеДрайвера является наиболее эффективным и правильным способом решения проблемы «исчезнувших» драйверов.

← На главную