Как задать автоматические скидки на товары по организациям в 1С:Управление торговлей 10.3?

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

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

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

Архитектурные особенности механизма скидок в типовой конфигурации УТ 10.3

Проанализируем структуру хранения данных о скидках в конфигурации. За регистрацию и расчет скидок отвечают следующие объекты метаданных:

  1. Документ УстановкаСкидокНоменклатуры, регистрирующий процент или сумму скидки по условиям.
  2. Регистры сведений СкидкиНаценкиНоменклатуры и СкидкиНаценкиПоЦеновымГруппам.

Обратим внимание на измерение ПолучательСкидки в указанных регистрах. В типовой конфигурации оно имеет составной тип данных, включающий только ссылки на справочники ДоговорыКонтрагентов и Склады. Справочник Организации в состав типов данного измерения не входит.

При проведении документов реализации (например, РеализацияТоваровУслуг или ЧекККМ) алгоритмы общего модуля производят расчет автоматических скидок путем среза последних по указанным регистрам с отбором только по складу документа, договору контрагента или условиям документа (время, сумма, вид оплаты). Организация из шапки документа при расчете скидок типовым кодом игнорируется.

Вариант 1. Разделение скидок через виртуальные склады (без изменения конфигурации)

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

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

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

Вариант 2. Пакетное назначение скидок на договоры организации

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

  1. Открываем инструмент Групповая обработка справочников и документов.
  2. Выполняем отбор по справочнику ДоговорыКонтрагентов, установив фильтр по реквизиту Организация = «Организация 1».
  3. Формируем документ УстановкаСкидокНоменклатуры с видом операции «По договору контрагента» и массово заполняем табличную часть отобранными договорами.

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

Вариант 3. Доработка конфигурации: расширение типа «ПолучательСкидки»

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

  1. В дереве метаданных конфигуратора находим измерение ПолучательСкидки в следующих объектах:
    • Документ УстановкаСкидокНоменклатуры (реквизит шапки или табличной части в зависимости от вида операции);
    • Регистр сведений СкидкиНаценкиНоменклатуры;
    • Регистр сведений СкидкиНаценкиПоЦеновымГруппам.
  2. В свойствах измерения ПолучательСкидки открываем редактор типа данных и добавляем флаг напротив СправочникСсылка.Организации.
  3. В общем модуле, отвечающем за расчет скидок (процедура формирования запроса по регистрам скидок при заполнении документов продажи), добавляем параметр отбора по организации из шапки текущего документа:

// Пример модификации условия запроса при расчете скидок
Запрос.Текст = 
"ВЫБРАТЬ
|	Скидки.ПроцентСкидкиНаценки,
|	Скидки.Номенклатура
|ИЗ
|	РегистрСведений.СкидкиНаценкиНоменклатуры.СрезПоследних(&Период,
|		ПолучательСкидки В (&МассивПолучателей)
|	) КАК Скидки";

МассивПолучателей = Новый Массив;
МассивПолучателей.Добавить(ШапкаДокумента.Склад);
МассивПолучателей.Добавить(ШапкаДокумента.ДоговорКонтрагента);
МассивПолучателей.Добавить(ШапкаДокумента.Организация);

Запрос.УстановитьПараметр("МассивПолучателей", МассивПолучателей);

Вариант 4. Применение внешней обработки табличной части

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

Обработка считывает организацию из шапки документа, обращается к произвольному внешнему регистру правил скидок или списку значений и пересчитывает колонки ПроцентСкидкиНаценки и Сумма непосредственно в строках табличной части «Товары».

Резюме: для разовых маркетинговых акций в УТ 10.3 проще всего использовать групповое назначение скидки по договорам конкретной организации. При регулярной работе с разными скидочными программами в рамках нескольких юридических лиц оптимальным техническим решением является расширение типа измерения ПолучательСкидки на справочник Организации.

← На главную