пятница, 5 июля 2019 г.

Разработка отчета Выручка по сезонам на СКД



Иногда бывает полезно сделать анализ некоего показателя (например, суммы выручки по отдельным товарам) не за стандартный период - День, Месяц, Квартал, Год и т. п. - который поддерживается виртуальной таблицей Обороты регистра накопления или регистра бухгалтерии, а с необычной периодизацией, например, по сезонам года (зима, весна, лето, осень). В этом случае в наборе данных СКД придется применить не совсем простой запрос, пример разработки которого и рассматривается .
Разработка отчета ведется для конфигурации Управление торговлей.


Периодизация по сезонам года

Шаг 1

Источником информации для отчета будет регистр накопления ВыручкаИСебестоимостьПродаж. Для отчета будем использовать пакетный запрос

План разработки пакетного запроса.

1. Таблица Годы

Используя регистр накопления ВыручкаИСебестоимостьПродаж, накладываем на поле период функцию НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ГОД) получим года по которым были движения. Не забываем установить Выбрать РАЗЛИЧНЫЕ, что бы не получить кучу записей.

2. Таблица Сезоны

В году 4 сезона. Создадим таблицу в которой каждому сезону назначим цифру 
1-Зима
2-Весна
3-Лето
4-Осень

3.Таблица ГодСезон

 Связывая таблицу Год и Сезон без связей  получим декартово произведение. В каждом году по 4 сезона.

4.Таблица ОборотыПродаж

Обороты  регистра накопления ВыручкаИСебестоимостьПродаж

Итог - РезультатЗапроса

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



Шаг 2

Разработка отчета.Копируем запрос напрямую в конструктор СКД минуя конструктор запросов. Отказываемся от опции Автозаполнение. Окно поля у нас остается не заполненным.


Заходим в конструктор запроса, находим вкладку Компоновка данных, переходим на вкладку поля и добавляем нужные нам поля


Формируется список доступных полей выбора в явном виде - секция {ВЫБРАТЬ} расширения языка запросов. 


Создание "мягких" (с возможностью отключения использования) параметров СКД для ограничения интервала выборки отчета с использованием расширения языка запросов для СКД - секция {ГДЕ} расширения языка запросов.


Вставим конструкцию для поля сезон в выражения представления 

Структура кросс-отчета будет следующей



Шаг 3

Выполним отчет, он уже более похож на то что нам нужно, но можно заметить что в нем есть пустые строки. Если выполним запрос то увидим что это поля NULL



Добавим в компоновку отбор по полю товар и поставим в отборе условие "Заполнено"


дополнительно установим Состав пользовательских настроек отчета на группировку колонок Сезон и Год





Шаг 4

Завершение разработки отчета является изменение задание макета оформления, установка форматов, загрузка схемы во внешний отчет в Конфигураторе.



Сохранная схема СКД



Сам запрос

ВЫБРАТЬ РАЗЛИЧНЫЕ
 НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродаж.Период, ГОД) КАК НачалоГода
ПОМЕСТИТЬ Годы
ИЗ
 РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК ВыручкаИСебестоимостьПродаж
{ГДЕ
 (ВыручкаИСебестоимостьПродаж.Период >= &НачалоПериода),
 (ВыручкаИСебестоимостьПродаж.Период <= &ОкончаниеПериода)}

ИНДЕКСИРОВАТЬ ПО
 НачалоГода
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 1 КАК Сезон
ПОМЕСТИТЬ Сезоны

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
 4
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 НАЧАЛОПЕРИОДА(ВыручкаИСебестоимостьПродажОбороты.Период, ГОД) КАК ГодПродаж,
 ВЫБОР
  КОГДА МЕСЯЦ(ВыручкаИСебестоимостьПродажОбороты.Период) В (12, 1, 2)
   ТОГДА 1
  КОГДА МЕСЯЦ(ВыручкаИСебестоимостьПродажОбороты.Период) В (3, 4, 5)
   ТОГДА 2
  КОГДА МЕСЯЦ(ВыручкаИСебестоимостьПродажОбороты.Период) В (6, 7, 8)
   ТОГДА 3
  КОГДА МЕСЯЦ(ВыручкаИСебестоимостьПродажОбороты.Период) В (9, 10, 11)
   ТОГДА 4
 КОНЕЦ КАК СезонПродаж,
 ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Товар,
 ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот КАК СуммаВыручкиОборот,
 ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот
ПОМЕСТИТЬ ОборотыПродаж
ИЗ
 РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, Месяц, ) КАК ВыручкаИСебестоимостьПродажОбороты

ИНДЕКСИРОВАТЬ ПО
 ГодПродаж,
 СезонПродаж
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 Годы.НачалоГода КАК НачалоГода,
 Сезоны.Сезон КАК Сезон
ПОМЕСТИТЬ ГодСезон
ИЗ
 Годы КАК Годы,
 Сезоны КАК Сезоны
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
 ГодСезон.НачалоГода КАК НачалоГода,
 ГодСезон.Сезон КАК Сезон,
 ОборотыПродаж.Товар КАК Товар,
 ОборотыПродаж.КоличествоОборот КАК КоличествоОборот,
 ОборотыПродаж.СуммаВыручкиОборот КАК СуммаВыручкиОборот
{ВЫБРАТЬ
 НачалоГода,
 Сезон,
 Товар.*,
 КоличествоОборот,
 СуммаВыручкиОборот}
ИЗ
 ГодСезон КАК ГодСезон
  ЛЕВОЕ СОЕДИНЕНИЕ ОборотыПродаж КАК ОборотыПродаж
  ПО ГодСезон.НачалоГода = ОборотыПродаж.ГодПродаж
   И ГодСезон.Сезон = ОборотыПродаж.СезонПродаж
{ГДЕ
 ОборотыПродаж.Товар.*}

Комментариев нет:

Отправить комментарий

Печать чека ККМ из драйвера ККМ

Суть проблемы: Пробиваем чек из 1С: Бухгалтерии. Чек пробит не  правильно. Теперь нужно сделать чек коррекции. Но в программе это сделать н...