|
Работа с табличной частью. | ☑ | ||
---|---|---|---|---|
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) самый надежный вариант еще пересчитывать перед записью
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |