Добрый день

Подобная тема много обсуждалась, но на конкретно свой вопрос ответа не нашел.
Есть справочник с иерархией элементов и регистр, в котором хранятся значения по элементам справочника. Причем значения могут относиться как и к "листовым" элементам, так и к родительским.

Если создать стандартный отчет на СКД, то получится результат как на первой картинке.
Мне же нужно, во-первых избавиться от дублирования родительского элемента в самой группе, чтобы остался только в заголовке, а из группы исчез.
Во-вторых, чтобы напротив оставшегося родителя стояла не сумма всех подчиненных, а значение из регистра, которое соответствует именно ему.
В общем, как надо показано на второй картинке.

Как избавиться от дублирования узнал здесь: http://forum.infostart.ru/forum26/topic144015/
Но вот вопрос с ресурсом не решил.
Подскажите, пожалуйста. Также прикладываю тестовую базу, где есть эти данные и отчет.
---
CyberCerber, Получилось сделать нечто подобное - смотрите отчет во вложении.
---
CyberCerber, Получилось сделать нечто подобное - смотрите отчет во вложении.
---
horoshevall, да, на тестовой базе выглядит все круто! Правда, я вообще не понимаю, как это работает, откуда там иерархия взялась? :-)
Но на рабочей пока почему-то не взлетело. Получается, после добавления связей набора с самим собой не отбирается ни одна строка. Пока не могу понять почему, вроде бы также соединяюсь по иерарх элементу и его родителю...
---
CyberCerber, 2 момента, которые написать забыла. 1 - в условии связи в СКД написать начальное значение связи "ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)". 2 - в запросе объединяем справочник номенклатуры с регистром цен, ссылку на номенклатуры из справочника берем - иначе не работает. Если честно, для меня это тоже магией выглядит. Но работает - это факт =) Кстати, подобный отчет для УТ 11 попробовала сделать - он во вложении.
---
horoshevall, ага, хорошо, попробую
---
horoshevall, понял я, в чем проблема. Ваша методика работает, только если в итоге выводятся только элементы иерарх справочника и сам ресурс. Но мне еще другие поля нужны. И тогда работать перестает.
---
CyberCerber, Можете написать, что еще вы выводите? Сейчас в отчет добавила измерение и ресурс из регистра - выводится также по иерархии номенклатуры.
---
horoshevall, вот, переделал тестовую базу, чтобы привести пример.
Добавил в Цены номенклатуры измерение Организация. И в итоговом отчете надо вывести таблицу, где на пересечении Номенклатуры и Организации будет Цена.
---
CyberCerber, У меня вроде как работает - отчет во вложении мой.
---
horoshevall, так, стоп, доработал ваш отчет в тестовой базе, работает. Тогда, может, у меня в отборах проблема... Буду искать дальше.
---
CyberCerber, Чтобы получить результат, как на вашей картинке, помогает:
Делаем запрос:

```1c
    ВЫБРАТЬ
    Цены.Цена,
    НоменклатураСпр.Ссылка КАК Номенклатура,
    НоменклатураСпр.Родитель КАК Родитель
    ИЗ
    Справочник.Номенклатура КАК НоменклатураСпр
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    ПО (Цены.Номенклатура = НоменклатураСпр.Ссылка)
```

На закладке "Связи наборов данных" делаем связь ИсточникДанных1 с ИсточникДанных1 - Источник - "Номенклатура", приемник "Родитель". Связь обязательная. Ресурс Цена рассчитываем по "Номенклатура, Номенклатура Иерархия". В сам отчет выводите только детальные записи - без группировок по иерархии номенклатуры.
---
CyberCerber, в настройках ресурсов измени данные для вывода по группировкам и вопрос решен.
---
Xershi, а можно подробней? Я в ресурсах СКД нуб нубом
---
CyberCerber, ну посмотри видео 110 уроков Гилева по СКД.
В твоем случае либо использовать группировки разные по разным уровням или использовать выражение вычислить. Смотри новые функции СКД 8.2.14.
Если не понятно, показывай скриншоты буду тыкать)
---
Xershi, воспользовался функцией "Вычислить выражение" для ресурса Цена:

ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена","","ГруппировкаНеРесурса")

На картинке видно, что получилось. Вообще, очень даже неплохо, если в группе есть значение по родителю, он берет его. Но еще почему то взялись цифры, которые обвел. Там вообще ноль должен быть.

Можете подсказть?
---
CyberCerber, тут скорее всего нужно подумать над тем какие параметры вписать в эту функцию. Почитайте описание, скорее всего поймете как нужно прописать.
---
Xershi, да читал, но если бы из него еще было понятно, за что эти параметры отвечают...
Очень понравилось обсуждение на эту тему: https://plus.google.com/+%D0%9C%D0%B8%D1%85%D0%B0%D0%B8%D0%BB%D0%A2%D1%80%D0%B8%­D1%80%D1%83%D0%B1%D0%BB%D1%91%D0%B2/posts/Hefv61rPHPD
---
CyberCerber, Кстати, есть на ИТСе пара статеек, где рассказывается про иерархию в СКД - в группировках и в детальных записях. Надеюсь, их можно здесь приводить - они доступны и без подписки. http://its.1c.ru/db/metod8dev/content/1984/hdoc и http://its.1c.ru/db/metod8dev/content/2498/hdoc
---
CyberCerber, это на практике приходит. Там нужно указывать группировку по которой будет идти вычисление, также можно указать несколько колонок, чтобы в любой вариации СКД считал все корректно.

Текст хоть и скудный, но базу он дает.
---
```1c
    ВЫБРАТЬ
    Ном.Ссылка КАК Ссылка,
    ЕСТЬNULL(Цены.Цена, 0) КАК Цена
    ИЗ
    Справочник.Номенклатура КАК Ном
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
    ПО (Цены.Номенклатура = Ном.Ссылка)

    УПОРЯДОЧИТЬ ПО
    Ссылка ИЕРАРХИЯ УБЫВ // в консоле складывается
```

Далее через внешний набор (ТЗ), это на вскидку. Возможно есть и другие решения.)

можно еще попробовать через связи наборов данных, но нет времени возиться)
---
reotem, не совсем понял ваше решение... Этот запрос надо исполнить и положить в ТЗ? А потом в самой СКД что изменится?
---
CyberCerber,

Если использовать СКД, то данный запрос можно использовать как Внешний набор.
---
Видимо, не нужно делать цену ресурсом, а добавить ее в группировку к номенклатуре.
---
sutkin, в реальной задаче значение будет в таблице, поэтому простым реквизитом не получится
---
че то я не понял, от куда цена у родителя?
---
PhoenixAOD,

Иерархия элементов
---
Оно конечно костылина страшная, но...
Т.к. папки нам нужно убрать (СКД сама их построит), то все данные должны храниться на уровне элементов, в том числе и по родительским папкам. Значит значение ресурса мы должны растиражировать для каждого уровня группировки.
В приведенном примере мы должны получить
таблицу с полями Номенклатура, РесурсУ1,РесурсУ2
Ном11, 60, 10
Ном12, 60, 20
Ном13, 60, 30
ном21, 70, 40
ном31, 70, 50
Тогда в СКД в ресурсах на группировке можно будет прописать формулу "Выбор когда уровень()=1 тогда минимум(РесурсУ1) когда Уровень()=2 тогда Минимум(РесурсУ2) ...."
Такую таблицу получить сложно, но можно.
---
Увеличить
---
Насколько я понял, horoshevall дала и теорию, и практическую реализацию. Тем не менее, никакого вознаграждения она не получила?
---
PiotrLoginov, да, методика horoshevall отлично работает на тестовой базе, но в рабочей базе, где запрос возвращает 30 000 строк, соединение таблицы с самой собой заставляет сервер уйти в глубокое раздумье, из которого он не возвращается.
Поэтому я не смог остановится на этом варианте и продолжил поиск. В итоге сделал сам более оптимальный вариант.
Но вознаграждение horoshevall сейчас отдам, т.к. она проделал самую большую работу.
---
Ну все, я сделал. Получился сборник подходов из нескольких источников.
Прикладываю результат, кому интересно.
---
в базе ничего нет, отчет без всяких подходов
---
А у меня еще оффтоповый вопрос...
Сейчас сверху написано:

ВОПРОС ЗАКРЫТ
За решение данного вопроса уже выдалось вознаграждение в размере 4 $m
(на решение вопроса деньги выделены от автора и: Светлый ум (1.00)).

Почему 4? Я выделял 5 монеток. А еще написано, что Светлый ум выделял. Тогда вообще не 1, а 2 монетки куда-то делись.