Форум OlegON > Программы и оборудование для автоматизации торговли > Кассовые программы > УКМ-4

Инструкция по конвертеру: стандартный импорт 4 : УКМ-4

26.04.2024 11:17


06.10.2015 15:34
$piritu$
 
может инструкция есть? интересует добавление новых клиентов
06.10.2015 15:39
Mtirt
 
/index.php/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82_4#clients
07.10.2015 08:33
$piritu$
 
осталось только написать скрипт по заполнению таблиц новыми клиентами (номерами карт) может у кого образец есть?
и с помощью импорта эти таблицы запихнуть в сго-см-кассы.
07.10.2015 09:04
Dim
 
щас дописываю заполнение таблиц из 1С, допишу - выложу
07.10.2015 14:37
Dim
 
примерно так...

Код:
	СтрокаПодключения = "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);";
		иначе
			ЗапросСкуль = "insert into client_card_stoplist (client,card_code,version,deleted) values("+Выборка.Код+","+Выборка.Код+",1,0);";
		КонецЕсли;
		Соединение.Execute(ЗапросСкуль);
	КонецЦикла;
	
	//Все данные закачены, разрешаем УКМ забрать их
	Запрос = "insert into clients.signal (clients.signal.signal,version) values('incr',1);";
	Соединение.Execute(Запрос);
07.10.2015 15:02
Dim
 
вариант 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(Запрос);
07.10.2015 15:12
Dim
 
на самом деле не предусмотрена ситуация, когда карта разблокируется в середине месяца, и на нее нужно установить лимит (наверное пропорционально количеству оставшихся до конца месяца дней)
07.10.2015 15:38
Dim
 
в догонку к предыдущему посту. хочу проверять, существует ли счет клиента, если да, то какой баланс. если нулевой, то устанавливаем новый лимит.
кто подскажет каким запросом можно вытащить остаток средств на счете клиента?
07.10.2015 15:50
Павел Сосновских
 
на всякий, с указанием имени бд
Код:
select ukmserver.acc_get_balance(<id счета>,<дата-время>);
нужен именно ид счета, а не клиента или его карты, т.к. и счетов и карт у одного клиента может быть несколько
для текущего баланса в качестве даты-времени можно указать now()
Часовой пояс GMT +3, время: 11:17.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.