- Работа с деревом значений в 1С
- Дерево значений
- Дерево значений на форме
- Заполнение дерева значений
- Обход дерева значений
- Как свернуть и развернуть дерево значений
- Как удалить строку и очистить дерево значений
- Запрос и дерево значений
- Дерево значений в таблицу значений и обратно
- Отбор в дереве значений
- Использование сочетаний клавиш, список зарезервированных сочетаний
Работа с деревом значений в 1С
В последнее время аномально часто мне в работе попадалось дерево значений, поэтому решил написать на эту тему статью.
Попробую рассмотреть способы решения основных задач связанных с деревом значений, при этом постараюсь писать «без воды».
Дерево значений
Из названия объекта понятно, что дерево значений служит для хранения/отображения какой-либо иерархической информации. Каждая строка дерева значений может иметь какое-то количество подчиненных строк, при этом такие операции как поиск, сортировка, подсчет итогов можно проводит с учетом уровня иерархии и подчиненных строк.
Кроме этого, каждая строка дерева значений имеет свойства «Родитель» и «Строки».
Дерево значений на форме
Визуальное представление дерева значений обеспечивает элемент «Табличное поле».
Заполнение дерева значений
При заполнении дерева значений нужно помнить, что сам объект «ДеревоЗначений» и все его строки имеют свойство «Строки»и добавление новых строк на любом уровне дерева осуществляется через это свойство.
Сам же объект «ДеревоЗначений» имеет еще и свойство «Колонки», которое ничем не отличается от аналогичного свойства у таблицы значений.
Небольшой пример программного заполнения таблицы значений для управляемых форм:
Обход дерева значений
Обход всех строк дерева значений делается при помощи рекурсии, вот так будет выглядеть код для обхода дерева созданного в примере выше:
Как свернуть и развернуть дерево значений
Сворачивается и разворачивается дерево значений очень просто.
Привел три примера: для сворачивания текущей строки, для сворачивания строк верхнего уровня, для сворачивания вообще всех строк (рекурсия).
Два примера: для разворачивания текущей строки и для разворачивания всех строк. У метода «Развернуть» есть дополнительный параметр, который позволяет указать нужно ли разворачивать подчиненные строки.
Как удалить строку и очистить дерево значений
Тут опять же все просто, нужно помнить, что при удалении/очистке строки, все подчиненные строки удаляются.
Точно также можно очистить от подчиненных элементов другую другую строку.
Удалить строку дерева значений не сложнее — нужно только знать ее индекс:
Запрос и дерево значений
Результат выполнения запроса очень легко преобразовать в дерево значений, для этого нужно воспользоваться методом «Выгрузить» и указать параметр «ТипОбхода» отличным от того, что стоит по умолчанию, т.е. «ПоГруппировкам» или «ПоГруппировкамСИерархией».
Если на форме имеется реквизит «ДеревоЗначений» и связанный с ним визуальный элемент, то можно сделать примерно так:
Причем полного совпадения колонок и типов не требуется — лишние колонки будут просто отброшены, а колонки с различными типами будут заполнены пустыми значениями.
Дерево значений в таблицу значений и обратно
Преобразовать дерево значений в таблицу значений и наоборот достаточно просто, ведь дерево значений это та же таблица значений, но с дополнительной колонкой — «Родитель». У меня есть отдельная статья о том как преобразовать дерево значений в таблицу значений и обратно.
Отбор в дереве значений
Стандартного отбора в дереве значений не предусмотрено. Так получилось потому, что непонятно как разрешать ситуацию, когда родительский элемент не удовлетворяет условию отбора, а подчиненные ему элементы удовлетворяют.
Таким образом, если Вам нужно реализовать отбор в дереве значений, то начать нужно с решения именно этой проблемы. А уже после этого можно придумать несколько способов реализовать задуманное.
Первый способ — накладывать отбор до вывода дерева значений (в запросе например). Это не классический отбор, но в тех случаях когда этот способ применим, то следует применять именно его, так как это почти всегда быстрее и правильнее чем что-либо другое.
Второй способ — перебор всех строк дерева значений. Описывать здесь особенно нечего, нужно просто взять обход дерева значений, проверять каждую строку на соответствие условию отбора и удалять лишние строки.
Еще один способ заключается в том, чтобы преобразовать дерево значений в таблицу значений, сделать отбор в таблице значений, проконтролировать результат (почистить «хвосты» — строки, родитель которых не удовлетворил условию отбора) и выполнить обратное преобразование в дерево значений.
На этом все, рассказал все, что знал, надеюсь мне удалось сэкономить Вам немного времени.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
Использование сочетаний клавиш, список зарезервированных сочетаний
Область применения: управляемое приложение.
Для часто выполняемых или общеупотребимых действий рекомендуется назначать сочетания клавиш. Ниже приведены списки зарезервированных сочетаний в прикладных решениях и в платформе 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 | Вызвать главное меню | |
Источник