К статье
Практический материал

Справочники и Данные · 10 мин

Как получить курс валюты на дату в 1С

Как получить курс валюты на дату в 1С: регистр КурсыВалют, срез последних, запрос с периодичностью, типовые механизмы загрузки курсов и типичные ошибки.

Курсы валют в типовых конфигурациях 1С хранятся в периодическом регистре сведений «КурсыВалют». Периодичность регистра — «в пределах дня», измерение — ссылка на справочник «Валюты», ресурсы — «Курс» и «Кратность». Получить курс на дату можно тремя способами: через встроенную функцию модуля «РаботаСКурсамиВалют», через запрос со срезом последних или через виртуальную таблицу с параметром периодичности.

Выбор способа зависит от задачи. Для разового пересчёта суммы в коде проще всего вызвать готовую функцию типовой библиотеки. Для отчёта или обработки, где нужно пересчитать много документов за период, правильнее использовать запрос с виртуальной таблицей — это быстрее и не требует цикла по записям.

Важный нюанс: регистр хранит курс только на те даты, когда он менялся или был загружен. Если курс на 15 число не загружался, записи с этой датой нет — нужно брать последнее известное значение до этой даты. Все штатные механизмы делают это автоматически, но при написании собственных запросов про такое поведение легко забыть.

Где хранятся курсы валют в 1С

Основное хранилище — периодический регистр сведений «КурсыВалют» с периодичностью «в пределах дня». Структура регистра: измерение «Валюта» (ссылка на справочник «Валюты»), ресурсы «Курс» и «Кратность». Кратность показывает, за какое количество единиц валюты указан курс: например, курс японской иены обычно публикуется за 100 иен.

Посмотреть данные вручную можно через справочник «Валюты»: откройте нужную валюту и перейдите по ссылке «Курсы валют» (или «Курс валюты» — формулировка зависит от конфигурации). Там же видно, загружался ли курс на нужную дату и какое значение записано.

В некоторых конфигурациях существуют дополнительные регистры — например, «ОтносительныеКурсыВалют» для валют, курс которых задаётся относительно другой валюты, а не рубля. Если ваша база использует такие валюты, проверяйте, из какого регистра читает данные прикладной код.

Как получить курс в коде через типовые функции

В конфигурациях на базе Библиотеки стандартных подсистем (УТ 11, ERP, БП 3.0, КА 2 и другие) используйте модуль «РаботаСКурсамиВалют». Базовый вызов выглядит так:

Курс = РаботаСКурсамиВалют.ПолучитьКурсВалюты(ВалютаСсылка, ДатаКурса);

// Курс — структура с полями Курс и Кратность

Для пересчёта суммы из одной валюты в другую есть готовая функция «ПересчитатьВВалюту» того же модуля. Она сама берёт курсы обеих валют на дату и учитывает кратность, поэтому вручную делить и умножать не нужно:

СуммаВРублях = РаботаСКурсамиВалют.ПересчитатьВВалюту(

Сумма, ВалютаИсточник, ВалютаРубль, ДатаКурса);

В старых конфигурациях (УПП 1.3, БП 2.0, УТ 10.3) аналогичные функции находятся в общем модуле «МодульВалютногоУчета»: «ПолучитьКурсВалюты(Валюта, ДатаКурса)» возвращает структуру с курсом и кратностью, а «ПересчитатьИзВалютыВВалюту» выполняет пересчёт сумм.

bsl
КурсДоллара = РаботаСКурсамиВалют.ПолучитьКурсВалюты(
    Справочники.Валюты.НайтиПоКоду("840"), // USD
    Дата(2026, 6, 15));
Сообщить("Курс: " + КурсДоллара.Курс + ", кратность: " + КурсДоллара.Кратность);

Как получить курс на дату запросом

Срез последних на одну дату

Если нужен курс одной валюты на конкретную дату, используйте виртуальную таблицу «СрезПоследних» с параметром периода:

ВЫБРАТЬ

Курсы.Курс,

Курсы.Кратность

ИЗ

РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК Курсы

Параметр «&Дата» задаёт момент, на который берётся последнее известное значение. Если курс на эту дату не загружался, вернётся значение с ближайшей предыдущей даты — это и есть корректное поведение «курса на дату».

Курсы к каждому документу за период

Когда нужно пересчитать набор документов, каждый по курсу своей даты, применяют виртуальную таблицу с параметром «Периодичность» или соединение со срезом. Практичный вариант — соединить таблицу документов со срезом последних, но такой подход берёт курс на одну фиксированную дату. Для курса на дату каждого документа используют либо временные таблицы с группировкой по датам, либо встроенный механизм пересчёта в типовых отчётах.

Простой и надёжный приём для небольшого объёма данных — выгрузить документы в таблицу значений и в цикле вызывать «ПолучитьКурсВалюты». Для больших объёмов это медленно: тогда строят запрос по регистру с условием «Период <= ДатаДокумента», группируют по максимальному периоду и соединяют обратно с регистром для получения курса.

Перед написанием собственного запроса проверьте, нет ли в конфигурации готовой функции пересчёта. В типовых решениях механизмы валютного пересчёта уже учитывают кратность, относительные курсы и пустые записи — самописный запрос часто воспроизводит их с ошибками.
ПЗ
Практическое замечание

Как загрузить курсы за период

Если курса на нужную дату нет в базе, сначала загрузите его. В типовых конфигурациях откройте справочник «Валюты», выделите нужные валюты и нажмите «Загрузить курсы валют». В открывшейся форме укажите период и подтвердите загрузку — данные подтянутся с сервера РБК или Центрального банка (источник зависит от настроек и версии).

Для регулярной загрузки настройте регламентное задание «ЗагрузкаКурсовВалют». Оно есть в поставке конфигураций на БСП и обычно уже включено. Проверить его можно в разделе «Администрирование» → «Обслуживание» → «Регламентные операции» (точный путь различается между конфигурациями).

Если загрузка из интернета недоступна (закрытый контур, нет доступа), курс вводится вручную: в списке курсов валюты создайте новую запись, укажите дату, курс и кратность. Для разовой операции это допустимо, но при массовом вводе легко ошибиться в кратности — проверяйте результат пересчётом контрольной суммы.

Порядок действий
  1. 1
    Откройте справочник «Валюты» и найдите нужную валюту по коду или наименованию
  2. 2
    Перейдите по ссылке «Курсы валют» и проверьте, есть ли запись на нужную дату или раньше
  3. 3
    Если записи нет — нажмите «Загрузить курсы валют» и укажите период
  4. 4
    Проверьте курс и кратность в списке курсов
  5. 5
    Выполните контрольный пересчёт суммы и сверьте с ожидаемым значением

Как проверить корректность полученного курса

Первый признак проблемы — курс равен нулю или пересчитанная сумма равна нулю. Это почти всегда означает, что в регистре нет ни одной записи по этой валюте до указанной даты. Откройте список курсов и убедитесь, что история загружена на достаточную глубину.

Второй признак — сумма отличается ровно в 10, 100 или 1000 раз. Причина — неправильная кратность: например, курс иены хранится за 100 единиц, а при пересчёте кратность не учтена. Формула пересчёта в рубли: Сумма × Курс / Кратность.

Третий типовой случай — курс «вчерашний» вместо сегодняшнего. Если загрузка выполняется регламентным заданием утром, а документ проводится до загрузки, система возьмёт последний известный курс. Для операций, чувствительных к дате курса, проверяйте дату последней записи в регистре.

Контрольные точки

Как проверить результат

Значение курса
Норма

Курс больше нуля и соответствует данным ЦБ на дату

Тревожный признак

Курс равен 0 — записей в регистре нет

Кратность
Норма

Пересчитанная сумма правдоподобна по масштабу

Тревожный признак

Сумма отличается в 100 или 1000 раз

Дата последней записи
Норма

Запись есть на дату операции или раньше

Тревожный признак

Последняя запись старше нужной даты, курс неактуален

Типичные ошибки и ограничения

Самая частая ошибка в собственном коде — прямое обращение к регистру с условием «Период = &Дата». Такая выборка вернёт запись только если курс загружался именно в этот день; в остальных случаях результат пустой. Всегда используйте срез последних или типовые функции.

Вторая ошибка — игнорирование кратности при ручном пересчёте. Деление и умножение нужно выполнять строго по формуле Сумма × Курс / Кратность, иначе для валют с кратностью, отличной от 1, результат будет неверным.

Третья ошибка — изменение исторических курсов. Перезапись курса за прошлую дату приведёт к тому, что при перепроведении старых документов суммы изменятся, и учёт «поплывёт». Если нужен другой курс для конкретной операции, используйте механизм ручного курса в документе, а не правьте регистр.

Типичные ошибки
01
Условие «Период = &Дата» вместо среза последних — запрос возвращает пустой результат
02
Игнорирование кратности — суммы по иене или валютам с кратностью 100 искажаются
03
Ручная правка исторических курсов — при перепроведении меняются суммы старых документов
04
Ожидание, что курс загружается мгновенно — регламентное задание может быть отключено

FAQ

Что делать, если курс на дату не загружен, а документ нужно провести?

Загрузите курсы за нужный период через справочник «Валюты» → «Загрузить курсы валют». Если интернет-загрузка недоступна, добавьте запись вручную в списке курсов валюты. Без записи в регистре пересчёт даст нулевую сумму.

Почему запрос со срезом последних возвращает устаревший курс?

Срез последних берёт самую позднюю запись, не превышающую указанную дату. Если курс давно не загружался, вернётся старое значение. Проверьте дату последней записи по валюте и при необходимости обновите курсы.

Как получить курс валюты к другой валюте, а не к рублю?

Получите курсы обеих валют на дату и вычислите кросс-курс делением с учётом кратностей. В типовых конфигурациях проще использовать функцию пересчёта из валюты в валюту — она выполняет это автоматически.

Можно ли задать для документа курс, отличный от загруженного?

Да, в большинстве типовых документов курс и кратность доступны для ручного редактирования (часто по ссылке «Цены и валюты» или в дополнительных полях). Ручной курс действует только в этом документе и не меняет регистр.

Где посмотреть, каким курсом посчитан конкретный документ?

Откройте документ и найдите поля «Курс» и «Кратность» — обычно в шапке, на вкладке расчётов или по кнопке «Цены и валюты». Там хранится курс, зафиксированный на момент проведения, который может отличаться от текущего курса в регистре.

Работает ли загрузка курсов в файловой базе без интернета?

Нет, автоматическая загрузка требует доступа к сервису курсов. В изолированном контуре курсы вводят вручную или загружают из файла через обработку обмена, если она предусмотрено конфигурацией.

Итог

Что важно запомнить

Курсы хранятся в регистре «КурсыВалют», а курс на дату — это всегда срез последних. В коде используйте функции модуля «РаботаСКурсамиВалют», в запросах — виртуальную таблицу СрезПоследних. Контролируйте кратность и наличие записей на нужную дату, а исторические курсы не редактируйте.