Часто в практике возникает потребность настроить обмен данными между рабочей информационной базой и её копией. Проанализируем ситуацию: в основной базе ведется регулярная работа (например, бухгалтерский учет), и параллельно в базе-копии также производятся некие действия, тестируются документы или ведутся черновые расчеты. Задача состоит в том, чтобы все новые данные и изменения из основной базы регулярно переносились в копию, но при этом никакая информация из копии не должна попадать обратно в рабочую базу.
Обычное восстановление из бэкапа (файла .dt или средствами СУБД) здесь не подходит, так как оно полностью затрет те данные, которые пользователи успели наработать в копии. Разберем по шагам несколько эффективных способов решения этой задачи от самых простых до требующих программирования.
Если структуры баз полностью идентичны (а копия именно такой и является), самым простым решением без изменения конфигурации станет использование стандартной внешней обработки ВыгрузкаЗагрузкаДанныхXML_УФ. Этот инструмент позволяет переносить данные без сложных правил конвертации.
Рассмотрим подробнее преимущества и настройку этого метода:
Современные конфигурации 1С (такие как "Бухгалтерия предприятия 3.0", "Управление торговлей 11", "ERP") поддерживают универсальный формат обмена EnterpriseData. Посмотрим на пример использования штатного функционала.
При настройке обмена через мастер синхронизации данных вы можете прямо в пользовательском режиме указать направление обмена. Для базы-копии можно установить настройку Только получение данных (режим загрузки). В этом случае система будет принимать все изменения из основной базы, но сама не будет формировать пакеты на отправку. Это надежный штатный механизм, который решает задачу односторонней синхронизации без написания кода.
Если вы решили использовать механизм РИБ, стоит учитывать, что по умолчанию он предполагает двусторонний обмен. Чтобы сделать его строго односторонним, потребуется вмешательство разработчика.
Разберем, как ограничить регистрацию изменений для базы-копии:
ПриОтправкеДанных. В нем прописывается условие: если текущая база является подчиненным узлом (копией), то отправка данных блокируется или массив данных очищается.Пример кода для блокировки отправки:
Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента)
// Если мы находимся в базе-копии, отменяем отправку любого элемента
Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда
ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать;
КонецЕсли;
КонецПроцедуры
Для более гибкого контроля мы можем создать собственный план обмена, не устанавливая признак "Распределенная информационная база". Это позволит использовать мощный механизм регистрации изменений платформы.
Выясним причину использования этого подхода: он позволяет выгружать только "дельту" — новые и измененные данные с момента последнего успешного сеанса связи. Вы используете метод ВыбратьИзменения() в основной базе, формируете файл выгрузки, а затем в копии считываете его. Поскольку это не РИБ, конфигурация в копии остается доступной для редактирования (если это необходимо), и обмен изначально настраивается только так, как вы его запрограммируете.
Поскольку обе базы находятся локально на одном компьютере или в одной локальной сети, можно настроить прямую передачу данных без использования промежуточных файлов XML.
V83.COMConnector, искать измененные объекты и напрямую переносить их реквизиты.Важный нюанс при программной загрузке:
Когда вы переносите данные (особенно документы) в базу-копию программным путем, необходимо отключать бизнес-логику при записи, чтобы документы загрузились ровно в том виде, в котором они существуют в основной базе. Для этого используется свойство ОбменДанными.Загрузка.
Пример записи объекта при загрузке:
ДокументОбъект = ДанныеИзОсновнойБазы.ПолучитьОбъект();
ДокументОбъект.ОбменДанными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Установка ОбменДанными.Загрузка = Истина отключает все проверки в модуле объекта (например, проверки на заполнение обязательных полей или запрет редактирования в закрытых периодах). Это гарантирует успешную синхронизацию.
Итог: Если вы стажер или администратор без глубоких навыков программирования, начните с ВыгрузкаЗагрузкаДанныхXML_УФ или настройки штатного EnterpriseData (режим "Только получение"). Если задача требует полной автоматизации и скрытости от пользователей, лучшим выбором станет настройка собственного плана обмена или использование скриптов прямого подключения через OData с обязательным контролем GUID и режима обмена данными.