Разработка правил обмена в конфигурации «1С:Конвертация данных, редакция 2.1» (КД 2.1) часто кажется начинающим разработчикам сложным и запутанным процессом. Многие считают, что без дорогостоящих курсов или тяжелых книг от «1С» разобраться в этом инструменте невозможно. Однако это не так. КД 2.1 построена на очень логичных принципах, и освоить ее базовый (и даже продвинутый) функционал можно самостоятельно, используя только встроенные средства системы и правильный алгоритм действий.
В этой статье мы подробно, по шагам разберем весь процесс создания правил обмена с нуля, изучим ключевые объекты конфигурации, научимся писать обработчики событий на языке 1С и выясним, где находить готовые примеры сложных решений без лишней теории.
Прежде чем перейти к практике, разберем главное архитектурное правило Конвертации данных. КД 2.1 никогда не подключается к вашим рабочим базам напрямую для проектирования правил. Она работает исключительно со структурами этих баз — с их метаданными.
Процесс разработки всегда выглядит так:
Теперь рассмотрим каждый из этих шагов во всех деталях.
Для того чтобы КД 2.1 узнала, какие справочники, документы и реквизиты есть в наших базах, нам нужно получить файлы описания их метаданных. Для этого используются специальные внешние обработки выгрузки, которые поставляются вместе с дистрибутивом Конвертации данных.
Выясним, какую обработку использовать в зависимости от вашей платформы:
MD83Exp.epf — используем для конфигураций, работающих на управляемых формах (платформа 1С 8.3).MD82Exp.epf — используем для старых конфигураций на обычных формах (платформа 1С 8.2).Выполним выгрузку по шагам:
MD83Exp.epf.Source_meta.xml).Receiver_meta.xml.Теперь откроем саму информационную базу «Конвертация данных 2.1». Нам необходимо импортировать только что полученные файлы XML.
Разберем порядок загрузки структур:
Source_meta.xml. Программа предложит создать новую конфигурацию в списке. Назовем ее, например, «НашаТорговля». Нажмем кнопку «Выполнить загрузку».Receiver_meta.xml, создав конфигурацию-приемник, например, «НашаБухгалтерия».После этого КД 2.1 полностью готова к проектированию правил. Она знает точные типы данных, имена реквизитов и табличных частей обеих баз.
Создадим новую настройку правил обмена («Конвертацию»), выбрав в качестве источника «НашаТорговля», а в качестве приемника — «НашаБухгалтерия». Вся дальнейшая настройка строится на трех ключевых понятиях. Разберем их подробно.
ПКО определяют, как конкретный тип объекта источника превращается в объект приемника. Например, нам нужно перенести справочник Контрагенты из источника в аналогичный справочник в приемнике. Мы создаем ПКО, где указываем объект-источник и объект-приемник.
Внутри каждого ПКО настраиваются правила для его реквизитов (свойств). КД 2.1 предлагает удобный инструмент автоматического сопоставления свойств по именам. Мы можем сопоставить реквизит ИНН источника с реквизитом ИНН приемника.
Критически важный момент — Поля поиска. При загрузке данных в приемник система должна понять: существует ли уже такой объект в базе или нужно создать новый? Для этого в ПКС для ключевых реквизитов необходимо установить флаг «Поиск». Например, для контрагентов разумно настроить поиск по ИНН и КПП, либо по Коду, либо по Уникальному Идентификатору (UUID).
Многие новички совершают ошибку: создают ПКО и ПКС, запускают обмен, но файлы данных оказываются пустыми. Почему так происходит? Дело в том, что системе нужно дать команду — с чего именно начинать выгрузку. Эту роль выполняют ПВД.
Если для справочника Контрагенты создано ПКО, но не создано ПВД, то контрагенты выгрузятся только «прицепом» (например, если они указаны в качестве реквизитов в документах, для которых ПВД создано). Если же нам нужно выгрузить весь справочник целиком, мы обязаны создать для него ПВД и привязать к нему наше ПКО.
Когда простого сопоставления «свойство-в-свойство» недостаточно, на сцену выходят обработчики событий КД 2.1. Это участки кода на стандартном языке 1С, которые выполняются на разных этапах выгрузки и загрузки данных.
Рассмотрим популярные практические задачи и примеры их решения.
Часто требуется не переносить «мусорные» элементы справочников или документов. Для этого откроем ПКО нужного объекта, перейдем на вкладку «Обработчики событий» и найдем событие ПередВыгрузкой. Напишем следующий код:
Если Источник.ПометкаУдаления Тогда
Отказ = Истина;
КонецЕсли;
Переменная Отказ предопределена в КД 2.1. Если присвоить ей значение Истина, система пропустит выгрузку текущего объекта и перейдет к следующему.
Представим ситуацию: в базе-приемнике у справочника Номенклатура есть обязательный реквизит ВидНоменклатуры, а в базе-источнике такого реквизита нет вообще, либо логика его заполнения отличается. Мы можем заполнить его значение «на лету» прямо в коде ПКС.
Создадим ПКС для свойства ВидНоменклатуры. Источник оставим пустым. В обработчике события ПередВыгрузкой для данного ПКС напишем:
// Зададим значение программно
Если Источник.Услуга Тогда
Значение = "Услуги";
Иначе
Значение = "Товары";
КонецЕсли;
Переменная Значение вернет результат работы алгоритма и запишет его в XML-файл обмена для последующей загрузки в приемник.
При загрузке контрагентов мы хотим убедиться, что не создаем дубли по ИНН. Откроем ПКО контрагентов, найдем событие ПоляПоиска. Этот обработчик позволяет переопределить стандартный поиск платформы:
// Проверим, заполнен ли ИНН для поиска
Если СвойстваПоиска["ИНН"] <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка КАК Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ИНН = &ИНН";
Запрос.УстановитьПараметр("ИНН", СвойстваПоиска["ИНН"]);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
СсылкаНаОбъект = Выборка.Ссылка; // Возвращаем найденную ссылку
ПрекратитьПоиск = Истина;
КонецЕсли;
КонецЕсли;
После настройки всех правил сохраним их в КД 2.1 с помощью кнопки «Сохранить правила» в файл Rules.xml.
Теперь выполним перенос данных между рабочими базами:
V8Exchan83.epf (Универсальный обмен данными в формате XML).Rules.xml и имя файла данных, который будет создан (например, Data.xml).V8Exchan83.epf на вкладке «Загрузка данных».Data.xml и нажмем кнопку «Загрузить данные». Обмен завершен!Если у вас нет доступа к официальному порталу ИТС или бумажным руководствам, используйте три мощных и абсолютно бесплатных инструмента, которые всегда находятся под рукой.
Многие разработчики не знают, что внутри самой КД 2.1 заложена исчерпывающая база знаний по всем обработчикам событий. Когда вы открываете форму написания кода для любого события (например, ПриЗагрузке или ПослеВыгрузки), обратите внимание на кнопку «Информация по обработчикам» в нижней или верхней части окна.
При нажатии на нее откроется детальное описание текущего контекста выполнения кода: какие локальные переменные вам доступны, какие свойства можно менять (например, РежимЗаписи, ИмяПКО, Направление, Отказ) и подробные примеры работы с ними. Это исключает необходимость заучивания синтаксиса наизусть.
В комплекте поставки конфигурации «Конвертация данных» всегда идет демонстрационная база. Обязательно установите и откройте ее.
В демо-базе содержатся готовые, настроенные примеры правил для решения самых популярных и сложных задач интеграции:
Проанализируйте, как эти задачи решены профессиональными разработчиками методического отдела 1С. Скопируйте нужные фрагменты кода и адаптируйте их под свои нужды.
Отличный способ обучения — загрузить в свою базу КД 2.1 готовые правила обмена между типовыми конфигурациями от 1С (например, правила обмена между «Управление торговлей» и «Бухгалтерия предприятия»). Найти файлы этих правил (обычно они называются ExchangeRules.xml) можно в каталогах шаблонов обновлений соответствующих конфигураций. Изучение реального, промышленного кода правил обмена даст вам колоссальный опыт и понимание лучших практик разработки.