v8: Расчет нестандартных итогов в запросеРасчет нестандартных итогов в запросе, то есть использование произвольных выражений в разделе ИТОГИ в запросе. Действует, начиная с релиза 1С 8.0.10. | | Автор статьи: PR | Редакторы: Последняя редакция №4 от 28.01.07 | История URL: http://kb.mista.ru/article.php?id=456 | |
Ключевые слова: Расчет, нестандартный, итоги, запрос, рентабельность, произвольный, выражение, агрегатный
В 10 релизе платформы версии 8.0 в запросах в разделе ИТОГИ появилась возможность расчета нестандартных итогов.
Говоря нестандартных я подразумеваю произвольных, то есть любых, а не только с использованием одной агрегатной функции.
Что это означает?
Это значит, что вместо обычного запроса
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(КоличествоОборот),
СУММА(СтоимостьОборот)
ПО
Номенклатура ИЕРАРХИЯ
можно написать, к примеру, вычисление количества в единицах для отчетов
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК Коэффициент,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(КоличествоОборот) * ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК КоличествоОборот,
СУММА(СтоимостьОборот)
ПО
Номенклатура ИЕРАРХИЯ
или посчитать среднюю цену продажи
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК СтоимостьОборот,
ПродажиОбороты.СтоимостьОборот КАК ЦенаОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(КоличествоОборот),
СУММА(СтоимостьОборот),
СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот) КАК ЦенаОборот
ПО
Номенклатура ИЕРАРХИЯ
или разделить номенклатуру на условные ценовые категории (например, до 1000 и свыше 1000 рублей)
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот КАК СтоимостьОборот,
ПродажиОбороты.СтоимостьОборот КАК ЦенаОборот
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(КоличествоОборот),
СУММА(СтоимостьОборот),
ВЫБОР
КОГДА СУММА(ПродажиОбороты.СтоимостьОборот) / СУММА(ПродажиОбороты.КоличествоОборот) > 1000
ТОГДА "Средняя цена > 1000"
ИНАЧЕ "Средняя цена <= 1000"
КОНЕЦ КАК ЦенаОборот
ПО
Номенклатура ИЕРАРХИЯ
Лично для меня это нашло применение как минимум в одном случае, когда требуется посчитать рентабельность продаж.
Для того, чтобы верно посчитать рентабельность продаж, нужно вместо
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот,
ПродажиОбороты.СебестоимостьОборот КАК СебестоимостьОборот,
(ПродажиОбороты.СуммаПродажиОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СебестоимостьОборот КАК Рентабельность
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(СуммаПродажиОборот),
СУММА(СебестоимостьОборот),
СРЕДНЕЕ(Рентабельность)
ПО
Номенклатура ИЕРАРХИЯ
написать
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот,
ПродажиОбороты.СебестоимостьОборот КАК СебестоимостьОборот,
(ПродажиОбороты.СуммаПродажиОборот - ПродажиОбороты.СебестоимостьОборот) / ПродажиОбороты.СебестоимостьОборот КАК Рентабельность
ИЗ
РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ИТОГИ
СУММА(СуммаПродажиОборот),
СУММА(СебестоимостьОборот),
(СУММА(ПродажиОбороты.СуммаПродажиОборот) - СУММА(ПродажиОбороты.СебестоимостьОборот)) / СУММА(ПродажиОбороты.СебестоимостьОборот) КАК Рентабельность
ПО
Номенклатура ИЕРАРХИЯ
Замечу, что есть два варианта расчета рентабельности продаж в процентах:
1. (Сумма продажи - Себестоимость продажи) / Себестоимость продажи * 100.
2. (Сумма продажи - Себестоимость продажи) / Сумма продажи * 100;
Я для определенности говорю о первом.
В этом случае при продажах 1 бутылки пива "Балтика 3" по 20 рублей при себестоимости 10 рублей и 100 бутылок пива "Балтика 5" по 21 рублей при себестоимости 20 рублей рентабельность по группе "Пиво" будет не
((20 - 10) / 10 * 100 + (2100 - 2000) / 2000 * 100) / 2 = (100 + 5) / 2 = 52.5%, а (20 + 2100 - 10 - 2000) / (10 + 2000) * 100 = 110 / 2010 * 100 = 5.47%, то есть такой, какой и должна быть. |