Как массово установить значения флажков в табличном поле 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При разработке интерфейсов в 1С (особенно в конфигурациях на обычных формах, таких как УТ 10.3) часто возникает задача массового управления состоянием элементов выбора. Например, пользователю необходимо отметить все товары в списке для печати этикеток или для группового перемещения. Разберемся, как реализовать это программно, чтобы работа с интерфейсом была быстрой и безошибочной.

Понимание архитектуры табличного поля

Прежде чем приступать к написанию кода, важно уяснить фундаментальное различие между данными и их представлением. Табличное поле на форме — это лишь «зеркало» тех данных, которые хранятся в ТаблицеЗначений или ТабличнойЧасти объекта. Поэтому самый эффективный и правильный способ изменить состояние флажков — это изменить значения в самих данных.

Решение через обход коллекции данных

Это основной метод, который мы рекомендуем использовать в повседневной работе. Суть его заключается в простом переборе всех строк, которые привязаны к источнику данных табличного поля. Давайте рассмотрим, как это реализовать:


Для каждого СтрокаТЧ из ТЧ Цикл
    СтрокаТЧ.Флажок = Истина;
КонецЦикла;

В данном примере ТЧ — это коллекция данных вашего табличного поля (например, ДокументОбъект.Товары или ЭлементыФормы.ТабличноеПоле.Значение). Как только мы меняем значение типа Булево в реквизите Флажок для каждой строки, 1С автоматически обновляет внешний вид формы. Это надежно, так как изменения происходят непосредственно в объекте, который впоследствии будет записан в базу.

Когда использовать ОформлениеСтрок?

В процессе разработки вы можете встретить коллекцию ОформлениеСтрок. Важно понимать, что она предназначена для других целей. ОформлениеСтрок работает только в момент вывода строки на экран (событие ПриВыводеСтроки). Если вы попытаетесь массово установить флажки через эту коллекцию, столкнетесь со следующими проблемами:

  1. Изменения являются временными и сугубо визуальными — они не сохраняются в данные объекта.
  2. При прокрутке списка, когда строки перерисовываются, установленные вами значения могут исчезнуть.
  3. Это решение крайне неэффективно для операций, требующих дальнейшей обработки данных.

Используйте ОформлениеСтрок только в том случае, если нужно изменить цвет текста, шрифт или вывести картинку в зависимости от условий, а не для изменения логического состояния «флажка».

Особенности реализации в УТ 10.3 и аналогичных системах

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


// Предположим, что мы работаем с ТаблицейЗначений на форме
Для каждого СтрокаТЗ из ТаблицаЗначенийНаФорме Цикл
    СтрокаТЗ.Флажок = Истина;
КонецЦикла;
ЭлементыФормы.ТабличноеПолеТовары.ОбновитьСтроки();

Метод ОбновитьСтроки() дает команду платформе перерисовать видимую часть таблицы, учитывая сделанные изменения в данных. Если же вы используете СписокЗначений в качестве источника данных, то у каждого элемента есть свойство Пометка, с которым нужно работать через индекс элемента:


Для Индекс = 0 По ЭлементыФормы.ИмяТабличногоПоля.СписокЗначений.Количество() - 1 Цикл
    ЭлементыФормы.ИмяТабличногоПоля.СписокЗначений.Получить(Индекс).Пометка = Истина;
КонецЦикла;

Подведем итог

Чтобы массово установить флажки:

Следуя этим простым правилам, вы сделаете код чище, а работу программы — предсказуемее для пользователя.

← На главную