1С:Шина. Пример сихронизации справочника

26.07.23

Интеграция - Обмен между базами 1C

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

Действия на стороне 1С:Шина  

Для начала создадим проект, в моем случае это "Тест3". Не забудьте активировать поле "Создать приложение для разработки".


 

После создания проекта, переходим во вкладку "Приложения". Там мы увидим, созданное нами приложение с названием схожим с нашим проектом, а приложение для разработки будет иметь окончание -dev.

Для начала разработки необходимо перейти в среду разработки 1с:Шина, для этого откройте наше приложение и нажмите кнопку "Разработка".

 

  

После авторизации нам станет доступна внутренняя среда разработки 1С:Шина. Чтобы добавить процесс интеграции, необходимо нажать правой кнопкой мыши по вкладке "Основной" в дереве и в выпадающем списке выбрать пункт "Новый"->"Элемент проекта".

 

 

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

Далее необходимо нарисовать схему интеграции (ниже указал свою). Для данного примера были использованы "Группа пользователей", "Канал1СИсточник" и "Канал1СНазначение".

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

В нашем приложении мы увидим новый процесс*. (*моё приложение уже работает, поэтому у него уже имеются входящие и исходящие сообщения)

 

 

На данном этапе переходим в "Инфосистемы" и добавляем двух участников нашего процесса (для каждого из них, необходимо нажатием на клавишу, получить ключи API и сохранить их в отдельное место, например блокноте). 

 

 

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

 


Действия в конфигурациях наших баз

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

В обоих конфигурациях следует сделать аналогичные операции:

  1. Создадим расширение, в котором будем тестировать наш обмен. Необходимо поставить галочки, как указано ниже.


     
  2. Далее добавляем в "Общее"->"Сервисы интеграции" необходимо добавить новый сервис интеграции (для понимания процесса я создал 2, чтобы разделить отправку и получение).

     
  3. Далее с помощью наших ключей API для данной базы, получим каналы, как на скриншоте ниже. Для сервиса Интеграции, который мы будем использовать для получения, необходимо оставить галочку только на том канале, который связан с данной базой. Аналогично для сервиса по отправке сообщений.


     
  4. Создадим Справочник *ИмяРасширения*_Справочник1, который и будет синхронизовывать.


     
  5. Создадим общий модуль, где опишем обработку получения сообщений:


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


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


     
    Процедура ОтправкаСообщенияПриЗаписиСправочника(Источник, Отказ) Экспорт
    
    	Если Источник.ОбменДанными.Загрузка тогда
    		Возврат;
    	КонецЕсли;
    	
    	Если ТипЗнч(Источник) = Тип("СправочникОбъект.Сергей_Справочник1") тогда
    		
    		Сообщение = СервисыИнтеграции.Сергей_СервисИнтеграции2.СоздатьСообщение();
    		Сообщение.КодПолучателя = "t0";
    		Тело = Сообщение.ПолучитьТелоКакПоток();
    		
    		ЗаписьXML = Новый ЗаписьXML();
    		ЗаписьXML.УстановитьСтроку();
    		СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Источник);
    		
    		СтрокаXML = ЗаписьXML.Закрыть();
    		Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки(СтрокаXML);
    		Тело.Записать(Буфер, 0, Буфер.Размер);
    		Тело.Закрыть();
    		
    		Сообщение.Параметры.Вставить("РазмерСообщения", Буфер.Размер);
    		СервисыИнтеграции.Сергей_СервисИнтеграции2.Основной_TestToTest_Канал1СИсточник2.ОтправитьСообщение(Сообщение);
    		
    		СервисыИнтеграции.ВыполнитьОбработку();	
    	КонецЕсли;    
    	
    КонецПроцедуры
  8. Добавим ПодпискуНаСобытие, при которой будем посылаться сообщение


     
  9. Последним шагом будет создание обработки, которая будет запускать обработку сообщений


     
  10. Все данные действия необходимо повторить во второй конфигурации.
     
  11. После этого необходимо на клиенте активировать сервисы интеграции. Для этого воспользуемся стандартной обработкой "Управление сервисами интеграции"


 

Пример отправки и получения сообщений

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

Начальное состояние шины



 

Состояние справочника в двух базах



Создание элемента справочника




Запуск обработки во второй базе



Элемент в обеих базах




Отредактируем элемент во второй базе и увидим его изменения в первой




 

Состояние шины после обмена сообщениями




Заключение

Очень надеюсь, что данный пример будет кому-то полезен и сэкономит для кого-то большую, а для кого-то, может, и небольшую часть рабочего времени ;)

См. также

SALE! 10%

Перенос данных из УПП 1.3 в ERP 2 / УТ 11 / КА 2

Обмен между базами 1C Платформа 1С v8.3 1С:Управление производственным предприятием Россия Платные (руб)

Продано более 270 раз! Обработка позволяет перенести из УПП в ERP / 1С:УТ 11 / КА 2 всю возможную информацию. Переносятся документы, а также начальные остатки и справочная информация. Типовая обработка от фирмы 1С не позволяет сохранить документы за период работы. Кроме того, наши алгоритмы выгрузки начальных остатков тоже имеют больше функционала и тщательно проверялись на реальных проектах перехода с УПП на ERP. Наша разработка будет полезна как фирмам-франчайзи, которые периодически выполняют перенос данных для заказчиков, так и организациям, самостоятельно выполняющим проект по переходу. При приобретении обработки вы будете четыре месяца получать ее обновления, далее можно приобрести подписку на обновления. Конфигурации 1С постоянно меняются, выходят новые релизы. Имея подписку на обновления, вы всегда можете быть уверены, что правила конвертации данных будут работать на ваших базах 1С.

50722 45650 руб.

04.08.2015    155955    289    263    

331

SALE! 10%

Перенос данных из УПП 1.3 / КА 1.1 в БП 3.0

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

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

43889 39500 руб.

25.02.2015    166999    284    236    

367

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    131794    688    290    

379

SALE! 10%

Перенос данных из УПП 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.215.x) и БП 3.0 (3.0.144.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    18273    114    36    

69

SALE! 10%

Перенос данных из ERP 2 / КА 2 в ЗУП 3

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

Наша обработка позволяет не только перенести все документы, справочную информацию и начальные остатки из ERP 2 или КА 2 в ЗУП 3, но и организовать регулярный перенос данных между программами 1С:ERP 2 / КА 2 и 1С:ЗУП 3. Вы можете выбрать период отбора данных и установить фильтр по организациям, чтобы выгружать только необходимую информацию. Более того, перенос оперативно обновляется при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

48278 43450 руб.

03.12.2020    32729    70    56    

71

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2 (ЕРП 2)

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

Предлагаем вам качественное и проверенное временем решение для перехода с УТ 10.3 на УТ 11 / КА 2 / ERP 2. Перенос данных находится в продаже с 2015 года, постоянно развивается, им воспользовались уже более 240 компаний. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    188279    264    235    

267

SALE! 10%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0

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

Перенос позволяет настроить собственный обмен данными между указанными программами, альтернативный предлагаемому фирмой 1С. Перенос данных осуществляется из 1С:ERP 2 / 1С:КА 2 / 1С:УТ 11 в 1С:БП 3.0. Правила обмена оперативно обновляются при выходе новых релизов программы 1С, так что вы всегда будете иметь самую актуальную версию обработки.

38500 34650 руб.

15.04.2019    66176    164    131    

97

SALE! 10%

Перенос данных из УТ 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.85.x) и УТ 11.5 (11.5.15.x).

28000 25200 руб.

23.07.2020    43367    185    63    

138
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. yaryshevsergey 27.07.23 14:02 Сейчас в теме
Интересно как будет работа с таблицей значений если таковая есть в справочнике
serezh1a; +1 Ответить
2. dsdred 2811 27.07.23 14:15 Сейчас в теме
(1)Как напишете так и будет.
Это же просто пример. Вы если будете внедрять шину скорее всего не так сделаете, но тут дана база.
Она же правда есть и в примерах документации к Шине.
3. kembrik 9 27.07.23 17:45 Сейчас в теме
(2) Чтобы ознакомиться с документацией надо либо шину за 100к купить либо NFR так что статья хорошая в плане интересующимся показать "а что она умеет например и как это реализовано"
user1921757; serezh1a; +2 Ответить
4. dsdred 2811 27.07.23 17:50 Сейчас в теме
(3)я же не против, я примерно об этом и написал в комментарии: -"базу" показали. Я даже плюсанул статью.
user1921757; serezh1a; +2 Ответить
5. laperuz 45 28.07.23 05:50 Сейчас в теме
(3)Разве документация на ИТС доступна только после покупки шины?
https://its.1c.ru/db/metod8dev#content:5998:hdoc:_top:1%D1%81%20%D1%88%D0%B8%D0%BD%D0%B0
7. kembrik 9 28.07.23 09:33 Сейчас в теме
(5) Слона то я и не приметил, спасибо) Тут конечно не документация но примеры настройки в достаточном количестве
serezh1a; +1 Ответить
6. siamagic 28.07.23 07:16 Сейчас в теме
не описанно главное отличие от банального обмена по шттп сервису - можно слать сообщения в разные базы и настраивать пути.
Из примера складывается впечатление что шина вообщем то и не нужна.
Andreyyy; Neuroproton; pm74; +3 Ответить
8. sonGodv 43 28.07.23 13:45 Сейчас в теме
(6) С помощью шины можно мониторить и управлять очередями сообщений. Очереди, Доставленные, Недоставленные и т.д.
9. gybson 31.07.23 12:27 Сейчас в теме
Роль шины осталась совершенно нераскрытой.
10. serezh1a 74 31.07.23 16:16 Сейчас в теме
(9) Я вроде не описывал механизмы обмена или возможности шины, а лишь показал пример синхронизации
Merkalov; EugeneMaliy; user1928717; sbmkr1c; +4 Ответить
11. RedAllert 17.08.23 18:12 Сейчас в теме
Я рассматриваю сейчас вариант ее использования. Как шлюз гарантированной доставки сообщений между различными системами. Особенно с системами, которые не умеют в регистрацию изменений.
У меня это уже становится реальной проблемой, так как на одной базе висит до 30 обменов от веб\http-сервисов до стандартных и не очень..
Особенно в преддверии того, что мне светит интеграция с ЭЛМА365.
serezh1a; +1 Ответить
Оставьте свое сообщение