Отбор в таблице значений в запросе через Подобно
Добрый день! Передаю ТЗ в запрос. Вот код
Хочу через Подобно находить значения, которые начинаются на Система учета, но появляется ошибка по причине:
{(14, 2)}: Неверные параметры "ПОДОБНО"
<<?>>Таблица.Объект ПОДОБНО &Поиск
И ещё когда в описании Временной таблицы задаю тип значения справочник объекты, после нажатия Ок тип не сохраняется. Понимаю, что скорее всего нужно делать поиск по Объект.Наименование, но не знаю как это наименование добыть. Создать колонку с ним с ТЗ? Подскажите, пожалуйста, как правильно сделать
Т1 = ПолучитьИзВременногоХранилища(Объект.АдресТ1);
Т2 = Новый ТаблицаЗначений;
Т2.Колонки.Добавить("Объект", Новый ОписаниеТипов("СправочникСсылка.пто_ОбъектыОС"));
Т2.Колонки.Добавить("НомерКР");
Т2.Колонки.Добавить("ГодВводаОбъекта");
Т2.Колонки.Добавить("УровеньНапряжения");
Для Каждого ТС из Т1 Цикл
НС = Т2.Добавить();
НС.Объект = ТС.Объект;
//НС.УровеньНапряжения =
НС.ГодВводаОбъекта = ТС.Объект.ДатаВвода;
НС.НомерКР = ТС.НомерКР;
КонецЦикла;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т2.Объект КАК Объект
|ПОМЕСТИТЬ Таблица
|ИЗ
| &Т2 КАК Т2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Таблица.Объект КАК Объект
|ИЗ
| Таблица КАК Таблица
|ГДЕ
| Таблица.Объект ПОДОБНО &Поиск";
Запрос.УстановитьПараметр("Т2",Т2);
Запрос.УстановитьПараметр("Поиск", "%Система учета%");
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Выб = Запрос.Выполнить().Выгрузить();
ПоказатьХочу через Подобно находить значения, которые начинаются на Система учета, но появляется ошибка по причине:
{(14, 2)}: Неверные параметры "ПОДОБНО"
<<?>>Таблица.Объект ПОДОБНО &Поиск
И ещё когда в описании Временной таблицы задаю тип значения справочник объекты, после нажатия Ок тип не сохраняется. Понимаю, что скорее всего нужно делать поиск по Объект.Наименование, но не знаю как это наименование добыть. Создать колонку с ним с ТЗ? Подскажите, пожалуйста, как правильно сделать
По теме из базы знаний
- Всякие полезности
- Регистры бухгалтерии. Еще одна таблица оборотов ДТ / КТ
- Модель запроса
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Автоматизация импорта значений в отбор типовых отчетов конфигурации 1С: Бухгалтерия предприятия 3.0
Найденные решения
(1) Просто не открывая конструктор запроса допишите:
Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Таблица.Объект.Наименование ПОДОБНО &Поиск
Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(Т2.Объект КАК Справочник.пто_ОбъектыОС) КАК Объект
|ПОМЕСТИТЬ Таблица
|ИЗ
| &Т2 КАК Т2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Таблица.Объект КАК Объект
|ИЗ
| Таблица КАК Таблица
|ГДЕ
| Таблица.Объект.Наименование ПОДОБНО &Поиск";
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Просто не открывая конструктор запроса допишите:
Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Таблица.Объект.Наименование ПОДОБНО &Поиск
Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(Т2.Объект КАК Справочник.пто_ОбъектыОС) КАК Объект
|ПОМЕСТИТЬ Таблица
|ИЗ
| &Т2 КАК Т2
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Таблица.Объект КАК Объект
|ИЗ
| Таблица КАК Таблица
|ГДЕ
| Таблица.Объект.Наименование ПОДОБНО &Поиск";
Показать
(40)
А как правильнее прописывать?
Создать Т2, заполнить её из Т1 и там в Т2 указать типы или как Вы посоветовали прямо в запросе Выразить? Или расписать Т1 и в ней указать?
Просто странно, что платформа сама не подхватывает. Это получается надо сначала посмотреть типы значений у ТЗ в отладчике, потом переписать их, много времени уходит. Или я чего-то не понимаю?
платформа, когда уже будет выполнять запрос. Поэтому, если хотите пользоваться конструктором, придется явно прописывать типы.
А как правильнее прописывать?
Создать Т2, заполнить её из Т1 и там в Т2 указать типы или как Вы посоветовали прямо в запросе Выразить? Или расписать Т1 и в ней указать?
Просто странно, что платформа сама не подхватывает. Это получается надо сначала посмотреть типы значений у ТЗ в отладчике, потом переписать их, много времени уходит. Или я чего-то не понимаю?
(41) Ничего странного. Конфигуратор на лету не вычисляет типы параметров запроса при наборе кода. Он работает исключительно с текстом самого запроса и метаданными. Такой вот не продвинутый редактор.
Что касается методики описания типов, то не понятна Ваша конечная цель. Нет, отладчик здесь не особо нужен. Типы Вы выражаете лишь для того, чтобы в конструкторе иметь возможность нажав на "плюсик" развернуть список вложенных полей. Если вложенные поля Вам не нужны, то и выражать собственно ни к чему. Если таки вложенные поля нужны, то наверняка Вы знаете, какие именно, а значит и знаете тип самой колонки еще до запуска отладчика.
Что касается методики описания типов, то не понятна Ваша конечная цель. Нет, отладчик здесь не особо нужен. Типы Вы выражаете лишь для того, чтобы в конструкторе иметь возможность нажав на "плюсик" развернуть список вложенных полей. Если вложенные поля Вам не нужны, то и выражать собственно ни к чему. Если таки вложенные поля нужны, то наверняка Вы знаете, какие именно, а значит и знаете тип самой колонки еще до запуска отладчика.
(42)
Ну в плане я про то, что ТЗ у меня до запроса известна, но да, у нас же год выполняется последовательно, а значит параметр с ТЗ в запрос передастся только во время выполнения кода. По остальному понял. Нигде не нашёл такой понятной информации как от Вас. Спасибо, просветили!
самой колонки еще до запуска отладчика.
Ну в плане я про то, что ТЗ у меня до запроса известна, но да, у нас же год выполняется последовательно, а значит параметр с ТЗ в запрос передастся только во время выполнения кода. По остальному понял. Нигде не нашёл такой понятной информации как от Вас. Спасибо, просветили!
(35)
Сократил, чтобы пока что только с объектом разобраться. И данные стал брать сразу из ТЗ, которая ко мне приходит, т.к. Т2 она полностью дублировала её. В Т1 все поля уже типизированы
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т1.Объект КАК Объект
|ПОМЕСТИТЬ Таблица
|ИЗ
| &Т1 КАК Т1
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Таблица.Объект КАК Объект
|ИЗ
| Таблица КАК Таблица";
ПоказатьСократил, чтобы пока что только с объектом разобраться. И данные стал брать сразу из ТЗ, которая ко мне приходит, т.к. Т2 она полностью дублировала её. В Т1 все поля уже типизированы
(22) В Описание временной таблицы я задаю Тип данных, нажимаю Ок. Мне становятся доступными все вложенные реквизиты. Я выбираю то, что мне нужно, сохраняю запрос, всё становится красиво. Иду в режим предприятия, нажимаю кнопку с командой и у меня выскакивает ошибка о том, что поле, которое я выбрал из вложенных реквизитов не найдено
Как вариант:
...
//Зададим явный тип строка(100), что бы потом работал отбор
КС100 = Новый КвалификаторыСтроки(100);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС100 = Новый ОписаниеТипов(Массив, , КС100);
//Зададим колонку для Наименования, по которому будем искать
Т2.Колонки.Добавить("ОбъектНаименование", ОписаниеТиповС100 ));
...
//Заполним Т2
нс = Т2.Добавить();
...
нс.ОбъектНаименование = Объект.Наименование;
...
...
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Т2);
//зададим отбор
тОтбор = Построитель.Отбор.Добавить("ОбъектНаименование");
тОтбор.ВидСравнения = ВидСравнения.Содержит;
тОтбор.Значение = "Система учета";
тОтбор.Использование = Истина;
Построитель.Выполнить();
//ТабРезультат - копия Т2 согласно отбора
ТабРезультат = Построитель.Результат.Выгрузить();
Показать
Я один так плохо отношусь к запросам в цикле?
Т1 = ПолучитьИзВременногоХранилища(Объект.АдресТ1);
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Т1.Объект КАК Объект,
| Т1.НомерКР КАК НомерКР
|ПОМЕСТИТЬ ВТ_Т1
|ИЗ
| &Таблица1 КАК Т1
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| Т1.Объект КАК Объект,
| Т1.НомерКР КАК НомерКР,
| пто_ОбъектыОС.ДатаВвода КАК ГодВводаОбъекта
|ИЗ
| ВТ_Т1 КАК Т1
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.пто_ОбъектыОС КАК пто_ОбъектыОС
| ПО Т1.Объект = пто_ОбъектыОС.Ссылка
|ГДЕ
| ЕСТЬNULL(""пто_ОбъектыОС.Наименование"", """") ПОДОБНО &Поиск";
Запрос.УстановитьПараметр("Таблица1",Т1);
Запрос.УстановитьПараметр("Поиск", "%Система учета%");
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Выб = Запрос.Выполнить().Выгрузить();
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот