Как настроить вывод регистра сведений на форме с отбором по владельцу в 1С

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

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

В этой статье мы подробно разберем, как правильно связать регистр сведений с владельцем, ограничить видимость данных и обеспечить корректное заполнение новых записей.

Разбор программного метода установки отбора

Рассмотрим основной способ решения проблемы через встроенный язык. Когда мы добавляем на форму табличное поле, данные которого имеют тип РегистрСведенийСписок, мы работаем с динамической выборкой. Чтобы ограничить эту выборку текущим элементом справочника, необходимо обратиться к свойству Отбор этого списка.

Проанализируем пример кода, который обычно размещается в обработчике события ПриОткрытии или ПередОткрытием формы элемента справочника:


// Устанавливаем отбор по измерению (например, "Владелец" или "Номенклатура")
ЭлементыФормы.Штрихкоды.Значение.Отбор.Владелец.Установить(Ссылка);

// Запрещаем пользователю вручную отключать этот отбор в настройках списка
ЭлементыФормы.Штрихкоды.НастройкаОтбора.Владелец.Доступность = Ложь;

Разберем подробнее, что здесь происходит. Метод Установить() является наиболее предпочтительным, так как он одновременно выполняет три действия: устанавливает значение фильтра, задает вид сравнения Равно и включает флаг Использование. Если вы хотите использовать более сложную логику, можно настроить параметры отбора по отдельности, как показано ниже:


// Пример детальной настройки отбора для табличного поля "ДополнительныеСоглашения"
ЭтаФорма.ДополнительныеСоглашения.Отбор.ДоговорКонтрагента.ВидСравнения = ВидСравнения.Равно;
ЭтаФорма.ДополнительныеСоглашения.Отбор.ДоговорContragenta.Значение = Ссылка;
ЭтаФорма.ДополнительныеСоглашения.Отбор.ДоговорКонтрагента.Использование = Истина;

// Блокировка изменения настроек для пользователя
ЭлементыФормы.ДополнительныеСоглашения.НастройкаОтбора.ДоговорКонтрагента.Доступность = Ложь;

Обратите внимание на свойство СпособРедактирования. Если вы хотите, чтобы пользователь мог вносить изменения прямо в списке, полезно добавить строку:

ЭлементыФормы.ДополнительныеСоглашения.СпособРедактирования = СпособРедактированияСписка.ВСписке;

Использование свойств метаданных: свойство «Ведущее»

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

Выясним, на что влияет установка этого флага для измерения (например, для измерения Номенклатура в регистре штрихкодов):

  1. Автоматическое удаление: При удалении элемента справочника 1С автоматически очистит все связанные записи в регистре сведений.
  2. Связь в интерфейсе: Система понимает, что данная запись регистра не имеет смысла без своего владельца.
  3. Упрощение отборов: В некоторых случаях платформа сможет автоматически подставить владельца при открытии формы списка регистра из формы объекта.

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

Настройка через свойства элемента управления «Связь по владельцу»

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

В поле «Связь по владельцу» можно указать путь к данным — обычно это Ссылка (текущий элемент справочника). Теоретически это должно заставлять систему автоматически фильтровать записи. Однако на практике в обычных формах (особенно в конфигурациях уровня УТ 10.3) этот механизм не всегда срабатывает корректно для РегистрСведенийСписок, поэтому программный метод через Отбор.Установить() считается «золотым стандартом» надежности.

Нюансы работы с новыми (незаписанными) объектами

Проанализируем ситуацию: пользователь нажал кнопку «Создать» в справочнике номенклатуры, форма открылась, но кнопка «Записать» еще не нажималась. В этот момент Ссылка объекта пустая.

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

Автоматическое заполнение измерений в новых записях

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

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

Различие между Табличной частью и Регистром сведений

Важно не путать эти два объекта. Иногда разработчики говорят: «Я добавил табличную часть с регистром». Технически это невозможно. На форме может быть либо реальная табличная часть (которая хранится внутри объекта), либо табличное поле, отображающее данные внешнего регистра.

В случае со штрихкодами в УТ 10.3 используется именно регистр. Если вы решите перенести данные в ТЧ, помните: данные ТЧ сохраняются вместе со справочником, а данные регистра записываются в базу независимо и моментально. Для синхронизации ТЧ и РС (если такая задача стоит) вам придется прописывать логику в событиях ПередЗаписью и ПриЗаписи самого справочника.

Подводя итог, наиболее стабильное решение для вывода РС на обычную форму элемента — это комбинация флага «Ведущее» в метаданных и вызова Отбор.ИмяИзмерения.Установить(Ссылка) при открытии формы.

← На главную