Как включить и правильно использовать поиск по коду в форме списка 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Работа с платформой 1С:Предприятие 7.7 сегодня часто вызывает вопросы даже у опытных специалистов, поскольку многие механизмы этой версии существенно отличаются от современных стандартов 1С 8.3. Одной из таких особенностей является поведение поиска в форме списка справочника. Пользователи часто сталкиваются с ситуацией: при вводе символов в колонке «Наименование» система мгновенно позиционируется на нужном элементе, но при попытке аналогичного поиска по колонке «Код» ничего не происходит. Рассмотрим подробно, почему так возникает и как настроить корректную работу поиска.

Причина проблемы: Особенности хранения числового кода

Для начала проанализируем ситуацию с технической стороны. В 1С 7.7 тип данных «Код» для справочника может быть либо текстовым, либо числовым. Разберем разницу в их хранении на уровне базы данных (будь то файлы DBF или таблицы SQL):

  1. Текстовый код: Хранится с выравниванием по левому краю. Если длина кода установлена в 5 символов, а значение кода «10», то в базе оно выглядит как «10 » (с пробелами в конце). Поиск в этом случае работает интуитивно — пользователь нажимает «1», затем «0», и система сразу находит элемент.
  2. Числовой код: Несмотря на название, в 1С 7.7 он также хранится как строка фиксированной длины, но с правым выравниванием. Если длина кода 5 символов, то число 10 превращается в строку « 10» (с тремя лидирующими пробелами).

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

Способ 1: Использование лидирующих пробелов

Самый простой «лайфхак» для пользователя, не требующий изменения конфигурации, заключается в ручном вводе недостающих символов. Если мы знаем, что длина кода в справочнике составляет, например, 5 символов, а нам нужно найти код «1»:

В этот момент система увидит строку « 1» и успешно выполнит позиционирование. Проанализируем удобство этого метода: он подходит для редких операций, но крайне неудобен при массовой работе. Опытные пользователи часто используют строку состояния (нижняя панель экрана), чтобы видеть, сколько пробелов они уже ввели.

Способ 2: Переключение режима сортировки

Важно понимать, что быстрый поиск (интерактивный набор символов) в 1С 7.7 неразрывно связан с текущим индексом. Система ищет данные только в той колонке, по которой в данный момент отсортирован список. Если список отсортирован по наименованию, ввод цифр может либо не дать результата, либо привести к поиску наименования, начинающегося с цифры.

Разберем, как быстро переключать режимы поиска с помощью горячих клавиш:

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

Способ 3: Настройка свойств «Поиск по вводу» в Конфигураторе

Если вы являетесь разработчиком, проанализируйте настройки справочника в Конфигураторе. У каждого справочника есть свойство «Поиск по вводу». Оно определяет, по какому полю будет осуществляться быстрый поиск по умолчанию.

Для активации возможности поиска выполните следующие шаги:

  1. Откройте дерево метаданных и перейдите к нужному справочнику.
  2. Убедитесь, что для реквизита Код установлена галочка «Сортировка». Без этого индекса поиск невозможен.
  3. В основных свойствах справочника установите значение «По коду» или «По наименованию» в поле «Поиск по вводу».

Программные способы оптимизации

Рассмотрим более продвинутые методы, которые позволяют избавить пользователя от необходимости вводить пробелы. Самый эффективный из них — смена типа кода с числового на текстовый. Рассмотрим по шагам, как это сделать правильно:

  1. В Конфигураторе измените тип кода справочника на «Текстовый».
  2. Убедитесь, что длина кода достаточна для хранения ваших данных.
  3. При сохранении изменений 1С автоматически преобразует данные. Теперь коды будут выровнены по левому краю («100 »), и поиск станет работать мгновенно без всяких пробелов.

Если же изменять структуру метаданных нельзя (например, в сильно кастомизированных базах, где на числовой тип кода завязаны сложные алгоритмы), можно воспользоваться внешними компонентами, такими как FormEx. С их помощью можно перехватить событие нажатия клавиши в форме списка и программно «добить» строку пробелами слева перед выполнением поиска.

Пример логики для перехвата (условный синтаксис):


// В обработке ожидания или через перехват событий FormEx
Процедура ПриНажатииКнопкиКлавиатуры(Контекст, Клавиша)
    Если ТекущаяКолонка = "Код" Тогда
        // Здесь можно реализовать программное позиционирование
        // через АктивизироватьОбъект() или НайтиСледующийУзел()
    КонецЕсли;
КонецПроцедуры

Влияние иерархии и серий кодов

Напоследок разберем еще один нюанс — Серии кодов. В настройках справочника может быть установлено значение «В пределах подчинения». В этом случае, если пользователь находится внутри группы (папки), быстрый поиск будет работать только среди элементов этой группы. Чтобы найти элемент в другом месте, придется либо выйти в корень справочника, либо использовать стандартный диалог поиска (вызываемый через Ctrl + F или иконку бинокля).

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

Резюмируем: Для корректного поиска по коду в 1С 7.7 необходимо либо использовать текстовый тип кода, либо не забывать о лидирующих пробелах при числовом коде, предварительно убедившись, что список отсортирован по колонке «Код» (Ctrl + 1).

← На главную