Как настроить выгрузку и загрузку данных между двумя одинаковыми базами 1С?

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

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

Архитектура решения: где и как создавать функционал

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

Проанализируем основные вопросы, возникающие при проектировании обработки:

  1. Нужна ли форма? Если процесс запускается вручную пользователем, создается управляемая форма с элементами управления (кнопками выгрузки и загрузки, полями отбора или выбора файла). Если же обмен должен выполняться автоматически по расписанию, логика размещается в модуле объекта обработки или общем модуле и вызывается через РегламентноеЗадание без применения форм.
  2. Где создавать форму? Форму следует создавать внутри самой обработки, а не в справочнике. Это изолирует сторонний функционал и не захламляет интерфейс самого справочника.
  3. Как открыть форму при запуске? Для открытия формы обработки в управляемом приложении используем глобальную функцию ОткрытьФорму: ОткрытьФорму("Обработка.ИмяОбработки.Форма.ФормаВыгрузки"); Устаревший синтаксис ПолучитьФорму().Открыть() в управляемом режиме не применяется.

Способы передачи данных между базами

Выясним, какие варианты связи между базами 1С существуют и как выбрать подходящий:

  1. Файловый обмен (XML / JSON): В базе-источнике формируется файл с данными (например, через СериализаторXDTO или записи в JSON/XML). В базе-приемнике этот файл считывается и обрабатывается. Это универсальный и надежный способ.
  2. Прямое COM-соединение: База-источник подключается к базе-приемнику через объект V83.ComConnector и записывает данные напрямую. Помним о технических ограничениях: COM-соединение работает только под управлением ОС Windows и требует совпадения разрядности платформ. На серверах под управлением Linux данное решение недоступно.
  3. HTTP-сервисы и REST API (OData): База-приемник публикует веб-сервис или OData, а источник отправляет запросы через объект HTTPСоединение. Это современный стандарт обмена между распределенными системами.

Алгоритм выгрузки и поиска данных (Upsert) в базе-приемнике

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

Шаг 1. Выгрузка из источника

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

Шаг 2. Поиск и создание записей в приемнике

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

Посмотрим на пример кода поиска и сохранения данных на сервере:


&НаСервере
Процедура ЗагрузитьЗаписьВБазу(Фамилия, Имя, Отчество, ДатаРождения)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ФИО.Ссылка КАК Ссылка
        |ИЗ
        |	Справочник.ФИО КАК ФИО
        |ГДЕ
        |	ФИО.Фамилия = &Фамилия
        |	И ФИО.Имя = &Имя
        |	И ФИО.Отчество = &Отчество
        |	И ФИО.ДатаРождения = &ДатаРождения";
    
    Запрос.УстановитьПараметр("Фамилия", Фамилия);
    Запрос.УстановитьПараметр("Имя", Имя);
    Запрос.УстановитьПараметр("Отчество", Отчество);
    Запрос.УстановитьПараметр("ДатаРождения", ДатаРождения);
    
    РезультатЗапроса = Запрос.Выполнить();
    Выборка = РезультатЗапроса.Выбрать();
    
    НачатьТранзакцию();
    Попытка
        Если Выборка.Следующий() Тогда
            // Элемент найден — обновляем существующих данные при необходимости
            ОбъектСправочника = Выборка.Ссылка.ПолучитьОбъект();
        Иначе
            // Элемент не найден — создаем новый
            ОбъектСправочника = Справочники.ФИО.СоздатьЭлемент();
            ОбъектСправочника.Фамилия = Фамилия;
            ОбъектСправочника.Имя = Имя;
            ОбъектСправочника.Отчество = Отчество;
            ОбъектСправочника.ДатаРождения = ДатаРождения;
        КонецЕсли;
        
        ОбъектСправочника.Записать();
        ЗафиксироватьТранзакцию();
    Исключение
        ОтменитьТранзакцию();
        ВызватьИсключение;
    КонецПопытки;

КонецПроцедуры

Рекомендации по изучению и дальнейшей работе

Если вы только начинаете осваивать разработку на платформе 1С:Предприятие 8.3, рекомендуется проходить обучение поэтапно. Для формирования базового понимания архитектуры клиент-серверного взаимодействия и работы с объектами базы данных стоит обратиться к фундаментальным материалам:

  1. Учебное пособие «1С:Программирование для начинающих».
  2. Практическое пособие разработчика «1С:Предприятие 8.3. Примеры и типовые приемы».
  3. Бесплатные вводные видеокурсы по конфигурированию в 1С.
← На главную