Как организовать обмен данными между базами 1С разными способами: от текстовых файлов до HTTP-сервисов

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

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

Способ 1: Обмен данными через текстовые файлы (TXT, CSV)

Этот метод считается одним из самых простых и «древних», но он до сих пор актуален благодаря своей универсальности и высокой скорости обработки. Разберем ситуацию, когда нам нужно выгрузить данные из одной базы и загрузить в другую, используя текстовый файл с разделителями (CSV).

Для работы с текстом в платформе 1С предусмотрены объекты ЗаписьТекста и ЧтениеТекста. Рассмотрим пример выгрузки списка товаров в файл, где в качестве разделителя будем использовать точку с запятой.


// Пример выгрузки данных в текстовый файл
ПутьКФайлу = "C:\Exchange\ExportData.csv";
Текст = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    // Формируем строку: Наименование;Артикул;Цена
    СтрокаДанных = Выборка.Наименование + ";" + Выборка.Артикул + ";" + Строка(Выборка.Цена);
    Текст.ЗаписатьСтроку(СтрокаДанных);
КонецЦикла;

Текст.Закрыть();

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

Важные нюансы: при использовании текстовых файлов всегда следите за кодировкой. Если одна база записывает в UTF8, а вторая пытается прочитать в Windows-1251, вместо данных вы получите «кракозябры». Также помните, что текстовый формат не поддерживает сложную структуру, поэтому он лучше всего подходит для плоских таблиц.

Способ 2: Реализация обмена через DBF-файлы

Формат DBF (Data Base File) пришел к нам из эпохи настольных баз данных. В 1С для работы с ним используется объект XBase. Этот способ часто применяется для интеграции с устаревшим ПО или государственными информационными системами.

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


// Создание и заполнение файла DBF
ФайлDBF = Новый XBase;
ФайлDBF.Поля.Добавить("ID", "N", 10); // Числовое поле длиной 10
ФайлDBF.Поля.Добавить("NAME", "S", 100); // Строковое поле длиной 100
ФайлDBF.СоздатьФайл("C:\Exchange\data.dbf");

// Добавление записей
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
    ФайлDBF.Добавить();
    ФайлDBF.ID = Выборка.Код;
    ФайлDBF.NAME = Выборка.Наименование;
    ФайлDBF.Записать();
КонецЦикла;

ФайлDBF.ЗакрытьФайл();

Выясним причину, почему этот метод считается «капризным»: в DBF существуют жесткие ограничения на длину имен полей (не более 10 символов) и типы данных. Если ваше поле в 1С называется «НаименованиеПолное», в DBF его придется сократить до «NAME_FULL». Тем не менее, XBase работает очень быстро и позволяет работать с файлом как с таблицей БД, включая использование индексов для поиска.

Способ 3: Обмен данными через XML и JSON

Это современные стандарты обмена. XML долгое время был основным форматом в 1С (на нем построены правила обмена «Конвертации данных»), а JSON стал популярным благодаря интеграции с веб-сервисами.

Рассмотрим использование JSON, так как он более лаконичен и удобен для передачи через интернет. Для этого мы будем использовать объекты ЗаписьJSON и СериализаторXDTO.


// Выгрузка документа в формат JSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();

// Можно записывать вручную
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("НомерДокумента");
Запись.ЗаписатьЗначение(Объект.Номер);
Запись.ЗаписатьИмяСвойства("Дата");
Запись.ЗаписатьЗначение(Объект.Дата);
Запись.ЗаписатьКонецОбъекта();

Результат = Запись.Закрыть();

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

Способ 4: Обмен через интернет-соединение по HTTP-протоколу

Это самый «продвинутый» способ, который позволяет базам общаться в режиме реального времени без создания промежуточных файлов на диске. Одна база выступает как HTTP-сервис (сервер), а другая как клиент.

Разберем логику работы клиента. Нам нужно создать HTTPСоединение, сформировать HTTPЗапрос и отправить его на сервер.


// Отправка данных на внешний HTTP-сервис
Соединение = Новый HTTPСоединение("myserver.ru", 443, "Логин", "Пароль", , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/api/v1/data");
Запрос.УстановитьТелоИзСтроки("{ 'info': 'Тестовые данные' }", КодировкаТекста.UTF8);

Попытка
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Сообщить("Данные успешно отправлены!");
    КонецЕсли;
Исключение
    Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;

Преимущество этого метода в том, что данные передаются мгновенно. Это критично для систем, где, например, остатки товаров на складе должны обновляться сразу после продажи в розничном магазине. Для реализации полноценного обмена вам потребуется создать в дереве конфигурации объект «HTTP-сервис» и прописать в нем шаблоны URL и методы (GET, POST).

Способ 5: Обмен через COM-соединение

Метод COM (Component Object Model) позволяет одной базе 1С буквально «подключиться» к другой и работать с её объектами напрямую. Это выглядит так, будто вы открыли вторую базу внутри кода первой.

Посмотрим на пример создания такого соединения. Для этого используется системный объект V83.COMConnector.


// Подключение к другой базе 1С через COM
Соединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr='ServerName';Ref='BaseName';Usr='Admin';Pwd='123'";

Попытка
    БазаПриемник = Соединитель.Connect(СтрокаПодключения);
    // Теперь мы можем создавать объекты в той базе!
    НовыйКонтрагент = БазаПриемник.Справочники.Контрагенты.СоздатьЭлемент();
    НовыйКонтрагент.Наименование = "Новый из другой базы";
    НовыйКонтрагент.Записать();
    Сообщить("Контрагент успешно создан через COM");
Исключение
    Сообщить("Не удалось подключиться: " + ОписаниеОшибки());
КонецПопытки;

Важные ограничения: COM-соединение работает только под управлением ОС Windows. Оно требует, чтобы на компьютере (или сервере), где выполняется код, была установлена платформа 1С. Кроме того, этот метод считается ресурсоемким и медленным по сравнению с HTTP-сервисами, поэтому его рекомендуют использовать только в локальных сетях для разовых или регламентных задач переноса данных.

Подведем итоги

Мы рассмотрели пять принципиально разных подходов. Выделим основные правила выбора:

  1. Используйте Текст (CSV) для простых плоских таблиц и загрузки банковских выписок.
  2. Выбирайте DBF только если этого требует внешняя (часто старая) система.
  3. Применяйте XML/JSON для структурированных данных и сложных обменов между современными системами.
  4. Реализуйте HTTP-сервисы, если требуется высокая скорость, работа через интернет или интеграция с сайтами/мобильными приложениями.
  5. Используйте COM-соединение для быстрого написания разовых обработок переноса данных между двумя базами 1С в рамках одной сети.

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

← На главную