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