Поиск строк таблицы значений

1. NushaN 11 12.03.15 18:07 Сейчас в теме
Добрый день.
Подскажите, пожалуйста.
У меня есть ТЗ, в ней ищу строку в нужном столбце, но строка имеет не полное вхождение.
Т.е. в ТЗ есть "Иванов", мне надо найти эту строку по условию "Иван".
Можно ли использовать команду "НайтиСтроки"? Или она ищет только все строки с "Иван"?

Отбор = Новый Структура();
Отбор.Вставить("Наименование_Комплектующее",TextПоиска);
Строки = ТЗ_AxСпецификаций.НайтиСтроки(Отбор);
Если Строки.Количество() = 0 Тогда
   Сообщить("в т-це ТЗ_AxСпецификаций не найдено комплектующее: " + TextПоиска);
Иначе
   AxCode = Строки[0].AxCode_Комплектующее; 
КонецЕсли;
Показать


Если это не верно, то как правильно написать?

+ см.скрин
Прикрепленные файлы:
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. IvanBoychuk123 10 12.03.15 18:21 Сейчас в теме
(1) NushaN, Метод "НайтиСтроки" ищет только по точному соответствию. Для поиска по вхождению используйте запрос
|ВЫБРАТЬ
|	ТЗ_AxСпецификаций.Наименование_Комплектующее,
|	ТЗ_AxСпецификаций.AxCode_Комплектующее
|ИЗ
|	&ТЗ_AxСпецификаций КАК ТЗ_AxСпецификаций
|ГДЕ
|	ТЗ_AxСпецификаций.Наименование_Комплектующее ПОДОБНО &Наименование_Комплектующее
3. spacecraft 12.03.15 18:29 Сейчас в теме
(2) IvanBoychuk123, так работать не будет. Таблицу значений нужно поместить во временную таблицу и только из временной таблицы делать выборку.
4. Chameleon1980 12.03.15 18:32 Сейчас в теме
(3) ну думаю тс намек понял
5. NushaN 11 12.03.15 19:05 Сейчас в теме
(2) IvanBoychuk123, спасибо.
Попробовала так же:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	ТЗ.Наименование_Комплектующее,
|	ТЗ.AxCode_Комплектующее
|ИЗ
|	&ТЗ_AxСпецификаций КАК ТЗ
|ГДЕ
|	ТЗ.Наименование_Комплектующее ПОДОБНО &TextПоиска";

Запрос.УстановитьПараметр("TextПоиска", TextПоиска);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Если Выборка.Количество()>0 Тогда
   AxaptaCode = Выборка.AxCode_Комплектующее; 
Иначе
   Сообщить("в т-це ТЗ_AxСпецификаций не найдено комплектующее: " + TextПоиска);
КонецЕсли;
Показать

Но получаю ошибку: "Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу"

Пишу через менеджер Врем.табл.:
			
			Запрос = Новый Запрос("Выбрать * ПОМЕСТИТЬ ВТ_Ax Из &ТЗ_AxСпецификаций КАК ТЗ_Ax");
			
			Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
			Запрос.УстановитьПараметр("ТЗ_AxСпецификаций", ТЗ_AxСпецификаций);
			Запрос.Выполнить();
			
			ЗапросAx = Новый Запрос;
			ЗапросAx.Текст = "ВЫБРАТЬ
			|	ВТ_Ax.Наименование_Комплектующее,
			|	ВТ_Ax.AxCode_Комплектующее
			|ИЗ
			|	ВТ_Ax КАК ВТ_Ax
			|ГДЕ
			|	ВТ_Ax.Наименование_Комплектующее ПОДОБНО &TextПоиска";
		        ЗапросAx.УстановитьПараметр("TextПоиска", TextПоиска);
			ЗапросAx.МенеджерВременныхТаблиц = Запрос.МенеджерВременныхТаблиц; 
			Выборка = ЗапросAx.Выполнить().Выбрать();
			
			Если Выборка.Следующий() Тогда
				AxaptaCode = Выборка.AxCode_Комплектующее; 
			Иначе
				Сообщить("в т-це ТЗ_AxСпецификаций не найдено комплектующее: " + TextПоиска);
			КонецЕсли;

Показать


Опять ошибка: "Ошибка при вызове метода контекста (Выполнить)
Запрос.Выполнить();
по причине:
{(1, 30)}: Тип не может быть выбран в запросе
Выбрать * ПОМЕСТИТЬ ВТ_Ax Из <<?>>&ТЗ_AxСпецификаций КАК ТЗ_Ax"

:-(
6. spacecraft 12.03.15 19:28 Сейчас в теме
(5) NushaN, как то так:

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТЗ.Наименование_Комплектующее,
		|	ТЗ.AxCode_Комплектующее
		|ПОМЕСТИТЬ ВТ
		|ИЗ
		|	&ТЗ_AxСпецификаций КАК ТЗ
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	ВТ.Наименование_Комплектующее,
		|	ВТ.AxCode_Комплектующее
		|ИЗ
		|	ВТ КАК ВТ
		|ГДЕ
		|	ВТ.Наименование_Комплектующее ПОДОБНО &TextПоиска";
	Запрос.УстановитьПараметр("TextПоиска", TextПоиска+"%");
        Запрос.УстановитьПараметр("ТЗ_AxСпецификаций", ТЗ_AxСпецификаций);
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Сообщить("в т-це ТЗ_AxСпецификаций не найдено комплектующее: " + TextПоиска);
	Иначе
		Выборка = Результат.Выбрать();
		Выборка.Следующий();
		AxaptaCode = Выборка.AxCode_Комплектующее;
	КонецЕсли;
Показать


Только учтите, что выведет первый попавшийся результат. Для получения всех, нужно выборку в цикле обойти, или в таблицу значений выгрузить.
7. NushaN 11 13.03.15 00:11 Сейчас в теме
(6) spacecraft, спасибо.
По Вашему коду тоже ошибка:
Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(2, 5)}: Тип не может быть выбран в запросе
<<?>>ТЗ.Наименование_Комплектующее,

Меняю:
			"ВЫБРАТЬ  *
			|   // ТЗ.Наименование_Комплектующее,
			|   // ТЗ.AxCode_Комплектующее
...........


Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить();
по причине:
{(6, 5)}: Тип не может быть выбран в запросе
<<?>>&ТЗ_AxСпецификаций КАК ТЗ


ТЗ создается и заполняется стандартно:
	ТЗ_AxСпецификаций = Новый ТаблицаЗначений;
	ТЗ_AxСпецификаций.Колонки.Добавить("AxCode_ВыходноеИзделие");      //1
	ТЗ_AxСпецификаций.Колонки.Добавить("Наименование_ВыходноеИзделие");//2
	ТЗ_AxСпецификаций.Колонки.Добавить("AxCode_Комплектующее");        //3
	ТЗ_AxСпецификаций.Колонки.Добавить("Наименование_Комплектующее");  //4
	ТЗ_AxСпецификаций.Колонки.Добавить("ЕИ_Комплектующее");            //5
	ТЗ_AxСпецификаций.Колонки.Добавить("Количество_Комплектующее");    //6
.............
		НоваяСтрока = ТЗ_AxСпецификаций.Добавить();
.............
Показать


Вот ведь.... простая операция, а просто не получается ...
8. Melius 13.03.15 02:37 Сейчас в теме
(7) NushaN,
ТЗ_AxСпецификаций.Колонки.Добавить("Наименование_Комплектующее", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(50)));
9. h00k 50 13.03.15 03:24 Сейчас в теме
(7)NushaN,
Вот ведь.... простая операция, а просто не получается ...

Да нет, все как раз очень просто. Главное не забывать, что с не типизированными данными такой фокус не пройдет. Поэтому код создания таблицы должен выглядеть примерно вот так:
Массив = Новый Массив; 
	Массив.Добавить(Тип("Строка"));
	ОписаниеТипаСтрока = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(50));
	
	Массив.Очистить();
	Массив.Добавить(Тип("Число"));
	ОписаниеТипаЧисло = Новый ОписаниеТипов(Массив, , Новый КвалификаторыЧисла(15, 3));
	
	Массив.Очистить();
	Массив.Добавить(Тип("СправочникСсылка.Номенклатура"));
	ОписаниеТипаТовар = Новый ОписаниеТипов(Массив);
	
	Массив.Очистить();
	Массив.Добавить(Тип("СправочникСсылка.ЕдиницыИзмерения"));
	ОписаниеТипаЕИ = Новый ОписаниеТипов(Массив);

	ТЗ_AxСпецификаций = Новый ТаблицаЗначений;
    ТЗ_AxСпецификаций.Колонки.Добавить("AxCode_ВыходноеИзделие"			, ОписаниеТипаТовар); //1
    ТЗ_AxСпецификаций.Колонки.Добавить("Наименование_ВыходноеИзделие"	, ОписаниеТипаСтрока);//2
    ТЗ_AxСпецификаций.Колонки.Добавить("AxCode_Комплектующее"			, ОписаниеТипаТовар); //3
    ТЗ_AxСпецификаций.Колонки.Добавить("Наименование_Комплектующее"		, ОписаниеТипаСтрока);//4
    ТЗ_AxСпецификаций.Колонки.Добавить("ЕИ_Комплектующее"				, ОписаниеТипаЕИ);    //5
    ТЗ_AxСпецификаций.Колонки.Добавить("Количество_Комплектующее"		, ОписаниеТипаЧисло); //6

Показать
10. NushaN 11 13.03.15 09:25 Сейчас в теме
(9) h00k, Melius, спасибо.
Все получилось. Спасибо огромное!
11. softmaker 39 18.02.21 11:49 Сейчас в теме
(9) Тоже почему-то не работал этот метод Найти(), сделал через запрос, но определять типы не пришлось, так как таблица была получена из другого запроса... Спасибо!
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)