Асинхронно записать две строки и прочитать строку и остаток

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

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

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

Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.

Подготовка

  1. Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.

  2. В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.

  3. Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.

  4. Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.

&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
    Поток = Новый ПотокВПамяти;
    Запись = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8, , Символы.ПС);
    Попытка
        Ждать Запись.ЗаписатьСтрокуАсинх("Книга");
        Ждать Запись.ЗаписатьСимволыАсинх("Ручка");
        Ждать Запись.ЗакрытьАсинх();
    Исключение
        Запись.Закрыть();
        Поток.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
    Данные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8, , Символы.ПС);
    Попытка
        Сообщить(Чтение.РазделительСтрок = Символы.ПС);
        ПерваяСтрока = Ждать Чтение.ПрочитатьСтрокуАсинх();
        Остаток = Ждать Чтение.ПрочитатьСимволыАсинх();
        Сообщить(ПерваяСтрока = "Книга");
        Сообщить(Остаток = "Ручка");
        Ждать Чтение.ЗакрытьАсинх();
    Исключение
        Чтение.Закрыть();
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

  1. Конструкторы явно используют UTF-8 и разделитель ПС. BOM не добавляется по умолчанию.

  2. Первый ожидаемый вызов пишет Книга и ПС, второй — только пять букв Ручка без добавленного ПС.

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

  4. ПрочитатьСтрокуАсинх возвращает после Ждать строку Книга без разделителя, а ПрочитатьСимволыАсинх — остаток Ручка.

  5. Все объекты локальны одному запуску: повторный клик не переиспользует чужую позицию чтения.

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

  1. Все три сравнения Истина; первая строка Книга, остаток Ручка.

  2. Повторный запуск выдаёт такой же результат и не создаёт файлов.

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

Получены именно строки, а не объекты обещаний; граница между записями сохранена.

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

  1. Не вставляйте клиентскую Асинх процедуру внутрь другой процедуры.

  2. Успешная запись в память не означает отправку в сервис или сохранение в базу.

  3. При работе с текстом всегда согласовывайте кодировку обеих сторон.

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

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

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

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

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