обмен бонусами между магазинами Розница 2.2
Скажите, пожалуйста, как передаются бонусы между магазинами в типовом функционале Розницы ред.2.2.
по схеме ПУ1 (периферийный узел) -ЦУ (центральный узел) -ПУ2, т.е. через обычную синхронизацию данных
или возможен обмен только бонусами
иными словами: есть ли вероятность списать бонусы в одном магазине и через несколько минут те же бонусы списать в другом магазине?
по схеме ПУ1 (периферийный узел) -ЦУ (центральный узел) -ПУ2, т.е. через обычную синхронизацию данных
или возможен обмен только бонусами
иными словами: есть ли вероятность списать бонусы в одном магазине и через несколько минут те же бонусы списать в другом магазине?
По теме из базы знаний
- Бонусная система для УТ 10.3
- Интеграция с маркетплейсами МегаМаркет, Wildberries, OZON, ЯндексМаркет, VK, Avito, Леруа Мерлен, Aliexpress, Dostavista
- API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3
Найденные решения
(1)
В рознице есть бонусный сервер. Нужно поднять вэб сервер, опубликовать сервис, настроить подключение в узлах. Тогда списание бонусов будет в режиме "онлайн".
иными словами: есть ли вероятность списать бонусы в одном магазине и через несколько минут те же бонусы списать в другом магазине?
В рознице есть бонусный сервер. Нужно поднять вэб сервер, опубликовать сервис, настроить подключение в узлах. Тогда списание бонусов будет в режиме "онлайн".
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
В рознице есть бонусный сервер. Нужно поднять вэб сервер, опубликовать сервис, настроить подключение в узлах. Тогда списание бонусов будет в режиме "онлайн".
иными словами: есть ли вероятность списать бонусы в одном магазине и через несколько минут те же бонусы списать в другом магазине?
В рознице есть бонусный сервер. Нужно поднять вэб сервер, опубликовать сервис, настроить подключение в узлах. Тогда списание бонусов будет в режиме "онлайн".
(8) большое спасибо всем!
жаль, что в новой редакции блокировка при обмене все таки осталась
в старой редакции я обошла блокировку заменив команду ЗаписатьИзменения на ВыбратьИзменения
по команде ВыбратьИзменения данные передаются без конфигурации и файл обмена значительно больше, но зато кассиры могут спокойно торговать, пока загружаются данные
а когда надо передать конфигурацию использую команду ЗаписатьИзменения
придется и в новой редакции делать так же
может мой вариант обхода блокировок кому-то поможет
жаль, что в новой редакции блокировка при обмене все таки осталась
в старой редакции я обошла блокировку заменив команду ЗаписатьИзменения на ВыбратьИзменения
по команде ВыбратьИзменения данные передаются без конфигурации и файл обмена значительно больше, но зато кассиры могут спокойно торговать, пока загружаются данные
а когда надо передать конфигурацию использую команду ЗаписатьИзменения
придется и в новой редакции делать так же
может мой вариант обхода блокировок кому-то поможет
(11) Нашел единственный вызов
Т.е. здесь можно сделать замену? И даже наверно вынести это в расширение, которое отключать при обновлении?
В Обработке КонвертацияОбъектовРаспределенныхИнформационныхБаз, модуль объекта процедура
Процедура ЗаписатьИзмененияВФайлСообщенияОбмена(Отказ, ЗаписьXML)
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, КоличествоЭлементовВТранзакции);
Т.е. здесь можно сделать замену? И даже наверно вынести это в расширение, которое отключать при обновлении?
(12) похоже, что здесь; думаю и в расширение можно вынести
как именно сделать вызов в расширении своей процедуры сказать не могу - не смотрела еще этот блок в новой конфигурации
если при передачи данных файл формировать командой ВыбратьИзменения, то и принимать его надо по-другому, т.е. вместо команды ПрочитатьИзменения использовать ВозможностьЧтенияXML - последовательно читая файл обмена
в старой редакции (ред. 1 под 8.1) я сделала так:
Функция ВыгрузитьИнформациюВМагазин(......)
.......
Попытка
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(КатВремФайловЗап + ИмяФайлаXml);
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, мУзелМагазина);
Если ОтправлятьКонфигурацию Тогда
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, 0);
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись файла");
#КонецЕсли
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
Иначе
Для Н = 1 По 2 Цикл
ЕстьДанныеДляПередачи = Ложь;
Выборка = ПланыОбмена.ВыбратьИзменения(мУзелМагазина, мУзелМагазина.НомерОтправленного + 1);
Пока Выборка.Следующий() Цикл
#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли
ЭлементДанных = Выборка.Получить();
ТипЭлемента = ТипЗнч(ЭлементДанных);
// проверка необходимости передачи данных
ОтправкаЭлемента = Неопределено;
ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, мУзелМагазина);
// ПланыОбмена.ПоМагазину.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, мУзелМагазина);
Если ОтправкаЭлемента <> ОтправкаЭлементаДанных.Игнорировать и
ОтправкаЭлемента <> ОтправкаЭлементаДанных.Удалить Тогда
// Запись изменений данных
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись в файл: " + ЭлементДанных);
#КонецЕсли
ЗаписатьXML(ЗаписьСообщения.ЗаписьXML, ЭлементДанных);
ЕстьДанныеДляПередачи = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьДанныеДляПередачи Тогда
Прервать;
ИначеЕсли Н = 1 Тогда
// так сделаем для того, чтобы в файле что-то было, иначе узел-приемник его не примет
ПланыОбмена.ЗарегистрироватьИзменения(мУзелМагазина.Ссылка, мУзелМагазина.Магазины[0].Магазин);
КонецЕсли;
КонецЦикла;
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись файла");
#КонецЕсли
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
КонецЕсли;
Исключение
#Если Клиент Тогда
Сообщить("" + ТекущаяДата() + "Ошибка при выгрузке данных " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
#КонецЕсли
Если мФайлПротокола <> Неопределено Тогда
мФайлПротокола.ЗаписатьСтроку("" + ТекущаяДата() + " Ошибка при выгрузке данных " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
ЗаписьXML.Закрыть();
Отказ = Истина;
КонецПопытки;
........
КонецФункции
функция ЗагрузитьИнформациюИзМагазина(.....)
.......
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(мКатВремФайловВосст + мИмяФайлаXml);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
// значит файл обмена передан без конфигурации
ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, Ложь);
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, Ложь);
КонецЦикла;
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
ПланыОбмена.УдалитьРегистрациюИзменений(мУзел, мНомерПринятого);
Иначе
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0);//ПрочитатьИзмененияПоПлануОбмена(ЧтениеСообщения);
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
КонецЕсли;
// ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0); // *** Наш блок *** изменнено Журавлевым Д.В. / ПрочитатьИзмененияПоПлануОбмена(ЧтениеСообщения); // *** Наш блок *** изменено Савватеевой О.В. / ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0);
мИнформацияПринята = Истина;
Исключение
мОшибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если Найти(мОшибка, "для которого зарегистрированы изменения конфигурации") Тогда
Если мФайлПротокола <> Неопределено Тогда
мФайлПротокола.ЗаписатьСтроку("" + ТекущаяДата() + " Для узла " + мУзел.Код + " зарегистрированы изменения конфигурации.");
КонецЕсли;
#Если Клиент Тогда
Сообщить("Для узла зарегистрированы изменения конфигурации.");
#КонецЕсли
мОшибка = "";
мЗарегистрированыИзменения = Истина;
КонецЕсли;
ЧтениеСообщения.ПрерватьЧтение();
ЧтениеXML.Закрыть();
КонецПопытки;
.......
КонецФункции
Процедура ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, ПолучаемОтГлавного)
ЭлементДанных = ПрочитатьXML(ЧтениеXML);
.......
КонецПроцедуры
как именно сделать вызов в расширении своей процедуры сказать не могу - не смотрела еще этот блок в новой конфигурации
если при передачи данных файл формировать командой ВыбратьИзменения, то и принимать его надо по-другому, т.е. вместо команды ПрочитатьИзменения использовать ВозможностьЧтенияXML - последовательно читая файл обмена
в старой редакции (ред. 1 под 8.1) я сделала так:
Функция ВыгрузитьИнформациюВМагазин(......)
.......
Попытка
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(КатВремФайловЗап + ИмяФайлаXml);
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьXML, мУзелМагазина);
Если ОтправлятьКонфигурацию Тогда
ПланыОбмена.ЗаписатьИзменения(ЗаписьСообщения, 0);
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись файла");
#КонецЕсли
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
Иначе
Для Н = 1 По 2 Цикл
ЕстьДанныеДляПередачи = Ложь;
Выборка = ПланыОбмена.ВыбратьИзменения(мУзелМагазина, мУзелМагазина.НомерОтправленного + 1);
Пока Выборка.Следующий() Цикл
#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли
ЭлементДанных = Выборка.Получить();
ТипЭлемента = ТипЗнч(ЭлементДанных);
// проверка необходимости передачи данных
ОтправкаЭлемента = Неопределено;
ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, мУзелМагазина);
// ПланыОбмена.ПоМагазину.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, мУзелМагазина);
Если ОтправкаЭлемента <> ОтправкаЭлементаДанных.Игнорировать и
ОтправкаЭлемента <> ОтправкаЭлементаДанных.Удалить Тогда
// Запись изменений данных
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись в файл: " + ЭлементДанных);
#КонецЕсли
ЗаписатьXML(ЗаписьСообщения.ЗаписьXML, ЭлементДанных);
ЕстьДанныеДляПередачи = Истина;
КонецЕсли;
КонецЦикла;
Если ЕстьДанныеДляПередачи Тогда
Прервать;
ИначеЕсли Н = 1 Тогда
// так сделаем для того, чтобы в файле что-то было, иначе узел-приемник его не примет
ПланыОбмена.ЗарегистрироватьИзменения(мУзелМагазина.Ссылка, мУзелМагазина.Магазины[0].Магазин);
КонецЕсли;
КонецЦикла;
#Если Клиент Тогда
Состояние("" + мУзелМагазина + ", запись файла");
#КонецЕсли
ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьXML.Закрыть();
КонецЕсли;
Исключение
#Если Клиент Тогда
Сообщить("" + ТекущаяДата() + "Ошибка при выгрузке данных " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
#КонецЕсли
Если мФайлПротокола <> Неопределено Тогда
мФайлПротокола.ЗаписатьСтроку("" + ТекущаяДата() + " Ошибка при выгрузке данных " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецЕсли;
ЗаписьXML.Закрыть();
Отказ = Истина;
КонецПопытки;
........
КонецФункции
функция ЗагрузитьИнформациюИзМагазина(.....)
.......
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(мКатВремФайловВосст + мИмяФайлаXml);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
// значит файл обмена передан без конфигурации
ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, Ложь);
Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, Ложь);
КонецЦикла;
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
ПланыОбмена.УдалитьРегистрациюИзменений(мУзел, мНомерПринятого);
Иначе
ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0);//ПрочитатьИзмененияПоПлануОбмена(ЧтениеСообщения);
ЧтениеСообщения.ЗакончитьЧтение();
ЧтениеXML.Закрыть();
КонецЕсли;
// ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0); // *** Наш блок *** изменнено Журавлевым Д.В. / ПрочитатьИзмененияПоПлануОбмена(ЧтениеСообщения); // *** Наш блок *** изменено Савватеевой О.В. / ПланыОбмена.ПрочитатьИзменения(ЧтениеСообщения, 0);
мИнформацияПринята = Истина;
Исключение
мОшибка = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если Найти(мОшибка, "для которого зарегистрированы изменения конфигурации") Тогда
Если мФайлПротокола <> Неопределено Тогда
мФайлПротокола.ЗаписатьСтроку("" + ТекущаяДата() + " Для узла " + мУзел.Код + " зарегистрированы изменения конфигурации.");
КонецЕсли;
#Если Клиент Тогда
Сообщить("Для узла зарегистрированы изменения конфигурации.");
#КонецЕсли
мОшибка = "";
мЗарегистрированыИзменения = Истина;
КонецЕсли;
ЧтениеСообщения.ПрерватьЧтение();
ЧтениеXML.Закрыть();
КонецПопытки;
.......
КонецФункции
Процедура ЗаписатьЭлементДанныхВБазу(ЧтениеXML, мУзел, ПолучаемОтГлавного)
ЭлементДанных = ПрочитатьXML(ЧтениеXML);
.......
КонецПроцедуры
(13) да, совсем от блокировок избавится не удалось, но они возникают настолько редко, что можно сказать - их нет
блокировка возникала тогда, когда пользователи пытались записать объект, который в данный момент записывался в файл обмена
при типовом методе выгрузки данных во время обмена в базу почти ничего невозможно было записать,
при выгрузке данных моим методом - пользователи работают практически спокойно
блокировка возникала тогда, когда пользователи пытались записать объект, который в данный момент записывался в файл обмена
при типовом методе выгрузки данных во время обмена в базу почти ничего невозможно было записать,
при выгрузке данных моим методом - пользователи работают практически спокойно
(16) если бы блокировки были бы теми же самыми, то работать пользователям во время обмена данными было бы так же невозможно, а они работают
повторюсь: во время обмена типовым методом блокируются все объекты метаданных данных, для которых зарегистрированы изменения, т.е. был изменен один элемент справочника - блокируется вся таблица этого справочника, т.е. все элементы
в моем методе блокируется только тот объект, который в данный момент записывается в файл
и вероятность того, что пользователь в этот момент будет его изменять очень мала, поэтому блокировки редки
повторюсь: во время обмена типовым методом блокируются все объекты метаданных данных, для которых зарегистрированы изменения, т.е. был изменен один элемент справочника - блокируется вся таблица этого справочника, т.е. все элементы
в моем методе блокируется только тот объект, который в данный момент записывается в файл
и вероятность того, что пользователь в этот момент будет его изменять очень мала, поэтому блокировки редки
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот