Имя: Пароль:
1C
1С v8
Расчёт средней цены в запросе по группировкам
0 Deryni
 
06.08.14
13:47
Есть регистр "Доставка" - оборотный. В него записывается такая информация
Заказ, Товар, Перевозчик, Количество товара, Стоимость доставки.

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

Есть задача посчитать среднюю себестоимость перевозки на единицу товара и по заказу. Вывести в виде таблицы
В таком виде
Горизонтальные группировки Контрагент, Заказ, Товар.
Вертикальные группировки - Перевозчик.
По каждой строке и перевозчику нужно посчитать среднюю стоимость перевозки. И итого по заказу / товару.
Проблема вот в чём.
Предположим мы везёт в Заказе - З1 Товар - Т1 (10 шт.). Везут два перевозчика П1 и П2, при этом П1 делает это двумя разными документами регистраторами.
Получаем в Регистре:
З1, П1, Т1 - 10 шт., 100 долл.
З1, П1, Т1 - 10 шт., 50 долл.
З1, П2, Т1 - 10 шт., 100 долл.

Таким образом средняя цена перевозки на единицу товара по З1 будет 25 долларов (сумма перевозки / количество в заказе)
Средняя цена по П1 будет 15 долларов, средняя цена по П2 - 10 долларов.
Собственно вопрос. Как это всё реализовать на СКД?
Тупо делить сумму на количество не получается. Потому, что в итоговых строках количество суммируется, а мне нужно суммировать его только по заказу.
Т.е. фактически в каждой группировке мне нужно просуммировать количество, но сделать это по каждому заказу и товару только один раз.
1 mistеr
 
06.08.14
14:09
Я не понял в примере, сколько всего товара в заказе и по сколько везет каждый из перевозчиков.
2 Deryni
 
06.08.14
14:14
(1)
В заказе 10 товаров. Каждый перевозчик везёт 10 товаров. Перевозчик 1 отражается в двух разных документах перевозки. В регистр каждый раз пишется количество товаров в заказе. Так задумано для других отчётов. В принципе это количество из регистра можно вообще не брать. Нужно каждый раз брать количество товаров в заказе.
3 mistеr
 
06.08.14
14:25
(2) Ах, так между ними не товар делится, а расстояние? Тогда в ресурсе суммируешь Стоимость доставки, на уровне товара делишь на количество (в выч. поле), а на уровне заказа не делишь.
4 Deryni
 
06.08.14
14:35
(2)
Например перевозчик 1 везёт товар от пункта в в пункт Б, это оформляется соотв. документом.
Потом он же везёт этот же товар из Б в С. Снова отдельный документ
Затем П3 везёт из С в D и снова документ.

На уровне заказа я не могу не делить. Мне нужно посчитать среднюю цену перевозки по П1, например. Для этого я должен просуммировать всё, что он вёз и разделить на количество в заказе.
Т.е. если у меня Перевозчик самая верхняя группировка, мне нужно посчитать количество во всех заказах, которые он вёз. Просуммировать это количество, далее просуммировать общую стоимость перевозки и поделить. Таким образом я получу среднюю цену по нему.
Нужно учитывать, что заказов может быть много и товаров в них ещё больше.
5 mistеr
 
06.08.14
15:04
(4) Тогда нужно количество в заказе брать из отдельного набора данных, например, из документа. А стоимость из другого, подчиненного. Тогда СКД будет суммировать правильно, только на уровне заказа и выше.
6 Ненавижу 1С
 
гуру
06.08.14
15:06
ИТОГИ
  СУММА(Стоимость)/СУММА(Количество) КАК Цена
7 Deryni
 
12.08.14
19:29
В итоге всё получилось с помощью
СУММА(ВычислитьВыражениеСГруппировкойМассив("Количество/КвоДок", "ТЗаказ"))
Где ТЗаказ - это поле сочетание заказа и товара
КвоДок - количество документов регистраторов.
Количество - количество из регистра.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший