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

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

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

Решение через дополнительное поле-признак

Самый надежный и архитектурно правильный способ реализации сложного цветового выделения в управляемых формах — это использование вспомогательного реквизита в табличной части. Рассмотрим алгоритм действий по шагам:

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

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

Реализация логики проверки

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


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

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

Обработка пользовательских правок

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


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

Альтернативный подход: динамическое оформление

В тех случаях, когда мы хотим избежать добавления лишних реквизитов в объект (например, если табличная часть основана на ДанныеФормыКоллекция, не связанной напрямую с объектом метаданных), можно использовать метод программного управления оформлением. Однако, для управляемых форм предпочтительнее использовать УсловноеОформление, так как оно работает декларативно и более эффективно с точки зрения ресурсов.

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

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

← На главную