Вызов функции при выборе номенклатуры и заполнение цены в документе
страницаВызов функции при выборе номенклатуры и заполнение цены в документе
Итак, задача, которая перед вами стоит, заключается в следующем. При редактировании документа ОказаниеУслуги вам необходимо обеспечить автоматическое заполнение поля Цена, после того как пользователь выберет материал. Причем цена материала должна определяться исходя из даты создаваемого документа.
Откройте форму ФормаДокумента документа ОказаниеУслуги.
Создайте обработчик события ПриИзменении, выполняющийся на клиенте, для поля табличной части ПереченьНоменклатурыНоменклатуратак же, как вы делали это для поля ПереченьНоменклатурыКоличество, ПереченьНоменклатурыЦена в предыдущем занятии, и заполните его следующим образом (листинг 9.2).
Листинг 9.2. Процедура «ПереченьНоменклатурыНоменклатураПриИзменении()»
// Получить текущую строку табличной части.
СтрокаТабличнойЧасти = Элементы.ПереченьНоменклатуры.ТекущиеДанные;
// Установить цену.
СтрокаТабличнойЧасти.Цена = РаботаСоСправочниками.РозничнаяЦена(Объект.Дата, СтрокаТабличнойЧасти.Номенклатура);
// Пересчитать сумму строки.
РаботаСДокументами.РассчитатьСумму(СтрокаТабличнойЧасти);
Первая строка обработчика вам уже знакома по процедурам ПереченьНоменклатурыКоличествоПриИзменении() и ПереченьНоменклатурыЦенаПриИзменении(). Сначала вы получаете текущую строку табличной части документа, так как она вам понадобится в дальнейшем, и сохраняете ее в переменной СтрокаТабличнойЧасти.
Затем вы вызываете вашу функцию РозничнаяЦена() из общего модуля РаботаСоСправочниками.
Первым параметром в эту функцию передается дата документа, на которую необходимо получить цену. Дату документа вы получаете из основного реквизита формы – Объект.Дата.
Вторым параметром передается ссылка на элемент справочника Номенклатура, который содержится в текущей строке табличной части документа (СтрокаТабличнойЧасти.Номенклатура).
Функция возвращает последнее значение цены, и это значение вы присваиваете полю Цена в текущей строке табличной части документа (СтрокаТабличнойЧасти.Цена).
Затем вы вызываете процедуру РассчитатьСумму() из общего модуля РаботаСДокументами. Эту процедуру вы создали на предыдущем занятии для того, чтобы при изменении цены или количества в документе пересчитывать сумму в строке документа.
Заметьте, что сама процедура ПереченьНоменклатурыНоменклатураПриИзменении() начинает работать в модуле формы на стороне клиента, так как это обработчик интерактивного события формы.
Затем вызывается функция РозничнаяЦена(). Поскольку эта функция не будет найдена на стороне клиента, исполнение будет передано в общий модуль РаботаСоСправочниками, который выполняется на сервере. После завершения функции программный код продолжит исполняться на клиенте.