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