Имя: Пароль:
1C
1С v8
ОбменДанными. Получить тип метаданных
0 Slon747
 
22.12.20
13:33
При записи набора регистра сведений выполняется регистрация изменений в плане обмена (отдельной процедурой с помощью передачи параметра ОбменДанными).
Как из этой процедуры получить тип метаданных?
Т.е. можно ли как-то считать параметр ОбменДанными и понять, что это за регистр?
1 ДенисЧ
 
22.12.20
13:36
ОбменДанными это не регистр...
2 Slon747
 
22.12.20
13:43
(1) Спасибо. Я знаю.
Можно ли по атрибуту объекта ОбменДанными получить тип метаданных объекта?
3 ДенисЧ
 
22.12.20
13:46
Если Метаданные.РегистрНакопления.ТипВсеСсылки().СодержитТип(ТипЗнч(входящийПараметр))...
4 acht
 
22.12.20
13:56
(2) >  по атрибуту объекта ОбменДанными
По какому именно?
5 Slon747
 
22.12.20
13:59
(3) Еще раз.
Из модуля регистра сведений вызывается процедура из общего модуля ЗарегистрироватьИзменения(ОбменДанными).
Здесь ОбменДанными - атрибут объекта.

Процедура ЗарегистрироватьИзменения(ОбменДанными)

    Для каждого ПланОбмена Из ПланыОбмена Цикл
        
        ИмяПланаОбмена = СокрЛП(ПланОбмена.ПустаяСсылка().Метаданные().Имя);

        МассивУзлов = ПолучитьМассивУзлов(); //здесь получаем массив узлов плана обмена
        
        Для каждого Узел Из МассивУзлов Цикл

            Попытка
                ОбменДанными.Получатели.Добавить(Узел);
            Исключение
            КонецПопытки;

        КонецЦикла;
                                                                
    КонецЦикла;


В данном случае если у плана обмена нет в составе данного типа метаданных, то возникает ошибка.
Как избавиться от обработки ошибки (Попытка-Исключение)?
Т.е. как из процедуры ЗарегистрироватьИзменения() по параметру ОбменДанными понять, что это регистр сведений "МойРегистр" и не выполнять никаких действий?
6 ДенисЧ
 
22.12.20
14:00
НаборУзлов (NodeSet)
Содержит (Contains)
Синтаксис:
Содержит(<Узел>)
Параметры:
<Узел> (обязательный)
Тип: ПланОбменаСсылка.<Имя плана обмена>.
Ссылка на узел плана обмена, который надо проверить на вхождение в набор узлов.
Возвращаемое значение:
Тип: Булево.
Истина - узел входит в набор узлов; Ложь - в противном случае.
Описание:
Определяет, входит ли указанный узел плана обмена в набор узлов.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Пример:
Узел = ПланыОбмена.ПО1.НайтиПоКоду("Маг11");
Если Об.ОбменДанными.Получатели.Содержит(Узел) Тогда
    // Некоторые действия

КонецЕсли;
Использование в версии:
Доступен, начиная с версии 8.0.
     Методическая информация
7 Slon747
 
22.12.20
14:04
(6)
Процедура общего модуля вызывается из десятков разных мест.
Хотелось бы именно в ней предусмотреть ситуацию, когда данный объект не может быть зарегистрирован в плане обмена.
Но план обмена известен, а тип регистрируемых данных - нет.
8 ДенисЧ
 
22.12.20
14:07
(7) ОбъектМетаданных: ПланОбмена (MetadataObject: ExchangePlan)
Состав (Content)
Использование:
Только чтение.
Описание:
Тип: СоставПланаОбмена.
Коллекция объектов метаданных, входящих в состав плана обмена.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
     Методическая информация
9 Slon747
 
22.12.20
14:13
(8) Ну вот из (5) я знаю Узел и получаю его состав. Знаю, что регистра сведений "МойРегистр" нет в его составе.
Но как мне узнать, что ОбменДанными пришел именно из регистра "МойРегистр"?
10 RomanYS
 
22.12.20
14:25
(9) По ОбменДанными уже не узнаешь не объект ни его метаданные. В этой процедуре уже ничего не сделаешь, смотри точки её вызова.
11 Slon747
 
22.12.20
14:37
(10) Жаль. Спасибо.