8.3. Странное поведение метода УстановитьОграниченияИспользованияВОтборе() в динам.списке

1. SeiOkami 3434 19.02.19 12:25 Сейчас в теме
Добрый день.

По одной задаче стало необходимо в динамическом списке программно включать\отключать ограничение по полю.
Это методы из серии УстановитьОграниченияИспользования...()
Сейчас тестирую УстановитьОграниченияИспользованияВОтборе()
И он ведёт себя странно.

Если сначала пользователь установит отбор по полю, а только потом установить запрет по нему, то случится одно из двух:

1. Если пользователь наложил отбор через ctrl+F, то отбор перестанет учитываться. Но при этом в поле ОтображениеСостоянияПросмотра отбор останется, будто применён. Обновить это поле никак нельзя. Получается, пользователь видит, будто применен отбор, хотя это не так.

2. Если пользователь наложил отбор через "Настроить список", то установка ограничения по полю никак его не отменит. Отбор будет работать, хотя вообще на это поле накладывать ограничение нельзя. Интересно, что если зайти в "Настроить список", то отбор будет отображаться помеченным красным крестиком, но всё равно будет накладываться. При этом если программно получить исполняемую СКД, то по её запросу НЕТ этого отбора. Как вообще таким образом настройки накладываются на СКД не понимаю. Пытался сделать "КомпоновщикНастроек.Восстановить()", но и это не помогает. Отборы в пользовательских настройках остаются и галочки использования не снимаются.

Теперь вопрос. Это вообще нормальное поведение? Как программно установить ограничения по полю, чтобы оно реально применилось?

Тестировал на серверной базе платформы 8.3.12 и на файловой 8.3.14. То же поведение.

Сделал простую обработку, в которой это можно проверить. По кнопкам включения и отключения ограничений применяется метод УстановитьОграниченияИспользованияВОтборе() к полю "Поле1"
Приложил, плюс ссыль на Яндекс диск
https://yadi.sk/d/ZcE4nudsmEruog
Прикрепленные файлы:
ТестированиеОграниченийДинамическогоСписка.epf
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 19.02.19 21:30 Сейчас в теме
(1) Хотелось Вам помочь, но ничего не вышло. :(

Метод "Восстановить" компоновщика настроек согласно синтакс-помощнику не удаляет отборы с недоступными полями, а лишь отключает их. И в Вашем примере это действительно так, настройка отбора отключается, и именно в настройках. А вот в пользовательских настройках - нет, элемент отбора остается включенным. Посему делаем вывод, что метод "Восстановить" влияет только на настройки компоновщика.

Это все, что я смог понять. Быть может Вам написать v8@1c.ru? Вдруг такое поведение платформы действительно ошибочно.
4. SeiOkami 3434 20.02.19 03:55 Сейчас в теме
(2) интересно, что после метода "Восстановить()" в компоновщике в пользовательских полях остаётся отбор включенным. Как-будто метод не сработал. Непонятно, может и в нём что-то не так)

На 1С писал. Может чего ответят.
3. dhurricane 19.02.19 21:40 Сейчас в теме
(1) На ИТС в документации скромное описание метода "УстановитьОграниченияИспользованияВОтборе". Могу предположить, что используемый Вами сценарий использования этого метода не предполагался разработчиками платформы. Возможно он предназначен лишь для первоначальной настройки динамического списка, пока пользователь со списком не начал работать.
5. SeiOkami 3434 20.02.19 03:59 Сейчас в теме
(3) я так подумал, однако, в описании сказано:

"Вызов метода с пустым списком полей отменяет ранее установленные ограничения."

Получается, предполагали возможность такого использования и даже специально указали в СП способ для этого.
Оставьте свое сообщение

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