Как настроить расчет розничной цены в рублях на основании цен в разных валютах в 1С:УНФ?

Пользователь 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

В процессе работы с импортными товарами в программе 1С:Управление нашей фирмой (УНФ) пользователи часто сталкиваются с необходимостью формирования итоговой розничной цены в рублях на основе нескольких закупочных цен, номинированных в разных валютах (например, в долларах и евро). Типовой функционал программы при расчете по формулам часто преподносит неприятный сюрприз: вместо корректной конвертации система может сложить или сравнить номинальные значения валют «один к одному». В результате, если товар стоит 10 долларов, розничная цена может рассчитаться как 10 рублей.

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

Причина проблемы: особенности работы конструктора формул

Проанализируем ситуацию: в типовой конфигурации 1С:УНФ (версий 1.6 и 3.0) конструктор формул в справочнике ВидыЦен предназначен для работы с числами в рамках одной валютной логики. Когда мы пишем формулу вида Макс([ОптЕвро], [ОптДоллар]), система берет значения из соответствующих регистров. Если для товара установлена цена 100 USD и 90 EUR, механизм сравнения увидит числа 100 и 90. Он выберет 100 и подставит это значение в итоговую цену. Если итоговая цена имеет валюту «рубль», программа просто запишет туда «100», не обращаясь к регистру КурсыВалют внутри самой математической функции.

Рассмотрим по шагам, как можно обойти это ограничение и заставить программу учитывать текущий курс ЦБ РФ.

Решение 1: Метод «Рублевого моста» (создание промежуточных цен)

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

  1. Создадим базовые виды цен: например, Закупка USD и Закупка EUR. Валюта этих цен должна соответствовать валюте прайса поставщика.
  2. Создадим промежуточные цены: назовем их Закупка USD (в рублях) и Закупка EUR (в рублях).
    • Установим для них способ расчета «Динамический».
    • В качестве базового вида цены укажем соответствующую валютную цену.
    • Валюту самого вида цены установим «Рубль».
  3. Настроим итоговую цену: назовем ее Розничная цена.
    • Установим способ расчета «Расчетный» (или «Динамический», если вы работаете в версии 3.0).
    • В формуле теперь мы будем сравнивать не валютные цены, а наши промежуточные рублевые: Макс([ЗакупкаUSD_в_рублях], [ЗакупкаEUR_в_рублях]).

Посмотрим на пример: система сначала пересчитает 10 USD в 900 рублей, а 9 EUR в 880 рублей. Затем функция Макс сравнит уже сопоставимые величины (900 и 880) и выдаст корректный результат в 900 рублей.

Решение 2: Использование механизма «Цены контрагентов»

Выясним причину, по которой иногда выгоднее использовать не свои виды цен, а цены поставщиков. В 1С:УНФ есть встроенный функционал автоматического выбора минимальной или максимальной цены среди всех зарегистрированных цен поставщиков.

Разберем алгоритм настройки:

  1. В карточке ВидЦены выберем способ расчета «По ценам поставщиков».
  2. Укажем в правилах отбора, что нас интересует «Максимальная» цена.
  3. Система 1С:УНФ при формировании такой цены автоматически приводит все цены поставщиков к валюте учета (рублям) по текущему курсу перед тем, как выполнить поиск максимума.

Этот метод избавляет от необходимости плодить промежуточные ВидыЦен, но требует аккуратного ведения документов ПриходнаяНакладная или РегистрацияЦенНоменклатурыПоставщика.

Решение 3: Реализация через регламентное задание (для продвинутых пользователей)

Если вам необходимо, чтобы цены были «статическими» (записанными в базу, а не вычисляемыми в момент открытия заказа), можно использовать механизм регламентных заданий. Это особенно актуально, если цены должны выгружаться на сайт, который не умеет обращаться к формулам 1С.

Проанализируем пример логики, которую можно внедрить с помощью небольшого расширения или внешней обработки:


// Пример алгоритма для регламентного задания
Процедура ПересчитатьЦеныПоКурсу() Экспорт
    КурсUSD = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДата(), Новый Структура("Валюта", ВалютаUSD)).Курс;
    КурсEUR = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДата(), Новый Структура("Валюта", ВалютаEUR)).Курс;
    
    // Получение текущих цен номенклатуры
    // Сравнение значений: Макс(ЦенаUSD * КурсUSD, ЦенаEUR * КурсEUR)
    // Запись результата в документ "Установка цен"
КонецПроцедуры

Такой подход позволяет обновлять прайс-лист каждое утро сразу после автоматической загрузки курсов валют с сервера РБК. Это гарантирует актуальность цен в течение всего рабочего дня.

Решение 4: Использование расширений с поддержкой курсов в формулах

На рынке существуют готовые расширения для 1С:УНФ, которые модифицируют стандартный конструктор формул. Рассмотрим преимущества такого решения:

Важные нюансы и ошибки при настройке

При настройке кросс-валютных формул следует учитывать несколько критически важных моментов, выявленных практическим путем:

Ошибка «Нулевой цены»: В последних релизах 1С:УНФ (линейка 3.0) расчетная цена может возвращать «0», если хотя бы у одного из базовых видов цен нет записи в истории (даже если цена фактически установлена). Убедитесь, что для всех используемых в формуле ВидовЦен создан документ Установка цен.

Версионность программы: Если вы используете версию 1.6.4.27, имейте в виду, что в ней зафиксирована программная ошибка в механизме обработки формул. Рекомендуется обновиться до версии 1.6.4.28 или выше (актуально для исторических конфигураций).

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

Подводя итог, можно сказать, что хотя прямой функционал «сравни валюты в формуле» в 1С:УНФ ограничен, задача успешно решается через архитектурную настройку видов цен (способ №1) или через автоматизированную регистрацию цен поставщиков. Выбор метода зависит от объема вашей номенклатуры и необходимости фиксации цен для синхронизации с внешними витринами.

← На главную