При разработке интерфейсов на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с задачей отображения разнородных данных в одной колонке динамического списка. Типичный пример — регистр настроек или прав, где в одной колонке может храниться как числовое значение (например, порог суммы), так и логическое значение (флаг включения опции). Стандартное поведение системы для типа Булево в составе Составного типа — вывод текста «Да» или «Нет», что не всегда удобно и эстетично. В этой статье мы подробно разберем, как заставить динамический список отображать привычный флажок (чекбокс) рядом с числами в одной колонке.
Этот метод считается наиболее профессиональным и визуально приятным, так как он позволяет вывести полноценную иконку флажка. Платформа 1С позволяет привязать индекс картинки к данным строки.
Рассмотрим пошагово процесс настройки:
ВЫБОР.Проанализируем пример запроса для динамического списка:
ВЫБРАТЬ
ИсточникДанных.Наименование,
ИсточникДанных.ЗначениеНастройки,
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(ИсточникДанных.ЗначениеНастройки) = ТИП(БУЛЕВО)
ТОГДА ВЫБОР
КОГДА ИсточникДанных.ЗначениеНастройки = ИСТИНА ТОГДА 0
ИНАЧЕ 1
КОНЕЦ
ИНАЧЕ -1
КОНЕЦ КАК ИндексКартинки
ИЗ
РегистрСведений.НастройкиПользователей КАК ИсточникДанных
В данном коде мы определяем: если тип данных Булево и значение равно Истина, индекс будет 0 (картинка с галочкой). Если Ложь — индекс 1 (пустая картинка). Если в поле число — индекс -1, что означает отсутствие картинки.
Настройка элементов формы:
ЗначениеНастройки на форму.ИндексКартинки.В результате в одной колонке для логических значений будет отображаться иконка, а для числовых — само число. Текст «Да/Нет» можно скрыть, настроив условное оформление или очистив текст через событие ПриВыводеСтроки (если это не динамический список), но в ДС лучше использовать свойство ОтображатьВТексте.
Если вы не хотите вносить изменения в структуру метаданных (создавать картинки) или менять запрос, можно воспользоваться возможностями Условного оформления. Мы заменим стандартный текст «Да» и «Нет» на графические символы Юникода, имитирующие флажки.
Разберем алгоритм настройки:
Текст в значение «☑» (символ U+2611).ЗначениеНастройки Равно Истина И Тип значения ЗначениеНастройки Равно Булево.ЗначениеНастройки.Текст в значение «☐» (символ U+2610).ЗначениеНастройки Равно Ложь И Тип значения ЗначениеНастройки Равно Булево.ЗначениеНастройки.Этот метод работает мгновенно и не требует написания кода. Символы Unicode корректно отображаются в тонком и веб-клиенте.
Существует еще один классический способ имитации графики через специфические шрифты. Шрифт Wingdings содержит символы флажков, которые можно использовать вместо текста.
Проанализируем ситуацию: для строк с числовым типом нам нужен стандартный шрифт, а для логических — Wingdings. Настроим это через Условное оформление:
Булево.Wingdings.Истина и «o» для Ложь.Важный нюанс: данный метод требует наличия установленного шрифта на клиентском компьютере, поэтому использование Unicode (Метод 2) предпочтительнее для кроссплатформенных решений.
Отобразить флажок — это только половина задачи. Пользователи часто ожидают, что по клику на этот флажок его состояние изменится. Для полей составного типа автоматическое редактирование «галочкой» недоступно. Выясним, как реализовать это программно.
Нам необходимо обработать событие Выбор или ПриАктивизацииЯчейки элемента формы «Список»:
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ЗначениеНастройки" Тогда
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
// Проверяем, является ли тип текущего значения Булево
Если ТипЗнч(ТекущиеДанные.ЗначениеНастройки) = Тип("Булево") Тогда
// Отменяем стандартное открытие формы/поля ввода
СтандартнаяОбработка = Ложь;
// Инвертируем значение
НовоеЗначение = Не ТекущиеДанные.ЗначениеНастройки;
// Вызываем серверный метод для записи изменения в БД
ЗаписатьЗначениеНаСервере(ТекущиеДанные.КлючНастройки, НовоеЗначение);
// Обновляем динамический список
Элементы.Список.Обновить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Благодаря этому коду, когда пользователь дважды кликнет на колонку с «галочкой», система не откроет стандартное поле выбора типа или ввода числа, а просто переключит состояние флажка. Если же в ячейке будет число, СтандартнаяОбработка останется в значении Истина, и пользователь сможет отредактировать число обычным способом.
Подведем итог: какой метод выбрать именно вам? Рассмотрим основные критерии:
Выбор, как показано в разделе интерактивности.Комбинируя эти подходы, вы сможете создать удобный и интуитивно понятный интерфейс для работы с разнородными данными в динамических списках 1С.