При переходе со старых платформ и конфигураций (таких как 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 или 1С:УПП) на современные решения 1С:ERP Управление предприятием 2 или 1С:Комплексная автоматизация 2 пользователи часто сталкиваются с изменением логики работы ценообразования. Один из самых популярных вопросов — как настроить динамический расчет рублевых цен на основании базовых цен, заданных в долларах (USD), так, чтобы в прайс-листе и документах всегда фигурировали актуальные суммы по текущему курсу валют.
В этой статье мы подробно разберем, почему старая схема «динамических цен» больше не поддерживается в новых конфигурациях, как устроен современный механизм ценообразования и какими стандартными (и нестандартными) способами можно решить эту задачу без привлечения программистов и с минимальными доработками.
Попытки настроить произвольный запрос к базе данных (СКД) в карточке вида цен с целью динамического получения курса валют из регистра сведений КурсыВалют на текущую дату не приведут к желаемому результату. Рассмотрим подробнее архитектурное ограничение современных конфигураций на управляемых формах:
ЦеныНоменклатуры.УстановкаЦенНоменклатуры. Запрос отработает, зафиксирует рублевый эквивалент по курсу на дату документа, и эта цена останется неизменной до тех пор, пока не будет создан и проведен новый документ установки цен.Таким образом, если курс доллара изменится завтра, рублевая цена в системе останется вчерашней, даже если в формуле расчета прописано обращение к актуальному курсу. Но расстраиваться не стоит: разработчики фирмы «1С» заложили в систему иные, более прозрачные и методологически верные механизмы.
Если бизнес-процесс компании предполагает продажу импортных товаров с привязкой к курсу USD, самым правильным и простым решением будет ведение учета цен в валюте с последующим автоматическим пересчетом в рубли непосредственно в момент создания первичных документов. Проанализируем этот сценарий по шагам.
Шаг 1. Создание валютного вида цен
Перейдем в раздел CRM и маркетинг — Настройки и справочники — Виды цен. Создадим новый вид цен (например, «Оптовая USD»):
USD.Ручное назначение или Наценка на другой вид цен.Шаг 2. Настройка соглашения или договора с клиентом
Для того чтобы система понимала, как именно пересчитывать долларовую цену при продаже отечественному контрагенту, настроим правила продаж:
USD.Шаг 3. Оформление документов продажи
При выписке документов Заказ клиента, Реализация товаров и услуг или Счет на оплату менеджеру не придется производить расчеты вручную. Выясним, как ведет себя система:
КурсыВалют на дату документа, система мгновенно умножает цену в USD на текущий курс.Шаг 4. Вывод актуального рублевого прайс-листа для клиентов
Часто возникает вопрос: как показать клиенту прайс-лист в рублях, если базовые цены ведутся в USD? Для этого не нужно переписывать отчет. Выполним следующие действия в стандартном отчете «Прайс-лист»:
RUB.Бывают ситуации, когда рублевые цены обязательно должны физически храниться в базе данных (в регистре ЦеныНоменклатуры). Например, если настроена выгрузка цен на сайт интернет-магазина, синхронизация с внешними маркетплейсами или кассовым ПО розничного магазина, которые не умеют на своей стороне производить валютный пересчет.
Постоянно создавать документы установки цен вручную неудобно. В этом случае мы рекомендуем настроить регламентное задание, которое будет автоматически запускаться каждую ночь после обновления курсов валют и пересчитывать цены.
Рассмотрим пример программного создания документа установки цен. Этот код может быть помещен в общий модуль и вызываться через стандартный механизм РегламентныеЗадания:
Процедура РассчитатьРублевыеЦеныПоКурсу() Экспорт
// Получаем актуальный курс USD на текущую дату
ВалютаДоллар = Справочники.Валюты.НайтиПоКоду("840"); // Код USD
КурсВалюты = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(ТекущаяДата(), Новый Структура("Валюта", ВалютаДоллар));
ТекущийКурс = КурсВалюты.Курс / КурсВалюты.Кратность;
Если ТекущийКурс = 0 Тогда
ЗаписьЖурналаРегистрации("Установка цен", УровеньЖурналаРегистрации.Ошибка, , , "Не удалось получить курс USD!");
Возврат;
КонецЕсли;
// Создаем новый документ Установка цен номенклатуры
ДокЦен = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокЦен.Дата = ТекущаяДата();
ДокЦен.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
ДокЦен.Ответственный = Пользователи.ТекущийПользователь();
ДокЦен.Комментарий = "Автоматический расчет цен по курсу USD: " + Строка(ТекущийКурс);
// Заполняем табличные части документа программно на основе базового прайса в USD
// (Алгоритм выборки базовых цен и заполнения табличной части "Товары")
// ...
Попытка
ДокЦен.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ЗаписьЖурналаРегистрации("Установка цен", УровеньЖурналаРегистрации.Ошибка, , , КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Использование такого подхода гарантирует, что в регистре сведений всегда будут находиться свежие рублевые цены, актуальные на начало каждого рабочего дня.
Рассмотрим еще одну удобную и полезную деталь, реализованную в современных версиях 1С:Комплексная автоматизация 2. Если у вас в компании продается смешанный ассортимент товаров (часть позиций закупается в РФ и продается по фиксированным рублевым ценам, а импортная часть жестко привязана к доллару), вам не обязательно создавать два независимых вида цен.
В карточке настройки вида цен предусмотрена гиперссылка Уточнить валюту по ценовым группам. Выясним, как ее использовать:
RUB.USD.При заполнении цен система сама поймет, какие товары нужно оценивать в долларах, а какие в рублях. В документах продажи расчет рублевого покрытия для импортной группы произойдет автоматически на лету.
Подводя итоги нашего анализа, выделим ключевые правила работы с валютным ценообразованием в 1С:КА 2 и 1С:ERP: