Имя: Пароль:
1C
1С v8
Расчет средних показателей в отчетах на СКД
0 nemoxp
 
27.09.16
12:58
Есть выборка типа (перечисляю атрибуты): номенклатура, документ оприходования, документ продажи, стоимость продаж, прибыль, эффективность. Эффективность расчитываю как Прибыль / СтоимостьПродаж * 100%. Расчет идет по документам оприходования, т.е. 1 документу продажи может соответствовать много документов оприходования. Строю отчет на СКД. Группировка по строкам от верхнего уровня иерархии до нижнего: номенклатура, документ продажи, документ оприходования. Детальные записи: стоимость продаж, прибыль, эффективность. Требуется вычислять эффективность по группировкам. Я это сделал в настройках СКД на закладке "Ресурсы", установив формулу расчета "СРЕДНЕЕ". Для полей "Стоимость продаж" и "Прибыль" по группировкам вычисляется СУММА.

Незадача в том, что результат расчета среднего значения Эффективности в группировке не соответствует расчету по значениям из той же группировки: "Прибыль / СтоимостьПродаж * 100%". И это математически верно, т.к. нижняя группировка по реализациям с несколькими оприходованиями портит картину... Как можно исправить ситуацию, чтобы расчет Эффективности по группировкам соответствовал значениям "Стоимость продаж" и "Прибыль" в той же группировки?
1 segn
 
27.09.16
13:04
Попробуй ВычислитьВыражение() - там можно указать по какой группировке считать.
2 vicof
 
27.09.16
13:05
По умолчанию все агрегатные функции применяются к детальным записям - проблема в этом.
3 nemoxp
 
27.09.16
13:16
(1) где это указывать?
4 nemoxp
 
27.09.16
13:23
(1) Нашел. В вычисляемых полях, верно? Например: ВычислитьВыражение(Прибыль / СтоимостьПродаж * 100%, ....)? А что дальше в параметрах указать?
5 aleks_default
 
27.09.16
13:55
Сделай Среднее(Прибыль) / Среднее(СтоимостьПродаж) * 100%
6 тарам пам пам
 
27.09.16
14:44
(5) Вообще-то Среднее(Прибыль / СтоимостьПродаж * 100%) <> Среднее(Прибыль) / Среднее(СтоимостьПродаж) * 100%

Нужно сделать Среднее(ВычислитьВыражениеСГруппировкойМассив("Сумма(Прибыль) / Сумма(СтоимостьПродаж) * 100%", "ДокументОприходования"))
7 тарам пам пам
 
27.09.16
14:46
(6)+ только "ДокументПродажи" там вместо "ДокументОприходования"
8 тарам пам пам
 
27.09.16
14:48
Блин, прочитал по диагонали вопрос и неверно понял его. Тебе похоже вообще в ресурсе нужно указать Сумма(Прибыль) / Сумма(СтоимостьПродаж) * 100% и не заморачиваться с ВычислитьВыражение.
9 nemoxp
 
28.09.16
13:30
Всем спасибо за участие! Но что-то все не то. Нужно чтобы Эффективность считалась по каждой строке, в т.ч. и по группировкам. Сделал по-другому. После формирования отчета и его вывода в ТабДок пробигаюсь по строкам и перерасчитываю значения Эффективности, примерно так:

ПолеЭффективность = ЭлементыФормы.Результат.НайтиТекст("Эффективность");
ПолеПрибыль = ЭлементыФормы.Результат.НайтиТекст("Прибыль");
ПолеСтоимость = ЭлементыФормы.Результат.НайтиТекст("Стоимость");
Для н = ПолеЭффективность.Верх По ЭлементыФормы.Результат.Высота Цикл
   Попытка
      Прибыль = Число(ЭлементыФормы.Результат.Область("R" + Строка(н) + "C" + Строка(ПолеПрибыль.Лево)).Текст);
      Стоимость = Число(ЭлементыФормы.Результат.Область("R" + Строка(н) + "C" + Строка(ПолеСтоимость.Лево)).Текст);
      ЭлементыФормы.Результат.Область("R" + Строка(н) + "C" + Строка(ПолеЭффективность.Лево)).Текст = Прибыль / Стоимость * 100;
   Исключение КонецПопытки
КонецЦикла;
10 KrasnSergey
 
28.09.16
13:39
В  ресурсах примерно так
Среднее(ВычислитьВыражениеСГруппировкойМассив("Максимум(КоличествоСтавок)","Должность"))
11 aleks_default
 
28.09.16
14:29
Ты бы толком объяснил что конкретно тебе надо, формулу расчета по группировкам. Не пришлось бы извращаться. СКД позволяет рассчитать практически все.
12 nemoxp
 
29.09.16
11:26
(11) Группировка по строкам от верхнего уровня иерархии до нижнего: номенклатура, документ продажи, документ оприходования. Детальные записи: стоимость продаж, прибыль, эффективность.

Расчет Эффективности нужно делать по значениям в группировки, а не по детальным записям. Т.е. в группировки уровня "документ продажи" значения стоимость продаж и прибыль определяется как сумма по детальным записям. Эффективность по этой группировки нужно считать как: (сумма прибыли по группировки "документы продаж") / (сумму стоимость продаж по той же группировки) * 100
13 aleks_default
 
29.09.16
11:32
(12) тогда как-то так

Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(Прибыль)","ДокументПродажи"))/Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(СтоимостьПродаж)","ДокументПродажи"))*100
14 nemoxp
 
29.09.16
11:36
(8) это вроде работает. проверяю. спасибо всем! только сейчас вникаю в функции для расчета вычисляемых полей!
15 aleks_default
 
29.09.16
11:36
Вернее если это расчет для группировки "Документ продажи", то
Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(Прибыль)","ДокументОприходования"))/Сумма(ВычислитьВыражениеСГруппировкойМассив("Сумма(СтоимостьПродаж)","ДокументОприходования"))*100
16 nemoxp
 
29.09.16
11:37
(13) но это только для одного уровня группировки, для "ДокументПродажи". (8) - а это вроде подходит для всех группировок...
17 aleks_default
 
29.09.16
11:37
Или там  если не сумма а среднее, замени где нужно
18 nemoxp
 
29.09.16
11:42
(15) а как написать, если группировок 3, а нужно такое вычислить только для 2-х?
19 aleks_default
 
29.09.16
11:54
Там есть колонка "Рассчитывать по".
И один и тот же ресурс можно добавлять на закладке "Ресурсы" несколько раз и через "рассчитывать по" разграничивать по каким группировкам какое выражение считать.
Основная теорема систематики: Новые системы плодят новые проблемы.