Есть задачка,нужно рассчитать среднюю цену на разных этапах обработки ягоды.
Ягода проходит следующие этапы:
1. Закупка от поставщика
2. Заморозка (при заморозке масса ягоды уменьшается)
3. Очистка от мусора (образуются готовая продукция,сортекс и мусор)
Для расчета цены не используем дополнительных расходов на обработку ягод, учитываем только начальную стоимость ягод от поставщика.
Хочу сделать эту задачу через запросы,но не очень получается. Хочу сделать без дополнительных выгрузок в табличную часть и их дальнейшей обработки.
Делаю отчет через консоль запросов.
Вопросы по отчету:
Как уменьшить отчет, чтобы сгруппировать ягоды по ценам на разных стадиях.
Стадии обозначаются параметрами склад, склад1. Хочу уменьшить, т.к. стадий больше чем две - это получается еще пару таких таблиц придется объединять.
Но самая главная заморочка в такой реализации - это использование среднего, среднее считается в зависимости от количества позиций по которым собирается цена, и учитываются даже те позиции, которые равны нулю, что приводит совсем к неправильному результату. Как можно извратится так, чтобы подсчитать среднее без учета нулевых значений таблиц.
Ягода проходит следующие этапы:
1. Закупка от поставщика
2. Заморозка (при заморозке масса ягоды уменьшается)
3. Очистка от мусора (образуются готовая продукция,сортекс и мусор)
Для расчета цены не используем дополнительных расходов на обработку ягод, учитываем только начальную стоимость ягод от поставщика.
Хочу сделать эту задачу через запросы,но не очень получается. Хочу сделать без дополнительных выгрузок в табличную часть и их дальнейшей обработки.
Делаю отчет через консоль запросов.
Вопросы по отчету:
Как уменьшить отчет, чтобы сгруппировать ягоды по ценам на разных стадиях.
Стадии обозначаются параметрами склад, склад1. Хочу уменьшить, т.к. стадий больше чем две - это получается еще пару таких таблиц придется объединять.
Но самая главная заморочка в такой реализации - это использование среднего, среднее считается в зависимости от количества позиций по которым собирается цена, и учитываются даже те позиции, которые равны нулю, что приводит совсем к неправильному результату. Как можно извратится так, чтобы подсчитать среднее без учета нулевых значений таблиц.
ВЫБРАТЬ
ВложенныеТаблицы.Ягода,
ВложенныеТаблицы.ПартияКачество,
СРЕДНЕЕ(ВложенныеТаблицы.ЦенаСырья) КАК ЦенаСырья,
СРЕДНЕЕ(ВложенныеТаблицы.ЦенаПродукции) КАК ЦенаПродукции
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец КАК Ягода,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад КАК ПартияСклад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество КАК ПартияКачество,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток) КАК МассаТовараНачальныйОстаток,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход) КАК МассаТовараПриход,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток) КАК СуммаНачальныйОстаток,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход) КАК СуммаПриход,
0 КАК ЦенаПродукции,
СРЕДНЕЕ((ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток + ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход) /
(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток + ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход))
КАК ЦенаСырья
ИЗ
РегистрНакопления.ТоварыНаСкладеПоСтоимости.ОстаткиИОбороты КАК ТоварыНаСкладеПоСтоимостиОстаткиИОбороты
ГДЕ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад
СГРУППИРОВАТЬ ПО
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход),
СРЕДНЕЕ((ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток + ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход) /
(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток + ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход)),
0
ИЗ
РегистрНакопления.ТоварыНаСкладеПоСтоимости.ОстаткиИОбороты КАК ТоварыНаСкладеПоСтоимостиОстаткиИОбороты
ГДЕ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад1
СГРУППИРОВАТЬ ПО
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество) КАК ВложенныеТаблицы
СГРУППИРОВАТЬ ПО
ВложенныеТаблицы.Ягода,
ВложенныеТаблицы.ПартияКачество
ПоказатьПо теме из базы знаний
- Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
- Группировка данных в запросе (СГРУППИРОВАТЬ ПО [ГРУППИРУЮЩИМ НАБОРАМ], ИТОГИ ПО [ОБЩИЕ])
- Боремся с запросами в циклах. Мой опыт рефакторинга запросов
- Список вопросов для собеседования кандидатов на должность "Программист 1С"
- Внутренняя жизнь ваших запросов PostgreSQL. Как и зачем «подглядывать» в подробности
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) bypass, спасибо за идею, переделал отчет. Только для расчета среднего, если сумма была равна нулю, я ставлю Null и в итоге эта позиция в расчет не включается. Теперь гораздо правильнее идет расчет.
ВЫБРАТЬ
ВложенныеТаблицы.Ягода,
//ВложенныеТаблицы.ПартияКачество,
СРЕДНЕЕ(ВложенныеТаблицы.ЦенаСырья) КАК ЦенаСырья,
СРЕДНЕЕ(ВложенныеТаблицы.ЦенаПродукции) КАК ЦенаПродукции,
СРЕДНЕЕ(ВложенныеТаблицы.ЦенаВеяннойЯгоды) КАК ЦенаВеяннойЯгоды
ИЗ
(ВЫБРАТЬ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец КАК Ягода,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад КАК ПартияСклад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество КАК ПартияКачество,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток) КАК МассаТовараНачальныйОстаток,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход) КАК МассаТовараПриход,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток) КАК СуммаНачальныйОстаток,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход) КАК СуммаПриход,
Null КАК ЦенаВеяннойЯгоды,
Null КАК ЦенаПродукции,
СРЕДНЕЕ(Выбор Когда (СуммаНачальныйОстаток + СуммаПриход)=0 или (МассаТовараНачальныйОстаток + МассаТовараПриход)=0 ТОГДА
Null
ИНАЧЕ(СуммаНачальныйОстаток + СуммаПриход) /(МассаТовараНачальныйОстаток + МассаТовараПриход)
КОНЕЦ)
КАК ЦенаСырья
ИЗ
РегистрНакопления.ТоварыНаСкладеПоСтоимости.ОстаткиИОбороты КАК ТоварыНаСкладеПоСтоимостиОстаткиИОбороты
ГДЕ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад
СГРУППИРОВАТЬ ПО
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход),
Null,
СРЕДНЕЕ(Выбор Когда (СуммаНачальныйОстаток + СуммаПриход)=0 или (МассаТовараНачальныйОстаток + МассаТовараПриход)=0 ТОГДА
Null
ИНАЧЕ(СуммаНачальныйОстаток + СуммаПриход) /(МассаТовараНачальныйОстаток + МассаТовараПриход)
КОНЕЦ),
Null
ИЗ
РегистрНакопления.ТоварыНаСкладеПоСтоимости.ОстаткиИОбороты КАК ТоварыНаСкладеПоСтоимостиОстаткиИОбороты
ГДЕ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад1
или ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад3
СГРУППИРОВАТЬ ПО
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество
ОБЪЕДИНИТЬ
ВЫБРАТЬ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество,
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.МассаТовараПриход),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаНачальныйОстаток),
СУММА(ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.СуммаПриход),
СРЕДНЕЕ(Выбор Когда (СуммаНачальныйОстаток + СуммаПриход)=0 или (МассаТовараНачальныйОстаток + МассаТовараПриход)=0 ТОГДА
Null
ИНАЧЕ(СуммаНачальныйОстаток + СуммаПриход) /(МассаТовараНачальныйОстаток + МассаТовараПриход)
КОНЕЦ),
Null,
Null
ИЗ
РегистрНакопления.ТоварыНаСкладеПоСтоимости.ОстаткиИОбороты КАК ТоварыНаСкладеПоСтоимостиОстаткиИОбороты
ГДЕ
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад = &Склад2
СГРУППИРОВАТЬ ПО
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Владелец,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Склад,
ТоварыНаСкладеПоСтоимостиОстаткиИОбороты.Партия.Качество) КАК ВложенныеТаблицы
СГРУППИРОВАТЬ ПО
ВложенныеТаблицы.Ягода
//ВложенныеТаблицы.ПартияКачество
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот