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    148399    864    302    

454

Перенос данных 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.21.x).

35000 руб.

23.07.2020    58725    284    75    

224

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

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

35000 руб.

15.12.2021    27813    198    58    

152

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

16260 руб.

18.02.2016    191068    625    536    

544

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    175072    317    267    

387

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    39676    112    73    

106

SALE! 10%

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

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

55778 50200 руб.

04.12.2015    194186    253    351    

409

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

Продукт "Интеграция с 1С:Документооборот" позволяет использовать функции программы "1С:Документооборот 8" напрямую из учетной системы (1С:УПП; 1С:КА, 1С:УТ 10.3, 1С:БГУ 1.0, 1С:ЗБУ 1.0, 1С:УПП для Казахстана и отраслевых решений, разработанных на их основе) на платформе "1С:Предприятие 8": выполнять и ставить задачи, просматривать документы, скан-копии и прочие файлы, штрих-кодировать документы отправлять письма, вести учет рабочего времени - не входя в "1С:Документооборот 8", работая в одной программе, что значительно сокращает время и делает работу более комфортной и эффективной. Продукт прошел сертификацию 1С-Совместимо

110400 руб.

11.06.2015    59168    38    20    

47
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yaryshevsergey 27.07.23 14:02 Сейчас в теме
Интересно как будет работа с таблицей значений если таковая есть в справочнике
serezh1a; +1 Ответить
2. dsdred 3941 27.07.23 14:15 Сейчас в теме
(1)Как напишете так и будет.
Это же просто пример. Вы если будете внедрять шину скорее всего не так сделаете, но тут дана база.
Она же правда есть и в примерах документации к Шине.
3. kembrik 22 27.07.23 17:45 Сейчас в теме
(2) Чтобы ознакомиться с документацией надо либо шину за 100к купить либо NFR так что статья хорошая в плане интересующимся показать "а что она умеет например и как это реализовано"
user1921757; serezh1a; +2 Ответить
4. dsdred 3941 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 22 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 188 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: Р. пытаясь переварить именно этот параметр. Убил пару дней на, разборки, тьху!
user1552405; +1 Ответить
Оставьте свое сообщение