ГрафическаяСхема.ПрочитатьАсинх

Методы · ReadAsync

Асинхронная функция. Считывает графическую схему из файла.

Синтаксис

ПрочитатьАсинх(<ИмяФайла>)
ПрочитатьАсинх(<Поток>)
Полное описание, параметры и ограничения

ГрафическаяСхема.ПрочитатьАсинх (GraphicalSchema.ReadAsync)

ГрафическаяСхема (GraphicalSchema)

ПрочитатьАсинх (ReadAsync)

Доступен, начиная с версии 8.3.18.

Вариант синтаксиса: Из файла

Синтаксис:
ПрочитатьАсинх(<ИмяФайла>)
Параметры:

<ИмяФайла> (обязательный)
Тип: Строка.
Имя файла графической схемы.
Описание варианта метода:
Чтение графической схемы из файла.
Вариант синтаксиса: Из потока

Синтаксис:
ПрочитатьАсинх(<Поток>)
Параметры:

<Поток> (обязательный)
Тип: Поток, ПотокВПамяти, ФайловыйПоток.
Поток для чтения графической схемы.
Описание варианта метода:
Чтение графической схемы из потока.
Возвращаемое значение:
Тип: Обещание.
Результат выполнения обещания - Неопределено.
Описание:

Асинхронная функция. Считывает графическую схему из файла.

Доступность:

Тонкий клиент, толстый клиент.

См. также:
ГрафическаяСхема, метод НачатьЧтение
ГрафическаяСхема, метод Прочитать

Использование в версии:

Доступен, начиная с версии 8.3.18.

Методическая информация

Практические примеры

Асинхронно прочитать и записать свою схему в память

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

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

Полный модуль управляемой формы учебной обработки Windows: серверная функция и клиентская Асинх Процедура. Не вставляйте внутрь другого обработчика.

Подготовка

  1. Создайте НОВУЮ пустую файловую учебную базу, не копию рабочего каталога. В Конфигураторе задайте корню имя Учебная85. Не добавляйте эти объекты в рабочую УТ/КА2/УНФ/БП.

  2. Справочники → Добавить: имя УчебныеТовары. Длина кода 10, тип кода Строка, автонумерация и контроль уникальности включены, длина наименования 100.

  3. Для УчебныеТовары включите иерархию групп и элементов. Добавьте реквизиты Артикул (Строка, длина 20) и Цена (Число, 12 цифр, 2 дробных, неотрицательное). Проверка заполнения для этих учебных реквизитов не устанавливается.

  4. Добавьте табличную часть Штрихкоды: Штрихкод (Строка, длина 20) и Основной (Булево). Обновите конфигурацию базы данных. Модули объектов оставьте пустыми.

  5. Создайте серверный общий модуль УчебныеЗадачи и команду учебной обработки, вызывающую ВыполнитьПример() Экспорт. Каждый фрагмент выполняйте отдельно, не склеивайте их в одну процедуру.

  6. В этой отдельной пустой конфигурации Учебная85 добавьте Задачи → УчебнаяЗадача: длина номера 9, тип Строка, автонумерация; наименование длиной 100. Добавьте реквизит Комментарий (Строка, 100), без проверки заполнения.

  7. Добавьте Бизнес-процессы → УчебныйПроцесс: длина номера 9, тип Строка, автонумерация, реквизит Комментарий (Строка, 100), без проверки заполнения. В свойстве Задача выберите УчебнаяЗадача.

  8. Карта маршрута: одна точка старта Старт → одна одиночная точка действия ПодготовитьКнигу → одна точка завершения Финиш. Соедините их стрелками; в представлении точки действия укажите Подготовить учебную книгу.

  9. Адресацию задач, групповые/условные/вложенные точки и обработчики маршрута для этой задачи не добавляйте. Модули задачи и процесса, подписки и внешние действия должны быть пустыми. Обновите конфигурацию базы данных.

  10. Все имена здесь относятся к новым учебным объектам, не к рабочей КА2/УНФ/УТ/БП. Каждый фрагмент запускайте отдельно на сервере в ВыполнитьПример() Экспорт общего модуля УчебныеЗадачи.

  11. В этих упражнениях процесс не записывается и не запускается. Исследуется копия карты маршрута в памяти; печать на физический принтер не вызывается.

  12. Полный код этого урока вставьте в модуль управляемой формы учебной внешней обработки в Windows, без помещения процедур внутрь другого обработчика. Сервер возвращает только свои двоичные данные; новый процесс не записывает и не запускает.

  13. Сделайте команду ВыполнитьУрок и назначьте соответствующий клиентский обработчик из кода. Этот вариант предназначен для тонкого или толстого клиента Windows, не для веб-клиента.

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

&НаКлиенте
Асинх Процедура ВыполнитьУрок(Команда)
    ИсходныеДанные = ПолучитьСвоюКартуБайтами();
    ПотокЧтения = ИсходныеДанные.ОткрытьПотокДляЧтения();
    Схема = Новый ГрафическаяСхема;
    Попытка
        Ждать Схема.ПрочитатьАсинх(ПотокЧтения);
    Исключение
        ПотокЧтения.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    ПотокЧтения.Закрыть();
    Схема.ПолеСлева = 15;
    КоличествоИсходных = Схема.ЭлементыГрафическойСхемы.Количество();
    ПотокЗаписи = Новый ПотокВПамяти;
    Попытка
        Ждать Схема.ЗаписатьАсинх(ПотокЗаписи);
        БайтыКопии = ПотокЗаписи.ЗакрытьИПолучитьДвоичныеДанные();
    Исключение
        ПотокЗаписи.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    ПотокКопии = БайтыКопии.ОткрытьПотокДляЧтения();
    Копия = Новый ГрафическаяСхема;
    Попытка
        Ждать Копия.ПрочитатьАсинх(ПотокКопии);
    Исключение
        ПотокКопии.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    ПотокКопии.Закрыть();
    Сообщить(Копия.ЭлементыГрафическойСхемы.Количество() = КоличествоИсходных);
    Сообщить(Копия.ПолеСлева = 15);
    Копия.ПолеСлева = 20;
    Сообщить(Схема.ПолеСлева = 15);
    Сообщить(Копия.ПолеСлева = 20);
КонецПроцедуры

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

  1. Серверная функция создаёт собственную карту и сериализует её в память, а не передаёт объект процесса на клиент.

  2. ПрочитатьАсинх и ЗаписатьАсинх работают со своими потоками. Каждый Ждать завершается до закрытия соответствующего потока.

  3. Клиент задаёт поле страницы 15 миллиметров и записывает новое значение в собственные байты.

  4. Копия создаётся отдельным конструктором и читается из независимого потока; изменение её поля на 20 не меняет исходную схему.

  5. На ошибочных путях потоки также закрываются. Ни файл, ни принтер, ни запись процесса не используются.

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

  1. Четыре сравнения Истина.

  2. Число элементов сохранено, исходное поле осталось 15, поле отдельной копии стало 20.

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

Проверены два асинхронных метода и независимый roundtrip собственной карты.

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

  1. Не закрывайте поток до завершения Ждать.

  2. ПотокВПамяти не является файлом на диске.

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

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

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

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

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