В процессе разработки на платформе 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 свойство могло быть доступно в тонком клиенте, но при этом напрочь отсутствовать на стороне сервера или в контексте внешнего соединения. Это создает дополнительные трудности при написании универсального кода, работающего в разных контекстах.
Самым надежным и правильным способом решения проблемы является обновление платформы до актуальных релизов. Посмотрим, какие версии гарантированно содержат необходимый функционал:
После обновления свойство ПолитикиПаролейПользователей появится в синтакс-помощнике и станет доступно для использования в коде без каких-либо дополнительных манипуляций.
Если по каким-то причинам (например, требования заказчика или жесткий регламент сопровождения) обновить платформу невозможно, нам необходимо предусмотреть защиту в коде. Разберем, как написать отказоустойчивый код, который не вызовет падения системы при отсутствии свойства.
Для этого мы будем использовать конструкцию Попытка...Исключение. Рассмотрим пример реализации:
Функция ПолучитьНастройкуМинимальнойДлиныПароля()
ПеременнаяРезультат = 0;
Попытка
// Пытаемся обратиться к глобальному контексту
ПеременнаяРезультат = ПолитикиПаролейПользователей.МинимальнаяДлинаПароля;
Исключение
// Если свойства нет, записываем информацию в журнал регистрации
ЗаписьЖурналаРегистрации("ПроверкаПлатформы",
УровеньЖурналаРегистрации.Предупреждение, , ,
"Свойство ПолитикиПаролейПользователей не поддерживается текущей версией платформы.");
// Назначаем значение по умолчанию или используем старые методы
ПеременнаяРезультат = 8;
КонецПопытки;
Возвращает ПеременнаяРезультат;
КонецФункции
Использование такой конструкции позволит коду успешно компилироваться и работать даже на «проблемных» сборках 8.3.20.
Проанализируем альтернативные способы управления пользователями. Хотя объект ПолитикиПаролейПользователей является удобной оберткой, многие механизмы безопасности в 1С реализованы на уровне менеджера ПользователиИнформационнойБазы.
Если вам необходимо проверить конкретные параметры для текущего пользователя или изменить его настройки, попробуйте обратиться к свойствам объекта ПользовательИнформационнойБазы. Рассмотрим пример:
ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
// Настройка возможности изменения пароля пользователем
Если ТекущийПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях Тогда
// Ваша логика
КонецЕсли;
Хотя этот метод не заменяет полностью функционал глобальных политик (таких как минимальная сложность или срок действия пароля для всей базы), он позволяет управлять индивидуальными настройками безопасности, которые гарантированно доступны в версии 8.3.20.
Подведем итог нашего анализа. Если вы столкнулись с ошибкой «Переменная не определена (ПолитикиПаролейПользователей)» в версии 8.3.20:
Попытка...Исключение, чтобы обеспечить работоспособность конфигурации на разных версиях клиентских приложений.Помните, что документация на ИТС часто описывает идеальное состояние платформы, в то время как на практике важно учитывать особенности конкретных минорных релизов и патчей.