Имя: Пароль:
1C
1С v8
Построитель запроса по списку документов с отбором
0 plnz
 
12.11.20
10:54
Есть СписокДокументов на форме. В нем может быть интерактивно установлен некий отбор, а также интервал. Задача - получить только проведенные текущего списка (с учетом отборов).
Есть код:
Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
    Построитель.ЗаполнитьНастройки();
    
    ПолеПроведен = Построитель.ДоступныеПоля.Найти("Проведен");
    ПолеПроведен.Отбор = Истина;
    
    ОтборПроведен = Построитель.Отбор.Добавить("Проведен");
    ОтборПроведен.Использование = Истина;
    ОтборПроведен.ВидСравнения = ВидСравнения.Равно;
    ОтборПроведен.Значение = Истина;
    
    Построитель.Выполнить();
    тз = Построитель.Результат.Выгрузить();

На "ОтборПроведен.Значение = Истина" вываливается ошибка "Неверный тип значения".
1 plnz
 
12.11.20
10:55
почему такая ошибка? где я напортачил?
2 youalex
 
12.11.20
10:58
Навсидку вроде норм все.
В качестве бреда:
Документ в принципе проводится?  
Если сделать просто Построитель.Отбор.Проведен.Установить(Истина); ?
3 plnz
 
12.11.20
11:02
Документ проводится. Если сделать так, то выдаст ошибку - отбора такого нет.
Забыл сказать, конфа - Ут10.3, список документов - список реализаций.
4 ДенисЧ
 
12.11.20
11:03
А сам признак Проведен отдельной колонкой выведен в список?
5 plnz
 
12.11.20
11:03
(4) ага
6 plnz
 
12.11.20
11:06
(4) на форме - это колонка с галкой, если я правильно понимаю. И в описании источника эта колонка так же присутвует.
https://yadi.sk/i/vfttqY5PIGTtJw
7 ДенисЧ
 
12.11.20
11:06
(6) А если Проведен раскрыть плюсиком - там что?
8 plnz
 
12.11.20
11:07
9 ДенисЧ
 
12.11.20
11:11
А ОтборПроведен в отладчике?

ЗЫ Всё выглядит вроде нормально...
Ради эксперимента - добавь отдельную колонку ДокументПРоведен и с ней попробуй...
10 plnz
 
12.11.20
11:12
можно, конечно, получить таблицу без отбора, и уже на нее наложить отбор... Но хочется через построитель это сделать.
11 plnz
 
12.11.20
11:13
12 plnz
 
12.11.20
11:21
(9) Если я добавляю колонку, то в построителе она не отображается.
Что самое интересное, колонка "Проведен" в доступных полях есть.
https://yadi.sk/i/_OiRkq1LMhrldA
13 Asmody
 
12.11.20
11:46
(11) А что там в типе значения?
14 Kassern
 
12.11.20
11:47
(0) Только что потестил на УФ, код нормально отрабатывает. По колонке отбирает. Значит что-то у тебя с колонками не так. Тип колонки "Проведен" явно прописан для источника построителя?
Пример кода
ТЗИсточник=Новый ТаблицаЗначений;
    МассивТипов = Новый Массив;
    МассивТипов.Добавить(Тип("Булево"));
    ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов);
    ТЗИсточник.Колонки.Добавить("Проведен",ДопустимыеТипы);
    
    Для к=1 По 10 Цикл
        НовСтрока=ТЗИсточник.Добавить();
        НовСтрока.Проведен=?(к/2=Цел(к/2),Истина,Ложь);         
    КонецЦикла;
    
    Построитель = Новый ПостроительЗапроса;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗИсточник);
    Построитель.ЗаполнитьНастройки();
    
    ПолеПроведен = Построитель.ДоступныеПоля.Найти("Проведен");
    ПолеПроведен.Отбор = Истина;
    
    ОтборПроведен = Построитель.Отбор.Добавить("Проведен");
    ОтборПроведен.Использование = Истина;
    ОтборПроведен.ВидСравнения = ВидСравнения.Равно;
    ОтборПроведен.Значение = Истина;
    
    Построитель.Выполнить();
    тз = Построитель.Результат.Выгрузить();
15 Kassern
 
12.11.20
11:49
(14) Если не указать тип для колонки "проведен" то будет как раз твоя ошибка.
16 youalex
 
12.11.20
12:00
А вот если для списка (элементе формы) выбрать в меню Форма/Размещение данных, то колонки "Проведен" там нет (не вижу). Может с этим как-то связано
17 youalex
 
12.11.20
12:01
А если руками колонку добавить в список и для нее указать Данные = "Проведен" ?
18 plnz
 
12.11.20
12:01
(14) Точно. Проблема была с типом. Определил тип для колонки и заработало.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.