Кто звонил? Ищем контрагента в базе 1С по телефонному номеру
Содержание
Найти клиента по номеру телефона в 1С быстрее всего через строку поиска в правом верхнем углу окна программы — это полнотекстовый поиск по всей базе. Он работает, только если в Администрирование → Общие настройки включён полнотекстовый поиск и обновлён индекс. Если поиск ничего не дал, контрагента по телефону надёжно находит универсальный отчёт с отбором по контактной информации или запрос в консоли.
Строка поиска в самом списке контрагентов номер обычно не находит. Причина простая: телефон хранится не в колонке списка, а в отдельной таблице контактной информации. Второй частый сюрприз — формат: «8 912…» и «+7 (912)…» для программы разные строки, и искать надёжнее по последним цифрам номера.
Где хранится телефон клиента и почему список его «не видит»
В типовых конфигурациях на 8.3 телефон, email и адрес лежат в табличной части КонтактнаяИнформация карточки. У каждой строки есть тип (телефон, адрес, почта), вид («Телефон», «Мобильный телефон», «Факс» и т.д.) и представление — сам номер в том виде, как его ввели.
Строка поиска над списком ищет по колонкам, которые показаны в этом списке. Телефона среди них обычно нет. Поэтому ввод 912 345 в поле поиска справочника «Контрагенты» вернёт пустой список, даже если клиент есть.
Где искать в разных конфигурациях:
| Конфигурация | Справочник с клиентами | Где ещё бывают телефоны |
|---|---|---|
| Бухгалтерия предприятия 3.0 | Контрагенты (Справочники → Покупки и продажи → Контрагенты) | Контактные лица контрагента |
| Управление торговлей 11 | Партнеры (CRM и маркетинг → Партнеры) | Контрагенты партнёра, контактные лица партнёров |
🔎 В УТ 11 клиент — это прежде всего партнёр. Номер менеджера покупателя часто записан не в карточке партнёра, а в его контактном лице. Ищите в обоих местах.
Быстрый способ: глобальный поиск по номеру
Глобальный поиск — поле с лупой в правом верхнем углу окна 1С. Он просматривает индекс полнотекстового поиска, а значит, находит номер в любом справочнике и документе, где тот записан.
Включение полнотекстового поиска
- Откройте
Администрирование → Общие настройки. - Найдите группу полнотекстового поиска и установите флажок, разрешающий поиск.
- Откройте настройку полнотекстового поиска и обновите индекс.
- Дождитесь окончания: на базе в несколько гигабайт индексация занимает от нескольких минут до часа.
Индекс не обновляется мгновенно. Клиент, которого завели сегодня утром, может не находиться до ближайшего обновления индекса. Обычно его обновляет регламентное задание; проверить его расписание можно в разделе Администрирование → Обслуживание.
Как вводить номер
Полнотекстовый поиск ищет по словам. Номер +7 (912) 345-67-89 разбивается на части по пробелам, скобкам и дефисам. Отсюда правила:
- ✅ вводите номер так, как он, скорее всего, записан в карточке;
- ✅ если не нашли — попробуйте только код оператора и первую группу цифр:
912 345; - ✅ символ
*в конце слова ищет по началу:912*; - ❌
89123456789не найдёт+7 (912) 345-67-89— это разные «слова».
💡 Глобальный поиск выводит все совпадения: карточку контрагента, контактное лицо, письма, документы с номером в комментарии. Для проверки входящего звонка это даже удобно — сразу видно, по каким сделкам звонил человек.
Поиск клиента по телефону через универсальный отчёт
Если полнотекстовый поиск выключен и включать его не хотите, подойдёт универсальный отчёт. Он есть в БП 3.0 и УТ 11, программист не нужен.
- Откройте
Отчеты → Универсальный отчет(в БП 3.0 он в группе стандартных отчётов). - Тип объекта — «Справочник», объект — «Контрагенты» (в УТ — «Партнеры»).
- В поле таблицы выберите табличную часть контактной информации.
- Откройте настройки отчёта и добавьте отбор по полю «Представление» с условием «Содержит».
- Впишите фрагмент номера — лучше последние 4 цифры, например
67-89или6789. - Нажмите «Сформировать».
В результате получите список ссылок на карточки с нужным номером. Двойной клик открывает карточку.
Сохраните вариант отчёта с отбором по телефону. В следующий раз останется поменять цифры и сформировать — это 10 секунд.
Почему последние цифры, а не весь номер: условие «Содержит» сравнивает строку буквально. Пробел, скобка или «8» вместо «+7» ломают совпадение по полному номеру. Короткий хвост номера почти всегда записан одинаково.
Как найти контрагента по номеру телефона запросом
Запрос — самый точный способ. Он годится, когда нужно проверить сразу несколько справочников или когда номер записан десятком разных способов. Выполнять запрос удобно в обработке «Консоль запросов» — она входит в набор универсальных обработок для 8.3 и запускается как внешняя через Файл → Открыть.
Базовый запрос по контрагентам
ВЫБРАТЬ
КИ.Ссылка КАК Контрагент,
КИ.Вид КАК ВидТелефона,
КИ.Представление КАК Номер
ИЗ
Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
ГДЕ
КИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
И КИ.Представление ПОДОБНО &Шаблон
Параметр Шаблон задайте строкой вида %67-89%. Знак % означает «любые символы».
Контрагенты и контактные лица одним запросом
В БП 3.0 часть телефонов записана у контактных лиц. Объедините два источника:
ВЫБРАТЬ
КИ.Ссылка КАК Объект,
КИ.Представление КАК Номер
ИЗ
Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
ГДЕ
КИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
И КИ.Представление ПОДОБНО &Шаблон
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
КЛ.Ссылка,
КЛ.Представление
ИЗ
Справочник.КонтактныеЛица.КонтактнаяИнформация КАК КЛ
ГДЕ
КЛ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
И КЛ.Представление ПОДОБНО &Шаблон
Для УТ 11 замените справочники на Партнеры и КонтактныеЛицаПартнеров. Перед запуском откройте конструктор запроса и убедитесь, что табличная часть с таким именем есть в вашей конфигурации: в доработанных базах названия могут отличаться.
Не лезьте запросом напрямую в базу SQL Server или PostgreSQL. Таблицы там называются служебными именами вроде _Reference25_VT31, контактная информация разложена по полям неочевидно, а прямые запросы к базе 1С не поддерживаются фирмой-разработчиком. Запрос языка 1С через консоль даёт тот же результат без риска.
Номер записан по-разному: как искать, чтобы найти
Главная причина «клиента нет, а он есть» — формат. Один и тот же номер в базе встречается так:
| Как записали | Что ищет пользователь | Находит «Содержит»? |
|---|---|---|
+7 (912) 345-67-89 | 9123456789 | ❌ нет |
89123456789 | 912 345 | ❌ нет |
8-912-345-67-89 | 67-89 | ✅ да |
+7 912 3456789 | 6789 | ✅ да |
+79123456789, доб. 12 | 456789 | ✅ да |
Вывод из таблицы: ищите по 4–6 последним цифрам и пробуйте два варианта — с дефисом и без. Это закрывает большинство записей.
Поиск только по цифрам
Если нужна гарантия, сравнивайте номера без форматирования. Запрос выбирает все телефоны, а код оставляет только цифры и сравнивает последние 10 знаков — так «8» и «+7» в начале перестают мешать:
Функция ТолькоЦифры(Строка)
Результат = "";
Для Позиция = 1 По СтрДлина(Строка) Цикл
Символ = Сред(Строка, Позиция, 1);
Если СтрНайти("0123456789", Символ) > 0 Тогда
Результат = Результат + Символ;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция НайтиПоТелефону(Номер) Экспорт
Искомый = Прав(ТолькоЦифры(Номер), 10);
Найденные = Новый Массив;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КИ.Ссылка КАК Ссылка,
| КИ.Представление КАК Представление
|ИЗ
| Справочник.Контрагенты.КонтактнаяИнформация КАК КИ
|ГДЕ
| КИ.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВБазе = Прав(ТолькоЦифры(Выборка.Представление), 10);
Если ВБазе = Искомый И Найденные.Найти(Выборка.Ссылка) = Неопределено Тогда
Найденные.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецЦикла;
Возврат Найденные;
КонецФункции
Код выполняется на сервере во внешней обработке. Функция возвращает массив ссылок на контрагентов. На справочнике в 50–100 тысяч телефонов выборка без отбора отрабатывает за секунды, но для поиска при каждом звонке лучше хранить нормализованный номер отдельно (об этом ниже).
Номер с добавочным, например +7 495 123-45-67 доб. 205, функция превратит в лишние цифры в конце. Если такие записи есть, отрезайте всё после «доб» до вызова ТолькоЦифры: Лев(Строка, СтрНайти(НРег(Строка), "доб") - 1) при ненулевом результате СтрНайти.
Один номер у нескольких клиентов: проверка дублей
Поиск по телефону часто возвращает две-три карточки. Это не ошибка поиска, а признак дублей: клиента завели повторно с другим написанием названия.
Для чистки дублей в БП 3.0 и УТ 11 есть обработка «Поиск и удаление дублей» — Администрирование → Обслуживание → Корректировка данных. Она сравнивает реквизиты самой карточки: наименование, ИНН, КПП. Таблицу контактной информации она не сравнивает, поэтому порядок такой:
- Найдите все карточки с номером любым способом выше.
- Сравните у них ИНН и наименование.
- Запустите «Поиск и удаление дублей» по справочнику «Контрагенты» с отбором по найденному наименованию.
- Выберите основную карточку, остальные обработка заменит на неё во всех документах и пометит на удаление.
Перед заменой дублей сделайте резервную копию базы . Замена ссылок переписывает документы прошлых периодов, и откатить её без копии нельзя.
Не всякое совпадение номера — дубль. Прежде чем объединять, откройте обе карточки и посмотрите договоры: если по ним идут расчёты с разными условиями, это, скорее всего, разные клиенты. Общий телефон бухгалтерии бизнес-центра или номер бухгалтера на аутсорсе встречается у разных юрлиц с разными ИНН. Такие карточки не объединяйте.
Отдельный реквизит или вид контактной информации для телефона
Иногда компания хочет, чтобы телефон был колонкой в списке и искался обычной строкой поиска. Есть два пути, и у каждого своя цена.
Дополнительный реквизит
Дополнительные реквизиты включаются в Администрирование → Общие настройки → Дополнительные реквизиты и сведения. Можно завести реквизит «Телефон для поиска» строкового типа для справочника «Контрагенты».
Плюсы и минусы:
- ✅ реквизит доступен в отборе списка и в универсальном отчёте;
- ✅ конфигурацию менять не нужно;
- ❌ номер вводят вручную второй раз — через месяц он расходится с контактной информацией;
- ❌ заполнять его для уже заведённых клиентов придётся обработкой или руками.
Вид контактной информации
Лучше не плодить реквизиты, а навести порядок в видах телефонов. В карточке контрагента в блоке контактной информации можно добавить ещё одно поле телефона нужного вида. В настройках вида телефона обычно задают, можно ли вводить несколько значений и проверять ли корректность.
Практичный набор видов для клиентской базы:
- 📞 «Телефон» — основной городской;
- 📱 «Мобильный телефон» — для звонков и SMS;
- 🧾 «Телефон бухгалтерии» — для сверок и актов.
Номер, введённый через форму ввода телефона (код страны, код города, номер отдельными полями), хранится единообразно. Тогда поиск по последним цифрам срабатывает всегда.
Нормализованный номер для доработанных баз
Если поиск по телефону нужен постоянно — например, для всплывающей карточки при входящем звонке из IP-телефонии, — программист добавляет в расширение конфигурации реквизит с номером «только цифры». Он заполняется при записи карточки той же функцией ТолькоЦифры. Поиск по такому реквизиту — простое равенство в запросе, без перебора всей таблицы.