Как вывести флажки во всех строках дерева значений на обычных формах 1С?

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

При работе с ДеревомЗначений в обычных формах 1С часто возникает задача добавить колонку с флажками для возможности выбора данных пользователем. Однако при стандартном подходе флажки могут отображаться только в строках верхнего уровня, игнорируя иерархию, либо в ячейках появляется лишний текстовый вывод значений Истина или Ложь. Давайте разберем по шагам, как правильно настроить этот элемент управления.

Настройка колонки и программная установка флажка

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


КолонкаФлажок = ЭлементыФормы.Дерево.Колонки.Флажок;
КолонкаФлажок.УстановитьЭлементУправления(Тип("Флажок"));
КолонкаФлажок.Данные = ""; 
КолонкаФлажок.ДанныеФлажка = "Флажок";
КолонкаФлажок.ТолькоПросмотр = Ложь;
КолонкаФлажок.ТекстШапки = "";
КолонкаФлажок.РежимРедактирования = РежимРедактированияКолонки.Непосредственно;

Важный нюанс: очистка свойства Данные при одновременной установке ДанныеФлажка позволяет избежать дублирования текстового представления значения (булево) рядом с графическим флажком. Это делает интерфейс формы аккуратным и профессиональным.

Обеспечение отображения флажков в иерархии запроса

Частая проблема заключается в том, что при использовании группировок в запросе флажки исчезают или не работают на всех уровнях иерархии. Чтобы исправить это, необходимо убедиться, что поле Флажок присутствует в секции ИТОГИ. Если вы просто добавите Ложь КАК Флажок в выборку, но не укажете это поле в итоговых записях, дерево не поймет, как отобразить состояние узла.

Разберем пример правильного запроса с использованием итогов:


ВЫБРАТЬ
    ЛОЖЬ КАК Флажок,
    ... // прочие поля
ИЗ
    ...
ИТОГИ
    СУММА(СуммаЗаказа),
    МАКСИМУМ(Флажок)
ПО
    Контрагент,
    Организация

Использование агрегатной функции МАКСИМУМ(Флажок) позволяет системе корректно рассчитывать состояние флажка для родительских узлов в иерархии дерева.

Рекомендации по реализации логики работы

  1. Трехпозиционный флажок: Если ваша задача подразумевает, что родительская строка должна отражать частичное заполнение потомков (серый флажок), установите для колонки свойство ТриСостояния = Истина. При этом тип данных поля в запросе следует изменить с Булево на Число (0, 1, 2).
  2. Синхронизация состояний: Платформа 1С не умеет автоматически «пробрасывать» изменение флажка сверху вниз или снизу вверх. Вам потребуется реализовать обработчик события ПриИзменении для колонки Флажок.
    • При изменении флажка в узле — программно обойдите коллекцию Строки этого узла и установите аналогичное состояние всем подчиненным элементам.
    • При изменении в «листе» дерева — обратитесь к свойству Родитель и пересчитайте состояние родительского флажка в зависимости от состояния всех его «братьев».
  3. Получение выбранных данных: Поскольку визуальный отбор в дереве значений не поддерживает фильтрацию «только по отмеченным», для обработки выбранных пользователем позиций используйте рекурсивный обход дерева. Проверяйте значение колонки Флажок у каждой строки и копируйте отмеченные записи в отдельный массив или таблицу для последующей обработки.

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

← На главную