Как настроить флажок в табличной части и избежать открытия документа при клике?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При работе с обычными формами в 1С разработчики часто сталкиваются с ситуацией, когда колонка типа Булево в табличном поле отображается текстом «Да/Нет» или при клике на нее открывается форма документа вместо изменения значения. Рассмотрим, как правильно настроить интерфейс и программную логику для корректной работы флажка.

Настройка свойств элемента управления

Чтобы превратить текстовое представление в удобный «квадратик» (чекбокс) и обеспечить его работу, выполним следующие настройки в конфигураторе:

  1. Откройте форму, в которой расположено табличное поле, и перейдите к свойствам нужной колонки.
  2. Очистите свойство Данные, если оно было заполнено.
  3. В свойстве Данные флажка укажите имя реквизита с типом Булево. Это переключит отображение ячейки в графический режим.
  4. Установите свойство Режим редактирования в значение Непосредственно. Это позволит изменять состояние флажка одним кликом, не переводя ячейку в режим редактирования перед изменением.

Как предотвратить открытие документа при клике?

В форме списка документа при попытке кликнуть по колонке 1С по умолчанию инициирует открытие формы элемента. Чтобы этого избежать, необходимо перехватить событие ПередНачаломИзменения табличного поля. Рассмотрим пример реализации:


Процедура ДокументСписокПередНачаломИзменения(Элемент, Отказ)
    Если Элемент.ТекущаяКолонка.Имя = "ИмяВашейКолонки" Тогда
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры

Установка параметра Отказ = Истина блокирует стандартное действие системы, позволяя вам управлять поведением при клике самостоятельно.

Программное изменение реквизита документа из списка

Частая ошибка при попытке изменить значение реквизита из списка — прямая запись в ТекущиеДанные. Данные в списке представляют собой результат выборки, и их прямое изменение невозможно. Чтобы изменить реквизит документа, нужно работать с объектом базы данных.

Для корректного изменения выполните следующие действия:

  1. Получите ссылку на документ из текущей строки списка.
  2. Создайте объект документа с помощью метода ПолучитьОбъект().
  3. Измените нужное значение реквизита.
  4. Запишите объект в базу данных.

Разберем пример кода для такой операции:


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

Важные рекомендации по реализации

При внедрении такой функциональности важно учитывать несколько архитектурных моментов:

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

← На главную