02 февраля 2017

1С галочки для табличного поля

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

Делается очень просто! Для этого вы добавляете новую колонку, через контекстное меню.


Называете ее "Отметка". Выбираете элемент управления Флажок.


Затем создаете реквизит ОтмеченныеСтроки с типом СписокЗначений, в нем будем хранить какие строки отметили.

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


 В этих процедурах нужно написать следующее
Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
  ОформлениеСтроки.Ячейки.Отметка.ОтображатьФлажок = Истина;
  Если ОтмеченныеСтроки.НайтиПоЗначению(ДанныеСтроки.Ссылка) =   Неопределено Тогда
    ОформлениеСтроки.Ячейки.Отметка.Флажок = Ложь;
  Иначе
    ОформлениеСтроки.Ячейки.Отметка.Флажок = Истина;
  КонецЕсли;
КонецПроцедуры
Здесь мы отображаем флажок в ячейке и выводим его значение согласно списку значений.

Процедура ТабличноеПоле2ПриИзмененииФлажка(Элемент, Колонка)
   Если Колонка.Имя = "Отметка" Тогда
     НайденныйЭлемент =  ОтмеченныеСтроки.НайтиПоЗначению(Элемент.ТекущаяСтрока);
      Если НайденныйЭлемент = Неопределено Тогда
        ОтмеченныеПользователи.Добавить(Элемент.ТекущаяСтрока);
      Иначе
        ОтмеченныеПользователи.Удалить(НайденныйЭлемент);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры
Обрабатываем только колонку Отметка. Если в списке значений уже есть строка, по которой кликнули, то ее удаляем, это означает снятие галочки. И наоборот, если текущей строки нет - добавляем.

В дополнение было бы весьма удобно реализовать механизмы отметить и снять все галочки! Располагаете на форме командную панель, на ней две кнопки. По нажатию на одной выполняете процедуру:
Процедура КоманднаяПанельДействиеОтметитьВсе(Кнопка)
   Выборка = Справочники.Пользователи.Выбрать();
   Пока Выборка.Следующий() цикл
     ОтмеченныеСтроки.Добавить(Выборка.Ссылка);
   КонецЦикла;
   ЭтаФорма.Обновить();
КонецПроцедуры
Здесь в цикле перебираются все записи (в данном случае это справочник пользователи, поэтому перебираем выборку) и добавляются с список значений ОтмеченныеСтроки. После выполняется перерисовка формы.

Для снятия всех галочек достаточно выполнить Очистку списка значений ОтмеченныеСтроки.
Процедура КоманднаяПанельДействиеСнятьВсе(Кнопка)
    ОтмеченныеПользователи.Очистить();
    ЭтаФорма.Обновить();
КонецПроцедуры
В итоге у вас получится вот такая табличная часть с дополнительной колонкой Отметка, где выбираются нужные строки, они будут попадать в список значений ОтмеченныеСтроки. И в дальнейшем, перебирая ОтмеченныеСтроки сможете производить с ними какие либо действия! Над таблицей есть две кнопки, установить все галочки и снять!

Успехов, терпения и удачных решений!