Почему обмен данными в 1С работает вручную, но не выполняется по расписанию?

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

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

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

Выясняем причину: логика безопасности БСП

Для того чтобы понять, почему ручной обмен работает, а автоматический игнорирует узел, обратимся к архитектуре подсистемы обмена данными БСП. В БСП заложена строгая проверка готовности узлов планов обмена к выполнению автоматической синхронизации. Эта проверка необходима для предотвращения ситуаций, когда недонастроенный обмен (например, с некорректно сопоставленными объектами или незаполненными правилами конвертации) начинает выполняться автоматически и повреждает данные в базах-корреспондентах.

За эту безопасность отвечает специализированный регистр сведений — РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз. В этом регистре для каждого активного узла плана обмена хранится состояние его готовности. Ключевым ресурсом здесь является флаг «Настройка завершена» (в метаданных — НастройкаЗавершена).

Когда регламентное задание сценария обмена запускает фоновый процесс выгрузки или загрузки, система выполняет следующий алгоритм:

  1. Опрашивается список узлов планов обмена, участвующих в сценарии синхронизации.
  2. Для каждого узла выполняется запрос к регистру РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз.
  3. Если запись для конкретного узла отсутствует или флаг «Настройка завершена» установлен в значение Ложь, БСП считает, что настройка интеграции пользователем еще не закончена.
  4. Регламентное задание молча пропускает данный узел, фиксируя успешное завершение своей работы (поскольку критических ошибок исполнения кода не произошло), но фактически отправку файлов обмена не производит.

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

Почему запись в регистре не появилась автоматически?

В типовых конфигурациях 1С создание новых настроек синхронизации происходит через специальный пошаговый интерактивный помощник. Именно этот помощник на самом последнем шаге («Завершение настройки синхронизации данных») автоматически делает запись в регистр РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз и устанавливает признак НастройкаЗавершена = Истина.

Если же вы создали новый план обмена путем копирования существующего, добавили узел программно через обработку, либо заполнили его вручную непосредственно в списке узлов плана обмена, стандартный помощник не запускался. В результате запись в регистре настроек не сформировалась, и регламентное задание «не видит» ваш новый узел.


Вариант А. Решение для администратора (без программирования)

Если вы столкнулись с этой проблемой в работающей базе данных и вам нужно оперативно запустить обмен по расписанию, выполните следующие шаги:

  1. Откройте базу данных в режиме «1С:Предприятие» под пользователем с полными правами.
  2. Перейдите в главное меню, выберите пункт «Функции для технического специалиста» (в старых версиях — «Все функции»). Если этот пункт меню недоступен, включите его отображение в настройках параметров системы (меню Сервис — Параметры — Отображать команду «Функции для технического специалиста»).
  3. В открывшемся окне найдите раздел Регистры сведений и выберите регистр Общие настройки узлов информационных баз.
  4. Проанализируйте список записей. Найдите строку, соответствующую вашему проблемному узлу плана обмена.
  5. Если записи нет, нажмите кнопку Создать. Если запись есть, откройте ее для редактирования.
  6. Заполните поля записи регистра следующим образом:
    • Узел: выберите узел вашего нетипового плана обмена.
    • Настройка завершена: обязательно установите этот флаг (значение Истина).
    • Префикс и Префикс корреспондента: укажите соответствующие префиксы кодов объектов для вашей и удаленной базы (это важно для корректной нумерации документов и синхронизации).
  7. Сохраните и закройте запись регистра.

После выполнения этих действий регламентное задание при следующем запуске по сценарию успешно идентифицирует узел как готовый к работе и осуществит выгрузку данных.


Вариант Б. Решение для разработчика (автоматическое заполнение при записи)

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

Рассмотрим по шагам, как это реализовать:

Шаг 1. Откройте ваш план обмена в конфигураторе и перейдите на вкладку Формы. Создайте или откройте существующую форму узла (обычно это ФормаУзла).

Шаг 2. В модуле формы узла найдите или создайте обработчик события ПриЗаписиНаСервере. Нам необходимо вызвать стандартный программный интерфейс БСП, который сам проверит состояние узла и внесет необходимую запись в регистр сведений.

Посмотрим на пример реализации кода:


&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// Вызов стандартного механизма БСП для регистрации параметров узла
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбменДанными") Тогда
		МодульОбменДаннымиСервер = ОбщегоНазначения.ОбщийМодуль("ОбменДаннымиСервер");
		МодульОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере(ТекущийОбъект, Отказ);
	КонецЕсли;
	
КонецПроцедуры

Метод ОбменДаннымиСервер.ФормаУзлаПриЗаписиНаСервере выполняет всю рутинную работу. Он проверяет, заполнены ли ключевые реквизиты узла, и при первой интерактивной записи узла пользователем автоматически формирует запись в регистре РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз со значением НастройкаЗавершена = Истина.


Что еще проверить, если обмен по расписанию все равно не работает?

Если вы установили флаг завершения настройки, но регламентное задание по-прежнему игнорирует обмен или завершается с ошибкой, проанализируйте следующие технические факторы:

  1. Права пользователя регламентного задания. Автоматический обмен по расписанию в клиент-серверном варианте выполняется под системной учетной записью (часто без указания конкретного пользователя 1С, то есть от имени встроенного системного сеанса). Убедитесь, что у этого фонового процесса достаточно прав для чтения регистра РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз и записи в регистры регистрации изменений.
  2. Блокировка регламентных заданий в базе. Если вы тестируете обмен на копии базы данных, проверьте, не включена ли блокировка регламентных заданий. Сделать это можно через консоль администрирования кластера серверов 1С:Предприятия или в диалоге свойств информационной базы. Для регулярного создания копий и технического обслуживания тестовых сред можно настроить автоматическое архивирование, обновление и тестирование баз 1С по расписанию.
  3. Параметры запуска в файловом режиме. Если ваша база работает в файловом режиме, помните, что для выполнения регламентных заданий по расписанию должен быть запущен отдельный выделенный сеанс (например, с параметром запуска /C ЗапускРегламентныхЗаданий), либо в базе должен постоянно находиться хотя бы один активный пользователь, на сеанс которого система будет периодически возлагать выполнение фоновых задач.

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

← На главную