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