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