Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вопросы по jscript, двоичным данным и 1С 7.7 (число прочтений - 17375 )
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Вопросы по jscript, двоичным данным и 1С 7.7
18. Января 2011 :: 14:40
Печать  
Добрый день.
SQL
В 1С храню строку: сСтр=63,0,63,0,63,0,3,0,73,63,63,63,63,63,63,63,63,63,63,63,63,63,63.... (строка порядка 20 тысяч символов)
это так сказать байты, ну или их предстваление Улыбка
Как их превратить в двоичные данные в jscript?

Или как хранить двоичные данные непосредственно в базе? но тогда как их вытаскивать именно как двоичные данные?
Хотя строкой меня устраивает, таких записей не будет более 200

jscript:
Код
Выбрать все
	ТекстСкрипта="
	|function StartScan()
	|{
	|	var stream = new ActiveXObject('ADODB.Stream');
	|	var bufferTemplate1 = String.fromCharCode("+сСтр+"); //получили строку из символов
//но помоему тут не правильно, надо как-то конвертнуть строку из байтов в сами байты
	|	stream.Type=1;
	|	stream.Open();
	|	stream.Write( bufferTemplate1 );
	|	stream.SaveToFile('c:\\str2.txt',2);
	|	stream.Close();
	|}
	|"; 



как теперь строку символов првратить в байты?

Есть какие предложения на эти темы?
Обработка maljaev'а с хранением двоичных в псевдоBMP супер - но как эти BMP теперь засунуть в 1С
в общем жду любых предложений Улыбка
  
Наверх
www  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #1 - 19. Января 2011 :: 01:48
Печать  
MaxPiter писал(а) 18. Января 2011 :: 14:40:
Или как хранить двоичные данные непосредственно в базе? но тогда как их вытаскивать именно как двоичные данные?

Двоичные данные и 1С принципиально несовместимы...
Я писал специальную ВК для того, чтобы из 1С можно было отправлять команды "низкого уровня" в порт принтера.
Т.е. напрямую в 1С ты никак не можешь сформировать поток двоичных данных... только если будешь использовать какие-нибудь переходники, а их существует немало готовых, да и самому сделать нетрудно ... надо попробовать задействовать chessmanПодмигивание
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #2 - 19. Января 2011 :: 05:38
Печать  
Не пробовал прикручивать binarydata? Пример тут: http://www.1cpp.ru/forum/YaBB.pl?num=1280497111/7
  
Наверх
ICQ  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #3 - 19. Января 2011 :: 06:45
Печать  
binarydata однозначно
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #4 - 19. Января 2011 :: 07:15
Печать  
chessman писал(а) 19. Января 2011 :: 06:45:
binarydata однозначно

а можно ли с binarydata не из файла читать а из потока?

концептуально как-то так

Код
Выбрать все
	scriptCtrl =  СоздатьОбъект("MSScriptControl.ScriptControl");
	data=СоздатьОбъект("BinaryData");
	сСтр = Сотр.Темплате;
	scriptCtrl.Language="jscript";
	ТекстСкрипта="
	|function start()
	|{
	|	var data = String.fromCharCode("+сСтр+");
	|}
	|";

    Попытка
	scriptCtrl.AddCode(ТекстСкрипта);
	scriptCtrl.AddObject("data",data);
    Исключение
        Сообщить("Текст ошибки: "+scriptCtrl.Error.Text);
        Сообщить("Строка ошибки: "+scriptCtrl.Error.Line);
    КонецПопытки;

	scriptCtrl.Run("start"); 

  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #5 - 19. Января 2011 :: 07:54
Печать  
Ты не сможешь передать 1C-й объект в сторонний COM.

Код
Выбрать все
scriptCtrl.AddObject("data",data); 


не прокатит.

Еще такой вопрос, где ты хочешь хранить данные, в 1С-х таблицах или сбоку, в отдельной SQL-ой таблице?
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #6 - 19. Января 2011 :: 08:10
Печать  
chessman писал(а) 19. Января 2011 :: 07:54:
Еще такой вопрос, где ты хочешь хранить данные, в 1С-х таблицах или сбоку, в отдельной SQL-ой таблице?


Пока склоняюсь к отдельно таблице.
Код
Выбрать все
	рс=СоздатьОбъект("ODBCRecordset");
	ТекстЗапроса = "
	|Set nocount on;
	|
	|IF NOT EXISTS (SELECT name FROM dbo.sysobjects where name = '__templatefinger' and xtype = 'U ')
	|CREATE TABLE __templatefinger
	|(
	|id			int IDENTITY(1,1)		,
	|sotrudnik	varchar(10)			,
	|finger		varchar(2)			,
	|template	varbinary(max)		,
	|)
	|";

	рс.ВыполнитьИнструкцию(ТекстЗапроса);

	рс.Подготовить("
	|insert into '__templatefinger'
	|(sotrudnik,finger,template) values("+Сотр.Код+","+Сотр.П+",?)
	|");
	рс.ДобПараметр(1,19,0,0);
	Данные=СоздатьОбъект("BinaryData");
	Данные.ЗагрузитьИзФайла(Файл);
	рс.УстПараметр(1,Данные);
	рс.ВыполнитьИнструкцию(); 


  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #7 - 19. Января 2011 :: 08:14
Печать  
Будешь хранить отпечатки пальцев?  Улыбка
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #8 - 19. Января 2011 :: 08:18
Печать  
chessman писал(а) 19. Января 2011 :: 08:14:
Будешь хранить отпечатки пальцев?  Улыбка

угу
  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #9 - 19. Января 2011 :: 08:27
Печать  
как ты поток получаешь?
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #10 - 19. Января 2011 :: 08:39
Печать  
chessman писал(а) 19. Января 2011 :: 08:27:
как ты поток получаешь?


Код
Выбрать все
Процедура Сформировать()
    scriptCtrl =  СоздатьОбъект("MSScriptControl.ScriptControl");
	Wscript = СоздатьОбъект("WScript.Shell");
	scriptCtrl.Language="jscript";
	ТекстСкрипта=ТекстФункцияСканирование+"
	|
    |function StartScan()
	|{
	|	var factory = new ActiveXObject('Biolink.Biometrics2.Factory');
	|	var license = factory.CreateLicense();
	|	var deviceList = factory.CreateDeviceList();    
	|
	|	if (deviceList.Size == 0) throw new Error(0,'Scanner was not found');
	|
	|	var deviceDescriptor = deviceList.DeviceDescriptor(0);
	|	var scanner = factory.CreateScanner(deviceDescriptor);
	|	WScript.Popup('Пальчег');
	|	var image1 = ScanImage(scanner);
	|	WScript.Popup('Ок');
	|	WScript.Popup('Пальчег');
	|   var image2 = ScanImage(scanner);
	|	WScript.Popup('Ок');
	|	WScript.Popup('Пальчег');
	|	var image3 = ScanImage(scanner);
	|	WScript.Popup('Ок');
	|
	|	var imageSet = factory.CreateimageSet();
	|	imageSet.AddImage(image1, 0);
	|	imageSet.AddImage(image2, 0);
	|	imageSet.AddImage(image3, 0);
	|	var imgPrc = factory.CreateImageProcessor();
	|	var temp1 = imgPrc.CreateTemplate(imageSet);  
	|	var bufferTemplate1 = temp1.ToArray();
	|
	|	var stream = new ActiveXObject('ADODB.Stream');
	|	stream.Type=1;
	|	stream.Open();
	|	stream.Write( bufferTemplate1 );
	|	stream.SaveToFile('c:\\str2.txt',2);
	|	stream.Close();
	|
	|	license.Dispose();
	|   delete factory;
	|
	|	return 'str2.txt';
	|}";
    Попытка
	scriptCtrl.AddCode(ТекстСкрипта);
	scriptCtrl.AddObject("WScript",WScript);
    Исключение
	  Сообщить("Текст ошибки: "+scriptCtrl.Error.Text);
	  Сообщить("Строка ошибки: "+scriptCtrl.Error.Line);
    КонецПопытки;
    
	ТемплатеФайл = scriptCtrl.Run("StartScan");

КонецПроцедуры // Сформировать 

  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #11 - 19. Января 2011 :: 09:31
Печать  
Я думаю, что проще тебе будет просто подхватить файлик BinaryData, сжать его и записать в базу.
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #12 - 19. Января 2011 :: 09:45
Печать  
chessman писал(а) 19. Января 2011 :: 09:31:
Я думаю, что проще тебе будет просто подхватить файлик BinaryData, сжать его и записать в базу.


я так и делаю, и в принципе скорость особенно не требуется и с файликами успею.

на мисте предлагают поток байтов с ascii 7/8 и хранить в длинной строке.

т.е. есть 2 варианта
1) отсканировать, в файл из файла в базу. Расшифровка из базы в файл, файл в поток и далее.
2) отсканировать, конвертируем в ascii 7/8, потом в неограниченную строку в базу. Расшифровка из базы в строку, строку в скрипт, конвертируем из ascii 7/8 в byte и далее.

Вариант 1 почти дописан.
Вариант 2 вроде как более рационален?
  
Наверх
www  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #13 - 19. Января 2011 :: 09:49
Печать  
Если вариант 2 хочешь хранить в базе 1С, то лучше от него сразу отказаться.
  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #14 - 19. Января 2011 :: 09:56
Печать  
JohnyDeath писал(а) 19. Января 2011 :: 09:49:
Если вариант 2 хочешь хранить в базе 1С, то лучше от него сразу отказаться.


Сейчас массив записан в файл и этот файл собираюсь хранить в sql таблице базы 1С
Вот так привязываю к ФИО человека
Код
Выбрать все
	рс=СоздатьОбъект("ODBCRecordset");
	ТекстЗапроса = "
	|Set nocount on;
	|
	|IF NOT EXISTS (SELECT name FROM dbo.sysobjects where name = '__templatefinger' and xtype = 'U ')
	|CREATE TABLE __templatefinger
	|(
	|id			int IDENTITY(1,1)	,
	|sotrudnik	varchar(10)			,
	|finger		varchar(2)			,
	|template	varbinary(max)		,
	|)
	|";

	рс.ВыполнитьИнструкцию(ТекстЗапроса);

	рс.Подготовить("
	|IF EXISTS
	|	(SELECT * FROM [__templatefinger]
	|		WHERE sotrudnik='"+Сотр.ФИО+"'
	|	)
	|   UPDATE [__templatefinger]
	|			SET  
	|					finger='0',
	|					template=?
	|			WHERE sotrudnik='"+Сотр.ФИО+"'
	|ELSE
	|	INSERT INTO [__templatefinger]
	|					([sotrudnik],[finger],[template]) VALUES ('"+Сотр.ФИО+"','0',?)
	|");

	рс.Отладка(1);
	рс.ДобПараметр(1,19,0,0);
	рс.ДобПараметр(1,19,0,0);
	Данные=СоздатьОбъект("BinaryData");
	Данные.ЗагрузитьИзФайла("c:\str2.txt");
	рс.УстПараметр(1,Данные);
	рс.УстПараметр(2,Данные);
	рс.ВыполнитьИнструкцию(); 



так вывожу в ФормеСписка, есть или нет скан
Код
Выбрать все
Функция ПроверитьТемплате()
	ТекстЗапроса = "
	|SELECT count([id])
	|	FROM [__templatefinger] (nolock)
	|	WHERE sotrudnik='"+ФИО+"'
	|";

	Возврат(рс.ВыполнитьСкалярный(ТекстЗапроса));
КонецФункции // ПроверитьТемплате 


а когда надо сверить, выгружаю в файл
и
Код
Выбрать все
Процедура Проверка()
    scriptCtrl =  СоздатьОбъект("MSScriptControl.ScriptControl");
	Wscript = СоздатьОбъект("WScript.Shell");
	scriptCtrl.Language="jscript";
	ТекстСкрипта=ТекстФункцияСканирование+"
	|
    |function StartScan()
	|{
	|	var factory = new ActiveXObject('Biolink.Biometrics2.Factory');
	|	var license = factory.CreateLicense();
	|	var deviceList = factory.CreateDeviceList();    
	|
	|	if (deviceList.Size == 0) throw new Error(0,'Scanner was not found');
	|
	|	var deviceDescriptor = deviceList.DeviceDescriptor(0);
	|	var scanner = factory.CreateScanner(deviceDescriptor);
	|	WScript.Popup('Пальчег');
	|	var image1 = ScanImage(scanner);
	|	var bmp = image1.Bitmap();
	|	bmp.Save('c:\\strOk.bmp');
	|
	|	WScript.Popup('Ок');
	|	var imageSet = factory.CreateimageSet();
	|	imageSet.AddImage(image1, 0);
	|	var imgPrc = factory.CreateImageProcessor();
	|	var templateScan = imgPrc.CreateTemplate(imageSet);  
	|	imageSet.Clear();
	|
	|	var stream = new ActiveXObject('ADODB.Stream');
	|	stream.Type = 1;
	|	stream.Open();
	|	stream.LoadFromFile( 'c:\\str3.txt' );
	|	stream.Position = 0;
	|	var templateFile = stream.Read(-1);
	|	stream.Close();
	|
	|	var templateOk = factory.CreateTemplate();
	|	templateOk.Load(templateFile);
	|
	|	var matcher = factory.CreateMatcher();
	|	var score = matcher.Compare(templateScan, templateOk);
	|
	|	license.Dispose();
	|   delete factory;
	|
	|	return score;
	|}
	|";
    Попытка
	scriptCtrl.AddCode(ТекстСкрипта);
	scriptCtrl.AddObject("WScript",WScript);
    Исключение
        Сообщить("Текст ошибки: "+scriptCtrl.Error.Text);
        Сообщить("Строка ошибки: "+scriptCtrl.Error.Line);
	КонецПопытки;

	Скоре = scriptCtrl.Run("StartScan");

	Картинки=СоздатьОбъект("GFLAx.GFLAx");

	Картинки.LoadBitmap("c:\strOk.bmp");
	Картинки.SaveFormat=4;
	Картинки.SaveBitmap("c:\strOk.bmp");
	Пикт.РежимРисования(3);
	Пикт.Загрузить("c:\strOk.bmp");

	Сообщить(Скоре);

КонецПроцедуры // Проверка 



это пока еще разработка, поэтому не исключений ни причесываний нет
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #15 - 19. Января 2011 :: 12:43
Печать  
что за функция ScanImage() ?
  

1&&2&&3
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #16 - 19. Января 2011 :: 13:10
Печать  
trad писал(а) 19. Января 2011 :: 12:43:
что за функция ScanImage() ?

сканирует отпечаток и возвращает image
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #17 - 19. Января 2011 :: 13:58
Печать  
А зачем к ФИО привязываешься? женщины иногда фамилии все-таки меняют, и твоя привязка перестанет работать.
Или кадровики ФИО исправляют.
почему не к ИД элемента справочника?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #18 - 19. Января 2011 :: 14:05
Печать  
artbear писал(а) 19. Января 2011 :: 13:58:
А зачем к ФИО привязываешься? женщины иногда фамилии все-таки меняют, и твоя привязка перестанет работать.
Или кадровики ФИО исправляют.
почему не к ИД элемента справочника?

Конечно к ид справочника будет - это сейчас в тесте у меня так.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #19 - 19. Января 2011 :: 14:33
Печать  
MaxPiter писал(а) 19. Января 2011 :: 13:10:
trad писал(а) 19. Января 2011 :: 12:43:
что за функция ScanImage() ?

сканирует отпечаток и возвращает image

кто бы мог подумать...  Круглые глаза
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #20 - 19. Января 2011 :: 14:36
Печать  
мне кажется тут можно обойтись без скриптконтрола и без промежуточного файла на диске
  

1&&2&&3
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #21 - 19. Января 2011 :: 14:43
Печать  
trad писал(а) 19. Января 2011 :: 14:36:
мне кажется тут можно обойтись без скриптконтрола и без промежуточного файла на диске

Это было бы вообще замечательно.
Но выполнив скан возвращается на выбор объекты
image
imageSet
template
templateSet

последний можно конвертнуть в массив byte и по хорошему сразу бы закинуть в 1С - это можно через JScript реализовать?

Прикрепил, если нужно, chm по библиотеке

upd:
перезалил pdf кой
  

devguide.pdf ( 1054 KB | Загрузки )
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #22 - 19. Января 2011 :: 14:56
Печать  
MaxPiter писал(а) 19. Января 2011 :: 14:43:
Прикрепил, если нужно, chm по библиотеке

это только содержание
  

1&&2&&3
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #23 - 19. Января 2011 :: 15:04
Печать  
trad писал(а) 19. Января 2011 :: 14:56:
MaxPiter писал(а) 19. Января 2011 :: 14:43:
Прикрепил, если нужно, chm по библиотеке

это только содержание


перезалил pdf кой
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #24 - 19. Января 2011 :: 15:07
Печать  
Сверка отпечатка с хранящимся в базе
Код
Выбрать все
Процедура Проверка()
	рс=СоздатьОбъект("ODBCRecordset");

	ТекстЗапроса = "
	|DECLARE
	|	@Stream integer,
	|	@Buffer varbinary(max),
	|	@Size integer,
	|	@Pos integer,
	|	@BufSize integer,
	|	@FileNameLocal varchar(1024),
	|	@HR integer,
	|	@FIO varchar(1024)
	|
	|	set @FIO = '"+ФИО+"'
	|	set @FileNameLocal = 'c:\otstr.txt'
	|	SET @BufSize = 4096
	|	EXEC @HR = sp_OACreate 'ADODB.Stream',@Stream OUT
	|	if @HR<>0
	|	begin
	|	--обработка ошибки создания объекта
	|	EXEC [dbo].[sp_displayoaerrorinfo] @Stream ,@HR
	|	end
	|	EXEC @HR = sp_OASetProperty @Stream,'Type',1 -- binary
	|	EXEC @HR = sp_OASetProperty @Stream,'Mode',3 -- write|read
	|	EXEC @HR = sp_OAMethod @Stream,'Open'
	|
	|	select
	|	@Size = DATALENGTH(template)
	|	FROM __templatefinger WHERE sotrudnik=''+@FIO+''
	|	Set @Pos=0
	|
	|	WHILE @Pos < @Size BEGIN
	|	SET @BufSize = CASE WHEN @Size - @Pos < 4096 THEN @Size - @Pos ELSE 4096 END
	|
	|	select @Buffer = substring(template ,@Pos+1, @BufSize)
	|	from __templatefinger where sotrudnik=''+@FIO+''
	|
	|	EXEC @HR = sp_OAMethod @Stream, 'Write', NULL, @Buffer
	|
	|	SET @Pos = @Pos + @BufSize
	|	END
	|
	|	EXEC @HR = sp_OAMethod @Stream,'SaveToFile',null, @FileNameLocal,2
	|	EXEC @HR = sp_OAMethod @Stream,'Close'
	|	EXEC @HR = sp_OADestroy @Stream
	|";

	рс.ВыполнитьИнструкцию(ТекстЗапроса);

    scriptCtrl =  СоздатьОбъект("MSScriptControl.ScriptControl");
	Wscript = СоздатьОбъект("WScript.Shell");
	scriptCtrl.Language="jscript";
	ТекстСкрипта=ТекстФункцияСканирование+"
	|
    |function StartScan()
	|{
	|	var factory = new ActiveXObject('Biolink.Biometrics2.Factory');
	|	var license = factory.CreateLicense();
	|	var deviceList = factory.CreateDeviceList();
	|
	|	if (deviceList.Size == 0) throw new Error(0,'Scanner was not found');
	|
	|	var deviceDescriptor = deviceList.DeviceDescriptor(0);
	|	var scanner = factory.CreateScanner(deviceDescriptor);
	|	WScript.Popup('Пальчег');
	|	var image1 = ScanImage(scanner);
	|	var bmp = image1.Bitmap();
	|	bmp.Save('c:\\strOk.bmp');
	|
	|	WScript.Popup('Ок');
	|	var imageSet = factory.CreateimageSet();
	|	imageSet.AddImage(image1, 0);
	|	var imgPrc = factory.CreateImageProcessor();
	|	var templateScan = imgPrc.CreateTemplate(imageSet);
	|	imageSet.Clear();
	|
	|	var stream = new ActiveXObject('ADODB.Stream');
	|	stream.Type = 1;
	|	stream.Open();
	|	stream.LoadFromFile( 'c:\\otstr.txt' );
	|	stream.Position = 0;
	|	var templateFile = stream.Read(-1);
	|	stream.Close();
	|
	|	var templateOk = factory.CreateTemplate();
	|	templateOk.Load(templateFile);
	|
	|	var matcher = factory.CreateMatcher();
	|	var score = matcher.Compare(templateScan, templateOk);
	|
	|	license.Dispose();
	|   delete factory;
	|
	|	return score;
	|}
	|";
    Попытка
	scriptCtrl.AddCode(ТекстСкрипта);
	scriptCtrl.AddObject("WScript",WScript);
    Исключение
	  Сообщить("Текст ошибки: "+scriptCtrl.Error.Text);
	  Сообщить("Строка ошибки: "+scriptCtrl.Error.Line);
	КонецПопытки;

	Скоре = scriptCtrl.Run("StartScan");

	Картинки=СоздатьОбъект("GFLAx.GFLAx");

	Картинки.LoadBitmap("c:\strOk.bmp");
	Картинки.SaveFormat=4;
	Картинки.SaveBitmap("c:\strOk.bmp");
	Пикт.РежимРисования(3);
	Пикт.Загрузить("c:\strOk.bmp");

	Сообщить(Скоре);

КонецПроцедуры // Проверка 


  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #25 - 19. Января 2011 :: 15:23
Печать  
В это pdf нет справочника который у тебя есть в chm.
Интересно, что возвращает метод Template::ToArray()
Если массив байт, то все что до
var bufferTemplate1 = temp1.ToArray();
, можно попробовать написать в модуле 1с без скрипта.

Потом .ToArray() выполнить через OleExSup.
Далее массив переложить в BinaryData и отправить в таблицу mssql
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #26 - 19. Января 2011 :: 15:28
Печать  
Если это получится, то проверку тоже можно попробовать.
В обратном порядке.
Из таблицы двоичные данные в объект BinaryData.
Далее в массив.
Можно ли из массива получить Template - нужно читать документацию.

И никаких монстров в виде ActiveX на t-sql
  

1&&2&&3
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #27 - 19. Января 2011 :: 20:05
Печать  
Я думаю, после вот этого
Код
Выбрать все
var stream = new ActiveXObject('ADODB.Stream');
stream.Type=1;
stream.Open();
stream.Write( bufferTemplate1 );
 



Должно заработать что-то такое (vbscript):

Код
Выбрать все
set con = CreateObject(""ADODB.Connection"")
strcon  = ""<<здесь строка соединения>>""
con.Open(strcon)

set rs = CreateObject(""ADODB.RecordSet"")
rs.Open(""<<имя таблицы>>"", con, 1, 3)

FieldNames  = Array(""<<имя_поля1>>"",...., ""<<имя_поляN>>"", ""IMG"")
FieldValues = Array(""<<знач1>>"",....""<<значN>>"",  stream.Read(-1))

rs.AddNew FieldNames, FieldValues
rs.Update()

stream.Close
 



поле "IMG" - куда вставляем поток, кстати я посмотрел у меня оно имеет тип image, а не varbinary...честна, не знаю в чем разница

  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #28 - 20. Января 2011 :: 09:14
Печать  
trad писал(а) 19. Января 2011 :: 15:23:
Интересно, что возвращает метод Template::ToArray()
Если массив байт, то все что до
var bufferTemplate1 = temp1.ToArray();
, можно попробовать написать в модуле 1с без скрипта.

Потом .ToArray() выполнить через OleExSup.
Далее массив переложить в BinaryData и отправить в таблицу mssql


Сначало я так и написал, но когда дошел до temp1.ToArray(); то тут все померло.
Пыталсся его и в BinaryData присвоить и в поток закинуть, и передать в JScript но 1С наотрез отказалась что ли бос ним делать. Причем выполняя в коде temp1.ToArray(); 1С проходила нормально, но как только пытался его присвоить хоть чему, вылетал.

Вариант на 1С который был №1
Код
Выбрать все
//======================================================================
Функция ScanImage(scanner)
	image = factory.CreateImage();
	Пока (image.expressQuality < 20) Цикл
		Если (ПустоеЗначение(image)=0) Тогда
			image.Dispose();
			image = scanner.AcquireImage();
			expressQuality = image.ExpressQuality();
		КонецЕсли;
	КонецЦикла;
	Возврат image;
КонецФункции // ScanImage

//======================================================================
Процедура Сформировать()
	factory = СоздатьОбъект("Biolink.Biometrics2.Factory");
	license = factory.CreateLicense();
	deviceList = factory.CreateDeviceList();
	Если (deviceList.Size = 0) Тогда
		Сообщить("Сканер не подключен","!!!");
		Возврат;
	КонецЕсли;
	Сообщить("Сканер подключен.");
	deviceDescriptor = deviceList.DeviceDescriptor(0);
	scanner = factory.CreateScanner(deviceDescriptor);
	Предупреждение("Поднесите палец");
	image1 = ScanImage(scanner);
	Предупреждение("Отсканировали");

	//bmp1 = image1.Bitmap();
	//bmp1.Save("c:\finger.bmp");
	//
	//Пикт.загрузить("c:\finger.bmp");

    imageSet = factory.CreateImageSet();
    imageSet.AddImage(image1, 1);

    Сообщить("Creation template from scaned image");

    imgPrc = factory.CreateImageProcessor();
    templ = imgPrc.CreateTemplate(imageSet);

	Бин = СоздатьОбъект("BinaryData");
	Бин = templ.ToArray();

	//ttt=Строка(templ.toArray());

	//Size = templ.Size();
	//templ.Save(templ.toArray(),0,size);

	Бин.СохранитьВФайл("c:\bin1.sav",0);


	//Сотр = СоздатьОбъект("Справочник.Сотрудник");
	//Сотр.Новый();
	//Сотр.ФИО = "Тест 1";
	//Сотр.Темплате = Данные;
	//Сотр.Записать();

	license.Dispose();
	factory=0
КонецПроцедуры // Сформировать 



Если бы что-то подобное
Код
Выбрать все
	Бин = СоздатьОбъект("BinaryData");
	Бин.Получить(templ.ToArray()); 


отработать, то было бы гораздо интереснее.
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #29 - 20. Января 2011 :: 09:24
Печать  
chessman писал(а) 19. Января 2011 :: 20:05:
Я думаю, после вот этого
Код
Выбрать все
...
 



Должно заработать что-то такое (vbscript):

Код
Выбрать все
...
 



поле "IMG" - куда вставляем поток, кстати я посмотрел у меня оно имеет тип image, а не varbinary...честна, не знаю в чем разница




Так тоже думал, но вроде как уже имеем подключение к базе и цепляться еще раз, правильно ли? И потом это уже vbscript - другой код. Можно конечно вообще все с JSCript на VBScript переписать...
Думаю...

>>поле "IMG" - куда вставляем поток, кстати я посмотрел у меня оно имеет тип image, а не varbinary...честна, не знаю в чем разница

image вроде как до SQL2008, но на 2005 varbinary(max) работает
http://msdn.microsoft.com/ru-ru/library/ms178158.aspx
В моем случае, наверно избыточно varbinary

Спасибо за ответы.
  
Наверх
www  
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #30 - 20. Января 2011 :: 10:21
Печать  
MaxPiter писал(а) 20. Января 2011 :: 09:24:
Так тоже думал, но вроде как уже имеем подключение к базе и цепляться еще раз, правильно ли? И потом это уже vbscript - другой код. Можно конечно вообще все с JSCript на VBScript переписать...


Это не имеет значения, можешь хоть 10 подключений сделать. В данном случае у тебя это не взлетит только в монопольном режиме.
Можно посмотреть, как ODBCDataBase цепляет 1С-е подключение, но стоит ли это делать, ради 20 отпечатков?
Может вообще стоит остановиться на передаче через файл.


  
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #31 - 20. Января 2011 :: 10:27
Печать  
chessman писал(а) 20. Января 2011 :: 10:21:
Можно посмотреть, как ODBCDataBase цепляет 1С-е подключение, но стоит ли это делать, ради 20 отпечатков?
Может вообще стоит остановиться на передаче через файл.

В качестве версии №1 пойдет через файл Улыбка

Но стремиться же надо к совершенству.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #32 - 20. Января 2011 :: 11:01
Печать  
MaxPiter писал(а) 20. Января 2011 :: 09:14:
Сначало я так и написал, но когда дошел до temp1.ToArray(); то тут все померло.

ну я же говорю
Цитата:
.ToArray() выполнить через OleExSup.
  

1&&2&&3
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #33 - 20. Января 2011 :: 12:04
Печать  
trad писал(а) 20. Января 2011 :: 11:01:
MaxPiter писал(а) 20. Января 2011 :: 09:14:
Сначало я так и написал, но когда дошел до temp1.ToArray(); то тут все померло.

ну я же говорю
Цитата:
.ToArray() выполнить через OleExSup.

Можно пример?

upd;
нашел, попробую так, спасибо
  
Наверх
www  
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #34 - 20. Января 2011 :: 13:01
Печать  
to trad:

можете chm файлик скинуть по OleExSup ? а то 2 уже скачал, а все только структура без описания.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #35 - 20. Января 2011 :: 13:42
Печать  
MaxPiter писал(а) 20. Января 2011 :: 13:01:
to trad:

можете chm файлик скинуть по OleExSup ? а то 2 уже скачал, а все только структура без описания.

Открой свойства скачанного файла.
Есть кнопка Разблокировать? Нажми ее.

У меня, как оказалось, та же проблема была с твоим bsdk
  

1&&2&&3
Наверх
 
IP записан
 
MaxPiter
Full Member
***
Отсутствует


I Love 1C++

Сообщений: 187
Местоположение: Санкт-Петербург
Зарегистрирован: 20. Ноября 2008
Пол: Мужской
Re: Вопросы по jscript, двоичным данным и 1С 7.7
Ответ #36 - 20. Января 2011 :: 13:45
Печать  
trad писал(а) 20. Января 2011 :: 13:42:
MaxPiter писал(а) 20. Января 2011 :: 13:01:
to trad:

можете chm файлик скинуть по OleExSup ? а то 2 уже скачал, а все только структура без описания.

Открой свойства скачанного файла.
Есть кнопка Разблокировать? Нажми ее.

У меня, как оказалось, та же проблема была с твоим bsdk


точно. заработало Улыбка
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать