Номер телефона в строке результата поиска
По теме из базы знаний
- Панель телефонии для 1С
- 50+ советов для успешной сдачи 1С: Специалист по платформе
- Нетривиальные подходы в решении всем известных проблем: ускорение «больших» документов в 1С и ускорение поиска по подстроке. Как добиться эффекта в разы?
- Интеграция с программой для звонков Softphone.Pro
- Идентификация всего, чего угодно, в SimpleUI. Нечеткий поиск
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) делал что-то подобное для подбора контрагента.
подсвечивает искомый цвет в найденных строках по наименованию и дописывает ИНН и КПП
заполняет список авто подбора не более 50 элементов.
PS. подписка на событие элемента АвтоПодбор
подсвечивает искомый цвет в найденных строках по наименованию и дописывает ИНН и КПП
заполняет список авто подбора не более 50 элементов.
&НаКлиенте
Процедура КонтрагентАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
ДанныеВыбора = Новый СписокЗначений;
ТекстПоиска = ВРег(Текст);
Пока СтрНайти(ТекстПоиска, " ") > 0 Цикл
ТекстПоиска = СтрЗаменить(ТекстПоиска, " ", " ");
КонецЦикла;
ТекстПоиска = СокрЛП(ТекстПоиска);
ДлинаТекста = СтрДлина(ТекстПоиска);
Если ДлинаТекста = 0 Тогда
Возврат
КонецЕсли;
СтандартнаяОбработка = Ложь;
ЗаполнитьДанныеВыбора(ТекстПоиска, ДанныеВыбора, Элемент.Имя);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьДанныеВыбора(Знач ТекстПоиска, ДанныеВыбора, ИмяЭлемента)
УстановитьПривилегированныйРежим(Истина);
МассивПодстрок = СтрРазделить(ТекстПоиска, " ");
Если МассивПодстрок.Найти(ТекстПоиска) = Неопределено Тогда
МассивПодстрок.Вставить(0, ТекстПоиска);
КонецЕсли;
Для Каждого Подстрока Из МассивПодстрок Цикл
Выборка = ПолучитьДанныеЗапросом(Подстрока, ИмяЭлемента);
Пока Выборка.Следующий() Цикл
ФорматированноеПредставление = ФорматированиеСтроки(Выборка, Подстрока, ИмяЭлемента);
Если ДанныеВыбора.НайтиПоЗначению(Выборка.Ссылка) = Неопределено Тогда
ДанныеВыбора.Добавить(Выборка.Ссылка, ФорматированноеПредставление);
КонецЕсли;
Если ДанныеВыбора.Количество() >= 50 Тогда
Прервать
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьДанныеЗапросом(Знач СтрокаПоиска, ИмяЭлемента)
Если ИмяЭлемента = "Контрагент" Тогда
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 50
| Таблица.Ссылка КАК Ссылка,
| Таблица.Наименование КАК Наименование,
| ВРЕГ(Таблица.Наименование) КАК НаименованиеВРег,
| ""Контрагенты"" КАК ТипДанных,
| Таблица.ИНН КАК ИНН,
| Таблица.КПП КАК КПП,
| 1 КАК Сортировка
|ПОМЕСТИТЬ втКонтр
|ИЗ
| Справочник.Контрагенты КАК Таблица
|ГДЕ
| Таблица.Наименование ПОДОБНО &СтрокаПоискаНачало
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 50
| Таблица.Ссылка,
| Таблица.Наименование,
| ВРЕГ(Таблица.Наименование),
| ""Контрагенты"",
| Таблица.ИНН,
| Таблица.КПП,
| 2
|ИЗ
| Справочник.Контрагенты КАК Таблица
|ГДЕ
| Таблица.Наименование ПОДОБНО &СтрокаПоиска
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ ПЕРВЫЕ 50
| Таблица.Ссылка,
| Таблица.Наименование,
| ВРЕГ(Таблица.Наименование),
| ""Контрагенты"",
| Таблица.ИНН,
| Таблица.КПП,
| 3
|ИЗ
| Справочник.Контрагенты КАК Таблица
|ГДЕ
| Таблица.ИНН ПОДОБНО &СтрокаПоиска
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| втКонтрагенты.Ссылка КАК Ссылка,
| втКонтрагенты.Наименование КАК Наименование,
| втКонтрагенты.НаименованиеВРег КАК НаименованиеВРег,
| втКонтрагенты.ТипДанных КАК ТипДанных,
| втКонтрагенты.ИНН КАК ИНН,
| втКонтрагенты.КПП КАК КПП,
| втКонтрагенты.Сортировка КАК Сортировка
|ИЗ
| втКонтр КАК втКонтрагенты
|
|УПОРЯДОЧИТЬ ПО
| Сортировка,
| НаименованиеВРег";
КонецЕсли;
СтрокаПоиска = СтрЗаменить(СтрокаПоиска, " ", "%");
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + СтрокаПоиска + "%");
Запрос.УстановитьПараметр("СтрокаПоискаНачало", "" + СтрокаПоиска + "%");
Запрос.УстановитьПараметр("СтрокаПоискаИндекс", "" + СтрокаПоиска);
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Возврат Выборка;
КонецФункции
&НаСервереБезКонтекста
Функция ФорматированиеСтроки(Выборка, ТекстПоиска, ИмяЭлемента)
#Область Дописка
ИсходноеНаименование = Выборка.Наименование;
НаименованиеСДопиской = ИсходноеНаименование;
Если ИмяЭлемента = "Контрагент" Тогда
НаименованиеСДопиской = СтрШаблон("%1 (ИНН:%2 / КПП:%3)", НаименованиеСДопиской, Выборка.ИНН, Выборка.КПП);
КонецЕсли;
#КонецОбласти
#Область Аналитическая
МассивПодстрок = СтрРазделить(ТекстПоиска, " ");
МассивДлинСтрок = Новый Массив;
ДлинаНаименования = СтрДлина(НаименованиеСДопиской);
УчтеннаяДлинаСтроки = 0;
НаименованиеСДопискойВРег = ВРег(НаименованиеСДопиской);
Для Каждого Подстрока Из МассивПодстрок Цикл
ПозицияПодстроки = СтрНайти(НаименованиеСДопискойВРег, Подстрока,,УчтеннаяДлинаСтроки+1);
Если ПозицияПодстроки = 0 Тогда
Прервать;
КонецЕсли;
МассивДлинСтрок.Добавить(ПозицияПодстроки - 1 - УчтеннаяДлинаСтроки);
УчтеннаяДлинаСтроки = ПозицияПодстроки - 1;
МассивДлинСтрок.Добавить(СтрДлина(Подстрока));
УчтеннаяДлинаСтроки = УчтеннаяДлинаСтроки + СтрДлина(Подстрока);
КонецЦикла;
Если ДлинаНаименования > УчтеннаяДлинаСтроки Тогда
МассивДлинСтрок.Добавить(ДлинаНаименования - УчтеннаяДлинаСтроки);
КонецЕсли;
#КонецОбласти
#Область Раскраска
Шрифт = Новый Шрифт(,,Истина);
ЦветПоисковойСтроки = WebЦвета.Зеленый;
ЦветДописки = WebЦвета.СветлоСерый;
// Каждый не четный номер массива выделяем цвета Поиска
НачальныйНомер = 0;
ИтоговыйМассивСтрок = Новый Массив;
ГраницаДописки = СтрДлина(ИсходноеНаименование);
Для Итератор = 0 По МассивДлинСтрок.ВГраница() Цикл
ЧислоСимволов = МассивДлинСтрок[Итератор];
// пример наименование 15 дописка 10 строка поиска 3
Если Итератор%2=0 Тогда // четные номера 0 2 4 ..
// определяем красить черным или серым.
Если НачальныйНомер + ЧислоСимволов <= ГраницаДописки Тогда
ИтоговыйМассивСтрок.Добавить(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов));
ИначеЕсли НачальныйНомер > ГраницаДописки Тогда
ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов), Шрифт, ЦветДописки));
ИначеЕсли НачальныйНомер < ГраницаДописки
И НачальныйНомер + ЧислоСимволов > ГраницаДописки Тогда
ЧастьСимволовДописки = НачальныйНомер + ЧислоСимволов - ГраницаДописки;
ИтоговыйМассивСтрок.Добавить(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов - ЧастьСимволовДописки));
ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, ГраницаДописки + 1, ЧастьСимволовДописки), Шрифт, ЦветДописки));
КонецЕсли;
Иначе
// зеленая строка поиска
ИтоговыйМассивСтрок.Добавить(Новый ФорматированнаяСтрока(Сред(НаименованиеСДопиской, НачальныйНомер + 1, ЧислоСимволов), Шрифт, ЦветПоисковойСтроки));
КонецЕсли;
НачальныйНомер = НачальныйНомер + ЧислоСимволов;
КонецЦикла;
#КонецОбласти
Возврат Новый ФорматированнаяСтрока(ИтоговыйМассивСтрок);
КонецФункции
ПоказатьPS. подписка на событие элемента АвтоПодбор
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот