Использование графического планшета для подписи в 1С

Публикация № 554962

Программирование - Практика программирования

Графический планшет цифровая подпись.

51
Есть у нас рабочие места, в которых происходит выдача денег/товаров и т.п. в которых человек расписывается о получении материальных ценностей. После этого печатная форма печатается, отдается на подпись, сканируется, прикрепляется в 1С, затем уничтожается в шредере. Возникла идея отказаться от 3 действий (печать + сканирование + уничтожение в шредере) и воспользоваться графическим планшетом с функцией захвата подписи.

На удивление все оказалось очень удобно с точки зрения работы в 1С. Пользователь нажимает одну кнопку и получает готовый результат, подписанное изображение, привязанное к документу в 1С.

Конкретная реализация зависит от вашего оборудования и программного обеспечения.

В нашем случае схема работы такая:

Устанавливаем на компьютер PDF принтер, в нашем случае был PDF24 Creator.

Готовим печатную форму документа с прямой печатью на PDF принтер

//Сначала удалим старые PDF

УдалитьФайлы("C:\PDF\", "*.pdf");

ТабДокумент.ИмяПринтера = "PDF24 PDF";

НаПринтер = Истина;

В настройках PDF принтера указываем, что при печати необходимо автоматически сохранять в папку, например, C:\PDF

Затем сразу после кода, который отвечает за печать, вставляем код, который запустит утилиту захвата подписи (в нашем случае батник)

СтрокаКоманды = "C:\PDF\ElPod.bat";

ЗапуститьПриложение(СтрокаКоманды,,Истина,);

Текст батника для примера: "C:\Program Files (x86)\Wacom sign pro PDF\jre7\bin\javaw.exe" -client -Djava.library.path="C:\Program Files (x86)\Common Files\Florentis;C:\Program Files (x86)\Wacom sign pro PDF\SignPro_lib" -Dfile.encoding=UTF-8 -jar "C:\Program Files (x86)\Wacom sign pro PDF\signpro.jar" c:\PDF\RKO.pdf

Сотрудник расписывается на планшете. Графический планшет берет PDF, добавляет в нее подпись и сохраняет PDF.

После закрытия утилиты графического планшета управление вернется к 1С (третий параметр ДождатьсяЗавершения = Истина ).

И мы сразу, незаметно для пользователя, прикрепляем PDF к документу 1С.         

НовыйФайл = Новый ДвоичныеДанные("C:\PDF\RKO.PDF");

НовыйХЗ = Новый ХранилищеЗначения(НовыйФайл);

НоваяКартинка = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();

НоваяКартинка.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Файл;

НоваяКартинка.ИмяФайла = "Ведомость.pdf";

НоваяКартинка.Наименование = "Ведомость";

НоваяКартинка.Объект = Ссылка;

НоваяКартинка.Хранилище = НовыйХЗ;

НоваяКартинка.Записать();

Для пользователя 1С все это происходит незаметно, он нажимает печать и после этого видит готовый документ, прикрепленный в 1С.

В итоге вместо 3 шт. используемого оборудования + бумаги и краски мы используем 1 оборудование.

Которое к тому же очень легкое, наши пользователи порой работают с парой «Ноутбук + планшет», которые берут с собой.

В дальнейшем в PDF можно видеть человека, который подписался.

В зависимости от выбора оборудования существуют различные настройки вывода информации на планшет, в нашем случае это редактирование информации о назначении и сумме платежа:

//Отредактируем XML с настройками

ИмяПользователя = СтрЗаменить(ПользователиИнформационнойБазы.НайтиПоИмени(глЗначениеПеременной("глТекущийПользователь")).ПользовательОС, "\\GROUP1\", "");

ТекстовыйДокумент = Новый ТекстовыйДокумент;

ТекстовыйДокумент.Прочитать("c:\Users\" + ИмяПользователя + "\AppData\Roaming\Wacom\signpro\signpro.xml", КодировкаТекста.UTF8);

ТекстXML = ТекстовыйДокумент.ПолучитьТекст();

ТекстовыйДокумент = Новый ТекстовыйДокумент;

ТекстовыйДокумент.УстановитьТекст(ТекстXML);

ТекстовыйДокумент.ЗаменитьСтроку(16, "<entry key=""user_name"">" + ФизическиеЛица[0].ФизическоеЛицо.Наименование + "</entry>");

ТекстовыйДокумент.ЗаменитьСтроку(21, "<entry key=""signing_reason"">" + "Выдача денег в размере " + СуммаДокумента + " " + ВалютаДокумента.Наименование + "</entry>");

ТекстовыйДокумент.Записать("c:\Users\" + ИмяПользователя + "\AppData\Roaming\Wacom\signpro\signpro.xml", КодировкаТекста.UTF8);

Готовая реализация может меняться от вашего оборудования и поставленных задач, но общую концепцию я описал.

51

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kolabaister 2 13.10.16 19:02 Сейчас в теме
Реализация интересная и изобретательная, но имеет ли такая подпись какую то юридическую силу?
lerkin494; leonidol; корум; Serega-artem; madonov; sasha777666; Kott01; +7 Ответить
2. Makushimo 153 14.10.16 07:03 Сейчас в теме
(1) kolabaister,
а уничтоженный в шредере подписанный документ?
он имеет юридическую силу?
корум; madonov; +2 Ответить
9. kolabaister 2 14.10.16 13:37 Сейчас в теме
(2) Makushimo, ни малейшей. И скан тоже, без хранящегося где то оригинала, ничего не стоит. Да, как ответил (3) видимо, только для усиления чувства ответственности сотрудников сделано)
3. Red_Devil 159 14.10.16 08:34 Сейчас в теме
(0) В нашем случае ответ в (1) тут чисто формальность, "для галочки" что бы решать споры с сотрудниками) Но электронный ключ можно оформить через юр отдел, он будет иметь юридическую силу. Правда сертификат будет оформлен на компанию а не на сотрудника, но в подписи зашито ФИО сотрудника, на последнем скрине видно.
4. Ober2010 14.10.16 10:40 Сейчас в теме
Интересное решение..

Я пошел другим путем, когда делал нечто подобное, использовал Wacom-Signature-SDK (2 com объекта из SDK: Florentis.SigCtl и Florentis.DynamicCapture) , формировал обычный табличный документ, его подписывал и сохранял в pdf, pdf прикреплял к документу РКО. SDK позволяет вернуть картинку подписи в формате Base 64, а дальше дело техники.

Сокращенно как то так :

 

	DC.Capture(SigCtl,Фио,"Распишитесь: ", null, null); // окно захвата подписи
        
        SigObj = SigCtl.Signature;
        СтрокаBAse64 = SigObj.RenderBitmap("", dimensionX,dimensionY,"image/png", ТолщинаПераММ , 16711680, 16777215, -1, -1, 524288+8192+65536+1048576) ;  

	 ДвоичныеДанные = Base64Значение(СтрокаBAse64);
        
         Новый Картинка(ДвоичныеДанные,Истина);


Показать


с батником не додумался ( видать документацию плохо курил)

P.S. Оборудование Wacom STU 430 .

sanymust; корум; Muhin555; Red_Devil; +4 Ответить
5. Red_Devil 159 14.10.16 11:41 Сейчас в теме
(4) у нас Wacom STU 530 думаю разница не велика
6. Ober2010 14.10.16 11:56 Сейчас в теме
(5) у них даже инструкция одна на 430 и 530
20. 1cvoverdzhils 17.07.18 16:35 Сейчас в теме
(4) Расскажите пожалуйста по подробнее, как вы делали.
Спасибо.
26. swimdog 623 10.01.19 15:22 Сейчас в теме
(4) Более детальное описание. По заявкам сделаю отдельную публикацию, но основное написано выше.


&НаКлиенте
Процедура ПолучитьПодпись(Команда)
	
	dynCapt  = Новый COMОбъект("Florentis.DynamicCapture");
	
	SigCtl = Новый COMОбъект("Florentis.SigCtl");
	SigCtl.Licence = "eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJMTVMiLCJleHAiOjE1NTQ4ODg2ODAsImlhdCI6MTU0NzExMjY4­MCwicmlnaHRzIjpbIkNETF9BQ0NFU1MiLCJDRExfTElWRV9TVFJFQU1JTkci­LCJDRExfVEhJUkRQQVJUWV9QRU5TIiwiQ0RMX1BIVV8xMTEiLCJTSUdfU0RL­X0NPUkUiLCJTSUdDQVBUWF9BQ0NFU1MiLCJTSUdfU0RLX0lTTyIsIlNJR19T­REtfRU5DUllQVElPTiJdLCJkZXZpY2VzIjpbIldBQ09NX0FOWSIsIlJUUyIs­IkFQUExFX1BFTkNJTCJdLCJ0eXBlIjoiZXZhbCIsImxpY19uYW1lIjoiV0lM­TF9TaWduYXR1cmVfRWRpdGlvbiIsIndhY29tX2lkIjoiYzBmYjNiYjRhMmVh­NDA1MWIzMTU2MGI4YjkyZDg2ZGUiLCJsaWNfdWlkIjoiNWI1ZDRiYTYtNGE4­Zi00MGM3LWJjMzYtMzhlNGIxMjk1NzNiIiwiYXBwc193aW5kb3dzIjpbXSwi­YXBwc19pb3MiOltdLCJhcHBzX2FuZHJvaWQiOltdLCJtYWNoaW5lX2lkcyI6­W119.Kg9mXWh74Yvxw5gXAJ3-c6yplX-W5Y1jdjPsJPNV8IRri0cpnoEuYRXbgxGcQKRkHYgJQ1yoqTzwDHA9e7mazVa­LRJsCSHvoLmHk5h61cgZRif9yalwVM1zvtQexZvANbhC7XqWqXGP38-g_W8Az-ei2MHPZ0UxDfyifyupHzOI_FVVlPL2Xg7fKx48ASGHFYRNbKsFBOE7PjGq9I­DG_0rHD7i8T8eKFa6xZ09jYH3PSFnD4qB-4dBf4m3Pos3YiWMfosNHR4Rwcx6t2Q7iNp-KOYv7lqZd08K8dO9xR8AA-4ASUMNR7Bn4u5UJWROLZn_zwcpNlGMFGq-awTRhJtQ";
	
	//CaptureResult    Capture(Who, Why, What, Key)
	//Parameters:
	//Who String specifying the signatory name. 
	//	Optional if InputWho property is set
	//Why String specifying the reason for signing. 
	//	Optional if InputWhy property is set
	//What Hash object 
	//	Derived from the data set with which the captured signature is 
	//	to be bound. Typically the data set will be the contents of the 
	//	document or form signed by the user. 
	//	SigCtlXHTML: The hash is generated automatically from the 
	//	contents of the XHTML document and cannot be supplied here. 
	//	(Optional)
	//Key Key object supplied in order to detect malicious or accidental 
	//	tampering with the signature object or the signature data it 
	//	contains. 
	//	SigCtlXHTML: Key type SHA256 is supplied automatically but 
	//	an alternative can be specified. 
	//	(Optional)
	
	ФИО = "Иванов Иван Иванович";
	ПричинаПодписи = "Распишитесь: ";
	КодВозврата = dynCapt.Capture(SigCtl, ФИО, ПричинаПодписи); //, null, null); // окно захвата подписи
	
	//Return Value:CaptureResult 
	//	CaptureOK Signature captured successfully.
	//	CaptureCancel Signature not captured because user cancelled Signature 
	//		Capture Window.
	//	CapturePadError No capture service available; typically, no functioning digitizing 
	//		tablet or other device for capturing signatures found.
	//	CaptureNotLicensed The component has not been licensed to perform capture. This 
	//		may be because a suitable licence has not been set or because 
	//		a condition of the licence has not been met, for example 
	//		required hardware, such as a particular tablet type, was not 
	//		found.
	//	CaptureError System error or some other unusual error condition.
	//	CaptureAbort Signature not captured because the handler for the PreCapture 
	//			event returned False. With SigCtlXHTML, this can indicate a 
	//			failure to parse document contents
	
	CaptureOK = 0;
	CaptureCancel = 1;
	CapturePadError = 100;
	CaptureError = 101;
	CaptureNotLicensed = 103;
	CaptureAbort = 200;
	
	Если КодВозврата = CaptureOK Тогда
		
		//Parameters:
		//outputFilename Pathname of the file in which to save the image. 
		//	May be null or empty if output type specified by flags is not 
		//	RenderOutputFilename.
		//dimensionX 
		//dimensionY
		//	Dimensions specified as DPI (dots per inch) or Pixels.
		//	Negative value = DPI (the signature is not scaled)
		//	Positive value = Pixels (the signature is scaled to fit the area)
		//mimeType Specifies the image format as one of:
		//	image/bmp
		//	image/tiff
		//	image/png
		//inkWidth Specifies the signature ink width in mm
		//inkColor 
		//inkBackground
		//	Signature ink and background colours in OLE_COLOR format
		//paddingX 
		//paddingY
		//	Padding around the signature image, added to both the left and 
		//	right for paddingX, and both the top and bottom for paddingY. 
		//	Dimensions are specified as mm or Pixels.
		//	Negative value = mm
		//	Positive value = Pixels
		//Flags A combination of RBFlags values.
		//	RenderOutputBase64 0x002000 Return bitmap as a base-64 encoded string
		//	RenderOutputBinary 0x000800 Return bitmap as binary data
		//	RenderOutputFilename 0x001000 Write bitmap to file
		//	RenderOutputPicture 0x200000 Return bitmap as Picture object
		//	RenderBackground Transparent 0x010000 Render image with a transparent background
		//	RenderColor1BPP 0x020000 Render using 1 bit-per-pixel (monochrome)
		//	RenderColor24BPP 0x040000 Render colour image with 24 bits-perpixel
		//	RenderColor32BPP 0x080000 Render colour image with 32 bits-perpixel
		//	RenderColorAntiAlias 0x100000 Render colour image with antialiasing
		//	RenderEncodeData 0x400000 Encode signature data within image
		//	RenderWatermark 0x800000 Encode watermark within image
		//	RenderClipped 0x1000000 Crop signature image, omitting any parts which were outside of the original capture window.
		//	RenderRelative 0x2000000 Renders the signature image relative to the origin of the original capture window
		
		dimensionX = 320;
		dimensionY = 200;
		ТолщинаПераММ = 0.5;
		inkColor = 16711680; //0xff0000
		inkBackground = 16777215; //0xffffff
		paddingX = -1;
		paddingY = -1;
		
		RenderOutputBase64		= 8192;		// 0x002000 Return bitmap as a base-64 encoded string
		RenderColor32BPP		= 524288;	// 0x080000 Render colour image with 32 bits-perpixel
		RenderBackground		= 65536;	// 0x010000 Render image with a transparent background
		RenderColorAntiAlias	= 1048576;	// 0x100000 Render colour image with antialiasing
		RenderEncodeData		= 4194304;	// 0x400000 Encode signature data within image
		Flags = RenderOutputBase64 + RenderColor32BPP + RenderEncodeData; // 0x2000 + 0x80000 + 0x400000; //SigObj.outputBase64 | SigObj.color32BPP | SigObj.encodeData
		//Flags = RenderOutputBase64 + RenderColor32BPP + RenderBackground + RenderColorAntiAlias;
		
		SigObj = SigCtl.Signature;
		СтрокаBase64 = SigObj.RenderBitmap("", dimensionX, dimensionY, "image/png", ТолщинаПераММ , inkColor, inkBackground, paddingX, paddingY, Flags);  
		
		ДвоичныеДанные = Base64Значение(СтрокаBase64);
		
		Объект.Подпись = Новый Картинка(ДвоичныеДанные, Истина);
		//Объект.Подпись.Записать("d:\Sign.png");
		
		АдресКартинки = ПоместитьВоВременноеХранилище(Объект.Подпись);
		
	ИначеЕсли КодВозврата = CaptureCancel Тогда
		
		Сообщить("Клиент отказался от подписи");
		
	ИначеЕсли КодВозврата = CaptureNotLicensed Тогда
		
		Сообщить("Лицензия не обнаружена или просрочена");
		
	ИначеЕсли КодВозврата = CapturePadError Тогда
		
		Сообщить("Служба получения подписи недоступна");
		
	ИначеЕсли КодВозврата = CaptureError Тогда
		
		Сообщить("Ошибка планшета");
		
	ИначеЕсли КодВозврата = CaptureAbort Тогда
		
		Сообщить("Ошибка - невозможно проанализировать содержимое документа");
		
	Иначе
		
		Сообщить("Ошибка получения подписи");
		
	КонецЕсли;
	
КонецПроцедуры

Показать
7. Diego_Iv 30 14.10.16 12:10 Сейчас в теме
Прикольная и нужная штука.
Только в типовой конфигурации любой пользователь может как наприкреплять "своих подписей", так и поудалять или исправить "чужие".
В результате не получится так : "Я ничего не знаю, я этого не подписывал..." ?
8. Red_Devil 159 14.10.16 13:06 Сейчас в теме
(7) как настроишь планшет. Он может блокировать PDF от изменения. И как настроишь 1С, по умолчанию это всего лишь прикрепленный файл, дальше как хочешь блокируй.
10. perevalsky 19.10.16 07:37 Сейчас в теме
Очень интересное применение. У нас есть готовый продукт для аутентификации по подписи на планшете и мобильных устройствах http://www.signtologin.com/. Предлагаю интегрироваться с вашим решением. Можем предоставить API - функции.
11. Dragonim 92 19.10.16 08:46 Сейчас в теме
Такая идея с подписями хороша для тёмных сотрудников, которые ни чего про юридическую значимость и возможность электронной подделки не слышали и слышать не хотят. Немного поинтересовавшись можно узнать, юридическая силы такая подпись не имеет, подделывается проще чем реальная подпись.

Вся эта идея с подписями на электронных устройствах обычная профанация и попытка показаться защищёнными и значимыми в доме из трёх стен.
12. monkbest 102 19.10.16 10:16 Сейчас в теме
(11) Dragonim, почему не имеет? Смотря как хранить и обрабатывать подписанный документ, можно навернуть криптографию и все будет очень даже
главное, чтобы не было технической возможности отделить подпись от документа и приляпать его к другому документу
13. ne_en 50 20.10.16 14:07 Сейчас в теме
(12) monkbest, Так в том то и дело, что что бы там не навернули, юридической силы это иметь не будет все равно. В суде всегда можно заявить, что у вас есть техническая возможность обойти эти механизмы, т.к. программист может включать и выключать что угодно, и пере создавать сколько угодно документов с прикреплёнными подписями не зависимо от того, что человек документов этих в глаза никогда не видел. Принятие таких подписей в суде будет возможно только в том случае, если программа будет "сертифицирована" в отношении того, что не возможна подделка в программе подписи никем, а так же установлена надёжная блокировка от внесения изменений в программу и применения внешних программ. А до тех пор, только хранящаяся бумажная копия или свидетели (причём не все свидетели одинаково полезны) постановки этой подписи могут сделать такую подпись легитимной.
awk; dddxddd; +2 Ответить
14. sviat02 16.12.16 13:45 Сейчас в теме
Я так понимаю что это только для графических планшетов у которых есть какое то апи (SDK) типа Wacom STU 430-530, или я ошибаюсь?
15. Red_Devil 159 16.12.16 15:31 Сейчас в теме
(14) да я делал на вакоме, как остальные работают не знаю.
16. sviat02 24.01.17 13:51 Сейчас в теме
Автору респект. Реализовал у себя такое решение на УФ, встретился с такой проблемой что сам планшет пробросить в терминал сервер невозможно только через "USB over network" из-за этого есть некие тормоза при захвате именно планшетом для подписи.
Так же при открытии pdf файла в sihg pro pdf пользователю требуется нажать кнопки "добавить подписи" рис. 1 , потом подтвердить подпись рис. 2, ну а потом сам захват подписи. Подскажите есть ли возможность обойти эти промежуточные действие?
Прикрепленные файлы:
17. sanymust 11 16.02.17 04:15 Сейчас в теме
Ребят, встала похожая задача, имеется планшет Wacom stu-430, хочу интегрировать в 1С, но я так понял что ПО нужно просить у wacom, либо зарегистрировать продукт, чего сделать для России я не смог плюс я не покупал через сайт, а они просят номер счета указать. Запросил SDK у них, прислали письмо с доп. вопросами что принять решение о предоставлении ПО. Все как-то слишком заморочено я считаю, почему просто нельзя взять и скачать SDK пакет... Кто как заполучил ПО, может я не в ту степь ушел уже?
18. Red_Devil 159 16.02.17 09:08 Сейчас в теме
(17) Я не скачивал SDK. На сайте Ваком, в открытом доступе есть утилита для работы с планшетом, без всяких регистраций http://gsdt.wacom.eu/download/SignPro-PDF-download-V2.xml
19. sanymust 11 17.02.17 01:04 Сейчас в теме
(18)Спасибо! Я просто хотел использовать подпись без стороннего софта, напрямую через компоненту получать изображение и внедрять в 1С, поэтому интересно поковырять SDK. ) А на счет Sign Pro, у меня нет кода активации, который идет при покупке. Писал в тех. поддержку сказали нет кода - нет программы, запрашивайте SDK. Чем я и занялся...
21. RastaL 02.08.18 14:40 Сейчас в теме
Привет, мучаюсь с той же проблемой, не могу скачать stu sdk, Вы добились каких нибудь результатов от wacom?
22. vlad1976 08.10.18 18:34 Сейчас в теме
Так что там с SDK? Где скачать? а то я дурак планшет купил. Некого кода в коробке нет. а Начальство просит что то похожее сделать.
23. Ober2010 10.10.18 17:48 Сейчас в теме
Пришлю поздней. Занят поиском работы.
24. vlad1976 23.10.18 18:04 Сейчас в теме
25. swimdog 623 07.12.18 14:20 Сейчас в теме
(24) Нашли SDK? Я позвонил в wacom еще до покупки, мне прислали ссылки на скачивание SDK и драйверов. Без всяких вопросах.
27. swimdog 623 10.01.19 15:28 Сейчас в теме
(24) Еще уточню свой же ответ. После регистрации в разделе developer сайта wacom.com можно скачивать любые SDK и программы к планшетам. Там же можно сформировать временные лицензии для SDK.
28. user1194632 03.04.19 12:14 Сейчас в теме
Я расписывается на XP-Pen Star G430S Digital Drawing Tablet . Графический планшет берет PDF, добавляет в нее подпись и сохраняет PDF
Оставьте свое сообщение