Отображение иерархических динамических списков в табличном поле имеет ряд особенностей .
Так табличное поле позволяет просматривать иерархические динамические списки по группам , при этом свойство » ТекущийРодитель » табличного поля указывает текущую группу , а свойство » ИзменятьТекущегоРодителя » позволяет запретить переход между группами в табличном поле . Смена текущего родителя происходит при помощи команд перехода по уровням , при отработке связи с другим табличным полем , отображающим дерево групп , а также при программном изменении свойства » ТекущийРодитель «. Следует заметить , что поле » Родитель » отображаемого динамического списка исключается табличным полем из списка доступных полей для отбора . Это связано с тем , что переход по иерархии является частью функциональности табличного поля и понятие » Родитель » для табличного поля является выделенным понятием и не обрабатывается в отборах как другие поля . Так как табличное поле при отображении динамических списков использует механизм динамической выборки , то при формировании выборки оно включает в нее дополнительное условие , указывающее родителя для получаемого блока данных . Тем самым , получаются только строки , имеющие указанного родителя .
Следует отметить , что не существует возможности установки отбора по родителю программно или интерактивно ( посредством команды » Установить отбор и сортировку списка «).
Может возникнуть ситуация , когда в табличном поле необходимо отобразить строки , подчиненные определенному родителю , включая подчиненные строки . Так как используя свойство табличного поля » ТекущийРодитель » можно получить только строки , подчиненные указанному родителю , то не существует стандартной возможности сделать такой отбор . Для решения данной проблемы рекомендуется использовать следующую методику .
Например , пусть существует форма списка справочника » Номенклатура » с двумя табличными полями . Пусть одно из табличных полей отображает указанный список справочника как дерево , а другое как список .
Требуется в табличном поле , отображающем справочник как список отображать все строки , подчиненные текущей строке табличного поля , отображающего древовидный справочник . Для этого при обработке события » ПриАктивизацииСтроки » табличного поля , отображающего древовидный справочник необходимо установить отбор списку справочника , отображаемому как список . Например :
Следует заметить , что табличное поле в открываемой форме будет отображать не иерархический список , а также что данный фрагмент программы не является производительным .
Более подробно ознакомиться с отличиями работы табличного поля при отображении динамических списков можно в разделе Особенности работы табличного поля с динамическими списками.
Особенности работы полосы прокрутки
Табличное поле может отображать два типа данных : динамические списки и статические данные . Особенностью динамических списков является использование при обращении к базе данных механизма динамической выборки , при которой данные считываются не полностью , а блоками . Особенностью статических данных является хранение в памяти всех данных . Примерами динамических списков являются списки справочников , документов , регистров , а примерами статических данных — таблица значений , дерево значений , табличная часть , наборы записей .
При отображении динамических списков табличное поле особым образом отображает полосу прокрутки — в ней бегунок отображается только в трех положениях : вверху , в центре и внизу , и имеет постоянный размер . Такое поведение связано с тем , что табличное поле для уменьшения объема выбираемых данных загружает из базы данных только часть списка , причем, считывание может происходить начиная с любой записи, в том числе и из середины списка . Тем самым табличное поле содержит только видимую часть списка и , следовательно , не имеет информации об положении строки в списке и количестве строк в списке . Поэтому бегунок не отражает положение видимой части списка и используется только для перемещения в начало и конец списка , а также к текущей строке списка . Также положение бегунка указывает на достижение начала или конца списка , это происходит если пользователь попытался выйти за границы списка .
Множественное выделение строк
При выделении группы строк в табличном поле ( например , при нажатии Shift+Home или Shift+End) выделяются только первая и последняя строка списка . Такое поведение характерно для табличных полей , отображающих динамические списки . Как уже было сказано выше , табличное поле при работе с динамическими списками оперирует только видимой частью списка и не имеет информации о положении строки в списке . Следовательно , при выборе группы записей , невозможно однозначно определить, какая из выбранных строк является первой , а какая последней . Следовательно , невозможно определить направление выделения строк , что не позволяет быстро определить диапазон строк .
Поэтому при множественном выделении в динамических списках выполняется выделение только отдельных строк и выделение соседних строк при движении вверх и вниз, но не выполняется выделение диапазонов строк .
Особенности использования свойств ТекущиеДанные и ТекущаяСтрока
Табличное поле предоставляет свойства ТекущиеДанные и ТекущаяСтрока . Отличие между этими свойствами состоит в том , что свойство ТекущиеДанные содержит значения считанных данных текущей строки табличного поля , а свойство ТекущаяСтрока содержит значение , идентифицирующее строку . Следует отметить , что свойство ТекущиеДанные содержит коллекцию значений текущей строки , соответствующую коллекции колонок отображаемого динамического списка , при этом если нужного поля нет в текущих данных , то его можно добавить в коллекцию полей списка используя метод » Добавить » коллекции колонок списка .
Свойство ТекущиеДанные предназначено для получения значений колонок текущей строки , а свойство ТекущаяСтрока для получения и установки текущей строки табличного поля.
Следует заметить, что для объектных данных (Справочник, Документ и т.д.) в качестве значения свойства ТекущаяСтрока используется ссылка на объект базы данных. Соответственно при обращении к свойствам этого значения будет выполняться считывание объекта базы данных.
Типичной ошибкой является обращение к данным строки с использованием свойства ТекущаяСтрока . В этом случае будет выполняться считывание данных объекта из базы данных, что может существенно снизить производительность работы табличного поля . Например , приведенный ниже фрагмент текста программы является неэффективным :
Рекомендуется для обращения к данным объекта использовать свойство ТекущиеДанные.
Правильный фрагмент приведен ниже :
Особенности работы в режиме отображения дерева
В режиме отображения дерева табличное поле , отображающее динамические списки , особым образом отображает кнопки раскрытия узлов . Используется два цвета отображения кнопки : черный и серый . Если при попытке открытия узла дерева было обнаружено, что дочерних узлов нет , то кнопка рисуется серым цветом , иначе — черным . Такое поведение обусловлено тем , что определение наличия подчиненных узлов требует дополнительных ресурсов и при считывании данных не происходит . Поэтому для удобства пользователя узлы , у которых не было обнаружено дочерних узлов , запоминаются табличным полем . Также стоит отметить , что цвет кнопки никак не влияет на последующее раскрытие узлов дерева .
|