1С:Шина нам нужна для того, чтобы интегрироваться с разными информационными системами и не особо напрягаться при этом – делать настройку обмена на уровне low-code.
В самой шине существует три интерфейса:
-
Первый интерфейс – панель управления проектами, приложениями, которые мы делаем.
-
Второй интерфейс – интерфейс разработки, WEB IDE.
-
И третий интерфейс – для управления самим приложением, потому что, когда мы создали приложение, нам его нужно, естественно, настроить.
Теперь рассмотрим их поподробнее.
На слайде показано, как выглядит панель управления нашими приложениями – в ней мы их создаем, настраиваем, администрируем и все остальное.
Когда мы добавляем новое приложение, оно у нас отображается в таблице. И для каждой строки в этой таблице отображается две ссылки:
-
По ссылке в колонке «Разработка» открывается WEB IDE.
-
По ссылке в колонке «URL» открывается просто ваше приложение, если оно уже разработано.
Второй интерфейс – это WEB IDE. В нем вы будете все делать, настраивать.
WEB IDE очень похожа на конфигуратор, она имеет типичный интерфейс 1С:
-
слева – дерево метаданных;
-
справа – свойства;
-
посередине – все остальное.
Для тех, кто уже видел 1С:Элемент, здесь вообще нового ничего не будет, потому что WEB IDE одинаковая что для 1С:Шины, что для нового 1С:Элемента.
Следующий интерфейс – это приложение. Тут мы настраиваем нашу интеграцию.
В приложении 1С:Шина у нас есть несколько подсистем:.
-
Процессы – это то, что мы создали;
-
Инфосистемы – это то, с чем мы будем интегрироваться.
То, что показано на скриншоте – это уже сломанные мной подсистемы. Я пытался создать что-то новое, но у меня не получилось – тут видно две лишних подсистемы «Information systems» и «Users».
На самом деле оно должно выглядеть так, как на этом слайде.
А почему у меня не получилось создать подсистемы, я сейчас расскажу.
Проблемы, с которыми столкнулись при разработке
Дело в том, что когда я начал разбираться в 1С:Шине, я взял ее самую первую версию – которая только что вышла. Тогда информации о том, как ей пользоваться, не было от слова совсем.
Всё, что у меня было – это инструкция от 1С, которая меня иногда тоже вгоняла в печаль.
Однажды, когда я её читал, я дошёл до балансировщика нагрузки. Там я увидел, что балансировка производится через генератор случайных чисел. Для меня это было немного шоком, но я это опустил.
Следующее, что в этой инструкции тоже было не совсем правильно – там описывались все объекты, которые существуют в вашем дереве. Но проблема в том, что эти объекты относятся к новому 1С:Элементу. Они из вашей WEB IDE не вырезаны, но пользоваться ими вы не можете. Таким образом, я создал несколько подсистем, попробовал их отобразить, и вы сами видели, что из этого получилось.
Еще один минус, вытекающий из инструкции, связан с тем, что в работе 1С:Шины многое неочевидно.
Первым делом я, как типичный программист, естественно, пошёл в бой без чтения инструкции. Более того, инструкции у меня с самого начала не было. Это сейчас инструкцию по 1С:Шине можно найти на ИТС, она там в отдельной главе – у всех всё доступно. Но вначале этого не было – инструкция появлялась уже после установки 1С:Шины, когда в инсталлере появляется ссылка на документацию, которая устанавливается локально в виде веб-страниц.
Я попытался поставить 1С:Шину на сервер, который работает под Astra Linux. Но запустить WEB IDE я не смог – он у меня постоянно зависал на 75% и просто не прогружался дальше. Оказалось, что поддерживаемый список ОС совсем небольшой, и на текущий момент Astra Linux не поддерживается. Хотя это странно, потому что Astra Linux – это отечественный софт, который нужно поддерживать, особенно в текущих обстоятельствах.
В итоге я просто поставил 1С:Шину к себе на локальный компьютер, который работает под Windows 10, и работал с этим. Т.к. сетка у меня локальная, мне этого было достаточно, чтобы поэкспериментировать.
Когда я уже начал разрабатывать, запустил 1С:Шину и настроил ее под себя, я столкнулся с падением при выполнении обмена через расширение.
Я разрабатываю для облака, построенного по технологии 1cFresh. И мне нужно было реализовать через 1С:Шину обмен для типовой облачной конфигурации на поддержке, где есть несколько областей данных. Я не хотел её снимать с поддержки, включать изменения, а просто хотел сделать доработку по-быстрому через расширение.
В результате, когда у меня начинали выполняться задания, у меня постоянно сыпались ошибки в журнал регистрации о том, что не найдены какие-то таблицы. Скорее всего, это связано с каким-то разделением, с которым расширение просто не подружилось.
Но когда я решил поэкспериментировать – снял конфигурацию с поддержки и попробовал добавить это в саму конфигурацию – всё завелось «на ура».
То есть вне зависимости от того, разделённая база или неразделённая, в конфигурации обмен точно будет работать. А с расширениями, возможно, будут проблемы.
При работе с WEB IDE важно, что отладка там будет происходить только в том случае, если у вас установлен плагин в браузере.
Вам не придется гуглить, какой плагин установить. Когда вы будете запускать WEB IDE, у вас будет отображаться, что вам понадобится такой-то плагин, его нужно установить.
И, опять же, по системным требованиям стоит учесть, что не все браузеры поддерживаются для WEB IDE. В инструкции есть только четыре браузера:
-
Google Chrome;
-
Mozilla Firefox;
-
Microsoft Edge;
-
Safari.
Это тоже стоит учитывать, потому что где-то, возможно, у вас отладка не заведётся, либо что-то будет работать не так, как вам нужно.
Пример простого обмена данными в сервисе
Перейдём к решению задач – я вам расскажу, какие задачи я попробовал решить при помощи 1С:Шины. Их было всего две:
-
Первая задача очень простая – я просто экспериментировал, чтобы научиться пользоваться Шиной.
-
А вторая уже более сложная.
Сейчас я вам про них расскажу.
Первая задача – у нас есть две абсолютно разные конфигурации, в каждой из которых мы создали справочник с одинаковой структурой. Эти справочники полностью идентичны. И нам нужно, чтобы в них синхронизировались элементы. Для этой цели я решил попробовать использовать 1С:Шину.
Первым делом вам в дереве метаданных 1С:Шины нужно будет создать процесс интеграции. Это такой процесс, который будет управлять вашим обменом: что-то куда-то направлять, и вы там будете какие-то блоки сами выстраивать.
Этот процесс интеграции нужно будет настроить.
На слайде можно видеть два синих блока – это наши информационные системы, откуда данные должны прийти, и куда они должны прийти.
Другие четыре блока – это каналы общения, то есть процессы, которые должны происходить.
Тут еще в дереве есть некоторые элементы – каждый отвечает за свое.
На каждую информационную систему получилось по два процесса:
-
первый процесс – отправка;
-
второй процесс – получение.
Из одной информационной системы создаются сообщения для отправки. Потом они обрабатываются шиной, отправляются в процесс получения, который отправляет их в базу. Сейчас мы более подробно разберем, как это сделано.
Мы создали процесс. Теперь его нужно настроить, потому что сам по себе он не заведется.
Для настройки мы переходим в приложение, где у нас сразу на начальном экране будут отображаться все процессы, которые мы создали – сколько вы процессов интеграции создадите, столько тут и будет.
Тут по отборам можно посмотреть, какие процессы у вас запущены, а какие стоят на паузе, потому что необязательно, чтобы все ваши процессы работали, их можно останавливать интерактивно.
Чтобы настроить процесс, на него нужно нажать, и у нас откроется следующее окно, где будет отображаться схема процесса, а также некоторые метрики:
-
сколько сообщений было отправлено;
-
сколько сообщений было принято;
-
сколько ожидает обработку.
Также тут есть логирование и все остальное.
Чтобы настроить схему, нам нужно немного поработать с диаграммой. Для этого мы тыкаем на любой блок – в данном случае мы сейчас на одном из блоков информационных систем. И справа у нас отобразится состав группы – какие информационные системы вам нужны для обмена: куда будут уходить данные, и откуда будут уходить данные.
Состав группы может быть произвольным. Систем в группе может быть очень много или мало. Может быть даже одна, как в моем случае. Но их, естественно, тоже нужно создать в нашем приложении.
Для определения систем, которые будут обмениваться данными, используется вторая подсистема – «Информационные системы».
Тут мы создаем наши системы. Мы можем их называть как угодно, коды можем задавать какие угодно – это непринципиально.
Также здесь вы сможете посмотреть, в каком процессе эта информационная система участвует – куда вы ее уже добавили.
Самое важное в интерфейсе информационной системы – это выдать ключи API, которые вам понадобятся в будущем для интеграции. Они используются вместо связки логина/пароля.
При нажатии на кнопку «Выдать ключ API» у вас отобразится окошко с вашими ключами.
Советую сразу сохранять ключи API к себе, потому что при повторном открытии этой формы они будут сбрасываться и появляться новые. Т.е. при каждом сбросе вам нужно будет зайти в конфигуратор и по новой ввести в нем ключ интеграции в качестве логина пользователя – это не очень выгодно. Поэтому сразу – открыли, сохранили, и все, пошли дальше.
Справа на слайде показан сервис интеграции, который я создал в конфигураторе. Тут мы через кнопку «Действия» можем выбрать команду «Загрузить каналы» и подгрузить все созданные нами каналы для получения и отправки. Они нам обязательно понадобятся, потому что они обрабатываются в конфигураторе.
По шине мы ключи API получили, сохранили – и с 1С:Шиной мы здесь по факту заканчиваем. Дальше нам остается только это все настроить в конфигураторе.
В конфигураторе мы создаем «Сервис интеграции», получаем каналы по кнопке «Действия» – «Загрузить каналы» – «Загрузить».
После загрузки в объекте метаданных «Сервис интеграции» автоматически появляются каналы (процессы интеграции). Они автоматически настраиваются – все свойства заполняются.
Каналы в объекте можно создать вручную, но я настоятельно не рекомендую этого делать. Как-то раз я попытался создать их вручную, и они у меня просто не завелись. Лучше довериться автоматике, тем более, что она корректно их создает.
Помимо сервиса интеграции нам обязательно понадобятся регламентные задания, которые будут нам помогать – отправлять и получать сообщения. Шина данных сама по себе автоматически не работает, и сервис интеграции сам по себе не получает сообщения и не отправляет их – это обязательно нужно делать регламентным заданием.
Единственное, что сервис интеграции делает сам – если у вас для канала назначен какой-то обработчик получения сообщения, он его самостоятельно подхватывает.
Рассмотрим свойства процесса получения.
Процесс получения – это когда к нам что-то приходит в базу, и нам нужно это обработать.
Логично, что чтобы это все обработать, нужен какой-то минимальный код – для этого в модуле самого сервиса у нас создается обработчик получения.
Мы можем сразу поставить, чтобы код этого обработчика выполнялся в транзакции. Эта галочка гарантирует, что, если процесс упал, у вас все отменится.
Следующее – это свойства процесса отправки, когда нам нужно отправлять данные из нашей информационной системы куда-то.
Тут ничего сложного нет – мы просто создаем новые сообщения и наполняем их. По факту, этот канал нужен только для того, чтобы наполнить его сообщениями. Он наполняется, а потом регламентное задание просто все эти накопленные сообщения разом отправляет.
Если вы когда-то сталкивались с технологией 1cFresh, там используется очень похожая схема.
На слайде показан тот low-code, который вам понадобится для обработчика получения сообщения.
При отправке ваше сообщение может типизироваться. И в зависимости от типа вы можете указать разный алгоритм действий.
Здесь у меня ничего сложного – я проверяю тип сообщения, получаю из него JSON и записываю элемент в свой справочник. Это минимальное количество кода, которое нужно написать.
Пример разрабатываемого механизма для сбора данных с областей данных БГУ и ЗКГУ
Перейдем ко второй задаче, которая уже посложнее.
Здесь так же фигурирует наша база 1С:БГУ, опубликованная в облаке по технологии 1cFresh. У нее много областей данных, и нам нужно собирать с этих областей данные, чтобы делать отчеты – мы хотим видеть информацию сразу по всем.
Если кто-то сталкивается с 1С:Фреш, он знает проблему: чтобы получить данные в одной области, нужно будет зайти в нее, посмотреть, выйти, зайти в другую и так далее. А нам нужно было собрать нашу информацию разом со всех областей данных и превратить в отчет.
Раньше мы собирали этот отчет через менеджер сервиса, отправляя запросы в каждую область данных. Эти запросы собирали данные и сохраняли результат в файлы. И дальше уже данные из всех сохраненных файлов мы компоновали в один.
Но когда областей данных у нас стало слишком много, возникла проблема. Потому что когда мы одновременно формировали к ним запросы, они одновременно пытались сохранять наши данные. Менеджер файлов с такой нагрузкой не справлялся и падал, прерывая процесс.
Поэтому мы решили попробовать это все запихать в 1С:Шину – просто протестировать, получится ли работать через нее, и насколько хорошо оно будет работать.
Схема обмена очень сильно похожа на прошлую. Здесь практически ничего не поменялось, добавилась только одна прослойка в виде обработки данных.
Что здесь происходит?
-
Из общего центра обслуживания отправляется запрос к БГУ, где запрашиваются данные по всем областям данных.
-
Он падает в обработчик, который собирает данные – при запросе мы указываем, по каким именно областям данных собрать.
-
И обработчик начинает собирать сообщение по всем областям данных БГУ и формирует это все в шине в одну XML – причем формируется не файлик, а просто текст XML.
-
После того как обработчик обошел все эти области, он отправляет этот текст обратно в нашу базу.
-
Мы его сохраняем в файл и живем с этим.
Итого, мы сократили сохранение тысячи файлов всего лишь в один. При этом мы еще и не нагружаем эту базу в модели сервиса. Сервис уже сам по себе нагруженный, ему еще нужно работать – там тысяча областей, миллионы пользователей и все остальное.
Благодаря тому, что мы вынесли весь код в 1С:Шину, мы разгрузили нашу информационную систему.
-
1С:Шина живет отдельно абстрагированно, создает эти сообщения не напрягаясь – сформировала одну полную XML-ку, отправила ее в базу, мы ее сохранили в файл, и все.
-
А менеджер файлов у нас спокоен, до него никто не докапывается тысячу раз.
Тут, кстати, был забавный баг. Блок у меня называется «ЗапросДанныхБГУ». По факту он уникален на схеме, но при этом шина мне говорит, что он не уникален.
Если добавить единичку, оно работает. Я не знаю, с чем это связано, я пытался удалять этот блок, создавать по новой – ни в какую не хочет работать с этим.
Стало быстрее или медленнее?
Старым методом мы получали данные до 10 минут, потому что:
-
пока отработает регламентное задание в одной нашей информационной системе, которая запрашивает данные;
-
пока отработает отправка сообщений через менеджер сервиса;
-
пока эти сообщения будут получены на стороне БГУ;
-
пока в БГУ отработает вся очередь заданий, которая нам нужна.
Это очень долгий процесс, включающий ожидание как минимум 5 регламентных заданий. А еще при этом нужно сохранить, получить и обработать – процесс достаточно нагрузочный, еще и долго выполняющийся.
В 1С:Шине же время сократилось до двух-трех минут, потому что здесь используются всего лишь два регламентных задания:
-
нам просто нужно, чтобы одно регламентное задание запросило данные;
-
сервис интеграции обработал сообщения;
-
и другое регламентное задание нам отдало данные.
Дальше вся схема работает гораздо быстрее, чем по первому подходу.
Таким образом удалось сократить время работы и получения данных. Единственное, что бухгалтер будет не рад – он не сможет чай сходить попить. Ну, извините.
Не изобретайте велосипед, а наращивайте компетенции
Какие преимущества из этого получаются?
-
Во-первых, шина может жить отдельно от всех наших информационных систем. И это хорошо.
-
Нам не нужно тратить ресурсы нашего сервера 1С, где это все живет – шина данных разгружает наш highload и делает нашу жизнь проще.
-
Для работы с 1С:Шиной нам не нужно публиковать информационные базы. Если у вас какие-то секретные суперданные, вам не нужно публиковать свою информационную базу, потому что все идет через 1С:Шину. У вас появляется прослойка, которая защищает ваши данные, потому что 1С:Шина живет отдельно, и через нее данные получить никак нельзя. Это станет для вас преимуществом по защите ваших данных.
-
Синтаксис 1С:Шины очень близок к синтаксису платформы 1С. Это тот же русский язык, просто методы немного переименованы. Но, почитав синтакс-помощник, можно будет полностью разобраться в том, как работает 1С:Шина и как в ней кодить. Это не потребует больших затрат времени и сил.
-
И самое главное преимущество – это то, что 1С:Шина автоматически интегрируется с платформой 1С. Вам не нужно изобретать какие-то велосипеды, писать новое API для интеграции с другой шиной, что-то настраивать. Все компоненты обмена у вас уже существуют. Все, что вам нужно сделать – это просто установить шину, настроить ее и создать компоненты в 1С. Все.
Недостатки, естественно, тоже есть. Но я смог выделить только один недостаток – чтобы работать с 1С:Шиной, нужны компетенции.
Но, опять же, в связи с опытом, который все равно нарабатывается, компетенции у вас появятся. Пройдет не так много времени, и вы сможете адекватно управлять шиной.
Естественно, в недостатки можно было написать и больше, но почему я не написал?
-
Потому что за любую серьезную шину нужно платить деньги – это очевидно.
-
Если вы выберете шину open source, вам нужно будет найти программиста, который будет ее настраивать – чтобы оплатить такого программиста, уйдет куча денег. А еще потом нужно будет заплатить программисту 1С, который напишет интеграцию с этой шиной. Это просто колоссально. А самая минимальная версия 1С:Шины данных стоит 100 тысяч рублей – это сто пользовательских лицензий. Другие шины нужно оплачивать по годовой подписке – вам каждый год придется платить деньги. А здесь вы заплатили один раз и пользуетесь всю оставшуюся жизнь. Поэтому по релевантности 1С:Шина побеждает.
-
Для работы с шиной нужна отдельная машина. Но это, опять же, нельзя отнести к недостаткам, потому что любой шине нужен отдельный сервер либо отдельная машина, потому что нежелательно совмещать серверы в одном месте.
-
Ну и вообще, 1С:Шина – это достаточно молодой продукт, который вышел только в 2022 году. У нее еще большое будущее. Она будет развиваться, будет совершенствоваться. И я думаю, она нас всех еще не раз порадует.
Вопросы
Вы сказали, что база у вас лежит во фреше. А шина тоже во фреше лежит?
Шина по умолчанию не может лежать во фреше.
А фреш вы используете какой-то свой, локальный?
Для разработки у нас локальный. Естественно, у заказчиков свой фреш.
Шина взаимодействует с фрешом через интернет?
Да, но она может хорошо работать и через локальную сеть.
Я уже говорил, что не смог развернуть 1С:Шину на сервере с Astra Linux, и развернул ее на своем компьютере. Но компьютер-то у меня в локальной сети находится. И все спокойно интегрируется. То есть не обязательно, чтобы 1С:Шина была опубликована именно в интернете, она может быть развернута и у вас на сервере.
А в проде вы как-то защищаете шину от интернета?
Это уже не моя компетенция. Я только разработчик.
Когда вы показывали первую реализацию, вы сообщение JSON клали в параметр. Когда вы говорили о второй реализации, вы говорили, что сообщение передается текстом, но не в теле сообщения.
В 1С:Шине нет такого понятия как тело сообщения – это просто параметр, который передается.
Нет, там тело есть. Я уточню – если посмотреть то, что опубликовали как рекомендации разработчики 1С:Шины, там есть такой момент, что они обращают внимание на проверку размера принятого сообщения. И если оно не соответствует размеру, то возникает исключительная ситуация. Бывали ли у вас случаи, что сообщения не доходили? Особенно с учетом интернета.
В нашем случае проблем не было. На тестовых стендах по крайней мере. У нас вроде доставлялось все хорошо, но думаю, что это стоит проверить.
С какой версии 1С возможна интеграция с 1С:Шина? Поддерживает ли она какие-то более старые версии, например, 8.3.9 и меньше?
Судя по рекомендациям ИТС, нужна как минимум версия 8.3.20.
Какие у 1С:Шина есть возможности интеграции с другими шинами и с другими приложениями?
По умолчанию 1С:Шина уже умеет работать с брокерами сообщений типа RabbitMQ или Kafka – у нее для этого есть специальные объекты в схеме.
И с другими шинами она тоже может работать – там уже будет взаимодействие по HTTP.
Это просто настройка, которую нужно будет закодить.
Она умеет работать напрямую с FTP, с файловыми менеджерами, с сервером SQL. Возможностей много.
Вы задели вопрос стоимости. Я пять раз прочитал, как высчитываются там лицензии. Ничего не понял. Что значит «на 100 пользователей»? В шине же нет пользователей. Она что, подключится к моей ERP и посчитает, сколько там пользователей в справочнике?
Под пользователем имеется в виду пользователь интеграции, точка, с которой ты соединяешься – сколько у тебя участников в обмене.
Считается количество интеграционных потоков и систем, с которыми ты взаимодействуешь. Если вы посмотрите там лицензию, она, как и у продуктов Microsoft, бумажная, технических ограничений нет.
А как подключить к 1С:Шине системы не 1С? Через разработку транспорта посредством FTP и файлов?
Если у другой информационной системы есть API, то через API. В 1С:Шине есть отдельный вид данных, работающий с HTTP – через него можно написать интеграцию.
Вопрос по работе 1С:Шины для фреш. Предусмотрена ли какая-то возможность работы с областями данных в каналах, которые вы настраиваете в самой 1С:Шине? Например, по аналогии с TCP/IP, у нас есть хост и порты, чтобы данные именно в наше приложение приходили. Есть ли некий аналог именно на уровне 1С:Шины? Или вам эту логику нужно уже в самом создателе или получателе сообщения обрабатывать?
Не помню, чтобы в самом сервисе интеграции было что-то про разделение данных. Но я рассказывал, что столкнулся с ошибкой, когда в расширении у меня взаимодействие через сервис интеграции не завелось, а расширение как раз действовало на всю информационную базу.
Код, который у меня написан, не содержит входа в области данных, т.е. она по умолчанию разделенная делается.
Скоро у многих возникнет вопрос о переходе на 1С:Шину. Но самое больное наше место – это планы обменов, где уже написаны правила конвертации. Есть ли какой-то best practice по переходу с планов обмена на 1С:Шину? Можно ли использовать текущие правила? Может быть, как-то доработать конвертации?
Да, можно использовать текущие правила, на ИТС есть рекомендации от фирмы «1С» по этому вопросу.
*************
Статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event.