Версия для печати темы (https://pro1c.org.ua/index.php?s=216b7c9cdd1ef72002ec3fc3307b3058&showtopic=28599)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ 1С Предприятие 8 _ Как без труда передавать данные между системами на базе 1С 8

Автор: Vofka 10.03.16, 16:14

Часто приходится писать какие-то обмены данными между разными либо одинаковыми системами. Кто-то использует для этого конфигурацию Конвертация данных. Сам лично не имею большого опыта работы с ней, поэтому не могу судить про её функциональность и удобство работы. Но во многих случаях, если надо сделать какой-то не сложный обмен, например, обменяться номенклатурой или контрагентами, гораздо проще сделать выгрузку в какой-то файл в своем формате с последующей загрузкой оттуда. Отчасти это проще потому, что не надо разбираться с Конвертацией smile.gif . Короче. Статья не про Конвертацию, поэтому кому не интересно - можно закрывать.

Перейду к сути. Средства платформы позволяют без напряга сериализовать в XML и десериализовать оттуда же практически любой объект, который доступен внутри программы: экземпляры объектов ссылочных типов, наборы записей, структуры, массивы и т.п. Для того, чтобы сериализовать что-то в XML, достаточно воспользоваться этой функцией:

Функция ДанныеВСтроку(Данные)
    
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    ЗаписьXML = Новый ЗаписьXML();
    ЗаписьXML.УстановитьСтроку();
    Сериализатор.ЗаписатьXML(ЗаписьXML, Данные, НазначениеТипаXML.Явное);
    Возврат ЗаписьXML.Закрыть();
    
КонецФункции


На выходе получаем строку, которую можно записать в файл, передать в web/http сервис или по OLE. В принимающей системе, чтобы получить из строки объект, достаточно вызвать эту функцию:

Функция ДанныеИзСтроки(Строка)
    
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    ЧтениеXML = Новый ЧтениеXML();
    ЧтениеXML.УстановитьСтроку(Строка);
    Возврат Сериализатор.ПрочитатьXML(ЧтениеXML);
    
КонецФункции


Нужно помнить о том, что если конфигурации не идентичны и вы будете таким образом передавать какой-то ссылочный объект или набор записей, то на стороне базы приемника чуда не произойдет и если структура объекта конфигурации отличается хоть как-то, то вы получите ошибку преобразования, потому что сериализатор XDTO не сможет распознать переданный ему XML.

Автор: pablo 10.03.16, 17:25

Тогда уже следует озаглавить "Как без труда передавать данные между ИДЕНТИЧНЫМИ конфигурациями на базе 1С 8"

Автор: sava1 10.03.16, 17:27

+ Взять готовую обработку.

Автор: Vofka 10.03.16, 17:36

Цитата(pablo @ 10.03.16, 17:25) *
Тогда уже следует озаглавить "Как без труда передавать данные между ИДЕНТИЧНЫМИ конфигурациями на базе 1С 8"

Я как раз использую такой подход для обмена между разными конфигурациями. Очень удобно паковать какие-то данные в Структуру и в базе приемнике одной строкой получить Структуру с нужными свойствами.

Автор: pablo 10.03.16, 17:43

Тогда "Как без труда передавать данные ПРОСТЫХ ТИПОВ между конфигурациями на базе 1С 8"

Автор: Vofka 10.03.16, 20:25

pablo, а ТабличныйДокумент, это простой тип? smile.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua