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

18.04.12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    246697    1353    419    

1132

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5125    288    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15910    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9269    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8449    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

27.02.2025    15585    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13156    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9642    AlexeyPROSTO_1C    1    

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


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

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

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

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


КОГДА &Периодичность = ЗНАЧЕНИЕ(Перечисление.Периодичность.День)
ТОГДА НАЧАЛОПЕРИОДА(МойРегистр.Период, ДЕНЬ)
?
Lyns_owner; +1 Ответить
5. Lyns_owner 356 18.04.12 10:22 Сейчас в теме
(4) MRAK, Спасибо) В изначальном варианте именно так) Ума не приложу, как так вышло).
6. wowkai 4 18.04.12 10:33 Сейчас в теме
интересная заметка. давно задавался вопросом как корректно и легко делать группировку по периодах в отчетах на СКД. Спасибо!
7. Laertid 104 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 104 19.04.12 09:40 Сейчас в теме
М-м, пересмотрел свою публикацию - она предлагает точь в точь тот же выход, что и предложенный автором статьи тут. Только написана мною уже давно.
Кстати, в итоге я теперь предпочитаю выносить этот ВЫБОР из запроса и создавать новое вычисляемое поле с такой же формулой. Разницы по нагрузке нету, а в разработке удобнее получается.
9. Lyns_owner 356 19.04.12 10:02 Сейчас в теме
(8) Laertid, Действительно, похоже. Но, насколько я понял, вы используете предложенный мной метод, как один из возможных. Я же описываю методику от и до. Кроме того, существование вашей публикации не делает мою публикацию хуже - это не основание понижать ее рейтинг.
10. maloi_a 25.04.12 08:11 Сейчас в теме
Замечание.
"Когда ТаблицаДоходовИРасходов.ЭтоНачальныйОстаток = Истина"
можно заменить на простое
"Когда ТаблицаДоходовИРасходов.ЭтоНачальныйОстаток"
или опустить совсем.
rayastar; Lyns_owner; +2 Ответить
11. Lyns_owner 356 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 7527 15.12.12 22:40 Сейчас в теме
Да, видимо он об этом не знает
17. Al777 11.07.14 12:19 Сейчас в теме
Статья мне очень сильно помогла при написании отчета на СКД, использовал 1-й вариант.
18. O-Planet 6457 25.02.15 02:26 Сейчас в теме
Спас моего коллегу от ИЦИХа с гвоздями этой статьей. Он уже залазил в него, потратив весь день на секс с СКД. но я нашел ему эту статью. Вопрос решился за 5 минут... ))
CrazyIgi; Bukaska; +2 Ответить
19. Lyns_owner 356 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 356 12.06.16 06:01 Сейчас в теме
(21) kip32, в типовых решениях я бы использовал регистр сведений "регламентированный производственный календарь" для решения такой задачи. Получал бы записи этого регистр с необходимой периодичностью, к ним бы тянул движения (если они есть).
23. CCMD 30.09.16 01:03 Сейчас в теме
Только начал изучать СКД.
Поэтому прошу не пинать и ткнуть носом где описать условия периодичности? Где поле "Период"?
И как настроить условное оформление?
Что-то у меня не выходит получить такой отчет (((. Может есть рабочий пример?
Помогите разобраться пожалуйста.
24. Lyns_owner 356 30.09.16 09:06 Сейчас в теме
(23) CCMD, Условия периодичности указываются в запросе. Поле "Период" берется из исходной таблицы (регистра).
Условное оформление задается в макете СКД.
25. a.za4em 10.10.16 11:20 Сейчас в теме
а если потребуется получить остатки с заданной периодичностью? группировать записи уже не вариант, ибо это не приход/расход которые можно просто суммировать.
26. Lyns_owner 356 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; Михаська; serpentweb; vl-sher1; Lyns_owner; +7 Ответить
30. sinto 03.02.19 17:54 Сейчас в теме
Зачем страшный кусок однообразного кода картинкой? Вообще нафига код картинкой показывать?
31. Lyns_owner 356 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С опять строит широкую простыню! зачем-то пихает период в столбцы как в первом случае! вероятно, где-то закешировались настройки. Как их почистить? может я чего-то не так делаю, не пользовался СКД уже давно, но когда пользовался - система вела себя предсказуемо! А теперь - фигня какая-то. ЧЯДНТ?
Для отправки сообщения требуется регистрация/авторизация