В крупных торговых сетях часто возникает ситуация, когда бизнес ведется от лица нескольких юридических лиц (организаций), но клиентская база остается единой. Стандартная задача — обеспечить клиенту возможность копить объем покупок (и получать соответствующий процент скидки) независимо от того, в какой торговой точке и по какой организации он совершил покупку. Рассмотрим, как эта задача решается в 1С:Комплексная автоматизация 2.4 (и аналогично в 1С:ERP 2.4).
Проанализируем стандартное поведение системы. По умолчанию в 1С при расчете накопительной скидки программа анализирует данные регистра Выручка и себестоимость продаж. Основная сложность заключается в том, что расчет скидки часто жестко привязан к Виду карты лояльности и Соглашению с клиентом, в которых может быть указана конкретная организация.
Когда клиент предъявляет карту в организации №2, система проверяет обороты именно по этой организации. Если покупок там не было, скидка не применяется, даже если в организации №1 клиент приобрел товара на миллионы рублей. Выясним, как обойти это ограничение, используя архитектуру 1С.
В 1С:КА 2.4 разделены понятия Контрагент (юридическое лицо) и Партнер (управленческая сущность). Накопительные скидки в типовом решении рассчитываются именно по партнеру. Разберем этот механизм по шагам:
Виде карты лояльности, который ограничивает область действия скидки.Скидки и наценки в системе действуют в рамках соглашений. Рассмотрим, как правильно настроить соглашение, чтобы оно не блокировало скидки для разных организаций:
Если мы используем Типовое соглашение, поле Организация в нем можно оставить незаполненным. В этом случае соглашение становится доступным для выбора в документах продажи любой организации. Скидки, назначенные в рамках такого «пустого» соглашения, будут рассчитываться исходя из общего оборота партнера, зафиксированного в системе, без фильтрации по конкретному юрлицу.
Если бизнес-процесс требует жесткой привязки карт к организациям, нам придется вмешаться в код. Проанализируем, как происходит считывание карты в документе Заказ клиента. Посмотрим на фрагмент кода, отвечающий за обработку карты:
&НаКлиенте
Процедура СчитанаКартаЛояльности(Знач Оповещение, КартаЛояльности)
ДанныеКартыЛояльности = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(КартаЛояльности);
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Ссылка) Тогда
// Проверка прав доступа к партнеру
Если Не ДанныеКартыЛояльности.ПартнерДоступен Тогда
ПоказатьПредупреждение(Новый ОписаниеОповещения("СчитанаКартаЛояльностиЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru = 'Нет доступа к партнеру-владельцу карты лояльности.'"));
Возврат;
КонецЕсли;
// Если партнер в карте отличается от партнера в документе, предлагаем заменить
Если Объект.Партнер <> ДанныеКартыЛояльности.Партнер Тогда
// Здесь логика подстановки партнера из карты в документ
КонецЕсли;
СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма);
Модифицированность = Истина;
Объект.КартаЛояльности = КартаЛояльности;
СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности);
КонецЕсли;
КонецПроцедуры
Разберем, что происходит при расчете самой скидки. Проблема не в самой процедуре считывания карты, а в том, как формируется запрос к регистру накопления при расчете условий. Для реализации сквозных скидок нам нужно найти место, где формируется запрос к оборотам продаж (обычно это в общих модулях СкидкиНаценкиСервер или специализированных модулях расчета условий).
Необходимо в запросе, который калькулирует объем продаж, изменить отбор по организации. Вместо ГДЕ Организация = &ОрганизацияИзДокумента нужно либо убрать этот фильтр вовсе, либо передавать туда массив всех организаций, участвующих в программе лояльности.
Бонусная система в 1С:КА 2.4 часто оказывается более гибкой для мультиорганизационных структур. Разберем почему:
Бонусы.Чтобы не снимать конфигурацию с поддержки и избежать «подводных камней» при обновлении, рекомендуем использовать механизм Внешних обработок расчета скидок. Это штатная возможность 1С:ERP и КА.
Мы можем создать внешнюю обработку, которая будет реализовывать алгоритм РасчитатьСкидку(). Внутри этой обработки мы вольны написать любой запрос к базе данных, который соберет продажи по всем организациям текущего партнера и вернет нужный процент скидки в документ. Это наиболее безопасный и профессиональный способ решения задачи в современных редакциях 1С.
Проанализировав все способы, можно сделать следующий вывод: если вам нужно быстро запустить систему без программирования, используйте Типовые соглашения без привязки к организации и следите за единством Партнеров в базе. Если же логика бизнеса требует сложного разделения и иерархии организаций, лучшим решением станет разработка Внешней обработки расчета скидок, которая «подтянет» обороты по всем юридическим лицам холдинга.