Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сделать отбор по назначению свойства?
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
ljuter
Как в стандартной форме выбора свойства номенклатуры сделать отбор по его назначению. В форме выбора добавлено поле "ГруппаНоменклатуры". При выборе группы номенклатуры нужно в табличном поле "ПланВидовХарактеристикСписок" отобразить только свойства у которых в назначении указана эта группа номенклатуры.
Делал так, но в списке выбора отображаются все свойства:
//ГруппаНоменклатуры - это поле ввода типа СправочникСсылка.Номенклатура
//ПланВидовХарактеристикСписок - это табличное поле типа
//ПланВидовХарактеристикСписок.СвойстваОбъектов
Процедура ГруппаНоменклатурыПриИзменении(Элемент)
    Запрос = Новый Запрос();
    Запрос.Текст = "ВЫБРАТЬ
    |    НазначенияСвойств.Свойство
    |ИЗ
    |    РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойств
    |ГДЕ
    |    НазначенияСвойств.Объект = &НазначенныйОбъект";
    Запрос.УстановитьПараметр("НазначенныйОбъект", ГруппаНоменклатуры);
    ПланВидовХарактеристикСписок = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
Batchir
Поробуйте
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Установить(<ЗначениеРеквизита>);

Или эту конструкцию
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.ВидСравнения = ВидСравнения.<ВыбранныйВид>;
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Значение = <ЗначениеРеквизита>;
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Использовать = Истина;
ljuter
Цитата(Batchir @ 12.04.10, 7:29) необходимо зарегистрироваться для просмотра ссылки
Поробуйте
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Установить(<ЗначениеРеквизита>);

Или эту конструкцию
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.ВидСравнения = ВидСравнения.<ВыбранныйВид>;
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Значение = <ЗначениеРеквизита>;
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Использовать = Истина;

Что указывать в <РеквизитОтбора>? Т.е. я понимаю, что это должен быть <Объект> из РегистрыСведений.НазначенияСвойствОбъектов, но как его указать в качестве <РеквизитОтбора>?
Вобщем в качестве <РеквизитОтбора> в данном случае не получается установить поле Объект регистра сведений НазначенияСвойствОбъектов. Чтобы сделать отбор по регистру сведений пришлось изменить тип значения табличного поля на <РегистрСведенийСписок>. Но теперь не могу дополнительно поставить отбор по реквизиту свойства. Как установить отбор по назначению свойства и его реквизиту в одном табличном поле?

ФормаВыбора
Тип - ПланВидовХарактеристикСписок.СвойстваОбъектов

Поле ввода ГруппаНоменклатуры
Тип - СправочникСсылка.Номенклатура

Табличное поле ПланВидовХарактеристикСписок
Тип - ПланВидовХарактеристикСписок.СвойстваОбъектов

В табличном поле отображаются все свойства. При выборе группы номенклатуры в поле ГруппаНоменклатуры в табличном поле должны отображаться только свойства в назначении которых указана эта группа номенклатуры. Также устанавливается отбор по реквизиту свойства "ТипХарактеристики" (этот реквизит в конфу добавлен мной). Отбор по реквизиту в данном случае у меня не вызывает сложности, но никак не могу добавить в табличное поле отбор по назначению свойства. В принципе, если установить тип табличного поля РегистрСведенийСписок.НазначенияСвойствОбъектов, то отбор свойств по назначению также не вызывает трудностей, но в таком случае не могу установить отбор по реквизиту свойства...
Batchir
Что то я туго сегодня соображаю, наверно после бурных выходных.
Отбор списка можно осуществить только по реквизиту, т.е если хотите делать дополнительный отбор, то нужно добавить соответствующий реквизит и заполнить его, а потом уже использовать
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Установить(<ЗначениеРеквизита>);

или кидать на форму таблицу значений и запросом заполнять её. Потом вешать всякие обработчики
ljuter
Цитата(Batchir @ 12.04.10, 13:27) необходимо зарегистрироваться для просмотра ссылки
Что то я туго сегодня соображаю, наверно после бурных выходных.
Отбор списка можно осуществить только по реквизиту, т.е если хотите делать дополнительный отбор, то нужно добавить соответствующий реквизит и заполнить его, а потом уже использовать
ЭлементыФормы.ПланВидовХарактеристикСписок.Отбор.<РеквизитОтбора>.Установить(<ЗначениеРеквизита>);

или кидать на форму таблицу значений и запросом заполнять её. Потом вешать всякие обработчики


Спасибо за участие, но все-таки можно сделать: делаем выборку свойств, а потом устанавливаем отбор по наименованию из списка выбранных свойств
Процедура УстановкаОтбораГруппСвойствОбъектов()
//    Удаляем параметры отбора
    ПланВидовХарактеристикСписок.Отбор.Сбросить();
//    Делаем выборку свойств из регистра сведений НазначенияСвойствОбъектов по группе
//    номенклатуры из элемента формы ГруппаНоменклатуры. В результате получаем список
//    наименований свойств (нам нужны именно поле Наименование свойства, а не ссылка
//    на само свойство!
    Список = Новый СписокЗначений();    
    РегСв = РегистрыСведений.НазначенияСвойствОбъектов;
    ОтборСв = Новый Структура("Объект");
    ОтборСв["Объект"] = ГруппаНоменклатуры;
    ВыборкаСв = РегСв.Выбрать(ОтборСв);
    Пока ВыборкаСв.Следующий() Цикл
        Если ВыборкаСв.Свойство.ТипХарактеристики = "G" Тогда
            Список.Добавить(ВыборкаСв.Свойство.Наименование, ВыборкаСв.Свойство.Наименование, Ложь);    
        КонецЕсли;
    КонецЦикла;
//    Устанавливаем вид сравнения для отбора типа "В списке" и выгружаем значения
//    из списка выборки в список отбора.    
    ПланВидовХарактеристикСписок.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;    
    ПланВидовХарактеристикСписок.Отбор.Наименование.Значение.ЗагрузитьЗначения(Список.ВыгрузитьЗначения());
    ПланВидовХарактеристикСписок.Отбор.Наименование.Установить();
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.