В начало
Отбор номенклатуры
по группе
Есть документ [ПриходнаяНакладная] в котором
нужно осуществить отбор номенклатуры по группе. Также имеется справочник
Номенклатура, в котором записаны позиции товаров по группам.
Рис. Справочник
Номенклатура
Открываем или создаем форму документа, на форме находим
элемент (поле ввода), в котором будет происходить выбор номенклатуры. Далее в
свойствах элемента нужно найти или создать процедуру [НачалоВыбора],
в которой пишем код.
Листинг. Процедура [НачалоВыбора]
Процедура
НоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка
= Ложь;
ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(,
Элемент);
Если ЗначениеЗаполнено(Элемент.Значение) Тогда
ФВ.НачальноеЗначениеВыбора
= Элемент.Значение;
Иначе
ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр
= Истина;
ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель
= Справочники.Номенклатура.НайтиПоНаименованию("Электротовары"); //Поиск группы Электротовары по наименованию
//ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель
= Справочники.Номенклатура.НайтиПоКоду("000000008");
//Поиск группы Электротовары по коду
КонецЕсли;
ФВ.Открыть();
КонецПроцедуры
|
Затем загружаемся в режиме 1С:Предприятие и проверяем
работу отбора товаров по группе [Электротовары].
Рис. Результат отбора
номенклатуры по группе [Электротовары]
При таком варианте все же можно перейти в другую группу и
элементе формы [СправочникДерево], и в элементе [СправочникСписок].
Рис. Переход в другие
группы - возможен, элементы других групп – доступны
Конечно, можно изменить видимость или доступность
элемента формы [СправочникДерево], типа так как
показано ниже.
ФВ.ЭлементыФормы.СправочникДерево.Видимость = Ложь;
ФВ.ЭлементыФормы.СправочникДерево.Доступность = Ложь;
|
Но можно организовать отбор и по-другому.
Процедура
ОтборНоменклатурыПоВидуНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
ФВ.РежимВыбора = Истина;
ФВ.Отбор.ВидНоменклатуры.Использование = Истина;
ФВ.Отбор.ВидНоменклатуры.ВидСравнения = ВидСравнения.Равно;
ФВ.Отбор.ВидНоменклатуры.Значение =
"Электротовары";
//Или так:
//ФВ.Отбор.ВидНоменклатуры.Установить("Электротовары",
Истина);
ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель =
Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары
ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;
ФВ.Открыть();
КонецПроцедуры
|
ПРИМЕЧАНИЕ: при таком отборе есть один маленький
нюанс – сравниваемое поле [ВидНоменклатуры]
справочника [Номенклатура] не должно иметь неограниченную строковую длину
|
При этом, хоть и возможен переход из группы в группу, как
в элементах формы [СправочникДерево] и [СправочникСписок], но доступны для выбора только элементы группы
[Электротовары].
Рис. Элементы справочника в группе Обувь – недоступны
Также можно отключить видимость
иерархии дерева справочника и тип просмотра.
Листинг. Отключение некоторых свойств
ФВ.ЭлементыФормы.СправочникДерево.Видимость = Ложь;
ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
|
Результат показан ниже.
Рис. Элементы группы
Электротовары:
видимость дерева – Ложь;
иерархический просмотр - отключен
Выглядит
как то не очень, поэтому наверное лучше вернуть видимость дереву справочника,
но отключить его доступность и опять же убрать иерархию и выбрать для
наглядности группу в дереве, листинг показан ниже.
Листинг
Процедура
ОтборНоменклатурыПоВидуНачалоВыбора(Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);
ФВ.РежимВыбора = Истина;
ФВ.Отбор.ВидНоменклатуры.Установить("Электротовары",
Истина);
//Или так:
//ФВ.Отбор.ВидНоменклатуры.Использование
= Истина;
//ФВ.Отбор.ВидНоменклатуры.ВидСравнения
= ВидСравнения.Равно;
//ФВ.Отбор.ВидНоменклатуры.Значение
= "Электротовары";
ФВ.ЭлементыФормы.СправочникДерево.ТекущаяСтрока =
Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары
ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары
ФВ.ЭлементыФормы.СправочникДерево.Доступность = Ложь;
ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;
ФВ.ЭлементыФормы.СправочникСписок.Доступность = Истина;
ФВ.Открыть();
КонецПроцедуры
|
Таким образом, для наглядности показан выбранная группа
товаров [Электротовары] справочника [Номенклатура],
дерево недоступно для перемещений по нему, а выбор элементов справочника справа
от дерева доступен, иерархия в элементе формы выбора [СправочникСписок]
отключена.
Рис. Вывод элементов справочника по группе Электротовары:
доступность дерева – Ложь; доступность списка элементов -
Истина