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