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



