Для того чтобы алгоритм, выполняемый при обработке
события, был доступен для разных документов, мы создадим общий модуль и перенесем
в него нашу процедуру расчета суммы. А в документе просто оставим вызовы этой процедуры
из общего модуля.
Создадим объект конфигурации Общий модуль в ветке
Общие 4 Общие модули и назовем его РаботаСДокументами. Он будет содержать следующий
текст (листинг 3.2):
Листинг
3.2.
Процедура РассчитатьСумму()
Процедура РассчитатьСумму(СтрокаТабличнойЧасти)
Экспорт
СтрокаТабличнойЧасти.Сумма
= СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
Ключевое слово Экспорт в конце оператора Процедура как раз
указывает на то, что эта процедура может быть доступна из других программных модулей.
Затем в модуле нашей формы изменим текст нашего обработчика
(листинг 3.3):
Листинг
3.3.
Процедура МатериалыКоличествоПриИзменении()
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти
= ЭлементыФормы.Материалы.ТекущиеДанные;
//
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Таким образом, теперь вместо непосредственного расчета
суммы мы будем вызывать процедуру из общего модуля и передавать ей в качестве параметра
нужную нам строку табличной части.
Проверим, как это работает, и убедимся, что ничего
не изменилось.
Теперь осталось и для поля Цена установить такой же обработчик. Так как однажды мы уже написали в модуле
формы нужную нам процедуру, то мы просто могли бы сопоставить ее также и другому
событию другого элемента управления, расположенного в форме. Однако стандарты разработки
конфигураций фирмы «1С» не допускают такого решения.
УЗНАЙ БОЛЬШЕ!
Согласно
стандартам разработки фирмы «1С», у каждого события должен быть свой обработчик.
Если одинаковые действия должны выполняться при изменении разных элементов управления
(например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим
образом:
-
создается отдельная процедура (функция), выполняющая необходимые действия;
-
для каждого элемента управления создается отдельный обработчик с именем, назначаемым
по умолчанию;
-
из каждого обработчика вызывается требуемая процедура (функция).
Поэтому мы создадим обработчик события При изменении для поля ввода, которое расположено в колонке Цена, и повторим в нем вызов процедуры РассчитатьСумму из общего модуля (листинг 3.4):
Листинг
3.4.
Процедура МатериалыЦенаПриИзменении()
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти
= ЭлементыФормы.Материалы.ТекущиеДанные;
//
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Запустим 1С:Предприятие в режиме
отладки и убедимся, что теперь сумма в строках табличной части документов Приходная накладная пересчитывается как при изменении количества, так
и при изменении цены.