Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Построитель запроса. Отбор по списку значений

Построитель запроса. Отбор по списку значений
Я
   Zixxx
 
27.02.20 - 08:23
Не получается заставить построитель запроса отбирать по списку значений. При установленном отборе все равно выводятся все строки таблицы значений.

// Сектора
СектораНабор1 = Новый СписокЗначений;
СектораНабор1.Добавить(1);
СектораНабор1.Добавить(2);
    
СектораНабор2 = Новый СписокЗначений;
СектораНабор2.Добавить(3);
СектораНабор2.Добавить(4);
    
// Таблица клиентов
ТаблицаКлиентов = Новый ТаблицаЗначений;
ТаблицаКлиентов.Колонки.Добавить("Наименование",    Новый ОписаниеТипов("Строка"));
ТаблицаКлиентов.Колонки.Добавить("Сектора",            Новый ОписаниеТипов("СписокЗначений"));

ТаблицаКлиентов.Индексы.Добавить("Сектора");

// Заполним таблицу
НоваяСтрока = ТаблицаКлиентов.Добавить();
НоваяСтрока.Наименование    = "Иван";
НоваяСтрока.Сектора            = СектораНабор1;

// Построитель
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТаблицаКлиентов);
//Построитель.ДоступныеПоля.Сектора.Измерение = Истина;
Построитель.ДоступныеПоля.Сектора.Отбор = Истина;

НовыйОтбор = Построитель.Отбор.Добавить("Сектора");
НовыйОтбор.ВидСравнения        = ВидСравнения.ВСписке;
НовыйОтбор.Значение            = СектораНабор2;
НовыйОтбор.Использование    = Истина;

// Результат
Построитель.Выполнить();
ТаблицаРезультат = Построитель.Результат.Выгрузить();

Сообщить(ТаблицаРезультат.Количество());
 
 
   Конструктор1С
 
1 - 27.02.20 - 08:28
И зачем тебе устаревший построитель запроса? Используй СКД
   novichok79
 
2 - 27.02.20 - 08:34
(0) а зачем делать список значений в таблице. как-то непрозрачно.
почему нельзя развернуть список и нормально сравнить?
каким образом, по вашему, система должна сравнить списки значений?
порядок записи + значение или просто по значению без учета порядка?
   catena
 
3 - 27.02.20 - 08:37
(2)Какое сравнение списков, вы о чем?
   novichok79
 
4 - 27.02.20 - 08:45
(3) код почитайте
ТаблицаКлиентов.Колонки.Добавить("Сектора",            Новый ОписаниеТипов("СписокЗначений"));
....
НовыйОтбор = Построитель.Отбор.Добавить("Сектора");
НовыйОтбор.ВидСравнения        = ВидСравнения.ВСписке;
НовыйОтбор.Значение            = СектораНабор2;
НовыйОтбор.Использование    = Истина;
   Галахад
 
5 - 27.02.20 - 08:50
Тоже хочу отбирать по списку...
   catena
 
6 - 27.02.20 - 08:50
(4)А, пропустила))) Действительно, оргинально
   catena
 
7 - 27.02.20 - 08:50
*оригинально
   Zixxx
 
8 - 28.02.20 - 08:24
(1) В СКД как предлагаешь сделать отбор по списку значений? Источник данных у нас же ТЗ, одна колонка содержит список значений.
Если устанавливать отбор через построитель отчета, то ничего не происходит, а если установить такой отбор через СКД где источник ТЗ то ничего не выводит

Пока так и не получилось отбор по тз по списку значений, наверное нельзя такое сделать, хотя отборы в построителе и СКД устанавливаются, но почему-то не реагируют
   novichok79
 
9 - 28.02.20 - 11:49
зачем вообще так организовывать информацию? система явно дает понять, что не надо так.
   Zixxx
 
10 - 28.02.20 - 12:14
(9) Она как раз не дает это явно понять, СКД спокойно съедает ТЗ со списком значений и выдает его обратно в виде ТЗ со списком, в СКД в режиме пользователя можно указать отбор в виде списка значений. И если бы такой отбор работал то информация была бы правильно организована, это бы упростило ее обработку и вывод, есть же дерево значений есть же иерархия, есть табличные части у объектов, что это разве не правильно?
   Конструктор1С
 
11 - 28.02.20 - 12:15
(8) так разверни до нормальной таблицы, и будет тебе щасте

Вместо

Наим1, {Знач1,Знач2,Знач3}

сделай

Наим1, Знач1
Наим1, Знач2
Наим1, Знач3
   novichok79
 
12 - 28.02.20 - 13:00
(10) одно дело табличная часть, а другое дело - список значений в реквизите.
тем более, логичнее хранить данные так, чтобы можно было в БД сохранить простым переносом значений.
список значений разве можно в реквизите хранить?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.