Почему дублируются элементы при подборе в выпадающем списке и как это исправить

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

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

Анализ механизма автоподбора

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

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


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    // Здесь обычно описывается запрос или алгоритм подбора
КонецПроцедуры

Причина №1: Некорректное использование флага СтандартнаяОбработка

Это самая распространенная ошибка. Выясним причину: когда мы пишем собственный код для формирования списка ДанныеВыбора, платформа по умолчанию все равно планирует выполнить свой стандартный поиск. Если мы заполнили параметр ДанныеВыбора, но не установили СтандартнаяОбработка = Ложь, система выполнит следующее:

  1. Добавит в список элементы, которые нашел ваш программный код.
  2. Добавит в этот же список результаты своего стандартного поиска по наименованию или коду.

В результате пользователь видит дубли. Чтобы этого избежать, всегда отключайте стандартную обработку, если формируете список самостоятельно:


Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отключаем стандартный механизм
    
    СписокСотрудников = Новый СписокЗначений;
    // Логика заполнения списка...
    
    ДанныеВыбора = СписокСотрудников;
    
КонецПроцедуры

Причина №2: Ошибки в запросе при соединении таблиц

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


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Ссылка,
    Сотрудники.Наименование КАК Представление
ИЗ
    Справочник.Сотрудники КАК Сотрудники
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИстория
    ПО Сотрудники.Ссылка = КадроваяИстория.Сотрудник
ГДЕ
    Сотрудники.Код ПОДОБНО &ТекстПоиска + "%"

Если у сотрудника в истории несколько записей (приемы, перемещения), то левое соединение вернет столько строк, сколько записей в регистре. Для исправления ситуации обязательно используем ключевое слово РАЗЛИЧНЫЕ или соединяемся с виртуальной таблицей СрезПоследних.

Причина №3: Проблемы полнотекстового поиска

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

  1. Перейдем в раздел Администрирование — Обслуживание — Полнотекстовый поиск.
  2. Нажмем кнопку «Очистить индекс», а затем «Обновить индекс».

В некоторых случаях полное перестроение индекса мгновенно решает проблему без правки программного кода.

Причина №4: Дублирование в самих данных

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


ВЫБРАТЬ
    Сотрудники.Код,
    Сотрудники.Наименование,
    КОЛИЧЕСТВО(Сотрудники.Ссылка) КАК Количество
ИЗ
    Справочник.Сотрудники КАК Сотрудники
СГРУППИРОВАТЬ ПО
    Сотрудники.Код,
    Сотрудники.Наименование
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Сотрудники.Ссылка) > 1

Если запрос вернул строки — значит, в справочнике действительно есть физические дубли, которые нужно объединить обработкой «Поиск и удаление дублей».

Причина №5: Специфика учета в ЗУП и ERP

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

В таких случаях рекомендуется проверить обращение к регистру ОсновныеСотрудникиФизическихЛиц. Этот регистр помогает системе понять, какую именно карточку сотрудника считать основной для отображения в списках выбора, чтобы избежать визуального замусоривания интерфейса.

Резюме по исправлению

Подведем итоги. Если вы столкнулись с дублями в выпадающем списке:

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

← На главную