ОбъектМетаданных: СервисИнтеграции.Родитель

Методы · Parent

Получает объект описания метаданного, которому подчинен данный объект.

Синтаксис

Родитель()

Примеры платформы

Метаданные.Документы.РасходнаяНакладная.Реквизиты.Цена.Родитель();
Полное описание, параметры и ограничения

ОбъектМетаданных: СервисИнтеграции.Родитель (MetadataObject: IntegrationService.Parent)

ОбъектМетаданных: СервисИнтеграции (MetadataObject: IntegrationService)

Родитель (Parent)

Доступен, начиная с версии 8.0.

Синтаксис:
Родитель()
Описание:

Получает объект описания метаданного, которому подчинен данный объект.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.

Пример:

// В данном примере метод вернет значение

// Метаданные.Документы.РасходнаяНакладная

Метаданные.Документы.РасходнаяНакладная.Реквизиты.Цена.Родитель();

Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Проверить направления и настройки двух каналов своего сервиса

До первого обмена найдём ошибки в определениях: перепутанное направление, внешнее имя, обработчик или флаг транзакции. Полный аудит читает только свои метаданные, не подключаясь к сервису.

Где и как запускать

Полный обычный клиентский общий модуль УчебнаяИнтеграция85; только толстый клиент. Модуль формы отдельно. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую базу на платформе 8.5.1.1343, имя конфигурации УчебныеМетаданныеИнтеграции85, совместимость НеИспользовать, обычное приложение, толстый клиент. Не рабочую базу и не её копию. Здесь подготовка и код не выполнялись: runtimeVerifiedScenarios=0.

  2. Общий модуль УчебнаяИнтеграция85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, Привилегированный=Нет, другие клиентские флаги=Нет. Вставьте полный модуль выбранного урока. Для другого урока замените полный текст, поскольку оба имеют точку входа ВыполнитьПример.

  3. Создайте обработку УчебнаяИнтеграция85, обычную основную форму Пульт и кнопку Выполнить с действием ВыполнитьНажатие. Полный короткий модуль формы приведён отдельным блоком. Никаких реквизитов формы для отчёта не требуется.

  4. Урок каналов: Общие → Сервисы интеграции → УчебныйОбмен85, синоним Учебный обмен, комментарий guide-owned-integration-85. Адрес внешнего сервиса http://127.0.0.1:9/guide-integration-85 — намеренно не обслуживаемый учебный адрес. Не вводите пароли, не настраивайте реальный сервис и НЕ включайте активность сервиса в режиме Предприятие.

  5. В УчебныйОбмен85 создайте ровно два канала. Исходящие85: направление Отправка, внешнее имя guide-out-85, обработчик получения пустой, ВТранзакции=Нет. Входящие85: направление Получение, внешнее имя guide-in-85, обработчик ОтказатьУчебномуПриему, ВТранзакции=Да. Синонимы Учебные исходящие/Учебные входящие, комментарии guide-owned-out-85/guide-owned-in-85.

  6. В модуль менеджера сервиса УчебныйОбмен85 вставьте отдельный полный обработчик из блока ниже. Он лишь устанавливает Отказ=Истина, ничего не записывает и не отправляет. Это защитная заглушка для неактивного стенда, НЕ готовый обработчик бизнес-обмена; при случайной активации его отказ может приводить к повторным попыткам.

  7. Урок бота: Общие → Боты → УчебныйПомощник85, синоним Учебный помощник, комментарий guide-owned-bot-85, Предопределенный=Да, Картинка пустая, модуль пустой. Если подготовка потребует настройки прав, используйте только администратора своего нового стенда. Систему взаимодействия не подключайте, диалоги и сообщения не создавайте.

  8. Сохраните и обновите только собственную учебную конфигурацию, выполните F7, затем запустите толстый клиент и Пульт. Будущий результат — новый табличный документ в памяти. Не печатайте и не сохраняйте его через команды окна; здесь запуск, обновление базы, сеть и регистрация бота не выполнялись.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойКонтекст();
    МДСервиса = Метаданные.СервисыИнтеграции.Найти("УчебныйОбмен85");
    Если МДСервиса = Неопределено Тогда
        ВызватьИсключение "Создайте собственный сервис УчебныйОбмен85";
    КонецЕсли;
    Паспорт = СоздатьСвоюТаблицу();
    ДобавитьСвойПаспорт(Паспорт, МДСервиса, "УчебныйОбмен85", Метаданные);
    Если МДСервиса.АдресВнешнегоСервисаИнтеграции <> "http://127.0.0.1:9/guide-integration-85" Тогда
        ВызватьИсключение "В своём определении нужен только неработающий учебный адрес";
    КонецЕсли;
    Если МДСервиса.Модуль <> Неопределено Тогда
        ВызватьИсключение "Свойство Модуль метаданных не возвращает текст исходника";
    КонецЕсли;
    Если МДСервиса.Каналы.Количество() <> 2 Тогда
        ВызватьИсключение "Подготовьте ровно два собственных канала";
    КонецЕсли;
    ДобавитьСтроку(Паспорт, МДСервиса.ПолноеИмя(), "Адрес из определения, не соединение", МДСервиса.АдресВнешнегоСервисаИнтеграции);
    ДобавитьСтроку(Паспорт, МДСервиса.ПолноеИмя(), "Модуль: ожидается Неопределено", МДСервиса.Модуль);
    Для Каждого МДКанала Из МДСервиса.Каналы Цикл
        Если МДКанала.Имя = "Исходящие85" Тогда
            ОжидаемоеНаправление = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Отправка;
            ОжидаемоеВнешнееИмя = "guide-out-85";
            ОжидаемыйОбработчик = "";
            ОжидаемаяТранзакция = Ложь;
        ИначеЕсли МДКанала.Имя = "Входящие85" Тогда
            ОжидаемоеНаправление = Метаданные.СвойстваОбъектов.НаправлениеСообщенияКаналаСервисаИнтеграции.Получение;
            ОжидаемоеВнешнееИмя = "guide-in-85";
            ОжидаемыйОбработчик = "ОтказатьУчебномуПриему";
            ОжидаемаяТранзакция = Истина;
        Иначе
            ВызватьИсключение "Найден неподготовленный канал";
        КонецЕсли;
        ДобавитьСвойПаспорт(Паспорт, МДКанала, МДКанала.Имя, МДСервиса);
        Если МДКанала.НаправлениеСообщения <> ОжидаемоеНаправление
            Или МДКанала.ИмяКаналаВнешнегоСервисаИнтеграции <> ОжидаемоеВнешнееИмя
            Или МДКанала.ОбработчикПолученияСообщения <> ОжидаемыйОбработчик
            Или МДКанала.ВТранзакции <> ОжидаемаяТранзакция Тогда
            ВызватьИсключение "Направление, внешнее имя, обработчик или транзакция не совпали с подготовкой";
        КонецЕсли;
        Если СтрДлина(МДКанала.ИмяКаналаВнешнегоСервисаИнтеграции) > 256 Тогда
            ВызватьИсключение "Внешнее имя канала превышает ограничение платформы";
        КонецЕсли;
        ДобавитьСтроку(Паспорт, МДКанала.ПолноеИмя(), "Направление", МДКанала.НаправлениеСообщения);
        ДобавитьСтроку(Паспорт, МДКанала.ПолноеИмя(), "Внешнее имя", МДКанала.ИмяКаналаВнешнегоСервисаИнтеграции);
        ДобавитьСтроку(Паспорт, МДКанала.ПолноеИмя(), "Обработчик", МДКанала.ОбработчикПолученияСообщения);
        ДобавитьСтроку(Паспорт, МДКанала.ПолноеИмя(), "В транзакции", МДКанала.ВТранзакции);
    КонецЦикла;
    ПоказатьСвойПаспорт(Паспорт, "Свой сервис: направления и контракт каналов");
КонецПроцедуры

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеМетаданныеИнтеграции85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Процедура ДобавитьСвойПаспорт(Таблица, МД, ОжидаемоеИмя, ОжидаемыйРодитель)
    Если МД.Имя <> ОжидаемоеИмя Или МД.Родитель() <> ОжидаемыйРодитель Тогда
        ВызватьИсключение "Не совпало имя или родитель собственного объекта метаданных";
    КонецЕсли;
    Если МД.ПринадлежностьОбъекта <> Метаданные.СвойстваОбъектов.ПринадлежностьОбъекта.Собственный
        Или МД.РасширениеКонфигурации() <> Неопределено Или МД.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Опыт предназначен только для своих объектов без расширений";
    КонецЕсли;
    ПолноеИмя = МД.ПолноеИмя();
    Если ПустаяСтрока(ПолноеИмя) Или ПустаяСтрока(МД.Представление()) Тогда
        ВызватьИсключение "У собственного объекта нет полного имени или представления";
    КонецЕсли;
    ДобавитьСтроку(Таблица, ПолноеИмя, "Имя", МД.Имя);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Синоним", МД.Синоним);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Представление", МД.Представление());
    ДобавитьСтроку(Таблица, ПолноеИмя, "Комментарий", МД.Комментарий);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Принадлежность", МД.ПринадлежностьОбъекта);
    ДобавитьСтроку(Таблица, ПолноеИмя, "Привязка заимствованного объекта", МД.ОбъектРасширяемойКонфигурации);
КонецПроцедуры

Процедура ДобавитьСтроку(Таблица, Объект, Свойство, Значение)
    СтрокаПаспорта = Таблица.Добавить();
    СтрокаПаспорта.Объект = Объект;
    СтрокаПаспорта.Свойство = Свойство;
    СтрокаПаспорта.Значение = Строка(Значение);
КонецПроцедуры

Функция СоздатьСвоюТаблицу()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Объект");
    Таблица.Колонки.Добавить("Свойство");
    Таблица.Колонки.Добавить("Значение");
    Возврат Таблица;
КонецФункции

Процедура ПоказатьСвойПаспорт(Таблица, Заголовок)
    Если Таблица.Количество() = 0 Тогда
        ВызватьИсключение "Собственный паспорт пуст";
    КонецЕсли;
    Документ = Новый ТабличныйДокумент;
    Документ.Область("R1C1").Текст = "Объект";
    Документ.Область("R1C2").Текст = "Свойство";
    Документ.Область("R1C3").Текст = "Значение";
    Номер = 2;
    Для Каждого Запись Из Таблица Цикл
        Документ.Область(Номер, 1).Текст = Запись.Объект;
        Документ.Область(Номер, 2).Текст = Запись.Свойство;
        Документ.Область(Номер, 3).Текст = Запись.Значение;
        Номер = Номер + 1;
    КонецЦикла;
    Документ.Показать(Заголовок, "", Истина);
КонецПроцедуры
УчебнаяИнтеграция85.Пульт

УчебныеМетаданныеИнтеграции85 → Обработки → УчебнаяИнтеграция85 → Формы → Пульт → Модуль

Полный модуль собственной обычной формы. Не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебнаяИнтеграция85.ВыполнитьПример();
КонецПроцедуры
УчебныйОбмен85.МодульМенеджера

УчебныеМетаданныеИнтеграции85 → Общие → Сервисы интеграции → УчебныйОбмен85 → Модуль менеджера

Полный экспортный отказной обработчик собственного НЕАКТИВНОГО сервиса. Не вызывается уроком; не выполнялся.

Процедура ОтказатьУчебномуПриему(Сообщение, Отказ) Экспорт
    Отказ = Истина;
КонецПроцедуры

Разбор по шагам

  1. ПроверитьСвойКонтекст сверяет платформу, имя своего стенда, совместимость и отсутствие активной транзакции. Объект берётся из Метаданные, не создаётся через Новый и не получается из неизвестного параметра.

  2. Паспорт проверяет программное Имя, фактического Родителя и три разных признака: ПринадлежностьОбъекта, РасширениеКонфигурации и ЕстьИзмененияРасширениямиКонфигурации. Синоним не используется как программный ключ.

  3. Общие свойства Имя, Синоним, Комментарий и Представление выводятся рядом с ПолноеИмя. ОбъектРасширяемойКонфигурации относится к заимствованию; его значение само по себе не заменяет проверки расширений.

  4. Весь отчёт собирается до показа окна. При несовпадении подготовки вызывается понятное исключение, а неполный паспорт не выдаётся за успешную проверку.

  5. Коллекция Каналы принадлежит найденному МДСервиса. У каждого канала Родитель должен быть именно этот сервис, а не корень Метаданные; требуются ровно два собственных определения.

  6. НаправлениеСообщения содержит только Отправка либо Получение. Для Исходящие85 сравниваем Отправка и пустой обработчик; для Входящие85 — Получение и имя экспортной процедуры в модуле менеджера.

  7. ИмяКаналаВнешнегоСервисаИнтеграции — отдельный строковый ключ внешней стороны, не Синоним и не Имя объекта 1С. Проверяем подготовленные guide-out-85/guide-in-85 и предел 256 символов.

  8. ВТранзакции у входящего канала задаёт выполнение обработчика в транзакции. При сбое фиксации успешный обработчик может выполниться повторно: будущая бизнес-реализация должна выдерживать повторы, одного флага недостаточно.

  9. АдресВнешнегоСервисаИнтеграции по справке допускает чтение и запись, но здесь только читается. Это значение определения, не проверка достижимости и не получение переопределённых настроек режима Предприятие.

  10. Полный вспомогательный обработчик принимает два параметра и ставит Отказ=Истина, без обращения к Сообщение. Он не активируется и не вызывается этим примером; предназначен только для отказа в неактивном учебном стенде.

Как проверить результат

  1. Будущий тест: F7 и Выполнить в собственном толстом клиенте. Отчёт содержит подготовленные программные имена, синонимы и комментарии; runtimeVerifiedScenarios пока равен 0.

  2. Измените только Синоним в своём Конфигураторе, обновите свой стенд и повторите: подпись паспорта изменится, поиск по Имя сохранится. Переименование самого объекта должно привести к отказу поиска старого имени.

  3. Паспорт должен содержать УчебныйОбмен85 и оба канала. Исходящие85: Отправка, guide-out-85, пустой обработчик, Ложь. Входящие85: Получение, guide-in-85, ОтказатьУчебномуПриему, Истина.

  4. В своём Конфигураторе временно поменяйте только внешнее имя guide-in-85 на guide-in-wrong: аудит должен отказать. Верните исходное значение; не меняйте активность и не отправляйте пробное сообщение.

  5. Выключите ВТранзакции у собственного входящего канала: аудит должен отказать. Верните флаг. Попытка добавить обработчик исходящему каналу может быть отклонена самой платформой ещё до запуска урока.

  6. Неожидаемая активность сервиса не проверяется чтением метаданных: перед любым будущим опытом отдельно убедитесь, что стенд никогда не активировали. Никакой HTTP-ответ не требуется для успеха аудита.

Ожидаемый результат

Будущий результат — отчёт о собственных определениях и их согласованности. Он не подтверждает доставку сообщений, регистрацию бота или работу внешней инфраструктуры. runtimeVerifiedScenarios=0.

На что обратить внимание

  1. Метаданные описывают конфигурацию, а не состояние очереди, доставки или подключения. Ни один успешный паспорт не означает, что интеграция работает.

  2. Модуль всегда возвращает Неопределено. Это не отсутствие написанного обработчика; получать исходный текст через это свойство или вызывать его нельзя.

  3. Не используйте урок в рабочей базе. Статические проверки и отображение HTML не являются компиляцией или выполнением в 1С.

  4. Исходящий канал не принимает сообщения, входящий не отправляет. Нельзя предполагать третье направление «оба».

  5. Пустая строка ОбработчикПолученияСообщения недопустима для входящего канала; при отправке обработчик, напротив, должен отсутствовать.

  6. Справка обработчика называет СообщениеСистемыВзаимодействия и описывает транзакцию, а отдельное свойство ВТранзакции задаёт условие транзакции и повтор после сбоя фиксации. Урок не предполагает недокументированные методы сообщения и не обещает ровно однократное выполнение.

  7. Отказной учебный обработчик нельзя оставлять в активной рабочей интеграции: он не реализует обработку и может вызывать повторные попытки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.