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

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

Каждый торговый бизнес ежедневно сталкивается с необходимостью поддержания актуальности прайс-листов. В условиях нестабильных закупочных цен ручное создание документов установки цен превращается в рутину, отнимающую массу времени у контент-менеджеров или маркетологов. Часто возникает резонный вопрос: можно ли полностью автоматизировать этот процесс в программе «1С:Управление торговлей 11»?

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

---

Почему стандартный механизм обновления цен в старых версиях УТ 11 вызывал сложности?

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

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

Кроме того, в системе существовал концептуальный разрыв: цены закупки (поставщиков) и собственные цены продажи хранились в абсолютно разных регистрах сведений и никак не были связаны динамически на уровне базы данных. Любое изменение цены поставщика требовало обязательного создания физического документа УстановкаЦенНоменклатуры.

---

Вариант 1. Программное создание документа «Установка цен номенклатуры» (для старых редакций)

Если вы работаете на конфигурациях УТ 11.4 или более ранних, единственным надежным решением является написание собственного регламентного задания. Разберем по шагам, как решить эту задачу программно, обойдя привязку к клиентским формам.

Для реализации автоматического обновления цен нам потребуется создать процедуру, которая будет запускаться по расписанию, выбирать актуальные цены закупки (или себестоимость), рассчитывать наценку и программно формировать документ. Рассмотрим пример кода, выполняющего эту операцию:


Процедура АвтоматическийРасчетЦенНаСервере() Экспорт

    // Шаг 1. Инициализируем новый документ установки цен
    ДокОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
    ДокОбъект.Дата = ТекущаяДата();
    ДокОбъект.Согласован = Истина;
    ДокОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Действует;
    ДокОбъект.Ответственный = Пользователи.ТекущийПользователь();
    
    // Шаг 2. Заполняем виды цен (колонка прайс-листа, которую мы хотим обновить)
    НоваяСтрокаВида = ДокОбъект.ВидыЦен.Добавить();
    НоваяСтрокаВида.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная");
    
    // Шаг 3. Получаем данные для расчета (например, последние закупочные цены)
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
        |   ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
        |   ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакупки
        |ИЗ
        |   РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(&Период, ВидЦены = &ВидЦеныЗакупки) КАК ЦеныНоменклатурыСрезПоследних";
        
    Запрос.УстановитьПараметр("Период", ТекущаяДата());
    Запрос.УстановитьПараметр("ВидЦеныЗакупки", Справочники.ВидыЦен.НайтиПоНаименованию("Закупочная"));
    
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат; // Данных для расчета нет
    КонецЕсли;
    
    Выборка = РезультатЗапроса.Выбрать();
    
    // Шаг 4. Наполняем табличную часть цен с учетом наценки (например, +30%)
    Пока Выборка.Следующий() Цикл
        
        НоваяЦена = ДокОбъект.Цены.Добавить();
        НоваяЦена.Номенклатура = Выборка.Номенклатура;
        НоваяЦена.Характеристика = Выборка.Характеристика;
        НоваяЦена.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная");
        
        // Алгоритм расчета наценки
        НоваяЦена.Цена = Выборка.ЦенаЗакупки * 1.30; 
        
    КонецЦикла;
    
    // Шаг 5. Записываем и проводим документ
    Попытка
        ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        ЗаписьЖурналаРегистрации("АвтоматическоеОбновлениеЦен",
            УровеньЖурналаРегистрации.Ошибка,,,
            ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

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

---

Проблема бездумной автоматизации: ловушка для маржинальности

Прежде чем полностью автоматизировать расчет цен, проанализируем важный бизнес-кейс. Предположим, вы настроили жесткую формулу: Розничная цена = Цена закупки + 50%.

Ваш поставщик устраивает временную распродажу остатков или масштабную акцию и снижает цену на востребованный товар со 100 рублей до 60 рублей. Робот автоматически пересчитывает вашу цену продажи: она падает со 150 до 90 рублей. В это же время все ваши конкуренты продолжают держать среднюю рыночную цену продажи на уровне 140–150 рублей. Продавая товар по 90 рублей, вы не просто упускаете огромную прибыль, но и обесцениваете товар в глазах покупателя.

Именно поэтому профессиональное автоматическое ценообразование требует гибких настроек — так называемых порогов срабатывания и защиты от резких колебаний, которые появились в последних версиях системы 1С.

---

Вариант 2. Использование штатных механизмов «Ценообразования 11.5»

В актуальных версиях 1С:Управление торговлей 11.5 (а также в 1С:КА 2.5 и 1С:ERP 2.5) подсистема работы с ценами была спроектирована заново. Теперь все описанные выше задачи решаются без программирования с помощью штатного интерфейса.

Выясним, какие ключевые инструменты автоматизации стали доступны пользователям:

1. Встроенное расписание автообновления цен

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

  1. Перейти в раздел CRM и маркетинг — Настройки и справочники — Виды цен.
  2. Открыть нужный вид цены (например, «Розничная») и перейти по гиперссылке «Расписание автообновления цен».
  3. Включить опцию автоматического расчета и настроить детальное расписание (например, «каждый день, каждые 4 часа»).
  4. Система сама, используя новый высокопроизводительный регистр сведений ЦеныНоменклатуры25, будет рассчитывать новые значения и невидимо для пользователя проводить документы установки цен.

2. Автоматическое заполнение цен из документов поступления

Чтобы розничные цены пересчитывались вовремя, программа должна оперативно узнавать об изменении цен поставщиков. В УТ 11.5 реализована сквозная регистрация:

3. Пороги срабатывания для защиты от колебаний

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

  1. В настройках вида цены перейдите на вкладку «Правила расчета».
  2. Установите минимальный процент изменения цены, при котором система имеет право обновить прайс-лист (например, 3%).
  3. Если новая цена закупки изменилась незначительно и расчетная розничная цена отличается от текущей менее чем на 3%, система проигнорирует изменение и сохранит старую стабильную цену.

Таким образом, автоматизация ценообразования в современной 1С:УТ 11 прошла путь от сложной программной доработки до удобного, полностью настраиваемого в пользовательском режиме инструментария.

← На главную