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

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

При разработке интерфейсов в обычных формах платформы «1С:Предприятие 8» часто возникает задача подсветки данных в табличной части. Например, когда пользователь вводит значение в колонку Количество, необходимо сравнить его с первоначальным остатком и раскрасить ячейку, если введенное количество превышает допустимый остаток.

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

Передача данных из формы заполнения в форму документа

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

Чтобы решить эту проблему, разберем порядок передачи контекста:

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

Настройка динамического оформления строк

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

Выясним разницу между этими событиями:

Событие ПриВыводеСтроки вызывается последовательно для каждой строки. В процедуру передаются параметры ОформлениеСтроки и ДанныеСтроки.

Посмотрим на пример реализации оформления в событии ПриВыводеСтроки:


Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если ДанныеСтроки.Количество > ДанныеСтроки.Остаток Тогда
        ОформлениеСтроки.Ячейки.Количество.ЦветФона = WebЦвета.Красный;
    Иначе
        ОформлениеСтроки.Ячейки.Количество.ЦветФона = WebЦвета.Белый;
    КонецЕсли;

КонецПроцедуры

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

Рассмотрим пример обработки группы строк в событии ПриПолученииДанных:


Процедура ТабличнаяЧасть1ПриПолученииДанных(Элемент, ОформленияСтрок)
    
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
        Если ДанныеСтроки <> Неопределено И ДанныеСтроки.Количество > ДанныеСтроки.Остаток Тогда
            ОформлениеСтроки.Ячейки.Количество.ЦветФона = WebЦвета.Красный;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

Обновление оформления при изменении значения пользователем

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


Процедура ТабличнаяЧасть1КоличествоПриИзменении(Элемент)
    
    // Обновляем отображение табличного поля для мгновенного вызова событий оформления
    ЭлементыФормы.ТабличнаяЧасть1.Обновить();

КонецПроцедуры

Важные правила и ограничения платформы

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

  1. Запрет на запросы в событиях вывода: Внутри процедур ПриВыводеСтроки и ПриПолученииДанных категорически нельзя выполнять запросы к базе данных или обращаться к серверным функциям. Все данные для сравнения (значения остатков) должны быть подготовлены заранее и находиться в памяти формы или строки ТЧ.
  2. Отсутствие свойств цвета у строки: Объект СтрокаТабличнойЧасти не содержит собственных свойств цвета. Изменение цвета выполняется исключительно через объекты ОформлениеСтроки и Ячейка.
  3. Выделение активной строки: Стандартное выделение текущей строки платформой может частично перекрывать заданный пользовательский цвет фона ячейки.
← На главную