Пример обмена данными между информационными базами различной конфигурации и, вообще говоря, на различной платформе, не только 1С:Предприятие. Используется формат XML и XSLT преобразования полученных файлов выгрузки.
В предыдущей статье [ссылка], формируя файл выгрузки средствами Msxml, я упомянул, что можно организовать обмен данными между базами 1С различной конфигурации при помощи XSLT-преобразований файла, выгруженного из базы-источника.
Например, так:
//*******************************************
Процедура Выполнить()
ИсходныйФайл = "<?xml version=""1.0"" encoding=""WINDOWS-1251""?>
|<ROOT>
|<Справочник_Валюты>
|<Ид>{""B"",""0"",""0"",""23"",""0"",""0"","" 1 ""}</Ид>
|<Код>1</Код>
|<Наименование>Руб</Наименование>
|</Справочник_Валюты>
|<Справочник_Контрагенты>
|<Ид>{""B"",""0"",""0"",""12"",""0"",""0"","" 1 ""}</Ид>
|<Код>00001</Код>
|<Наименование>ИП Иванов</Наименование>
|<ПолнНаименование>ИП Иванов</ПолнНаименование>
|<ИНН>123</ИНН>
|<КПП>123</КПП>
|<ЮрАдрес>его ю. адр</ЮрАдрес>
|<ФактАдрес>его ф. адр</ФактАдрес>
|<ВалютаДоговора>{""B"",""0"",""0"",""23"",""0"",""0"","" 1 ""}</ВалютаДоговора>
|<ГлубинаКредита>7</ГлубинаКредита>
|<Комментарий>1</Комментарий>
|</Справочник_Контрагенты>
|<Справочник_Контрагенты>
|<Ид>{""B"",""0"",""0"",""12"",""0"",""0"","" 2 ""}</Ид>
|<Код>00002</Код>
|<Наименование>ИП Петров</Наименование>
|<ПолнНаименование>ИП Иванов</ПолнНаименование>
|<ИНН>234</ИНН>
|<КПП>123</КПП>
|<ЮрАдрес>его ю. адр</ЮрАдрес>
|<ФактАдрес>его ф. адр</ФактАдрес>
|<ВалютаДоговора>{""B"",""0"",""0"",""23"",""0"",""0"","" 1 ""}</ВалютаДоговора>
|<ГлубинаКредита>7</ГлубинаКредита>
|<Комментарий>2</Комментарий>
|</Справочник_Контрагенты>
|</ROOT>
|";
хмлИсходныйФайл = СоздатьОбъект("Msxml2.DOMDocument.6.0");
хмлИсходныйФайл.async = 0;
хмлИсходныйФайл.loadXML(ИсходныйФайл);
Преобразование = "<?xml version=""1.0"" encoding=""WINDOWS-1251""?>
|<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" xmlns:myType=""http://my.org/buh"">
|<xsl:template match=""/"">
|<ROOT>
|<xsl:for-each select=""ROOT/Справочник_Контрагенты"">
|<CatalogObject.Customers>
|<Ref><xsl:value-of select=""Ид""/></Ref>
|<Description><xsl:value-of select=""Наименование""/></Description>
|<Address><xsl:value-of select=""ФактАдрес""/></Address>
|</CatalogObject.Customers>
|</xsl:for-each>
|</ROOT>
|</xsl:template>
|</xsl:stylesheet>
|";
хмлПреобразование = СоздатьОбъект("Msxml2.DOMDocument.6.0");
хмлПреобразование.async = 0;
хмлПреобразование.loadXML(Преобразование);
хмлРезультат = СоздатьОбъект("Msxml2.DOMDocument.6.0");
хмлРезультат.async = 0;
хмлИсходныйФайл.transformNodeToObject(хмлПреобразование, хмлРезультат);
хмлРезультат.save("C:\scripts\test3.xml");
КонецПроцедуры
В результате, будет сформирован файл вида:
<?xml version="1.0" encoding="UTF-16"?>
<ROOT xmlns:myType="http://my.org/buh" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CatalogObject.Customers>
<Ref>{"B","0","0","12","0","0"," 1 "}</Ref>
<Description>ИП Иванов</Description>
<Address>его ф. адр</Address>
</CatalogObject.Customers>
<CatalogObject.Customers>
<Ref>{"B","0","0","12","0","0"," 2 "}</Ref>
<Description>ИП Петров</Description>
<Address>его ф. адр</Address>
</CatalogObject.Customers>
</ROOT>
… соответствующий, как можно заметить, уже другой модели данных. Причем, подобному преобразованию поддаются не только элементы типа «Справочник», но также и другие объекты 1С, включая документы со всеми своими движениями по регистрам. То есть, объекты, имеющие в своем составе табличные части.
Роль правил обмена, в данном случае, играет шаблон XSLT-преобразования, который имеет достаточно несложную структуру и, в общем случае, вполне может быть сформирован программно, в результате действий по настройке обмена. Сами обработки выгрузки/загрузки, вместе с правилами обмена весьма компактны по объему и легко «читаются» по сравнению с аналогичными разработками, в том числе и самой компании 1С.
Если при построении информационной системы, исходить из описания структур данных, заданных в виде тех же XML-схем, прочно привязанных к словарю предметной области при помощи XSLT-преобразований. Тогда, между двумя базами, вообще говоря, различной структуры, но сопряженных с одним и тем же словарем, вероятно, можно было бы строить обмен на базе данных преобразований, что называется, «на лету».
Кстати, само такое сопряжение могло бы в разы улучшить качество справки по информационной системе, позволяя искать связи в словаре и формировать текст, релевантный текущей ситуации, автоматически.