[РЕШЕНО] Итоги в дереве значений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем User, 10 окт 2014.

  1. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Подскажите, пожалуйста, как вывести итоги в дереве значений с несколькими уровнями вложения.
    В процедуре расчета
    Код:
    Для Каждого СтрокаДереваЗначений Из ДеревоРезультат.Строки Цикл
            РассчитатьОбщуюСтоимость(СтрокаДереваЗначений);
    КонецЦикла;
    и
    Код:
    Процедура РассчитатьОбщуюСтоимость(СтрокаДереваЗначений) Экспорт
        Если СтрокаДереваЗначений.Уровень() = 0 Тогда
            СтрокаРодитель = СтрокаДереваЗначений;
        Иначе
            СтрокаРодитель = СтрокаДереваЗначений.Родитель;
        КонецЕсли; 
        СуммаВсего = 0;
        Для Каждого Строка Из СтрокаРодитель.Строки Цикл
            СуммаВсего = СуммаВсего + Строка.Сумма;
        КонецЦикла;
        СтрокаРодитель.Сумма = СуммаВсего;
    КонецПроцедуры
    В данном случае итоговая сумма собирает только суммы первого уровня. Как заставить считать суммы всех уровней?
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    прочитать про рекурсивные процедуры.

    просто вызывайте эту процедуру для строки, если у нее есть зависимые строки, а если нет - берите сумму из этой строки
    User нравится это.
  3. TopicStarter Overlay
    User
    Offline

    User Опытный в 1С

    Регистрация:
    4 фев 2013
    Сообщения:
    146
    Симпатии:
    0
    Баллы:
    26
    Благодарю. Получилось!
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    Код:
    Функция СуммаСтрок(СтрокаДерева, Поле)
      Сумма = 0;
      Для Каждого ДочерняяСтрока Из СтрокаДерева.Строки Цикл
        Если ДочерняяСтрока.Строки.Количество()=0 Тогда
          Сумма = Сумма+ДочерняяСтрока[Поле];
        Иначе
          Сумма = Сумма+СуммаСтрок(ДочерняяСтрока, Поле);
        КонецЕсли;
      КонецЦикла;
    
      Возврат Сумма;
    КонецФункции

Поделиться этой страницей