О варианте реализации пометок в динамических списках рассказывает мой коллега Сергей, разработчик 1С
Для реализации пометок в динамических списках есть несколько вариантов. Они предполагают либо двойной клик по пометке, что для пользователей является неудобным и непривычным. Более подробно об этом методе написано здесь – «Использование флажков в динамических списках».
Либо одинарный клик, но иногда все равно нужно нажимать дважды. Этот вариант рассмотрен в этой статье «Флажки в динамическом списке с картинками и одинарным кликом, простой вариант».
При сравнении пользовательского восприятия в первом варианте задержки при нажатии на пометки списка менее выражены.
Хитрость такого метода в том, что при клике на флажок фокус перескакивает на поле справа от флажка, и тогда событие ПриАктивизацииЯчейки срабатывает, даже если клик происходит в текущей строке.
Первое, что нужно сделать – добавить поле Выбран в запрос:
Запрос списка:
ВЫБРАТЬ
Контрагенты.Ссылка В (&ВыбранныеСсылки) КАК Выбран,
Контрагенты.Ссылка КАК Ссылка,
Контрагенты.Наименование КАК Наименование,
Контрагенты.ИНН КАК ИНН,
Контрагенты.ЮрФизЛицо КАК ЮрФизЛицо,
Контрагенты.Партнер КАК Партнер
ИЗ
Справочник.Контрагенты КАК Контрагенты
Настройка свойств
Перетянуть колонку из реквизитов в элементы списка и настроить свойства:

Картинка в типовых конфигурациях - это БиблиотекаКартинок.ФлажокБЭД, но если ее нет, то можно взять эту
Код модуля формы
&НаКлиенте
Перем ВыбранныеСсылки;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ВыбранныеСсылки = Новый Массив;
Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеСсылки", ВыбранныеСсылки);
УстановитьФокусПослеКолонкиВыбор();
КонецПроцедуры
// При открытии фокус автоматически устанавливается на первую колонку Выбор
// Это мешает одиночному клику
// Ищем первую видимую колонку после колонки Выбор
&НаКлиенте
Процедура УстановитьФокусПослеКолонкиВыбор()
Индекс = Элементы.Список.ПодчиненныеЭлементы.Индекс(Элементы.СписокВыбран);
Для Сч = Индекс + 1 По Элементы.Список.ПодчиненныеЭлементы.Количество() - 1 Цикл
Если Элементы.Список.ПодчиненныеЭлементы[Сч].Видимость Тогда
Элементы.Список.ТекущийЭлемент = Элементы.Список.ПодчиненныеЭлементы[Сч];
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииЯчейки(Элемент)
Если Элемент.ТекущийЭлемент = Элементы.СписокВыбран Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.Выбран Тогда
СнятьПометку(ТекущиеДанные.Ссылка);
Иначе
ПоставитьПометку(ТекущиеДанные.Ссылка);
КонецЕсли;
Список.Параметры.УстановитьЗначениеПараметра("ВыбранныеСсылки", ВыбранныеСсылки);
Элементы.Список.Обновить();
УстановитьФокусПослеКолонкиВыбор();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоставитьПометку(ДокСсылка)
Индекс = ВыбранныеСсылки.Найти(ДокСсылка);
Если Индекс = Неопределено Тогда
ВыбранныеСсылки.Добавить(ДокСсылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СнятьПометку(ДокСсылка)
Индекс = ВыбранныеСсылки.Найти(ДокСсылка);
Если Индекс >= 0 Тогда
ВыбранныеСсылки.Удалить(Индекс);
КонецЕсли;
КонецПроцедуры
Указываем события Списка
В свойствах Списка указываем обработчик события ПриАктивизацииЯчейки:

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