Имя: Пароль:
1C
 
Критерии отбора - как прочитать состав?
0 RomaH
 
naïve
28.01.11
07:40
Задача - надо узнать список реквизитов которые содержат "документ основание"

т.е. На основании заказа вводится реализация
у реализации есть реквизит "Заказ"
этот реквизит упомянут в критерии отбора "Связанные документы"

вот только как его оттуда выцепить


исходные данные - только то что ищем для реализации основание типа заказ
1 Рэйв
 
28.01.11
07:55
КритерииОтбораМенеджер (FilterCriteriaManager)
Элементы коллекции:
КритерийОтбораМенеджер
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются менеджеры критериев отбора.
Возможно обращение к менеджеру критерия отбора посредством оператора [...]. В качестве аргумента передается имя критерия отбора, как оно задано в конфигурации.

Свойства:
<Имя критерия отбора>

Описание:
Предназначен для управления критериями отбора и предоставляет доступ к значениям типа КритерийОтбораМенеджер. Доступ к объекту осуществляется через свойство глобального контекста КритерииОтбора.
Возможен обмен с сервером.
Пример:
Форма = КритерииОтбора.Контрагенты.ПолучитьФорму("ОсновнаяФорма");
См. также:
Глобальный контекст, свойство КритерииОтбора
2 Рэйв
 
28.01.11
07:57
+(1)Хотя нет.Это перебираются сами критерии.
3 RomaH
 
naïve
28.01.11
08:16
СоставКритерияОтбора = Метаданные.КритерииОтбора.СвязанныеДокументы.Состав;

- тут не нашел нужного
есть вроде как имя реквизита и что он содержит, но вот каком документу пренадлежит - не понятно
4 RomaH
 
naïve
28.01.11
08:32
ладно, а как тип привести к метаданным? или наоборот?

есть реквизит составного типа
есть КоллекцияЗначенийСвойствМетаданных

как проверить пересечение?
5 Axel2009
 
28.01.11
09:11
выбрать ссылка из критерииотбора.структураподчиненности(&реализация) где ссылка ССЫЛКА документ.заказпокупателя
6 RomaH
 
naïve
28.01.11
09:14
(5) это что? ... что вернет в итоге?
7 Aprobator
 
28.01.11
09:17
(4)

СоставнойТипРеквизита = ТвойРеквизит.Тип;
СписокТипов           = СоставнойТипРеквизита.Типы();
...
8 Axel2009
 
28.01.11
09:20
не то что нужно.
9 RomaH
 
naïve
28.01.11
09:22
Для Каждого РеквизитДокумента Из МетаданныеДокумента.Реквизиты Цикл
       
       Для Каждого ТипЗначенияРеквизита Из РеквизитДокумента.Тип.Типы() Цикл
           
           Если ТипЗначенияРеквизита = ТипЗнч(Истина)
               ИЛИ ТипЗначенияРеквизита = ТипЗнч(" ")
               ИЛИ ТипЗначенияРеквизита = ТипЗнч(1)
               ИЛИ ТипЗначенияРеквизита = ТипЗнч('00010101') Тогда
               Продолжить;
           КонецЕсли;
               
           ДокументСсылка = Новый(ТипЗначенияРеквизита);
           Если  МетаданныеДокумента.ВводитсяНаОсновании.Содержит(ДокументСсылка.Метаданные()) Тогда
               СписокРеквизитов.Добавить(РеквизитДокумента.Имя);
               Прервать;
           КонецЕсли;
       КонецЦикла;
       
       
   КонецЦикла;


через ВводитсяНаОсновании ограничиваю список

но про критерий отбора все же интересно - как достучаться до "реального" состава
10 Aprobator
 
28.01.11
09:30

СоставКритерия = Метаданные.КритерииОтбора.ИмяКритерия.Состав;
11 Aprobator
 
28.01.11
09:46
хм - а вообще чудно. Реально состава не видно.
12 RomaH
 
naïve
28.01.11
09:46
(10) и как оттуда узнать "подчиненный" документ?
имя реквизита - вижу, тип - вижу - а чей реквизит?
13 Aprobator
 
28.01.11
09:52
о через ж..., но нашел.

ФормаКритерияОтбора = КритерииОтбора.ИмяКритерия.ПолучитьФорму();
Состав = ФормаКритерияОтбора.Отбор.ЗначениеОтбора.ТипЗначения;
14 Aprobator
 
28.01.11
10:14
хм - нет, мимо (
15 НЕА123
 
28.01.11
11:14
как-то так:

Для каждого Эл из Метаданные.КритерииОтбора.алш_ПриложенияКДоговоруПоОбъектам.Состав Цикл

   Сообщить(Эл.Родитель().Родитель());    

КонецЦикла;
16 Axel2009
 
28.01.11
11:17
(15) а эту функцию вы уже в платформу добавили? а 1с в курсе про это? =)
17 НЕА123
 
28.01.11
11:29
(16)
в (15) пример для доступа к доку, если реквизит из ТЧ.
18 RomaH
 
naïve
28.01.11
12:21
(17) метода Родитель() у КоллекцияЗначенийСвойствМетаданных  нет
19 НЕА123
 
28.01.11
12:25
(18)
8.2.11.235, режим совместимости.
есть.
20 RomaH
 
naïve
28.01.11
12:52
(19) где?

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Методы:

Количество (Count)
Содержит (Contains)

Описание:

Значение такого типа имеют свойства объектов описания метаданного, хранящих множественную ссылку на другие объекты, например, "Вводится на основании" у документов.

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

Сервер, толстый клиент, внешнее соединение.
21 PVV65
 
28.01.11
12:54
(0) Если правильно понял, что надо -


   Для Каждого Элемент Из Метаданные.КритерииОтбора.СтруктураПодчиненности.Состав Цикл
       Если Элемент.Тип.СодержитТип(Тип("ДокументСсылка.ЗаказПокупателя")) Тогда
           Сообщить(Элемент.ПолноеИмя());
       КонецЕсли;
   КонецЦикла;
22 PVV65
 
28.01.11
12:59
(20) Кстати, метод Родитель() ОбъектаМетаданных есть и в 8.1.
23 PVV65
 
28.01.11
13:00
+(22) Аналогично ПолноеИмя().
24 RomaH
 
naïve
28.01.11
13:06
все, врубился - значения коллекции - объекты метаданных - типа реквизит
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.