1с это группа в запросе
На самом деле, вопрос "со звездочкой".
Мне нужны не все группы, а подходящие по определенному условию.
Но это можно решить отбором на результат запроса из (0)
Можно наклепать там двадцать левых соединений, но потом хоп и попадутся элементы на 22 уровне и пипец
(6) Программное формирование там только для оптимизации результирующего запроса под конкретный максимальный уровень вложенности. Фишка этого метода - в возможности покрытия очень большого уровня вложенности за небольшое количество шагов (нелинейная зависимость). То есть ты можешь просто написать готовый запрос с небольшим количеством этапов (не программно), который будет покрывать любую разумную глубину вложенности (сотню, скажем).
>>Как мне запросом получить элементы справочника и все содержащие его группы?
. содержащие его - в смысле?
Иерархию можно записать в виде таблицы
ВЫБРАТЬ
Ссылка(представление),
Родитель(представление)
ЭтоГруппа
ИЗ
Справочник.Номенклатура
Тогда попробую задачу сначала в упрощенном виде описать:
Мне нужно получить данные из регистра Продажи по номенклатуре. И эти данные должны быть свернуты по группам. Но не по всем группам в иерархии, а только по тем, которые имеют некоторый признак (для простоты считаем, что это булевый реквизит у группы НужнаяГруппа). "Нужные группы" не обязательно верхние. Кроме того, "нужные группы" могут быть вложены, но не подряд, а, например, через уровень.
Соответственно, образуется такая "псевдоиерархия".
Можно, конечно, запихнуть всё это в СКД, и постобработкой выводить только нужные строки, но это как-то неаккуратненько.
(16) Напрашивается настройка формирования СКД по собственной иерархии, которую получать отдельным запросом. Но вычисление этой иерархии в запросе с "пропуском" уровней - это ИМХО будет уже удаление гландов ректально. Я бы попробовал подсунуть требуемую иерархию групп в СКД в качестве объекта ТЗ.
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями. Пример:
Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.
7 подзапросов и количество уровней 128 будет.
Есть такие маньяки, располагающие номенклатуру в сотом уровне вложенности?
А если просто запрос элементов,а в итогах иерархия-он же сам ее построит,останется только выбрать и положить в таблицу.
а по сути,выбираем в таблицу все элементы и группы и их непосредственные родители.
делаем индекс по элементам.
добавляем колонку номер строки с группой.
далее,из выборки необходимых элементов берем элемент и ищем его в созданной таблице,если номер строки группы задан,то переходим на нее и пишем группу,если нет,то или группа пустая и мы все нашли,или ищем в таблице группу и проставляем ей номер,чтобы в след.раз не искать,и так далее .
(25) лучше б уж через доп.свойство/реквизит, в аналитических отчетах на иерархию опираться - в любом случае костыль будет
Для получения подчиненных элементов иерархического справочника в языке запросов предусмотрена конструкция В ИЕРАРХИИ :
В данном примере будут получены все записи справочника Номенклатура , находящиеся в группе &Группа , включая ее саму, ее подчиненные группы и элементы, принадлежащие подчиненным группам.
Если же нас интересуют только элементы и группы, находящиеся непосредственно в заданной группе, то такие элементы мы можем получить, установив условие на поле Родитель :
Такой запрос выберет группы и элементы, находящиеся в подчинении группы со ссылкой &Группа .
Проверка наличия подчиненных элементов у элемента справочника
Для проверки наличия подчиненных записей элемента справочника можно пользоваться запросом, аналогичным представленному:
В данном примере ссылка элемента, для которого необходимо проверить наличие дочерних элементов, записывается в параметр запроса &Родитель . После выполнения такого запроса необходимо проверить результат на пустоту. Если результат не пустой, то подчиненные записи есть. Иначе — нет.
Получение всех родителей элемента
В языке запросов не предусмотрено специальных средств для получения всех родителей элемента. Для выполнения задачи можно воспользоваться иерархическими итогами, однако получение иерархических итогов оптимизировано для построения итогов большого количества записей, и не вполне эффективно для получения родителей одного элемента. Для более эффективного получения всех родительских записей элемента, рекомендуется перебирать в цикле его родителей небольшими порциями.
Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.
Вывод иерархического справочника в отчет
Для вывода иерархического справочника в отчет с сохранением иерархии необходимо пользоваться запросом аналогичным следующему:
Данный запрос выбирает все записи из справочника и производит упорядочивание по иерархии. Результат будет упорядочен по наименованию, с учетом иерархии.
Для того, чтобы группы справочника размещались выше элементов необходимо в данном запросе заменить предложение УПОРЯДОЧИТЬ ПО на следующее:
Результат по-прежнему будет упорядочен по иерархии, однако группы будут располагаться выше элементов.
Возможна также замена предложения УПОРЯДОЧИТЬ ПО на предложение АВТОУПОРЯДОЧИВАНИЕ . В этом случае результат будет упорядочен в соответствии с настройками справочника, т.е. если в справочнике указано, что группы должны располагаться выше элементов, то они будут расположены выше.
Получить иерархическую структуру справочника также возможно и при помощи итогов:
Получение итогов по иерархии
Для получения итогов по иерархии в запросе необходимо в предложении ИТОГИ ПО указать ключевое слово ИЕРАРХИЯ после указания поля, по которому будет рассчитываться итоги. Пример отчета «Обороты номенклатуры» с получением итогов по иерархии:
В результате данного запроса будут рассчитаны итоги не только для каждой номенклатуры, но и для групп, к которым принадлежит та или иная номенклатура.
В случае, когда не нужны итоги по элементам, а нужны итоги только по группам, необходимо использовать в итогах конструкцию ТОЛЬКО ИЕРАРХИЯ :
В результате данного запроса будут итоговые записи только для групп номенклатуры.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
6. При группировке требуется, чтобы значения в столбце Цена просуммировались. Для этого подойдёт агрегатная функция
7. При группировке требуется найти максимальное значение в столбце Цена. Для этого подойдёт агрегатная функция
8. При группировке требуется найти количество различных значений в столбце Цена. Для этого подойдёт агрегатная функция
Домашнее задание
а) Напишите запрос, который группирует цвета, встречающиеся среди еды:
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
б) Напишите запрос, который находит максимальную калорийность еды для каждого цвета:
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
в) Напишите запрос, который группирует еду по вкусу и цвету:
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
Если всё ещё не совсем понятно, как это группировать сразу по двум полям, то давайте разберём такой пример:
Пусть у нас есть следующая таблица:
И мы хотим сгруппировать её по полю А. Это значит, что мы возьмём все строчки с одинаковым полем А и "слепёшим" (свернём, сгруппируем) в одну.
Поэтому на выходе будет:
А теперь пусть есть таблица:
А Б
1 3
1 3
1 5
2 4
2 4
2 6
И мы группируем сразу по А и Б. Это значит, что мы возьмём все строчки с одинаковыми А и Б и "слепёшим" (свернём, сгруппируем) в одну.
Поэтому на выходе будет:
А Б
1 3
1 5
2 4
2 6
А теперь замените А на Вкус, а Б на Цвет.
г) Напишите запрос, который выведет количество цветов в таблице Справочник.Цвета:
Эталонное решение. Сначала пишем код сами, проверяем на компьютере (как и все примеры программ из уроков), только потом сверяемся
Войдите на сайт как ученик
Для учеников
Уровень сложности уроков идёт снизу вверх. Поэтому старайтесь заниматься последовательно, ничего не пропуская и не откладывая на потом.
Обязательно выполняйте все тесты и домашние задания, старайтесь улучшить свои результаты. Сверяйтесь с эталонными решениями только после самостоятельного выполнения задач.
На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .
В данном примере будут получены все записи справочника Номенклатура, находящиеся в группе &Группа, включая ее саму, ее подчиненные группы и элементы, принадлежащие подчиненным группам.
Если же нас интересуют только элементы и группы, находящиеся непосредственно в заданной группе, то такие элементы мы можем получить установив условие на поле Родитель:
Код 1C v 8.х
Такой запрос выберет группы и элементы, находящиеся в подчинении группы со ссылкой &Группа.
Похожие FAQ
Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Веб браузер в 1С используя поле HTML документа 3
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Вывод в поле Наименование справочника Штатное список значений из справочника Подразделения? 0
Есть два справочника Штатное и Подразделения. В справочнике Штатное есть автоматически генерируемое поле Наименование. Как программно сделать так чтобы в поле Наименование справочника Штатное выводились списком значений из поля Наименование справочн Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументоОборот.Этап, | ДокументоОборот.Отдел, | Докуме Дерево значений в таблицу значений или в табличную часть и обратно 9
Для одной организации надо было реализовать документы, где вместо табличной части надо использовать дерево и все это на управляемых формах. Но дерево нельзя сохранить в базе в текущем виде. Пришлось использовать табличную часть документа для хранени Посмотреть все результаты поиска похожих
Еще в этой же категории
Как очистить справочник удалив все не используемые элементы? 0
Очень часто менеджеры дублируют информацию в справочниках и время от времени их приходится чистить. Но как удалить только те элементы справочника, которые не используются в документах? Следующий пример кода поможет это сделать(в примере обрабатыва Вывод в поле Наименование справочника Штатное список значений из справочника Подразделения? 0
Есть два справочника Штатное и Подразделения. В справочнике Штатное есть автоматически генерируемое поле Наименование. Как программно сделать так чтобы в поле Наименование справочника Штатное выводились списком значений из поля Наименование справочн Посмотреть все в категории Справочники
Команда ИТОГИ ПО предназначена для получения итогов по выбранным полям, затем позволяет производить иерархическую выборку результата запроса, а также выгрузку его сразу в ДеревоЗначений.
Обычный же результат выгружается как таблица значений (помимо линейной выборки).
Синтаксис блока ИТОГИ
Пример:
ИТОГИ
МАКСИМУМ(СуммаОборот)
ПО
ОБЩИЕ,
Ссылка ИЕРАРХИЯ
Конструктор запроса
Управление итогами производится на одноименной вкладке «Итоги»
- Доступно выбор группировочного поля
- Типа итогов (Элементы, Элементы и иерархия, Только иерархия)
- Указания наличия/отсутствия общего итога по всей выборке
- Выбор итоговых полей и выражений аналогичных по синтаксису группировке
Иерархия выборки
Выборка запроса по группировкам была рассмотрена в этой статье.
Приведем фрагмент кода:
Тонкости итогов
Если вызвать команду выгрузить с обходом по группировкам, она вернет ДеревоЗначений:
Есть интересный механизм получения аккуратного и компактного дерева через использования ВЫБОР в разделе ИТОГИ
Имя поля в итоге должно совпадать с одним из полей выборки иначе будет ошибка «Невозможно определить поле для записи результата»
Поля в итогах также должны быть в выборке, в противном случае выйдет ошибка: «Поле, по которому рассчитываются итоги, должно присутствовать в списке выборки»
ВЫБРАТЬ
4 КАК Четыре,
3 КАК Три,
2 КАК Два,
1 КАК Один
ИТОГИ
ВЫБОР
КОГДА Два ЕСТЬ NULL
ТОГДА Один
КОГДА Три ЕСТЬ NULL
ТОГДА Два
ИНАЧЕ Три
КОНЕЦ КАК Четыре
ПО
Один,
Два,
Три
На Выходе будет вот такая дерево:
- Осталось удалить лишние колонки и можно сразу выводить на форму
Легче сочинить 10 правильных сонетов, чем хорошее рекламное объявление.
— Олдос Хаксли
Читайте также: