При разработке обработок в 1С часто возникает задача визуального контроля данных, загружаемых из внешних файлов, например, из Excel. Стандартное УсловноеОформление отлично справляется с простыми проверками (например, на заполненность поля), но когда логика проверки требует обращения к данным регистра сведений или сопоставления нескольких реквизитов, стандартных настроек может не хватить. Давайте разберем, как эффективно решить эту задачу.
Самый надежный и архитектурно правильный способ реализации сложного цветового выделения в управляемых формах — это использование вспомогательного реквизита в табличной части. Рассмотрим алгоритм действий по шагам:
НужноВыделитьОшибку с типом Булево.УсловногоОформления формы создадим новое правило. В качестве условия укажем: НужноВыделитьОшибку равно Истина.Теперь задача сводится к тому, чтобы при загрузке данных из файла или при ручном изменении пользователем ячейки программно устанавливать значение этого реквизита.
При загрузке данных из файла мы анализируем информацию и обращаемся к регистру сведений. Если по нашей логике пломба не соответствует ожиданиям, мы устанавливаем значение реквизита:
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
// Выполняем проверку по регистру сведений
Если Не ПроверитьСоответствиеПломбы(СтрокаТЧ.НомерПломбы) Тогда
СтрокаТЧ.НужноВыделитьОшибку = Истина;
Иначе
СтрокаТЧ.НужноВыделитьОшибку = Ложь;
КонецЕсли;
КонецЦикла;
Таким образом, платформа сама подсветит нужную ячейку, основываясь на значении нашего Булево поля. Это решение является стандартом для типовых конфигураций 1С, так как оно стабильно работает и не вызывает проблем с отрисовкой интерфейса.
Важно помнить, что если пользователь вручную меняет данные в табличной части, статус ошибки должен обновляться мгновенно. Для этого нам необходимо использовать событие ПриИзменении для соответствующих элементов управления табличной части:
&НаКлиенте
Процедура ТоварыНомерПломбыПриИзменении(Элемент)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
// Повторяем логику проверки
ТекущиеДанные.НужноВыделитьОшибку = ПроверитьПломбуНаСервере(ТекущиеДанные.НомерПломбы);
КонецПроцедуры
В тех случаях, когда мы хотим избежать добавления лишних реквизитов в объект (например, если табличная часть основана на ДанныеФормыКоллекция, не связанной напрямую с объектом метаданных), можно использовать метод программного управления оформлением. Однако, для управляемых форм предпочтительнее использовать УсловноеОформление, так как оно работает декларативно и более эффективно с точки зрения ресурсов.
Если задача требует крайне сложных вычислений, которые могут замедлять форму, рекомендуем придерживаться следующих правил:
Соответствие или Структуру на клиенте.Используя предложенный подход с Булево полем, вы получите чистое, предсказуемое и легко поддерживаемое решение, которое не требует глубокого погружения в методы отрисовки интерфейса, принятые в платформе 1С.