helpf.pro
Регистрация

v8.2 УП: Как в СКД обратиться к существующей группировки компоновщика и добавить поле

slavamts
28.08.2014 08:27Прочитано: 8542

Прошу помощи. Как в типовом отчете в процедуре модуля ДоработатьКомпоновщикПередВыводом() программно обратиться к существующей группировки КомпоновщикаНастроек и добавить в нее поле

Пробовал такой код, но он не работает

СтруктураНастроек=КомпоновщикНастроек.Настройки.Структура

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

Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
28.08.2014 12:42Ответ № 1

пример из этой процедуры(тут параметры и группировки и обращение к полям):

Код 1C v 8.х
 ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВалютаУпрУчета"));
Если ЗначениеПараметра <> Неопределено Тогда
ЗначениеПараметра.Значение = Константы.ВалютаУправленческогоУчета.Получить();
КонецЕсли;

ЗначениеПараметра = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Данные"));
Если ЗначениеПараметра <> Неопределено Тогда
ОтчетформируетсяПоДанным = ЗначениеПараметра.Значение;
КонецЕсли;

МассивГрыпировок = ТиповыеОтчеты.ПолучитьГруппировки(КомпоновщикНастроек);
Для каждого Группировка из МассивГрыпировок Цикл
Для каждого ПолеГруппировки из Группировка.Значение.ПоляГруппировки.Элементы Цикл
Если ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Источник") тогда
Группировка.Значение.Имя = ОтчетформируетсяПоДанным;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
E_Migachev
28.08.2014 12:47Ответ № 2

+ еще варианты

Код 1C v 8.х
 Процедура ДоработатьКомпоновщикПередВыводом() Экспорт
#Если ТолстыйКлиентОбычноеПриложение Тогда

ТиповыеОтчеты.УстановитьПараметр(КомпоновщикНастроек, "РежимОтчета", Константы.РежимНабораПерсонала.Получить());

ВыбранныеПоля = ТиповыеОтчеты.ПолучитьВыбранныеПоля(КомпоновщикНастроек);

Если ЕстьДетальныеПоля(ВыбранныеПоля) тогда
Возврат;
КонецЕсли;

ГруппировкиОтчета = ТиповыеОтчеты.ПолучитьГруппировки(КомпоновщикНастроек);

Для каждого Группировка из ГруппировкиОтчета Цикл

ДобавитьОтборИлиПоВсемПоказателям(Группировка.Значение, ВыбранныеПоля);
ПараметрВывода = Группировка.Значение.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("FilterOutput"));
Если ПараметрВывода <> Неопределено тогда
ПараметрВывода.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
ПараметрВывода.Использование = истина;
КонецЕсли;
КонецЦикла;
#КонецЕсли
КонецПроцедуры

и

Код 1C v 8.х
 Процедура ДоработатьКомпоновщикПередВыводом() Экспорт

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

#Если ТолстыйКлиентОбычноеПриложение Тогда
// установить полю вид вопроса макет вертикальный
ЭлементСтруктуры = ТиповыеОтчеты.ПолучитьЭлементСтруктурыПоПолюГруппировки(Новый ПолеКомпоновкиДанных("ПризнакВопроса"), КомпоновщикНастроек);
Если ЭлементСтруктуры <> Неопределено тогда
ПараметрВывода = ЭлементСтруктуры.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("TemplateType"));
Если ПараметрВывода <> Неопределено тогда
ПараметрВывода.Значение = ТипМакетаГруппировкиКомпоновкиДанных.Вертикальный;
ПараметрВывода.Использование = истина;
КонецЕСли;
ЭлементСтруктуры.Выбор.Элементы.Очистить();
ЭлементВыбора = ЭлементСтруктуры.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЭлементВыбора.Поле = Новый ПолеКомпоновкиДанных("ПризнакВопроса");
ЭлементВыбора.Использование = истина;
КонецЕсли;
#КонецЕсли

КонецПроцедуры
slavamts
28.08.2014 21:37Ответ № 3

Евгений Спасибо! Я пока только учу СКД . Добавил поле в группировку с помощью этого кода

Код 1C v 8.х
     

НовоеПолеГруппировки = Группировка.Значение.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
НовоеПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Должность");
НовоеПолеГруппировки.Использование = Истина;

Остался вопрос. 

Зачем в конструкции Группировка.Значение.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")) присутствует Значение В синтаксис помощнике про это ничего нет

E_Migachev
28.08.2014 22:02Ответ № 4

это значение группировки, надо так обращаться....

slavamts
29.08.2014 06:08Ответ № 5
Вопрос закрыт!
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.