Отчет на СКД с остатками по периодам

1. sommid 31.05.17 15:55 Сейчас в теме
Есть отчет на СКД, который выводит данные по объемам продаж, заказов, поступлений, трансферов, остатков, с пересчетом в выбранную валюту, с выводом сумм в закупочных ценах, с получением текущих розничных цен, первых цен. - Это я к тому, что данных много.. пока все в одном наборе данных с несколькими пакетами запросов. Все получается в запросе (всмысле внешних наборов данных не используется).

Настройки отчета в полном объеме доступны пользователям, т.к. брендменеджеры крутят данные по-разному.

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

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

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

Кто-нибудь реализовывал такие отчеты на СКД? Подскажите методику или направление.. от использования СКД отказываться не хочется.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Armando 1399 01.06.17 00:21 Сейчас в теме
Без примера трудно что-то советовать. Если возможно, сделайте, пожалуйста, простую конфигурацию для демонстрации проблемы.
Особенно это не понятно как воспроизвести
после усложнения запроса (...) - просто не могу дождаться результата отчета. Как только убираю роли со всех полей - результат есть
3. kot30688 3 01.06.17 01:31 Сейчас в теме
Добрый день!
Если вместо таблицы остатков беру таблицу остатков и оборотов, но не выставляю роли для полей, то естественно показатели остатков в итогах рассчитываются неверно - выводится сумма остатков по всем показанным периодам, а не остаток на конец последнего периода.
А покажите структуру отчета. Хотя бы просто в экселе накидайте внешний вид.
4. YanTsys 12 01.06.17 08:32 Сейчас в теме
Можно выбрать данные запросом, сформировать таблицу значений, программно добавить колонку итог за неделю, итог за месяц, передать таблицу значений в отчет как внешний набор данных.
6. sommid 01.06.17 09:55 Сейчас в теме
(4) не очень представляю как мне соединять наборы при произвольных настройках отчета, чтобы были правильные итоги по всем уровням группировок
(2) (5) пример.. даже не знаю, конфа УТ 11 сильно дописанная, да и данные нужны, база уже под 50 гб, на пустой не думаю, что будут проблемы.
Ок, попробую развернуть демку типовой УТ и там что-нить аналогичное сделать

Особенно это не понятно как воспроизвести

вот пример, может проще вам такое к своей базе адаптировать:
запрос:
ВЫБРАТЬ
	ТоварыНаСкладахОстатки.Склад,
	ТоварыНаСкладахОстатки.Номенклатура,
	ТоварыНаСкладахОстатки.Характеристика,
	ТоварыНаСкладахОстатки.ПериодДень,
	ТоварыНаСкладахОстатки.ПериодНеделя,
	ТоварыНаСкладахОстатки.ПериодМесяц,
	ТоварыНаСкладахОстатки.ПериодГод,
	ТоварыНаСкладахОстатки.ВНаличииКонечныйОстаток КАК КоличествоКонечныйОстаток,
	ТоварыНаСкладахОстатки.Помещение,
	ТоварыНаСкладахОстатки.ВНаличииНачальныйОстаток КАК КоличествоНачальныйОстаток,
	NULL КАК КоличествоПродаж,
	NULL КАК СуммаПродаж
ПОМЕСТИТЬ ОсновныеДанные
ИЗ
	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты({(&ПериодОт)}, {(&ПериодДо)}, Авто, , {(Склад).* КАК Склад, (Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ТоварыНаСкладахОстатки

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ПродажиРозницаОбороты.Склад,
	ПродажиРозницаОбороты.Номенклатура,
	ПродажиРозницаОбороты.Характеристика,
	ПродажиРозницаОбороты.ПериодДень,
	ПродажиРозницаОбороты.ПериодНеделя,
	ПродажиРозницаОбороты.ПериодМесяц,
	ПродажиРозницаОбороты.ПериодГод,
	NULL,
	NULL,
	NULL,
	ПродажиРозницаОбороты.КоличествоОборот,
	ПродажиРозницаОбороты.СуммаОборот
ИЗ
	РегистрНакопления.ПродажиРозница.Обороты({(&ПериодОт)}, {(&ПериодДо)}, Авто, {(Склад).* КАК Склад, (Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ПродажиРозницаОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ОсновныеДанные.Склад,
	ОсновныеДанные.Номенклатура,
	ОсновныеДанные.Характеристика,
	ОсновныеДанные.ПериодДень,
	ОсновныеДанные.ПериодНеделя,
	ОсновныеДанные.ПериодМесяц,
	ОсновныеДанные.ПериодГод,
	ОсновныеДанные.КоличествоКонечныйОстаток,
	ОсновныеДанные.Помещение,
	ОсновныеДанные.КоличествоНачальныйОстаток,
	ОсновныеДанные.КоличествоПродаж,
	ОсновныеДанные.СуммаПродаж,
	ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
	ОсновныеДанные КАК ОсновныеДанные
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
				{(&ПериодДо)},
				ВидЦены = &Розничная
					И (Номенклатура, Характеристика) В
						(ВЫБРАТЬ
							ОсновныеДанные.Номенклатура,
							ОсновныеДанные.Характеристика
						ИЗ
							ОсновныеДанные КАК ОсновныеДанные) {(Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ЦеныНоменклатурыСрезПоследних
		ПО ОсновныеДанные.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
			И ОсновныеДанные.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
Показать


тестировал на таких настройках (но это просто пример, их могут менять как угодно):

Пока не прописываю роли у полей - отчет формируется, но неверные итоги при выводе группировок по периодам.
Как только прописываю роли (периоды, измерения и поля остатков - все по аналогии с типовой обороткой по складу), чтобы СКД сама считала остатки по периодам - то выполнение отчета висит.. минут 10-15 ждал и обрубал.
Прикрепленные файлы:
5. SyachinS 01.06.17 08:51 Сейчас в теме
Описанный отчет можно реализовать на СКД, но без примера и правда сложно что то советовать. Если критичность лишь в остатках на дату то можно их получать отдельно с периодичностью "ДЕНЬ", и уже крепить к остальному отчету.
7. YanTsys 12 01.06.17 10:45 Сейчас в теме
Период Контрагент Номенклатура Сумма ИтогоЗаМесяц ИтогоЗаНеделю
17.03.2017 ОООРомашка Кастрюля 1500 0 0
21.04.2017 ОООПетрушка Чайник 3000 0 0
Добавляем строки с итогами
31.03.2017 ОООРомашка Кастрюля 0 1500 0
30.04.2017 ОООПетрушка Чайник 0 3000 0
19.03.2017 ОООРомашка Кастрюля 0 0 1500
23.04.2017 ОООПетрушка Чайник 0 0 3000

Скармливаем всю таблицу значений СКД а она сама при любых группировках подобьет итоги
8. sommid 01.06.17 10:52 Сейчас в теме
(7) как это пользователю настроить в выводе? хотите, чтобы он делал отдельные группировки для вывода итогов? - в деталях выводим поле Сумма, в итогах по месяцам поле ИтогЗаМесяц и т.д. и, видимо, продолжая логику нужно поле ОбщийИтог, т.к. сейчас просуммировав ИтогЗаМесяц мы получим все тот же неверный общий итог.
10. YanTsys 12 01.06.17 14:52 Сейчас в теме
(8) Ну как бы суммировать колонку ИтогЗаМесяц действительно будет некрасиво :) то есть штатное подбитие итогов по колонкам действительно при таком раскладе проще будет вообще отключить...
11. sommid 01.06.17 16:48 Сейчас в теме
(10) ну так оно сейчас так и работает без прописанных ролей, проблема именно в расчете итогов при использовании полей-периодов
12. echo77 1868 12.06.17 21:07 Сейчас в теме
(11) Скрин с остатками покажите по месяцам и что у вас получается в мини-отчете.
Я тоже на днях бился с этой проблемой - в итоге поборол только тем, что положил объединение во вложенный запрос. У меня все более-менее хорошо было, из-за того что объединял две таблицы ОстаткиИОбороты и в обеих были обороты
14. sommid 13.06.17 09:34 Сейчас в теме
(12) так с использованием двух таблиц и у меня получается, проблема в том, что дальнейшее усложнение запроса приводит к неприемлемому времени выполнения.
Пока эту задачу отложили.. поэтому ей и не занимаюсь, надеюсь позже вернусь к ней, т.к. самому интересно )
9. Matveev_VS 159 01.06.17 11:35 Сейчас в теме
Выложите отчет, посмотрим
13. echo77 1868 12.06.17 21:13 Сейчас в теме
Можно попробовать сделать разные разрезы в которых считаются остатки, т.е. поля Склад, Номенклатура продублировать - по одним считать остатки, по другим ничего.
На вкладке вычисляемые поля выполнить подмену
15. echo77 1868 17.11.17 05:54 Сейчас в теме
(13) - плохой совет.
На прошлой неделе решал такую задачу. Буду писать публикацию.
Суть метода корректного расчета итогов в СКД, при использовании нескольких разделов учета:
1. В запросе используем таблицу(ы) ОстаткиИОбороты
2. В запросе для каждого раздела учета создаем поле "Раздел". Для каждого запроса объединения, пишем туда уникальное значение. Для вашего примера я бы принял такие разделы: "1. Товары на складах", "2. Продажи розница"
3. В запросе выбираем все нужные поля, в т.ч. поле раздел
4. В СКД настраиваем роли для полей остатков(это СКД сделает сама)
5. Очень важный момент! В СКД для поля "Раздел" ставим роль "Измерение" и галку "Обязательное"

Все. В публикации подробно опишу с картинками
16. sommid 17.11.17 13:48 Сейчас в теме
(15) ок, спасибо. если не трудно, то скиньте сюда ссылку. У меня пока все в долгий ящик отложено..
17. vadim1011985 99 17.11.17 14:31 Сейчас в теме
А если программно в настройках полях группировок для поля периода выбирать тип дополнения и передавать параметры периода дат ? не прокатит ?
Прикрепленные файлы:
19. sommid 20.11.17 09:49 Сейчас в теме
(18) ну вот если теперь вы все это обернете во вложенный запрос и получите к нему актуальные цены из регистра Цены номенклатуры и не "поплывут" остатки, то это будет уже близко к моей цели )
20. echo77 1868 20.11.17 10:57 Сейчас в теме
(19)
Прикрепленные файлы:
23. alexsey777 29.01.19 06:30 Сейчас в теме
(19)Если данный запрос "обернуть во вложенный" и сделать детализацию(например по дням) - остатки неправильно считает. Причем роли указаны верно. Не могу понять такое поведение СКД...
Прикрепленные файлы:
24. echo77 1868 29.01.19 06:56 Сейчас в теме
(23) Посмотрите пост №15, п.5
5. Очень важный момент! В СКД для поля "Раздел" ставим роль "Измерение" и галку "Обязательное"
21. succub1_5 88 20.11.17 11:32 Сейчас в теме
остатки с оборотами ~ мухи с котлетами ИМХО до сих пор в СКД красиво не сделать, только если в процедуре запрос подменить (динамически сформировать) мб даже с костылями в виде цикла с генерацией полей.
и тогда можно по датам хоть по дням хоть по 2-3 дня хоть по неделям/и.д. группировать в колонках
22. echo77 1868 20.11.17 12:47 Сейчас в теме
(21) Сделать можно - несколько раз так делал,с помощью СКД два варианта: Соединение 2 наборов данных, или объединение
25. dst 24 29.01.19 13:56 Сейчас в теме
Скорее всего запрос виснет из-за "РегистрСведений.ЦеныНоменклатуры.СрезПоследних(", попробуй без него.
26. echo77 1868 29.01.19 14:10 Сейчас в теме
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день