При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 (особенно начиная с релизов ветки 3.1.13 и выше) пользователи часто сталкиваются с неожиданным поведением интерфейса. Типичная ситуация: вы пытаетесь кастомизировать форму списка справочника Сотрудники под свои нужды, нажимаете кнопку "ЕЩЕ" — "Изменить форму", переходите к расширению состава полей через Ссылка, но открывающееся окно выбора оказывается абсолютно пустым. Проблема проявляется даже на демонстрационных базах и не решается стандартной очисткой кэша.
В этой статье мы подробно разберем, почему система ведет себя именно так, как вернуть возможность выбора полей и какие последствия это может иметь для производительности вашей информационной базы.
Для начала проанализируем ситуацию с точки зрения архитектуры платформы 1С:Предприятие 8.3. Справочник Сотрудники является одним из самых высоконагруженных объектов в системе. В крупных организациях количество записей может исчисляться десятками и сотнями тысяч. Чтобы обеспечить мгновенное открытие формы и плавную прокрутку (скроллинг), разработчики фирмы "1С" применяют механизмы жесткой оптимизации динамических списков.
Когда мы открываем форму списка, система выполняет запрос к базе данных. Если в настройках программы не разрешено использование произвольных полей для сортировки и отбора, динамический список работает в "урезанном", но сверхбыстром режиме. В этом режиме платформа блокирует возможность обращения к реквизитам через точку от объекта Ссылка в пользовательском режиме, чтобы предотвратить случайное добавление "тяжелых" полей, которые потребуют сложных соединений (LEFT JOIN) на уровне SQL-запроса.
Выясним, как снять это ограничение. Решение кроется в настройках кадрового учета, которые напрямую управляют поведением формы списка сотрудников.
Пошаговый алгоритм действий:
Сотрудники.Теперь, если мы снова воспользуемся командой "Изменить форму" и попробуем добавить поля через Ссылка, окно выбора будет заполнено всеми доступными реквизитами объекта (Дата приема, Подразделение, Должность, График работы и т.д.).
Рассмотрим подробнее, почему к этой настройке стоит относиться с осторожностью. В сообщении форума упоминается база с численностью 30 000 сотрудников. Это серьезный объем данных.
Когда опция "сортировка по любым колонкам" включена, динамический список переходит из режима фиксированного запроса в режим построения произвольного запроса. Проанализируем ситуацию: если обычный пользователь добавит в список поле, которое не проиндексировано в базе данных (например, какой-то строковый дополнительный реквизит), то при каждой попытке поиска или сортировки сервер 1С будет вынужден сканировать всю таблицу сотрудников. Это может привести к значительным задержкам — форма будет "замирать" на несколько секунд при каждом действии.
Рекомендация: Если после включения этой настройки вы заметили, что список стал работать медленнее, попробуйте ограничить количество выводимых колонок только самыми необходимыми.
Второй вопрос, который часто возникает одновременно с первым — почему табельный номер (код сотрудника) визуально обрезается до 10 символов, хотя в конфигураторе для него установлена длина 12? Проанализируем возможные причины:
Сотрудники составляет именно 10 символов. Если в вашей базе установлено 12, значит, имело место вмешательство в конфигурацию (кастомизация).Табельный номер в самой форме списка. Часто там жестко задана Ширина (например, 10), и свойство РастягиватьПоГоризонтали установлено в значение Ложь. В этом случае, даже если в базе хранится 12 символов, на экране вы увидите только первые 10.Маска или Формат. Если программно задана форматная строка типа ЧГ=0 или ограничение длины, это будет визуально "обрезать" данные.Если вам необходимо видеть все 12 символов, убедитесь через "Изменить форму", что для поля Код не установлена фиксированная ширина, мешающая отображению.
Если вы опасаетесь включать общую настройку сортировки по всем колонкам из-за рисков замедления базы, рассмотрим альтернативные варианты решения задачи:
1. Использование дополнительных реквизитов
Вместо того чтобы "вытаскивать" стандартные поля через Ссылка, можно воспользоваться механизмом Дополнительных реквизитов и сведений (раздел Администрирование — Общие настройки). Дополнительные реквизиты, созданные пользователем, часто более "гуманно" встраиваются в динамические списки и позволяют выводить нужную информацию без включения глобальных разрешений на сортировку по всему справочнику.
2. Расширения конфигурации
Для программиста самым правильным способом будет создание небольшого расширения. В расширении можно изменить текст запроса динамического списка (СпискиСотрудников), добавив туда нужные поля напрямую. Это позволит:
Пример добавления поля в запрос через расширение (схематично):
ВЫБРАТЬ
СправочникСотрудники.Ссылка КАК Ссылка,
СправочникСотрудники.Код КАК ТабельныйНомер,
СправочникСотрудники.ФизическоеЛицо.ДатаРождения КАК ДатаРождения // Добавляем нужное поле
ИЗ
Справочник.Сотрудники КАК СправочникСотрудники
Мы выяснили, что "пустое окно" — это не баг, а защитный механизм системы. Для небольших и средних баз включение настройки "Использовать в списке сотрудников сортировку и отбор по любым колонкам" является самым простым и эффективным решением. Однако для крупных предприятий с десятками тысяч сотрудников следует отдавать предпочтение точечной настройке формы через расширения конфигурации или использованию дополнительных реквизитов, чтобы сохранить производительность кадровой службы на должном уровне.