В рамках работы с документом "Выпуск продукции и выполнение работ" в конфигурации 1С:Комплексная автоматизация 2 (КА2) версии 2.4.13.209, пользователи часто сталкиваются с проблемой необъяснимого выделения строк табличной части "Товары" красным цветом. Мы рассмотрим, как шаг за шагом диагностировать и устранить эту загадочную проблему, даже если отладка не показывает явных изменений цвета текста в коде.
Когда строки табличной части документа выделяются цветом, а программный код формы, включая расширения, не содержит явных инструкций по изменению цвета текста, нам необходимо системно исследовать все возможные источники условного оформления. Мы проанализируем различные механизмы платформы 1С, которые могут влиять на внешний вид элементов формы.
Условное оформление формы.
Это наиболее частый и основной механизм для настройки оформления элементов управляемой формы. Настройки задаются в свойствах формы в режиме конфигуратора или программно. Оно может применяться как к отдельным полям, так и ко всей строке табличной части. При этом, если не указаны конкретные поля для оформления, оно применяется ко всей строке.
Мы должны проверить настройки условного оформления непосредственно в свойствах формы:
Также важно проверить программное задание условного оформления. Мы знаем, что автор уже смотрел процедуру ПриОткрытии, но стоит убедиться, что ни в каких других серверных процедурах, вызываемых при создании или обновлении формы (например, ПриСозданииНаСервере), не добавляются элементы в коллекцию ЭтаФорма.УсловноеОформление.Элементы.
Рассмотрим пример проверки в отладчике:
// Остановите выполнение в процедуре ПриСозданииНаСервере или ПриОткрытии
// В табло отладчика посмотрите содержимое:
// ЭтаФорма.УсловноеОформление.Элементы
// Каждый элемент коллекции может содержать условия и оформление
Условное оформление динамического списка.
Хотя табличные части документов обычно не основаны на динамических списках, мы должны исключить эту возможность. Если бы табличная часть "Товары" была динамическим списком, условное оформление могло бы быть настроено непосредственно в его свойствах. Мы можем проверить это, посмотрев тип элемента формы, представляющего табличную часть.
Если это все же динамический список, нам следует рассмотреть обработчик ПриПолученииДанныхНаСервере(), который вызывается после получения и оформления порции данных. В этом обработчике можно изменять данные и применять собственное оформление.
Условное оформление в Системе Компоновки Данных (СКД).
Это менее вероятно для табличной части документа, но возможно, если данные для неё формируются с помощью СКД (например, если это некий отчет, встроенный в форму). В этом случае условное оформление может быть задано на вкладке "Условное оформление" в настройках компоновки данных. Мы должны убедиться, что нет скрытых отчетов СКД, управляющих отображением табличной части.
Пользовательские настройки.
Очень часто источником "мистического" оформления являются пользовательские настройки. Пользователи могут самостоятельно настраивать условное оформление списков и отчетов, и эти настройки сохраняются индивидуально для каждого пользователя, не затрагивая базу данных других пользователей. Это может быть причиной, по которой только у некоторых пользователей или в определенных сеансах наблюдается выделение.
Чтобы проверить это, мы можем:
Стили конфигурации.
В 1С существуют стили оформления, которые определяют общие цветовые схемы и внешний вид элементов. Начиная с версии 8.3.13.1513, конфигурации на управляемых формах поддерживают собственные стили оформления, которые могут быть добавлены через конфигурацию или расширение. Хотя это чаще влияет на общий вид, теоретически стиль может быть настроен таким образом, чтобы влиять на определенные элементы. Однако, стили обычно определяют фоновые цвета по умолчанию, а не условное выделение отдельных строк.
Мы можем посмотреть стили в конфигураторе, но это скорее редкость для такого специфического условного выделения. Также мы можем проверить свойства самих элементов табличной части на форме — нет ли там заданных стилей оформления или других специфических свойств, которые могут влиять на цвет.
Помимо изучения настроек, нам необходимы эффективные методы отладки, чтобы точно определить, какой механизм изменяет цвет.
Проверка коллекции условного оформления в отладчике.
Мы можем установить точку останова в процедурах ПриСозданииНаСервере, ПриОткрытии или в других серверных обработчиках, которые потенциально могут модифицировать форму. В отладчике мы исследуем коллекцию ЭтаФорма.УсловноеОформление.Элементы. Каждый элемент этой коллекции содержит информацию об условиях и применяемом оформлении.
Мы должны внимательно изучить все условия, которые могут привести к красному цвету текста. Рассмотрим пример структуры программного добавления условного оформления, чтобы понимать, что именно мы ищем:
// Пример кода для программного добавления условного оформления (для понимания, что искать)
// Это то, что мы ищем, но не нашли при обычной отладке
УсловноеОформлениеСтроки = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления = УсловноеОформлениеСтроки.Оформление.Элементы.Найти("ЦветТекста");
Если ЭлементУсловногоОформления = Неопределено Тогда
ЭлементУсловногоОформления = УсловноеОформлениеСтроки.Оформление.Элементы.Добавить();
ЭлементУсловногоОформления.Параметр = ТипПараметраУсловногоОформления.ЦветТекста;
КонецЕсли;
ЭлементУсловногоОформления.Значение = Новый Цвет(255, 0, 0); // Красный цвет
ЭлементУсловногоОформления.Использование = Истина;
ПолеОформления = УсловноеОформлениеСтроки.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Товары"); // Применяем ко всей строке
ПолеОформления.Использование = Истина;
ЭлементОтбора = УсловноеОформлениеСтроки.Отбор.Элементы.Добавить();
ЭлементОтбора.ЛевоеЗначение = Новое ПолеКомпоновкиДанных("Товары.Количество");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = 0; // Пример условия: выделяем строки с отрицательным количеством
ЭлементОтбора.Использование = Истина;
Мы должны проверить условия отбора, указанные для каждого элемента условного оформления, чтобы понять, при каких обстоятельствах применяется красный цвет.
Пошаговая зачистка модуля формы.
Если другие методы не принесли результата, мы можем применить более радикальный, но эффективный способ, предложенный в сообщении 5 на форуме. Для этого мы создадим копию формы документа в расширении (если конфигурация на поддержке) или непосредственно в конфигурации (если есть такая возможность).
ЦветТекста не найдено.Использование табло отладчика для мониторинга цвета.
Автор упомянул, что загонял ЦветТекста в табло, но он всегда оставался "Авто". Это может означать, что цвет изменяется не напрямую через свойство ЦветТекста элемента формы, а через условное оформление, стиль или другой механизм, который платформа применяет перед отрисовкой. Однако, мы можем попробовать отслеживать другие свойства, такие как ОформлениеСтроки или коллекцию ЭтаФорма.УсловноеОформление.Элементы в различных точках выполнения.
Сосредоточившись на этих областях и методично применяя методы отладки, мы сможем определить истинную причину появления красных строк в табличной части документа "Выпуск продукции и выполнение работ" и устранить её.