|
Работа с табличной частью. |
☑ |
0
kolespo
17.09.17
✎
14:39
|
Здравствуйте.
Стоит следующая задача:
У документа имеются реквизиты:
- Сумма документа - Полная сумма продаваемых товаров. Должна высчитываться автоматически и в любой момент времени должна быть актуальна.
- Сумма скидки - Полная сумма всех предоставленных скидок. Должна высчитываться автоматически и в любой момент времени должна быть актуальна.
Табличная часть "Товары". Поля:
- Номенклатура
- Количество
- Цена
- Сумма
- Ручная скидка, %
- Автоматическая скидка, % Поле недоступно для изменения.
- Всего Значение поля рассчитывается из суммы и скидок
Мною написан следующий код:
Процедура ТоварыПриИзменении(Элемент)
Объект.СуммаРабот = 0 ;
Объект.СуммаСкидки = 0 ;
Для каждого СтрТовар из Объект.Товары
Цикл
СтрТовар.Сумма= СтрТовар.Цена * СтрТовар.Количество ;
СуммаРучнойСкидки = СтрТовар.Сумма * (СтрТовар.РучнаяСкидка /100 );
СуммаАвтоматическаяСкидка = СтрТовар.Сумма * (СтрТовар.АвтоматическаяСкидка /100 ) ;
СуммаСкидкиСтр = СуммаРучнойСкидки + СуммаАвтоматическаяСкидка ;
Объект.СуммаСкидки = Объект.СуммаСкидки + СуммаСкидкиСтр ;
СтрТовар.Всего = СтрТовар.Сумма - СуммаСкидкиСтр ;
Объект.СуммаРабот = Объект.СуммаРабот + СтрТовар.Всего ;
КонецЦикла
КонецПроцедуры
Насколько понимаю, это не совсем верное решение, т.к. при каждом изменении в табличной части происходит вызов процедуры. ПОдскажите, как решить данную задачу?
|
|
1
Denis_CFO
17.09.17
✎
14:43
|
(0) Так будешь пересчитывать только текущую строку:
ТС = Элементы.Товары.ТекущиеДанные;
ТС.Сумма = ТС.Цена * ТС.Количество;
Далее - аналогично.
|
|
2
kolespo
17.09.17
✎
14:58
|
То есть без цикла?
Но в этом случае неправильно будет считаться
Объект.СуммаРабот
Объект.СуммаСкидки
Или нужно вешать процедуру на событие "при изменении" каждого столбца таблицы?
|
|
3
Denis_CFO
17.09.17
✎
17:31
|
(2) Объект.СуммаРабот = Объект.Товары.Итог("СуммаРабот")
|
|
4
rudnitskij
17.09.17
✎
21:29
|
(0) еще надо бы пересчитывать при изменении цены или количества
|
|
5
Злопчинский
17.09.17
✎
21:52
|
(4) не забыть при удалении строки
|
|
6
rudnitskij
17.09.17
✎
22:08
|
(5) самый надежный вариант еще пересчитывать перед записью
|
|