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

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

Переход с редакции 10.3 на 11 в «1С:Управление торговлей» часто вызывает сложности у пользователей, привыкших к определенной гибкости справочников. Одной из таких проблем является хранение цен номенклатуры в разных валютах. Если в версии 10.3 валюта указывалась непосредственно в строке документа Установка цен номенклатуры, то в редакции 11 архитектура изменилась: теперь валюта жестко привязана к справочнику Виды цен. Рассмотрим подробно, как обойти это ограничение и реализовать требования руководства по фиксации цен в валютах закупки (USD, EUR) с автоматическим пересчетом при продаже.

Анализ архитектурных различий

Проанализируем ситуацию: в УТ 11 каждый вид цены (например, «Оптовая») имеет одну базовую валюту. Это сделано для обеспечения единообразия учета и упрощения сравнения стоимостных показателей. Однако для компаний, закупающих товар в разных странах, это создает неудобства. Выясним причину проблемы: если вы создаете вид цены «Оптовая» в рублях, программа ожидает ввода рублевых сумм. Если в долларах — всех сумм в долларах. Нам же необходимо иметь возможность для одного товара хранить 10 USD, а для другого — 15 EUR в рамках одного и того же логического типа цен.

Решение 1: Использование нескольких базовых видов цен и формул (Штатный функционал)

Это наиболее правильный метод, не требующий вмешательства в программный код. Разберем его по шагам:

  1. Создание валютных «фундаментов». Создадим три вида цены для закупки:
    • «Закупка USD» (валюта — доллар, способ задания — «Ручное назначение»).
    • «Закупка EUR» (валюта — евро, способ задания — «Ручное назначение»).
    • «Закупка RUB» (валюта — рубль, способ задания — «Ручное назначение»).
  2. Настройка итоговой оптовой цены. Создадим основной вид цены «Оптовая реализация». В поле «Способ задания цены» выберем Произвольный запрос к данным ИБ или Рассчитывать по другим видам цен.
  3. Использование схемы компоновки данных (СКД). Пропишем логику выбора: система должна проверять, по какому из базовых видов цен заполнено значение для конкретного товара. Если заполнено «Закупка USD», программа возьмет это значение и пересчитает его в валюту документа продажи (например, в рубли) по актуальному курсу на дату документа.

Такой подход позволяет хранить цены в оригинальных валютах и получать единый прайс-лист, который динамически подстраивается под курс валют.

Решение 2: Подсистема «Цены поставщиков»

Посмотрим на ситуацию под другим углом. В УТ 11 реализован мощный механизм работы с ценами контрагентов. Рассмотрим, как его использовать:

В документе Поступление товаров и услуг при оформлении закупки в EUR или USD система автоматически предлагает зарегистрировать цены поставщика. Эти цены записываются в регистр Цены номенклатуры поставщиков в той валюте, которая указана в документе поступления.

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

Решение 3: Автоматический пересчет в документах продажи

Разберем ситуацию, когда цена зафиксирована в USD в справочнике, но клиент просит счет в рублях. В УТ 11 это решается настройками соглашений:

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

Решение 4: Доработка системы (для программистов)

Если штатные методы не подходят и руководство настаивает на хранении разных валют в одной табличной части документа Установка цен номенклатуры, потребуется модификация конфигурации. Проанализируем примерный алгоритм доработки:

  1. Добавление реквизита. Необходимо расширить табличную часть «Товары» документа Установка цен номенклатуры, добавив колонку ВалютаСтроки.
  2. Изменение логики проведения. При проведении документа система должна записывать данные в регистр сведений Цены номенклатуры. В типовом варианте ресурс Цена записывается в валюте вида цены. Вам придется либо конвертировать цену в валюту вида цены «на лету» перед записью, либо добавлять измерение Валюта в сам регистр (что крайне не рекомендуется, так как нарушит работу всех типовых отчетов).
  3. Реализация через расширение. В современных версиях платформы (8.3.10+) используйте расширение для изменения модуля менеджера или формы документа.

Пример кода для пересчета цены при вводе в документ (условно):


Процедура ТоварыЦенаПриИзменении(Элемент)
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    ВалютаДокумента = Объект.Валюта; // Базовая валюта вида цены
    ВалютаСтроки = ТекущаяСтрока.ВалютаСтроки;
    
    Если ВалютаСтроки <> ВалютаДокумента Тогда
        // Вызываем экспортную функцию пересчета из общего модуля
        ТекущаяСтрока.Цена = РаботаСКурсамиВалют.ПересчитатьИзВалютыВВалюту(
            ТекущаяСтрока.ЦенаВалютная, 
            ВалютаСтроки, 
            ВалютаДокумента, 
            Объект.Дата
        );
    КонецЕсли;
КонецПроцедуры

Выводы и рекомендации

Проанализировав все варианты, мы видим, что наиболее стабильным и поддерживаемым решением в «1С:Управление торговлей 11» является комбинация нескольких базовых валютных цен. Это позволяет сохранить типовую логику программы и избежать проблем при обновлении конфигурации. Помните, что идеология УТ 11 строится на сквозном учете в единой валюте для анализа прибыли, поэтому попытка «смешать» валюты в одном регистре без конвертации может привести к некорректным отчетам по рентабельности продаж.

← На главную