<img src="https://secure.leadforensics.com/133892.png" alt="" style="display:none;">

Пример адаптации правил типового обмена в формате EnterpriseData между 1С:Комплексная автоматизация и 1С: Бухгалтерия предприятия КОРП

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

Широко используемый инструмент для решения задач обмена «1С:Конвертация данных 2.0», существенно отличается от инструмента «1С:Конвертация данных 3.0», использующего новый формат EnterpriseData. Отличие касается как внешнего интерфейса инструментов, так и самих принципов работы. Понимание этих  принципов постепенно переходит из разряда желательных в область необходимых компетенций программиста 1С.

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

При реализации обменов через «1С:Конвертация данных 3.0» используется предопределенный формат обмена EnterpriseData, разработанный фирмой «1С». Формат основан на XML и представляет структуры данных, которые соответствуют определенным бизнес-сущностям, используемых в конфигурациях «1С», таким как документы, справочники и прочие. Структура формата является универсальной и не зависит от состава метаданных конфигураций, участвующих в обмене. Формат EnterpriseData универсален и может также использоваться для обмена c не 1С-ными приложениями.

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

В этом плане реализация в типовых конфигурациях обмена с использованием формата EnterpriseData также имеет свои особенности. Правила обмена представляют собой набор отдельных процедур, которые располагаются в общих модулях конфигурации с именем, начинающимся на «МенеджерОбменаЧерезУниверсальныйФормат*», где вместо звездочки может стоять соответствующая версия. Другими словами, на выходе «1С:Конвертация данных 3.0» правила и настройки обмена будут представлять собой не файл в формате xml, а текст общего модуля.

Цель статьи – попытаться дать общее представление о том, каким образом можно решить элементарную задачу доработки типового обмена на «1С:Конвертация данных 3.0», использующую формат EnterpriseData, без детального погружения в механизмы новой конвертации и нового формата.

Опишем постановку задачи:

Имеется две конфигурации: «1С Комплексная автоматизация» (КА) и «1С Бухгалтерия предприятия КОРП» (БП), между ними настроен типовой обмен с использованием формата EnterpriseData. В конфигурации КА у справочника «Номенклатура» через несколько типовых реквизитов введен такой показатель номенклатуры как «Вес».

1-12

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

2-6

3-4

Понятно, что типовые правила обмена не предусматривают подобную трансляцию данных. Собственно, постановка задачи заключается в следующем: требуется доработать правила обмена таким образом, чтобы показатель номенклатуры «Вес» передавался из КА в БП в соответствующий дополнительный реквизит «Вес».

Конфигурация-источник, из которой у нас будут отправляться данные это КА. Доступные версии форматов EnterpriseData для нашей конфигурации можем посмотреть в режиме конфигуратора в списке пакетов XDTO, их название начинается на «EnterpriseData».

4-6

Какая из версий используется в настроенном обмене можно определить, открыв отправляемое сообщение обмена:

5-3

В свойстве заголовка «msg:Format» указывается пространство имен версии используемого формата. В нашем случае это формат 1.6, а если более точно, то 1.6.20.

6

Нас интересует справочник «Номенклатура», найдем его в пакете XDTO нашей версии формата EnterpriseData.

Среди перечисленных реквизитов справочника «Номенклатура» отсутствуют необходимые нам реквизиты для передачи показателя «Вес».

7

У нашего объекта «Справочник.Номенклатура» базовый тип определен как «Object», все базовые типы описываются в пакете ExchangeMessage:

8

В этом пакете у базового типа объектов «Object» есть свойство «AdditionalInfo», тип которого определен как «anyType», то есть может принимать любые значения.

Это свойство мы и будем использовать для передачи дополнительного показателя «Вес».

Далее нам необходимо определить в модуле МенеджерОбменаЧерезУниверсальныйФормат обработчик правила конвертации объекта при отправке «Номенклатура» в исходной конфигурации, в этом обработчике в свойство «AdditionalInfo» поместить передаваемое значение для веса. Затем, в конфигурации-приемнике, в нашем случае это БП КОРП, также в модуле менеджера обмена найти правило при конвертации данных XDTO, используемое при получении.

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

В случае использования «1С:Конвертация данных 3.0» (КД3) можно по аналогии с «1С:Конвертация данных 2.0» (КД2) также загрузить настройки существующей синхронизации. В КД2 достаточно было иметь файл обмена, по которому можно было восстановить настройки синхронизации. Для КД3 есть похожая процедура, но она требует некоторой начальной подготовки. В конфигурации КД3 есть неплохо написанная справка, из которой можно об этом узнать, но для полноты картины приведем порядок операций здесь.

В КД3 для каждой конфигурации, конкретно в рассматриваемом случае: отдельно для КА, отдельно для БП, необходимо выполнить ряд следующих действий:

  1. Создать элемент в справочнике Конвертации в КД3.
  2. В режиме конфигуратора сохранить формат 1.6 из пакета XDTO EnterpriseData_1_6_20 во внешний файл с расширением «xsd».
    9

    Затем загрузить схему обработкой «Загрузка структуры формата» из раздела «Формат данных» в КД3.

  3. В режиме конфигуратора выгрузить текст модуля МенеджерОбменаЧерезУниверсальныйФормат для КА, МенеджерОбменаЧерезУниверсальныйФормат13 для БП КОРП в текстовый файл.
  4. С помощью обработки, распакованной при установке шаблона КД3 по адресу \tmplts\1c\Conversion\3_0_5_3\ epf в режиме 1С:Предприятие выгрузить структуру метаданных конфигурации. После выгрузки загрузить полученный файл обработкой «Загрузка структуры конфигурации», которая находится в разделе «Конфигурации» КД3.
  5. С помощью обработки, распакованной при установке шаблона КД3 по адресу \tmplts\1c\Conversion\3_0_5_3\ Выгрузка правил синхронизации.epf в режиме 1С:Предприятие выгрузить настройки синхронизации в отдельную папку.При выгрузке необходимо указать формат, в нашем случае это 1.6.
  6. Загрузить обработкой «Загрузка правил синхронизации из файлов» из раздела «Конвертации» КД3 файлы из пункта 5, указав папку в поле «Каталог обмена». А также текст модуля из пункта 3, который надо будет указать в поле «Файл с модулем менеджера».

Если все сделано правильно, то в КД3 должно появиться, по крайней мере, две конвертации, одна для КА, вторая для БП.

10

Двойным щелчком по конфигурации открываются настройки правил обмена с заполненными правилами для  её объектов.

Откроем настройки комплексной автоматизации, вкладка «Правила конвертации объектов», в списке можно поискать по слову «номенклатура» в колонке «Идентификатор правила». Нас интересует отправка, откроем найденное правило двойным щелчком.

11

В правиле перейдем на вкладку «При отправке».

12

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

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

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

Код для добавления в расширение будет следующим:


     &После("ПКО_Справочник_Номенклатура_Отправка_ПриОтправкеДанных")

     Процедура ВесНоменклатуры_Выгрузка(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)

 

     Если ЗначениеЗаполнено(ДанныеИБ.ВесИспользовать) Тогда

                   Если ДанныеИБ.ВесИспользовать И ЗначениеЗаполнено(ДанныеИБ.ВесЧислитель) Тогда

 

                                лЗнаменатель = ?(ЗначениеЗаполнено(ДанныеИБ.ВесЗнаменатель),ДанныеИБ.ВесЗнаменатель,1);

 

                                лЗнаменатель = ?(лЗнаменатель=0,1,лЗнаменатель);

                               лНоменклатураВес = ДанныеИБ.ВесЧислитель/лЗнаменатель;

 

                               Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда

 

                               ДопДанные = ДанныеXDTO.AdditionalInfo;

                         Иначе

                              ДопДанные = Новый Структура;

                        КонецЕсли;

                       

                       ДопДанные.Вставить("НоменклатураВес", лНоменклатураВес);

                       ДанныеXDTO.Вставить("AdditionalInfo", ДопДанные);

 

            КонецЕсли;

      КонецЕсли;

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


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

Для базы-приемника, в нашем случае это БП КОРП, еобходимо найти в настройке конвертации такую же вкладку «Правила конвертации объектов», в списке, аналогично КА, выполнить поиск по  наименованию «номенклатура». В этом случае нас интересует получение. Откроем правило «Справочник_Номенклатура_Получение» также двойным щелчком.

13

В настройках правила нам нужна вкладка «При конвертации данных XDTO».

14

Соответственно, в конфигурации БП КОРП в модуле менеджера обмена имя обработчика будет ПКО_Справочник_Номенклатура_Получение_ПриКонвертацииДанныхXDTO.

По аналогии с КА вынесем изменения в отдельное расширение модуля в БП.

Также добавляем следующий код в расширение модуля МенеджерОбменаЧерезУниверсальныйФормат13 после выполнения основного обработчика.


          &После("ПКО_Справочник_Номенклатура_Получение_ПриКонвертации

ДанныхXDTO")

          Процедура ВесНоменклатуры_Загрузка(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена)

 

          Если ДанныеXDTO.Свойство("AdditionalInfo") И

ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда

 

                             ДопДанные = ДанныеXDTO.AdditionalInfo;

 

                            Если ДопДанные.Свойство("НоменклатураВес") Тогда

                                     лЗначениеВес = ДопДанные.НоменклатураВес;

       

                                    Если

ПолученныеДанные.ДополнительныеСвойства.Свойство("ДополнительныеРе

квизиты") Тогда

 

                                                               лМассивДопРеквизиты                               =

ПолученныеДанные.ДополнительныеСвойства.ДополнительныеРеквизиты;

 

                                   Иначе

                                                              лМассивДопРеквизиты = Новый Массив;

                                   КонецЕсли;

 

                                 лТипЗначенияXDTO                                                                  =

ФабрикаXDTO.Тип("http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.6"

"СправочникСсылка.ДополнительныеРеквизиты");

 

                                лСтруктураСсылка = Новый Структура;

                                лСтруктураСсылка.Вставить("ЭтоСсылка"           ,Истина);

                                лСтруктураСсылка.Вставить("ЭтоПеречисление"    ,Ложь);

                                лСтруктураСсылка.Вставить("ТипЗначенияXDTO"  

,лТипЗначенияXDTO);

                                лСтруктураСсылка.Вставить("Значение"           ,"a57e7d38-

ea24-11e7-8147-00155d280c00");

 

                                лСтурктураСвойства = Новый Структура;

                                лСтурктураСвойства.Вставить("ЭтоНаборКлючевыхСвойств"

,Неопределено);

                                лСтурктураСвойства.Вставить("ТипЗначения"

,"ДополнительныеРеквизиты");

                                лСтурктураСвойства.Вставить("Наименование"

,"Вес, кг");

                                лСтурктураСвойства.Вставить("Ссылка"

,лСтруктураСсылка);

                                лСтурктураСвойства.Вставить("Это

ДополнительноеСведение",Ложь);

 

 

                                лСтруктура = Новый Структура;

                                лСтруктура.Вставить("Свойство",лСтурктураСвойства);

                                лСтруктура.Вставить("Значение",лЗначениеВес);

 

                               лМассивДопРеквизиты.Добавить(лСтруктура);

 

           КонецЕсли;

     КонецЕсли;

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


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

Осталось добавить расширения к КА и к БП и проверить выгрузку.

При выгрузке результат того, что дополнительные данные выгружаются в файл обмена можно посмотреть в самом файле обмена. Если все сделано правильно, то в сообщении обмена можно увидеть для узлов объектов справочника «Номенклатура» дополнительную структуру «AdditionalInfo» с нашим передаваемым значением «НоменклатураВес».

15

Описанным выше образом можно решить поставленную задачу доработки типового обмена на «1С.Конвертация данных 3.0» с использованием формата EnterpriseData, досконально не погружаясь в изучение как самой конвертации версии 3, так и нового формата.

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

 

Обсудить

Вас может заинтересовать

Зачастую в компании, которая уже работает в системе «1С:ERP Управление предприятием» (или «1С:Комплексная автоматизация», или «1С:Управление торговлей») или только собирается ее внедрить, возникают вопросы:
О бизнес-процессах, что такое BPM Разговаривать о процессном подходе, методологии BPM и нотации BPMN невозможно без понятия бизнес-процесса.
Законодательство РФ меняется достаточно быстро, за последнее время был принят ряд законов, оказывающих существенное влияние на деятельность предприятий в стране. Сложность быстрого реагирования на вносимые изменения обусловлена многими факторами:
Данная статья является размышлениями автора на тему необходимости, целесообразности и обоснованности применения автоматизированных тестов, чем погружением в то, как именно их применять.
Подсистема складского учета в программном продукте «1С.Комплексная автоматизация 2» позволяет работать с моделью ордерного склада и использовать адресную схему хранения. С ее помощью появляется возможность реализовать следующие требования:
right-arrow share search phone phone-filled menu filter envelope envelope-filled close checkmark caret-down arrow-up arrow-right arrow-left arrow-down