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