////////////////////////////////////////////////////////////////////////////////
// ОТБОР
//Процедура устанавливает значения параметров в запросе.
// Имя - Имя параметра
// Значение - Значение для отбора
Процедура УстановитьПараметрКомпоновки (Имя,Значение)
КомпоновкаДанныхПараметр =
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(Имя);
Если НЕ(КомпоновкаДанныхПараметр = Неопределено) Тогда
КомпоновкаДанныхПараметр.Значение = Значение;
КомпоновкаДанныхПараметр.Использование = Истина;
Иначе Сообщить("Параметр "+Имя+" не найден");
КонецЕсли;
КонецПроцедуры
//Процедура устанавливает отбор по полям запроса.
// Имя - Имя поля
// Значение - Значение для отбора
// ВидСравнения - ВидСравненияКомпоновкиДанных
Процедура УстановтьОтборПоПолюКомпоновки(Имя,Значение,ВидСравнения)
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя) И ЭлементОтбора.ВидСравнения = ВидСравнения Тогда
КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
КонецЕсли;
КонецЦикла;
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(Имя);
ЭлементОтбора.ВидСравнения = ВидСравнения;
ЭлементОтбора.ПравоеЗначение = Значение;
ЭлементОтбора.Использование = Истина;
КонецПроцедуры
ниже приведенный материал взят отсюда //infostart.ru/public/19793/
////////////////////////////////////////////////////////////////////////////////
// НАБОРЫ ДАННЫХ
// Процедура добавляет или удаляет набор данных из схемы компоновки данных
//
// Схема - СхемаКомпоновкиДанных, схема, в которой нужно добавить(удалить) набор данных
// СхемаИсточник - СхемаКомпоновкиДанных, схема из которой копируется набор данных
// ИмяНабора - Строка
// Добавить - Булево
// НаборДанныхРодитель - НаборДанныхОбъединениеСхемыКомпоновкиДанных
Процедура ДобавитьУдалитьНаборДанных(Схема, СхемаИсточник, ИмяНабора, Добавить, НаборДанныхРодитель)
НаборДанных = НайтиНаборДанных(Схема.НаборыДанных, ИмяНабора);
Если Добавить Тогда
Если НаборДанных = Неопределено Тогда
НаборДанныхИсточник = НайтиНаборДанных(СхемаИсточник.НаборыДанных, ИмяНабора);
НаборДанных = НаборДанныхРодитель.Элементы.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.Имя = НаборДанныхИсточник.Имя;
НаборДанных.ИсточникДанных = НаборДанныхИсточник.ИсточникДанных;
НаборДанных.Запрос = НаборДанныхИсточник.Запрос;
КонецЕсли;
Иначе
Если НаборДанных <> Неопределено Тогда
НаборДанныхРодитель.Элементы.Удалить(НаборДанных);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Функция НайтиНаборДанных(НаборыДанных, Имя)
Если НаборыДанных = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Для каждого НаборДанных Из НаборыДанных Цикл
Если НаборДанных.Имя = Имя Тогда
Возврат НаборДанных;
КонецЕсли;
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхОбъединениеСхемыКомпоновкиДанных") Тогда
Результат = НайтиНаборДанных(НаборДанных.Элементы, Имя);
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// ГРУППИРОВКИ
// Функция находит группировку в компоновке
// Структура - КомпоновщикНастроек.Настройки.Структура
// Имя - Имя поля в группировке
// Возвращаемое значение: ПолеКомпоновкиДанных
Функция НайтиГруппировку(Структура, Имя, ВидГруппировки = "Поле")
Для Каждого Элемент Из Структура Цикл
Если ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда
Результат = НайтиГруппировку(Элемент.Строки, Имя);
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
Результат = НайтиГруппировку(Элемент.Колонки, Имя);
Если Результат <> Неопределено Тогда
Возврат Результат;
КонецЕсли;
ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
Для Каждого Поле Из Элемент.ПоляГруппировки.Элементы Цикл
Если Поле.Поле = Новый ПолеКомпоновкиДанных(Имя) Тогда
Если ВидГруппировки = "Поле" Тогда
Результат = Поле;
Иначе
Результат = Элемент;
КонецЕсли;
Возврат Результат;
КонецЕсли;
КонецЦикла;
Результат = НайтиГруппировку(Элемент.Структура, Имя);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
// Процедура добавляет в каждую группировку отчета отбор по непустому значению
// Структура - КомпоновщикНастроек.Настройки.Структура
// ДоступныеПоляГруппировок - КомпоновщикНастроек.ДоступныеПоляГруппировок
Процедура ОтборПоНепустым(Структура)
Для Каждого Элемент Из Структура Цикл
Если ТипЗнч(Элемент) = Тип("ТаблицаКомпоновкиДанных") Тогда
ОтборПоНепустым(Элемент.Строки);
ОтборПоНепустым(Элемент.Колонки);
ИначеЕсли ТипЗнч(Элемент) = Тип("ГруппировкаТаблицыКомпоновкиДанных") Тогда
Для Каждого Поле Из Элемент.ПоляГруппировки.Элементы Цикл
ЭлементОтбора = Неопределено;
Для Каждого ЭлементОтбора1 Из Элемент.Отбор.Элементы Цикл
Если ЭлементОтбора1.Представление = "Отбор по непустому" Тогда
ЭлементОтбора = ЭлементОтбора1;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Представление = "Отбор по непустому";
КонецЕсли;
ЭлементОтбора.ЛевоеЗначение = Поле.Поле;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементОтбора.Использование = Истина;
Параметр = Элемент.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("FilterOutput"));
Параметр.Использование = Истина;
Параметр.Значение = ТипВыводаТекстаКомпоновкиДанных.НеВыводить;
КонецЦикла;
ОтборПоНепустым(Элемент.Структура);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПОЛЬЗОВАТЕЛЬСКИЕ ПОЛЯ
// Процедура добавляет значения интервалов в пользовательское поле
// ПолеИнтервалы - ПользовательскоеПолеВыборКомпоновкиДанных
// Интервал - Строка содержащия границы интервалов: 30,60,90
Процедура УстановитьПользовательскоеПолеИнтервал(ПолеИнтервалы, Интервал)
Если ПустаяСтрока(Интервал) Тогда
Возврат;
КонецЕсли;
Стр = Интервал;
Стр = СтрЗаменить(Стр, ",", Символы.ПС);
ПредИнтервал = "0";
Для Счетчик = 1 По СтрЧислоСтрок(Стр) Цикл
ТекИнтервал = СокрЛП(СтрПолучитьСтроку(Стр, Счетчик));
Вариант = ПолеИнтервалы.Варианты.Элементы.Добавить();
Вариант.Использование = Истина;
Если Счетчик = 1 Тогда
Вариант.Значение = "До " + ТекИнтервал;
Вариант.Представление = "До " + ТекИнтервал;
Иначе
Вариант.Значение = "От " + ПредИнтервал + " до " + ТекИнтервал;
Вариант.Представление = "От " + ПредИнтервал + " до " + ТекИнтервал;
КонецЕсли;
Группа = Вариант.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.Использование = Истина;
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
Если Счетчик > 1 Тогда
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДнейПросрочки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = Число(ПредИнтервал);
КонецЕсли;
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДнейПросрочки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = Число(ТекИнтервал);
ПредИнтервал = ТекИнтервал;
КонецЦикла;
Вариант = ПолеИнтервалы.Варианты.Элементы.Добавить();
Вариант.Значение = "Более " + ПредИнтервал;
Вариант.Представление = "Более " + ПредИнтервал;
Группа = Вариант.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДнейПросрочки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = Число(ПредИнтервал);
КонецПроцедуры