584 документа
← К списку

В 1C:EDT

страница

В 1C:EDT

Документ «Приходная накладная»

Добавьте объект конфигурации – общий модуль с именем РаботаСДокументами.

Установите в свойствах модуля флажок Клиент (управляемое приложение), а флажок Сервер снимите. Это означает, что экземпляры этого модуля будут скомпилированы в контексте тонкого клиента и в контексте веб-клиента (рис. 8.6).

Рис. 8.6. Свойства общего модуля

Внесите в модуль следующий текст (листинг 8.3).

**Листинг 8.**3. Процедура «РассчитатьСумму()»

Процедура РассчитатьСумму(СтрокаТабличнойЧасти) Экспорт

 

СтрокаТабличнойЧасти.Сумма = СтрокаТабличнойЧасти.Количество * СтрокаТабличнойЧасти.Цена;

 

КонецПроцедуры

В процедуру РассчитатьСумму() вы передадите переменную СтрокаТабличнойЧасти, которую вы определили в обработчике события ПриИзменении поля Количество (см. листинг 8.2). Она содержит данные редактируемой строки табличной части документа ПриходнаяНакладная.

Теперь, используя эту переменную, вы можете получить доступ к данным колонок табличной части и рассчитать сумму как произведение цены на количество.

Теперь в модуле вашей формы измените текст обработчика МатериалыКоличествоПриИзменении (листинг 8.4).

**Листинг 8.**4. Процедура «МатериалыКоличествоПриИзменении()»

&НаКлиенте

Процедура МатериалыКоличествоПриИзменении(Элемент)

 

СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

 

КонецПроцедуры

Изменения в процедуре выделены жирным шрифтом. Как вы видите, первая строка процедуры осталась без изменений. А во второй строке вместо непосредственного расчета суммы вызывается процедура РассчитатьСумму() из общего модуля РаботаСДокументами. В качестве параметра в эту процедуру передается текущая строка табличной части.

Проверьте, как это работает, и убедитесь, что ничего не изменилось.

Теперь осталось и для поля Цена установить такой же обработчик. Так как однажды вы уже написали в модуле формы нужную вам процедуру, вы просто могли бы сопоставить ее также и другому событию другого элемента управления, расположенного в форме. Однако стандарты разработки конфигураций фирмы «1С» не рекомендуют такое решение.

Узнай больше!

Согласно стандартам разработки фирмы «1С» у каждого события должен быть свой обработчик. Если одинаковые действия должны выполняться при изменении разных элементов управления (например, при нажатии нескольких кнопок), то в этом случае следует поступать следующим образом:

– создается отдельная процедура (функция), выполняющая необходимые действия;

– для каждого элемента управления создается отдельный обработчик с именем, назначаемым по умолчанию;

– из каждого обработчика вызывается требуемая процедура (функция).

Поэтому создайте обработчик события ПриИзменении``для поля табличной части МатериалыЦена так же, как вы делали это для поля МатериалыКоличество, и повторите в нем вызов процедуры РассчитатьСумму() из общего модуля (листинг 8.5).

**Листинг 8.**5. Процедура «МатериалыЦенаПриИзменении()»

&НаКлиенте

Процедура МатериалыЦенаПриИзменении(Элемент)

 

СтрокаТабличнойЧасти = Элементы.Материалы.ТекущиеДанные;

РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);

 

КонецПроцедуры