- управление лояльностью
Руководство пользователя
×

4.3.5. Интеграция с СофтБаланс: Трактиръ Front Office

1. На форме справочника “Рабочие места” добавить страницу “Система лояльности”
 
2. Добавить на страницу два элемента : 
флажок 
 
3. И поле ввода :
 
4. У поля ввода назначает обработку :
 
Процедура СЛНачалоВыбора(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СписокВидов = Новый СписокЗначений;
СписокВидов.Добавить("АО");
тоВыбратьИзСпискаТО(СписокВидов, ЭтаФорма, Элемент, МестоРеализации.ИнформационнаяБаза);
КонецПроцедуры
 
5. А также в процедуре “ЗаполнитьДеревоСтраниц” добавить фрагмент :
ПодСтраница = Страница.Строки.Добавить();
ПодСтраница.Имя = "СистемаЛояльности"; ПодСтраница.Заголовок = НСтр("de='Loyalty';en='Loyalty';ru='Система лояльности'");
ПодСтраница.Картинка = БиблиотекаКартинок.СправочникЭлемент;
 
6. В обработке “Главная форма”, модуль объекта, Функция ПолучитьМассивПодключаемогоТО(ТаблицаОшибок)
 
Добавить :
Если глПараметрыРМ.СЛЕсть Тогда
ДобавитьСтрокуТзТо(ТЗ, глПараметрыРМ.СЛ);
КонецЕсли;
 
7. Общий модуль “ИнтерфейсРМ” , Функция ИдентификацияПоКарте, после фрагмента :
Если Лев(КодДоступа,14) = "Идентификатор_" Тогда
КодПоиска = Сред(КодДоступа,15);
 
добавляем : 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Результат = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("НайтиКартуВСистемеЛояльности", Новый Структура ("НомерКарты,СчитаноРидером",КодПоиска,Истина));
КодПоиска = Результат.НомерКарты;
КонецЕсли;
 
Данный фрагмент уточняет считанную карту в системе лояльности, если находит. то освежает данные клиента в справочнике клиентов.
 
8. В этой же функции после фргамента :
 
КартаДоступа = ПроверитьИдентификаторПоШаблонам(КодПоиска, Текст1, Текст2);
КонецЕсли;
КонецЕсли;
Иначе
КодПоиска = КодДоступа;
 
 
добавляем :
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Результат = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("НайтиБКартуВСистемеЛояльности", Новый Структура ("НомерКарты,СчитаноРидером",КодПоиска,Ложь));
КодПоиска = Результат.НомерКарты;
КонецЕсли;
 
Данный фрагмент аналогично уточняет считанную карту в системе лояльности, если находит. то освежает данные клиента в справочнике клиентов. При этом указывается, что карта введена ручным способом.
 
 
9. Документ “Возврат”, Модуль документа, Процедура “Обработка проведения” :
 
фргамент :
Движение = Движения.НакопленияКлиентов.ДобавитьПриход();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.КлиентОперации = Клиент;
// Документы.Бронь.ПустаяСсылка() = остатки по Личному счету
Движение.Основание = Документы.Бронь.ПустаяСсылка();
Движение.СуммаБезнал = 0;
Движение.СуммаБонусов = Сумма;
 
 
 
заменяем на : 
 
 
 
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Если глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("ВернутьБонусыПриВозврате", Новый Структура ("Дата,Клиент,Сумма,Смена,Чек",Дата,Клиент,Сумма,Число(Смена.Номер),Число(Номер))).Ошибка Тогда
Отказ = Истина;
КонецЕсли;
Иначе
Движение = Движения.НакопленияКлиентов.ДобавитьПриход();
Движение.Период = Дата;
Движение.Клиент = Клиент;
Движение.КлиентОперации = Клиент;
// Документы.Бронь.ПустаяСсылка() = остатки по Личному счету
Движение.Основание = Документы.Бронь.ПустаяСсылка();
Движение.СуммаБезнал = 0;
Движение.СуммаБонусов = Сумма;
КонецЕсли;
 
 
 
10. В обработке “ВводКлиента”, модуле формы в процедуре “ПередОткрытием” вместо фрагмента :
 
НакопленияКлиента = НакопленияКлиента(Клиент.Ссылка, , Истина);
 
заменяем на фргамент : 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
НакопленияКлиента = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("БонусовНаКарте", Новый Структура ("Клиент",Клиент.Ссылка));
Иначе
НакопленияКлиента = НакопленияКлиента(Клиент.Ссылка, , Истина);
КонецЕсли;
 
 
11. Обработка “ВозвратПоЗаказу”, модуль формы, процедура “ОформитьВозврат”, после фргамента :
Если ФлагОК Тогда
ЗафиксироватьТранзакцию();
ИнтерфейсРМ.ЗаписьСобытия(Справочники.События.ОплатаВозврат, Док.Ссылка, Док.Номер, Док.Сумма, Док.Причина);
Оповестить("ВыходИзЗаказа", Док.Ссылка); // чтобы сразу спозиционироваться в журнале закрытых
 
добавить фрагмент :
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Результат = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("ЗаписатьВозвратНаСервер", Новый Структура ("Заказ",Док.Ссылка));
КонецЕсли;
 
12. Обработка “ГлавнаяФОрма”, модуль объекта, процедура “ОбработкаВнешнегоСобытия”, после фргамента :
Если ТипЗнч(_Знач) = Тип("Строка") Тогда
Если НЕ ЗначениеЗаполнено(глПользователь) Тогда
// если система заблокирована, то возможна только авторизация сотрудника
ТипПривязки = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
Иначе
добавляем фрагмент : 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Результат = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("НайтиБКартуВСистемеЛояльности", Новый Структура ("НомерКарты",_Знач));
_Знач = Результат.НомерКарты;
КонецЕсли;
 
13. Обработка “ОплатаЗаказа”,МодульОбъекта, Процедура ПолучитьНакопленияКлиента,в смом верху вставить :
 
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
    ТекНакопленияКлиента = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("МаксимальноВозможнаяСуммаОплаты", Новый Структура ("Клиент,СуммаЧека",Заказ.Клиент,Заказ.ИтоговаяСумма)).СтруктураКлиента;
Возврат ТекНакопленияКлиента;
КонецЕсли;
 
 
 
14. Тот же модуль, Процедура ОпределитьДопустимуюСумму(ВыбВариант, ЕстьОграничениеСуммы, Текст2, ПредоплатаПоБрони)
 
меняем аналогично такой же фрагмент.
 
 
15. Тот же модуль, процедура “ЗаписатьОплату”, после фрагмента
// Добавить таблицу товаров в протокол
ДокПротокол.Товары.Очистить();
ПротоколВариантыОплаты.Очистить();
Для Каждого СтрокаЗаказа Из ТаблицаЗаказа Цикл
ДобавитьТоварВПротокол(ДокПротокол, СтрокаЗаказа, ПротоколВариантыОплаты);
КонецЦикла;
 
добавляем фргамент : 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Если глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("ОплатитьБонусами", Новый Структура ("ДокПротокол",ДокПротокол)).Ошибка Тогда
Возврат;
КонецЕсли;
КонецЕсли;
 
 
 
16. В этом же модуле, в этой же процедуре, после фргамента :
// Добавить в протокол варианты оплаты
Для Каждого СтрокаПротоколВариантыОплаты Из ПротоколВариантыОплаты Цикл 
ДокПротоколСтрока = ДокПротокол.Протокол.Добавить();
ДокПротоколСтрока.ВариантОплаты = СтрокаПротоколВариантыОплаты.ВариантОплаты;
ДокПротоколСтрока.Сумма = СтрокаПротоколВариантыОплаты.Сумма;
ДокПротоколСтрока.СуммаФакт = ДокПротоколСтрока.Сумма;
КонецЦикла;
ДокПротокол.ИтогСуммаФакт = ДокПротокол.Протокол.Итог("СуммаФакт");
добавить фргамент :
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Если глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("ОплатитьБонусами", Новый Структура ("ДокПротокол",ДокПротокол)).Ошибка Тогда
Возврат;
КонецЕсли;
КонецЕсли;
 
 
 
 
17. В этом же модуле, в этойже процедуре, чуть ниже, после фргамента : 
Если НЕ ИнтерфейсРМ.ПопыткаДействияСОбъектом( ДокПротокол, "Объект.Записать(РежимЗаписиДокумента.Проведение)", ФоновыйРежим, Истина) Тогда
//ОтменитьТранзакцию();
Возврат;
КонецЕсли;
ГруппыОплаты.Протокол = ДокПротокол.Ссылка;
КонецЦикла;
КонецЕсли;
Если СуммаПредоплаты=0 Тогда
 
 
Добавить фрагмент : 
Если ЗаказДопИнф.Статус <> Перечисления.СтатусыЗаказа.Закрыт Тогда
Если глТорговоеОборудование.Свойство("Bonica") Тогда
Результат = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("ЗаписатьЧекНаСервер", Новый Структура ("Заказ",ЗаказДопИнф.Заказ));
КонецЕсли;
КонецЕсли;
 
18. Тот же модуль, Функция МаксимальнаяСуммаВариантаОплаты(ВыбВариант, РумбаПроверить = Истина), вместо  фргамента :
 
НакопленияКлиента = ПолучитьНакопленияКлиента();
 
меняем на фрагмент :
 
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
НакопленияКлиента = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("БонусовНаКарте", Новый Структура ("Клиент",Заказ.Клиент));
Иначе
НакопленияКлиента = ПолучитьНакопленияКлиента();
КонецЕсли;
 
18. тот же модуль Функция ПолучитьНакопленияКлиента()
Если ПараметрыСеанса.ОнлайнБонусы.Используется Тогда 
// В фоновом режиме накопления надо брать из глТрактиръМобайл.ДопУправление.
Если ФоновыйРежим И глТрактиръМобайл.ДопУправление <> Неопределено Тогда
СтандартнаяОбработка = Истина;
глТрактиръМобайл.ДопУправление.ОпределитьНакопленияКлиента(ТекНакопленияКлиента, СтандартнаяОбработка);
Иначе
ТекНакопленияКлиентаВнешние = НакопленияКлиента(Заказ.Клиент);
ТекНакопленияКлиента.СуммаБезнал = ТекНакопленияКлиентаВнешние.СуммаБезнал + ТекНакопленияКлиентаВнешние.ГлубинаКредита;
ТекНакопленияКлиента.СуммаБонусов = ТекНакопленияКлиентаВнешние.СуммаБонусов;
КонецЕсли; 
КонецЕсли;
Если ПараметрыСеанса.ОнлайнБонусы.Используется Тогда 
// В фоновом режиме накопления надо брать из глТрактиръМобайл.ДопУправление.
Если ФоновыйРежим И глТрактиръМобайл.ДопУправление <> Неопределено Тогда
СтандартнаяОбработка = Истина;
глТрактиръМобайл.ДопУправление.ОпределитьНакопленияКлиента(ТекНакопленияКлиента, СтандартнаяОбработка);
Иначе
ТекНакопленияКлиентаВнешние = НакопленияКлиента(Заказ.Клиент);
ТекНакопленияКлиента.СуммаБезнал = ТекНакопленияКлиентаВнешние.СуммаБезнал + ТекНакопленияКлиентаВнешние.ГлубинаКредита;
ТекНакопленияКлиента.СуммаБонусов = ТекНакопленияКлиентаВнешние.СуммаБонусов;
КонецЕсли; 
КонецЕсли;
заменить на
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
ТекНакопленияКлиента.СуммаБонусов = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("БонусовНаКарте", Новый Структура ("Клиент",Заказ.Клиент)).СуммаБонусов;
Иначе
Если Константы.ВнешняяСистемаБонусов.Получить() Тогда 
// В фоновом режиме накопления надо брать из глТрактиръМобайл.ДопУправление.
Если ФоновыйРежим И глТрактиръМобайл.ДопУправление <> Неопределено Тогда
СтандартнаяОбработка = Истина;
глТрактиръМобайл.ДопУправление.ОпределитьНакопленияКлиента(ТекНакопленияКлиента, СтандартнаяОбработка);
Иначе
ТекНакопленияКлиентаВнешние = НакопленияКлиента(Заказ.Клиент);
ТекНакопленияКлиента.СуммаБезнал = ТекНакопленияКлиентаВнешние.СуммаБезнал + ТекНакопленияКлиентаВнешние.ГлубинаКредита;
ТекНакопленияКлиента.СуммаБонусов = ТекНакопленияКлиентаВнешние.СуммаБонусов;
КонецЕсли; 
КонецЕсли;
КонецЕсли;
 
19. Обработка “ПечатьЗаказа”, модуль объекта, Процедура ДобавитьИнформациюПоКлиенту(ТаблицаЗадания, Клиент), вместо фрагмента :
 
НакопленияКлиента = НакопленияКлиента(Клиент, , Истина); 
 
 
заменяем на фрагмент :
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
НакопленияКлиента = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("БонусовНаКарте", Новый Структура ("Клиент",Клиент));
Иначе
НакопленияКлиента = НакопленияКлиента(Клиент, , Истина); 
КонецЕсли;
 
 
20. Обработка “ПечатьЧека”, модуль объекта, Процедура ДобавитьИнформациюПоКлиенту(ТаблицаЗадания, Клиент), вместо фрагмента :
 
НакопленияКлиента = НакопленияКлиента(Клиент, , Истина); 
 
 
заменяем на фрагмент :
 
Если глТорговоеОборудование.Свойство("Bonica") Тогда
НакопленияКлиента = глПараметрыРМ.СЛ.ПолучитьОбъект().ВыполнитьДействие("БонусовНаКарте", Новый Структура ("Клиент",Клиент));
Иначе
НакопленияКлиента = НакопленияКлиента(Клиент, , Истина); 
КонецЕсли;
20. Модуль “ОбщегоНазначения” Функция НакопленияКлиента после фрагмента
СтруктураКлиента.СуммаБонусов = ТаблицаОстатков.ИТОГ("СуммаБонусов");
 
СтруктураКлиента.СуммаБонусов = Обработки.Обслуживание_СЛ_Dominat.Создать().БонусовНаКарте(СсылкаКлиент,СтруктураКлиента.СуммаБонусов);
 
 
 
 
21. В справочнике ТорговоеОборудование, Макет “СписокТО”, добавить фрагмент, описывающий систему лояльности.
22. Включить обработку обслуживания в конфигурацию.