Подсветка строки под курсором в списках и таблицах 1С

· 9 мин

Содержание

Чтобы изменить цвет фона текущей строки в 1С, у платформы нет одной галочки. Цвет строки задаётся условным оформлением формы, а строку «под курсором» приходится подсвечивать отдельно: условие строится по идентификатору текущей строки, который запоминается в событии таблицы. Пользователь может настроить оформление списка сам, разработчик делает это в Конфигураторе или в расширении.

Типичная ситуация: бухгалтер листает список из 800 документов, взгляд теряется, и он промахивается мимо нужной строки. Цвет выделения платформы бледный, на мониторе с плохой матрицей почти не виден. Просят «сделать, чтобы строка с курсором горела жёлтым». Ниже собраны все рабочие способы, от безопасных настроек до программной подсветки.

Что такое «текущая строка» и почему её нельзя подсветить одной настройкой

В управляемых формах 1С у таблицы есть две разные вещи: выделенные строки и текущая строка. Выделенных может быть несколько (Shift или Ctrl), текущая всегда одна: там стоит курсор. Платформа сама рисует рамку и закрашивает выделение цветом из стиля. Этот цвет задаётся оформлением системы, а не формы.

Условное оформление работает иначе. Оно смотрит на данные строки: сумма больше 100 000, статус «Не проведён», дата просрочена. Положение курсора в данные не входит. Поэтому прямое условие «если строка текущая» в конструкторе условного оформления составить нельзя.

Отсюда три пути:

  • 🎨 Раскрасить строки по данным. Курсор не нужен: проведённые зелёные, непроведённые серые. Делается без кода.
  • 🖱️ Подсветить именно строку с курсором. Нужен код: запомнить текущую строку и построить по ней условие оформления.
  • ⚙️ Поменять цвет самого выделения. Это настройка стиля, она затрагивает все формы сразу.

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

СпособКому доступенНужен кодЗатрагивает
Настройка условного оформления списка в режиме 1С:ПредприятиеПользовательНетТолько его список
Условное оформление в КонфигуратореРазработчикНетВсе пользователи
Подсветка по событию таблицыРазработчикДаКонкретная форма
Изменение элементов стиляРазработчикНетВесь интерфейс

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

Для динамических списков (справочники, журналы документов) пользователь может задать условное оформление сам. Конфигуратор для этого не нужен.

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

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

Пользовательская настройка списка не даёт условия «строка с курсором». Она работает только по полям данных.

Если в форме нет команды настройки списка, её могла убрать доработка конфигурации. Тогда варианты два: попросить разработчика вернуть команду или попросить сделать оформление в самой форме.

Условное оформление в Конфигураторе: цвет по данным строки

Это основной способ для разработчика. Он не требует ни строчки кода и работает во всех клиентах.

Порядок действий:

  1. Откройте форму списка или документа в Конфигураторе.
  2. В дереве элементов выберите таблицу (для списка это обычно элемент Список).
  3. В палитре свойств найдите свойство Условное оформление и откройте его. Либо перейдите на вкладку Реквизиты формы и найдите то же свойство у самого динамического списка.
  4. Добавьте элемент оформления.
  5. В блоке отбора задайте условие по полю данных.
  6. В блоке оформления выберите параметр Цвет фона и укажите цвет.
  7. В блоке Оформляемые поля оставьте пустым, чтобы красилась вся строка, либо перечислите только нужные колонки.

Три момента, на которых чаще всего ошибаются.

Первый. Если оформляемые поля не заданы, красится вся строка. Если заданы одна-две колонки, подсветятся только они. Хотели строку целиком, а получили одну ячейку: проверьте этот блок.

Второй. Порядок элементов важен. Когда условия пересекаются, побеждает тот элемент, что стоит ниже в списке. Элемент «все непроведённые серые» выше, а «непроведённые на сумму больше миллиона красные» ниже: так сработают оба правила, красный перекроет серый.

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

Для цвета берите из палитры стиля либо web-цвета. Так оформление остаётся читаемым в разных темах.

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

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

В свойствах таблицы есть событие ПриАктивизацииСтроки. Оно срабатывает при каждом переходе на другую строку. Обработчик на клиенте выглядит так:

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    ПодключитьОбработчикОжидания("ПодсветитьТекущуюСтроку", 0.1, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ПодсветитьТекущуюСтроку()
    ПодсветитьСтрокуНаСервере(Элементы.Список.ТекущаяСтрока);
КонецПроцедуры

Обработчик ожидания нужен, чтобы не гонять сервер на каждое нажатие стрелки. Пока пользователь быстро листает список, вызов откладывается и сбрасывается; на сервер уходит запрос, только когда курсор остановился на 0,1 секунды.

На сервере правило пересоздаётся:

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

Здесь Список — динамический список формы, а Ссылка — поле, которое идёт в его запросе. Для справочников и документов оно есть всегда. Для списка на произвольном запросе подставьте поле-ключ вашей выборки.

Для таблиц значений (не динамических списков) идентификатор строки не равен ссылке. Берите ТекущаяСтрока как идентификатор и сравнивайте с идентификатором, который сохранили в колонке таблицы. Либо добавьте вспомогательную колонку-флаг и меняйте её при переходе по строкам.

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

Если очистка выполняется, но подсветка «залипает» на предыдущей строке, проверьте, что условие использует именно текущий идентификатор, а не значение, закэшированное на клиенте.

Расширения конфигурации: как добавить подсветку, не трогая типовую форму

Типовую форму в поддержке редактировать неудобно: при обновлении конфигурации правки превращаются в конфликты объединения. Для этого есть расширения конфигурации , они появились в платформе 8.3.6.

Порядок:

  1. Создайте расширение и добавьте в него нужную форму списка через команду заимствования объектов.
  2. В заимствованной форме создайте обработчик события таблицы. Он вызывается дополнительно к коду типовой формы, не заменяя его.
  3. Добавьте в расширение процедуры из предыдущего раздела.
  4. Если нужен постоянный цвет по данным, настройте условное оформление прямо в заимствованной форме.
  5. Загрузите расширение в информационную базу и обновите конфигурацию базы данных отдельным шагом.

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

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

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

Тонкий клиент и веб-клиент: чем отличается результат

Условное оформление выполняется одинаково в тонком и веб-клиенте: цвета задаются в форме, а клиент их применяет. Код на сервере не зависит от типа клиента. Различия появляются в мелочах.

  • 🖥️ Тонкий клиент рисует строки быстро. Задержка подсветки определяется временем серверного вызова.
  • 🌐 Веб-клиент добавляет задержку браузера и сети. Если сервер отвечает за 200 мс, а канал медленный, подсветка отстаёт от курсора заметно. Подберите интервал обработчика ожидания: на веб-клиенте имеет смысл ставить не 0,1, а 0,3 секунды.
  • 📱 Мобильный клиент обычно работает с другими формами и другим оформлением, повторять код не стоит.

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

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

Почему цвет не применяется: диагностика

Если вы добавили правило, а строка не красится, пройдите по списку.

СимптомВероятная причинаЧто проверить
Красится одна ячейка, а не вся строкаЗаданы оформляемые поляОчистите блок Оформляемые поля
Правило не срабатывает вообщеВыключен флажок использованияВключите элемент и условие
Срабатывает не то правилоПерекрытие нижним элементомПоменяйте порядок элементов
Подсветка «залипла» на старой строкеНе очищена коллекцияВызовите Очистить() перед добавлением
Условие по полю ничего не находитПоле не попало в запрос спискаПроверьте текст запроса и имя поля
Цвет не виден на выбранной строкеПерекрыт цветом выделенияВыберите более насыщенный цвет
В веб-клиенте отстаётСерверный вызов на каждый шагУвеличьте интервал ожидания

Если правило добавлено в расширении, а в типовой форме то же поле уже оформлено, проверьте порядок: оформление расширения и типовое складываются, но при пересечении параметров приоритет определяет порядок элементов.

Для разбора удобно временно поставить яркий цвет, например красный, и убрать все остальные элементы оформления. Если красный появился, правило работает, а проблема в условии или в конфликте с соседними элементами.

Отдельный случай: списки, построенные на произвольном запросе, где поле Ссылка не выбирается. Тогда условие, составленное по нему, ничего не найдёт. Добавьте в запрос выбор поля-ключа и укажите его в основной таблице динамического списка.

Проверка перед сдачей доработки
Выполнено: 0 / 5

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

Можно ли изменить цвет выделенной строки для всех форм сразу?
Да, через элементы стиля в конфигурации: они задают цвета интерфейса целиком. Это изменение затронет все формы и всех пользователей, поэтому согласуйте его заранее.
Работает ли подсветка в обычных (неуправляемых) формах?
В обычных формах таблицы настраиваются иначе, там оформление ячеек задаётся свойствами колонок. Описанный способ рассчитан на управляемые формы.
Подсветка замедляет список?
Само оформление почти не влияет. Тормозит серверный вызов на каждый шаг курсора. Обработчик ожидания снимает проблему.
Почему пользовательская настройка пропала после обновления?
Пользовательские настройки хранятся отдельно и могут сбрасываться при смене структуры формы. Если нужен постоянный результат, закрепите оформление в самой форме.
Можно ли подсветить не фоном, а шрифтом?
Да. В элементе оформления вместо цвета фона задайте параметр цвета текста или шрифт, например полужирный.