среда, 12 марта 2014 г.

Типовая функция для пересчета из валюты в валюту

Для пересчета из валюты в валюту в типовых конфигурациях используется функция ПересчитатьИзВалютыВВалюту, расположенная в общем модуле - МодульВалютногоУчета.

Текст функции такой:
// Эта функция пересчитывает сумму из валюты ВалютаНач по курсу ПоКурсуНач
// в валюту ВалютаКон по курсу ПоКурсуКон
//
// Параметры:
//  Сумма          - сумма, которую следует пересчитать;
//  ВалютаНач      - ссылка на элемент справочника Валют;
//                   определяет валюты из которой надо пересчитвать;
//  ВалютаКон      - ссылка на элемент справочника Валют;
//                   определяет валюты в которую надо пересчитвать;
//  ПоКурсуНач     - курс из которого надо пересчитать;
//  ПоКурсуКон     - курс в который надо пересчитать;
//  ПоКратностьНач - кратность из которого надо пересчитать (по умолчанию = 1);
//  ПоКратностьКон - кратность в который надо пересчитать  (по умолчанию = 1);
//
// Возвращаемое значение:
//  Сумма, пересчитанная в другую валюту
//
Функция ПересчитатьИзВалютыВВалюту(Сумма, ВалютаНач, ВалютаКон, ПоКурсуНач, ПоКурсуКон,
                  
ПоКратностьНач = 1, ПоКратностьКон = 1, Погрешность = 0,
                  
СоответствиеПогрешностей = Неопределено, Ключ = Неопределено) Экспорт

    Если (
ВалютаНач = ВалютаКон) Тогда

       
// Считаем, что пересчет не нужен.
       
Возврат Сумма;
    КонецЕсли;

    Если (
ПоКурсуНач = ПоКурсуКон)
       и (
ПоКратностьНач = ПоКратностьКон) Тогда

       
// пересчет суммы не требуется
       
Возврат Сумма;
    КонецЕсли;

    Если
ПоКурсуНач     = 0
    
или ПоКурсуКон     = 0
    
или ПоКратностьНач = 0
    
или ПоКратностьКон = 0 Тогда
       
ОбщегоНазначения.СообщитьОбОшибке("При пересчете из валюты '"+ВалютаНач+"' в валюту '"+ВалютаКон+"' обнаружен нулевой курс. Пересчет не произведен!");
        Возврат
0;
    КонецЕсли;


   
НоваяСумма = (Сумма * ПоКурсуНач * ПоКратностьКон) / (ПоКурсуКон * ПоКратностьНач);
    Возврат
ОбщегоНазначения.ОкруглитьСУчетомПогрешности(НоваяСумма, 2, Погрешность, СоответствиеПогрешностей, Ключ);

КонецФункции
//ПересчитатьИзВалютыВВалюту()

В УПП также существует функция ПересчитатьВСуммуРегл, которая предназначена для пересчета суммы управленческого учета в сумму регламентированного учета.

// Функция производит пересчет суммы в валюте упр. учета в валюту регл. учета.
//
Функция ПересчитатьВСуммуРегл(СуммаУпр, ВалютаРегламентированногоУчета, ВалютаУправленческогоУчета, Дата) Экспорт

   
ВалютаРегл = ВалютаРегламентированногоУчета;
   
ВалютаУпр = ВалютаУправленческогоУчета;

   
КурсВал   = ПолучитьКурсВалюты(ВалютаРегл, Дата);
   
КурсРегл  = КурсВал.Курс;
   
КратРегл  = КурсВал.Кратность;

   
КурсВал   = ПолучитьКурсВалюты(ВалютаУпр, Дата);
   
КурсУпр   = КурсВал.Курс;
   
КратУпр   = КурсВал.Кратность;

    Если
КурсРегл = 0 Тогда
       
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ регламентированного учета!", СтатусСообщения.Внимание);
        Возврат
0;
    КонецЕсли;

    Если
КурсУпр = 0 Тогда
       
ОбщегоНазначения.Сообщение("Не задан курс валюты """ + ВалютаУправленческогоУчета + """ управленческого учета!", СтатусСообщения.Внимание);
        Возврат
0;
    КонецЕсли;

   
СуммаРегл = ПересчитатьИзВалютыВВалюту(СуммаУпр, ВалютаУпр, ВалютаРегл, КурсУпр, КурсРегл, КратУпр, КратРегл);

    Возврат
СуммаРегл;

КонецФункции
// ПересчитатьВСуммуРегл()

Примеры вызова функций:

СуммаВзаиморасчетов = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(СуммаДокумента, ВалютаДокумента,
СтруктураШапкиДокумента.ВалютаВзаиморасчетов, СтруктураШапкиДокумента.КурсДокумента, КурсВзаиморасчетов,
СтруктураШапкиДокумента.КратностьДокумента, КратностьВзаиморасчетов);


СтрокаТабличнойЧасти.СтоимостьРегл = МодульВалютногоУчета.ПересчитатьВСуммуРегл(СтрокаТабличнойЧасти.Стоимость, мВалютаРегламентированногоУчета, мВалютаУправленческогоУчета, Дата);


Добавить комментарий

Комментариев нет :

Отправить комментарий