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