Как добавить свой реквизит в список сортировки и избежать ошибки «Поле объекта не обнаружено (Код)»

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

При работе с типовыми конфигурациями на платформе 1С:Предприятие 8.3, такими как «Розница 2.2» или «Управление торговлей 11», разработчики часто сталкиваются с необходимостью расширить функционал стандартных списков. Одной из популярных задач является добавление нового поля в список доступных полей для сортировки (меню «Еще — Настроить список»). Однако простое добавление реквизита в запрос динамического списка может привести к неожиданным ошибкам, когда стандартные элементы формы, такие как Код или Артикул, внезапно перестают распознаваться системой. В этой статье мы подробно разберем, как правильно добавить поле для сортировки и почему возникают конфликты в коде формы.

Шаг 1. Модификация запроса динамического списка

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

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

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


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

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

Шаг 2. Настройка доступности поля для сортировки

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

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

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

Шаг 3. Почему пропадает «Код»? Выясняем причину ошибки

Посмотрим на ситуацию, описанную в сообщении пользователя: после добавления реквизита при открытии формы возникает ошибка Поле объекта не обнаружено (Код). Это происходит в строке кода:


Элементы.Код.Видимость = ДополнительныеКолонкиНоменклатуры = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код;

Проанализируем, почему объект Элементы.Код внезапно исчез. Существует несколько технических причин:

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

Шаг 4. Решение проблемы «Поле объекта не обнаружено»

Чтобы исправить ошибку и успешно добавить поле, выполним следующие действия:

1. Проверка основной таблицы. Убедимся, что в свойствах динамического списка в поле «Основная таблица» выбрано значение Справочник.Номенклатура. Это гарантирует, что стандартные поля будут обрабатываться платформой корректно.

2. Явное указание псевдонимов. В конструкторе запроса на закладке «Объединения/Псевдонимы» проверим, чтобы поле Код имело псевдоним именно Код, а не Код1 или НоменклатураКод.

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

4. Использование функции «Установить стандартные настройки». Иногда помогает полный сброс настроек динамического списка в конфигураторе. Попробуем удалить поле из запроса, убедиться, что ошибка исчезла, и добавить его снова, внимательно следя за тем, чтобы флаг «Автозаполнение» был включен.

Шаг 5. Пример корректного добавления реквизита

Рассмотрим пример, когда нам нужно добавить поле Артикул (если его не было) и обеспечить его сортировку. Настроим динамический список так:


// Текст запроса
ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование,
    СправочникНоменклатура.Артикул КАК Артикул
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура

После этого в настройках компоновки данных для поля Артикул установим:

Если мы работаем в «1С:Розница 2.2», проанализируем модуль формы. Найдем, где устанавливается видимость колонок. Обычно это процедура УстановитьВидимостьКолонок() или аналогичная. Убедимся, что наше вмешательство в запрос не нарушило логику этой процедуры. Если система ищет элемент Элементы.Артикул, а мы в запросе его переименовали или изменили его тип, это приведет к ошибке, аналогичной той, что произошла с полем Код.

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

← На главную