Почему в 1С 8.3.20 отсутствует свойство ПолитикиПаролейПользователей и как решить эту проблему

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

В процессе разработки на платформе 1С:Предприятие 8.3 мы часто опираемся на официальную документацию и справочную систему ИТС. Однако случаются ситуации, когда заявленный функционал отсутствует в конкретных релизах платформы. Одной из таких проблем является недоступность свойства глобального контекста ПолитикиПаролейПользователей в версии 8.3.20, хотя по документации оно должно быть доступно, начиная с версии 8.3.17. Разберем подробно, почему так происходит, и как программисту выйти из этой ситуации.

Анализ проблемы и поиск причин

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

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

Влияние режима совместимости и клиентского приложения

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

Также важно отметить неоднородность реализации API. В некоторых сборках 8.3.20 свойство могло быть доступно в тонком клиенте, но при этом напрочь отсутствовать на стороне сервера или в контексте внешнего соединения. Это создает дополнительные трудности при написании универсального кода, работающего в разных контекстах.

Способ 1: Обновление платформы (Рекомендуемое решение)

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

  1. Версии ветки 8.3.22 (начиная с релиза 8.3.22.2106 и выше).
  2. Любые версии веток 8.3.23, 8.3.24 и старше.

После обновления свойство ПолитикиПаролейПользователей появится в синтакс-помощнике и станет доступно для использования в коде без каких-либо дополнительных манипуляций.

Способ 2: Программная проверка наличия свойства

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

Для этого мы будем использовать конструкцию Попытка...Исключение. Рассмотрим пример реализации:


Функция ПолучитьНастройкуМинимальнойДлиныПароля()
    ПеременнаяРезультат = 0;
    
    Попытка
        // Пытаемся обратиться к глобальному контексту
        ПеременнаяРезультат = ПолитикиПаролейПользователей.МинимальнаяДлинаПароля;
    Исключение
        // Если свойства нет, записываем информацию в журнал регистрации
        ЗаписьЖурналаРегистрации("ПроверкаПлатформы", 
            УровеньЖурналаРегистрации.Предупреждение, , , 
            "Свойство ПолитикиПаролейПользователей не поддерживается текущей версией платформы.");
        
        // Назначаем значение по умолчанию или используем старые методы
        ПеременнаяРезультат = 8; 
    КонецПопытки;
    
    Возвращает ПеременнаяРезультат;
КонецФункции

Использование такой конструкции позволит коду успешно компилироваться и работать даже на «проблемных» сборках 8.3.20.

Способ 3: Использование менеджера пользователей

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

Если вам необходимо проверить конкретные параметры для текущего пользователя или изменить его настройки, попробуйте обратиться к свойствам объекта ПользовательИнформационнойБазы. Рассмотрим пример:


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

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

Резюме и рекомендации

Подведем итог нашего анализа. Если вы столкнулись с ошибкой «Переменная не определена (ПолитикиПаролейПользователей)» в версии 8.3.20:

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

← На главную