Вход | Регистрация

1С:Предприятие ::

Метки: 

Среднее значение (аналогично СРЗНАЧ в Экссель)

Я
   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
 
 
   novichok79
 
1 - 12.06.18 - 15:51
НарастающийИтогПоКоличествуДоговорников / День(ТекущаяДатаСеанса())?
   dft2014
 
2 - 12.06.18 - 15:53
(1) День(ТекущаяДатаСеанса()) не походит, т.к. период задается на форме отчета.
   dft2014
 
3 - 12.06.18 - 16:01
Ниже код. Как добавить в него расчет среднего значения?

&НаСервере
Функция ПросмотретьНаСервере()
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("День");
    ТЗ.Колонки.Добавить("Месяц");
    ТЗ.Колонки.Добавить("ДГПХ");  
    
    ДГПХНаДату = 0;
    
    //Переберем все даты за период 

    ТекДат = НачалоДня(Отчет.Дата1);
    
    Пока ТекДат <= НачалоДня(Отчет.Дата2) Цикл
        
        ДГПХНаДату = ПодсчетДоговорников(ТекДат);
        
        //Добавим текущую дату в таблицу периодов

        НовСтр = ТЗ.Добавить();
        НовСтр.День = ТекДат;
        НовСтр.Месяц = Месяц(ТекДат);
        НовСтр.ДГПХ = ДГПХНаДату;
        
        ТекДат = ТекДат+86400//Добавим 1 День

        
        ДГПХНаДату = 0;
        
    КонецЦикла;
    
    НовТабДок = Новый ТабличныйДокумент;
    Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
    
    ТЗ.Сортировать("Месяц Возр, День Возр");
    
    текМесяц = "&#&#";

    прошлыйМесяц = Неопределено;
    
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        
        текМесяц = СокрЛП(СтрокаТЗ.Месяц);
        
        Если прошлыйМесяц = НЕОПРЕДЕЛЕНО Тогда
            НовыйМесяц = Истина;
        ИначеЕсли прошлыйМесяц = текМесяц Тогда
            НовыйМесяц = Ложь;
        Иначе
            НовыйМесяц = Истина;
        КонецЕсли;
        
        
        Если НовыйМесяц = Истина Тогда
            прошлыйМесяц = текМесяц;
            
            СтрокаМесяц = Макет.ПолучитьОбласть("Месяц");
            СтрокаМесяц.Параметры.Месяц = СтрокаТЗ.Месяц;
            НовТабДок.Вывести(СтрокаМесяц);
            
        КонецЕсли;
        
        СтрокаТЧ = Макет.ПолучитьОбласть("СтрокаТЧ");
        СтрокаТЧ.Параметры.День = СтрокаТЗ.День;
        
        СтрокаТЧ.Параметры.ДГПХ = СтрокаТЗ.ДГПХ;
        
        НовТабДок.Вывести(СтрокаТЧ);
        
    КонецЦикла;
    
    Возврат НовТабДок;
    
КонецФункции
   dft2014
 
4 - 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
   novichok79
 
5 - 12.06.18 - 16:14
(2) в виде даты можно взять любое значение
(3) ТЗ.Итог("ДГПХ") / День(СтрокаТЗ.День) ?
   novichok79
 
6 - 12.06.18 - 16:18
(3) дичь какая-то имхо. непонятно откуда у тебя берется ДГПХ, почему сразу в запросе не взять, хз. накрайняк можно с СКД заморочиться.
чтобы было как в (4)
надо делить не на день месяца, а на порядковый номер этого дня, т. е.
ТЗ.Итог("ДГПХ") / ПорядковыйНомерДня
   NSSerg
 
7 - 12.06.18 - 16:25
(6) ???? Какая СКД? Три строки кода дописать.
прошлыйМесяц = Неопределено;
всегоЗначений = 0;//NS    

суммаНарастающимИтогом = 0;//NS    

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


Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует