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