Свой стенд: отключить запоминание и включить встроенный список проверки

Учебные задачи

Меняем два набора настоящих настроек и новым чтением сравниваем все 3+6 полей. Отчет строится из фактических флагов API; вход, проверка пароля и сетевой сервис не выполняются.

Где и как запускать

Новая полностью собственная Windows VM и пустая File база 8.5.1.1343; толстый управляемый клиент. Только будущая ручная подготовка/запись своих настроек, сейчас runtime операций нет.

Подготовка

  1. Это самостоятельный полный модуль формы, а не дополнение к другому уроку. Для каждой карточки подготовьте отдельную НОВУЮ полностью собственную Windows VM, новый профиль и новую пустую файловую базу. Не рабочая конфигурация и не копия с пользователями. Здесь 1С, виртуальную машину, изменения базы и сеть не запускали.

  2. В своей новой виртуальной машине создайте пустую базу в C:\1c-labs\OwnAuthSettings85_6c164ff5-bd5f-4f9d-ae0b-c4194cbe435b\IB. Если путь/регистрация/база уже существуют, их не используйте и не очищайте. Строка регистрации должна быть ровно File="C:\1c-labs\OwnAuthSettings85_6c164ff5-bd5f-4f9d-ae0b-c4194cbe435b\IB";. Это только ограничение подготовки, не идентификатор базы или доказательство владения.

  3. Конфигуратор: Имя=УчебныеНастройкиВхода85, Версия=6c164ff5-bd5f-4f9d-ae0b-c4194cbe435b, Режим совместимости=Не использовать, Основной режим запуска=Управляемое приложение. Только толстый клиент управляемого приложения 8.5.1.1343; не веб/тонкий клиент, сервис или общая база.

  4. Создайте в этой пустой конфигурации роль АдминистраторУчебныхНастроек85; через Действия установите все права и вручную назначьте роль своему текущему учебному администратору. Минимум отдельных прав API страницы не обещают. РольДоступна проверяет роль, не владение базой; код прав не выдает. Не переносите пользователей/пароли/привилегированный режим из рабочей базы.

  5. Общие → Общие формы: управляемая НастройкиВхода85, разместить в рабочей области начальной страницы. Вставьте весь код именно этой карточки в модуль формы. Команда ПроверитьФлаги85: Действие=ПроверитьФлаги85(Команда), кнопка с этим ИмяКоманды. Обработчик вручную не вызывайте.

  6. Реквизиты: СогласенНаФлаги85 — Булево, исходно Ложь, ручной флажок; Состояние85 — Строка, исходно Не запускалось, поле ТолькоПросмотр=Да. Отдельные карточки не объединяйте в один модуль: это два независимых опыта с разной ручной подготовкой.

  7. В Конфигураторе откройте Администрирование → Дополнительные настройки аутентификации... для своей новой базы. Закончите ручную подготовку, нажмите OK и закройте диалог до опыта. Документация предупреждает о задержке отображения до 20 секунд; таймер не доказательство состояния — код сверяет настоящие getter значения.

  8. Работайте в одном спокойном собственном сеансе без других писателей настроек. Полные снимки перед записью не атомарная блокировка. Только после чтения инструкции поставьте свой флажок и нажмите кнопку один раз; согласие расходуется ДО менеджера и getter чтений.

  9. Каждый setter действительно меняет настройки своей базы и значения не возвращает. Перед ним состояние НЕИЗВЕСТНО, затем отдельный новый getter и сравнение всех полей. Это состояние API в будущем запуске, не доказанная долговечность записи или гарантия всех внутренних действий платформы.

  10. Во вкладке Аутентификация только в текущем собственном учебном сеансе установите Разрешить сохранение аутентификации и Сохранять аутентификацию по умолчанию, Время жизни=600 секунд. Закончите настройку без выхода/входа и без использования Запомнить. Не импортируйте существующую сохраненную аутентификацию. Указание секунд взято из UI справки: API поле обещает только Число.

  11. Проверка раскрытия пароля: вручную выключить стандартный список, заданный список и сервис; адрес сервиса пустой, таймаут=1 секунда, Игнорировать ошибки сервиса включено. Никакого парольного теста/входа/пользовательского списка. Код требует эти настоящие начальные значения; defaults не угадываются.

  12. Цель — записать реальные изменения, не те же значения: разрешенное запоминание станет выключенным, а встроенный список — включенным. Lifetime600, остальные пять полей проверки, выключенный сервис и пустой URL сохраняются. Если начальная подготовка не совпала, STOP без автоматической настройки.

  13. API пример автоматического сохранения содержит ошибочные имена с лишним Параметров и скобки. Его оригинал не исправляется; здесь используются только настоящие native имена/сигнатуры. Встроенный список и UseService=Ложь — выбор параметров этой проверки, не гарантия отсутствия всех скрытых platform calls.

&НаКлиенте
Перем ОпытИспользован85;

&НаКлиенте
Функция НачатьОпыт85(Команда)
    Если ОпытИспользован85 <> Неопределено Тогда
        ВызватьИсключение "Экземпляр уже использован; повтор запрещен";
    КонецЕсли;
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnAuthSettings85_6c164ff5-bd5f-4f9d-ae0b-c4194cbe435b\IB"";" Тогда
            ВызватьИсключение "Не совпали собственная учебная конфигурация, версия или регистрация";
        КонецЕсли;
    #Иначе
        ВызватьИсключение "Нужен толстый клиент управляемого приложения 8.5.1.1343";
    #КонецЕсли;
    Доступ = РольДоступна("АдминистраторУчебныхНастроек85");
    Если ТипЗнч(Доступ) <> Тип("Булево") Или Доступ <> Истина
        Или ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда <> Команды.Найти("ПроверитьФлаги85") Тогда
        ВызватьИсключение "Нет своей роли или настоящей команды формы";
    КонецЕсли;
    Если ТипЗнч(СогласенНаФлаги85) <> Тип("Булево") Или СогласенНаФлаги85 <> Истина Тогда
        ВызватьИсключение "Подтвердите изменение настроек своей новой базы";
    КонецЕсли;
    ОпытИспользован85 = Истина;
    СогласенНаФлаги85 = Ложь;
    Состояние85 = "НЕИЗВЕСТНО: настройки еще не проверены";
    Менеджер85 = ДополнительныеНастройкиАутентификации;
    Если ТипЗнч(Менеджер85) <> Тип("МенеджерДополнительныхНастроекАутентификации") Тогда
        ВызватьИсключение "Не получен настоящий менеджер платформы";
    КонецЕсли;
    Возврат Менеджер85;
КонецФункции

&НаКлиенте
Процедура ДобавитьПоле85(Снимок, Имя, Значение, ТребуемыйТип)
    Если ТипЗнч(Значение) <> ТребуемыйТип Или Снимок.Свойство(Имя) Тогда
        ВызватьИсключение "Тип поля не совпал или имя повторяется";
    КонецЕсли;
    Снимок.Вставить(Имя, Значение);
КонецПроцедуры

&НаКлиенте
Функция КопияСнимка85(Исходный)
    Копия = Новый Структура;
    Для Каждого Поле Из Исходный Цикл
        Копия.Вставить(Поле.Ключ, Поле.Значение);
    КонецЦикла;
    Возврат Копия;
КонецФункции

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

&НаКлиенте
Процедура ПроверитьФлаги85(Команда)
    Попытка
        Менеджер85 = НачатьОпыт85(Команда);
        ДоСохранения = СнимокСохранения85(Менеджер85.ПолучитьНастройкиАвтоматическогоСохраненияАутентификации());
        ДоПроверки = СнимокПроверки85(Менеджер85.ПолучитьНастройкиПроверкиРаскрытияПароля());
        Если ДоСохранения.РазрешитьСохранение <> Истина Или ДоСохранения.СохранятьПоУмолчанию <> Истина
            Или ДоСохранения.ВремяЖизниСохраненнойАутентификации <> 600
            Или ДоПроверки.ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля <> Ложь
            Или ДоПроверки.ИспользоватьЗаданныйСписокПроверкиРаскрытияПароля <> Ложь
            Или ДоПроверки.ИспользоватьСервисПроверкиРаскрытияПароля <> Ложь
            Или ДоПроверки.АдресСервисаПроверкиРаскрытияПароля <> ""
            Или ДоПроверки.ТаймаутЗапросаСервисаПроверкиРаскрытияПароля <> 1
            Или ДоПроверки.ИгнорироватьОшибкиСервисаПроверкиРаскрытияПароля <> Истина Тогда
            ВызватьИсключение "Не совпали вручную подготовленные собственные флаги";
        КонецЕсли;
        ОжидаемоеСохранение = КопияСнимка85(ДоСохранения);
        ОжидаемаяПроверка = КопияСнимка85(ДоПроверки);
        ОжидаемоеСохранение.РазрешитьСохранение = Ложь;
        ОжидаемоеСохранение.СохранятьПоУмолчанию = Ложь;
        ОжидаемаяПроверка.ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля = Истина;
        Состояние85 = "НЕИЗВЕСТНО: отключение запоминания еще не подтверждено";
        РабочееСохранение = Менеджер85.ПолучитьНастройкиАвтоматическогоСохраненияАутентификации();
        СверитьСнимки85(СнимокСохранения85(РабочееСохранение), ДоСохранения);
        РабочееСохранение.РазрешитьСохранение = Ложь;
        РабочееСохранение.СохранятьПоУмолчанию = Ложь;
        Менеджер85.УстановитьНастройкиАвтоматическогоСохраненияАутентификации(РабочееСохранение);
        ПослеСохранения = СнимокСохранения85(Менеджер85.ПолучитьНастройкиАвтоматическогоСохраненияАутентификации());
        СверитьСнимки85(ПослеСохранения, ОжидаемоеСохранение);
        Состояние85 = "НЕИЗВЕСТНО: выбор встроенного списка еще не подтвержден";
        РабочаяПроверка = Менеджер85.ПолучитьНастройкиПроверкиРаскрытияПароля();
        СверитьСнимки85(СнимокПроверки85(РабочаяПроверка), ДоПроверки);
        РабочаяПроверка.ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля = Истина;
        Менеджер85.УстановитьНастройкиПроверкиРаскрытияПароля(РабочаяПроверка);
        ПослеПроверки = СнимокПроверки85(Менеджер85.ПолучитьНастройкиПроверкиРаскрытияПароля());
        СверитьСнимки85(ПослеПроверки, ОжидаемаяПроверка);
        ИтогСохранения = СнимокСохранения85(Менеджер85.ПолучитьНастройкиАвтоматическогоСохраненияАутентификации());
        СверитьСнимки85(ИтогСохранения, ОжидаемоеСохранение);
        Состояние85 = "Проверено. Запоминание разрешено: " + Строка(ИтогСохранения.РазрешитьСохранение)
            + "; по умолчанию: " + Строка(ИтогСохранения.СохранятьПоУмолчанию)
            + "; встроенный список: " + Строка(ПослеПроверки.ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля)
            + "; заданный список: " + Строка(ПослеПроверки.ИспользоватьЗаданныйСписокПроверкиРаскрытияПароля)
            + "; сервис: " + Строка(ПослеПроверки.ИспользоватьСервисПроверкиРаскрытияПароля);
    Исключение
        ОпытИспользован85 = Истина;
        СогласенНаФлаги85 = Ложь;
        Состояние85 = "STOP: исход не подтвержден; повторов, очистки и отката нет.";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Функция СнимокСохранения85(Настройки)
    Если ТипЗнч(Настройки) <> Тип("НастройкиАвтоматическогоСохраненияАутентификации") Тогда
        ВызватьИсключение "Getter не вернул требуемые native настройки";
    КонецЕсли;
    Снимок = Новый Структура;
    ДобавитьПоле85(Снимок, "СохранятьПоУмолчанию", Настройки.СохранятьПоУмолчанию, Тип("Булево"));
    ДобавитьПоле85(Снимок, "ВремяЖизниСохраненнойАутентификации", Настройки.ВремяЖизниСохраненнойАутентификации, Тип("Число"));
    ДобавитьПоле85(Снимок, "РазрешитьСохранение", Настройки.РазрешитьСохранение, Тип("Булево"));
    Если Снимок.Количество() <> 3 Тогда
        ВызватьИсключение "Снимок не содержит всех полей";
    КонецЕсли;
    Возврат Снимок;
КонецФункции

&НаКлиенте
Функция СнимокПроверки85(Настройки)
    Если ТипЗнч(Настройки) <> Тип("НастройкиПроверкиРаскрытияПароля") Тогда
        ВызватьИсключение "Getter не вернул требуемые native настройки";
    КонецЕсли;
    Снимок = Новый Структура;
    ДобавитьПоле85(Снимок, "АдресСервисаПроверкиРаскрытияПароля", Настройки.АдресСервисаПроверкиРаскрытияПароля, Тип("Строка"));
    ДобавитьПоле85(Снимок, "ИгнорироватьОшибкиСервисаПроверкиРаскрытияПароля", Настройки.ИгнорироватьОшибкиСервисаПроверкиРаскрытияПароля, Тип("Булево"));
    ДобавитьПоле85(Снимок, "ИспользоватьЗаданныйСписокПроверкиРаскрытияПароля", Настройки.ИспользоватьЗаданныйСписокПроверкиРаскрытияПароля, Тип("Булево"));
    ДобавитьПоле85(Снимок, "ИспользоватьСервисПроверкиРаскрытияПароля", Настройки.ИспользоватьСервисПроверкиРаскрытияПароля, Тип("Булево"));
    ДобавитьПоле85(Снимок, "ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля", Настройки.ИспользоватьСтандартныйСписокПроверкиРаскрытияПароля, Тип("Булево"));
    ДобавитьПоле85(Снимок, "ТаймаутЗапросаСервисаПроверкиРаскрытияПароля", Настройки.ТаймаутЗапросаСервисаПроверкиРаскрытияПароля, Тип("Число"));
    Если Снимок.Количество() <> 6 Тогда
        ВызватьИсключение "Снимок не содержит всех полей";
    КонецЕсли;
    Возврат Снимок;
КонецФункции

Разбор по шагам

  1. Подготовьте настоящие начальные 3/6 поля вручную. Один раз поставьте СогласенНаФлаги85 и нажмите ПроверитьФлаги85.

  2. Код получает настоящие настройки и проверяет все их типы/начальные значения. Самостоятельные снимки сохраняют полное содержание, а не ссылку на изменяемый объект.

  3. Перед setter новый getter сверяет весь набор запоминания. Два настоящих флага меняются на Ложь, lifetime600 сохраняется. Следующий getter полностью подтверждает 3 поля.

  4. Так же перечитывается набор проверки, меняется только встроенный список на Истина, новым getter сравниваются все 6 полей. Набор запоминания перечитывается еще раз; Состояние85 показывает фактические флаги, а не значения присваиваний.

Как проверить результат

  1. Без флажка: STOP до manager/getters/setters, текст Проверено отсутствует; повтор того же экземпляра не разрешен.

  2. Нормальный будущий опыт: в ИтогСохранения РазрешитьСохранение=Ложь, СохранятьПоУмолчанию=Ложь, lifetime600; в ПослеПроверки встроенный список=Истина, заданный список/сервис=Ложь, адрес пустой, таймаут1, игнорирование ошибок=Истина. Проверяются все 3/6 полей.

  3. Состояние85 начинается Проверено и использует actual Bool от новых getters. Строка(Булево) зависит от региональных настроек, поэтому не требуйте определенных слов Да/Нет вместо просмотра типов/значений в отладчике.

  4. Другие собственные начальные флаги/таймаут/lifetime: STOP ДО записи, не автоматическая подготовка. Не включайте настоящий сервис и не задавайте действующий URL ради отрицательной пробы.

  5. Повтор кнопки того же экземпляра после успеха/STOP запрещен. При ошибке setter исход неизвестен; нет гарантированного отката, повторов или автоматической очистки.

  6. Не проверяйте действительный пароль, не выполняйте вход или Запомнить ради отчета. Если реальная ошибка или измененный другим писателем снимок не воспроизводились, честно отметьте это непроверенным.

Ожидаемый результат

Будущий успешный ручной запуск должен новым чтением подтвердить отключенное запоминание и выбранный встроенный список, сохранив все остальные 3/6 полей. Это не результат проверки пароля, не вход и не доказанная долговечность записи; запуск в 1С не проверялся.

На что обратить внимание

  1. Новый вызов getter и полное сравнение его actual состояния — не то же самое, что показ только что измененного локального объекта. Но и независимой гарантии durable хранения или отсутствия внутренних platform calls этот опыт не дает.

  2. Четыре метода настройки меняют информационную базу. Это не чисто работа в памяти. Ошибка после первого setter может оставить частичный результат: автоматического отката, очистки и повторения нет.

  3. Своя Структура используется только для типизированной копии/сравнения. В setter передается настоящий полученный объект настроек, не Структура и не новый фиктивный менеджер.

  4. Метаданные/роль/File-маркер ограничивают ожидаемую подготовку, не доказывают владение ОС или базой. Один спокойный собственный сеанс обязателен; снимки не атомарные блокировки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.