Простая выгрузка данных в универсальном формате Enterprise Data

26.08.19

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Пошагово разобран текст процедуры, позволяющей выгрузить произвольный набор объектов в формате Enterprise Data (конечно, если это позволяет конфигурация). Приложена обработка, позволяющая выгружать произвольные объекты, в том числе запросом или по данным журнала регистрации.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Файл обработки
.epf 19,94Kb ver:1.0
157 2 150 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

В процессе изучения КД3 меня не оставляло ощущение, что выгрузка данных в этом формате должна делаться как-то очень просто. Тут же возникла потребность сделать нестандартную "догрузку" множества физлиц с паспортными данными в ЗУП 3. После отсечения всего лишнего получилась короткая процедура. Что же внутри?

Инициализация

1. Инициализация структуры КомпонентыОбмена

	ИмяФайлаПротоколаОбмена="";   // если заполнить - будет писаться лог в файл
	КомпонентыОбмена = ОбменДаннымиXDTOСервер.ИнициализироватьКомпонентыОбмена("Отправка");
	
	КомпонентыОбмена.ВедениеПротоколаДанных.ВыводВПротоколИнформационныхСообщений = Ложь;
	КомпонентыОбмена.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными();
	КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь;

2. Определяем версию формата обмена.

Можно просто указать, скажем, "1.6", но в свежих версиях БСП есть соответствующая функция:

	Версии=ОбменДаннымиXDTOСервер.ВерсииФорматаОбменаМассив(ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел());
	КомпонентыОбмена.ВерсияФорматаОбмена=Версии[0]; // первой будет максимальная версия, которую поддерживает конфигурация
	КомпонентыОбмена.XMLСхема = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/"+КомпонентыОбмена.ВерсияФорматаОбмена;

3. Заканчиваем инициализацию

	КомпонентыОбмена.МенеджерОбмена = МенеджерОбменаЧерезУниверсальныйФормат;
	ОбменДаннымиXDTOСервер.ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена);
	ОбменДаннымиXDTOСервер.ИнициализироватьВедениеПротоколаОбмена(КомпонентыОбмена, ИмяФайлаПротоколаОбмена);

4. Разбираемся с файлами

	// Открываем файл обмена. Если вторым параметром файл не указывать - выгрузка будет в строку
	ОбменДаннымиXDTOСервер.ОткрытьФайлВыгрузки(КомпонентыОбмена,"");  	
	Если КомпонентыОбмена.ФлагОшибки Тогда
		КомпонентыОбмена.ФайлОбмена = Неопределено;
		ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена);
		Возврат "";
	КонецЕсли;

Всё готово для собственно выгрузки объектов.

Выгрузка по сценарию

Сценарий выгрузки представляет собой таблицу значений, в строках которой написаны имена правил обработки данных. Выгрузка по сценарию на момент написания работает без отборов.

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

	КомпонентыОбмена.СценарийВыгрузки = новый ТаблицаЗначений;
	КомпонентыОбмена.СценарийВыгрузки.Колонки.Добавить("ИмяПОД");

	НоваяСтрока = КомпонентыОбмена.СценарийВыгрузки.Добавить();
	НоваяСтрока.ИмяПОД = "Справочник_ФизическиеЛица_Отправка";
	
	НоваяСтрока = КомпонентыОбмена.СценарийВыгрузки.Добавить();
	НоваяСтрока.ИмяПОД = "Справочник_ДокументыФизическихЛиц_Отправка";

Запускается сценарий совсем просто:

	 //ВЫГРУЗКА ДАННЫХ по сценарию. Работает но без отборов
	Попытка
		ОбменДаннымиXDTOСервер.ПроизвестиВыгрузкуДанных(КомпонентыОбмена);
	Исключение
		ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена);
		КомпонентыОбмена.ФайлОбмена = Неопределено;
		Возврат "";
	КонецПопытки;

Произвольная выгрузка данных запросом

Гораздо интереснее самим определить, какие именно данные мы хотим выгрузить и заставить систему их отработать.

Прежде чем выгружать наши объекты, нужно запустить обработчик "ПередКонвертацией". Вдруг разработчики там спрятали что-то жизненно важное?

	Попытка
		КомпонентыОбмена.МенеджерОбмена.ПередКонвертацией(КомпонентыОбмена);
	Исключение
		ТекстОшибки = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1.
				|Обработчик: ПередКонвертацией.
				|
				|Ошибка выполнения обработчика.
				|%2.'"),
			КомпонентыОбмена.НаправлениеОбмена,
			ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки));
	КонецПопытки;

Выгрузка ссылочных объектов запросом, на примере физических лиц:

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ФизическиеЛица.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.ФизическиеЛица КАК ФизическиеЛица
		|ГДЕ
		|	НЕ ФизическиеЛица.ПометкаУдаления";
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Стр.Ссылка);
	КонецЦикла;

В свежих версиях обмена появились регистры сведений. С ними сложнее, но не намного:

	Запрос.Текст = 
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ДокументыФизическихЛиц.Период КАК Период,
		|	ДокументыФизическихЛиц.ВидДокумента КАК ВидДокумента,
		|	ДокументыФизическихЛиц.Физлицо КАК Физлицо
		|ИЗ
		|	РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц
		|ГДЕ
		|	ДокументыФизическихЛиц.Физлицо В(&Физлицо)
		|	И НЕ ДокументыФизическихЛиц.ВидДокумента ЕСТЬ NULL";
	
	
	Рег=РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
	Рег.Отбор.Физлицо.Использование=Истина;
	Рег.Отбор.ВидДокумента.Использование=Истина;
	Рег.Отбор.Период.Использование=Истина;
	Запрос.УстановитьПараметр("Физлицо", КомпонентыОбмена.ВыгруженныеОбъекты);
	РезультатЗапроса = Запрос.Выполнить();
	ВыборкаРесурсов=РезультатЗапроса.Выбрать();
	Пока ВыборкаРесурсов.Следующий() Цикл
		Если НЕ ЗначениеЗаполнено(ВыборкаРесурсов.ВидДокумента) Тогда
			Продолжить;
		КонецЕсли;
		Рег.Отбор.Физлицо.Значение=ВыборкаРесурсов.Физлицо;
		Рег.Отбор.ВидДокумента.Значение=ВыборкаРесурсов.ВидДокумента;
		Рег.Отбор.Период.Значение=ВыборкаРесурсов.Период;
		Рег.Прочитать();
		ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, Рег);
	КонецЦикла;

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

Завершение выгрузки

1. Запускаем обработчик "ПослеКонвертации"

	Попытка
		КомпонентыОбмена.МенеджерОбмена.ПослеКонвертации(КомпонентыОбмена);
	Исключение
		ТекстОшибки = Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Событие: %1.
				|Обработчик: ПослеКонвертации.
				|
				|Ошибка выполнения обработчика.
				|%2.'"),
			КомпонентыОбмена.НаправлениеОбмена,
			ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
		ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, СокрЛП(ТекстОшибки));
	КонецПопытки;

2. Закрываем теги, протоколы и файлы.

	КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Body
	КомпонентыОбмена.ФайлОбмена.ЗаписатьКонецЭлемента(); // Message
	
	// Фиксация успешного завершения обмена.
	Если КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Неопределено Тогда
		КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Выполнено;
	КонецЕсли;
	
	ДанныеВыгрузкиXML=КомпонентыОбмена.ФайлОбмена.Закрыть();
	ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена);

Переменная ДанныеВыгрузкиXML содержит строку с данными, которыми дальше можно распорядиться как угодно.

Обработка

В результате вокруг вышеописанной процедуры образовалась обработка.

Функционал её заимствован у бестселлера Универсальная выгрузка/загрузка данных для отличающихся конфигураций (JSON, Такси+ОФ), за что отдельное спасибо ее автору.

Обработка умеет подбирать объекты для выгрузки:

  • вручную
  • запросом (результат должен содержать колонку "ссылка")
  • по выбранному периоду журнала регистрации

И выгружать их в выбранный файл.

Файл можно загрузить в любую базу (в том числе в облаке), командой:

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

Обработка содержит полный текст описанной здесь процедуры. Код открыт.

Тестировалась на Бухгалтерия предприятия, редакция 3.0 (3.0.71.69).
Будет работать в любой конфигурации на БСП от 3.0.2.300.

P.S.

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

P.P.S.

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

Вступайте в нашу телеграмм-группу Инфостарт

обработка обмен универсальный формат enterprise data конвертация данных КД БСП xml ED

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27180 24462 руб.

12.06.2017    156245    925    306    

473

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

52967 руб.

25.02.2015    179969    342    281    

404

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.261.x) и БП 3.0 (3.0.189.x). Правила подходят для версии ПРОФ и КОРП.

38000 34200 руб.

15.12.2021    31514    228    61    

171

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.25.x).

38000 34200 руб.

23.07.2020    63863    302    81    

242

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

61356 руб.

15.04.2019    80872    218    167    

156

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Платные (руб)

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

58422 руб.

11.01.2021    36607    32    55    

33

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

61356 руб.

04.12.2015    197605    260    354    

413

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

58422 руб.

03.12.2020    43570    124    76    

116
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ids79 8770 26.08.19 18:05 Сейчас в теме
Спасибо, очень хороший пример работы с выгрузкой данных в ED. Я в своих по статьях по выгрузке и загрузке больше теорию описываю, а у Вас практический пример, это интересно.
starik-2005; user598128_able123; jif; +3 Ответить
2. Iyar 226 27.08.19 07:30 Сейчас в теме
(1) Спасибо на добром слове!
3. A_Max 20 30.08.19 10:21 Сейчас в теме
Лайк! Только на этой неделе сделал тоже самое для передачи одиночного объекта "сериализованного" по правилам КД3 и "десериализация" в объект при получении в другой ИБ опять же по правилам КД3. Делалось для онлайн отправки в МДМ систему через ВебСервис.

Думал причесать и тоже опубликовать. Но теперь не уверен в необходимости.

На самом деле КД 2 и 3 достаточно простые внутри и хорошо структурированы. Недостаток в реализации КД3, что не все необходимые процедуры объявлены экспортными в модуле ОбменДаннымиXDTOСервер :(
user2013774; NoRazum; Iyar; acanta; +4 Ответить
4. pavelm63 17.05.21 13:51 Сейчас в теме
Подскажите, плз, в разделе Обработка - что за команда "Загрузить данные EnterpriseData"?
Ощущение, что должна быть ссылка на что то...
5. Iyar 226 18.05.21 07:11 Сейчас в теме
(4), Обработка "Выгрузка загрузка EnterpriseData" e1cib/app/Обработка.ВыгрузкаЗагрузкаEnterpriseData
Andreeei; +1 Ответить
6. Alex_mar 02.09.21 18:42 Сейчас в теме
Интересует эта строка:
КомпонентыОбмена.ЭтоОбменЧерезПланОбмена = Ложь;
Что будет если поставить "= Истина"?
Можно ли данной обработкой выгрузить только зарегистрированные к изменению данные?
7. Iyar 226 03.09.21 07:17 Сейчас в теме
(6)
Что будет если поставить "= Истина"?

Коротко - этот режим заточен на предопределенные обмены, описанные в конфигурации.
Просто создать новый план обмена и воспользоваться его механизмом регистрации для выгрузки произвольных объектов не получится.
Но никто не мешает это сделать через "ПланыОбмена.ВыбратьИзменения("
8. vechiy 35 31.10.22 16:32 Сейчас в теме
запрос не выполняется. просто выборка по всем контрагентам.
и вопрос: план счетов тут никак не получится перенести, т.к. он отсутствует в схеме?
Прикрепленные файлы:
9. Iyar 226 31.10.22 20:16 Сейчас в теме
(8) 1) В результате запроса ожидается одна колонка "ссылка".
2) Можно грузить то, что предусмотрено разработчиками
10. ksnik 627 25.10.25 17:10 Сейчас в теме
Здравствуйте. На комплексной автоматизации 2.5 пишет:
Метод объекта не обнаружен (ВерсииФорматаОбменаМассив)
{ВнешняяОбработка.ПростаяВыгрузкаДанныхВФорматеEnterpriseData.Форма.Форма.Форма(264)}:Версии=ОбменДаннымиXDTOСервер.ВерсииФорматаОбменаМассив(ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.ЭтотУзел())
11. Iyar 226 27.10.25 12:42 Сейчас в теме
Здравствуйте.
Функция перестала быть экспортной :(
Добавьте в модуль:
Функция ВерсииФорматаОбменаМассив(Знач УзелИнформационнойБазы)
	ВерсииФорматаОбмена = Новый Соответствие;
	ИмяПланаОбмена = "";
		Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда
		ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы);
		ВерсииФорматаОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ВерсииФорматаОбмена");
	Иначе
		ОбменДаннымиПереопределяемый.ПриПолученииДоступныхВерсийФормата(ВерсииФорматаОбмена);
	КонецЕсли;
	Результат = Новый ТаблицаЗначений;
	Результат.Колонки.Добавить("Версия");
	Для Каждого Версия Из ВерсииФорматаОбмена Цикл
		Результат.Добавить().Версия = Версия.Ключ;	
	КонецЦикла;
	Результат.Сортировать("Версия Убыв");
	Возврат Результат.ВыгрузитьКолонку("Версия");
КонецФункции
Показать

и поправьте вызов.
Для отправки сообщения требуется регистрация/авторизация