Как в динамическом списке отобразить флажок в поле составного типа (Число, Булево)

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

При разработке интерфейсов на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с задачей отображения разнородных данных в одной колонке динамического списка. Типичный пример — регистр настроек или прав, где в одной колонке может храниться как числовое значение (например, порог суммы), так и логическое значение (флаг включения опции). Стандартное поведение системы для типа Булево в составе Составного типа — вывод текста «Да» или «Нет», что не всегда удобно и эстетично. В этой статье мы подробно разберем, как заставить динамический список отображать привычный флажок (чекбокс) рядом с числами в одной колонке.

Метод 1. Использование коллекции картинок в динамическом списке

Этот метод считается наиболее профессиональным и визуально приятным, так как он позволяет вывести полноценную иконку флажка. Платформа 1С позволяет привязать индекс картинки к данным строки.

Рассмотрим пошагово процесс настройки:

  1. Создадим в конфигурации новую Библиотеку картинок (или используем существующую), которая содержит два состояния: установленный флажок и пустой квадрат.
  2. Перейдем к настройке динамического списка. Нам потребуется изменить текст запроса, чтобы вычислить индекс картинки на лету. Используем конструкцию ВЫБОР.

Проанализируем пример запроса для динамического списка:


ВЫБРАТЬ
    ИсточникДанных.Наименование,
    ИсточникДанных.ЗначениеНастройки,
    ВЫБОР
        КОГДА ТИПЗНАЧЕНИЯ(ИсточникДанных.ЗначениеНастройки) = ТИП(БУЛЕВО)
            ТОГДА ВЫБОР
                КОГДА ИсточникДанных.ЗначениеНастройки = ИСТИНА ТОГДА 0
                ИНАЧЕ 1
            КОНЕЦ
        ИНАЧЕ -1
    КОНЕЦ КАК ИндексКартинки
ИЗ
    РегистрСведений.НастройкиПользователей КАК ИсточникДанных

В данном коде мы определяем: если тип данных Булево и значение равно Истина, индекс будет 0 (картинка с галочкой). Если Ложь — индекс 1 (пустая картинка). Если в поле число — индекс -1, что означает отсутствие картинки.

Настройка элементов формы:

  1. Вынесем поле ЗначениеНастройки на форму.
  2. В свойствах этого поля найдем пункт ПутьКДаннымКартинки и укажем наше вычисляемое поле ИндексКартинки.
  3. Укажем в свойстве КартинкиСтрок созданную ранее коллекцию картинок.

В результате в одной колонке для логических значений будет отображаться иконка, а для числовых — само число. Текст «Да/Нет» можно скрыть, настроив условное оформление или очистив текст через событие ПриВыводеСтроки (если это не динамический список), но в ДС лучше использовать свойство ОтображатьВТексте.

Метод 2. Использование спецсимволов Unicode в Условном оформлении

Если вы не хотите вносить изменения в структуру метаданных (создавать картинки) или менять запрос, можно воспользоваться возможностями Условного оформления. Мы заменим стандартный текст «Да» и «Нет» на графические символы Юникода, имитирующие флажки.

Разберем алгоритм настройки:

  1. Откроем настройки динамического списка (вкладка «Условное оформление»).
  2. Добавим первый элемент оформления:
    • Оформление: установим свойство Текст в значение «☑» (символ U+2611).
    • Условие: ЗначениеНастройки Равно Истина И Тип значения ЗначениеНастройки Равно Булево.
    • Оформляемые поля: ЗначениеНастройки.
  3. Добавим второй элемент оформления:
    • Оформление: установим свойство Текст в значение «☐» (символ U+2610).
    • Условие: ЗначениеНастройки Равно Ложь И Тип значения ЗначениеНастройки Равно Булево.
    • Оформляемые поля: ЗначениеНастройки.

Этот метод работает мгновенно и не требует написания кода. Символы Unicode корректно отображаются в тонком и веб-клиенте.

Метод 3. Применение шрифта Wingdings

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

Проанализируем ситуацию: для строк с числовым типом нам нужен стандартный шрифт, а для логических — Wingdings. Настроим это через Условное оформление:

Важный нюанс: данный метод требует наличия установленного шрифта на клиентском компьютере, поэтому использование Unicode (Метод 2) предпочтительнее для кроссплатформенных решений.

Метод 4. Обеспечение интерактивности (редактирование кликом)

Отобразить флажок — это только половина задачи. Пользователи часто ожидают, что по клику на этот флажок его состояние изменится. Для полей составного типа автоматическое редактирование «галочкой» недоступно. Выясним, как реализовать это программно.

Нам необходимо обработать событие Выбор или ПриАктивизацииЯчейки элемента формы «Список»:


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

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

Резюме по выбору решения

Подведем итог: какой метод выбрать именно вам? Рассмотрим основные критерии:

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

← На главную