Как в 1С:Управление торговлей 11 настроить пересчет цен по собственному или фиксированному курсу

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

В типовой конфигурации 1С:Управление торговлей 11 (УТ 11) заложена строгая логика работы с мультивалютностью. Если базовая цена задана в долларах (USD), а рассчитываемая — в рублях (RUB), система автоматически обращается к регистру сведений КурсыВалют и выполняет пересчет по официальному курсу ЦБ РФ на дату установки цен. Однако в реальном бизнесе часто возникает задача зафиксировать внутренний курс (например, «заморозить» его на отметке 60 рублей) или добавить к официальному курсу определенную маржу, чтобы не менять прайс-листы ежедневно.

В этой статье мы разберем, как обойти стандартные ограничения и реализовать расчет цен по собственному алгоритму, используя возможности платформы 1С:Предприятие 8.3.

Причина проблемы: почему стандартная формула не всегда работает

Рассмотрим ситуацию: вы создаете Вид цены, где формула выглядит как [ВалютнаяЦена] * 60 + 10. Казалось бы, результат очевиден. Но при записи документа Установка цен номенклатуры система видит, что исходная цена в USD, а целевая в RUB. Программа сначала принудительно конвертирует USD в RUB по курсу из справочника Валюты, а затем применяет вашу формулу к уже пересчитанному числу. В итоге получается двойной или некорректный пересчет. Выясним, как этого избежать.

Метод 1. Создание «Виртуальной валюты» (рекомендуемый способ)

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

  1. Перейдем в справочник Валюты (Настройки — Общие настройки — Валюты).
  2. Создадим новую валюту, назовем ее, например, «USD (внутренний)» или «УЕ».
  3. В карточке валюты установим переключатель «Курс устанавливается вручную».
  4. Укажем нужный нам курс (например, 60 рублей за 1 единицу).
  5. Важно: для этой валюты не нужно настраивать автоматическую загрузку из интернета.

Теперь при настройке Вида цены мы указываем, что базовая цена (например, цена закупки) хранится именно в этой «виртуальной» валюте. Поскольку ее курс статичен и управляется вами вручную, итоговая розничная цена в рублях будет всегда рассчитываться по формуле Цена закупки * 60, независимо от того, что происходит на валютной бирже.

Метод 2. Использование СКД в правилах расчета цен

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

Этот метод позволяет полностью игнорировать типовой механизм пересчета валют. Мы можем написать запрос в Системе компоновки данных (СКД), который будет обращаться к значениям цен напрямую. Рассмотрим пример логики запроса:

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


Выбор
    Когда ЦеныНоменклатуры.ВидЦены = &ВидЦеныЗакупки
    Тогда ЦеныНоменклатуры.Цена * 60 + 10
Конец

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

Метод 3. Промежуточный «технический» вид цены

Иногда система все равно пытается вмешаться в расчеты. В таком случае мы можем применить архитектурную хитрость — создание промежуточного звена. Посмотрим на этот процесс по шагам:

  1. Создаем вид цены «Базовая (число)». Указываем валюту — Рубли.
  2. Заполняем этот вид цены вручную или обработкой, просто копируя цифры из валютного прайса поставщика (например, если закупка 1$, записываем 1 рубль).
  3. Создаем основной вид цены «Розничная». В формуле указываем: [Базовая (число)] * 60 + 10.

В этой схеме 1С не видит валютного перехода (RUB -> RUB), поэтому никакой автоматический пересчет не срабатывает. Вы получаете полный контроль над математикой формирования цены.

Метод 4. Использование расширений для «Внутреннего курса»

Для продвинутых пользователей и программистов существует вариант с использованием Расширений. Это позволяет добавить в документ Установка цен номенклатуры дополнительный реквизит ВнутреннийКурс. Проанализируем, как это работает:

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

Пример кода (фрагмент), который может быть использован в расширении для корректировки расчета:


&После("РассчитатьЦеныПоДаннымИБ")
Процедура Расшир_РассчитатьЦеныПоДаннымИБ(ПараметрыРасчета)
    // Здесь переопределяется курс, если заполнен внутренний реквизит
    Для Каждого СтрокаЦены Из ПараметрыРасчета.ТаблицаЦен Цикл
        Если СтрокаЦены.СвойКурс <> 0 Тогда
            СтрокаЦены.Цена = СтрокаЦены.ЦенаЧислом * СтрокаЦены.СвойКурс + 10;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Округление и психологические цены

Посмотрим на важный нюанс: при использовании формул вроде * 60 + 10 часто получаются дробные или «некрасивые» значения (например, 734.22 руб.). В УТ 11 предусмотрен мощный механизм округления.

Разберем, как его настроить в Виде цены:

Резюме

Мы выяснили, что наиболее стабильный и простой способ реализовать расчет по собственному курсу в 1С:Управление торговлей 11 — это использование виртуальной валюты. Она позволяет обойти жесткие механизмы платформы, связанные с официальными курсами ЦБ, и дает полную свободу в ценообразовании. Если же задача требует автоматизации и сложной логики — использование СКД или расширений станет наиболее профессиональным решением.

← На главную