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