Доработка программы лояльности в 1С:Управление торговлей 11 — частая заказная задача розницы: типовая бонусная механика в УТ есть, но её надо «дотянуть» под конкретный маркетинг. К нам пришла розничная сеть магазинов с задачей превратить карточку клиента в источник данных для адресных рассылок и акций, а заодно замотивировать клиентов эти данные оставлять. Всё решение уместилось в одно расширение конфигурации — типовую УТ мы не трогали.
Задача
Сеть работает на 1С:УТ 11.4. Клиенты в системе — это справочник «Партнёры» с картами лояльности. Бизнесу было мало телефона и e-mail: маркетологи хотели знать, в каких мессенджерах клиент на связи, женат ли он, есть ли дети и какого возраста — чтобы делать сегментированные рассылки (например, акции на детские товары только тем, у кого есть дети до 6 лет). Проблема была в мотивации: кассиры и клиенты не хотели тратить время на длинную анкету. Плюс требовалось печатное согласие на обработку персональных данных с подписью клиента.
Что сделали
1. Маркетинговый профиль через дополнительные реквизиты
Новые поля анкеты — согласие на рассылку, набор мессенджеров (Viber, WhatsApp, Telegram, ВКонтакте, Одноклассники и «свой» вариант), семейное положение, наличие детей и пять возрастных групп — завели не как новые реквизиты справочника, а как дополнительные реквизиты и сведения (план видов характеристик). Это штатный механизм 1С: структура типового справочника «Партнёры» не меняется, а значит расширение не конфликтует с обновлениями УТ.
2. Мастера регистрации клиента с усиленной проверкой
Типовые формы «Помощник нового партнёра» и мастер регистрации карты лояльности переопределили через адаптеры расширения (&Вместо). Для клиента-физлица сделали обязательными дату рождения, пол и контактную информацию, добавили проверку формата e-mail и паспортных данных — чтобы в базу не попадал «пустой» клиент, по которому потом нельзя ни начислить бонус, ни сделать рассылку.
&После("ОбработкаПроверкиЗаполнения")
Процедура nsm_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если ЭтотОбъект.Клиент = Истина
И ЭтотОбъект.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо Тогда
ПроверяемыеРеквизиты.Добавить("ДатаРождения");
ПроверяемыеРеквизиты.Добавить("Пол");
КонецЕсли;
КонецПроцедуры
3. Автоначисление бонусов за полную анкету
Главная механика мотивации: как только клиент заполняет анкету целиком (ФИО, дата рождения, контакты, согласие на рассылку, хотя бы один мессенджер, семейное положение и — если есть дети — их возраст), расширение само создаёт и проводит документ «Начисление и списание бонусных баллов» на фиксированную сумму по маркетинговому мероприятию. Точка входа — адаптер &После("ПриЗаписи") в модуле объекта «Партнёры»:
&После("ПриЗаписи")
Процедура nsm_ПриЗаписи(Отказ)
nsm_Партнеры.ПроверкаЗаполненияДопРеквизитов(ЭтотОбъект, Отказ);
nsm_Партнеры.НачислениеБонусныхБаллов(ЭтотОбъект, Отказ);
КонецПроцедуры
Важная деталь — идемпотентность: перед начислением расширение запросом проверяет, что бонус по этому мероприятию клиенту ещё не давали. Иначе каждая пересохранённая карточка задваивала бы баллы.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Начисление.Ссылка
|ИЗ Документ.НачислениеИСписаниеБонусныхБаллов.Начисление КАК Начисление
|ГДЕ Начисление.Партнер = &Партнер
| И Начисление.Ссылка.МаркетинговоеМероприятие = &Мероприятие";
// ...
Если РезультатЗапроса.Пустой() Тогда
НовыйДокумент = Документы.НачислениеИСписаниеБонусныхБаллов.СоздатьДокумент();
НовыйДокумент.БонуснаяПрограммаЛояльности = БонуснаяПрограмма;
НовыйДокумент.МаркетинговоеМероприятие = МаркетинговоеМероприятие;
НовСтр = НовыйДокумент.Начисление.Добавить();
НовСтр.Партнер = Объект.Ссылка;
НовСтр.Баллы = 500;
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
4. Печать анкеты-согласия на ПДн
Для бумажного согласия сделали печатную форму (макет MXL): расширение собирает данные клиента из контактной информации и дополнительных реквизитов, проставляет галочки по каждому пункту профиля и подтягивает штрихкоды действующих карт лояльности. Клиент подписывает — сеть получает законное основание на обработку ПДн и рассылки.
Макет = Справочники.КартыЛояльности.ПолучитьМакет("ПФ_MXL_Анкета1");
ОбластьМакета = Макет.ПолучитьОбласть("Анкета");
ОбластьМакета.Параметры.ФИО = Партнер;
ОбластьМакета.Параметры.Telegram = ДанныеКонтрагента["Telegram"]; // "v" — галочка
ОбластьМакета.Параметры.ДетиДа = ДанныеКонтрагента["ДетиДа"];
ОбластьМакета.Параметры.ШККарты = ДанныеКонтрагента["ШККарты"];
ТабличныйДокумент.Вывести(ОбластьМакета);
Почему так
- Расширение вместо правки типовой. Вся доработка — заимствованные объекты и модули-адаптеры (
&Вместо,&После). Типовая УТ обновляется без конфликтов, а доработку можно снять одним отключением расширения. - Дополнительные реквизиты вместо новых полей. Профиль клиента расширяется без изменения структуры справочника — гибко и совместимо с обновлениями.
- Идемпотентность начислений. Автобонус завязан на запрос-проверку, поэтому повторные записи карточки не задваивают баллы.
Тот же подход к работе с клиентскими данными мы применяли в интеграционных проектах — например, в кейсе интеграции 1С:УТ с Bitrix24 CRM, где карточки клиентов и воронка уезжают в CRM. Здесь же весь маркетинг остаётся внутри 1С.
Нужна доработка 1С под ваш маркетинг?
Если типовой программы лояльности в 1С не хватает под ваши акции и рассылки — мы дорабатываем УТ, КА и ERP расширениями, не ломая обновляемость. А чтобы разобраться в самом механизме расширений 1С (заимствование объектов, адаптеры &Вместо/&После), на котором построено это решение, посмотрите курс по разработке расширений 1С.