Итак, задача состоит в том, чтобы для оборотного регистра накопления через выбор пользователем значения параметра Периодичность задавалась соответствующая периодичность регистра.
Очевидный способ вроде "РегистрНакопления.ЗаказыПокупателей.Обороты(, , День {(&Периодичность)}, )" не работает - СКД ругается на наличие параметра в этом месте.
Вариант "РегистрНакопления.ЗаказыПокупателей.Обороты(, , Авто, )" имеет такой недостаток, что пользователю приходится в настройках вывода отчета во всех местах, где он хочет отобразить период, изменять поле с ПериодДень на ПериодНеделя (или другие). Неудобно, некрасиво, раздражает. Но все же работает.
Еще вариант, красивый но для больших объемов данных не выигрышный. Используем в запросе периодичность День (или мельче вплоть до Регистратор). Создаем вычисляемое поле ПериодНовый с выражением вроде НачалоПериода(, &Периодичность). Параметры оформляем так же, как в итоговом решении (см. рисунок Параметры). Минус в том, что запрос, независимо от выбора Периодичности, выполняется с периодом День (или какой мы указали в запросе), а потом поле периода еще и пересчитывается. То есть такой отчет не только не оптимизирует отчет, но и содержит дополнительные вычисления.
Я предлагаю промежуточный вариант. Заводим следующие параметры (см. соответствующий рисунок). Видим 2 параметра Периодичность - один доступен пользователю, второй задан таким образом, что существует всегда. независимо от того, выбрал пользователь параметр или нет. Параметрам задан список допустимых значений "День", "Неделя", и т.д.
В запросе встречается параметр &Периодичность следующим образом:
ВЫБРАТЬ
ВЫБОР
КОГДА &Периодичность = "Неделя" ТОГДА ЗаказыПокупателейОбороты.ПериодНеделя
КОГДА &Периодичность = "Месяц" ТОГДА ЗаказыПокупателейОбороты.ПериодМесяц
КОГДА &Периодичность = "Кварта" ТОГДА ЗаказыПокупателейОбороты.ПериодКвартал
КОГДА &Периодичность = "Год" ТОГДА ЗаказыПокупателейОбороты.ПериодГод
ИНАЧЕ ЗаказыПокупателейОбороты.ПериодДень КОНЕЦ КАК Период
ИЗ РегистрНакопления.ЗаказыПокупателей.Обороты(, , Авто, ) КАК ЗаказыПокупателейОбороты
Затем поле период используем там, где нам надо. параметр Периодичность пользователь видит в списке параметров.
P.S. Я не знаю точно, считает ли СКД при запросе все поля периодДень, ПериодНеделя и т.д. или все же сама выбирает только нужное. Если кто знает, буду рад конкретному ответу. К сожалению, если она вычисляет их все, то данный способ становится не лучше, чем третий из упомянутых в начале.