Обмен через универсальный формат. Пример нестандартной конвертации данных

25.05.21

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

В статье описан небольшой пример обмена данными через EnterpriseData без снятия конфигурации с поддержки. Тестовая площадка: Управление торговлей, редакция 11 (11.4.3.126), версия платформы 8.3.11

Обмен через универсальный формат широко используется в типовых конфигурациях. Для ознакомления есть хорошая статья //infostart.ru/public/695523/, также множество различных курсов, в которых разложены основные моменты по работе с правилами конвертации, синхронизации объектов метаданных.

Основной принцип создания "нестандартных" правил обмена заключается в доработке модуля "МенеджерОбменаЧерезУниверсальныйФормат" (в различных конфигурациях название может немного отличаться). Но что делать, если в компании участвуют несколько баз данных - стандартных, самописных (неважно), между которыми идет активный обмен данными EnterpriseData - и на каждый узел обмена могут действовать свои специфические правила?

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

Рассмотрим пример передачи данных из базы УТ 11.3 в идентичную по структуре базу данных "Дочерняя УТ 11.3". 

Постановка задачи: в основной базе данных производятся продажи товаров специфическому контрагенту, который является "дочерней фирмой" по отношению к основной. Необходимо реализовать "одностороннее" правило обмена "Реализации товаров и услуг -> Поступления товаров и услуг" по контрагенту с фиксированным ИНН.

Сокращения:

ЦБ - база-источник УТ 11.3, из которой идет выгрузка документов "Реализации товаров и услуг"

УТ - база приемник, в которой при обмене создаются "Поступления товаров"

ED - универсальный обмен (EnterpriseData)

В базе ЦБ создаются и проводятся "Реализации товаров" - и после проведения регистрируются в обмене ED, далее происходит обмен (через фоновое задание, либо вручную через каталог обмена). В при этом документ "Реализация товаров" должен "превратиться" в "Поступление товаров и услуг", а контрагент и организация "поменяться местами".

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

Предположим, что у нас настроен обмен, при котором главный узел организации-источника имеет код "ЦБ", а узел приемника код "УТ".

База-источник:

База-приемник:

Для начала создадим расширение конфигурации: назовем его, для примера "РасширениеОбмен" - и добавим модули, которые нам нужны для решения задачи.

1.Установка активного узла обмена в параметре сеанса. К сожалению, в процессе обмена не всегда можно получить активный узел, для которого происходит обмен. В процессе самого обмена данными структура данных "КомпонентыОбмена", содержащая все настройки обмена ED (в том числе ссылку на узел обмена) доступна не в каждой процедуре при обмене данными: например, при непосредственном заполнении перечня правил обмена "МенеджерОбменаЧерезУниверсальныйФормат.ЗаполнитьПравилаОбработкиДанных" этой переменной в параметрах нет.

На этапе инициализации обмена данными установим код узла обмена в параметры сеанса:

&Перед("ИнициализироватьТаблицыПравилОбмена")
Процедура РасшОбмен_ИнициализироватьТаблицыПравилОбмена(КомпонентыОбмена) Экспорт
	
	Если КомпонентыОбмена.УзелКорреспондента <> Неопределено Тогда
	
		Буф = Новый Структура(ПараметрыСеанса.БуферОбмена);
		Буф.Вставить("КомпонентыОбмена_УзелКорреспондента_Код", КомпонентыОбмена.УзелКорреспондента.Код);
		ПараметрыСеанса.БуферОбмена = Новый ФиксированнаяСтруктура(Буф);
	
	КонецЕсли;
	
КонецПроцедуры

 

2. Регистрация объектов. Также необходимо выделить перечень объектов, необходимых для регистрации в нужном нам узле универсального обмена. Это можно сделать, отредактировав правила регистрации объектов с использованием конфигурации "Конвертер 2.1", но в случае с расширением достаточно переопределить работу функции, разбирающей правила регистрации. В задании для нашего узла обмена нам нужны совсем "немногие" ссылки на объекты, остальное необходимо "отсечь".

Регистрироваться будет документ "Реализации товаров и услуг" и некоторые входящие в него ссылки: организация, контрагент, валюта, склад.

 
Код изменения правил регистрации объектов
&После("ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена")
// Процедура-обертка, выполняет код основной процедуры в режиме попытки
// (см. ВыполнитьПравилаРегистрацииОбъектовДляПланаОбменаПопыткаИсключение).
//
// Параметры:
//  МассивУзловРезультат - Массив - массив узлов получателей плана обмена ИмяПланаОбмена,
//   для которых необходимо выполнить регистрацию.
//  Объект - Произвольный - изменяемые данные: объект, набор записей, константа или сведения об удалении объекта.
//  ИмяПланаОбмена - Строка - имя плана обмена, для которого выполняется механизм регистрации.
//  ДополнительныеПараметры - Структура - уточняющие сведения об изменяемых данных:
//    * ОбъектМетаданных - ОбъектМетаданных - объект метаданных, которому соответствуют изменяемые данные. Обязательный.
//    * ЭтоРегистр - Булево - значение Истина означает, что обрабатывается регистр.
//        Необязательный, значение по умолчанию Ложь.
//    * ЭтоУдалениеОбъекта - Булево - значение Истина означает, что обрабатывается удаление объекта.
//        Необязательный, значение по умолчанию Ложь.
//    * РежимЗаписи - см. в синтаксис-помощнике РежимЗаписиДокумента - режим записи документа (только для документов).
//        Необязательный, значение по умолчанию Неопределено.
//    * Замещение - Булево - режим записи регистра (только для регистров).
//        Необязательный, значение по умолчанию Неопределено.
//    * ПроверятьСсылку - Булево - признак необходимости учитывать версию данных на момент до их изменения.
//        Необязательный, значение по умолчанию Ложь.
//    * Выгрузка - Булево - параметр определяет контекст выполнения правила регистрации.
//        Истина - правило регистрации выполняется в контексте выгрузки объекта.
//        Ложь - правило регистрации выполняется в контексте перед записью объекта.
//        Необязательный, значение по умолчанию Ложь.
//
Процедура РасшОбмен_ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ДополнительныеПараметры)
	
	Если ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат" Тогда 
		
		//ищем входит ли регистрируемый объект ключевой узел обмена с кодом "УТ"
		ПОСсылка = Неопределено;
		Для каждого ТекУзел Из МассивУзловРезультат Цикл
			Если ТипЗнч(ТекУзел.Ссылка) = Тип("ПланОбменаСсылка."+ИмяПланаОбмена) И ТекУзел.Код = "УТ" Тогда
				ПОСсылка = ТекУзел.Ссылка
			КонецЕсли;
		КонецЦикла;
		
		Если ПОСсылка <> Неопределено Тогда
		
			Если ТипЗнч(Объект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
				
				//проверяем, является ли контрагент по документу реализации "фирмой", ИНН которой есть среди "Справочник.Организации"
				ЭтоОрганизация = ложь;
				Выборка = Справочники.Организации.выбрать();
				Пока Выборка.Следующий() Цикл
					Если НЕ Выборка.ПометкаУдаления И Выборка.ИНН = Объект.Контрагент.ИНН Тогда
						ЭтоОрганизация = истина;
					КонецЕсли;
				КонецЦикла;
				
				Если Не ЭтоОрганизация Тогда
					МассивУзловРезультат.Удалить(МассивУзловРезультат.Найти(ПОСсылка));
					Возврат
				КонецЕсли;
				
				// для регистрации данных в файле обмена должны появиться не только сам документ-реализация, 
				// но и определенный перечень ссылок из объекта: так как возможно, что какой-то из объектов "уходит"
				// в приемник в 1-й раз
				МассивСсылок = новый Массив;
				МассивСсылок.Добавить(Объект.Организация);
				МассивСсылок.Добавить(Объект.Контрагент);
				МассивСсылок.Добавить(Объект.Склад);
				МассивСсылок.Добавить(Объект.Валюта);
				
				Для каждого ТекСтрока Из Объект.Товары Цикл
					МассивСсылок.Добавить(ТекСтрока.Номенклатура);
					ПолучитьСсылкиВнутриОбъекта(ТекСтрока.Номенклатура, МассивСсылок);
					Если Не ТекСтрока.Упаковка.Пустая() Тогда
						МассивСсылок.Добавить(ТекСтрока.Упаковка);
					КонецЕсли;
				КонецЦикла;
				Взаимодействия.УдалитьПовторяющиесяЭлементыМассива(МассивСсылок);
				
				Для каждого ТекСсылка Из МассивСсылок Цикл
					Если ТекСсылка  = Объект.Ссылка Тогда 
						Продолжить;
					ИначеЕсли Не ЗначениеЗаполнено(ТекСсылка) Тогда 
						Продолжить;
					ИначеЕсли Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав.Найти(ТекСсылка.Метаданные()) = Неопределено тогда
						Продолжить;
					КонецЕсли;
					ОбъектПоСсылке = ТекСсылка.ПолучитьОбъект();
					ОбъектПоСсылке.ДополнительныеСвойства.Вставить("РегистрироватьОбмен", истина);
					ПланыОбмена.ЗарегистрироватьИзменения(ПОСсылка, ОбъектПоСсылке);
				КонецЦикла;
				
			ИначеЕсли Не Объект.ДополнительныеСвойства.Свойство("РегистрироватьОбмен") Тогда
				МассивУзловРезультат.Удалить(МассивУзловРезультат.Найти(ПОСсылка));
			КонецЕсли;
		
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

 

Также создана простая дополнительная процедура, которая "собирает" все подчиненные ссылки объекта в массив

 
 Процедура сбора подчиненных ссылок объекта
// собирает рекурсивно ссылки из объекта "ОбъектИлиСсылка" в массив "МассивСсылок"
Процедура ПолучитьСсылкиВнутриОбъекта(ОбъектИлиСсылка, МассивСсылок)
	
	Если ОбщегоНазначения.ЭтоПеречисление(ОбъектИлиСсылка.Метаданные()) Тогда
		Возврат
	ИначеЕсли МассивСсылок.Найти(ОбъектИлиСсылка) <> Неопределено Тогда
		Возврат
	КонецЕсли;
	МассивСсылок.Добавить(ОбъектИлиСсылка.Ссылка);
	
	Для каждого ТекМД Из ОбъектИлиСсылка.Метаданные().Реквизиты Цикл
		
		Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ОбъектИлиСсылка[ТекМД.Имя])) И Не ОбъектИлиСсылка[ТекМД.Имя].Пустая() Тогда
			ПолучитьСсылкиВнутриОбъекта(ОбъектИлиСсылка[ТекМД.Имя], МассивСсылок)
		КонецЕсли;
	
	КонецЦикла;
	
	Для каждого ТекМДТЧ Из ОбъектИлиСсылка.Метаданные().ТабличныеЧасти Цикл
		
		Для каждого ТекСтрока Из ОбъектИлиСсылка[ТекМДТЧ.Имя] Цикл
		
			Для каждого ТекМД Из ОбъектИлиСсылка.Метаданные().ТабличныеЧасти[ТекМДТЧ.Имя].Реквизиты Цикл
				Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ТекСтрока[ТекМД.Имя])) И Не ТекСтрока[ТекМД.Имя].Пустая() Тогда
					ПолучитьСсылкиВнутриОбъекта(ТекСтрока[ТекМД.Имя], МассивСсылок)
				КонецЕсли;
			КонецЦикла;
		
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры

 

3. Создание правил отправки данных. Все правила конвертации/отправки/получения данных находятся в модуле "МенеджерОбменаЧерезУниверсальныйФормат". Данный модуль содержит множество стандартных правил обмена - необходимо добавить к ним несколько "своих" правил конвертации. Новых правил можно выделить 3:

  • Реализация товаров, услуг -> Поступление товаров,услуг
  • Организации -> Контрагенты
  • Контрагенты -> Организации

Для создания правил можно использовать конфигурацию "Конвертер 3.0", но в целом можно просто использовать функции из типового модуля МенеджерОбменаЧерезУниверсальныйФормат как шаблоны методом "копи-пасты".

В результате получилась область с набором процедур следующего вида:

 
Функционал новых правил отправки объектов

4. Создание правил получения данных. На каждое правило отправки данных должно быть введено хотя бы одно правило получения: выгруженный файл нужно каким-то образом загрузить в приемник.

Для создания правил получения можно воспользоваться конвертером 3.0, можно написать правила вручную (используя существующие примеры в модуле обмена).

 

4.1. Правило получения документа "Поступление товаров и услуг". В 1-ю очередь "разберемся" с основным правилом получения документа. Вариант идентификации тут подойдет "ПоУникальномИдентификатору", также необхдимы некоторые программные доработки по установке свойств из входящих данных. Например, "Номер входящего документа" в поступлении должен быть равен номеру реализации, также нужно указать вид операции поступления итд...

 
 Код получения Поступления товаров,услуг

4.2. Правила получения контрагентов, организаций. На данном этапе сталкиваемся с 2-мя проблемами: 

  • Типовые функции модуля "МенеджерОбменаЧерезУниверсальныйФормат" конфликтуют с функциями, которые создаются в расширении. Если для организации или контрагента уже существует хотя бы одно  правило обмена - то система при получении найдет именно его и будет его использовать при конвертации. Нам это не подходит - тем самым необходимо программно удалять,либо изменять типовые правила получения.

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

Определим порядок поиска контрагентов и организаций: вариант идентификации "ПоПолямПоиска" и поля поиска "ИНН,КПП". Код обработки получения организаций, контрагентов примерно следующий:

 
 Код правил получения организаций и контрагентов

4.3. Прочие правила получения. Проблема идентификации остается актуальной и для прочих ссылочных объектов: нам не нужны дубли номенклатуры итд... Для остальных объектов решено использовать вариант синхронизации "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска" - в этом случае идет поиск сначала по идентификатору, потом по полям поиска (если по идентификатору) не найдено. Также при этом используется специальный регистр соответствий ссылок, в котором можно задать соответствия ссылок объектов (подробно углубляться не будем, есть курсы и статьи, в которых это описано).

 
 Код изменения типовых правил получения данных

5. Служебные функции по обмену данными. Чтобы указанные изменения были инициализированы - нужно доработать типовые функции по заполнению правил, отработке алгоритмов итд..., иначе вышеописанные изменения не будут работать. Если вы используете конфигурацию "Конвертация данных 3.0" - то служебные функции будут автоматически созданы вместе с правилами конвертации и отправки, но можно без особого труда написать функции вручную (в нашем примере нестандартных правил немного).

Код дозаполнения правил конвертации:

&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура РасшОбмен_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации) Экспорт
	
	//фильтр по узлам источника/применика
	Если ПараметрыСеанса.БуферОбмена.Свойство("КомпонентыОбмена_УзелКорреспондента_Код") Тогда
		Если НаправлениеОбмена = "Отправка" И ПараметрыСеанса.БуферОбмена.КомпонентыОбмена_УзелКорреспондента_Код = "УТ" Тогда
		ИначеЕсли НаправлениеОбмена = "Получение" И ПараметрыСеанса.БуферОбмена.КомпонентыОбмена_УзелКорреспондента_Код =  "ЦБ" Тогда
		Иначе
			Возврат
		КонецЕсли;
	КонецЕсли;

	Если НаправлениеОбмена = "Отправка" Тогда
		ДобавитьПКО_Документ_Расход_Приход(ПравилаКонвертации);
		ДобавитьПКО_Справочник_Контрагенты_Организации(ПравилаКонвертации);
		ДобавитьПКО_Справочник_Организации_Контрагенты(ПравилаКонвертации);
		
	ИначеЕсли НаправлениеОбмена = "Получение" Тогда
		ДобавитьПКО_Документ_Расход_Приход_Получение(ПравилаКонвертации);
		ИзменитьПКО_Справочники_Получение(ПравилаКонвертации);
		РасшОбмен_ДобавитьПКО_Справочник_Контрагенты_Получение(ПравилаКонвертации);
		РасшОбмен_ДобавитьПКО_Справочник_Организации_Получение(ПравилаКонвертации);
		
	КонецЕсли;
	
КонецПроцедуры

Код дополнения правил обработки данных:

&После("ЗаполнитьПравилаОбработкиДанных")
Процедура РасшОбмен_ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных) Экспорт
	
	//фильтр по узлам источника/применика
	Если ПараметрыСеанса.БуферОбмена.Свойство("КомпонентыОбмена_УзелКорреспондента_Код") Тогда
		Если НаправлениеОбмена = "Отправка" И ПараметрыСеанса.БуферОбмена.КомпонентыОбмена_УзелКорреспондента_Код = "УТ" Тогда
		ИначеЕсли НаправлениеОбмена = "Получение" И ПараметрыСеанса.БуферОбмена.КомпонентыОбмена_УзелКорреспондента_Код =  "ЦБ" Тогда
		Иначе
			Возврат
		КонецЕсли;
	КонецЕсли;
	
	Если НаправлениеОбмена = "Отправка" Тогда
		Если ПравилаОбработкиДанных.Колонки.Найти("ОчисткаДанных") = Неопределено Тогда
			ПравилаОбработкиДанных.Колонки.Добавить("ОчисткаДанных");
		КонецЕсли;
		
		ДобавитьПОД_Документ_Расход_Приход(ПравилаОбработкиДанных);
		ДобавитьПОД_Справочник_Контрагенты_Организации(ПравилаОбработкиДанных);
		ДобавитьПОД_Справочник_Организации_Контрагенты(ПравилаОбработкиДанных);
		
	ИначеЕсли НаправлениеОбмена = "Получение" Тогда
		//ПравилаОбработкиДанных.Удалить(ПравилаОбработкиДанных.Найти("Документ.ПоступлениеТоваровУслуг", "ОбъектВыборкиФормат"));

	КонецЕсли;
	
КонецПроцедуры

#Область Отправка
#Область Документ_Расход_Приход
Процедура ДобавитьПОД_Документ_Расход_Приход(ПравилаОбработкиДанных)
	
	//удалим типовое правило
	ПравилаОбработкиДанных.Удалить(ПравилаОбработкиДанных.Найти(Метаданные.Документы.РеализацияТоваровУслуг, "ОбъектВыборкиМетаданные"));
	
	//добавим свое спец.правило
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_Расход_Приход";
	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.РеализацияТоваровУслуг;
	ПравилоОбработки.ОчисткаДанных           = Ложь;
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_Расход_Приход");
	
КонецПроцедуры
#КонецОбласти
#Область Справочник_Контрагенты_Организации
Процедура ДобавитьПОД_Справочник_Контрагенты_Организации(ПравилаОбработкиДанных)
	
	//удалим типовое правило
	ПравилоОбработки = ПравилаОбработкиДанных.Найти(Метаданные.Справочники.Контрагенты, "ОбъектВыборкиМетаданные");
	ПравилаОбработкиДанных.Удалить(ПравилоОбработки);

	//добавим свое спец.правило
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Справочник_Контрагенты_Организации";
	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Справочники.Контрагенты;
	ПравилоОбработки.ОчисткаДанных           = Ложь;
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Справочник_Контрагенты_Организации");
	
КонецПроцедуры
#КонецОбласти
#Область Справочник_Организации_Контрагенты
Процедура ДобавитьПОД_Справочник_Организации_Контрагенты(ПравилаОбработкиДанных)
	
	//удалим типовое правило
	ПравилоОбработки = ПравилаОбработкиДанных.Найти(Метаданные.Справочники.Организации, "ОбъектВыборкиМетаданные");
	ПравилаОбработкиДанных.Удалить(ПравилоОбработки);

	//добавим свое спец.правило
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Справочник_Организации_Контрагенты";
	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Справочники.Организации;
	ПравилоОбработки.ОчисткаДанных           = Ложь;
	ПравилоОбработки.ИспользуемыеПКО.Добавить("Справочник_Организации_Контрагенты");
	
КонецПроцедуры
#КонецОбласти
#КонецОбласти

Выполнение спец.событий при обмене данными:

#Область ОбщегоНазначения
// Процедура-обертка, выполняет запуск указанной в параметрах процедуры модуля менеджера обмена через формат.
//
// Параметры:
//  ИмяПроцедуры - строка.
//  СтруктураПараметров - структура, содержащая передаваемые параметры.
&После("ВыполнитьПроцедуруМодуляМенеджера")
Процедура Расш_ВыполнитьПроцедуруМодуляМенеджера(ИмяПроцедуры, Параметры) Экспорт
	
	Если ИмяПроцедуры = "ПКО_Документ_Расход_Приход_ПриОтправкеДанных" Тогда 
		ПКО_Документ_Расход_Приход_ПриОтправкеДанных(
			Параметры.ДанныеИБ, Параметры.ДанныеXDTO, Параметры.КомпонентыОбмена, Параметры.СтекВыгрузки);
	ИначеЕсли ИмяПроцедуры = "ПКО_Документ_Расход_Приход_Получение_ПриКонвертацииДанныхXDTO" Тогда 
		ПКО_Документ_Расход_Приход_Получение_ПриКонвертацииДанныхXDTO(
			Параметры.ДанныеXDTO, Параметры.ПолученныеДанные, Параметры.КомпонентыОбмена);
		КонецЕсли;
		
КонецПроцедуры

#КонецОбласти

 

На этом доработки правил обмена практически завершены - осталось только очистить регистрацию выгруженных данных из узла плана обмена. В модуле "ОбменДаннымиXDTOСервер" допишем функцию по очистке регистрации, в случае если обмен был завершен без ошибок:

&После("ВыполнитьВыгрузкуЗарегистрированныхДанных")
Процедура РасшОбмен_ВыполнитьВыгрузкуЗарегистрированныхДанных_После(КомпонентыОбмена, НомерСообщения)
	
	Если КомпонентыОбмена.УзелКорреспондента.Код = "УТ" Тогда
		Если СокрЛП(КомпонентыОбмена.СостояниеОбменаДанными.РезультатВыполненияОбмена) <> "Ошибка" тогда
			ПланыОбмена.УдалитьРегистрациюИзменений(КомпонентыОбмена.УзелКорреспондента);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

 

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

После создания расширения для начала можно "потестировать" обмен в режиме выгрузки файла в каталог, чтобы сразу не использовать прямое подключение к другой базе (вдруг на этапе выгрузки какие-то ошибки вскроются). Для примера проведем некий документ "реализации товаров и услуг" - после чего он должен появиться в списке зарегистрированных изменений для узла обмена "УТ":

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

 

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2. Переносятся документы, справочная информация и остатки

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

50722 45650 руб.

04.08.2015    160293    356    268    

349

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 руб.

12.06.2017    135564    729    291    

391

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

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

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

38500 34650 руб.

15.04.2019    68844    181    139    

111

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 руб.

15.12.2021    20613    136    38    

94

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

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

28000 руб.

23.07.2020    46775    199    64    

162

SALE! 10%

Перенос данных из БП 3.0 в УТ 11 / КА 2 / ERP 2. Переносятся начальные остатки, документы и справочники

Обмен между базами 1C Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

В продаже с 2014г. | Воспользовались более 122 предприятий! | Перенос данных из БП 3.0 в УТ 11 | из БП 3.0 в КА 2 | из БП 3.0 в ERP | Сэкономьте свое время - используйте готовое решение для перехода! | Постоянно работаем над развитием переноса данных | Обновляем на новые релизы 1С | Есть фильтр выгрузки по организациям | Переносятся начальные остатки на выбранную дату, документы за период времени и вся возможная справочная информация | Перенос сделан на технологии КД 2 (правила конвертации данных)

50722 45650 руб.

31.10.2014    231911    125    327    

296

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

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

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 руб.

10.07.2018    67756    41    123    

46

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

48278 43450 руб.

03.12.2020    34425    81    58    

78
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. shutilin 19.06.18 09:21 Сейчас в теме
"Но что делать, если в компании участвуют несколько баз данных - стандартных, самописных (неважно), между которыми идет активный обмен данными EnterpriseData - и на каждый узел обмена могут действовать свои специфические правила?"

Обычно в таких случаях модуль обмена помещаем в модуль внешней обработки,
и при настройке обмена указываем путь к ней. Разве так не проще?
Alien_job; +1 Ответить
5. Leits 1 08.08.18 15:15 Сейчас в теме
(1) мне на партнерском портале отвечали что в новых версия так уже не прокатит - типа юзайте расширения :)
2. artkor 263 19.06.18 09:36 Сейчас в теме
Изначально так и делалось, только с отладкой "замучался" - пока не знаю способа отладки внешней обработки в режиме "Подключить". Принцип одинаковый, но имхо через расширение в разы удобнее делать, если совместимость конфы позволяет :)
Alien_job; +1 Ответить
4. MaxS 2850 19.06.18 15:47 Сейчас в теме
(2) В этой статье указана ссылка на статью, где описано как отлаживать внешние обработки с правилами. ;)
3. acanta 19.06.18 11:33 Сейчас в теме
Я тоже с этим столкнулась. Не понимаю, почему в узел нельзя добавить какой нибудь реквизит, чтобы обозначить по какой конвертации он работает - 2й или 3ей?
План обмена полный может быть один (регистрируются все). А узлы по одному переводить правильнее (разные релизы периферийных баз могут же быть).
6. kolya_tlt 86 08.08.18 17:07 Сейчас в теме
спасибо за идею, как раз нужно почти тоже самое. но гонять каждый раз ссылочные данные документов (номенклатуру, контрагенты и т.д.) избыточно.
7. KRIHA 111 05.06.19 10:39 Сейчас в теме
Подскажите пожалуйста, в

Процедура РасшОбмен_ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ДополнительныеПараметры)


в месте:

Для каждого ТекСтрока Из Объект.Товары Цикл
					МассивСсылок.Добавить(ТекСтрока.Номенклатура);
					ПолучитьСсылкиВнутриОбъекта(ТекСтрока.Номенклатура.Родитель, МассивСсылок);
					Если Не ТекСтрока.Упаковка.Пустая() Тогда
						МассивСсылок.Добавить(ТекСтрока.Упаковка);
					КонецЕсли;
				КонецЦикла;


ПолучитьСсылкиВнутриОбъекта(ТекСтрока.Номенклатура.   ->Родитель<-    , МассивСсылок);
Показать

в чем смысл этой строки?
8. artkor 263 05.06.19 10:55 Сейчас в теме
(7) Цель - собрать все ссылки внутри номенклатуры, чтобы в приемнике не было "сюрпризов" вида "<Объект не найден...>" внутри карточки товара и всех объектов по цепочке. Возможно там ошибка в коде "ТекСтрока.Номенклатура.Родитель", а надо просто "ТекСтрока.Номенклатура", спасибо что заметили ;) надо в рабочем проекте проверить...
9. KRIHA 111 05.06.19 10:59 Сейчас в теме
да, я про "родителя" и написал ))
10. KRIHA 111 05.06.19 16:59 Сейчас в теме
Кстати, вопрос с самого начала, у меня:

КомпонентыОбмена.УзелКорреспондента.Код равен "90af25b2-c4cc-4890-a62a-418ec3a70977", и до буквенного префикса (в отладчике смотрю) - даже не знаю как к нему подобраться.
11. artkor 263 05.06.19 21:54 Сейчас в теме
(10) Обычно все безвыходные ситуации в новых "конфах" на 8.3.10 и выше решаю расширениями: можно и процедуры переопределить и нужные реквизиты на форму выложить...
12. KRIHA 111 06.06.19 09:24 Сейчас в теме
да обойти понятно как - по наименованию тому же - суть не в этом - поменялась там логика немного - ымей ввиду )
13. pvlunegov 157 03.09.20 08:02 Сейчас в теме
В данной публикации упоминаются конфигурации "Конвертер 2.1", "Конвертер 3". Первый раз слышу о таких конфигурациях, в интернете не нашел таких.
Может быть, имеются ввиду конфигурации "Конвертация данных 2.1", "Конвертация данных 3" ?
14. artkor 263 03.09.20 23:40 Сейчас в теме
(13) Да, Имелась ввиду "Конвертация данных" 2.1, 3.0, вы точное название огласили)
15. user811769 13 28.01.21 21:12 Сейчас в теме
artkor, спасибо тебе огромное за труды! твой опыт очень помог мне!
16. artkor 263 29.01.21 00:17 Сейчас в теме +0.5 $m
(15) Пожалуйста! Я вообще чувак самокритичный - долго думал писать/не писать. Хотелось явить сообществу что-то хоть немного годное. Рад что вам понравилось =)
17. user811769 13 29.01.21 12:29 Сейчас в теме
(16) у тебя активна кнопочка отметить ответ вознаграждением?) отметь любой свой ответ, пожалуйста)))
18. user811769 13 29.01.21 12:30 Сейчас в теме
(16) и кстати, может быть, ты бы мог мне ещё кое-что подсказать? по поводу конвертации 1 ко многим
19. khnatik 30.04.21 16:08 Сейчас в теме
Добрый день!
Подскажите пожалуйста, можно ли через МенеджерОбменаЧерезУниверсальныйФормат передавать данные, которые не являются реквизитами объектов?
Мне нужно получить из КА вес номенклатуры, перевести его в килограммы и передать в БП. В БП я заранее создала доп реквизит, куда хочу этот вес поместить.

В ОМ МенеджерОбменаЧерезУниверсальныйФормат ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных получаю вес в кг и записываю его в: ДанныеXDTO.Вставить("Вес", ВесКГ);

Далее, смотрю по шагам, что происходит при выгрузке:
в ДанныеXDTO реквизит Вес есть, а вот ОбъектXDTO формируется без него.

В коде видно, что ОбъектXDTO формируется по типу справочника Номенклатура, вот Вес и не попадает туда.

Может быть нужно где-то доопределить этот Вес, никак не соображу, подскажите пожалуйста.
20. artkor 263 30.04.21 16:51 Сейчас в теме
(19) Здравствуйте, занимался когда-то давно подобными вещами. Посмотрите в статье https://infostart.ru/1c/articles/695523/ есть примеры: поиск (ctrl-F) по слову AdditionalInfo. Это в стандарте EnterpriseData стандартное базовое свойство для каждого объекта метаданных, в которое можно добавлять доп.свойства., а сам пакет XDTO менять крайне "нехорошо" )
21. khnatik 04.05.21 12:12 Сейчас в теме
(20) Спасибо за ссылку! Разобралась, передала вес через AdditionalInfo =)
22. daab 22.05.21 17:46 Сейчас в теме
преверте плиз
Прикрепленные файлы:
23. artkor 263 22.05.21 22:27 Сейчас в теме
Не путайте "длинное с зеленым", правила конвертации объектов и правила обработки данных это разные вещи.

&После("ЗаполнитьПравилаКонвертацииОбъектов")
Процедура РасшОбмен_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации) Экспорт

Здесь "ДобавитьПКО_"

&После("ЗаполнитьПравилаОбработкиДанных")
Процедура РасшОбмен_ЗаполнитьПравилаОбработкиДанных(НаправлениеОбмена, ПравилаОбработкиДанных) Экспорт

Здесь "ДобавитьПОД_"
24. daab 24.05.21 21:14 Сейчас в теме
25. artkor 263 25.05.21 10:38 Сейчас в теме
(24) Спасибо что заметили, забыл кусок кода добавить) Там идет подмена стандартных правил обмена данными на свои: добавил в текст публикации
26. Julya 09.06.22 10:11 Сейчас в теме
Добрый день подскажите пожалуйста как настроить выгрузку из ЗУП 3 в ЕРП справочник Подразделение в Структуру предприятия. Не сталкивалась с КД3. По вашему примеру сделала, но в Объект формата нет даже справочника такого. Подразделение зуп=сП ЕРП (наименованию).
27. artkor 263 09.06.22 15:59 Сейчас в теме
(26) Здравствуйте. Сомневаюсь что Вы правильными вещами занимаетесь, ибо "Структура предприятия" - это независимый справочник, применяемый для упр. учета, а "Подразделения организаций" - подчиненный Организации. Косвенная связь между данными субстанциями проводится в документе "Утверждение/Изменение штатного расписания" если память не изменяет. И более они никак не связаны, да и в целом ЕРП по структуре содержит блок ЗУПа полностью идентичный обычному ЗУП 3.0 по структуре. Там также есть "Структура предприятия" и "Подразделения организаций", что там что там).
28. Julya 09.06.22 16:21 Сейчас в теме
(27)При обмене документ отражение зп в табличной части -"Подразделение по умолчанию"-это спр.СП. Какой тогда выход, создавать спр.СП в ЗУПе и в ЕРП
29. user1364680 08.11.23 05:03 Сейчас в теме
дд.
а можно при выгрузке документа подставить определенную организацию?
в КД 2.0 решалось одной строчкой кода в правилах обмена, а здесь что то никак не получается подменить организацию при выгрузке документа...
30. artkor 263 08.11.23 09:16 Сейчас в теме
(29) вроде все предельно просто, как раз недавно правила допиливал из УНФ, вот на примере передача склада:
#Область Документ_ОтчетОРозничныхПродажах_Отправка
Процедура ДобавитьПКО_Документ_ОтчетОРозничныхПродажах_Отправка(ПравилаКонвертации)

	ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
	ПравилоКонвертации.ИмяПКО            = "Документ_ОтчетОРозничныхПродажах_Отправка";
	ПравилоКонвертации.ОбъектДанных      = Метаданные.Документы.ОтчетОРозничныхПродажах;
	ПравилоКонвертации.ОбъектФормата     = "Документ.ОтчетОРозничныхПродажах";
	ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ОтчетОРозничныхПродажах_Отправка_ПриОтправкеДа­нных";
	
	СвойстваШапки = ПравилоКонвертации.Свойства;
	ДобавитьПКС(СвойстваШапки, "ВалютаДокумента",    "Валюта", , "Справочник_Валюты");
	ДобавитьПКС(СвойстваШапки, "ВидЦен",             "ТипЦен", , "Справочник_ТипыЦен");
	ДобавитьПКС(СвойстваШапки, "Дата",               "Дата");
	ДобавитьПКС(СвойстваШапки, "КассоваяСмена",      "КассоваяСмена", , "Документ_КассоваяСменаОткрытие_Отправка");
	ДобавитьПКС(СвойстваШапки, "Комментарий",        "Комментарий");
	ДобавитьПКС(СвойстваШапки, "НалогообложениеНДС", "Налогообложение", , "Перечисления_ТипыНалогообложенияНДС_Отправка");
	ДобавитьПКС(СвойстваШапки, "Номер",              "Номер");
	ДобавитьПКС(СвойстваШапки, "Организация",        "Организация", , "Справочник_Организации_Отправка");
	ДобавитьПКС(СвойстваШапки, "Подразделение",      "Подразделение", , "Справочник_Подразделения_Отправка");
	ДобавитьПКС(СвойстваШапки, "Статья",             "СтатьяДДС", , "Справочник_СтатьиДДС");
	ДобавитьПКС(СвойстваШапки, "СуммаВключаетНДС",   "СуммаВключаетНДС");
	ДобавитьПКС(СвойстваШапки, "СуммаДокумента",     "Сумма");
	ДобавитьПКС(СвойстваШапки, "",                   "", 1);
	ДобавитьПКС(СвойстваШапки, "",                   "КассаККМ", 1, "Справочник_КассыККМ_Отправка");
	ДобавитьПКС(СвойстваШапки, "",                   "Патент", 1, "Справочник_Патенты_Отправка");
	ДобавитьПКС(СвойстваШапки, "СтруктурнаяЕдиница", "Склад", 1, "Справочник_Склады_Отправка");
....................................................

Процедура ПКО_Документ_ОтчетОРозничныхПродажах_Отправка_ПриОтправкеДан­ных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
	Если СтекВыгрузки.Количество() > 1 Тогда
		Возврат;
	КонецЕсли;
	
	Если ВерсияФорматаЧислом(КомпонентыОбмена.ВерсияФорматаОбмена) >= ВерсияФорматаЧислом("1.6") Тогда
		ДанныеXDTO.Вставить("КассаККМ", ДанныеИБ.КассаККМ);
	КонецЕсли;
	
	Если КомпонентыОбмена.ПараметрыКонвертации.ИспользуютсяСкладыВТабличныхЧастях Тогда
		Склад = КомпонентыОбмена.ПараметрыКонвертации.ОбобщенныйСклад; 
	Иначе
		Склад = ДанныеИБ.СтруктурнаяЕдиница;
	КонецЕсли;
	ДанныеXDTO.Вставить("Склад", Склад);
....................................................
Показать
31. user1364680 08.11.23 09:51 Сейчас в теме
т.е. это в каждом выгружаемом документе править правило выгрузки?
а есть еще ссылки на организацию в справочниках...

а просто подставить организацию при выгрузке именно организации нельзя?
32. artkor 263 08.11.23 15:02 Сейчас в теме
(31) чтобы в каждом выгружаемом документе фиксированная Организация была? В целом все можно - надо "костыль" свой написать в процедуре "ВыполнитьПроцедуруМодуляМенеджера" (я бы так сделал). Только очень аккуратно, ибо функция глобальная - можно что-то поломать.
Оставьте свое сообщение