Разбираем HDR|Книга#TAIL: сначала пропуск байтов и границы, затем получение поля и хвоста с обработкой отсутствующего маркера.
Где и как запускать
Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.
Подготовка
Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.
В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.
Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.
Пример работает только со своими данными в памяти; записи в базу, файлы и сеть нет.
&НаКлиенте
Асинх Процедура УчебныйПример(Команда)
Данные = ПолучитьДвоичныеДанныеИзСтроки("HDR|Книга#TAIL", КодировкаТекста.UTF8, Ложь);
Чтение = Новый ЧтениеДанных(Данные, КодировкаТекста.UTF8);
Попытка
Пропущено = Ждать Чтение.ПропуститьАсинх(3);
Если Пропущено <> 3 Тогда
ВызватьИсключение "Учебный заголовок неполный";
КонецЕсли;
Граница = Ждать Чтение.ПропуститьДоАсинх("|", КодировкаТекста.UTF8);
Если Граница = -1 Тогда
ВызватьИсключение "Обязательная граница не найдена";
КонецЕсли;
Поле = Ждать Чтение.ПрочитатьДоАсинх("#", КодировкаТекста.UTF8);
Если Не Поле.МаркерНайден Тогда
ВызватьИсключение "Не найдена граница поля";
КонецЕсли;
Двоичные = Ждать Поле.ПолучитьДвоичныеДанныеАсинх();
Сообщить(Граница = 0);
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Двоичные, КодировкаТекста.UTF8) = "Книга");
Хвост = Ждать Чтение.ПрочитатьСимволыАсинх();
Сообщить(Хвост = "TAIL");
НетГраницы = Ждать Чтение.ПропуститьДоАсинх("|", КодировкаТекста.UTF8);
Сообщить(НетГраницы = -1);
Ждать Чтение.ЗакрытьАсинх();
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыРазбор по шагам
Ждать ПропуститьАсинх возвращает фактическое число байтов, а не признак успеха.
Обязательную границу | ищем только после проверки полного трёхбайтового заголовка.
Результат ПропуститьДоАсинх с одним найденным маркером равен 0. При отсутствии возвращается -1.
ПрочитатьДоАсинх даёт РезультатЧтенияДанных. Проверяем его МаркерНайден перед преобразованием текстового поля.
TAIL читается после #; повторный поиск | на конце подтверждает отсутствие маркера.
Как проверить результат
Получены Книга и TAIL; успешный индекс 0, неуспешный -1; четыре сообщения Истина.
Измените первый разделитель на /: пример прекращает разбор с понятной ошибкой, а не объявляет сообщение корректным.
Ожидаемый результат
Учебное сообщение разобрано асинхронно с явными проверками границ.
На что обратить внимание
Пропуск трёх байтов подходит именно для ASCII-заголовка HDR.
Ошибки обязательных границ нельзя скрывать и продолжать разбор как будто сообщение корректно.
Пример не осуществляет HTTP-запрос и не является спецификацией внешнего протокола.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.