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