Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 сен 2021, 05:37

Суммирование значений выделенных строк табличной части

Автор Артем Перепелица, 18 окт 2018, 08:32

0 Пользователей и 1 гость просматривают эту тему.

Артем Перепелица

Всем Добрый день! Столкнулся с такой задачей, помогите решить. Есть табличное поле на форме документа, состоящее из 2 табличных частей: "ПереченьНоменклатуры" и "Материалы".
    На вкладке "Материал" при выделении строки программно фильтруется отбор по значению в строке колонки "Материал" (при нажатии на кнопку Команда 1). В колонке "Количество" должна суммироваться сумма значений отобранных, выделенных строк. Когда отобранными получается 2 и более строк, то суммирует правильно, а когда отобранной получается только одна строка, то сумма задваивается. Как это можно исправить?
       Вот код:

       СтрокаТЧ=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
       СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;

       // установим отбор (фильтр)
      ФМ=Новый ФиксированнаяСтруктура("Материал",Элементы.Материалы.ТекущиеДанные.Материал);
      Элементы.Материалы.ОтборСтрок=ФМ;

       // Выделим строки
      Для каждого стр из Объект.Материалы Цикл
      Элементы.Материалы.ВыделенныеСтроки.Добавить(стр.НомерСтроки-1);
      КонецЦикла;

      // Получим список выделенных строк
        ВыделенныеСтроки = Элементы.Материалы.ВыделенныеСтроки;
        Сумма = 0;

        // Обойдем строки и посчитаем сумму
        // здесь и возникает проблема

         Для Каждого Строка Из ВыделенныеСтроки Цикл
         Сумма=Сумма+Элементы.Материалы.ДанныеСтроки(Строка).Количество;
         СтрокаТЧ.Количество = Сумма;

     КонецЦикла;

LexaK

попробуйте изменить логику,
там где вы получаете строки по отбору, и потом в цикле делаете строчки выдаленными, там же сразу и посчитайте Сумму.

и тогда второй цикл обхода выделенных строк и суммирование не нужен

СтрокаТЧ=Элементы.ПереченьНоменклатуры.ТекущиеДанные;
       СтрокаТабличнойЧасти=Элементы.Материалы.ТекущиеДанные;

       // установим отбор (фильтр)
      ФМ=Новый ФиксированнаяСтруктура("Материал",Элементы.Материалы.ТекущиеДанные.Материал);
      Элементы.Материалы.ОтборСтрок=ФМ;

        Сумма = 0;
       // Выделим строки
      Для каждого стр из Объект.Материалы Цикл
      Элементы.Материалы.ВыделенныеСтроки.Добавить(стр.НомерСтроки-1); //здесь отмечаем строки
         Сумма=Сумма + стр.Количество; //здесь считаем сумму
      КонецЦикла;
         СтрокаТЧ.Количество = Сумма;

//это уже не надо
//      // Получим список выделенных строк
//        ВыделенныеСтроки = Элементы.Материалы.ВыделенныеСтроки;
//        // Обойдем строки и посчитаем сумму
//        // здесь и возникает проблема
//         Для Каждого Строка Из ВыделенныеСтроки Цикл
//         Сумма=Сумма+Элементы.Материалы.ДанныеСтроки(Строка).Количество;
//         СтрокаТЧ.Количество = Сумма;
//     КонецЦикла;

ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск