helpf.pro
Регистрация

Как сделать отбор по назначению свойства?

ljuter
12.04.2010 02:20Прочитано: 10968
Как в стандартной форме выбора свойства номенклатуры сделать отбор по его назначению. В форме выбора добавлено поле "ГруппаНоменклатуры". При выборе группы номенклатуры нужно в табличном поле "ПланВидовХарактеристикСписок" отобразить только свойства у которых в назначении указана эта группа номенклатуры.
Делал так, но в списке выбора отображаются все свойства:
Код 1C v 8.х
 
//ГруппаНоменклатуры - это поле ввода типа СправочникСсылка.Номенклатура
//ПланВидовХарактеристикСписок - это табличное поле типа
//ПланВидовХарактеристикСписок.СвойстваОбъектов
Процедура ГруппаНоменклатурыПриИзменении(Элемент)
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| НазначенияСвойств.Свойство
|ИЗ
| РегистрСведений.НазначенияСвойствОбъектов КАК НазначенияСвойств
|ГДЕ
| НазначенияСвойств.Объект = &НазначенныйОбъект";
Запрос.УстановитьПараметр("НазначенныйОбъект", ГруппаНоменклатуры);
ПланВидовХарактеристикСписок = Запрос.Выполнить().Выгрузить();
КонецПроцедуры
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
12.04.2010 09:47Ответ № 1
Не совсем понятно, что ты хотел сделать приведенным кодом, но по сути ты присвоил ПланВидовХарактеристикСписок - Таблицу значений результата запроса.

Вот посмотри примеры, как устанавливается отбор
Пример 1
Пример 2
ljuter
12.04.2010 10:36Ответ № 2
Изначально пробывал делать отбор, но как сделать отбор в одном табличном поле по назначению свойства и его реквизиту? Назначения свойства хранятся в РегистрыСведений.НазначенияСвойствОбъектов, а реквизиты в ПланыВидовХарактеристик.СвойстваОбъектов.
E_Migachev
12.04.2010 10:49Ответ № 3
В табличном поле отображаются данные из регистра сведений?
Какие свойства Таб Поля? тип данных, связь?
ljuter
12.04.2010 11:19Ответ № 4
ФормаВыбора
Тип - ПланВидовХарактеристикСписок.СвойстваОбъектов

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

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

В табличном поле отображаются все свойства. При выборе группы номенклатуры в поле ГруппаНоменклатуры в табличном поле должны отображаться только свойства в назначении которых указана эта группа номенклатуры. Также устанавливается отбор по реквизиту свойства "ТипХарактеристики" (этот реквизит в конфу добавлен мной). Отбор по реквизиту в данном случае у меня не вызывает сложности, но никак не могу добавить в табличное поле отбор по назначению свойства. В принципе, если установить тип табличного поля РегистрСведенийСписок.НазначенияСвойствОбъектов, то отбор свойств по назначению также не вызывает трудностей, но в таком случае не могу установить отбор по реквизиту свойства...
E_Migachev
12.04.2010 12:01Ответ № 5
Поопробуй на поле щелкнуть правой клавишей мыши - Установить отбор, и там можешь установить отбор который тебя интересует? если да то пропиши ПриИзмененииГруппыНоменклатуры установить отбор в табличном поле и примеров как выше
и все.

Цитата
не могу добавить в табличное поле отбор по назначению свойства

В чем сложность?
ljuter
12.04.2010 12:27Ответ № 6
Сложность в том, что не могу добавить в табличное поле отбор по назначению свойства и реквизиту этого свойства.
Вот текст процедуры, элементы формы и их типы указаны в предыдущем моем посте:
Код 1C v 8.х
 Процедура ГруппаНоменклатурыПриИзменении(Элемент)
ПланВидовХарактеристикСписок.Отбор.ТипХарактеристики.ВидСравнения = ВидСравнения.Равно;
ПланВидовХарактеристикСписок.Отбор.ТипХарактеристики.Значение = "G";
ПланВидовХарактеристикСписок.Отбор.ТипХарактеристики.Установить();
КонецПроцедуры

ТипХарактеристики - это реквизит свойства по которому устанавливается отбор. Помимо этого отбора нужно установить отбор по назначению свойства. Назначения свойства хранятся в соответствующем регистре сведений. Дело в том, что табличное поле типа ПланВидовХарактеристикСписок.СвойстваОбъектов.
E_Migachev
12.04.2010 13:13Ответ № 7
Сделал отбор по реквизиту, так же сделай отбор и по свойству
ljuter
12.04.2010 14:00Ответ № 8
Мне нужен отбор не по свойству, а по назначению свойства. Назначения свойства хранятся в соответствующем регистре сведений. Как эти назначения оттуда достать и сделать по ним отбор? Дело в том, что табличное поле типа ПланВидовХарактеристикСписок.СвойстваОбъектов и поэтому в отборе не доступны поля из регистра сведений НазначенияСвойствОбъектов.
E_Migachev
12.04.2010 15:36Ответ № 9
Сделал отбор по реквизиту, так же сделай отбор и по свойству
E_Migachev
12.04.2010 15:41Ответ № 10
Достаешь значение из регистра сведений запросом, и далее приводишь как-то так чтобы можно было задать отбор, а ты в программе ручками можешь установить отбор?

Сложно тебе так посоветовать *11, нужно видеть где и как делаешь *09
ljuter
12.04.2010 16:43Ответ № 11
Сделал.
Код 1C v 8.х
 Процедура УстановкаОтбораГруппСвойствОбъектов()
// Удаляем параметры отбора
ПланВидовХарактеристикСписок.Отбор.Сбросить();
// Делаем выборку свойств из регистра сведений НазначенияСвойствОбъектов по группе
// номенклатуры из элемента формы ГруппаНоменклатуры. В результате получаем список
// наименований свойств (нам нужны именно поле Наименование свойства, а не ссылка
// на само свойство!
Список = Новый СписокЗначений();
РегСв = РегистрыСведений.НазначенияСвойствОбъектов;
ОтборСв = Новый Структура("Объект");
ОтборСв["Объект"] = ГруппаНоменклатуры;
ВыборкаСв = РегСв.Выбрать(ОтборСв);
Пока ВыборкаСв.Следующий() Цикл
Если ВыборкаСв.Свойство.ТипХарактеристики = "G" Тогда
Список.Добавить(ВыборкаСв.Свойство.Наименование, ВыборкаСв.Свойство.Наименование, Ложь);
КонецЕсли;
КонецЦикла;
// Устанавливаем вид сравнения для отбора типа "В списке" и выгружаем значения
// из списка выборки в список отбора.
ПланВидовХарактеристикСписок.Отбор.Наименование.ВидСравнения = ВидСравнения.ВСписке;
ПланВидовХарактеристикСписок.Отбор.Наименование.Значение.ЗагрузитьЗначения(Список.ВыгрузитьЗначения());
ПланВидовХарактеристикСписок.Отбор.Наименование.Установить();
КонецПроцедуры
E_Migachev
12.04.2010 16:52Ответ № 12
Вот это я и имел ввиду, поздравляю )
А где ТипХарактеристики?
E_Migachev
23.04.2010 08:48Ответ № 13
Вопрос закрыт!
Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.