СКД. Проверка корректности (доступности) полей отбора

Внимание! Тема закрыта. Добавлять сообщения в закрытую тему запрещено.
1. yku 376 04.12.15 16:34 Сейчас в теме
Вожусь с программной установкой отбора.
Есть у меня механизм для пользователя: он указывает счет, тип суммы и отбор. Ввод отбора реализован через КомпоновщикНастроекКомпоновкиДанных и создание для него специальной СКД.

Допустим, пользователь создал показатель по счету 41.01 и отбор Субконто1.Весовой = Истина (где Субконто1 - "Номенклатура"). И всё хорошо.
Затем, у меня поменялся счет с 41.01 на 91.01 и Субконто1 теперь "Прочие доходы и расходы". И если посмотреть на форме - то такой отбор будет с красным крестом, мол некорректный, что правильно и вот вопрос:
а как программно быстро проверить возможность задания такого отбора?

У меня есть идея, взять каждый элемент отбора, если левое значение - поле компоновки данных, разложить его на массив с разделителем ".". Затем, начиная с первого уровня смотреть каких типов может быть такой реквизит и может ли быть вообще. Если может, то спускаемся дальше по массиву. Но уж больно "тяжелый" код получается. Неужто только так?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
5. yku 376 04.12.15 20:35 Сейчас в теме
Тьфу! Оказалось всё очень легко!

ПолеОтбора = Новый ПолеКомпоновкиДанных("Субконто1.Весовой");
НайдПоле = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(л_ПолеОтбора );


Я просто был уверен, что НайтиПоле() в любом случае вернёт Неопределено. А оно оказывается вон как, и "через точку" поля анализирует. Круто!
axsebur; z-alexey; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. sommid 04.12.15 17:04 Сейчас в теме
попробуйте:

КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
Восстановить (Refresh)
Синтаксис:

Восстановить(<Способ>)

...
Вызов метода с параметром <Способ> = ПроверятьДоступность:
удалит из настроек все элементы, которые содержат поля, не доступные для текущих функциональных опций и прав.
3. sommid 04.12.15 17:06 Сейчас в теме
либо способ "Полное"
4. yku 376 04.12.15 19:25 Сейчас в теме
"Полное" делает то, что я хочу делать сам (снимает признак "Использовать" у невалидных элементов отбора). И этот метод мне очень даже пригодится.

Но, хотелось всё же чтобы можно было прям проверить поле на валидность. А то получается, сначала поле нужно запихать в отбор, потом восстановить компоновщик настроек и посмотреть не изменился ли у нашего элемента признак использования. Это несомненно легче, чем возиться с метаданными, но выглядит как костыль.

Но в любом случае спасибо.
5. yku 376 04.12.15 20:35 Сейчас в теме
Тьфу! Оказалось всё очень легко!

ПолеОтбора = Новый ПолеКомпоновкиДанных("Субконто1.Весовой");
НайдПоле = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(л_ПолеОтбора );


Я просто был уверен, что НайтиПоле() в любом случае вернёт Неопределено. А оно оказывается вон как, и "через точку" поля анализирует. Круто!
axsebur; z-alexey; +2 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот