Имя: Пароль:
1C
 
EnterpriseData расширение формата обмена
0 TAVGAM
 
19.11.25
22:41
Всем привет!
Не прошу помощи, а уже молю о ней...

Пытаюсь завести дружбу с расширением формата EnterpriseData, версия 1.19.
Задача: синхронизация между 2-мя базами ERP(база1 в база2). В обеих базах в справочник "Структура предприятия" добавлен реквизит "мой_КодСоответствия" по которому должен происходить поиск в база2. Но до ПКО_Справочник_Подразделения_Получение дело не доходит.
Не получается из база1 в "ключевоесвойство" выгрузить реквизит "мой_КодСоответствия". Руковдствуюсь статьей https://its.1c.ru/db/metod8dev/content/6013/hdoc , но данные не выгружаются...
1. Добавлены в расширения пакеты ExchangeMessage (Тип объектов Object), EnterpriseData_1_19_1 (директивы имопрта http://www.1c.ru/SSL/Exchange/Message ,  пространство имен "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19" и тип объектов КлючевыеСвойстваПодразделение).
2. В расширении создан "мой" пакет URL пространство имен "http://v8.1c.ru/edi/edi_stnd/EnterpriseData_qw/1.19". Сюда добавлена директива имопорта "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19" , тип объектов "КлючевыеСвойстваПодразделение" - с определнием типа "мой_КодСоответствия" (строка).
3. Общий модуль "Обмен данными предопределяемый" в расширении: &После("ПриПолученииДоступныхРасширенийФормата")
Процедура apkПриПолученииДоступныхРасширенийФормата(РасширенияФормата)
    РасширенияФормата.Вставить("http://v8.1c.ru/edi/edi_stnd/EnterpriseData_qw/1.19" ,"1.19");
КонецПроцедуры
4. в расширении Менеджер обменаЧерезУниверсальныйФормат:
&После("ПриПолученииДоступныхРасширенийФормата")
Процедура apkПриПолученииДоступныхРасширенийФормата(РасширенияФормата)
    РасширенияФормата.Вставить("http://v8.1c.ru/edi/edi_stnd/EnterpriseData_qw/1.19" ,"1.19");
КонецПроцедуры


Вроде все как на ИТС прописано... но не выгружается "мой_КодСоответствия".

Может кто-то сталкивался? Повторюсь, уже молю о помощи((
1 breezee
 
19.11.25
22:43
Много букв, не читал. Используйте additionalinfo
2 TAVGAM
 
19.11.25
22:46
пункт4. &ИзменениеИКонтроль("ДобавитьПКО_Справочник_Подразделения_Отправка")
Процедура apkДобавитьПКО_Справочник_Подразделения_Отправка(ПравилаКонвертации)
    ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    ПравилоКонвертации.ИмяПКО            = "Справочник_Подразделения_Отправка";
    ПравилоКонвертации.ОбъектДанных      = Метаданные.Справочники.СтруктураПредприятия;
    ПравилоКонвертации.ОбъектФормата     = "Справочник.Подразделения"; //@NON-NLS-1
    ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Справочник_Подразделения_Отправка_ПриОтправкеДанных";
    СвойстваШапки = ПравилоКонвертации.Свойства;
    ДобавитьПКС(СвойстваШапки, "Наименование", "Наименование");
    ДобавитьПКС(СвойстваШапки, "Родитель",     "ВышестоящееПодразделение", , "Справочник_Подразделения_Отправка");
    #Вставка
    ПространствоИмен = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData_qw/1.19";
    ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПространствоИмен);
    ДобавитьПКС(СвойстваШапки,"мой_КодСоответствия","мой_КодСоответствия",1,,ПространствоИмен);
    #КонецВставки
    СвойстваТЧ = ДобавитьПКТЧ(ПравилоКонвертации, "", "ДополнительныеРеквизиты");
    ДобавитьПКС(СвойстваТЧ, "", "ЗначениеСвойства", 1);
    ДобавитьПКС(СвойстваТЧ, "", "Свойство", 1, "Справочник_ДополнительныеРеквизиты");

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

&ИзменениеИКонтроль("ПКО_Справочник_Подразделения_Отправка_ПриОтправкеДанных")
Процедура apkПКО_Справочник_Подразделения_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    Если СтекВыгрузки.Количество() > 1 Тогда
        Возврат;
    КонецЕсли;

    Если ЕстьРеквизитДанныхИБ(ДанныеИБ, "ДополнительныеРеквизиты") Тогда
        ВыгрузитьДополнительныеРеквизитыИСведения(КомпонентыОбмена, ДанныеИБ, ДанныеXDTO, Истина);
    КонецЕсли;
    #Вставка
    Если НЕ ПустаяСтрока(ДанныеИБ.мой_КодСоответствия) Тогда
        ДанныеXDTO.КлючевыеСвойства.Вставить("мой_КодСоответствия",ДанныеИБ.мой_КодСоответствия);
    КонецЕсли;
    #КонецВставки
КонецПроцедуры
3 TAVGAM
 
19.11.25
22:47
(1) подскажите, пжс, как через additionalinfo при получении заменить поиск в базе2?
4 d4rkmesa
 
19.11.25
22:50
(0) >>Задача: синхронизация между 2-мя базами ERP

Ну-ну, удачи. Самое лучшее - купить доработанные правила от MaxS (не рекламы ради, просто т.н. "универсальный" типовой обмен - полный шлак для этих целей), если ваш работодатель - конечный потребитель. И даже с доработанными будут нюансы и необходимы правки. Документы то грузятся у вас, проблема точно только с полями поиска элементов НСИ? Просто любопытно.
5 TAVGAM
 
20.11.25
09:30
(4) банк - отлично, до других документов дело не дошло, из-за структуры предприятия, тут и присели)) Ранее подобное было реализовано на КД2, но "ручного" труда было много. Приняли решение попробовать через enteprisedata. Не факт, что ручного  участия будет меньше))
6 TAVGAM
 
19.11.25
22:57
(4) На ИТС пишут-то красиво)
7 TAVGAM
 
20.11.25
11:52
(4) Конечно, рассмотрим, но позже
8 2mugik
 
20.11.25
05:49
(0)таскал через пакет расширения свои реквизиты. Отладчиком и инетом малехо пользовался, да. т.е. механизм вроде рабочий)
9 d4rkmesa
 
20.11.25
08:34
(5) Ну пробуйте, конечно, свои плюсы есть - относительно легкая отладка, все обработчики "в коде", небольшой объем сравнительно, но вот сам принцип отложенного проведения порождает проблемы, т.к. в ERP многие механизмы работают "на сейчас". Насчет "ручного труда", я недавно "встрял" с ED обменом между двумя ERP, устал уже докидывать что-то через обработки выгрузку-загрузки (хоть и тестовый режим).
10 2mugik
 
20.11.25
08:56
(4)Кстати, да. MaxS в ветках про обмены нормально так заяснял. В свое время.
11 Mr_Boogie
 
20.11.25
10:37
(0) Добавить еще надо пункт 3.1 в общий модуль ОбменДаннымиXDTOСервер процедура ВерсииФорматаОбмена. Вставить перед возвратом результата (делал через изменениеиконтроль на примере бух, в ERP менеджер обмена по другому чей называется)     
#Вставка
Результат.Вставить("1.19", МенеджерОбменаЧерезУниверсальныйФормат13);
#КонецВставки

Далее
ПространствоИмен = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData_qw/1.19"; ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПространствоИмен); заменить на
ПравилоКонвертации.ПространствоИмен = "http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.19"; ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПравилоКонвертации.ПространствоИмен);

Далее в ДобавитьПКС(СвойстваШапки,"мой_КодСоответствия","мой_КодСоответствия",1,,ПространствоИмен); заменить на ДобавитьПКС(СвойстваШапки,"мой_КодСоответствия","мой_КодСоответствия");


В XDTO пакете реквизит с типом String? и так же при импорте в XDTO пакетах все базовые типы проставились в типах значениях?
12 Mr_Boogie
 
20.11.25
11:52
(0) Если через additionalinfo в базе источнике в ПКО:

		ДанныеXDTO.Вставить("AdditionalInfo", "ВашРеквизит", ДанныеИБ.ВашРеквизит);


В приемнике в ПКО приКонвертацииДанныхXDTO:
Если ДанныеXDTO.Свойство("AdditionalInfo") 
И ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда
ВашаПеременнаяДляУдобства = ДанныеXDTO.AdditionalInfo.ВашРеквизит;
 
		
Если ЗначениеЗаполнено(ВашаПеременнаяДляУдобства) Тогда
ПолученныеДанные.ВашРеквизит = ВашаПеременнаяДляУдобства;
КонецЕсли;


Как-то так