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

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

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

Анализ проблемы: почему подключаемая внешняя обработка не решит задачу автоматически

В Сообщении 9 темы форума предпринята попытка реализовать раскраску списка через подключаемую внешнюю обработку заполнения объектов. Давайте проанализируем предложенный автором код регистрации внешней обработки:


Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    ПараметрыРегистрации.Информация = "Тест";
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
    ПараметрыРегистрации.Назначение.Добавить("Документ.СчетНаОплатуПокупателю");
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Тест";
    Команда.Идентификатор = "Тест";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
    Команда.ПоказыватьОповещение = Ложь;
    Возврат ПараметрыРегистрации;
КонецФункции

И код клиентской части в форме этой внешней обработки:


&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт 
    Форма = ЭтаФорма.ВладелецФормы;
    ЭлементУО = Форма.Список.УсловноеОформление.Элементы.Добавить();
    ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
КонецПроцедуры

Выясним причину, почему данный подход не подходит для автоматической раскраски списка при открытии:

  1. Ручной запуск команды. Команда внешней обработки с типом использования ВызовКлиентскогоМетода регистрируется в подсистеме дополнительных отчетов и обработок (БСП). Она выводится в меню «Ещё» или на панель заполнения формы списка. Это означает, что раскраска применится только тогда, когда пользователь вручную нажмет кнопку этой обработки. При обычном открытии или обновлении списка документов автоматической раскраски не произойдет. В БСП нет штатного механизма, который позволял бы выполнять код внешних обработок автоматически «на лету» при загрузке стандартных форм.
  2. Отсутствие условий отбора в коде. В предложенном коде создается элемент условного оформления, но для него не заданы правила отбора. Если выполнить этот код, весь динамический список полностью окрасится в красный цвет, независимо от реквизитов документов.
  3. Некорректное обращение к коллекции оформления. Прямое добавление элементов оформления в свойство Форма.Список.УсловноеОформление может работать нестабильно на управляемых формах. В платформе 1С 8.3 для динамических списков правильнее настраивать оформление через компоновщик настроек: Список.КомпоновщикНастроек.Настройки.УсловноеОформление. Это гарантирует корректное наложение правил при фильтрации и обновлении данных списка.

Вывод: Использовать исключительно подключаемую внешнюю обработку БСП для автоматической раскраски списка при открытии формы невозможно. Нам требуется инструмент, способный вклиниться в процесс создания формы на сервере. Таким инструментом является расширение конфигурации.

Правильная реализация автоматической раскраски через расширение

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

Выполним настройку по шагам:

  1. Откроем конфигуратор и создадим новое расширение (меню Конфигурация -> Расширения конфигурации -> Добавить).
  2. Найдем в основной конфигурации форму списка нужного документа (например, Документ.СчетНаОплатуПокупателю.Форма.ФормаСписка) и добавим её в созданное расширение (правой кнопкой мыши по форме -> Добавить в расширение).
  3. Перейдем в модуль формы списка внутри расширения и добавим обработчик события ПриСозданииНаСервере с аннотацией &После.

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


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

Разбор по шагам: как работает этот код

Проанализируем ключевые объекты платформы, использованные в решении:

Альтернативный вариант: Настройка условного оформления силами пользователя

Если перед вами стоит задача раскрасить список быстро и без привлечения программиста, платформа 1С предоставляет мощный встроенный механизм интерактивной настройки. Этот метод работает прямо в режиме «1С:Предприятие».

Рассмотрим, как настроить оформление интерактивно:

  1. Откройте нужную форму списка документов (например, счета на оплату).
  2. Нажмите кнопку «Ещё» в правом верхнем углу списка и выберите пункт «Настроить список...».
  3. В открывшемся окне перейдите на вкладку «Условное оформление».
  4. Нажмите кнопку «Добавить». В появившемся окне настройте три ключевых параметра:
    • Оформление: укажите цвет фона, цвет текста или шрифт.
    • Условие: добавьте отбор (например, поле Проведен равно Ложь).
    • Оформляемые поля: выберите колонки, которые должны окраситься (если не выбирать, покрасится вся строка).
  5. Нажмите «Завершить редактирование» и закройте настройки. Список сразу же преобразится.

Полезный совет для администраторов систем: чтобы не настраивать условное оформление вручную под каждым пользователем, администратор базы данных может скопировать эти настройки. Для этого перейдите в раздел Администрирование -> Настройки пользователей и прав -> Копирование настроек. Выберите пользователя-донора, укажите целевых пользователей и скопируйте настройку внешнего вида конкретного списка.

← На главную