В типовой конфигурации 1С:Управление торговлей редакции 10.3 (УТ 10.3) часто возникает задача настройки цен, которые зависят не только от самой номенклатурной позиции, но и от ее характеристик. Классический пример — мебельный бизнес, где стоимость дивана напрямую зависит от категории обивочной ткани. В данной статье мы подробно разберем, как реализовать такую схему, какие подводные камни существуют при работе с большим количеством характеристик и как оптимизировать процесс, чтобы база данных не «раздулась» от миллионов строк цен.
Рассмотрим стандартный механизм, заложенный в систему. В 1С:УТ 10.3 для номенклатуры можно включить ведение учета по характеристикам. Это позволяет использовать один элемент справочника Номенклатура (например, «Диван Марсель») для множества вариантов исполнения.
Порядок действий:
УстановкаЦенНоменклатуры.Разберем важный нюанс: в табличной части этого документа при выборе номенклатуры, у которой включен учет по характеристикам, колонка Характеристика номенклатуры становится доступной для заполнения. Мы можем указать конкретную ткань и назначить ей индивидуальную цену. Проанализируем ситуацию: если у нас 10 моделей диванов и 5 видов тканей, нам придется создать 50 записей. Это вполне рабочий вариант для небольшого ассортимента.
Если тканей сотни, а моделей мебели десятки, прямое назначение цен приведет к комбинаторному взрыву. Рассмотрим пример: 500 моделей диванов умножить на 50 видов тканей — это уже 25 000 записей только для одного типа цен. А если тканей в диване две (основа и компаньон)? Количество комбинаций станет неуправляемым. Выясним причину, по которой профессионалы рекомендуют использовать категории.
Вместо создания одной позиции «Диван 1» с 1000 характеристик, мы создаем несколько позиций номенклатуры по ценовым категориям:
В этом случае характеристики (конкретные названия тканей) продолжают использоваться в документах ПоступлениеТоваровУслуг и РеализацияТоваровУслуг для складского учета и справочной информации, но цена в документе УстановкаЦенНоменклатуры ставится только на саму номенклатуру без указания характеристики.
Почему это удобно: в УТ 10.3 реализован принцип иерархического поиска цены. Если в регистре сведений ЦеныНоменклатуры нет записи для конкретной характеристики, система автоматически берет цену, установленную для «пустой» характеристики этой номенклатуры. Таким образом, назначив цену на «Диван 1 (Категория 1)», мы автоматически применяем ее ко всем тканям, входящим в эту категорию.
Посмотрим на ситуацию с точки зрения калькуляции. Диван можно представить как набор: «Каркас дивана» + «Отрез ткани». Рассмотрим подробнее этот вариант:
При продаже такого набора цена будет динамически складываться из стоимости каркаса и стоимости выбранной характеристики ткани. Это позволяет избежать дублирования цен, но требует четкого понимания расхода ткани на каждую модель.
Проанализируем работу с розничными складами. В УТ 10.3 для продажи через ЧекККМ на розничном складе обязателен документ ПереоценкаТоваровВРознице. Важно помнить следующее:
ПереоценкаТоваровВРознице должен содержать каждую характеристику отдельной строкой. В противном случае возникнут ошибки при списании себестоимости и расчете остатков в денежном выражении.Для программиста 1С решением проблемы «миллиона строк» может стать автоматизация через дополнительные свойства характеристик. Разберем по шагам логику возможной доработки или использования внешней обработки:
Установки цен номенклатуры, которая перемножает базовую цену модели на коэффициент категории ткани.Пример программного обращения к ценам с учетом характеристик (фрагмент кода для понимания логики получения цены):
Функция ПолучитьЦенуСХарактеристикой(ВыбНоменклатура, ВыбХарактеристика, ТипЦены, ДатаЦен)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| (ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = &Характеристика
| ИЛИ ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
|УПОРЯДОЧИТЬ ПО
| ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ"; // Сначала записи с характеристикой
Запрос.УстановитьПараметр("Дата", ДатаЦен);
Запрос.УстановитьПараметр("Номенклатура", ВыбНоменклатура);
Запрос.УстановитьПараметр("Характеристика", ВыбХарактеристика);
Запрос.УстановитьПараметр("ТипЦен", ТипЦены);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Цена;
КонецЕсли;
Возврат 0;
КонецФункции
При планировании архитектуры данных важно учитывать интеграцию. Большинство CMS (например, Bitrix) при выгрузке из 1С ожидают, что каждая характеристика — это отдельное торговое предложение (SKU) со своей ценой. Если в 1С цена установлена только «на номенклатуру в целом», модуль обмена может не передать цену для SKU. В этом случае придется либо дорабатывать модуль выгрузки, либо все-таки программно генерировать записи в регистре ЦеныНоменклатуры для каждой связки Номенклатура + Характеристика, несмотря на рост объема данных.
Подведем итог нашего анализа. Использование характеристик в ценообразовании УТ 10.3 полностью поддерживается типовым функционалом, но требует грамотного подхода к архитектуре справочников:
УстановкаЦенНоменклатуры с указанием конкретных характеристик.Рассмотренные методы позволят вам гибко настроить систему под требования бизнеса, сохраняя высокую производительность базы данных 1С.