Отбор в таблице значений в запросе через Подобно

1. 15.09.21 13:42 Сейчас в теме
Добрый день! Передаю ТЗ в запрос. Вот код
	
	Т1 = ПолучитьИзВременногоХранилища(Объект.АдресТ1);
	Т2 = Новый ТаблицаЗначений;
	Т2.Колонки.Добавить("Объект", Новый ОписаниеТипов("СправочникСсылка.пто_ОбъектыОС"));
	Т2.Колонки.Добавить("НомерКР");
	Т2.Колонки.Добавить("ГодВводаОбъекта");
	Т2.Колонки.Добавить("УровеньНапряжения");
	
	Для Каждого ТС из Т1 Цикл
		НС = Т2.Добавить();
		НС.Объект = ТС.Объект;
		//НС.УровеньНапряжения = 
		НС.ГодВводаОбъекта = ТС.Объект.ДатаВвода;
		НС.НомерКР = ТС.НомерКР;
	КонецЦикла;
	
	МенеджерВТ = Новый МенеджерВременныхТаблиц;
	Запрос = Новый Запрос;
		Запрос.Текст =
	"ВЫБРАТЬ
	|	Т2.Объект КАК Объект
	|ПОМЕСТИТЬ Таблица
	|ИЗ
	|	&Т2 КАК Т2
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Таблица.Объект КАК Объект
	|ИЗ
	|	Таблица КАК Таблица
	|ГДЕ
	|	Таблица.Объект ПОДОБНО &Поиск";
	Запрос.УстановитьПараметр("Т2",Т2);
	Запрос.УстановитьПараметр("Поиск", "%Система учета%");
	Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
	Выб = Запрос.Выполнить().Выгрузить();	 
Показать


Хочу через Подобно находить значения, которые начинаются на Система учета, но появляется ошибка по причине:
{(14, 2)}: Неверные параметры "ПОДОБНО"
<<?>>Таблица.Объект ПОДОБНО &Поиск

И ещё когда в описании Временной таблицы задаю тип значения справочник объекты, после нажатия Ок тип не сохраняется. Понимаю, что скорее всего нужно делать поиск по Объект.Наименование, но не знаю как это наименование добыть. Создать колонку с ним с ТЗ? Подскажите, пожалуйста, как правильно сделать
Найденные решения
10. dhurricane 15.09.21 13:50 Сейчас в теме
(1) Просто не открывая конструктор запроса допишите:
Таблица.Объект.Наименование ПОДОБНО &Поиск

Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Запрос.Текст =
    "ВЫБРАТЬ
    |    ВЫРАЗИТЬ(Т2.Объект КАК Справочник.пто_ОбъектыОС) КАК Объект
    |ПОМЕСТИТЬ Таблица
    |ИЗ
    |    &Т2 КАК Т2
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Таблица.Объект КАК Объект
    |ИЗ
    |    Таблица КАК Таблица
    |ГДЕ
    |    Таблица.Объект.Наименование ПОДОБНО &Поиск";
Показать
AleksandrLeshkov; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
7. slavyan_arena 15.09.21 13:48 Сейчас в теме
(1)
Здравствуйте.

может так?

Таблица.объект.наименование
9. AleksandrLeshkov 15.09.21 13:50 Сейчас в теме
(7)Вот это пытаюсь вытащить
11. slavyan_arena 15.09.21 13:51 Сейчас в теме
(9)
ну дык и напишите в запросе так )))
10. dhurricane 15.09.21 13:50 Сейчас в теме
(1) Просто не открывая конструктор запроса допишите:
Таблица.Объект.Наименование ПОДОБНО &Поиск

Если же хочется набрать это условие в конструкторе, то необходимо типизировать колонку временной таблицы:
Запрос.Текст =
    "ВЫБРАТЬ
    |    ВЫРАЗИТЬ(Т2.Объект КАК Справочник.пто_ОбъектыОС) КАК Объект
    |ПОМЕСТИТЬ Таблица
    |ИЗ
    |    &Т2 КАК Т2
    |;
    |
    |////////////////////////////////////////////////////////////­­////////////////////
    |ВЫБРАТЬ
    |    Таблица.Объект КАК Объект
    |ИЗ
    |    Таблица КАК Таблица
    |ГДЕ
    |    Таблица.Объект.Наименование ПОДОБНО &Поиск";
Показать
AleksandrLeshkov; +1 Ответить
12. AleksandrLeshkov 15.09.21 13:53 Сейчас в теме
(10) Вот пробую в условиях это задать, но ругается, что поле не обнаружено. А выбрать из Объекта не даёт. Руками когда прописал, то сработало. Но так конструктор запроса перестаёт работать
13. dhurricane 15.09.21 13:54 Сейчас в теме
(12) Пробуете первым или вторым способом?
14. AleksandrLeshkov 15.09.21 13:55 Сейчас в теме
(13)Руками прописать, так заработало, без конструктора
15. dhurricane 15.09.21 13:56 Сейчас в теме
(14) Попробуйте второй способ.
18. AleksandrLeshkov 21.09.21 05:42 Сейчас в теме
(15) В нём ругается на синтаксическую ошибку "КАК"
29. dhurricane 21.09.21 10:24 Сейчас в теме
30. AleksandrLeshkov 21.09.21 10:34 Сейчас в теме
31. dhurricane 21.09.21 10:45 Сейчас в теме
(30) Загадка... А весь текст запроса приведите, пожалуйста.
32. FatPanzer 14 21.09.21 10:52 Сейчас в теме
(31) Чую, это в секции ГДЕ расположено...
34. AleksandrLeshkov 21.09.21 10:57 Сейчас в теме
(32)
то в секции ГДЕ расположено...


Прописываю вот здесь, нажимая на карандаш зелёный
Прикрепленные файлы:
36. dhurricane 21.09.21 11:03 Сейчас в теме
(34) В этом редакторе не надо писать "КАК". Только "Выразить(...)"
38. AleksandrLeshkov 21.09.21 11:14 Сейчас в теме
(36) Аа, то есть здесь выражаю, а в условиях уже задаю Как Объект?
39. AleksandrLeshkov 21.09.21 11:18 Сейчас в теме
(36)Всё, теперь я разобрался как и что и куда. Спасибо Вам большое, теперь многое понял. А если у меня в Т1 уже типы заданы, их запрос может как-то подхватить сам из ТЗ или надо прописывать всё равно?
40. dhurricane 21.09.21 11:22 Сейчас в теме
(39) Надо прописывать. Про типы в ТЗ конструктор ничего не знает. С типами разберется сама платформа, когда уже будет выполнять запрос. Поэтому, если хотите пользоваться конструктором, придется явно прописывать типы.
41. AleksandrLeshkov 21.09.21 11:25 Сейчас в теме
(40)
платформа, когда уже будет выполнять запрос. Поэтому, если хотите пользоваться конструктором, придется явно прописывать типы.


А как правильнее прописывать?
Создать Т2, заполнить её из Т1 и там в Т2 указать типы или как Вы посоветовали прямо в запросе Выразить? Или расписать Т1 и в ней указать?

Просто странно, что платформа сама не подхватывает. Это получается надо сначала посмотреть типы значений у ТЗ в отладчике, потом переписать их, много времени уходит. Или я чего-то не понимаю?
42. dhurricane 21.09.21 11:38 Сейчас в теме
(41) Ничего странного. Конфигуратор на лету не вычисляет типы параметров запроса при наборе кода. Он работает исключительно с текстом самого запроса и метаданными. Такой вот не продвинутый редактор.

Что касается методики описания типов, то не понятна Ваша конечная цель. Нет, отладчик здесь не особо нужен. Типы Вы выражаете лишь для того, чтобы в конструкторе иметь возможность нажав на "плюсик" развернуть список вложенных полей. Если вложенные поля Вам не нужны, то и выражать собственно ни к чему. Если таки вложенные поля нужны, то наверняка Вы знаете, какие именно, а значит и знаете тип самой колонки еще до запуска отладчика.
AleksandrLeshkov; +1 Ответить
43. AleksandrLeshkov 21.09.21 11:52 Сейчас в теме
(42)
самой колонки еще до запуска отладчика.


Ну в плане я про то, что ТЗ у меня до запроса известна, но да, у нас же год выполняется последовательно, а значит параметр с ТЗ в запрос передастся только во время выполнения кода. По остальному понял. Нигде не нашёл такой понятной информации как от Вас. Спасибо, просветили!
33. AleksandrLeshkov 21.09.21 10:56 Сейчас в теме
(31) Весь текст запроса в самом первом моём сообщении
35. dhurricane 21.09.21 10:58 Сейчас в теме
(33) Вы же его изменили. Хотелось бы видеть, как именно.
37. AleksandrLeshkov 21.09.21 11:04 Сейчас в теме
(35)
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Т1.Объект КАК Объект
	|ПОМЕСТИТЬ Таблица
	|ИЗ
	|	&Т1 КАК Т1
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Таблица.Объект КАК Объект
	|ИЗ
	|	Таблица КАК Таблица";
Показать


Сократил, чтобы пока что только с объектом разобраться. И данные стал брать сразу из ТЗ, которая ко мне приходит, т.к. Т2 она полностью дублировала её. В Т1 все поля уже типизированы
2. FatPanzer 14 15.09.21 13:45 Сейчас в теме
ПОДОБНО? К ссылочному типу? Я бы еще и нет так на месте платформы послал бы...
ПОДОБНО применяется только к строковым значениям.
AnryMc; AleksandrLeshkov; +2 Ответить
3. AleksandrLeshkov 15.09.21 13:45 Сейчас в теме
(2)Да, я свою ошибку понял уже)) А как получить строку? Преобразовать? Я просто только начал изучать этот блок в 1С
4. FatPanzer 14 15.09.21 13:47 Сейчас в теме
5. AleksandrLeshkov 15.09.21 13:47 Сейчас в теме
(4)Объект в строку надо преобразовать, чтобы из ТЗ можно было по нему отбирать?
6. FatPanzer 14 15.09.21 13:48 Сейчас в теме
(5) Прям весь-весь объект? Вместе с табличными частями?
8. AleksandrLeshkov 15.09.21 13:49 Сейчас в теме
(6)Прям весь-весь скорее всего нет, а вот наименование его надо как-то получить
17. FatPanzer 14 15.09.21 14:29 Сейчас в теме
(8) И в чем проблема получить наименование, если у тебя есть ссылка?
19. AleksandrLeshkov 21.09.21 05:47 Сейчас в теме
(17) В конфигураторе у меня выглядит так, как на скрине. Я хочу сделать средствами только конструктора запроса. В нём я не вижу возможность выбрать наименование, в этом и проблема
Прикрепленные файлы:
20. FatPanzer 14 21.09.21 08:01 Сейчас в теме
(19) Для этого у тебя есть кнопка "Описание временной таблицы", где ты можешь указать тип. После указания типа будут доступны вложенные реквизиты.
21. AleksandrLeshkov 21.09.21 08:57 Сейчас в теме
(20)Я так и делаю. После нажатия кнопки Ок все изменения пропадают
22. FatPanzer 14 21.09.21 09:04 Сейчас в теме
(21) Естественно. Они нужны только для работы конструктора (раз уж ты не хочешь дописать руками имя реквизита прямо в тексте).
23. AleksandrLeshkov 21.09.21 09:22 Сейчас в теме
(22) В Описание временной таблицы я задаю Тип данных, нажимаю Ок. Мне становятся доступными все вложенные реквизиты. Я выбираю то, что мне нужно, сохраняю запрос, всё становится красиво. Иду в режим предприятия, нажимаю кнопку с командой и у меня выскакивает ошибка о том, что поле, которое я выбрал из вложенных реквизитов не найдено
24. FatPanzer 14 21.09.21 09:25 Сейчас в теме
(23) Значит не того типа приходят данные в ТЗ. Или сами колонки ТЗ не типизированы.
25. AleksandrLeshkov 21.09.21 09:30 Сейчас в теме
(24) Я правильно понял, что если ко мне ТЗ откуда-то уже пришла, то в ней не надо указывать типы у колонок? А если создал ТЗ руками, то здесь надо указать?
27. FatPanzer 14 21.09.21 09:43 Сейчас в теме
(25) В запрос таблица должна передаваться с типизированными колонками. Точка.
28. AleksandrLeshkov 21.09.21 09:52 Сейчас в теме
(27)Т.е. даже если уже тип определён у колонок, то всё равно прописываю руками тип?
26. AleksandrLeshkov 21.09.21 09:39 Сейчас в теме
(24)У Объекта у меня вот такой тип. Даже когда его прямо указывал колонке руками ничего не менялось
Прикрепленные файлы:
16. AnryMc 805 15.09.21 14:23 Сейчас в теме
Как вариант:
...
//Зададим явный тип строка(100), что бы потом работал отбор
КС100 = Новый КвалификаторыСтроки(100);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС100 = Новый ОписаниеТипов(Массив, , КС100);
//Зададим колонку для Наименования, по которому будем искать
Т2.Колонки.Добавить("ОбъектНаименование", ОписаниеТиповС100 ));
...
//Заполним Т2
нс = Т2.Добавить();
...
нс.ОбъектНаименование = Объект.Наименование;
...
...
 Построитель = Новый ПостроительЗапроса;
 Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Т2);
 
//зададим отбор
 тОтбор = Построитель.Отбор.Добавить("ОбъектНаименование");
 тОтбор.ВидСравнения = ВидСравнения.Содержит;
 тОтбор.Значение = "Система учета";
 тОтбор.Использование = Истина;

 Построитель.Выполнить();
//ТабРезультат - копия Т2 согласно отбора
 ТабРезультат = Построитель.Результат.Выгрузить();
Показать
44. dehro 21.09.21 12:06 Сейчас в теме
Я один так плохо отношусь к запросам в цикле?
  
   Т1 = ПолучитьИзВременногоХранилища(Объект.АдресТ1);
    
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	Т1.Объект КАК Объект,
	               |	Т1.НомерКР КАК НомерКР
	               |ПОМЕСТИТЬ ВТ_Т1
	               |ИЗ
	               |	&Таблица1 КАК Т1
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ
	               |	Т1.Объект КАК Объект,
	               |	Т1.НомерКР КАК НомерКР,
	               |	пто_ОбъектыОС.ДатаВвода КАК ГодВводаОбъекта
	               |ИЗ
	               |	ВТ_Т1 КАК Т1
	               |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.пто_ОбъектыОС КАК пто_ОбъектыОС
	               |		ПО Т1.Объект = пто_ОбъектыОС.Ссылка
	               |ГДЕ
	               |	ЕСТЬNULL(""пто_ОбъектыОС.Наименование"", """") ПОДОБНО &Поиск";
    Запрос.УстановитьПараметр("Таблица1",Т1);
    Запрос.УстановитьПараметр("Поиск", "%Система учета%");
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Выб = Запрос.Выполнить().Выгрузить();
Показать
45. AleksandrLeshkov 21.09.21 12:44 Сейчас в теме
(44)
НИЕ Справочник.пто_ОбъектыОС КАК пто_ОбъектыОС
| ПО Т1.Объект = пто_ОбъектыОС.Ссылка
|ГДЕ


Да, я по итогу почти так и переделал, чтобы не плодить дубли и лишний код
Оставьте свое сообщение
Вопросы с вознаграждением
Вакансии
Программист 1С
Новосибирск
зарплата от 90 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Программист 1С
Москва
зарплата от 230 000 руб. до 230 000 руб.
Полный день

Программист 1С
Москва
зарплата от 100 000 руб. до 140 000 руб.
Полный день

Программист 1С
Хабаровск
зарплата от 130 000 руб. до 160 000 руб.
Полный день