Имя: Пароль:
1C
1С v8
Свернуть группировки в отчете на скд
0 bebibo
 
29.01.21
10:03
Здравствуйте!
В какой процедуре при открытии скрыть группировки отчета построенного на СКД?
Так не работает:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    КоличествоУровней = ДокументРезультат.КоличествоУровнейГруппировокСтрок();
    Для Уровень = 1 По КоличествоУровней - 1 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(КоличествоУровней - Уровень);
    КонецЦикла;
КонецПроцедуры
1 bebibo
 
29.01.21
10:05
КоличествоУровней = 0
2 bebibo
 
29.01.21
10:26
Есть мысль создать форму и там результат отчета группировать, но не понятно в какое событие
3 bebibo
 
29.01.21
10:33
Никто не знает?
4 fisher
 
29.01.21
10:38
(0) Конечно, так не работает. Ты ведь стандартную обработку не отключал.
Это сработает, только если ты отключишь стандартную обработку, сделаешь компоновку програмно и потом вот это вот.
5 bebibo
 
29.01.21
10:44
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ДокументРезультат.ПоказатьУровеньГруппировокСтрок(2); // тут указать нужный уровень
    СтандартнаяОбработка = Ложь;
КонецПроцедуры


При таком коде в программном коде возникает ошибка: "Синтаксическая ошибка УправлениеОтчетамиВРем.ПреобразоватьУИД"
6 bebibo
 
29.01.21
10:45
(4) По нажатию на кнопку сформировать ничего не происходит, если так написать:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;

    КоличествоУровней = ДокументРезультат.КоличествоУровнейГруппировокСтрок();
    Для Уровень = 1 По КоличествоУровней - 1 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(КоличествоУровней - Уровень);
    КонецЦикла;
КонецПроцедуры
7 bebibo
 
29.01.21
10:57
(5) Что не так в этом коде? ((
8 ДенисЧ
 
29.01.21
11:04
(6) А где формирование табдока?
У тебя этот код выполняется ДО компоновки...
9 ДенисЧ
 
29.01.21
11:04
Точнее, вместо...
10 bebibo
 
29.01.21
11:05
Вот с этим кодом нет ошибки, но группировка не меняется

СтандартнаяОбработка = Ложь;
КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
//ДокументРезультат.ПоказатьУровеньГруппировокСтрок(YYYYY);
ДокументРезультат.ПоказатьУровеньГруппировокСтрок(2);
11 fisher
 
29.01.21
11:06
(10) Нормальный код. Воткни вместо последней строки сабжевую конструкцию.
12 bebibo
 
29.01.21
11:10
(11) Какаю, какую конструкцию?)))
13 toypaul
 
гуру
29.01.21
11:10
Точно сработает если у отчета есть форма. И в ней сделать свою кнопку формирования, в которой вызвать

СкомпоноватьРезультат

а потом уже все что хочешь

некоторые моменты не работают в ПриКомпоновкеРезультата
14 bebibo
 
29.01.21
11:12
(13) Добавить кнопку и в ней добавить этот код?

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

ДокументРезультат.ПоказатьУровеньГруппировокСтрок(2);
15 fisher
 
29.01.21
11:15
(12) Которая в твоей теме была описана

КоличествоУровней = ДокументРезультат.КоличествоУровнейГруппировокСтрок();
Для Уровень = 1 По КоличествоУровней - 1 Цикл
     ДокументРезультат.ПоказатьУровеньГруппировокСтрок(КоличествоУровней - Уровень);
КонецЦикла;
16 bebibo
 
29.01.21
11:21
(15) Почему то количество группировок = 2..В программном коде смотрю..
17 bebibo
 
29.01.21
11:21
(16) Это не так, у меня их 4
18 fisher
 
29.01.21
11:23
(17) Ну, у меня работает вообще вот такой тупой код:

    // свернем группировки
    Для ОтрицательныйНомер = -9 По 0 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(-ОтрицательныйНомер);
        ДокументРезультат.ПоказатьУровеньГруппировокКолонок(-ОтрицательныйНомер);
    КонецЦикла;
19 repin_mike
 
29.01.21
11:28
У меня работает так:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.Настройки;
    ЭД = Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура");
    ЭД.Значение = Справочники.НоменклатураОбмена.Ололо.Номенклатура;
    ЭД.Использование = Истина;
    
    Настройки = КомпоновщикНастроек.Настройки;
    ЭД = Настройки.ПараметрыДанных.Элементы.Найти("Склад");
    ЭД.Значение = Справочники.Склады.НайтиПоНаименованию("Основной склад");
    ЭД.Использование = Истина;
    
    КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(Настройки);
    КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(КомпоновщикНастроек.ПользовательскиеНастройки);
    КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки());
    
    
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ДокументРезультат.ПоказатьУровеньГруппировокСтрок(0);   //Уровень 1
КонецПроцедуры
20 bebibo
 
29.01.21
11:28
(18) С таким кодом в отчет выводит только название колонок, полей нет, группировок тоже соответственно
21 fisher
 
29.01.21
11:30
(20) Понятия не имею, в чем у тебя проблема. У меня все работает отлично годами.
Как вариант, форма отчета переопределена и там еще какая-то магия происходит.
22 fisher
 
29.01.21
11:34
(20) Попробуй не по 0, а по -1 или по -2, как вариант. У меня довольно старый релиз. Возможно в новых поведение несколько изменили.
23 bebibo
 
29.01.21
11:34
(19) Мне настройки не нужны. Делаю так, по нажатию кнопки, ничего не происходит
СтандартнаяОбработка = Ложь;
    //Настройки = КомпоновщикНастроек.Настройки;
    //ЭД = Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура");
    //ЭД.Значение = Справочники.НоменклатураОбмена.Ололо.Номенклатура;
    //ЭД.Использование = Истина;
    //
    //Настройки = КомпоновщикНастроек.Настройки;
    //ЭД = Настройки.ПараметрыДанных.Элементы.Найти("Склад");
    //ЭД.Значение = Справочники.Склады.НайтиПоНаименованию("Основной склад");
    //ЭД.Использование = Истина;
    
    КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    //КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(Настройки);
    КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(КомпоновщикНастроек.ПользовательскиеНастройки);
    КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки());
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ДокументРезультат.ПоказатьУровеньГруппировокСтрок(0);  //Уровень 1
24 bebibo
 
29.01.21
11:37
(22) Вот что в результате:
https://dropmefiles.com/DsKq2

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

Для ОтрицательныйНомер = -9 По -2 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(-ОтрицательныйНомер);
        ДокументРезультат.ПоказатьУровеньГруппировокКолонок(-ОтрицательныйНомер);
    КонецЦикла;
КонецПроцедуры
25 fisher
 
29.01.21
11:38
(23) Нафига ты настройки перехерил? Используй свод код из (14), экспериментатор хренов.
26 bebibo
 
29.01.21
11:40
(25) Настройки убраны, потому что что мне там искать?? У меня в них период, дата начала и дата окончания. Что мне писать в них (в примере номенклатура и склад)
27 fisher
 
29.01.21
11:41
Замени
Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
на
Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
28 fisher
 
29.01.21
11:42
В (5) у тебя был вариант, похожий на правильный.
29 fisher
 
29.01.21
11:44
В КомпоновщикНастроек.Настройки - не применяются пользовательские настройки. А в КомпоновщикНастроек.ПолучитьНастройки() - применяются.
30 fisher
 
29.01.21
11:45
Короче, добейся сначала корректной программной компоновки, а потом свертку добавляй.
31 bebibo
 
29.01.21
11:50
При нажатии на кнопку "Сформировать" ошибка:
https://dropmefiles.com/5sjHO

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

КоличествоУровней = ДокументРезультат.КоличествоУровнейГруппировокСтрок();
    Для Уровень = 1 По КоличествоУровней - 1 Цикл
        ДокументРезультат.ПоказатьУровеньГруппировокСтрок(КоличествоУровней - Уровень);
    КонецЦикла;
КонецПроцедуры
32 fisher
 
29.01.21
11:59
(31) Скорее всего, в основной форме отчета (заданной к корне конфы) переопределена кнопка компоновки и после твоей компоновки чего-то еще делается. Ну и в итоге туда ныряет по какой-то причине (чего-то ему нехватает). Отладчик в руки, короче. Еще можно найти точки использования этого общего модуля и расставить точки останова в подозрительных местах.
33 fisher
 
29.01.21
12:02
Если по точке останова попадешь - тогда просто открываешь стек вызовов и смотришь, откуда туда выполнение пришло и почему.
34 bebibo
 
29.01.21
12:46
(33) из общего модуля "ВариантыОтчетов" идет в модуль моего отчета
35 fisher
 
29.01.21
13:44
(34) Ну так в отладке и смотри, почему в итоге лезет в УправлениеОтчетамиВрем и как этого избежать (поворота в эту сбойную ветку).
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший