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