Как настроить розничные цены в разных валютах с пересчетом по курсу в 1С:Управление торговлей 11?

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

В современной торговле, особенно в сегменте компьютерных комплектующих, бытовой техники и импортных товаров, компании часто сталкиваются с необходимостью вести закупки в иностранной валюте (например, USD или EUR), а розничные и оптовые продажи осуществлять в рублях (RUB). При этом рублевые цены должны оперативно реагировать на колебания валютного курса.

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

Вариант 1. Использование соглашений с клиентами и пересчет цен «на лету»

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

Для реализации этой схемы выполним следующие настройки по шагам:

  1. Создадим вид цены (например, «Оптовая USD»), в настройках которого укажем валюту USD. Цены для этого вида будут задаваться документом УстановкаЦенНоменклатуры вручную или импортироваться из прайсов поставщиков.
  2. Перейдем в настройки соглашения с клиентом (индивидуального или типового).
  3. В поле «Валюта цен» укажем USD. Это означает, что прайс-лист для клиента зафиксирован в долларах.
  4. В поле «Валюта взаиморасчетов» выберем RUB.
  5. В поле «Оплата в» также установим значение RUB.

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

Преимущества метода:

Недостатки метода:

Вариант 2. Настройка зависимых (расчетных) цен с автоматическим округлением

Если перед нами стоит задача продавать товары в розницу (в том числе через интернет-магазин), рублевые цены обязательно должны быть физически рассчитаны, округлены по правилам компании и записаны в базу данных. Выясним, как это настроить в 1С:УТ 11.

Для этого мы создадим структуру из двух видов цен:

  1. Базовый вид цены (валютный). Назовем его «Дилерская USD». Валюта цены — USD. Способ задания — «Ручное назначение» (или «Заполнять по данным ИБ при поступлении»).
  2. Зависимый вид цены (рублевый). Назовем его «Розничная RUB». Валюта цены — RUB. Способ задания — «Наценка на другой вид цен» или «Рассчитывать по формуле».

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

[ДилерскаяUSD] * [КурсUSD]

Где [ДилерскаяUSD] — это ссылка на базовый вид цены, а [КурсUSD] — системная переменная, которая автоматически подставит текущий курс доллара из справочника валют на момент расчета.

После написания формулы перейдем на вкладку «Правила округления цен». Здесь мы можем задать конструктор округления для разных диапазонов цен. Например:

Благодаря этому при любом колебании курса итоговая рублевая цена на витрине всегда будет выглядеть привлекательно для покупателя (например, 1550 рублей вместо 1542 рублей 43 копеек).

Вариант 3. Уточнение валют по ценовым группам

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

Для решения этой проблемы воспользуемся механизмом уточнения цен по ценовым группам в настройках вида цены:

  1. Включим в настройках системы использование ценовых групп (раздел CRM и маркетинг — Настройки и справочники).
  2. В настройках единого вида цены «Розничная» перейдем на вкладку «Уточнение по ценовым группам».
  3. Добавим строку для ценовой группы «Импортные товары» и укажем для нее валюту USD и формулу расчета (или ручное заполнение).
  4. Для ценовой группы «Отечественные товары» укажем валюту RUB.

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

Автоматизация ежедневного пересчета цен через регламентное задание

Главная проблема использования расчетных рублевых цен (Вариант 2) заключается в том, что формулы не пересчитываются сами по себе при изменении курса валюты в справочнике. Чтобы рублевая розничная цена обновилась в регистре (и, соответственно, выгрузилась на сайт интернет-магазина), менеджер должен ежедневно заходить в рабочее место Цены (прайс-лист), нажимать кнопку «Рассчитать параметры» и записывать новый документ Установка цен номенклатуры.

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

Для реализации автоматического пересчета можно написать следующую процедуру в общем модуле на сервере:


Процедура АвтоматическийПересчетВалютныхЦен() Экспорт
    
    // Получаем виды цен, которые требуют ежедневного пересчета
    ВидЦеныРозничная = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная RUB");
    Если ВидЦеныРозничная.Пустая() Тогда
        Возврат;
    КонецЕсли;
    
    // Создаем новый документ Установка цен номенклатуры
    ДокОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ДокОбъект.Дата = ТекущаяДата();
    ДокОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
    ДокОбъект.Согласован = Истина;
    ДокОбъект.Ответственный = Пользователи.НайтиПоНаименованию("Системный администратор");
    
    // Заполняем табличную часть ВидыЦен
    НоваяСтрокаВида = ДокОбъект.ВидыЦен.Добавить();
    НоваяСтрокаВида.ВидЦены = ВидЦеныРозничная;
    
    // Вызываем стандартный обработчик расчета цен по формулам
    // Запрашиваем остатки и действующие базовые цены номенклатуры
    ТаблицаЦен = ПолучитьТаблицуРассчитанныхЦен(ВидЦеныРозничная);
    
    Для Каждого СтрокаЦены Из ТаблицаЦен Цикл
        НоваяСтрокаТовара = ДокОбъект.Товары.Добавить();
        НоваяСтрокаТовара.Номенклатура = СтрокаЦены.Номенклатура;
        НоваяСтрокаТовара.Характеристика = СтрокаЦены.Характеристика;
        НоваяСтрокаТовара.ВидЦены = ВидЦеныРозничная;
        НоваяСтрокаТовара.Цена = СтрокаЦены.РассчитаннаяЦена;
        НоваяСтрокаТовара.Валюта = Справочники.Валюты.НайтиПоКоду("643"); // Рубль
    КонецЦикла;
    
    Если ДокОбъект.Товары.Количество() > 0 Тогда
        Попытка
            ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
            ЗаписьЖурналаРегистрации("Ценообразование", УровеньЖурналаРегистрации.Информация, , , 
                "Успешно создана установка цен на дату: " + Строка(ТекущаяДата()));
        Исключение
            ЗаписьЖурналаРегистрации("Ценообразование", УровеньЖурналаРегистрации.Ошибка, , , 
                "Ошибка проведения документа: " + ОписаниеОшибки());
        КонецПопытки;
    КонецЕсли;
    
КонецПроцедуры

Данный код программно формирует документ УстановкаЦенНоменклатуры, рассчитывая рублевые цены на основании актуального на текущую секунду курса доллара, и проводит его. Настроив запуск этого кода в регламентных заданиях на 03:00 ночи, мы гарантируем, что к началу рабочего дня менеджеры и покупатели на сайте увидят абсолютно актуальные рублевые цены. В качестве готовой альтернативы можно применить обработку для автоматического формирования и проведения установки цен по расписанию.

Работа с коммерческими курсами закупки (индивидуальный курс)

В B2B-сегменте поставщики крайне редко продают продукцию по официальному курсу ЦБ РФ. Чаще всего используется схема «Курс ЦБ + 2%» или внутренний фиксированный курс дистрибьютора. Выясним, как отразить это в программе без ручной корректировки цен.

Для реализации такого алгоритма выполним следующие настройки:

  1. Перейдем в справочник Валюты и создадим новую валюту с наименованием «USD (Поставщик)».
  2. В поле «Способ установки курса» переставим переключатель в положение «Связано с курсом другой валюты».
  3. В качестве базовой валюты выберем стандартный USD.
  4. В поле формулы расчета укажем: USD * 1.02 (что соответствует наценке в 2% к официальному курсу).

Теперь при автоматическом обновлении курсов валют через интернет система будет сначала загружать официальный курс доллара США, а затем автоматически рассчитывать курс «USD (Поставщик)» с учетом заложенного процента. Использовав эту связанную валюту в формулах расчета наших розничных видов цен, мы полностью застрахуем бизнес от курсовых потерь при закупках у дилеров.

← На главную