Синтаксис и применение ЗаписьXML.По умолчанию в платформе 1С:Предприятие. Описание и примеры кода.
Синтаксис
Новый ЗаписьXMLПолное описание, параметры и ограничения
ЗаписьXML.По умолчанию
ЗаписьXML (XMLWriter)
По умолчанию
Синтаксис:
Новый ЗаписьXML
Методическая информация
Практические примеры
Повторно пройти настоящую выборку собственных изменений
ВыборкаДанных создается планом обмена, не результатом SQL-запроса другого типа. Номер сообщения берется из реальной записи сообщения.
Где и как запускать
Сервер собственной учебной базы; также толстый клиент или внешнее соединение, если это разрешено указанным API.
Подготовка
Только собственная учебная конфигурация. Все указанные имена сначала создайте в Конфигураторе; объекты рабочей базы не заменяйте. Здесь код не запускается.
Настройте свой план обмена УчебныйОбмен с собственным узлом 02 и составом УчебныеТовары, зарегистрируйте свои учебные изменения. Это действие изменяет регистрацию номеров сообщений, не полностью безвредное чтение; никаких реальных файлов или передачи сети нет.
&НаСервереБезКонтекста
Процедура ДваждыПройтиУчебныеИзменения()
Узел = ПланыОбмена.УчебныйОбмен.НайтиПоКоду("02");
Если Не ЗначениеЗаполнено(Узел) Тогда
ВызватьИсключение "Создайте собственный узел 02";
КонецЕсли;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
Сообщение = ПланыОбмена.СоздатьЗаписьСообщения();
Сообщение.НачатьЗапись(ЗаписьXML, Узел);
Выборка = ПланыОбмена.ВыбратьИзменения(Узел, Сообщение.НомерСообщения, Метаданные.Справочники.УчебныеТовары);
ПервыйПроход = 0;
Пока Выборка.Следующий() Цикл
ПервыйПроход = ПервыйПроход + 1;
КонецЦикла;
Выборка.Сбросить();
ВторойПроход = 0;
Пока Выборка.Следующий() Цикл
ВторойПроход = ВторойПроход + 1;
КонецЦикла;
Сообщение.ЗакончитьЗапись();
ТекстСообщения = ЗаписьXML.Закрыть();
Сообщить("Проходы: " + Строка(ПервыйПроход) + ", " + Строка(ВторойПроход));
Сообщить("Длина оболочки сообщения: " + Строка(СтрДлина(ТекстСообщения)));
КонецПроцедурыРазбор по шагам
Создайте запись сообщения в памяти для своего узла.
Получите однородную выборку с фильтром своего справочника.
Сбросьте и заново посчитайте строки той же выборки.
Как проверить результат
Номер сообщения не выдуман константой.
Сбросить вызывается на ВыборкаДанных; при неизменной выборке количества двух проходов должны совпасть.
Ожидаемый результат
Показан возврат позиции настоящей выборки в начало.
На что обратить внимание
ПланыОбмена.ВыбратьИзменения проставляет номер сообщения в регистрации изменений. Этот пример не сериализует объекты и не является полноценным сообщением обмена для приема.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Передать учебный контакт через XML в памяти
Тип ДанныеКонтакта поддерживает XML-сериализацию. Проверяем имя и собственный почтовый элемент; мобильная синхронизация при этом не выполняется.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Учебная база, серверный контекст. ДанныеКонтакта и связанные типы доступны на сервере: для этих задач не нужен мобильный телефон, разрешение на контакты или настоящая адресная книга.
Вся персона вымышлена: Учебный Ученик Тестович, организация Учебный магазин. Телефоны 000-000-01/02 — демонстрационные строки, адрес student@example.invalid учебный. Ничего не отправляйте и не звоните.
Код создаёт объекты только в памяти. Он не вызывает менеджер контактов устройства, синхронизацию, геокодирование, интернет или запись справочника Партнеры/КонтактныеЛица.
Контакт = Новый ДанныеКонтакта;
Контакт.Имя = "Учебный";
Контакт.Фамилия = "Ученик";
Контакт.Отчество = "Тестович";
Контакт.АдресаЭлектроннойПочты = Новый Массив;
Контакт.АдресаЭлектроннойПочты.Добавить(Новый ЭлементДанныхКонтакта(ТипАдресаЭлектроннойПочтыДанныхКонтакта.Рабочий, "student@example.invalid"));
Сообщить(XMLСтрока(Контакт.Имя) = "Учебный");
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
Попытка
Сериализатор.ЗаписатьXML(Запись, Контакт, НазначениеТипаXML.Явное);
СтрокаXML = Запись.Закрыть();
Исключение
Запись.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(СтрокаXML);
Попытка
Чтение.ПерейтиКСодержимому();
Копия = Сериализатор.ПрочитатьXML(Чтение, Тип("ДанныеКонтакта"));
Исключение
Чтение.Закрыть();
ВызватьИсключение;
КонецПопытки;
Чтение.Закрыть();
Сообщить(ТипЗнч(Копия) = Тип("ДанныеКонтакта"));
Сообщить(Копия.Имя = "Учебный");
Сообщить(Копия.Фамилия = "Ученик");
Сообщить(Копия.Отчество = "Тестович");
Сообщить(Копия.АдресаЭлектроннойПочты.Количество() = 1);
Сообщить(Копия.АдресаЭлектроннойПочты[0].Значение = "student@example.invalid");Разбор по шагам
Новый контакт имеет собственные имя и почтовый элемент с системным типом Рабочий.
XMLСтрока используется только для простого строкового поля имени: это не сериализация составного контакта.
Для всей карточки создаём СериализаторXDTO со стандартной ФабрикаXDTO, пишем с явным типом и читаем в ДанныеКонтакта. Чтение и запись закрываем также при ошибке.
В копии проверяем тип, три части имени, количество и содержимое почты. Устройство и менеджер синхронизации не вызываются.
Как проверить результат
Семь сообщений Истина.
XML остаётся в строке памяти: ни файл, ни внешний сервис не нужны.
Ожидаемый результат
Получена отдельная XML-копия собственного учебного контакта.
На что обратить внимание
Это собственные учебные объекты, не контакт, уже полученный от операционной системы или сохранённый на устройстве.
XML-сериализация платформы не является универсальным vCard или JSON-контрактом сторонней CRM.
Для входного неизвестного XML необходимы отдельные ограничения размера и согласованный контракт; этот пример читает только свой источник.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.