Почему нестабильно работает раскраска фона строк в списке 1С:Предприятие (обычные формы)?

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

В процессе разработки на платформе 1С:Предприятие в режиме обычных форм (ОФ) часто возникает задача визуального выделения строк списка. Наиболее распространенный способ — использование события ПриПолученииДанных. Однако разработчики нередко сталкиваются с ситуацией, когда оформление работает «через раз», отображается некорректно у разных пользователей или ведет себя непредсказуемо при прокрутке списка. Давайте разберем, почему это происходит и как устранить проблему.

Анализ причин сбоев в событии ПриПолученииДанных

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

Рассмотрим пример кода, который часто становится источником ошибок:


Попытка
    Если СтрокаМаржи.МаржаМеньше60 Тогда 
        Стр.ЦветФона = WebЦвета.Розовый;
    КонецЕсли;
Исключение
    // Ошибка подавлена, причина не ясна
КонецПопытки;

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

Пошаговое решение проблемы

Чтобы стабилизировать работу оформления и избавиться от «лотереи» при прокрутке списка, выполним следующие действия:

  1. Удалите глобальные блоки обработки ошибок. Избавьтесь от конструкции Попытка...Исключение, охватывающей всю процедуру ПриПолученииДанных. Это позволит платформе выдать реальное описание ошибки при возникновении проблем.
  2. Проверьте доступность полей и колонок. Перед тем как обращаться к оформлению ячеек или проверять данные, убедитесь, что соответствующие колонки присутствуют на форме и выведены в текущем представлении пользователя.
  3. Используйте точечную обработку. Если ваша логика требует обращения к свойствам элементов, которые могут отсутствовать, добавьте адресную проверку наличия этих элементов.

Рекомендуемый подход к коду

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


// Правильная реализация раскраски в ПриПолученииДанных
Для Каждого Стр Из ОформленияСтрок Цикл
    // Проверяем данные, которые мы получили
    ДанныеСтроки = Стр.ДанныеСтроки;
    
    // Выполняем проверку условий без глобальной попытки
    Если ДанныеСтроки.МаржаМеньше60 Тогда 
        Стр.ЦветФона = WebЦвета.Розовый;
    КонецЕсли;
    
    // Если нужно обращение к колонке, убедитесь, что она есть
    // Например, через проверку состава элементов формы или наличие поля в данных
КонецЦикла;

Почему важен состав полей

Важно помнить, что ПриПолученииДанных работает не с отдельными строками, а с «пакетами» данных, отображаемых в текущем окне. Если в одном из пакетов данных встречается значение, приводящее к ошибке (например, обращение к несуществующей колонке), обработка этого пакета может быть нарушена. Это объясняет, почему у одних пользователей список красится корректно (они настроили отображение колонок согласно логике кода), а у других — нет.

В качестве профилактики рекомендуем:

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

← На главную