Справочник «Пользователи» в своей конфигурации 1С: от метаданных до прав доступа
Содержание
Справочник «Пользователи» в 1С создают в Конфигураторе как обычный справочник и связывают каждый элемент с учётной записью информационной базы через реквизит типа УникальныйИдентификатор. Затем добавляют параметр сеанса ТекущийПользователь и роли с правами на сам справочник. Если конфигурация строится на Библиотеке стандартных подсистем (БСП), справочник не пишут с нуля, а внедряют готовую подсистему «Пользователи».
Тема общая для платформы 8.3 и не зависит от прикладного решения: речь о разработке своей или доработке нетиповой конфигурации. В типовых БП 3.0, ЗУП 3.1 и УТ 11 справочник уже есть, туда его создавать не нужно.
Пользователь информационной базы и элемент справочника: в чём разница
Платформа сама по себе ничего не знает про справочник «Пользователи». У неё есть свой список учётных записей: в Конфигураторе это Администрирование → Пользователи, а из кода — менеджер ПользователиИнформационнойБазы. Там хранятся имя для входа, хеш пароля, способ аутентификации и набор ролей.
Справочник нужен для того, что платформа хранить не умеет:
- 👤 ссылка на пользователя в документах: «Ответственный», «Автор», «Менеджер»;
- 🏢 связь с физлицом, подразделением, складом по умолчанию;
- 🚫 признак «Недействителен» для уволенных, чтобы не удалять историю;
- 📇 контакты, комментарии, служебные отметки.
Связь между двумя сущностями — один реквизит с идентификатором учётной записи. Имя для входа для этого не годится: его переименовывают, а уникальный идентификатор пользователя ИБ не меняется за всю его жизнь.
Перед началом решите, кто будет заводить пользователей. Правильный ответ — администратор из режима 1С:Предприятие, через карточку справочника. Конфигуратор остаётся для первой учётной записи и аварийных случаев.
Создание справочника Пользователи в Конфигураторе
Откройте дерево конфигурации, правой кнопкой по ветке «Справочники» — «Добавить». Задайте свойства на вкладках окна редактирования объекта.
| Свойство | Значение | Почему так |
|---|---|---|
| Имя | Пользователи | Под этим именем объект ждут типовые приёмы и БСП |
| Синоним | Пользователи | Так справочник видят в интерфейсе |
| Иерархический | Нет | Группы удобнее вынести в отдельный справочник |
| Длина кода | 0 | Код пользователю не нужен, ищут по ФИО |
| Длина наименования | 100 | Хватает на полное ФИО с инициалами |
| Основное представление | В виде наименования | В полях документов видно ФИО |
| Проверка уникальности | По желанию | Однофамильцы бывают, лучше контролировать кодом |
Справочник лучше включить в подсистему «Администрирование» или аналогичную, чтобы он не мелькал на рабочих местах бухгалтеров.
Группы пользователей, если они нужны, заведите отдельным справочником «ГруппыПользователей» с табличной частью «Состав». Так один сотрудник может входить в несколько групп сразу, а в иерархическом справочнике он сидит только в одной папке.
Реквизиты справочника пользователей и типы данных
Минимальный набор, без которого справочник неполноценен:
| Реквизит | Тип | Назначение |
|---|---|---|
ИдентификаторПользователяИБ | УникальныйИдентификатор | Связь с учётной записью ИБ, индексировать |
Недействителен | Булево | Сотрудник уволен, вход закрыт |
Служебный | Булево | Технические учётные записи для обменов и регламентных заданий |
ФизическоеЛицо | СправочникСсылка.ФизическиеЛица | Если такой справочник есть в конфигурации |
Подразделение | СправочникСсылка на ваш справочник подразделений | Для отборов и прав |
Комментарий | Строка неограниченной длины | Свободные заметки |
У реквизита ИдентификаторПользователяИБ поставьте свойство «Индексировать». По нему ищут элемент при каждом входе в программу, и без индекса на сотнях пользователей запрос станет заметно медленнее.
Пароль в справочнике не храните никогда — ни открытым текстом, ни «зашифрованным». Пароль живёт только у пользователя ИБ, платформа хранит его хеш. На форме элемента пароль — это реквизит формы, который передают в учётную запись и сразу забывают.
Имя для входа тоже не дублируйте реквизитом справочника. Два места хранения рано или поздно разойдутся. Показывайте имя на форме, читая его из пользователя ИБ.
Формы списка и элемента: как карточка управляет учётной записью
Форма списка
Создайте форму списка через конструктор форм. Что стоит добавить сразу:
- Отбор по
Недействителен = Ложьпо умолчанию, с флажком «Показывать недействительных». - Скрытие служебных учётных записей от всех, кроме администратора.
- Колонку «Вход разрешён», если хотите видеть, у кого есть учётная запись. Это вычисляемое поле: заполненный идентификатор ещё не гарантирует, что пользователь ИБ существует.
Форма элемента
Форму элемента делят на две части: данные справочника (ФИО, подразделение, физлицо) и группу «Вход в программу». Во второй группе — реквизиты формы, не объекта:
ИмяДляВхода— строка;НовыйПарольиПодтверждениеПароля— строки со свойством поля «Режим пароля»;ВходРазрешен— булево.
При открытии карточки имя подтягивают из учётной записи в обработчике ПриЧтенииНаСервере, а при записи создают или обновляют пользователя ИБ в ПередЗаписьюНаСервере. Пример рабочей схемы:
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Если Не ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяИБ) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
ТекущийОбъект.ИдентификаторПользователяИБ);
Если ПользовательИБ <> Неопределено Тогда
ИмяДляВхода = ПользовательИБ.Имя;
ВходРазрешен = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если Не ВходРазрешен Или Не ЗначениеЗаполнено(ИмяДляВхода) Тогда
Возврат;
КонецЕсли;
Если НовыйПароль <> ПодтверждениеПароля Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Пароль и подтверждение не совпадают";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ПользовательИБ = Неопределено;
Если ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяИБ) Тогда
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
ТекущийОбъект.ИдентификаторПользователяИБ);
КонецЕсли;
Если ПользовательИБ = Неопределено Тогда
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Роли.Добавить(Метаданные.Роли.БазовыеПрава);
КонецЕсли;
ПользовательИБ.Имя = ИмяДляВхода;
ПользовательИБ.ПолноеИмя = ТекущийОбъект.Наименование;
ПользовательИБ.АутентификацияСтандартная = Истина;
ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
Если ЗначениеЗаполнено(НовыйПароль) Тогда
ПользовательИБ.Пароль = НовыйПароль;
КонецЕсли;
Попытка
ПользовательИБ.Записать();
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось записать пользователя ИБ: " + ОписаниеОшибки();
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецПопытки;
ТекущийОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
НовыйПароль = "";
ПодтверждениеПароля = "";
КонецПроцедуры
Роль БазовыеПрава в примере — условное имя: подставьте свою роль с минимальным набором прав. Если такой роли нет, строка вызовет ошибку при записи.
Пример проверяет заполнение до записи учётной записи не случайно. Если элемент справочника потом не запишется, пользователь ИБ уже будет создан, и его придётся убирать вручную. Все проверки ставьте выше блока записи.
ПоказыватьВСпискеВыбора = Ложь прячет список имён в окне входа. Посторонний человек за чужим компьютером не увидит, какие учётные записи есть в базе.
Параметр сеанса ТекущийПользователь
Чтобы в документы автоматически подставлялся автор, а ограничения доступа понимали, кто работает, нужен параметр сеанса. В ветке «Общие → Параметры сеанса» добавьте ТекущийПользователь с типом СправочникСсылка.Пользователи.
Заполняется он в модуле сеанса, процедура УстановкаПараметровСеанса. Модуль сеанса работает в привилегированном режиме, поэтому чтение справочника пройдёт даже у пользователя без прав на него.
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
УИД = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| Пользователи.Ссылка КАК Ссылка
|ИЗ
| Справочник.Пользователи КАК Пользователи
|ГДЕ
| Пользователи.ИдентификаторПользователяИБ = &УИД");
Запрос.УстановитьПараметр("УИД", УИД);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ПараметрыСеанса.ТекущийПользователь = Выборка.Ссылка;
Иначе
ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
Пустая ссылка в ветке «Иначе» — осознанное решение для базы без учётных записей. Если вход без элемента справочника запрещён, в этом месте вызывайте исключение с понятным текстом: сеанс не запустится, и человек увидит причину.
Дальше параметр используют где угодно: в ПриСозданииНаСервере документа для заполнения «Ответственного», в запросах, в шаблонах ограничения доступа на уровне записей.
Подсистема «Пользователи» из БСП вместо ручной разработки
Если конфигурация уже на БСП или вы готовы её подключить, ручной справочник не нужен. В подсистеме «Пользователи» есть всё описанное выше и больше: справочники «Пользователи», «Группы пользователей», «Внешние пользователи», синхронизация с учётными записями, смена пароля, контроль сложности, настройки входа.
Как внедряют:
- Скачайте дистрибутив БСП той версии, которая подходит к вашей платформе по номеру (минимальный номер платформы указан в документации к поставке).
- В Конфигураторе — сравнение и объединение с конфигурацией из файла БСП.
- В окне сравнения снимите все флажки и отметьте объекты по подсистемам файла: «Пользователи» и обязательную «Базовая функциональность». Помощник первоначального внедрения из поставки БСП сам подскажет зависимые подсистемы.
- Объедините, обновите конфигурацию базы данных, запустите режим 1С:Предприятие и дождитесь выполнения обработчиков обновления.
После внедрения пользуйтесь программным интерфейсом общего модуля Пользователи: Пользователи.ТекущийПользователь(), Пользователи.АвторизованныйПользователь(), Пользователи.ЭтоПолноправныйПользователь(). Свою логику добавляют в переопределяемых модулях подсистемы, а не правкой её кода, иначе каждое обновление БСП превратится в ручное объединение.
| Вариант | Когда выбрать | Чем платите |
|---|---|---|
| Свой справочник | Маленькая конфигурация, 5–10 объектов, нет планов на БСП | Пишете и сопровождаете всё сами |
| Подсистема БСП | Конфигурация растёт, нужны группы доступа и внешние пользователи | Тянете зависимости, обновляете вместе с БСП |
Не смешивайте варианты. Если в конфигурации уже есть свой справочник «Пользователи», а вы внедряете БСП, объекты совпадут по имени. Решите заранее: переносить данные в справочник БСП или переименовывать свой.
Права доступа к справочнику Пользователи
Справочник «Пользователи» — чувствительный объект: через карточку меняют пароли и роли. Права раздают по ролям в ветке «Общие → Роли».
| Роль | Права на справочник | Что может человек |
|---|---|---|
| Полные права (администратор) | Все, включая «Администрирование» на уровне конфигурации | Создавать учётные записи, менять пароли и роли |
| Базовая роль сотрудника | Чтение, Просмотр | Выбирать коллегу в поле «Ответственный» |
| Кадровик (по желанию) | Чтение, Просмотр, Изменение | Править ФИО и подразделение, но не вход |
Три правила, которые часто упускают:
- 🔑 Запись пользователя ИБ требует права «Администрирование». Обычному сотруднику это право не давайте: всё, что он делает с учётными записями, идёт через серверный код в привилегированном режиме. Вызов того же кода без привилегированного режима закончится сообщением
Нарушение прав доступа!. - 🗑 Право «Интерактивное удаление» снимите у всех. Пользователя помечают «Недействительным» и отключают вход, а не удаляют: на него ссылаются тысячи документов.
- ✏️ Чтобы сотрудник мог сменить свой пароль, не давайте ему «Изменение» на справочник. Сделайте отдельную форму и серверную процедуру, которая в привилегированном режиме меняет пароль только текущему пользователю.
Если нужно, чтобы кадровик видел только своё подразделение, настройте ограничение доступа на уровне записей по реквизиту Подразделение. Учтите, что такие ограничения замедляют списки, и проверьте их на реальном объёме данных.
Типичные ошибки при работе со справочником пользователей
Здесь собраны сбои, которые возникают уже после разработки, при первых запусках и заведении людей.
Ещё одна ошибка проектирования — использовать поле «Имя» учётной записи в запросах вместо ссылки на справочник. Сотрудница выходит замуж, администратор меняет логин, и все отчёты «по автору» за прошлые годы рассыпаются.
Частые вопросы
Можно ли обойтись без справочника и хранить в документах имя пользователя ИБ строкой?
Что будет с элементом справочника, если удалить пользователя ИБ в Конфигураторе?
Как подключить вход через Windows для пользователей справочника?
АутентификацияОС и заполните ПользовательОС в формате \\ДОМЕН\логин. На форме элемента добавьте для этого отдельные поля.