Как работает поиск по символам в поле ввода 1С и почему слэш может считаться разделителем

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой IT и автоматизация бизнеса
← На главную

При работе с номенклатурой или другими справочниками в 1С пользователи часто сталкиваются со странным поведением поиска. Например, при попытке найти товар с наименованием «Товар 25/40» через поле ввода, система может выдать в подсказках позиции, где эти числа стоят через пробел или в другом порядке. Разберем детально, почему так происходит, как на это влияет версия платформы и какие настройки позволяют добиться точного поиска по спецсимволам.

Причина 1: Глобальное изменение логики платформы в версии 8.3.16

Проанализируем поведение системы в зависимости от используемой версии платформы. Это ключевой фактор, который определяет, будут ли символы /, \, ., , и - восприниматься как часть искомой строки или как разделители слов.

В версиях платформы ниже 8.3.16:
Платформа жестко интерпретировала символы точки, запятой, тире и слэша как разделители. Если вы вводили «25/40», 1С разбивала этот запрос на два слова: «25» и «40». В результате поиск работал по логике «И», находя все строки, где встречаются оба этих числа, независимо от наличия слэша между ними. Именно поэтому в результатах поиска могли появляться позиции вида «Товар 25 артикул 40».

В версиях платформы 8.3.16 и выше:
Разработчики 1С изменили этот механизм. Теперь единственным стандартным разделителем при поиске считается пробел. Символы ., ,, -, / и \ больше не считаются разделителями и воспринимаются как обычные символы. Если ваша база работает на современной платформе, поиск по строке «25/40» должен искать именно это точное вхождение.

Причина 2: Использование полнотекстового поиска (ППС)

Выясним причину, по которой даже на новых платформах поиск может вести себя непредсказуемо. В настройках каждого справочника (например, «Номенклатура») существует свойство «Использовать полнотекстовый поиск при вводе по строке». Рассмотрим два варианта работы:

  1. ППС включен: Система отправляет запрос в индекс полнотекстового поиска. Если индекс не обновлен или символы разделителей в нем настроены иначе, поиск будет работать по правилам поисковых выражений. В языке ППС слэш может иметь специальное значение или игнорироваться, если он не включен в список индексируемых символов.
  2. ППС выключен: Платформа формирует прямой SQL-запрос к базе данных с использованием оператора ПОДОБНО (LIKE). В этом случае поиск по подстроке «25/40» отработает максимально точно, так как для базы данных это просто набор символов.

Как настроить точный поиск: пошаговое руководство

Разберем, какие действия необходимо предпринять программисту или администратору, чтобы поиск учитывал спецсимволы:

Шаг 1. Проверка свойств метаданных

Откроем конфигуратор и найдем нужный справочник. Перейдем на вкладку «Данные» и нажмем кнопку «Ввод по строке». Проверим, какие поля выбраны для поиска. Важно, чтобы реквизит (например, Наименование или Артикул) был индексирован. Рассмотрим настройку индексации: для качественного поиска по любой части строки у реквизита должно стоять свойство Индексировать.

Шаг 2. Настройка способа поиска

Посмотрим на свойство справочника «Способ выбора при вводе по строке». В современных типовых конфигурациях (УНФ, УТ 11, ERP) этот параметр часто управляется через настройки БСП. Рассмотрим варианты:

Шаг 3. Использование расширений для изменения поведения

Если вы работаете в облаке и не можете менять свойства метаданных напрямую, можно воспользоваться расширением. Рассмотрим пример кода, который можно внедрить в модуль менеджера объекта для переопределения стандартного поиска в процедуре ОбработкаПолученияДанныхВыбора:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    // Если пользователь ввел строку со слэшем
    Если СтрНайти(Параметры.СтрокаПоиска, "/") > 0 Тогда
        СтандартнаяОбработка = Ложь;
        
        // Формируем запрос вручную, чтобы избежать разбиения на слова
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ ПЕРВЫЕ 50
            |	Номенклатура.Ссылка КАК Ссылка,
            |	Номенклатура.Наименование КАК Наименование
            |ИЗ
            |	Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |	Номенклатура.Наименование ПОДОБНО &СтрокаПоиска";
            
        Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
        
        Результат = Запрос.Выполнить();
        ДанныеВыбора = Новый СписокЗначений;
        ДанныеВыбора.ЗагрузитьЗначения(Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"));
    КонецЕсли;
    
КонецПроцедуры

Шаг 4. Управление полнотекстовым поиском

Проанализируем ситуацию с полнотекстовым поиском. Если поиск по символам работает некорректно, попробуйте временно отключить использование полнотекстового поиска для ввода по строке в свойствах справочника. Это заставит систему использовать механизм ПОДОБНО, который более прямолинеен при работе со спецсимволами.

Также важно помнить про синтаксис поисковых выражений. Если ППС включен, попробуйте заключать строку в двойные кавычки при вводе, например: ""25/40"". Это указывает поисковому движку на необходимость поиска точной фразы. Однако, как показывает практика обсуждений, в облачных решениях этот механизм может быть программно ограничен разработчиками конфигурации.

Выводы и рекомендации

Подведем итог. Чтобы поиск в 1С учитывал слэши и другие знаки препинания:

  1. Убедитесь, что используется платформа версии 8.3.16 или выше.
  2. Проверьте, не включен ли полнотекстовый поиск для данного поля ввода. Если включен — обновите индекс или попробуйте его отключить.
  3. Установите режим «Поиск по любой части» в настройках программы или свойствах метаданных.
  4. Если стандартные средства не помогают (особенно в облаке), используйте программный перехват в ОбработкаПолученияДанныхВыбора для реализации собственного алгоритма поиска.

Рассмотренные методы позволяют гибко настроить систему под нужды пользователей, работающих со сложными артикулами и наименованиями, содержащими технические символы.

← На главную