Как добавить колонку с «галочками» в Динамический список на управляемой форме?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему не получается просто добавить реквизит?

Важно понимать, что ДинамическийСписок — это не ТаблицаЗначений. Это объект, который получает данные напрямую из базы данных с помощью Запроса. Он работает в режиме «ленивой подгрузки», то есть выгружает данные порциями по мере их прокрутки пользователем. По этой причине:

Метод первый: Использование вспомогательной таблицы для хранения состояний

Если вам нужно реализовать механизм выбора (отметки строк галочками), мы рекомендуем использовать следующий подход:

  1. Создайте на форме ТаблицуЗначений, в которой будут храниться ссылки на выбранные строки (ключи).
  2. При нажатии на «галочку» в списке, вы программно записываете или удаляете ключ выбранной записи в эту ТаблицуЗначений.
  3. При необходимости сохранения результата, вы просто обращаетесь к этой таблице и выполняете нужные действия (например, запись в регистр или проведение документов).

Метод второй: Хранение состояний в базе данных (оптимальный для больших объемов)

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

Рассмотрим вариант с использованием временного регистра или специализированной таблицы. Логика работы следующая:

  1. Создаем непериодический РегистрСведений, который служит «буфером» для отметок текущего пользователя.
  2. В Запросе ДинамическогоСписка используем ЛЕВОЕ СОЕДИНЕНИЕ (LEFT JOIN) с этим регистром по ключу строки.
  3. В запросе создаем вычисляемое поле, например:

ВЫБРАТЬ
    РС.Ссылка КАК Ссылка,
    ВЫБОР
        КОГДА ВыбранныеЗаписи.Ссылка ЕСТЬ NULL ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК Отметка
ИЗ
    РегистрСведений.НашРегистр КАК РС
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВременныеОтметки КАК ВыбранныеЗаписи
    ПО РС.Ссылка = ВыбранныеЗаписи.Ссылка

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

Основные рекомендации по реализации

Разберем, на что стоит обратить внимание при внесении правок в готовый функционал:

Таким образом, для решения задачи добавления «галочки» мы рекомендуем начать с анализа объема данных. Если данных много — используйте ЛЕВОЕ СОЕДИНЕНИЕ с временной таблицей, если мало — используйте ТаблицуЗначений на форме. Это избавит вас от множества «костылей» и обеспечит стабильную работу интерфейса.

← На главную