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

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

Вопрос Как установить связь по владельцу в форме?
Ответ
Предположим, что где-то, например, в форме списка регистра, требуется дать пользователю возможность интерактивно указать единицу хранения номенклатуры. «Номенклатура» — это справочник. «Единица хранения» — справочник, подчиненный номенклатуре. Справочник «Номенклатура» обычно содержит очень много элементов. Если мы в форме списка регистра, просто добавим две графы — «Номенклатура» и «Единица хранения», то при попытке интерактивно выбрать «единицу хранения» будет происходить зависание. Мы уже писали об этом в статье «Как установить выбор подчиненного элемента справочника» А тут рассмотрим задачу немного в другом ракурсе.
Чтобы не происходило зависания, обычно назначают «Связь по владельцу». См. рисунок. Слева на рисунке — форма списка регистра, справа на рисунке — свойства поля ввода «ех»(того самого, что отмечено слева в форме списка регистра красными буквами «ех»). Чтобы однозначно определить владельца (не программным путем), для поля ввода «ex» заполняется поле, отмеченное на рисунке цифрой «1» — «Связь по владельцу», где указывается связь с полем «Номенклатура».

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

Допустим, поле «ЕХ» списка регистра нужно связать с владельцем-полем «Транспортная единица» (которое тоже является элементом справочника «Номенклатура»), если транспортная единица заполнена, а если не заполнена, то владелецем нужно считать значение в поле «Номенклатура» — см. указатель №3 на рисунке.

Как это реализовать?

Дело в том, что в таком случае поле 1 «Связь по владельцу» заполнять не нужно . Зато нужно в поле 2 «Начало выбора» указать процедуру, в которой будет программно определяться связь по владельцу с помощью директивы «ВыборПоВладельцу» .
Пример процедуры:

Процедура РегистрСведенийСписокЕдиницаХраненияНачалоВыбора(Элемент, СтандартнаяОбработка) // определим владельца текущей ЕХ Владелец = ЭлементыФормы. РегистрСведенийСписок. ТекущиеДанные. Номенклатура; Если ЗначениеЗаполнено(ЭлементыФормы. РегистрСведенийСписок. ТекущиеДанные. ТранспортнаяЕдиница) Тогда Если ЭлементыФормы. РегистрСведенийСписок. ТекущиеДанные. ТранспортнаяЕдиница. ТипНоменклатуры = Перечисления. усТипыНоменклатуры. Груз Тогда Владелец = ЭлементыФормы. РегистрСведенийСписок. ТекущиеДанные. ТранспортнаяЕдиница КонецЕсли ; КонецЕсли ; // зададим выбор по владельцу Элемент. ВыборПоВладельцу = Владелец; КонецПроцедуры

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

// создаем новый элемент справочника "ЕдиницыХранения": ЕХ = Справочники. ЕдиницыХранения. СоздатьЭлемент() ; // записываем ему владельца - сыслку на номенклатуру, где "Номенклатура" - элемент справочника "Номенклатура", определенный ранее ЕХ. Владелец = Номенклатура. Ссылка; // определяем наименование и другие реквизиты: ЕХ. Наименование = "Наше наименование" ; ЕХ. Коэффициент = 1 ; // ... - тут аналогично, все нужные реквизиты заполняем // собственно, записываем созданную единицу хранения в базу: ЕХ. Записать() ;

Информация взята с сайта

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

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

Чтобы избежать зависания, обычно назначают «Связь по владельцу». См. рисунок. Слева на рисунке — форма списка регистра, справа на рисунке — свойства поля ввода «ИСТ» (того самого, что отмечено слева в форме списка регистра красными буквами «ИСТ»). Чтобы однозначно определить владельца (не программным путем), для поля ввода «ИСТ» заполняется поле, отмеченное на рисунке цифрой «1» — «Связь по владельцу», где указывается связь с полем «Номенклатура».

Как программно установить связь по владельцу на форме?

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

К примеру, поле «ИСТ» списка регистра нужно связать с владельцем-полем «Транспортная единица» (которое тоже является элементом справочника «Номенклатура»), если транспортная единица заполнена, а если не заполнена, то владелецем нужно считать значение в поле «Номенклатура» — см. указатель №3 на рисунке.
Каким образом это реализовывается.
В данном случае поле 1 «Связь по владельцу» заполнять не нужно. Но при этом необходимо в поле 2 «Начало выбора» указать процедуру, в которой будет программно определяться связь по владельцу с помощью директивы «ВыборПоВладельцу».
Пример процедуры:

Процедура РегистрСведенийСписокЕдиницаХраненияНачалоВыбора(Элемент, СтандартнаяОбработка)

Владелец = ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.Номенклатура;
Если ЗначениеЗаполнено(ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница) Тогда
Если ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница.ТипНоменклатуры = Перечисления.усТипыНоменклатуры.Груз Тогда
Владелец = ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница
КонецЕсли;
КонецЕсли;

Элемент.ВыборПоВладельцу = Владелец;

КонецПроцедуры

Как программно добавить новый элемент справочника, если у него есть владелец

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

Это делается так:
// создаем новый элемент справочника "ЕдиницыХранения":
ИСТ = Справочники.ЕдиницыХранения.СоздатьЭлемент();
// записываем ему владельца — сыслку на номенклатуру, где "Номенклатура" — элемент справочника "Номенклатура", определенный ранее
ИСТ.Владелец = Номенклатура.Ссылка;
// определяем наименование и другие реквизиты:
ИСТ.Наименование = "единица АБС";
ИСТ.Коэффициент = 1;
//… заполняем остальные реквизиты
// собственно, записываем созданную единицу хранения в базу:
ИСТ.Записать();