Особая группировка по иерархии в СКД

1. CyberCerber 855 22.08.16 20:15 Сейчас в теме
Добрый день

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

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

Как избавиться от дублирования узнал здесь: http://forum.infostart.ru/forum26/topic144015/
Но вот вопрос с ресурсом не решил.
Подскажите, пожалуйста. Также прикладываю тестовую базу, где есть эти данные и отчет.
Прикрепленные файлы:
Test.dt
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. horoshevall 23.08.16 06:06 Сейчас в теме
(1) CyberCerber, Получилось сделать нечто подобное - смотрите отчет во вложении.
Прикрепленные файлы:
ЦеныНоменклатуры.erf
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. horoshevall 23.08.16 06:06 Сейчас в теме
(1) CyberCerber, Получилось сделать нечто подобное - смотрите отчет во вложении.
Прикрепленные файлы:
ЦеныНоменклатуры.erf
12. CyberCerber 855 23.08.16 10:05 Сейчас в теме
(4) horoshevall, да, на тестовой базе выглядит все круто! Правда, я вообще не понимаю, как это работает, откуда там иерархия взялась? :-)
Но на рабочей пока почему-то не взлетело. Получается, после добавления связей набора с самим собой не отбирается ни одна строка. Пока не могу понять почему, вроде бы также соединяюсь по иерарх элементу и его родителю...
13. horoshevall 23.08.16 10:21 Сейчас в теме
(12) CyberCerber, 2 момента, которые написать забыла. 1 - в условии связи в СКД написать начальное значение связи "ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)". 2 - в запросе объединяем справочник номенклатуры с регистром цен, ссылку на номенклатуры из справочника берем - иначе не работает. Если честно, для меня это тоже магией выглядит. Но работает - это факт =) Кстати, подобный отчет для УТ 11 попробовала сделать - он во вложении.
Прикрепленные файлы:
!Пустой отчет.erf
Bespechnii_kot; reotem; +2 Ответить
15. CyberCerber 855 23.08.16 10:51 Сейчас в теме
(13) horoshevall, ага, хорошо, попробую
17. CyberCerber 855 23.08.16 11:23 Сейчас в теме
(13) horoshevall, понял я, в чем проблема. Ваша методика работает, только если в итоге выводятся только элементы иерарх справочника и сам ресурс. Но мне еще другие поля нужны. И тогда работать перестает.
18. horoshevall 23.08.16 11:29 Сейчас в теме
(17) CyberCerber, Можете написать, что еще вы выводите? Сейчас в отчет добавила измерение и ресурс из регистра - выводится также по иерархии номенклатуры.
19. CyberCerber 855 23.08.16 12:07 Сейчас в теме
(18) horoshevall, вот, переделал тестовую базу, чтобы привести пример.
Добавил в Цены номенклатуры измерение Организация. И в итоговом отчете надо вывести таблицу, где на пересечении Номенклатуры и Организации будет Цена.
Прикрепленные файлы:
Test.dt
21. horoshevall 23.08.16 12:19 Сейчас в теме
(19) CyberCerber, У меня вроде как работает - отчет во вложении мой.
Прикрепленные файлы:
ЦеныНоменклатуры.erf
20. CyberCerber 855 23.08.16 12:17 Сейчас в теме
(18) horoshevall, так, стоп, доработал ваш отчет в тестовой базе, работает. Тогда, может, у меня в отборах проблема... Буду искать дальше.
11. horoshevall 23.08.16 10:03 Сейчас в теме
(1) CyberCerber, Чтобы получить результат, как на вашей картинке, помогает:
Делаем запрос:
ВЫБРАТЬ
	Цены.Цена,
	НоменклатураСпр.Ссылка КАК Номенклатура,
	НоменклатураСпр.Родитель КАК Родитель
ИЗ
	Справочник.Номенклатура КАК НоменклатураСпр
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
		ПО (Цены.Номенклатура = НоменклатураСпр.Ссылка)

На закладке "Связи наборов данных" делаем связь ИсточникДанных1 с ИсточникДанных1 - Источник - "Номенклатура", приемник "Родитель". Связь обязательная. Ресурс Цена рассчитываем по "Номенклатура, Номенклатура Иерархия". В сам отчет выводите только детальные записи - без группировок по иерархии номенклатуры.
14. Xershi 1486 23.08.16 10:23 Сейчас в теме
(1) CyberCerber, в настройках ресурсов измени данные для вывода по группировкам и вопрос решен.
16. CyberCerber 855 23.08.16 10:52 Сейчас в теме
(14) Xershi, а можно подробней? Я в ресурсах СКД нуб нубом
23. Xershi 1486 23.08.16 13:53 Сейчас в теме
(16) CyberCerber, ну посмотри видео 110 уроков Гилева по СКД.
В твоем случае либо использовать группировки разные по разным уровням или использовать выражение вычислить. Смотри новые функции СКД 8.2.14.
Если не понятно, показывай скриншоты буду тыкать)
24. CyberCerber 855 23.08.16 15:58 Сейчас в теме
(23) Xershi, воспользовался функцией "Вычислить выражение" для ресурса Цена:

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

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

Можете подсказть?
Прикрепленные файлы:
25. Xershi 1486 23.08.16 17:27 Сейчас в теме
(24) CyberCerber, тут скорее всего нужно подумать над тем какие параметры вписать в эту функцию. Почитайте описание, скорее всего поймете как нужно прописать.
26. CyberCerber 855 23.08.16 17:31 Сейчас в теме
(25) 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
ЧерныйКот; +1 Ответить
28. horoshevall 24.08.16 06:42 Сейчас в теме
(26) CyberCerber, Кстати, есть на ИТСе пара статеек, где рассказывается про иерархию в СКД - в группировках и в детальных записях. Надеюсь, их можно здесь приводить - они доступны и без подписки. http://its.1c.ru/db/metod8dev/content/1984/hdoc и http://its.1c.ru/db/metod8dev/content/2498/hdoc
Светлый ум; +1 Ответить
29. Xershi 1486 24.08.16 09:02 Сейчас в теме
(26) CyberCerber, это на практике приходит. Там нужно указывать группировку по которой будет идти вычисление, также можно указать несколько колонок, чтобы в любой вариации СКД считал все корректно.

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

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


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

можно еще попробовать через связи наборов данных, но нет времени возиться)
7. CyberCerber 855 23.08.16 09:28 Сейчас в теме
(2) reotem, не совсем понял ваше решение... Этот запрос надо исполнить и положить в ТЗ? А потом в самой СКД что изменится?
10. reotem 23.08.16 09:34 Сейчас в теме
(7) CyberCerber,

Если использовать СКД, то данный запрос можно использовать как Внешний набор.
3. sutkin 22.08.16 22:56 Сейчас в теме
Видимо, не нужно делать цену ресурсом, а добавить ее в группировку к номенклатуре.
8. CyberCerber 855 23.08.16 09:29 Сейчас в теме
(3) sutkin, в реальной задаче значение будет в таблице, поэтому простым реквизитом не получится
5. PhoenixAOD 62 23.08.16 06:15 Сейчас в теме
че то я не понял, от куда цена у родителя?
9. reotem 23.08.16 09:30 Сейчас в теме
(5) PhoenixAOD,

Иерархия элементов
6. 32ops 192 23.08.16 07:47 Сейчас в теме
Оно конечно костылина страшная, но...
Т.к. папки нам нужно убрать (СКД сама их построит), то все данные должны храниться на уровне элементов, в том числе и по родительским папкам. Значит значение ресурса мы должны растиражировать для каждого уровня группировки.
В приведенном примере мы должны получить
таблицу с полями Номенклатура, РесурсУ1,РесурсУ2
Ном11, 60, 10
Ном12, 60, 20
Ном13, 60, 30
ном21, 70, 40
ном31, 70, 50
Тогда в СКД в ресурсах на группировке можно будет прописать формулу "Выбор когда уровень()=1 тогда минимум(РесурсУ1) когда Уровень()=2 тогда Минимум(РесурсУ2) ...."
Такую таблицу получить сложно, но можно.
22. kasper076 105 23.08.16 12:54 Сейчас в теме
27. PiotrLoginov 23.08.16 19:30 Сейчас в теме
Насколько я понял, horoshevall дала и теорию, и практическую реализацию. Тем не менее, никакого вознаграждения она не получила?
31. CyberCerber 855 24.08.16 10:40 Сейчас в теме
(27) PiotrLoginov, да, методика horoshevall отлично работает на тестовой базе, но в рабочей базе, где запрос возвращает 30 000 строк, соединение таблицы с самой собой заставляет сервер уйти в глубокое раздумье, из которого он не возвращается.
Поэтому я не смог остановится на этом варианте и продолжил поиск. В итоге сделал сам более оптимальный вариант.
Но вознаграждение horoshevall сейчас отдам, т.к. она проделал самую большую работу.
30. CyberCerber 855 24.08.16 10:35 Сейчас в теме
Ну все, я сделал. Получился сборник подходов из нескольких источников.
Прикладываю результат, кому интересно.
Прикрепленные файлы:
Test.dt
33. AngV 15 18.09.17 17:04 Сейчас в теме
(30) в базе ничего нет, отчет без всяких подходов
AlexCherdakov; +1 Ответить
32. CyberCerber 855 24.08.16 10:57 Сейчас в теме
А у меня еще оффтоповый вопрос...
Сейчас сверху написано:

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

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот