В процессе работы с конфигурацией 1С:Зарплата и Управление Персоналом 3.1 (КОРП) пользователи часто сталкиваются с неприятной ситуацией: при заполнении документов в поле Сотрудник, когда начинается ввод первых букв фамилии, в выпадающем списке (быстром выборе) появляются «дубли». При детальном анализе выясняется, что это не дубли в прямом смысле, а карточки того же человека по старым, уже завершенным рабочим местам или периодам работы, помеченные признаком В архиве. Рассмотрим подробно, почему стандартные фильтры перестают работать и как решить эту проблему программными и административными методами.
В платформе 1С существует два основных способа выбора данных в поле ввода: полноценное окно выбора (которое открывается по кнопке «Показать все») и механизм быстрого выбора (автоподбор при вводе текста). В норме оба этих механизма должны подчиняться свойству ПараметрыВыбора, установленному для реквизита в конфигураторе или программно. В случае с сотрудниками за отсечение «архивных» записей отвечает параметр Отбор.ВАрхиве(Ложь).
Разберем ситуацию, когда в окне «Показать все» архивные сотрудники скрыты, а в быстром списке они продолжают появляться. Это происходит из-за программной ошибки в определенных релизах конфигурации (ветка 3.1.10) и платформы. Ошибка зарегистрирована под номером 000058179. Суть ее заключается в том, что при оптимизации поиска «на лету» система игнорирует фиксированные массивы параметров выбора, обращаясь к упрощенному индексу данных без учета установленных фильтров Отбор.
Самый простой и правильный способ решения проблемы — переход на актуальный релиз. Разработчики 1С признали ошибку и выпустили исправления. Проблема с игнорированием параметров выбора в режиме автоподбора была устранена, начиная с версии 3.1.11. Если ваша информационная база находится на версии 3.1.10 (которая долгое время была версией с длительной поддержкой), необходимо запланировать переход на более современную ветку (3.1.14, 3.1.18, 3.1.23 и выше).
В современных релизах логика была пересмотрена. Теперь контроль актуальности сотрудников завязан не только на параметры выбора, но и на глобальные настройки пользователя, такие как флаг «Скрывать сотрудников, по которым работа завершена». Проверим эту настройку в справочнике Сотрудники, так как она напрямую влияет на формирование динамических списков подбора.
Если оперативное обновление невозможно, проанализируем программный метод исправления через механизм расширений. Мы можем перехватить событие обработки выбора или изменения поля, чтобы принудительно проверять статус сотрудника. Рассмотрим пример логики, которую можно реализовать в расширении для формы документа:
&НаКлиенте
Процедура Расш_СотрудникПриИзмененииПосле(Элемент)
ТекущийСотрудник = Объект.Сотрудник;
Если ЗначениеЗаполнено(ТекущийСотрудник) Тогда
// Вызываем серверную функцию для проверки статуса архива
Если СотрудникВАрхиве(ТекущийСотрудник) Тогда
ТекстСообщения = "Выбранный сотрудник " + ТекущийСотрудник + " находится в архиве!";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , "Объект.Сотрудник");
// Попытка найти актуальную карточку того же физлица
АктуальныйСотрудник = НайтиАктуальногоСотрудника(ТекущийСотрудник);
Если ЗначениеЗаполнено(АктуальныйСотрудник) Тогда
Объект.Сотрудник = АктуальныйСотрудник;
Иначе
Объект.Сотрудник = ПредопределенноеЗначение("Справочник.Сотрудники.ПустаяСсылка");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В данном примере мы используем обработчик ПриИзменении. Как только пользователь выбирает «Пупкина» из выпадающего списка, система проверяет реквизит ВАрхиве. Если он истинен, программа выдает предупреждение и автоматически подставляет актуальную ссылку на действующий трудовой договор того же физического лица. Это позволяет избежать ошибок учета, когда начисления попадают на закрытые личные карточки.
Иногда даже после обновления или настройки всех фильтров «лишние» сотрудники продолжают всплывать первыми в списке. Выясним причину этого поведения. Платформа 1С:Предприятие 8.3 имеет механизм «История выбираемых данных». Система запоминает, какие элементы пользователь выбирал ранее, и подсовывает их в начало списка автоподбора для удобства.
Если бухгалтер по ошибке несколько раз выбрал архивного сотрудника, платформа «решит», что этот элемент наиболее релевантен. Чтобы исправить это, выполним следующие действия:
После этой процедуры платформа перестанет приоритезировать старые записи, и механизмы фильтрации ПараметрыВыбора начнут работать корректно.
Механизм быстрого выбора часто опирается на индексы полнотекстового поиска (ППС). Если индекс поврежден или не обновлен, в списке могут отображаться данные, которые уже были изменены или помечены на удаление. Проанализируем состояние ППС:
Полное пересоздание индекса гарантирует, что система «забудет» старые связи архивных сотрудников и будет использовать актуальные данные при поиске по строке.
В некоторых случаях флаг ВАрхиве может быть установлен визуально, но не зафиксирован в специальных регистрах сведений, которые используются системой для фильтрации. Рассмотрим административный метод «подталкивания» данных. Используем стандартную обработку «Групповое изменение реквизитов»:
Сотрудники.Пометка на удаление = Да (если они удалены).Скрывать в списках или В архиве.Да и выполним изменение.Это принудительное обновление объектных данных часто помогает «проснуться» механизмам платформы, которые игнорировали изменения, внесенные программно при проведении документа Увольнение.
Проблема с отображением пяти «Пупкиных» в списке быстрого выбора обычно является комбинацией программного бага старых релизов и работы механизмов кэширования платформы (История выбора). Для окончательного исправления ситуации рекомендуем: