Имя: Пароль:
1C
 
СКД программное формирование группировок
0 men47
 
31.08.15
14:01
Здравствуйте, коллеги! Нужна ваша помощь!

Есть отчет на скд без форм (типовой, УТ 11.1, "ВедомостьПоТоварамОрганизаций"). Клиент задал задание: сделать на форме поля типа "ЧекБокс", при нажатии менялась группировка, т.е. поставили галочку на против "Организация", отчет строится по организации, поставили на против "Номенклатуры" и "Организация", отчет строится по группировкам "Организация", "Номенклатура" и т.п.

Все хорошо, я прописал форму, вывел чек боксы. Вставил код на формирование отчета по кнопке, вставил код на формирование группировок. Все хорошо формирует, но есть одно НО. Если я ставлю галочку чисто организация, то он не выводит чисто организация, пока я не нажму кнопку "Установить стандартные настройки". После того как нажму, все строит.

Нужна вот помощь, что нужно вписать=)
1 men47
 
31.08.15
14:02
не только чисто организация, с любыми группировками так
2 men47
 
31.08.15
14:03
Если нужно код формирование отчета и группировок могу скинуть
3 DexterMorgan
 
31.08.15
14:11
Покажи код где передаешь настройки компоновщику
4 men47
 
31.08.15
14:14
Вот я задаю:

&НаСервереБезКонтекста
Процедура ДобавитьГруппировки(ПараметрыОтчета, КомпоновщикНастроек)
    
    Если ТипЗнч(КомпоновщикНастроек) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        СтруктураНастроек = КомпоновщикНастроек.Настройки.Структура;
    Иначе
        СтруктураНастроек = КомпоновщикНастроек;
    КонецЕсли;
    
    Для Каждого ЭлементСтруктуры Из СтруктураНастроек Цикл
        Группировка = ЭлементСтруктуры;
            
            Если ТипЗнч(Группировка) = Тип("ГруппировкаКомпоновкиДанных") Тогда
                Родитель = Группировка.Родитель;
                ПерваяГруппировка = Истина;
                Индекс = Родитель.Структура.Индекс(Группировка);
                Родитель.Структура.Удалить(Группировка);
                Для Каждого ПолеВыбраннойГруппировки Из ПараметрыОтчета.Группировки Цикл
                    Если ПолеВыбраннойГруппировки.Использование Тогда
                        Если ПерваяГруппировка Тогда
                            Группировка = Родитель.Структура.Вставить(Индекс, Тип("ГруппировкаКомпоновкиДанных"));
                            ПерваяГруппировка = Ложь;
                        Иначе
                            Группировка = Группировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
                        КонецЕсли;
                        
                        ПолеГруппировки = Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
                        ПолеГруппировки.Использование  = Истина;
                        ПолеГруппировки.Поле           = Новый ПолеКомпоновкиДанных(ПолеВыбраннойГруппировки.Поле);
                        Если ПолеВыбраннойГруппировки.ТипГруппировки = 1 Тогда
                            ПолеГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;
                        ИначеЕсли ПолеВыбраннойГруппировки.ТипГруппировки = 2 Тогда
                            ПолеГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.ТолькоИерархия;
                        Иначе
                            ПолеГруппировки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
                        КонецЕсли;
                        Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
                        Группировка.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
                    КонецЕсли;
                КонецЦикла;
        КонецЕсли;        
    КонецЦикла;
    
КонецПроцедуры



Вот формирую

&НаСервере
Функция СформироватьОтчетНаСервере() Экспорт
    Результат.Очистить();
    //Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Очистить();
    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("Группировки"                      , Группировки.Выгрузить());
    КомпоновщикНастроек = Отчет.КомпоновщикНастроек;    
    ДобавитьГруппировки(ПараметрыОтчета, КомпоновщикНастроек);
    ЗначРеквизита = РеквизитФормыВЗначение("Отчет");
    СхемаКомпоновкиДанных = ЗначРеквизита.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ,, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
    Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
КонецФункции
5 Aceforg
 
31.08.15
14:21
Попробуй
СтруктураНастроек = КомпоновщикНастроек.ПользовательскиеНастройки.Структура;
6 men47
 
31.08.15
14:22
(5) хм, и что мне получит получения структуры пользовательских настроек? попробовать поиграться с ней?
7 men47
 
31.08.15
14:23
{Форма.ФормаОтчета.Форма(39)}: Поле объекта не обнаружено (Структура)
         СтруктураНастроек =  КомпоновщикНастроек.ПользовательскиеНастройки.Структура;
8 Aceforg
 
31.08.15
14:24
Ну ты же играешь со стандартными настройками, соответственно тебя спрашивают "Установить стандартные настройки". Играйся сразу пользовательскими настройками
9 men47
 
31.08.15
14:27
(8) не вариант=( там даже в структуре ПользовательскиеНастройки ничего интересного
10 men47
 
31.08.15
14:44
самое что грустно, это то, что если я в конфигураторе делаю так:

[URL=http://radikal.ru/fp/f043b41a0dfc41ffbbddef10d719ac42][IMG]http://s018.radikal.ru/i502/1508/35/7ac6479e7721t.jpg[/IMG][/URL]


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

[URL=http://radikal.ru/fp/8c51c2b82eca4a82be30a08700aaa212][IMG]http://s019.radikal.ru/i609/1508/c9/b9807e5f2afdt.jpg[/IMG][/URL]
11 men47
 
31.08.15
14:45
12 men47
 
31.08.15
14:46
если я убираю в конфигураторе нижнюю номенклатуру, то он перестает автоматически генерировать при включении чек бокса
13 DexterMorgan
 
31.08.15
15:17
(7) МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);

Замени Настройки на КомпоновщикНастроек.ПолучитьНастройки()
14 DexterMorgan
 
31.08.15
15:18
(13) к (4)
15 DexterMorgan
 
31.08.15
15:19
(4) а блин сорри у тебя так и есть)))
16 men47
 
31.08.15
15:26
нашел я в чем проблема
17 men47
 
31.08.15
15:30
раскрывая я секрет=))

короче, код с группировкой я нашел из типового какого-то отчета, уже не помню. Если посмотреть код, то там видно, что изменения настроек идет в самих настройках, т.е. внутри.  Я попробовал что сделать, я выгрузил настройки. Отправил в процедуру, сделал все изменения которые нужны и загрузил обратно. Вот после таких действий в пользовательском режиме работает на ура!
18 echo77
 
31.08.15
21:33
По-моему, это все настройками делается, нет?