В 1C:EDT
страницаВ 1C:EDT
Документ «Приходная накладная»
Добавьте объект конфигурации – общий модуль с именем РаботаСДокументами.
Установите в свойствах модуля флажок Клиент (управляемое приложение), а флажок Сервер снимите. Это означает, что экземпляры этого модуля будут скомпилированы в контексте тонкого клиента и в контексте веб-клиента (рис. 8.6).

Рис. 8.6. Свойства общего модуля
Внесите в модуль следующий текст (листинг 8.3).
**Листинг 8.**3. Процедура «РассчитатьСумму()»
Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт
СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;
КонецПроцедуры
В процедуру РассчитатьСумму() вы передадите переменную СтрокаТабличнойЧасти, которую вы определили в обработчике события ПриИзменении поля Количество (см. листинг 8.2). Она содержит данные редактируемой строки табличной части документа ПриходнаяНакладная.
Теперь, используя эту переменную, вы можете получить доступ к данным колонок табличной части и рассчитать сумму как произведение цены на количество.
Теперь в модуле вашей формы измените текст обработчика МатериалыКоличествоПриИзменении (листинг 8.4).
**Листинг 8.**4. Процедура «МатериалыКоличествоПриИзменении()»
&НаКлиенте
Процедура МатериалыКоличествоПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры
Изменения в процедуре выделены жирным шрифтом. Как вы видите, первая строка процедуры осталась без изменений. А во второй строке вместо непосредственного расчета суммы вызывается процедура РассчитатьСумму() из общего модуля РаботаСДокументами. В качестве параметра в эту процедуру передается текущая строка табличной части.
Проверьте, как это работает, и убедитесь, что ничего не изменилось.
Теперь осталось и для поля Цена установить такой же обработчик. Так как однажды вы уже написали в модуле формы нужную вам процедуру, вы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы «1С» не рекомендуют такое решение.
Узнай больше!
Согласно стандартам разработки фирмы «1С» у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:
– создается отдельная процедура (функция), выполняющая необходимые действия;
– для каждого элемента управления создается отдельный обработчик с именем, назначаемым по умолчанию;
– из каждого обработчика вызывается требуемая процедура (функция).
Поэтому создайте обработчик события ПриИзменении``для поля табличной части МатериалыЦена так же, как вы делали это для поля МатериалыКоличество, и повторите в нем вызов процедуры РассчитатьСумму() из общего модуля (листинг 8.5).
**Листинг 8.**5. Процедура «МатериалыЦенаПриИзменении()»
&НаКлиенте
Процедура МатериалыЦенаПриИзменении(Элемент)
СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
КонецПроцедуры