Создаем отчет с заданной периодичностью на СКД

18.04.12

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

Учимся создавать отчет с заданной периодичностью с использованием СКД.

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

Итак, начнем.

Для простоты понимая пример будем строить на одном простом оборотном регистре накопления.

В моем случае это регистр накопления "Незавершенное производство бухгалтерский учет".

Его параметры для примера укажем жестко (не через мягкое накладывание параметров на СКД):

Обратим внимание, периодичность виртуальной таблицы - "Запись".

Далее выбираем период из виртуальной таблицы и нужные нам поля.

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

Как видно из скриншота, в запрос передается параметр, который пользователь указывает на форме: Значение перечисления "Периодичность" - данное перечисление есть практически во всех типовых решениях.

Его доступные типы укажем на вкладке "Параметры":

Далее, в настройках СКД создаем таблицу, в ней - колонку "Период" (вертикальная группировка):

Далее следует важный момент настройки условного оформления:

Этой настройкой мы форматируем наш период, чтобы все было красиво и радовало глаз)

Вот, собственно, сами форматы:

Месяц: ДФ='ММММ гггг "г."'

День: ДФ = дд.ММ.гггг

Неделя: ДФ = '"Неделя с" дд.ММ.гггг '

Квартал: ДФ = 'к "квартал" гггг "г."'

Год: ДФ = 'гггг "г."'

Декада: ДФ = '"Декада с" дд.ММ.гггг '

Полугодие: ДФ = '"Полугодие с" дд.ММ.гггг'

Вот и все. На выходе имеем замечательную картину:

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    121625    670    389    

711

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

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

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

3 стартмани

05.02.2024    4033    25    obmailok    17    

63

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

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

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

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8155    20    John_d    25    

123

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

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

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

05.12.2023    4651    PROSTO-1C    13    

61

Модель СКД

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

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

1 стартмани

15.11.2023    5804    15    kalyaka    5    

86

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

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

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

18.09.2023    6693    accounting_cons    5    

29

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

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

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

01.09.2023    4518    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
0. Lyns_owner 355 17.04.12 07:17 Сейчас в теме
Учимся создавать отчет с заданной периодичностью с использованием СКД.


Перейти к публикации

1. Serj1C 483 17.04.12 07:17 Сейчас в теме
Можно вычисление периода перенести на клиент в вычисляемых полях СКД. Во-первых, период там указывается в кавычках ("Месяц"), во-вторых, вычисляемые поля доступны для редактирования, т.е. можно перед выполнением СКД программно задать им формулу.
Ну и в-третьих. Можно обратиться к набору данных.Зарос в схеме компоновки данных и и сделать ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Полугодие", "Квартал"), а потом выполнять отчет.
2. Smaylukk 185 17.04.12 09:27 Сейчас в теме
А зачем делать такую иерархию вложенных условий? В тексте запроса можно применять switch case условия:
ВЫБОР КОГДА .... Тогда ....
КОГДА .... Тогда ....
КОГДА .... Тогда ....
КОНЕЦ
Гораздо более удобно и читабельно.
А по решению - рабочее, тоже так делал и не только для периодичности.
3. Lyns_owner 355 17.04.12 09:41 Сейчас в теме
(2) Smaylukk, Согласен, но это я реализовывал довольно давно, уже не помню, почему так, видимо, другого не знал)

Поменяю в публикации.
4. MRAK 723 18.04.12 10:10 Сейчас в теме
Точно

КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.День)
ТОГДА НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)
а не


КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.День)
ТОГДА НАЧАЛОПЕРИОДА(МойРегистр.Период, ДЕНЬ)
?
Lyns_owner; +1 Ответить
5. Lyns_owner 355 18.04.12 10:22 Сейчас в теме
(4) MRAK, Спасибо) В изначальном варианте именно так) Ума не приложу, как так вышло).
6. wowkai 4 18.04.12 10:33 Сейчас в теме
интересная заметка. давно задавался вопросом как корректно и легко делать группировку по периодах в отчетах на СКД. Спасибо!
7. Laertid 99 19.04.12 09:36 Сейчас в теме
Я в свое время писал об этом:
http://infostart.ru/public/104819/
Упоминал три, кажется, варианта решения, один предложил, но замер времени работы показал, что принципиально ни один из них не лучше других. К сожалению.
35. deaddy64 25 30.08.19 11:32 Сейчас в теме
Добрый день.
Тоже столкнулся с подобной задачей, но с дополнительным условием расчета остатков на каждый период. По описанному в статье методу остатки рассчитаются неверно, т.к. из виртуальных таблиц данные выбираются с периодичностью "Секунда" и при указании параметра &Периодичность, например, "День", в детальных записях возможно появление нескольких строк на один и тот же период.
Также способ из статьи (7) с периодичностью "Авто" не даст требуемого результата, т.к. в случае использования конструкции
	ВЫБОР &Периодичность
		КОГДА "СЕКУНДА"
			ТОГДА ХозрасчетныйОстаткиИОбороты.ПериодСекунда
		КОГДА "День"
			ТОГДА ХозрасчетныйОстаткиИОбороты.ПериодДень
		КОГДА "Неделя"
			ТОГДА ХозрасчетныйОстаткиИОбороты.ПериодНеделя
		КОГДА "Месяц"
			ТОГДА ХозрасчетныйОстаткиИОбороты.ПериодМесяц
		КОГДА "Квартал"
			ТОГДА ХозрасчетныйОстаткиИОбороты.ПериодКвартал
КОНЕЦ КАК Период
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, ,АВТО, ,, , ) КАК ХозрасчетныйОстаткиИОбороты
Показать

развертка будет происходить по всем полям задействованным в конструкции "ВЫБОР". Независимо от того, что выбирается только одно конкретное поле. Что также способствует неверному расчету остатков.
Единственный способ, который позволил мне правильно рассчитывать остатки и изменять периодичность в настройках, заключается в такой конструкции:
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, ,ДЕНЬ {&Периодичность}, ,, , )

Параметр &Периодичность число, можно ограничить списком доступных значений. Задавая в отчете разные значения параметра, развертка происходит только по выбранному значению, и остатки считаются верно.
CaIIIkaDer; +1 Ответить
38. CaIIIkaDer 19.04.22 09:47 Сейчас в теме
(35) Огромное спасибо за "ДЕНЬ {&Периодичность}"!
8. Laertid 99 19.04.12 09:40 Сейчас в теме
М-м, пересмотрел свою публикацию - она предлагает точь в точь тот же выход, что и предложенный автором статьи тут. Только написана мною уже давно.
Кстати, в итоге я теперь предпочитаю выносить этот ВЫБОР из запроса и создавать новое вычисляемое поле с такой же формулой. Разницы по нагрузке нету, а в разработке удобнее получается.
9. Lyns_owner 355 19.04.12 10:02 Сейчас в теме
(8) Laertid, Действительно, похоже. Но, насколько я понял, вы используете предложенный мной метод, как один из возможных. Я же описываю методику от и до. Кроме того, существование вашей публикации не делает мою публикацию хуже - это не основание понижать ее рейтинг.
10. maloi_a 25.04.12 08:11 Сейчас в теме
Замечание.
"Когда ТаблицаДоходовИРасходов.ЭтоНачальныйОстаток = Истина"
можно заменить на простое
"Когда ТаблицаДоходовИРасходов.ЭтоНачальныйОстаток"
или опустить совсем.
rayastar; Lyns_owner; +2 Ответить
11. Lyns_owner 355 25.04.12 09:48 Сейчас в теме
(10) maloi_a, Согласен) Кстати, не обратил внимания на этот кусок кода, он для публикации не нужен.
12. agulaev 33 25.04.12 21:22 Сейчас в теме
По-моему, очень красивый пример. Спасибо за науку!
13. Den_D 54 09.06.12 11:05 Сейчас в теме
Спасибо. Как хорошо, что есть данный ресурс.
Много нового можно узнать.
Научится и стать более грамотным.
14. higs 30.07.12 22:32 Сейчас в теме
Как один из вариантов работы с СКД. Большое спасибо!!!
15. CagoBHuK 32 16.08.12 11:20 Сейчас в теме
А если выставить в параметрах виртуальной таблицы период в "Авто", то можно выбирать, как детализировать записи. ;)
16. sapervodichka 6697 15.12.12 22:40 Сейчас в теме
Да, видимо он об этом не знает
17. Al777 11.07.14 12:19 Сейчас в теме
Статья мне очень сильно помогла при написании отчета на СКД, использовал 1-й вариант.
18. O-Planet 6431 25.02.15 02:26 Сейчас в теме
Спас моего коллегу от ИЦИХа с гвоздями этой статьей. Он уже залазил в него, потратив весь день на секс с СКД. но я нашел ему эту статью. Вопрос решился за 5 минут... ))
CrazyIgi; Bukaska; +2 Ответить
19. Lyns_owner 355 25.02.15 02:34 Сейчас в теме
(18) O-Planet, Рад, что кому-то моя статья была полезна.
20. LSK85 16.10.15 17:25 Сейчас в теме
ох прекрасно, очень помогла. просто, легко и доступно.
21. kip32 09.06.16 13:14 Сейчас в теме
А не подскажите как сделать вывод дат даже тогда когда не было движений?
22. Lyns_owner 355 12.06.16 06:01 Сейчас в теме
(21) kip32, в типовых решениях я бы использовал регистр сведений "регламентированный производственный календарь" для решения такой задачи. Получал бы записи этого регистр с необходимой периодичностью, к ним бы тянул движения (если они есть).
23. CCMD 30.09.16 01:03 Сейчас в теме
Только начал изучать СКД.
Поэтому прошу не пинать и ткнуть носом где описать условия периодичности? Где поле "Период"?
И как настроить условное оформление?
Что-то у меня не выходит получить такой отчет (((. Может есть рабочий пример?
Помогите разобраться пожалуйста.
24. Lyns_owner 355 30.09.16 09:06 Сейчас в теме
(23) CCMD, Условия периодичности указываются в запросе. Поле "Период" берется из исходной таблицы (регистра).
Условное оформление задается в макете СКД.
25. a.za4em 10.10.16 11:20 Сейчас в теме
а если потребуется получить остатки с заданной периодичностью? группировать записи уже не вариант, ибо это не приход/расход которые можно просто суммировать.
26. Lyns_owner 355 16.10.16 23:39 Сейчас в теме
(25) a.za4em, Для каких задач могут потребоваться остатки с заданной периодичностью?
Напоминаю вам, что за постинг в данном форуме $m не начисляются.
27. AlenaSa 30 17.06.17 10:53 Сейчас в теме
Спасибо! рабочий и удобный вариант!
(25) мой отчет выводит остатки на начало периода. Использую таблицу ОстаткиИОбороты и из нее вывожу только ресурс НачальныйОстаток
28. AlenaSa 30 19.06.17 06:31 Сейчас в теме
Не получается у меня исправить предыдущее мое сообщение (либо настройки браузера либо переборщил с блокировками провайдер), поэтому коррекцию его делаю в этом ответе. В СКД остатки с заданной периодичностью настраиваются двумя таблицами . Вот хороший пример http://1c-wiki.ru/wiki/%D0%95%D0%B6%D0%B5%D0%B4%D0%BD%D0%B5%D0%B2%D0%BD%D1%­8B%D0%B5_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8
Lyns_owner; +1 Ответить
29. buzzzard 51 01.02.18 00:23 Сейчас в теме
ВЫБОР
КОГДА ТаблицаДоходовИРасходов.ЭтоНачальныйОстаток = ИСТИНА
ТОГДА ТаблицаДоходовИРасходов.Период
КОГДА &Периодичность = Значение(Перечисление.Периодичность.День)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, ДЕНЬ)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Месяц)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, МЕСЯЦ)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Год)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, ГОД)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Квартал)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, КВАРТАЛ)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Неделя)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, НЕДЕЛЯ)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Декада)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, ДЕКАДА)
КОГДА &Периодичность = Значение(Перечисление.Периодичность.Полугодие)
ТОГДА НАЧАЛОПЕРИОДА(ТаблицаДоходовИРасходов.Период, ПОЛУГОДИЕ)
КОНЕЦ

Размял пальцы...
simich; __MaxImuS__; Stansave; Михаська; user848218; vl-sher1; Lyns_owner; +7 Ответить
30. sinto 03.02.19 17:54 Сейчас в теме
Зачем страшный кусок однообразного кода картинкой? Вообще нафига код картинкой показывать?
31. Lyns_owner 355 05.02.19 09:30 Сейчас в теме
(30)
страшный кусок однообразного кода картинкой? Вообще нафига код картинкой показывать?


Очередной комментарий ради комментария? Уважаемый, идите флудить в другое место.
32. sinto 05.02.19 12:46 Сейчас в теме
(31) ни в коем случае. Гораздо удобнее было показать листинг текстом. Тема была актуальная, вот и набивал с картинки руками - поэтому крик души )) Тема хорошая, помогла
Dmitri93; +1 Ответить
33. Myxa 42 24.05.19 12:53 Сейчас в теме
Добрый день! А никто не сталкивался с задачей вывести отчет с разной периодичностью и промежуточными итогами, имею в виду вот так:

Месяц1 | Месяц2 | Месяц3 | Квартал1 | Месяц4 | Месяц5 | Месяц6 | Квартал2 | Полугодие1 | Месяц7 |... ?

Голову сломал :(
34. acanta 24.05.19 13:08 Сейчас в теме
На каждый итог отдельную функцию заводим и группировка периодичность не требуется.
36. newvideo 13.12.19 12:46 Сейчас в теме
Подскажите пожалуйста как сгруппировать записи в такой таблице? У меня в строках контрагенты, а в колонках суммы по периодам, но сумма другого периода располагается в другой записи тем самым дублируя контрагента. Группировка по контрагентам стоит в запросе. Вначале всё было ок, но когда добавил колонки периодов, то контрагенты стали задваиваться.
Ещё можно сделать группировку СКД, но тогда внутри сгруппированного контрагента появляются несколько записей с этим контрагентом, сколько по нему периодов с суммами.
Как-то можно обойтись группировкой запроса, не СКД?
37. user1773118 15.04.22 14:21 Сейчас в теме
39. doleynikov 08.11.22 15:14 Сейчас в теме
Добрый день!
Выручите, пожалуйста - подскажите с СКД.
Есть ТЗ данные на конец месяца по договорам:
период(дата конца месяца) | номер договора | сумма остатка | сумма оборота | какой-то показатель итд...

передаю ее в макет СКД и делаю некий свод:
колонки - периоды и данные за период
строки - договоры

получаю широкую табличку. Все как положено.

Мне еще нужно получить "сырые данные", то есть просто как есть, без периода в колонках.
Делаю новый макет, делаю новый вариант без строк-столбцов, НО! 1С опять строит широкую простыню! зачем-то пихает период в столбцы как в первом случае! вероятно, где-то закешировались настройки. Как их почистить? может я чего-то не так делаю, не пользовался СКД уже давно, но когда пользовался - система вела себя предсказуемо! А теперь - фигня какая-то. ЧЯДНТ?
Оставьте свое сообщение