Разработка и Конфигурация · 11 мин
Как писать правила обмена 1С
Как создать правила обмена 1С в Конвертации данных: структура ПКО, ПКС и ПКГС, алгоритмы, тестирование и типичные ошибки при настройке обмена.
Правила обмена в 1С — это XML-файл, который описывает, как данные одной конфигурации преобразуются в данные другой при выгрузке и загрузке. Чаще всего их создают в типовой обработке «Конвертация данных» (редакция 2.1 или 3.0), но для обменов через EnterpriseData или универсальный формат правила могут писаться и в виде кода встроенного языка. Без корректных правил обмен либо не запускается, либо переносит данные с потерями и дублями.
Основная сложность не в самом инструменте, а в сопоставлении объектов: справочник «Контрагенты» источника должен попасть в нужный реквизит документа приёмника, а единицы измерения — найти соответствие по коду, а не по наименованию. Ошибка в одном правиле конвертации свойств способна испортить тысячи документов при загрузке, поэтому правила всегда пишут итеративно: сначала каркас, затем тест на копии базы, затем доработка алгоритмов.
Материал ориентирован на специалистов, которые уже знают встроенный язык 1С и структуру метаданных, но впервые пишут собственные правила обмена или дорабатывают типовые.
Когда нужны собственные правила обмена
Типовые правила покрывают стандартные сценарии: обмен между УТ и БП, синхронизацию с сайтом, выгрузку в банк. Собственные правила пишут, когда конфигурации доработаны (добавлены реквизиты, документы, справочники), когда обмен идёт между нестандартной парой систем или когда типовой обмен переносит лишнее и нагружает базы.
Перед началом работы определите формат обмена. Для «Конвертации данных 2.1» правила — это XML с событиями на встроенном языке. Для обменов через универсальный формат EnterpriseData применяется «Конвертация данных 3.0», где логика описывается в модуле менеджера обмена и обработчиках XDTO. Смешивать подходы нельзя: правила от 2.1 не подойдут для 3.0.
Подготовка: структуры конфигураций и план обмена
Начните с выгрузки описания структур метаданных обеих баз. В «Конвертации данных 2.1» для этого используется обработка MD83Exp.epf (или её аналог для вашей версии платформы), которая формирует XML-файл со структурой конфигурации. Загрузите обе структуры в базу конвертации и создайте новую конвертацию, указав источник и приёмник.
Убедитесь, что версии конфигураций в структурах актуальны. Если в рабочей базе добавили реквизит, а структуру не перевыгрузили, правило для этого реквизита просто не найдёт источника, и при загрузке поле останется пустым. Перевыгружайте структуры после каждого существенного обновления конфигураций.
Если обмен работает через план обмена, заранее проверьте состав плана: какие объекты регистрируются к выгрузке, есть ли ограничения по узлам. Правила конвертации не заменяют план обмена — они работают в паре: план определяет, что изменилось, правила — как это преобразовать.
- 1Выгрузите структуры метаданных источника и приёмника обработкой выгрузки описания конфигурации
- 2Создайте в «Конвертации данных» новую конвертацию и загрузите обе структуры
- 3Создайте ПКО для ключевых объектов: справочники, затем документы
- 4Настройте ПКС для реквизитов и ПКГС для табличных частей
- 5Добавьте алгоритмы там, где не хватает стандартного сопоставления
- 6Сохраните правила в XML-файл и протестируйте на копиях баз
Настройка правил конвертации объектов
ПКО связывает объект источника с объектом приёмника и определяет способ поиска при загрузке. Для справочников типичный вариант — поиск по коду или по GUID (полю «Ссылка»), для документов — по номеру и дате в сочетании с организацией. Неправильно выбранный способ поиска — главная причина дублей: если искать контрагентов по наименованию, любое расхождение в пробеле создаст новую карточку.
У каждого ПКО есть обработчики событий: «Перед выгрузкой», «При выгрузке», «Перед загрузкой», «При загрузке», «После загрузки». В «Перед выгрузкой» можно отказаться от выгрузки объекта (Отказ = 1), в «После загрузки» — дозаполнить объект программно, например установить признак проведения или подставить значение по умолчанию, которого нет в источнике.
Для иерархических справочников включайте выгрузку родителей, иначе элементы попадут в приёмник без групп. Для объектов, ссылающихся друг на друга (договор ссылается на контрагента, контрагент — на основной договор), используйте выгрузку по ссылке: конвертация сама выгрузит связанный объект по его ПКО.
Правила конвертации свойств и табличных частей
ПКС сопоставляет реквизит источника реквизиту приёмника. Если типы совпадают, достаточно простого соответствия. Если реквизит ссылочный — укажите ПКО, по которому конвертировать ссылку. Если типы различаются (в источнике строка, в приёмнике перечисление), потребуется обработчик «Перед выгрузкой» с явным преобразованием значения.
ПКГС описывает табличную часть: источник — табличная часть выгружаемого объекта, приёмник — табличная часть загружаемого. Внутри ПКГС настраиваются ПКС для колонок. Частая задача — фильтрация строк: например, выгружать только строки с ненулевым количеством. Это делается в обработчике «Перед выгрузкой» ПКГС через отказ для отдельных строк.
Алгоритмы и запросы: когда сопоставления не хватает
Алгоритмы — именованные фрагменты кода на встроенном языке, которые вызываются из обработчиков правил. Они нужны для сложных преобразований: расчёта значения по нескольким реквизитам, поиска объекта приёмника произвольным запросом, сборки таблицы значений для нестандартной табличной части.
Типовой приём — поиск контрагента по ИНН и КПП, когда стандартного поиска по полям ПКО недостаточно. В алгоритме выполняется запрос к базе-приёмнику через параметры подключения или, при файловом обмене, поиск выполняется на стороне загрузки в событии «Поля поиска». Учтите важное ограничение: алгоритмы, выполняемые при загрузке, не имеют доступа к базе источника, а алгоритмы выгрузки — к базе приёмника, если только не настроено прямое подключение через COM или OLE.
Для тяжёлых выборок используйте произвольные алгоритмы выборки вместо стандартного способа: правило конвертации данных (ПКД) с обработчиком «Перед обработкой» позволяет выгрузить результат запроса, а не объект целиком. Это существенно ускоряет обмен большими массивами документов.
// Пример: обработчик ПКС «Перед выгрузкой» — преобразование строки в перечисление
Если Значение = "Опт" Тогда
Значение = "ОптоваяПродажа";
ИначеЕсли Значение = "Розница" Тогда
Значение = "РозничнаяПродажа";
Иначе
Отказ = Истина; // строку не выгружаем
КонецЕсли;Параметры, отладка и контроль версий правил
Параметры конвертации позволяют управлять поведением правил без их переписывания: дата начала выгрузки документов, признак выгрузки помеченных на удаление, список организаций. Параметры объявляются в конвертации и доступны в обработчиках через коллекцию «Параметры». Для диалоговых параметров можно настроить форму настройки, которую увидит пользователь при выгрузке.
Отлаживайте правила пошагово. В «Конвертации данных» есть режим отладки обработчиков: код выгружается во внешнюю обработку, которую можно открыть в конфигураторе и выполнить с точками останова. Это единственный надёжный способ поймать ошибку в сложном алгоритме — сообщения об ошибках при обмене часто показывают только следствие, а не причину.
Храните XML-файлы правил в системе контроля версий или хотя бы с датой в имени файла. При параллельной доработке конфигураций правила устаревают быстро, и без истории изменений сложно понять, какая версия правил работает в рабочем обмене и что в ней менялось.
Тестирование и типичные ошибки
Тестирование строится в три этапа. Сначала выгрузите небольшой пакет — один справочник и несколько документов за один день — и загрузите в копию. Затем проверьте ссылки: откройте загруженный документ и убедитесь, что контрагент, договор и номенклатура ссылаются на существующие объекты, а не на «битые» ссылки. Наконец, выполните полный цикл обмена за реальный период и сравните обороты по ключевым регистрам источника и приёмника.
Как проверить результат обмена
Совпадает с количеством выгруженных, документы проведены
Часть документов отсутствует или не проведена без явной причины
Все ссылки открываются в реальные объекты
Встречаются объекты вида «<Объект не найден>»
Количество элементов не растёт аномально при повторном обмене
При каждом обмене появляются дубли — неверно настроен поиск в ПКО
Итоги источника и приёмника совпадают
Расхождения — пропущены движения или ошибка в ПКГС
Часто задаваемые вопросы
Чем отличается Конвертация данных 2.1 от 3.0?
Редакция 2.1 хранит правила в XML-файле с обработчиками на встроенном языке и подходит для произвольных пар конфигураций. Редакция 3.0 работает через универсальный формат EnterpriseData: данные передаются как XDTO-пакеты, а логика конвертации описывается в общих модулях менеджера обмена. Для новых обменов между типовыми конфигурациями чаще применяют 3.0, для нестандартных задач и старых баз — 2.1.
Можно ли написать правила обмена без Конвертации данных?
Да. Для простых случаев обмен пишут вручную: выгрузка в XML, JSON или через HTTP-сервисы силами встроенного языка. Это оправдано, когда передаётся один-два объекта в фиксированной структуре. Но при росте числа объектов ручной код становится сложнее в сопровождении, чем правила конвертации, где сопоставления видны в наглядной форме.
Почему при загрузке появляются дубли контрагентов?
Почти всегда причина в настройке поиска в ПКО. Если поиск идёт по наименованию или реквизиту, который заполнен не у всех элементов, приёмник не находит существующий объект и создаёт новый. Настройте поиск по устойчивому ключу: GUID, код, сочетание ИНН и КПП — и убедитесь, что этот ключ заполнен в источнике у всех выгружаемых элементов.
Как выгрузить документы только за определённый период?
Добавьте в конвертацию параметр «ДатаНачала» и в обработчике «Перед выгрузкой» ПКО документа проверяйте дату объекта: если она меньше параметра, устанавливайте Отказ = 1. Альтернатива — произвольный алгоритм выборки в правиле конвертации данных, где запрос сразу отбирает документы за нужный период, что быстрее на больших объёмах.
Что делать, если обмен завершается с ошибкой, но причина непонятна?
Включите протокол обмена с максимальной детализацией — в нём видно, на каком объекте и в каком обработчике возникла ошибка. Затем используйте режим отладки обработчиков: конвертация сформирует внешнюю обработку с кодом правил, которую можно выполнить в конфигураторе с точками останова и посмотреть значения переменных в момент сбоя.
Нужно ли переписывать правила после обновления конфигурации?
Полностью — нет, но проверка обязательна. Если обновление добавило обязательные реквизиты, переименовало объекты или изменило типы полей, соответствующие ПКО и ПКС нужно доработать, а структуры метаданных — перевыгрузить. После каждого обновления конфигураций прогоняйте тестовый обмен на копии, даже если правила не менялись.
Что важно запомнить
Правила обмена строятся на связке ПКО–ПКС–ПКГС с обработчиками событий и алгоритмами для нестандартных преобразований. Ключ к стабильному обмену — правильный поиск объектов при загрузке, значения по умолчанию для обязательных реквизитов и обязательное тестирование на копии базы со сверкой итогов. Версии правил и структур метаданных контролируйте так же строго, как версии самих конфигураций.