Как настроить одностороннюю синхронизацию между основной базой 1С и её копией?

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

Часто в практике возникает потребность настроить обмен данными между рабочей информационной базой и её копией. Проанализируем ситуацию: в основной базе ведется регулярная работа (например, бухгалтерский учет), и параллельно в базе-копии также производятся некие действия, тестируются документы или ведутся черновые расчеты. Задача состоит в том, чтобы все новые данные и изменения из основной базы регулярно переносились в копию, но при этом никакая информация из копии не должна попадать обратно в рабочую базу.

Обычное восстановление из бэкапа (файла .dt или средствами СУБД) здесь не подходит, так как оно полностью затрет те данные, которые пользователи успели наработать в копии. Разберем по шагам несколько эффективных способов решения этой задачи от самых простых до требующих программирования.

Способ 1: Использование обработки ВыгрузкаЗагрузкаДанныхXML

Если структуры баз полностью идентичны (а копия именно такой и является), самым простым решением без изменения конфигурации станет использование стандартной внешней обработки ВыгрузкаЗагрузкаДанныхXML_УФ. Этот инструмент позволяет переносить данные без сложных правил конвертации.

Рассмотрим подробнее преимущества и настройку этого метода:

  1. Сохранение уникальных идентификаторов. При выгрузке и последующей загрузке сохраняются внутренние идентификаторы объектов (GUID). Это критически важно, так как исключает дублирование справочников (контрагентов, номенклатуры) и документов при повторных синхронизациях.
  2. Ручной режим. В конце рабочего дня вы открываете обработку в основной базе, выбираете период или конкретные виды документов, нажимаете кнопку выгрузки в файл. Затем открываете базу-копию и загружаете этот файл.
  3. Автоматизация процесса. Чтобы не делать это вручную, процесс можно автоматизировать. С помощью параметров командной строки 1С можно настроить запуск конфигурации так, чтобы при старте автоматически выполнялась эта обработка с сохраненными настройками. Добавив скрипт в Планировщик задач (Task Scheduler) Windows, вы получите автоматическую выгрузку "дельты" каждый вечер.

Способ 2: Настройка синхронизации через EnterpriseData

Современные конфигурации 1С (такие как "Бухгалтерия предприятия 3.0", "Управление торговлей 11", "ERP") поддерживают универсальный формат обмена EnterpriseData. Посмотрим на пример использования штатного функционала.

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

Способ 3: Тонкая настройка РИБ (Распределенной информационной базы)

Если вы решили использовать механизм РИБ, стоит учитывать, что по умолчанию он предполагает двусторонний обмен. Чтобы сделать его строго односторонним, потребуется вмешательство разработчика.

Разберем, как ограничить регистрацию изменений для базы-копии:

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

Пример кода для блокировки отправки:


Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
    // Если мы находимся в базе-копии, отменяем отправку любого элемента
    Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
        ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
    КонецЕсли;
КонецПроцедуры

Способ 4: Собственный План обмена без РИБ

Для более гибкого контроля мы можем создать собственный план обмена, не устанавливая признак "Распределенная информационная база". Это позволит использовать мощный механизм регистрации изменений платформы.

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

Способ 5: Использование прямого подключения (COM-соединение или OData)

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

  1. COM-соединение. Из основной базы можно написать регламентное задание, которое будет подключаться к базе-копии через V83.COMConnector, искать измененные объекты и напрямую переносить их реквизиты.
  2. REST API (OData). Если опубликовать базу-копию на локальном веб-сервере, основная база сможет передавать данные через HTTP-запросы в формате JSON или XML. Это более стабильный и современный подход по сравнению с COM.

Важный нюанс при программной загрузке:
Когда вы переносите данные (особенно документы) в базу-копию программным путем, необходимо отключать бизнес-логику при записи, чтобы документы загрузились ровно в том виде, в котором они существуют в основной базе. Для этого используется свойство ОбменДанными.Загрузка.

Пример записи объекта при загрузке:


ДокументОбъект = ДанныеИзОсновнойБазы.ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

Установка ОбменДанными.Загрузка = Истина отключает все проверки в модуле объекта (например, проверки на заполнение обязательных полей или запрет редактирования в закрытых периодах). Это гарантирует успешную синхронизацию.

Итог: Если вы стажер или администратор без глубоких навыков программирования, начните с ВыгрузкаЗагрузкаДанныхXML_УФ или настройки штатного EnterpriseData (режим "Только получение"). Если задача требует полной автоматизации и скрытости от пользователей, лучшим выбором станет настройка собственного плана обмена или использование скриптов прямого подключения через OData с обязательным контролем GUID и режима обмена данными.

← На главную