В мире 1С:Предприятия 8.3 расширения конфигурации стали мощным инструментом для доработки типовых решений без изменения основной конфигурации, сохраняя возможность автоматического обновления. Однако разработчики часто сталкиваются с проблемой видимости объектов, созданных в расширениях, из внешних отчетов и обработок, особенно при работе в режиме конфигуратора. Давайте подробно разберем эту ситуацию и найдем эффективные способы ее решения.
Предположим, мы создали расширение и добавили через него новый реквизит, например, КодНов, к существующему справочнику или документу. В режиме "1С:Предприятие" этот реквизит прекрасно отображается на форме и доступен для использования. Однако, когда мы пытаемся обратиться к нему из внешнего отчета, который разрабатывается в конфигураторе, возникает проблема:
спр.КодНов, платформа выдает ошибку "Поле объекта не обнаружено".КодНов просто не отображается в списке доступных полей, и попытка его использования приводит к ошибке "Поле не найдено".Эта ситуация возникает из-за специфики взаимодействия между основной конфигурацией, расширениями и внешними объектами в режиме конфигуратора.
Разберем, почему возникает такая ситуация.
Расширения спроектированы как своего рода замкнутые системы. В режиме "1С:Предприятие" платформа автоматически объединяет основную конфигурацию со всеми активными расширениями, создавая единое "пространство" объектов. Именно поэтому программный код и запросы, исполняемые внутри расширения или самой конфигурации, видят все добавленные реквизиты.
Однако в режиме конфигуратора ситуация иная. Внешние отчеты и обработки, открытые в конфигураторе, по умолчанию видят только объекты основной конфигурации. Они не имеют прямого доступа к структуре данных, добавленной через расширения, даже если эти расширения установлены в информационную базу. Платформа воспринимает внешние объекты как независимые от расширений, и для обеспечения стабильности и возможности отключения расширений без нарушения работы основной конфигурации, она не "показывает" их реквизиты напрямую в конструкторах внешних отчетов.
Пользователи на форуме 1С отмечают, что проблема, скорее всего, не в невозможности понять, что именно сделано в расширении, а в самой идеологии. Разработчики платформы, вероятно, исходили из того, что объект может обращаться либо к реквизитам основной конфигурации, либо к своему расширению (включая заимствования). Внешние же объекты видят только основную конфигурацию.
Несмотря на эти ограничения, существуют проверенные методы, позволяющие успешно использовать реквизиты из расширений во внешних отчетах. Рассмотрим каждый из них подробно.
Самый надежный и прямолинейный способ – это добавить сам отчет (или обработку) непосредственно в то же расширение, которое добавляет необходимые реквизиты. Если отчет является частью расширения, он будет иметь полный доступ ко всем объектам, добавленным этим расширением, а также ко всем заимствованным объектам основной конфигурации. В этом случае конструктор запросов СКД будет корректно отображать и позволять выбирать реквизиты из расширения.
Преимущества:
Недостатки:
Это один из наиболее часто применяемых и эффективных обходных путей, который позволяет использовать реквизиты расширения во внешнем отчете, не добавляя сам отчет в расширение. Мы воспользуемся тем фактом, что в режиме "1С:Предприятие" все расширения активны, и объекты из них доступны.
Шаги по реализации:
КодНов), и сможете их полноценно использовать в конструкторе запросов консоли. Консоль запросов в пользовательском режиме предоставляет нам полную картину доступных данных.Важный момент: Конфигуратор при этом может выдавать предупреждения или даже ошибки о "непонятном реквизите" или "поле не найдено", когда вы импортируете схему или вставляете текст запроса. Не обращайте внимания на эти предупреждения на этапе сохранения объекта в конфигураторе. Главное, что схема или запрос были успешно построены и отлажены в пользовательском режиме. При исполнении внешнего отчета в режиме "1С:Предприятие" платформа корректно объединит все расширения, и запрос/СКД будет работать правильно.
Пример кода для программного использования запроса во внешнем отчете:
// В модуле объекта внешнего отчета
Функция СформироватьОтчет(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочник.Ссылка КАК Ссылка,
| Справочник.Наименование КАК Наименование,
| Справочник.КодНов КАК КодНов // Здесь КодНов - реквизит из расширения
|ИЗ
| Справочник.МойСправочник КАК Справочник
|ГДЕ
| Справочник.ПометкаУдаления = ЛОЖЬ";
// Можно добавить параметры запроса
// Запрос.УстановитьПараметр("НачПериода", НачалоПериода);
// Запрос.УстановитьПараметр("КонПериода", КонецПериода);
Попытка
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Исключение
Сообщить("Ошибка при выполнении запроса: " + ОписаниеОшибки());
Возврат Новый ТаблицаЗначений();
КонецПопытки;
Возврат РезультатЗапроса;
КонецФункции
Даже если конфигуратор подсвечивает Справочник.КодНов как ошибку во время сохранения, при выполнении отчета в режиме 1С:Предприятие, где расширение активно, запрос отработает без проблем и вернет данные с этим реквизитом.
Некоторые разработчики упоминают возможность обхода проблем с видимостью через вычисляемые поля в СКД. Суть в том, чтобы попытаться обратиться к данным через функцию Ресурс("ИмяРесурса"), где "ИмяРесурса" – это имя ресурса, созданного в расширении. Этот подход требует тщательной проверки и может быть применим не во всех случаях, но может быть рассмотрен как дополнительный вариант, если другие методы по каким-то причинам не подходят.
Мы выяснили, что механизм расширений продолжает активно развиваться. Разработчики 1С постепенно улучшают его функциональность и интеграцию.
Например, в платформе 8.3.28 ожидаются значительные улучшения. Планируется, что объекты расширений, установленных в информационную базу, станут доступны в режиме Конфигуратора во внешних отчетах и обработках. Это позволит:
До этих изменений мы сталкиваемся с тем, что, хотя с версии 8.3.11 появилась возможность добавлять реквизиты непосредственно в расширение, а с 8.3.18 изменять типы реквизитов основной конфигурации через расширение, полная "прозрачность" для внешних отчетов в конфигураторе до сих пор оставалась недостижимой. Кроме того, существуют и другие ограничения, например, некоторые объекты (функциональные опции, бизнес-процессы, регламентные задания, внешние источники данных, подписки на события, общие реквизиты и др.) до сих пор не поддерживаются в расширениях.
Мы выяснили, что работа с реквизитами из внешних расширений во внешних отчетах в конфигураторе 1С:Предприятия 8.3 имеет свои особенности. Если вы активно используете расширения, рекомендуем:
Применяя эти подходы, мы сможем эффективно обходить текущие ограничения платформы и успешно решать задачи по разработке функционала с использованием расширений, обеспечивая при этом гибкость и возможность обновления типовых конфигураций.