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