Как работает автоматическое получение сообщений в 1С:Шине и почему метод ВыполнитьОбработку ведет себя именно так

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Суть проблемы: почему сообщения не «висят» в канале

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

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

Разбор работы метода ВыполнитьОбработку

Выясним, что на самом деле происходит, когда мы вызываем метод СервисыИнтеграции.ВыполнитьОбработку(). Вопреки распространенному мнению, этот метод не просто «забирает одну порцию данных». Рассмотрим основные принципы его работы:

  1. Запуск фонового процесса: При вызове метода платформа инициирует фоновое задание, которое устанавливает соединение с 1С:Шиной.
  2. Интервал активности: Как показывают тесты и документация, запущенный процесс остается активным в течение определенного времени (обычно это 120 секунд).
  3. Long Polling и постоянное соединение: В течение этого интервала база поддерживает открытый канал связи с шиной. Как только в шине появляется сообщение для этой базы, оно тут же передается в приемник. Именно поэтому обмен кажется «мгновенным».
  4. Автоматический перезапуск: Платформа спроектирована таким образом, что если сервис интеграции помечен как активный, система будет самостоятельно пытаться поддерживать это фоновое соединение, даже если вы не вызываете метод вручную в коде.

Посмотрим на пример кода, который обычно используется для запуска обработки в ручном режиме:


// Выполнение обработки для всех активных сервисов интеграции
СервисыИнтеграции.ВыполнитьОбработку();

Почему блокировка регламентных заданий не помогает

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

Кроме того, если процесс получения сообщений уже был инициирован и находится в цикле ожидания (те самые 120 секунд), блокировка новых заданий не прервет уже выполняющееся соединение до тех пор, пока не истечет его внутренний таймаут.

Как правильно остановить получение сообщений

Если перед вами стоит задача сделать так, чтобы сообщения «копились» в 1С:Шине и не попадали в базу-приемник до определенного момента, нужно использовать программное управление активностью сервиса. Рассмотрим, как это сделать правильно.

Для управления активностью используется метод УстановитьАктивность() конкретного сервиса интеграции. Проанализируем пример кода:


// Отключение активности сервиса интеграции
МойСервис = СервисыИнтеграции.ТестовыйОбменСШиной;
МойСервис.УстановитьАктивность(Ложь);

Важные нюансы управления:

Различия между Использованием и Активностью

Рассмотрим подробнее два важных свойства, которые часто путают:

  1. Использование (в метаданных): Это глобальный флаг. Если в конфигураторе или в настройках сервиса флаг «Использование» снят, сервис не будет работать вообще.
  2. Активность (программная): Это оперативное управление состоянием сервиса в конкретной информационной базе. Именно этим флагом следует манипулировать для временной приостановки обмена.

Особенности работы в файловых и клиент-серверных базах

Проанализируем, как тип базы влияет на поведение сервисов интеграции:

Итоги и рекомендации

Подводя итог нашему разбору, можно сделать следующие выводы:

Если вы видите, что сообщения приходят в базу сами собой — это не баг, а штатная «фича» платформы, обеспечивающая Real-time интеграцию. Платформа 1С берет на себя управление фоновыми потоками для поддержания связи с шиной.

Для эффективной работы с 1С:Шиной рекомендуем:

Таким образом, понимание внутреннего устройства диспетчера сервисов интеграции позволяет гибко настраивать обмен данными и избегать неожиданного поведения системы при проведении тестов или обновлении баз.

← На главную