///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Элементы.ФормаСоздатьСоСканера.Видимость = РаботаСФайламиСлужебныйКлиент.ДоступноСканирование();
	
	УстановитьДоступностьФайловыхКоманд();
	
#Если МобильныйКлиент Тогда
	УстановитьЗаголовокДереваПапок();
#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант")
		И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи")
		Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда
		
		ПодключитьОбработчикОжидания("ПриИзмененияИспользованияПодписанияИлиШифрования", 0.3, Истина);
		Возврат;
	ИначеЕсли ИмяСобытия = "Запись_ПапкиФайлов" Тогда
		Элементы.Папки.Обновить();
		Элементы.Список.Обновить();
		
		Если Источник <> Неопределено Тогда
			Элементы.Папки.ТекущаяСтрока = Источник;
		КонецЕсли;
	ИначеЕсли ИмяСобытия = "Запись_Файл"
		И ТипЗнч(Источник) <> Тип("Массив") Тогда
		
		Элементы.Список.Обновить();
		Если ЗначениеЗаполнено(Параметр.Файл) Тогда
			Элементы.Список.ТекущаяСтрока = Параметр.Файл;
		ИначеЕсли Источник <> Неопределено Тогда
			Элементы.Список.ТекущаяСтрока = Источник;
		КонецЕсли;
		
	КонецЕсли;
	
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
	
	Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ПапкиФайлов.Форма.ФормаВыбора") Тогда
		
		Если ВыбранноеЗначение = Неопределено Тогда
			Возврат;
		КонецЕсли;
		
		ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
		РаботаСФайламиСлужебныйКлиент.ПеренестиФайлыВПапку(ВыделенныеСтроки, ВыбранноеЗначение);
		
		Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
			ПараметрыОповещенияЗаписиФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОповещенияЗаписиФайла("ДанныеФайлаИзменены");
			Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла, ВыделеннаяСтрока);
		КонецЦикла;
		
		Элементы.Список.Обновить();
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	
	УстановитьИерархию(Настройки["ИспользоватьИерархию"]);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда
		
		СтандартнаяОбработка = Ложь;
		ПараметрыОтбора      = ДанныеОтбораЖурналаРегистрации(Элементы.Папки.ТекущиеДанные.УчетнаяЗапись);
		ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект);
		
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок

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

&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
	
	Если Элементы.Папки.ТекущаяСтрока = Неопределено Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли; 
	
	Если Элементы.Папки.ТекущаяСтрока.Пустая() Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли; 
	
	ВладелецФайла = Элементы.Папки.ТекущаяСтрока;
	ФайлОснование = Элементы.Список.ТекущаяСтрока;
	
	Отказ = Истина;
	
	Если Копирование Тогда
		РаботаСФайламиКлиент.СкопироватьФайл(ВладелецФайла, ФайлОснование);
	Иначе
		РаботаСФайламиСлужебныйКлиент.ДобавитьФайл(Неопределено, ВладелецФайла, ЭтотОбъект, 2, Истина);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	
	СтандартнаяОбработка = Ложь;
	Если ФайлыРедактируютсяВОблачномСервисе Тогда
		ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
		ПараметрыПеретаскивания.Значение = Неопределено;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;
	ПеретаскиваниеВПапку(Неопределено, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие);
КонецПроцедуры

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
	
	Если СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) Тогда
		НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Элементы.Список.ТекущиеДанные.Ссылка);
	КонецЕсли;
	ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
		МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
		МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПриИзменении(Элемент)
	
	ПараметрыОповещенияЗаписиФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОповещенияЗаписиФайла("ДанныеФайлаИзменены");
	Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла, Элемент.ВыделенныеСтроки);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыПапки

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

&НаКлиенте
Процедура ПапкиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ПапкиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
	СтандартнаяОбработка = Ложь;
	ПеретаскиваниеВПапку(Строка, ПараметрыПеретаскивания.Значение, ПараметрыПеретаскивания.Действие);
КонецПроцедуры

&НаКлиенте
Процедура ПапкиПриИзменении(Элемент)
	Элементы.Список.Обновить();
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ИмпортФайловВыполнить()
	
	Обработчик = Новый ОписаниеОповещения("ИмпортФайловПослеУстановкиРасширения", ЭтотОбъект);
	РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик);
	
КонецПроцедуры

&НаКлиенте
Процедура ИмпортПапки(Команда)
	
	Обработчик = Новый ОписаниеОповещения("ИмпортПапкиПослеУстановкиРасширения", ЭтотОбъект);
	РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭкспортПапкиВыполнить()
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ПапкаЭкспорта", Элементы.Папки.ТекущаяСтрока);
	
	Обработчик = Новый ОписаниеОповещения("ЭкспортПапкиПослеУстановкиРасширения", ЭтотОбъект, ПараметрыФормы);
	РаботаСФайламиСлужебныйКлиент.ПоказатьВопросОбУстановкеРасширения1СПредприятия(Обработчик);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьФайл(Команда)
	
	РаботаСФайламиСлужебныйКлиент.ДобавитьФайлИзФайловойСистемы(Элементы.Папки.ТекущаяСтрока, ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьФайлПоШаблону(Команда)
	
	ПараметрыДобавления = Новый Структура;
	ПараметрыДобавления.Вставить("ОбработчикРезультата",                    Неопределено);
	ПараметрыДобавления.Вставить("ВладелецФайла",                           Элементы.Папки.ТекущаяСтрока);
	ПараметрыДобавления.Вставить("ФормаВладелец",                           ЭтотОбъект);
	ПараметрыДобавления.Вставить("НеОткрыватьКарточкуПослеСозданияИзФайла", Истина);
	РаботаСФайламиСлужебныйКлиент.ДобавитьНаОсновеШаблона(ПараметрыДобавления);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьФайлСоСканера(Команда)
	
	ПараметрыДобавления = РаботаСФайламиКлиент.ПараметрыДобавленияСоСканера();
	ПараметрыДобавления.ВладелецФайла  = Элементы.Папки.ТекущаяСтрока;
	ПараметрыДобавления.ФормаВладелец = ЭтотОбъект;
	РаботаСФайламиКлиент.ДобавитьСоСканера(ПараметрыДобавления);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьПапкуВыполнить()
	
	ПараметрыСозданияПапки = Новый Структура("Родитель", Элементы.Папки.ТекущаяСтрока);
	ОткрытьФорму("Справочник.ПапкиФайлов.ФормаОбъекта", ПараметрыСозданияПапки, Элементы.Папки);
	
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьИерархию(Команда)
	
	ИспользоватьИерархию = Не ИспользоватьИерархию;
	Если ИспользоватьИерархию И (Элементы.Список.ТекущиеДанные <> Неопределено) Тогда 
		ТекущаяСтрока = Неопределено;
		Элементы.Список.ТекущиеДанные.Свойство("ВладелецФайла", ТекущаяСтрока); 
		Элементы.Папки.ТекущаяСтрока = ТекущаяСтрока;
		Список.Параметры.УстановитьЗначениеПараметра("Владелец", ТекущаяСтрока);
	КонецЕсли;	
	УстановитьИерархию(ИспользоватьИерархию);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Редактировать(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
	РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Обработчик, Элементы.Список.ТекущаяСтрока);
	
КонецПроцедуры

&НаКлиенте
Функция ФайловыеКомандыДоступны()
	
	Возврат РаботаСФайламиСлужебныйКлиент.ФайловыеКомандыДоступны(Элементы);
	
КонецФункции

&НаКлиенте
Процедура ЗакончитьРедактирование(Команда)
	
	МассивФайлов = Новый Массив;
	Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл
		ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементСписка);
		
		Если НЕ ДанныеСтроки.ФайлРедактируется
			ИЛИ НЕ ДанныеСтроки.ФайлРедактируетТекущийПользователь Тогда
			Продолжить;
		КонецЕсли;
		МассивФайлов.Добавить(ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	Если МассивФайлов.Количество() > 1 Тогда
		ПараметрыФормы = Новый Структура;
		ПараметрыФормы.Вставить("МассивФайлов",                     МассивФайлов);
		ПараметрыФормы.Вставить("ВозможностьСоздаватьВерсииФайлов", Истина);
		ПараметрыФормы.Вставить("Редактирует",                      ДанныеСтроки.Редактирует);
		
		ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект);
	ИначеЕсли МассивФайлов.Количество() = 1 Тогда
		Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
		ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор);
		РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Занять(Команда)
	
	Если НЕ ФайловыеКомандыДоступны() Тогда
		Возврат;
	КонецЕсли;
	
	КоличествоФайлов = Элементы.Список.ВыделенныеСтроки.Количество();
	
	Если КоличествоФайлов = 1 Тогда
		Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
		РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, Элементы.Список.ТекущаяСтрока);
	ИначеЕсли КоличествоФайлов > 1 Тогда
		МассивФайлов = Новый Массив;
		Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл
			ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементСписка);
			
			Если ЗначениеЗаполнено(ДанныеСтроки.Редактирует) Тогда
				Продолжить;
			КонецЕсли;
			МассивФайлов.Добавить(ДанныеСтроки.Ссылка);
		КонецЦикла;
		Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект, МассивФайлов);
		РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, МассивФайлов);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Освободить(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	РаботаСФайламиСлужебныйКлиент.ОсвободитьФайлы(Элементы.Список);
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьИзменения(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
	
	РаботаСФайламиСлужебныйКлиент.СохранитьИзмененияФайлаСОповещением(
		Обработчик,
		Элементы.Список.ТекущаяСтрока,
		УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКаталогФайла(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(Элементы.Список.ТекущаяСтрока,
		Неопределено, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла);
	РаботаСФайламиКлиент.ОткрытьКаталогФайла(ДанныеФайла);
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьКак(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляСохранения(
		Элементы.Список.ТекущаяСтрока, , УникальныйИдентификатор);
	РаботаСФайламиСлужебныйКлиент.СохранитьКак(Неопределено, ДанныеФайла, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьИзФайлаНаДиске(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(Элементы.Список.ТекущаяСтрока);
	РаботаСФайламиСлужебныйКлиент.ОбновитьИзФайлаНаДискеСОповещением(Неопределено, ДанныеФайла, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокПередНачаломИзменения(Элемент, Отказ)
	Отказ = Истина;
	
	ПараметрыОткрытияФормы = Новый Структура("Ключ, ПараметрыОтправки", Элемент.ТекущаяСтрока, ПараметрыОтправки);
	ОткрытьФорму("Справочник.Файлы.ФормаОбъекта", ПараметрыОткрытияФормы);
	
КонецПроцедуры

&НаКлиенте
Процедура ПеренестиВПапку(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("Заголовок",    НСтр("ru = 'Выбор папки'"));
	ПараметрыФормы.Вставить("ТекущаяПапка", Элементы.Папки.ТекущаяСтрока);
	ПараметрыФормы.Вставить("РежимВыбора",  Истина);
	
	ОткрытьФорму("Справочник.ПапкиФайлов.ФормаВыбора", ПараметрыФормы, ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подписать(Команда)
	
	Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
		Возврат;
	КонецЕсли;
	
	ОписаниеОповещения      = Новый ОписаниеОповещения("ПодписатьЗавершение", ЭтотОбъект);
	ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения);
	
	МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
	ПараметрыПодписания = МодульЭлектроннаяПодписьКлиент.НовыйТипПодписи();
	ПараметрыПодписания.ВыборДоверенности = Истина;

	РаботаСФайламиКлиент.ПодписатьФайл(Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ДополнительныеПараметры,
		ПараметрыПодписания);
	
КонецПроцедуры

&НаКлиенте
Процедура Зашифровать(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ОбъектСсылка = Элементы.Список.ТекущаяСтрока;
	ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ОбъектСсылка);
	
	ПараметрыОбработчика = Новый Структура;
	ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
	ПараметрыОбработчика.Вставить("ОбъектСсылка", ОбъектСсылка);
	Обработчик = Новый ОписаниеОповещения("ЗашифроватьПослеШифрованияНаКлиенте", ЭтотОбъект, ПараметрыОбработчика);
	
	РаботаСФайламиСлужебныйКлиент.Зашифровать(Обработчик, ДанныеФайла, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура Расшифровать(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ОбъектСсылка = Элементы.Список.ТекущаяСтрока;
	ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ОбъектСсылка);
	
	ПараметрыОбработчика = Новый Структура;
	ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
	ПараметрыОбработчика.Вставить("ОбъектСсылка", ОбъектСсылка);
	Обработчик = Новый ОписаниеОповещения("РасшифроватьПослеРасшифровкиНаКлиенте", ЭтотОбъект, ПараметрыОбработчика);
	
	РаботаСФайламиСлужебныйКлиент.Расшифровать(
		Обработчик,
		ДанныеФайла.Ссылка,
		УникальныйИдентификатор,
		ДанныеФайла);
	
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьПодписьИзФайла(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	РаботаСФайламиСлужебныйКлиент.ДобавитьПодписьИзФайла(
		Элементы.Список.ТекущаяСтрока,
		УникальныйИдентификатор,
		Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект));
	
КонецПроцедуры

&НаКлиенте
Процедура СохранитьВместеСПодписью(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	РаботаСФайламиСлужебныйКлиент.СохранитьФайлВместеСПодписью(
		Элементы.Список.ТекущаяСтрока, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
	
	Элементы.Папки.Обновить();
	Элементы.Список.Обновить();
	
	ПодключитьОбработчикОжидания("УстановитьДоступностьКомандПриИзмененииПапки", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура Отправить(Команда)
	
	ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, ТекущиеДанные.Ссылка, 
		УникальныйИдентификатор);
	РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(
		Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура Печать(Команда)
	
	Если Не ФайловыеКомандыДоступны() Тогда 
		Возврат;
	КонецЕсли;
	
	ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
	Если ВыделенныеСтроки.Количество() > 0 Тогда
		РаботаСФайламиКлиент.НапечататьФайлы(ВыделенныеСтроки, УникальныйИдентификатор);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПечатьСоШтампом(Команда)

	ТекущиеДанные = ТекущиеДанные();
	Если ТекущиеДанные = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	РаботаСФайламиСлужебныйКлиент.НапечататьФайлСоШтампом(ТекущиеДанные.Ссылка, УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте
Процедура Предпросмотр(Команда)
	
	Предпросмотр = Не Предпросмотр;
	Элементы.Предпросмотр.Пометка = Предпросмотр;
	УстановитьВидимостьПредпросмотра(Предпросмотр);
	СохранитьВариантПредпросмотра("Файлы", Предпросмотр);
	
#Если ВебКлиент Тогда
	ОбновитьПредпросмотр();
#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура НастроитьСинхронизацию(Команда)
	
	НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(Элементы.Папки.ТекущиеДанные.Ссылка);
	
	Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда
		ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов");
		ПараметрыЗаписи = Новый Массив(1);
		ПараметрыЗаписи[0] = НастройкаСинхронизации;
		
		КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи);
	
		ПараметрыЗаписи = Новый Структура;
		ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи);
	Иначе
		НастройкаСинхронизации.Вставить("ЭтоФайл", Истина);
		ПараметрыЗаписи = НастройкаСинхронизации;
	КонецЕсли;
	
	ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект);
	
КонецПроцедуры

&НаКлиенте
Процедура Сравнить(Команда)

	Если Элементы.Список.ВыделенныеСтроки.Количество() <> 2 Тогда
		Возврат;
	КонецЕсли;

	ПервыйФайл = Элементы.Список.ВыделенныеСтроки[0];
	ВторойФайл = Элементы.Список.ВыделенныеСтроки[1];
	Расширение = НРег(Элементы.Список.ТекущиеДанные.Расширение);
	РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, ПервыйФайл, ВторойФайл, Расширение);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьСлужебныеФайлы(Команда)
	
	Элементы.ПоказыватьСлужебныеФайлы.Пометка = 
		РаботаСФайламиСлужебныйКлиент.ПоказыватьСлужебныеФайлыНажатие(Список);
	
КонецПроцедуры

&НаКлиенте
Процедура Удалить(Команда)
	
	ВыделенныеСтроки = ВыделенныеСтроки();
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПослеУдаленияДанных", ЭтотОбъект);
	РаботаСФайламиСлужебныйКлиент.УдалитьДанныеФайлов(ОписаниеОповещения, ВыделенныеСтроки, УникальныйИдентификатор);
	
КонецПроцедуры

&НаКлиенте
Процедура ПоказыватьПомеченныеФайлы(Команда)
	
	РаботаСФайламиСлужебныйКлиент.ИзменитьОтборПоПометкеУдаления(Список.Отбор, Элементы.ПоказыватьПомеченныеФайлы);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаКлиенте
Процедура ИмпортФайловПослеУстановкиРасширения(Результат, ПараметрыВыполнения) Экспорт
	Если НЕ Результат Тогда
		РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено);
		Возврат;
	КонецЕсли;
	
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	ДиалогОткрытияФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы());
	ДиалогОткрытияФайла.МножественныйВыбор = Истина;
	ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'");
	Если Не ДиалогОткрытияФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	
	МассивИменФайлов = Новый Массив;
	Для Каждого ИмяФайла Из ДиалогОткрытияФайла.ВыбранныеФайлы Цикл
		МассивИменФайлов.Добавить(ИмяФайла);
	КонецЦикла;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ПапкаДляДобавления", Элементы.Папки.ТекущаяСтрока);
	ПараметрыФормы.Вставить("МассивИменФайлов",   МассивИменФайлов);
	
	ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаФайлов", ПараметрыФормы);
КонецПроцедуры

&НаКлиенте
Процедура ИмпортПапкиПослеУстановкиРасширения(Результат, ПараметрыВыполнения) Экспорт
	
	Если НЕ Результат Тогда
		РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено);
		Возврат;
	КонецЕсли;
	
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	ДиалогОткрытияФайла.ПолноеИмяФайла = "";
	ДиалогОткрытияФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы());
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'");
	Если Не ДиалогОткрытияФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ПапкаДляДобавления", Элементы.Папки.ТекущаяСтрока);
	ПараметрыФормы.Вставить("КаталогНаДиске",     ДиалогОткрытияФайла.Каталог);
	
	ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаПапки", ПараметрыФормы);

КонецПроцедуры

&НаКлиенте
Процедура ЭкспортПапкиПослеУстановкиРасширения(Результат, ПараметрыФормы) Экспорт
	
	Если НЕ Результат Тогда
		РаботаСФайламиСлужебныйКлиент.ПоказатьПредупреждениеОНеобходимостиРасширения1СПредприятия(Неопределено);
		Возврат;
	КонецЕсли;
	
	ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеПапки", ПараметрыФормы);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗашифроватьПослеШифрованияНаКлиенте(Результат, ПараметрыВыполнения) Экспорт
	Если Не Результат.Успех Тогда
		Возврат;
	КонецЕсли;
	
	ИмяРабочегоКаталога = РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя();
	
	МассивФайловВРабочемКаталогеДляУдаления = Новый Массив;
	
	ЗашифроватьСервер(
		Результат.МассивДанныхДляЗанесенияВБазу,
		Результат.МассивОтпечатков,
		МассивФайловВРабочемКаталогеДляУдаления,
		ИмяРабочегоКаталога,
		ПараметрыВыполнения.ОбъектСсылка);
	
	РаботаСФайламиСлужебныйКлиент.ИнформироватьОШифровании(
		МассивФайловВРабочемКаталогеДляУдаления,
		ПараметрыВыполнения.ДанныеФайла.Владелец,
		ПараметрыВыполнения.ОбъектСсылка);
	
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт
	
	Элементы.Список.Обновить();
	
КонецПроцедуры

&НаСервере
Процедура ЗашифроватьСервер(Знач МассивДанныхДляЗанесенияВБазу, Знач МассивОтпечатков, 
	Знач МассивФайловВРабочемКаталогеДляУдаления, Знач ИмяРабочегоКаталога, Знач ОбъектСсылка)
	
	ПараметрыЗаписиИнформацииОШифровании = РаботаСФайламиСлужебный.ПараметрыЗаписиИнформацииОШифровании();
	ПараметрыЗаписиИнформацииОШифровании.ИмяРабочегоКаталога = ИмяРабочегоКаталога;
	ПараметрыЗаписиИнформацииОШифровании.МассивДанныхДляЗанесенияВБазу = МассивДанныхДляЗанесенияВБазу;
	ПараметрыЗаписиИнформацииОШифровании.МассивОтпечатков = МассивОтпечатков;
	ПараметрыЗаписиИнформацииОШифровании.МассивФайловВРабочемКаталогеДляУдаления = МассивФайловВРабочемКаталогеДляУдаления;
		
	РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании(
		ОбъектСсылка, ПараметрыЗаписиИнформацииОШифровании);
	
КонецПроцедуры

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

&НаСервере
Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, 
	ИмяРабочегоКаталога, ОбъектСсылка)
	
	ПараметрыЗаписиИнформацииОШифровании = РаботаСФайламиСлужебный.ПараметрыЗаписиИнформацииОШифровании();
	ПараметрыЗаписиИнформацииОШифровании.Зашифровать = Ложь;
	ПараметрыЗаписиИнформацииОШифровании.ИмяРабочегоКаталога = ИмяРабочегоКаталога;
	ПараметрыЗаписиИнформацииОШифровании.МассивДанныхДляЗанесенияВБазу = МассивДанныхДляЗанесенияВБазу;
	
	РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании(
		ОбъектСсылка, ПараметрыЗаписиИнформацииОШифровании);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодписатьЗавершение(Результат, ПараметрыВыполнения) Экспорт
	
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьКомандПриИзмененииПапки()
	
	Если Элементы.Папки.ТекущаяСтрока = Неопределено Или Элементы.Папки.ТекущаяСтрока.Пустая() Тогда
		
		Элементы.ФормаПодменюСоздать.Доступность = Ложь;
		Элементы.ФормаСоздатьИзФайла.Доступность = Ложь;
		Элементы.ФормаСоздатьИзШаблона.Доступность = Ложь;
		Элементы.ФормаСоздатьСоСканера.Доступность = Ложь;
		
		Элементы.ФормаСкопировать.Доступность = Ложь;
		Элементы.СписокКонтекстноеМенюСкопировать.Доступность = Ложь;
		
		Элементы.ФормаУстановитьПометкуУдаления.Доступность = Ложь;
		Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Ложь;
		
		Элементы.СписокКонтекстноеМенюСоздать.Доступность = Ложь;
		
		Элементы.ФормаИмпортФайлов.Доступность = Ложь;
		Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = Ложь;
		
		Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = Ложь;
		
		Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = Ложь;
		Элементы.ПапкиКонтекстноеМенюУровеньВверх.Доступность = Ложь;
		Элементы.ПапкиКонтекстноеМенюПеренестиЭлемент.Доступность = Ложь;
		Элементы.ПапкиКонтекстноеМенюЭкспортПапки.Доступность = Ложь;
		Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Доступность = Ложь;
		Если ДоступнаКомандаНастройкиПрав Тогда
			Элементы.ПапкиКонтекстноеМенюНастроитьПрава.Доступность = Ложь;
		КонецЕсли;
	Иначе
		Если Элементы.Папки.ТекущаяСтрока <> ТекущаяПапка Тогда
			ТекущаяПапка = Элементы.Папки.ТекущаяСтрока;
			ЗаполнитьЗначенияСвойств(ЭтотОбъект, НастройкиПравПапки(Элементы.Папки.ТекущаяСтрока));
			Элементы.ФормаСоздатьПапку.Доступность = ИзменениеПапок;
			Элементы.ПапкиКонтекстноеМенюСоздать.Доступность = ИзменениеПапок;
			Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = ИзменениеПапок;
			Элементы.ПапкиКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеПапок;
			Элементы.ПапкиКонтекстноеМенюПеренестиЭлемент.Доступность = ИзменениеПапок;
			Если ДоступнаКомандаНастройкиПрав Тогда
				Элементы.ПапкиКонтекстноеМенюНастроитьПрава.Доступность = УправлениеПравами;
			КонецЕсли;
		КонецЕсли;
		
		Элементы.ФормаПодменюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаСоздатьИзФайла.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаСоздатьИзШаблона.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаСоздатьСоСканера.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюСоздать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ФормаСоздатьПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаИмпортПапки.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ПапкиКонтекстноеМенюСкопировать.Доступность = Элементы.ФормаСкопировать.Доступность;
	
		Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ФормаУстановитьПометкуУдаления.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ФормаСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюСкопировать.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ФормаУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ПометкаУдаленияФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ФормаИмпортФайлов.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.СписокКонтекстноеМенюИмпортФайлов.Доступность = ДобавлениеФайлов  И Не ФайлыРедактируютсяВОблачномСервисе;
		
		Элементы.ПапкиКонтекстноеМенюИмпортПапки.Доступность = ДобавлениеФайлов И Не ФайлыРедактируютсяВОблачномСервисе;
		Элементы.ПапкиКонтекстноеМенюУровеньВверх.Доступность = Истина;
		Элементы.ПапкиКонтекстноеМенюЭкспортПапки.Доступность = Истина;
		Элементы.ПапкиКонтекстноеМенюНастроитьСинхронизацию.Доступность = Истина;
		
	КонецЕсли;
	
	Если Элементы.Папки.ТекущаяСтрока <> Неопределено Тогда
		ПодключитьОбработчикОжидания("ОбработкаОжиданияПапкиПриАктивизацииСтроки", 0.2, Истина);
	КонецЕсли; 
	
КонецПроцедуры

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

&НаКлиенте
Процедура УстановитьЗаголовокДереваПапок()
	
	Элементы.Папки.Заголовок = ?(Элементы.Папки.ТекущиеДанные = Неопределено, "",
		Элементы.Папки.ТекущиеДанные.Наименование);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция СведенияОСинхронизации(Знач ВладелецФайлов)
	
	Возврат РаботаСФайламиСлужебный.СведенияОСинхронизации(ВладелецФайлов);
	
КонецФункции

&НаКлиенте
Процедура ОбработкаОжиданияПапкиПриАктивизацииСтроки()
	
	Если Элементы.Папки.ТекущаяСтрока <> Список.Параметры.Элементы.Найти("Владелец").Значение Тогда
		ОбновитьИСохранитьПараметрыСпискаФайлов();
	Иначе
		ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд();
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция НастройкиПравПапки(Папка)
	
	НастройкиПрав = Новый Структура;
	
	Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		Значение = ЗначениеЗаполнено(Папка);
		НастройкиПрав.Вставить("ИзменениеПапок", Истина);
		НастройкиПрав.Вставить("ИзменениеФайлов", Значение);
		НастройкиПрав.Вставить("ДобавлениеФайлов", Значение);
		НастройкиПрав.Вставить("ПометкаУдаленияФайлов", Значение);
		НастройкиПрав.Вставить("УправлениеПравами", Значение);
		Возврат НастройкиПрав;
	КонецЕсли;
	
	МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
	
	НастройкиПрав.Вставить("ИзменениеПапок",
		МодульУправлениеДоступом.ЕстьПраво("ИзменениеПапок", Папка));
	
	НастройкиПрав.Вставить("ИзменениеФайлов",
		МодульУправлениеДоступом.ЕстьПраво("ИзменениеФайлов", Папка));
	
	НастройкиПрав.Вставить("ДобавлениеФайлов",
		МодульУправлениеДоступом.ЕстьПраво("ДобавлениеФайлов", Папка));
	
	НастройкиПрав.Вставить("ПометкаУдаленияФайлов",
		МодульУправлениеДоступом.ЕстьПраво("ПометкаУдаленияФайлов", Папка));
		
	НастройкиПрав.Вставить("УправлениеПравами",
		МодульУправлениеДоступом.ЕстьПраво("УправлениеПравами", Папка));
	
	Возврат НастройкиПрав;
	
КонецФункции

&НаСервереБезКонтекста
Функция ДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина)
	
	Возврат РаботаСФайлами.ДанныеФайла(ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные);
	
КонецФункции

&НаКлиенте
Процедура ОбработкаОжиданияУстановитьДоступностьФайловыхКоманд()
	
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьДоступностьФайловыхКоманд(Результат = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт
	
	ТекущиеДанные = Элементы.Список.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено И Элементы.Список.ТекущаяСтрока <> Неопределено
		И ТипЗнч(Элементы.Список.ТекущаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
		УстановитьДоступностьКоманд(ТекущиеДанные, Элементы.Список.ВыделенныеСтроки.Количество() > 1);
	Иначе
		СделатьКомандыНедоступными();
	КонецЕсли;
	
	ПодключитьОбработчикОжидания("ОбновитьПредпросмотр", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура СделатьКомандыНедоступными()
	
	Элементы.ФормаЗакончитьРедактирование.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюЗакончитьРедактирование.Доступность = Ложь;
	
	Элементы.ФормаСохранитьИзменения.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюСохранитьИзменения.Доступность = Ложь;
	
	Элементы.ФормаОсвободить.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюОсвободить.Доступность = Ложь;
	
	Элементы.ФормаЗанять.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюЗанять.Доступность = Ложь;
	
	Элементы.ФормаРедактировать.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюРедактировать.Доступность = Ложь;
	
	Элементы.ФормаПеренестиВПапку.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = Ложь;
	
	Элементы.ФормаПодписать.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюПодписать.Доступность = Ложь;
	
	Элементы.ФормаСохранитьВместеСПодписью.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = Ложь;
	
	Элементы.ФормаЗашифровать.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = Ложь;
	
	Элементы.ФормаРасшифровать.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = Ложь;
	
	Элементы.ФормаДобавитьПодписьИзФайла.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюДобавитьПодписьИзФайла.Доступность = Ложь;
	
	Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюОбновитьИзФайлаНаДиске.Доступность = Ложь;
	
	Элементы.ФормаСохранитьКак.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюСохранитьКак.Доступность = Ложь;
	
	Элементы.ФормаОткрытьКаталогФайла.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюОткрытьКаталогФайла.Доступность = Ложь;
	
	Элементы.ФормаОткрыть.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Ложь;
	
	Элементы.Печать.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюПечать.Доступность = Ложь;
	
	Элементы.Отправить.Доступность = Ложь;
	
	Элементы.ФормаУстановитьПометкуУдаления.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = Ложь;
	
	Элементы.ФормаУдалить.Доступность = Ложь;
	Элементы.СписокКонтекстноеМенюУдалить.Доступность = Ложь;
	
	Элементы.СписокКонтекстноеМенюСравнить.Видимость = Ложь;	
	
КонецПроцедуры

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

	Элементы.ФормаПеренестиВПапку.Доступность                 = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюПеренестиВПапку.Доступность = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаПодписать.Доступность                 = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюПодписать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаСохранитьВместеСПодписью.Доступность                 = ПодписанЭП;
	Элементы.СписокКонтекстноеМенюСохранитьВместеСПодписью.Доступность = ПодписанЭП;
	
	Элементы.ФормаЗашифровать.Доступность                 = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован И НЕ Служебный И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюЗашифровать.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И НЕ Зашифрован И НЕ Служебный И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаРасшифровать.Доступность                 = ИзменениеФайлов И Зашифрован И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюРасшифровать.Доступность = ИзменениеФайлов И Зашифрован И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаДобавитьПодписьИзФайла.Доступность                 = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюДобавитьПодписьИзФайла.Доступность = ИзменениеФайлов И Не ЗначениеЗаполнено(Редактирует) И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаОбновитьИзФайлаНаДиске.Доступность                 = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе;
	Элементы.СписокКонтекстноеМенюОбновитьИзФайлаНаДиске.Доступность = ИзменениеФайлов И Не ПодписанЭП И Не ФайлыРедактируютсяВОблачномСервисе;
	
	Элементы.ФормаСохранитьКак.Доступность                 = Истина;
	Элементы.СписокКонтекстноеМенюСохранитьКак.Доступность = Истина;
	
	Элементы.ФормаОткрытьКаталогФайла.Доступность                 = Истина;
	Элементы.СписокКонтекстноеМенюОткрытьКаталогФайла.Доступность = Истина;
	
	Элементы.ФормаОткрыть.Доступность                 = Истина;
	Элементы.СписокКонтекстноеМенюОткрыть.Доступность = Истина;
	
	Элементы.Печать.Доступность                      = Истина;
	Элементы.СписокКонтекстноеМенюПечать.Доступность = Истина;

	Элементы.ПечатьСоШтампом.Видимость = ЕстьЭлектроннаяПодпись
		И (ДанныеКоманд.Расширение = "mxl") Или (ДанныеКоманд.Расширение = "docx")
		И ДанныеКоманд.ПодписанЭП;
	
	Элементы.Отправить.Доступность                      = Истина;
	Элементы.СписокКонтекстноеМенюОтправить.Доступность = Истина;
	
	Элементы.ФормаУстановитьПометкуУдаления.Доступность = ИзменениеФайлов;
	Элементы.СписокКонтекстноеМенюУстановитьПометкуУдаления.Доступность = ИзменениеФайлов;
	
	Элементы.ФормаУдалить.Доступность = ИзменениеФайлов
		И АвторТекущийПользователь
		И Не ЗначениеЗаполнено(Редактирует)
		И Не ФайлыРедактируютсяВОблачномСервисе;
		
	Элементы.СписокКонтекстноеМенюУдалить.Доступность = ИзменениеФайлов
		И АвторТекущийПользователь
		И Не ЗначениеЗаполнено(Редактирует)
		И Не ФайлыРедактируютсяВОблачномСервисе;
		
	Элементы.СписокКонтекстноеМенюСравнить.Видимость = ВыделеноНесколькоСтрок;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьИерархию(Отметка)
	
	Если Отметка = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	Элементы.ФормаИспользоватьИерархию.Пометка = Отметка;
	Если Отметка = Истина Тогда 
		Элементы.Папки.Видимость = Истина;
	Иначе
		Элементы.Папки.Видимость = Ложь;
	КонецЕсли;
	Список.Параметры.УстановитьЗначениеПараметра("ИспользоватьИерархию", Отметка);
	
КонецПроцедуры

&НаКлиенте
Процедура СписокВыборПослеВыбораРежимаРедактирования(Результат, ПараметрыВыполнения) Экспорт
	Если Результат = "Редактировать" Тогда
		Обработчик = Новый ОписаниеОповещения("СписокВыборПослеРедактированияФайла", ЭтотОбъект, ПараметрыВыполнения);
		РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Обработчик, ПараметрыВыполнения.ДанныеФайла);
	ИначеЕсли Результат = "Открыть" Тогда
		РаботаСФайламиКлиент.ОткрытьФайл(ПараметрыВыполнения.ДанныеФайла, Ложь);
	КонецЕсли;
КонецПроцедуры

// Параметры:
//   ПараметрыВыполнения - Структура:
//     * ДанныеФайла - см. РаботаСФайлами.ДанныеФайла
//
&НаКлиенте
Процедура СписокВыборПослеРедактированияФайла(Результат, ПараметрыВыполнения) Экспорт
	
	ОповеститьОбИзменении(ПараметрыВыполнения.ДанныеФайла.Ссылка);
	
	УстановитьДоступностьФайловыхКоманд();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриИзмененияИспользованияПодписанияИлиШифрования()
	
	ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененияИспользованияПодписанияИлиШифрованияНаСервере()
	
	РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект);
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр)
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, Знач ФайлыДляОтправки, Знач ВладелецФайлов, Знач УникальныйИдентификатор)
	ИнтеграцияПодсистемБСП.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор);
	РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр)
	
	Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр;
	Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр;
	
КонецПроцедуры

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

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

&НаСервере
Процедура ОбновитьИСохранитьПараметрыСпискаФайлов()
	
	ОбщегоНазначения.ХранилищеНастроекДанныхФормСохранить(
		"Файлы", 
		"ТекущаяПапка", 
		Элементы.Папки.ТекущаяСтрока);
	
	Список.Параметры.УстановитьЗначениеПараметра("Владелец", Элементы.Папки.ТекущаяСтрока);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ДанныеОтбораЖурналаРегистрации(УчетнаяЗаписьСервис)
	Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(УчетнаяЗаписьСервис);
КонецФункции

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
	МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
	МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
	МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры

// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаКлиенте
Функция ТекущиеДанные()
	Результат = Неопределено;
	Если Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) Тогда
	ИначеЕсли Элементы.Список.ТекущиеДанные.ВладелецФайла = ТекущаяПапка Тогда
		Результат = Элементы.Список.ТекущиеДанные;
	КонецЕсли;
	Возврат Результат;
КонецФункции

&НаКлиенте
Функция ВыделенныеСтроки()
	ВыделенныеСтроки = Новый Массив;
	
	Для Каждого ВыделеннаяСтрока Из Элементы.Список.ВыделенныеСтроки Цикл
		Если ТипЗнч(ВыделеннаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
			ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
		КонецЕсли;
	КонецЦикла;
	
	Возврат ВыделенныеСтроки
	
КонецФункции

#КонецОбласти
