Как выделить ячейки и ограничить ввод для недоступных свойств в управляемых формах 1С?

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

В процессе разработки конфигураций на базе 1С часто возникает задача визуального и функционального разграничения ячеек в табличной части. Когда набор доступных свойств зависит от категории товара или иных критериев, важно не только «закрасить» пустые поля, но и запретить пользователю вносить в них данные. Рассмотрим, как реализовать это решение максимально эффективно.

Вариант 1: Использование условного оформления

Самый простой путь для визуального выделения ячеек — использование Условного оформления. Если у товара нет определенного свойства, логично подсветить соответствующую ячейку серым цветом. Для этого выполним следующие действия:

  1. Откроем форму объекта в конфигураторе.
  2. Перейдем на закладку Условное оформление.
  3. Добавим новое правило. В поле Оформление установим цвет фона — серый.
  4. В поле Условие зададим логику проверки наличия свойства.

Если вы не хотите создавать множество скрытых колонок-флагов, можно использовать динамическую проверку. Однако помните, что Условное оформление влияет только на визуальный стиль. Чтобы запретить редактирование, необходимо использовать программные методы.

Вариант 2: Программное управление доступностью в событии ПриАктивизацииСтроки

Более надежным и гибким подходом является управление свойством ТолькоПросмотр или Доступность непосредственно при навигации пользователя по таблице. Это позволяет не перегружать интерфейс сложными правилами оформления.

Разберем пример реализации логики, при которой мы проверяем, допустимо ли редактирование текущей ячейки:


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

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

Вариант 3: Анализ свойств через запрос

Чтобы корректно определять список доступных свойств для каждого товара, используйте механизм, аналогичный типовой подсистеме УправлениеСвойствами. Рассмотрим, как можно подготовить структуру данных для заполнения:


Функция ПолучитьДоступныеСвойства(Наборы, ЭтоДополнительноеСведение)
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Свойства.Ссылка КАК Свойство,
    |    Свойства.Заголовок КАК Заголовок
    |ИЗ
    |    ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
    |ГДЕ
    |    Свойства.Ссылка В(&СписокСвойств)";
    // ... дальнейшая настройка параметров и выполнение запроса
    Возврат Запрос.Выполнить().Выгрузить();
КонецФункции

Анализируя результат запроса, вы можете программно сформировать структуру доступности для каждой строки таблицы. Если свойство не входит в набор, разрешенный для текущего товара, вы просто блокируете соответствующий элемент формы.

Рекомендации по оптимизации

Чтобы ваше решение работало быстро даже на больших объемах данных, придерживайтесь следующих правил:

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

← На главную