Живет на форуме
Группа: Команда
Сообщений: 3568
Из: Киев
Спасибо сказали: 1443 раз
Рейтинг: 0
XML -сериализация, механизм (XML Serialization, Mechanism)
XML-сериализация - это процесс преобразования данных 1С:Предприятия 8 в последовательность данных формата XML и наоборот, преобразование последовательности данных формата XML в данные 1С:Предприятия 8, если существует подходящий тип данных.
Средства XML-сериализации активно используются при реализации различных схем обмена данными.
Сериализуемые типы данных 1С:Предприятия 8
С точки зрения представления в XML типы данных 1С:Предприятия 8 делятся на простые и сложные.
К простым типам данных относятся типы, значения которых представляются подсистемой XML-сериализации в виде элементов XML только с текстовым содержимым: Число; Строка; Дата; Булево; ДвоичныеДанные; Null; УникальныйИдентификатор; ХранилищеЗначения; все ссылки на объекты базы данных; ссылки на перечисления, определяемые в метаданных.
Значения сложных типов представляются в виде элементов XML, содержащих вложенные элементы: Тип; ОписаниеТипов; КонстантаМенеджерЗначения.<имя константы>; все объекты базы данных; наборы записей регистров, последовательностей, перерасчетов; УдалениеОбъекта;
Объекты базы данных представляются в XML как совокупность значений реквизитов и табличных частей. Состав элементов XML, вложенных в корневой элемент, определяется типом объекта базы данных, а также составом реквизитов и табличных частей. Каждый из реквизитов объекта представляется отдельным вложенным элементом XML; каждая из табличных частей также представляется отдельным вложенным элементом XML. Каждая из строк табличной части представляется элементом XML, вложенным в элемент, представляющий табличную часть. Реквизиты табличной части представляются элементами XML, вложенными в элемент, представляющий строку табличной части.
Представление в XML набора записей включает отбор, по которому получен набор записей и сами записи, входящие в отбор. Значения отбора представляются вложенным элементом XML с именем Filter, а все записи составляющие набор записей - вложенным элементом XML с именем Records. Отдельные записи представляются элементами XML с именем Record, вложенными в элемент Records.
Взято с сайта 1С.
Отсюда можно сделать вывод что простые типы указываются без явного определения типа, а сложные с его указанием.
если я правильно понимаю, то у Вас с неявным типом записываются значения реквизитов ссылочного типа, принадлежащих объекту, при этом для самого объекта при записи тип указывается (в примере идет запись элемента справочника Номенклатура, имеющего реквизиты Сценарий и Подразделение). это так?
если я правильно понимаю, то у Вас с неявным типом записываются значения реквизитов ссылочного типа, принадлежащих объекту, при этом для самого объекта при записи тип указывается (в примере идет запись элемента справочника Номенклатура, имеющего реквизиты Сценарий и Подразделение). это так?
Несовсем: Номенклатура, Сценарий и Подразделение - это разные реквизиты, все ссылочного типа. Только у номенклатуры прописывается атрибут xsi:type="CatalogRef.Номенклатура", из чего прямо следует, что это ссылка на справочник (или объект справочник) конткретного типа. А Сценарий и Подразделение отображаются как простой тип...
Спасибо за внимание.
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
как вариант помогает (по крайней мере, у меня) переделать цикл записи и для каждого типа объекта "разжевать" запись всех его атрибутов пример из демки "Обмен данными":
Процедура ЗаписатьДанные(ЗаписьXML, Данные)
Удаление = ?(ТипЗнч(Данные) = Тип("УдалениеОбъекта"), Истина, Ложь); // Получаем объект описания метаданного, соответствующий данным ОбъектМетаданных = ?(Удаление, Данные.Ссылка.Метаданные(), Данные.Метаданные());
// Если выгружаемыми данными является Справочник.Номенклатура, то его выгружаем вручную Если Не Удаление И ОбъектМетаданных = Метаданные.Справочники.Номенклатура Тогда
// Записываем элемент справочника вручную НоменклатураЗаписатьXML(ЗаписьXML, Данные);
Иначе
// Записываем данные с помощью стандартного метода ЗаписатьXML(ЗаписьXML, Данные);
// Записываем начало элемента XML ЗаписьXML.ЗаписатьНачалоЭлемента("CatalogObject.Номенклатура.Вручную");
// Ссылка ЗаписатьXML(ЗаписьXML, Номенклатура.Ссылка, "Ref", НазначениеТипаXML.Явное); // ЭтоГруппа ЗаписатьXML(ЗаписьXML, Номенклатура.ЭтоГруппа, "IsFolder", НазначениеТипаXML.Явное); // Родитель ЗаписатьXML(ЗаписьXML, Номенклатура.Родитель, "Parent", НазначениеТипаXML.Явное); // Код ЗаписатьXML(ЗаписьXML, Номенклатура.Код, "Code", НазначениеТипаXML.Явное); // Наименование ЗаписатьXML(ЗаписьXML, Номенклатура.Наименование, "Description", НазначениеТипаXML.Явное); // Реквизиты, выгружаемые только для элемента справочника, а не для группы Если Не Номенклатура.ЭтоГруппа Тогда
как вариант помогает (по крайней мере, у меня) переделать цикл записи и для каждого типа объекта "разжевать" запись всех его атрибутов пример из демки "Обмен данными":
мда, блин, в общем примерно так и делаю... Думал, может, можно вписать еще пару строк, определения XML типов, или еще что нибудь похожее, и упростить код...
Спасибо всем откликнувшимся.
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник. ЗиУП
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!