Цифровая подпись. Документооборот КОРП 2.1

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

Управление - Документооборот и делопроизводство

документооборот подпись утверждение

Вставка виртуальной цифровой подписи (грифа утверждения) в автозаполняемые шаблоны word для Документооборот КОРП 2.1. Генерация картинки подписи происходит на сервере с помощью утилиты ImageMagick. Поддерживаемые форматы doc. Заполнение происходит на стороне клиента. Формат docx не поддерживается, т.к. он заполняется на сервере! При желании можно дописать.

При внедрении 1С: ДО КОРП 2.1 у одного из заказчиков было принято решение внедрить механизм виртуальной ЭП (электронной подписи) для визуализации наличия подписи (грифа утверждения) в документах.

Работает на релизе 1С: ДО КОРП 2.1.19.22.

1. В шаблон документа doc необходимо вставить тэг "ВставитьФаксимиле".

2. В архиве ECP_Emul.rar макет цифровой подписи в формате png и psd (Adobe Photoshop CC 2019) + файл конфигурации с изменениями.

3. Добавить два общих макета "ШаблонОтметкиПодписано", "ШаблонОтметкиУтверждено".

4. Добавить глобальные модули "ОбщийБизнес" и "ОбщийБизнесКлиент".

5. Добавить в справочник "Файлы" новый реквизит "ПодписанФаксимиле" (тип булево).

6. Доработать глобальные модули "РаботаСКартинками", "РаботаСФайламиКлиент", "РаботаСФайламиВызовСервера". В коде поиск по комментарию "виртуальная цифровая подпись".

 

В модуль "РаботаСКартинками" добавить функцию:

//виртуальная цифровая подпись
Функция СформироватьЭмуляторПодписи(ОписаниеЭП, МакетСертификат, Формат = "PNG") Экспорт
	
	ФайлыКУдалению = Новый Массив;
	
	ПутьФайлаШаблона = ПолучитьИмяВременногоФайла(Формат);
	МакетСертификат.Записать(ПутьФайлаШаблона);
	ФайлыКУдалению.Добавить(ПутьФайлаШаблона);
	
	ПараметрыDraw = Новый Массив;
	
	ПараметрыDraw.Добавить(
		СтрШаблон(
			"text %1, %2 '%3'",
			205,
			105,
			ОписаниеЭП.Фамилия));
			
	ПараметрыDraw.Добавить(
		СтрШаблон(
			"text %1, %2 '%3'",
			10,
			140,
			ОписаниеЭП.Имя + " " + ОписаниеЭП.Отчество));
			
	ПараметрыDraw.Добавить(
		СтрШаблон(
			"text %1, %2 '%3'",
			90,
			227,
			Формат(ОписаниеЭП.ДатаПодписи, "ДЛФ=DT")));				
			
	ПараметрыСоздания = Новый Массив;
	
	ПараметрыСоздания.Добавить(
		СтрШаблон("convert %1", ПутьФайлаШаблона));		
			
	ПараметрыСоздания.Добавить(
		СтрШаблон(" -fill ""#536AC2"" -pointsize 32 -draw ""%1""", 
			СтрСоединить(ПараметрыDraw, " ")));
			
	ПараметрыDraw = Новый Массив;	
	ПараметрыDraw.Добавить(
		СтрШаблон(
			"text %1, %2 '%3'",
			80,
			185,
			ОписаниеЭП.Хэш));	
			
	ПараметрыСоздания.Добавить(
		СтрШаблон(" -fill ""#536AC2"" -pointsize 22 -draw ""%1""", 
			СтрСоединить(ПараметрыDraw, " ")));		
	
	ПараметрыСоздания.Добавить("-resize 35%");
		
	ПутьНовогоФайла = ПолучитьИмяВременногоФайла("PNG");
	
	ПараметрыСоздания.Добавить(ПутьНовогоФайла);
	
	ПараметрыImageMagick = СтрСоединить(ПараметрыСоздания, " ");
	
	ЗапуститьImageMagick(ПараметрыImageMagick, ФайлыКУдалению);
	
	Возврат Новый ДвоичныеДанные(ПутьНовогоФайла);
	
КонецФункции
//виртуальная цифровая подпись

В Модуле "РаботаСФайламиКлиент" изменить код процедур и функций:

// Сохранение файлов 
// 
// Параметры
//  ДанныеСохраняемыхФайлов  - структура, со список значений с данными файлов и общей информацией о файлах
//  УникальныйИдентификатор - уникальный идентификатор формы
//  ТипПапки - пользовательская настройка, в которую будет сохранена папка
//  СохранитьБезДиалогаПользователя - не спрашивать у пользователя путь сохранения файла.
//                                    Путь будет взят из ДанныеСохраняемыхФайлов.ПутьВыбора.
//  НеСпрашиватьВариантСохранения - автоматически сохранять файл с именем типа 
//                                  "Имя файла(1).Расширение файла" в случае совпадения имен.
//                                  В противном случае будет выдан диалог пользователя для 
//                                  выбора варианта сохранения.
Функция СохранитьФайлы(
	ОписаниеОповещения,
	ДанныеСохраняемыхФайлов, 
	УникальныйИдентификатор, 
	ТипПапки = "ПапкаДляСохраненияФайлов", 
	СохранитьБезДиалогаПользователя = Ложь, 
	НеСпрашиватьВариантСохранения = Ложь) Экспорт
	
	#Если ВебКлиент Тогда
		ПоказатьПредупреждение(, НСтр("ru = 'В Веб-клиенте сохранение файлов не поддерживается.'"));
		Возврат "";
	#КонецЕсли
	
	ПутьВыбора = ДанныеСохраняемыхФайлов.ПутьВыбора;
	
	Если Не СохранитьБезДиалогаПользователя Тогда
		
		ВыборКаталога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
		ВыборКаталога.Каталог = ПутьВыбора;
		
		Если ВыборКаталога.Выбрать() Тогда
			
			ПутьВыбораПрежний = ПутьВыбора;
			ПутьВыбора = ВыборКаталога.Каталог;
			ПутьВыбора = ФайловыеФункцииКлиент.НормализоватьКаталог(ПутьВыбора);
			
			ПутьВыбора = ФайловыеФункцииКлиент.НормализоватьКаталог(ПутьВыбора);
			Если ПутьВыбораПрежний <> ПутьВыбора Тогда
				ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", ТипПапки, ПутьВыбора);
			КонецЕсли;
			
		Иначе
			
			ВыполнитьОбработкуОповещения(ОписаниеОповещения, Ложь);
			Возврат "";
			
		КонецЕсли;
		
	КонецЕсли;
	
	Номер = 0;
	Для Каждого СписокСтрока Из ДанныеСохраняемыхФайлов.СписокДанныхФайлов Цикл
		
		ДанныеФайла = СписокСтрока.Значение;
		
		Если ДанныеФайла.ТребуетсяСоздатьВизуализациюЭП
			И ДанныеФайла.ВизуализацияЭПДобавлена = Ложь Тогда 
			
			#Если Не ВебКлиент И Не МобильныйКлиент Тогда
				// для doc файла заполним на клиенте - если не веб клиент
				СоздатьВизуализациюЭПВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
			#КонецЕсли	
			
		КонецЕсли;
		
		//виртуальная цифровая подпись
		Если ДанныеФайла.ТребуетсяСоздатьВизуализациюФаксимиле
			И ДанныеФайла.ВизуализацияФаксимилеДобавлена = Ложь Тогда 
		
			#Если Не ВебКлиент И Не МобильныйКлиент Тогда
				// для doc файла заполним на клиенте - если не веб клиент
				ОбщийБизнесКлиент.СоздатьВизуализациюФаксимилеВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
			#КонецЕсли	
		
		КонецЕсли;
		//виртуальная цифровая подпись
		
		ДанныеСохраняемыхФайлов.СписокДанныхФайлов[Номер].Значение = ДанныеФайла;
		Номер = Номер + 1;
	
	КонецЦикла;	
	
	КоличествоФайлов = ДанныеСохраняемыхФайлов.КоличествоФайлов;
	ОбщийРазмерВМб = ДанныеСохраняемыхФайлов.ОбщийРазмер / (1024 * 1024);
	
	#Если Не ВебКлиент Тогда
		ТекстПояснения =
			СтрШаблон(
				НСтр("ru = 'Выполняется сохранение %1 файлов (%2 Мб)...
					|Пожалуйста, подождите.'"),
				КоличествоФайлов, 
				ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(ОбщийРазмерВМб));	
		Состояние(ТекстПояснения);
	#КонецЕсли
	
	ПутьВыбора = ФайловыеФункцииКлиент.НормализоватьКаталог(ПутьВыбора);
	
	ПараметрыВыполнения = Новый Структура;
	ПараметрыВыполнения.Вставить("НомерФайла", 0);
	ПараметрыВыполнения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	ПараметрыВыполнения.Вставить("ОписаниеОповещения", ОписаниеОповещения);
	ПараметрыВыполнения.Вставить("ДанныеСохраняемыхФайлов", ДанныеСохраняемыхФайлов);
	ПараметрыВыполнения.Вставить("ТипПапки", ТипПапки);
	ПараметрыВыполнения.Вставить("СохранитьБезДиалогаПользователя", СохранитьБезДиалогаПользователя);
	ПараметрыВыполнения.Вставить("НеСпрашиватьВариантСохранения", НеСпрашиватьВариантСохранения);
	ПараметрыВыполнения.Вставить("ПутьВыбора", ПутьВыбора);
	
	Обработчик = Новый ОписаниеОповещения("СохранитьФайлыМассивФайловТонкийКлиент", ЭтотОбъект, ПараметрыВыполнения);
	ВыполнитьОбработкуОповещения(Обработчик);
	Возврат "";
	
КонецФункции

// Процедура печати Файла
//
// Параметры
//  ДанныеФайлов  - массив структур с данными файла
//  УникальныйИдентификатор - уникальный идентификатор формы
//
Процедура НапечататьФайлы(ДанныеФайлов, УникальныйИдентификатор = Неопределено) Экспорт
	
	Оповестить("ОбновитьСписокПоследних");
	
	Номер = 0;
	Для Каждого ДанныеФайла Из ДанныеФайлов Цикл
		
		Если ДанныеФайла.ТребуетсяСоздатьВизуализациюЭП
			И ДанныеФайла.ВизуализацияЭПДобавлена = Ложь Тогда 
			
			#Если Не ВебКлиент И Не МобильныйКлиент Тогда
				// для doc файла заполним на клиенте - если не веб клиент
				СоздатьВизуализациюЭПВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
			#КонецЕсли	
			
		КонецЕсли;
		
		//виртуальная цифровая подпись
		Если ДанныеФайла.ТребуетсяСоздатьВизуализациюФаксимиле
			И ДанныеФайла.ВизуализацияФаксимилеДобавлена = Ложь Тогда 
		
			#Если Не ВебКлиент И Не МобильныйКлиент Тогда
				// для doc файла заполним на клиенте - если не веб клиент
				ОбщийБизнесКлиент.СоздатьВизуализациюФаксимилеВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
			#КонецЕсли	
		
		КонецЕсли;
		//виртуальная цифровая подпись
		
		ДанныеФайлов[Номер] = ДанныеФайла;
		Номер = Номер + 1;
	
	КонецЦикла;	
	
	ПараметрыВыполнения = Новый Структура;
	ПараметрыВыполнения.Вставить("НомерФайла", 0);
	ПараметрыВыполнения.Вставить("ДанныеФайлов", ДанныеФайлов);
	ПараметрыВыполнения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	Обработчик = Новый ОписаниеОповещения("НапечататьФайлыВыполнение", ЭтотОбъект, ПараметрыВыполнения);
	ВыполнитьОбработкуОповещения(Обработчик);
	
КонецПроцедуры

// Сохранение на диск Файла
// 
// Параметры:
//   ОбработчикРезультата - ОписаниеОповещения, Неопределено - Описание процедуры, принимающей результат работы метода.
//   ДанныеФайла  - структура с данными файла.
//   УникальныйИдентификатор - уникальный идентификатор формы.
//
// Возвращаемое значение:
//   Строка - выбранный полный путь файла.
//
Процедура СохранитьКак(ОбработчикРезультата, ДанныеФайла, УникальныйИдентификатор) Экспорт
	
	Если ДанныеФайла.ТребуетсяСоздатьВизуализациюЭП
		И ДанныеФайла.ВизуализацияЭПДобавлена = Ложь Тогда 
		
		#Если Не ВебКлиент И Не МобильныйКлиент Тогда
			// для doc файла заполним на клиенте - если не веб клиент
			СоздатьВизуализациюЭПВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
		#КонецЕсли	
		
	КонецЕсли;
	
	//виртуальная цифровая подпись
	Если ДанныеФайла.ТребуетсяСоздатьВизуализациюФаксимиле
		И ДанныеФайла.ВизуализацияФаксимилеДобавлена = Ложь Тогда 
		
		#Если Не ВебКлиент И Не МобильныйКлиент Тогда
			// для doc файла заполним на клиенте - если не веб клиент
			ОбщийБизнесКлиент.СоздатьВизуализациюФаксимилеВФайлеDoc(ДанныеФайла, УникальныйИдентификатор);
		#КонецЕсли	
		
	КонецЕсли;
	//виртуальная цифровая подпись
	
	ПараметрыВыполнения = Новый Структура;
	ПараметрыВыполнения.Вставить("ОбработчикРезультата", ОбработчикРезультата);
	ПараметрыВыполнения.Вставить("ДанныеФайла", ДанныеФайла);
	ПараметрыВыполнения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
	
	Если ФайловыеФункцииСлужебныйКлиент.РасширениеРаботыСФайламиПодключено() Тогда
		СохранитьКакСРасширением(ПараметрыВыполнения);
	Иначе
		СохранитьКакБезРасширения(ПараметрыВыполнения);
	КонецЕсли;
	
КонецПроцедуры

// Открыть файл для просмотра из карточки документа
Процедура ОткрытьФайлДокумента(Файл, Форма) Экспорт 
	
	Если Не ЗначениеЗаполнено(Файл) Тогда 
		Возврат;
	КонецЕсли;
	
	Если Форма.Модифицированность И
		Форма.Параметры.Свойство("Ключ") И
		ЗначениеЗаполнено(Форма.Параметры.Ключ) Тогда
		Если НЕ Форма.Записать() Тогда
			Возврат;
		КонецЕсли;
	КонецЕсли;
	
	Попытка 
		ПредыдущийАдресФайла = Форма.ПредыдущийАдресФайла;
	Исключение
		ПредыдущийАдресФайла = Неопределено;
	КонецПопытки;
	
	ДанныеФайла = РаботаСФайламиВызовСервера.ДанныеФайлаДляОткрытия(
		Файл, 
		Неопределено, 
		Форма.УникальныйИдентификатор, 
		Неопределено, 
		ПредыдущийАдресФайла);
		
	Если ДанныеФайла.ТребуетсяСоздатьВизуализациюЭП
		И ДанныеФайла.ВизуализацияЭПДобавлена = Ложь Тогда 
		
		#Если Не ВебКлиент И Не МобильныйКлиент Тогда
			// для doc файла заполним на клиенте - если не веб клиент
			СоздатьВизуализациюЭПВФайлеDoc(ДанныеФайла, Форма.УникальныйИдентификатор);
		#КонецЕсли	
		
	КонецЕсли;
	
	//виртуальная цифровая подпись
	Если ДанныеФайла.ТребуетсяСоздатьВизуализациюФаксимиле
		И ДанныеФайла.ВизуализацияФаксимилеДобавлена = Ложь Тогда 
		
		#Если Не ВебКлиент И Не МобильныйКлиент Тогда
			// для doc файла заполним на клиенте - если не веб клиент
			ОбщийБизнесКлиент.СоздатьВизуализациюФаксимилеВФайлеDoc(ДанныеФайла, Форма.УникальныйИдентификатор);
		#КонецЕсли	
		
	КонецЕсли;
	//виртуальная цифровая подпись
	
	КомандыРаботыСФайламиКлиент.Открыть(ДанныеФайла);
	
КонецПроцедуры

В модуле "РаботаСФайламиВызовСервера" изменить код процедур и функций:

// Функция возвращает структуру, содержащую различные сведения о Файле и версии
// Параметры
//  ФайлСсылка  - СправочникСсылка.Файлы - файл
//  ВерсияСсылка  - СправочникСсылка.ВерсииФайлов - версия файла
//  ИдентификаторКлиента - Строка - переданный ИдентификаторКлиента
//
// Возвращаемое значение:
//   Структура - структура с данными файла
Функция ДанныеФайла(ФайлСсылка, ВерсияСсылка = Неопределено, ИдентификаторКлиента = Неопределено) Экспорт
	
	Запрос = Новый Запрос;
	
	Если ВерсияСсылка = Справочники.ВерсииФайлов.ПустаяСсылка() Тогда
		ВерсияСсылка = Неопределено;
	КонецЕсли;
	
	Если ВерсияСсылка = Неопределено Тогда
		
		Запрос.Текст = 
			"ВЫБРАТЬ РАЗРЕШЕННЫЕ
			|	Файлы.Ссылка КАК Ссылка,
			|	Файлы.Код КАК Код,
			|	Файлы.Редактирует КАК Редактирует,
			|	Файлы.ТекущаяВерсия КАК ТекущаяВерсия,
			|	Файлы.ВладелецФайла КАК ВладелецФайла,
			|	Файлы.ХранитьВерсии КАК ХранитьВерсии,
			|	Файлы.ПометкаУдаления КАК ПометкаУдаления,
			|	Файлы.ДатаЗаема КАК ДатаЗаема,
			|	Файлы.Зашифрован КАК Зашифрован,
			|	Файлы.ПодписанЭП КАК ПодписанЭП,
			|	ЕСТЬNULL(ВерсииФайлов.ПолноеНаименование, """") КАК ПолноеНаименование,
			|	ЕСТЬNULL(ВерсииФайлов.Расширение, """") КАК Расширение,
			|	ЕСТЬNULL(ВерсииФайлов.Размер, 0) КАК Размер,
			|	ЕСТЬNULL(ВерсииФайлов.НомерВерсии, 0) КАК НомерВерсии,
			|	ЕСТЬNULL(ВерсииФайлов.ПутьКФайлу, """") КАК ПутьКФайлу,
			|	ЕСТЬNULL(ВерсииФайлов.Том, ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)) КАК Том,
			|	ЕСТЬNULL(ВерсииФайлов.ДатаМодификацииУниверсальная, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаМодификацииУниверсальная,
			|	ЕСТЬNULL(ВерсииФайлов.Автор, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) КАК Автор,
			|	ЕСТЬNULL(ВерсииФайлов.СтатусИзвлеченияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) КАК СтатусИзвлеченияТекста,
			|	ЕСТЬNULL(ВерсииФайлов.СтатусРаспознаванияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыРаспознаванияТекста.ПустаяСсылка)) КАК СтатусРаспознаванияТекста,
			|	ЕСТЬNULL(ВерсииФайлов.ТипХраненияФайла, ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) КАК ТипХраненияФайла
			|ИЗ
			|	Справочник.Файлы КАК Файлы
			|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов
			|		ПО Файлы.ТекущаяВерсия = ВерсииФайлов.Ссылка";
		
		Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда 
			Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка В (&Файл) ";
		Иначе
			Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка = &Файл ";
		КонецЕсли;
		
		Запрос.Параметры.Вставить("Файл", ФайлСсылка);
		
	Иначе
		
		Если ФайлСсылка <> Неопределено Тогда 
			Запрос.Текст = 
				"ВЫБРАТЬ РАЗРЕШЕННЫЕ
				|	Файлы.Ссылка КАК Ссылка,
				|	Файлы.Код КАК Код,
				|	Файлы.Редактирует КАК Редактирует,
				|	Файлы.ТекущаяВерсия КАК ТекущаяВерсия,
				|	Файлы.ВладелецФайла КАК ВладелецФайла,
				|	Файлы.ХранитьВерсии КАК ХранитьВерсии,
				|	Файлы.ПометкаУдаления КАК ПометкаУдаления,
				|	Файлы.ДатаЗаема КАК ДатаЗаема,
				|	Файлы.Зашифрован КАК Зашифрован,
				|	Файлы.ПодписанЭП КАК ПодписанЭП,
				|	ЕСТЬNULL(ВерсииФайлов.ПолноеНаименование, """") КАК ПолноеНаименование,
				|	ЕСТЬNULL(ВерсииФайлов.Расширение, """") КАК Расширение,
				|	ЕСТЬNULL(ВерсииФайлов.Размер, 0) КАК Размер,
				|	ЕСТЬNULL(ВерсииФайлов.НомерВерсии, 0) КАК НомерВерсии,
				|	ЕСТЬNULL(ВерсииФайлов.ПутьКФайлу, """") КАК ПутьКФайлу,
				|	ЕСТЬNULL(ВерсииФайлов.Том, ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)) КАК Том,
				|	ЕСТЬNULL(ВерсииФайлов.ДатаМодификацииУниверсальная, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаМодификацииУниверсальная,
				|	ЕСТЬNULL(ВерсииФайлов.Автор, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) КАК Автор,
				|	ЕСТЬNULL(ВерсииФайлов.СтатусИзвлеченияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) КАК СтатусИзвлеченияТекста,
				|	ЕСТЬNULL(ВерсииФайлов.СтатусРаспознаванияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыРаспознаванияТекста.ПустаяСсылка)) КАК СтатусРаспознаванияТекста,
				|	ЕСТЬNULL(ВерсииФайлов.ТипХраненияФайла, ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) КАК ТипХраненияФайла
				|ИЗ
				|	Справочник.Файлы КАК Файлы
				|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов
				|		ПО (ИСТИНА)
				|ГДЕ
				|	Файлы.Ссылка = &Файл
				|	И ВерсииФайлов.Ссылка = &Версия";
			
			Запрос.Параметры.Вставить("Файл", ФайлСсылка);
			Запрос.Параметры.Вставить("Версия", ВерсияСсылка);
		Иначе
			Запрос.Текст = 
				"ВЫБРАТЬ РАЗРЕШЕННЫЕ
				|	Файлы.Ссылка КАК Ссылка,
				|	Файлы.Код КАК Код,
				|	Файлы.Редактирует КАК Редактирует,
				|	Файлы.ТекущаяВерсия КАК ТекущаяВерсия,
				|	Файлы.ВладелецФайла КАК ВладелецФайла,
				|	Файлы.ХранитьВерсии КАК ХранитьВерсии,
				|	Файлы.ПометкаУдаления КАК ПометкаУдаления,
				|	Файлы.ДатаЗаема КАК ДатаЗаема,
				|	Файлы.Зашифрован КАК Зашифрован,
				|	Файлы.ПодписанЭП КАК ПодписанЭП,
				|	ЕСТЬNULL(ВерсииФайлов.ПолноеНаименование, """") КАК ПолноеНаименование,
				|	ЕСТЬNULL(ВерсииФайлов.Расширение, """") КАК Расширение,
				|	ЕСТЬNULL(ВерсииФайлов.Размер, 0) КАК Размер,
				|	ЕСТЬNULL(ВерсииФайлов.НомерВерсии, 0) КАК НомерВерсии,
				|	ЕСТЬNULL(ВерсииФайлов.ПутьКФайлу, """") КАК ПутьКФайлу,
				|	ЕСТЬNULL(ВерсииФайлов.Том, ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)) КАК Том,
				|	ЕСТЬNULL(ВерсииФайлов.ДатаМодификацииУниверсальная, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаМодификацииУниверсальная,
				|	ЕСТЬNULL(ВерсииФайлов.Автор, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)) КАК Автор,
				|	ЕСТЬNULL(ВерсииФайлов.СтатусИзвлеченияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) КАК СтатусИзвлеченияТекста,
				|	ЕСТЬNULL(ВерсииФайлов.СтатусРаспознаванияТекста, ЗНАЧЕНИЕ(Перечисление.СтатусыРаспознаванияТекста.ПустаяСсылка)) КАК СтатусРаспознаванияТекста,
				|	ЕСТЬNULL(ВерсииФайлов.ТипХраненияФайла, ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)) КАК ТипХраненияФайла
				|ИЗ
				|	Справочник.Файлы КАК Файлы
				|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов
				|		ПО (ИСТИНА)
				|ГДЕ
				|	ВерсииФайлов.Ссылка = &Версия
				|	И Файлы.Ссылка = ВерсииФайлов.Владелец";
			
			Запрос.Параметры.Вставить("Версия", ВерсияСсылка);
		КонецЕсли;    
		
	КонецЕсли;    
	
	МассивДанныеФайла = Новый Массив;
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		
		ДанныеФайла = Новый Структура;
		ДанныеФайла.Вставить("Ссылка", Выборка.Ссылка);
		ДанныеФайла.Вставить("КодФайла", Выборка.Код);
		ДанныеФайла.Вставить("Редактирует", Выборка.Редактирует);
		ДанныеФайла.Вставить("Владелец", Выборка.ВладелецФайла);
		ДанныеФайла.Вставить("НавигационнаяСсылка", ПолучитьНавигационнуюСсылку(Выборка.Ссылка));
		
		ДанныеФайла.Вставить("КоличествоЗанятыхФайлов", -1); // -1  - значит не задано
		
		Если ВерсияСсылка <> Неопределено Тогда
			ДанныеФайла.Вставить("Версия", ВерсияСсылка);
		Иначе
			ДанныеФайла.Вставить("Версия", Выборка.ТекущаяВерсия);
		КонецЕсли;    
		
		ДанныеФайла.Вставить("ТекущаяВерсия", Выборка.ТекущаяВерсия);
		
		СтруктураКлюча = Новый Структура("Файл", ДанныеФайла.ТекущаяВерсия);
		КлючЗаписи = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьКлючЗаписи(СтруктураКлюча);
		НавигационнаяСсылкаТекущейВерсии = ПолучитьНавигационнуюСсылку(КлючЗаписи, "ДвоичныеДанныеФайла");
		ДанныеФайла.Вставить("НавигационнаяСсылкаТекущейВерсии", НавигационнаяСсылкаТекущейВерсии);
		
        КодировкаТекущейВерсии = ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия);
        ДанныеФайла.Вставить("КодировкаТекущейВерсии", КодировкаТекущейВерсии);
		
		ДанныеФайла.Вставить("Размер", Выборка.Размер);
		ДанныеФайла.Вставить("НомерВерсии", Выборка.НомерВерсии);
		ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Выборка.ДатаМодификацииУниверсальная);
		ДанныеФайла.Вставить("Расширение", Выборка.Расширение);
		ДанныеФайла.Вставить("ПолноеНаименованиеВерсии", СокрЛП(Выборка.ПолноеНаименование));
		ДанныеФайла.Вставить("ХранитьВерсии", Выборка.ХранитьВерсии);
		ДанныеФайла.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
		ДанныеФайла.Вставить("АвторТекущейВерсии", Выборка.Автор);
		ДанныеФайла.Вставить("Зашифрован", Выборка.Зашифрован);
		ДанныеФайла.Вставить("ПодписанЭП", Выборка.ПодписанЭП);
		ДанныеФайла.Вставить("ДатаЗаема", Выборка.ДатаЗаема);
		
		ДанныеФайла.Вставить("ПутьКФайлу", Выборка.ПутьКФайлу);
		ДанныеФайла.Вставить("Том", Выборка.Том);	   
		ДанныеФайла.Вставить("ТипХраненияФайла", Выборка.ТипХраненияФайла);	   
		
		Если ДанныеФайла.Зашифрован Тогда
			МассивСертификатовШифрования = ПолучитьМассивСертификатовШифрования(ДанныеФайла.Ссылка);
			ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования);
		КонецЕсли;    
		
		НаЧтение = ДанныеФайла.Редактирует <> Пользователи.ТекущийПользователь();
		ДанныеФайла.Вставить("НаЧтение", НаЧтение);
		
		ДанныеФайла.Вставить("ЗанятСДругогоКомпьютера", Ложь);
		ДанныеФайла.Вставить("ИмяДругогоКомпьютера", "");
		Если ДанныеФайла.Редактирует = Пользователи.ТекущийПользователь() Тогда
			
			Если Не ФайловыеФункции.ЕстьЗаписьДляТекущегоИдентификатора(ДанныеФайла.Версия, ИдентификаторКлиента) Тогда
			
				ИмяКомпьютера = "";
				Если ФайловыеФункции.ЕстьДанныеЗаемаСДругогоКомпьютера(ДанныеФайла.Версия, 
						ИмяКомпьютера, ИдентификаторКлиента) Тогда
					ДанныеФайла.ЗанятСДругогоКомпьютера = Истина;
					ДанныеФайла.ИмяДругогоКомпьютера = ИмяКомпьютера;
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЕсли;	
		
		ВРабочемКаталогеНаЧтение = Истина;
		ВРабочемКаталогеВладельца = Ложь;
		ИмяКаталога = ФайловыеФункции.ПолучитьПутьКРабочемуКаталогуПользователя();
		Если ИмяКаталога = Неопределено Тогда
			ИмяКаталога = "";
		КонецЕсли;    
		
		Если ВерсияСсылка <> Неопределено Тогда
			ИмяФайлаСПутемВРабочемКаталоге = ПолучитьИмяФайлаСПутемИзРегистра(ВерсияСсылка, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца);
		Иначе
			ИмяФайлаСПутемВРабочемКаталоге = ПолучитьИмяФайлаСПутемИзРегистра(Выборка.ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца);
		КонецЕсли;    
		
		ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ИмяФайлаСПутемВРабочемКаталоге);
		ДанныеФайла.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение);
		ДанныеФайла.Вставить("РабочийКаталогВладельца", "");
		
		РедактируетТекущийПользователь = (ДанныеФайла.Редактирует = Пользователи.ТекущийПользователь());
		ДанныеФайла.Вставить("РедактируетТекущийПользователь", РедактируетТекущийПользователь);
		
		СтатусИзвлеченияТекстаСтрока = "НеИзвлечен";
		Если Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен Тогда
			СтатусИзвлеченияТекстаСтрока = "НеИзвлечен";
		ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен Тогда
			СтатусИзвлеченияТекстаСтрока = "Извлечен";
		ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда
			СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось";
		КонецЕсли;    
		ДанныеФайла.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока);
		
		СтатусРаспознаванияТекстаСтрока = "НеНужноРаспознавать";
		Если Выборка.СтатусРаспознаванияТекста = Перечисления.СтатусыРаспознаванияТекста.НеРаспознано Тогда
			СтатусРаспознаванияТекстаСтрока = "НеРаспознано";
		ИначеЕсли Выборка.СтатусРаспознаванияТекста = Перечисления.СтатусыРаспознаванияТекста.НужноРаспознать Тогда
			СтатусРаспознаванияТекстаСтрока = "НужноРаспознать";
		ИначеЕсли Выборка.СтатусРаспознаванияТекста = Перечисления.СтатусыРаспознаванияТекста.Распознано Тогда
			СтатусРаспознаванияТекстаСтрока = "Распознано";
		ИначеЕсли Выборка.СтатусРаспознаванияТекста = Перечисления.СтатусыРаспознаванияТекста.Распознается Тогда
			СтатусРаспознаванияТекстаСтрока = "Распознается";
		ИначеЕсли Выборка.СтатусРаспознаванияТекста = Перечисления.СтатусыРаспознаванияТекста.НеНужноРаспознавать Тогда
			СтатусРаспознаванияТекстаСтрока = "НеНужноРаспознавать";
		КонецЕсли;    
		ДанныеФайла.Вставить("СтатусРаспознаванияТекста", СтатусРаспознаванияТекстаСтрока);
		
		ДанныеФайла.Вставить("ПодписанФаксимиле", Выборка.Ссылка.ПодписанФаксимиле);//виртуальная цифровая подпись
		
		МассивДанныеФайла.Добавить(ДанныеФайла); 
		
	КонецЦикла;
	
	// если был передан массив - возвращаем массив
	Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда 
		Возврат МассивДанныеФайла;
	КонецЕсли;
	
	Если МассивДанныеФайла.Количество() > 0 Тогда 
		Возврат МассивДанныеФайла[0];
	Иначе
		ВызватьИсключение НСтр("ru = 'У пользователя недостаточно прав на исполнение операции над базой данных.'");
	КонецЕсли;
	
КонецФункции

// Функция возвращает структуру, содержащую различные сведения о Файле и версии.
//
// Параметры:
//  ФайлВерсияСсылка        - СправочникСсылка.Файлы, СправочникСсылка.ВерсииФайлов - файл или версия файла.
//  ИдентификаторФормы      - УникальныйИдентификатор - уникальный идентификатор формы.
//  РабочийКаталогВладельца - Строка - в ней возвращается рабочий каталог владельца файла.
//  ПредыдущийАдресФайла    - Строка - в ней возвращается рабочий каталог владельца файла.
//
// Возвращаемое значение:
//   Структура - структура с данными файла. См. ПолучитьДанныеФайла.
//
Функция ДанныеФайлаДляОткрытия(ФайлСсылка, ВерсияСсылка = Неопределено, ИдентификаторФормы = Неопределено,
	РабочийКаталогВладельца = Неопределено, ПредыдущийАдресФайла = Неопределено,
	НеПолучатьВизуализациюЭП = Ложь) Экспорт
	
	Если ПредыдущийАдресФайла <> Неопределено Тогда
		Если НЕ ПустаяСтрока(ПредыдущийАдресФайла) И ЭтоАдресВременногоХранилища(ПредыдущийАдресФайла) Тогда
			УдалитьИзВременногоХранилища(ПредыдущийАдресФайла);
		КонецЕсли;
	КонецЕсли;
	
	ДанныеФайла = ДанныеФайла(ФайлСсылка, ВерсияСсылка);
	
	Если РабочийКаталогВладельца = Неопределено Тогда
		РабочийКаталогВладельца = РабочийКаталогПапки(ДанныеФайла.Владелец);
	КонецЕсли;
	ДанныеФайла.Вставить("РабочийКаталогВладельца", РабочийКаталогВладельца);
	
	Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда
		ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(
			ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение);
		ПолноеИмяФайлаВРабочемКаталоге = РабочийКаталогВладельца + ИмяФайла;
		ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ПолноеИмяФайлаВРабочемКаталоге);
	КонецЕсли;
	
	ПредыдущийАдресФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии;
	
	ПротоколированиеРаботыПользователей.ЗаписатьПолучениеФайла(ДанныеФайла.Ссылка);
	
	ЗаписатьОбращениеКВерсииФайла(ДанныеФайла.Версия);
	РаботаСПоследнимиОбъектами.ЗаписатьОбращениеКОбъекту(ДанныеФайла.Ссылка);
	
	ОбщийБизнес.ДобавитьВизуализациюФаксимиле(ДанныеФайла, ИдентификаторФормы);//виртуальная цифровая подпись
	
	Если НеПолучатьВизуализациюЭП = Ложь Тогда
		
		ДобавитьВизуализациюЭП(ДанныеФайла, ИдентификаторФормы);
				
		Если ДанныеФайла.ВизуализацияЭПДобавлена = Истина Тогда
			
			ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге = ""; // не берем из кеша
			УдалитьИзРегистра(ДанныеФайла.Версия); // удалим инфо из кеша
			
			Возврат ДанныеФайла;
		КонецЕсли;	
		
	Иначе	
		
		ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге = ""; // не берем из кеша
		УдалитьИзРегистра(ДанныеФайла.Версия); // удалим инфо из кеша
		
	КонецЕсли;
	
	ТипХраненияФайла = ДанныеФайла.Версия.ТипХраненияФайла;
	
	Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ДанныеФайла.Версия <> Неопределено Тогда
		
		УстановитьПривилегированныйРежим(Истина);
		
		Запрос = Новый Запрос;
		
		Запрос.Текст =
		"ВЫБРАТЬ
		|	ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу,
		|	ВерсииФайлов.Том КАК Том
		|ИЗ
		|	Справочник.ВерсииФайлов КАК ВерсииФайлов
		|ГДЕ
		|	ВерсииФайлов.Ссылка = &Версия";
		
		Запрос.Параметры.Вставить("Версия", ДанныеФайла.Версия);
		
		ДанныеФайлаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка();
		ДанныеФайлаПутьКФайлу = "";
		
		Выборка = Запрос.Выполнить().Выбрать();
		Если Выборка.Следующий() Тогда
			ДанныеФайлаТом = Выборка.Том;
			ДанныеФайлаПутьКФайлу = Выборка.ПутьКФайлу;
		КонецЕсли;
		
		Если НЕ ДанныеФайлаТом.Пустая() Тогда
			ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ДанныеФайлаТом) + ДанныеФайлаПутьКФайлу; 
			Попытка
				ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть);
				// Работаем только с текущей версией - для не-текущей ссылку получаем в ПолучитьНавигационнуюСсылкуДляОткрытия.
				ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
			Исключение
				// Запись в журнал регистрации.
				СсылкаНаФайл = ?(ФайлСсылка <> Неопределено, ФайлСсылка, ВерсияСсылка);
				СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(
					ИнформацияОбОшибке(), СсылкаНаФайл);
				
				ЗаписьЖурналаРегистрации(
					НСтр("ru = 'Файлы.Открытие файла'",
					     ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()),
					УровеньЖурналаРегистрации.Ошибка,
					Метаданные.Справочники.Файлы,
					ФайлСсылка,
					СообщениеОбОшибке);
					
				ТипВладельцаФайла = ТипЗнч(ДанныеФайла.Владелец);
				Если ТипВладельцаФайла = Тип("СправочникСсылка.ПапкиФайлов") Тогда
					ПредставлениеВладельца = ПолныйПутьПапки(ДанныеФайла.Владелец);
				Иначе
					ПредставлениеВладельца = ДанныеФайла.Владелец;
				КонецЕсли;
				ПредставлениеВладельцаФайла = СтрШаблон(
					НСтр("ru = 'Присоединен к %1 : %2'"),
					Строка(ТипВладельцаФайла),
					ПредставлениеВладельца);
					
				ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов(
					ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение,
					,
					ПредставлениеВладельцаФайла);
					
			КонецПопытки;
		КонецЕсли;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге) Тогда
		ОбновитьДатуОбращенияФайлыВРабочемКаталогеКомпьютера(ДанныеФайла.Версия);
	КонецЕсли;	
	
	Возврат ДанныеФайла;
	
КонецФункции // ДанныеФайлаДляОткрытия()

// 
Функция ДанныеФайловДляОткрытия(
	МассивФайлов, 
	ИдентификаторФормы = Неопределено) Экспорт 
	
	ДанныеФайлов = ДанныеФайла(МассивФайлов);
	
	СоответствиеФайлов = Новый Соответствие;
	Для Каждого ДанныеФайла Из ДанныеФайлов Цикл
		СоответствиеФайлов.Вставить(ДанныеФайла.Ссылка, ДанныеФайла);
	КонецЦикла;	
	
	Для Каждого Файл Из МассивФайлов Цикл
		
		ДанныеФайла = СоответствиеФайлов.Получить(Файл);
		
		ЗаписатьОбращениеКВерсииФайла(ДанныеФайла.Версия);
		РаботаСПоследнимиОбъектами.ЗаписатьОбращениеКОбъекту(ДанныеФайла.Ссылка);
		
		РабочийКаталогВладельца = РабочийКаталогПапки(ДанныеФайла.Владелец);
		ДанныеФайла.Вставить("РабочийКаталогВладельца", РабочийКаталогВладельца);
		
		Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда
			ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение);
			ИмяФайлаСПутемВРабочемКаталоге = РабочийКаталогВладельца + ИмяФайла;
			ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ИмяФайлаСПутемВРабочемКаталоге);
		КонецЕсли;
		
		ДобавитьВизуализациюЭП(ДанныеФайла, ИдентификаторФормы);
		ОбщийБизнес.ДобавитьВизуализациюФаксимиле(ДанныеФайла, ИдентификаторФормы);//виртуальная цифровая подпись
		
		Если ДанныеФайла.ВизуализацияЭПДобавлена = Истина Тогда
			
			ДанныеФайла.ПолноеИмяФайлаВРабочемКаталоге = ""; // не берем из кеша
			УдалитьИзРегистра(ДанныеФайла.Версия); // удалим инфо из кеша
			
			Продолжить;
			
		КонецЕсли;	
		
		РабочийКаталогВладельца = РабочийКаталогПапки(ДанныеФайла.Владелец);
		ДанныеФайла.Вставить("РабочийКаталогВладельца", РабочийКаталогВладельца);
		
		Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда
			ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение);
			ИмяФайлаСПутемВРабочемКаталоге = РабочийКаталогВладельца + ИмяФайла;
			ДанныеФайла.Вставить("ПолноеИмяФайлаВРабочемКаталоге", ИмяФайлаСПутемВРабочемКаталоге);
		КонецЕсли;
		
		ТипХраненияФайла = ДанныеФайла.ТипХраненияФайла;
		Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске И ДанныеФайла.Версия <> Неопределено Тогда
			
			УстановитьПривилегированныйРежим(Истина);
			
			Запрос = Новый Запрос;
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу,
			|	ВерсииФайлов.Том КАК Том
			|ИЗ
			|	Справочник.ВерсииФайлов КАК ВерсииФайлов
			|ГДЕ
			|	ВерсииФайлов.Ссылка = &Версия";
			
			Запрос.Параметры.Вставить("Версия", ДанныеФайла.Версия);
			
			ДанныеФайлаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка();
			ДанныеФайлаПутьКФайлу = ""; 
			
			Выборка = Запрос.Выполнить().Выбрать();
			Если Выборка.Следующий() Тогда
				ДанныеФайлаТом = Выборка.Том;
				ДанныеФайлаПутьКФайлу = Выборка.ПутьКФайлу;
			КонецЕсли;
			
			Если НЕ ДанныеФайлаТом.Пустая() Тогда
				ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ДанныеФайлаТом) + ДанныеФайлаПутьКФайлу; 
				Попытка
					ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть);
					// Работаем только с текущей версией - для не-текущей ссылку получаем в ПолучитьНавигационнуюСсылкуДляОткрытия.
					ДанныеФайла.НавигационнаяСсылкаТекущейВерсии = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы);
				Исключение
					// запись в журнал регистрации
					СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибке(), ДанныеФайла.Ссылка);
					ЗаписьЖурналаРегистрации("Получение данных файла для открытия", УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ДанныеФайла.Ссылка, СообщениеОбОшибке);
					
					ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаФайлНеНайденВХранилищеФайлов(
						ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение);
				КонецПопытки;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ДанныеФайлов;
	
КонецФункции // ДанныеФайлаДляОткрытия()

7. Финиш.

Скачать файлы

Наименование Файл Версия Размер
Цифровая подпись Документооборот КОРП 2.1:

.rar 105,39Kb
2
.rar 105,39Kb 2 Скачать

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

Оставьте свое сообщение

См. также

Печать конвертов из 1С Промо

Пакетная печать Документооборот и делопроизводство Документооборот и делопроизводство v8 1cv8.cf Россия Абонемент ($m)

Внешняя печатная форма для печати конвертов формата C4 и C5. Печать с полной разметкой почтового конверта и размещением адресов отправителя и получателя, включая индекс.

1 стартмани

07.12.2015    30874    10    sashs1980    5    

Групповая очистка рабочей группы 1С: Документооборот 2.1 ПРОФ

Документооборот и делопроизводство Документоборот 2 Чистка базы v8 ДО УУ Абонемент ($m)

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

1 стартмани

16.04.2021    388    2    4Shikari    0    

Помощник Документооборота - реестр задач для 1С:Документооборот

Документооборот и делопроизводство v8 ДО Россия УУ Абонемент ($m)

Помощник Документооборота - реестр задач - обработка для 1С:Документооборот, удобный инструмент для работы с задачами.

1 стартмани

17.02.2021    964    9    a_l_e_xj    0    

Выгрузка файлов ЭДО в Ozon из УТ 11 вместе с ГТД

Документооборот и делопроизводство Оптовая торговля WEB v8 v8::ОУ УТ11 БУ УУ Абонемент ($m)

Это дополнение к системе 1С позволяет выгружать файлы УПД или ТОРГ-12 с данными гтд и кодами странам в формате XML напрямую из системы 1С УТ 11. Выгруженные файлы вы сможете отправлять Ozon в системе электронного документооборота Контур.Диадок.

1 стартмани

09.02.2021    773    2    solaru    1    

Обработка "Распознавание штрихкода с помощью утилиты Zbar" для Документооборот ред. 2 Промо

Универсальные обработки Документооборот и делопроизводство Документооборот и делопроизводство v8 ДО Абонемент ($m)

В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка - альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.

5 стартмани

05.09.2016    23364    166    SEOAngels    11    

Быстрый просмотр документов PDF и картинок в 1С:Документооборот 2.1

Документооборот и делопроизводство v8 v8::Бизнес-процессы ДО Россия УУ Абонемент ($m)

Когда на нашем предприятии стали подключать руководство к процессам в 1С:Документооборот, появилось вполне логичное требование реализовать быстрый просмотр вложений к документам и задачам. Данное расширение отображает документы PDF и картинки на формах входящих, внутренних, исходящих документов, а также в формах задач на согласование и исполнения и на форме Задачи мне.

2 стартмани

02.02.2021    1038    15    timm00    9    

Массовая рассылка документов контрагентам через Whatsapp

Документооборот и делопроизводство v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Рассылает списку контрагентов выбранные печатные формы через Whatsapp. Тестировалась на Бухгалтерии 3.0.87.28.

2 стартмани

16.01.2021    1771    2    Плюшкин_    0    

Пример работы с API СБИС ЭДО

Интеграция Документооборот и делопроизводство v8 1cv8.cf Россия Абонемент ($m)

Пример авторизации, получения информации по документам, закрытия сессии. Обработка подойдет для тех, у кого возникли проблемы с подключением к сервису из 1С.

2 стартмани

08.12.2020    1733    12    winapi    3    

Приемная руководителя, редакция 1.1 Промо

Документооборот и делопроизводство Управленческий учет (прочее) v8 Абонемент ($m)

Приемная руководителя, редакция 1.1. Конфигурация на управляемых формах (интерфейс - Такси) с открытым кодом, создана для секретарей.

1500 руб.

19.05.2015    28774    22    10    

Рукописная подпись PDF документа в 1С:Документооборот через смартфон/планшет

Документооборот и делопроизводство v8 ДО Абонемент ($m)

Расширение для 1С:Документооборот для наложения рукописной подписи в PDF файле. Расширение позволяет накладывать разное количество подписей пользователей в одном документе. Подписание происходит в Android приложении. Вы можете интегрировать подписание документов в свое приложение. Данное расширение как один из вариантов применения использования подписи. Открытое API для интеграции с любыми 1С конфигурациями и приложениями.

1 стартмани

28.11.2020    2103    7    perevalsky    13    

Учет состояний оригиналов первичных документов

Документооборот и делопроизводство v8 УПП1 Россия БУ УУ Абонемент ($m)

Совсем недавно фирма 1С анонсировала в новой версии 1С:ERP 2.5 подсистему учета состояний оригиналов в первичных документах. Представляю вашему вниманию аналогичную подсистему для 1С:УПП 1.3.

10 стартмани

16.11.2020    2519    6    E_Babaylova    8    

Вставка штампа в файлы PDF

Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

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

1 стартмани

11.11.2020    4235    28    soulner    6    

Реестр договоров для 1С:Бухгалтерии Промо

Обработка документов Обработка справочников Документооборот и делопроизводство Документооборот и делопроизводство v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Реестр договоров для 1С:Бухгалтерии - дополнительная обработка для конфигурации "Бухгалтерия предприятия", версия 3.0

5 стартмани

28.10.2014    48553    114    RespectSoft    26    

История выполнения задач

Документооборот и делопроизводство Управление задачами v8 ДО Россия УУ Абонемент ($m)

Расширенная история выполнения задач для комплексных бизнес-процессов (расширение) для конфигурации Документооборот КОРП

1 стартмани

27.10.2020    2135    18    Lok`Tar    4    

Виджет - делегирование прав

Документооборот и делопроизводство v8 ДО Россия Абонемент ($m)

Дополнительный настраиваемый виджет - делегирование прав (расширение) для конфигурации Документооборот КОРП.

1 стартмани

27.10.2020    1882    10    Lok`Tar    0    

Удаление электронных документов (ЭДО) у помеченных на удаление документов

Документооборот и делопроизводство Чистка базы Обработка документов v8 1cv8.cf Абонемент ($m)

Обработка находит помеченные на удаление документы, у которых есть движения по ЭДО. Помечает на удаление все объекты ЭДО, связанные с этими документами.

1 стартмани

05.10.2020    2111    13    rokhin    5    

Учет канцтоваров для секретаря - тонкий клиент (без информационной базы, на файлах excel) Промо

Документооборот и делопроизводство Универсальные обработки Загрузка и выгрузка в Excel Документооборот и делопроизводство v8 1cv8.cf Абонемент ($m)

Обработка включает для каждого файла загрузки из excel новую колонку в табличное поле обработки (управляемая форма, тонкий клиент), рассчитывает и выводит общие итоги. Табличку на тонком клиенте выводит в табличный документ. Обработка не использует информационную базу и независима от её структуры, только файлы эксель. Результат объединения тоже сохраняется в файл.

1 стартмани

11.09.2012    22014    22    ksnik    10    

Чат бот 1С: Что ты умеешь ? Вывод вариантов действий (расширение)

Практика программирования Документооборот и делопроизводство v8 ДО Россия Абонемент ($m)

Выводит все используемые состояния чат-бота на данный момент времени.

1 стартмани

05.10.2020    2194    0    floodprog    0    

Расширенный обзор процессов в 1С: Документооборот 2.1 КОРП

Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

Данная разработка позволяет просматривать все документы и задачи по ним в одном окне. В 1С: Документооборот затруднён просмотр задач и процессов. Для просмотра всех шаблонов, задач и решений по ним необходимо необходимо открывать кучу окон (для просмотра входящих и исходящих задач, внутренних, входящих и исходящих документов). Например, если по внутреннему документу запущен комплексный бизнес-процесс, то для того, чтобы узнать все его этапы, требуется открыть сам внутренний документ, перейти по кнопке в процессы и задачи (тут пользователь видит уже запущенные задачи, но не видит текстовые результаты их выполнения), далее открыть шаблон процесса.

10 стартмани

29.09.2020    2974    12    rusmm93    0    

Проверка условий маршрутизации в 1С: Документооборот

Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

Проверка условий маршрутизации в 1С: Документооборот, проверка условий, созданных "В режиме конструктора" и "Комбинация из других условий". Проверка непосредственно из условия. Изменение конфигурации не требуется (расширение).

5 стартмани

23.09.2020    2312    9    sulig    3    

Согласование документов 1С:Документооборот и 1С:Консолидация из Outlook 2010-2013 без запуска 1С (с исходниками) Промо

WEB Внешние источники данных Управление проектом Документооборот и делопроизводство Документооборот и делопроизводство v8 ДО Россия УУ Абонемент ($m)

Надстройки для Outlook 2010-2013, позволяющие пользователю без запуска 1С оперативно выполнять согласование документов при поступлении оповещения на электронную почту. Поддерживается интеграция с 1С:Документооборот ПРОФ и КОРП (работа с процессом "Согласование" с поддержкой просмотра файлов по внутренним и исходящим документам) и 1С:Консолидация ПРОФ (согласование "Заявок на расходование средств" и "Экземпляров отчетов" с возможностью просмотра печатных форм).

1 стартмани

16.07.2012    78291    420    Aleksey.Bochkov    123    

Настраиваемые печатные формы для Word

Документооборот и делопроизводство v8 1cv8.cf Абонемент ($m)

Разработка, позволяющая оперативно создавать печатные формы из файлов Word, редактировать их в режиме Предприятия и формировать результат также в формате Microsoft Word.

1 стартмани

14.09.2020    2890    17    FatPanzer    7    

Выгрузка файлов ЭДО из 1С для OZON, УТ 11.4, УНФ 1.6

Оптовая торговля Розничная торговля Документооборот и делопроизводство WEB v8 УНФ УТ11 УУ Абонемент ($m)

Обработка позволяет выгружать файлы УПД или ТОРГ-12 в формате XML напрямую из 1С. Выгруженные файлы можно отправлять Ozon в системе электронного документооборота Контур.Диадок.

3 стартмани

18.08.2020    2408    9    KVIKS    4    

Выгрузка XML-файла УПД для отправки через ЭДО СБИС, Диадок и т.п.

Оптовая торговля Документооборот и делопроизводство Обмен через XML v8 v8::БУ БП3.0 Оптовая торговля, дистрибуция, логистика Россия БУ Абонемент ($m)

С помощью этой обработки для документа "Реализация товаров и услуг" формируется XML-файл УПД, который можно отправить через ЭДО СБИС, Диадок и пр.

1 стартмани

17.08.2020    8209    64    vasilievil    11    

Расширение для 1С Документооборот 2.1 - Ручной поиск документов по штрих-коду после потокового сканирования

Обработка документов Поиск данных Документооборот и делопроизводство Сканер штрих-кода v8 ДО Россия Абонемент ($m)

Возможность поиска документа по ШК для прикрепления к ним нераспознанных изображений, после потокового сканирования.

2 стартмани

05.08.2020    2786    0    Steffan    0    

Расширение, позволяющее хранить Историю изменения КПП и Полное наименование в спр. Контрагенты в 1С Документооборот

Документооборот и делопроизводство Адаптация типовых решений v8 ДО Абонемент ($m)

Данное расширение добавляет возможность хранить историю изменения КПП и Полного наименования, аналогично механизму в 1С Бухгалтерия 3.0

5 стартмани

04.08.2020    2655    1    feikaa    0    

Комплект документов в PDF для БП3

Пакетная печать Управление взаимоотношениями с клиентами (СRM) Документооборот и делопроизводство v8 БП3.0 БУ УУ Абонемент ($m)

Сохранение комплекта документов для документов "Реализация (акты, накладные)", "Поступления (акты, накладные)" и "Доверенность" в PDF.

3 стартмани

04.08.2020    2903    3    mrXoxot    1    

Контроль возврата оригиналов бумажных документов и рассылка не вернувшихся бумажных документов

Документооборот и делопроизводство v8 ERP2 УТ11 БУ УУ Абонемент ($m)

Контроль возврата оригиналов бумажных документов и рассылка уведомлений о возврате бумажных документов в бухгалтерию. Функционал позволяет отмечать возврат бумажных документов, а также рабочее место "Рассылка УПД" позволяет рассылать по электронной почте контактным лицам контрагента информации о невозвращенных документах и вкладывает в письмо не возвращенные УПД.

5 стартмани

01.08.2020    3068    3    user1040362    4    

Просмотр и восстановление ссылки на актуальный электронный документ. 1С: УПП

Обработка документов Поиск данных Тестирование и исправление Документооборот и делопроизводство v8 УПП1 БУ Абонемент ($m)

Обработка может быть полезна на случай, если вдруг пропали ссылки на актуальные электронные документы...

1 стартмани

30.07.2020    2464    0    yarrr    0    

Контроль уникальности входящих документов

Документооборот и делопроизводство v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

В организации при вводе первичных входящих документов может по ошибке произойти задвоение документов. Это может происходить по разным причинам. Просмотрели, не туда занесли, потом исправили, обнаружили по акту сверки. Ошибок можно избежать, если правильным образом настроить контроль уникальности входящих документов. Как это сделать, вы узнаете далее.

1 стартмани

02.07.2020    3678    6    alsen    8    

Доступ к функционалу ЭДО пользователя без администраторских прав

Документооборот и делопроизводство Роли и права v8 v8::Права УНФ Абонемент ($m)

Данная обработка предназначена для запуска функционала Электронного документооборота пользователем с ограниченными правами, не имеющим доступ к разделу Компания, из которого в свою очередь запускается меню с Электронными Документами ( Архив ЭДО ,Текущие дела ЭДО , Производные документы), а также меню Администрирование / Обмен с контрагентами / Настройки электронной подписи и шифрования.

1 стартмани

26.06.2020    5556    7    its_33    0    

Формирование УПД в XML для электронного документооборота (ЭДО) Диадок, СБИС для конфигурации 1С:Управление торговлей 10.3 (8.1, 8.2, 8.3)

Документооборот и делопроизводство Оптовая торговля Обмен через XML v8 УТ10 Россия БУ Абонемент ($m)

Формирует XML файл с данными УПД для использования в системах ЭДО (Диадок, СБИС и тд). для конфигурации 1С:Управление торговлей 10.3.

3 стартмани

20.06.2020    4528    18    andleb    3    

Поиск по разделу "Задачи мне", Документооборот

Документооборот и делопроизводство v8 ДО Россия УУ Абонемент ($m)

В документообороте есть существенный недостаток, в котором не хватает поиска по Текущим задачам, т.е. на главном экране в Моих задачах.

1 стартмани

10.06.2020    2658    3    Profenix    3    

Загрузка из XML файла ЭДО в документ поступления для конфигураций 1С: Розница 2.2/2.3, Управление торговлей 10.3/11.4

Розничная торговля Обработка документов Документооборот и делопроизводство Обмен через XML v8 УТ10 Розница Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Внешние обработки загрузки данных из XML файлов формата ON_NSCHFDOPPRMARK ЭДО в документы поступления 1С Розница версия 2.2.10.19 и выше, Управление торговлей 10.3.52.2 и выше, Управление торговлей 11.4.5.63 и выше

1 стартмани

04.06.2020    20018    246    independ    119    

Подпись и печать в шаблонах договоров. Расширение. БП 3.0

Документооборот и делопроизводство v8 БП3.0 Абонемент ($m)

Расширение добавляет в шаблоны договоров 2 параметра: {ПодписьРуководителяОрганизации} и {Печать}. Что позволяет при печати шаблона выводить подпись и печать организации.

1 стартмани

01.06.2020    2725    7    Diks_Soft    0    

Установка флажка "Отразить в трудовой книжке" для ЗУП 3.1.14

Обработка документов Документооборот и делопроизводство Зарплата v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Помощь в подготовке сведений СЗВ-ТД. Упрощенная простановка галочек "Отразить в трудовой книжке" только для выбранных кадровых приказов сотрудника в закрытом(!) периоде: - Прием, Прием списком, - Перевод, Перевод списком, - Увольнение, Увольнение списком.

1 стартмани

06.05.2020    3334    5    milov.aleksey    0    

Прием файлов с электронной подписью во внутреннюю почту

Документооборот и делопроизводство Документоборот 2 v8 ДО Россия Абонемент ($m)

Продолжаю тему о том, как посредством 1С:Документооборот организовать юридически значимую переписку по 63-ФЗ. Отправлять письма с ЭЦП из встроенной почты мы вроде научились. А как принять письмо, определить, какие подписи к какому файлу, загрузить их и проверить?

1 стартмани

02.05.2020    3005    1    soulner    0    

Доработка для модуля Диадок для Вайлдберриз

Документооборот и делопроизводство Оптовая торговля WEB v8 v8::ОУ УТ11 УУ Абонемент ($m)

Доработка в подключаемом модуле для формирования УПД клиента Вайлдберриз в Модуле Контур Диадок для 1С Управление Торговлей 11.4. и выше.

4 стартмани

30.04.2020    4860    10    ICeZm    2    

Редактор мероприятий ЗУП СЗВ-ТД

Зарплата Документооборот и делопроизводство Обработка документов v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

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

1 стартмани

08.04.2020    3775    35    nusv    1    

История отправки электронной почты по документам. Расширение. БП 3.0

Документооборот и делопроизводство Email v8 v8::БУ БП3.0 БУ Абонемент ($m)

Расширение для конфигурации Бухгалтерия предприятия, редакция 3.0. Реализует возможность хранить историю отправки электронных писем для документов "Реализация (акты, накладные)" и "Счета покупателям". Расширение может быть расширено и для других документов 1С.

3 стартмани

31.03.2020    4040    14    Diks_Soft    0    

Отправка файлов с электронной подписью из внутренней почты

Документооборот и делопроизводство Документоборот 2 v8 ДО Россия Абонемент ($m)

А можно ли посредством 1С:Документооборот организовать юридически значимую переписку по 63-ФЗ? А если нет возможности использовать 1С:ЭДО? Если да, то как?

1 стартмани

16.03.2020    3742    2    soulner    0    

Настройка политики повторного согласования в 1С: Документооборот

Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

Большинству компаний хочется организовать процессы согласования максимально удобно и сократить количество лишних итераций, логично, что возникает требование исключать на втором и последующих циклах согласования тех, кто уже установил свою визу. Стандартный функционал программы 1С: Документооборот, при маршрутизации процесса на повторное согласование, предлагает пользователю вручную скорректировать список согласующих. Но если запрещено изменение процесса по шаблону, корректировка состава согласующих пользователю будет недоступна. Расширение добавляет опциональную настройку в шаблоны процессов согласования, определяющую логику формирования списка согласующих при повторе согласования одним из трёх вариантов: При повторе согласовывается всеми / При повторе согласовывают только отклонившие / При повторе согласовывают отклонившие и согласовавшие с замечанием.

5 стартмани

26.02.2020    8533    40    st_Etlau    8    

Автоматическое формирование уведомлений о переходе на электронные трудовые книжки в 2020 году в конфигурации ЗУП КОРП 2.5 (Зарплата и управление персоналом КОРП, редакция 2.5)

Документооборот и делопроизводство v8 v8::СПР ЗУП2.5 Россия БУ Абонемент ($m)

До 30.06.2020 года включительно работодатель обязан уведомить каждого работника в письменной форме об изменениях в трудовом законодательстве по формированию сведений о трудовой деятельности в электронном виде. Обработка заполняет актуальных сотрудников на дату и выводит на них печатную форму установленного образца в конфигурации ЗУП КОРП 2.5

1 стартмани

22.02.2020    2749    10    Damir    0    

Копирование галочек доступности по состоянию

Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

Чтобы не заполнять вручную галки для каждого профиля в настройке доступности по состоянию.

1 стартмани

13.02.2020    2535    1    shiaju    0    

Автоматическое формирование уведомлений о переходе на электронные трудовые книжки в 2020 году в конфигурации ЗУП 3.1 (Зарплата и управление персоналом 3.1)

Управление персоналом (HRM) Документооборот и делопроизводство v8 v8::СПР ЗУП3.x Россия БУ Абонемент ($m)

Работодатель до 30 июня 2020 года включительно обязан уведомить каждого работника в письменной форме об изменениях в трудовом законодательстве по формированию сведений о трудовой деятельности в электронном виде. Обработка выводит список работников на дату и автоматически заполняет для каждого сотрудника из списка уведомление о возможности ведения сведений трудовых книжек в электронном виде начиная с 2020 года в конфигурации ЗУП 3.1.

1 стартмани

04.02.2020    7515    54    MGemini    13    

Дополнительные функции для 1С:Документооборот

Практика программирования Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

В данной публикации я хочу поделиться расширением, которое содержит дополнительные функции (доработки) для 1С:Документооборот.

1 стартмани

24.01.2020    10117    83    pavelpribytkin96    16