Имя: Пароль:
1C
 
Среднее значение (аналогично СРЗНАЧ в Экссель)
0 dft2014
 
12.06.18
15:47
Есть функция, с помощью которой нахожу количество договорников на каждый день: ПодсчетДоговорников(Дата).

Не могу придумать, как теперь рассчитать среднее количество договорников на каждый день. Например:
На 1июня - 10 договорников
На 2июня - 15 договорников
На 3июня - 18 договорников

Среднее количество договорников будет:
На 1июня 10/1=10
На 2июня (10+15)/2 = 12,5
На 3июня (10+15+18)/3 = 14,33
1 novichok79
 
12.06.18
15:51
НарастающийИтогПоКоличествуДоговорников / День(ТекущаяДатаСеанса())?
2 dft2014
 
12.06.18
15:53
(1) День(ТекущаяДатаСеанса()) не походит, т.к. период задается на форме отчета.
3 dft2014
 
12.06.18
16:01
Ниже код. Как добавить в него расчет среднего значения?

&НаСервере
Функция ПросмотретьНаСервере()
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("День");
    ТЗ.Колонки.Добавить("Месяц");
    ТЗ.Колонки.Добавить("ДГПХ");  
    
    ДГПХНаДату = 0;
    
    //Переберем все даты за период
    ТекДат = НачалоДня(Отчет.Дата1);
    
    Пока ТекДат <= НачалоДня(Отчет.Дата2) Цикл
        
        ДГПХНаДату = ПодсчетДоговорников(ТекДат);
        
        //Добавим текущую дату в таблицу периодов
        НовСтр = ТЗ.Добавить();
        НовСтр.День = ТекДат;
        НовСтр.Месяц = Месяц(ТекДат);
        НовСтр.ДГПХ = ДГПХНаДату;
        
        ТекДат = ТекДат+86400;//Добавим 1 День
        
        ДГПХНаДату = 0;
        
    КонецЦикла;
    
    НовТабДок = Новый ТабличныйДокумент;
    Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
    
    ТЗ.Сортировать("Месяц Возр, День Возр");
    
    текМесяц = "&#&#";
    прошлыйМесяц = Неопределено;
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        
        текМесяц = СокрЛП(СтрокаТЗ.Месяц);
        
        Если прошлыйМесяц = НЕОПРЕДЕЛЕНО Тогда
            НовыйМесяц = Истина;
        ИначеЕсли прошлыйМесяц = текМесяц Тогда
            НовыйМесяц = Ложь;
        Иначе
            НовыйМесяц = Истина;
        КонецЕсли;
        
        
        Если НовыйМесяц = Истина Тогда
            прошлыйМесяц = текМесяц;
            
            СтрокаМесяц = Макет.ПолучитьОбласть("Месяц");
            СтрокаМесяц.Параметры.Месяц = СтрокаТЗ.Месяц;
            НовТабДок.Вывести(СтрокаМесяц);
            
        КонецЕсли;
        
        СтрокаТЧ = Макет.ПолучитьОбласть("СтрокаТЧ");
        СтрокаТЧ.Параметры.День = СтрокаТЗ.День;
        
        СтрокаТЧ.Параметры.ДГПХ = СтрокаТЗ.ДГПХ;
        
        НовТабДок.Вывести(СтрокаТЧ);
        
    КонецЦикла;
    
    Возврат НовТабДок;
    
КонецФункции
4 dft2014
 
12.06.18
16:04
Т.е. сейчас уу меня отчет выводится в виде:

Июнь
01.06.2018  10
02.06.2018  15
03.06.2018  18


Надо добавить еще столбец расчета среднего, чтобы было так:

Июнь
01.06.2018  10  10
02.06.2018  15  12,5
06.06.2018  18  14,3
5 novichok79
 
12.06.18
16:14
(2) в виде даты можно взять любое значение
(3) ТЗ.Итог("ДГПХ") / День(СтрокаТЗ.День) ?
6 novichok79
 
12.06.18
16:18
(3) дичь какая-то имхо. непонятно откуда у тебя берется ДГПХ, почему сразу в запросе не взять, хз. накрайняк можно с СКД заморочиться.
чтобы было как в (4)
надо делить не на день месяца, а на порядковый номер этого дня, т. е.
ТЗ.Итог("ДГПХ") / ПорядковыйНомерДня
7 NSSerg
 
12.06.18
16:25
(6) ???? Какая СКД? Три строки кода дописать.
прошлыйМесяц = Неопределено;
всегоЗначений = 0; //NS    
суммаНарастающимИтогом = 0; //NS    
Для Каждого СтрокаТЗ Из ТЗ Цикл
        СтрокаТЧ.Параметры.День = СтрокаТЗ.День;
        СтрокаТЧ.Параметры.ДГПХ = СтрокаТЗ.ДГПХ;
        суммаНарастающимИтогом  = суммаНарастающимИтогом + СтрокаТЗ.ДГПХ;
        всегоЗначений           = всегоЗначений + 1;
        среднее                 = суммаНарастающимИтогом / всегоЗначений;
        НовТабДок.Вывести(СтрокаТЧ);        
КонецЦикла;
8 novichok79
 
12.06.18
16:26
(7) ну раз 3 строки, то СКД - перебор
9 dft2014
 
12.06.18
16:41
(6) Спасибо! А как получить ПорядковыйНомерДня?
10 NSSerg
 
12.06.18
16:49
(9) В цикле прибавлять по единичке, как в (7)
переменная "всегоЗначений"
11 novichok79
 
12.06.18
16:49
(9) очень странные вопросы... ПорядковыйНомерДня = Индекс(СтрокаТЗ) + 1?
12 novichok79
 
12.06.18
16:50
можно и порядковый номер дня счетчиком сделать, это уже дело фантазии автора
13 Armando
 
12.06.18
17:01
Может это поможет
http://v8.1c.ru/overview/Term_000000271.htm
14 NSSerg
 
12.06.18
17:11
(13) Тут задача - в цикле (см. (0),(3)) посчитать среднее нарастающим итогом.
15 ILM
 
гуру
12.06.18
17:21
Убить менеждера, который это заказал - не предлагали?
16 ILM
 
гуру
12.06.18
17:21
Дайте ему Талеба "Черный лебедь" почитать.
17 dft2014
 
12.06.18
21:34
(7) Спасибо!