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