ЗаписьFastInfoset.УстановитьДвоичныеДанные

Методы · SetBinaryData

Производит инициализацию объекта записи для записи Fast Infoset-файла в двоичные данные.

Синтаксис

УстановитьДвоичныеДанные()
Полное описание, параметры и ограничения

ЗаписьFastInfoset.УстановитьДвоичныеДанные (FastInfosetWriter.SetBinaryData)

ЗаписьFastInfoset (FastInfosetWriter)

УстановитьДвоичныеДанные (SetBinaryData)

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

Синтаксис:
УстановитьДвоичныеДанные()
Описание:

Производит инициализацию объекта записи для записи Fast Infoset-файла в двоичные данные.

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

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Пройти атрибуты отдельным курсором и проверить code/quantity

ПервыйАтрибут и СледующийАтрибут меняют текущий узел reader. После перехода Имя и Значение относятся уже к атрибуту, а не к элементу товара.

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

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

Подготовка

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

  2. Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.

  3. Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.

  4. Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.

Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
    Запись.ЗаписатьНачалоЭлемента("product");
    Запись.ЗаписатьАтрибут("code", "A-01");
    Запись.ЗаписатьАтрибут("quantity", "3");
    Запись.ЗаписатьТекст("Книга");
    Запись.ЗаписатьКонецЭлемента();
    Данные = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
    ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
    НайденКорень = Ложь;
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            НайденКорень = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Не НайденКорень Тогда
        ВызватьИсключение "Не найден собственный корневой элемент";
    КонецЕсли;
    Код = "";
    Количество = "";
    ЕстьАтрибут = Чтение.ПервыйАтрибут();
    Пока ЕстьАтрибут Цикл
        Сообщить(Чтение.ТипУзла = ТипУзлаXML.Атрибут);
        Сообщить(Чтение.ИмеетИмя И Чтение.ИмеетЗначение);
        Сообщить(Не Чтение.ЭтоАтрибутПоУмолчанию);
        Если Чтение.Имя = "code" Тогда
            Код = Чтение.Значение;
        ИначеЕсли Чтение.Имя = "quantity" Тогда
            Количество = Чтение.Значение;
        КонецЕсли;
        ЕстьАтрибут = Чтение.СледующийАтрибут();
    КонецЦикла;
    Сообщить(Код = "A-01");
    Сообщить(Количество = "3");
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

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

  1. Сначала позиционируем reader на корневом НачалоЭлемента.

  2. ПервыйАтрибут возвращает булевый признак успешного перехода; при отсутствии атрибутов цикл не выполняется.

  3. Внутри цикла используем текущее Имя и Значение, а не индексные методы для начала элемента.

  4. ЭтоАтрибутПоУмолчанию здесь Ложь: оба атрибута записаны явно, DTD и XSD не используются.

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

  1. В каждой итерации три проверки Истина: тип атрибута, наличие имени/значения и явное происхождение.

  2. Последние проверки кода A-01 и количества 3 Истина; порядок обхода не используется как условие.

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

Курсорный обход атрибутов отделён от последовательного обхода элементов.

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

  1. После ПервыйАтрибут нельзя считать Чтение.Имя именем товара product.

  2. Атрибут по умолчанию определяется DTD/XSD, не пустым строковым значением.

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

Записать значение атрибута частями и прочитать ПрочитатьАтрибут

Атрибут label содержит Книга A&B. Запись его начала и конца отделена от элементов; амперсанд передаётся текстом, а не конкатенацией XML-разметки.

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

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

Подготовка

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

  2. Все документы создаются из собственных строк и чисел в памяти. Не подставляйте файл XML, бинарный архив обмена, ссылки или данные рабочей базы вместо учебных значений.

  3. Fast Infoset — двоичное представление XML. Для чтения нужен соответствующий reader, а не преобразование байтов в UTF-8-строку. Это не формат API Avito и не автоматическое сжатие произвольного JSON.

  4. Запуск в 1С ещё не подтверждён; выполните контрольные проверки в учебной базе. Не сравнивайте точные байты двух кодировщиков: в заданиях проверяется восстановленная структура и значения.

Запись = Новый ЗаписьFastInfoset;
Запись.УстановитьДвоичныеДанные();
Попытка
    Запись.ЗаписатьНачалоЭлемента("product");
    Запись.ЗаписатьНачалоАтрибута("label");
    Запись.ЗаписатьТекст("Книга ");
    Запись.ЗаписатьТекст("A&B");
    Запись.ЗаписатьКонецАтрибута();
    Запись.ЗаписатьТекст("Учебный товар");
    Запись.ЗаписатьКонецЭлемента();
    Данные = Запись.Закрыть();
Исключение
    Запись.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
    ВызватьИсключение "Не получены собственные Fast Infoset-данные";
КонецЕсли;
Сообщить(Данные.Размер() > 0);
Чтение = Новый ЧтениеFastInfoset;
Чтение.УстановитьДвоичныеДанные(Данные);
Попытка
    НайденКорень = Ложь;
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            НайденКорень = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Если Не НайденКорень Тогда
        ВызватьИсключение "Не найден собственный корневой элемент";
    КонецЕсли;
    Подпись = "";
    Атрибутов = 0;
    Пока Чтение.ПрочитатьАтрибут() Цикл
        Атрибутов = Атрибутов + 1;
        Если Чтение.ЛокальноеИмя = "label" Тогда
            Подпись = Чтение.Значение;
        КонецЕсли;
    КонецЦикла;
    Сообщить(Атрибутов = 1);
    Сообщить(Подпись = "Книга A&B");
Исключение
    Чтение.Закрыть();
    ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();

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

  1. ЗаписатьНачалоАтрибута вызывается на незавершённом начале элемента до текстового содержимого.

  2. Два вызова ЗаписатьТекст внутри атрибута образуют одну строку label.

  3. ЗаписатьКонецАтрибута завершает атрибут; следующий текст уже относится к элементу.

  4. ПрочитатьАтрибут возвращает очередной атрибут и меняет текущие свойства reader.

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

  1. Три проверки Истина: непустые байты, один атрибут и восстановленная подпись Книга A&B.

  2. Строка ampersand не превратилась в потерянный разделитель и не требует ручного чтения &amp;.

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

Реальный текст восстановлен после поэтапной записи атрибута.

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

  1. Каждому началу атрибута обязателен конец; нельзя начать дочерний элемент, пока атрибут открыт.

  2. Не заменяйте безопасную запись текста сборкой внешней XML-разметки.

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

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

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

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

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