Универсальный обмен данными между разными конфигурациями на УФ: загрузка в другие объекты, свой поиск и алгоритмы
Интеграция - Перенос данных 1C
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Главная идея обработки: файл обмена описывает сам себя. В нём есть не только данные, но и состав каждого типа — поля, синонимы, понятные типы вроде «Строка(12)» или «Справочник.Контрагенты». Поэтому в базе-приёмнике правила настраиваются прямо на месте, по открытому файлу, без заранее подготовленных правил обмена и без доступа к базе-источнику.
Чем это отличается от типовых способов
| Типовые способы | Эта обработка | |
|---|---|---|
| Разные конфигурации | «Выгрузка и загрузка данных XML» (ИТС) — нет, нужны одинаковые объекты; «Универсальный обмен данными XML» — да | да |
| Что подготовить заранее | для «Универсального обмена» — правила обмена в «Конвертации данных» | ничего: правила настраиваются по открытому файлу |
| Загрузка в объект с другим именем | только через правила обмена | выбором из списка |
| Поиск существующих объектов | по УИД или по правилам обмена | по УИД и несколькими вариантами из любых полей |
| Свой код при загрузке | только в правилах обмена | у каждого типа и для всей загрузки |
Пример 1. Справочник в другой справочник
В источнике — справочник «Контрагенты» с табличной частью «Контактные лица», в приёмнике — «Партнеры» с табличной частью «Контакты» и другими названиями реквизитов. После открытия файла правило «Контрагенты» нужно только направить в «Партнеры»: в списке выбора только подходящие объекты этой базы.

Поля с одинаковыми именами и синонимами сопоставились сами. «Полное наименование» вручную связано с «НаименованиеПолное», табличная часть «Контакты» — с «КонтактныеЛица», её поле «Представление» — с «ФИО». В колонке «Поиск» два варианта: сначала ищем по ИНН (1), не нашли — по наименованию (2). Партнёр, который уже был в приёмнике под другим именем, нашёлся по ИНН и обновился, а не задвоился.

Пример 2. Документ в другой документ
«Заказ покупателя» загружается в «Реализацию товаров»: покупатель берётся из контрагента, сумма — из суммы документа, табличная часть «Запасы» — из «Товаров». Комментарий собирается выражением на языке 1С: "Из заказа № " + Источник.Номер + ": " + Источник.Комментарий. Контрагенты, договоры и номенклатура в документе ищутся по правилам своих типов — так, как настроено в примере 1. Документ, проведённый в источнике, после загрузки проводится обычным образом, с движениями конфигурации приёмника.

Что лежит в файле
Обычный XML в UTF-8. Раздел «Типы» — состав каждого типа, «Объекты» — объекты целиком, «Ссылки» — объекты, которые попали в файл только ссылкой, с ключевыми полями для поиска (код, наименование, номер, ИНН, артикул, родитель, владелец). Значение каждого поля записано вместе с видом: строка, число, дата, ссылка с УИД и представлением, значение перечисления с именем и синонимом.

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

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

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

Как проверялось
- Платформа 8.3.27: две собственные конфигурации с разными именами объектов и реквизитов (справочники с иерархией, владельцем и табличной частью, документ, перечисление, периодический регистр сведений, регистр накопления, константа). Перенос в другие объекты, поиск по ИНН, артикулу, коду и владельцу с наименованием, выражения, алгоритмы, проведение. Повторная загрузка ничего не создаёт. Перенос «как есть» в копию той же конфигурации сохраняет УИД.
- Платформа 8.5: из БП 3.0.205.22 в пустую УНФ 3.0.14.140 — контрагенты (поиск по ИНН и КПП, затем по наименованию), номенклатура, договоры; реализации товаров и услуг загружены в расходные накладные с табличной частью «Запасы». Ошибок нет, повторная загрузка ничего не задваивает.
- Форма пройдена в тонком клиенте: отбор, сохранение файла, открытие, настройка правил и полей, алгоритмы, файл настроек, загрузка.
Вопросы и ответы
Нужно ли что-то менять в конфигурации? Нет. Это внешняя обработка, открывается через «Файл — Открыть» пользователем с полными правами. Из «Дополнительных отчётов и обработок» БСП её запускать не стоит: там внешние обработки работают в безопасном режиме, а алгоритмы пользователя выполняются через Выполнить.
Можно ли загрузить файл ещё раз? Да. Объекты находятся по УИД (новые объекты создаются с УИД источника, если он свободен) или по вариантам поиска и обновляются либо остаются без изменений — как задано в правиле.
Что будет со ссылкой на объект, которого нет в приёмнике? Если для его типа разрешено создание — объект создастся из ключевых полей, которые лежат в файле. Если запрещено — ссылка останется пустой, а в протоколе будет строка «Не найден». Существующий объект данными «по ссылке» не перезаписывается.
Как повторять один и тот же обмен? Сохраните настройки в файл и при следующей загрузке примените его к новому файлу обмена.
Что не переносится? Значения в хранилище значения, тип значения характеристик, планы обмена, бизнес-процессы, задачи, регистры бухгалтерии и расчёта. Выгрузка и загрузка идут одним вызовом сервера, поэтому очень большие объёмы лучше делить отбором.
Какая платформа нужна? 8.3.27 и новее, включая 8.5. В веб-клиенте для выбора файлов нужно расширение работы с файлами.
Код закрыт? Нет, код открыт, модули разбиты на понятные процедуры с комментариями, форма спроектирована обычным образом и правится в конфигураторе.
Проверено на следующих конфигурациях и релизах:
- Бухгалтерия предприятия, редакция 3.0, релизы 3.0.205.22
- Управление нашей фирмой, редакция 3.0, релизы 3.0.14.140
Вступайте в нашу телеграмм-группу Инфостарт