Управление ценами в 1С:УТ 2026: AI и маркетплейсы

Управление ценами в 1С:УТ 2026: AI и маркетплейсы

Коротко: Управление ценами в 1С:УТ в 2026 году — это уже не ручной прайс-лист, а многоуровневая система: динамические коэффициенты пересчитывают цены каждые 2–4 часа, AI-модели (YandexGPT, GigaChat) дают рекомендации с точностью прогноза до 85%, а прямая интеграция с Wildberries, Ozon и Яндекс.Маркет позволяет синхронизировать до 500 000 позиций за один сеанс. Разберём архитектуру, код и практику.

Почему традиционное ценообразование в 1С:УТ больше не работает?

Ещё три-четыре года назад стандартная схема работы с ценами в 1С:Управление торговлей выглядела просто: раз в месяц менеджер обновлял прайс-лист, загружал его в систему и отправлял клиентам. Этот подход работал в условиях стабильного рынка с предсказуемой маржой. Сегодня ситуация кардинально иная.

Российские маркетплейсы — Wildberries, Ozon, Яндекс.Маркет, Мегамаркет — изменили правила игры. Конкуренты меняют цены десятки раз в день. Алгоритмы ранжирования маркетплейсов напрямую учитывают ценовую привлекательность. Покупатель за 30 секунд сравнивает предложения пяти продавцов. В этих условиях статичный прайс-лист — это гарантированные потери выручки.

По данным исследований e-commerce рынка, компании, внедрившие динамическое ценообразование, увеличивают выручку на 7–15% при сохранении той же маржинальности. Именно поэтому современная архитектура управления ценами в 1С:УТ строится на трёх китах: автоматизация пересчёта, AI-аналитика и бесшовная интеграция с внешними каналами продаж.

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

Как устроена архитектура динамического ценообразования в 1С:УТ?

Прежде чем писать код, важно понять концептуальную модель. В 1С:УТ 11 ценообразование строится на нескольких ключевых объектах метаданных:

  • Справочник «Виды цен» — определяет типы цен (базовая, оптовая, розничная, акционная).
  • Регистр сведений «Цены номенклатуры» — хранит актуальные значения цен по видам и номенклатуре.
  • Документ «Установка цен номенклатуры» — фиксирует историю изменений цен.
  • Регистр накопления «Товары на складах» — источник данных об остатках для динамических коэффициентов.
  • Регистр накопления «Продажи» — источник данных о спросе.

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

Как реализовать базовый алгоритм динамического пересчёта цен?

Рассмотрим практическую реализацию. Создадим регламентное задание, которое каждые 2 часа анализирует остатки и корректирует цены с учётом коэффициента дефицитности:


// Регламентное задание: ДинамическийПересчётЦен
// Запускается каждые 2 часа
// Анализирует остатки и корректирует розничные цены

Процедура ДинамическийПересчётЦен() Экспорт

	// Получаем вид цен для динамического пересчёта
	ВидЦенРозница = Справочники.ВидыЦен.НайтиПоНаименованию("Розничная динамическая");
	ВидЦенБаза = Справочники.ВидыЦен.НайтиПоНаименованию("Базовая");

	Если ВидЦенРозница.Пустая() Или ВидЦенБаза.Пустая() Тогда
		Сообщить("Не найдены необходимые виды цен!");
		Возврат;
	КонецЕсли;

	// Запрос остатков и базовых цен
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Остатки.Номенклатура КАК Номенклатура,
		|	Остатки.Номенклатура.НаименованиеПолное КАК НаименованиеТовара,
		|	Остатки.КоличествоОстаток КАК ОстатокТекущий,
		|	ЕСТЬNULL(Цены.Цена, 0) КАК БазоваяЦена,
		|	ЕСТЬNULL(СреднийСпрос.СреднийРасход, 1) КАК СреднийМесячныйСпрос
		|ИЗ
		|	РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК Остатки
		|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
		|		, ВидЦены = &ВидЦенБаза) КАК Цены
		|	ПО Остатки.Номенклатура = Цены.Номенклатура
		|	ЛЕВОЕ СОЕДИНЕНИЕ (
		|		ВЫБРАТЬ
		|			Продажи.Номенклатура КАК Номенклатура,
		|			СУММА(Продажи.КоличествоОборот) / 3 КАК СреднийРасход
		|		ИЗ
		|			РегистрНакопления.Продажи.Обороты(
		|				ДОБАВИТЬМЕСЯЦЫ(НачалоМесяца(ТекущаяДата()), -3),
		|				ТекущаяДата(), Месяц, ) КАК Продажи
		|		СГРУППИРОВАТЬ ПО
		|			Продажи.Номенклатура
		|	) КАК СреднийСпрос
		|	ПО Остатки.Номенклатура = СреднийСпрос.Номенклатура
		|ГДЕ
		|	Остатки.КоличествоОстаток > 0
		|	И Цены.Цена > 0";

	Запрос.УстановитьПараметр("ВидЦенБаза", ВидЦенБаза);

	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();

	// Создаём документ установки цен
	ДокументЦены = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
	ДокументЦены.Дата = ТекущаяДата();
	ДокументЦены.ВидЦены = ВидЦенРозница;
	ДокументЦены.КомментарийДокумента = "Автоматический пересчёт: " + Формат(ТекущаяДата(), "ДФ=дд.ММ.гггг ЧЧ:мм");

	Пока Выборка.Следующий() Цикл

		// Рассчитываем коэффициент дефицитности
		КоэффициентДефицитности = РассчитатьКоэффициентДефицитности(
			Выборка.ОстатокТекущий,
			Выборка.СреднийМесячныйСпрос
		);

		// Рассчитываем новую цену
		НоваяЦена = Выборка.БазоваяЦена * КоэффициентДефицитности;
		НоваяЦена = Окр(НоваяЦена, 2);

		// Добавляем строку в документ
		НоваяСтрока = ДокументЦены.Товары.Добавить();
		НоваяСтрока.Номенклатура = Выборка.Номенклатура;
		НоваяСтрока.Цена = НоваяЦена;

	КонецЦикла;

	// Проводим документ если есть строки
	Если ДокументЦены.Товары.Количество() > 0 Тогда
		ДокументЦены.Записать(РежимЗаписиДокумента.Проведение);
		Сообщить("Обновлено цен: " + ДокументЦены.Товары.Количество());
	КонецЕсли;

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

// Функция расчёта коэффициента дефицитности
// ОстатокДней < 7 → повышаем цену
// ОстатокДней > 30 → снижаем цену
Функция РассчитатьКоэффициентДефицитности(ОстатокТекущий, СреднийМесячныйСпрос)

	Если СреднийМесячныйСпрос = 0 Тогда
		Возврат 1; // Нет данных о спросе — не меняем цену
	КонецЕсли;

	// Рассчитываем запас в днях
	СреднийДневнойСпрос = СреднийМесячныйСпрос / 30;
	ОстатокДней = ОстатокТекущий / СреднийДневнойСпрос;

	// Применяем ступенчатые коэффициенты
	Если ОстатокДней < 3 Тогда
		Возврат 1.25; // Критический дефицит — +25%
	ИначеЕсли ОстатокДней < 7 Тогда
		Возврат 1.15; // Дефицит — +15%
	ИначеЕсли ОстатокДней < 14 Тогда
		Возврат 1.05; // Умеренный дефицит — +5%
	ИначеЕсли ОстатокДней > 60 Тогда
		Возврат 0.90; // Затоваривание — -10%
	ИначеЕсли ОстатокДней > 30 Тогда
		Возврат 0.95; // Высокий остаток — -5%
	Иначе
		Возврат 1; // Нормальный остаток — без изменений
	КонецЕсли;

КонецФункции

Этот алгоритм — базовый, но уже рабочий. На его основе можно строить более сложные модели с учётом сезонности, категорий товаров и конкурентных данных.

Как интегрировать AI-рекомендации по ценам в 1С:УТ?

Искусственный интеллект в контексте ценообразования — это не магия, а конкретный HTTP-запрос к API языковой модели или ML-сервиса. В российских реалиях 2025–2026 года наиболее доступны YandexGPT (Yandex Cloud), GigaChat (Сбер) и собственные модели на базе open-source. Рассмотрим интеграцию с Yandex Cloud ML API.

Как отправить данные о продажах в AI и получить рекомендацию по цене?


// Функция получения AI-рекомендации по цене
// Использует Yandex Cloud Foundation Models API
Функция ПолучитьAIРекомендациюПоЦене(Номенклатура, ТекущаяЦена, ДанныеПродаж)

	// Формируем контекст для AI
	Контекст = "Ты — эксперт по ценообразованию в розничной торговле. ";
	Контекст = КонтекстА + "Проанализируй данные и дай рекомендацию по цене.";

	// Формируем промпт с данными
	Промпт = "Товар: " + Номенклатура.НаименованиеПолное + Символы.ПС;
	Промпт = Промпт + "Текущая цена: " + Формат(ТекущаяЦена, "ЧДЦ=2") + " руб." + Символы.ПС;
	Промпт = Промпт + "Продажи за 30 дней: " + ДанныеПродаж.Количество30Дней + " шт." + Символы.ПС;
	Промпт = Промпт + "Продажи за 7 дней: " + ДанныеПродаж.Количество7Дней + " шт." + Символы.ПС;
	Промпт = Промпт + "Средняя цена конкурентов: " + Формат(ДанныеПродаж.ЦенаКонкурентов, "ЧДЦ=2") + " руб." + Символы.ПС;
	Промпт = Промпт + "Текущий остаток: " + ДанныеПродаж.Остаток + " шт." + Символы.ПС;
	Промпт = Промпт + "Дай рекомендацию: минимальная цена, оптимальная цена, максимальная цена. Только числа через запятую.";

	// Формируем тело запроса
	СтруктураЗапроса = Новый Структура;
	СтруктураЗапроса.Вставить("modelUri", "gpt://YOUR_FOLDER_ID/yandexgpt-lite");

	МассивСообщений = Новый Массив;

	СообщениеСистема = Новый Структура;
	СообщениеСистема.Вставить("role", "system");
	СообщениеСистема.Вставить("text", Контекст);
	МассивСообщений.Добавить(СообщениеСистема);

	СообщениеПользователь = Новый Структура;
	СообщениеПользователь.Вставить("role", "user");
	СообщениеПользователь.Вставить("text", Промпт);
	МассивСообщений.Добавить(СообщениеПользователь);

	СтруктураЗапроса.Вставить("messages", МассивСообщений);

	ПараметрыМодели = Новый Структура;
	ПараметрыМодели.Вставить("temperature", 0.1);
	ПараметрыМодели.Вставить("maxTokens", "100");
	СтруктураЗапроса.Вставить("completionOptions", ПараметрыМодели);

	// Отправляем запрос
	ЗаписьJSON = Новый ЗаписьJSON;
	СтрокаJSON = "";
	ЗаписьJSON.УстановитьСтроку(СтрокаJSON);
	ЗаписатьJSON(ЗаписьJSON, СтруктураЗапроса);
	ТелоЗапроса = ЗаписьJSON.Закрыть();

	HTTPСоединение = Новый HTTPСоединение(
		"llm.api.cloud.yandex.net",
		443,
		,
		,
		,
		30,
		Новый ЗащищённоеСоединениеOpenSSL
	);

	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	Заголовки.Вставить("Authorization", "Api-Key YOUR_API_KEY");

	HTTPЗапрос = Новый HTTPЗапрос("/foundationModels/v1/completion", Заголовки);
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса, "UTF-8");

	Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

	Если Ответ.КодСостояния <> 200 Тогда
		Возврат Неопределено;
	КонецЕсли;

	// Разбираем ответ
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
	ОтветСтруктура = ПрочитатьJSON(ЧтениеJSON);

	ТекстОтвета = ОтветСтруктура["result"]["alternatives"][0]["message"]["text"];

	// Парсим числа из ответа AI
	Результат = Новый Структура("МинЦена, ОптЦена, МаксЦена", 0, 0, 0);
	Части = СтрРазделить(ТекстОтвета, ",");

	Если Части.Количество() >= 3 Тогда
		Результат.МинЦена = Число(СокрЛП(Части[0]));
		Результат.ОптЦена = Число(СокрЛП(Части[1]));
		Результат.МаксЦена = Число(СокрЛП(Части[2]));
	КонецЕсли;

	Возврат Результат;

КонецФункции

Важно понимать: AI-рекомендация — это советник, а не автопилот. Оптимальная схема — AI предлагает диапазон цен, менеджер одним кликом утверждает или корректирует, система применяет. Такой подход сохраняет контроль и снижает риски ошибок модели.

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

Интеграция с марк

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

Интеграция с маркетплейсами (Wildberries, Ozon, Яндекс.Маркет) строится через REST API этих платформ. Базовая схема: 1С формирует пакет обновлений цен, отправляет POST-запрос на эндпоинт маркетплейса, получает подтверждение. Ключевой момент — соблюдать лимиты запросов и обрабатывать ошибки повторной отправки.

// Отправка цен на Ozon через API
Функция ОтправитьЦеныНаOzon(МассивТоваров) Экспорт

	НастройкиOzon = ПолучитьНастройкиМаркетплейса("Ozon");

	МассивЦен = Новый Массив;

	Для Каждого Строка Из МассивТоваров Цикл

		СтруктураЦены = Новый Структура;
		СтруктураЦены.Вставить("offer_id", Строка.АртикулМаркетплейса);
		СтруктураЦены.Вставить("price", Формат(Строка.Цена, "ЧДЦ=0; ЧРД=.; ЧГ="));
		СтруктураЦены.Вставить("old_price", Формат(Строка.СтараяЦена, "ЧДЦ=0; ЧРД=.; ЧГ="));
		СтруктураЦены.Вставить("min_price", Формат(Строка.МинЦена, "ЧДЦ=0; ЧРД=.; ЧГ="));

		МассивЦен.Добавить(СтруктураЦены);

	КонецЦикла;

	ТелоЗапроса = Новый Структура("prices", МассивЦен);

	ЗаписьJSON = Новый ЗаписьJSON;
	СтрокаJSON = "";
	ЗаписьJSON.УстановитьСтроку(СтрокаJSON);
	ЗаписатьJSON(ЗаписьJSON, ТелоЗапроса);
	ТелоJSON = ЗаписьJSON.Закрыть();

	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	Заголовки.Вставить("Client-Id", НастройкиOzon.ClientId);
	Заголовки.Вставить("Api-Key", НастройкиOzon.ApiKey);

	HTTPСоединение = Новый HTTPСоединение(
		"api-seller.ozon.ru", 443, , , , 30,
		Новый ЗащищённоеСоединениеOpenSSL
	);

	HTTPЗапрос = Новый HTTPЗапрос("/v1/product/import/prices", Заголовки);
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоJSON, "UTF-8");

	Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);

	Возврат Ответ.КодСостояния = 200;

КонецФункции

Рекомендуется запускать синхронизацию цен по расписанию через регламентное задание — например, каждые 30 минут в рабочее время. Это позволяет оперативно реагировать на изменения себестоимости или акции конкурентов без ручного вмешательства.

Типичные ошибки при автоматизации ценообразования

  • Отсутствие ограничений на минимальную цену — AI или алгоритм может предложить цену ниже себестоимости при агрессивном демпинге конкурентов. Всегда устанавливайте жёсткий нижний порог.
  • Игнорирование комиссий маркетплейса — цена на площадке должна учитывать комиссию (15–25%), иначе продажа будет убыточной.
  • Слишком частое изменение цен — некоторые маркетплейсы понижают позиции товаров с нестабильной ценой. Оптимальная частота — не чаще 2–3 раз в сутки.
  • Отсутствие логирования решений — без истории изменений невозможно проанализировать эффективность стратегии и найти причину убытков.

Выводы

Управление ценами в 1С:УТ в 2026 году — это не просто справочник типов цен. Это полноценная система, объединяющая динамическое ценообразование, AI-рекомендации на базе языковых моделей и автоматическую синхронизацию с маркетплейсами. Грамотно выстроенная архитектура позволяет:

  • сократить время реакции на изменение рынка с часов до минут;
  • исключить человеческий фактор при рутинных пересчётах;
  • удерживать маржинальность даже в условиях ценовых войн;
  • масштабировать ассортимент без пропорционального роста штата.

Начните с малого: автоматизируйте пересчёт одного типа цен по триггеру изменения себестоимости, добавьте логирование — и вы сразу увидите точки роста для дальнейшего развития системы.

Найдите специалиста для решения этой задачи на koderion.ru

Автор: редакция Koderion. Обновлено: 21 мая 2026. Источники: ИТС 1С, Документация платформы 1С:Предприятие, Бухгалтерия.ру.