Почему не работает условное оформление для невыполненных задач в списке «Задачи мне» 1С:Документооборот 2.1?

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

При работе с конфигурацией 1С:Документооборот 8 КОРП, редакция 2.1 разработчики часто сталкиваются с ситуацией, когда стандартное или программное условное оформление динамических списков ведет себя непредсказуемо. Типичный сценарий: вы настраиваете окрашивание строк в списке ЗадачиМне, и оно прекрасно работает для выполненных задач, но игнорируется для активных (невыполненных). Разберем по шагам, почему так происходит и как заставить оформление работать корректно.

Проанализируем архитектуру списка «Задачи мне»

Для начала нам необходимо понять, что список «Задачи мне» — это не просто таблица, отображающая данные из базы. В 1С:Документооборот 2.1 этот механизм реализован крайне сложно. Проанализируем основные причины «сопротивления» системы нашим настройкам:

  1. Множественность форм: Список задач может отображаться в разных формах в зависимости от контекста и настроек пользователя. Каждая форма может иметь свои программные обработчики динамического списка.
  2. Программное переопределение в типовом коде: В конфигурации реализована жесткая логика выделения задач. Например, просроченные задачи принудительно окрашиваются в красный цвет, а непрочитанные — выделяются жирным шрифтом.
  3. Динамическая смена текста запроса: При переключении режимов «Все», «Текущие», «Выполненные» система может на лету менять текст запроса динамического списка, что иногда приводит к потере связи с полями, на которых базируется ваше условное оформление.

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

Рассмотрим ситуацию глубже. В платформе 1С существует иерархия применения оформления. Когда мы добавляем свое оформление программно или через настройки списка, оно вступает в конкуренцию с тем, что прописано в модулях формы.

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

Разберем процесс отладки и исправления

Чтобы решить проблему, нам нужно пройти по пути исполнения кода. Выполним следующие действия:

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

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


// Типовой механизм может добавлять оформление динамически
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченнаяЗадача);
// Это условие будет иметь приоритет над вашим, если оно добавлено позже или имеет более общий характер

Как гарантировать работу своего оформления?

Чтобы ваше оформление работало для активных задач, воспользуемся следующими рекомендациями:

1. Смещение приоритета. Убедитесь, что ваш программный код по добавлению оформления выполняется в самом конце процедуры ПриСозданииНаСервере. Это позволит вашему правилу оказаться в конце коллекции, что в некоторых случаях (в зависимости от логики платформы) позволяет ему сработать корректно.

2. Использование обязательных полей. Если ваше условное оформление завязано на данных, которые не выведены в колонки списка, обязательно используйте метод УстановитьОбязательноеИспользование для этих полей. В противном случае платформа может оптимизировать запрос и не выбирать эти данные для невыполненных задач.

3. Проверка «конкурентов» в коде. Попробуйте выполнить глобальный поиск по тексту ЦветТекста или Шрифт внутри модуля формы. Если вы найдете условия типа Если ЗадачаПросрочена Тогда, вам придется либо модифицировать это условие (через расширение), либо адаптировать свое оформление так, чтобы оно было более специфичным.

Рассмотрим программное добавление оформления через расширение

Наиболее правильным способом будет использование расширения для модификации процедуры формирования списка. Посмотрим на пример кода, который корректно добавляет оформление, не конфликтуя со стандартными механизмами:


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

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

Важный нюанс: В 1С:Документооборот 2.1 часто используется поле Состояние или вычисляемые флаги типа Просрочена. Для невыполненных задач эти флаги вычисляются динамически. Если ваше условие конфликтует с системным цветом просрочки, платформа всегда отдаст приоритет «красному» цвету, так как это критически важная бизнес-информация для данной конфигурации.

Итоги

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

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

← На главную