Заранее создал 4 группы в справочнике Клиентов, у каждого клиента есть своя карта (которую можно блокировать при необходимости), за этими группами закрепил % дисконта, раз в день распихиваю клиентов между этими группами
СтрокаПодключенияКСерверуСуперМагУКМ4="Driver={MySQL ODBC 5.1 Driver};Server=192.168.1.150;Port=3306;Database=import;User=ukm_server;Password=CtHDbCGK.C;Option=3;STMT=set character_set_r esults=cp1251";
Версия=Константы.ТекВерсияДанныхВСуперМагУКМ4.Получить();
Connection = Новый COMОбъект("ADODB.Connection");
Connection.Open(СтрокаПодключенияКСерверуСуперМагУКМ4);
ИмяТаблицыКлиентов="clients";
ИмяТаблицыКартКлиентов="client_card";
ИмяТаблицыСтопЛистовКартКлиентов="client_card_stoplist";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Дата", текущаядата());
Запрос.Текст = "ВЫБРАТЬ
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта,
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта.код как идкарты,
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта.кодкарты как кодкарты,
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта.ВладелецКарты как ВладелецКарты,
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта.наименование как наименование,
| ПроцентыСкидокСрезПоследних.ДисконтнаяКарта.заблокирована как заблокирована,
| ПроцентыСкидокСрезПоследних.ПроцентСкидки
|ИЗ
| РегистрСведений.ПроцентыСкидок.СрезПоследних(&Дата,
| ) КАК ПроцентыСкидокСрезПоследних
|";
Выборка = Запрос.Выполнить().Выгрузить();
СпрСкидки=Справочники.ИнформационныеКарты;
//Добавим одного владельца губернских карт
Фамилия = "Губернская";
Имя = "Дисконтная";
Отчество = "Система";
Ид=1;
Стр = "INSERT INTO `"+ИмяТаблицыКлиентов+
"` SET "+
"`id` = '"+ид+"', "+
"`classifclient` = '"+23+"', "+ //предопределенная группа в УКМ4
"`sur_name`='"+Фамилия+ "', "+
"`name`='"+Имя+"', "+
"`patronymic`='"+Отчество+"', "+
"`type`='"+0+"', "+
"`allow_paycash`='"+1+"', "+
"`active`='"+1+"', "+
"`version`='"+версия+"'";
попытка
Connection.Execute(Стр);
исключение
сообщить("Не удалось добавить владельца губернской дисконтной карты!");
конецпопытки;
Для каждого текскидка из выборка Цикл
Если (лев(сокрлп(текскидка.КодКарты),2)="30") тогда
Ид=1;
иначе
Если ЗначениеЗаполнено(текскидка.ВладелецКарты) тогда
ФИОСрез = РегистрыСведений.ФИОФизЛиц.ПолучитьПоследнее(,Новый Структура("ФизЛицо", текскидка.ВладелецКарты));
Фамилия = ФИОСрез.Фамилия;
Имя = ФИОСрез.Имя;
Отчество = ФИОСрез.Отчество;
иначе
Фамилия = "Владелец карты №"+текскидка.КодКарты;
Имя = "Владелец карты №"+текскидка.КодКарты;
Отчество = "Владелец карты №"+текскидка.КодКарты;
конецесли;
Ид=текскидка.идкарты;
Если текскидка.ПроцентСкидки=5 тогда
типск=20;//предопределенная группа в УКМ4
иначеесли текскидка.ПроцентСкидки=7 тогда
типск=21;//предопределенная группа в УКМ4
иначеесли текскидка.ПроцентСкидки=10 тогда
типск=22;//предопределенная группа в УКМ4
конецесли;
Стр = "INSERT INTO `"+ИмяТаблицыКлиентов+
"` SET "+
"`id` = '"+ид+"', "+
"`classifclient` = '"+типск+"', "+
"`sur_name`='"+Фамилия+ "', "+
"`name`='"+Имя+"', "+
"`patronymic`='"+Отчество+"', "+
"`type`='"+0+"', "+
"`allow_paycash`='"+1+"', "+
"`active`='"+1+"', "+
"`version`='"+версия+"'";
попытка
Connection.Execute(Стр);
исключение
сообщить("Не удалось добавить владельца ДК! "+текскидка.КодКарты);
конецпопытки;
конецесли;
//Распределим карты по двум таблицам
Если текскидка.заблокирована тогда
Стр = "INSERT INTO `"+ИмяТаблицыСтопЛистовКартКлиентов+
"` SET "+
"`client` = '"+ид+"', "+
"`card_code`='"+текскидка.КодКарты+ "', "+
"`version`='"+версия+"'";
иначе
Стр = "INSERT INTO `"+ИмяТаблицыКартКлиентов+
"` SET "+
"`client` = '"+ид+"', "+
"`card_code`='"+текскидка.КодКарты+ "', "+
"`version`='"+версия+"'";
конецесли;
попытка
Connection.Execute(Стр);
исключение
сообщить("Не удалось добавить ДК! "+текскидка.КодКарты);
конецпопытки;
КонецЦикла;
Стр = "INSERT INTO `signal` SET `signal` = 'incr', `version`='"+версия+"'";
Connection.Execute(Стр);
Connection.close();