Как исправить ошибку «НаборСвойств не найдено» в запросе 1С при работе с учебной конфигурацией

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

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

Проанализируем причину ошибки в метаданных

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

Рассмотрим по шагам, где должен находиться этот реквизит:

  1. Откроем Конфигуратор и перейдем в дерево метаданных.
  2. Найдем справочник Номенклатура.
  3. Развернем ветку Реквизиты.
  4. Проверим наличие реквизита с именем НаборСвойств.

Важный момент: Если реквизита нет, его нужно создать. Если он есть, проверьте его написание. Часто ошибка кроется в опечатках: НаборыСвойств (множественное число) или НаборСвойства. Имя в коде запроса должно символ в символ совпадать с именем в конфигураторе.

Проверим тип данных реквизита

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

Разберем ситуацию: в запросе мы часто обращаемся к свойствам объекта через точку (например, Номенклатура.НаборСвойств.Наименование). Если тип данных реквизита НаборСвойств указан неверно (например, «Строка» вместо ссылки), система не сможет «провалиться» глубже в структуру данных, и запрос выдаст ошибку исполнения.

Синхронизируем имена таблиц (Единственное и множественное число)

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

Посмотрим на пример типичной ошибки в коде:


ВЫБРАТЬ
    ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.НаборСвойств
ИЗ
    Документ.ОказаниеУслуг.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры

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

Использование Конструктора запросов — «золотое правило» разработчика

Выясним главную хитрость опытных программистов 1С: они практически никогда не пишут текст запроса вручную, особенно если они новички. Для этого существует Конструктор запросов.

Рассмотрим, как правильно составить запрос, чтобы избежать ошибок:

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

Системная подсказка: Если в окне конструктора вы не видите поля НаборСвойств внутри справочника Номенклатура, это на 100% означает, что реквизит не был добавлен в метаданные или конфигурация базы данных не была обновлена. В этом случае бессмысленно править текст запроса вручную — нужно сначала «дорисовать» объект в дереве конфигурации и нажать F7 для обновления.

Путь к данным через табличную часть

Проанализируем структуру обращения к данным. Часто ошибка «НаборСвойств не найдено» возникает из-за того, что программист пытается найти это поле непосредственно в табличной части документа. Однако, согласно логике учебных задач, НаборСвойств принадлежит справочнику Номенклатура, а не документу.

Правильный путь в запросе выглядит так:

Документ.ОказаниеУслуги.ПереченьНоменклатуры.Номенклатура.НаборСвойств

Если вы пропустите промежуточное звено Номенклатура и напишете ПереченьНоменклатуры.НаборСвойств, система выдаст ошибку, так как в самой табличной части (строках документа) такого столбца не существует.

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

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

  1. Выполните полное обновление конфигурации базы данных (клавиша F7 или синий бочонок на панели инструментов).
  2. Полностью закройте сеанс «1С:Предприятие» и Конфигуратор.
  3. Перезапустите систему.

Это заставит платформу пересчитать индексы и структуру таблиц, что иногда помогает устранить «фантомные» ошибки метаданных.

Резюме по исправлению

Подводя итог, при возникновении ошибки «НаборСвойств не найдено», действуйте по алгоритму: Метаданные -> Обновление (F7) -> Конструктор запроса. Не копируйте код из учебника вслепую, так как малейшее отличие в именовании ваших объектов от тех, что использовал автор книги, приведет к неработоспособности программы. Используйте визуальные инструменты платформы, чтобы видеть реальную структуру вашей базы данных.

← На главную