Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: обмен данными
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.1 (8.0)
alex040269
Добрый день.

Никак не могу понять, почему одни объекты в xml записываются так:
    <Номенклатура xsi:type="CatalogRef.Номенклатура">aa19e93b-6e89-11dd-4e83-0007e90b2b38</Номенклатура>


а друние так:
    <Сценарий>dc554c8f-3d93-11df-9b6f-0022b0de14c7</Сценарий>
    <Подразделение>5d80307c-7986-11dd-c993-0007e90b2b38</Подразделение>


как сделать, чтобы все объекты записывались как в первом варианте?

Запись производится штатно:
ЗаписатьXML(ЗаписьXML,Данные,НазначениеТипаXML.Явное);


Спасибо за внимание
zetovich
о чем речь?
УРБД?
alex040269
Цитата(zetovich @ 22.04.10, 20:50) необходимо зарегистрироваться для просмотра ссылки
о чем речь?
УРБД?

обмен данными между разными конфигурациями.
zetovich
это что то самописное?...обработка?.....или что?
Batchir
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С.

Отсюда можно сделать вывод что простые типы указываются без явного определения типа, а сложные с его указанием.
Creaturka
если я правильно понимаю, то у Вас с неявным типом записываются значения реквизитов ссылочного типа, принадлежащих объекту, при этом для самого объекта при записи тип указывается (в примере идет запись элемента справочника Номенклатура, имеющего реквизиты Сценарий и Подразделение). это так?
alex040269
Цитата(zetovich @ 23.04.10, 10:47) необходимо зарегистрироваться для просмотра ссылки
это что то самописное?...обработка?.....или что?

Планируется обмен данными через COM. Пока внешняя обработка...
alex040269
Цитата(Creaturka @ 23.04.10, 12:27) необходимо зарегистрироваться для просмотра ссылки
если я правильно понимаю, то у Вас с неявным типом записываются значения реквизитов ссылочного типа, принадлежащих объекту, при этом для самого объекта при записи тип указывается (в примере идет запись элемента справочника Номенклатура, имеющего реквизиты Сценарий и Подразделение). это так?

Несовсем:
Номенклатура, Сценарий и Подразделение - это разные реквизиты, все ссылочного типа. Только у номенклатуры прописывается атрибут xsi:type="CatalogRef.Номенклатура", из чего прямо следует, что это ссылка на справочник (или объект справочник) конткретного типа. А Сценарий и Подразделение отображаются как простой тип...

Спасибо за внимание.
Creaturka
как вариант помогает (по крайней мере, у меня) переделать цикл записи и для каждого типа объекта "разжевать" запись всех его атрибутов
пример из демки "Обмен данными":
Процедура ЗаписатьДанные(ЗаписьXML, Данные)
    
    Удаление = ?(ТипЗнч(Данные) = Тип("УдалениеОбъекта"), Истина, Ложь);
    // Получаем объект описания метаданного, соответствующий данным
    ОбъектМетаданных = ?(Удаление, Данные.Ссылка.Метаданные(), Данные.Метаданные());
    
    // Если выгружаемыми данными является Справочник.Номенклатура, то его выгружаем вручную
    Если Не Удаление И ОбъектМетаданных = Метаданные.Справочники.Номенклатура Тогда
        
        // Записываем элемент справочника вручную
        НоменклатураЗаписатьXML(ЗаписьXML, Данные);
        
    Иначе
        
        // Записываем данные с помощью стандартного метода
        Записать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(ЗаписьXML, Номенклатура.ЗакупочнаяЦена, "ЗакупочнаяЦена", НазначениеТипаXML.Явное);
        // Картинка
        ЗаписатьXML(ЗаписьXML, Номенклатура.Картинка, "Картинка", НазначениеТипаXML.Явное);
        // ПолноеНаименование
        ЗаписатьXML(ЗаписьXML, Номенклатура.ПолноеНаименование, "ПолноеНаименование", НазначениеТипаXML.Явное);
        
    КонецЕсли;
    
    // Записываем конец элемента
    ЗаписьXML.ЗаписатьКонецЭлемента();
    
КонецПроцедуры // НоменклатураЗаписатьXML(ЗаписьXML, Номенклатура)
alex040269
Цитата(Creaturka @ 23.04.10, 15:33) необходимо зарегистрироваться для просмотра ссылки
как вариант помогает (по крайней мере, у меня) переделать цикл записи и для каждого типа объекта "разжевать" запись всех его атрибутов
пример из демки "Обмен данными":


мда, блин, в общем примерно так и делаю... Думал, может, можно вписать еще пару строк, определения XML типов, или еще что нибудь похожее, и упростить код...

Спасибо всем откликнувшимся.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.