|
1С 8.3 Как вывести список метаданных с отбором по типу данных реквизита? | ☑ | ||
---|---|---|---|---|
0
lookingfor
10.12.22
✎
12:55
|
Здравствуйте! Как можно отобрать метаданные "Документы", у которых есть реквизит или реквизит табличной части с определенным типом, например тип спр.Валюта?
Мне нужно получить все документы у которых есть реквизит с определенным типом(в том числе реквизит может быть в ТЧ) и даже если тип реквизита составной. Эти документы я буду выводить в поле списка. Могу вывести все наименования метаданных"Документы", но мне нужно только содержащие определенный тип в своих реквизитах |
|||
1
Kassern
10.12.22
✎
13:07
|
(0) Обходите в цикле все метаданные документов, там же и проверку на тип делаете, если есть, то выводите
|
|||
2
Kigo_Kigo
10.12.22
✎
13:20
|
Что то в общих модулях было типа в БСП - ЕстьРеквизитШапки("ИмяРек") и ЕстьРеквизитТабличнойЧасти("ИмяРек") , не помню уже
|
|||
3
Kassern
10.12.22
✎
13:26
|
(0) Все же просто там. Есть Коллекция Реквизиты (это шапка документа), есть коллекции "ТабличныеЧасти", а в них так же есть Реквизиты. Обходите это дело и проверяете на Реквизит.Тип.СодержитТип(ПроверяемыйТип)
|
|||
4
lookingfor
10.12.22
✎
13:55
|
(3), Спасибо за ответ! Как раз начал делать с обходом в цикле, других идей как сделать оптимальнее не нашлось.
Оставляю для потомков может кому-то пригодится: МассивДокументов = Новый Массив; Для Каждого Док Из Метаданные.Документы Цикл Для Каждого Реквизит Из Док.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(Тип("Какой-тоТип")) Тогда МассивДокументов.Добавить(Док.Синоним); Прервать; КонецЕсли; КонецЦикла; КонецЦикла; Возврат МассивДокументов; Не умею на этом форуме оформлять код)) Это только для проверки реквизитов документа,для ТЧ ещё не дописал обход. МассивДокументов потом загружаю в список значений для поля на форме. |
|||
5
lookingfor
10.12.22
✎
13:58
|
(2) , спасибо что ответили и предложили вариант. Я посмотрел, там требуется имя реквизита, а у меня задача с отбором по типу реквизита сделать. Поэтому решил, что мне такое не подойдет)
|
|||
6
Kassern
10.12.22
✎
13:59
|
(4) Можно тут и через рекурсию, но мне лениво, а так, что-то подобное получится:
МассивДок=Новый Массив; ПроверяемыйТип=Тип("СправочникСсылка.Валюты"); Для Каждого МетаданныеДок Из Метаданные.Документы Цикл ИмяДок=МетаданныеДок.Имя; Если КоллекцияСодержитПроверяемыйТип(МетаданныеДок.Реквизиты,ПроверяемыйТип) И МассивДок.Найти(ИмяДок)=Неопределено Тогда МассивДок.Добавить(ИмяДок); КонецЕсли; Если МассивДок.Найти(ИмяДок)=Неопределено Тогда Для Каждого ТабличнаяЧасть Из МетаданныеДок.ТабличныеЧасти Цикл Если КоллекцияСодержитПроверяемыйТип(ТабличнаяЧасть.Реквизиты,ПроверяемыйТип) И МассивДок.Найти(ИмяДок)=Неопределено Тогда МассивДок.Добавить(ИмяДок); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; &НаСервереБезКонтекста Функция КоллекцияСодержитПроверяемыйТип(Коллекция,ПроверяемыйТип) Результат=Ложь; Для Каждого Реквизит Из Коллекция Цикл Если Реквизит.Тип.СодержитТип(ПроверяемыйТип) Тогда Результат=Истина; Прервать; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции |
|||
7
rudnitskij
11.12.22
✎
18:28
|
(0) Вам надо именно программно список получить? Просто есть в конфиге такая штука как "поиск ссылок на объект"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |