Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Вопросы по jscript, двоичным данным и 1С 7.7 (число прочтений - 17390 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать