Имя: Пароль:
1C
1С v8
СКД вывод независимых наборов данных горизонтально
,
0 commdt
 
21.05.15
15:43
До сих пор я думал, что разбираюсь в СКД, но тут возникла задача написать отчёт наподобие:
___________________________
|НаборДанных1|НаборДанных2|
|____________|____________|

Наборы между собой по сути не связаны, т.е. поля группировки и количество строк в них совершенно разные. По вертикали вывести независимые наборы данных не составляет труда, но вот с таким вариантом всё не так просто.
Вывести разные наборы данных в виде вложенных схем в колонках таблицы не удалось - их нельзя выбирать в колонках даже через группировку.
Вывести какое-то условное поле, например "Приход" (НаборДанных1) и "Расход" (НаборДанных2) в столбцах таблицы можно, но все дальнейшие группировки тоже становятся столбцами. Выводить внутренние группировки как ресурсы нельзя, ибо тогда они суммируются, а нужна разбивка по строкам с промежуточными итогами. Если добавить в строки какую-то условную группировку, чтобы ресурсы разбились по строкам, это срабатывает только для одного набора данных, даже если выбрать группировку по полю Дата, которая присутствует в обоих наборах данных.
Короче, я в тупике. Похоже остаётся только строить это чудо по старинке вручную.

Да, форма утверждена госзаказчиком, и это намертво, так что с комментариями, наподобие, "не морочься и сделай вертикально" просьба не обращаться.
1 РазДва
 
21.05.15
16:17
(1) Постобработкой табличного документа "выдрать" область и вставить её "справа"
2 commdt
 
21.05.15
16:42
(1) Хм, а это отличная идея. Спасибо
3 commdt
 
25.05.15
16:24
Если кому-то вдруг понадобится.
Лучше всего в макете группировок оставить пустые столбцы (в моём случае слева), в которых будет располагаться второй набор данных. В таком случае проще подобрать ширину столбцов и не придётся заморачиваться со сдвигом области.
Соответстветственно, под пустыми стобцами рисуете макет группировки, которую нужно туда вставить, а модуле объекта вставляете процедуру наподобие:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Настройки = КомпоновщикНастроек.Настройки;  
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,,Истина);
    ДокументРезультат.Очистить();
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    //ДокументРезультат = Новый ТабличныйДокумент;
    
    ВысотаТабДок = ДокументРезультат.ВысотаТаблицы;
    
    ЕстьПриход = Ложь;
    Для ПерваяСтрока = 13 По ВысотаТабДок Цикл
        Если НЕ ДокументРезультат.Область("R" + ПерваяСтрока + "C1").Текст = "" Тогда
            ЕстьПриход = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если ЕстьПриход Тогда
        
        ПоследняяСтрока = 13 + ВысотаТабДок - ПерваяСтрока;
        
        ОбластьИсточник = ДокументРезультат.Область("R" + ПерваяСтрока + "C1:R" + ВысотаТабДок + "C4");
        ОбластьПриемник = ДокументРезультат.Область("R13C1:R" + ПоследняяСтрока + "C4");
        ДокументРезультат.ВставитьОбласть(ОбластьИсточник,ОбластьПриемник);
        
        ДокументРезультат.УдалитьОбласть(ОбластьИсточник);
        
    КонецЕсли;
    
КонецПроцедуры

13 - первая пустая строка
4 - количество столбцов под второй набор данных
Стандартную обработку отключать обязательно, иначе ничего не произойдёт.
4 РазДва
 
25.05.15
17:17
(3) Какой удобный человек, накинул ему идею - ушел-сделал.
5 Desna
 
25.05.15
17:25
(4) еще и тему назвал как надо
6 Desna
 
25.05.15
17:26
имха, такое и через свой макет прокатит