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. После этого необходимо на клиенте активировать сервисы интеграции. Для этого воспользуемся стандартной обработкой "Управление сервисами интеграции"


 

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

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

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



 

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



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




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



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




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




 

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




Заключение

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

См. также

[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    135959    731    291    

393

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    160922    357    268    

349

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    69144    181    139    

111

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    232688    126    327    

298

Перенос данных из УПП 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    20778    136    38    

95

Перенос данных из УТ 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    47074    201    64    

162

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    34601    83    58    

81

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    68008    41    123    

46
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yaryshevsergey 27.07.23 14:02 Сейчас в теме
Интересно как будет работа с таблицей значений если таковая есть в справочнике
serezh1a; +1 Ответить
2. dsdred 3335 27.07.23 14:15 Сейчас в теме
(1)Как напишете так и будет.
Это же просто пример. Вы если будете внедрять шину скорее всего не так сделаете, но тут дана база.
Она же правда есть и в примерах документации к Шине.
3. kembrik 10 27.07.23 17:45 Сейчас в теме
(2) Чтобы ознакомиться с документацией надо либо шину за 100к купить либо NFR так что статья хорошая в плане интересующимся показать "а что она умеет например и как это реализовано"
user1921757; serezh1a; +2 Ответить
4. dsdred 3335 27.07.23 17:50 Сейчас в теме
(3)я же не против, я примерно об этом и написал в комментарии: -"базу" показали. Я даже плюсанул статью.
user1921757; serezh1a; +2 Ответить
5. laperuz 46 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 10 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 79 31.07.23 16:16 Сейчас в теме
(9) Я вроде не описывал механизмы обмена или возможности шины, а лишь показал пример синхронизации
Merkalov; EugeneMaliy; user1928717; sbmkr1c; +4 Ответить
11. RedAllert 17.08.23 18:12 Сейчас в теме
Я рассматриваю сейчас вариант ее использования. Как шлюз гарантированной доставки сообщений между различными системами. Особенно с системами, которые не умеют в регистрацию изменений.
У меня это уже становится реальной проблемой, так как на одной базе висит до 30 обменов от веб\http-сервисов до стандартных и не очень..
Особенно в преддверии того, что мне светит интеграция с ЭЛМА365.
serezh1a; +1 Ответить
Оставьте свое сообщение