При разработке нетиповых обменов данными между конфигурациями на платформе 1С:Предприятие 8.3 часто возникает вопрос совместимости проверенных временем инструментов и современных механизмов доработки систем. Одним из таких вопросов является использование «Конвертации данных 2.1» (КД 2.1) для переноса данных, которые хранятся в реквизитах или объектах, созданных с помощью расширений конфигурации.
Рассмотрим типичную ситуацию: в конфигурации «Управление торговлей 11» часть необходимых бизнес-логике реквизитов вынесена в расширение. Нам необходимо настроить правила обмена в КД 2.1. Главное опасение разработчиков здесь заключается в том, увидит ли специализированная обработка выгрузки метаданных те поля, которые отсутствуют в основной конфигурации, но присутствуют в расширении. Разберем эту ситуацию подробно и выясним, как правильно организовать процесс выгрузки.
Для начала проанализируем, как платформа 1С воспринимает структуру данных при подключенных расширениях. Когда мы запускаем сеанс в режиме 1С:Предприятие, платформа выполняет динамическое объединение основной конфигурации и всех активных расширений. С точки зрения встроенного языка и системных механизмов, в этот момент формируется единое дерево метаданных.
Разберем, почему это важно для КД 2.1. Основной инструмент для подготовки описания конфигурации — обработка MD82Exp.epf (или её аналоги для разных версий платформы) — работает именно в пользовательском режиме (Runtime). Она обращается к коллекции Метаданные программно. Поскольку платформа «на лету» подмешивает объекты расширения в общую структуру, обработка получает доступ ко всем реквизитам, независимо от того, где они определены физически.
Выясним последовательность действий, которую необходимо выполнить для корректного отображения расширенных реквизитов в правилах конвертации:
MD82Exp.epf непосредственно в той информационной базе, где применены расширения.Номенклатура, они появятся в общем списке полей этого объекта.Проанализируем ситуацию с именами объектов. Как правило, реквизиты в расширениях создаются с уникальными префиксами (например, ит_ДополнительнаяИнформация), чтобы избежать конфликтов при обновлении типовой конфигурации. Рассмотрим, как это влияет на КД 2.1:
При загрузке структуры в базу «Конвертация данных», объекты и свойства будут иметь именно те имена, которые заданы в конфигураторе расширения. Если вы планируете переносить данные между двумя базами, где одинаковые по смыслу реквизиты созданы в расширениях, проследите за тем, чтобы их имена (включая префиксы) совпадали. Это позволит использовать механизм автоматического сопоставления свойств (ПКС) в правилах конвертации объектов (ПКО).
Хотя стандартный механизм работает корректно, разберем несколько критических моментов, которые могут помешать успеху:
1. Версия обработки выгрузки. Рекомендуется использовать актуальные версии MD82Exp.epf из состава последних релизов КД 2.1. Старые версии обработок, созданные до появления механизмов расширений, могут некорректно обрабатывать некоторые специфические свойства или типы данных, появившиеся в платформе 8.3.10 и выше.
2. Безопасный режим. Выясним влияние настроек безопасности. Если для расширения в списке установлена галочка «Безопасный режим», платформа может ограничить доступ расширения к некоторым системным ресурсам. При выгрузке метаданных рекомендуется временно отключать этот флаг для расширения, чтобы гарантировать полный доступ обработки к программному интерфейсу чтения структуры.
3. Типы данных из расширений. Рассмотрим пример: если реквизит в расширении имеет тип ссылки на справочник, который также создан полностью внутри расширения. В этом случае для корректной работы КД 2.1 необходимо выгружать структуру метаданных целиком, чтобы в файл описания попал и сам реквизит, и объект-тип, на который он ссылается. В противном случае в КД 2.1 тип реквизита может определиться как «Неизвестный тип».
После того как файл со структурой сформирован, проделаем следующие шаги в информационной базе КД 2.1:
Посмотрим на пример программного обращения к метаданным, который использует обработка внутри себя (упрощенно):
// Платформа вернет все реквизиты: и основные, и из расширений
Для Каждого Реквизит Из Метаданные.Справочники.Номенклатура.Реквизиты Цикл
Сообщить(Реквизит.Имя);
// Если в расширении добавлен реквизит "ит_ВесБрутто", он будет здесь
КонецЦикла;
Подведем итог: использование расширений не является препятствием для настройки обмена через «Конвертацию данных 2.1». Благодаря тому, что выгрузка метаданных происходит в режиме 1С:Предприятие, программный интерфейс платформы предоставляет монолитную структуру данных. Главное — следить за активностью расширений в момент выгрузки и использовать актуальный инструментарий. Это позволяет сохранить гибкость разработки (используя расширения) и надежность обмена (используя проверенную КД 2.1).