Найти в Дзене

Ограничение доступных значений отбора в динамическом списке

Платформа 8.3.23.1739 Про этот момент пытался написать еще в 2023... Наткнулся сегодня на черновик и решил дописать. Но тестить уже буду на платформе 8.5.1.1150 и конфигурации 1С:УНФ 3.0.13.238. Для удобства работы пользователей появилась задача по ограничению выбора значений в отборе динамического списка в типовой форме. Автор вопроса даже коньяк обещал проставить тому, кто поможет разобраться. В данной статье приведу пример, придуманный для демонстрации сути проблемы. Есть справочник "Договоры контрагентов". В справочнике есть реквизит "Вид договора" с типом "Перечисление". Находим это перечисление. Кстати, самый простой способ, который я нашел: правой кнопкой мыши по реквизиту ВидДоговора → Поиск ссылок в объекте → Двойной клик левой кнопкой мыши по найденному перечислению. При двойном клике по найденному перечислению нас перекинет на него в дереве метаданных. Перечисление содержит элементы, которые могут и не использоваться в рамках определенных сценариев. Из обработки нужно откр
Оглавление

Предыстория

Платформа 8.3.23.1739

Про этот момент пытался написать еще в 2023... Наткнулся сегодня на черновик и решил дописать. Но тестить уже буду на платформе 8.5.1.1150 и конфигурации 1С:УНФ 3.0.13.238.

Для удобства работы пользователей появилась задача по ограничению выбора значений в отборе динамического списка в типовой форме. Автор вопроса даже коньяк обещал проставить тому, кто поможет разобраться. В данной статье приведу пример, придуманный для демонстрации сути проблемы.

Есть справочник "Договоры контрагентов". В справочнике есть реквизит "Вид договора" с типом "Перечисление".

-2

Находим это перечисление. Кстати, самый простой способ, который я нашел: правой кнопкой мыши по реквизиту ВидДоговора → Поиск ссылок в объекте → Двойной клик левой кнопкой мыши по найденному перечислению. При двойном клике по найденному перечислению нас перекинет на него в дереве

метаданных.

-3
-4

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

-5

Из обработки нужно открывать форму выбора договоров с отбором по виду договора, значения которого можно выбрать из ограниченного списка:

  • С покупателем
  • С поставщиком
  • Прочее

Анализ

Динамические списки используют механизм системы компоновки данных (СКД). В отличие от динамических списков, в СКД можно ограничивать значения для поля интерактивными настройками СКД. Продемонстрируем на простом внешнем отчете.

Создаем макет СКД, набор данных, устанавливаем текст запроса и тип интересующего нас поля. Если не установить тип, то нельзя будет указать доступные значения. Устанавливаем доступные значения.

-6

Добавим в пользовательские настройки отбор по ВидуДоговора.

-7

Отбор появился в шапке отчета и мы можем выбрать только настроенные значения. И мы не можем изменить что-либо, перейдя в расширенные настройки отчета в режиме предприятия.

-8

Теперь посмотрим на динамический список. Сначала возьмем список с основной таблицей без произвольного запроса. Никаких настроек для добавления доступных значений нет.

-9

Теперь включим произвольный запрос и удалим основную таблицу для простоты примера. Оставим только запрос, аналогичный отчету выше. Появилась возможность указать доступные значения.

-10

Как и в отчете, настроим быстрый отбор. Чтобы быстрые отборы выводились на форме, создадим обычную группу и пропишем ее в настройках списка.

-11

Видим, что ограничение работает, его нельзя никак изменить через настройку списка.

-12

Все это хорошо, когда тебе не нужно открывать какую-либо типовую форму, которую не хочется дорабатывать интерактивно. Копаем дальше, как это можно сделать кодом?

Устанавливаем ограничения кодом

Специальных методов у динамического списка не видим. Поэтому добавляем в нашу тестовую обработку обработчик ПриСозданииНаСервере и заглядываем, где эти ограничения хранятся?

Находим их в настройках и в фиксированных настройках компоновщика.

-13

Сносим доступные значения в настройках списка и пробуем добавить их программно. Все попытки разбиваются о стену непонимания... добавление ограничения напрямую в настройки и фиксированные настройки не помогает. Получение и загрузка настроек также не помогает. Постоянно доступны все значения перечисления.

-14

Бились над этим вопросом всеми 1С-разработчиками компании. Все уже отчаялись, но тут решили попробовать добавить ограничение в обработчике ПриОткрытии. Достаточно просто добавить в Настройки и все заработало. Можно выбрать только из доступных значений.

-15

Но, к сожалению, в настройках списка все равно будут видны все значения. Отбор при этом сработает, но в быстрых отборах будет выводиться отбор как будто по пустому значению.

-16

Заключение

Так и не поняли, почему поведение при интерактивном изменении настроек в конфигураторе и при изменении кодом - различается. Может кто-то когда-то столкнется с этой проблемой и напишет комментарий под этой статьей. Автора вопроса устроила такая реализация.

P.S. Хоть автор и тот, кто добил вопрос, живут в разных городах - коньяк был передан.