Каталог решений - Параметр Периодичность в СКД

Параметр Периодичность в СКД

Параметр Периодичность в СКД

В наличии

Поиски в интернете удобных решений для задания в СКД пользовательского параметра Периодичность у меня успехом не увенчались. Поэтому когда в голову пришло такое решение, решил выложить.

Категория:

Описание

Итак, задача состоит в том, чтобы для оборотного регистра накопления через выбор пользователем значения параметра Периодичность задавалась соответствующая периодичность регистра.

Очевидный способ вроде «РегистрНакопления.ЗаказыПокупателей.Обороты(, , День {(&Периодичность)}, )» не работает — СКД ругается на наличие параметра в этом месте.

Вариант «РегистрНакопления.ЗаказыПокупателей.Обороты(, , Авто, )» имеет такой недостаток, что пользователю приходится в настройках вывода отчета во всех местах, где он хочет отобразить период, изменять поле с ПериодДень на ПериодНеделя (или другие). Неудобно, некрасиво, раздражает. Но все же работает.

Еще вариант, красивый но для больших объемов данных не выигрышный. Используем в запросе периодичность День (или мельче вплоть до Регистратор). Создаем вычисляемое поле ПериодНовый с выражением вроде НачалоПериода(, &Периодичность). Параметры оформляем так же, как в итоговом решении (см. рисунок Параметры). Минус в том, что запрос, независимо от выбора Периодичности, выполняется с периодом День (или какой мы указали в запросе), а потом поле периода еще и пересчитывается. То есть такой отчет не только не оптимизирует отчет, но и содержит дополнительные вычисления.

Я предлагаю промежуточный вариант. Заводим следующие параметры (см. соответствующий рисунок). Видим 2 параметра Периодичность — один доступен пользователю, второй задан таким образом, что существует всегда. независимо от того, выбрал пользователь параметр или нет. Параметрам задан список допустимых значений «День», «Неделя», и т.д.

В запросе встречается параметр &Периодичность следующим образом:

ВЫБРАТЬ  

ВЫБОР   

КОГДА &Периодичность = "Неделя"    ТОГДА ЗаказыПокупателейОбороты.ПериодНеделя   

КОГДА &Периодичность = "Месяц"    ТОГДА ЗаказыПокупателейОбороты.ПериодМесяц   

КОГДА &Периодичность = "Кварта"    ТОГДА ЗаказыПокупателейОбороты.ПериодКвартал   

КОГДА &Периодичность = "Год"    ТОГДА ЗаказыПокупателейОбороты.ПериодГод   

ИНАЧЕ ЗаказыПокупателейОбороты.ПериодДень  КОНЕЦ КАК Период

ИЗ  РегистрНакопления.ЗаказыПокупателей.Обороты(, , Авто, ) КАК ЗаказыПокупателейОбороты

 

 

Затем поле период используем там, где нам надо. параметр Периодичность пользователь видит в списке параметров.

 

P.S. Я не знаю точно, считает ли СКД при запросе все поля периодДень, ПериодНеделя и т.д. или все же сама выбирает только нужное. Если кто знает, буду рад конкретному ответу. К сожалению, если она вычисляет их все, то данный способ становится не лучше, чем третий из упомянутых в начале.

has been added to your cart:
Оформление заказа