При разработке интерфейсов на управляемых формах 1С часто возникает задача синхронизации данных. Например, пользователь выбирает позицию в таблице значений, а в динамическом списке на той же форме должен автоматически установиться курсор на соответствующий объект. Разберем, как реализовать этот механизм правильно, избегая частых ошибок.
Важно помнить, что Динамический список в 1С — это не таблица значений, хранимая в оперативной памяти. Это инструмент для отображения данных из базы, который загружает информацию порциями. Поэтому классические методы работы с коллекциями, такие как НайтиСтроки, к нему неприменимы. Попытки преобразовать список через РеквизитФормыВЗначение также не приведут к успеху.
Ключом к управлению курсором является свойство ТекущаяСтрока элемента формы. Для динамического списка оно ожидает не индекс строки, а ссылку на объект (или ключ записи), который находится в текущей выборке данных.
Если вам нужно активизировать строку по событию (например, при клике в другой таблице), достаточно обратиться к элементу формы, который отображает динамический список, и присвоить его свойству ТекущаяСтрока значение ссылки.
Рассмотрим пример реализации:
&НаКлиенте
Процедура ТаблицаДанныхПриАктивизацииСтроки(Элемент)
// Получаем ссылку из текущей строки нашей таблицы
СсылкаНаОбъект = Элементы.ТаблицаДанных.ТекущиеДанные.Ссылка;
// Устанавливаем эту ссылку в динамический список
// Предположим, список называется "СписокНоменклатуры"
Элементы.СписокНоменклатуры.ТекущаяСтрока = СсылкаНаОбъект;
КонецПроцедуры
Этот метод работает мгновенно при условии, что объект с такой ссылкой присутствует в текущем наборе данных списка (нет наложенных отборов, которые скрывают эту запись).
Если задача стоит иначе — нужно открыть форму и сразу установить курсор на конкретную строку, лучше всего воспользоваться механизмом параметров формы. Платформа 1С умеет автоматически обрабатывать параметр ТекущаяСтрока при открытии списка.
Рассмотрим пошагово, как это сделать:
ОткрытьФорму передаем структуру с ключом ТекущаяСтрока.
&НаКлиенте
Процедура ОткрытьСписокСПозиционированием(СсылкаНаЭлемент)
ПараметрыФормы = Новый Структура("ТекущаяСтрока", СсылкаНаЭлемент);
ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
В этом случае разработчику не нужно писать дополнительный код в обработчике ПриСозданииНаСервере, так как платформа сама поймет, что нужно установить курсор на переданную ссылку при инициализации.
Если вы присваиваете значение, но курсор остается на месте, проанализируйте следующие моменты:
ТекущаяСтрока на объект, который в выборку не попал, действие не даст результата.ТекущаяСтрока, описанный во втором способе.Ссылка).Используя свойство ТекущаяСтрока, вы делаете код чистым, производительным и соответствующим стандартам разработки 1С. Избегайте попыток поиска строк внутри списка — работайте напрямую с объектными ссылками.