Ищем человека или контрагента по фамилии в 1С 8.3: интерфейс, запрос, полнотекстовый индекс и своя форма
Содержание
Быстрее всего найти запись по фамилии в 1С — открыть нужный список (сотрудники, физические лица, контрагенты), нажать Ctrl+F и ввести фамилию или её начало. Если строка поиска находит слишком много или ищет не в той колонке, нажмите Alt+F: откроется расширенный поиск, где можно выбрать колонку и способ сравнения.
Когда этого мало — фамилия нужна в поле выбора документа, в отчёте, во всех данных базы сразу или в своей обработке, — включаются другие механизмы. Ниже они собраны по нарастанию сложности: от настроек, доступных пользователю, до изменений в конфигураторе и кода на встроенном языке.
Что умеет поиск по фамилии в списках без настройки
В интерфейсе «Такси» у каждого списка справочника или журнала документов есть строка поиска в правом верхнем углу. Она ищет введённый текст во всех видимых колонках сразу, причём по вхождению, а не только по началу.
Это значит:
- 🔎 запрос
Ивановнайдёт и «Иванов Пётр», и «Иванова Анна», и «ИП Иванов С. В.»; - 🔎 запрос
Иванов Петсужает выборку: слова ищутся каждое по отдельности; - 🔎 фамилия найдётся и в другой колонке, например в комментарии или в наименовании организации-работодателя, если она видна в списке.
Последний пункт — частая причина «мусора» в результатах. Если в списке контрагентов есть колонка «Основной договор» или «Комментарий», фамилия может совпасть там, а не в наименовании.
Расширенный поиск по одной колонке
Чтобы искать только в колонке с ФИО:
- Встаньте курсором в любую строку колонки «Наименование» (или «ФИО»).
- Нажмите
Alt+Fлибо выберите в менюЕщёкоманду расширенного поиска. - В окне укажите, что искать, в какой колонке и как сравнивать: по части строки, по началу строки или по точному совпадению.
- Нажмите «Найти».
Режим «по началу строки» удобен для фамилий: Петров не подтянет «Петровского» в середине названия ООО «Петровский хлеб» — хотя «Петровский Игорь» всё равно попадёт, потому что строка с него начинается.
Сбросить поиск можно крестиком в строке поиска или командой отмены поиска в том же меню Ещё.
Если в базе фамилию вносили то через «е», то через «ё» (Ёлкин / Елкин, Семёнов / Семенов), ищите обе формы по очереди: сначала Семенов, потом Семёнов. Или наберите фрагмент до спорной буквы — Сем — и сузьте выдачу именем.
Где искать фамилию в типовых конфигурациях
| Что ищем | Конфигурация | Где список |
|---|---|---|
| Сотрудник | ЗУП 3.1 | Кадры → Сотрудники |
| Физическое лицо | ЗУП 3.1 | Кадры → Физические лица |
| Сотрудник | Бухгалтерия 3.0 | Зарплата и кадры → Сотрудники |
| Контрагент-ИП или физлицо | Бухгалтерия 3.0 | Справочники → Контрагенты |
| Партнёр-физлицо | УТ 11 | НСИ и администрирование → НСИ → Партнёры |
В УТ 11 люди хранятся в справочнике «Партнёры», а «Контрагенты» — это юридические реквизиты сторон. Ищите фамилию сначала среди партнёров.
Поиск по фамилии при выборе в поле: ввод по строке
Второй сценарий — пользователь начинает печатать фамилию прямо в поле документа («Сотрудник», «Контрагент»), и 1С показывает выпадающий список подходящих записей. Это механизм ввода по строке. Как именно он ищет, задаётся в конфигураторе, в свойствах объекта метаданных.
Откройте справочник в конфигураторе и найдите в палитре свойств группу, отвечающую за ввод по строке:
- 📌 Ввод по строке — список полей, по которым идёт подбор. По умолчанию это наименование и код. Сюда можно добавить реквизит , где хранится фамилия отдельно, или ИНН.
- 📌 Способ поиска строки при вводе по строке — «Начало строки» или «Любая часть строки». Для ФИО обычно хватает начала: люди вводят фамилию первой.
- 📌 Полнотекстовый поиск при вводе по строке — подключает к подбору полнотекстовый индекс (о нём ниже).
Правка свойств объекта в типовой конфигурации снимает его с поддержки или требует включить возможность изменений. Для типовых баз безопаснее сделать то же самое в расширении конфигурации, если ваша версия платформы позволяет менять это свойство через расширение, — иначе согласуйте изменение с тем, кто обновляет базу.
После изменения сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Изменение структуры требует монопольного доступа, поэтому делайте это, когда пользователи вышли из базы.
Отдельный реквизит «Фамилия» или наименование целиком
Во многих доработанных базах ФИО хранят одной строкой в наименовании. Ввод по строке с режимом «Начало строки» тогда работает хорошо, а вот поиск по имени или отчеству — нет.
Если нужен подбор именно по фамилии, а наименование начинается с чего-то другого (например, «ИП Сидоров»), добавьте строковый реквизит с фамилией, заполняйте его при записи элемента и включите его в «Ввод по строке». У реквизита поставьте свойство «Индексировать» — так поиск по началу строки на больших справочниках идёт по индексу.
Отбор по фамилии в запросе и в отчёте на СКД
Когда нужна не одна запись, а выборка — «все начисления сотрудникам с фамилией Кузнецов», «документы по контрагентам-однофамильцам», — пишут запрос или настраивают отбор в отчёте.
Запрос с ПОДОБНО
Оператор ПОДОБНО сравнивает строку с шаблоном. Знак % означает любую последовательность символов, _ — ровно один символ.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛица.Ссылка КАК Ссылка,
| ФизическиеЛица.Наименование КАК ФИО
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|ГДЕ
| ФизическиеЛица.Наименование ПОДОБНО &Шаблон
| И НЕ ФизическиеЛица.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| ФИО";
Запрос.УстановитьПараметр("Шаблон", Фамилия + "%");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.ФИО);
КонецЦикла;
Шаблон Фамилия + "%" ищет по началу строки. Вариант "%" + Фамилия + "%" ищет вхождение в любом месте, но на больших таблицах в клиент-серверной базе он медленнее: ведущий % не даёт СУБД использовать индекс.
Если фамилию вводит пользователь, экранируйте спецсимволы. Символы %, _ и [ в строке поиска иначе станут частью шаблона. Для этого в запросе указывают ПОДОБНО &Шаблон СПЕЦСИМВОЛ "~", а в параметре перед каждым таким символом ставят ~:
Функция ЭкранироватьДляПодобно(Знач Текст)
Текст = СтрЗаменить(Текст, "~", "~~");
Текст = СтрЗаменить(Текст, "%", "~%");
Текст = СтрЗаменить(Текст, "_", "~_");
Текст = СтрЗаменить(Текст, "[", "~[");
Возврат Текст;
КонецФункции
Тильду заменяют первой, иначе она задвоится в уже экранированных символах.
Отбор в отчёте без программирования
В отчёте на СКД фамилию отбирают в настройках:
- Откройте отчёт и нажмите «Настройки».
- На закладке отборов добавьте поле с ФИО — например, «Сотрудник» или «Контрагент».
- Вместо «Равно» выберите вид сравнения «Содержит» и введите фамилию текстом.
- Сформируйте отчёт.
Вид сравнения «Содержит» работает по представлению ссылки, поэтому выбирать элемент из справочника не нужно — достаточно набрать Кузнецов. Отчёт покажет всех однофамильцев сразу.
Для отчёта собственной разработки то же самое делают в схеме: выводят поле наименования в отбор или добавляют параметр «Фамилия» и условие с ПОДОБНО в текст набора данных.
Полнотекстовый поиск по всей базе
Полнотекстовый поиск ищет фамилию сразу во всех объектах, включённых в индекс: справочниках, документах, их реквизитах и табличных частях. Он нужен, когда вы не знаете, где именно упоминался человек, — в договоре, в комментарии к платёжке или в карточке физлица.
Как включить
В типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) настройка находится в разделе Администрирование → Общие настройки, группа полнотекстового поиска. Включите флажок полнотекстового поиска данных и запустите обновление индекса.
Первое построение индекса на большой базе занимает от нескольких минут до часов. Запускайте его вне рабочего времени.
После этого искать можно строкой поиска в шапке программы (значок лупы).
Синтаксис, полезный для фамилий
| Что ввести | Что найдёт |
|---|---|
Смирнов | все словоформы: «Смирнова», «Смирнову», «Смирновым» |
Смирн* | все слова, начинающиеся на «Смирн» |
#Смирнов | нечёткий поиск: найдёт и «Смирнав», «Смирнофф» с опечатками |
"Смирнов Алексей" | точную фразу в кавычках |
Смирнов И Алексей | записи, где есть оба слова |
Нечёткий поиск спасает, когда фамилию вносили с ошибкой или транслитом с документа. Морфология помогает искать по падежам: в назначении платежа фамилия часто стоит в родительном или дательном падеже.
Чего не забыть
- 🔄 Индекс не обновляется мгновенно. Новые записи попадают в него при выполнении регламентного задания обновления индекса. Если фамилию добавили час назад и поиск её не видит — проверьте, что задание включено и выполняется.
- 🧩 В индекс попадают только объекты и реквизиты, у которых в конфигураторе свойство «Полнотекстовый поиск» установлено в «Использовать».
- 💾 Индекс хранится на диске сервера и растёт вместе с базой. На маленьком SSD это заметно.
Своё поле поиска по фамилии на форме
Если пользователям нужен отдельный быстрый поиск — например, в обработке для отдела кадров или в форме подбора, — его делают через отбор динамического списка.
Порядок такой:
- На управляемую форму добавьте реквизит
ФамилияПоисктипа «Строка» и выведите его полем над списком. - На форме должен быть динамический список с основной таблицей нужного справочника, например
Список. - В обработчике
ПриИзмененииполя установите отбор.
&НаКлиенте
Процедура ФамилияПоискПриИзменении(Элемент)
УстановитьОтборПоФамилии();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтборПоФамилии()
ИмяПоля = Новый ПолеКомпоновкиДанных("Наименование");
ЭлементОтбора = Неопределено;
Для Каждого Элемент Из Список.Отбор.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")
И Элемент.ЛевоеЗначение = ИмяПоля Тогда
ЭлементОтбора = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ИмяПоля;
КонецЕсли;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
ЭлементОтбора.ПравоеЗначение = СокрЛП(ФамилияПоиск);
ЭлементОтбора.Использование = ЗначениеЗаполнено(ФамилияПоиск);
КонецПроцедуры
Процедура ищет уже существующий элемент отбора по полю «Наименование» и переиспользует его. Без этого каждое изменение поля добавляло бы новый отбор, и через пять попыток список фильтровался бы по пяти фамилиям сразу — то есть не показывал бы ничего.
Пустое поле выключает отбор, и список снова показывает все записи.
В конфигурациях на БСП вместо ручного перебора можно вызвать ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка — она делает то же самое и уже есть в модуле.
Поиск в обработке без формы списка
Если нужно найти человека в коде и вернуть ссылку — например, при загрузке данных из Excel, — используйте запрос из раздела про ПОДОБНО с условием на точное совпадение или по началу строки. Результат проверяйте на количество:
- ✅ одна запись — однозначное совпадение, можно подставлять;
- ⚠️ несколько — однофамильцы, уточняйте по имени, дате рождения или ИНН;
- ❌ ни одной — создавать новую запись автоматически не стоит, лучше вывести в протокол загрузки.
Однофамильцы — главная ловушка автоматической загрузки. Сопоставление только по фамилии почти гарантированно привяжет часть строк не к тому человеку.
Почему поиск по фамилии тормозит и как ускорить
На справочнике в пару тысяч записей любой способ работает мгновенно. Проблемы начинаются на десятках и сотнях тысяч: например, в базе с розничными покупателями-физлицами или в ЗУП крупной организации за много лет.
Основные причины и что с ними делать:
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| Строка поиска в списке думает несколько секунд | Поиск по вхождению идёт по всем видимым колонкам, включая реквизиты связанных объектов | Скройте лишние колонки или ищите через Alt+F по одной колонке |
| Подбор в поле документа медленный | Ввод по строке настроен на «Любая часть строки» | Переключите на «Начало строки», добавьте индекс на реквизит |
Запрос с ПОДОБНО грузит сервер | Шаблон с ведущим % | Ищите по началу строки или через полнотекстовый поиск |
| Полнотекстовый поиск не находит свежие записи | Индекс не обновлён | Проверьте регламентное задание обновления индекса |
| Полнотекстовый поиск медленный на огромной базе | В индекс включено слишком много объектов | Отключите полнотекстовый поиск у служебных регистров и неинформативных реквизитов |
Индексы реквизитов
Свойство «Индексировать» у реквизита создаёт индекс в таблице базы данных. Для поиска по началу строки он помогает заметно, для поиска по вхождению — почти нет.
Включайте индекс только у реквизитов, по которым реально ищут. Каждый индекс замедляет запись элементов и занимает место. После изменения свойства нужно обновить конфигурацию базы данных, а это снова монопольный режим.
Обслуживание индекса полнотекстового поиска
Индекс со временем разрастается из-за частых добавлений. В типовых конфигурациях кроме обновления есть операция слияния индекса — её тоже выполняет регламентное задание, обычно реже, раз в сутки ночью. Если задания отключены (так бывает в файловых базах без автоматического запуска регламентных заданий), обновите индекс вручную из той же настройки в Администрирование → Общие настройки.
Частые вопросы
Почему поиск находит «Иванову», когда я ищу «Иванов»?
Регистр букв при поиске по фамилии важен?
Можно ли найти человека по фамилии, если в базе ФИО записано латиницей?
# в полнотекстовом режиме тут не поможет: буквы разных алфавитов он считает разными.