Каждый торговый бизнес ежедневно сталкивается с необходимостью поддержания актуальности прайс-листов. В условиях нестабильных закупочных цен ручное создание документов установки цен превращается в рутину, отнимающую массу времени у контент-менеджеров или маркетологов. Часто возникает резонный вопрос: можно ли полностью автоматизировать этот процесс в программе «1С:Управление торговлей 11»?
В этой статье мы подробно проанализируем, почему автоматическое обновление цен вызывало столько сложностей в более ранних версиях системы (до версии 11.4 включительно), как программисты обходили эти ограничения с помощью собственных разработок, а также разберем революционные штатные инструменты, появившиеся в современной подсистеме «Ценообразование 11.5».
---
Проанализируем архитектурную проблему, с которой сталкивались разработчики при попытке автоматизировать ценообразование в прошлых редакциях УТ 11. Главная сложность заключалась в том, что весь ключевой функционал расчета и заполнения табличных частей был жестко привязан к экранным формам документов.
Когда программист пытался запустить фоновое или регламентное задание (которое выполняется на сервере без участия пользователя и не имеет интерфейса), система выдавала ошибку. Вызвать стандартные процедуры интерактивного заполнения цен напрямую из кода серверного модуля было невозможно. Разработчикам приходилось:
Кроме того, в системе существовал концептуальный разрыв: цены закупки (поставщиков) и собственные цены продажи хранились в абсолютно разных регистрах сведений и никак не были связаны динамически на уровне базы данных. Любое изменение цены поставщика требовало обязательного создания физического документа УстановкаЦенНоменклатуры.
---
Если вы работаете на конфигурациях УТ 11.4 или более ранних, единственным надежным решением является написание собственного регламентного задания. Разберем по шагам, как решить эту задачу программно, обойдя привязку к клиентским формам.
Для реализации автоматического обновления цен нам потребуется создать процедуру, которая будет запускаться по расписанию, выбирать актуальные цены закупки (или себестоимость), рассчитывать наценку и программно формировать документ. Рассмотрим пример кода, выполняющего эту операцию:
Процедура АвтоматическийРасчетЦенНаСервере() Экспорт
// Шаг 1. Инициализируем новый документ установки цен
ДокОбъект = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
ДокОбъект.Дата = ТекущаяДата();
ДокОбъект.Согласован = Истина;
ДокОбъект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Действует;
ДокОбъект.Ответственный = Пользователи.ТекущийПользователь();
// Шаг 2. Заполняем виды цен (колонка прайс-листа, которую мы хотим обновить)
НоваяСтрокаВида = ДокОбъект.ВидыЦен.Добавить();
НоваяСтрокаВида.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная");
// Шаг 3. Получаем данные для расчета (например, последние закупочные цены)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Характеристика КАК Характеристика,
| ЦеныНоменклатурыСрезПоследних.Цена КАК ЦенаЗакупки
|ИЗ
| РегистрСведений.ЦеныНоменклатуры25.СрезПоследних(&Период, ВидЦены = &ВидЦеныЗакупки) КАК ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("ВидЦеныЗакупки", Справочники.ВидыЦен.НайтиПоНаименованию("Закупочная"));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат; // Данных для расчета нет
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
// Шаг 4. Наполняем табличную часть цен с учетом наценки (например, +30%)
Пока Выборка.Следующий() Цикл
НоваяЦена = ДокОбъект.Цены.Добавить();
НоваяЦена.Номенклатура = Выборка.Номенклатура;
НоваяЦена.Характеристика = Выборка.Характеристика;
НоваяЦена.ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная");
// Алгоритм расчета наценки
НоваяЦена.Цена = Выборка.ЦенаЗакупки * 1.30;
КонецЦикла;
// Шаг 5. Записываем и проводим документ
Попытка
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
ЗаписьЖурналаРегистрации("АвтоматическоеОбновлениеЦен",
УровеньЖурналаРегистрации.Ошибка,,,
ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Эту процедуру необходимо поместить в общий серверный модуль и привязать к новому объекту метаданных РегламентныеЗадания, настроив расписание (например, запускать каждую ночь в 03:00).
---
Прежде чем полностью автоматизировать расчет цен, проанализируем важный бизнес-кейс. Предположим, вы настроили жесткую формулу: Розничная цена = Цена закупки + 50%.
Ваш поставщик устраивает временную распродажу остатков или масштабную акцию и снижает цену на востребованный товар со 100 рублей до 60 рублей. Робот автоматически пересчитывает вашу цену продажи: она падает со 150 до 90 рублей. В это же время все ваши конкуренты продолжают держать среднюю рыночную цену продажи на уровне 140–150 рублей. Продавая товар по 90 рублей, вы не просто упускаете огромную прибыль, но и обесцениваете товар в глазах покупателя.
Именно поэтому профессиональное автоматическое ценообразование требует гибких настроек — так называемых порогов срабатывания и защиты от резких колебаний, которые появились в последних версиях системы 1С.
---
В актуальных версиях 1С:Управление торговлей 11.5 (а также в 1С:КА 2.5 и 1С:ERP 2.5) подсистема работы с ценами была спроектирована заново. Теперь все описанные выше задачи решаются без программирования с помощью штатного интерфейса.
Выясним, какие ключевые инструменты автоматизации стали доступны пользователям:
В карточке настройки видов цен теперь доступна прямая интеграция с регламентными заданиями платформы. Нам больше не нужно писать код для фонового расчета. Достаточно выполнить следующие действия:
ЦеныНоменклатуры25, будет рассчитывать новые значения и невидимо для пользователя проводить документы установки цен.Чтобы розничные цены пересчитывались вовремя, программа должна оперативно узнавать об изменении цен поставщиков. В УТ 11.5 реализована сквозная регистрация:
Приобретение товаров и услуг или Заказ поставщику добавлен флаг «Регистрировать цены поставщика автоматически».Чтобы избежать ситуации с падением цен из-за разовых акций поставщиков, используем механизм порогов срабатывания:
Таким образом, автоматизация ценообразования в современной 1С:УТ 11 прошла путь от сложной программной доработки до удобного, полностью настраиваемого в пользовательском режиме инструментария.