К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как написать обмен данными в 1С

Практическое руководство по созданию обмена данными в 1С: планы обмена, правила конвертации, универсальный формат XML, настройка и проверка результата.

Обмен данными между базами 1С — типовая задача, которая возникает, когда нужно синхронизировать справочники между конфигурациями, передавать документы из торговли в бухгалтерию или настроить выгрузку на сайт. Платформа 1С предоставляет несколько встроенных механизмов: планы обмена, правила конвертации данных, универсальный формат EnterpriseData и прямые COM/HTTP-подключения.

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

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

Выбор механизма обмена под задачу

Первый шаг — определить сценарий. Если базы работают на типовых конфигурациях (например, «Управление торговлей» и «Бухгалтерия предприятия»), почти всегда подходят типовые планы обмена с правилами, поставляемыми вендором. Их достаточно включить и настроить через интерфейс «Синхронизация данных».

Если конфигурации самописные или сильно доработанные, потребуется разработка собственных правил. Для разовой передачи данных в стороннюю систему (сайт, CRM, складскую программу) часто проще написать HTTP-сервис или выгрузку в файл, чем внедрять полноценный план обмена.

Сравнение вариантов

Планы обмена + правила конвертации

Подходят для регулярной синхронизации между базами 1С. Требуют настройки, но дают регистрацию изменений и распределённую работу. Ограничение — сложность отладки правил.

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

Стандарт для обмена между типовыми конфигурациями. Не требует конвертации данных, но плохо подходит для самописных объектов.

HTTP-сервисы / JSON

Гибкий вариант для интеграции с внешними системами. Требует ручной разработки сериализации и обработки ошибок.

Выгрузка в файл (XML, CSV, DBF)

Простое решение для разовых или редких передач. Нет контроля целостности и автоматической регистрации изменений.

Создание плана обмена

План обмена — объект метаданных, который определяет, какие данные участвуют в обмене и между какими узлами. Создаётся он в конфигураторе: ветка «Общие» → «Планы обмена» → «Добавить». В состав плана включаются объекты метаданных: справочники, документы, регистры сведений.

Для каждого объекта задаётся режим авторегистрации: «Разрешить» означает, что платформа сама будет отслеживать изменения объектов и готовить их к выгрузке. Для регистров сведений с независимым режимом авторегистрация недоступна — их изменения регистрируются программно или включаются в выгрузку целиком.

После создания плана обмена в обеих базах создаются узлы: в первой базе — узел второй, во второй — узел первой. Каждый узел имеет код и наименование, по которым платформа сопоставляет сообщения обмена. Перепутанные коды узлов — типичная причина ошибки «сообщение обмена содержит данные для другого узла».

Написание правил конвертации данных

Если структуры данных в источнике и приёмнике различаются, используются правила конвертации — XML-файл, описывающий соответствие объектов, свойств и значений. Разрабатываются они в специальной конфигурации «Конвертация данных» (редакции 2.1 для классических правил, 3.0 для универсального формата).

Основные элементы правил: правила конвертации объектов (ПКО) задают соответствие типов, например «Справочник.Номенклатура → Справочник.Товары». Внутри ПКО настраиваются правила конвертации свойств (ПКС): какое поле источника в какое поле приёмника переносится. Для реквизитов ссылочного типа указывается ПКО связанного объекта.

Для нестандартных преобразований используются обработчики событий на встроенном языке: «ПередВыгрузкой», «ПриВыгрузке», «ПослеЗагрузки». В них можно вычислить значение, отфильтровать объект или заполнить поле по алгоритму. Обработчики пишутся на языке 1С, но при выгрузке через внешнюю обработку V8Exch текст конвертируется — тестируйте правила именно в том режиме, в котором они будут работать.

bsl
// Пример обработчика "Перед выгрузкой" в правилах конвертации
Если НЕ ЗначениеЗаполнено(Источник.Контрагент) Тогда
    Отказ = Истина; // не выгружать документ без контрагента
КонецЕсли;

Программная выгрузка и загрузка без планов обмена

Для простых сценариев план обмена избыточен. Достаточно записать данные в XML-файл средствами объекта ЗаписьXML и прочитать их в приёмнике через ЧтениеXML. Структуру файла вы контролируете полностью, что упрощает отладку.

Для интеграции с внешними системами удобнее HTTP-сервисы: в конфигурации создаётся объект «HTTP-сервис» с шаблоном URL и обработчиком, который принимает или отдаёт данные в JSON. Сериализация выполняется через ЗаписьJSON/ПрочитатьJSON. Такой подход требует публикации базы на веб-сервере и настройки аутентификации — не открывайте сервис без проверки доступа.

bsl
// Выгрузка справочника в JSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Код");
Запись.ЗаписатьЗначение(СокрЛП(Элемент.Код));
Запись.ЗаписатьИмяСвойства("Наименование");
Запись.ЗаписатьЗначение(Элемент.Наименование);
Запись.ЗаписатьКонецОбъекта();
СтрокаJSON = Запись.Закрыть();

Настройка расписания и автоматизация

Ручной запуск обмена допустим только на этапе отладки. В рабочем режиме синхронизация настраивается по расписанию: в типовых конфигурациях — через «Настройки синхронизации данных» с указанием периодичности, в самописных решениях — через регламентное задание, вызывающее процедуру обмена.

Регламентное задание работает только в серверном режиме или при запущенном сеансе файловой базы. Для файловых баз часто используют запуск обмена через планировщик Windows с параметром командной строки 1cv8.exe и вызовом внешней обработки. Учитывайте, что параллельный запуск двух сеансов обмена с одним узлом приводит к конфликтам — защищайте процедуру блокировкой или проверкой активного сеанса.

Проверка результата и контроль ошибок

После первого обмена сверьте данные количественно и качественно: количество выгруженных и загруженных объектов должно совпадать, контрольные документы — открываться в приёмнике без ошибок и проводиться (если предполагается проведение). В типовых механизмах результаты фиксируются в регистре «Результаты обмена данными».

Обязательно ведите журнал ошибок: при программной загрузке оборачивайте запись объектов в попытку-исключение и складывайте тексты ошибок в регистр сведений или файл протокола. Молчаливая потеря части объектов — худший сценарий, потому что расхождение обнаруживается слишком поздно.

Контрольные точки

Как проверить результат

Количество объектов
Норма

Совпадает в источнике и приёмнике по отчёту обмена

Тревожный признак

Часть объектов потеряна без записи в протоколе

Ссылки в приёмнике
Норма

Документы открываются, ссылки заполнены, нет битых ссылок

Тревожный признак

Поля вида «<Объект не найден>» — не выгрузились связанные объекты

Повторный обмен
Норма

Передаются только изменённые объекты

Тревожный признак

Каждый раз выгружается весь объём — не работает регистрация изменений

Протокол
Норма

Есть записи обо всех ошибках с указанием объекта

Тревожный признак

Обмен завершился «успешно», но данные не совпадают

Типичные ошибки при разработке обмена

Большинство проблем обмена связано не с механизмом передачи, а с сопоставлением данных. Если справочники синхронизируются по коду, а коды в базах не уникальны или различаются, появятся дубли. Надёжнее сопоставление по GUID (уникальному идентификатору ссылки) с резервным поиском по ключевым полям.

Вторая группа ошибок — производительность. Выгрузка большого регистра целиком при каждом обмене блокирует работу пользователей. Используйте регистрацию изменений, пакетную выгрузку порциями и запуск обмена в нерабочие часы.

Типичные ошибки
01
Сопоставление справочников только по наименованию — приводит к дублям при любом переименовании
02
Отсутствие протокола ошибок — потерянные объекты обнаруживаются через месяцы
03
Запуск обмена в рабочее время без порционной выгрузки — блокировки и жалобы пользователей
04
Изменение правил без версии и архива — невозможно понять, по каким правилам загружены старые данные
05
Загрузка документов с проведением без проверки периода — перепроводятся закрытые периоды
Итог

Что важно запомнить

Начинайте с выбора механизма под задачу: типовые конфигурации — планы обмена и EnterpriseData, нестандартные — правила конвертации или HTTP-сервисы. Обязательны: резервная копия, отладка на копии, протокол ошибок и сопоставление данных по уникальным идентификаторам.

Частые вопросы

Чем отличается конвертация данных 2.1 от 3.0?

Редакция 2.1 формирует правила для классической универсальной выгрузки через обработку «Универсальный обмен данными в формате XML». Редакция 3.0 работает с универсальным форматом EnterpriseData и используется в механизмах синхронизации данных современных типовых конфигураций. Для новых разработок между типовыми решениями обычно выбирают 3.0.

Как перенести данные между базами с разными релизами конфигурации?

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

Можно ли настроить обмен без доступа к конфигуратору?

Частично. Типовые синхронизации настраиваются в пользовательском режиме через «Администрирование → Синхронизация данных». Но создание плана обмена, правил или HTTP-сервиса требует изменения конфигурации, то есть работы в конфигураторе.

Что делать, если в приёмнике появились дубли справочников?

Сначала остановите обмен, чтобы дубли не разошлись по документам. Затем определите правило поиска, из-за которого возникли дубли (обычно поиск по наименованию вместо GUID), исправьте правила и выполните свёртку дублей штатной обработкой поиска и удаления дублей, заменяя ссылки во всех документах.

Как организовать обмен, если базы находятся в разных сетях?

Используйте промежуточный транспорт: каталог обмена через FTP, электронную почту или облачное хранилище — типовые механизмы умеют работать с такими каналами. Альтернатива — публикация HTTP-сервисов на одной из баз с доступом через защищённое соединение.

Нужно ли проводить документы при загрузке?

Зависит от учётной модели. Часто документы загружаются без проведения, а проведение выполняется отдельным регламентным заданием после контроля. Проведение «на лету» при загрузке замедляет обмен и может перепровести закрытые периоды, если не ограничить дату загружаемых документов.