Версия для печати темы (https://pro1c.org.ua/index.php?s=6ed02e56495a7c24f3c7e0a367b0c395&showtopic=4934)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Связь Списка с Деревом в Форма в 8.2

Автор: хакерок 03.10.11, 10:22

Допустим имнееться форма и в ней имееться 2 реквизита Дерево и Список (основная таблица например Справочники.Номенклатура)

В версии 8.1 была возможность СправочникСписок и СправочникДерево связать так что при выборе группы в дереве Список показывал содержимое группы.

Для этого достаточно было в СправочникеСписке Свойство Связь по родителю выставить СправочникДерево.ПриВыборе


В версии 8.2 только когда Список являеться основным реквизитом тогда в Форме можно указать что СписокГрупп Дерево


Вопрос как связать програмно Список и Дерево если Список не являеться основным реквизитом.

Тоесть в результате при выборе группы в Дереве в Списке отображалось то что в Группе.

Автор: logist 03.10.11, 10:36

В событии Выбор у Дерева прописать нужный отбор для Списка?

Автор: DartRomanius 03.10.11, 10:39

В списке... "Связь по родителю"

Автор: logist 03.10.11, 10:44

Цитата(DartRomanius @ 03.10.11, 11:39) *
В списке... "Связь по родителю"

Ткните пальцем где там такое есть, не нашел.

Автор: DartRomanius 03.10.11, 11:00

Цитата(logist @ 03.10.11, 11:44) *
Ткните пальцем где там такое есть, не нашел.


Свойства списка (на форме), раздел "Использование" последний пункт.

Автор: хакерок 03.10.11, 11:40

Цитата(DartRomanius @ 03.10.11, 11:39) http://pro1c.org.ua/index.php?act=findpost&pid=33298
В событии Выбор у Дерева прописать нужный отбор для Списка?

Именно таким путём и пошол сделаю выложу

Вот черновой вариант
&НаКлиенте
Процедура ДеревоПриАктивизацииСтроки(Элемент)
    
    СписокПрайсЛист.Отбор.Элементы.Очистить();
    ОтборСписка1 = СписокПрайсЛист.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСписка1.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Родитель");;
    ОтборСписка1.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ОтборСписка1.ПравоеЗначение = РаботаСПрайсЛистом.ПолучитьРодителяПоКоду(Элементы.Дерево.ТекущиеДанные.Код);
    ОтборСписка1.Использование  = Истина;
    
    ОтборСписка2 = СписокПрайсЛист.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборСписка2.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ЭтоГруппа");;
    ОтборСписка2.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    ОтборСписка2.ПравоеЗначение = Ложь;
    ОтборСписка2.Использование  = Истина;
    
КонецПроцедуры

Автор: logist 03.10.11, 11:54

Цитата(DartRomanius @ 03.10.11, 12:00) *
Свойства списка (на форме), раздел "Использование" последний пункт.

Если Вас не затруднит, можно скрин. Ну в упор не вижу sad.gif

Автор: DartRomanius 03.10.11, 12:04

Цитата(logist @ 03.10.11, 12:54) *
Если Вас не затруднит, можно скрин. Ну в упор не вижу sad.gif


Пожалуйста.

Автор: хакерок 03.10.11, 12:16

Цитата(DartRomanius @ 03.10.11, 13:04) *
Пожалуйста.

Это версия 8.1 приспособленная к 8.2

Автор: Vofka 03.10.11, 12:17

Цитата
Это версия 8.1 приспособленная к 8.2

Это версия 8.2, а не управляемое приложение. Но про это ведь говорить не стоит.

Автор: DartRomanius 03.10.11, 13:47

Это для управляемого приложения. Предыдущий вариант был для "обычного".

Автор: хакерок 03.10.11, 14:30

x

Автор: DartRomanius 03.10.11, 14:46

Согласен. Туплю.

Автор: хакерок 04.10.11, 11:29

Цитата(DartRomanius @ 03.10.11, 15:46) *
Согласен. Туплю.

Разобрался с этим вопросом можно поступить 2 способами

1 С помощью Отбора оно работет дольше

2 Можно для реквизита Список зделать произвольній запрос

например
ВЫБРАТЬ
    СправочникПрайсЛист.Ссылка,
    СправочникПрайсЛист.ВерсияДанных,
    СправочникПрайсЛист.ПометкаУдаления,
    СправочникПрайсЛист.Предопределенный,
    СправочникПрайсЛист.Родитель,
    СправочникПрайсЛист.ЭтоГруппа,
    СправочникПрайсЛист.Код,
    СправочникПрайсЛист.Наименование,
    СправочникПрайсЛист.Уточнение,
    СправочникПрайсЛист.ЦенаОпт,
    СправочникПрайсЛист.Цена,
    СправочникПрайсЛист.Валюта,
    СправочникПрайсЛист.Производитель,
    СправочникПрайсЛист.НомерНаУпаковке,
    СправочникПрайсЛист.НомерОсновной,
    СправочникПрайсЛист.Код1,
    СправочникПрайсЛист.Код2,
    СправочникПрайсЛист.Код3,
    СправочникПрайсЛист.Аналог,
    СправочникПрайсЛист.ПоисковыйКод,
    СправочникПрайсЛист.ВозможностьСкидки,
    СправочникПрайсЛист.МинимальныйЗапас,
    СправочникПрайсЛист.Поставщик,
    СправочникПрайсЛист.Примечание,
    СправочникПрайсЛист.Сортировка
ИЗ
    Справочник.ПрайсЛист КАК СправочникПрайсЛист
ГДЕ
    СправочникПрайсЛист.Родитель.Код = &КодГруппы


И при активизации строки Дерева

&НаКлиенте
Процедура ДеревоПриАктивизацииСтроки(Элемент)
    Если Не Элементы.Дерево.ТекущиеДанные = Неопределено  Тогда
        СписокПрайсЛист.Параметры.УстановитьЗначениеПараметра("КодГруппы", Элементы.Дерево.ТекущиеДанные.Код);
    КонецЕсли;
КонецПроцедуры

Автор: Vofka 04.10.11, 11:58

хакерок, плюсую за то, что выкладываете результаты работы (код) smile.gif

Автор: хакерок 30.09.15, 21:56

Цитата(хакерок @ 04.10.11, 12:29) *
Разобрался с этим вопросом можно поступить 2 способами

1 С помощью Отбора оно работет дольше

2 Можно для реквизита Список зделать произвольній запрос

например
ВЫБРАТЬ
    СправочникПрайсЛист.Ссылка,
    СправочникПрайсЛист.ВерсияДанных,
    СправочникПрайсЛист.ПометкаУдаления,
    СправочникПрайсЛист.Предопределенный,
    СправочникПрайсЛист.Родитель,
    СправочникПрайсЛист.ЭтоГруппа,
    СправочникПрайсЛист.Код,
    СправочникПрайсЛист.Наименование,
    СправочникПрайсЛист.Уточнение,
    СправочникПрайсЛист.ЦенаОпт,
    СправочникПрайсЛист.Цена,
    СправочникПрайсЛист.Валюта,
    СправочникПрайсЛист.Производитель,
    СправочникПрайсЛист.НомерНаУпаковке,
    СправочникПрайсЛист.НомерОсновной,
    СправочникПрайсЛист.Код1,
    СправочникПрайсЛист.Код2,
    СправочникПрайсЛист.Код3,
    СправочникПрайсЛист.Аналог,
    СправочникПрайсЛист.ПоисковыйКод,
    СправочникПрайсЛист.ВозможностьСкидки,
    СправочникПрайсЛист.МинимальныйЗапас,
    СправочникПрайсЛист.Поставщик,
    СправочникПрайсЛист.Примечание,
    СправочникПрайсЛист.Сортировка
ИЗ
    Справочник.ПрайсЛист КАК СправочникПрайсЛист
ГДЕ
    СправочникПрайсЛист.Родитель.Код = &КодГруппы


И при активизации строки Дерева

&НаКлиенте
Процедура ДеревоПриАктивизацииСтроки(Элемент)
    Если Не Элементы.Дерево.ТекущиеДанные = Неопределено  Тогда
        СписокПрайсЛист.Параметры.УстановитьЗначениеПараметра("КодГруппы", Элементы.Дерево.ТекущиеДанные.Код);
    КонецЕсли;
КонецПроцедуры


В этом примере есть недостаток лучше связь Дерева и Списка делать не по Коду а по Ссылке ... с ссылками платформе лучше работать

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua