Как программно установить флаг Потребовать смену пароля при входе для пользователей в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Документооборот IT и автоматизация бизнеса
← На главную

При администрировании информационных баз 1С и внедрении новых политик безопасности часто возникает задача массово обязать пользователей сменить пароль при следующем входе в систему. В типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:ERP», «1С:Комплексная автоматизация», «1С:Управление торговлей», «1С:ЗУП» и «1С:Документооборот», данный признак вынесен на форму элемента справочника Пользователи, однако в самом объекте справочника такого реквизита нет.

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

Где хранится признак требования смены пароля

В платформе «1С:Предприятие» у низкоуровневого объекта ПользовательИнформационнойБазы отсутствует встроенное свойство принудительной смены пароля при следующем сеансе. Данный механизм реализован разработчиками БСП на прикладном уровне.

Значение флага Потребовать смену пароля при входе хранится в качестве ресурса в независимом непериодическом регистре сведений СведенияОПользователях (в конфигурации «1С:Документооборот» также может использоваться связанный регистр СведенияОПользователяхДокументооборот). Измерением регистра выступает ссылка на элемент справочника Пользователи.

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

Особенности и ограничения механизма смены паролей

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

  1. Тип аутентификации: проверка требования смены пароля выполняется на клиенте при старте сеанса и действует только для пользователей со стандартной аутентификацией 1С:Предприятия. Если для пользователя включена исключительно аутентификация операционной системы (Windows/Active Directory), OpenID или OpenID Connect, окно смены пароля платформы 1С отображаться не будет.
  2. Сложность пароля: если в настройках безопасности базы данных не включена проверка минимальной длины или сложности пароля, пользователь сможет подтвердить ввод пустого пароля.
  3. Блокировки таблиц: не следует выполнять чтение и перезапись всего регистра без установки отбора по пользователям на работающей рабочей базе, так как это вызовет транзакционные блокировки всей таблицы регистра.

Способ 1. Установка флага для конкретного пользователя через МенеджерЗаписи

Если требуется изменить статус для одного пользователя или небольшого списка ссылок в цикле, наиболее удобным и безопасным способом является использование объекта МенеджерЗаписи.

Рассмотрим пример кода:


// СсылкаНаПользователя — ссылка на элемент справочника "Пользователи"
МенеджерЗаписи = РегистрыСведений.СведенияОПользователях.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Пользователь = СсылкаНаПользователя;
МенеджерЗаписи.Прочитать();

Если МенеджерЗаписи.Выбран() Тогда
    МенеджерЗаписи.ПотребоватьСменуПароляПриВходе = Истина;
    МенеджерЗаписи.Записать();
КонецЕсли;

Способ 2. Установка флага через НаборЗаписей с отбором

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

Посмотрим на пример реализации:


НаборЗаписей = РегистрыСведений.СведенияОПользователях.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(СсылкаНаПользователя);
НаборЗаписей.Прочитать();

Если НаборЗаписей.Количество() > 0 Тогда
    НаборЗаписей[0].ПотребоватьСменуПароляПриВходе = Истина;
    НаборЗаписей.Записать();
КонецЕсли;

Способ 3. Пакетная установка флага с выборкой через запрос

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

Разберем частую ошибку начинающих разработчиков: в запросах 1С нельзя сравнивать ссылки на справочники со строковыми константами вида Подразделение <> "Бухгалтерия". Ссылку на подразделение необходимо предварительно получить и передать в параметры запроса.

Проанализируем пример выполнения запроса и записи значений:


// 1. Получаем ссылку на подразделение, которое необходимо исключить
СсылкаПодразделения = Справочники.СтруктураПредприятия.НайтиПоНаименованию("Бухгалтерия", Истина);

// 2. Формируем запрос к регистру сведений с отбором
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Сведения.Пользователь КАК Пользователь
    |ИЗ
    |	РегистрСведений.СведенияОПользователях КАК Сведения
    |	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОПользователяхДокументооборот КАК СведенияДО
    |		ПО Сведения.Пользователь = СведенияДО.Пользователь
    |ГДЕ
    |	Сведения.ПотребоватьСменуПароляПриВходе = ЛОЖЬ
    |	И (СведенияДО.Подразделение ЕСТЬ NULL ИЛИ НЕ СведенияДО.Подразделение В ИЕРАРХИИ (&ИсключаемоеПодразделение))";

Запрос.УстановитьПараметр("ИсключаемоеПодразделение", СсылкаПодразделения);

Выборка = Запрос.Выполнить().Выбрать();

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

Способ 4. Альтернативные варианты без доработки конфигурации

Если задача разовая, писать отдельную обработку не обязательно. Можно воспользоваться стандартным функционалом системы:

  1. Обработка «Групповое изменение реквизитов»: через раздел администрирования можно выбрать объект Регистр сведений: Сведения о пользователях, задать отбор по необходимым учетным записям и массово установить значение реквизита ПотребоватьСменуПароляПриВходе = Истина.
  2. Типовые политики паролей БСП: в разделе Настройки пользователей и прав предусмотрена настройка срока действия паролей. При ее включении система автоматически в фоновом режиме отслеживает дату последней установки пароля и требует его обновление каждые N дней без необходимости ручного выставления флагов.
← На главную