- Как развернуть (свернуть) строки дерева значений?
- Дерево значений на управляемых формах
- Дерево значений на обычных формах
- Как в управляемой форме развернуть группу справочника при активизации строки
- Решение проблемы:
- Код события при «АктивизацииСтроки»
- Код события «Выбор»
- Инструкция: Настраиваем дерево групп в 1С за 10 шагов
- Как раскрыть дерево на форме на нужной позиции?
- Как программно развернуть динамический список, отображаемый в виде дерева?
Как развернуть (свернуть) строки дерева значений?
Иерархические данные, размещаемые в табличном поле на обычных формах или в таблице формы на управляемых формах, могут иметь множество строк и уровней вложенности. Порой бывает очень неудобно сворачивать и разворачивать строки дерева значений вручную. К счастью, встроенный язык располагает методами манипулирования такими объектами
По умолчанию, при помещении на форму табличного поля или таблицы формы, связанных с деревом значений, оно показывается в свернутом виде. Если нужно, чтобы при открытии формы дерево значений показывалось в раскрытом виде, проще всего воспользоваться свойством НачальноеОтображениеДерева таблицы (табличного поля). Оно может принимать одно из следующих значений:
НеРаскрывать (NoExpand) | отображать строки дерева в свернутом виде (по умолчанию) |
РаскрыватьВерхнийУровень (ExpandTopLevel) | отображать развернутыми строки дерева значений первого уровня |
РаскрыватьВсеУровни (ExpandAllLevels) | отображать развернутыми все строки дерева значений |
Внимание! Программная установка свойства НачальноеОтображениеДерева на клиенте в режиме управляемого приложения неизбежно ведет к вызову сервера
Теперь рассмотрим варианты программного сворачивания\разворачивания строк дерева значений. Реализация этих методов может отличаться для обычных и управляемых форм.
Дерево значений на управляемых формах
Пример для сворачивания всех строк дерева значений:
//получаем подчиненные элементы ДанныеФормыДерево СтрокиДерева = ДеревоДокументов.ПолучитьЭлементы(); Для каждого СтрокаДерева Из СтрокиДерева Цикл //получаем идентификатор строки в таблице формы СтрокаДереваИД = СтрокаДерева.ПолучитьИдентификатор(); //проверяем состояние строки Если Элементы.ДеревоДокументов.Развернут(СтрокаДереваИД) = Истина Тогда //сворачиваем строку дерева Элементы.ДеревоДокументов.Свернуть(СтрокаДереваИД); КонецЕсли; КонецЦикла;
Пример для разворачивания всех строк дерева значений верхнего уровня:
//получаем подчиненные элементы ДанныеФормыДерево СтрокиДерева = ДеревоДокументов.ПолучитьЭлементы(); Для каждого СтрокаДерева Из СтрокиДерева Цикл //получаем идентификатор строки в таблице формы СтрокаДереваИД = СтрокаДерева.ПолучитьИдентификатор(); //проверяем состояние строки Если Элементы.ДеревоДокументов.Развернут(СтрокаДереваИД) = Ложь Тогда //разворачиваем строку дерева Элементы.ДеревоДокументов.Развернуть(СтрокаДереваИД); КонецЕсли; КонецЦикла;
Если нужно сворачивать и разворачивать вложенные строки, потребуется доработать данный код, добавив рекурсию
Дерево значений на обычных формах
С обычными формами дела обстоят проще: обращение к серверу для обычных форм не так критично, как для управляемых, поэтому раскрыть все строки дерева можно так:
ЭлементыФормы.ДеревоДокументов.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
Но в большинстве случаев лучше использовать следующий код, который гарантированно работает
//свернуть строки верхнего уровня Для каждого ПодчиненнаяСтрока Из ДеревоДокументов.Строки Цикл Если ЭлементыФормы.ДеревоДокументов.Развернут(ПодчиненнаяСтрока) Тогда ЭлементыФормы.ДеревоДокументов.Свернуть(ПодчиненнаяСтрока); КонецЕсли; КонецЦикла; //развернуть строки верхнего уровня Для каждого ПодчиненнаяСтрока Из ДеревоДокументов.Строки Цикл Если ЭлементыФормы.ДеревоДокументов.Развернут(ПодчиненнаяСтрока) = Ложь Тогда ЭлементыФормы.ДеревоДокументов.Развернуть(ПодчиненнаяСтрока); КонецЕсли; КонецЦикла;
Источник
Как в управляемой форме развернуть группу справочника при активизации строки
При разработке форм подборов и организации отборов для удобства работы может возникнуть задача по автоматическому раскрытию текущей группы.
- упростить работу пользователю, выполнять 1 клик вместо 2;
- явно дать понять ему, что есть вложенные группы.
В такой простой задаче может возникнуть стопор из-за особенностей динамического списка:
- в метод Развернуть() таблицы формы следует передать идентификатор текущей строки (численное значение, согласно описанию в синтаксис-помощнике);
- в динамическом списке, когда источник и основная таблица есть справочник, метод ТекущаяСтрока() возвращает ссылку этого справочника, к которому не применим метод ПолучитьИдентификатор().
Решение проблемы:
Первое что необходимо сделать: проверить или установить свойство «Отображение» у таблице в значение «Дерево»
Оказывается в метод Развернуть() в данном случае можно передавать эту ссылку, т.к. источник справочник, в котором нет дублей, следовательно система однозначно идентифицирует данную строку и сможет ее развернуть или свернуть. Аналогично работает и метод Развернут().
Код события при «АктивизацииСтроки»
тд = Элементы . Дерево . ТекущиеДанные ;
Если Не тд = Неопределено Тогда
Если Элементы . Дерево . Развернут ( Элементы . Дерево . ТекущаяСтрока ) = Ложь Тогда
Элементы . Дерево . Развернуть ( Элементы . Дерево . ТекущаяСтрока , Ложь ) ;
КонецЕсли ;
КонецЕсли ;
Для удобства пользователя добавим, авто раскрытие/сокрытие при выборе(двойном клике, по уже активной строке):
Код события «Выбор»
Процедура ДеревоВыбор ( Элемент , ВыбраннаяСтрока , Поле , СтандартнаяОбработка )
ТС = Элементы . Дерево . ТекущаяСтрока ;
Если Элементы . Дерево . Развернут ( ТС ) = Истина Тогда
Элементы . Дерево . Свернуть ( ТС ) ;
Иначе
Элементы . Дерево . Развернуть ( ТС , Ложь ) ;
КонецЕсли ;
Данная статья также применима к плану счетов, планам видов характеристик и расчетов (которые имеют иерархическую структуру).
Половина денег, которые идут на рекламу, выбрасываются впустую; но как узнать, какая именно половина?
— Уильям Гескет Левер
Источник
Инструкция: Настраиваем дерево групп в 1С за 10 шагов
Обычно в программе настраивается иерархия, удобная бухгалтерам. Для менеджеров – это лучший вариант, но реально структурировать под их запросы. Именно для этого используется пользовательская иерархия и структурирование групп. Благодаря обновлению создаётся любая вложенность
Вложенность – это количество кликов до страницы, начиная с главной. Её можно узнать, посчитав количество знаков «/» в ее URL и прибавить единицу.
На конкретном примере покажем, как происходит настройка дерева групп в 1С:
Находим пункт «Настройки обмена с интернет-магазином» – это и есть обмен с сайтом через модуль (ещё в 1С есть обмен без модуля).
2. Настраивать будем обмен изменениями. Кликаем на этой строке дважды мышкой.
3.Заходим на вкладку «Режим обмена данными» и в пункте «Выгрузка информации о номенклатуре» нажимаем «Настроить».
4.Нажимаем жёлтую кнопку “Настроить дерево групп”.
5.Для примера: СЛЕВА — как будет выглядеть каталог на сайте, СПРАВА — что есть в 1С. Товары справа можно находить как просто путешествуя по дереву, так и набирая название в строке поиска сверху.
Кнопки между панелями — добавить товары в дерево и удалить товары в дерево.
Для создания новой категории СЛЕВА выбираем нужный раздел, затем кликаем правой кнопкой мыши и нажимаем «Создать». В данном случае мы создаем новый раздел в корне.
Для удаления — выбираем «Пометить на удаление». Раздел останется, но со значком удаления и выгружаться не будет.
Для примера, я закинул плакат в «Снегозадержатели для металлочерепицы».
8. Точно так же можно закинуть сразу раздел.
Источник
Как раскрыть дерево на форме на нужной позиции?
Получаю форму выбора справочника Номенклатура. Как раскрыть дерево при открытии на нужном мне элементе/группе?
Текущая строка еще и позициниорует. Просто развернуть:
ТабличноеПоле.Развернуть (TableBox.Expand)
ТабличноеПоле (TableBox)
Развернуть (Expand)
Синтаксис:
Строка табличного поля. Тип значения строки табличного поля приведен в описаниях расширений табличного поля у соответствующих объектов.
(необязательный)
Тип: Булево.
Определяет необходимость раскрытия подчиненных узлов. Истина — раскрывать подчиненные узлы, Ложь — не раскрывать подчиненные узлы.
Значение по умолчанию: Ложь
Описание:
Разворачивает узел в указанной строке дерева.
Толстый клиент.
Примечание:
Используется в случае, если с табличным полем связано дерево значений или список справочника в виде дерева.
Отлично.
ТаблицаФормы (FormTable)
Развернуть (Expand)
Синтаксис:
Тип: Произвольный.
Идентификатор строки таблицы.
(необязательный)
Тип: Булево.
Определяет необходимость раскрытия подчиненных узлов. Истина — раскрывать подчиненные узлы, Ложь — не раскрывать подчиненные узлы.
Значение по умолчанию: Ложь
Описание:
Разворачивает узел в указанной строке дерева.
Тонкий клиент, веб-клиент, толстый клиент.
Как получить идентификатор строки, зная ссылку на элемент?
(7) спс,кэп)
как найти нужную строку в дереве?
Элементы.Список(ТаблицаФормы) имеет методы:
ДанныеСтроки (RowData)
ДобавитьСтроку (AddRow)
ЗакончитьРедактированиеСтроки (EndEditRow)
ИзменитьСтроку (ChangeRow)
Обновить (Refresh)
ПолучитьДействие (GetAction)
ПроверитьСтроку (CheckRow)
Развернут (Expanded)
Развернуть (Expand)
Свернуть (Collapse)
СкопироватьСтроку (CopyRow)
УстановитьДействие (SetAction)
(10) источник — динамический список.
ДинамическийСписок (DynamicList)
Свойства:
Группировка (Group)
ДинамическоеСчитываниеДанных (DynamicDataRead)
ОсновнаяТаблица (MainTable)
Отбор (Filter)
Параметры (Parameters)
Порядок (Order)
ПроизвольныйЗапрос (CustomQuery)
ТекстЗапроса (QueryText)
УсловноеОформление (ConditionalAppearance)
ПолучитьОбязательноеИспользование (GetRequiredUse)
УстановитьОбязательноеИспользование (SetRequiredUse)
ТаблицаФормы.ТекущиеДанные (FormTable.CurrentData)
ТаблицаФормы (FormTable)
ТекущиеДанные (CurrentData)
Использование:
Тип: ДанныеФормыСтруктура; ДанныеФормыЭлементКоллекции; ДанныеФормыЭлементДерева.
Представляет доступ к текущим данным (данным текущей строки).
Тонкий клиент, веб-клиент, толстый клиент.
ДанныеФормыЭлементДерева (FormDataTreeItem)
ДанныеФормыЭлементДерева (FormDataTreeItem)
Свойства:
ПолучитьИдентификатор (GetID)
ПолучитьРодителя (GetParent)
ПолучитьЭлементы (GetItems)
Свойство (Property)
Элемент дерева данных формы.
Тонкий клиент, веб-клиент, сервер, толстый клиент.
См. также:
ДанныеФормыЭлементДерева, метод ПолучитьРодителя
ДанныеФормыДерево, метод НайтиПоИдентификатору
ДанныеФормыКоллекцияЭлементовДерева, метод Добавить
ДанныеФормыКоллекцияЭлементовДерева, метод Вставить
ДанныеФормыКоллекцияЭлементовДерева, метод Получить
ДанныеФормыКоллекцияЭлементовДерева, метод Удалить
ДанныеФормыКоллекцияЭлементовДерева, метод Индекс
Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
Свойства:
АвтоОбновление (AutoRefresh)
ВосстанавливатьТекущуюСтроку (RestoreCurrentRow)
ВыборГруппИЭлементов (ChoiceFoldersAndItems)
ОбновлениеПриИзмененииДанных (UpdateOnDataChange)
ОтображатьКорень (ShowRoot)
Период (Period)
ПериодАвтоОбновления (AutoRefreshPeriod)
РазрешитьВыборКорня (AllowRootChoice)
РодительВерхнегоУровня (TopLevelParent)
Дополнительные свойства элемента управления ТаблицаФормы.
Расширение предоставляет возможность доступа к свойствам динамического списка.
В качестве значений для свойств ТекущаяСтрока, ТекущийРодитель и элемента коллекции, содержащейся в свойстве ВыделенныеСтроки, используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары. Также эти свойства могут содержать значения типа СтрокаГруппировкиДинамическогоСписка.
Если главная таблица не задана или является виртуальной таблицей регистра, в качестве значений будут использоваться числа, являющееся идентификаторами строки в выборке динамического списка.
Свойство ТекущиеДанные и метод ДанныеСтроки возвращают структуру, заполненную копией данных. Их изменение не отразится на данных формы.
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Источник
Как программно развернуть динамический список, отображаемый в виде дерева?
(4) Это ДС с настроенными группировками. В форме настроено Начальное отображение дерева Раскрывать все уровни. Но первый уровень должен подвергаться отбору по активизации строки другого элемента (табличная часть)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
&НаКлиенте
Процедура ПланограммыПриАктивизацииСтроки(Элемент)
Если Элемент.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Планограмма) Тогда
ОтборыСписковКлиентСервер.ИзменитьЭлементОтбораСписка(ВыкладкиМагазины,»Планограмма»,Планограмма,Истина,ВидСравненияКомпоновкиДанных.Равно);
Если Элементы.ВыкладкиМагазины.ТекущаяСтрока <> Неопределено Тогда
Элементы.ВыкладкиМагазины.Развернуть(Элементы.ВыкладкиМагазины.ТекущаяСтрока, Истина);
КонецЕсли;
(10) Почему-то действительно сразу после отбора не срабатывает. С паузой работает
//Элементы.Список.Развернуть(Элементы.Список.ТекущаяСтрока, Истина);//не работает
ПодключитьОбработчикОжидания(«_Тест», 0.1, Истина);//работает
КонецПроцедуры
(13) Это напоминает асинхронное программирование, которое сейчас в БСП 3, но оно хотя бы задокументировано и легально
(13) Более правильно
Процедура _Тест()
Элементы.Список.Развернуть(Элементы.Список.ТекущаяСтрока, Истина);
ОтключитьОбработчикОжидания(«_Тест»);
КонецПроцедуры
(16) В чем тут более правильности?
В (13) третьим параметром стоит Истина, означающий однократный запуск.
Источник