Связанные списки
При создании прикладных решений часто возникает необходимость разместить на одной форме несколько списков, информация в которых должна быть логически связана между собой.
Одним из распространенных примеров является необходимость отобразить в форме списка документов движения, которые имеются в каком-либо регистре. В этом случае требуется в одном списке отобразить перечень документов, а в другом – движения того документа, который выбран в первом списке.
Рассмотрим вариант создания такой связи между списками на примере списка документа "ПриходнаяНакладная", в котором будут отображаться движения документа по регистру "ОстаткиМатериалов". Откроем конфигуратор и создадим основную форму списка документа "ПриходнаяНакладная". Уменьшим высоту табличного поля списка документа и на освободившемся пространстве расположим табличное поле с именем "ТабличноеПоле" и типом РегистрНакопленияСписок.ОстаткиМатериалов:
Добавим на форму табличное поле...
[512]
Таким образом мы определили, какие данные будут содержаться в нижнем списке, осталось только установить между двумя списками связь таким образом, чтобы при изменении выбранного элемента в верхнем списке, содержимое нижнего списка менялось соответствующим образом.
Для этого откроем палитру свойств добавленного нами табличного поля и воспользуемся свойством "Связь по регистратору". Связь по регистратору мы будем устанавливать с обработчиком события "При активизации строки" верхнего поля "ДокументСписок":
Установим связь по регистратору...
[513]
Теперь запустим 1С:Предприятие в режиме отладки и проверим работу связанных списков:
Обратите внимание, что при перемещении в верхнем списке, данные нижнего списка меняются соответствующим образом:
Аналогичную связь можно установить исключительно программными средствами, не используя связь по регистратору. Для этого нужно в обработчике события "При активизации строки" верхнего списка устанавливать отбор нижнего списка по регистратору. [514]
Чтобы выполнить этот пример, уберем для нижнего табличного поля связь по регистратору, а для верхнего создадим обработчик события "При активизации строки":
ЭлементыФормы.ТабличноеПоле.Значение.Отбор.Регистратор.Установить(Элемент.ТекущаяСтрока, Истина);
КонецПроцедуры [515]