Необходимо на форме при смене контрагента получить процент скидки и пересчитать весь табличный документ. Процент скидки по контрагенту получаю в модуле объекта документа:
Процедура ПолучитьПроцентСкидки() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ШкалаСкидокСрезПоследних.Скидка
|ИЗ
| РегистрСведений.ШкалаСкидок.СрезПоследних(&МоментВремени, ) КАК ШкалаСкидокСрезПоследних
|ГДЕ
| ШкалаСкидокСрезПоследних.ОбъемЗакупок > &ОбъемЗакупок
|
|УПОРЯДОЧИТЬ ПО
| ШкалаСкидокСрезПоследних.ОбъемЗакупок";
Если ЭтоНовый() Тогда
Запрос.УстановитьПараметр("МоментВремени", Дата);
Иначе
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
КонецЕсли;
Отбор = Новый Структура();
Отбор.Вставить("Контрагент", Контрагент);
Обороты = РегистрыНакопления.Продажи.Обороты(
ДобавитьМесяц(НачалоМесяца(Дата),-1), НачалоМесяца(Дата)-1,
Отбор,,"СуммаПродаж");
Если Обороты.Количество() <> 0 Тогда
ОбъемЗакупок = Обороты[0].СуммаПродаж;
Иначе
ОбъемЗакупок = 0;
КонецЕсли;
Запрос.УстановитьПараметр("ОбъемЗакупок", ОбъемЗакупок);
РезультатЗапроса = Запрос.Выполнить();
если РезультатЗапроса.Пустой() Тогда
Скидка = 0;
Иначе
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Скидка = Выборка.Скидка;
КонецЕсли;
КонецПроцедуры
В этой процедуре все проверил отладчиком - все корректно. А вот в модуль формы как передать эту скидку не знаю. Подскажите пожалуйста. Вот код:
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
ТестНаСервере();
Стр = Элементы.Товары.ТекущиеДанные;
Для Каждого Стр Из Объект.Товары Цикл
Стр.Цена = Стр.Цена*(100-Скидка)/100;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ТестНаСервере()
ОбъектНаСервере = РеквизитФормыВЗначение("Объект");
ОбъектНаСервере.ПолучитьПроцентСкидки();
ЗначениеВРеквизитФормы(ОбъектНаСервере, "Объект");
КонецПроцедуры