Как выгрузить значение одного реквизита из одной базы 1С в другую?

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

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

Использование механизма загрузки из табличного документа

Один из самых простых и надежных способов, не требующий написания сложного кода, — это использование встроенной обработки Загрузка данных из табличного документа. Этот инструмент входит в состав большинства стандартных библиотек 1С и доступен на диске ИТС.

  1. Подготовьте данные в базе-источнике. С помощью отчета или Консоли запросов выгрузите таблицу, содержащую уникальный идентификатор (например, Код или GUID) и значение нужного вам реквизита.
  2. Сохраните полученные данные в формат Excel (или CSV).
  3. В базе-приемнике запустите обработку Загрузка данных из табличного документа.
  4. В настройках обработки обязательно укажите, что поиск должен осуществляться по ключевому полю (идентификатору).
  5. Установите режим записи — Обновление. Это критически важно: программа не будет создавать дубли, а просто найдет нужный элемент по ключу и запишет в него новое значение указанного реквизита.

Перенос данных через COM-соединение

Если вам требуется автоматизированное решение для регулярной или оперативной передачи данных, идеальным вариантом будет использование COM-соединения. Этот метод позволяет напрямую обратиться к объектам базы-приемника из базы-источника. Рассмотрим алгоритм действий:

Для начала, создайте внешнюю обработку, в которой будет реализована логика подключения к COM-объекту:


// Пример логики подключения и обновления
COMОбъект = Новый COMОбъект(\"V83.COMConnector\");
БазаПриемник = COMОбъект.Connect(\"Srvr=Server;Ref=BaseName;Usr=User;Pwd=Password\");

// Поиск элемента в приемнике по коду
ЭлементПриемник = БазаПриемник.Справочники.Номенклатура.НайтиПоКоду(КодОбъекта);

Если НЕ ЭлементПриемник.Пустая() Тогда
    ОбъектДляЗаписи = ЭлементПриемник.ПолучитьОбъект();
    ОбъектДляЗаписи.НужныйРеквизит = НовоеЗначение;
    ОбъектДляЗаписи.Записать();
КонецЕсли;

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

Универсальный обмен данными в формате XML

Если конфигурации полностью идентичны, можно воспользоваться штатной обработкой Универсальный обмен данными в формате XML. Хотя этот инструмент часто критикуют за избыточность («пушка по воробьям»), он позволяет тонко настроить выгрузку через Правила обмена (КД 2.0).

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

На что обратить внимание при переносе данных

При работе с обновлением данных всегда учитывайте следующие моменты:

Выбирайте способ исходя из объема данных: для разовых задач отлично подойдет Загрузка из табличного документа, а для сложных интеграционных сценариев — COM-соединение или КД 2.0. Успешной вам автоматизации!

← На главную