Разработка в системе 1С:Предприятие с использованием нескольких расширений — это стандарт современной модульной архитектуры. Однако часто программисты сталкиваются с ситуацией, когда объект (например, перечисление, справочник или документ), созданный в «Расширении А», категорически отказывается «видеться» в «Расширении Б». Особенно остро эта проблема проявляется при работе со Схемой компоновки данных (СКД) и Конструктором запросов, когда система выдает ошибку «Неверное имя файла» или просто не находит нужный метаданный. В этой статье мы подробно разберем, как настроить среду разработки так, чтобы объекты были доступны, и выясним, какие изменения приготовила платформа в версии 8.3.28.
Прежде всего, проанализируем ситуацию. Когда мы открываем конструктор запроса в контексте одного расширения, Конфигуратор строит дерево доступных метаданных. По умолчанию в него входят объекты основной конфигурации и объекты текущего расширения. Объекты других установленных в базе расширений в этот список не попадают, так как расширения по своей природе изолированы друг от друга.
Ошибка «Неверное имя файла» при указании полного пути к объекту другого расширения возникает из-за того, что визуальный редактор СКД пытается провести валидацию типа данных «здесь и сейчас». Если расширение-потребитель не знает о существовании расширения-поставщика, проверка проваливается, хотя в режиме «Предприятие» такой отчет может работать корректно (так как там расширения объединяются в общий контекст).
Рассмотрим основной штатный способ решения проблемы — использование механизма зависимостей. Это единственный способ официально «объяснить» одному расширению, что оно должно видеть метаданные другого. Выполним следующие шаги:
После настройки зависимостей рекомендуется полностью перезапустить Конфигуратор. Это необходимо для того, чтобы платформа перестроила внутренние кэши метаданных и «подтянула» объекты зависимых расширений в визуальные редакторы.
Иногда даже настройка зависимостей не заставляет Конструктор запросов корректно отображать поля объектов другого расширения. Рассмотрим тактику работы в таких условиях. Профессиональное сообщество часто использует метод «ручного ввода» или внешних консолей.
Выясним алгоритм действий, если конструктор выдает ошибки:
// Обращение к перечислению из другого расширения
ТипОбъекта = Тип("ПеречислениеСсылка.ИмяДругогоРасширения_ИмяОбъекта");
Если ТипЗнч(ТекСсылка) = ТипОбъекта Тогда
// Выполняем логику
КонецЕсли;
Проанализируем еще один важный аспект — свойства расширений «Назначение» и «Порядок». Платформа 1С обрабатывает расширения в определенной последовательности, что напрямую влияет на их видимость в рантайме.
Существует три типа назначения:
Посмотрим на правило: объекты расширения с назначением «Дополнение» могут быть не видны расширению с назначением «Исправление» без явной настройки зависимостей, так как «Исправления» применяются раньше. Всегда старайтесь держать расширения, от которых зависят другие, выше в списке (с меньшим порядковым номером) или с более «базовым» назначением.
Хорошие новости для разработчиков: в версии платформы 8.3.28 вводится понятие «Контекст разработки». Это долгожданное обновление, которое решает проблему «пустых списков» в конструкторе запросов. Разберем, что изменится:
Теперь при редактировании внешнего отчета или объекта в расширении можно будет явно указать список расширений, которые должны имитировать свое присутствие в основной конфигурации. Это позволит Конструктору запросов и проверке синтаксиса видеть все необходимые метаданные так, как если бы они были частью одной большой конфигурации. Больше не придется писать запросы «вслепую» или использовать временные заглушки-объекты.
Если вы прямо сейчас столкнулись с тем, что СКД не принимает имя перечисления из другого расширения, воспользуйтесь следующими рекомендациями:
Перечисление.Расш2_СтатусыЗаказов.Новый), просто сохраните схему. Часто в режиме «Предприятие» эта ошибка исчезает, так как там контексты объединяются.Подведем итог: для полноценной работы между расширениями критически важно настраивать Зависимости в свойствах метаданных и следить за порядком их подключения. С выходом версии 8.3.28 эти процессы станут значительно проще благодаря встроенным инструментам управления контекстом разработки.