Имя: Пароль:
1C
1С v8
Есть ли быстрый способ получить Подсистемы объекта метаданных?
0 SerGa
 
23.11.12
10:09
В последних релизах платформы убрали свойство метаданных Подсистемы..
Почитал темах увидел только один способ перебором из
Подсистема.Состав

Написал рекурсивную функцию по получению списка подсистем метеданных через перебор...  но она работает очень медленно..  гораздо медленнее чем .Подсистемы из старых релизов платформы..

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



Может есть более быстрый способ????
1 SerGa
 
23.11.12
10:30
ап
2 sadden
 
23.11.12
10:43
а зачем ты рекурсивную функцию сделал?
3 SerGa
 
23.11.12
10:49
(2) там дерево... прямым обходом внутрь узлов не заходит..
4 sadden
 
23.11.12
10:51
а так да, сами при обновлении накололись, тоже пришлось переделывать по аналоги с твоим
5 SerGa
 
23.11.12
10:53
у меня проверяются подсистемы для объекта метаданных при обмене данными... если много объектов выгружается.. тормозит дико... раньше быстро работало....
6 sadden
 
23.11.12
10:53
тоже самое
7 sadden
 
23.11.12
10:53
только мы не перебераем
8 SerGa
 
23.11.12
10:54
(7) а как?
9 acsent
 
23.11.12
10:55
зачем нужно такое получение?
10 sadden
 
23.11.12
10:55
явно указываем:
Если Метаданные.Подсистемы.ТТС_CRM.Состав.Содержит(Источник.Метаданные()) Тогда ...
11 SerGa
 
23.11.12
10:56
(9) при обмене данными фильтрую по подсистемам что выгружать в подчиненный узел, а что нет...
12 Maxus43
 
23.11.12
10:56
(5) можно в параметр сенаса засунуть соответсвие метаданных подсистемам например, будет быстро
13 sadden
 
23.11.12
10:56
(12) тоже хотел это предложить
14 SerGa
 
23.11.12
10:58
короче сделал так

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


кэширую в таблице значений... если в ней нет для текущих метаданных соответствия, то иду перебором в подсистемы...
15 Maxus43
 
23.11.12
10:58
кстати в каком релизе убрали?
16 SerGa
 
23.11.12
10:58
(15)  хз  в 13 ещё работало по старому как перешли на 16  всё сломалось ))
17 acsent
 
23.11.12
11:00
(11) Юзай лучше подсистему регистрации изменений из БСП
18 SerGa
 
23.11.12
11:01
БСП ?
19 sadden
 
23.11.12
11:06
(12) а нельзя ли просто явно определить список подсистем через Метаданные.Подсистемы.<Имя подсистемы> и проверять уже содержат они <Источник>, если содержит хотя бы одна то выгружаешь в подчинённый
20 sadden
 
23.11.12
11:10
(19) to (14)
21 SerGa
 
23.11.12
11:10
(19) наверно можно и так...
22 sadden
 
23.11.12
11:16
(21) по крайней мере так точно быстрее будет отрабатывать
23 SerGa
 
23.11.12
11:17
(22) спасибо...  попробую в сравнении с кэшированным вариантом..
24 sadden
 
23.11.12
11:20
(23) дай хоть знать то потом )))))
25 Jaffar
 
23.11.12
11:33
(18) БСП = Библиотека Стандартных Процедур (бесплатная конфа с кучей стандартных вкусняшек)
26 oleg_km
 
23.11.12
12:37
(25) Я бы не назвал это вкусняшками, достаточно посредственная концепция, достаточно посредственный код. Мне кажется, каждый серьезный разработчик на 1С 8 уже давно имеет свою БСП
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.