Кросс-отчеты в 1С; таблицы значений в 1С

Смотри: Книга Хрусталевой. "Язык запросов 1С:Предприятия"

Глава 2. Работа с запросами во встроенном языке Выполнение запросов из встроенного языка Примеры решения различных задач с использованием запросов Создание кросс-отчета 

https://its.1c.ru/db/pubqlang/content/78/hdoc

стр 194 пишет: "Хотя кросс-отчеты легче, быстрее и методически правильнее формировать с помощью системы компоновки данных..."

Там формируется запрос, после из результата запроса хитрым образом делается выборка и выводится табличный документ.

 

 

 

Книга Хрусталевой "Разработка сложных отчетов" - рассматривает отчеты на СКД

Чтобы шахматной таблицей вывести данные:

нужно, чтобы выбранные периоды были в списке полей запроса;

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

в таблицу выводятся подсчитанные значения ресурсов.

 

 
Тут делается запрос и вывод кросс-таблицы в табличный документ
https://www.youtube.com/watch?v=UipUm1LMUMg


Вот видик, где кросс-таблице формируется средствами СКД
https://www.youtube.com/watch?v=PCbkMaub4_4

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

Наверное, есть другие варианты создания такого отчета! Есть вариант получить суммы или посчитать иные функции через подсчет ресурсов по выбранным группировкам.

------------------------

Вот задачка

https://forum.mista.ru/topic.php?id=858472

 

 Вот близкая к моей задачка

https://forum.mista.ru/topic.php?id=799138

SiAl-chel

13.06.17 - 08:59

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

Задача такова:
1. Есть отчет на СКД с какими-то суммовыми показатели, есть какие-то группировки.
2. Есть таблица значений "периоды" с началом и окончанием периодов, которую пользователь заполняет произвольно.
3. Нужно сделать так, чтобы эти строки из ТЗ "Периоды" стали доступны как поля в СКД, чтобы по ним можно было выводить колонки с суммовыми показателями.

Какие могут быть решения? Я пока вижу только два:
1. Программно менять текст запроса, используя ПОЛНОЕ СОЕДИНЕНИЕ для каждого периода.
2. Выгрузить таблицу периодов во временную таблицу, и потом ее уже соединять с таблицами существующим запросом, чтобы можно было сделать группировки по произвольным периодам.

 

РСА:

 Там сложность, что подсчет оборотов необходимо делать за несколько произвольно заданных датами начала и окончания периодов.

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

 

 

https://forum.mista.ru/topic.php?id=806904

Тут чел хочет нарастающий итог или что? Не понял задачу.

 

Вот в пользовательском режиме чел настраивает вывод оборотов по периодам в колонках. Все элементарно!

https://www.youtube.com/watch?v=UEcwn2GmPOk

 

 -----------------

 


Смотри про таблицы значений

https://www.youtube.com/watch?v=uPZXDuWwsFw

 

 

https://paste1c.ru/32j7ex2mr7vn

// Заполняет переданный объект на основании СКД
//
// Параметры
//
//  СКД – собствеено настройки СКД
//
//  ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
//  ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
//  СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
//  краткий лекбез, поправлю позже
//
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ИсполняемыеНастройки = Неопределено, ОбъектДляЗагрузки, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
    Иначе
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КонецЕсли;

    Если ИсполняемыеНастройки = Неопределено Тогда
        ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;
    КонецЕсли;

    Если СтруктураПараметров <> Неопределено Тогда
        КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;
        Для каждого Параметр Из СтруктураПараметров Цикл
            НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);
            Если НайденноеЗначениеПараметра <> Неопределено Тогда
                НайденноеЗначениеПараметра.Использование = Истина;
                НайденноеЗначениеПараметра.Значение = Параметр.Значение;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

    МакетКомпоновкиСКД = КомпоновщикМакета.Выполнить(СКД, ИсполняемыеНастройки, РасшифровкаСКД, МакетКомпоновки, ТипГенератора);
    ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпановки.Инициализировать(МакетКомпоновкиСКД, ВнешниеНаборыДанных, РасшифровкаСКД, Истина);
    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);
    Иначе
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);
    КонецЕсли;

    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);

КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()