Разработка и Конфигурация · 10 мин
Как написать обмен данными в 1С
Практическое руководство по созданию обмена данными в 1С: планы обмена, правила конвертации, универсальный формат XML, настройка и проверка результата.
Обмен данными между базами 1С — типовая задача, которая возникает, когда нужно синхронизировать справочники между конфигурациями, передавать документы из торговли в бухгалтерию или настроить выгрузку на сайт. Платформа 1С предоставляет несколько встроенных механизмов: планы обмена, правила конвертации данных, универсальный формат EnterpriseData и прямые COM/HTTP-подключения.
Выбор способа зависит от задачи: нужен ли периодический автоматический обмен, синхронизируются ли идентичные конфигурации или разные, какой объём данных передаётся. Ошибка на этапе выбора механизма — самая частая причина, по которой обмен приходится переписывать заново.
Перед началом разработки обязательно сделайте резервные копии обеих баз. Обмен изменяет данные в приёмнике, и откатить массовую загрузку некорректных документов бывает сложнее, чем восстановить копию.
Выбор механизма обмена под задачу
Первый шаг — определить сценарий. Если базы работают на типовых конфигурациях (например, «Управление торговлей» и «Бухгалтерия предприятия»), почти всегда подходят типовые планы обмена с правилами, поставляемыми вендором. Их достаточно включить и настроить через интерфейс «Синхронизация данных».
Если конфигурации самописные или сильно доработанные, потребуется разработка собственных правил. Для разовой передачи данных в стороннюю систему (сайт, CRM, складскую программу) часто проще написать HTTP-сервис или выгрузку в файл, чем внедрять полноценный план обмена.
Сравнение вариантов
Подходят для регулярной синхронизации между базами 1С. Требуют настройки, но дают регистрацию изменений и распределённую работу. Ограничение — сложность отладки правил.
Стандарт для обмена между типовыми конфигурациями. Не требует конвертации данных, но плохо подходит для самописных объектов.
Гибкий вариант для интеграции с внешними системами. Требует ручной разработки сериализации и обработки ошибок.
Простое решение для разовых или редких передач. Нет контроля целостности и автоматической регистрации изменений.
Создание плана обмена
План обмена — объект метаданных, который определяет, какие данные участвуют в обмене и между какими узлами. Создаётся он в конфигураторе: ветка «Общие» → «Планы обмена» → «Добавить». В состав плана включаются объекты метаданных: справочники, документы, регистры сведений.
Для каждого объекта задаётся режим авторегистрации: «Разрешить» означает, что платформа сама будет отслеживать изменения объектов и готовить их к выгрузке. Для регистров сведений с независимым режимом авторегистрация недоступна — их изменения регистрируются программно или включаются в выгрузку целиком.
После создания плана обмена в обеих базах создаются узлы: в первой базе — узел второй, во второй — узел первой. Каждый узел имеет код и наименование, по которым платформа сопоставляет сообщения обмена. Перепутанные коды узлов — типичная причина ошибки «сообщение обмена содержит данные для другого узла».
Написание правил конвертации данных
Если структуры данных в источнике и приёмнике различаются, используются правила конвертации — XML-файл, описывающий соответствие объектов, свойств и значений. Разрабатываются они в специальной конфигурации «Конвертация данных» (редакции 2.1 для классических правил, 3.0 для универсального формата).
Основные элементы правил: правила конвертации объектов (ПКО) задают соответствие типов, например «Справочник.Номенклатура → Справочник.Товары». Внутри ПКО настраиваются правила конвертации свойств (ПКС): какое поле источника в какое поле приёмника переносится. Для реквизитов ссылочного типа указывается ПКО связанного объекта.
Для нестандартных преобразований используются обработчики событий на встроенном языке: «ПередВыгрузкой», «ПриВыгрузке», «ПослеЗагрузки». В них можно вычислить значение, отфильтровать объект или заполнить поле по алгоритму. Обработчики пишутся на языке 1С, но при выгрузке через внешнюю обработку V8Exch текст конвертируется — тестируйте правила именно в том режиме, в котором они будут работать.
// Пример обработчика "Перед выгрузкой" в правилах конвертации
Если НЕ ЗначениеЗаполнено(Источник.Контрагент) Тогда
Отказ = Истина; // не выгружать документ без контрагента
КонецЕсли;Программная выгрузка и загрузка без планов обмена
Для простых сценариев план обмена избыточен. Достаточно записать данные в XML-файл средствами объекта ЗаписьXML и прочитать их в приёмнике через ЧтениеXML. Структуру файла вы контролируете полностью, что упрощает отладку.
Для интеграции с внешними системами удобнее HTTP-сервисы: в конфигурации создаётся объект «HTTP-сервис» с шаблоном URL и обработчиком, который принимает или отдаёт данные в JSON. Сериализация выполняется через ЗаписьJSON/ПрочитатьJSON. Такой подход требует публикации базы на веб-сервере и настройки аутентификации — не открывайте сервис без проверки доступа.
// Выгрузка справочника в JSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Код");
Запись.ЗаписатьЗначение(СокрЛП(Элемент.Код));
Запись.ЗаписатьИмяСвойства("Наименование");
Запись.ЗаписатьЗначение(Элемент.Наименование);
Запись.ЗаписатьКонецОбъекта();
СтрокаJSON = Запись.Закрыть();Настройка расписания и автоматизация
Ручной запуск обмена допустим только на этапе отладки. В рабочем режиме синхронизация настраивается по расписанию: в типовых конфигурациях — через «Настройки синхронизации данных» с указанием периодичности, в самописных решениях — через регламентное задание, вызывающее процедуру обмена.
Регламентное задание работает только в серверном режиме или при запущенном сеансе файловой базы. Для файловых баз часто используют запуск обмена через планировщик Windows с параметром командной строки 1cv8.exe и вызовом внешней обработки. Учитывайте, что параллельный запуск двух сеансов обмена с одним узлом приводит к конфликтам — защищайте процедуру блокировкой или проверкой активного сеанса.
Проверка результата и контроль ошибок
После первого обмена сверьте данные количественно и качественно: количество выгруженных и загруженных объектов должно совпадать, контрольные документы — открываться в приёмнике без ошибок и проводиться (если предполагается проведение). В типовых механизмах результаты фиксируются в регистре «Результаты обмена данными».
Обязательно ведите журнал ошибок: при программной загрузке оборачивайте запись объектов в попытку-исключение и складывайте тексты ошибок в регистр сведений или файл протокола. Молчаливая потеря части объектов — худший сценарий, потому что расхождение обнаруживается слишком поздно.
Как проверить результат
Совпадает в источнике и приёмнике по отчёту обмена
Часть объектов потеряна без записи в протоколе
Документы открываются, ссылки заполнены, нет битых ссылок
Поля вида «<Объект не найден>» — не выгрузились связанные объекты
Передаются только изменённые объекты
Каждый раз выгружается весь объём — не работает регистрация изменений
Есть записи обо всех ошибках с указанием объекта
Обмен завершился «успешно», но данные не совпадают
Типичные ошибки при разработке обмена
Большинство проблем обмена связано не с механизмом передачи, а с сопоставлением данных. Если справочники синхронизируются по коду, а коды в базах не уникальны или различаются, появятся дубли. Надёжнее сопоставление по GUID (уникальному идентификатору ссылки) с резервным поиском по ключевым полям.
Вторая группа ошибок — производительность. Выгрузка большого регистра целиком при каждом обмене блокирует работу пользователей. Используйте регистрацию изменений, пакетную выгрузку порциями и запуск обмена в нерабочие часы.
Что важно запомнить
Начинайте с выбора механизма под задачу: типовые конфигурации — планы обмена и EnterpriseData, нестандартные — правила конвертации или HTTP-сервисы. Обязательны: резервная копия, отладка на копии, протокол ошибок и сопоставление данных по уникальным идентификаторам.
Частые вопросы
Чем отличается конвертация данных 2.1 от 3.0?
Редакция 2.1 формирует правила для классической универсальной выгрузки через обработку «Универсальный обмен данными в формате XML». Редакция 3.0 работает с универсальным форматом EnterpriseData и используется в механизмах синхронизации данных современных типовых конфигураций. Для новых разработок между типовыми решениями обычно выбирают 3.0.
Как перенести данные между базами с разными релизами конфигурации?
Правила конвертации формируются под конкретную структуру метаданных. При обновлении одной из баз правила нужно перепроверить и при необходимости перегенерировать, иначе новые реквизиты не перенесутся, а переименованные вызовут ошибки загрузки.
Можно ли настроить обмен без доступа к конфигуратору?
Частично. Типовые синхронизации настраиваются в пользовательском режиме через «Администрирование → Синхронизация данных». Но создание плана обмена, правил или HTTP-сервиса требует изменения конфигурации, то есть работы в конфигураторе.
Что делать, если в приёмнике появились дубли справочников?
Сначала остановите обмен, чтобы дубли не разошлись по документам. Затем определите правило поиска, из-за которого возникли дубли (обычно поиск по наименованию вместо GUID), исправьте правила и выполните свёртку дублей штатной обработкой поиска и удаления дублей, заменяя ссылки во всех документах.
Как организовать обмен, если базы находятся в разных сетях?
Используйте промежуточный транспорт: каталог обмена через FTP, электронную почту или облачное хранилище — типовые механизмы умеют работать с такими каналами. Альтернатива — публикация HTTP-сервисов на одной из баз с доступом через защищённое соединение.
Нужно ли проводить документы при загрузке?
Зависит от учётной модели. Часто документы загружаются без проведения, а проведение выполняется отдельным регламентным заданием после контроля. Проведение «на лету» при загрузке замедляет обмен и может перепровести закрытые периоды, если не ограничить дату загружаемых документов.