Записывает двоичные данные в файл или поток.
Синтаксис
Записать()Записать(<ИмяФайла>)Записать(<Поток>)Полное описание, параметры и ограничения
ДвоичныеДанные.Записать (BinaryData.Write)
ДвоичныеДанные (BinaryData)
Записать (Write)
Доступен, начиная с версии 8.0.
Вариант синтаксиса: Запись в файл
Синтаксис:
Записать()
Описание варианта метода:
Записывает двоичные данные в файл с указанным именем.
Вариант синтаксиса: Запись в файл
Синтаксис:
Записать(<ИмяФайла>)
Параметры:
<ИмяФайла> (обязательный)
Тип: Строка.
Имя файла, в который требуется записать двоичные данные. Если файл не существует, он будет создан. В противном случае, его содержимое будет перезаписано.
Описание варианта метода:
Записать двоичные данные в файл с заданным именем.
Вариант синтаксиса: Запись в поток
Синтаксис:
Записать(<Поток>)
Параметры:
<Поток> (обязательный)
Тип: Поток.
Поток, в который необходимо записать двоичные данные.
Описание варианта метода:
Записывает двоичные данные в заданный поток.
Описание:
Записывает двоичные данные в файл или поток.
Доступность:
Тонкий клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
ХранилищеЗначения
ДвоичныеДанные, метод НачатьЗапись
ДвоичныеДанные, метод ЗаписатьАсинх
Использование в версии:
Доступен, начиная с версии 8.0.
Описание изменено в версии 8.3.18.
Методическая информация
Практические примеры
Загрузить публичный сертификат оповещением и выгрузить байты
Полный модуль формы показывает параметры обоих callbacks: созданный сертификат приходит первым аргументом инициализации, публичные байты — первым аргументом выгрузки без имени файла.
Где и как запускать
Полный модуль управляемой формы учебной обработки Windows; два callbacks и точная очистка собственного CER.
Подготовка
В отдельной учебной базе создайте внешнюю обработку с пустой управляемой формой, командой УчебныйПример и кнопкой. Укажите действие УчебныйПример и вставьте весь модуль.
Запускайте в Windows-клиенте 8.5.1.1343. НачатьИнициализацию принимает путь CER: поэтому этот урок создаёт ровно один уникальный собственный временный файл.
Встроенный сертификат тот же публичный учебный Syntax Guide Training Only: закрытого ключа, установки в ОС и доверия нет.
Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.
Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.
Перем Выполняется;
&НаКлиенте
Процедура УчебныйПример(Команда)
Если Выполняется = Истина Тогда
Сообщить("Дождитесь завершения своей цепочки сертификата");
Возврат;
КонецЕсли;
ИмяФайла = КаталогВременныхФайлов() + "УчебныйСертификат_" + Строка(Новый УникальныйИдентификатор) + ".cer";
Данные = Base64Значение("MIIC+jCCAeKgAwIBAgIBVTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpTeW50YXggR3VpZGUgVHJhaW5pbmcgT25seTAeFw0yMDAxMDEwMDAwMDBaFw0zNTEyMzEwMDAwMDBaMCUxIzAhBgNVBAMMGlN5bnRheCBHdWlkZSBUcmFpbmluZyBPbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkraGtF6mSMHQWI0lIdDxzNjLTB0VHmtLUYEIxXFFJepQtyMGWZ9rfpbTglFp8wpsw+Wc09FQyDFuKsNz3cBcBBx7fTmJVuYzfrXjhDECNqEoKMEf+Qrim3WsVKA/Qr8IMnzq1qdnA1pLgaaKyscfCJkw9W1yoTlLV3PmGs6h6gP1/KXwe+zKN5r3Jl0IVk8RXTLAeyqN01lCuyzaeSYm/v2YS88LdaJ/nkdFqy5QjRXfm7EOCW7eCZlCBwW0EvGhUarZxWlq04lPs9qu3aC3/6gY/scE2vY1jeZV2VpV0lLQpU5gVdjVGI4YQmfgkb8jYtV5U7FQ1KQ6Poji/ort6wIDAQABozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARoo1FJJKKkaZXyFl1tlYj8K7xvryXwhb+tCaFvdXuON27YC3/YIHLUT9sCF9o76VIT8dsVMpK0Qo+VV0FIvqRcB+u6SmyJ+Y7590mzd5P1CSt8Y/4BNV2LosYxhcdVczs26PWHL5GXyBMWRxtBjNsnTeMKh4/WIMrplAr0IOJCmjIeKhv0JbQacsNqhmpe7JdgtBYC4Rrn3ajdD99HZREmyLR/iJrh6W4IGqSN0MGT0xL/mLI0GsTp9JhHDF3o8bmC1yMDlLOoAZp7M072bzfDsKFPg4ATQp/hhbtsTdS/LXrd9cLehZ7ThH6ljL8y2JbALD+6HPnT6Sv+Mg0Wq0MA==");
Состояние = Новый Структура("ИмяФайла,СвойФайл,Поток,ОжидаемыеДанные,Сертификат", ИмяФайла, Ложь, Неопределено, Данные, Неопределено);
Выполняется = Истина;
Попытка
Состояние.Поток = Новый ФайловыйПоток(Состояние.ИмяФайла, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
Состояние.СвойФайл = Истина;
Состояние.ОжидаемыеДанные.Записать(Состояние.Поток);
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Состояние.Сертификат = Новый СертификатКриптографии;
Состояние.Сертификат.НачатьИнициализацию(ОповещениеДля("ПослеИнициализации", Состояние), Состояние.ИмяФайла);
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ОповещениеДля(Обработчик, Состояние)
Возврат Новый ОписаниеОповещения(Обработчик, ЭтотОбъект, Состояние, "ОшибкаОперации", ЭтотОбъект);
КонецФункции
&НаКлиенте
Процедура ПослеИнициализации(ЗагруженныйСертификат, Состояние) Экспорт
Попытка
Если ТипЗнч(ЗагруженныйСертификат) <> Тип("СертификатКриптографии") Тогда
ВызватьИсключение "Оповещение не вернуло созданный сертификат";
КонецЕсли;
Состояние.Сертификат = ЗагруженныйСертификат;
Сообщить(Base64Строка(Состояние.Сертификат.Отпечаток) = "tRDNiwoaiFssHhQqwyjWVlPLdns=");
Состояние.Сертификат.НачатьВыгрузку(ОповещениеДля("ПослеВыгрузки", Состояние));
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыгрузки(ВыгруженныеДанные, Состояние) Экспорт
Попытка
Если ТипЗнч(ВыгруженныеДанные) <> Тип("ДвоичныеДанные") Тогда
ВызватьИсключение "Оповещение выгрузки не вернуло публичные байты";
КонецЕсли;
Сообщить(Base64Строка(ВыгруженныеДанные) = Base64Строка(Состояние.ОжидаемыеДанные));
ОсвободитьСвойФайл(Состояние);
ПроверкаФайла = Новый Файл(Состояние.ИмяФайла);
Если ПроверкаФайла.Существует() Тогда
ВызватьИсключение "Очистка собственного CER не завершилась; успешного завершения нет";
КонецЕсли;
Сообщить(Не ПроверкаФайла.Существует());
Выполняется = Ложь;
Сообщить("Учебный публичный сертификат выгружен; свой временный файл удалён");
Исключение
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаОперации(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
ОсвободитьСвойФайл(Состояние);
Выполняется = Ложь;
СтандартнаяОбработка = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОсвободитьСвойФайл(Состояние)
Если Состояние.Поток <> Неопределено Тогда
Попытка
Состояние.Поток.Закрыть();
Состояние.Поток = Неопределено;
Исключение
Сообщить("Не удалось закрыть собственный CER-поток: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Если Состояние.СвойФайл Тогда
Попытка
УдалитьФайлы(Состояние.ИмяФайла);
Состояние.СвойФайл = Ложь;
Исключение
Сообщить("Не удалось удалить только собственный временный CER: " + Состояние.ИмяФайла + "; " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедурыРазбор по шагам
СоздатьНовый создаёт только новое уникальное имя; флаг собственности ставится после успешного открытия, затем поток закрывается до начала чтения.
НачатьИнициализацию получает оповещение и имя файла. ПослеИнициализации(ЗагруженныйСертификат, Состояние) принимает созданный объект и сохраняет его в состоянии.
НачатьВыгрузку без файлового имени возвращает данные в ПослеВыгрузки(ВыгруженныеДанные, Состояние). Сравниваем их с исходным DER.
После завершения удаляем точный собственный CER под защитой флага и проверяем отсутствие. Коллекции сертификатов ОС не меняются.
Флаг Выполняется препятствует повторному старту. Ошибки операции и ошибки следующего шага идут через очистку, а не через сообщение об успешном завершении.
Как проверить результат
Три сравнения Истина: отпечаток, исходные DER-байты и отсутствие своего файла.
При повторном нажатии до окончания ожидается сообщение дождаться своей цепочки.
При отказе удаления выводится точное имя; отдельная проверка вызывает исключение до сообщения об успешном завершении.
Ожидаемый результат
Созданный результат инициализации и результат публичной выгрузки обработаны правильными callbacks.
На что обратить внимание
Вариант НачатьВыгрузку с файловым именем возвращает имя, а не байты: его обработчик должен иметь соответствующий первый аргумент.
Не подставляйте путь к рабочему сертификату: этот модуль должен обслуживать только созданный им CER.
Нельзя удалять CER сразу после НачатьИнициализацию: асинхронная операция ещё может читать его.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Прочитать свой CER-файл и выгрузить его обратно
Создаём уникальный временный CER только из встроенного публичного образца. Конструктор из файла и файловая выгрузка работают исключительно с этим собственным файлом.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
В пример встроен отдельный публичный учебный X.509-сертификат Syntax Guide Training Only. Его закрытый ключ не сохранён, сертификат не установлен в хранилище ОС и не признан доверенным.
Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.
Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.
Этот вариант создаёт и затем удаляет ровно один собственный временный CER. Не заменяйте имя на рабочий файл: выгрузка записывает по указанному имени.
ИсходныеДанные = Base64Значение("MIIC+jCCAeKgAwIBAgIBVTANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBpTeW50YXggR3VpZGUgVHJhaW5pbmcgT25seTAeFw0yMDAxMDEwMDAwMDBaFw0zNTEyMzEwMDAwMDBaMCUxIzAhBgNVBAMMGlN5bnRheCBHdWlkZSBUcmFpbmluZyBPbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkraGtF6mSMHQWI0lIdDxzNjLTB0VHmtLUYEIxXFFJepQtyMGWZ9rfpbTglFp8wpsw+Wc09FQyDFuKsNz3cBcBBx7fTmJVuYzfrXjhDECNqEoKMEf+Qrim3WsVKA/Qr8IMnzq1qdnA1pLgaaKyscfCJkw9W1yoTlLV3PmGs6h6gP1/KXwe+zKN5r3Jl0IVk8RXTLAeyqN01lCuyzaeSYm/v2YS88LdaJ/nkdFqy5QjRXfm7EOCW7eCZlCBwW0EvGhUarZxWlq04lPs9qu3aC3/6gY/scE2vY1jeZV2VpV0lLQpU5gVdjVGI4YQmfgkb8jYtV5U7FQ1KQ6Poji/ort6wIDAQABozUwMzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQsFAAOCAQEARoo1FJJKKkaZXyFl1tlYj8K7xvryXwhb+tCaFvdXuON27YC3/YIHLUT9sCF9o76VIT8dsVMpK0Qo+VV0FIvqRcB+u6SmyJ+Y7590mzd5P1CSt8Y/4BNV2LosYxhcdVczs26PWHL5GXyBMWRxtBjNsnTeMKh4/WIMrplAr0IOJCmjIeKhv0JbQacsNqhmpe7JdgtBYC4Rrn3ajdD99HZREmyLR/iJrh6W4IGqSN0MGT0xL/mLI0GsTp9JhHDF3o8bmC1yMDlLOoAZp7M072bzfDsKFPg4ATQp/hhbtsTdS/LXrd9cLehZ7ThH6ljL8y2JbALD+6HPnT6Sv+Mg0Wq0MA==");
ИмяСертификата = КаталогВременныхФайлов() + "УчебныйСертификат_" + Строка(Новый УникальныйИдентификатор) + ".cer";
Поток = Неопределено;
СозданСвойФайл = Ложь;
Попытка
Поток = Новый ФайловыйПоток(ИмяСертификата, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
СозданСвойФайл = Истина;
ИсходныеДанные.Записать(Поток);
Поток.Закрыть();
Поток = Неопределено;
Сертификат = Новый СертификатКриптографии(ИмяСертификата);
Сообщить(Base64Строка(Сертификат.Отпечаток) = "tRDNiwoaiFssHhQqwyjWVlPLdns=");
Сертификат.Выгрузить(ИмяСертификата);
Повторный = Новый СертификатКриптографии(ИмяСертификата);
Сообщить(Base64Строка(Повторный.Отпечаток) = Base64Строка(Сертификат.Отпечаток));
Исключение
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл Тогда
УдалитьФайлы(ИмяСертификата);
СозданСвойФайл = Ложь;
КонецЕсли;
ВызватьИсключение;
КонецПопытки;
Если Поток <> Неопределено Тогда
Поток.Закрыть();
КонецЕсли;
Если СозданСвойФайл Тогда
УдалитьФайлы(ИмяСертификата);
СозданСвойФайл = Ложь;
КонецЕсли;
ПроверкаФайла = Новый Файл(ИмяСертификата);
Сообщить(Не ПроверкаФайла.Существует());Разбор по шагам
Имя состоит из временного каталога процесса, учебного префикса и нового UUID. СоздатьНовый не заменяет существующий файл.
Флаг собственности устанавливается только после успешного открытия нового файла. Записываем DER в свой поток и закрываем его.
СертификатКриптографии(ИмяСертификата) читает уже созданный публичный файл. Выгрузка по этому же имени разрешена только потому, что файл принадлежит упражнению.
Повторное чтение проверяет отпечаток. После этого удаляем точное собственное имя под защитой флага; при исключении та же точная очистка.
Как проверить результат
Три сравнения Истина: два отпечатка и отсутствие своего файла после очистки.
Хранилища ОС не меняются; файл содержит только публичный сертификат.
Ожидаемый результат
Файловый конструктор и выгрузка показаны на контролируемом собственном ресурсе.
На что обратить внимание
CER-файл не содержит поставленного закрытого ключа; это не PFX или ключевой контейнер.
При отказе файловой системы очистка может не завершиться: разберите исключение и точное оставшееся имя.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.