Как программно установить связь по владельцу в форме. Как программно добавить новый элемент справочника, если у него есть владелец (1С: Программисту)
Вопрос
Как установить связь по владельцу в форме?
Ответ
Предположим, что где-то, например, в форме списка регистра, требуется дать пользователю возможность интерактивно указать единицу хранения номенклатуры. «Номенклатура» — это справочник. «Единица хранения» — справочник, подчиненный номенклатуре. Справочник «Номенклатура» обычно содержит очень много элементов. Если мы в форме списка регистра, просто добавим две графы — «Номенклатура» и «Единица хранения», то при попытке интерактивно выбрать «единицу хранения» будет происходить зависание. Мы уже писали об этом в статье «Как установить выбор подчиненного элемента справочника» А тут рассмотрим задачу немного в другом ракурсе.
Чтобы не происходило зависания, обычно назначают «Связь по владельцу». См. рисунок. Слева на рисунке — форма списка регистра, справа на рисунке — свойства поля ввода «ех»(того самого, что отмечено слева в форме списка регистра красными буквами «ех»). Чтобы однозначно определить владельца (не программным путем), для поля ввода «ex» заполняется поле, отмеченное на рисунке цифрой «1» — «Связь по владельцу», где указывается связь с полем «Номенклатура».
Вопрос
Как программно установить связь по владельцу в форме?
Ответ
Однако, бывает так, что владельца нужно установить программно, в зависимости от какого-то условия.
Допустим, поле «ЕХ» списка регистра нужно связать с владельцем-полем «Транспортная единица» (которое тоже является элементом справочника «Номенклатура»), если транспортная единица заполнена, а если не заполнена, то владелецем нужно считать значение в поле «Номенклатура» — см. указатель №3 на рисунке.
Как это реализовать?
Дело в том, что в таком случае поле 1 «Связь по владельцу» заполнять не нужно
. Зато нужно в поле 2 «Начало выбора» указать процедуру, в которой будет программно определяться связь по владельцу с помощью директивы «ВыборПоВладельцу»
.
Пример процедуры:
Вопрос
Как программно добавить новый элемент справочника, если у него есть владелец.
Ответ
Допустим, требуется создать программным путем новый элемент справочника «Единицы хранения», у которого во владельцах — справочник «Номенклатура»
Это делается так:
Информация взята с сайта
Допустим, что в форме списка регистра, необходимо предоставить пользователю возможность интерактивно указать единицу хранения номенклатуры. «Номенклатура» — это справочник. «Единица хранения» — справочник, подчиненный номенклатуре. Справочник «Номенклатура» обычно содержит много элементов. Если мы в форме списка регистра, просто добавим две графы — «Номенклатура» и «Единица хранения», то при попытке интерактивно выбрать «единицу хранения» будет происходить зависание.
Рассмотрим задачу немного в другом ракурсе.
Чтобы избежать зависания, обычно назначают «Связь по владельцу». См. рисунок. Слева на рисунке — форма списка регистра, справа на рисунке — свойства поля ввода «ИСТ» (того самого, что отмечено слева в форме списка регистра красными буквами «ИСТ»). Чтобы однозначно определить владельца (не программным путем), для поля ввода «ИСТ» заполняется поле, отмеченное на рисунке цифрой «1» — «Связь по владельцу», где указывается связь с полем «Номенклатура».
Как программно установить связь по владельцу на форме?
Порой бывает, что владельца нужно установить программно, в зависимости от какого-то условия.
К примеру, поле «ИСТ» списка регистра нужно связать с владельцем-полем «Транспортная единица» (которое тоже является элементом справочника «Номенклатура»), если транспортная единица заполнена, а если не заполнена, то владелецем нужно считать значение в поле «Номенклатура» — см. указатель №3 на рисунке.
Каким образом это реализовывается.
В данном случае поле 1 «Связь по владельцу» заполнять не нужно. Но при этом необходимо в поле 2 «Начало выбора» указать процедуру, в которой будет программно определяться связь по владельцу с помощью директивы «ВыборПоВладельцу».
Пример процедуры:
Процедура РегистрСведенийСписокЕдиницаХраненияНачалоВыбора(Элемент, СтандартнаяОбработка)
Владелец = ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.Номенклатура;
Если ЗначениеЗаполнено(ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница) Тогда
Если ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница.ТипНоменклатуры = Перечисления.усТипыНоменклатуры.Груз Тогда
Владелец = ЭлементыФормы.РегистрСведенийСписок.ТекущиеДанные.ТранспортнаяЕдиница
КонецЕсли;
КонецЕсли;
Элемент.ВыборПоВладельцу = Владелец;
КонецПроцедуры
Как программно добавить новый элемент справочника, если у него есть владелец
Нам требуется создать программным путем новый элемент справочника «Единицы хранения», владельцем которого является — справочник «Номенклатура»
Это делается так:
// создаем новый элемент справочника "ЕдиницыХранения":
ИСТ = Справочники.ЕдиницыХранения.СоздатьЭлемент();
// записываем ему владельца — сыслку на номенклатуру, где "Номенклатура" — элемент справочника "Номенклатура", определенный ранее
ИСТ.Владелец = Номенклатура.Ссылка;
// определяем наименование и другие реквизиты:
ИСТ.Наименование = "единица АБС";
ИСТ.Коэффициент = 1;
//… заполняем остальные реквизиты
// собственно, записываем созданную единицу хранения в базу:
ИСТ.Записать();