Хитрости системы компоновки данных на примере решения тестового задания проекта "Доминикана"

18.08.13

Разработка - СКД

Недавно мне встретилось тестовое задание проекта "Доминикана", а также выложенные решения, которые показались мне слишком тривиальными, поэтому было решено сделать тестовое задание, используя минимум возможностей языка запросов и максимум возможностей СКД. О том как это было и пойдет речь в данной публицации. В публикации опишем лишь основные моменты, которые будут нам полезны в будущем, сами настройки подробно рассматривать не будем, для этого есть специлизированные курсы :).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выгрузка информационной базы с решением тестового задания
.dt 124,96Kb
102
102 Скачать (1 SM) Купить за 1 850 руб.

Итак, перед нами стоит следующая задача:

Есть регистр сведений «Остановки по маршруту» в котором хранится информация о расстоянии от начальной до конечной остановки.

Рис. №1 Регистр сведений «Остановки по маршруту».

Требуется разработать отчет на СКД, который покажет расстояние между двумя остановками по маршруту.

Отчет представляет собой прямоугольный треугольник, на гипотенузе названия остановок по порядку. На пересечении горизонтальной и вертикальной линии от двух остановок заполнено значение, равное расстоянию между этими остановками. Например, расстояние между «Борок» и «Мологино» 6,3 км (Рисунок №2).

Важно: Отчет должен быть разработан без программного кода при помощи набора данных – Запрос. Текст запроса должен быть один.

Рис. №2 Отчет «Таблица расстояний».

 

Решение

1. Самым важным был первый шаг, в ходе долгих мучений и экспериментов, было принято решение использовать вложенные схемы компоновки данных. Зачем это необходимо? Все очень просто, для того, чтобы была возможность соединения идентичных данных между собой. Ведь, если мы используем 1 схему, система компоновки данных понимает, что обращение идет к одной и той же таблице и не дает нам представить эти данные в виде кросс-таблицы. Т.е. даже если мы создадим таблицу колонками и строками, которой будут идентичные данные из 1 источника, мы не сможем заполнить ресурсы, которые у нас будут располагаться ниже или выше диагонали (при этом, на диагонале будут расположены ресурсы с расстояниями до пункта назначения, т.е. данные мы сможем вывести только на пересечении одинаковых остановок, что нас не очень устраивает).

При использовании вложенных схем компоновки данных, у нас появляется возможность выводить данные по вертикали и по горизонтали за счет того, что в этом случае СКД не учитывает источники данных и разрешает использовать в группировке вложенные схемы, которые могут содержать данные отличные от содержащихся в группировке. Например, без использования вложенных схем, имеем группировку по полю "Остановка" и пытаемся вывести под этой группировкой еще 1 содержащую другие остановки, у нас этого сделать не получится, т.к. СКД понимает что Остановка является разрезом данных и не дает нам вывести в детальных записях данные не относящиеся к "Остановке" в верхней группировке. При использовании же вложенных схем мы легко сможем под группировкой "Остановка" вывести любые данные из вложенной схемы.

Итак, сделаем схему компоновки данных с набором данных Запрос:

Сразу создадим элемент отбора "Маршрут" в родительской схеме, как того требует задание:

После чего к получившейся схеме добавим вложенную схему с таким же набором данных, назовем ее "ПредыдущиеОстановкиПоМаршруту". Во вложенной схеме при этом не делаем никаких настроек (потому что родительская схема все равно будет отдельно хранить свои настройки для вложенной схемы). Теперь мы можем приступить к склейке этих наборов средствами СКД.

2. Настраиваем группировки в родительской схеме компоновки данных, в верхней группировке добавляем 2 группировочных поля "Маршрут" и "Остановка" ("Маршрут" нам необходим для того, чтобы была возможность накладывать отборы на вложенную схему по этому полю):

На выходе получаем отчет вида:

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

3. Теперь нам необходимо сделать так, чтобы каждая строка вложенной схемы содержала те данные, которые необходимо, а именно все предыдущие остановки, которые идут перед текущей остановкой родительской схемы и расстояния до этих остановок. Для этого настраиваем отборы вложенной схемы (в настройках родительской схемы) следующим образом:

Так же настроим сортировку по расстоянию для родительской схемы (это необходимо для того, чтобы остановки шли в порядке следования, соответственно и для корректного отображения отчета):

И не забываем упорядочить колонки вложенного отчета по возрастанию расстояния от начала маршрута:

Получаем отчет вида:

Видим, что наш прямоугольный треугольник уже начинает быть похожим на истину :)

Теперь нам необходимо рассчитать расстояние, которое будет выводиться во вложенном отчете.

4. Создаем во вложенной схеме компоновки данных вычисляемое поле:

Это поле работает следующим образом: сначала получаем расстояние до последней точки маршрута (при этом учтем, что последней точкой маршрута с учетом наложенных отборов на вложенную схему будет являться остановка, расположенная на диагонали, остановка из верхней группировки родительской схемы), далее мы берем разницу между значением этого поля и расстоянием от начала маршрута для каждой из наших остановок, присутствующих во вложенной схеме и получаем искомое значение, которое мы будем выводить в отчет. Не забываем добавить созданное вычисляемое поле на вкладку "Ресурсы" вложенной схемы.

В итоге у нас получается вот, что:

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

После манипуляций отчет имеет следующий вид:

Между вложенными отчетами остаются промежутки, и убрать их можно только программным кодом, при необходимости можно найти информацию, как это сделать.

В общем, осваивайте СКД и ее новые функции, они позволят вам делать самые сложные невообразимые отчеты, и скоро вы сможете получать удовольствие от использования СКД.

© senior-soft.ru Все права защищены. 

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159430    872    399    

861

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    8684    implecs_team    6    

47

Инструментарий разработчика СКД Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

3 стартмани

05.02.2024    6996    56    obmailok    21    

79

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    3148    5    Yashazz    1    

34

СКД WEB-интеграция Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    10804    23    John_d    25    

124

СКД Программист Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    8017    PROSTO-1C    15    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tango 545 12.06.13 18:12 Сейчас в теме
почему минус: автор сначала излил жидкость на участнегов темы, где это все было обсосано до последних косточек;
потом долго парил моск всякой фигней; потом сказал, что больше не будет, потому что дальше осталась всякая фигня; потом оказалось, что задачу так и не решил, поскольку надо еще кодом подработать выход...

ничего личного, каждый 1снег зачем-нибудь нужен
МихаилМ; Yakud3a; wowik; Stim213; wunderland; cleaner_it; AlexO; Chif13; dmpas; e.kogan; +10 1 Ответить
2. InformSES 287 12.06.13 18:17 Сейчас в теме
Основное условие задачи: "Требуется разработать отчет на СКД, который покажет расстояние между двумя остановками по маршруту." В каком месте задача не решена?
3. tango 545 12.06.13 18:23 Сейчас в теме
(2) последний скрин: табличка не соответствует, и
остаются промежутки, и убрать их можно только программным кодом
- это именно задача не решена
Дмитрий74Чел; +1 Ответить
4. InformSES 287 12.06.13 18:28 Сейчас в теме
Табличка не соответствует условию задачи или скриншоту в задаче, данному для примера?
В задаче вот, что написано:
Отчет представляет собой прямоугольный треугольник, на гипотенузе названия остановок по порядку. На пересечении горизонтальной и вертикальной линии от двух остановок заполнено значение, равное расстоянию между этими остановками.

и этому отчет соответствует. Если нет - прошу прокомментировать, чему именно не соответствует отчет по условиям задачи?
5. tango 545 12.06.13 18:40 Сейчас в теме
(4) молодой человек, в (3) приведена цитата из вашей собственной публикации.
6. InformSES 287 12.06.13 18:51 Сейчас в теме
Все верно, промежутки остаются, но нигде не говорится, что их не должно быть. Объективно нас тут рассудят только постановщики задачи, если доберутся до этой публикации.
Между прочим и публикация называется "Хитрости системы компоновки данных...", а не "Самое лучшее решение...".
P.S. Скоро сделаю воронку средствами 1С, правда не такую страшненькую как у Вас, но все же готовьте минусы для следующей публикации :).
7. tango 545 12.06.13 18:57 Сейчас в теме
(6) ага, ужос н..., какая страшная. все пропало :(
10. Поручик 4692 12.06.13 21:42 Сейчас в теме
8. InformSES 287 12.06.13 19:03 Сейчас в теме
По сравнению с воронкой из аксапты, да, смотреть страшно. А другую видимо Вы сделать не в силах.
ничего личного, каждый 1снег зачем-нибудь нужен
9. Поручик 4692 12.06.13 21:40 Сейчас в теме
(8) Не обращай внимания, ему только желчь излить.
11. tango 545 12.06.13 22:06 Сейчас в теме
гм... да вы тут не на шутку разошлись пофлудить...
ладно, слушайте сюда
1. это была - воронка
2. это была первая воронка штатными средствами 1с, все что было до меня - представлено в статье Elisy
12. paybaseme 14 13.06.13 11:02 Сейчас в теме
Спасибо. Интересно показан ход мысли!
13. Ish_2 1112 13.06.13 13:02 Сейчас в теме
(0) Представленное решение - ужасно.

На рисунке ниже представлен вывод отчета на СКД. Без хитростей.
- программный код не используется вовсе ( не нужно удалять лишние строки как у автора)
- вложенные схемы не нужны
Прикрепленные файлы:
SharlySka; cleaner_it; pbazeliuk; +3 Ответить
14. InformSES 287 13.06.13 13:07 Сейчас в теме
Статья о хитростях СКД, а не об идельном способе решении задачи. Сделать 1 соединение запросом и обработать 1 источник данных куда проще, чем добиться такого результата исключительно средствами СКД.
adhocprog; +1 Ответить
15. Ish_2 1112 13.06.13 13:18 Сейчас в теме
(14) Вот я и говорю. Наиболее просто задача решается исключительно средствами СКД.
Без хитростей , без дополнительного программного кода для удаления лишних строк, без вложенных схем.
16. SpartakM 72 13.06.13 13:30 Сейчас в теме
(15)Можете сюда приложить свое решение, интересно посмотреть...
18. Ish_2 1112 13.06.13 13:39 Сейчас в теме
(16) Автор должен сам найти решение.
20. InformSES 287 13.06.13 13:45 Сейчас в теме
(18) Ish_2, кхм, мне не составляет труда написать запрос для получения тех же самых данных, публикация о возможностях СКД и хитростях использования этих возможностей.
22. Ish_2 1112 13.06.13 13:56 Сейчас в теме
(20) Ну , что ж.
Вы считаете , что Ваше решение "хитро" демонстрирует возможности СКД.
Я считаю , что Ваше решение - ужасно.
На этом и разойдемся.
Дмитрий74Чел; +1 Ответить
17. _Ramzes 126 13.06.13 13:39 Сейчас в теме
Автор Молодец. А я вот так и не добрался до вложенных схем СКД. Т.к. информации по ней и демонстрации использования я не смог нигде найти.
34. webester 26 14.06.13 17:26 Сейчас в теме
(17) у гилева есть бесплатный курс по СКД единственный его минус: он оооочень объемный, материала очень много. Но по содержанию сможете найти где они говорят именно про вложенные схемы и послушать только про них.
19. InformSES 287 13.06.13 13:44 Сейчас в теме
Прикладываю самое лучшее решение по версии авторов задачи. / Взято где-то на форуме. /
Прикрепленные файлы:
Доминикана. Самое лучшее решение.dt
33. Silenser 612 14.06.13 15:48 Сейчас в теме
(19) Приложенное решение - красиво и оптимально. Ваше решение, к сожалению, решением не является, т.к. не соответствует требованиям авторов задачи, которые на рисунке вполне четко нарисовали какую именно таблицу они хотят получить на выходе. Минус ставить не стал, т.к. мало кто использует встроенные схемы и ваше описание может кому-то пригодиться.
Дмитрий74Чел; +1 Ответить
21. DoctorRoza 13.06.13 13:54 Сейчас в теме
Однозначно! + за статью!
23. a-novoselov 1158 13.06.13 14:27 Сейчас в теме
(0) если мне не изменяет память, то в задании было условие "решение должно быть без единой строчки программного кода, только средствами запросов или СКД". Или я ошибаюсь?
24. hasp_x 156 13.06.13 15:15 Сейчас в теме
А мне статья понравилась. Без последнего абзаца может и скачивать бы не стал. Плюсую
25. Chif13 1256 13.06.13 17:55 Сейчас в теме
Не, ну давайте всеми тут решим и выложим всеми эти решения... Мы всеми горды что ее решили... Мы молодцы...
Не ну было ж уже: Проект "Доминикана", решение первой задачи автора _Ramzes
Не ну а что? У меня тоже есть решение данной задачки. Вот Вам рисуночек (заметьте без строчки кода)

Если уж так, то откройте форум на обсуждение решения данной задачки чтоль.
Хотя может я просто злая, мелкое ГЫ...
26. SpartakM 72 13.06.13 18:16 Сейчас в теме
(25) Chif13, приложи сюда выгрузку базы с решением
29. Chif13 1256 13.06.13 23:07 Сейчас в теме
(26) SpartakM, вот мое решение:
Задача_ОстановкиПоМаршруту_Ответ.dt
Выбираем варианте отчета "Основной вариант с выбранным маршрутом" и нажимаем кнопочку сформировать ))))
Как то так.
А данная статья мне не понравилась, решение задачи не соответствует поставленной задаче. Ну эт нормально, у нас большинство так и программирует. Минус не ставлю, все таки старания должны учитываться. Например, решение _Ramzes мне нравится больше, хоть запрос и построен не рационально, но результат то что просил заказчик.
Блин, я опять злая, да?
slax; dddxddd; gluker; baobingo; +4 Ответить
30. SpartakM 72 13.06.13 23:53 Сейчас в теме
(29) Chif13, мое мнение - статья хороша не решением задачи, о чем автор явно указал, а о различных возможностях СКД, и судя по комментариям - не все знали такие особенности.
поэтому - не стоит подходить именно как к решению задачи...
Spacer; adhocprog; +2 Ответить
31. Chif13 1256 14.06.13 09:14 Сейчас в теме
(30) SpartakM, может быть... Тогда не удачно подобранный пример, надо было б оформлять по другому статью... Поставлена задача, результата не достигнуто. Большой минус.
SpartakM; +1 Ответить
32. SpartakM 72 14.06.13 09:30 Сейчас в теме
(31) Chif13, вот тут сложно не согласиться)))
35. Ish_2 1112 15.06.13 14:23 Сейчас в теме
(32),(23),(33),(28),(29),(17) Мне кажется , скучновата задачка - скучноваты решения.
Буду рад , если кого-то развеселит - "вращение" отчета по часовой стрелке.
Попробуйте на досуге . В условие задачи добавляется один параметр : ВариантОтчета.
Далее смотри ниже.
Прикрепленные файлы:
w-divin; Puk2; +2 Ответить
27. WalterMort 246 13.06.13 20:21 Сейчас в теме
Только один вопрос.
Накой нужна таблица расстояний?
adhocprog; +1 Ответить
28. пользователь 13.06.13 22:01
Сообщение было скрыто модератором.
...
36. Ish_2 1112 15.06.13 19:03 Сейчас в теме
Ну , и для полноты картины варианты 5,6,7,8.
См.Ниже.
Прикрепленные файлы:
37. aleksey.kubovtsov 118 18.06.13 17:46 Сейчас в теме
спасибо автору за решение, если кто - то считает решение не совсем корректным, поделились бы лучше опытом. я не смог решить данную задачу, не являюсь программистом . любое решение интересно
38. wowik 890 19.06.13 10:53 Сейчас в теме
Что такое, минус нельзя поставить, а плюс можно. Верните мой голос обратно.
39. adhocprog 1142 21.08.13 14:56 Сейчас в теме
(0) поддержу автора за желание поделиться знаниями с другими.
Оставьте свое сообщение