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%

Перенос данных 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    143318    821    297    

428

SALE! 10%

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

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

55778 50200 руб.

04.08.2015    168352    344    279    

380

SALE! 10%

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

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

35000 31500 руб.

23.07.2020    53406    236    73    

192

SALE! 10%

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

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

35000 31500 руб.

15.12.2021    24819    174    51    

132

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    37239    99    66    

95

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    81561    324    253    

276

SALE! 10%

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

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

48278 43450 руб.

25.02.2015    172008    307    258    

384

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 8 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

120000 руб.

19.08.2020    25689    25    1    

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