Имя: Пароль:
1C
1С v8
[Решено] Ошибка при добавлении поля отбора построителя
0 Vladal
 
25.06.15
13:57
Есть построитель, в который помещаю таблицу значений для манипуляций с ней.

В отладчике вижу такие поля:
|ПОстроительЗапроса.ДоступныеПоля
|_2
|_6
|_7
|ВерхнийПредел
|Диапазон
|НижнийПредел

Добавляю отбор:

НовыйОтбор = ПостроительЗапроса.Отбор.Добавить("ВерхнийПредел");

Вываливается ошибка: Недопустимое значение параметра (параметр номер '1')

Но когда добавляю отбор по другой колонке, никаких ошибок не возникает:

НовыйОтбор = ПостроительЗапроса.Отбор.Добавить("Диапазон");

Также ошибка происходит и если беру данные из отладчика:

ПостроительЗапроса.Отбор.Добавить(ПостроительЗапроса.ДоступныеПоля.НижнийПредел.Имя); --- ошибка
ПостроительЗапроса.Отбор.Добавить(ПостроительЗапроса.ДоступныеПоля.Диапазон.Имя); --- работает нормально.

Из-за чего такое может быть? Ладно бы я допустил ошибку в написании поля, но когда из отладчика явно достаю поле и добавляю в отбор - одно работает, другое нет.
1 Зеленый пень
 
25.06.15
13:59
Давно построитель научился с таблицей значений работать?
Как ты её помещаешь? И описаны ли эти поля в блоке {ГДЕ...} ?
2 Franchiser
 
гуру
25.06.15
14:01
Построитель Запроса или Построитель Отчета?
Тип поля какой?
3 Franchiser
 
гуру
25.06.15
14:02
попробуй типизировать поля тз
4 chelentano
 
25.06.15
14:02
(1) Давно. Через источник данных
5 Vladal
 
25.06.15
14:03
(1) (2) (3) (4)

ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Источник);

Источник - это и есть моя таблица значений
6 Vladal
 
25.06.15
14:04
Не все ДоступныеПоля одинаково вкусны - некоторые Построителю не нравятся. А именно "НижнийПредел" и "ВерхнийПредел". Другие поля он успешно глотает, а эти два не хочет добавлять.
7 Franchiser
 
гуру
25.06.15
14:06
что в этих полях, как ты описываешь структуру ТЗ?
8 Vladal
 
25.06.15
14:06
(1) (2) (3) (4) -- всё делаю используя типовую процедуру ОбщегоНазначения.ОтобратьСтрокиПоКритериям, в неё и передаю параметрами нужные мне критерии отбора.
9 chelentano
 
25.06.15
14:06
Посмотри в отладчике перед установкой отбора, чему равно:
ПостроительЗапроса.ДоступныеПоля["ВерхнийПредел"].Отбор
10 Franchiser
 
гуру
25.06.15
14:07
обозвать поля по другому не вариант?
11 Vladal
 
25.06.15
14:09
(3) (7) да. не типизировал. Но когда типизировал ничего не изменилось.
(9) пишет Ложь

(10) - Я им и унитаз приносил, и плитку из туалета показывал - ну нет у них туалетной бумаги, нет.
12 chelentano
 
25.06.15
14:11
(11) попробуй выставить в истина
13 Vladal
 
25.06.15
14:15
Я нашел ошибку. Поле не было типизировано.
Я сохранял таблицу значений, и при открытии обработки восстанавливал. А когда модифицировал колонки таблицы, то срабатывало условие

Если КолонкиМатрицы.Найти("НижнийПредел") = Неопределено Тогда
    КолонкиМатрицы.Добавить("НижнийПредел", ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(19),, 20);
КонецЕсли;

Естестенно, после того, как добавил описание типа колонки, он не назначался. Поэтому в (11) тоже ничего не получилось.

Ошибка была в том, что колонка была не типизирована. Спасибою. Получилось.
14 chelentano
 
25.06.15
14:16
(13) так это тебе ещё в (3) написали
15 Vladal
 
25.06.15
14:18
(14) Так я же сразу и дописал типизацию из (13). Вот только таблица восстанавливалась старая, с нетипизированными колонками.

Спасибо!
16 Зеленый пень
 
25.06.15
16:21
(5) тьфу блин... :) Я и забыл, что так примитивно можно.
Интереснее так:
Создается построитель с текстом запроса, где первый запрос - "заглушка", таблица  с нужными типами и словом ПОМЕСТИТЬ.
После игры с группировками отборами делаем ПолучитьЗапрос() и в тексте запроса подменяем заглушку на выбор из &ТЗ, которая передается запросу.
В результате можно крутить поля ТЗ через точку", и тестом запроса играться как угодно.
17 Franchiser
 
гуру
25.06.15
20:40
(16) в построитель запроса вроде как нельзя использовать ВТ
18 Зеленый пень
 
25.06.15
22:20
(17) ВТ еще как можно. Нельзя напрямую передавать ТЗ как параметр запроса, поэтому приходится изгаляться через .ПолучитьЗапрос(), но это не так сложно.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn