1с универсальный обмен данными в формате xml программно

Обновлено: 06.07.2024

Достаточно часто в работе крупных предприятий и торговых сетей возникает необходимость в обмене данными между базами. Каждый программист и администратор по-разному решает этот вопрос. Кто-то пишет выгрузки-загрузки через промежуточные файлы таблиц, кто-то использует режим COM соединения для подключения к базе источнику. Однако, в последнее время всё большую популярность набирает собственный 1С-овский механизм под названием «Универсальный обмен данными в формате XML».

Внешний вид обработки

В Полном интерфейсе открыть обработку можно по адресу Сервис->Прочие обмены данными-> Универсальный обмен данными в формате XML.

Форма обработки (Рис.1) содержит четыре закладки:

  1. Выгрузка данных;
  2. Загрузка данных;
  3. Дополнительные настройки;
  4. Удаление данных.

Интерфейс каждой из закладок сильно загружен элементами, а потому требует отдельного рассмотрения.

Выгрузка данных

В самой верхней части закладки находится поле выбора файла правил обмена. Для нестандартных баз и обменов файл обмена придется создавать самому.

На следующей строке формы находятся два переключателя:

  1. Выгрузка в файл обмена (Рис.2);
  2. Подключение и выгрузка данных в ИБ (рис.3).

Как видно из приведенных выше рисунков, в зависимости от переключателя отличается внешний вид формы. В случае если выбран файловый вариант обмена, пользователю предлагается выбрать место нахождения файла, куда будет выполнена выгрузка и возможность его сжатия для экономии места и защиты паролем.

Вариант прямого подключения к базе-приемнику поддерживает и файловый и клиент-серверный вариант работы. В этом случае необходимо будет прописать адрес базы, заполнить поля «Пользователь» и «Пароль». Прежде чем приступить к обмену данными, желательно протестировать подключение.

Табличная часть расположенная ниже позволяет настроить отборы и остальные параметры выгрузки.

Для отладки алгоритмов и исправления ошибок можно воспользоваться встроенным в обработку обмена механизмом. Его активация производится установкой соответствующего флажка в нижней части формы. Нажатие на кнопку «Настройка отладки…» вызывает окно (Рис. 4).

Отличительной чертой этой формы является информативная справка в левой части макета, которая описывает каждый из трех возможных режимов отладки. В качестве файла внешней обработки с модулем может выступать любой файл формата epf.

Нажатие на кнопку «Готово» проверяет правильность и полноту заполненных данных.

Загрузка данных

В отличие от «Выгрузки», на данной закладке (Рис.5) нет табличной части, зато гораздо больше флажков, позволяющих регулировать параметры записи новых и измененных объектов.

В первую очередь необходимо выбрать файл, который послужит источником информации. Это можно сделать в поле ввода «Имя файла для загрузки». В случае если данные выгружались в архив, защищенный паролем, его необходимо будет ввести в соответствующее поле.

Соответствующие флажки позволяют настроить:

  • Транзакцию при записи объектов (это иногда ускоряет процесс);
  • Загрузку данных в режиме обмена (в этом случае все платформенные проверки, за исключением проверки при проведении документов, будут игнорироваться при записи);
  • Перезапись измененных элементов;
  • Установку пометки удаления для загружаемых элементов;
  • Режим записи новых данных в регистр (либо по одной, либо набором);
  • Обрезку незначащих символов (пробелов и табуляций) для строковых значений.

Дополнительные настройки

Как понятно из названия закладки, она содержит инструменты, использование которых позволяет точнее настроить процесс обмена. В частности:

Эти и некоторые другие функции включаются выставлением соответствующих флажков на форме (рис.6).

Удаление данных

Эта закладка используется только разработчиками в режиме отладки. Позволяет удалять из базы ненужные объекты.

Коротко о настройке правил обмена

Использование стандартного обработчика очень упрощает жизнь программистам. В то же самое время, одним из самых сложных моментов для того, кто впервые столкнулся с «Универсальным обменом данным в формате XML» является вопрос: «Где взять файл правил обмена?».

В первую очередь, для самостоятельного изготовления правил обмена, необходима специальная конфигурация, которая носит название «Конвертация данных». В ее составе есть несколько интересных файлов, которые позволяют настроить практически любой обмен между различными базами 1С 7 и 8 версий:

  1. epf – необходим для выгрузки структуры метаданных для баз 1С 8;
  2. epf – если конфигурация 1С 8 самописная или не стандартная, в ней может не быть обработки «Универсальный обмен данными», этот файл и есть эта обработка;
  3. ert –файл содержит код для выгрузки структуры метаданных конфигураций 1С версий 7.7;
  4. ert – файл обработки выгрузки-загрузки данных для семерки.

Запустив соответствующие обработки необходимо выгрузить структуры метаданных для исходной базы и базы приемника. Затем в конфигурации «Конвертация» необходимо внести информацию о конфигурациях источника и приемника в справочник «Конфигурации».

Затем в справочнике Конвертации создается элемент, содержащий информацию о направлении обмена данными. Для него можно настроить Правила обмена.

Что необходимо для автоматического обмена данными, без внесения изменений в конфигурацию:
1) Обработка "Универсальный обмен данными в формате XML", которая входит в состав большинства типовых конфигураций. Если её там не оказалось, то её легко найти на диске ИТС или на просторах интернета. В конфигурации она обзывается "УниверсальныйОбменДаннымиXML"
2) Правила обмена данными. Создаются с помощью "Конвертации данных". Работу с которой вам придётся освоить. Есть и видеокурсы и учебные пособия. Например: http://programmist1s.ru/wp-content/uploads/2013/06/Konvertatsiya_dannyih._Metodika_rabotyi_i_primeryi.pdf
3) Внешняя обработка, содержащая процедуры загрузки/выгрузки. Займемся её созданием:
Создаётся внешняя обработка в модуле объекта которой будет нижеприведённый текст (подставляете свои данные по базам и пользователям). Желательно создать отдельного пользователя с полными правами для обмена данными. Назовём обработку, к примеру, "ОбменДанными.epf".

4) Bat файл выгрузки, который будет запускать 1с и внешнюю обработку с параметром запуска под пользователем, который предназначен для обмен данными. Файл необходимо создать к примеру в notepad++ с кодировкой OEM(MS-Dos), иначе работать не будет. Файл назовём, например "BatVygruz.bat". Текст будет следующим:

Если база файловая:
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /F"C:\Inbox\КБФ\1Cv8_Base_8.1\Зевс 83 БП3\Зевс 83 БП3" /N"РоботОбменаДанными" /P"pass" /DisableStartupMessages /RunModeManagedApplication /Execute"C:\Inbox\ОлегА\ОбменДанными.epf" /C"Выгрузка"
Пояснения:
а) C:\Program Files (x86)\1cv82\common\1cestart.exe - ваш путь к стартеру 1С
б) C:\Inbox\КБФ\1Cv8_Base_8.1\Зевс 83 БП3\Зевс 83 БП3 - ваш путь к файловой базе, из которой будем выгружать данные
в) РоботОбменаДанными - Имя пользователя, под которым запускам 1С для обмена данными
г) pass - пароль пользователя
д) /DisableStartupMessages - закрываем всплывающие окна при старте 1С
е) /RunModeOrdinaryApplication - запуск в обычном режиме толстый клиент
ж) C:\Inbox\ОлегА\ОбменДанными.epf - путь к нашей обработке, которая запустится при старте
з) Выгрузка - передаём параметр запуска 1С, сообщает, что надо выгружать данные

Если база серверная:
"C:\Program Files (x86)\1cv82\common\1cestart.exe" ENTERPRISE /S"Server1C/DataBase" /N"РоботОбменаДанными" /P"pass" /DisableStartupMessages /RunModeManagedApplication /Execute"C:\Inbox\ОлегА\ОбменДанными.epf" /C"Выгрузка"
Пояснения:
а) C:\Program Files (x86)\1cv82\common\1cestart.exe - ваш путь к стартеру 1С
б) Server1C/DataBase - ваш сервер на котором находится база и имя самой базы из которой выгружаем данные.
Остальные параметры аналогичны файловому варианту bat файла

5) Bat файл загрузки (при необходимости). Если вы решили выгружать данные в файл, а не напрямую в базу. То этот пункт нам тоже понадобится (обычно необходим).
Создание Bat файла загрузки аналогично файлу выгрузки, но отличается лишь параметр запуска, вместо "Выгрузка", мы ставим "Загрузка"

6) Задать расписание запуска наших Bat файлов загрузки/выгрузки на сервере. Для этого надо зайти в администрирование панели управления на сервере и в планировщике заданий создать новое задание запуска файла выгрузки на 23 часа каждый день и задание на загрузку с указанием Bat файла загрузки(если надо) на 04 часа к примеру.

Подсистема «Обмен данными» библиотеки стандартных подсистем содержит 4 варианта ( технологии) обмена информацией между различными информационными базами:

  • распределенные информационные базы (РИБ);
  • обмен данными через универсальный формат;
  • обмен данными по правилам обмена (правила обмена создаются при помощи конфигурации «Конвертация данных», редакция 2.1);
  • обмен данными без правил обмена.


Рис. 1 Последние релизы БСП 2.3

Описание формата EnterpriseData

Что такое формат EnterpriseData ?

Это формат, позволяющий описать объект информационной базы (контрагента, накладную и т.п.) или сообщить о факте удаления этого объекта. Ожидается, что конфигурация, получившая файл в формате EnterpriseData, отреагирует соответствующим образом – создаст у себя новые объекты и удалит те, которые в файле помечены как удаленные. Он предназначен для обмена информацией между конфигурациями УТ, РТ, УНФ, БП. Также формат может использоваться для обмена информацией с любыми другими информационными системами: он не зависит от особенностей собственного программного обеспечения или структур информационных баз, которые участвуют в обмене и не содержит в себе явных ограничений использования.

Версия формата EnterpriseData


Рис. 3 Структура XDTO-пакетаExchangeMessage

Как обмениваться данными в формате EnterpriseData?

  • через выделенный файловый каталог,
  • через каталог FTP,
  • через веб-сервис, развернутый на стороне информационной базы. Файл с данными передается как параметр веб-методов.

При обмене с использованием планов обмена конфигурации в ходе синхронизации передают только информацию об изменениях, произошедших со времени последней синхронизации (чтобы минимизировать объем передаваемой информации). При первой синхронизации конфигурация выгрузит все объекты в формате EnterpriseData в XML-файл (поскольку все они являются «новыми» для стороннего приложения).


При передаче данных от внешнего приложения в конфигурацию картина меняется на обратную. Приложение должно заполнить секцию <Confirmation> соответствующим образом, а в секцию <Body> поместить объекты для синхронизации в формате EnterpriseData.


Более подробно об обмен данными с прикладными решениями на платформе «1С:Предприятие» в формате EnterpriseData можно посмотреть здесь

Процедуры и функции, полностью описывающие правила выгрузки данных из информационной базы в формат обмена и правила загрузки данных из формата обмена в информационную базу, разрабатываются в общем модуле – модуле менеджера обмена через универсальный формат.


Рис. 4 Структура модуля менеджера обмена через универсальный формат

Модуль создается автоматически с помощью конфигурации «Конвертация данных», редакция 3.0, на основе настроенных правил обмена либо вручную в конфигураторе.

Модуль состоит из нескольких крупных разделов, каждый из которых содержит свою группу процедур и функций.

  1. Комментарий. Первая строка модуля содержит комментарий с наименованием конвертации. Эта строка необходима для идентификации модуля при использовании команды Загрузка обработчиков в программе «Конвертация данных», редакция 3.0., например. // Конвертация УП2.2.3 от 01.06.2017 19:51:50
  2. Процедуры конвертации. Содержит предопределенные процедуры, которые выполняются на разных этапах синхронизации данных: перед конвертацией, после конвертации, перед отложенным заполнением.
  3. Правила обработки данных (ПОД). Содержит процедуры и функции, которые описывают правила обработки данных.
  4. Правила конвертации объектов (ПКО). Содержит процедуры и функции, которые описывают правила конвертации объектов, а также правила конвертации свойств данных объектов.
  5. Правила конвертации предопределенных данных (ПКПД). Содержит процедуру, заполняющую правила конвертации предопределенных данных.
  6. Алгоритмы. Содержит произвольные алгоритмы, которые вызываются из других правил (ПОД или ПКО).
  7. Параметры. Содержит логику заполнения параметров конвертации.
  8. Общего назначения. Содержит процедуры и функции, которые широко используются в правилах и алгоритмах.

Ниже описаны параметры процедур и функций, которые используются в нескольких видах процедур модуля менеджера.

КомпонентыОбмена. Тип – Структура. Содержит параметры и правила обмена, инициализированные в рамках выполнения сеанса обмена.

НаправлениеОбмена. Тип – Строка. Либо «Отправка», либо «Получение».

ДанныеИБ. Тип – СправочникОбъект либо ДокументОбъект.

Процедуры, связанные с событиями конвертации

Предусмотрены три предопределенные процедуры, которые вызываются в процессе конвертации:

  • ПередКонвертацией. Вызывается перед выполнением синхронизации данных. Обычно в этой процедуре размещается логика инициализации различных параметров конвертации, заполнения значений по умолчанию и т. д. Параметры:КомпонентыОбмена.
  • ПослеКонвертации. Вызывается после выполнения синхронизации данных, но до выполнения отложенного заполнения. Параметры:КомпонентыОбмена.
  • ПередОтложеннымЗаполнением. Вызывается перед выполнением отложенного заполнения. Здесь может быть расположена логика сортировки или корректировки таблицы объектов, подлежащих отложенному заполнению. Параметры:КомпонентыОбмена.

Процедуры ПОД

ЗаполнитьПравилаОбработкиДанных. Экспортная процедура, в которой располагается логика заполнения правил обработки данных. Содержит вызовы других процедур, которые добавляют в таблицу правил правило обработки конкретного объекта (см. ниже процедуры ДобавитьПОД). Параметры: НаправлениеОбмена, ПравилаОбработкиДанных (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ДобавитьПОД_<ИмяПОД>. Набор процедур, которые наполняют таблицу ПОД правилами для конкретных объектов. Количество таких процедур соответствует количеству ПОД, предусмотренных для данной конвертации в программе «Конвертация данных», редакция 3.0. Параметры: ПравилаОбработкиДанных (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ПОД_<ИмяПОД>_ПриОбработке. Процедура содержит текст обработчика ПриОбработке для конкретного ПОД. Обработчик предназначен для реализации логики конвертации на уровне объектов. Например, назначить конкретному объекту определенное ПКО в зависимости от содержимого объекта. Параметры:

  • ДанныеИБлибо ДанныеXDTO (в зависимости от направления обмена):
  • при отправке – объект (СправочникОбъект,ДокументОбъект);
  • при получении – структуру с описанием объекта XDTO.
  • ИспользованиеПКО. Тип –Структура. Ключ содержит строку с именем ПКО, а значение типа Булево (Истина – ПКО используется, Ложь – ПКО не используется).
  • КомпонентыОбмена.

ПОД_<ИмяПОД>_ВыборкаДанных. Функция содержит текст обработчика ПриВыгрузке. Обработчик предназначен для реализации произвольного алгоритма выборки объектов, подлежащих выгрузке. Возвращаемое значение: массив объектов, подлежащих выгрузке. В массиве могут содержаться как ссылки на объекты информационной базы, так и структура с данными для выгрузки. Параметры: КомпонентыОбмена.

Процедуры ПКО

ЗаполнитьПравилаКонвертацииОбъектов. Экспортная процедура, в которой располагается логика заполнения правил конвертации объектов. Содержит вызовы других процедур, которые добавляют в таблицу правил правило конвертации конкретного объекта (см. ниже процедуры ДобавитьПКО). Параметры: НаправлениеОбмена, ПравилаКонвертации (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ДобавитьПКО_<ИмяПКО>. Набор процедур, которые наполняют таблицу ПКО правилами для конкретных объектов. Количество таких процедур соответствует количеству ПКО, предусмотренных для данной конвертации в программе «Конвертация данных», редакция 3.0. Параметры: ПравилаКонвертации (таблица значений, инициализированная в рамках выполнения сеанса обмена).

ПКО_<ИмяПКО>_ПриОтправкеДанных. Процедура содержит текст обработчика ПриОтправке для конкретного ПКО. Обработчик используется при выгрузке данных. Предназначен для реализации логики конвертации данных, содержащихся в объекте информационной базы, в описание объекта XDTO. Параметры:

  • ДанныеИБ. Тип –СправочникОбъект, ДокументОбъект. Обрабатываемый объект информационной базы.
  • ДанныеXDTO. Тип –Структура. Предназначен для доступа к данным объекта XDTO.
  • КомпонентыОбмена.
  • СтекВыгрузки. Тип –Массив. Содержит ссылки на выгружаемые объекты с учетом вложенности.

ПКО_<ИмяПКО>_ПриКонвертацииДанныхXDTO. Процедура содержит текст обработчика ПриКонвертацииДанныхXDTO для конкретного ПКО. Обработчик используется при загрузке данных. Предназначен для реализации произвольной логики конвертации данных XDTO. Параметры:

  • ДанныеXDTO. Тип –Структура. Свойства объекта XDTO, прошедшие предварительную обработку для упрощения доступа к ним.
  • ПолученныеДанные. Тип –СправочникОбъект, ДокументОбъект. Объект информационной базы, сформированный путем конвертации данных XDTO. Не записан в информационную базу.
  • КомпонентыОбмена.

ПКО_<ИмяПКО>_ПередЗаписьюПолученныхДанных. Процедура содержит текст обработчика ПередЗаписьюПолученныхДанных для конкретного ПКО. Обработчик используется при загрузке данных. Предназначена для реализации дополнительной логики, которую необходимо выполнить перед записью объекта в информационную базу. Например, нужно ли загрузить изменения в существующие данные ИБ либо следует загрузить их как новые данные. Параметры:

  • ПолученныеДанные. Тип –СправочникОбъект, ДокументОбъект. Элемент данных, сформированный путем конвертации данных XDTO.

Записывается в случае, если эти данные являются для информационной базы новыми (параметр ДанныеИБ содержит значение Неопределено).

В противном случае ПолученныеДанные замещают собой ДанныеИБ (все свойства из ПолученныеДанные переносятся в ДанныеИБ).

Если стандартное замещение данных ИБ полученными данными не требуется, следует прописать свою логику переноса, после чего установить параметру ПолученныеДанные значение Неопределено:

  • ДанныеИБ. Тип –СправочникОбъект, ДокументОбъект. Элемент данных информационной базы, соответствующий полученным данным. Если соответствующие данные не найдены, содержит Неопределено.
  • КонвертацияСвойств. Тип –Таблица значений. Содержит правила конвертации свойств текущего объекта, инициализированные в рамках выполнения сеанса обмена.
  • КомпонентыОбмена.

Процедуры ПКПД

ЗаполнитьПравилаКонвертацииПредопределенныхДанных. Экспортная процедура, в которой располагается логика заполнения правил конвертации предопределенных данных. Параметры: НаправлениеОбмена, ПравилаКонвертации (таблица значений, инициализированная в рамках выполнения сеанса обмена).

Алгоритмы

В программе «Конвертация данных», редакция 3.0 есть возможность создавать произвольные алгоритмы, которые вызываются из обработчиков ПОД и ПКПД. Наименование, параметры и содержимое алгоритмов определяются при разработке правил.

Параметры

ЗаполнитьПараметрыКонвертации. Экспортная процедура, в которой происходит заполнение структуры с параметрами конвертации. Параметры: ПараметрыКонвертации (тип – Структура).

Процедуры и функции общего назначения

ВыполнитьПроцедуруМодуляМенеджера. Параметры: ИмяПроцедуры (строка), Параметры (структура). Экспортная процедура, которая предназначена для вызова неэкспортной процедуры модуля, имя и параметры которой получены на вход. Позволяет выполнить вызов процедуры или функции по строке без использования метода Выполнить.

ВыполнитьФункциюМодуляМенеджера. Параметры: ИмяПроцедуры (строка), Параметры (структура). Функция, назначение аналогично ВыполнитьПроцедуруМодуляМенеджера. Отличие в том, что она вызывает функцию и возвращает ее значение.

Формирование файла XML. Простая выгрузка для стороннего приложения

В организации учет может вестить не только в решениях на платформе 1С:Предприятие, но и в других программным комплексах (Галактика, Парус, SAP и прочее). При этом появляются задачи интеграции двух приложений.

Напрмер, в некотором приложении (назовем его "X") требуется прочитать список документов конфигурации. О практической пользе решения подобной задачи говорить не будем, отмечу лишь, что наиболее удобным и универсальным способом в такой ситуации будет выгрузка списка документов в формате XML .

Изображение

Обмен с использованием этого формата является универсальным, поскольку с ним могут работать большинство приложений. Рассмотрим как можно из 1С:Предприятия выгрузить список документов конфигурации в XML-файл.

Выгрузка в XML

И так, перейдем к главному. Нам нужно обойти список метаданных документов и сформировать список в XML-файле. На следующем скриншоте представлен алгоритм формирования XML-файла:

Каждый созданный элемент должен быть правильно завершен. После выполнения "ЗаписатьНачалоЭлемента()" обязательно должен быть выполнен метод "ЗаписатьКонецЭлемента", иначе структура XML-файла будет некорректной.

Общий шаблон создания XML-файлов предсавляет собой следующую последовательность:

С помощью этих пяти шагов создается практически любой XML-файл.

В нашем примере созданный файл переводится в двоичные данные и возвращается в место вызова функции "СоздатьXML". Далее этот файл может быть записан в файловую систему.

Пример выгруженного файла Вы могли видеть на скриншоте выше.

Стороннее приложение

Програма читает созданный файл и выводит документы в виде списка:

Изображение

Можете попробовать сами, приложение доступно для загрузки по ссылке в конце статьи.

Универсальность

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

Читайте также: