Разработка и Конфигурация · 9 мин
Как активировать строку в 1С
Как активировать строку в табличной части документа 1С: ручной способ, метод Активизировать(), активация поиском по значению, типичные ошибки и проверка результата.
Активная строка в 1С — это строка таблицы (табличной части документа, списка справочника, динамического списка), на которой установлен курсор и которая выделена визуально. Активизация определяет, с какой строкой работают команды формы: копирование, удаление, открытие связанного объекта. Путаница с активной строкой — частая причина ошибок, когда пользователь или код изменяет не ту запись.
Активировать строку можно двумя способами: вручную через интерфейс (мышью или клавиатурой) и программно — методом Активизировать() у элемента формы. Программный способ нужен в обработчиках после добавления новой строки, при поиске нужной записи, при синхронизации нескольких таблиц на форме.
Ниже разобраны оба сценария, требования к контексту выполнения, типичные ошибки и способы проверить, что активизирована именно нужная строка.
Ручная активация строки в интерфейсе
В режиме 1С:Предприятие активная строка табличной части подсвечивается цветом и содержит маркер в левой колонке. Чтобы активировать строку, достаточно щёлкнуть по ней мышью или переместить курсор клавишами «вверх»/«вниз». Двойной щелчок обычно открывает связанный объект (например, карточку номенклатуры), поэтому для простой активации используйте одиночный клик.
Если таблица находится в режиме редактирования, одиночный клик может сразу открыть ячейку для ввода. Тогда активная строка совпадает с редактируемой, а выйти из режима ввода можно клавишей Esc или Enter. Учитывайте это при обучении пользователей: случайное редактирование ячейки — частая причина «самопроизвольных» изменений данных.
Для быстрого перехода к нужной строке в длинном списке используйте поиск (Ctrl+F) или сортировку по колонке. Найденная строка автоматически становится активной, что удобно перед выполнением групповых операций.
Программная активация методом Активизировать()
У элемента формы типа «Таблица» есть метод Активизировать(), который принимает строку данных или её идентификатор. Типовой вызов выглядит так:
Строки = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", ИскомаяНоменклатура));
Если Строки.Количество() > 0 Тогда
Элементы.Товары.Активизировать(Строки[0].ПолучитьИдентификатор());
КонецЕсли;
Важно понимать, что передаётся в метод. Для табличных частей и деревьев значений метод ожидает идентификатор строки коллекции данных формы (целое число, получаемое через ПолучитьИдентификатор()). Для динамических списков активизация работает иначе — через свойство ТекущаяСтрока элемента формы, куда присваивается ссылка на объект.
Метод Активизировать() доступен только на клиенте. Вызов в серверной процедуре приведёт к ошибке, потому что на сервере нет визуального элемента формы. Поэтому поиск строки часто выполняют на сервере, а саму активизацию — в клиентском контексте, передавая идентификатор.
Активация строки в динамическом списке
Динамический список (список документов, справочников) не хранит строки как табличная часть, поэтому Активизировать() с идентификатором здесь не работает. Вместо этого используйте свойство ТекущаяСтрока:
Элементы.Список.ТекущаяСтрока = НужнаяСсылка;
После присваивания список спозиционируется на указанной ссылке, если она удовлетворяет текущему отбору. Если запись скрыта отбором, позиционирование не произойдёт — это нужно учитывать: сначала проверьте или сбросьте отборы, потом устанавливайте текущую строку.
Типовой сценарий — вернуть пользователя на ту же строку списка после редактирования документа. Ссылку сохраняют перед открытием формы, а после закрытия восстанавливают через ТекущаяСтрока.
Способы активации по типу таблицы
Метод Активизировать() с идентификатором строки коллекции данных формы. Работает только на клиенте.
Присвоение ссылки свойству Элементы.Список.ТекущаяСтрока. Требует, чтобы запись проходила текущий отбор.
Клик мышью или клавиши со стрелками. Подходит для разовых операций пользователя.
Активация после добавления новой строки
Частая задача — после программного добавления строки в табличную часть сразу сделать её активной, чтобы пользователь продолжил ввод. Порядок такой: добавить строку, получить её идентификатор, активизировать:
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
Элементы.Товары.Активизировать(НоваяСтрока.ПолучитьИдентификатор());
Если нужно не просто активировать строку, а сразу открыть ячейку конкретной колонки для редактирования, дополнительно установите свойство ТекущийЭлемент формы на нужную колонку таблицы и вызовите ИзменитьСтроку(). Это создаёт эффект непрерывного ввода без лишних кликов.
- 1Добавьте строку методом Добавить() в табличную часть
- 2Заполните обязательные реквизиты строки
- 3Получите идентификатор: Строка.ПолучитьИдентификатор()
- 4Вызовите Элементы.Таблица.Активизировать(Идентификатор) в клиентском обработчике
- 5Проверьте визуально: строка подсвечена и доступна для ввода
Поиск и активация строки по условию
Для активации строки по значению реквизита используйте НайтиСтроки() с структурой отбора. Метод возвращает массив подходящих строк — учитывайте, что совпадений может быть несколько, и решите, какую из них активировать (обычно первую).
Если поиск требует сложных условий или обращения к базе, выполните его на сервере, а на клиент верните идентификатор строки. Прямая передача строки коллекции между клиентом и сервером невозможна — передавайте только идентификатор или индекс.
При поиске по строковому значению помните о регистре и пробелах: сравнение точное. Для пользовательских поисков надёжнее приводить обе строки к одному регистру через ВРег() и обрезать пробелы через СокрЛП().
Проверка результата и ограничения
Признак успешной активации — строка подсвечена, а свойство ТекущиеДанные элемента формы возвращает именно её. В отладке проверьте: Элементы.Товары.ТекущиеДанные должно содержать данные целевой строки, а ТекущаяСтрока — её идентификатор.
Если активизация визуально «не срабатывает», проверьте порядок вызовов: обновление данных формы, отборы и перерисовка могут сбрасывать текущую строку. Выполняйте активацию последним действием в обработчике, после всех изменений данных.
Ограничение метода: он не прокручивает таблицу к строке в некоторых сценариях с виртуальным режимом отображения больших списков. В таких случаях для динамических списков надёжнее работает установка ТекущаяСтрока — платформа сама позиционирует видимую область.
Как проверить результат
Возвращает данные нужной строки
Возвращает Неопределено или другую строку — активизация не сработала
Строка выделена цветом, маркер установлен
Подсвечена другая строка или ничего не выделено
Код в клиентском обработчике формы
Ошибка «метод не обнаружен» — код на сервере
Частые вопросы
Чем Активизировать() отличается от установки ТекущаяСтрока?
Активизировать() применяется к табличным частям и таблицам значений и принимает идентификатор строки коллекции. ТекущаяСтрока — свойство элемента динамического списка, куда присваивается ссылка на объект. Для динамических списков Активизировать() не подходит.
Почему возникает ошибка «Метод объекта не обнаружен: Активизировать»?
Чаще всего код выполняется в серверной процедуре, где визуальные элементы формы недоступны. Перенесите вызов в клиентский обработчик, а серверную логику (поиск, расчёты) оставьте на сервере, передавая на клиент только идентификатор строки.
Как активировать строку сразу при открытии формы?
Используйте обработчик ПриОткрытии на клиенте, а не ПриСозданииНаСервере: в момент создания на сервере элементы формы ещё не существуют визуально. В ПриОткрытии найдите строку и вызовите Активизировать() с её идентификатором.
Что делать, если НайтиСтроки() вернул несколько строк?
Метод возвращает массив всех совпадений. Определите дополнительный критерий выбора (например, первую по дате или по индексу) либо покажите пользователю список для выбора. Не берите Строки[0] вслепую, если дубли недопустимы по логике задачи.
Можно ли активировать строку и сразу начать редактирование ячейки?
Да. После Активизировать() установите ЭтаФорма.ТекущийЭлемент на нужную колонку таблицы и вызовите у таблицы метод ИзменитьСтроку(). Курсор встанет в ячейку в режиме ввода, что удобно для непрерывного ввода данных.
Почему после активации выделяется не та строка?
Вероятные причины: идентификатор получен от строки другой коллекции (после копирования или перезаполнения данных идентификаторы меняются), либо после активизации выполняется код, сбрасывающий текущую строку. Получайте идентификатор непосредственно перед вызовом и ставьте активизацию последним действием.
Что важно запомнить
Для табличных частей используйте Активизировать() с идентификатором строки и только на клиенте; для динамических списков — свойство ТекущаяСтрока со ссылкой. Выполняйте активизацию последним действием в обработчике и проверяйте результат через ТекущиеДанные.