Для пересчета из валюты в валюту в типовых конфигурациях используется функция ПересчитатьИзВалютыВВалюту, расположенная в общем модуле - МодульВалютногоУчета.
Текст функции такой:
В УПП также существует функция ПересчитатьВСуммуРегл, которая предназначена для пересчета суммы управленческого учета в сумму регламентированного учета.
Примеры вызова функций:
Текст функции такой:
// Эта функция пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач
// в валюту ВалютаКон по курсу ПоКурсуКон
//
// Параметры:
// Сумма - сумма, которую следует пересчитать;
// ВалютаНач - ссылка на элемент справочника Валют;
// определяет валюты из которой надо пересчитвать;
// ВалютаКон - ссылка на элемент справочника Валют;
// определяет валюты в которую надо пересчитвать;
// ПоКурсуНач - курс из которого надо пересчитать;
// ПоКурсуКон - курс в который надо пересчитать;
// ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1);
// ПоКратностьКон - кратность в который надо пересчитать (по умолчанию = 1);
//
// Возвращаемое значение:
// Сумма, пересчитанная в другую валюту
//
Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
ПоКратностьНач = 1, ПоКратностьКон = 1, Погрешность = 0,
СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт
Если (ВалютаНач = ВалютаКон) Тогда
// Считаем, что пересчет не нужен.
Возврат Сумма;
КонецЕсли;
Если (ПоКурсуНач = ПоКурсуКон)
и (ПоКратностьНач = ПоКратностьКон) Тогда
// пересчет суммы не требуется
Возврат Сумма;
КонецЕсли;
Если ПоКурсуНач = 0
или ПоКурсуКон = 0
или ПоКратностьНач = 0
или ПоКратностьКон = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("При пересчете из валюты '"+ВалютаНач+"' в валюту '"+ВалютаКон+"' обнаружен нулевой курс. Пересчет не произведен!");
Возврат 0;
КонецЕсли;
НоваяСумма = (Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач);
Возврат ОбщегоНазначения.ОкруглитьСУчетомПогрешности(НоваяСумма, 2, Погрешность, СоответствиеПогрешностей, Ключ);
КонецФункции //ПересчитатьИзВалютыВВалюту()
// в валюту ВалютаКон по курсу ПоКурсуКон
//
// Параметры:
// Сумма - сумма, которую следует пересчитать;
// ВалютаНач - ссылка на элемент справочника Валют;
// определяет валюты из которой надо пересчитвать;
// ВалютаКон - ссылка на элемент справочника Валют;
// определяет валюты в которую надо пересчитвать;
// ПоКурсуНач - курс из которого надо пересчитать;
// ПоКурсуКон - курс в который надо пересчитать;
// ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1);
// ПоКратностьКон - кратность в который надо пересчитать (по умолчанию = 1);
//
// Возвращаемое значение:
// Сумма, пересчитанная в другую валюту
//
Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
ПоКратностьНач = 1, ПоКратностьКон = 1, Погрешность = 0,
СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт
Если (ВалютаНач = ВалютаКон) Тогда
// Считаем, что пересчет не нужен.
Возврат Сумма;
КонецЕсли;
Если (ПоКурсуНач = ПоКурсуКон)
и (ПоКратностьНач = ПоКратностьКон) Тогда
// пересчет суммы не требуется
Возврат Сумма;
КонецЕсли;
Если ПоКурсуНач = 0
или ПоКурсуКон = 0
или ПоКратностьНач = 0
или ПоКратностьКон = 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("При пересчете из валюты '"+ВалютаНач+"' в валюту '"+ВалютаКон+"' обнаружен нулевой курс. Пересчет не произведен!");
Возврат 0;
КонецЕсли;
НоваяСумма = (Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач);
Возврат ОбщегоНазначения.ОкруглитьСУчетомПогрешности(НоваяСумма, 2, Погрешность, СоответствиеПогрешностей, Ключ);
КонецФункции //ПересчитатьИзВалютыВВалюту()
В УПП также существует функция ПересчитатьВСуммуРегл, которая предназначена для пересчета суммы управленческого учета в сумму регламентированного учета.
// Функция производит пересчет суммы в валюте упр. учета в валюту регл. учета.
//
Функция ПересчитатьВСуммуРегл(СуммаУпр, ВалютаРегламентированногоУчета, ВалютаУправленческогоУчета, Дата) Экспорт
ВалютаРегл = ВалютаРегламентированногоУчета;
ВалютаУпр = ВалютаУправленческогоУчета;
КурсВал = ПолучитьКурсВалюты(ВалютаРегл, Дата);
КурсРегл = КурсВал.Курс;
КратРегл = КурсВал.Кратность;
КурсВал = ПолучитьКурсВалюты(ВалютаУпр, Дата);
КурсУпр = КурсВал.Курс;
КратУпр = КурсВал.Кратность;
Если КурсРегл = 0 Тогда
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ регламентированного учета!", СтатусСообщения.Внимание);
Возврат 0;
КонецЕсли;
Если КурсУпр = 0 Тогда
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ управленческого учета!", СтатусСообщения.Внимание);
Возврат 0;
КонецЕсли;
СуммаРегл = ПересчитатьИзВалютыВВалюту(СуммаУпр, ВалютаУпр, ВалютаРегл, КурсУпр, КурсРегл, КратУпр, КратРегл);
Возврат СуммаРегл;
КонецФункции // ПересчитатьВСуммуРегл()
//
Функция ПересчитатьВСуммуРегл(СуммаУпр, ВалютаРегламентированногоУчета, ВалютаУправленческогоУчета, Дата) Экспорт
ВалютаРегл = ВалютаРегламентированногоУчета;
ВалютаУпр = ВалютаУправленческогоУчета;
КурсВал = ПолучитьКурсВалюты(ВалютаРегл, Дата);
КурсРегл = КурсВал.Курс;
КратРегл = КурсВал.Кратность;
КурсВал = ПолучитьКурсВалюты(ВалютаУпр, Дата);
КурсУпр = КурсВал.Курс;
КратУпр = КурсВал.Кратность;
Если КурсРегл = 0 Тогда
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ регламентированного учета!", СтатусСообщения.Внимание);
Возврат 0;
КонецЕсли;
Если КурсУпр = 0 Тогда
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ управленческого учета!", СтатусСообщения.Внимание);
Возврат 0;
КонецЕсли;
СуммаРегл = ПересчитатьИзВалютыВВалюту(СуммаУпр, ВалютаУпр, ВалютаРегл, КурсУпр, КурсРегл, КратУпр, КратРегл);
Возврат СуммаРегл;
КонецФункции // ПересчитатьВСуммуРегл()
СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаДокумента, ВалютаДокумента,
СтруктураШапкиДокумента.ВалютаВзаиморасчетов, СтруктураШапкиДокумента.КурсДокумента, КурсВзаиморасчетов,
СтруктураШапкиДокумента.КратностьДокумента, КратностьВзаиморасчетов);
СтруктураШапкиДокумента.ВалютаВзаиморасчетов, СтруктураШапкиДокумента.КурсДокумента, КурсВзаиморасчетов,
СтруктураШапкиДокумента.КратностьДокумента, КратностьВзаиморасчетов);
СтрокаТабличнойЧасти.СтоимостьРегл = МодульВалютногоУчета.ПересчитатьВСуммуРегл(СтрокаТабличнойЧасти.Стоимость, мВалютаРегламентированногоУчета, мВалютаУправленческогоУчета, Дата);
Комментариев нет :
Отправить комментарий