1С:Предприятие 8
Система программ

Как рассчитать сумму в строке табличной части справочника или документа?

25.06.2012

В реальной работе прикладного решения часто возникает необходимость автоматизировать некоторые подсчеты согласно собственному алгоритму. Например, сделать так, чтобы сумма в строке табличной части документа автоматически вычислялась при изменении цены или количества в строке.

Это небольшое вычисление производится в модуле формы в процедуре, выполняющейся на клиенте. Такой процедурой являются обработчики события ПриИзменении полей Цена и Количество табличной части документа.

Итак, сначала нужно создать форму документа, чтобы в ней описать собственный алгоритм вычислений. Затем, открыв палитру свойств полей Цена и Количество табличной части документа, создать для них обработчики события ПриИзменении и внести в них следующий код:

&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена; 
КонецПроцедуры  

При выполнении этого кода в переменную СтрокаТабличнойЧасти помещается объект, содержащий данные текущей строки документа, которую требуется пересчитать. Получив этот объект, можно обратиться к данным конкретной колонки табличной части, указав имя колонки в качестве свойства объекта. Таким образом, во второй строке процедуры обработчика вычисляется значение колонки Сумма как произведение значений колонок Количество и Цена.

Если процедура расчета суммы может понадобиться сразу для нескольких документов, то полезно разместить эту процедуру в общем модуле, и обращаться к ней из форм документов. Например, в общем модуле РаботаСДокументами поместить процедуру РассчитатьСумму():

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
   СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена; 
КонецПроцедуры 

В модуле формы документа вызывать ее из обработчиков события ПриИзменении:

&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
   РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
   СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
   РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры