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

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

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

Способ 1. Эмуляция флажка через обработку расшифровки или событие выбора

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

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

  1. В макете в нужной колонке выводим текстовые символы флажка (например, [X] и [ ] или символы Unicode ☑ и ☐).
  2. В свойство ячейки Расшифровка передаем структуру с идентификатором строки и текущим булевым значением.
  3. Для поля табличного документа назначаем обработчик события ОбработкаРасшифровки (или Выбор).
  4. В обработчике отключаем стандартное действие, меняем состояние флажка и обновляем отображение в ячейке.

Посмотрим на пример реализации обработчика расшифровки:


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

Преимущество: табличный документ может оставаться в режиме ТолькоПросмотр = Истина, что исключает случайное повреждение структуры отчета пользователем.

Способ 2. Использование встроенного элемента управления ячейки

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

Разберем по шагам настройку ячейки в макете:

  1. В палитре свойств целевой ячейки макета устанавливаем флаг СодержитЗначение в значение Истина.
  2. В свойстве ТипЗначения выбираем тип Булево.
  3. В свойстве ЭлементУправления указываем Флажок.
  4. Для поля табличного документа на форме отключаем режим ТолькоПросмотр (устанавливаем Ложь), чтобы разрешить интерактивный ввод.
  5. Для защиты остальных ячеек от случайного редактирования устанавливаем для всего табличного документа свойство Защита = Истина, а для редактируемой колонки с флажками — Защита = Ложь.

Посмотрим на программный пример вывода области с инициализацией значения:


ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Номенклатура = Выборка.Номенклатура;

// Установка значения ячейки с флажком
ОбластьФлаг = ОбластьСтрока.Область("R1C1");
ОбластьФлаг.СодержитЗначение = Истина;
ОбластьФлаг.ТипЗначения = Новый ОписаниеТипов("Булево");
ОбластьФлаг.Значение = Ложь;

ТабДок.Вывести(ОбластьСтрока);

Способ 3. Внедрение графического объекта

Данный механизм исторически применяется в типовых конфигурациях для регламентированной отчетности. В область макета помещается объект типа РисунокТабличногоДокумента с типом ТипРисункаТабличногоДокумента.ЭлементУправления, внутри которого создается системный флажок.

Важное ограничение: создание большого количества графических объектов на каждой строке динамического отчета может существенно замедлить формирование и прокрутку табличного документа. Этот вариант рекомендуется только для бланков с фиксированной структурой.

Альтернативный вариант: переход на Таблицу формы

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

В этом случае добавляется реквизит с типом Булево и на форме создается колонка с видом ПолеФлажка. Это обеспечивает нативное переключение состояния в один клик мыши без необходимости писать дополнительный код для отслеживания координат ячеек и перерисовки табличного документа.

← На главную