При работе в формах с подчиненных справочниками имеется ряд особенностей.

Прежде всего, следует отметить свойства формы списка справочника ПараметрОтборПоВладельцу и ПараметрВыборПоВладельцу .

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

Свойство ПараметрВыборПоВладельцу используется для инициализации формы выбора. В этом случае выбор будет выполняться только для элементов с указанным владельцем. Этот параметр используется системой при инициализации выбора значения подчиненного справочника в поле ввода из формы выбора.

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

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

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

Может использоваться возможность просмотра справочника по всем владельцам. В этом случае следует вставить в список колонку для отображения владельца. Однако такой вариант тоже может быть неудобен для выбора.

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

Возвращает форму по имени

Синтаксис

Функция ПолучитьФорму() имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

Параметры

Описание параметров процедуры ПолучитьФорму() :

Имя параметраТипОписание
ИмяФормыСтрокаИмя формы, образованное как полный путь к объекту Форма в дереве метаданных (например, «Справочник.Сотрудники.Форма.ФормаОбъекта», «ОбщаяФорма.ФормаВопроса») или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, «Справочник.Сотрудники.ФормаОбъекта»). Поддерживаются следующие формы по умолчанию:
  • ФормаОбъекта (ObjectForm) — форма объекта по умолчанию;
  • ФормаГруппы (FolderForm) — форма группы по умолчанию;
  • ФормаЗаписи (RecordForm) — форма записи регистра по умолчанию;
  • ФормаСписка (ListForm) — форма списка по умолчанию;
  • ФормаВыбора (ChoiceForm) — форма выбора по умолчанию;
  • ФормаВыбораГруппы (FolderChoiceForm) — форма выбора группы по умолчанию;
  • ФормаКонстант (ConstantsForm) — форма констант по умолчанию;
  • Форма (Form) — форма отчета и обработки по умолчанию;
  • ФормаНастроек (SettingsForm) — форма настроек отчета по умолчанию;
  • ФормаЗагрузки (LoadForm) — форма загрузки настроек;
  • ФормаСохранения (SaveForm) — форма сохранения настроек;
Параметры (необязательный)СтруктураПараметры формы. Ключ структуры — имя параметра, а значение — значение параметра формыВладелец (необязательный)ВладелецФормыФорма или элемент управления формы.Уникальность (необязательный)ПроизвольныйКлюч уникальности формы. В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная формаОкно (необязательный)ОкноКлиентского-ПриложенияОкно приложения, в котором будет открыта форма. Окном может быть только основное окно приложения или вспомогательное окно формы.

Применимо только для управляемой формы.

НавигационнаяСсылка (необязательный)Строка;
НеопределеноЕсли содержит значение, отличное от Неопределено , то это значение присваивается свойству НавигационнаяСсылка формы, полученной в результате вызова данного метода, и свойство АвтоНавигационнаяСсылка этой формы устанавливается в Ложь. Значение по умолчанию: Неопределено .

Применимо только для управляемой формы.

Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Описание

Функция ПолучитьФорму() получает форму по имени и возвращает ее. Перед этим осуществляется поиск ранее открытой формы того же типа и совпадающими параметрами: значениям ключевых параметров формы, владельца формы, пользовательского ключа уникальности. Для форм ФормаОбъекта , ФормаЗаписи , ФормаНабораЗаписей , ФормаКонстант при поиске ранее открытых форм, владелец не учитывается.

Доступность

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).

Пример использования

Пример кода с использованием процедуры ПолучитьФорму() :

Допустим, требуется создать программным путем новый элемент справочника «Единицы хранения», у которого во владельцах — справочник «Номенклатура»
Это делается так:

Автор 1С

6 thoughts on “ Как программно установить связь по владельцу в форме. Как программно добавить новый элемент справочника, если у него есть владелец (1С: Программисту) ”

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

Алексей, уточните, что именно нужно. Вероятно, действительно стоит добавить какую-то информацию, но не понятно, что именно осталось непонятным 🙂
Вы внимательно прочитали вторую часть, то, что написано после картинки? Там поясняется, как программно задать владельца по какому-то условию. Обратили внимание на слова, выделенные жирным шрифтом? Поняли приведенную процедуру?

Т.е. при программном создании элемента формы нельзя программно установить для колонки ТП _имя_ реквизита формы / объекта (как в конфигураторе в редакторе формы), в котором хранится ссылка на владельца, а нужно каждый раз при вызове в обработчике подсовывать эту ссылку, непосредственно в экземпляр элемента управления

Воспрос остался непонятен.
При создании элемента формы (спасибо Евгении за подсказку) Вы назначаете ему Тип.
Допустим, Тип — это Справочник, у которого есть Владелец.
Если мы правильно поняли, вопрос в том, как назначить конкретного Владельца этому содаваемому элементу формы, чтобы при попытке выбора пользователем, открывался список, подчиненный заданному Владельцу?

Вообще, выбор по владельцу задается в процедуре «ПриНачалеВыбора» командой вида
Элемент.ВыборПоВладельцу = Владелец;

Мы пок ане придумали, как именно это сделать для программно создаваемого элемента формы (если у кого-то возникнут мысли, просим помочь).
Быть может, поможет назначить процедуру-обработчик используя метод «УстановитьДействие»:

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

Или вопрос в том, как программно добавить новый элемент справочника, если у него есть владелец?
Допустим, требуется создать программным путем новый элемент справочника «Единицы хранения»,
у которого во владельцах — справочник «Номенклатура».
Это делается так:

Команда программного добавления элемента формы:
ЭлементыФормы (Controls)
Добавить (Add)
Синтаксис:
Добавить( , , , )
Параметры:
(обязательный)
Тип: Тип. Тип добавляемого элемента управления
Индикатор
ПолеКалендаря
Кнопка
КоманднаяПанель
Надпись
Панель
Переключатель
ПолеТабличногоДокумента
ПолеHTMLДокумента
ПолеТекстовогоДокумента
ПолеВвода
ПолеВыбора
ПолеСписка
ПолеКартинки
ПолосаРегулирования
Разделитель
РамкаГруппы
ТабличноеПоле
Флажок
ПолеГрафическойСхемы
ПолеГеографическойСхемы
(обязательный)
Тип: Строка. Имя создаваемого элемента управления. Имя должно быть указано в соответсвии с правилами написания имен системы 1С:Предприятие 8. В противном случае выполнение метода вызовет исключение.
(необязательный)
Тип: Булево. Определяет, создавать новый элемент управления формы видимым или нет. Истина — элемент создается видимым.
Значение по умолчанию: Истина
(необязательный)
Тип: Панель, ПолеТабличногоДокумента. Определяет, какой панели формы или какому табличному документу принадлежит создаваемый элемент. Если указана панель, то добавляемый элемент размещается на текущей странице панели. Если не указан, создаваемый элемент будет принадлежать непосредственно форме.
Возвращаемое значение:
Элемент управления формы.
Описание:
Добавляет элемент управления на форму.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
// Расположим на странице табличное поле
ПолеРегистра = ЭлементыФормы.Добавить(Тип(«ТабличноеПоле»),
СтрокаТаблицы.Имя,
Истина,
ЭлементыФормы.ОсновнаяПанель);
ПолеРегистра.Данные = «ДокументОбъект.Движения.» + СтрокаТаблицы.Имя;

Если НЕ ЭтоНовый() Тогда
ПолеРегистра.Значение.Прочитать();
КонецЕсли;

ПолеРегистра.Верх = 30;
ПолеРегистра.Лево = 6;
ПолеРегистра.Ширина = ЭлементыФормы.ОсновнаяПанель.Ширина — 14;
ПолеРегистра.Высота = ЭлементыФормы.ОсновнаяПанель.Высота — 56;
ПолеРегистра.ТолькоПросмотр = Ложь;
ПолеРегистра.ИзменятьПорядокСтрок = Истина;
ПолеРегистра.ИзменятьСоставСтрок = Истина;

ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Верх,
КоманднаяПанельРегистра,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Низ,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Низ);
ПолеРегистра.УстановитьПривязку(ГраницаЭлементаУправления.Право,
ЭлементыФормы.ОсновнаяПанель,
ГраницаЭлементаУправления.Право);

Если Метаданные.РегистрыНакопления[СтрокаТаблицы.Имя].ВидРегистра = Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки Тогда

КолонкаВидДвижения = ПолеРегистра.Колонки.Вставить(1, «Вид движения»);
КолонкаВидДвижения.Имя = «ВидДвиженияРегистраНакопления»;
КолонкаВидДвижения.УстановитьЭлементУправления(Тип(«ПолеВвода»));
КолонкаВидДвижения.Данные = «ВидДвижения»;
КолонкаВидДвижения.ЭлементУправления.КнопкаВыбора = Истина;
КолонкаВидДвижения.ЭлементУправления.ВыбиратьТип = Ложь;

ПолеРегистра.Колонки.Регистратор.Видимость = Ложь;
ПолеРегистра.Колонки.Период.Видимость = Ложь;
ПолеРегистра.Колонки.НомерСтроки.Видимость = Ложь;