Как установить единую цену на товар без учета характеристик в 1С:УТ 11.4

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

Переход с версии 1С:Управление торговлей 10.3 на 11.4 часто вызывает вопросы у пользователей и разработчиков, особенно в части ценообразования. В старой редакции механизм установки цен был более линейным, в то время как в 11-й версии архитектура стала гибче, но потребовала иного подхода к настройке. Рассмотрим ситуацию: в системе ведется учет по характеристикам (например, цвет или размер), но цена на товар должна быть единой, независимо от выбранного свойства. Разберем, как реализовать это стандартными средствами и как автоматизировать процесс с помощью программного кода.

Анализ стандартного механизма поиска цен

Для начала проанализируем, как система 1С:Управление торговлей 11 ищет цену при подборе товара в документ реализации или заказа. Понимание этой логики позволит нам избежать лишнего программирования. Когда мы выбираем позицию с характеристикой, система обращается к регистру сведений ЦеныНоменклатуры и выполняет поиск по следующему приоритету:

  1. Поиск точного соответствия: Номенклатура + Характеристика.
  2. Если цена не найдена, выполняется поиск по ключу: Номенклатура + Пустая характеристика.
  3. Если и здесь данных нет, система может обратиться к ценам, установленным для Вида номенклатуры (если это настроено в правилах ценообразования).

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

Способ 1: Настройка справочника «Виды цен»

Прежде чем приступать к написанию кода, проверим настройки в пользовательском режиме. Рассмотрим параметры, которые влияют на требование детализации цен. Основная логика управления разрезами цен сосредоточена в справочнике ВидыЦен.

Выполним следующие шаги:

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

Если этот флаг установлен, программа будет требовать указания цены для каждой конкретной характеристики. Если мы снимаем этот флаг, то при создании документа УстановкаЦенНоменклатуры система позволит указать одну общую цену на товар. При этом в документах продажи, какую бы характеристику мы ни выбрали, будет подставляться именно эта общая цена.

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

Способ 2: Автоматизация через подписки на события

Бывают ситуации, когда бизнес-процесс требует физического наличия записей в регистре для каждой характеристики (например, для выгрузки на сторонние сайты или в специфические отчеты). В этом случае рассмотрим программный метод. Мы можем создать подписку на событие, которая при появлении новой характеристики или при проведении документа установки цен будет "размножать" цену на все доступные варианты товара.

Проанализируем ситуацию: пользователь создал новую характеристику "Размер XL", а цена на товар была установлена месяц назад. Чтобы цена подтянулась автоматически, нам нужно создать запись в регистре сведений ЦеныНоменклатуры.

Рассмотрим пример кода для подписки на событие ПриЗаписи справочника ХарактеристикиНоменклатуры:


Процедура ПриЗаписиХарактеристики(Источник, Отказ) Экспорт
    
    // Получим актуальные цены для номенклатуры-владельца без учета характеристик
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
        |	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
        |	ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
        |	ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения
        |ИЗ
        |	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура И Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка)) КАК ЦеныНоменклатурыСрезПоследних";
    
    Запрос.УстановитьПараметр("Номенклатура", Источник.Владелец);
    Запрос.УстановитьПараметр("Дата", ТекущаяДата());
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    // Создадим новый документ установки цен или запишем напрямую в регистр (зависит от настроек системы)
    // В УТ 11 лучше использовать создание документа для сохранения истории и логичности учета
    Пока Выборка.Следующий() Цикл
        // Логика записи в регистр или формирования документа
    КонецЦикла;

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

Однако, как справедливо отмечали эксперты, запись напрямую в регистр сведений, подчиненный регистратору, невозможна без самого документа. Поэтому правильнее будет использовать подписку на проведение документа УстановкаЦенНоменклатуры.

Способ 3: Программное заполнение характеристик в документе

Рассмотрим еще один подход: создание обработки, которая помогает пользователю заполнить документ УстановкаЦенНоменклатуры всеми характеристиками номенклатуры с одинаковой ценой. Это позволит избежать "ковыряния" типовой конфигурации и остаться в рамках стандартных бизнес-процессов.

Посмотрим на алгоритм работы такой обработки:

  1. Пользователь добавляет в документ одну строку с товаром.
  2. Нажимает кнопку "Заполнить по характеристикам".
  3. Программа находит все характеристики для данной номенклатуры (учитывая настройки ВидНоменклатуры).
  4. Добавляет новые строки в документ, копируя цену из первой строки.

Пример фрагмента кода для реализации такого заполнения:


&НаСервере
Процедура ЗаполнитьХарактеристикиНаСервере(ТекущаяНоменклатура, ТекущаяЦена, ДокументОбъект)
    
    // Получаем все характеристики номенклатуры
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Характеристики.Ссылка КАК Характеристика
        |ИЗ
        |	Справочник.ХарактеристикиНоменклатуры КАК Характеристики
        |ГДЕ
        |	Характеристики.Владелец = &Владелец";
    
    // Если характеристики общие для вида номенклатуры, запрос нужно изменить
    Если ТекущаяНоменклатура.ИспользоватьХарактеристики Тогда
        ВладелецХарактеристик = ?(ТекущаяНоменклатура.ВладелецХарактеристик = Неопределено, 
                                 ТекущаяНоменклатура, 
                                 ТекущаяНоменклатура.ВладелецХарактеристик);
        Запрос.УстановитьПараметр("Владелец", ВладелецХарактеристик);
    КонецЕсли;
    
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        НоваяСтрока = ДокументОбъект.Товары.Добавить();
        НоваяСтрока.Номенклатура = ТекущаяНоменклатура;
        НоваяСтрока.Характеристика = Результат.Характеристика;
        НоваяСтрока.Цена = ТекущаяЦена;
    КонецЦикла;

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

Проблема раздувания базы данных

Проанализируем ситуацию с точки зрения производительности. Если у вас 10 000 товаров, и у каждого по 20 характеристик, то при установке цен на каждую характеристику в регистре ЦеныНоменклатуры появится 200 000 записей вместо 10 000. При наличии 5-10 видов цен это количество вырастает до миллионов строк.

Рекомендация: Всегда отдавайте приоритет Способу 1 (настройка Вида цен). Это не только экономит место в базе данных, но и значительно ускоряет работу запросов при подборе товаров в документах, так как системе не приходится перебирать огромные массивы данных в регистре.

Выясним причину, почему это не всегда работает "из коробки"

В 1С:УТ 11.4 механизм ценообразования тесно связан с понятием "Верхний уровень цен". Если вы используете иерархию (Номенклатура -> Характеристика), система всегда ожидает, что характеристика может иметь свою специфику. Если же ваша бизнес-модель подразумевает, что "Ботинки" стоят одинаково вне зависимости от размера, то само использование характеристик в разрезе цен является избыточным.

Если после отключения флага «Уточнять цену до характеристик» программа все равно требует их указания, проверьте, не установлены ли индивидуальные настройки в соглашениях с клиентами или в ценовых группах. Иногда настройки в этих объектах перекрывают общие настройки вида цены.

Резюме

Для реализации логики "как в УТ 10.3" в современных редакциях программы:

← На главную