Имя: Пароль:
1C
1С v8
Как передать в отбор результат запроса?
0 svird
 
13.01.17
11:31
Нашел что то тут, а оно у меня не работает:
    ТЗ             = Запрос.Выполнить().Выгрузить();
    Ск             = Новый Структура;
    Для каждого КолонкаТЗ Из ТЗ.Колонки Цикл
        Ск.Вставить("Ссылка", ТЗ[0][КолонкаТЗ.Физлицо]);
    КонецЦикла;
    ПараметрыФормы.Вставить("Отбор", Ск);
1 svird
 
13.01.17
11:35
Где глянуть, как в структуру результат запроса передать?
2 shamannk
 
13.01.17
11:43
Попробуйте спросить не решение которое у вас не работает а описать проблему.
3 svird
 
13.01.17
11:48
ну у меня все просто, я в реквизит хочу выбрать физлиц которых получил запросом. В управляемых формах. Я попробывал так:     ПараметрыФормы.Вставить("Отбор", Новый Структура("Ссылка", Справочники.ФизическиеЛица.НайтиПоРеквизиту("ТабельныйНомерУпр","02585")));
Все работает. Теперь хочу кинуть туда из запроса список физлиц. И никак не разберусь.
4 azernot
 
13.01.17
11:53
Ск.Вставить("Ссылка", ТЗ[0][КолонкаТЗ.Физлицо])

А разве он тут не вываливается по синтаксической ошибке?
5 svird
 
13.01.17
11:55
вываливается, я уже как не крутил, никак не разберусь, эту конструкцию взял отсюда: v8: Строку ТаблицыЗначений выгрузить в структуру. можно? в самом низу там.
6 azernot
 
13.01.17
11:59
Если твоя цель передать Физлицо из первой(!) строки результата запроса, то:

ТЗ             = Запрос.Выполнить().Выгрузить();
Ск             = Новый Структура;
Если ТЗ.Количество()>0 Тогда
Ск.Вставить("Ссылка", ТЗ[0].Физлицо);
КонецЕсли;
ПараметрыФормы.Вставить("Отбор", Ск);
7 svird
 
13.01.17
12:02
(6) Сорри, мне надо всю колонку из запроса туда засунуть, что бы в форме можно было бы выбрать кого то из разрешенных.
8 azernot
 
13.01.17
12:07
(7) Если в форме, в которую ты передаёшь отбор, отдельно не прописана возможность обработки списка или массива в отборе, то не взлетит.
По умолчанию, в структуре отбора вид сравнения всегда "Равно".

Но, если хочешь, убедись:

ТЗ             = Запрос.Выполнить().Выгрузить();
Ск             = Новый Структура;
Ск.Вставить("Ссылка", ТЗ.ВыгрузитьКолонку("Физлицо"));

ПараметрыФормы.Вставить("Отбор", Ск);
9 azernot
 
13.01.17
12:11
Но вообще, нужно делать так:

ТЗ             = Запрос.Выполнить().Выгрузить();
ПараметрыФормы.Вставить("ФильтрПоСсылке", ТЗ.ВыгрузитьКолонку("Физлицо"));


В форме выбора:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Перем ЗначениеИзСтруктуры;
    Если Параметры.Свойство("ФильтрПоСсылке", ЗначениеИзСтруктуры) Тогда
        
        НовыйЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
        НовыйЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.ВСписке;
        НовыйЭлементОтбора.ПравоеЗначение   = ЗначениеИзСтруктуры;
        НовыйЭлементОтбора.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы;
    КонецЕсли;

КонецПроцедуры
10 Aleksandr N
 
13.01.17
12:22
(9) нет
11 azernot
 
13.01.17
12:29
(10) Хм.. ну да, в (9) заменить слово "нужно" на слово "можно".
12 svird
 
13.01.17
12:33
Я попробовал как в (9), вроде нормально, проверяю еще. Спасибо! Какие еще варианты могут быть?
13 Aleksandr N
 
13.01.17
12:34
(11) Отбор = Новый Структура("Ссылка", ТЗ.ВыгрузитьКолонку("Физлицо"));
ПараметрыФормы = Новый Структура("Отбор", Отбор);
ОткрытьФорму(<Имя формы>, ПараметрыФормы);
14 svird
 
13.01.17
12:36
(13) А ну да, у меня именно так: ОткрытьФорму("Справочник.ФизическиеЛица.ФормаВыбора", ПараметрыФормы, Элемент);
15 svird
 
13.01.17
12:37
Но ОткрытьФорму("Справочник.ФизическиеЛица.ФормаВыбора", ПараметрыФормы, Элемент);
На клиенте уже
16 Aleksandr N
 
13.01.17
12:38
(15) Конечно. А в форме выбора ничего писать не нужно.
17 azernot
 
13.01.17
12:43
(13) Ну, я как-то пробовал, не сработало, с тех пор использую методику (9). Возможно мой эксперимент был не совсем "чистый", спорить не буду.
18 Aleksandr N
 
13.01.17
12:45
(17) На обычных формах, наверное, пробовали?
19 azernot
 
13.01.17
12:52
(18) Формы управляемые, но в режиме "обычного приложения", да.
Ошибка? Это не ошибка, это системная функция.