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

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

1С: как активизировать строку в таблице, документе и программно

Как активизировать строку в 1С: в табличной части документа, списке справочника и программно через Активизировать(). Пошаговые инструкции, примеры кода и разбор ошибок.

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

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

Ниже разобраны оба сценария: работа в режиме «Предприятие» без программирования и программная активизация строки через встроенный язык 1С с примерами кода и типичными ошибками.

Что значит «активизировать строку» в 1С

Активная строка — это строка табличного поля, на которой в данный момент находится курсор ввода. Именно к ней применяются команды «Изменить», «Удалить», «Переместить вверх/вниз», именно из неё считываются данные при обработке выбора. Визуально активная строка подсвечивается цветом, а в левом поле таблицы отображается маркер текущей позиции.

Важно отличать активизацию от выделения. Выделенных строк может быть несколько (с зажатым Ctrl или Shift), а активная строка всегда одна. Программные свойства ТекущаяСтрока и ВыделенныеСтроки у таблицы формы отражают именно это различие: первое хранит идентификатор активной строки, второе — массив идентификаторов выделенных.

Ещё одно различие — между активизацией строки и переходом в режим редактирования ячейки. Активизировать строку можно без открытия редактора: строка просто становится текущей. Для ввода данных в конкретную колонку дополнительно используется метод ИзменитьСтроку() у элемента формы.

Как активизировать строку в режиме «Предприятие»

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

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

Если строка не активизируется

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

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

Программная активизация строки на форме

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

Ключевой момент: метод принимает не номер строки (1, 2, 3…), а идентификатор строки данных формы. Для табличной части объекта идентификатор получают через метод ПолучитьИдентификатор() у строки коллекции. Пример для табличной части «Товары» документа:

bsl
&НаКлиенте
Процедура АктивизироватьНужнуюСтроку()
    Для Каждого СтрокаТовары Из Объект.Товары Цикл
        Если СтрокаТовары.Номенклатура = ИскомаяНоменклатура Тогда
            Элементы.Товары.ТекущаяСтрока = СтрокаТовары.ПолучитьИдентификатор();
            Прервать;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Альтернативный вариант — тот же результат через метод Активизировать(): Элементы.Товары.Активизировать(СтрокаТовары.ПолучитьИдентификатор());. После вызова курсор встанет на найденную строку, и она станет видимой — таблица автоматически прокрутится к ней.

Чтобы после активизации сразу открыть строку на редактирование, добавьте вызов Элементы.Товары.ИзменитьСтроку();. Это удобно в сценарии «нашёл — показал — дал исправить».

Порядок действий при программной активизации
  1. 1
    Найдите нужную строку в коллекции данных (Объект.Товары, таблица значений формы)
  2. 2
    Получите её идентификатор через ПолучитьИдентификатор()
  3. 3
    Присвойте идентификатор свойству Элементы.ИмяТаблицы.ТекущаяСтрока или вызовите Активизировать()
  4. 4
    При необходимости вызовите ИзменитьСтроку() для входа в режим редактирования
  5. 5
    Проверьте результат: строка подсвечена и видна на экране

Активизация строки в динамическом списке

Динамические списки (журналы документов, списки справочников) устроены иначе: их строки — это не коллекция данных формы, а результат запроса. Здесь свойству ТекущаяСтрока присваивается не идентификатор, а ссылка на объект. Например, чтобы после записи документа спозиционировать список на нём:

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

Условие успеха: объект должен присутствовать в текущей выборке списка. Если на список наложен отбор, исключающий нужную запись (например, по периоду или организации), активизация не сработает — строки просто нет в данных. Перед спозиционированием либо сбросьте отбор, либо проверяйте его настройки.

Этот же приём используется при открытии формы списка с параметром: в обработчике ПриСозданииНаСервере или через стандартный параметр открытия можно передать ссылку, и платформа сама спозиционирует список. Для форм, открываемых через ОткрытьФорму(), позиционирование часто выполняется через параметр Ключ у формы объекта или программно после открытия.

Активизация строки в таблице значений на форме

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

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

Если таблица значений находится на сервере, а активизация выполняется в клиентском контексте, следите за директивами компиляции. Перебор строк коллекции доступен и в &НаКлиенте для реквизитов формы, поэтому весь код обычно умещается в клиентскую процедуру без серверных вызовов.

Сравнение вариантов

ТекущаяСтрока = Идентификатор

Подходит для табличных частей и таблиц значений; работает в клиентском контексте, легко комбинируется с поиском строки

Активизировать(Идентификатор)

Тот же результат, явный вызов метода; удобен, когда логика оформлена как отдельное действие над элементом формы

ТекущаяСтрока = Ссылка

Только для динамических списков; требует, чтобы запись входила в текущую выборку с учётом отборов

Типичные ошибки и ограничения

Самая распространённая ошибка — попытка присвоить ТекущаяСтрока номер строки или сам объект строки вместо идентификатора. Платформа в этом случае либо выдаёт ошибку преобразования типа, либо молча не активизирует ничего. Всегда используйте ПолучитьИдентификатор().

Вторая ошибка — активизация до того, как данные загружены в форму. Если код выполняется в ПриСозданииНаСервере, а таблица заполняется позже, идентификаторы ещё не существуют. Переносите позиционирование в обработчик после заполнения данных или в ПриОткрытии на клиенте.

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

Типичные ошибки
01
Присвоение ТекущаяСтрока номера строки вместо идентификатора — активизация не срабатывает
02
Передача ссылки в табличную часть или идентификатора в динамический список — несоответствие типов
03
Активизация до заполнения данных формы — строка ещё не существует
04
Позиционирование списка с отбором, исключающим нужную запись — строка отсутствует в выборке
05
Ожидание, что Активизировать() откроет строку на редактирование — для этого нужен отдельный вызов ИзменитьСтроку()

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

После выполнения активизации убедитесь, что курсор действительно встал на нужную строку. Визуально строка подсвечена, таблица прокручена так, чтобы она была видна. Программно проверка выполняется чтением свойства Элементы.ИмяТаблицы.ТекущаяСтрока — оно должно вернуть тот же идентификатор (или ссылку), который был установлен.

Дополнительно можно сверить данные текущей строки через Элементы.ИмяТаблицы.ТекущиеДанные — это структуроподобный объект с полями активной строки. Если значения совпадают с ожидаемыми, позиционирование выполнено корректно.

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

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

Подсветка строки в таблице
Норма

Нужная строка выделена цветом и видна на экране

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

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

Значение ТекущаяСтрока
Норма

Совпадает с установленным идентификатором или ссылкой

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

Неопределено, пусто или чужое значение

Данные текущей строки
Норма

ТекущиеДанные содержат поля нужной записи

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

Поля другой записи или пустые значения

Итог

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

В режиме пользователя строка активизируется щелчком мыши или клавиатурой. Программно — через ТекущаяСтрока или Активизировать(): для табличных частей и таблиц значений передаётся идентификатор из ПолучитьИдентификатор(), для динамических списков — ссылка на объект. Проверяйте отборы списка и момент заполнения данных.

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

Чем активизация строки отличается от её выделения?

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

Почему Активизировать() не выдаёт ошибку, но строка не подсвечивается?

Чаще всего передан идентификатор несуществующей строки или строка исключена отбором динамического списка. Платформа в таких случаях не сигнализирует об ошибке. Проверьте, что строка есть в данных формы и что идентификатор получен именно от неё через ПолучитьИдентификатор().

Можно ли активизировать строку в обычных формах (не управляемых)?

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

Как активизировать строку сразу после добавления новой?

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

Работает ли активизация в веб-клиенте и мобильном клиенте?

Механизм ТекущаяСтрока и Активизировать() поддерживается во всех клиентах. Различия касаются только визуального отображения подсветки и поведения прокрутки таблицы, на программную логику это не влияет.

Как активизировать строку в форме списка, открываемой из другой формы?

Откройте форму через ОткрытьФорму() с получением возвращаемого объекта формы, затем у её элемента списка присвойте ТекущаяСтрока нужную ссылку. Либо передайте ссылку через параметры открытия и выполните позиционирование в обработчике ПриОткрытии самой формы списка.