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