Произвольный поиск с отбором "Содержит" в СКД
По теме из базы знаний
- 1С8:борьба - личный опыт работы с платформой 1с8
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Нечёткий поиск "ПОДОБНО". Нюансы
- Динамический список и поиск... неприятностей
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Найденные решения
Примерный вариант реализации
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ОбработатьНастройки(Настройки);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура ОбработатьНастройки(Настройки)
ПолеОтбора = Новый ПолеКомпоновкиДанных("Наименование");
НайденныйЭлемент = Неопределено;
Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл
Если Элемент.Использование
И ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")
И Элемент.ЛевоеЗначение = ПолеОтбора
И Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
СловаПоиска = СтрРазделить(Элемент.ПравоеЗначение, " ", Ложь);
Если СловаПоиска.Количество() > 1 Тогда
НайденныйЭлемент = Элемент;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки.Отбор.Элементы.Удалить(НайденныйЭлемент);
Для Каждого Слово Из СловаПоиска Цикл
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.ПравоеЗначение = Слово;
КонецЦикла;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Примерный вариант реализации
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ОбработатьНастройки(Настройки);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура ОбработатьНастройки(Настройки)
ПолеОтбора = Новый ПолеКомпоновкиДанных("Наименование");
НайденныйЭлемент = Неопределено;
Для Каждого Элемент Из Настройки.Отбор.Элементы Цикл
Если Элемент.Использование
И ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")
И Элемент.ЛевоеЗначение = ПолеОтбора
И Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит Тогда
СловаПоиска = СтрРазделить(Элемент.ПравоеЗначение, " ", Ложь);
Если СловаПоиска.Количество() > 1 Тогда
НайденныйЭлемент = Элемент;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
Возврат;
КонецЕсли;
Настройки.Отбор.Элементы.Удалить(НайденныйЭлемент);
Для Каждого Слово Из СловаПоиска Цикл
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.ПравоеЗначение = Слово;
КонецЦикла;
КонецПроцедуры
Показать
(4) Получилось с минимальной доработкой примера:
Для Каждого Слово Из СловаПоиска Цикл
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Подобно;
ЭлементОтбора.ПравоеЗначение = "%" + Слово + "%";
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот