Полезные примеры составления схемы компоновки данных #1

31.10.21

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

Данная статья появилась благодаря периодически появляющимся вопросам на сайте http://1cskd.ru/. Задачи, которые задают авторы вопросов совсем не тривиальные, но их можно решить с помощью СКД.

Скачать файлы

Наименование Файл Версия Размер
Полезные примеры составления схемы компоновки данных.zip
.zip 127,81Kb
225
.zip 127,81Kb 225 Скачать

Оглавление

  1. Посчитать разницу с предыдущей записью
  2. Поместить таблицу значений в ячейку табличного документа
  3. Пронумеровать колонки
  4. Чередование групп с выделением цветом
  5. Остатки в разрезе характеристик. Характеристики в строку с количеством в скобках
  6. Соединить две таблицы с ключом Строка = Число
  7. Сортировка по строке как по числу

 

Посчитать разницу с предыдущей записью

Пример того как можно получить поля предыдущей записи в группировке и не только. Удобно для вычисления разницы значений предыдущей цены и текущей.

Автор данного вопроса хотел посчитать отклонение текущей цены от предыдущей. Мое решение выглядит так:

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

Параметры:

  • Выражение. Тип Строка;
  • Группировка. Тип Строка;
  • ТипРасчета. Тип Строка;
  • Начало. Строка, содержащая одно из вариантов;
  • Конец. Строка, содержащая одно из вариантов;
  • Сортировка. Строка;
  • ИерархическаяСортировка;
  • ОбработкаОдинаковыхЗначенийПорядка

Нас интересует 4 и 5 параметр (Начало и Конец). Выражение будет выглядеть следующим образом:

isNULL((ВЫЧИСЛИТЬВЫРАЖЕНИЕ("Цена", , , "Предыдущая", "Предыдущая") - Цена), 0)

- здесь вычисляем предыдущее значение поля Цена и из него вычитаем текущее значение поля Цена. Естественно, для первой записи предыдущее значение не будет вычислено и результат вычитания со значением текущего поля будет Null, поэтому что бы все было «чисто» используем функцию isNULL(естьNull), чтобы преобразовать Null в число ноль.

 

Поместить таблицу значений в ячейку табличного документа

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

 

Для этого необходимо воспользоваться функцией: ВычислитьВыражениеСГруппировкойТаблицаЗначений(), у которой есть параметры:

  • Выражение - выражение, которое нужно вычислить. Тип Строка. В строке может быть перечислено несколько выражений через запятую. После каждого выражения может быть необязательное ключевое слово КАК и имя колонки таблицы значений. Например: "Контрагент, Сумма(СуммаОборот) Как ОбъемПродаж".
  • ВыраженияПолейГруппировки - выражения полей группировки, перечисленные через запятую. Например, "Контрагент, Партия";
  • ОтборЗаписей - выражение, применяемое к детальным записям. Например, "ПометкаУдаления = Ложь";
  • ОтборГруппировок - отбор, применяемый к групповым записям. Например: "Сумма(СуммаОборот) > &Параметр1".

Для этого создаем вычисляемое поле, в которое будем выводить получившуюся таблицу, затем помещаем это поле в ресурсы с выражением

ВычислитьВыражениеСГруппировкойТаблицаЗначений("Номенклатура, Количество")

 

Пронумеровать колонки

Пример того как можно пронумеровать колонки в СКД.

Обсуждалось здесь: http://forum.infostart.ru/forum26/topic88579/

Суть решения:

  1. Создаем запрос, в котором нумеруем строки результата запроса в пределах определенного подчинения
  2. Выводим результат в кросс-таблицу

ВАЖНО!

После того как строки в запросе пронумерованы их необходимо поместить в ВТ и потом из этой ВТ выбирать, иначе СКД сделает все по-своему и в группировку попадут не те поля

 

Для того чтобы получить результат необходимо создать:

1. Вычисляемое поле с выражением "Сотрудник" + Формат(НПП,"ЧЦ=3; ЧВН=")
2. Вычисляемое поле ФИО, в которое просто поместить Сотрудник
3. Ресурс с выражением Максимум(ФИО) или просто ФИО – никакой разницы

 

Чередование групп с выделением цветом

 Где-то на Мисте или на том же 1Cskd.ru был вопрос как подсвечивать разным цветом строки, образующие группы

 Это достигается созданием вычисляемого поля:

ВычислитьВыражение("Количество (Различные Номенклатура)",,,"Первая", "Предыдущая",,,"Вместе") % 2

Считаем количество различных "группировок" поля Номенклатура, группировки получается считать за счет установки значения параметра ОбработкаОдинаковыхЗначенийПорядка = "Вместе"

 Остаток от деления на два даст понять это четная группа или нет, соответственно, создаем элемент условного оформления с условием Поле = 1

Более простое решение предложил Skillhoster:

ВычислитьВыражение("Количество (Различные Номенклатура)",,,"Первая", "Текущая") % 2

 

Остатки в разрезе характеристик. Характеристики в строку с количеством в скобках

На том же 1CSkd.ru была такая тема, в которой автор просит помочь сделать отчет, где в одной из колонок необходим перечень характеристик(размеры обуви) с их количеством. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Это достигается использованием все той же функции ВычислитьВыражениеСГруппировкойМассив()

В этом примере функция выглядит так:

ВычислитьВыражениеСГруппировкойМассив("ХарактеристикаНоменклатуры.Наименование +
""("" + Формат(КоличествоОстаток,""ЧГ=0"") + "")""",
,
 "ЗначениеЗаполнено(ХарактеристикаНоменклатуры)")

Третий параметр - это отбор, позволяет избежать представления пустой строки "" – соответственно вы не увидите остатков без характеристик

 

Соединить две таблицы с ключом Строка = Число

Или вариант как в СКД значение типа число преобразовать в строку

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

Для того чтобы преобразовать число в строку, достаточно просто воспользоваться функцией языка выражений системы компоновки данных СКД Строка() или Формат()

Для того чтобы преобразовать строку в число можно воспользоваться функцией Вычислить()

 

Сортировка по строке как по числу

Задача не новая и периодически встречающаяся. Меня, например впервые попросили это сделать в отчете «Расчетные листки организаций» - необходимо было отсортировать расчетные листки по табельному номеру сотрудника как по числу. В последний раз встретил этот вопрос здесь http://www.forum.mista.ru/topic.php?id=716045

В своем примере я просто выведу справочник сотрудники, отсортировав его по табельному номеру (коду)

Результат будет выглядеть следующим образом:

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

  1. Создаем вычисляемое поле ТабНомерЧисло, с выражением: Вычислить(Сотрудник.Код)
  2. Сортируем по этому полю

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

 


Советую так же посмотреть «Видеоуроки по СКД»(легко ищется в гугле)

При разработке я использую сконвертированную консоль отчетов СКД+.

Так же рекомендую посмотреть //infostart.ru/public/86764/

СКД настройка схемы

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

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

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

13000 руб.

02.09.2020    117564    643    389    

691

Генератор схемы компоновки данных (СКД), написание кода схемы программно

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

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

3 стартмани

05.02.2024    3632    17    obmailok    17    

61

Набор-объект для СКД по тексту или запросу

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

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

1 стартмани

31.01.2024    1866    2    Yashazz    0    

28

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    7728    19    John_d    25    

121

Использование менеджера временных таблиц в СКД

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

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

05.12.2023    4353    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5545    14    kalyaka    5    

85

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

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

18.09.2023    5752    accounting_cons    4    

29

Разрыв страницы в СКД. Легко!

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

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4256    KVIKS    15    

79
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. eeeio 123 09.04.14 09:05 Сейчас в теме
Хорошее начинание, но хочется больше разных выкрутасов. Чтоб книга прям получилась.
andrvyst; artichoke; +2 Ответить
52. echo77 1864 30.03.21 19:22 Сейчас в теме
2. aleksey.kubovtsov 116 09.04.14 10:22 Сейчас в теме
интересная статья, спасибо автору
3. fishca 1254 09.04.14 10:56 Сейчас в теме
Спасибо, как раз примеров использования этих самых функций порой и не хватает.
4. Поручик 4667 09.04.14 12:20 Сейчас в теме
Некоторые вещи знал раньше, но всё равно полезно.
5. soulsteps 73 09.04.14 13:34 Сейчас в теме
6. SITR-utyos 1418 09.04.14 14:11 Сейчас в теме
Планирую еще добавить:
  • Остатки в разрезе характеристик. Характеристики в строку с кол-вом в скобках
  • Как в функции ВычислитьВыражениеСГруппировкойТаблицаЗначений ";" заменить на " - "
Jujube; EasyWay; +2 Ответить
7. StAsya_1C 105 09.04.14 14:23 Сейчас в теме
Век живи, век учись ) Как же круто умеет СКД!
Лет пять назад решали задачу тоже на СКД, примерно следующая: есть РАУЗ, и если товар перемещался, то нужно в дополнительной колонке через запятую вывести названия складов, куда эти 100 штук товара переместили. Толи мы просто не умели, то ли СКД так тогда не умела (8.2 только начиналась), но пришлось делать вспомогательный регистр сведений, куда отчет при формировании писал а потом стирал записи, что из складов "Иванов" "Петров" и "Сидоров" получается строка "Иванов, Петров, Сидоров"
8. vvr908 443 09.04.14 14:59 Сейчас в теме
В первом примере результат кривоват вроде...
Документы установки цен идут не в последовательности, и записи лишние появляются.
9. script 128 09.04.14 23:52 Сейчас в теме
Тема фукнций не раскрыта
10. Confucius 81 10.04.14 05:53 Сейчас в теме
Даешь ещё примеров и финтиплюшек!!!
11. Evil Beaver 8087 10.04.14 10:04 Сейчас в теме
Коротко, со вкусом и по делу. Респект!
12. burlakov 79 10.04.14 12:54 Сейчас в теме
очень полезная статья! спасибо
13. Rockman 14.04.14 13:44 Сейчас в теме
Большое спасибо за полезную информацию.
14. buganov 200 16.04.14 07:55 Сейчас в теме
15. Sitex 16.04.14 08:30 Сейчас в теме
Полезно. Спасибо. Повторил что подзабыл.
16. chmv 16.04.14 08:55 Сейчас в теме
17. Akasy 5 21.04.14 10:51 Сейчас в теме
18. unknownN 23.04.14 11:16 Сейчас в теме
Очень интересно, спасибо
19. Unicorn31 45 24.04.14 07:41 Сейчас в теме
20. belochkaNN 29.04.14 08:31 Сейчас в теме
Спасибо! Пригодилась раскраска строк! +1
21. for_sale 967 30.04.14 11:32 Сейчас в теме
зачем в первом примере такая сложность? дельту можно даже в самом запросе посчитать:

ЕстьNULL(Таб.ТекЦена, 0) - ЕстьNULL(Таб.ПредЦена, 0)
22. SITR-utyos 1418 30.04.14 12:17 Сейчас в теме
(21) for_sale, можно, если не лень запросом получать таблицу текущих и предыдущих цен
23. dsv_nsk 01.05.14 10:11 Сейчас в теме
ТЗ в ячейке оказалась кстати.
Спасибо.
24. bird21 42 19.05.14 09:44 Сейчас в теме
25. khnatik 28.05.14 11:25 Сейчас в теме
Очень полезно, спасибо за статью!
26. Al777 08.07.14 17:05 Сейчас в теме
Мне раскраска цветом строк очень помогла.
27. SemenovaMarinaV 06.08.14 09:24 Сейчас в теме
28. SemenovaMarinaV 06.08.14 09:25 Сейчас в теме
Продолжайте эту тему. Очень полезно
29. EugeneR1c 17.09.14 06:10 Сейчас в теме
30. Denis S 13.10.14 18:25 Сейчас в теме
Отличные советы! Спасибо!
31. Afanasyev.sv@mail.ru 29.12.14 18:09 Сейчас в теме
Подскажите, а как можно разместить таблицу значений не в ячейку, а разбить эту ячейку на записи таблицы значений?
32. echo77 1864 29.12.14 20:04 Сейчас в теме
никогда не пробовал так делать.
Думаю, что пока нет
33. Afanasyev.sv@mail.ru 29.12.14 20:45 Сейчас в теме
Вот у меня никак не получается :(
34. Afanasyev.sv@mail.ru 29.12.14 20:50 Сейчас в теме
Даже идей никаких нет? Мне просто нужно именно по отдельности эти ресурсы выбирать в табличном поле, а они целиком в одной ячейке.
35. SITR-utyos 1418 30.12.14 08:46 Сейчас в теме
(34) Покажите как у вас выглядит отчет - скриншот нужен.
Если конфигурация типовая - то можно и схему
36. Afanasyev.sv@mail.ru 30.12.14 18:52 Сейчас в теме
Использовал ТаблицаЗначений(). Но нужно чтобы эти данные построчно были, как отдельные ячейки.
Прикрепленные файлы:
38. echo77 1864 31.12.14 10:43 Сейчас в теме
(36) Afanasyev.sv@mail.ru, нарисуйте, пожалуйста, как это в итоге должно выглядеть(в excel, потом можно сделать скриншот).

p.s. скриншоты инфографики лучше делать в формате PNG. Про BMP забудьте совсем :-)
39. Afanasyev.sv@mail.ru 07.01.15 13:56 Сейчас в теме
(38) Вот так.
Прикрепленные файлы:
37. Afanasyev.sv@mail.ru 30.12.14 19:00 Сейчас в теме
Если нужно, могу схему предоставить. Но там используется внешний набор данных.
40. skillhoster 09.09.15 15:14 Сейчас в теме
Спасибо за статью.
Но Чередование групп с выделением цветом будет работать и с ВычислитьВыражение("Количество (Различные Номенклатура)",,,"Первая", "Текущая") % 2 - проверено, тут смысл именно в "Количество (Различные Номенклатура)", для одинаковых элементов будет принимать одинаковое значение.
41. Spacer 355 28.09.15 22:16 Сейчас в теме
"Для этого создаем вычисляемое поле, в которое будем выводить получившуюся таблицу"
А где же выражение для этого поля? Что там должно быть?
42. echo77 1864 29.09.15 08:16 Сейчас в теме
(41) Spacer, в выражении должно быть пусто, а еще лучше ""(пустая строка). По большому счету без разницы что там будет, т.к. данное поле имеет смысл только на уровне группировки, т.к. является ресурсом
43. Stepka1206 06.05.16 15:36 Сейчас в теме
в моей ситуации возможно сгруппировать строки?
Прикрепленные файлы:
44. SITR-utyos 1418 30.07.16 14:34 Сейчас в теме
(43) Stepka1206, Все зависит от того, что вы хотите получить
45. romku 10 08.12.16 12:28 Сейчас в теме
(0) "Посчитать разницу с предыдущей записью". А удалось ли Вам получить итог по колонке "Дельта" ? Что то никак не получается.
46. KAV2 155 02.01.18 07:08 Сейчас в теме
Поместить таблицу значений в ячейку табличного документа


Если в таблице получается много строк (больше 5) то высота ячейки не расширятся больше определенного значения и не все влазит. Не понятно как это обойти.
47. echo77 1864 04.01.18 12:12 Сейчас в теме
(46) Не наблюдал такой проблемы.Высота ячейки сама изменяется.
Если этого недостаточно - условным оформлением задаем вручную Минимальная высота, Максимальная высота для целевой ячейки
48. пользователь 25.12.18 05:44
Сообщение было скрыто модератором.
...
49. Алексей777 88 05.04.19 17:12 Сейчас в теме
50. Suslik_Johns 02.05.20 09:04 Сейчас в теме
Спасибо большое за статью!
51. Serg_bl 37 14.12.20 06:15 Сейчас в теме
По части использования функции "ВычислитьВыражениеСГруппировкойТаблицаЗначений()" - не указано, что на странице Настройка нужно вывести группировку только с измерением (в частности Ссылка), иначе вычисляемые ресурсы не выводятся. Я постоянно выводил "Детальные записи", и никак не мог понять, почему ни один пример с этой функцией не работает, пока не скачал готовый пример.
Оставьте свое сообщение