Надоело мне вводить периоды вручную - группу делай, границы указывай, лениво и ошибкоопасно. Разработал процедуру:
Процедура ВставитьУсловиеНаИнтервалДат(Элемент) Экспорт
Попытка
рТипГруппыОтбора=Тип("ГруппаЭлементовОтбораКомпоновкиДанных");
рТипЭлементаОтбора=Тип("ЭлементОтбораКомпоновкиДанных");
текдан=Элемент.ТекущиеДанные;
рТипТекдан=ТипЗнч(текдан);
Если рТипТекдан=Тип("ОтборКомпоновкиДанных") Тогда
рДоступныеПоля=текдан.ДоступныеПоляОтбора.Элементы;
ИначеЕсли рТипТекдан=рТипГруппыОтбора или рТипТекдан=рТипЭлементаОтбора Тогда
Сообщить("Если условие на интервал дат нужно во вложенной группе, создайте его на верхнем уровне и перетащите в нужную группу.",СтатусСообщения.Информация);
Предупреждение("Автоматическое добавление возможно только на верхнем уровне самого отбора!"); Возврат;
Иначе
Возврат; // какой-то странный тип
КонецЕсли;
//================================================================================
// Определяем доступные отборы типа "Дата"
//
спв=Новый СписокЗначений; // если дата не одна, дадим выбор
Для каждого рПоле Из рДоступныеПоля Цикл
Если рПоле.ТипЗначения.СодержитТип(Тип("Дата")) Тогда
спв.Добавить(рПоле,рПоле.Заголовок);
КонецЕсли;
КонецЦикла;
Если спв.Количество()=0 Тогда
Предупреждение("В текущей СКД нет полей отбора типа ""Дата""!"); Возврат;
ИначеЕсли спв.Количество()=1 Тогда
рПоле=спв.Получить(0).Значение;
Иначе
спв.СортироватьПоПредставлению();
выбзнч=спв.ВыбратьЭлемент("Укажите нужное поле:");
Если выбзнч=Неопределено Тогда Возврат КонецЕсли;
рПоле=выбзнч.Значение;
КонецЕсли;
//================================================================================
// Запрашиваем вид интервала
//
спвар=Новый СписокЗначений;
спвар.Добавить(ВидСравнения.Интервал,"Не включая границы ( )");
спвар.Добавить(ВидСравнения.ИнтервалВключаяГраницы,"Включая границы [ ]");
спвар.Добавить(ВидСравнения.ИнтервалВключаяНачало,"Включая начало [ )");
спвар.Добавить(ВидСравнения.ИнтервалВключаяОкончание,"Включая конец ( ]");
выбзнч=спвар.ВыбратьЭлемент("Укажите тип интервала:");
Если выбзнч=Неопределено Тогда Возврат КонецЕсли;
// определяемся
Если выбзнч.Значение=ВидСравнения.ИнтервалВключаяГраницы
или выбзнч.Значение=ВидСравнения.ИнтервалВключаяНачало
Тогда
рВидСравненияНачГраницы=ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Иначе
рВидСравненияНачГраницы=ВидСравненияКомпоновкиДанных.Больше;
КонецЕсли;
Если выбзнч.Значение=ВидСравнения.ИнтервалВключаяГраницы
или выбзнч.Значение=ВидСравнения.ИнтервалВключаяОкончание
Тогда
рВидСравненияКонГраницы=ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
Иначе
рВидСравненияКонГраницы=ВидСравненияКомпоновкиДанных.Меньше;
КонецЕсли;
//================================================================================
// Запрашиваем интервал
//
рНачалоПериода=Дата(1,1,1); рКонецПериода=Дата(1,1,1);
// стандартный диалог
рНастройкаПериода=Новый НастройкаПериода;
рНастройкаПериода.УстановитьПериод(рНачалоПериода,рКонецПериода);
рНастройкаПериода.РедактироватьКакИнтервал=Истина;
рНастройкаПериода.РедактироватьКакПериод=Истина;
рНастройкаПериода.ВариантНастройки=ВариантНастройкиПериода.Период;
Если не рНастройкаПериода.Редактировать() Тогда Возврат КонецЕсли;
рНачалоПериода=НачалоДня(рНастройкаПериода.ПолучитьДатуНачала());
рКонецПериода=КонецДня(рНастройкаПериода.ПолучитьДатуОкончания());
//================================================================================
// Ищем, нет ли уже такой группы и таких элементов в ней (только на текущем уровне отбора!)
//
рГруппа=Неопределено;
рНачГраница=Неопределено;
рКонГраница=Неопределено;
//
рПредставлениеГруппы="Интервал "+СтрЗаменить(НРег(выбзнч.Представление),"ючая",".")+" для """+СокрЛП(рПоле.Заголовок)+"""";
Для каждого элотб Из текдан.Элементы Цикл
ОбработкаПрерыванияПользователя();
Если ТипЗнч(элотб)=рТипГруппыОтбора
и элотб.Представление=рПредставлениеГруппы
и элотб.ТипГруппы=ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ
Тогда
рГруппа=элотб; // ищем внутри неё
Для каждого элотбгр Из рГруппа.Элементы Цикл
ОбработкаПрерыванияПользователя();
Если ТипЗнч(элотбгр)=рТипЭлементаОтбора Тогда
Если элотбгр.ВидСравнения=рВидСравненияНачГраницы и элотбгр.ЛевоеЗначение=рПоле.Поле Тогда
рНачГраница=элотбгр;
ИначеЕсли элотбгр.ВидСравнения=рВидСравненияКонГраницы и элотбгр.ЛевоеЗначение=рПоле.Поле Тогда
рКонГраница=элотбгр;
КонецЕсли;
КонецЕсли;
КонецЦикла; // по элементам подходящей группы
КонецЕсли;
КонецЦикла;
//================================================================================
// Создаём недостающее, устанавливаем нужное
//
Если рГруппа=Неопределено Тогда
рГруппа=текдан.Элементы.Добавить(рТипГруппыОтбора);
рГруппа.ТипГруппы=ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
КонецЕсли;
рГруппа.Представление=рПредставлениеГруппы;
рГруппа.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
рГруппа.Использование=Истина;
//
Если рНачГраница=Неопределено Тогда
рНачГраница=рГруппа.Элементы.Добавить(рТипЭлементаОтбора);
рНачГраница.ЛевоеЗначение=рПоле.Поле;
КонецЕсли;
рНачГраница.ВидСравнения=рВидСравненияНачГраницы;
рНачГраница.ПравоеЗначение=рНачалоПериода;
рНачГраница.Использование=Истина;
рНачГраница.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
рНачГраница.Представление="Нач.граница";
//
Если рКонГраница=Неопределено Тогда
рКонГраница=рГруппа.Элементы.Добавить(рТипЭлементаОтбора);
рКонГраница.ЛевоеЗначение=рПоле.Поле;
КонецЕсли;
рКонГраница.ВидСравнения=рВидСравненияКонГраницы;
рКонГраница.ПравоеЗначение=рКонецПериода;
рКонГраница.Использование=Истина;
рКонГраница.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;
рКонГраница.Представление="Кон.граница";
Исключение
Сообщить("Ошибка при установке условий на интервал дат: "+ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Сделал вызов этой процедуры в той форме, где находился нужный компоновщик:
РаботаСДиалогами.ВставитьУсловиеНаИнтервалДат(ЭлементыФормы.дОтборРК);
Стало можно быстро копипастить, а пользователям стало можно удобно вводить период.
Недостаток только в том, что текущей строкой отбора должна быть самая верхняя, корневая.
Плюсить особо не за что, а вот если пригодится кому, будет приятно. :)