Возвращает экземпляр объекта ДвоичныеДанные, содержащего данные, записанные в поток.
Синтаксис
ЗакрытьИПолучитьДвоичныеДанные()Полное описание, параметры и ограничения
ПотокВПамяти.ЗакрытьИПолучитьДвоичныеДанные (MemoryStream.CloseAndGetBinaryData)
ПотокВПамяти (MemoryStream)
ЗакрытьИПолучитьДвоичныеДанные (CloseAndGetBinaryData)
Доступен, начиная с версии 8.3.9.
Синтаксис:
ЗакрытьИПолучитьДвоичныеДанные()
Возвращаемое значение:
Тип: ДвоичныеДанные.
Описание:
Возвращает экземпляр объекта ДвоичныеДанные, содержащего данные, записанные в поток.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Если поток создан на основе объектаБуферДвоичныхДанных и буфер позволяет изменения (ТолькоЧтениеустановлено в Ложь), то выполняется копирование данных.
В любом другом случае копирование данных не выполняется.
Использование в версии:
Доступен, начиная с версии 8.3.9.
Методическая информация
Практические примеры
Выгрузить сертификат в собственный поток
Потоковый вариант выгрузки заполняет собственный ПотокВПамяти. Получение результата и освобождение потока выполняются отдельно.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Используйте отдельную учебную базу. Фрагмент без директив вставьте в тело серверной процедуры ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.
Все исходные байты создаются самим примером в памяти. Файлы, сеть, справочники и документы не нужны.
Запускайте задачи отдельно. После закрытия ЧтениеДанных/ЗаписьДанных не используйте этот экземпляр повторно.
В пример встроен отдельный публичный учебный X.509-сертификат Syntax Guide Training Only. Его закрытый ключ не сохранён, сертификат не установлен в хранилище ОС и не признан доверенным.
Используйте Windows-клиент или Windows-сервер 1С 8.5.1.1343. Проверка других ОС, веб-клиента и расширений криптографии этим уроком не подтверждена.
Не заменяйте учебный сертификат рабочим для первого запуска. Код ничего не подписывает, не импортирует в хранилища, не обращается к OCSP/CRL и не просит пароль.
ИсходныеДанные = 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Строка(Выгруженные) = Base64Строка(ИсходныеДанные));
Сообщить(Выгруженные.Размер() = ИсходныеДанные.Размер());Разбор по шагам
Создаём свой поток, не открываем произвольный путь и не получаем файл из хранилища ОС.
Выгрузить получает объект потока. В этом варианте результат берём из потока, а не считаем возвращаемое значение байтами.
ЗакрытьИПолучитьДвоичныеДанные завершает поток и возвращает его содержимое; при исключении поток также закрывается.
Проверяем размер и полное содержимое собственного публичного образца.
Как проверить результат
Два сравнения Истина; размер равен исходным DER-данным.
Поток больше не используется после получения итоговых байтов.
Ожидаемый результат
Публичный сертификат выгружен в поток и проверен побайтово.
На что обратить внимание
Потоковый вариант не импортирует сертификат в ОС.
Нельзя закрыть поток до вызова выгрузки или использовать его после ЗакрытьИПолучитьДвоичныеДанные.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Показать собственный PDF в поле формы без временного файла
Из учебных ячеек формируем байты PDF в памяти, читаем их в ДокументPDF и связываем с полем. Проверяем масштаб и первую страницу, диагностически читаем состояние просмотра.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В отдельной учебной базе 8.5.1.1343 создайте внешнюю обработку УчебныеПоляДокументов85 с пустой управляемой основной формой. Запускайте в тонком клиенте Windows; веб-клиент в этот урок не входит.
Не создавайте вручную УчебныйДокумент, ПолеДокумента или учебную команду. Модуль программно добавляет их при открытии формы.
В свойствах формы → События назначьте ПриСозданииНаСервере. Вставьте весь код одного урока на уровне модуля, сохраните свою EPF и откройте её в учебной базе.
Поле связано с реквизитом УчебныйДокумент типа ДокументPDF. Объект документа содержит данные, элемент ПолеДокумента отвечает за отображение и пользовательские действия.
Документ создаётся заново из собственных констант. Книга: 3 штуки по 250, сумма 750. Реальные документы, справочники, файлы, сертификаты и сетевые адреса не используются.
Каждый урок запускайте в отдельной копии формы. Изменения текста и оформления живут в памяти открытой учебной формы; код не сохраняет документ в файл, не печатает и не пишет в базу.
Размеры и ограничения элемента задаются на сервере создания формы. Кнопка выполняет клиентские проверки или явно описанное учебное изменение.
Фактический вид и запуск в 1С не проверены. Настройки компоновки формы, масштаб интерфейса и версия клиента могут влиять на отображение; сверяйте его вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("УчебныйДокумент", Новый ОписаниеТипов("ДокументPDF")));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
ЭтаФорма.УчебныйДокумент = ПрочитатьСобственныйДокумент(СоздатьСобственныеБайтыPDF());
Поле = Элементы.Добавить("ПолеДокумента", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеPDFДокумента;
Поле.ПутьКДанным = "УчебныйДокумент";
Поле.Масштаб = 100;
Поле.НомерТекущейСтраницы = 1;
Поле.Ориентация = 0;
Поле.Вывод = ИспользованиеВывода.Запретить;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить учебный документ";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Поле = Элементы.ПолеДокумента;
Сообщить(ТипЗнч(УчебныйДокумент) = Тип("ДокументPDF"));
Сообщить(Поле.Масштаб = 100);
Сообщить(Поле.НомерТекущейСтраницы = 1);
Сообщить(Поле.Ориентация = 0);
Сообщить("Положение состояния просмотра: " + Строка(Поле.ПоложениеСостоянияПросмотра));
Сообщить("Тип значения положения: " + Строка(ТипЗнч(Поле.ПоложениеСостоянияПросмотра)));
КонецПроцедуры
&НаСервереБезКонтекста
Функция СоздатьСобственныеБайтыPDF()
Таблица = Новый ТабличныйДокумент;
Таблица.КодЯзыка = "ru";
Таблица.Область(1, 1).Текст = "СОБСТВЕННЫЙ УЧЕБНЫЙ ОБРАЗЕЦ";
Таблица.Область(2, 1).Текст = "Книга";
Таблица.Область(2, 2).Текст = "3";
Таблица.Область(2, 3).Текст = "250";
Таблица.Область(2, 4).Текст = "750";
Таблица.Область(1, 1, 2, 4).ЦветФона = Новый Цвет(255, 255, 210);
Таблица.Область(, 1, , 1).ШиринаКолонки = 45;
Поток = Новый ПотокВПамяти;
Попытка
Таблица.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
Исключение
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Возврат Данные;
КонецФункции
&НаСервереБезКонтекста
Функция ПрочитатьСобственныйДокумент(Данные)
Поток = Данные.ОткрытьПотокДляЧтения();
Попытка
Документ = Новый ДокументPDF;
Документ.Прочитать(Поток);
Поток.Закрыть();
Исключение
Поток.Закрыть();
ВызватьИсключение;
КонецПопытки;
Возврат Документ;
КонецФункции
Разбор по шагам
Собственный ТабличныйДокумент экспортируется в ПотокВПамяти, а не на диск. Исключение закрывает поток и передаётся вызывающему коду.
Второй поток открывается на полученных ДвоичныеДанные. ДокументPDF читает его и закрывает при успехе и ошибке.
После назначения УчебныйДокумент создаём поле с ВидПоляФормы.ПолеPDFДокумента и правильным путём к данным.
Масштаб 100 — дополнительный масштаб PDF относительно масштаба формы. Номер страницы начинается с 1; документ не пустой.
В установленном описании ПоложениеСостоянияПросмотра тип не указан. Поэтому читаем реальное значение и тип, не назначая выдуманное перечисление.
Как проверить результат
Ожидаются четыре Истина и две диагностические строки состояния. На форме должна быть учебная строка Книга / 3 / 250 / 750.
Откройте поток в отладчике: чтение закрыто, а PDF остаётся в реквизите формы. Файл PDF этим кодом не создаётся.
Ожидаемый результат
Полный маршрут собственного PDF до поля формы показан без зависимости от неизвестного файла.
На что обратить внимание
ДокументPDF и обычный элемент ПолеPDFДокумента — не одно и то же. Здесь управляемая форма использует ПолеФормы с соответствующим видом.
НомерТекущейСтраницы — единичная нумерация; 0 не является первой страницей.
Не выдавайте настройки просмотра за проверку электронной подписи или защиту PDF.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.