При работе с ДинамическимСписком на управляемых формах разработчики часто сталкиваются с задачей добавления интерактивных элементов, например, «галочек» для выбора строк. На первый взгляд кажется, что достаточно просто добавить реквизит в форму, но архитектура ДинамическогоСписка имеет свои особенности, которые мы сейчас подробно разберем.
Важно понимать, что ДинамическийСписок — это не ТаблицаЗначений. Это объект, который получает данные напрямую из базы данных с помощью Запроса. Он работает в режиме «ленивой подгрузки», то есть выгружает данные порциями по мере их прокрутки пользователем. По этой причине:
ДинамическогоСписка нет локального хранилища для изменений, внесенных пользователем.Запросе самого списка.Если вам нужно реализовать механизм выбора (отметки строк галочками), мы рекомендуем использовать следующий подход:
ТаблицуЗначений, в которой будут храниться ссылки на выбранные строки (ключи).ТаблицуЗначений.Для профессиональной реализации, где требуется сохранение состояния отметок даже при перелистывании страниц, мы разберем использование промежуточного хранения:
Рассмотрим вариант с использованием временного регистра или специализированной таблицы. Логика работы следующая:
РегистрСведений, который служит «буфером» для отметок текущего пользователя.Запросе ДинамическогоСписка используем ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN) с этим регистром по ключу строки.
ВЫБРАТЬ
РС.Ссылка КАК Ссылка,
ВЫБОР
КОГДА ВыбранныеЗаписи.Ссылка ЕСТЬ NULL ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ КАК Отметка
ИЗ
РегистрСведений.НашРегистр КАК РС
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВременныеОтметки КАК ВыбранныеЗаписи
ПО РС.Ссылка = ВыбранныеЗаписи.Ссылка
При таком подходе при установке галочки вы просто добавляете или удаляете запись из ВременныеОтметки и вызываете метод Список.Обновить(). Это гарантирует корректную работу с постраничным выводом данных.
Разберем, на что стоит обратить внимание при внесении правок в готовый функционал:
ДинамическогоСписка в пользу ТаблицыЗначений. Это позволит вам работать с данными как с обычной коллекцией объектов.ПроизвольномЗапросе, обязательно проверьте, не собирается ли он в общих модулях, чтобы ваши изменения не были затерты при обновлении конфигурации.Таким образом, для решения задачи добавления «галочки» мы рекомендуем начать с анализа объема данных. Если данных много — используйте ЛЕВОЕ СОЕДИНЕНИЕ с временной таблицей, если мало — используйте ТаблицуЗначений на форме. Это избавит вас от множества «костылей» и обеспечит стабильную работу интерфейса.