вариант 2. в 1-м не предусмотрел перекидку блокированной карты из таблицы в таблицу, в результате чего карта находилась и в списке активных, и в стоп-листе.
Код:
СтрокаПодключения = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=172.20.0.65;PORT=3306;DATABASE=clients;uid=clients;pwd=xxxxxx;";
Соединение = Новый COMОбъект("ADODB.Connection");
Попытка
Соединение.Open(СтрокаПодключения);
исключение
Сообщить("Не могу подключиться к БД");
Возврат;
КонецПопытки;
//проверка на то, что сервер УКМ не работает в данный момент с таблицами (начинаем)
Запрос = "select count(*) from clients.signal where clients.signal.signal='busy';";
НаборЗаписей = Соединение.Execute(Запрос);
Пока НаборЗаписей.Fields("count(*)").value <> 0 Цикл
Сообщить("Ждем");
Пауза(5);
НаборЗаписей = Соединение.Execute(Запрос);
КонецЦикла;
//освободился (заканчиваем)
//Проверяем наличие группы классификатора клиентов, если нет - создаем
//Проверяем группу Блокированные
Запрос = "SELECT id FROM classifclients WHERE name = 'Блокированные'";
НаборЗаписей = Соединение.Execute(Запрос);
Если НаборЗаписей.EoF() тогда
Запрос = "insert into classifclients (id,name,version,deleted) values ('99','Блокированные',1,0);";
Соединение.Execute(Запрос);
КонецЕсли;
//Проверяем группу Группа2
Запрос = "SELECT id FROM classifclients WHERE name = 'Группа2'";
НаборЗаписей = Соединение.Execute(Запрос);
Если НаборЗаписей.EoF() тогда
Запрос = "insert into classifclients (id,name,version,deleted) values ('2','Группа2',1,0);";
Соединение.Execute(Запрос);
КонецЕсли;
//Проверяем группу Группа1
Запрос = "SELECT id FROM classifclients WHERE name = 'Группа1'";
НаборЗаписей = Соединение.Execute(Запрос);
Если НаборЗаписей.EoF() тогда
Запрос = "insert into classifclients (id,name,version,deleted) values ('1','Группа1',1,0);";
Соединение.Execute(Запрос);
КонецЕсли;
//Создаем карты и сотрудников Группа1
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДисконтныеКарты.Код,
| ДисконтныеКарты.ФизЛицо,
| ДисконтныеКарты.Активна,
| ДисконтныеКарты.Скидка
|ИЗ
| Справочник.ДисконтныеКарты КАК ДисконтныеКарты
|ГДЕ
| ДисконтныеКарты.ПометкаУдаления = &ПометкаУдаления";
Запрос.УстановитьПараметр("ПометкаУдаления", Ложь);
Выборка = Запрос.Выполнить().Выбрать();
//Чистим таблицы, если по какой-либо причине УКМ не забирал данные
ЗапросСкуль = "delete from clients_operations;"; //удаляем операции по счету
Соединение.Execute(ЗапросСкуль);
ЗапросСкуль = "delete from client_card_stoplist;"; //удаляем стоп-лист карт
Соединение.Execute(ЗапросСкуль);
ЗапросСкуль = "delete from client_card;"; //удаляем карты
Соединение.Execute(ЗапросСкуль);
ЗапросСкуль = "delete from clients;"; //удаляем сотрудников
Соединение.Execute(ЗапросСкуль);
ЗапросСкуль = "delete from clients.signal;";
Соединение.Execute(ЗапросСкуль);
Счетчик=1;
Пока Выборка.Следующий() Цикл
Если Выборка.Активна тогда
Классификатор = 1;
Если День(ТекущаяДата()) = 1 тогда //1-го числа каждого месяца устанавливаем баланс счета=Скидка по карте*1000
Мес = ?(СтрДлина(Месяц(ТекущаяДата()))=1,"0"+Месяц(ТекущаяДата()),Месяц(ТекущаяДата()));
Ден = ?(СтрДлина(День(ТекущаяДата()))=1,"0"+День(ТекущаяДата()),День(ТекущаяДата()));
Ч = ?(СтрДлина(Час(ТекущаяДата()))=1,"0"+Час(ТекущаяДата()),Час(ТекущаяДата()));
М = ?(СтрДлина(Минута(ТекущаяДата()))=1,"0"+Минута(ТекущаяДата()),Минута(ТекущаяДата()));
С = ?(СтрДлина(Секунда(ТекущаяДата()))=1,"0"+Секунда(ТекущаяДата()),Секунда(ТекущаяДата()));
Ном = "" + Прав(Год(ТекущаяДата()),2)+ Мес + Ден + Ч +М + С + Формат(Счетчик,"ЧГ=0");
Дат = ТекущаяДата();
Лимит = ?(Выборка.Скидка=0,0,Формат(Выборка.Скидка*1000, "ЧГ=0")); //лимит записан в поле "Скидка" в тысячах рублей
ЗапросСкуль = "insert into clients_operations (id,account_id,client,number,date,operation_date,amount,type,version) values("+Ном+",1,"+Выборка.Код+","+Ном+",STR_TO_DATE('"+Дат+"','%d.%m.%Y %H:%i:%s'),STR_TO_DATE('"+Дат+"','%d.%m.%Y %H:%i:%s'),"+Лимит+",1,1)";
Соединение.Execute(ЗапросСкуль);
Счетчик = Счетчик + 1;
КонецЕсли;
иначе
Классификатор = 99;
Мес = ?(СтрДлина(Месяц(ТекущаяДата()))=1,"0"+Месяц(ТекущаяДата()),Месяц(ТекущаяДата()));
Ден = ?(СтрДлина(День(ТекущаяДата()))=1,"0"+День(ТекущаяДата()),День(ТекущаяДата()));
Ч = ?(СтрДлина(Час(ТекущаяДата()))=1,"0"+Час(ТекущаяДата()),Час(ТекущаяДата()));
М = ?(СтрДлина(Минута(ТекущаяДата()))=1,"0"+Минута(ТекущаяДата()),Минута(ТекущаяДата()));
С = ?(СтрДлина(Секунда(ТекущаяДата()))=1,"0"+Секунда(ТекущаяДата()),Секунда(ТекущаяДата()));
Ном = "" + Прав(Год(ТекущаяДата()),2)+ Мес + Ден + Ч +М + С + Формат(Счетчик,"ЧГ=0");
Дат = ТекущаяДата();
ЗапросСкуль = "insert into clients_operations (id,account_id,client,number,date,operation_date,amount,type,version) values("+Ном+",1,"+Выборка.Код+","+Ном+",STR_TO_DATE('"+Дат+"','%d.%m.%Y %H:%i:%s'),STR_TO_DATE('"+Дат+"','%d.%m.%Y %H:%i:%s'),0,1,1)";
Соединение.Execute(ЗапросСкуль);
Счетчик = Счетчик + 1;
КонецЕсли;
ЗапросСкуль = "insert into clients (id,classifclient,sur_name,active,version,deleted) values("+Выборка.Код+","+Классификатор+",'"+Выборка.ФизЛицо+"',1,1,0);"; //сотрудник
Соединение.Execute(ЗапросСкуль);
Если Выборка.Активна = 1 тогда //карта
ЗапросСкуль = "insert into client_card (client,card_code,version,deleted) values("+Выборка.Код+","+Выборка.Код+",1,0);";
Соединение.Execute(ЗапросСкуль);
//удаляем из стоп-листа
ЗапросСкуль = "insert into client_card_stoplist (client,card_code,version,deleted) values("+Выборка.Код+","+Выборка.Код+",1,1);";
Соединение.Execute(ЗапросСкуль);
иначе
ЗапросСкуль = "insert into client_card_stoplist (client,card_code,version,deleted) values("+Выборка.Код+","+Выборка.Код+",1,0);";
Соединение.Execute(ЗапросСкуль);
//Удаляем из активных
ЗапросСкуль = "insert into client_card (client,card_code,version,deleted) values("+Выборка.Код+","+Выборка.Код+",1,1);";
Соединение.Execute(ЗапросСкуль);
КонецЕсли;
КонецЦикла;
//Все данные закачены, разрешаем УКМ забрать их
Запрос = "insert into clients.signal (clients.signal.signal,version) values('incr',1);";
Соединение.Execute(Запрос);