- Работа с деревом значений в 1С
- Дерево значений
- Дерево значений на форме
- Заполнение дерева значений
- Обход дерева значений
- Как свернуть и развернуть дерево значений
- Как удалить строку и очистить дерево значений
- Запрос и дерево значений
- Дерево значений в таблицу значений и обратно
- Отбор в дереве значений
- Использование сочетаний клавиш, список зарезервированных сочетаний
Работа с деревом значений в 1С
В последнее время аномально часто мне в работе попадалось дерево значений, поэтому решил написать на эту тему статью.
Попробую рассмотреть способы решения основных задач связанных с деревом значений, при этом постараюсь писать «без воды».
Дерево значений
Из названия объекта понятно, что дерево значений служит для хранения/отображения какой-либо иерархической информации. Каждая строка дерева значений может иметь какое-то количество подчиненных строк, при этом такие операции как поиск, сортировка, подсчет итогов можно проводит с учетом уровня иерархии и подчиненных строк.
Кроме этого, каждая строка дерева значений имеет свойства «Родитель» и «Строки».
Дерево значений на форме
Визуальное представление дерева значений обеспечивает элемент «Табличное поле».
Заполнение дерева значений
При заполнении дерева значений нужно помнить, что сам объект «ДеревоЗначений» и все его строки имеют свойство «Строки»и добавление новых строк на любом уровне дерева осуществляется через это свойство.
Сам же объект «ДеревоЗначений» имеет еще и свойство «Колонки», которое ничем не отличается от аналогичного свойства у таблицы значений.
Небольшой пример программного заполнения таблицы значений для управляемых форм:
Обход дерева значений
Обход всех строк дерева значений делается при помощи рекурсии, вот так будет выглядеть код для обхода дерева созданного в примере выше:
Как свернуть и развернуть дерево значений
Сворачивается и разворачивается дерево значений очень просто.
Привел три примера: для сворачивания текущей строки, для сворачивания строк верхнего уровня, для сворачивания вообще всех строк (рекурсия).
Два примера: для разворачивания текущей строки и для разворачивания всех строк. У метода «Развернуть» есть дополнительный параметр, который позволяет указать нужно ли разворачивать подчиненные строки.
Как удалить строку и очистить дерево значений
Тут опять же все просто, нужно помнить, что при удалении/очистке строки, все подчиненные строки удаляются.
Точно также можно очистить от подчиненных элементов другую другую строку.
Удалить строку дерева значений не сложнее — нужно только знать ее индекс:
Запрос и дерево значений
Результат выполнения запроса очень легко преобразовать в дерево значений, для этого нужно воспользоваться методом «Выгрузить» и указать параметр «ТипОбхода» отличным от того, что стоит по умолчанию, т.е. «ПоГруппировкам» или «ПоГруппировкамСИерархией».
Если на форме имеется реквизит «ДеревоЗначений» и связанный с ним визуальный элемент, то можно сделать примерно так:
Причем полного совпадения колонок и типов не требуется — лишние колонки будут просто отброшены, а колонки с различными типами будут заполнены пустыми значениями.
Дерево значений в таблицу значений и обратно
Преобразовать дерево значений в таблицу значений и наоборот достаточно просто, ведь дерево значений это та же таблица значений, но с дополнительной колонкой — «Родитель». У меня есть отдельная статья о том как преобразовать дерево значений в таблицу значений и обратно.
Отбор в дереве значений
Стандартного отбора в дереве значений не предусмотрено. Так получилось потому, что непонятно как разрешать ситуацию, когда родительский элемент не удовлетворяет условию отбора, а подчиненные ему элементы удовлетворяют.
Таким образом, если Вам нужно реализовать отбор в дереве значений, то начать нужно с решения именно этой проблемы. А уже после этого можно придумать несколько способов реализовать задуманное.
Первый способ — накладывать отбор до вывода дерева значений (в запросе например). Это не классический отбор, но в тех случаях когда этот способ применим, то следует применять именно его, так как это почти всегда быстрее и правильнее чем что-либо другое.
Второй способ — перебор всех строк дерева значений. Описывать здесь особенно нечего, нужно просто взять обход дерева значений, проверять каждую строку на соответствие условию отбора и удалять лишние строки.
Еще один способ заключается в том, чтобы преобразовать дерево значений в таблицу значений, сделать отбор в таблице значений, проконтролировать результат (почистить «хвосты» — строки, родитель которых не удовлетворил условию отбора) и выполнить обратное преобразование в дерево значений.
На этом все, рассказал все, что знал, надеюсь мне удалось сэкономить Вам немного времени.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
(оценок: 36, средняя оценка: 4,64 из 5)
Источник
Использование сочетаний клавиш, список зарезервированных сочетаний
Область применения: управляемое приложение.
Для часто выполняемых или общеупотребимых действий рекомендуется назначать сочетания клавиш. Ниже приведены списки зарезервированных сочетаний в прикладных решениях и в платформе 1С:Предприятие .
Для действий, приведенных в таблицах, назначение указанных сочетаний клавиш обязательно. Использование зарезервированных сочетаний в иных целях запрещается.
Список зарезервированных сочетаний клавиш в прикладных решениях:
Сочетание клавиш | Действие | |
Ctrl + Shift + F | Полнотекстовый поиск | |
F7 | Поиск по штрихкоду | |
F8 | Выключить/включить активность проводок в журнале операций | |
F11 | Установить текущее учреждение | |
F12 | Вызов «Управление данными работника» |
Список зарезервированных сочетаний клавиш в платформе 1С:Предприятие :
Сочетание клавиш | Действие | |
Ctrl + A | Выделить все | |
Ctrl + B | Включить/выключить жирность | |
Ctrl + Alt + B | Предыдущая страница | |
Ctrl + C | Копировать в буфер обмена | |
Ctrl + E | Открыть «Свойства» | |
Ctrl + F | Поиск, найти | |
Ctrl + Alt + F | Следующая страница | |
Shift + Alt + F | Форматировать блок | |
Ctrl + G | Перейти к ячейке, перейти к строке | |
Ctrl + H | Заменить, замена | |
Ctrl + I | Включить/выключить курсив | |
Ctrl + L | Удалить текущую строку | |
Ctrl + Shift + M | Перенести элемент в другую группу | |
Ctrl + N | Создать новый документ | |
Ctrl + Shift + N | Установка имени текущей области | |
Ctrl + O | Открыть существующий документ | |
Ctrl + Alt + O | Открыть «Служебные сообщения» | |
Ctrl + P | Печать активного документа | |
Ctrl + Shift + P | Печать на текущий принтер | |
Ctrl + Shift + R | Обновить, обновить группировки | |
Shift + Alt + R | Восстановить положение окна | |
Alt + Shift + R | Восстановить положение окна | |
Ctrl + S | Сохранить активный документ | |
Ctrl + T | Найти в дереве | |
Ctrl + U | Включить/выключить подчеркивание | |
Ctrl + V | Вставить из буфера обмена | |
Ctrl + W | Выделить слово | |
Ctrl + Alt + W | Открыть «Табло» | |
Ctrl + X | Вырезать в буфер обмена | |
Ctrl + Y | Вернуть отмененное действие | |
Ctrl + Z | Отменить последнее действие | |
Ctrl + Alt + Z | Очистить служебные сообщения | |
Ctrl + Shift + Z | Закрыть «Служебные сообщения» | |
Ctrl + «-« | Переход по истории активности окон, переместиться назад | |
Ctrl + Shift + «-« | Переход по истории активности окон, переместиться вперед | |
Ctrl + Alt + Num- | Свернуть (узел дерева, группу табличного документа) и все подчиненные | |
Shift + Num- | Вычесть из буфера обмена | |
Alt + Num- | ||
Space | Изменение флажка | |
Alt + Space | Вызвать системное меню приложения или модального диалога | |
Alt + Hyphen (- ) | Вызвать системное меню окна (кроме модальных диалогов) | |
Enter | Перейти к редактированию содержимого ячейки, сохранить свойства | |
Alt + Enter | Открыть «Свойства» | |
Ctrl + Enter | Сформировать отчет | |
F1 | Открыть «Справку» | |
Shift + F1 | Открыть «Содержание справки» | |
Shift + Alt + F1 | Открыть «Индекс справки» | |
Alt + F1 | Открыть «Поиск по справке» | |
F2 | Открыть, переключение режима редактирования/ввода в ячейке | |
Ctrl + F2 | Открыть встроенный «Калькулятор» системы 1С:Предприятие | |
Shift + F2 | Закончить редактирование, предыдущая закладка | |
Alt + F2 | Установить/снять закладку | |
F3 | Найти следующий | |
Ctrl + F3 | Найти следующий выделенный | |
Shift + F3 | Найти предыдущий | |
Ctrl + Shift + F3 | Найти предыдущий выделенный | |
F4 | Кнопка выбора | |
Ctrl + F4 | Закрыть активное обычное окно | |
Shift + F4 | Очистить поле | |
Alt + F4 | Закрыть активное окно, модальный диалог или приложение | |
Ctrl + Shift + F4 | Кнопка открытия | |
F6 | Активизировать следующую секцию окна | |
Ctrl + F6 | Активизировать следующее обычное окно | |
Shift + F6 | Активизировать предыдущую секцию окна | |
Ctrl + Shift + F6 | Активизировать предыдущее обычное окно | |
F9 | Скопировать | |
Ctrl + F9 | Новая группа | |
F10 | Вызвать главное меню | |
Shift + F10 | Вызвать контекстное меню | |
Alt + F10 | Вызвать главное меню | |
Up, Down, Left, Right | Перемещение по ячейкам, прокрутить, перейти к предыдущему / следующему свойству | |
Ctrl + (Up, Down, Left, Right) | Перемещение по ячейкам или дереву, перемещение выделенного варианта, перемещение по тексту по словам | |
Shift + (Up, Down, Left, Right) | Выделение ячеек, изменение размеров элемента карты | |
Alt + Right | Переход к следующей главе справки | |
Alt + Left | Переход к предыдущей главе справки | |
Ctrl + Shift + (Up, Down, Left, Right) | Перемещение по ячейкам к следующей заполненной или пустой с выделением ячеек, выделение колонок, выделение слов, перемещение строки верх/вниз | |
Alt + Shift + (Up, Down) | Выделение строк | |
Ctrl + Alt + Shift + (Left, Right) | Выделение колонок до следующей заполненной или пустой ячейки | |
Ctrl + Alt + Shift + (Up, Down) | Выделение строк до следующей заполненной или пустой ячейки | |
Page Up | Прокрутить на страницу вверх | |
Ctrl + Page Up | Предыдущая страница, перейти к предыдущей категории | |
Shift + Page Up | Выделить предыдущую страницу текста | |
Alt + Page Up | Прокрутить на размер окна влево, прокрутить на страницу влево | |
Page Down | Прокрутить на страницу вниз | |
Ctrl + Page Down | Следующая страница, перейти к следующей категории | |
Shift + Page Down | Выделить следующую страницу текста | |
Alt + Page Down | Прокрутить на размер окна вправо, прокрутить на страницу вправо | |
Num+ | Раскрыть узел дерева, увеличить масштаб, раскрыть категорию свойств | |
Ctrl + Num+ | Развернуть (узел дерева, группу табличного документа, группировку модуля) | |
Shift + Num+ | Добавить к буферу обмена | |
Ctrl + Shift + Num+ | Развернуть (все узлы дерева, группы табличного документа, группировки модуля) | |
Ctrl + Alt + Num+ | Развернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные | |
Num- | Закрыть узел дерева, уменьшить масштаб, закрыть категорию свойств | |
Ctrl + Num- | Свернуть (узел дерева, группу табличного документа, группировку модуля) | |
Shift + Num- | Вычесть из буфера обмена | |
Alt + Num- | Вызвать системное меню окна (кроме модальных диалогов) | |
Ctrl + Shift + Num- | Свернуть (все узлы дерева, группы табличного документа, группировки модуля) | |
Ctrl + Alt + Num- | Свернуть (узел дерева, группу табличного документа, группировку модуля) и все подчиненные | |
Num* | Раскрыть все узлы дерева | |
Shift + Num* | Копировать в буфер обмена как число | |
Esc | Вернуть активность обычному окну, снять выделение, восстановить значения свойства | |
Shift + Esc | Закрыть активное окно (кроме обычных) | |
Tab | Сдвинуть блок вправо, перейти на следующий элемент карты | |
Ctrl + Tab | Активизировать следующее обычное окно | |
Shift + Tab | Перейти на предыдущий элемент карты, сдвинуть блок влево | |
Ctrl + Shift + Tab | Активизировать предыдущее обычное окно | |
BackSpace | Удалить символ слева от курсора | |
Ctrl + BackSpace | Удалить слово слева от курсора | |
Alt + BackSpace | Отменить последнее действие | |
Shift + Alt + BackSpace | Вернуть отмененное действие | |
Ins | Добавить, переключить режим вставки/замены | |
Ctrl + Ins | Копировать в буфер обмена | |
Shift + Ins | Вставить из буфера обмена | |
Del | Удалить | |
Ctrl + Del | Удалить слово справа от курсора | |
Shift + Del | Вырезать в буфер обмена, удалить строку | |
Home | Перейти в начало строки, перейти в начало палитры | |
Ctrl + Home | Перейти в начало текста | |
Shift + Home | Выделить до начала строки | |
Ctrl + Shift + Home | Выделить до начала текста | |
End | Перейти в конец строки | |
Ctrl + End | Перейти в конец текста | |
Shift + End | Выделить до конца строки | |
Ctrl + Shift + End | Выделить до конца текста | |
Alt | Вызвать главное меню | |
Alt + Hyphen ( — ) | Вызвать системное меню окна (кроме модальных диалогов) | |
Ctrl + [ | Перейти по операторным скобкам назад | |
Ctrl + Shift + [ | Перейти по операторным скобкам назад с выделением текста | |
Ctrl + ] | Перейти по операторным скобкам вперед | |
Ctrl + Shift + ] | Перейти по операторным скобкам вперед с выделением текста | |
Ctrl + Break | Вызвать главное меню | |
Alt | Вызвать главное меню |
Источник