gifts2017

Отчет Валовая прибыль для УТ. Как сделать этот отчет на СКД. step by step

Опубликовал Boris Leleko (Boris-Leleko) в раздел Отчеты - Анализ учета

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

Дело в том, что одной строке состава реализации может соответствовать несколько строк списываемых партий и если мы бы соединяли в запросе то ресурсы реализации могут задвоиться, затроиться и т.д. На скриншоте выделена колонка суммы количества из реализации и видно, что отдельные партии не суммируются, но отдельные реализации суммируются. Вычисляемые поля прибыли и рентабельности (Рентабельность=(Цена продажи-Цена поступления)*100/Цена поступления ), диаграммы.

step by step

1. Создаём новый отчет и открываем схему компоновки данных (СКД).

2. Нам надо создать два набора данных. Продажи и Партии.

      Текст запроса продаж:

ВЫБРАТЬ
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.ЗаказПокупателя,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.Подразделение,
    ПродажиОбороты.Проект,
    ПродажиОбороты.Организация,
    ПродажиОбороты.Контрагент,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборотПродажи,
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборотПродажи,
    СУММА(ПродажиОбороты.СтоимостьБезСкидокОборот) КАК СтоимостьБезСкидокОборотПродажи,
    СУММА(ПродажиОбороты.НДСОборот) КАК НДСОборотПродажи,
    СРЕДНЕЕ(ВЫБОР
            КОГДА ПродажиОбороты.КоличествоОборот <> 0
                ТОГДА ПродажиОбороты.СтоимостьОборот / ПродажиОбороты.КоличествоОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК СредняяЦенаПродажи
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.ЗаказПокупателя,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.Подразделение,
    ПродажиОбороты.Проект,
    ПродажиОбороты.Организация,
    ПродажиОбороты.Контрагент

 

 

Текст запроса  партий:

 

ВЫБРАТЬ
    ПартииСУчетомВозвратов.Регистратор КАК Регистратор,
    ПартииСУчетомВозвратов.Номенклатура КАК Номенклатура,
    ПартииСУчетомВозвратов.ДокументОприходования КАК ДокументОприходования,
    ПартииСУчетомВозвратов.Возвраты_КоличествоРасходПартии КАК Возвраты_КоличествоРасходПартии,
    ПартииСУчетомВозвратов.Реализации_КоличествоРасходПартии КАК Реализации_КоличествоРасходПартии,
    ПартииСУчетомВозвратов.КоличествоРасходПартии КАК КоличествоРасходПартии,
    ПартииСУчетомВозвратов.СтоимостьРасходПартии,
    СРЕДНЕЕ(ВЫБОР
            КОГДА ПартииСУчетомВозвратов.КоличествоРасходПартии <> 0
                ТОГДА ПартииСУчетомВозвратов.СтоимостьРасходПартии / ПартииСУчетомВозвратов.КоличествоРасходПартии
            ИНАЧЕ 0
        КОНЕЦ) КАК СредняяЦенаСписанияПартии,
    ПартииСУчетомВозвратов.ХарактеристикаНоменклатуры
ИЗ
    (ВЫБРАТЬ
        Реализации.Регистратор КАК Регистратор,
        Реализации.Номенклатура КАК Номенклатура,
        Реализации.КоличествоРасходПартии + ЕСТЬNULL(Возвраты.КоличествоРасходПартии, 0) КАК КоличествоРасходПартии,
        Реализации.ДокументОприходования КАК ДокументОприходования,
        Возвраты.КоличествоРасходПартии КАК Возвраты_КоличествоРасходПартии,
        Реализации.КоличествоРасходПартии КАК Реализации_КоличествоРасходПартии,
        Реализации.СтоимостьРасходПартии + ЕСТЬNULL(Возвраты.СтоимостьРасходПартии, 0) КАК СтоимостьРасходПартии,
        Реализации.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
    ИЗ
        (ВЫБРАТЬ
            ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
            ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
            СУММА(ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход) КАК СтоимостьРасходПартии,
            ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход КАК КоличествоРасходПартии,
            ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК ДокументОприходования,
            ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор.Сделка КАК Сделка,
            ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
        ИЗ
            РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
        ГДЕ
            ПартииТоваровНаСкладахОстаткиИОбороты.Период МЕЖДУ &НачалоПериода И &КонецПериода
            И ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
       
        СГРУППИРОВАТЬ ПО
            ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор,
            ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
            ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
            ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования,
            ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор.Сделка,
            ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры) КАК Реализации
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК ДокументОприходования,
                СУММА(ЕСТЬNULL(ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьРасход, 0)) КАК СтоимостьРасходПартии,
                ЕСТЬNULL(ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход, 0) КАК КоличествоРасходПартии,
                Продажи.ДокументПродажи КАК ДокументПродажи,
                ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры
            ИЗ
                РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, ДвиженияИГраницыПериода, ) КАК ПартииТоваровНаСкладахОстаткиИОбороты
                    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи КАК Продажи
                    ПО ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор = Продажи.Регистратор
                        И ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура = Продажи.Номенклатура
                        И ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры = Продажи.ХарактеристикаНоменклатуры
            ГДЕ
                ПартииТоваровНаСкладахОстаткиИОбороты.Период МЕЖДУ &НачалоПериода И &КонецПериода
                И ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
           
            СГРУППИРОВАТЬ ПО
                ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
                ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования,
                ПартииТоваровНаСкладахОстаткиИОбороты.Заказ,
                ЕСТЬNULL(ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход, 0),
                Продажи.ДокументПродажи,
                ПартииТоваровНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры) КАК Возвраты
            ПО Реализации.ХарактеристикаНоменклатуры = Возвраты.ХарактеристикаНоменклатуры
                И Реализации.ДокументОприходования = Возвраты.ДокументОприходования
                И Реализации.Регистратор = Возвраты.ДокументПродажи
                И Реализации.Номенклатура = Возвраты.Номенклатура) КАК ПартииСУчетомВозвратов
ГДЕ
    ПартииСУчетомВозвратов.КоличествоРасходПартии <> 0

СГРУППИРОВАТЬ ПО
    ПартииСУчетомВозвратов.Регистратор,
    ПартииСУчетомВозвратов.Номенклатура,
    ПартииСУчетомВозвратов.ДокументОприходования,
    ПартииСУчетомВозвратов.Возвраты_КоличествоРасходПартии,
    ПартииСУчетомВозвратов.Реализации_КоличествоРасходПартии,
    ПартииСУчетомВозвратов.КоличествоРасходПартии,
    ПартииСУчетомВозвратов.СтоимостьРасходПартии,
    ПартииСУчетомВозвратов.ХарактеристикаНоменклатуры

 

 

Первый запрос тривиален. Все самое интересное во втором.

Я соединяю те движения партий, которые сделаны реализацией, с движениями которые делает возврат покупателя. Чтобы правильно их соединить (для вычитания сторно) , надо соединять по номенклатуре, характеристике, документу оприходования и документу продажи. С документом оприходования все понятно, но откуда в партиях взять документ продажи? Ответ прост. Возврат делает движения по продажам тоже и мы можем во вложеном запросе возвратов сделать соединение с продажами по регистратору (номенклатуре, характеристике) и вытащить таким образом документ продажи.

В СКД всегда так. Сначала долго думаешь, потом быстро делаешь.

 

Далее номера скриншотов соответствуют пунктам.

 

3. Теперь на уровне СКД делаем соединение наших наборов данных.

4. Создаем вычисляемые поля.

5. Ресурсы. Для цен продаж, списания и рентабельности задаём агрегатную функцию Среднее()

6. Параметры. Надо проверить ограничение доступности.

7. Настройки. Так должны выглядеть в конечном итоге. Для этого правой кнопкой на корне дерева, добавляем контрагента, номенклатуру. Характеристику добавляем в группировку номенклатуры. Потом документы.

8. Выбираем поля ресурсов, которые хотим видеть.

9. Отключаем рентабельность в группировке документа оприходования. она там не нужна.

10. Сортируем отчет по убыванию прибыли.

11. Задаем макет оформления.

12. Правой кнопкой на корне и добавляем новую диаграмму.

13. Добавляем серии и выбранные поля у диаграммы. Устанавливаем её тип.

Ne layer...
Ne

Скачать файлы

Наименование Файл Версия Размер
Валовая_прибыль 489
.erf 16,35Kb
10.10.14
489
.erf 16,35Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. rasswet (rasswet) 13.01.10 12:08
а скин можно покрупнее прицепить? не могу понять надо мне это или нет.
2. Александр Онучин (sashtet) 13.01.10 13:15
Мне пондравилась,буду изучать,думать что улучшить...
3. Максим Сидоров (zlgen10) 14.01.10 16:44
Круть, по сравнению со стандартным в торговли мега прост, считает лучше, во всяком случае более развернут, и не дает 100 рентабельности при минусах как в стандарте, респект!
4. Zl (ZLG07) 18.01.10 11:41
Нашел пару ошибок, при возврате товара от покупателя, считает рентабельность 100, и также же возникает по некоторым движениям ошибка деления на 0
5. Александр Онучин (sashtet) 18.01.10 11:46
А что скажет автор?Будешь доделывать?
6. Boris Leleko (Boris-Leleko) 18.01.10 20:14
Сложная задачка, буду думать...
7. Boris Leleko (Boris-Leleko) 24.01.10 03:48
Ура! теперь фунциклирует. Возвраты учитываются и прибыль между партиями правильно теперь распределяется.
8. Boris Leleko (Boris-Leleko) 20.10.10 10:44
изменил ф-лу расчета рентабельности: Рентабельность=(Цена продажи-Цена поступления)*100/Цена поступления
9. Андрей Соломатин (tim2004) 09.04.11 20:47
Прибыль по услугам не считает. Поправьте, плиз.
10. Екатерина Сальникова (Katerina_S) 18.11.11 14:04
+ для примера в освоении скд пригодилась
11. Харисов Рустам (harisov_r) 03.02.12 14:14
Есть ошибки в отчете:
- Если есть документ "Поступление доп.расходов", который сделан после документа РТиУ, и сделан в конце месяца док-т "Корректировка стоимости списания товаров" - Ваш отчет не учитывает этого, и себестоимость подсчитывает неправильно. Типовой стандартный отчет "Валовая прибыль" - учитывает.
Рис.1 -

Рис.2 - Типовой стандартный отчет "Валовая прибыль" -


Рис.3 - Ваш отчет:
12. Михаил (mig090874) 06.02.12 14:40
А если партия была создана документом "Приходный ордер", возникает ситуация деления на ноль. А будет ли сделана доработка отчета, чтобы по закрытым ордерам цену брать из документов поступлений, введенных на основании ордеров.
А так отчет нужный, можно много головной боли снять.
13. Boris Leleko (Boris-Leleko) 06.02.12 15:39
Спасибо за тест. В ближайшее время времени к сожалению не смогу найти... Но вообще конечно всё это надо учесть.
14. Константин Куликов (Светлый ум) 21.05.13 10:58
А как же колонка себестоимость?
15. Boris Leleko (Boris-Leleko) 24.05.13 11:54
Это отчет для УТ. В УТ нет такого понятия как себестоимость.
16. Павел Романов (Pawlick) 02.11.13 23:52
(15)Boris-Leleko,
Как это нет ?!?
А регистр ПродажиСебестоимость ?
17. Иван Кудинов (ivankudinr) 01.02.14 11:49
В отчет не попадают услуги. (УТ 10.3)
18. zif74 (zif74) 12.05.15 22:40
Суммы отличаются от стандартной валовой прибыли..