Получает объект описания расширения конфигурации, с помощью которого объект метаданных был добавлен.
Синтаксис
РасширениеКонфигурации()Полное описание, параметры и ограничения
ОбъектМетаданных: Бот.РасширениеКонфигурации (MetadataObject: Bot.ConfigurationExtension)
ОбъектМетаданных: Бот (MetadataObject: Bot)
РасширениеКонфигурации (ConfigurationExtension)
Доступен, начиная с версии 8.3.8.
Синтаксис:
РасширениеКонфигурации()
Возвращаемое значение:
Тип: РасширениеКонфигурации, Неопределено.
Неопределено - объект относится к основной конфигурации.
Описание:
Получает объект описания расширения конфигурации, с помощью которого объект метаданных был добавлен.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.3.8.
Методическая информация
Практические примеры
Разобрать описание своего бота, не подключая систему взаимодействия
Проверяем предопределённое описание бота и его родителя, выводим настоящий состав стандартных реквизитов, разбираем картинку и неизвестные размеры без регистрации и сообщений.
Где и как запускать
Полный обычный клиентский общий модуль УчебнаяИнтеграция85; только толстый клиент. Модуль формы отдельно. Не выполнялся.
Подготовка
Создайте НОВУЮ отдельную файловую базу на платформе 8.5.1.1343, имя конфигурации УчебныеМетаданныеИнтеграции85, совместимость НеИспользовать, обычное приложение, толстый клиент. Не рабочую базу и не её копию. Здесь подготовка и код не выполнялись: runtimeVerifiedScenarios=0.
Общий модуль УчебнаяИнтеграция85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставьте полный модуль выбранного урока. Для другого урока замените полный текст, поскольку оба имеют точку входа ВыполнитьПример.
Создайте обработку УчебнаяИнтеграция85, обычную основную форму Пульт и кнопку Выполнить с действием ВыполнитьНажатие. Полный короткий модуль формы приведён отдельным блоком. Никаких реквизитов формы для отчёта не требуется.
Урок каналов: Общие → Сервисы интеграции → УчебныйОбмен85, синоним Учебный обмен, комментарий guide-owned-integration-85. Адрес внешнего сервиса http://127.0.0.1:9/guide-integration-85 — намеренно не обслуживаемый учебный адрес. Не вводите пароли, не настраивайте реальный сервис и НЕ включайте активность сервиса в режиме Предприятие.
В УчебныйОбмен85 создайте ровно два канала. Исходящие85: направление Отправка, внешнее имя guide-out-85, обработчик получения пустой, ВТранзакции=Нет. Входящие85: направление Получение, внешнее имя guide-in-85, обработчик ОтказатьУчебномуПриему, ВТранзакции=Да. Синонимы Учебные исходящие/Учебные входящие, комментарии guide-owned-out-85/guide-owned-in-85.
В модуль менеджера сервиса УчебныйОбмен85 вставьте отдельный полный обработчик из блока ниже. Он лишь устанавливает Отказ=Истина, ничего не записывает и не отправляет. Это защитная заглушка для неактивного стенда, НЕ готовый обработчик бизнес-обмена; при случайной активации его отказ может приводить к повторным попыткам.
Урок бота: Общие → Боты → УчебныйПомощник85, синоним Учебный помощник, комментарий guide-owned-bot-85, Предопределенный=Да, Картинка пустая, модуль пустой. Если подготовка потребует настройки прав, используйте только администратора своего нового стенда. Систему взаимодействия не подключайте, диалоги и сообщения не создавайте.
Сохраните и обновите только собственную учебную конфигурацию, выполните F7, затем запустите толстый клиент и Пульт. Будущий результат — новый табличный документ в памяти. Не печатайте и не сохраняйте его через команды окна; здесь запуск, обновление базы, сеть и регистрация бота не выполнялись.
Процедура ВыполнитьПример() Экспорт
ПроверитьСвойКонтекст();
МДБота = Метаданные.Боты.Найти("УчебныйПомощник85");
Если МДБота = Неопределено Тогда
ВызватьИсключение "Создайте собственное определение УчебныйПомощник85";
КонецЕсли;
Паспорт = СоздатьСвоюТаблицу();
ДобавитьСвойПаспорт(Паспорт, МДБота, "УчебныйПомощник85", Метаданные);
Если Не МДБота.Предопределенный Тогда
ВызватьИсключение "В подготовке нужен собственный предопределенный бот";
КонецЕсли;
Если МДБота.Модуль <> Неопределено Тогда
ВызватьИсключение "Модуль метаданных не является текстом или вызываемым объектом";
КонецЕсли;
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Предопределенный", МДБота.Предопределенный);
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Модуль: ожидается Неопределено", МДБота.Модуль);
Реквизиты = МДБота.СтандартныеРеквизиты;
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Количество стандартных реквизитов", Реквизиты.Количество());
Количество = 0;
Для Каждого Реквизит Из Реквизиты Цикл
Если ПустаяСтрока(Реквизит.Имя) Тогда
ВызватьИсключение "У стандартного реквизита отсутствует программное имя";
КонецЕсли;
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Реквизит: " + Реквизит.Имя, Реквизит.Синоним);
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Тип реквизита: " + Реквизит.Имя, Реквизит.Тип);
Количество = Количество + 1;
КонецЦикла;
Если Количество <> Реквизиты.Количество() Тогда
ВызватьИсключение "Обход стандартных реквизитов не совпал с размером коллекции";
КонецЕсли;
КартинкаБота = МДБота.Картинка;
Если ТипЗнч(КартинкаБота) <> Тип("Картинка") Тогда
ВызватьИсключение "Картинка определения должна иметь тип Картинка";
КонецЕсли;
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Вид картинки", КартинкаБота.Вид);
Ширина = КартинкаБота.Ширина();
Высота = КартинкаБота.Высота();
Если Ширина = Неопределено Или Высота = Неопределено Тогда
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Размер картинки", "Размеры недоступны для этого представления, например коллекции картинок");
Иначе
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Ширина в пикселях", Ширина);
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Высота в пикселях", Высота);
Если Ширина > 0 И Высота > 0 Тогда
ДобавитьСтроку(Паспорт, МДБота.ПолноеИмя(), "Отношение ширины к высоте", Ширина / Высота);
КонецЕсли;
КонецЕсли;
ПоказатьСвойПаспорт(Паспорт, "Свой бот: описание, реквизиты и картинка, без диалогов");
КонецПроцедуры
Процедура ПроверитьСвойКонтекст()
Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
ВызватьИсключение "Нужен собственный стенд УчебныеМетаданныеИнтеграции85 платформы 8.5.1.1343";
КонецЕсли;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
КонецЕсли;
КонецПроцедуры
Процедура ДобавитьСвойПаспорт(Таблица, МД, ОжидаемоеИмя, ОжидаемыйРодитель)
Если МД.Имя <> ОжидаемоеИмя Или МД.Родитель() <> ОжидаемыйРодитель Тогда
ВызватьИсключение "Не совпало имя или родитель собственного объекта метаданных";
КонецЕсли;
Если МД.ПринадлежностьОбъекта <> Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный
Или МД.РасширениеКонфигурации() <> Неопределено Или МД.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Опыт предназначен только для своих объектов без расширений";
КонецЕсли;
ПолноеИмя = МД.ПолноеИмя();
Если ПустаяСтрока(ПолноеИмя) Или ПустаяСтрока(МД.Представление()) Тогда
ВызватьИсключение "У собственного объекта нет полного имени или представления";
КонецЕсли;
ДобавитьСтроку(Таблица, ПолноеИмя, "Имя", МД.Имя);
ДобавитьСтроку(Таблица, ПолноеИмя, "Синоним", МД.Синоним);
ДобавитьСтроку(Таблица, ПолноеИмя, "Представление", МД.Представление());
ДобавитьСтроку(Таблица, ПолноеИмя, "Комментарий", МД.Комментарий);
ДобавитьСтроку(Таблица, ПолноеИмя, "Принадлежность", МД.ПринадлежностьОбъекта);
ДобавитьСтроку(Таблица, ПолноеИмя, "Привязка заимствованного объекта", МД.ОбъектРасширяемойКонфигурации);
КонецПроцедуры
Процедура ДобавитьСтроку(Таблица, Объект, Свойство, Значение)
СтрокаПаспорта = Таблица.Добавить();
СтрокаПаспорта.Объект = Объект;
СтрокаПаспорта.Свойство = Свойство;
СтрокаПаспорта.Значение = Строка(Значение);
КонецПроцедуры
Функция СоздатьСвоюТаблицу()
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Объект");
Таблица.Колонки.Добавить("Свойство");
Таблица.Колонки.Добавить("Значение");
Возврат Таблица;
КонецФункции
Процедура ПоказатьСвойПаспорт(Таблица, Заголовок)
Если Таблица.Количество() = 0 Тогда
ВызватьИсключение "Собственный паспорт пуст";
КонецЕсли;
Документ = Новый ТабличныйДокумент;
Документ.Область("R1C1").Текст = "Объект";
Документ.Область("R1C2").Текст = "Свойство";
Документ.Область("R1C3").Текст = "Значение";
Номер = 2;
Для Каждого Запись Из Таблица Цикл
Документ.Область(Номер, 1).Текст = Запись.Объект;
Документ.Область(Номер, 2).Текст = Запись.Свойство;
Документ.Область(Номер, 3).Текст = Запись.Значение;
Номер = Номер + 1;
КонецЦикла;
Документ.Показать(Заголовок, "", Истина);
КонецПроцедурыУчебнаяИнтеграция85.Пульт
УчебныеМетаданныеИнтеграции85 → Обработки → УчебнаяИнтеграция85 → Формы → Пульт → Модуль
Полный модуль собственной обычной формы. Не выполнялся.
Процедура ВыполнитьНажатие(Кнопка)
УчебнаяИнтеграция85.ВыполнитьПример();
КонецПроцедурыРазбор по шагам
ПроверитьСвойКонтекст сверяет платформу, имя своего стенда, совместимость и отсутствие активной транзакции. Объект берётся из Метаданные, не создаётся через Новый и не получается из неизвестного параметра.
Паспорт проверяет программное Имя, фактического Родителя и три разных признака: ПринадлежностьОбъекта, РасширениеКонфигурации и ЕстьИзмененияРасширениямиКонфигурации. Синоним не используется как программный ключ.
Общие свойства Имя, Синоним, Комментарий и Представление выводятся рядом с ПолноеИмя. ОбъектРасширяемойКонфигурации относится к заимствованию; его значение само по себе не заменяет проверки расширений.
Весь отчёт собирается до показа окна. При несовпадении подготовки вызывается понятное исключение, а неполный паспорт не выдаётся за успешную проверку.
Метаданные.Боты.Найти получает собственное описание УчебныйПомощник85. Это не создание экземпляра БотСистемыВзаимодействия и не обращение к зарегистрированному участнику диалога.
Предопределенный должен быть Истина по подготовке. Предопределённые боты определяются метаданными; их создание и удаление выполняются автоматически платформой. Код не вызывает создание или удаление.
СтандартныеРеквизиты возвращает ОписанияСтандартныхРеквизитов. Перебираем реально присутствующие описания, выводим Имя, Синоним и Тип и сверяем число пройденных элементов. Не требуем реквизиты справочника, которых у бота может не быть.
Картинка возвращает объект Картинка, в том числе пустой. Читаем Вид, Ширина() и Высота(); для изображения из коллекции размеры могут быть Неопределено, это допустимый ответ, а не число ноль.
Отношение ширины к высоте вычисляем только при известных положительных размерах, поэтому нет деления на ноль. Картинка описания не доказывает установку аватара в системе взаимодействия.
Как проверить результат
Будущий тест: F7 и Выполнить в собственном толстом клиенте. Отчёт содержит подготовленные программные имена, синонимы и комментарии; runtimeVerifiedScenarios пока равен 0.
Измените только Синоним в своём Конфигураторе, обновите свой стенд и повторите: подпись паспорта изменится, поиск по Имя сохранится. Переименование самого объекта должно привести к отказу поиска старого имени.
Будущий паспорт содержит УчебныйПомощник85, Предопределенный=Истина и неопределённый Модуль. Количество строк реквизитов зависит от реальной коллекции платформы; заранее не обещаем Наименование или Код.
Первый опыт оставляет пустую картинку допустимой. В собственном Конфигураторе выберите стандартную картинку или картинку коллекции и повторите: Вид должен соответствовать новому описанию, неизвестные размеры не должны привести к арифметической ошибке.
В своей подготовке снимите Предопределенный: если платформа допускает такое определение, аудит должен отказать по этому флагу. Если проверка конфигурации запрещает изменение, не обходите её; верните подготовку.
Не должно появиться подключение, диалог или сообщение. Проверка метаданных не требует живого сервера взаимодействия.
Ожидаемый результат
Будущий результат — отчёт о собственных определениях и их согласованности. Он не подтверждает доставку сообщений, регистрацию бота или работу внешней инфраструктуры. runtimeVerifiedScenarios=0.
На что обратить внимание
Метаданные описывают конфигурацию, а не состояние очереди, доставки или подключения. Ни один успешный паспорт не означает, что интеграция работает.
Модуль всегда возвращает Неопределено. Это не отсутствие написанного обработчика; получать исходный текст через это свойство или вызывать его нельзя.
Не используйте урок в рабочей базе. Статические проверки и отображение HTML не являются компиляцией или выполнением в 1С.
Состав стандартных реквизитов зависит от вида метаданных; нельзя копировать список полей справочника в пример бота.
В статье Метаданные.Боты есть противоречивое название типа элементов БотСистемыВзаимодействия; статья ОбъектМетаданных: Бот описывает именно объект метаданных. Урок работает с его описанными членами и не вызывает API экземпляра системы взаимодействия.
Ширина и высота являются методами, а не свойствами. Неопределено для картинки коллекции не означает, что отсутствует само определение Картинка.
Предопределённый бот не предназначен для ручного удаления. Урок не тестирует автоматическую регистрацию, обработку событий или права реального бота.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.