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