Имя: Пароль:
1C
1С v8
Выделить программно строку динамического списка
0 Mr_SlavaN
 
23.01.16
17:22
Доброго всем дня!

Есть периодический независимый регистр сведений. В качестве измерений ссылка на документ и куча булевых реквизитов.
Есть обработка на которой имеется 3 дин.списка на разных закладках с настроенными отборами для отображения данных из регистра.
Задача. По полученной ссылке найти в каком из списков присутствует документ, переключиться на этот список и выделить строку с документом.
Строка с документом в любом списке только 1. Списки обрабатываются по порядку кода. Если нашли - больше не ищем.

Пытался сделать следующее. Получаю для 1 списка схему и настройки КД, через расширение табличной части формы. Получаю копию набора данных списка т.к. кроме преднастроенных отборов у пользователя ещё и свои настроены. Дальше набор выгружаю в ТЗ и ищу строку со ссылкой. Если нашёл, то создаю ключ записи регистра со структурой отбора по данным строки и элементу формы список1 устанавливаю текущую строку.
Но... Видимо полученный из регистра ключ записи не соответствует таковому в списке: ни позиционирования, ни выделения строки не происходит.

Код поиска

&НаСервере
Функция ДанныеЕстьВСписке(дСписокЭлементФормы, ДокСсылка, Позиция)
    Результат = Ложь;
    // получаем копию дин.списка с пользовательскими отборами и настройками
    времСКД = Элементы[дСписокЭлементФормы].ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    времНКД = Элементы[дСписокЭлементФормы].ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    // формируем и инициализируем макет для вывода в тз
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
    времМКД = КомпоновщикМакета.Выполнить(времСКД, времНКД,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцКомпоновки = Новый ПроцессорКомпоновкиДанных();
    ПроцКомпоновки.Инициализировать(времМКД);
    // выводим редультат в тз
    ПроцВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    времТЗ = ПроцВывода.Вывести(ПроцКомпоновки);
    стр = времТЗ.Найти(ДокСсылка, "Документ");
    Если стр <> Неопределено Тогда
        Результат = Истина;
        Если дСписокЭлементФормы <> "ДокументыДляВыдачи" Тогда
            Позиция = ПолучитьКлючЗаписи(стр);
        Иначе
            Позиция = стр.Документ;
        КонецЕсли;
    КонецЕсли;
    Возврат Результат;
КонецФункции

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

дСписокЭлементФормы - имя элемента динамического списка на форме

Заранее благодарен за любые подсказки!
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший