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

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

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

Подготовка метаданных в режиме предприятия

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

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

Для добавления владельца необходимо найти нужный справочник в дереве метаданных расширения. Разверните ветку «Справочники», найдите требуемый объект и убедитесь, что он доступен для изменения. Если значок объекта заблокирован, проверьте права доступа или режим совместимости расширения.

Добавление нового реквизита выполняется через контекстное меню элемента справочника. Выберите пункт «Добавить» -> «Реквизит». В открывшемся окне свойств задайте имя, например, ВладелецЭлемента, и выберите тип данных.

⚠️ Внимание: Тип данных для владельца должен строго соответствовать типу, используемому в системе для идентификации пользователей. Чаще всего это ссылка на справочник Пользователи или предопределенное значение ПользовательИнформационнойБазы.

Убедитесь, что длина поля достаточна для хранения ссылки. Для типов данных «Ссылка» этот параметр обычно не требует ручной настройки, так как определяется системой автоматически. Однако для строковых идентификаторов длина должна быть не менее 36 символов для хранения UUID.

Настройка свойств реквизита владельца

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

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

Критически важным параметром является «Заполнение». Если вы хотите, чтобы владелец назначался автоматически при создании нового элемента, выберите значение «По умолчанию». В поле значения укажите выражение ПользовательИнформационнойБазы.ТекущийПользователь.

  • 🔹 Тип данных: Ссылка на справочник «Пользователи» или «ГруппыПользователей».
  • 🔹 Использование: Обычное или Служебное (для скрытия из основных отчетов).
  • 🔹 Заполнение: По умолчанию (для автоматической подстановки текущего пользователя).
  • 🔹 Индексирование: Рекомендуется включить для ускорения выборки данных по владельцу.

Индексирование реквизита особенно важно, если планируется частая выборка данных с фильтром по владельцу в отчетах или динамических списках. Без индекса производительность выборки на больших объемах данных может существенно снизиться.

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

Модификация формы элемента справочника

Добавленный реквизит не появится на форме автоматически. Для того чтобы пользователь мог видеть или изменять владельца, необходимо модифицировать форму элемента справочника в составе расширения. Найдите в дереве метаданных расширение, затем нужный справочник и перейдите в раздел «Формы».

Создайте новую форму или откройте основную форму элемента для редактирования. В конструкторе форм найдите группу реквизитов, куда логично поместить поле владельца. Обычно это вкладка «Дополнительно» или отдельная группа «Настройки доступа».

Перетащите созданный ранее реквизит ВладелецЭлемента из панели доступных полей на форму. Настройте свойства элемента управления: установите вид «Поле ввода» и привязку к данным.

📊 Какой сценарий использования владельца вы реализуете?
Персональные данные
Разграничение прав
Маркировка документов
Аудит изменений
Другое

Если поле должно быть доступно только для чтения после создания элемента, используйте события формы. В модуле формы обработайте событие ПриСозданииНаСервере или ПередЗаписью, чтобы блокировать изменение поля для определенных ролей.

⚠️ Внимание: Изменение видимости реквизита через свойства формы не защищает данные от записи через внешние обработки или API. Для реальной защиты прав доступа необходимо настраивать роли.

Для сложных сценариев можно использовать условное оформление. Например, если владелец не назначен, подсветите поле красным цветом, сигнализируя о необходимости заполнения. Это улучшит эргономику работы оператора.

Особенности работы с предопределенными элементами

Одной из самых частых проблем при добавлении новых реквизитов в справочники через расширение является работа с предопределенными элементами. Эти элементы создаются при установке конфигурации и имеют фиксированный набор реквизитов в момент своего создания.

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

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

Тип элемента Поведение при обновлении Необходимые действия
Новый элемент Реквизит создается и заполняется Настроить заполнение по умолчанию
Существующий (введенный) Реквизит добавляется, значение пустое Обработка заполнения данных
Предопределенный Реквизит добавляется, значение пустое Спец. обработка или код в модуле

Наиболее надежный способ заполнить владельцев для существующей номенклатуры — создать внешнюю обработку или задание, которое пройдется по всем элементам справочника и назначит владельца согласно бизнес-логике (например, текущему администратору или ответственному подразделению).

Как обновить предопределенные элементы программно?

Для этого можно использовать метод spravochik.PredopredelennyeElementy() в общем модуле, но помните, что запись в предопределенные элементы требует особых прав и может быть заблокирована в некоторых режимах запуска.

Настройка прав доступа и ролей

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

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

Используйте механизм «Ограничивающие права» (Limiting Rights). Создайте роль, которая разрешает чтение справочника только с условием: ВладелецЭлемента = &ТекущийПользователь. Назначьте эту роль пользователям, которым нужно ограничить видимость данных.

  • 🚀 Полный доступ: Роль для администраторов, позволяющая видеть и менять всех владельцев.
  • 👁️ Только чтение своих: Роль с ограничением по реквизиту владельца.
  • ✏️ Редактирование: Право на запись реквизита владельца (обычно только для руководителей).

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

💡

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

Тестирование и обновление базы данных

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

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

Обязательно протестируйте работу формы создания и редактирования элемента. Проверьте, подставляется ли владелец по умолчанию, сохраняется ли он при записи, и корректно ли работает фильтрация в списках.

⚠️ Внимание: Перед обновлением промышленной базы данных обязательно сделайте резервную копию (бэкап). Добавление полей в таблицы с большим количеством записей необратимо и в случае сбоя может привести к повреждению данных.

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

☑️ Контрольный список перед обновлением

Выполнено: 0 / 5

Часто задаваемые вопросы

Можно ли сделать реквизит владельца обязательным для заполнения?

Да, это можно сделать двумя способами. Первый — установить флаг «Непустой» в свойствах реквизита в метаданных. Второй — программно контролировать заполнение в событии ПередЗаписью модуля объекта или формы, выдавая сообщение пользователю, если поле пустое.

Как перенести владельца при копировании элемента справочника?

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

Влияет ли добавление реквизита в расширение на скорость работы списка?

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

Что делать, если после обновления расширение не видит новый реквизит?

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

💡

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