#Область ОписаниеПеременных
&НаКлиенте
Перем ЗаписатьНастройки, СледующаяДата;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Не ОбщегоНазначения.ЭтоWindowsКлиент() Тогда
ВызватьИсключение НСтр("ru = 'Резервное копирование и восстановление данных необходимо настроить средствами операционной системы или другими сторонними средствами.'");
КонецЕсли;
Если ОбщегоНазначения.ЭтоВебКлиент() Тогда
ВызватьИсключение НСтр("ru = 'Резервное копирование недоступно в веб-клиенте.'");
КонецЕсли;
НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования();
Объект.ВариантВыполнения = НастройкиРезервногоКопирования.ВариантВыполнения;
Объект.ВыполнятьАвтоматическоеРезервноеКопирование = НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование;
Объект.РезервноеКопированиеНастроено = НастройкиРезервногоКопирования.РезервноеКопированиеНастроено;
Если Не Объект.РезервноеКопированиеНастроено Тогда
Объект.ВыполнятьАвтоматическоеРезервноеКопирование = Истина;
КонецЕсли;
ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
Элементы.Обычный.Видимость = Не ЭтоБазоваяВерсияКонфигурации;
Элементы.Базовый.Видимость = ЭтоБазоваяВерсияКонфигурации;
ПарольАдминистратораИБ = НастройкиРезервногоКопирования.ПарольАдминистратораИБ;
Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(НастройкиРезервногоКопирования.РасписаниеКопирования);
Элементы.ИзменитьРасписание.Заголовок = Строка(Расписание);
Объект.КаталогСРезервнымиКопиями = НастройкиРезервногоКопирования.КаталогХраненияРезервныхКопий;
ЗаполнитьЗначенияСвойств(Объект, НастройкиРезервногоКопирования.ПараметрыУдаления);
ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(ЭтотОбъект);
ИнформацияОПользователе = РезервноеКопированиеИБСервер.ИнформацияОПользователе();
ТребуетсяВводПароля = ИнформацияОПользователе.ТребуетсяВводПароля;
Если ТребуетсяВводПароля Тогда
АдминистраторИБ = ИнформацияОПользователе.Имя;
Иначе
Элементы.ГруппаАвторизации.Видимость = Ложь;
Элементы.АвторизацияАдминистратораИнформационнойБазы.Видимость = Ложь;
ПарольАдминистратораИБ = "";
КонецЕсли;
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Настройки = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"];
Если Настройки = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
СледующаяДата = Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования;
Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101';
ЗаписатьНастройки = Ложь;
#Если ВебКлиент Тогда
Элементы.НадписьОбновитьВерсиюКомпоненты.Видимость = Ложь;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗаписатьНастройки Тогда
ИмяПараметра = "РезервноеКопированиеИБПриЗавершенииРаботы";
ПараметрыПриЗавершении = Новый Структура(СтандартныеПодсистемыКлиент.ПараметрКлиента(ИмяПараметра));
ПараметрыПриЗавершении.ВыполнятьПриЗавершенииРаботы = Объект.ВыполнятьАвтоматическоеРезервноеКопирование
И Объект.ВариантВыполнения = "ПриЗавершенииРаботы";
ПараметрыПриЗавершении = Новый ФиксированнаяСтруктура(ПараметрыПриЗавершении);
СтандартныеПодсистемыКлиент.УстановитьПараметрКлиента(ИмяПараметра, ПараметрыПриЗавершении);
Иначе
Настройки = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"];
Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = СледующаяДата;
КонецЕсли;
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Оповестить("ЗакрытаФормаНастройкиРезервногоКопирования");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВыполнятьАвтоматическоеРезервноеКопированиеПриИзменении(Элемент)
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаКлиенте
Процедура ТипОграниченияКаталогаСРезервнымиКопиямиПриИзменении(Элемент)
ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПутьККаталогуАрхивовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.Заголовок= НСтр("ru = 'Выберите каталог для сохранения резервных копий'");
ДиалогОткрытияФайла.Каталог = Элементы.ПутьККаталогуАрхивов.ТекстРедактирования;
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.КаталогСРезервнымиКопиями = ДиалогОткрытияФайла.Каталог;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НадписьПерейтиВЖурналРегистрацииНажатие(Элемент)
ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВариантПроведенияРезервногоКопированияПриИзменении(Элемент)
Элементы.ИзменитьРасписание.Доступность = (Объект.ВариантВыполнения = "ПоРасписанию");
КонецПроцедуры
&НаКлиенте
Процедура ЕдиницаИзмеренияПериодаХраненияРезервныхКопийОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура НадписьОбновитьВерсиюКомпонентыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Готово(Команда)
ЗаписатьНастройки = Истина;
ПерейтиСоСтраницыНастройки();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьРасписание(Команда)
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьРасписаниеЗавершение", ЭтотОбъект);
ДиалогРасписания.Показать(ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаКлиенте
Процедура ПерейтиСоСтраницыНастройки()
Настройки = ПараметрыПриложения["СтандартныеПодсистемы.ПараметрыРезервногоКопированияИБ"];
ТекущийПользователь = ПользователиКлиент.ТекущийПользователь();
Если Объект.ВыполнятьАвтоматическоеРезервноеКопирование Тогда
Если Не ПроверитьКаталогСРезервнымиКопиями() Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ПараметрыРезервногоКопированияИБ", Настройки);
Контекст.Вставить("ТекущийПользователь", ТекущийПользователь);
Оповещение = Новый ОписаниеОповещения(
"ПерейтиСоСтраницыНастройкиПослеПроверкиДоступаКИнформационнойБазе", ЭтотОбъект, Контекст);
РезервноеКопированиеИБКлиент.ПроверитьДоступКИнформационнойБазе(ПарольАдминистратораИБ, Оповещение);
Возврат;
КонецЕсли;
ОстановитьСервисОповещения(ТекущийПользователь);
РезервноеКопированиеИБКлиент.ОтключитьОбработчикОжиданияРезервногоКопирования();
Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101';
Настройки.ПараметрОповещения = "НеОповещать";
ОбновитьПовторноИспользуемыеЗначения();
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиСоСтраницыНастройкиПослеПроверкиДоступаКИнформационнойБазе(РезультатПодключения, Контекст) Экспорт
ПараметрыРезервногоКопированияИБ = Контекст.ПараметрыРезервногоКопированияИБ;
ТекущийПользователь = Контекст.ТекущийПользователь;
Если РезультатПодключения.ОшибкаПодключенияКомпоненты Тогда
Элементы.СтраницыПомощника.ТекущаяСтраница = Элементы.ДополнительныеНастройки;
ОбнаруженнаяОшибкаПодключения = РезультатПодключения.КраткоеОписаниеОшибки;
Возврат;
КонецЕсли;
ЗаписатьНастройки(ТекущийПользователь);
Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда
ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса();
ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДата;
ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования = ТекущаяДата;
ПараметрыРезервногоКопированияИБ.РасписаниеЗначение = Расписание;
ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда
ПараметрыРезервногоКопированияИБ.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101';
КонецЕсли;
РезервноеКопированиеИБКлиент.ПодключитьОбработчикОжиданияРезервногоКопирования();
ИмяФормыНастроек = "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ/";
ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование'"), ИмяФормыНастроек,
НСтр("ru = 'Резервное копирование настроено.'"));
ПараметрыРезервногоКопированияИБ.ПараметрОповещения = "НеОповещать";
ОбновитьПовторноИспользуемыеЗначения();
Закрыть();
КонецПроцедуры
&НаКлиенте
Функция ПроверитьКаталогСРезервнымиКопиями()
#Если ВебКлиент ИЛИ МобильныйКлиент Тогда
ТекстСообщения = НСтр("ru = 'Действие недоступно в веб-клиенте или в мобильном клиенте.
|Запустите тонкий клиент.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
РеквизитыЗаполнены = Ложь;
#Иначе
РеквизитыЗаполнены = Истина;
Если ПустаяСтрока(Объект.КаталогСРезервнымиКопиями) Тогда
ТекстСообщения = НСтр("ru = 'Не выбрана папка для резервной копии.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями");
РеквизитыЗаполнены = Ложь;
ИначеЕсли НайтиФайлы(Объект.КаталогСРезервнымиКопиями).Количество() = 0 Тогда
ТекстСообщения = НСтр("ru = 'Указана несуществующая папка.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями");
РеквизитыЗаполнены = Ложь;
Иначе
Попытка
ТестовыйФайл = Новый ЗаписьXML;
ТестовыйФайл.ОткрытьФайл(Объект.КаталогСРезервнымиКопиями + "/test.test1С");
ТестовыйФайл.ЗаписатьОбъявлениеXML();
ТестовыйФайл.Закрыть();
Исключение
ТекстСообщения = НСтр("ru = 'Нет доступа к папке с резервными копиями.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "Объект.КаталогСРезервнымиКопиями");
РеквизитыЗаполнены = Ложь;
КонецПопытки;
Если РеквизитыЗаполнены Тогда
Попытка
УдалитьФайлы(Объект.КаталогСРезервнымиКопиями, "*.test1С");
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
Если ТребуетсяВводПароля И ПустаяСтрока(ПарольАдминистратораИБ) Тогда
ТекстСообщения = НСтр("ru = 'Не задан пароль администратора.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ПарольАдминистратораИБ");
РеквизитыЗаполнены = Ложь;
КонецЕсли;
#КонецЕсли
Возврат РеквизитыЗаполнены;
КонецФункции
&НаСервереБезКонтекста
Процедура ОстановитьСервисОповещения(ТекущийПользователь)
НастройкиРезервногоКопирования = РезервноеКопированиеИБСервер.НастройкиРезервногоКопирования();
НастройкиРезервногоКопирования.ВыполнятьАвтоматическоеРезервноеКопирование = Ложь;
НастройкиРезервногоКопирования.РезервноеКопированиеНастроено = Истина;
НастройкиРезервногоКопирования.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101';
РезервноеКопированиеИБСервер.УстановитьНастройкиРезервногоКопирования(НастройкиРезервногоКопирования, ТекущийПользователь);
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНастройки(ТекущийПользователь)
ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
Если ЭтоБазоваяВерсияКонфигурации Тогда
Объект.ВариантВыполнения = "ПриЗавершенииРаботы";
КонецЕсли;
Настройки = РезервноеКопированиеИБСервер.ПараметрыРезервногоКопирования();
Настройки.Вставить("АдминистраторИБ", АдминистраторИБ);
Настройки.Вставить("ПарольАдминистратораИБ", ?(ТребуетсяВводПароля, ПарольАдминистратораИБ, ""));
Настройки.ДатаПоследнегоОповещения = Дата('29990101');
Настройки.КаталогХраненияРезервныхКопий = Объект.КаталогСРезервнымиКопиями;
Настройки.ВариантВыполнения = Объект.ВариантВыполнения;
Настройки.ВыполнятьАвтоматическоеРезервноеКопирование = Объект.ВыполнятьАвтоматическоеРезервноеКопирование;
Настройки.РезервноеКопированиеНастроено = Истина;
ЗаполнитьЗначенияСвойств(Настройки.ПараметрыУдаления, Объект);
Если Объект.ВариантВыполнения = "ПоРасписанию" Тогда
РасписаниеСтруктура = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание);
Настройки.РасписаниеКопирования = РасписаниеСтруктура;
Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = ТекущаяДатаСеанса();
Настройки.ДатаПоследнегоРезервногоКопирования = ТекущаяДатаСеанса();
ИначеЕсли Объект.ВариантВыполнения = "ПриЗавершенииРаботы" Тогда
Настройки.МинимальнаяДатаСледующегоАвтоматическогоРезервногоКопирования = '29990101';
КонецЕсли;
РезервноеКопированиеИБСервер.УстановитьНастройкиРезервногоКопирования(Настройки, ТекущийПользователь);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьТипОграниченияКаталогаСРезервнымиКопиями(Форма)
Форма.Элементы.ГруппаХранитьПоследниеЗаПериод.Доступность = (Форма.Объект.ТипОграничения = "ПоПериоду");
Форма.Элементы.ГруппаКоличествоКопийВКаталоге.Доступность = (Форма.Объект.ТипОграничения = "ПоКоличеству");
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьРасписаниеЗавершение(РасписаниеРезультат, ДополнительныеПараметры) Экспорт
Если РасписаниеРезультат = Неопределено Тогда
Возврат;
КонецЕсли;
Расписание = РасписаниеРезультат;
Элементы.ИзменитьРасписание.Заголовок = Строка(Расписание);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьДоступность()
Элементы.ИзменитьРасписание.Доступность = (Объект.ВариантВыполнения = "ПоРасписанию");
ДоступноРезервноеКопирование = Объект.ВыполнятьАвтоматическоеРезервноеКопирование;
Элементы.ГруппаПараметры.Доступность = ДоступноРезервноеКопирование;
Элементы.ВыборВариантаАвтоматическогоРезервногоКопирования.Доступность = ДоступноРезервноеКопирование;
КонецПроцедуры
#КонецОбласти