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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Понимание природы динамического списка

Важно помнить, что Динамический список в 1С — это не таблица значений, хранимая в оперативной памяти. Это инструмент для отображения данных из базы, который загружает информацию порциями. Поэтому классические методы работы с коллекциями, такие как НайтиСтроки, к нему неприменимы. Попытки преобразовать список через РеквизитФормыВЗначение также не приведут к успеху.

Ключом к управлению курсором является свойство ТекущаяСтрока элемента формы. Для динамического списка оно ожидает не индекс строки, а ссылку на объект (или ключ записи), который находится в текущей выборке данных.

Способ 1: Прямая установка через свойство ТекущаяСтрока

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

Рассмотрим пример реализации:


&НаКлиенте
Процедура ТаблицаДанныхПриАктивизацииСтроки(Элемент)
    // Получаем ссылку из текущей строки нашей таблицы
    СсылкаНаОбъект = Элементы.ТаблицаДанных.ТекущиеДанные.Ссылка;
    
    // Устанавливаем эту ссылку в динамический список
    // Предположим, список называется "СписокНоменклатуры"
    Элементы.СписокНоменклатуры.ТекущаяСтрока = СсылкаНаОбъект;
КонецПроцедуры

Этот метод работает мгновенно при условии, что объект с такой ссылкой присутствует в текущем наборе данных списка (нет наложенных отборов, которые скрывают эту запись).

Способ 2: Передача параметра при открытии формы

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

Рассмотрим пошагово, как это сделать:

  1. При вызове метода ОткрытьФорму передаем структуру с ключом ТекущаяСтрока.
  2. В качестве значения передаем нужную нам ссылку на справочник или документ.

&НаКлиенте
Процедура ОткрытьСписокСПозиционированием(СсылкаНаЭлемент)
    ПараметрыФормы = Новый Структура("ТекущаяСтрока", СсылкаНаЭлемент);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры

В этом случае разработчику не нужно писать дополнительный код в обработчике ПриСозданииНаСервере, так как платформа сама поймет, что нужно установить курсор на переданную ссылку при инициализации.

Что делать, если строка не выделяется?

Если вы присваиваете значение, но курсор остается на месте, проанализируйте следующие моменты:

Используя свойство ТекущаяСтрока, вы делаете код чистым, производительным и соответствующим стандартам разработки 1С. Избегайте попыток поиска строк внутри списка — работайте напрямую с объектными ссылками.

← На главную