#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ВладелецФайла = Параметры.ВладелецФайла;
ТекущаяСсылка = Параметры.ТекущаяСтрока;
СписокОткрытИзКарточкиФайла = ЗначениеЗаполнено(ТекущаяСсылка);
Элементы.ВладелецФайла.Видимость = СписокОткрытИзКарточкиФайла И Не Параметры.СкрыватьВладельца;
Если СписокОткрытИзКарточкиФайла И ВладелецФайла = Неопределено Тогда
ВладелецФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущаяСсылка, "ВладелецФайла");
Параметры.ВладелецФайла = ВладелецФайла;
КонецЕсли;
Если Параметры.ВладелецФайла = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть
|только в форме объекта-владельца.'");
КонецЕсли;
ТипВладельца = ТипЗнч(Параметры.ВладелецФайла);
Если Метаданные.ОпределяемыеТипы.ВладелецФайлов.Тип.СодержитТип(ТипВладельца) Тогда
ПолноеИмяВладельца = Метаданные.НайтиПоТипу(ТипВладельца).Имя;
Если Метаданные.Справочники.Найти(ПолноеИмяВладельца + РаботаСФайламиСлужебный.СуффиксСправочникаПрисоединенныеФайлы()) = Неопределено Тогда
ЭтоВладелецЭлементовСправочникаФайлы = Истина;
КонецЕсли;
КонецЕсли;
ПоложениеВКоманднойПанели = ?(Параметры.ПростаяФорма, ПоложениеКнопкиВКоманднойПанели.ВДополнительномПодменю,
ПоложениеКнопкиВКоманднойПанели.Авто);
Элементы.ФормаРедактировать.ПоложениеВКоманднойПанели = ПоложениеВКоманднойПанели;
Элементы.ФормаОткрыть.ПоложениеВКоманднойПанели = ПоложениеВКоманднойПанели;
Элементы.ФормаЗакончитьРедактирование.ПоложениеВКоманднойПанели = ПоложениеВКоманднойПанели;
Элементы.СписокВажныеРеквизиты.Видимость = Не Параметры.ПростаяФорма;
Предпросмотр = Параметры.ПростаяФорма;
ПоказыватьКолонкуРазмер = РаботаСФайламиСлужебный.ПоказыватьКолонкуРазмер();
Если Не ПоказыватьКолонкуРазмер Тогда
Элементы.СписокРазмер.Видимость = Ложь;
КонецЕсли;
Если Не ПустаяСтрока(Параметры.ЗаголовокФормы) Тогда
Заголовок = Параметры.ЗаголовокФормы;
ИначеЕсли Не СписокОткрытИзКарточкиФайла Тогда
Заголовок = Заголовок + ": " + ОбщегоНазначения.ПредметСтрокой(ВладелецФайла);
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ПараметрыОтправки) Тогда
ПараметрыОтправки = Параметры.ПараметрыОтправки;
Иначе
ПараметрыОтправки = РаботаСФайламиСлужебный.ПодготовитьСтруктуруПараметровОтправки();
КонецЕсли;
Если Параметры.РежимВыбора Тогда
СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор");
РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
Заголовок = НСтр("ru = 'Выбор присоединенного файла'");
Иначе
Элементы.Список.РежимВыбора = Ложь;
КонецЕсли;
НастройкиФайлов = РаботаСФайламиСлужебный.НастройкиФайлов();
ИмяСправочникаХранилищаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(Параметры.ВладелецФайла);
ТипСправочникаСФайлами = Тип("СправочникСсылка." + ИмяСправочникаХранилищаФайлов);
МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами);
ИмяСправочникаХранилищаВерсийФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияВерсийФайлов(Параметры.ВладелецФайла);
ЕстьГруппыФайлов = МетаданныеСправочникаСФайлами.Иерархический;
ЕстьПравоИспользоватьШаблоны = ПравоДоступа("Просмотр", Метаданные.Справочники.Файлы)
И ПравоДоступа("Просмотр", Метаданные.Справочники.ПапкиФайлов);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
ЕстьПравоИспользоватьШаблоны = ЕстьПравоИспользоватьШаблоны
И МодульУправлениеДоступом.ЕстьПраво("Чтение", Справочники.ПапкиФайлов.Шаблоны);
КонецЕсли;
Если НЕ ЕстьПравоИспользоватьШаблоны Или НастройкиФайлов.НеСоздаватьФайлыПоШаблону.Найти(Метаданные.НайтиПоТипу(ТипЗнч(ВладелецФайла))) <> Неопределено Тогда
Элементы.ДобавитьФайлПоШаблону.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюДобавитьФайлПоШаблону.Видимость = Ложь;
КонецЕсли;
ЕстьВерсииФайлов = ЭтоВладелецЭлементовСправочникаФайлы;
Если ТипЗнч(Пользователи.АвторизованныйПользователь()) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда
РаботаСФайламиСлужебный.ИзменитьФормуДляВнешнегоПользователя(ЭтотОбъект, Истина);
КонецЕсли;
ЕстьРеквизитСлужебный = РаботаСФайламиСлужебный.ЕстьРеквизитСлужебный(ИмяСправочникаХранилищаФайлов);
НастроитьДинамическийСписок();
ВывестиУведомлениеЕслиМногоГрупп(МетаданныеСправочникаСФайлами);
Если Не ЕстьГруппыФайлов Тогда
СкрытьКнопкиСозданияГруппы();
КонецЕсли;
ЕстьПравоДобавления = Истина;
Если НЕ ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами) Тогда
СкрытьКнопкиДобавления();
ЕстьПравоДобавления = Ложь;
КонецЕсли;
ИменаЭлементовКнопокФормы = ОпределитьИменаЭлементовКнопокФормы();
ТолькоПросмотр = Не ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами);
Если ТолькоПросмотр Тогда
СкрытьКнопкиИзменения();
КонецЕсли;
ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере();
ИспользоватьПредпросмотр = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(ТипСправочникаСФайлами, "Предпросмотр");
Если ИспользоватьПредпросмотр <> Неопределено Тогда
Предпросмотр = ИспользоватьПредпросмотр;
КонецЕсли;
Элементы.АдресДанныхФайла.Видимость = Предпросмотр;
Элементы.Предпросмотр.Пометка = Предпросмотр;
РасширенияПоддерживающиеПредпросмотр = РаботаСФайламиСлужебный.СписокРасширенийДляПредпросмотра();
ОбновитьПояснениеОблачногоСервиса();
Элементы.НастроитьСинхронизацию.Видимость = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиСинхронизацииФайлов);
ДоступнаПечатьСоШтампом = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
МодульЭлектроннаяПодпись = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодпись");
МодульЭлектроннаяПодписьСлужебный = ОбщегоНазначения.ОбщийМодуль("ЭлектроннаяПодписьСлужебный");
ДоступнаПечатьСоШтампом = МодульЭлектроннаяПодпись.ИспользоватьЭлектронныеПодписи()
И МодульЭлектроннаяПодписьСлужебный.ДоступнаЭлектроннаяПодпись(ТипСправочникаСФайлами);
КонецЕсли;
Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом;
Элементы.СравнитьФайлы.Видимость = Не ОбщегоНазначения.ЭтоLinuxКлиент() И Не ОбщегоНазначения.ЭтоВебКлиент();
Элементы.Отправить.Видимость = ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями");
ЗапрещенныеРасширения = РаботаСФайламиСлужебный.СписокЗапрещенныхРасширений();
Элементы.ПоказыватьСлужебныеФайлы.Видимость = ЕстьРеквизитСлужебный
И Пользователи.ЭтоПолноправныйПользователь();
УстановитьУсловноеОформление();
Если ЕстьРеквизитСлужебный Тогда
РаботаСФайламиСлужебный.ДобавитьОтборыВСписокФайлов(Список);
Иначе
РаботаСФайламиСлужебный.УстановитьОтборПоПометкеУдаления(Список.Отбор);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
ПараметрыРазмещения = МодульПодключаемыеКоманды.ПараметрыРазмещения();
Типы = Новый Массив;
Типы.Добавить(ТипСправочникаСФайлами);
ПараметрыРазмещения.Источники = Новый ОписаниеТипов(Типы);
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
КонецЕсли;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.ПодменюДобавить.Отображение = ОтображениеКнопки.Картинка;
Элементы.ДобавитьФайлСоСканера.Заголовок = НСтр("ru = 'С камеры устройства...'");
КонецЕсли;
РаботаСФайламиПереопределяемый.ПриСозданииФормыСпискаФайлов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ЕстьПравоДобавления Тогда
ДоступнаКомандаСканировать = РаботаСФайламиСлужебныйКлиент.ДоступноСканирование();
Элементы.ДобавитьФайлСоСканера.Видимость = ДоступнаКомандаСканировать;
Элементы.СписокКонтекстноеМенюДобавитьФайлСоСканера.Видимость = ДоступнаКомандаСканировать;
КонецЕсли;
УстановитьДоступностьФайловыхКоманд();
Если Элементы.ИнформационноеСообщение.Видимость
И Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда
Элементы.ИнформационноеСообщение.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ВРег(ИмяСобытия) = ВРег("Запись_НаборКонстант")
И (ВРег(Источник) = ВРег("ИспользоватьЭлектронныеПодписи")
Или ВРег(Источник) = ВРег("ИспользоватьШифрование")) Тогда
ПодключитьОбработчикОжидания("ПриИзмененииИспользованияПодписанияИлиШифрования", 0.3, Истина);
Возврат;
ИначеЕсли ИмяСобытия = "Запись_Файл" Тогда
Элементы.Список.Обновить();
Если Не ЗначениеЗаполнено(Источник)
Или (ТипЗнч(Источник) = Тип("Массив")
И Источник.Количество() = 0) Тогда
Возврат;
КонецЕсли;
СсылкаНаФайл = ?(ТипЗнч(Источник) = Тип("Массив"), Источник[0], Источник);
Если ТипЗнч(СсылкаНаФайл) <> ТипСправочникаСФайлами Тогда
Возврат;
КонецЕсли;
Если Параметр.ЭтоНовый = Истина Тогда
Элементы.Список.ТекущаяСтрока = СсылкаНаФайл;
УстановитьДоступностьФайловыхКоманд();
Иначе
ТекущиеДанные = ТекущиеДанные();
Если ФайловыеКомандыДоступны() И ТекущиеДанные <> Неопределено
И СсылкаНаФайл = ТекущиеДанные.Ссылка Тогда
УстановитьДоступностьФайловыхКоманд();
КонецЕсли;
КонецЕсли;
ИначеЕсли ИмяСобытия = "Запись_ПапкиФайлов" Тогда
Элементы.Список.Обновить();
УстановитьДоступностьФайловыхКоманд();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ДекорацияДатаСинхронизацииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "OpenJournal" Тогда
СтандартнаяОбработка = Ложь;
ПараметрыОтбора = ДанныеОтбораЖурналаРегистрации(УчетнаяЗапись);
ЖурналРегистрацииКлиент.ОткрытьЖурналРегистрации(ПараметрыОтбора, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыСписок
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Элементы.Список.РежимВыбора Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ТекущиеДанные = ТекущиеДанные();
Если Элементы.Список.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.ЭтоГруппа Тогда
ПоказатьЗначение(, ВыбраннаяСтрока);
Возврат;
КонецЕсли;
КакОткрывать = РаботаСФайламиСлужебныйКлиент.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши;
Если КакОткрывать = "ОткрыватьКарточку" Тогда
ПоказатьЗначение(, ВыбраннаяСтрока);
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВыбраннаяСтрока,
Неопределено, УникальныйИдентификатор, Неопределено, ПредыдущийАдресФайла);
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
Обработчик = Новый ОписаниеОповещения("СписокВыборПослеВыбораРежимаРедактирования", ЭтотОбъект, ПараметрыОбработчика);
РаботаСФайламиСлужебныйКлиент.ВыбратьРежимИРедактироватьФайл(Обработчик, ДанныеФайла, Элементы.ФормаРедактировать.Доступность);
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
ОбновитьДоступностьФайловыхКоманд();
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
Если Копирование Тогда
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
ПараметрыФормы = Новый Структура;
ПараметрыФормы = Новый Структура("ЗначениеКопирования", ТекущиеДанные);
Если ТекущиеДанные.ЭтоГруппа Тогда
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы);
Иначе
РаботаСФайламиКлиент.СкопироватьФайл(ВладелецФайла, ТекущиеДанные.Ссылка, ПараметрыФормы);
КонецЕсли;
Иначе
ДобавитьФайл();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ОткрытьКарточкуФайла();
КонецПроцедуры
&НаКлиенте
Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
Если ФайлыРедактируютсяВОблачномСервисе Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ПараметрыПеретаскивания.Значение = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
ВладелецСправочникФайлы = Ложь;
МассивИменФайлов = Новый Массив;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив")
И ПараметрыПеретаскивания.Значение.Количество() > 0 Тогда
ПеретаскиваемыйФайл = ПараметрыПеретаскивания.Значение[0];
Если ТипЗнч(ПеретаскиваемыйФайл) <> Тип("Файл") Тогда
ВладелецФайловСовпадает = ВладелецФайловСовпадает(Параметры.ВладелецФайла, ПеретаскиваемыйФайл);
Если ЕстьГруппыФайлов И ТипЗнч(ПеретаскиваемыйФайл) = ТипСправочникаСФайлами
И ВладелецФайловСовпадает Тогда
Возврат;
КонецЕсли;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Для Каждого ПеретаскиваемыйФайл Из ПараметрыПеретаскивания.Значение Цикл
Если ТипЗнч(ПеретаскиваемыйФайл) = Тип("Файл")
И ПеретаскиваемыйФайл.ЭтоФайл() Тогда
МассивИменФайлов.Добавить(ПеретаскиваемыйФайл.ПолноеИмя);
ВладелецСправочникФайлы = Истина;
Иначе
МассивИменФайлов.Добавить(ПеретаскиваемыйФайл);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл")
И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда
СтандартнаяОбработка = Ложь;
МассивИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя);
ВладелецСправочникФайлы = Истина;
КонецЕсли;
Если МассивИменФайлов.Количество() > 0 Тогда
Если ВладелецСправочникФайлы = Истина Тогда
РаботаСФайламиСлужебныйКлиент.ДобавитьФайлыПеретаскиванием(
Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов);
Иначе
Действие = ?(ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование,
"Копирование", "Перемещение");
ПереместитьИлиСкопироватьПрисоединенныеФайлы(МассивИменФайлов, Параметры.ВладелецФайла, Действие);
ОповеститьОбИзменении(Параметры.ВладелецФайла);
ПараметрыОповещенияЗаписиФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОповещенияЗаписиФайла();
ПараметрыОповещенияЗаписиФайла.ЭтоНовый = Истина;
ПараметрыОповещенияЗаписиФайла.Владелец = Параметры.ВладелецФайла;
ПараметрыОповещенияЗаписиФайла.ВладелецФайла = ПараметрыОповещенияЗаписиФайла.Владелец;
Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла, МассивИменФайлов);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПриИзменении(Элемент)
ОповеститьОбИзменении(ВладелецФайла);
ПараметрыОповещенияЗаписиФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОповещенияЗаписиФайла("ДанныеФайлаИзменены");
Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла, Элемент.ВыделенныеСтроки);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
#Область ОбработчикиКомандФайлов
&НаКлиенте
Процедура Добавить(Команда)
ДобавитьФайл();
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайлПоШаблону(Команда)
ПараметрыДобавления = Новый Структура;
ПараметрыДобавления.Вставить("ОбработчикРезультата", Неопределено);
ПараметрыДобавления.Вставить("ВладелецФайла", ВладелецФайла);
ПараметрыДобавления.Вставить("ФормаВладелец", ЭтотОбъект);
ПараметрыДобавления.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов);
РаботаСФайламиСлужебныйКлиент.ДобавитьНаОсновеШаблона(ПараметрыДобавления);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайлСоСканера(Команда)
ЗначениеПараметраКД = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайлов"));
Если ЗначениеПараметраКД = Неопределено Тогда
ВладелецФайла = Неопределено;
Иначе
ВладелецФайла = ЗначениеПараметраКД.Значение;
КонецЕсли;
ПараметрыДобавления = РаботаСФайламиКлиент.ПараметрыДобавленияСоСканера();
ПараметрыДобавления.ВладелецФайла = ВладелецФайла;
ПараметрыДобавления.ФормаВладелец = ЭтотОбъект;
ПараметрыДобавления.НеОткрыватьКарточкуПослеСозданияИзФайла = Истина;
ПараметрыДобавления.ЭтоФайл = Ложь;
РаботаСФайламиКлиент.ДобавитьСоСканера(ПараметрыДобавления);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайлДляПросмотра(Команда)
ОткрытьФайл();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьКаталогФайла(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.Зашифрован Тогда
ОповеститьОбИзменении(ТекущиеДанные.Ссылка);
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
ФайлСсылка = ТекущиеДанные.Ссылка;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ФайлСсылка,
Неопределено, УникальныйИдентификатор, Неопределено, Неопределено);
РаботаСФайламиКлиент.ОткрытьКаталогФайла(ДанныеФайла);
КонецПроцедуры
&НаКлиенте
Процедура Обновить(Команда)
Элементы.Список.Обновить();
ПодключитьОбработчикОжидания("ОбновитьДоступностьФайловыхКоманд", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаНаДиске(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.Зашифрован Или ТекущиеДанные.ПодписанЭП Или ТекущиеДанные.ФайлРедактируется Тогда
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаИРабочийКаталог(Элементы.Список.ТекущаяСтрока);
РаботаСФайламиСлужебныйКлиент.ОбновитьИзФайлаНаДискеСОповещением(Неопределено, ДанныеФайла, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьКак(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.Зашифрован
ИЛИ (ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь) Тогда
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляСохранения(ТекущиеДанные.Ссылка, , УникальныйИдентификатор);
РаботаСФайламиСлужебныйКлиент.СохранитьКак(Неопределено, ДанныеФайла, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура Скопировать(Команда)
Элементы.Список.СкопироватьСтроку();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкуУдаления(Команда)
ВыделенныеСтроки = ВыделенныеСтроки();
Если ВыделенныеСтроки.Количество() = 0 Или Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список) Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ВыделенныеСтроки.Количество() = 1 Тогда
ШаблонВопроса = ?(ТекущиеДанные.ПометкаУдаления,
НСтр("ru = 'Снять с ""%1"" пометку на удаление?'"),
НСтр("ru = 'Пометить ""%1"" на удаление?'"));
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонВопроса, ТекущиеДанные.Наименование);
Иначе
ТекстВопроса = ?(ТекущиеДанные.ПометкаУдаления,
НСтр("ru = 'Снять с выбранных файлов пометку на удаление?'"),
НСтр("ru = 'Пометить выбранные файлы на удаление?'"));
КонецЕсли;
ДополнительныеПараметры = Новый Структура("Файлы", ВыделенныеСтроки);
Оповещение = Новый ОписаниеОповещения("УстановитьПометкуУдаленияЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьСвойстваФайла(Команда)
ОткрытьКарточкуФайла();
КонецПроцедуры
&НаКлиенте
Процедура Отправить(Команда)
ПриОтправкеФайловПочтой(ПараметрыОтправки, Элементы.Список.ВыделенныеСтроки, ВладелецФайла, УникальныйИдентификатор);
РаботаСФайламиСлужебныйКлиент.ОтправитьФайлыПоПочте(
Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор, ПараметрыОтправки);
КонецПроцедуры
&НаКлиенте
Процедура Печать(Команда)
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество() > 0 Тогда
РаботаСФайламиКлиент.НапечататьФайлы(ВыделенныеСтроки, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПечатьСоШтампом(Команда)
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.НапечататьФайлСоШтампом(ТекущиеДанные.Ссылка, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура Предпросмотр(Команда)
Предпросмотр = Не Предпросмотр;
Элементы.Предпросмотр.Пометка = Предпросмотр;
УстановитьВидимостьПредпросмотра(Предпросмотр);
СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр);
#Если ВебКлиент Тогда
ОбновитьПредпросмотр();
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура НастроитьСинхронизацию(Команда)
НастройкаСинхронизации = ПараметрыНастройкиСинхронизации(ВладелецФайла);
Если ЗначениеЗаполнено(НастройкаСинхронизации.УчетнаяЗапись) Тогда
ТипЗначения = Тип("РегистрСведенийКлючЗаписи.НастройкиСинхронизацииФайлов");
ПараметрыЗаписи = Новый Массив(1);
ПараметрыЗаписи[0] = НастройкаСинхронизации;
КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи);
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи);
Иначе
ПараметрыЗаписи = НастройкаСинхронизации;
КонецЕсли;
ОткрытьФорму("РегистрСведений.НастройкиСинхронизацииФайлов.Форма.ПростаяФормаЗаписиНастройки", ПараметрыЗаписи, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьГруппу(Команда)
ПараметрыФормы = Новый Структура;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда
ТекущиеДанные = Неопределено;
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыФормы.Вставить("Родитель", ТекущиеДанные.Ссылка);
Иначе
ПараметрыФормы.Вставить("Родитель", ВладелецФайла);
КонецЕсли;
ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла);
ПараметрыФормы.Вставить("ЭтоНоваяГруппа", Истина);
ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьФайлы(Команда)
#Если ВебКлиент Тогда
ТекстПредупреждения = НСтр("ru = 'В Веб-клиенте импорт файлов не поддерживается.
|Используйте команду ""Создать"" в списке файлов.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
#КонецЕсли
МассивИменФайлов = РаботаСФайламиСлужебныйКлиент.ИмпортируемыеФайлы();
Если МассивИменФайлов.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ЗначениеПараметраКД = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ВладелецФайлов"));
Если ЗначениеПараметраКД = Неопределено Тогда
ВладелецФайла = Неопределено;
Иначе
ВладелецФайла = ЗначениеПараметраКД.Значение;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПапкаДляДобавления", ВладелецФайла);
ПараметрыФормы.Вставить("МассивИменФайлов", МассивИменФайлов);
ТекущиеДанные = ТекущиеДанные();
ГруппаФайлов = Неопределено;
Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа Тогда
ГруппаФайлов = ТекущиеДанные.Ссылка;
ИначеЕсли ТекущиеДанные <> Неопределено И Не ЭтоВладелецЭлементовСправочникаФайлы Тогда
ГруппаФайлов = ГруппаФайла(ТекущиеДанные.Ссылка);
КонецЕсли;
ПараметрыФормы.Вставить("ГруппаФайлов", ГруппаФайлов);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаФайлов", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьПапку(Команда)
#Если ВебКлиент Тогда
ТекстПредупреждения = НСтр("ru = 'В веб-клиенте импорт папок недоступен.
|Используйте команду ""Создать"" в списке файлов.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
#КонецЕсли
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Все файлы (%1)|%1'"), ПолучитьМаскуВсеФайлы());
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите каталог'");
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПапкаДляДобавления", ВладелецФайла);
ПараметрыФормы.Вставить("КаталогНаДиске", ДиалогОткрытияФайла.Каталог);
ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов);
ТекущиеДанные = ТекущиеДанные();
ГруппаФайлов = Неопределено;
Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа Тогда
ГруппаФайлов = ТекущиеДанные.Ссылка;
ИначеЕсли ТекущиеДанные <> Неопределено Тогда
ГруппаФайлов = ГруппаФайла(ТекущиеДанные.Ссылка);
КонецЕсли;
ПараметрыФормы.Вставить("ГруппаФайлов", ГруппаФайлов);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗагрузкаПапки", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьПапку(Команда)
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные = Неопределено Или Не ТекущиеДанные.ЭтоГруппа Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПапкаЭкспорта", ТекущиеДанные.Ссылка);
ПараметрыФормы.Вставить("ИмяСправочникаХранилищаФайлов", ИмяСправочникаХранилищаФайлов);
ПараметрыФормы.Вставить("ИмяСправочникаХранилищаВерсийФайлов", ИмяСправочникаХранилищаВерсийФайлов);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.СохранениеПапки", ПараметрыФормы);
КонецПроцедуры
&НаКлиенте
Процедура СравнитьФайлы(Команда)
ЧислоВыделенныхСтрок = Элементы.Список.ВыделенныеСтроки.Количество();
Если ЧислоВыделенныхСтрок = 2 Тогда
Ссылка1 = Элементы.Список.ВыделенныеСтроки[0];
Ссылка2 = Элементы.Список.ВыделенныеСтроки[1];
ТекущиеДанные = ТекущиеДанные();
Расширение = НРег(ТекущиеДанные.Расширение);
РаботаСФайламиСлужебныйКлиент.СравнитьФайлы(УникальныйИдентификатор, Ссылка1, Ссылка2, Расширение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиВГруппу(Команда)
Если Элементы.Список.ВыделенныеСтроки.Количество() > 0 Тогда
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ВладелецФайлов", ВладелецФайла);
ПараметрыОткрытия.Вставить("ПеремещаемыеФайлы", Элементы.Список.ВыделенныеСтроки);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВыборГруппы", ПараметрыОткрытия, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьСлужебныеФайлы(Команда)
Элементы.ПоказыватьСлужебныеФайлы.Пометка =
РаботаСФайламиСлужебныйКлиент.ПоказыватьСлужебныеФайлыНажатие(Список);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандДляПоддержкиЭПИШифрования
&НаКлиенте
Процедура Подписать(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
Если Не ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект);
ДополнительныеПараметры = Новый Структура("ОбработкаРезультата", ОписаниеОповещения);
МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
ПараметрыПодписания = МодульЭлектроннаяПодписьКлиент.НовыйТипПодписи();
ПараметрыПодписания.ВыборДоверенности = Истина;
РаботаСФайламиКлиент.ПодписатьФайл(Элементы.Список.ВыделенныеСтроки, УникальныйИдентификатор,
ДополнительныеПараметры, ПараметрыПодписания);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьВместеСЭП(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.Зашифрован Тогда
Возврат;
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.СохранитьФайлВместеСПодписью(
ТекущиеДанные.Ссылка, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьЭПИзФайла(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.ФайлРедактируется
ИЛИ ТекущиеДанные.Зашифрован Тогда
Возврат;
КонецЕсли;
ПрисоединенныйФайл = ТекущиеДанные.Ссылка;
РаботаСФайламиСлужебныйКлиент.ДобавитьПодписьИзФайла(
ПрисоединенныйФайл,
УникальныйИдентификатор,
Новый ОписаниеОповещения("ДобавлениеПодписейЗавершить", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура Зашифровать(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.ФайлРедактируется
ИЛИ ТекущиеДанные.Зашифрован Тогда
Возврат;
КонецЕсли;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ТекущиеДанные.Ссылка);
Если ЗначениеЗаполнено(ДанныеФайла.Редактирует)
ИЛИ ДанныеФайла.Зашифрован Тогда
ОповеститьОбИзменении(ТекущиеДанные.Ссылка);
Возврат;
КонецЕсли;
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
ПараметрыОбработчика.Вставить("ОбъектСсылка", ТекущиеДанные.Ссылка);
Обработчик = Новый ОписаниеОповещения("ЗашифроватьПослеШифрованияНаКлиенте", ЭтотОбъект, ПараметрыОбработчика);
РаботаСФайламиСлужебныйКлиент.Зашифровать(Обработчик, ДанныеФайла, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗашифроватьПослеШифрованияНаКлиенте(Результат, ПараметрыВыполнения) Экспорт
Если Не Результат.Успех Тогда
Возврат;
КонецЕсли;
ИмяРабочегоКаталога = РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя();
МассивФайловВРабочемКаталогеДляУдаления = Новый Массив;
ЗашифроватьСервер(
Результат.МассивДанныхДляЗанесенияВБазу,
Результат.МассивОтпечатков,
МассивФайловВРабочемКаталогеДляУдаления,
ИмяРабочегоКаталога,
ПараметрыВыполнения.ОбъектСсылка);
РаботаСФайламиСлужебныйКлиент.ИнформироватьОШифровании(
МассивФайловВРабочемКаталогеДляУдаления,
ПараметрыВыполнения.ДанныеФайла.Владелец,
ПараметрыВыполнения.ОбъектСсылка);
УстановитьДоступностьФайловыхКоманд();
КонецПроцедуры
&НаСервере
Процедура ЗашифроватьСервер(МассивДанныхДляЗанесенияВБазу, МассивОтпечатков,
МассивФайловВРабочемКаталогеДляУдаления,
ИмяРабочегоКаталога, ОбъектСсылка)
ПараметрыЗаписиИнформацииОШифровании = РаботаСФайламиСлужебный.ПараметрыЗаписиИнформацииОШифровании();
ПараметрыЗаписиИнформацииОШифровании.ИмяРабочегоКаталога = ИмяРабочегоКаталога;
ПараметрыЗаписиИнформацииОШифровании.МассивДанныхДляЗанесенияВБазу = МассивДанныхДляЗанесенияВБазу;
ПараметрыЗаписиИнформацииОШифровании.МассивОтпечатков = МассивОтпечатков;
ПараметрыЗаписиИнформацииОШифровании.МассивФайловВРабочемКаталогеДляУдаления = МассивФайловВРабочемКаталогеДляУдаления;
РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании(
ОбъектСсылка, ПараметрыЗаписиИнформацииОШифровании);
КонецПроцедуры
&НаКлиенте
Процедура Расшифровать(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если НЕ ТекущиеДанные.Зашифрован Тогда
Возврат;
КонецЕсли;
ОбъектСсылка = ТекущиеДанные.Ссылка;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ПолучитьДанныеФайлаИКоличествоВерсий(ОбъектСсылка);
ПараметрыОбработчика = Новый Структура;
ПараметрыОбработчика.Вставить("ДанныеФайла", ДанныеФайла);
ПараметрыОбработчика.Вставить("ОбъектСсылка", ОбъектСсылка);
Обработчик = Новый ОписаниеОповещения("РасшифроватьПослеРасшифровкиНаКлиенте", ЭтотОбъект, ПараметрыОбработчика);
РаботаСФайламиСлужебныйКлиент.Расшифровать(
Обработчик,
ДанныеФайла.Ссылка,
УникальныйИдентификатор,
ДанныеФайла);
КонецПроцедуры
&НаКлиенте
Процедура РасшифроватьПослеРасшифровкиНаКлиенте(Результат, ПараметрыВыполнения) Экспорт
Если Результат = Ложь Или Не Результат.Успех Тогда
Возврат;
КонецЕсли;
ИмяРабочегоКаталога = РаботаСФайламиСлужебныйКлиент.РабочийКаталогПользователя();
РасшифроватьСервер(
Результат.МассивДанныхДляЗанесенияВБазу,
ИмяРабочегоКаталога,
ПараметрыВыполнения.ОбъектСсылка);
РаботаСФайламиСлужебныйКлиент.ИнформироватьОРасшифровке(
ПараметрыВыполнения.ДанныеФайла.Владелец,
ПараметрыВыполнения.ОбъектСсылка);
УстановитьДоступностьФайловыхКоманд();
КонецПроцедуры
&НаСервере
Процедура РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу,
ИмяРабочегоКаталога, ОбъектСсылка)
ПараметрыЗаписиИнформацииОШифровании = РаботаСФайламиСлужебный.ПараметрыЗаписиИнформацииОШифровании();
ПараметрыЗаписиИнформацииОШифровании.Зашифровать = Ложь;
ПараметрыЗаписиИнформацииОШифровании.ИмяРабочегоКаталога = ИмяРабочегоКаталога;
ПараметрыЗаписиИнформацииОШифровании.МассивДанныхДляЗанесенияВБазу = МассивДанныхДляЗанесенияВБазу;
РаботаСФайламиСлужебный.ЗаписатьИнформациюОШифровании(
ОбъектСсылка, ПараметрыЗаписиИнформацииОШифровании);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандДляПоддержкиСовместнойРаботыСФайлами
&НаКлиенте
Процедура Редактировать(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если (ТекущиеДанные.ФайлРедактируется И НЕ ТекущиеДанные.ФайлРедактируетТекущийПользователь)
ИЛИ ТекущиеДанные.Зашифрован
ИЛИ ТекущиеДанные.ПодписанЭП Тогда
Возврат;
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.РедактироватьСОповещением(Неопределено, ТекущиеДанные.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура ЗакончитьРедактирование(Команда)
МассивФайлов = Новый Массив;
Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл
ДанныеСтроки = ДанныеСтрокиСписка(ЭлементСписка);
Если НЕ ДанныеСтроки.ФайлРедактируется
Или НЕ ДанныеСтроки.ФайлРедактируетТекущийПользователь Тогда
Продолжить;
КонецЕсли;
МассивФайлов.Добавить(ДанныеСтроки.Ссылка);
КонецЦикла;
Если МассивФайлов.Количество() > 1 Тогда
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("МассивФайлов", МассивФайлов);
ПараметрыФормы.Вставить("ЕстьВерсииФайлов", ЕстьВерсииФайлов);
ПараметрыФормы.Вставить("Редактирует", ДанныеСтроки.РедактируетПользователь);
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ЗавершениеРедактирования", ПараметрыФормы, ЭтотОбъект);
ИначеЕсли МассивФайлов.Количество() = 1 Тогда
Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
ПараметрыОбновленияФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(Обработчик, ДанныеСтроки.Ссылка, УникальныйИдентификатор);
Если Не ЕстьВерсииФайлов Тогда
ПараметрыОбновленияФайла.Вставить("СоздатьНовуюВерсию", Ложь);
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Освободить(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
РаботаСФайламиСлужебныйКлиент.ОсвободитьФайлы(Элементы.Список);
УстановитьДоступностьФайловыхКоманд();
КонецПроцедуры
&НаКлиенте
Процедура Занять(Команда)
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
КоличествоФайлов = Элементы.Список.ВыделенныеСтроки.Количество();
Если КоличествоФайлов = 1 Тогда
Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект);
РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, Элементы.Список.ТекущаяСтрока);
ИначеЕсли КоличествоФайлов > 1 Тогда
МассивФайлов = Новый Массив;
Для Каждого ЭлементСписка Из Элементы.Список.ВыделенныеСтроки Цикл
ДанныеСтроки = ДанныеСтрокиСписка(ЭлементСписка);
Если ЗначениеЗаполнено(ДанныеСтроки.РедактируетПользователь) Тогда
Продолжить;
КонецЕсли;
МассивФайлов.Добавить(ДанныеСтроки.Ссылка);
КонецЦикла;
Обработчик = Новый ОписаниеОповещения("УстановитьДоступностьФайловыхКоманд", ЭтотОбъект, МассивФайлов);
РаботаСФайламиСлужебныйКлиент.ЗанятьСОповещением(Обработчик, МассивФайлов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Удалить(Команда)
ВыделенныеСтроки = ВыделенныеСтроки();
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеУдаленияДанных", ЭтотОбъект);
РаботаСФайламиСлужебныйКлиент.УдалитьДанныеФайлов(ОписаниеОповещения, ВыделенныеСтроки, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПоказыватьПомеченныеФайлы(Команда)
РаботаСФайламиСлужебныйКлиент.ИзменитьОтборПоПометкеУдаления(Список.Отбор, Элементы.ПоказыватьПомеченныеФайлы);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПослеУдаленияДанных(Результат, ДополнительныеПараметры) Экспорт
Элементы.Список.Обновить();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Список.УсловноеОформление.Элементы.Очистить();
Элемент = Список.УсловноеОформление.Элементы.Добавить();
Если ЕстьРеквизитСлужебный Тогда
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетДругойПользователь");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.Использование = Истина;
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный");
ОтборЭлемента.ПравоеЗначение = Ложь;
Иначе
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетДругойПользователь");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
КонецЕсли;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Элемент = Список.УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлРедактируетТекущийПользователь");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем);
Если ЕстьГруппыФайлов Тогда
Элемент = Список.УсловноеОформление.Элементы.Добавить();
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВладелецФайла");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ОтборЭлемента.ПравоеЗначение = ВладелецФайла;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоГруппа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент.Оформление.УстановитьЗначениеПараметра("Отображать", Ложь);
КонецЕсли;
Элемент = Список.УсловноеОформление.Элементы.Добавить();
Элемент.Использование = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.Использование = Истина;
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Служебный");
Отбор.ПравоеЗначение = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьФайл()
ТекущиеДанные = ТекущиеДанные();
ГруппаФайлов = Неопределено;
Если ТекущиеДанные <> Неопределено И ТекущиеДанные.ЭтоГруппа Тогда
ГруппаФайлов = ТекущиеДанные.Ссылка;
ИначеЕсли ТекущиеДанные <> Неопределено И Не ЭтоВладелецЭлементовСправочникаФайлы Тогда
ГруппаФайлов = ГруппаФайла(ТекущиеДанные.Ссылка);
КонецЕсли;
Если ЭтоВладелецЭлементовСправочникаФайлы Тогда
РаботаСФайламиСлужебныйКлиент.ДобавитьФайлИзФайловойСистемы(Параметры.ВладелецФайла, ЭтотОбъект);
Иначе
РаботаСФайламиКлиент.ДобавитьФайлы(Параметры.ВладелецФайла, УникальныйИдентификатор, , ГруппаФайлов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайл()
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные.Зашифрован Тогда
Возврат;
КонецЕсли;
Если ЗапрещенныеРасширения.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущиеДанные", ТекущиеДанные);
Оповещение = Новый ОписаниеОповещения("ОткрытьФайлПослеПодтверждения", ЭтотОбъект, ДополнительныеПараметры);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередОткрытиемФайла,
ОбщегоНазначенияКлиентСервер.ПолучитьИмяСРасширением(ТекущиеДанные.Наименование, ТекущиеДанные.Расширение));
Возврат;
КонецЕсли;
ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка, Неопределено, УникальныйИдентификатор);
Если ДанныеФайла.Зашифрован Тогда
ОповеститьОбИзменении(ТекущиеДанные.Ссылка);
Возврат;
КонецЕсли;
РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьКарточкуФайла()
Если НЕ ФайловыеКомандыДоступны() Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", ТекущиеДанные.Ссылка);
ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр);
ПараметрыФормы.Вставить("ПараметрыОтправки", ПараметрыОтправки);
Если ТекущиеДанные.ЭтоГруппа Тогда
ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ГруппаФайлов", ПараметрыФормы);
Иначе
РаботаСФайламиКлиент.ОткрытьФормуФайла(ТекущиеДанные.Ссылка,, ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФайлПослеПодтверждения(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено И Результат = "Продолжить" Тогда
ТекущиеДанные = ДополнительныеПараметры.ТекущиеДанные;
ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь;
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка, Неопределено, УникальныйИдентификатор);
Если ДанныеФайла.Зашифрован Тогда
ОповеститьОбИзменении(ТекущиеДанные.Ссылка);
Возврат;
КонецЕсли;
РаботаСФайламиКлиент.ОткрытьФайл(ДанныеФайла, ФайлРедактируется);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокВыборПослеВыбораРежимаРедактирования(Результат, ПараметрыВыполнения) Экспорт
Если Результат = "Редактировать" Тогда
Обработчик = Новый ОписаниеОповещения("СписокВыборПослеРедактированияФайла", ЭтотОбъект, ПараметрыВыполнения);
РаботаСФайламиСлужебныйКлиент.РедактироватьФайл(Обработчик, ПараметрыВыполнения.ДанныеФайла);
ИначеЕсли Результат = "Открыть" Тогда
РаботаСФайламиКлиент.ОткрытьФайл(ПараметрыВыполнения.ДанныеФайла, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокВыборПослеРедактированияФайла(Результат, ПараметрыВыполнения) Экспорт
ОповеститьОбИзменении(ПараметрыВыполнения.ДанныеФайла.Ссылка);
УстановитьДоступностьФайловыхКоманд();
КонецПроцедуры
&НаКлиенте
Функция ФайловыеКомандыДоступны()
Возврат РаботаСФайламиСлужебныйКлиент.ФайловыеКомандыДоступны(Элементы);
КонецФункции
&НаСервере
Процедура СкрытьКнопкиСозданияГруппы()
Элементы.СоздатьГруппу.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь;
Элементы.ЗагрузитьПапку.Видимость = Ложь;
Элементы.СохранитьПапку.Видимость = Ложь;
Элементы.ПеренестиВГруппу.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюПереместитьВГруппу.Видимость = Ложь;
КонецПроцедуры
&НаСервере
Процедура СкрытьКнопкиДобавления()
Элементы.Добавить.Видимость = Ложь;
Элементы.ДобавитьИзФайлаНаДиске.Видимость = Ложь;
Элементы.ДобавитьФайлПоШаблону.Видимость = Ложь;
Элементы.ДобавитьФайлСоСканера.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюДобавить.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь;
Элементы.СоздатьГруппу.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь;
Элементы.ФормаСкопировать.Видимость = Ложь;
Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь;
КонецПроцедуры
&НаСервере
Процедура СкрытьКнопкиИзменения()
ИменаКоманд = ИменаКомандИзмененияОбъектов();
Для каждого ИмяЭлементаФормы Из ИменаЭлементовКнопокФормы Цикл
ЭлементФормы = Элементы.Найти(ИмяЭлементаФормы);
Если ИменаКоманд[ЭлементФормы.ИмяКоманды] <> Неопределено Тогда
ЭлементФормы.Видимость = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОпределитьИменаЭлементовКнопокФормы()
ИменаКомандФормы = ИменаКомандФормы();
ИменаЭлементов = Новый Массив;
Для Каждого ЭлементФормы Из Элементы Цикл
Если ТипЗнч(ЭлементФормы) <> Тип("КнопкаФормы") Тогда
Продолжить;
КонецЕсли;
Если ИменаКомандФормы[ЭлементФормы.ИмяКоманды] <> Неопределено
Или ИменаКомандФормы[ЭлементФормы.Имя] <> Неопределено Тогда
ИменаЭлементов.Добавить(ЭлементФормы.Имя);
КонецЕсли;
КонецЦикла;
Возврат Новый ФиксированныйМассив(ИменаЭлементов);
КонецФункции
&НаКлиенте
Процедура УстановитьДоступностьФайловыхКоманд(Результат = Неопределено, ПараметрыВыполнения = Неопределено) Экспорт
ТекущиеДанные = ТекущиеДанные();
ИменаКоманд = Новый Соответствие;
Если ТекущиеДанные = Неопределено И Не ФайлыРедактируютсяВОблачномСервисе Тогда
ИменаКоманд.Вставить("Добавить", Истина);
ИменаКоманд.Вставить("ДобавитьФайлСоСканера", Истина);
ИменаКоманд.Вставить("ДобавитьФайлПоШаблону", Истина);
ИменаКоманд.Вставить("ЗагрузитьФайлы", Истина);
ИменаКоманд.Вставить("ЗагрузитьПапку", Истина);
ИначеЕсли ТекущиеДанные <> Неопределено И ТипЗнч(Элементы.Список.ТекущаяСтрока) = ТипСправочникаСФайлами Тогда
ВозможностьОсвободитьФайл = РаботаСФайламиСлужебныйКлиент.ВозможностьОсвободитьФайл(
ТекущиеДанные.Ссылка,
ТекущиеДанные.ФайлРедактируетТекущийПользователь,
ТекущиеДанные.РедактируетПользователь);
ИменаКоманд = ДоступныеКоманды(ТекущиеДанные, ФайлыРедактируютсяВОблачномСервисе,
ВозможностьОсвободитьФайл, ПользователиКлиент.АвторизованныйПользователь());
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
Элементы.ПечатьСоШтампом.Видимость = ДоступнаПечатьСоШтампом
И (ТекущиеДанные.Расширение = "mxl") ИЛИ (ТекущиеДанные.Расширение = "docx")
И ТекущиеДанные.ПодписанЭП;
КонецЕсли;
Для каждого ИмяЭлементаФормы Из ИменаЭлементовКнопокФормы Цикл
ЭлементФормы = Элементы.Найти(ИмяЭлементаФормы);
Если ИменаКоманд[ЭлементФормы.ИмяКоманды] = Истина Или ИменаКоманд[ЭлементФормы.Имя] = Истина Тогда
Если НЕ ЭлементФормы.Доступность Тогда
ЭлементФормы.Доступность = Истина;
КонецЕсли;
ИначеЕсли ЭлементФормы.Доступность Тогда
ЭлементФормы.Доступность = Ложь;
КонецЕсли;
КонецЦикла;
ПодключитьОбработчикОжидания("ОбновитьПредпросмотр", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкуУдаленияЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
УстановитьСнятьПометкуУдаления(ДополнительныеПараметры.Файлы);
ПараметрыОповещенияЗаписиФайла = РаботаСФайламиСлужебныйКлиент.ПараметрыОповещенияЗаписиФайла("ДанныеФайлаИзменены");
Оповестить("Запись_Файл", ПараметрыОповещенияЗаписиФайла, Элементы.Список.ВыделенныеСтроки);
Элементы.Список.Обновить();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьДинамическийСписок()
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
ТекстЗапроса =
"ВЫБРАТЬ
| Файлы.Ссылка КАК Ссылка,
| Файлы.ПометкаУдаления,
| ВЫБОР
| КОГДА Файлы.ПометкаУдаления = ИСТИНА
| ТОГДА ЕСТЬNULL(Файлы.ИндексКартинки, 2) + 1
| ИНАЧЕ ЕСТЬNULL(Файлы.ИндексКартинки, 2)
| КОНЕЦ КАК ИндексКартинки,
| Файлы.Наименование КАК Наименование,
| ВЫРАЗИТЬ(Файлы.Описание КАК СТРОКА(500)) КАК Описание,
| Файлы.Автор,
| Файлы.ДатаСоздания,
| Файлы.Изменил КАК Отредактировал,
| ДОБАВИТЬКДАТЕ(Файлы.ДатаМодификацииУниверсальная, СЕКУНДА, &СекундДоМестногоВремени) КАК ДатаИзменения,
| ВЫРАЗИТЬ(Файлы.Размер / 1024 КАК ЧИСЛО(10, 0)) КАК Размер,
| Файлы.ПодписанЭП,
| Файлы.Зашифрован,
| ВЫБОР
| КОГДА Файлы.ПодписанЭП
| И Файлы.Зашифрован
| ТОГДА 2
| КОГДА Файлы.Зашифрован
| ТОГДА 1
| КОГДА Файлы.ПодписанЭП
| ТОГДА 0
| ИНАЧЕ -1
| КОНЕЦ КАК НомерКартинкиПодписанЗашифрован,
| ВЫБОР
| КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируется,
| ВЫБОР
| КОГДА Файлы.Редактирует = &ТекущийПользователь
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируетТекущийПользователь,
| ВЫБОР
| КОГДА НЕ Файлы.Редактирует В (&ПустыеПользователи)
| И Файлы.Редактирует <> &ТекущийПользователь
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ФайлРедактируетДругойПользователь,
| Файлы.Расширение КАК Расширение,
| ВЫБОР
| КОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись <> НЕОПРЕДЕЛЕНО
| И Файлы.Редактирует = НЕОПРЕДЕЛЕНО
| ТОГДА СтатусыСинхронизацииФайловСОблачнымСервисом.УчетнаяЗапись
| ИНАЧЕ Файлы.Редактирует
| КОНЕЦ КАК Редактирует,
| Файлы.Редактирует КАК РедактируетПользователь,
| &ЭтоГруппа КАК ЭтоГруппа,
| &Служебный КАК Служебный,
| &ГруппаФайла КАК ГруппаФайла,
| Файлы.ВладелецФайла КАК ВладелецФайла,
| Файлы.ХранитьВерсии КАК ХранитьВерсии
|ИЗ
| &ИмяСправочника КАК Файлы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыСинхронизацииФайловСОблачнымСервисом КАК СтатусыСинхронизацииФайловСОблачнымСервисом
| ПО Файлы.Ссылка = СтатусыСинхронизацииФайловСОблачнымСервисом.Файл
|ГДЕ
| Файлы.ВладелецФайла = &ВладелецФайлов";
ПолноеИмяСправочника = "Справочник." + ИмяСправочникаХранилищаФайлов;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Служебный", ?(ЕстьРеквизитСлужебный, "Файлы.Служебный", "ЛОЖЬ"));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ГруппаФайла", ?(ЕстьГруппыФайлов, "Файлы.Родитель", "НЕОПРЕДЕЛЕНО"));
СвойстваСписка.ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
?(ЕстьГруппыФайлов, "Файлы.ЭтоГруппа", "ЛОЖЬ"));
СвойстваСписка.ОсновнаяТаблица = ПолноеИмяСправочника;
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
ПустыеПользователи = Новый Массив;
ПустыеПользователи.Добавить(Неопределено);
ПустыеПользователи.Добавить(Справочники.Пользователи.ПустаяСсылка());
ПустыеПользователи.Добавить(Справочники.ВнешниеПользователи.ПустаяСсылка());
ПустыеПользователи.Добавить(Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка());
Список.Параметры.УстановитьЗначениеПараметра("ВладелецФайлов", Параметры.ВладелецФайла);
Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
Список.Параметры.УстановитьЗначениеПараметра("ПустыеПользователи", ПустыеПользователи);
ДатаУниверсальная = ТекущаяДатаСеанса();
Список.Параметры.УстановитьЗначениеПараметра("СекундДоМестногоВремени",
МестноеВремя(ДатаУниверсальная, ЧасовойПоясСеанса()) - ДатаУниверсальная);
КонецПроцедуры
&НаСервере
Процедура ВывестиУведомлениеЕслиМногоГрупп(МетаданныеСправочникаСФайлами)
МинимальноеКоличествоГруппДляВыводаСообщения = 5000;
Если Не МетаданныеСправочникаСФайлами.Иерархический Или Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ТекстЗапроса =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(СправочникПрисоединенныеФайлы.ЭтоГруппа) КАК КоличествоГрупп
|ИЗ
| #СправочникПрисоединенныеФайлы КАК СправочникПрисоединенныеФайлы
|ГДЕ
| СправочникПрисоединенныеФайлы.ЭтоГруппа = ИСТИНА";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#СправочникПрисоединенныеФайлы", МетаданныеСправочникаСФайлами.ПолноеИмя());
Запрос = Новый Запрос(ТекстЗапроса);
ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Если ВыборкаДетальныеЗаписи.КоличествоГрупп >= МинимальноеКоличествоГруппДляВыводаСообщения Тогда
Элементы.ИнформационноеСообщение.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИменаКомандФормы()
Результат = ИменаКомандИзмененияОбъектов();
Результат.Вставить("ОткрытьКаталогФайла", Истина);
Результат.Вставить("ОткрытьФайлДляПросмотра", Истина);
Результат.Вставить("СохранитьКак", Истина);
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ИменаКомандИзмененияОбъектов()
Результат = Новый Соответствие;
Результат.Вставить("ЗакончитьРедактирование", Истина);
Результат.Вставить("Занять", Истина);
Результат.Вставить("Освободить", Истина);
Результат.Вставить("Редактировать", Истина);
Результат.Вставить("УстановитьПометкуУдаления", Истина);
Результат.Вставить("Удалить", Истина);
Результат.Вставить("КонтекстноеМенюУстановитьПометкуУдаления", Истина);
Результат.Вставить("Подписать", Истина);
Результат.Вставить("ДобавитьЭПИзФайла", Истина);
Результат.Вставить("СохранитьВместеСЭП", Истина);
Результат.Вставить("Зашифровать", Истина);
Результат.Вставить("Расшифровать", Истина);
Результат.Вставить("Печать", Истина);
Результат.Вставить("ПечатьСоШтампом", Истина);
Результат.Вставить("Отправить", Истина);
Результат.Вставить("ОбновитьИзФайлаНаДиске", Истина);
Результат.Вставить("Добавить", Истина);
Результат.Вставить("ДобавитьИзФайлаНаДиске", Истина);
Результат.Вставить("ДобавитьФайлПоШаблону", Истина);
Результат.Вставить("ДобавитьФайлСоСканера", Истина);
Результат.Вставить("ОткрытьСвойстваФайла", Истина);
Результат.Вставить("Скопировать", Истина);
Результат.Вставить("ЗагрузитьФайлы", Истина);
Результат.Вставить("ЗагрузитьПапку", Истина);
Результат.Вставить("ПереместитьВГруппу", Истина);
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ДоступныеКоманды(ТекущиеДанныеФайла, ФайлыРедактируютсяВОблачномСервисе, ВозможностьОсвободитьФайл,
АвторизованныйПользователь)
ИменаКоманд = ИменаКомандФормы();
ФайлРедактируетТекущийПользователь = ТекущиеДанныеФайла.ФайлРедактируетТекущийПользователь;
АвторТекущийПользователь = ТекущиеДанныеФайла.Автор = АвторизованныйПользователь;
ФайлРедактируется = ТекущиеДанныеФайла.ФайлРедактируется;
ФайлПодписан = ТекущиеДанныеФайла.ПодписанЭП;
ФайлЗашифрован = ТекущиеДанныеФайла.Зашифрован;
Если ФайлРедактируется Тогда
Если ФайлРедактируетТекущийПользователь Тогда
ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
Иначе
ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
Если Не ВозможностьОсвободитьФайл Тогда
ИменаКоманд["Освободить"] = Ложь;
КонецЕсли;
ИменаКоманд["Редактировать"] = Ложь;
КонецЕсли;
ИменаКоманд["Занять"] = Ложь;
ИменаКоманд["УстановитьПометкуУдаления"] = Ложь;
ИменаКоманд["КонтекстноеМенюУстановитьПометкуУдаления"] = Ложь;
ИменаКоманд["Подписать"] = Ложь;
ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
ИменаКоманд["СохранитьКак"] = Ложь;
ИменаКоманд["Зашифровать"] = Ложь;
ИменаКоманд["Расшифровать"] = Ложь;
ИменаКоманд["Удалить"] = Ложь;
Иначе
ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
ИменаКоманд["Освободить"] = Ложь;
КонецЕсли;
Если ТекущиеДанныеФайла.ЭтоГруппа Тогда
ИменаКоманд["Редактировать"] = Ложь;
ИменаКоманд["Подписать"] = Ложь;
ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
ИменаКоманд["Зашифровать"] = Ложь;
ИменаКоманд["Расшифровать"] = Ложь;
ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
ИменаКоманд["Скопировать"] = Ложь;
ИменаКоманд["ОткрытьКаталогФайла"] = Ложь;
ИменаКоманд["ОткрытьФайлДляПросмотра"] = Ложь;
ИменаКоманд["СохранитьКак"] = Ложь;
ИменаКоманд["Занять"] = Ложь;
ИменаКоманд["Отправить"] = Ложь;
ИменаКоманд["ПечатьСоШтампом"] = Ложь;
ИменаКоманд["Печать"] = Ложь;
ИменаКоманд["Удалить"] = Ложь;
КонецЕсли;
Если ФайлПодписан Тогда
ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
ИменаКоманд["Освободить"] = Ложь;
ИменаКоманд["Редактировать"] = Ложь;
ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
ИменаКоманд["Занять"] = Ложь;
КонецЕсли;
Если ФайлЗашифрован Тогда
ИменаКоманд["Подписать"] = Ложь;
ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
ИменаКоманд["Освободить"] = Ложь;
ИменаКоманд["Редактировать"] = Ложь;
ИменаКоманд["Занять"] = Ложь;
ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
ИменаКоманд["Зашифровать"] = Ложь;
ИменаКоманд["ОткрытьКаталогФайла"] = Ложь;
ИменаКоманд["ОткрытьФайлДляПросмотра"] = Ложь;
ИменаКоманд["СохранитьКак"] = Ложь;
Иначе
ИменаКоманд["Расшифровать"] = Ложь;
КонецЕсли;
Если ФайлыРедактируютсяВОблачномСервисе Тогда
ИменаКоманд["Добавить"] = Ложь;
ИменаКоманд["ДобавитьИзФайлаНаДиске"] = Ложь;
ИменаКоманд["ДобавитьФайлПоШаблону"] = Ложь;
ИменаКоманд["ДобавитьФайлСоСканера"] = Ложь;
ИменаКоманд["Скопировать"] = Ложь;
ИменаКоманд["СоздатьГруппу"] = Ложь;
ИменаКоманд["ПереместитьВГруппу"] = Ложь;
ИменаКоманд["УстановитьПометкуУдаления"] = Ложь;
ИменаКоманд["КонтекстноеМенюУстановитьПометкуУдаления"] = Ложь;
ИменаКоманд["Занять"] = Ложь;
ИменаКоманд["Освободить"] = Ложь;
ИменаКоманд["ЗагрузитьФайлы"] = Ложь;
ИменаКоманд["ЗагрузитьПапку"] = Ложь;
ИменаКоманд["Удалить"] = Ложь;
ИменаКоманд["Подписать"] = Ложь;
ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
ИменаКоманд["Зашифровать"] = Ложь;
ИменаКоманд["Расшифровать"] = Ложь;
КонецЕсли;
Если Не АвторТекущийПользователь Тогда
ИменаКоманд["Удалить"] = Ложь;
КонецЕсли;
Возврат ИменаКоманд;
КонецФункции
&НаКлиенте
Процедура ПриИзмененииИспользованияПодписанияИлиШифрования()
ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере()
РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДобавлениеПодписейЗавершить(Успех, Контекст) Экспорт
Если Успех = Истина Тогда
УстановитьДоступностьФайловыхКоманд();
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СохранитьВариантПредпросмотра(ТипСправочникаСФайлами, Предпросмотр)
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(ТипСправочникаСФайлами, "Предпросмотр", Предпросмотр);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, Знач ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор)
ИнтеграцияПодсистемБСП.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор);
РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УстановитьСнятьПометкуУдаления(Файлы)
ПометкаУдаления = Неопределено;
Для каждого ФайлСсылка Из Файлы Цикл
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить(ФайлСсылка.Метаданные().ПолноеИмя());
ЭлементБлокировки.УстановитьЗначение("Ссылка", ФайлСсылка);
Блокировка.Заблокировать();
ФайлОбъект = ФайлСсылка.ПолучитьОбъект();
Если ПометкаУдаления = Неопределено Тогда
ПометкаУдаления = Не ФайлОбъект.ПометкаУдаления;
КонецЕсли;
ФайлОбъект.УстановитьПометкуУдаления(ПометкаУдаления);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр)
Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр;
Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПредпросмотр()
Если Не Предпросмотр Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = ТекущиеДанные();
Если ТекущиеДанные <> Неопределено И РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда
Попытка
ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ТекущиеДанные.Ссылка, Неопределено, УникальныйИдентификатор,, АдресДанныхФайла);
АдресДанныхФайла = ДанныеФайла.СсылкаНаДвоичныеДанныеФайла;
Исключение
АдресДанныхФайла = Неопределено;
ТекстНевыбраннойКартинки = НСтр("ru = 'Предварительный просмотр недоступен по причине:'") + Символы.ПС + ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
Иначе
АдресДанныхФайла = Неопределено;
ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'");
КонецЕсли;
Если НЕ ЗначениеЗаполнено(АдресДанныхФайла) Тогда
Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПояснениеОблачногоСервиса()
ВидимостьПояснения = Ложь;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСинхронизациюФайлов") Тогда
СведенияОСинхронизации = РаботаСФайламиСлужебный.СведенияОСинхронизации(ВладелецФайла);
Если СведенияОСинхронизации <> Неопределено Тогда
ФайлыРедактируютсяВОблачномСервисе = Истина;
УчетнаяЗапись = СведенияОСинхронизации.УчетнаяЗапись;
ВидимостьПояснения = Истина;
Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Работа с файлами ведется в облачном сервисе <a href=""%1"">%2</a>.'"),
СведенияОСинхронизации.АдресПапкиВОблачномСервисе, СведенияОСинхронизации.УчетнаяЗаписьНаименование);
Элементы.ДекорацияКартинкаСтатусСинхронизации.Видимость = НЕ СведенияОСинхронизации.Синхронизирован;
Элементы.ДекорацияДатаСинхронизации.ОтображениеПодсказки =?(СведенияОСинхронизации.Синхронизирован,
ОтображениеПодсказки.Нет, ОтображениеПодсказки.Кнопка);
Элементы.ДекорацияДатаСинхронизации.Заголовок = СтроковыеФункции.ФорматированнаяСтрока(
НСтр("ru = 'Синхронизировано: <a href=""%1"">%2</a>'"),
"OpenJournal", Формат(СведенияОСинхронизации.ДатаСинхронизации, "ДЛФ=DD"));
КонецЕсли;
КонецЕсли;
Элементы.ГруппаПояснениеОблачногоСервиса.Видимость = ВидимостьПояснения;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДанныеОтбораЖурналаРегистрации(Сервис)
Возврат РаботаСФайламиСлужебный.ДанныеОтбораЖурналаРегистрации(Сервис);
КонецФункции
&НаСервере
Функция ПараметрыНастройкиСинхронизации(Знач ВладелецФайла)
ТипВладельцаФайла = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ТипСправочникаСФайлами);
Отбор = Новый Структура(
"ВладелецФайла, ТипВладельцаФайла, УчетнаяЗапись",
ВладелецФайла,
ТипВладельцаФайла,
Справочники.УчетныеЗаписиСинхронизацииФайлов.ПустаяСсылка());
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НастройкиСинхронизацииФайлов.ВладелецФайла,
| НастройкиСинхронизацииФайлов.ТипВладельцаФайла,
| НастройкиСинхронизацииФайлов.УчетнаяЗапись
|ИЗ
| РегистрСведений.НастройкиСинхронизацииФайлов КАК НастройкиСинхронизацииФайлов
|ГДЕ
| НастройкиСинхронизацииФайлов.ВладелецФайла = &ВладелецФайла
| И НастройкиСинхронизацииФайлов.ТипВладельцаФайла = &ТипВладельцаФайла";
Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла);
Запрос.УстановитьПараметр("ТипВладельцаФайла", ТипВладельцаФайла);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() = 1 Тогда
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Отбор.УчетнаяЗапись = ВыборкаДетальныеЗаписи.УчетнаяЗапись;
КонецЦикла;
КонецЕсли;
Возврат Отбор;
КонецФункции
&НаКлиенте
Процедура ОбновитьДоступностьФайловыхКоманд()
УстановитьДоступностьФайловыхКоманд();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВладелецФайловСовпадает(ВладелецФайлов, ПеретаскиваемыйФайл)
Возврат ВладелецФайлов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПеретаскиваемыйФайл, "ВладелецФайла");
КонецФункции
&НаСервереБезКонтекста
Процедура ПереместитьИлиСкопироватьПрисоединенныеФайлы(Знач МассивИменФайлов, Знач ВладелецФайла, Знач Действие)
ВладелецПеретаскиваемогоФайла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(МассивИменФайлов[0], "ВладелецФайла");
Если ТипЗнч(ВладелецПеретаскиваемогоФайла) <> ТипЗнч(ВладелецФайла) Тогда
Возврат;
КонецЕсли;
Если Действие = "Перемещение" Тогда
РаботаСФайламиСлужебныйВызовСервера.ПеренестиФайлы(МассивИменФайлов, ВладелецФайла);
ИначеЕсли Действие = "Копирование" Тогда
РаботаСФайламиСлужебныйВызовСервера.СкопироватьФайлы(МассивИменФайлов, ВладелецФайла);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ДанныеСтрокиСписка(ЭлементСписка)
Возврат Элементы.Список.ДанныеСтроки(ЭлементСписка);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Функция ТекущиеДанные()
Если Не СтандартныеПодсистемыКлиент.ЭтоЭлементДинамическогоСписка(Элементы.Список)
Или Элементы.Список.ТекущиеДанные.ВладелецФайла <> ВладелецФайла Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.Список.ТекущиеДанные;
КонецФункции
&НаСервереБезКонтекста
Функция ГруппаФайла(Файл)
Возврат ?(Файл.Метаданные().Иерархический, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Файл, "Родитель"),
Неопределено);
КонецФункции
&НаКлиенте
Функция ВыделенныеСтроки()
ВыделенныеСтроки = Новый Массив;
Для Каждого ВыделеннаяСтрока Из Элементы.Список.ВыделенныеСтроки Цикл
Если ТипЗнч(ВыделеннаяСтрока) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
ВыделенныеСтроки.Добавить(ВыделеннаяСтрока);
КонецЕсли;
КонецЦикла;
Возврат ВыделенныеСтроки;
КонецФункции
#КонецОбласти