В начало

Отбор номенклатуры по группе

 

            Есть документ [ПриходнаяНакладная] в котором нужно осуществить отбор номенклатуры по группе. Также имеется справочник Номенклатура, в котором записаны позиции товаров по группам.

Рис. Справочник Номенклатура

            Открываем или создаем форму документа, на форме находим элемент (поле ввода), в котором будет происходить выбор номенклатуры. Далее в свойствах элемента нужно найти или создать процедуру [НачалоВыбора], в которой пишем код.

Листинг. Процедура [НачалоВыбора]

Процедура НоменклатураНачалоВыбора(Элемент, СтандартнаяОбработка)

            СтандартнаяОбработка = Ложь;

            ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);

           

            Если ЗначениеЗаполнено(Элемент.Значение) Тогда

                        ФВ.НачальноеЗначениеВыбора = Элемент.Значение;

            Иначе

                        ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;

                       ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоНаименованию("Электротовары"); //Поиск группы Электротовары по наименованию

//ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоКоду("000000008"); //Поиск группы Электротовары по коду

            КонецЕсли;

           

            ФВ.Открыть();         

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

 

            Затем загружаемся в режиме 1С:Предприятие и проверяем работу отбора товаров по группе [Электротовары].

Рис. Результат отбора номенклатуры по группе [Электротовары]

            При таком варианте все же можно перейти в другую группу и элементе формы [СправочникДерево],  и в элементе [СправочникСписок].

Рис. Переход в другие группы - возможен, элементы других групп – доступны

            Конечно, можно изменить видимость или доступность элемента формы [СправочникДерево], типа так как показано ниже.

ФВ.ЭлементыФормы.СправочникДерево.Видимость = Ложь;

ФВ.ЭлементыФормы.СправочникДерево.Доступность = Ложь;

            Но можно организовать отбор и по-другому.

Процедура ОтборНоменклатурыПоВидуНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

 

ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);

ФВ.РежимВыбора = Истина;

 

ФВ.Отбор.ВидНоменклатуры.Использование = Истина;

ФВ.Отбор.ВидНоменклатуры.ВидСравнения = ВидСравнения.Равно;

ФВ.Отбор.ВидНоменклатуры.Значение = "Электротовары";

 

//Или так:

//ФВ.Отбор.ВидНоменклатуры.Установить("Электротовары", Истина);

 

ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары

ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Истина;

ФВ.Открыть();

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

ПРИМЕЧАНИЕ: при таком отборе есть один маленький нюанс – сравниваемое поле [ВидНоменклатуры] справочника [Номенклатура] не должно иметь неограниченную строковую длину

 

            При этом, хоть и возможен переход из группы в группу, как в элементах формы [СправочникДерево] и [СправочникСписок], но доступны для выбора только элементы группы [Электротовары].

Рис. Элементы справочника в группе Обувь – недоступны

            Также можно отключить видимость иерархии дерева справочника и тип просмотра.

 

Листинг. Отключение некоторых свойств

ФВ.ЭлементыФормы.СправочникДерево.Видимость = Ложь;

ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;

            Результат показан ниже.

Рис. Элементы группы Электротовары:

видимость дерева – Ложь; иерархический просмотр - отключен

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

Листинг

Процедура ОтборНоменклатурыПоВидуНачалоВыбора(Элемент, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

 

ФВ = Справочники.Номенклатура.ПолучитьФормуВыбора(, Элемент);

ФВ.РежимВыбора = Истина;

 

ФВ.Отбор.ВидНоменклатуры.Установить("Электротовары", Истина);

 

//Или так:

//ФВ.Отбор.ВидНоменклатуры.Использование = Истина;

//ФВ.Отбор.ВидНоменклатуры.ВидСравнения = ВидСравнения.Равно;

//ФВ.Отбор.ВидНоменклатуры.Значение = "Электротовары";

 

ФВ.ЭлементыФормы.СправочникДерево.ТекущаяСтрока = Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары

ФВ.ЭлементыФормы.СправочникСписок.ТекущийРодитель = Справочники.Номенклатура.НайтиПоКоду("000000008");//Электротовары

 

ФВ.ЭлементыФормы.СправочникДерево.Доступность = Ложь;

ФВ.ЭлементыФормы.СправочникСписок.ИерархическийПросмотр = Ложь;

ФВ.ЭлементыФормы.СправочникСписок.Доступность = Истина;

ФВ.Открыть();

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

 

            Таким образом, для наглядности показан выбранная группа товаров [Электротовары]  справочника [Номенклатура], дерево недоступно для перемещений по нему, а выбор элементов справочника справа от дерева доступен, иерархия в элементе формы выбора [СправочникСписок] отключена.

Рис. Вывод элементов справочника по группе Электротовары:

доступность дерева – Ложь; доступность списка элементов - Истина