При разработке интерфейсов на платформе 1С:Предприятие 7.7 программисты часто сталкиваются с ограничениями стандартного визуального представления списков и журналов. Одним из самых популярных инструментов для расширения возможностей интерфейса является внешняя компонента FormEx. Однако использование её продвинутых функций, таких как «План раскраски», часто вызывает вопросы даже у опытных разработчиков. Рассмотрим подробно, как настроить этот механизм и избежать типичных ошибок.
Для начала проанализируем ситуацию: почему стандартный метод ВключитьРаскраскуТаблиц() иногда уступает методу ИспользоватьПланРаскраски()? В обычном режиме компонента вызывает функцию 1С для каждой строки при каждой перерисовке таблицы. Это создает серьезную нагрузку на процессор, особенно если в журнале тысячи записей, а алгоритм определения цвета содержит сложные условия. План раскраски работает иначе: компонента один раз считывает данные из специальной скрытой колонки, где уже сформирован строковый шаблон стилей. Это значительно ускоряет отрисовку и делает скроллинг плавным.
Разберем по шагам процесс подготовки метаданных. Чтобы FormEx «понял», откуда брать данные для раскраски, в таблицу (например, в журнал документов или справочник) необходимо добавить служебную колонку. Выясним основные требования к этой колонке:
КолонкаРаскраски).Проанализируем пример функции, которая будет заполнять эту колонку. В модуле формы должна быть определена функция, привязанная к данной колонке:
Функция гетРаскраска()
// Формируем план раскраски для текущей строки
// Формат: (СтильВсейСтроки)(СтильКолонки1)(СтильКолонки2)...
Возврат "(BRUSH[0x99FFCC])()()";
КонецФункции
Посмотрим на программную часть. Для активации механизма нам понадобится объект Сервис из библиотеки FormEx. Рассмотрим типичную ошибку начинающих: создание объекта внутри процедуры ПриОткрытии() каждой формы.
Важный совет: Не рекомендуется создавать объект Сервис и включать раскраску многократно. Это может привести к нестабильности системы и даже вылетам программы. Лучше всего инициализировать компоненту и объект один раз в Глобальном модуле в процедуре ПриНачалеРаботыСистемы(). Однако, если задача локальная, в модуле формы это выглядит так:
Процедура ПриОткрытии()
Сервис = СоздатьОбъект("Сервис");
// Вместо ВключитьРаскраскуТаблиц(0) используем план
Сервис.ИспользоватьПланРаскраски(1);
КонецПроцедуры
Рекомендуется также использовать предопределенную процедуру ПослеОткрытия(), которую предоставляет FormEx. В этот момент визуальные объекты Windows уже полностью созданы, и компонента гарантированно сможет к ним подключиться.
Разберем подробнее структуру строки, которую возвращает колонка раскраски. План раскраски позволяет задать индивидуальный стиль для каждой ячейки. Строка состоит из набора скобок:
(СтильВсейСтроки)(СтильКолонки1)(СтильКолонки2)...(СтильКолонкиN)
().Внутри скобок можно использовать следующие параметры:
Пример сложного плана раскраски:
// Вся строка - белый фон, первая колонка - красный шрифт, вторая - зеленый фон
Стиль = "()(FONT[0x0000FF])(BRUSH[0x00FF00])";
Проанализируем формат цвета, который использует FormEx. В отличие от привычного веба, здесь используется формат 0xBBGGRR (Blue-Green-Red). Если вы хотите получить красный цвет, это будет 0x0000FF. Если синий — 0xFF0000. Чтобы не запутаться, можно написать вспомогательную функцию для конвертации цветов из стандартных RGB-значений. Для быстрого применения готовой палитры подойдёт обработка с набором Web-цветов для FormEx в 1С 7.7.
Если вы внедрили код, но «ничего не красится», проверим следующее:
FormEx_ПланРаскраски. Ошибки в регистре (например, formex_планраскраски) недопустимы.FormEx.dll загружена. Проверить это можно кодом:
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") <> 1 Тогда
Предупреждение("Компонента FormEx не найдена!");
КонецЕсли;
BRUSH и FONT пишутся заглавными буквами внутри квадратных скобок.Разберем наиболее стабильный вариант реализации. Профессионалы советуют вынести загрузку ВК в Глобальный модуль. Это позволит избежать конфликтов при открытии нескольких форм с раскраской одновременно.
// В Глобальном модуле
Перем глСервис Экспорт;
Процедура ПриНачалеРаботыСистемы()
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll") = 1 Тогда
глСервис = СоздатьОбъект("Сервис");
КонецЕсли;
КонецПроцедуры
Теперь в любой форме журнала вам достаточно лишь вызвать одну строку:
Процедура ПослеОткрытия()
Если ПустоеЗначение(глСервис) = 0 Тогда
глСервис.ИспользоватьПланРаскраски(1);
КонецЕсли;
КонецПроцедуры
Мы выяснили, что использование плана раскраски в FormEx — это мощный способ сделать интерфейс 1С 7.7 современным и быстрым. Главное — строго соблюдать синтаксис заголовков и правильно формировать строку стилей. Помните о порядке следования колонок и используйте возможности BGR-формата для точной настройки цветовой гаммы. Применяя данные рекомендации, вы сможете создавать визуально понятные и удобные инструменты для конечных пользователей, сохраняя при этом высокую производительность системы.