Инициализировать собственный менеджер через Ждать перед чтением его информации

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

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

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

Полный модуль управляемой формы своей пустой учебной конфигурации; Windows тонкий/толстый клиент 8.5.1.1343, только чтение сведений своего CryptoAPI-провайдера. Здесь в 1С не запускался.

Подготовка

  1. Создайте отдельную пустую учебную конфигурацию УчебнаяКонфигурацияСинтаксиса. Запускайте пример в её Windows-клиенте 1С 8.5.1.1343, не в рабочей базе и не под сервисной учётной записью чужого сервера.

  2. Создайте свою учебную обработку с управляемой формой. Реквизиты: Занято — Булево, начально Ложь; Отчёт — Строка длиной 0. Поле Отчёт многострочное, только для просмотра. Команду ПолучитьУчебнуюИнформацию свяжите с одноимённым клиентским обработчиком.

  3. Вставьте весь модуль выбранного урока, включая ПроверитьУчебнуюПлатформу и СформироватьУчебныйОтчёт. Обработчики оповещений, если есть, должны оставаться экспортными клиентскими процедурами.

  4. Используется стандартный Microsoft Enhanced RSA and AES Cryptographic Provider, тип 24. Его наличие и Type=24 подтверждены чтением конкретной записи Windows Defaults/Provider при подготовке справочника. Это не доказательство успешной загрузки провайдера платформой 1С на любой другой машине.

  5. На своём Windows-стенде проверьте фактическое наличие этой записи и тип у своего администратора. Если провайдер отсутствует/не поддерживается, СредстваКриптографии возвращает Неопределено, а создание инициализированного менеджера может дать ошибку. Не подставляйте наугад число типа или чужой DLL-путь.

  6. ПутьМодуляКриптографии здесь пуст: в Windows используется имя провайдера. Не переносите этот опыт на Linux/macOS, где библиотека и способ выбора отличаются.

  7. В веб-клиенте поддержка зависит от расширения и синхронного/асинхронного режима. Этот набор намеренно ограничен Windows тонким/толстым клиентом и не обещает работу в браузере или мобильном приложении.

  8. Включать пароль/PIN закрытого ключа не нужно. Сертификаты и ключевые контейнеры не открываются, хранилища ОС не меняются, криптографическая подпись и шифрование не выполняются.

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

  10. Все отчёты формируются в памяти своей формы. Нет файла, HTTP, OCSP/CRL, сервера меток времени или установки расширения.

  11. Для синхронного урока в конфигурации разрешите соответствующий режим синхронных вызовов. Асинхронный урок с Ждать выполняется только в Асинх Процедура; оповещения нельзя считать завершившимися сразу после Начать… .

  12. Здесь криптографические методы в 1С не запускались. Проверены исходники и точные сигнатуры установленной справки; наличие провайдера в реестре не является runtimeVerifiedScenarios.

&НаКлиенте
Асинх Процедура ПолучитьУчебнуюИнформацию(Команда)
    Если Занято Тогда
        Возврат;
    КонецЕсли;
    Занято = Истина;
    Попытка
        ПроверитьУчебнуюПлатформу();
        Менеджер = Новый МенеджерКриптографии(ИспользованиеИнтерактивногоРежимаКриптографии.НеИспользовать);
        Менеджер = Ждать Менеджер.ИнициализироватьАсинх("Microsoft Enhanced RSA and AES Cryptographic Provider", "", 24, ИспользованиеИнтерактивногоРежимаКриптографии.НеИспользовать);
        Если ТипЗнч(Менеджер) <> Тип("МенеджерКриптографии") Тогда
            ВызватьИсключение "Инициализация не вернула менеджер";
        КонецЕсли;
        Информация = Ждать Менеджер.ПолучитьИнформациюМодуляКриптографииАсинх();
        Отчёт = СформироватьУчебныйОтчёт(Информация);
    Исключение
        Отчёт = "Информация не получена. Проверьте собственную Windows-платформу, установленный провайдер и допустимый режим вызова; это не успешная инициализация.";
    КонецПопытки;
    Занято = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьУчебнуюПлатформу()
    Система = Новый СистемнаяИнформация;
    Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86
        И Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
        ВызватьИсключение "Этот пример использует Windows CryptoAPI";
    КонецЕсли;
КонецПроцедуры

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

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

  1. Проверить собственную конфигурацию, Windows-контекст до обращения к провайдеру.

  2. Использовать действительные имя провайдера и тип 24; пустая строка пути относится к Windows-опыту, а не к отсутствующей Linux-библиотеке.

  3. Отличить Неопределено от полученной ИнформацияМодуляКриптографии до доступа к её полям.

  4. Показать фактическое имя и числовой тип отдельно от трёх неизменяемых массивов поддерживаемых алгоритмов.

  5. Перечислить фактические строки алгоритмов без фиктивного SHA/GOST и без присваивания readonly-коллекциям.

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

  7. Конструктор с режимом не является инициализацией провайдера. Две метки в справке не объявляем двумя разными успешно загруженными объектами.

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

  9. Результат обещания инициализации — МенеджерКриптографии. Проверить его и только потом ждать информацию этого менеджера.

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

  1. Порядок: создать без модуля → дождаться инициализации → дождаться информации → показать отчёт.

  2. Информация не читается до успешной инициализации. Неопределено/ошибка не выдается за готовый менеджер.

  3. Флаг Занято снят при любом исходе общего блока.

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

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

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

  1. Имя провайдера, путь библиотеки и числовой тип — разные параметры. Тип 24 выбран по фактической Windows-регистрации, не по порядковому номеру списка алгоритмов.

  2. Сведения СредстваКриптографии не создают и не инициализируют МенеджерКриптографии автоматически.

  3. Список поддерживаемых алгоритмов и три выбранных алгоритма менеджера — разные сведения. Нельзя считать пустое поле выбранным первым алгоритмом списка.

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

  5. Ни один пример здесь не вводит PIN/пароль, не подписывает, не шифрует и не обращается к серверу меток времени.

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

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

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

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

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