Есть отчет на СКД, который выводит данные по объемам продаж, заказов, поступлений, трансферов, остатков, с пересчетом в выбранную валюту, с выводом сумм в закупочных ценах, с получением текущих розничных цен, первых цен. - Это я к тому, что данных много.. пока все в одном наборе данных с несколькими пакетами запросов. Все получается в запросе (всмысле внешних наборов данных не используется).
Настройки отчета в полном объеме доступны пользователям, т.к. брендменеджеры крутят данные по-разному.
Сейчас все данные нормально раскладываются по периодам (по месяцам, по неделям, по дням и т.п.). Остатки всегда получаются на конец периода отчета, а просят, чтобы остатки тоже можно было получать по периодам.
Если вместо таблицы остатков беру таблицу остатков и оборотов, но не выставляю роли для полей, то естественно показатели остатков в итогах рассчитываются неверно - выводится сумма остатков по всем показанным периодам, а не остаток на конец последнего периода.
Сделал упрощенный вариант отчета, где получаю только продажи и остатки (таблица остатки и обороты), а потом к этим данным получаю текущие розничные цены. Настроил как нужно роли для полей. Пока не добавил получение розничных цен - выводило верно, но после усложнения запроса (исходное объединение продаж и остатков поместил во временную таблицу и добавил левое соединение к регистру цен) - просто не могу дождаться результата отчета. Как только убираю роли со всех полей - результат есть, но опять же итоги по остаткам неверные...
Кто-нибудь реализовывал такие отчеты на СКД? Подскажите методику или направление.. от использования СКД отказываться не хочется.
Без примера трудно что-то советовать. Если возможно, сделайте, пожалуйста, простую конфигурацию для демонстрации проблемы.
Особенно это не понятно как воспроизвести
после усложнения запроса (...) - просто не могу дождаться результата отчета. Как только убираю роли со всех полей - результат есть
Если вместо таблицы остатков беру таблицу остатков и оборотов, но не выставляю роли для полей, то естественно показатели остатков в итогах рассчитываются неверно - выводится сумма остатков по всем показанным периодам, а не остаток на конец последнего периода.
А покажите структуру отчета. Хотя бы просто в экселе накидайте внешний вид.
Можно выбрать данные запросом, сформировать таблицу значений, программно добавить колонку итог за неделю, итог за месяц, передать таблицу значений в отчет как внешний набор данных.
(4) не очень представляю как мне соединять наборы при произвольных настройках отчета, чтобы были правильные итоги по всем уровням группировок
(2) (5) пример.. даже не знаю, конфа УТ 11 сильно дописанная, да и данные нужны, база уже под 50 гб, на пустой не думаю, что будут проблемы.
Ок, попробую развернуть демку типовой УТ и там что-нить аналогичное сделать
Особенно это не понятно как воспроизвести
вот пример, может проще вам такое к своей базе адаптировать:
запрос:
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Склад,
ТоварыНаСкладахОстатки.Номенклатура,
ТоварыНаСкладахОстатки.Характеристика,
ТоварыНаСкладахОстатки.ПериодДень,
ТоварыНаСкладахОстатки.ПериодНеделя,
ТоварыНаСкладахОстатки.ПериодМесяц,
ТоварыНаСкладахОстатки.ПериодГод,
ТоварыНаСкладахОстатки.ВНаличииКонечныйОстаток КАК КоличествоКонечныйОстаток,
ТоварыНаСкладахОстатки.Помещение,
ТоварыНаСкладахОстатки.ВНаличииНачальныйОстаток КАК КоличествоНачальныйОстаток,
NULL КАК КоличествоПродаж,
NULL КАК СуммаПродаж
ПОМЕСТИТЬ ОсновныеДанные
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты({(&ПериодОт)}, {(&ПериодДо)}, Авто, , {(Склад).* КАК Склад, (Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ТоварыНаСкладахОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПродажиРозницаОбороты.Склад,
ПродажиРозницаОбороты.Номенклатура,
ПродажиРозницаОбороты.Характеристика,
ПродажиРозницаОбороты.ПериодДень,
ПродажиРозницаОбороты.ПериодНеделя,
ПродажиРозницаОбороты.ПериодМесяц,
ПродажиРозницаОбороты.ПериодГод,
NULL,
NULL,
NULL,
ПродажиРозницаОбороты.КоличествоОборот,
ПродажиРозницаОбороты.СуммаОборот
ИЗ
РегистрНакопления.ПродажиРозница.Обороты({(&ПериодОт)}, {(&ПериодДо)}, Авто, {(Склад).* КАК Склад, (Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ПродажиРозницаОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ОсновныеДанные.Склад,
ОсновныеДанные.Номенклатура,
ОсновныеДанные.Характеристика,
ОсновныеДанные.ПериодДень,
ОсновныеДанные.ПериодНеделя,
ОсновныеДанные.ПериодМесяц,
ОсновныеДанные.ПериодГод,
ОсновныеДанные.КоличествоКонечныйОстаток,
ОсновныеДанные.Помещение,
ОсновныеДанные.КоличествоНачальныйОстаток,
ОсновныеДанные.КоличествоПродаж,
ОсновныеДанные.СуммаПродаж,
ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
ОсновныеДанные КАК ОсновныеДанные
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
{(&ПериодДо)},
ВидЦены = &Розничная
И (Номенклатура, Характеристика) В
(ВЫБРАТЬ
ОсновныеДанные.Номенклатура,
ОсновныеДанные.Характеристика
ИЗ
ОсновныеДанные КАК ОсновныеДанные) {(Номенклатура.Марка).* КАК зБренд, (Номенклатура.Артикул) КАК зАртикул, (Номенклатура.НаименованиеПоставщика) КАК зНаименованиеПоставщика, (Номенклатура.КодТовараПоставщика) КАК зКодТовараПоставщика, (Номенклатура.Пол).* КАК зПол, (Номенклатура.Блок).* КАК зБлок, (Номенклатура.Линия).* КАК зЛиния, (Характеристика.Цвет).* КАК зЦвет, (Характеристика.Тема).* КАК зТема, (Характеристика.Подтема).* КАК зПодтема, (Характеристика.РазмерПоставщика).* КАК зРазмерПоставщика, (Характеристика.Сезон).* КАК зСезон}) КАК ЦеныНоменклатурыСрезПоследних
ПО ОсновныеДанные.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
И ОсновныеДанные.Характеристика = ЦеныНоменклатурыСрезПоследних.Характеристика
Показать
тестировал на таких настройках (но это просто пример, их могут менять как угодно):
Пока не прописываю роли у полей - отчет формируется, но неверные итоги при выводе группировок по периодам.
Как только прописываю роли (периоды, измерения и поля остатков - все по аналогии с типовой обороткой по складу), чтобы СКД сама считала остатки по периодам - то выполнение отчета висит.. минут 10-15 ждал и обрубал.
Описанный отчет можно реализовать на СКД, но без примера и правда сложно что то советовать. Если критичность лишь в остатках на дату то можно их получать отдельно с периодичностью "ДЕНЬ", и уже крепить к остальному отчету.
(7) как это пользователю настроить в выводе? хотите, чтобы он делал отдельные группировки для вывода итогов? - в деталях выводим поле Сумма, в итогах по месяцам поле ИтогЗаМесяц и т.д. и, видимо, продолжая логику нужно поле ОбщийИтог, т.к. сейчас просуммировав ИтогЗаМесяц мы получим все тот же неверный общий итог.
(8) Ну как бы суммировать колонку ИтогЗаМесяц действительно будет некрасиво :) то есть штатное подбитие итогов по колонкам действительно при таком раскладе проще будет вообще отключить...
(11) Скрин с остатками покажите по месяцам и что у вас получается в мини-отчете.
Я тоже на днях бился с этой проблемой - в итоге поборол только тем, что положил объединение во вложенный запрос. У меня все более-менее хорошо было, из-за того что объединял две таблицы ОстаткиИОбороты и в обеих были обороты
(12) так с использованием двух таблиц и у меня получается, проблема в том, что дальнейшее усложнение запроса приводит к неприемлемому времени выполнения.
Пока эту задачу отложили.. поэтому ей и не занимаюсь, надеюсь позже вернусь к ней, т.к. самому интересно )
Можно попробовать сделать разные разрезы в которых считаются остатки, т.е. поля Склад, Номенклатура продублировать - по одним считать остатки, по другим ничего.
На вкладке вычисляемые поля выполнить подмену
(13) - плохой совет.
На прошлой неделе решал такую задачу. Буду писать публикацию.
Суть метода корректного расчета итогов в СКД, при использовании нескольких разделов учета:
1. В запросе используем таблицу(ы) ОстаткиИОбороты
2. В запросе для каждого раздела учета создаем поле "Раздел". Для каждого запроса объединения, пишем туда уникальное значение. Для вашего примера я бы принял такие разделы: "1. Товары на складах", "2. Продажи розница"
3. В запросе выбираем все нужные поля, в т.ч. поле раздел
4. В СКД настраиваем роли для полей остатков(это СКД сделает сама)
5. Очень важный момент! В СКД для поля "Раздел" ставим роль "Измерение" и галку "Обязательное"
(18) ну вот если теперь вы все это обернете во вложенный запрос и получите к нему актуальные цены из регистра Цены номенклатуры и не "поплывут" остатки, то это будет уже близко к моей цели )
(19)Если данный запрос "обернуть во вложенный" и сделать детализацию(например по дням) - остатки неправильно считает. Причем роли указаны верно. Не могу понять такое поведение СКД...
остатки с оборотами ~ мухи с котлетами ИМХО до сих пор в СКД красиво не сделать, только если в процедуре запрос подменить (динамически сформировать) мб даже с костылями в виде цикла с генерацией полей.
и тогда можно по датам хоть по дням хоть по 2-3 дня хоть по неделям/и.д. группировать в колонках