8.х Заполнение данных в дереве значений с расчетом суммы по родителю

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем kuznkv, 25 дек 2015.

  1. TopicStarter Overlay
    kuznkv
    Offline

    kuznkv

    Регистрация:
    17 апр 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    Здрасьте. Помогите решить такую задачу. Есть дерево значений на форме (заполняется иерархическим справочником номенклатуры). Каждый элемент дерева имеет колонку, которую заполняет пользователь (количество). Проблема в том, что пользователь может заполнить данные по элементу или только по его родителю. Количество уровней неограниченно. Как лучше реализовать пересчет данных по всем уровням? Сделала расчет итогов при обходе дерева, но работает только тогда, когда вносишь данные в элемент. А хотелось бы где то по элементу с пересчетом по родителю, а где то сразу по группе с пересчетом по дальнейшему родителю.
    PS:Если данные заполнены по родителю, элементы принимают значение = 0, при изменении значения в элементе - пересчитывается по иерархии
  2. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Рекурсивную функцию курите.
  3. TopicStarter Overlay
    kuznkv
    Offline

    kuznkv

    Регистрация:
    17 апр 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    я наверное не очень понятно написала. Рекурсивная функция у меня работает, только если значение меняется по элементу. А если я хочу поменять значение в родителе, не затрагивая элементы, то не работает
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.566
    Симпатии:
    717
    Баллы:
    204
    Чем родитель отличается от элемента? В чем сложности делать перерасчет и при изменении родителя?
  5. TopicStarter Overlay
    kuznkv
    Offline

    kuznkv

    Регистрация:
    17 апр 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    что то не работает, если втыкаю проверку на изменение родителя в процедуре. Может подскажете куда код проверки внести?

    Процедура РассчитатьОбщуюСтоимость(СтрокаДереваЗначений) Экспорт
    Если СтрокаДереваЗначений.Уровень() = 0 Тогда
    СтрокаРодитель = СтрокаДереваЗначений;
    Иначе
    СтрокаРодитель = СтрокаДереваЗначений.Родитель;
    КонецЕсли;
    СуммаВсего = 0;
    Для Каждого Строка Из СтрокаРодитель.Строки Цикл
    СуммаВсего = СуммаВсего + Строка.Сумма;
    КонецЦикла;
    СтрокаРодитель.Сумма = СуммаВсего;
    КонецПроцедуры
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.771
    Симпатии:
    509
    Баллы:
    204
    Где рекурсия о которой вы говорили ???
  7. TopicStarter Overlay
    kuznkv
    Offline

    kuznkv

    Регистрация:
    17 апр 2015
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1
    задачу решила.

    Процедура РассчитатьОбщуюСтоимость(СтрокаДереваЗначений) Экспорт
    Если СтрокаДереваЗначений.Уровень() = 0 Тогда
    СтрокаРодитель = СтрокаДереваЗначений;
    Иначе
    СтрокаРодитель = СтрокаДереваЗначений.Родитель;
    КонецЕсли;
    СуммаВсего = 0;
    Для Каждого Строка Из СтрокаРодитель.Строки Цикл
    СуммаВсего = СуммаВсего + Строка.Сумма;
    КонецЦикла;
    СтрокаРодитель.Сумма = СуммаВсего;
    Если СтрокаРодитель.Сумма <> 0 и СтрокаРодитель.Уровень() <> 0 Тогда
    РассчитатьОбщуюСтоимость(СтрокаРодитель);
    КонецЕсли;
    КонецПроцедуры
    --- Объединение сообщений, 25 дек 2015 ---
    спасибо всем, кто откликнулся

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