Olen Ivanovich
Гуру
(4384)
2 месяца назад
Ошибка, с которой вы столкнулись, возникает из-за того, что вы вызываете процедуру `СделатьПерерасчетЦеныПоВалютеНаСервере` на клиенте, но при этом не передаете необходимые параметры, которые эта процедура может ожидать.
В вашем случае метод `СделатьПерерасчетЦеныПоВалютеНаСервере` не принимает никаких параметров. Однако, если в самом методе вы используете другие значения, которые необходимо передать, это может вызывать недопонимание.
Вот несколько шагов, которые вы можете выполнить, чтобы исправить вашу ошибку:
1. **Измените вызов процедуры на клиенте, если параметры необходимы**. Например, если ваша процедура требует параметры, передайте их:
1C
СделатьПерерасчетЦеныПоВалютеНаСервере(Параметр1, Параметр2);
2. **Убедитесь, что в процедуре действительно не нужны параметры**. Если параметры не требуются, допишите данные в вашу процедуру и вызовите её так:
1C
СделатьПерерасчетЦеныПоВалютеНаСервере(Команда);
3. **Проверьте определение процедуры**. Если в процедуре на сервере вам действительно не нужны параметры, убедитесь, что она называется корректно и может быть вызвана из клиентской части без параметров:
1C
&НаСервере
Процедура СделатьПерерасчетЦеныПоВалютеНаСервере() // Убедитесь, что здесь не указаны параметры
4. **Если процедура должна принимать параметры, убедитесь, что вы передаете все необходимые значения**. Перепроверьте, какие параметры требуются, и передайте их откуда нужно.
### Пример, если параметры должны быть переданы:
Если вам нужно передать параметры, вы можете включить их в вызов:
1C
&НаКлиенте
Процедура ВалютаПриИзменении(Элемент)
СделатьПерерасчетЦеныПоВалютеНаСервере(Объект.Валюта, Объект.Дата);
КонецПроцедуры
И соответственно скорректировать процедуру на сервере:
1C
&НаСервере
Процедура СделатьПерерасчетЦеныПоВалютеНаСервере(Валюта, Дата)
// Логика вашей процедуры...
КонецПроцедуры
Убедитесь, что все параметры правильно переданы и соответствуют тем, которые объявлены в процедуре на сервере, чтобы избежать дальнейших ошибок.
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
СтрокаТЧ = Элементы.Товары.ТекущиеДанные;
СтрокаТЧ.Всего=СтрокаТЧ.Количество*СтрокаТЧ.Цена;
КонецПроцедуры
&НаКлиенте
Процедура СделатьПерерасчетЦеныПоВалюте(Команда)
Если Объект.КурсВалюты=0 тогда
Сообщить ("Курс валюты не может быть 0");
Возврат;
КонецЕсли;
Для каждого ТЧ Из Объект.Товары Цикл
ТЧ.Цена = ТЧ.Цена/Объект.КурсВалюты;
Если ТЧ.Количество = 0 тогда
Продолжить;
Иначе
ТЧ.Всего = ТЧ.Цена * ТЧ.Количество;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СделатьПерерасчетЦеныПоВалютеНаСервере(Команда)
Запрос=Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КурсыВалютСрезПоследних.Период КАК Период,
| КурсыВалютСрезПоследних.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
|ГДЕ
| КурсыВалютСрезПоследних.Период = &Период
| И КурсыВалютСрезПоследних.Валюта = &Валюта
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ";
Запрос.УстановитьПараметр("Валюта",Объект.Валюта);
Запрос.УстановитьПараметр("Период",Объект.Дата);
Результат = Запрос.Выполннить().Выбрать();
Если Результат.Количество()=0 тогда
Запрос.Текст = "ВЫБРАТЬ
| КурсыВалютСрезПоследних.Период КАК Период,
| КурсыВалютСрезПоследних.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют.СрезПоследних КАК КурсыВалютСрезПоследних
|ГДЕ
| КурсыВалютСрезПоследних.Валюта = &Валюта
|
|УПОРЯДОЧИТЬ ПО
| Период УБЫВ";
Результат = Запрос.Выполнить().Выбрать();
КонецЕсли;
Если Результат.Следующий()тогда
Объект.КурсВалюты = Результат.Курс;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВалютаПриИзменении(Элемент)
СделатьПерерасчетЦеныПоВалютеНаСервере();
КонецПроцедуры
\
Выдает ошибку : {Документ.РасходнаяНакладная.Форма.ФормаДокумента.Форма(60,1)}: Недостаточно фактических параметров (СделатьПерерасчетЦеныПоВалютеНаСервере)
Я понимаю, где это, но не могу понять почему не хватает фактичческих параметров.