Цифровая подпись. Документооборот КОРП 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
1
.rar 105,39Kb 1 Скачать

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

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

См. также

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

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

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

1 стартмани

07.12.2015    30676    10    sashs1980    5    

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

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

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

1 стартмани

17.02.2021    855    8    a_l_e_xj    0    

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

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

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

1 стартмани

09.02.2021    647    2    solaru    1    

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

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

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

2 стартмани

02.02.2021    924    14    timm00    9    

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

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

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

5 стартмани

05.09.2016    23181    166    SEOAngels    11    

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

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

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

2 стартмани

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

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

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

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

2 стартмани

08.12.2020    1606    11    winapi    3    

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

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

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

1 стартмани

28.11.2020    1960    7    perevalsky    13    

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

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

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

1500 руб.

19.05.2015    28671    22    10    

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

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

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

10 стартмани

16.11.2020    2383    6    E_Babaylova    8    

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

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

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

1 стартмани

11.11.2020    3990    27    soulner    6    

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

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

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

1 стартмани

27.10.2020    2010    16    Lok`Tar    4    

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

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

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

5 стартмани

28.10.2014    48356    114    RespectSoft    26    

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

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

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

1 стартмани

27.10.2020    1776    10    Lok`Tar    0    

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

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

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

1 стартмани

05.10.2020    1993    12    rokhin    5    

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

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

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

1 стартмани

05.10.2020    2078    0    floodprog    0    

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

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

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

1 стартмани

11.09.2012    21931    22    ksnik    10    

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

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

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

10 стартмани

29.09.2020    2869    12    rusmm93    0    

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

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

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

5 стартмани

23.09.2020    2201    8    sulig    3    

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

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

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

1 стартмани

14.09.2020    2782    17    FatPanzer    7    

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

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

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

1 стартмани

16.07.2012    78090    418    Aleksey.Bochkov    123    

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

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

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

3 стартмани

18.08.2020    2312    7    KVIKS    4    

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

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

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

1 стартмани

17.08.2020    7742    61    vasilievil    10    

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

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

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

2 стартмани

05.08.2020    2663    0    Steffan    0    

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

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

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

5 стартмани

04.08.2020    2560    1    feikaa    0    

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

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

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

3 стартмани

04.08.2020    2821    3    mrXoxot    1    

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

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

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

5 стартмани

01.08.2020    2985    3    user1040362    4    

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

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

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

1 стартмани

30.07.2020    2390    0    yarrr    0    

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

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

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

1 стартмани

02.07.2020    3520    5    alsen    5    

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

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

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

1 стартмани

26.06.2020    5393    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    4419    18    andleb    3    

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

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

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

1 стартмани

10.06.2020    2591    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    19592    240    independ    118    

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

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

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

1 стартмани

01.06.2020    2633    6    Diks_Soft    0    

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

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

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

1 стартмани

06.05.2020    3230    5    milov.aleksey    0    

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

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

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

1 стартмани

02.05.2020    2901    1    soulner    0    

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

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

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

4 стартмани

30.04.2020    4669    10    ICeZm    2    

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

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

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

1 стартмани

08.04.2020    3689    35    nusv    1    

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

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

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

3 стартмани

31.03.2020    3932    13    Diks_Soft    0    

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

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

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

1 стартмани

16.03.2020    3623    1    soulner    0    

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

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

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

5 стартмани

26.02.2020    8249    40    st_Etlau    8    

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

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

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

1 стартмани

22.02.2020    2678    10    Damir    0    

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

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

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

1 стартмани

13.02.2020    2473    1    shiaju    0    

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

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

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

1 стартмани

04.02.2020    7411    54    MGemini    13    

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

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

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

1 стартмани

24.01.2020    9725    80    pavelpribytkin96    15    

Помощник подготовки данных для СЗВ-ТД

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

С 1 января 2020 г. начался переход на электронные трудовые книжки. Работодателям в 2020 г. предстоит выполнить ряд мероприятий для перехода на ЭТК, а также ежемесячно отчитываться в ПФР обо всех кадровых изменениях по форме СЗВ-ТД. В этой публикации размещена обработка, которая поможет быстро подготовить кадровые документы для заполнения СЗВ-ТД в программе 1С ЗУП 3.1, 1С ЗКГУ 3.1.

1 стартмани

23.01.2020    11772    112    Kaval88    62