Имя: Пароль:
1C
1С v8
Связать два динамических списка
0 lg2marvel
 
14.02.18
12:36
Всем привет. Думаю довольно стандартная задача, есть два динамических списка на форме и соответственно 2 справочника, один подчинен другому.
Нужно установить отбор в динамическом списке в котором отображается подчиненный справочник.
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    Если Элемент.ТекущиеДанные <> Неопределено Тогда
        ТД = Элемент.ТекущиеДанные;
        СсылкаНаВладельца = ????;
        Модификации.Параметры.УстановитьЗначениеПараметра("Владелец",СсылкаНаВладельца);
    КонецЕсли;

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

Немогу понять как получить ссылку на владельца. Понимаю что надо брать на сервере.
Создаю процедуру

&НаСервереБезКонтекста
Процедура СписокПриАктивизацииСтрокиНаСервере()
    
КонецПроцедуры

А как получить данные не понимаю
1 lg2marvel
 
14.02.18
12:40
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    Если Элемент.ТекущиеДанные <> Неопределено Тогда
        ТД = Элемент.ТекущиеДанные;
        СсылкаНаВладельца = СписокПриАктивизацииСтрокиНаСервере(ТД);
        Модификации.Параметры.УстановитьЗначениеПараметра("Владелец",СсылкаНаВладельца);
    КонецЕсли;

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

&НаСервереБезКонтекста
Функция СписокПриАктивизацииСтрокиНаСервере(Данные)
    Возврат Данные.Ссылка;
КонецФункции

Ошибка, Ссылка - нет такого реквизита
2 LordCMEPTb
 
14.02.18
12:42
А если в режиме отладки поставить точку останова на строке "ТД = Элемент.ТекущиеДанные;" и глянуть, что же находится в переменной ТД?
3 zuza
 
14.02.18
12:42
(1) а если &НаСервере вместо &НаСервереБезКонтекста
4 LordCMEPTb
 
14.02.18
12:46
(3) Для получения значения без разницы, в текущих данных либо уже будет ссылка, либо список выведенных реквизитов (+ те, что получаются всегда).
5 lg2marvel
 
14.02.18
12:51
(3)

&НаСервереБезКонтекста
Функция СписокПриАктивизацииСтрокиНаСервере(Данные)
    Возврат Данные.Ссылка;
КонецФункции


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

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

{Справочник.Оборудование.Форма.ФормаСписка.Форма(4)}: Поле объекта не обнаружено (Ссылка)
    Возврат Данные.Ссылка;
6 lg2marvel
 
14.02.18
12:53
(3) Если просто НаСевере, Как будто ушло в закцикливание при открытии формы и выкинуло
7 lg2marvel
 
14.02.18
12:56
(2) Хм, Вы правы, надо было сразу проверять отладчиком. Есть только Наименование
8 dezss
 
14.02.18
12:57
(3) нельзя так делать ПриАктивизацииСтроки
9 LordCMEPTb
 
14.02.18
13:04
(7) Это уже лучше.
(8) Если нельзя, но очень хочется, то можно.
По делу. В динамическом списке владельцев надо либо вывести ссылку, либо поставить флажок "Использовать всегда".
Для смены параметра динамического списка вроде нужен серверный вызов (если я правильно понимаю, он будет контекстным). Как правильно сказал dezss, так делать нельзя, а потому в процедуре при активации лучше подключить обработчик ожидания, в котором уже вызвать процедуру с установкой нужного владельца, чтобы в бесконечный цикл не ушло.
10 lg2marvel
 
14.02.18
13:05
(9) Спасибо буду пробовать
11 Вафель
 
14.02.18
13:06
ПриАктивизации лучше делать через обработчик ожидания
12 lg2marvel
 
14.02.18
13:22
(11) (8) спасибо. в процессе ;-)
13 FIXXXL
 
15.02.18
09:18
(9) не обяз сервер дергать

Синтаксис:
УстановитьЗначениеПараметра(<Параметр>, <Значение>)

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
--------------------------------------------------------------------------------

но можно посмотреть, будет ли неявный вызов :)
14 Dilgorp
 
15.02.18
09:43
Динамический список (если есть основная таблица - справочник) в
Элементы.Список.ТекущаяСтрока
всегда имеет ссылку на элемент справочника

достаточно будет при активизации строки списка 1

Список2.Отбор.Элементы.Очистить();

ЭлементОтбора = Список2.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("ИмяПоля");
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ПравоеЗначение;
ЭлементОтбора.Использование  = Истина;
15 Dilgorp
 
15.02.18
09:47
(14) небольшое уточнение
Элементы.Список.ТекущаяСтрока
будет Неопределено, если список пуст
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс