К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как выделить текущую строку в 1С

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

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

Способ решения зависит от режима работы: в обычных формах (платформа 8.2 и ранние конфигурации) используются одни механизмы, в управляемых формах — другие. Также различаются задачи «изменить цвет активной строки» и «подсветить строки по условию» — их часто путают.

Ниже разобраны основные сценарии: настройка цвета курсора через оформление, условное оформление динамического списка, программное выделение строки и типичные ошибки, из-за которых подсветка не работает.

Что именно нужно выделить: определяем задачу

Прежде чем менять настройки, важно понять, какая именно задача стоит. От этого зависит выбор инструмента и объём работы.

  • Подсветка активной строки — строка, на которой стоит курсор, должна быть заметнее. Это вопрос удобства навигации.
  • Подсветка строк по условию — например, окрасить красным непроведённые документы или строки с отрицательным остатком. Решается условным оформлением.
  • Программное позиционирование — сделать нужную строку текущей из кода, например после добавления новой записи.

Эти задачи решаются разными механизмами, и смешивать их не стоит. Дальше каждый сценарий рассмотрен отдельно.

Как изменить цвет активной строки в управляемой форме

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

Для типовых динамических списков откройте меню «Ещё» → «Настроить список» (или «Настройки» → «Оформление» в зависимости от конфигурации). Здесь пользователь может задать условия оформления без изменения конфигурации, если разработчик не запретил изменение настроек.

Если требуется жёстко задать оформление на уровне конфигурации, откройте форму списка в конфигураторе, найдите в дереве элементов таблицу (например, «Список») и перейдите к свойству «УсловноеОформление». Там добавляется элемент оформления с нужным цветом фона и отбором.

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

Самый частый практический сценарий — выделить строки, удовлетворяющие условию. Например, подсветить документы с пометкой удаления или строки, где количество равно нулю.

Порядок действий в конфигураторе:

  1. Откройте форму списка, выделите таблицу динамического списка.
  2. Откройте свойство «УсловноеОформление» и добавьте новый элемент.
  3. На закладке «Условие» задайте отбор: поле, вид сравнения, значение (например, «ПометкаУдаления Равно Истина»).
  4. На закладке «Оформление» установите «ЦветФона» или цвет текста.
  5. На закладке «Оформляемые поля» укажите колонки, к которым применяется оформление, либо оставьте список пустым для всей строки.

Тот же результат можно получить программно — это удобно, когда условие зависит от параметров, известных только во время выполнения:

ЭлементОформления = УсловноеОформление.Элементы.Добавить();

ЭлементОформления.Использование = Истина;

ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.ПометкаУдаления");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = Истина;

ЭлементОтбора.Использование = Истина;

ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоРозовый);

Код размещают в обработчике «ПриСозданииНаСервере» формы списка. Обратите внимание: в левом значении отбора поле указывается с префиксом таблицы («Список.ПометкаУдаления»), если условное оформление относится к самой форме.

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

Как программно сделать строку текущей

Если задача — не подсветить цветом, а установить курсор на нужную строку, используется свойство «ТекущаяСтрока» элемента формы. Типичный случай — после добавления нового документа вернуть пользователя к нему в списке.

Элементы.Список.ТекущаяСтрока = НужнаяСсылка;

Для табличных частей и таблиц значений вместо ссылки передаётся идентификатор строки:

СтрокаТаблицы = Объект.Товары[0];

Элементы.Товары.ТекущаяСтрока = СтрокаТаблицы.ПолучитьИдентификатор();

Чтобы узнать, какая строка сейчас активна, читают то же свойство: Элементы.Список.ТекущаяСтрока вернёт ссылку для динамического списка или идентификатор для таблицы значений. Дополнительно полезны свойства «ТекущиеДанные» и «ВыделенныеСтроки» — последнее возвращает массив всех выделенных пользователем строк при множественном выборе.

Порядок действий при программном позиционировании
  1. 1
    Получите ссылку на объект или идентификатор строки таблицы
  2. 2
    Присвойте значение свойству Элементы.<ИмяТаблицы>.ТекущаяСтрока
  3. 3
    Убедитесь, что строка видна в текущем отборе списка — иначе курсор не встанет
  4. 4
    Проверьте результат: активная строка подсвечена платформой

Выделение текущей строки в обычных формах

В обычных формах (режим обычного приложения) механизм другой. Цвет текущей строки табличного поля задаётся в палитре свойств элемента формы — там есть настройки цветов выделения, доступные в конфигураторе.

Подсветка строк по условию в обычных формах выполняется в обработчике события табличного поля «ПриВыводеСтроки». В нём доступен объект «ОформлениеСтроки», через который меняют цвет фона и шрифт:

Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Если ДанныеСтроки.ПометкаУдаления Тогда

ОформлениеСтроки.ЦветФона = WebЦвета.СветлоРозовый;

КонецЕсли;

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

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

Сравнение подходов

Управляемые формы

Условное оформление списка декларативно или кодом в ПриСозданииНаСервере. Работает в тонком и веб-клиенте, не требует обработчиков вывода строк.

Обычные формы

Обработчик ПриВыводеСтроки табличного поля. Больше гибкости на строку, но код выполняется при каждой перерисовке — возможны тормоза на больших списках.

Настройка пользователем

Меню Настроить список → Оформление. Не требует доработки, но зависит от прав и может быть запрещено разработчиком.

Почему подсветка не работает: типичные ошибки

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

  • Неверное имя поля в отборе. Поле должно присутствовать в запросе динамического списка. Если его нет в выборке, отбор не сработает молча.
  • Не указаны оформляемые поля. В некоторых случаях без явного списка колонок оформление не применяется — добавьте нужные поля на соответствующей закладке.
  • Конфликт с пользовательскими настройками. Сохранённые настройки списка пользователя могут переопределять оформление из конфигурации.
  • Произвольный запрос без основной таблицы. Для динамического списка с произвольным запросом часть механизмов (например, стандартное позиционирование) работает ограниченно.
  • Код размещён не в том обработчике. Условное оформление формы корректно настраивать в «ПриСозданииНаСервере», а не в клиентских обработчиках.
Типичные ошибки
01
Отбор по полю, которого нет в запросе списка — оформление молча не применяется
02
Попытка изменить оформление в клиентском обработчике — на серверных коллекциях это недоступно
03
Использование ТекущаяСтрока для таблицы значений со ссылкой вместо идентификатора строки — курсор не встаёт
04
Тяжёлый код в ПриВыводеСтроки обычной формы — заметное торможение при прокрутке больших списков

Проверка результата и ограничения

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

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

Контрольные точки

Как проверить результат

Строки по условию окрашены
Норма

Цвет применяется ко всем подходящим строкам сразу после открытия

Тревожный признак

Окрашиваются часть строк или цвет появляется только после ручного обновления

Программное позиционирование
Норма

Курсор встаёт на нужную строку, она видна на экране

Тревожный признак

Курсор остаётся на первой строке — значит, ссылка не входит в текущий отбор

Производительность
Норма

Список прокручивается без задержек

Тревожный признак

Заметные паузы при прокрутке — слишком много правил оформления или тяжёлый код в обработчике

Итог

Что важно запомнить

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

Частые вопросы

Как выделить текущую строку без программирования?

Откройте список, перейдите в «Ещё» → «Настроить список» и добавьте правило оформления на закладке «Оформление»: задайте условие и цвет фона. Возможность зависит от того, разрешил ли разработчик изменять настройки списка.

Почему условное оформление не срабатывает для части строк?

Чаще всего поле условия не заполнено в этих строках (значение NULL или пустая ссылка), а вид сравнения «Равно» их не охватывает. Добавьте отдельное условие на незаполненность или используйте группу условий «ИЛИ».

Как подсветить только одну колонку, а не всю строку?

В элементе условного оформления на закладке «Оформляемые поля» добавьте только нужную колонку. Тогда цвет применится исключительно к её ячейкам, остальная часть строки останется стандартной.

Можно ли выделить несколько строк программно?

Да, для таблиц формы есть коллекция «ВыделенныеСтроки»: добавьте в неё идентификаторы нужных строк. Для динамических списков множественное выделение программно ограничено — обычно подсвечивают строки условным оформлением вместо выделения.

Работает ли условное оформление в веб-клиенте?

Да, механизм поддерживается в тонком и веб-клиенте. Различия касаются только производительности: большое количество правил оформления в веб-клиенте может замедлять отрисовку списка, поэтому правила стоит объединять и упрощать.

Как убрать подсветку, заданную пользователем?

Откройте «Настроить список», найдите добавленное правило оформления и удалите его или снимите флаг использования. Если настройки сохранены как стандартные для пользователя, может потребоваться сброс настроек списка через «Установить стандартные настройки».