Справочник «Пользователи» в своей конфигурации 1С: от метаданных до прав доступа

· 9 мин

Содержание

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

Тема общая для платформы 8.3 и не зависит от прикладного решения: речь о разработке своей или доработке нетиповой конфигурации. В типовых БП 3.0, ЗУП 3.1 и УТ 11 справочник уже есть, туда его создавать не нужно.

Пользователь информационной базы и элемент справочника: в чём разница

Платформа сама по себе ничего не знает про справочник «Пользователи». У неё есть свой список учётных записей: в Конфигураторе это Администрирование → Пользователи, а из кода — менеджер ПользователиИнформационнойБазы. Там хранятся имя для входа, хеш пароля, способ аутентификации и набор ролей.

Справочник нужен для того, что платформа хранить не умеет:

  • 👤 ссылка на пользователя в документах: «Ответственный», «Автор», «Менеджер»;
  • 🏢 связь с физлицом, подразделением, складом по умолчанию;
  • 🚫 признак «Недействителен» для уволенных, чтобы не удалять историю;
  • 📇 контакты, комментарии, служебные отметки.

Связь между двумя сущностями — один реквизит с идентификатором учётной записи. Имя для входа для этого не годится: его переименовывают, а уникальный идентификатор пользователя ИБ не меняется за всю его жизнь.

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

Создание справочника Пользователи в Конфигураторе

Откройте дерево конфигурации, правой кнопкой по ветке «Справочники» — «Добавить». Задайте свойства на вкладках окна редактирования объекта.

СвойствоЗначениеПочему так
ИмяПользователиПод этим именем объект ждут типовые приёмы и БСП
СинонимПользователиТак справочник видят в интерфейсе
ИерархическийНетГруппы удобнее вынести в отдельный справочник
Длина кода0Код пользователю не нужен, ищут по ФИО
Длина наименования100Хватает на полное ФИО с инициалами
Основное представлениеВ виде наименованияВ полях документов видно ФИО
Проверка уникальностиПо желаниюОднофамильцы бывают, лучше контролировать кодом

Справочник лучше включить в подсистему «Администрирование» или аналогичную, чтобы он не мелькал на рабочих местах бухгалтеров.

Группы пользователей, если они нужны, заведите отдельным справочником «ГруппыПользователей» с табличной частью «Состав». Так один сотрудник может входить в несколько групп сразу, а в иерархическом справочнике он сидит только в одной папке.

Реквизиты справочника пользователей и типы данных

Минимальный набор, без которого справочник неполноценен:

РеквизитТипНазначение
ИдентификаторПользователяИБУникальныйИдентификаторСвязь с учётной записью ИБ, индексировать
НедействителенБулевоСотрудник уволен, вход закрыт
СлужебныйБулевоТехнические учётные записи для обменов и регламентных заданий
ФизическоеЛицоСправочникСсылка.ФизическиеЛицаЕсли такой справочник есть в конфигурации
ПодразделениеСправочникСсылка на ваш справочник подразделенийДля отборов и прав
КомментарийСтрока неограниченной длиныСвободные заметки

У реквизита ИдентификаторПользователяИБ поставьте свойство «Индексировать». По нему ищут элемент при каждом входе в программу, и без индекса на сотнях пользователей запрос станет заметно медленнее.

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

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

Формы списка и элемента: как карточка управляет учётной записью

Форма списка

Создайте форму списка через конструктор форм. Что стоит добавить сразу:

  1. Отбор по Недействителен = Ложь по умолчанию, с флажком «Показывать недействительных».
  2. Скрытие служебных учётных записей от всех, кроме администратора.
  3. Колонку «Вход разрешён», если хотите видеть, у кого есть учётная запись. Это вычисляемое поле: заполненный идентификатор ещё не гарантирует, что пользователь ИБ существует.

Форма элемента

Форму элемента делят на две части: данные справочника (ФИО, подразделение, физлицо) и группу «Вход в программу». Во второй группе — реквизиты формы, не объекта:

  • ИмяДляВхода — строка;
  • НовыйПароль и ПодтверждениеПароля — строки со свойством поля «Режим пароля»;
  • ВходРазрешен — булево.

При открытии карточки имя подтягивают из учётной записи в обработчике ПриЧтенииНаСервере, а при записи создают или обновляют пользователя ИБ в ПередЗаписьюНаСервере. Пример рабочей схемы:

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	Если Не ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяИБ) Тогда
		Возврат;
	КонецЕсли;

	УстановитьПривилегированныйРежим(Истина);
	ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
		ТекущийОбъект.ИдентификаторПользователяИБ);
	Если ПользовательИБ <> Неопределено Тогда
		ИмяДляВхода = ПользовательИБ.Имя;
		ВходРазрешен = Истина;
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	Если Не ВходРазрешен Или Не ЗначениеЗаполнено(ИмяДляВхода) Тогда
		Возврат;
	КонецЕсли;

	Если НовыйПароль <> ПодтверждениеПароля Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Пароль и подтверждение не совпадают";
		Сообщение.Сообщить();
		Отказ = Истина;
		Возврат;
	КонецЕсли;

	УстановитьПривилегированныйРежим(Истина);

	ПользовательИБ = Неопределено;
	Если ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяИБ) Тогда
		ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(
			ТекущийОбъект.ИдентификаторПользователяИБ);
	КонецЕсли;
	Если ПользовательИБ = Неопределено Тогда
		ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
		ПользовательИБ.Роли.Добавить(Метаданные.Роли.БазовыеПрава);
	КонецЕсли;

	ПользовательИБ.Имя = ИмяДляВхода;
	ПользовательИБ.ПолноеИмя = ТекущийОбъект.Наименование;
	ПользовательИБ.АутентификацияСтандартная = Истина;
	ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь;
	Если ЗначениеЗаполнено(НовыйПароль) Тогда
		ПользовательИБ.Пароль = НовыйПароль;
	КонецЕсли;

	Попытка
		ПользовательИБ.Записать();
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось записать пользователя ИБ: " + ОписаниеОшибки();
		Сообщение.Сообщить();
		Отказ = Истина;
		Возврат;
	КонецПопытки;

	ТекущийОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
	НовыйПароль = "";
	ПодтверждениеПароля = "";

КонецПроцедуры

Роль БазовыеПрава в примере — условное имя: подставьте свою роль с минимальным набором прав. Если такой роли нет, строка вызовет ошибку при записи.

Пример проверяет заполнение до записи учётной записи не случайно. Если элемент справочника потом не запишется, пользователь ИБ уже будет создан, и его придётся убирать вручную. Все проверки ставьте выше блока записи.

ПоказыватьВСпискеВыбора = Ложь прячет список имён в окне входа. Посторонний человек за чужим компьютером не увидит, какие учётные записи есть в базе.

Параметр сеанса ТекущийПользователь

Чтобы в документы автоматически подставлялся автор, а ограничения доступа понимали, кто работает, нужен параметр сеанса. В ветке «Общие → Параметры сеанса» добавьте ТекущийПользователь с типом СправочникСсылка.Пользователи.

Заполняется он в модуле сеанса, процедура УстановкаПараметровСеанса. Модуль сеанса работает в привилегированном режиме, поэтому чтение справочника пройдёт даже у пользователя без прав на него.

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)

	УИД = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;

	Запрос = Новый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	Пользователи.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.Пользователи КАК Пользователи
	|ГДЕ
	|	Пользователи.ИдентификаторПользователяИБ = &УИД");
	Запрос.УстановитьПараметр("УИД", УИД);
	Выборка = Запрос.Выполнить().Выбрать();

	Если Выборка.Следующий() Тогда
		ПараметрыСеанса.ТекущийПользователь = Выборка.Ссылка;
	Иначе
		ПараметрыСеанса.ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка();
	КонецЕсли;

КонецПроцедуры

Пустая ссылка в ветке «Иначе» — осознанное решение для базы без учётных записей. Если вход без элемента справочника запрещён, в этом месте вызывайте исключение с понятным текстом: сеанс не запустится, и человек увидит причину.

Дальше параметр используют где угодно: в ПриСозданииНаСервере документа для заполнения «Ответственного», в запросах, в шаблонах ограничения доступа на уровне записей.

Подсистема «Пользователи» из БСП вместо ручной разработки

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

Как внедряют:

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

После внедрения пользуйтесь программным интерфейсом общего модуля Пользователи: Пользователи.ТекущийПользователь(), Пользователи.АвторизованныйПользователь(), Пользователи.ЭтоПолноправныйПользователь(). Свою логику добавляют в переопределяемых модулях подсистемы, а не правкой её кода, иначе каждое обновление БСП превратится в ручное объединение.

ВариантКогда выбратьЧем платите
Свой справочникМаленькая конфигурация, 5–10 объектов, нет планов на БСППишете и сопровождаете всё сами
Подсистема БСПКонфигурация растёт, нужны группы доступа и внешние пользователиТянете зависимости, обновляете вместе с БСП

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

Права доступа к справочнику Пользователи

Справочник «Пользователи» — чувствительный объект: через карточку меняют пароли и роли. Права раздают по ролям в ветке «Общие → Роли».

РольПрава на справочникЧто может человек
Полные права (администратор)Все, включая «Администрирование» на уровне конфигурацииСоздавать учётные записи, менять пароли и роли
Базовая роль сотрудникаЧтение, ПросмотрВыбирать коллегу в поле «Ответственный»
Кадровик (по желанию)Чтение, Просмотр, ИзменениеПравить ФИО и подразделение, но не вход

Три правила, которые часто упускают:

  • 🔑 Запись пользователя ИБ требует права «Администрирование». Обычному сотруднику это право не давайте: всё, что он делает с учётными записями, идёт через серверный код в привилегированном режиме. Вызов того же кода без привилегированного режима закончится сообщением Нарушение прав доступа!.
  • 🗑 Право «Интерактивное удаление» снимите у всех. Пользователя помечают «Недействительным» и отключают вход, а не удаляют: на него ссылаются тысячи документов.
  • ✏️ Чтобы сотрудник мог сменить свой пароль, не давайте ему «Изменение» на справочник. Сделайте отдельную форму и серверную процедуру, которая в привилегированном режиме меняет пароль только текущему пользователю.

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

Типичные ошибки при работе со справочником пользователей

Здесь собраны сбои, которые возникают уже после разработки, при первых запусках и заведении людей.

Диагностика: выберите симптом

Ещё одна ошибка проектирования — использовать поле «Имя» учётной записи в запросах вместо ссылки на справочник. Сотрудница выходит замуж, администратор меняет логин, и все отчёты «по автору» за прошлые годы рассыпаются.

Частые вопросы

Можно ли обойтись без справочника и хранить в документах имя пользователя ИБ строкой?
Технически да, но при переименовании учётной записи связь потеряется. Ссылка на элемент справочника стабильна и даёт отборы, группировки и права.
Что будет с элементом справочника, если удалить пользователя ИБ в Конфигураторе?
Элемент останется, но идентификатор будет указывать в пустоту. Вход для этого человека закроется, а документы со ссылкой на него сохранятся.
Как подключить вход через Windows для пользователей справочника?
У пользователя ИБ включите свойство АутентификацияОС и заполните ПользовательОС в формате \\ДОМЕН\логин. На форме элемента добавьте для этого отдельные поля.
Нужен ли справочник, если в базе работает один человек?
Если документы не хранят автора и прав нет, не нужен. Как только появится второй пользователь или требование фиксировать ответственного, его проще добавить сразу.
Почему внешних пользователей держат в отдельном справочнике?
Контрагенты и физлица с доступом к порталу работают с другими правами и другими данными. Отдельный справочник не даёт случайно выдать им роль сотрудника.