#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ПовторноеЧтение = (Кэш <> Неопределено);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда
СтруктураВложенийПисьмаВФорматеHTML = ТекущийОбъект.КартинкиПисьмаВФорматеHTML.Получить();
Если СтруктураВложенийПисьмаВФорматеHTML = Неопределено Тогда
СтруктураВложенийПисьмаВФорматеHTML = Новый Структура;
КонецЕсли;
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТекущийОбъект.ТекстПисьмаВФорматеHTML, СтруктураВложенийПисьмаВФорматеHTML);
КонецЕсли;
Если ПовторноеЧтение Тогда
ЗаполнитьСведенияТаблицыОтчеты();
ПрочитатьРасписаниеРегламентногоЗадания();
ДобавитьКомандыДобавленияДополнительныхПараметровТекста();
КонецЕсли;
ОтобразитьВажность();
Для Каждого Строка Из Объект.Отчеты Цикл
Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой;
КонецЦикла;
СоздатьРеквизитЭлементСертификатДляШифрования();
УстановитьВидимостьДоступностьПаролейСертификатов(ЭтотОбъект);
Если ПолучитьФункциональнуюОпцию("ХранитьИсториюРассылкиОтчетов") И НЕ Объект.Личная И Объект.ИспользоватьЭлектроннуюПочту Тогда
СостояниеРассылки = РассылкаОтчетов.ПолучитьСостояниеРассылкиОтчетов(Объект.Ссылка);
Если СостояниеРассылки.СОшибками Тогда
Элементы.ЗаголовокПовторнойРассылки.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Рассылка отчетов (%1) была отправлена не всем получателям.'"),
СостояниеРассылки.ПоследнийЗапускНачало);
Элементы.ГруппаПовторнаяРассылка.Видимость = Истина;
Иначе
Элементы.ГруппаПовторнаяРассылка.Видимость = Ложь;
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
ОбновитьСписокПараметровТекстаПисьмаИФайлов();
ПреобразоватьПараметрыТекста(Объект, "ПараметрыВПредставление");
ПреобразоватьПараметрыНастроекОтчетов(Объект, "ПараметрыВПредставление");
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтоНовый = Объект.Ссылка.Пустая();
Если ЭтоНовый Тогда
ОбновитьСписокПараметровТекстаПисьмаИФайлов();
КонецЕсли;
УстановитьУсловноеОформление();
ТекстОшибкиПриОткрытии = РассылкаОтчетов.ТекстОшибкиПроверкиПраваДобавления();
Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда
МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
МодульВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
Если Объект.ПометкаУдаления Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
Если ТипЗнч(Объект.Папка) = Тип("Неопределено") Или ТипЗнч(Объект.Папка) = Тип("Строка") Тогда
Элементы.ДругойСпособДоставки.СписокВыбора.Удалить(0);
КонецЕсли;
Если ОбщегоНазначения.РазделениеВключено() Тогда
СпособДоставкиСетевойКаталог = Элементы.ДругойСпособДоставки.СписокВыбора.НайтиПоЗначению("ИспользоватьСетевойКаталог");
Элементы.ДругойСпособДоставки.СписокВыбора.Удалить(СпособДоставкиСетевойКаталог);
КонецЕсли;
Если Не ПравоДоступа("ЖурналРегистрации", Метаданные) Тогда
Элементы.КомандаСобытияРассылки.Видимость = Ложь;
Элементы.СобытияРассылки.Видимость = Ложь;
КонецЕсли;
РассылкаОснование = Параметры.ЗначениеКопирования;
ИдентификаторТекущейСтрокиТаблицыОтчетов = -1;
СозданКопированием = Не РассылкаОснование.Пустая();
Если ЭтоНовый Тогда
СоздатьРеквизитЭлементСертификатДляШифрования();
ОтобразитьВажность();
КонецЕсли;
Если ТипЗнч(Параметры.ПрисоединяемыеОтчеты) = Тип("Массив") Тогда
Модифицированность = Истина;
ДобавитьНастройкиОтчетов(Параметры.ПрисоединяемыеОтчеты);
КонецЕсли;
Кэш = ПолучитьКэш();
Расписание = Новый РасписаниеРегламентногоЗадания;
РассылкаБылаПерсонализирована = Объект.Персонализирована;
ЗаполнитьСведенияТаблицыОтчеты();
ЗаполнитьПустыеШаблоныСтандартными(Объект);
Если ЭтоНовый И Не СозданКопированием Тогда
УстановитьВидРассылки();
ЗаполнитьРасписаниеПоВарианту(Неопределено);
Иначе
ПрочитатьРасписаниеРегламентногоЗадания();
КонецЕсли;
Если ЭтоНовый Тогда
ТекущийПользователь = Пользователи.ТекущийПользователь();
Объект.Автор = ТекущийПользователь;
Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ОбычнаяВажностьИнтернетПочтовогоСообщения();
Объект.ПрикреплятьОтчетыВоВложения = Истина;
Если Не ЗначениеЗаполнено(Объект.Автор) Тогда
Отказ = Истина;
ПараметрыЖурнала = Новый Структура;
ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Открытие формы элемента'", ОбщегоНазначения.КодОсновногоЯзыка()));
ПараметрыЖурнала.Вставить("Данные", Неопределено);
ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов);
Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 не может быть указан автором рассылки.'"),
ОбщегоНазначения.ПредметСтрокой(ТекущийПользователь));
РассылкаОтчетов.ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, Текст);
Возврат;
КонецЕсли;
Если СозданКопированием Тогда
АвторОснования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РассылкаОснование, "Автор");
Если АвторОснования = ТекущийПользователь Тогда
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(РассылкаОснование,
"ПарольАрхива, FTPПароль");
УстановитьПривилегированныйРежим(Ложь);
Если ЗначениеЗаполнено(Пароли.ПарольАрхива) Тогда
ПарольАрхиваИзменен = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Пароли.FTPПароль) Тогда
FTPПароль = ПарольСкрыт();
FTPПарольИзменен = Истина;
КонецЕсли;
Если Объект.Личная И ДоступноШифрованиеВложений Тогда
ПолучателиСертификаты = РассылкаОтчетов.ПолучитьСертификатыШифрованияПолучателейРассылки(Объект.Автор);
Если ПолучателиСертификаты.Количество() > 0 Тогда
ЭтотОбъект["СертификатДляШифрования"] = ПолучателиСертификаты[0].СертификатДляШифрования;
СертификатДляШифрованияИзменен = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ПарольАрхиваИзменен Тогда
Объект.ИмяАрхива = Кэш.Шаблоны.ИмяАрхива;
КонецЕсли;
Если Не FTPПарольИзменен Тогда
Объект.FTPЛогин = "";
Объект.FTPСервер = "";
Объект.FTPПорт = 21;
Объект.FTPКаталог = "";
КонецЕсли;
Иначе
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Объект.Ссылка, "ПарольАрхива, FTPПароль");
УстановитьПривилегированныйРежим(Ложь);
ПарольАрхива = ?(ЗначениеЗаполнено(Пароли.ПарольАрхива), Пароли.ПарольАрхива, "");
FTPПароль = ?(ЗначениеЗаполнено(Пароли.FTPПароль), ПарольСкрыт(), "");
Если Объект.Личная И ДоступноШифрованиеВложений Тогда
ПолучателиСертификаты = РассылкаОтчетов.ПолучитьСертификатыШифрованияПолучателейРассылки(Объект.Автор);
Если ПолучателиСертификаты.Количество() > 0 Тогда
ЭтотОбъект["СертификатДляШифрования"] = ПолучателиСертификаты[0].СертификатДляШифрования;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Пароли = Неопределено;
РассылкуРедактируетАвтор = (Объект.Автор = Пользователи.ТекущийПользователь());
Элементы.ОтчетыДобавитьДополнительныйОтчет.Доступность = ?(Кэш.ПустоеЗначениеОтчета = Неопределено, Истина, Ложь);
Элементы.Автор.Доступность = Пользователи.ЭтоПолноправныйПользователь();
СписокФорматовПоУмолчанию = РассылкаОтчетов.СписокФорматов();
СписокФорматовПоУмолчаниюПредставление = "";
Для Каждого ЭлементСписка Из СписокФорматовПоУмолчанию Цикл
Если ЭлементСписка.Пометка Тогда
СписокФорматовПоУмолчаниюПредставление = СписокФорматовПоУмолчаниюПредставление + ?(СписокФорматовПоУмолчаниюПредставление = "", "", ", ") + Строка(ЭлементСписка.Представление);
КонецЕсли;
КонецЦикла;
СписокФорматов = СписокФорматовПоУмолчанию.Скопировать();
ФорматыПоУмолчанию = "";
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", Кэш.ПустоеЗначениеОтчета));
Если Найденные.Количество() = 0 Тогда
ФорматыПоУмолчанию = СписокФорматовПоУмолчаниюПредставление;
Иначе
Для Каждого СтрокаФормат Из Найденные Цикл
ФорматыПоУмолчанию = ФорматыПоУмолчанию + ?(ФорматыПоУмолчанию = "", "", ", ") + РассылкаОтчетов.ПредставлениеФормата(СтрокаФормат.Формат);
КонецЦикла;
КонецЕсли;
Если СтруктураВложенийПисьмаВФорматеHTML = Неопределено Тогда
СтруктураВложенийПисьмаВФорматеHTML = Новый Структура;
КонецЕсли;
Элементы.ПустыеНастройки.ОтборСтрок = Новый ФиксированнаяСтруктура("ИндексКартинки", 200);
ПочтовыеАдресаПолучателя(Объект.Автор, Элементы.ВидПочтовогоАдресаАвтора.СписокВыбора);
ПодключитьКэшНастроекЭлектроннойПочты();
Если СозданКопированием Тогда
ПрочитатьНастройкиОтчетовОбъектаКопирования();
ПреобразоватьПараметрыТекста(Объект, "ПараметрыВПредставление");
ПреобразоватьПараметрыНастроекОтчетов(Объект, "ПараметрыВПредставление");
КонецЕсли;
Если Объект.Отчеты.Количество() > 0 И ИдентификаторТекущейСтрокиТаблицыОтчетов = -1 Тогда
СтрокаОтчеты = Объект.Отчеты[0];
ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор();
ТекстОшибки = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки);
Если ТекстОшибки <> "" Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , "Объект.Отчеты[0].Представление");
КонецЕсли;
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект);
ДобавитьКомандыДобавленияДополнительныхПараметровТекста();
ЗафиксироватьЗначенияРеквизитовДоИзменения();
Для Каждого Строка Из Объект.Отчеты Цикл
Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой;
КонецЦикла;
Если ПравоДоступа("Изменение", Метаданные.Справочники.РассылкиОтчетов) Тогда
Элементы.ПарольАрхива.КнопкаВыбора = Истина;
Иначе
Элементы.ПарольАрхива.КнопкаВыбора = Ложь;
КонецЕсли;
ПроверитьНаличиеПериодовВОтчетах();
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
Элементы.КомандаЗаписатьИЗакрыть.Отображение = ОтображениеКнопки.Картинка;
Элементы.ДругиеСпособыДоставки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
Элементы.ИспользоватьСетевойКаталог.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
Элементы.ИспользоватьПапку.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
Элементы.АдресОтветаСкрытыеКопии.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяЕслиВозможно;
Элементы.Переместить(Элементы.ДоставкаПраво, Элементы.СтраницаДополнительно);
Элементы.Переместить(Элементы.ГруппаПаролиШифрование, Элементы.СтраницаДополнительно);
Элементы.ФорматыПоУмолчанию.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
Элементы.ПолучателиРассылки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ФормаБылаМодифицированаНаСервере Тогда
Модифицированность = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибкиПриОткрытии) Тогда
Отказ = Истина;
ПоказатьПредупреждение(, ТекстОшибкиПриОткрытии);
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецЕсли;
Если ЗначениеЗаполнено(ТекстВсплывающегоОповещенияПриОткрытии) Тогда
ПоказатьОповещениеПользователя(ТекстВсплывающегоОповещенияПриОткрытии, , , БиблиотекаКартинок.ВыполнитьЗадачу)
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если Не ЗначениеЗаполнено(Объект.Наименование) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не введено наименование.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Наименование");
КонецЕсли;
Если Объект.ИспользоватьЭлектроннуюПочту И Не Объект.Личная Тогда
Если Не ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбран тип получателей.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ТипПолучателейРассылки");
КонецЕсли;
КонецЕсли;
Если Объект.Подготовлена Тогда
Если Объект.Отчеты.Количество() = 0 Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбрано ни одного отчета.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Отчеты");
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ПериодичностьРасписания) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбрана периодичность запуска.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ПериодичностьРасписания");
КонецЕсли;
Если Объект.ИспользоватьFTPРесурс Тогда
Если Не ЗначениеЗаполнено(Объект.FTPСервер)
Или Не ЗначениеЗаполнено(Объект.FTPПорт)
Или Не ЗначениеЗаполнено(Объект.FTPКаталог) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не введен FTP адрес.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "FTPСерверИКаталог");
КонецЕсли;
КонецЕсли;
Если Объект.ИспользоватьСетевойКаталог Тогда
Если Не ЗначениеЗаполнено(Объект.СетевойКаталогWindows) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не введен сетевой каталог Windows.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогWindows");
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.СетевойКаталогLinux) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не введен сетевой каталог Linux.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.СетевойКаталогLinux");
КонецЕсли;
КонецЕсли;
Если Объект.ИспользоватьПапку Тогда
Если Не ЗначениеЗаполнено(Объект.Папка) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбрана папка.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.Папка");
КонецЕсли;
КонецЕсли;
Если Объект.ИспользоватьЭлектроннуюПочту Тогда
Если Объект.Личная Тогда
Если Не ЗначениеЗаполнено(Объект.ВидПочтовогоАдресаПолучателей) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбран почтовый адрес.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.ВидПочтовогоАдресаПолучателей");
КонецЕсли;
Иначе
Если Не ПолучателиУказаны(Объект.Получатели) Тогда
Отказ = Истина;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ВидПочтовогоАдресаПолучателей) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбран тип почтового адреса получателей.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ПолучателиРассылки");
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.УчетнаяЗапись) Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Не выбрана учетная запись для отправки.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Объект.УчетнаяЗапись");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Объект.ВыполнятьПоРасписанию Тогда
Если Объект.ПериодичностьРасписания <> Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное
И ЗначениеЗаполнено(Расписание.ВремяКонца)Тогда
РазностьДатВЧасах = СекундыВЧасы(Расписание.ВремяКонца - Расписание.ВремяНачала);
Если РазностьДатВЧасах < 4 Тогда
Отказ = Истина;
ТекстСообщения = НСтр("ru = 'Время окончания рассылки отчетов должно быть на 4 часа позже времени начала.'");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "ВремяОкончания");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
Если ПараметрыЗаписи = Неопределено Тогда
ПараметрыЗаписи = Новый Структура;
КонецЕсли;
Если Не ПараметрыЗаписи.Свойство("Шаг") Тогда
Отказ = Истина;
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
ПодключитьОбработчикОжидания("ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки", 0.1, Истина);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда
ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов);
КонецЕсли;
ПроверитьОбязательные = Объект.Подготовлена;
РассылкаНеПерсонализирована = (Не Объект.Персонализирована И РассылкаБылаПерсонализирована);
Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл
ОбъектСтрокаОтчеты = ТекущийОбъект.Отчеты.Получить(СтрокаОтчеты.НомерСтроки-1);
Если СтрокаОтчеты.ВнесеныИзменения Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек);
ОбъектСтрокаОтчеты.Настройки = Новый ХранилищеЗначения(ПользовательскиеНастройки, Новый СжатиеДанных(9));
Если Не ПроверитьОбязательные И Не РассылкаНеПерсонализирована Тогда
Продолжить;
КонецЕсли;
Иначе
Если Не ПроверитьОбязательные И Не РассылкаНеПерсонализирована Тогда
Продолжить;
КонецЕсли;
Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек);
Иначе
ПользовательскиеНастройки = ОбъектСтрокаОтчеты.Настройки.Получить();
КонецЕсли;
КонецЕсли;
ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, Истина, ПользовательскиеНастройки, Ложь);
НастройкиОтчета = ?(СтрокаОтчеты.СКД, ПараметрыОтчета.КомпоновщикНастроекКД, ПользовательскиеНастройки);
ОтчетПерсонализирован = Ложь;
Если СтрокаОтчеты.СКД Тогда
НастройкиКД = НастройкиОтчета.Настройки;
ПользовательскиеНастройкиКД = НастройкиОтчета.ПользовательскиеНастройки;
Фильтр = Новый Структура("Использование, Значение", Истина, ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов));
Найденные = ОтчетыКлиентСервер.ЭлементыНастроекОтобранные(ПользовательскиеНастройкиКД, Фильтр);
Если Найденные.Количество() > 0 Тогда
ОтчетПерсонализирован = Истина;
КонецЕсли;
ЗаполненыВсеОбязательныеНастройки = Истина;
Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл
Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Идентификатор = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки;
ОбщаяНастройка = ОтчетыКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, Идентификатор);
Если ОбщаяНастройка = Неопределено Тогда
Продолжить;
КонецЕсли;
ДоступнаяНастройка = ОтчетыКлиентСервер.НайтиДоступнуюНастройку(НастройкиКД, ОбщаяНастройка);
Если ДоступнаяНастройка = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Не ДоступнаяНастройка.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда
И Не ПользовательскаяНастройка.Использование Тогда
Продолжить;
КонецЕсли;
Если ДоступнаяНастройка.ЗапрещатьНезаполненныеЗначения И Не ЗначениеЗаполнено(ПользовательскаяНастройка.Значение) Тогда
ЗаполненыВсеОбязательныеНастройки = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ЗаполненыВсеОбязательныеНастройки Тогда
Отказ = Истина;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Для отчета ''%1'' заполнены не все настройки, обязательные для заполнения. Заполните все обязательные настройки или снимите флажок ''Подготовлена''.'"),
Строка(СтрокаОтчеты.Отчет));
Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление";
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле);
КонецЕсли;
КонецЕсли;
Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда
Найденные = НастройкиОтчета.НайтиСтроки(Новый Структура("Значение, Использование", ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов), Истина));
Если Найденные.Количество() > 0 Тогда
ОтчетПерсонализирован = Истина;
КонецЕсли;
КонецЕсли;
Если РассылкаНеПерсонализирована И ОтчетПерсонализирован Тогда
Отказ = Истина;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В настройках отчета ''%1'' задан отбор по получателю рассылки. Отключите этот отбор или измените вид рассылки на ''Свой отчет для каждого получателя''.'"),
Строка(СтрокаОтчеты.Отчет));
Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление";
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле);
КонецЕсли;
Если Объект.Персонализирована И НЕ ОтчетПерсонализирован Тогда
Отказ = Истина;
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В настройках отчета ""%1"" не указан отбор по получателю рассылки.'"),
Строка(СтрокаОтчеты.Отчет));
Поле = "Отчеты["+ Формат(ТекущийОбъект.Отчеты.Индекс(ОбъектСтрокаОтчеты), "ЧН=0; ЧГ=0") +"].Представление";
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ТекущийОбъект, Поле);
КонецЕсли;
КонецЦикла;
ТекущийОбъект.КартинкиПисьмаВФорматеHTML = Неопределено;
Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда
ТекущийОбъект.ТекстПисьма = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст());
Если ТекущийОбъект.ТекстПисьма = "" Тогда
ТекущийОбъект.ТекстПисьмаВФорматеHTML = "";
Иначе
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекущийОбъект.ТекстПисьмаВФорматеHTML, СтруктураВложенийПисьмаВФорматеHTML);
Если ТипЗнч(СтруктураВложенийПисьмаВФорматеHTML) = Тип("Структура")
И СтруктураВложенийПисьмаВФорматеHTML.Количество() > 0 Тогда
ТекущийОбъект.КартинкиПисьмаВФорматеHTML = Новый ХранилищеЗначения(СтруктураВложенийПисьмаВФорматеHTML, Новый СжатиеДанных(9));
КонецЕсли;
ТекущийОбъект.ТекстПисьма = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда
Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки));
Если Найденные.Количество() = 1 Тогда
ТекущийОбъект.ТипПолучателейРассылки = Найденные[0].ИдентификаторОбъектаМетаданных;
Иначе
ТекущийОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка();
КонецЕсли;
Иначе
ТекущийОбъект.ТипПолучателейРассылки = Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка();
КонецЕсли;
Если Объект.ПериодичностьРасписания <> Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное
И Не ЗначениеЗаполнено(Расписание.ПериодПовтораВТечениеДня)Тогда
Расписание.ВремяКонца = '00010101';
КонецЕсли;
ТекущийОбъект.ДополнительныеСвойства.Вставить("Расписание", Расписание);
Если Не Отказ Тогда
ПреобразоватьПараметрыТекста(ТекущийОбъект, "ПредставлениеВПараметры");
ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, "ПредставлениеВПараметры");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ПарольАрхиваИзмененНоСкрыт = ПарольАрхиваИзменен И ПарольАрхива = ПарольСкрыт();
FTPПарольИзмененНоСкрыт = FTPПарольИзменен И FTPПароль = ПарольСкрыт();
Если (ПарольАрхиваИзмененНоСкрыт Или FTPПарольИзмененНоСкрыт) И ЗначениеЗаполнено(РассылкаОснование) Тогда
ТекущийПользователь = Пользователи.ТекущийПользователь();
АвторОснования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РассылкаОснование, "Автор");
Если АвторОснования = ТекущийПользователь Тогда
УстановитьПривилегированныйРежим(Истина);
Если ПарольАрхиваИзмененНоСкрыт Тогда
ВременнаяПеременная = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(РассылкаОснование, "ПарольАрхива");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ВременнаяПеременная, "ПарольАрхива");
ПарольАрхиваИзменен = Ложь;
КонецЕсли;
Если FTPПарольИзмененНоСкрыт Тогда
ВременнаяПеременная = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(РассылкаОснование, "FTPПароль");
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ВременнаяПеременная, "FTPПароль");
FTPПарольИзменен = Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
РассылкаОснование = Неопределено;
КонецЕсли;
Если ПарольАрхиваИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, ПарольАрхива, "ПарольАрхива");
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если FTPПарольИзменен Тогда
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(ТекущийОбъект.Ссылка, FTPПароль, "FTPПароль");
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если ДоступноШифрованиеВложений И СертификатДляШифрованияИзменен Тогда
РегистрыСведений.СертификатыПолучателейРассылкиОтчетов.СохранитьСертификатДляПолучателяРассылки(
Объект.Автор, ЭтотОбъект["СертификатДляШифрования"]);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ПреобразоватьПараметрыТекста(Объект, "ПараметрыВПредставление");
ПреобразоватьПараметрыНастроекОтчетов(Объект, "ПараметрыВПредставление");
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
ЗаполнитьСведенияТаблицыОтчеты();
ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторТекущейСтрокиТаблицыОтчетов);
ЗафиксироватьЗначенияРеквизитовДоИзменения();
Для Каждого Строка Из Объект.Отчеты Цикл
Строка.НеОтправлятьПустой = Не Строка.ОтправлятьЕслиПустой;
КонецЦикла;
ПроверитьНаличиеПериодовВОтчетах();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПодготовленаПриИзменении(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Подготовлена");
КонецПроцедуры
#Область СтраницаРасписание
&НаКлиенте
Процедура ВыполнятьПоРасписаниюПриИзменении(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ВыполнятьПоРасписанию");
КонецПроцедуры
&НаКлиенте
Процедура МесяцыПриИзменении(Элемент)
Если Элемент <> Неопределено Тогда
Расписание.Месяцы = ИзменитьСоставМассива(ЭтотОбъект[Элемент.Имя], Кэш.Соответствия.Месяцы[Элемент.Имя], Расписание.Месяцы);
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Месяцы");
КонецПроцедуры
&НаКлиенте
Процедура ДниНеделиПриИзменении(Элемент)
Если Элемент <> Неопределено Тогда
Расписание.ДниНедели = ИзменитьСоставМассива(ЭтотОбъект[Элемент.Имя], Кэш.Соответствия.ДниНедели[Элемент.Имя], Расписание.ДниНедели);
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ДниНедели");
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьРасписание(Команда)
Если ОбщегоНазначенияКлиент.РазделениеВключено() Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Произвольное расписание недоступно при работе через Интернет.'"));
Возврат;
КонецЕсли;
ИзменитьРасписаниеВДиалоге();
КонецПроцедуры
&НаКлиенте
Процедура ПериодичностьРасписанияПриИзменении(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПериодичностьРасписания");
Если Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Произвольное")
И НЕ ОбщегоНазначенияКлиент.РазделениеВключено() Тогда
ИзменитьРасписаниеВДиалоге();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаНачалоКонецМесяцаНажатие(Элемент)
Если Расписание.ДеньВМесяце = 0 Тогда
ДеньВМесяце = 1;
Расписание.ДеньВМесяце = -1;
Иначе
Расписание.ДеньВМесяце = -Расписание.ДеньВМесяце;
КонецЕсли;
Модифицированность = Истина;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "НачалоКонецМесяца");
КонецПроцедуры
&НаКлиенте
Процедура ВремяНачалаПриИзменении(Элемент)
Расписание.ВремяНачала = ВремяНачала;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ВремяНачала");
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьПериодПовтораВТечениеДняПриИзменении(Элемент)
ПериодПовтораВТечениеДня = ?(ИспользоватьПериодПовтораВТечениеДня, 1, 0);
ВремяОкончания = ?(ИспользоватьПериодПовтораВТечениеДня, ВремяНачала + ЧасыВСекунды(4), '00010101');
Расписание.ВремяКонца = ВремяОкончания;
Расписание.ПериодПовтораВТечениеДня = ЧасыВСекунды(ПериодПовтораВТечениеДня);
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПериодПовтораВТечениеДня");
КонецПроцедуры
&НаКлиенте
Процедура ПериодПовтораВТечениеДняПриИзменении(Элемент)
Расписание.ПериодПовтораВТечениеДня = ЧасыВСекунды(ПериодПовтораВТечениеДня);
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПериодПовтораВТечениеДня");
КонецПроцедуры
&НаКлиенте
Процедура ВремяОкончанияПриИзменении(Элемент)
Расписание.ВремяКонца = ВремяОкончания;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ВремяОкончания");
КонецПроцедуры
&НаКлиенте
Процедура ПериодПовтораДнейПриИзменении(Элемент)
Расписание.ПериодПовтораДней = ПериодПовтораДней;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПериодПовтораДней");
КонецПроцедуры
&НаКлиенте
Процедура ДеньМесяцаПриИзменении(Элемент)
Расписание.ДеньВМесяце = ?(Расписание.ДеньВМесяце >= 0, ДеньВМесяце, -ДеньВМесяце);
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ДеньВМесяце");
КонецПроцедуры
#КонецОбласти
#Область СтраницаДоставка
&НаКлиенте
Процедура ТипПолучателейРассылкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = ТипПолучателейРассылки Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ВыбранноеЗначение));
Если Найденные.Количество() <> 1 Тогда
СтандартнаяОбработка = Ложь;
Возврат;
КонецЕсли;
Если Объект.Получатели.Количество() > 0 Тогда
СтандартнаяОбработка = Ложь;
СтрокаВопроса = НСтр("ru = 'Для продолжения необходимо очистить список получателей.'");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Очистить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ВыбранноеЗначение", ВыбранноеЗначение);
Обработчик = Новый ОписаниеОповещения("ТипПолучателейРассылкиОбработкаВыбораЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Обработчик, СтрокаВопроса, Кнопки, 60, КодВозвратаДиалога.Да);
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПолучателиРассылки");
КонецПроцедуры
&НаКлиенте
Процедура ТипПолучателейРассылкиПриИзменении(Элемент)
Найденные = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки));
Если Найденные.Количество() = 1 Тогда
СтрокаПолучатель = Найденные[0];
Объект.ТипПолучателейРассылки = СтрокаПолучатель.ИдентификаторОбъектаМетаданных;
Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ;
ДобавитьКомандыДобавленияДополнительныхПараметровТекста();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТипПолучателейРассылкиОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ВидПочтовогоАдресаАвтораОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, Объект.Автор);
КонецПроцедуры
&НаКлиенте
Процедура FTPСерверИКаталогПриИзменении(Элемент)
ВыбранноеЗначение = РассылкаОтчетовКлиент.РазобратьFTPАдрес(FTPСерверИКаталог);
FTPСерверИКаталогОбработкаВыбора(Элемент, ВыбранноеЗначение, Истина);
КонецПроцедуры
&НаКлиенте
Процедура FTPСерверИКаталогНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыПроизвольнойФормы = Новый Структура("Сервер, Каталог, Порт, Логин, ПассивноеСоединение");
Для Каждого КлючИЗначение Из ПараметрыПроизвольнойФормы Цикл
ПараметрыПроизвольнойФормы[КлючИЗначение.Ключ] = Объект["FTP" + КлючИЗначение.Ключ];
КонецЦикла;
ПараметрыПроизвольнойФормы.Вставить("Пароль", FTPПароль);
ПараметрыПроизвольнойФормы.Вставить("Заголовок", НСтр("ru = '<Укажите получателя>'"));
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПараметрыFTP", ПараметрыПроизвольнойФормы, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура FTPСерверИКаталогОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыбранноеЗначение = Неопределено Или ТипЗнч(ВыбранноеЗначение) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;
Для Каждого КлючИЗначение Из ВыбранноеЗначение Цикл
Если КлючИЗначение.Ключ = "Пароль" Тогда
Если КлючИЗначение.Значение <> FTPПароль И КлючИЗначение.Значение <> ПарольСкрыт() Тогда
FTPПароль = КлючИЗначение.Значение;
FTPПарольИзменен = Истина;
КонецЕсли;
Иначе
Объект["FTP" + КлючИЗначение.Ключ] = КлючИЗначение.Значение;
КонецЕсли;
КонецЦикла;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "FTPСерверИКаталог");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура FTPСерверИКаталогОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура FTPСерверИКаталогОткрытие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПолныйАдрес = "ftp://"+ Объект.FTPСервер +":"+ Формат(Объект.FTPПорт, "ЧН=21; ЧГ=0") + Объект.FTPКаталог;
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку(ПолныйАдрес);
КонецПроцедуры
&НаКлиенте
Процедура ВидРассылкиПриИзменении(Элемент)
Объект.Личная = (ВидРассылки = "Личная");
Объект.Персонализирована = (ВидРассылки = "Персонализирована");
Если Не Объект.ВставлятьОтчетыВТекстПисьма И НЕ Объект.ТолькоУведомить Тогда
Объект.ПрикреплятьОтчетыВоВложения = Истина;
КонецЕсли;
Если Объект.Личная Тогда
Объект.Получатели.Очистить();
ИначеЕсли Не ЗначениеЗаполнено(ТипПолучателейРассылки) Тогда
Если Элементы.ТипПолучателейРассылки.СписокВыбора.Количество() > 0 Тогда
ТипПолучателейРассылки = Элементы.ТипПолучателейРассылки.СписокВыбора[0].Значение;
ТипПолучателейРассылкиПриИзменении(Элементы.ТипПолучателейРассылки);
КонецЕсли;
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ВидРассылки");
ДобавитьКомандыДобавленияДополнительныхПараметровТекста();
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьЭлектроннуюПочтуПриИзменении(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ИспользоватьЭлектроннуюПочту");
Если Не Публиковать И Не Объект.ИспользоватьЭлектроннуюПочту Тогда
Публиковать = Истина;
ВычислитьФлажкиДополнительныхСпособовДоставки();
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Публиковать");
ИначеЕсли Объект.ИспользоватьЭлектроннуюПочту И НЕ Объект.ВставлятьОтчетыВТекстПисьма И НЕ Объект.ТолькоУведомить Тогда
Объект.ПрикреплятьОтчетыВоВложения = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТолькоУведомитьПриИзменении(Элемент)
Если Объект.ТолькоУведомить Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
Объект.ПрикреплятьОтчетыВоВложения = Ложь;
Иначе
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
Объект.ПрикреплятьОтчетыВоВложения = Истина;
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ТолькоУведомить");
КонецПроцедуры
&НаКлиенте
Процедура ДругойСпособДоставкиПриИзменении(Элемент)
ВычислитьФлажкиДополнительныхСпособовДоставки();
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ДругойСпособДоставки");
КонецПроцедуры
&НаКлиенте
Процедура ДругойСпособДоставкиОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, СтандартнаяОбработка)
Если ПустаяСтрока(Текст) Тогда
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПубликоватьПриИзменении(Элемент)
ВычислитьФлажкиДополнительныхСпособовДоставки();
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Публиковать");
Если Не Публиковать И Не Объект.ИспользоватьЭлектроннуюПочту Тогда
Объект.ИспользоватьЭлектроннуюПочту = Истина;
Объект.ПрикреплятьОтчетыВоВложения = Истина;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ИспользоватьЭлектроннуюПочту");
ИначеЕсли Объект.ИспользоватьЭлектроннуюПочту И НЕ Объект.ВставлятьОтчетыВТекстПисьма И НЕ Объект.ТолькоУведомить Тогда
Объект.ПрикреплятьОтчетыВоВложения = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПапкаОткрытие(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент");
МодульРаботаСФайламиСлужебныйКлиент.РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Объект.Папка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПапкаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если Не ПравоИзмененияПапкиИФайлов(ВыбранноеЗначение) Тогда
СтандартнаяОбработка = Ложь;
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Недостаточно прав для изменения файлов папки ""%1"".'"),
Строка(ВыбранноеЗначение));
ВызватьИсключение(ТекстПредупреждения, КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СетевойКаталогWindowsПриИзменении(Элемент)
Объект.СетевойКаталогWindows = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.СетевойКаталогWindows);
Если ПустаяСтрока(Объект.СетевойКаталогLinux) Тогда
Объект.СетевойКаталогLinux = СтрЗаменить(Объект.СетевойКаталогWindows, "\", "/");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СетевойКаталогLinuxПриИзменении(Элемент)
Объект.СетевойКаталогLinux = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.СетевойКаталогLinux);
Если ПустаяСтрока(Объект.СетевойКаталогWindows) Тогда
Объект.СетевойКаталогWindows = СтрЗаменить(Объект.СетевойКаталогLinux, "/", "\");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СтраницаДополнительно
&НаКлиенте
Процедура ФорматыПоУмолчаниюНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Обработчик = Новый ОписаниеОповещения("ФорматыПоУмолчаниюЗавершениеВыбора", ЭтотОбъект);
ВыбратьФормат(Кэш.ПустоеЗначениеОтчета, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура АрхивироватьПриИзменении(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Архивировать");
ПроверкаПриУстановкеПароляАрхиваВставлятьОтчетыВТекстПисьма();
КонецПроцедуры
&НаКлиенте
Процедура АвторПриИзменении(Элемент)
ТекущийСписок = Элементы.ВидПочтовогоАдресаАвтора.СписокВыбора;
ТекущийСписок.Очистить();
НовыйСписок = Новый СписокЗначений;
ПочтовыеАдресаПолучателя(Объект.Автор, НовыйСписок);
Для Каждого ЭлементСписка Из НовыйСписок Цикл
ЗаполнитьЗначенияСвойств(ТекущийСписок.Добавить(), ЭлементСписка);
КонецЦикла;
Если НовыйСписок.НайтиПоЗначению(Объект.ВидПочтовогоАдресаПолучателей) = Неопределено Тогда
Объект.ВидПочтовогоАдресаПолучателей = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяАрхиваОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = "НаименованиеДатаРассылки" Тогда
ДобавитьШаблон();
СтандартнаяОбработка = Ложь;
ТекущийЭлемент.ВыделенныйТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеРассылки + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаВыполнения + "()]");
Переменные = ПеременныеВыбораШаблонаНаименованияОтчета("НаименованиеДатаРассылки", Ложь);
Переменные.Элемент = ТекущийЭлемент;
Переменные.Префикс = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеРассылки + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаВыполнения + "(");
Переменные.Постфикс = ")]";
Переменные.ИзменятьШаблонНаименованияОтчета = Ложь;
Обработчик = Новый ОписаниеОповещения("ДобавитьИзменитьШаблонДатыРассылкиЗавершение", ЭтотОбъект, Переменные);
Диалог = Новый КонструкторФорматнойСтроки;
Диалог.ДоступныеТипы = Новый ОписаниеТипов("Дата");
Диалог.Текст = Переменные.ТекстФормата;
Диалог.Показать(Обработчик);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПарольАрхиваПриИзменении(Элемент)
ПарольАрхиваИзменен = Истина;
ПроверкаПриУстановкеПароляАрхиваВставлятьОтчетыВТекстПисьма();
КонецПроцедуры
&НаКлиенте
Процедура ПарольАрхиваНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
РаботаСПочтовымиСообщениямиКлиент.ПолеПароляНачалоВыбора(Элемент, ПарольАрхива, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СертификатДляШифрованияПриИзменении(Элемент)
СертификатДляШифрованияИзменен = Истина;
Если ЗначениеЗаполнено(ЭтотОбъект["СертификатДляШифрования"]) И Объект.ВставлятьОтчетыВТекстПисьма
И Объект.ПрикреплятьОтчетыВоВложения Тогда
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьСертификатДляШифрования", НСтр("ru = 'Установить сертификат для шифрования'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы установить сертификат для шифрования, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "УстановитьСертификатДляШифрования";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросПарольШифрованиеОтчетыВТекстеПисьма", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПаролиЗашифроватьПриИзменении(Элемент)
УстановитьВидимостьДоступностьПаролейСертификатов(ЭтотОбъект);
Если НЕ Объект.ВставлятьОтчетыВТекстПисьма И Объект.УстановитьПаролиЗашифровать Тогда
ОткрытьФормуПаролиШифрование();
ИначеЕсли Объект.ВставлятьОтчетыВТекстПисьма И Объект.УстановитьПаролиЗашифровать Тогда
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
Если ДоступноШифрованиеВложений Тогда
Если Объект.Архивировать Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьПаролиЗашифровать", НСтр("ru = 'Установить пароли и зашифровать'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы установить пароли и зашифровать, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "УстановитьПаролиЗашифровать";
Иначе
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьПаролиЗашифровать", НСтр("ru = 'Зашифровать'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы зашифровать отчеты, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "Зашифровать";
КонецЕсли;
ИначеЕсли Объект.Архивировать Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьПаролиЗашифровать", НСтр("ru = 'Установить пароли'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы установить пароли, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "УстановитьПароли";
КонецЕсли;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросУстановитьПаролиОтчетыВТекстеПисьма", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОтчеты
&НаКлиенте
Процедура ОтчетыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтруктураЗаполнения = Новый Структура;
СтруктураЗаполнения.Вставить("Форматы", "");
СтруктураЗаполнения.Вставить("ОтправлятьЕслиПустой", Ложь);
СтруктураЗаполнения.Вставить("НеОтправлятьПустой", Истина);
СтруктураЗаполнения.Вставить("Доступность", Истина);
СтруктураЗаполнения.Вставить("ШаблонНаименования", "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета
+ "] [" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]");
МассивНовыхСтрок = ВыборПодборПеретаскиваниеВТабличнуюЧасть(
ВыбранноеЗначение,
Объект.Отчеты,
"Отчет",
СтруктураЗаполнения,
Истина);
Шаблон = Новый ФиксированнаяСтруктура("Количество, МассивСтрок, ПредставлениеОтчетов, Текст", 0, Неопределено, "");
СтруктураВыбора = Новый Структура;
СтруктураВыбора.Вставить("Выбрано", Новый Структура(Шаблон));
СтруктураВыбора.Вставить("Успешно", Новый Структура(Шаблон));
СтруктураВыбора.Вставить("СОшибками", Новый Структура(Шаблон));
СтруктураВыбора.Выбрано.МассивСтрок = МассивНовыхСтрок;
СтруктураВыбора.Успешно.МассивСтрок = Новый Массив;
СтруктураВыбора.СОшибками.МассивСтрок = Новый Массив;
ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора);
Если СтруктураВыбора.СОшибками.Количество > 0 Тогда
Если СтруктураВыбора.Выбрано.Количество = 1 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось включить отчет в рассылку по причине:
|%1'"), СтруктураВыбора.СОшибками.Текст);
ИначеЕсли СтруктураВыбора.Успешно.Количество = 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Не удалось включить отчеты в рассылку по причине:
|%1'"), СтруктураВыбора.СОшибками.Текст);
Иначе
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'В рассылку включено отчетов: %1 из %2
|Подробности:
|%3'"),
Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="),
Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="),
СтруктураВыбора.СОшибками.Текст);
КонецЕсли;
ПоказатьПредупреждение(Неопределено, ТекстСообщения);
Иначе
Если СтруктураВыбора.Успешно.Количество = 0 Тогда
ЗаголовокОповещения = Неопределено;
ТекстОповещения = НСтр("ru = 'Все выбранные отчеты уже включены в рассылку.'");
Иначе
Если СтруктураВыбора.Выбрано.Количество = 1 Тогда
ЗаголовокОповещения = НСтр("ru = 'Отчет включен в рассылку'");
Иначе
ЗаголовокОповещения = НСтр("ru = 'Отчеты включены в рассылку'");
КонецЕсли;
ТекстОповещения = СтруктураВыбора.Успешно.ПредставлениеОтчетов;
КонецЕсли;
ПоказатьОповещениеПользователя(
ЗаголовокОповещения,
,
ТекстОповещения,
БиблиотекаКартинок.Успешно32);
КонецЕсли;
ПроверитьНаличиеПериодовВОтчетах(СтруктураВыбора.Успешно.МассивСтрок);
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Отчеты");
КонецПроцедуры
&НаКлиенте
Процедура ОтчетыПриАктивизацииСтроки(Элемент)
ПодключитьОбработчикОжидания("ОбработчикАктивизацииСтрокиТаблицыОтчеты", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработчикАктивизацииСтрокиТаблицыОтчеты()
СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница;
Возврат;
КонецЕсли;
ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор();
Если ИдентификаторСтроки = ИдентификаторТекущейСтрокиТаблицыОтчетов Тогда
Возврат;
КонецЕсли;
ТекстПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки);
Если ТекстПредупреждения <> "" Тогда
ПоказатьПредупреждение(, ТекстПредупреждения);
КонецЕсли;
ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки();
КонецПроцедуры
&НаКлиенте
Процедура ОтчетыПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОтчетыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОтчетыПослеУдаления(Элемент)
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Отчеты");
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыПользовательскиеНастройки
&НаКлиенте
Процедура ПользовательскиеНастройкиПриИзменении(Элемент)
СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаОтчеты.ВнесеныИзменения = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПользовательскиеНастройкиПриАктивизацииСтроки(Элемент)
Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда
Возврат;
КонецЕсли;
Отчет = Элементы.Отчеты.ТекущиеДанные;
Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока;
ТолькоПросмотрЗначения = Ложь;
РассылкаОтчетовКлиентПереопределяемый.ПриАктивизацииСтрокиНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, ТолькоПросмотрЗначения);
Если Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр <> ТолькоПросмотрЗначения Тогда
Элементы.ПользовательскиеНастройкиЗначение.ТолькоПросмотр = ТолькоПросмотрЗначения;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПользовательскиеНастройкиЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательскиеНастройкиЗначениеОчистка(Элемент, СтандартнаяОбработка)
Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда
Возврат;
КонецЕсли;
Отчет = Элементы.Отчеты.ТекущиеДанные;
Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока;
РассылкаОтчетовКлиентПереопределяемый.ПриОчисткеНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПользовательскиеНастройкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыНастройкиТекущегоОтчета
&НаКлиенте
Процедура НастройкиТекущегоОтчетаЗначениеПриИзменении(Элемент)
СтрокаНастроек = Элементы.НастройкиТекущегоОтчета.ТекущиеДанные;
Если СтрокаНастроек = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаНастроек.Использование = Истина;
КонецПроцедуры
&НаКлиенте
Процедура НастройкиТекущегоОтчетаПриИзменении(Элемент)
СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
Возврат;
КонецЕсли;
СтрокаОтчеты.ВнесеныИзменения = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыФорматыОтчетов
&НаКлиенте
Процедура ФорматыОтчетовПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовФорматыНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтрокаОтчеты = Элементы.ФорматыОтчетов.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
Возврат;
КонецЕсли;
Переменные = Новый Структура;
Переменные.Вставить("СтрокаОтчеты", СтрокаОтчеты);
Обработчик = Новый ОписаниеОповещения("ФорматыОтчетовФорматыЗавершениеВыбора", ЭтотОбъект, Переменные);
ВыбратьФормат(СтрокаОтчеты.Отчет, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовФорматыОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СтрокаОтчеты = Элементы.ФорматыОтчетов.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
Возврат;
КонецЕсли;
ОчиститьФормат(СтрокаОтчеты.Отчет);
СтрокаОтчеты.Форматы = "";
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовОтправлятьЕслиПустойПриИзменении(Элемент)
ТекущиеДанные = Элементы.ФорматыОтчетов.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные.НеОтправлятьПустой = Не ТекущиеДанные.ОтправлятьЕслиПустой;
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовНеОтправлятьПустойПриИзменении(Элемент)
ТекущиеДанные = Элементы.ФорматыОтчетов.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные.ОтправлятьЕслиПустой = Не ТекущиеДанные.НеОтправлятьПустой;
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовПриАктивизацииСтроки(Элемент)
СтрокаФорматыОтчетов = Элемент.ТекущиеДанные;
Если СтрокаФорматыОтчетов = Неопределено Тогда
Возврат;
КонецЕсли;
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Очистить();
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеОтчета", НСтр("ru = 'Наименование отчета'"));
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеОтчетаФормат", НСтр("ru = 'Наименование отчета, формат'"));
Если СтрокаФорматыОтчетов.ЕстьПериод Тогда
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеПериод", НСтр("ru = 'Наименование отчета, период'"));
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеПериодФормат", НСтр("ru = 'Наименование отчета, период, формат'"));
КонецЕсли;
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеДатаРассылки", НСтр("ru = 'Наименование отчета, дата рассылки'"));
Элементы.ФорматыОтчетовШаблонНаименования.СписокВыбора.Добавить("НаименованиеДатаРассылкиФормат", НСтр("ru = 'Наименование отчета, дата рассылки, формат'"));
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовШаблонНаименованияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
УстановитьШаблоныНаименований(ВыбранноеЗначение);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
#Область КоманднаяПанель
&НаКлиенте
Процедура КомандаЗаписатьИЗакрыть(Команда)
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаЗаписатьИЗакрыть");
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПолучателиРассылкиНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Не ЗначениеЗаполнено(Объект.ТипПолучателейРассылки) Тогда
ТекстОшибки = НСтр("ru = 'Для ввода получателей выберите их тип.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстОшибки, , "ТипПолучателейРассылки");
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПолучателиРассылкиНажатиеЗавершение", ЭтотОбъект);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Получатели", Объект.Получатели);
ПараметрыФормы.Вставить("ТипПолучателейРассылки", ТипПолучателейРассылки);
ПараметрыФормы.Вставить("ВидПочтовогоАдресаПолучателей", Объект.ВидПочтовогоАдресаПолучателей);
ПараметрыФормы.Вставить("НаименованиеРассылки", Объект.Наименование);
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПолучателиРассылки", ПараметрыФормы, , , , , Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаписать(Команда)
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаЗаписать");
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаВыполнитьСейчас(Команда)
Если Не Объект.Подготовлена Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Рассылка не подготовлена.'"));
Возврат;
КонецЕсли;
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаВыполнитьСейчас");
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура КомандаСобытияРассылки(Команда)
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаСобытияРассылки");
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПовторнаяРассылка(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка);
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияПовторнойРассылки", ЭтотОбъект);
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПовторнаяРассылкаОтчетов", ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область СтраницаОтчеты
&НаКлиенте
Процедура ДобавитьОтчет(Команда)
ВыбранныеЗначения = Новый СписокЗначений;
Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл
Если ТипЗнч(СтрокаОтчеты.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда
ВыбранныеЗначения.Добавить(СтрокаОтчеты.Отчет);
КонецЕсли;
КонецЦикла;
ОтборВыбора = Новый Структура;
ОтборВыбора.Вставить("ТипОтчета", 1);
ОтборВыбора.Вставить("Отчет", Новый Структура("Вид, Значение", "НеВСписке", Кэш.ИсключаемыеОтчеты));
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь);
ПараметрыФормыВыбора.Вставить("Отбор", ОтборВыбора);
ПараметрыФормыВыбора.Вставить("ВыбранныеЗначения", ВыбранныеЗначения);
ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Отчеты);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьДополнительныйОтчет(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ДополнительныеОтчетыИОбработкиКлиент");
МодульДополнительныеОтчетыИОбработкиКлиент.РассылкаОтчетовПодборДопОтчета(Элементы.Отчеты);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрОтчета(Команда)
ОчиститьСообщения();
СтрокаОтчеты = Элементы.Отчеты.ТекущиеДанные;
Если СтрокаОтчеты = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите отчет'"));
Возврат;
КонецЕсли;
Если Не СтрокаОтчеты.Доступность Тогда
ПоказатьПредупреждение(, СтрокаОтчеты.Представление);
Возврат;
КонецЕсли;
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("Отчет", СтрокаОтчеты.Отчет);
ПараметрыОтчета.Вставить("Настройки", Неопределено);
ПараметрыОтчета.Вставить("ОтправлятьЕслиПустой", СтрокаОтчеты.ОтправлятьЕслиПустой);
ПараметрыОтчета.Вставить("Форматы", Новый Массив);
ПараметрыОтчета.Вставить("Представление", СтрокаОтчеты.Представление);
ПараметрыОтчета.Вставить("ПолноеИмя", СтрокаОтчеты.ПолноеИмя);
ПараметрыОтчета.Вставить("КлючВарианта", СтрокаОтчеты.КлючВарианта);
Если СтрокаОтчеты.СКД Тогда
ПараметрыОтчета.Настройки = КомпоновщикНастроекКД.ПользовательскиеНастройки;
Иначе
Настройки = Новый Массив;
Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Использование", Истина));
Для Каждого СтрокаНастройка Из Найденные Цикл
ДобавляемаяНастройка = Новый Структура("Реквизит, Значение", СтрокаНастройка.Реквизит, СтрокаНастройка.Значение);
Настройки.Добавить(ДобавляемаяНастройка);
КонецЦикла;
ПараметрыОтчета.Настройки = Настройки;
КонецЕсли;
Если Объект.Персонализирована Тогда
Если Не ПолучателиУказаны(Объект.Получатели) Тогда
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПредварительныйПросмотрОтчетаПродолжение", ЭтотОбъект, ПараметрыОтчета);
РассылкаОтчетовКлиент.ВыбратьПолучателя(Обработчик, Объект, Ложь, Ложь);
Иначе
ПредварительныйПросмотрОтчетаПродолжение(Неопределено, ПараметрыОтчета);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредварительныйПросмотрОтчетаПродолжение(РезультатВыбора, ПараметрыОтчета) Экспорт
ПользовательскиеНастройкиКД = ПараметрыОтчета.Настройки;
Фильтр = Новый Структура("Использование, Значение", Истина, ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов));
ПерсонализированныеНастройки = ОтчетыКлиентСервер.ЭлементыНастроекОтобранные(ПользовательскиеНастройкиКД, Фильтр);
Если Объект.Персонализирована Тогда
Если РезультатВыбора = Неопределено Тогда
Возврат;
Иначе
Получатель = РезультатВыбора.Получатель;
КонецЕсли;
Для Каждого ПользовательскаяНастройкаКД Из ПерсонализированныеНастройки Цикл
Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ПользовательскаяНастройкаКД.ПравоеЗначение = Получатель;
ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ПользовательскаяНастройкаКД.Значение = Получатель;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройкиКД);
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, ПараметрыОтчета.Отчет, ПараметрыФормы);
Для Каждого ПользовательскаяНастройкаКД Из ПерсонализированныеНастройки Цикл
Если ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ПользовательскаяНастройкаКД.ПравоеЗначение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
ИначеЕсли ТипЗнч(ПользовательскаяНастройкаКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ПользовательскаяНастройкаКД.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УказатьПолучателяРассылки(Команда)
ОчиститьСообщения();
Если Не Объект.Персонализирована Тогда
ПредставлениеВида = Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление;
СообщениеТекст = НСтр("ru = 'Использовать получателя в параметрах возможно только для вида рассылки ""%1"".'");
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СообщениеТекст, ПредставлениеВида);
ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеТекст, , "ВидРассылки");
Возврат;
КонецЕсли;
КоличествоТипов = ТипПолучателейРассылки.Типы().Количество();
Если КоличествоТипов <> 1 И КоличествоТипов <> 2 Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Поле ""Получатели"" не заполнено.'"), , "ТипПолучателейРассылки");
Возврат;
КонецЕсли;
НайденныеИдентификаторыОбъектовМетаданных = ТаблицаТиповПолучателей.НайтиСтроки(Новый Структура("ТипПолучателей", ТипПолучателейРассылки));
Если НайденныеИдентификаторыОбъектовМетаданных.Количество() <> 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Некорректный тип получателей.'"));
Возврат;
КонецЕсли;
МассивТипов = НайденныеИдентификаторыОбъектовМетаданных[0].ОсновнойТип.Типы();
Если МассивТипов.Количество() <> 1 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Некорректный тип получателей.'"));
Возврат;
КонецЕсли;
ОсновнойТипПолучателей = МассивТипов[0];
Настройка = ОпределитьНастройку();
Если Настройка = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не Настройка.ОписаниеДоступныхТипов.СодержитТип(ОсновнойТипПолучателей) Тогда
ТекстПредупреждения = НСтр("ru = 'Тип ""%1"" не подходит по типу к выбранной настройке.
|Выберите другой тип получателей рассылки или другую настройку.'");
ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ОсновнойТипПолучателей));
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
Настройка.Инициатор.ЗакончитьРедактированиеСтроки(Ложь);
Настройка.СтрокаНастроек.Использование = Истина;
Если Настройка.СКД Тогда
Если Настройка.ЭтоЭлементОтбора Тогда
Если Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке
Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии
Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии
Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке
Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии
Или Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда
Настройка.СтрокаНастроек.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
КонецЕсли;
Настройка.СтрокаНастроек.ПравоеЗначение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
Иначе
ДоступныйПараметр = КомпоновщикНастроекКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(Настройка.СтрокаНастроек.Параметр);
Если ДоступныйПараметр <> Неопределено И ДоступныйПараметр.ДоступенСписокЗначений Тогда
ЗначениеСписком = Новый СписокЗначений;
ЗначениеСписком.Добавить(ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов),
ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов));
Настройка.СтрокаНастроек.Значение = ЗначениеСписком;
Иначе
Настройка.СтрокаНастроек.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
КонецЕсли;
КонецЕсли;
Иначе
Настройка.СтрокаНастроек.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
КонецЕсли;
НайтиНастройкиПерсонализации();
РассылкаБылаПерсонализирована = Истина;
Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина;
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьПолучателяРассылки(Команда)
ОчиститьСообщения();
Настройка = ОпределитьНастройку();
Если Настройка = Неопределено Тогда
Возврат;
КонецЕсли;
Настройка.Инициатор.ЗакончитьРедактированиеСтроки(Ложь);
ВнесеныИзменения = Ложь;
Если Настройка.СКД Тогда
Если Настройка.ЭтоЭлементОтбора Тогда
Если Настройка.СтрокаНастроек.ПравоеЗначение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов) Тогда
Настройка.СтрокаНастроек.ПравоеЗначение = Неопределено;
ВнесеныИзменения = Истина;
КонецЕсли;
Иначе
Если Настройка.СтрокаНастроек.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов) Тогда
Настройка.СтрокаНастроек.Значение = Неопределено;
ВнесеныИзменения = Истина;
КонецЕсли;
КонецЕсли;
Иначе
Если Настройка.СтрокаНастроек.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов) Тогда
Настройка.СтрокаНастроек.Значение = Неопределено;
ВнесеныИзменения = Истина;
КонецЕсли;
КонецЕсли;
Если ВнесеныИзменения Тогда
Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ОпределитьНастройку()
СКД = (Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик);
Если СКД Тогда
Инициатор = Элементы.ПользовательскиеНастройки;
Иначе
Инициатор = Элементы.НастройкиТекущегоОтчета;
КонецЕсли;
Если СКД Тогда
ИдентификаторНастройки = Инициатор.ТекущаяСтрока;
Если ИдентификаторНастройки = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'"));
Возврат Неопределено;
КонецЕсли;
ПользовательскиеНастройки = КомпоновщикНастроекКД.ПользовательскиеНастройки;
СтрокаНастроек = ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки);
Если СтрокаНастроек = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'"));
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(СтрокаНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЭтоЭлементОтбора = Истина;
ИначеЕсли ТипЗнч(СтрокаНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЭтоЭлементОтбора = Ложь;
Иначе
ПоказатьПредупреждение(, НСтр("ru = 'Указывать получателя можно только для параметров и отборов отчетов.'"));
Возврат Неопределено;
КонецЕсли;
Если ЭтоЭлементОтбора Тогда
НайденныеЭлементы = ПользовательскиеНастройки.ПолучитьОсновныеНастройкиПоИдентификаторуПользовательскойНастройки(
СтрокаНастроек.ИдентификаторПользовательскойНастройки);
Если НайденныеЭлементы.Количество() > 0 Тогда
ПолеКД = НайденныеЭлементы[0].ЛевоеЗначение;
Иначе
ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, КомпоновщикНастроекКД.Настройки.Отбор.Элементы);
Если ПолеКД = Неопределено Тогда
ПолеКД = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, ПользовательскиеНастройки.Элементы);
КонецЕсли;
Если ПолеКД = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Для настройки отчета не существует описания доступного поля.'"));
Возврат Неопределено;
КонецЕсли;
КонецЕсли;
ДоступноеПолеКД = КомпоновщикНастроекКД.Настройки.Отбор.ДоступныеПоляОтбора.НайтиПоле(ПолеКД);
Иначе
ДоступноеПолеКД = КомпоновщикНастроекКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(СтрокаНастроек.Параметр);
КонецЕсли;
Если ДоступноеПолеКД = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ОписаниеДоступныхТипов = ДоступноеПолеКД.ТипЗначения;
Иначе
СтрокаНастроек = Инициатор.ТекущиеДанные;
Если СтрокаНастроек = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не выбрана настройка отчета.'"));
Возврат Неопределено;
КонецЕсли;
ОписаниеДоступныхТипов = СтрокаНастроек.Тип;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("СКД", СКД);
Результат.Вставить("Инициатор", Инициатор);
Результат.Вставить("ОписаниеДоступныхТипов", ОписаниеДоступныхТипов);
Результат.Вставить("СтрокаНастроек", СтрокаНастроек);
Результат.Вставить("ЭтоЭлементОтбора", ЭтоЭлементОтбора);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, Коллекция)
Для Каждого Элемент Из Коллекция Цикл
Если Строка(Элемент.ИдентификаторПользовательскойНастройки) = Строка(ИдентификаторНастройки)
И ЗначениеЗаполнено(Строка(Элемент.ЛевоеЗначение)) Тогда
Возврат Элемент.ЛевоеЗначение;
КонецЕсли;
Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных")
Или ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда
Поле = ОпределитьПолеИзКомпоновщика(ИдентификаторНастройки, Элемент.Элементы);
Если Поле <> Неопределено Тогда
Возврат Поле;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
#КонецОбласти
#Область СтраницаРасписание
&НаКлиенте
Процедура УстановитьПометки(Команда)
ВсеМесяцы = Новый Массив;
Для Каждого КлючИЗначение Из Кэш.Соответствия.Месяцы Цикл
ЭтотОбъект[КлючИЗначение.Ключ] = Истина;
ВсеМесяцы.Добавить(КлючИЗначение.Значение);
КонецЦикла;
Расписание.Месяцы = ВсеМесяцы;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Месяцы");
КонецПроцедуры
&НаКлиенте
Процедура СнятьПометки(Команда)
ВсеМесяцы = Новый Массив;
Для Каждого КлючИЗначение Из Кэш.Соответствия.Месяцы Цикл
ЭтотОбъект[КлючИЗначение.Ключ] = Ложь;
КонецЦикла;
Расписание.Месяцы = ВсеМесяцы;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Месяцы");
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьРасписаниеПоШаблону(Команда)
Обработчик = Новый ОписаниеОповещения("ЗаполнитьРасписаниеПоШаблонуЗавершение", ЭтотОбъект);
СписокВариантов = РассылкаОтчетовКлиент.СписокВариантовЗаполненияРасписаний();
СписокВариантов.ПоказатьВыборЭлемента(Обработчик, НСтр("ru = 'Выберите шаблон расписания.'"));
КонецПроцедуры
#КонецОбласти
#Область СтраницаДоставка
&НаКлиенте
Процедура ДобавитьИзменитьШаблонДатыРассылки(Команда)
ДобавитьШаблон();
Переменные = ПеременныеВыбораШаблонаНаименованияОтчета("", Ложь);
Переменные.Элемент = ТекущийЭлемент;
Переменные.СтарыйТекст = Переменные.Элемент.ВыделенныйТекст;
Переменные.Префикс = "[" + ПараметрыТекстаПисьмаИФайлов.ДатаВыполнения + "(";
Переменные.Постфикс = ")]";
Переменные.ИзменятьШаблонНаименованияОтчета = Ложь;
ДлинаПрефикса = СтрДлина(Переменные.Префикс);
ПозицияПрефикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Префикс);
ПозицияПостфикса = СтрНайти(Переменные.СтарыйТекст, Переменные.Постфикс);
Переменные.СтарыйФрагментНайден = (ПозицияПрефикса > 0 И ПозицияПостфикса > ПозицияПрефикса);
Если Переменные.СтарыйФрагментНайден Тогда
Переменные.ТекстФормата = Сред(Переменные.СтарыйТекст, ПозицияПрефикса + ДлинаПрефикса, ПозицияПостфикса - ПозицияПрефикса - ДлинаПрефикса);
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ДобавитьИзменитьШаблонДатыРассылкиЗавершение", ЭтотОбъект, Переменные);
Диалог = Новый КонструкторФорматнойСтроки;
Диалог.ДоступныеТипы = Новый ОписаниеТипов("Дата");
Диалог.Текст = Переменные.ТекстФормата;
Диалог.Показать(Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонПолучателя(Команда)
ОчиститьСообщения();
Если НЕ Объект.Персонализирована Тогда
СообщениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Использование получателя в тексте шаблона возможно только для вида рассылки ""%1"".'"),
Элементы.ВидРассылки.СписокВыбора.НайтиПоЗначению("Персонализирована").Представление);
ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеТекст, , "ВидРассылки");
Возврат;
КонецЕсли;
ДобавитьШаблон(ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов));
РассылкаБылаПерсонализирована = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонСформированныхОтчетов(Команда)
ДобавитьШаблон("[" + ПараметрыТекстаПисьмаИФайлов.СформированныеОтчеты + "]", Истина);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонАвтора(Команда)
ДобавитьШаблон("[" + ПараметрыТекстаПисьмаИФайлов.Автор + "]");
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонНаименованияРассылки(Команда)
ДобавитьШаблон("[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеРассылки + "]");
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонСистемы(Команда)
ДобавитьШаблон("[" + ПараметрыТекстаПисьмаИФайлов.ЗаголовокСистемы + "]");
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонСпособаДоставки(Команда)
ДобавитьШаблон("[" + ПараметрыТекстаПисьмаИФайлов.СпособДоставки + "]");
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонПоУмолчанию(Команда)
ПерезаполняетсяТема = (ТекущийЭлемент = Элементы.ТемаПисьма);
Если ПерезаполняетсяТема Тогда
ЗначениеПредмета = Объект.ТемаПисьма;
ШаблонПоУмолчанию = Кэш.Шаблоны.Тема;
Иначе
Если Объект.ПисьмоВФорматеHTML Тогда
ЗначениеПредмета = ТекстПисьмаФорматированныйДокумент.ПолучитьТекст();
Иначе
ЗначениеПредмета = Объект.ТекстПисьма;
КонецЕсли;
ЗначениеПредмета = СокрЛП(ЗначениеПредмета);
ШаблонПоУмолчанию = Кэш.Шаблоны.Текст;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПерезаполняетсяТема", ПерезаполняетсяТема);
ДополнительныеПараметры.Вставить("ШаблонПоУмолчанию", ШаблонПоУмолчанию);
Если ЗначениеПредмета = "" Тогда
ДобавитьШаблонПоУмолчаниюЗавершение(1, ДополнительныеПараметры);
ИначеЕсли ЗначениеПредмета = ШаблонПоУмолчанию Тогда
Если ПерезаполняетсяТема Тогда
ТекстПредупреждения = НСтр("ru = 'Тема письма уже соответствует шаблону по умолчанию.'");
Иначе
ТекстПредупреждения = НСтр("ru = 'Текст письма уже соответствует шаблону по умолчанию.'");
КонецЕсли;
ПоказатьПредупреждение(, ТекстПредупреждения);
Иначе
Если ПерезаполняетсяТема Тогда
ЗаголовокВопроса = НСтр("ru = 'Добавить в тему письма шаблон по умолчанию'");
ТекстВопроса = НСтр("ru = 'Заменить тему письма на шаблон по умолчанию?'");
Иначе
ЗаголовокВопроса = НСтр("ru = 'Добавить в текст письма шаблон по умолчанию'");
ТекстВопроса = НСтр("ru = 'Заменить текст письма на шаблон по умолчанию?'");
КонецЕсли;
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(1, НСтр("ru = 'Заменить'"));
Кнопки.Добавить(2, НСтр("ru = 'Добавить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
Обработчик = Новый ОписаниеОповещения("ДобавитьШаблонПоУмолчаниюЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, 1, ЗаголовокВопроса);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредпросмотрШаблона(Команда)
ПодключитьОбработчикОжидания("ПриОткрытииПредпросмотраШаблона", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВозможностьРассылки(Команда)
ПараметрыДоставки = РассылкаОтчетовКлиентСервер.ПараметрыДоставки();
ПараметрыДоставки.ДатаВыполнения = ОбщегоНазначенияКлиент.ДатаСеанса();
ПараметрыДоставки.Автор = Объект.Автор;
ПараметрыДоставки.ИспользоватьПапку = Объект.ИспользоватьПапку;
ПараметрыДоставки.ИспользоватьСетевойКаталог = Объект.ИспользоватьСетевойКаталог;
ПараметрыДоставки.ИспользоватьFTPРесурс = Объект.ИспользоватьFTPРесурс;
ПараметрыДоставки.ИспользоватьЭлектроннуюПочту = Объект.ИспользоватьЭлектроннуюПочту;
ПроверитьРассылку(ПараметрыДоставки);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьТипТекстаНаHTML(Команда)
Модифицированность = Истина;
Объект.ПисьмоВФорматеHTML = Истина;
ТекстПисьмаИзHTML = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст());
Если ТекстПисьмаИзHTML <> Объект.ТекстПисьма Тогда
ТекстПисьмаФорматированныйДокумент.Удалить();
ТекстПисьмаФорматированныйДокумент.Добавить(Объект.ТекстПисьма, ТипЭлементаФорматированногоДокумента.Текст);
КонецЕсли;
ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПисьмоВФорматеHTML");
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьТипТекстаНаОбычный(Команда)
Модифицированность = Истина;
Объект.ПисьмоВФорматеHTML = Ложь;
ТекстПисьмаИзHTML = СокрЛП(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст());
Если Объект.ТекстПисьма <> ТекстПисьмаИзHTML Тогда
Объект.ТекстПисьма = ТекстПисьмаИзHTML;
КонецЕсли;
ТекущийЭлемент = Элементы.ТекстПисьма;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПисьмоВФорматеHTML");
КонецПроцедуры
&НаКлиенте
Процедура ВажностьВысокая(Команда)
Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ВысокаяВажностьИнтернетПочтовогоСообщения();
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьВысокая;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Высокая важность'");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ВажностьОбычная(Команда)
Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ОбычнаяВажностьИнтернетПочтовогоСообщения();
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьНеЗадана;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Обычная важность'");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ВажностьНизкая(Команда)
Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.НизкаяВажностьИнтернетПочтовогоСообщения();
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьНизкая;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Низкая важность'");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДобавитьДополнительныйПараметрТекстаПисьма(Команда)
Если ДополнительныеПараметрыТекстаПисьма = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ДополнительныеПараметрыТекстаПисьма.Свойство(Команда.Имя) Тогда
Возврат;
КонецЕсли;
ИмяПараметра = "[" + ДополнительныеПараметрыТекстаПисьма[Команда.Имя].Имя + "]";
ДобавитьШаблон(ИмяПараметра);
КонецПроцедуры
&НаКлиенте
Процедура ВставлятьОтчетыВТекстПисьмаПриИзменении(Элемент)
Если Объект.ВставлятьОтчетыВТекстПисьма Тогда
Объект.ТолькоУведомить = Ложь;
Если Объект.ПрикреплятьОтчетыВоВложения Тогда
ПроверкаШифрованияПередВключениемОтчетовВТелеПисьма();
КонецЕсли;
Иначе
Объект.ПрикреплятьОтчетыВоВложения = Истина;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПрикреплятьОтчетыВоВложения");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПрикреплятьОтчетыВоВложенияПриИзменении(Элемент)
Если Объект.ПрикреплятьОтчетыВоВложения Тогда
Объект.ТолькоУведомить = Ложь;
Если Объект.ПрикреплятьОтчетыВоВложения Тогда
ПроверкаШифрованияПередВключениемОтчетовВТелеПисьма();
КонецЕсли;
Иначе
Объект.ВставлятьОтчетыВТекстПисьма = Истина;
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПрикреплятьОтчетыВоВложения");
КонецПроцедуры
#КонецОбласти
#Область СтраницаДополнительно
&НаКлиенте
Процедура СброситьФорматПоУмолчанию(Команда)
ОчиститьФормат(Кэш.ПустоеЗначениеОтчета);
ФорматыПоУмолчанию = СписокФорматовПоУмолчаниюПредставление;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ФорматыПоУмолчанию");
КонецПроцедуры
&НаКлиенте
Процедура СнятьПометкиОтправлятьЕслиПустой(Команда)
Если Объект.Отчеты.Количество() > 0 Тогда
Модифицированность = Истина;
Для Каждого СтрОтчет Из Объект.Отчеты Цикл
СтрОтчет.ОтправлятьЕслиПустой = Ложь;
СтрОтчет.НеОтправлятьПустой = Истина;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкиОтправлятьЕслиПустой(Команда)
Если Объект.Отчеты.Количество() > 0 Тогда
Модифицированность = Истина;
Для Каждого СтрОтчет Из Объект.Отчеты Цикл
СтрОтчет.ОтправлятьЕслиПустой = Истина;
СтрОтчет.НеОтправлятьПустой = Ложь;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПарольАрхива(Команда)
Если ЗначениеЗаполнено(ПарольАрхива) Тогда
ПоказатьВопрос(
Новый ОписаниеОповещения("ПриСозданииПароляАрхива", ЭтотОбъект),
НСтр("ru = 'Пароль для архива уже установлен. Установить новый пароль?'"),
РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
Возврат;
КонецЕсли;
Если Объект.ВставлятьОтчетыВТекстПисьма И Объект.ПрикреплятьОтчетыВоВложения Тогда
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьПарольАвтоматически", НСтр("ru = 'Установить пароль'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы установить пароль, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "УстановитьПароль";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросПарольШифрованиеОтчетыВТекстеПисьма", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
Иначе
ПарольАрхива = СоздатьПароль();
ПарольАрхиваИзменен = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПаролиШифрование(Команда)
ОткрытьФормуПаролиШифрование();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименование(Команда)
УстановитьШаблоныНаименований("НаименованиеОтчета", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименованиеФормат(Команда)
УстановитьШаблоныНаименований("НаименованиеОтчетаФормат", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименованиеПериод(Команда)
УстановитьШаблоныНаименований("НаименованиеПериод", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименованиеПериодФормат(Команда)
УстановитьШаблоныНаименований("НаименованиеПериодФормат", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименованиеДатаРассылки(Команда)
УстановитьШаблоныНаименований("НаименованиеДатаРассылки", Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблонНаименованиеДатаРассылкиФормат(Команда)
УстановитьШаблоныНаименований("НаименованиеДатаРассылкиФормат", Истина);
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область Клиент
&НаКлиенте
Процедура НачалоВыбораПользовательскойНастройки(СтандартнаяОбработка)
Если Элементы.СтраницыНастроекОтчета.ТекущаяСтраница <> Элементы.СтраницаКомпоновщик Тогда
Возврат;
КонецЕсли;
Отчет = Элементы.Отчеты.ТекущиеДанные;
Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
ИдентификаторКД = Элементы.ПользовательскиеНастройки.ТекущаяСтрока;
Обработчик = Новый ОписаниеОповещения("ЗавершениеВыбораПользовательскойНастройки", ЭтотОбъект);
РассылкаОтчетовКлиентПереопределяемый.ПриНачалеВыбораНастройки(Отчет, КомпоновщикНастроекКД, ИдентификаторКД, СтандартнаяОбработка, Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеВыбораПользовательскойНастройки(Результат, ПараметрыВыполнения) Экспорт
Если ТипЗнч(Результат) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда
КомпоновщикНастроекКД.ЗагрузитьПользовательскиеНастройки(Результат);
Иначе
Возврат;
КонецЕсли;
Отчет = Элементы.Отчеты.ТекущиеДанные;
Если Отчет = Неопределено Или ТипЗнч(Отчет.Отчет) <> Тип("СправочникСсылка.ВариантыОтчетов") Тогда
Возврат;
КонецЕсли;
Отчет.ВнесеныИзменения = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПолучателиРассылкиНажатиеЗавершение(Результат, Параметр) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Объект.ВидПочтовогоАдресаПолучателей = Результат.ВидПочтовогоАдресаПолучателей;
Объект.Получатели.Очистить();
Для Каждого Элемент Из Результат.Получатели Цикл
НоваяСтрока = Объект.Получатели.Добавить();
НоваяСтрока.Получатель = Элемент.Получатель;
НоваяСтрока.Исключен = Элемент.Исключен;
КонецЦикла;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПолучателиРассылки");
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ТипПолучателейРассылкиОбработкаВыбораЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
Объект.Получатели.Очистить();
ТипПолучателейРассылки = ДополнительныеПараметры.ВыбранноеЗначение;
Модифицированность = Истина;
ТипПолучателейРассылкиПриИзменении(Неопределено);
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ПолучателиРассылки");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблонПоУмолчаниюЗавершение(Ответ, ДополнительныеПараметры) Экспорт
ШаблонПоУмолчанию = ДополнительныеПараметры.ШаблонПоУмолчанию;
Если Ответ = 1 Тогда
Если ДополнительныеПараметры.ПерезаполняетсяТема Тогда
Объект.ТемаПисьма = ШаблонПоУмолчанию;
Иначе
Если Объект.ПисьмоВФорматеHTML Тогда
ТекстПисьмаФорматированныйДокумент.Удалить();
ТекстПисьмаФорматированныйДокумент.Добавить(ШаблонПоУмолчанию, ТипЭлементаФорматированногоДокумента.Текст);
Иначе
Объект.ТекстПисьма = ШаблонПоУмолчанию;
КонецЕсли;
КонецЕсли;
ИначеЕсли Ответ = 2 Тогда
ДобавитьШаблон(ШаблонПоУмолчанию);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьРассылкуПослеОтветаНаВопрос(Ответ, ПараметрыДоставки) Экспорт
Если Ответ = 1 Или Модифицированность Тогда
Если Ответ = 1 Тогда
Объект.Подготовлена = Истина;
КонецЕсли;
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("ИмяКоманды", "КомандаПроверитьРассылку");
ПараметрыЗаписи.Вставить("ПараметрыДоставки", ПараметрыДоставки);
ЗаписатьНаКлиенте(Неопределено, ПараметрыЗаписи);
Возврат;
ИначеЕсли Ответ <> -1 Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
ПараметрыДоставки.Рассылка = Объект.Наименование;
Если ПараметрыДоставки.ИспользоватьПапку Тогда
ПараметрыДоставки.Папка = Объект.Папка;
КонецЕсли;
Если ПараметрыДоставки.ИспользоватьСетевойКаталог Тогда
ПараметрыДоставки.СетевойКаталогWindows = Объект.СетевойКаталогWindows;
ПараметрыДоставки.СетевойКаталогLinux = Объект.СетевойКаталогLinux;
КонецЕсли;
Если ПараметрыДоставки.ИспользоватьFTPРесурс Тогда
ПараметрыДоставки.Владелец = Объект.Ссылка;
ПараметрыДоставки.Сервер = Объект.FTPСервер;
ПараметрыДоставки.Порт = Объект.FTPПорт;
ПараметрыДоставки.Логин = Объект.FTPЛогин;
Если FTPПарольИзменен Тогда
ПараметрыДоставки.Пароль = FTPПароль;
КонецЕсли;
ПараметрыДоставки.Каталог = Объект.FTPКаталог;
ПараметрыДоставки.ПассивноеСоединение = Объект.FTPПассивноеСоединение;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПроверитьРассылкуПослеВыбораПолучателей", ЭтотОбъект, ПараметрыДоставки);
Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда
РассылкаОтчетовКлиент.ВыбратьПолучателя(Обработчик, Объект, Ложь, Истина);
Возврат;
КонецЕсли;
ВыполнитьОбработкуОповещения(Обработчик, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьРассылкуПослеВыбораПолучателей(РезультатВыбора, ПараметрыДоставки) Экспорт
Если ПараметрыДоставки.ИспользоватьЭлектроннуюПочту Тогда
Если РезультатВыбора = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыДоставки.УчетнаяЗапись = Объект.УчетнаяЗапись;
ПараметрыДоставки.СкрытыеКопии = Объект.СкрытыеКопии;
ПараметрыДоставки.ШаблонТемы = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'");
ПараметрыДоставки.ШаблонТекста = НСтр("ru = 'Это сообщение отправлено системой рассылок 1С:Предприятие.'")
+ Символы.ПС + Кэш.ЗаголовокСистемы;
ПараметрыДоставки.Получатели = РезультатВыбора;
КонецЕсли;
РезультатВыполнения = ПроверитьСпособДоставки(Объект.Ссылка, ПараметрыДоставки);
ПараметрыПредупреждения = Новый Структура("Заголовок, Текст, Подробно, Ссылка, ИспользоватьЭлектроннуюПочту");
ЗаполнитьЗначенияСвойств(ПараметрыПредупреждения, ПараметрыДоставки);
ЗаполнитьЗначенияСвойств(ПараметрыПредупреждения, РезультатВыполнения);
ПараметрыПредупреждения.Заголовок = НСтр("ru = 'Результат проверки'");
ПараметрыПредупреждения.Ссылка = Объект.УчетнаяЗапись;
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.Предупреждение", ПараметрыПредупреждения, ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьРасписаниеПоШаблонуЗавершение(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ВыбранныйЭлемент <> Неопределено Тогда
ЗаполнитьРасписаниеПоВарианту(ВыбранныйЭлемент.Значение, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзменитьШаблонДатыРассылкиЗавершение(СтрокаРезультат, Переменные) Экспорт
Если СтрокаРезультат = Неопределено Тогда
Возврат;
КонецЕсли;
НовыйФрагмент = Переменные.Префикс + СтрокаРезультат + Переменные.Постфикс;
СтарыйФрагмент = Переменные.Префикс + Переменные.ТекстФормата + Переменные.Постфикс;
Если Переменные.ИзменятьШаблонНаименованияОтчетаМножественно Тогда
Если Переменные.СтарыйФрагментНайден Тогда
ШаблонНаименования = СтрЗаменить(Переменные.СтарыйТекст, СтарыйФрагмент, НовыйФрагмент);
Иначе
ШаблонНаименования = Переменные.СтарыйТекст + НовыйФрагмент;
КонецЕсли;
УстановитьШаблоныНаименованийДляВсехОтчетов(Переменные.ИмяШаблона, ШаблонНаименования);
ИначеЕсли Переменные.ИзменятьШаблонНаименованияОтчета Тогда
Если Переменные.СтарыйФрагментНайден Тогда
Если СтрокаРезультат = Переменные.ТекстФормата Тогда
Возврат;
КонецЕсли;
Элементы.ФорматыОтчетов.ТекущиеДанные.ШаблонНаименования = СтрЗаменить(Переменные.СтарыйТекст, СтарыйФрагмент, НовыйФрагмент);
Иначе
Элементы.ФорматыОтчетов.ТекущиеДанные.ШаблонНаименования = Переменные.СтарыйТекст + НовыйФрагмент;
КонецЕсли;
ИначеЕсли Переменные.Элемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда
ЗаменаВыполнена = Ложь;
Если Переменные.СтарыйФрагментНайден Тогда
РезультатПоиска = ТекстПисьмаФорматированныйДокумент.НайтиТекст(СтарыйФрагмент);
Если РезультатПоиска <> Неопределено Тогда
Найденные = ТекстПисьмаФорматированныйДокумент.ПолучитьЭлементы(РезультатПоиска.ЗакладкаНачала, РезультатПоиска.ЗакладкаКонца);
Для Каждого ТекстФД Из Найденные Цикл
Если СтрНайти(ТекстФД.Текст, СтарыйФрагмент) > 0 Тогда
ТекстФД.Текст = СтрЗаменить(ТекстФД.Текст, СтарыйФрагмент, НовыйФрагмент);
ЗаменаВыполнена = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Не ЗаменаВыполнена Тогда
Если СокрЛП(Переменные.СтарыйТекст) = СтарыйФрагмент Тогда
Переменные.Элемент.ВыделенныйТекст = НовыйФрагмент;
Иначе
ТекстПисьмаФорматированныйДокумент.Добавить(НовыйФрагмент, ТипЭлементаФорматированногоДокумента.Текст);
КонецЕсли;
КонецЕсли;
Иначе
Если Переменные.СтарыйФрагментНайден Тогда
Если СтрокаРезультат = Переменные.ТекстФормата Тогда
Возврат;
КонецЕсли;
Переменные.Элемент.ВыделенныйТекст = СтрЗаменить(Переменные.СтарыйТекст, СтарыйФрагмент, НовыйФрагмент);
Иначе
Переменные.Элемент.ВыделенныйТекст = Переменные.СтарыйТекст + НовыйФрагмент;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьФорматЗавершение(СписокФорматов, Переменные) Экспорт
Если СписокФорматов = Неопределено Тогда
Возврат;
КонецЕсли;
ФорматыСовпадают = Истина;
Для Индекс = 1 По СписокФорматов.Количество() Цикл
Если СписокФорматов[Индекс - 1].Пометка <> Переменные.СписокФорматовКопия[Индекс - 1].Пометка Тогда
ФорматыСовпадают = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ФорматыСовпадают Тогда
Возврат;
КонецЕсли;
ПредставлениеФормата = "";
ОчиститьФормат(Переменные.СсылкаНаОтчет);
Для Каждого ЭлементСписка Из СписокФорматов Цикл
Если ЭлементСписка.Пометка Тогда
СтрокаФормат = Объект.ФорматыОтчетов.Добавить();
СтрокаФормат.Отчет = Переменные.СсылкаНаОтчет;
СтрокаФормат.Формат = ЭлементСписка.Значение;
ПредставлениеФормата = ПредставлениеФормата + ?(ПредставлениеФормата = "", "", ", ") + Строка(ЭлементСписка.Представление);
КонецЕсли;
КонецЦикла;
Если Переменные.ЭтоФорматПоУмолчанию И ПредставлениеФормата = "" Тогда
ПредставлениеФормата = СписокФорматовПоУмолчаниюПредставление;
КонецЕсли;
ВыполнитьОбработкуОповещения(Переменные.ОбработчикРезультата, ПредставлениеФормата);
КонецПроцедуры
&НаКлиенте
Процедура ФорматыОтчетовФорматыЗавершениеВыбора(ПредставлениеФормата, Переменные) Экспорт
Если ПредставлениеФормата <> Неопределено Тогда
Переменные.СтрокаОтчеты.Форматы = ПредставлениеФормата;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФорматыПоУмолчаниюЗавершениеВыбора(ПредставлениеФормата, Переменные) Экспорт
Если ПредставлениеФормата <> Неопределено Тогда
ФорматыПоУмолчанию = ПредставлениеФормата;
КонецЕсли;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "ФорматыПоУмолчанию");
КонецПроцедуры
&НаКлиенте
Процедура ПослеИзмененияРасписания(РасписаниеРезультат, ДополнительныеПараметры) Экспорт
Если РасписаниеРезультат <> Неопределено Тогда
Модифицированность = Истина;
Расписание = РасписаниеРезультат;
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект, "Расписание");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ЭлементПодбора, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения, Уникальность = Истина)
ЗначениеРеквизита = ЭлементПодбора;
Найденные = ТабличнаяЧасть.НайтиСтроки(Новый Структура(ИмяРеквизита, ЗначениеРеквизита));
Если Уникальность И Найденные.Количество() > 0 Тогда
Возврат Неопределено;
КонецЕсли;
СтрокаТаблицы = ТабличнаяЧасть.Добавить();
СтрокаТаблицы[ИмяРеквизита] = ЗначениеРеквизита;
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтруктураЗаполнения);
Возврат СтрокаТаблицы;
КонецФункции
&НаКлиенте
Функция ВыборПодборПеретаскиваниеВТабличнуюЧасть(ВыбранноеЗначение, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения, Идентификаторы = Ложь)
Модифицированность = Истина;
МассивНовыхСтрок = Новый Массив;
Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда
Для Каждого ЭлементПодбора Из ВыбранноеЗначение Цикл
Результат = ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ЭлементПодбора, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения);
Если Результат <> Неопределено Тогда
МассивНовыхСтрок.Добавить(?(Идентификаторы, Результат.ПолучитьИдентификатор(), Результат));
КонецЕсли;
КонецЦикла;
Иначе
Результат = ВыборПодборПеретаскиваниеЭлементаВТабличнуюЧасть(ВыбранноеЗначение, ТабличнаяЧасть, ИмяРеквизита, СтруктураЗаполнения);
Если Результат <> Неопределено Тогда
МассивНовыхСтрок.Добавить(?(Идентификаторы, Результат.ПолучитьИдентификатор(), Результат));
КонецЕсли;
КонецЕсли;
Возврат МассивНовыхСтрок;
КонецФункции
&НаКлиенте
Процедура ВыбратьФормат(СсылкаНаОтчет, ОбработчикРезультата)
ЭтоФорматПоУмолчанию = Не ЗначениеЗаполнено(СсылкаНаОтчет);
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СсылкаНаОтчет));
Если Найденные.Количество() > 0 Тогда
СписокФорматов.ЗаполнитьПометки(Ложь);
Для Каждого СтрокаФормат Из Найденные Цикл
СписокФорматов.НайтиПоЗначению(СтрокаФормат.Формат).Пометка = Истина;
КонецЦикла;
Иначе
СписокФорматов = СписокФорматовПоУмолчанию.Скопировать();
Если Не ЭтоФорматПоУмолчанию Тогда
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", Кэш.ПустоеЗначениеОтчета));
Если Найденные.Количество() > 0 Тогда
СписокФорматов.ЗаполнитьПометки(Ложь);
Для Каждого СтрокаФормат Из Найденные Цикл
СписокФорматов.НайтиПоЗначению(СтрокаФормат.Формат).Пометка = Истина;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЭтоФорматПоУмолчанию Тогда
ЗаголовокДиалога = НСтр("ru = 'Выберите форматы по умолчанию'");
Иначе
ЗаголовокДиалога = НСтр("ru = 'Выберите форматы для отчета ""%1""'");
ЗаголовокДиалога = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ЗаголовокДиалога, Строка(СсылкаНаОтчет));
КонецЕсли;
Переменные = Новый Структура;
Переменные.Вставить("СсылкаНаОтчет", СсылкаНаОтчет);
Переменные.Вставить("СписокФорматовКопия", СписокФорматов.Скопировать());
Переменные.Вставить("ЭтоФорматПоУмолчанию", ЭтоФорматПоУмолчанию);
Переменные.Вставить("ОбработчикРезультата", ОбработчикРезультата);
Обработчик = Новый ОписаниеОповещения("ВыбратьФорматЗавершение", ЭтотОбъект, Переменные);
СписокФорматов.ПоказатьОтметкуЭлементов(Обработчик, ЗаголовокДиалога);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФормат(СсылкаНаОтчет)
Модифицированность = Истина;
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СсылкаНаОтчет));
Для Каждого СтрокаФормат Из Найденные Цикл
Объект.ФорматыОтчетов.Удалить(СтрокаФормат);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьШаблон(ТекстовыйШаблон = Неопределено, ИсключитьТемуПисьма = Ложь)
Если ИсключитьТемуПисьма Или Не (ТекущийЭлемент = Элементы.ТемаПисьма Или ТекущийЭлемент = Элементы.ИмяАрхива) Тогда
Если Объект.ПисьмоВФорматеHTML Тогда
Если ТекущийЭлемент <> Элементы.ТекстПисьмаФорматированныйДокумент Тогда
ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент;
КонецЕсли;
Иначе
Если ТекущийЭлемент <> Элементы.ТекстПисьма Тогда
ТекущийЭлемент = Элементы.ТекстПисьма;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ТекстовыйШаблон = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущийЭлемент.ВыделенныйТекст = "" Тогда
Если ТекущийЭлемент = Элементы.ТекстПисьмаФорматированныйДокумент Тогда
ТекстПисьмаФорматированныйДокумент.Добавить(ТекстовыйШаблон, ТипЭлементаФорматированногоДокумента.Текст);
Иначе
ТекущийЭлемент.ВыделенныйТекст = ТекстовыйШаблон;
КонецЕсли;
Иначе
ТекущийЭлемент.ВыделенныйТекст = ТекущийЭлемент.ВыделенныйТекст + ТекстовыйШаблон;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ИзменитьСоставМассива(Добавить, Элемент, Знач Массив)
Индекс = Массив.Найти(Элемент);
Если Добавить И Индекс = Неопределено Тогда
ВГраницаПлюс1 = ?(Массив.Количество() >= Элемент, Элемент, Массив.Количество());
Для Индекс = 1 По ВГраницаПлюс1 Цикл
Если Массив[ВГраницаПлюс1 - Индекс] < Элемент Тогда
Массив.Вставить(ВГраницаПлюс1 - Индекс + 1, Элемент);
Возврат Массив;
КонецЕсли;
КонецЦикла;
Массив.Вставить(0, Элемент);
ИначеЕсли Не Добавить И Индекс <> Неопределено Тогда
Массив.Удалить(Индекс);
КонецЕсли;
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура ИзменитьРасписаниеВДиалоге()
Обработчик = Новый ОписаниеОповещения("ПослеИзмененияРасписания", ЭтотОбъект);
ДиалогРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Расписание);
ДиалогРасписания.Показать(Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ВычислитьФлажкиДополнительныхСпособовДоставки()
Объект.ИспользоватьПапку = Публиковать И (ДругойСпособДоставки = "ИспользоватьПапку");
Объект.ИспользоватьСетевойКаталог = Публиковать И (ДругойСпособДоставки = "ИспользоватьСетевойКаталог");
Объект.ИспользоватьFTPРесурс = Публиковать И (ДругойСпособДоставки = "ИспользоватьFTPРесурс");
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьРассылку(ПараметрыДоставки)
ОчиститьСообщения();
Если Не Объект.Подготовлена Или Объект.Ссылка.Пустая() Тогда
ЗаголовокВопроса = НСтр("ru = 'Проверка способа доставки'");
Если Не Объект.Подготовлена Тогда
ТекстВопроса = НСтр("ru = 'Перед проверкой рассылка должна быть подготовлена.
|Нажмите ""Продолжить"", чтобы включить флажок ""Подготовлена"" и записать рассылку.'");
Иначе
ТекстВопроса = НСтр("ru = 'Перед проверкой рассылка должна быть записана.
|Нажмите ""Продолжить"", чтобы записать рассылку.'");
КонецЕсли;
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(1, НСтр("ru = 'Продолжить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
Обработчик = Новый ОписаниеОповещения("ПроверитьРассылкуПослеОтветаНаВопрос", ЭтотОбъект, ПараметрыДоставки);
ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, 1, ЗаголовокВопроса);
Иначе
ПроверитьРассылкуПослеОтветаНаВопрос(-1, ПараметрыДоставки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриСозданииПароляАрхива(Ответ, Контекст) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ПарольАрхива = СоздатьПароль();
ПарольАрхиваИзменен = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблоныНаименований(ИмяШаблона, МножественноеИзменение = Ложь)
Если МножественноеИзменение Тогда
УстановитьШаблоныНаименованийДляВсехОтчетов(ИмяШаблона);
Иначе
Шаблоны = ШаблоныНаименований();
Элементы.ФорматыОтчетов.ТекущиеДанные.ШаблонНаименования = Шаблоны.Получить(ИмяШаблона);
КонецЕсли;
Модифицированность = Истина;
Если ИмяШаблона = "НаименованиеОтчета" Или ИмяШаблона = "НаименованиеОтчетаФормат" Тогда
Возврат;
КонецЕсли;
Переменные = ПеременныеВыбораШаблонаНаименованияОтчета(ИмяШаблона, МножественноеИзменение);
Обработчик = Новый ОписаниеОповещения("ДобавитьИзменитьШаблонДатыРассылкиЗавершение", ЭтотОбъект, Переменные);
Диалог = Новый КонструкторФорматнойСтроки;
Диалог.ДоступныеТипы = Новый ОписаниеТипов("Дата");
Диалог.Текст = Переменные.ТекстФормата;
Диалог.Показать(Обработчик);
КонецПроцедуры
&НаКлиенте
Функция ПеременныеВыбораШаблонаНаименованияОтчета(ИмяШаблона, МножественноеИзменение)
Переменные = Новый Структура;
Переменные.Вставить("Элемент", Неопределено);
Переменные.Вставить("СтарыйТекст", "");
Переменные.Вставить("Префикс", "[(");
Переменные.Вставить("Постфикс", ")]");
Переменные.Вставить("ТекстФормата", "");
Переменные.Вставить("СтарыйФрагментНайден", Ложь);
Переменные.Вставить("ИзменятьШаблонНаименованияОтчета", Истина);
Переменные.Вставить("ИзменятьШаблонНаименованияОтчетаМножественно", МножественноеИзменение);
Переменные.Вставить("ИмяШаблона", ИмяШаблона);
Если ИмяШаблона = "НаименованиеДатаРассылки" Тогда
Переменные.Вставить("Префикс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаРассылки + "("));
ИначеЕсли ИмяШаблона = "НаименованиеДатаРассылкиФормат" Тогда
Переменные.Вставить("Префикс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаРассылки + "("));
Переменные.Вставить("Постфикс", ")] [" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]");
ИначеЕсли ИмяШаблона = "НаименованиеПериод" Тогда
Переменные.Вставить("Префикс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 за %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.Период + "("));
ИначеЕсли ИмяШаблона = "НаименованиеПериодФормат" Тогда
Переменные.Вставить("Префикс", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 за %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.Период + "("));
Переменные.Вставить("Постфикс", ")] [" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]");
КонецЕсли;
Возврат Переменные;
КонецФункции
&НаКлиенте
Процедура ПроверкаШифрованияПередВключениемОтчетовВТелеПисьма()
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
Если Объект.Персонализирована И Объект.УстановитьПаролиЗашифровать Тогда
Если ДоступноШифрованиеВложений Тогда
Если Объект.Архивировать Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОтключитьПаролиШифрование", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить пароли и шифрование.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьПаролиШифрование";
Иначе
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОтключитьПаролиШифрование", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить шифрование.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьШифрование";
КонецЕсли;
ИначеЕсли Объект.Архивировать Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОтключитьПаролиШифрование", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить пароли.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьПароли";
КонецЕсли;
Если ДоступноШифрованиеВложений Или Объект.Архивировать Тогда
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
ИначеЕсли Объект.Личная Тогда
Если ДоступноШифрованиеВложений Тогда
Если Объект.Архивировать И ЗначениеЗаполнено(ПарольАрхива) И ЗначениеЗаполнено(ЭтотОбъект["СертификатДляШифрования"]) Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОтключитьПарольШифрование", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно отключить пароль и шифрование.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОтключитьПарольШифрование";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект),
ТекстВопроса, КнопкиВопроса, ПараметрыВопроса);
ИначеЕсли Объект.Архивировать И ЗначениеЗаполнено(ПарольАрхива) Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОчиститьПароль", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы вставлять отчеты в текст письма, нужно очистить пароль архива.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьПароль";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект),
ТекстВопроса, КнопкиВопроса, ПараметрыВопроса);
ИначеЕсли ЗначениеЗаполнено(ЭтотОбъект["СертификатДляШифрования"]) Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОчиститьСертификат", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр("ru = 'Для того чтобы вставлять отчеты в текст письма, нужно очистить поле сертификата для шифрования.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьСертификат";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект),
ТекстВопроса, КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
ИначеЕсли Объект.Архивировать И ЗначениеЗаполнено(ПарольАрхива) Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОчиститьПароль", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы вставлять отчеты в текст письма, нужно очистить пароль архива.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьПароль";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
ИначеЕсли Не Объект.Персонализирована И Не Объект.Личная И Объект.Архивировать И ЗначениеЗаполнено(ПарольАрхива) Тогда
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ОчиститьПароль", НСтр("ru = 'Вставлять отчеты в текст письма'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы вставлять отчеты в текст письма, нужно очистить пароль архива.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьПароль";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОтчетыВТекстеПисьмаШифрование(Результат, Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Значение = "ОтключитьПаролиШифрование" Тогда
Объект.УстановитьПаролиЗашифровать = Ложь;
Элементы.ПаролиШифрование.Доступность = Ложь;
ИначеЕсли Результат.Значение = "ОтключитьПарольШифрование" Тогда
ПарольАрхива = "";
ЭтотОбъект["СертификатДляШифрования"] = "";
ПарольАрхиваИзменен = Истина;
СертификатДляШифрованияИзменен = Истина;
ИначеЕсли Результат.Значение = "ОчиститьПароль" Тогда
ПарольАрхива = "";
ПарольАрхиваИзменен = Истина;
ИначеЕсли Результат.Значение = "ОчиститьСертификат" Тогда
ЭтотОбъект["СертификатДляШифрования"] = "";
СертификатДляШифрованияИзменен = Истина;
ИначеЕсли Результат.Значение = КодВозвратаДиалога.Отмена Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверкаПриУстановкеПароляАрхиваВставлятьОтчетыВТекстПисьма()
Если ЗначениеЗаполнено(ПарольАрхива) И Объект.Архивировать И Объект.ВставлятьОтчетыВТекстПисьма
И Объект.ПрикреплятьОтчетыВоВложения Тогда
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("УстановитьПароль", НСтр("ru = 'Установить пароль'"));
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru = 'Отмена'"));
ТекстВопроса = НСтр(
"ru = 'Для того чтобы установить пароль, необходимо убрать отчеты из текста письма.'");
ПараметрыВопроса.КнопкаПоУмолчанию = "УстановитьПароль";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(
Новый ОписаниеОповещения("ПослеОтветаНаВопросПарольШифрованиеОтчетыВТекстеПисьма", ЭтотОбъект), ТекстВопроса,
КнопкиВопроса, ПараметрыВопроса);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросПарольШифрованиеОтчетыВТекстеПисьма(Результат, Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Значение = "УстановитьПароль" Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
ИначеЕсли Результат.Значение = "УстановитьПарольАвтоматически" Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
ПарольАрхива = СоздатьПароль();
ПарольАрхиваИзменен = Истина;
ИначеЕсли Результат.Значение = "УстановитьСертификатДляШифрования" Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
ИначеЕсли Результат.Значение = КодВозвратаДиалога.Отмена Тогда
ПарольАрхива = "";
ПарольАрхиваИзменен = Истина;
ЭтотОбъект["СертификатДляШифрования"] = "";
СертификатДляШифрованияИзменен = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросУстановитьПаролиОтчетыВТекстеПисьма(Результат, Параметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Значение = "УстановитьПаролиЗашифровать" Тогда
Объект.ВставлятьОтчетыВТекстПисьма = Ложь;
ОткрытьФормуПаролиШифрование();
ИначеЕсли Результат.Значение = КодВозвратаДиалога.Отмена Тогда
Объект.УстановитьПаролиЗашифровать = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуПаролиШифрование()
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("АдресПолучателей", ПоместитьПолучателейВХранилище());
ПараметрыФормы.Вставить("Архивировать", Объект.Архивировать);
ПараметрыФормы.Вставить("ТипПолучателейРассылки", ТипПолучателейРассылки);
ПараметрыФормы.Вставить("ВидПочтовогоАдресаПолучателей", Объект.ВидПочтовогоАдресаПолучателей);
ПараметрыФормы.Вставить("Ссылка", Объект.Ссылка);
ПараметрыФормы.Вставить("НаименованиеРассылки", Объект.Наименование);
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПаролиШифрование", ПараметрыФормы, ЭтотОбъект, , , , ,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьШаблоныНаименованийДляВсехОтчетов(ИмяШаблона, ШаблонНаименования = "")
Шаблоны = ШаблоныНаименований();
ИспользуетсяПериод = ИмяШаблона = "НаименованиеПериод" Или ИмяШаблона = "НаименованиеПериодФормат";
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
Если ИспользуетсяПериод Тогда
ИдентификаторСтроки = СтрокаОтчет.ПолучитьИдентификатор();
Если Не СтрокаОтчет.ЕстьПериод Тогда
СтрокаОтчет.ШаблонНаименования = Шаблоны.Получить("НаименованиеОтчетаФормат");
Продолжить;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ШаблонНаименования) Тогда
СтрокаОтчет.ШаблонНаименования = ШаблонНаименования;
Иначе
СтрокаОтчет.ШаблонНаименования = Шаблоны.Получить(ИмяШаблона);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ШаблоныНаименований()
Шаблоны = Новый Соответствие;
Шаблоны.Вставить("НаименованиеОтчета", "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]");
Шаблоны.Вставить("НаименованиеОтчетаФормат", "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "] [" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]");
Шаблоны.Вставить("НаименованиеПериод", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 за %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.Период + "()]"));
Шаблоны.Вставить("НаименованиеПериодФормат", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 за %2 %3'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.Период + "()]", "[" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]"));
Шаблоны.Вставить("НаименованиеДатаРассылки", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаРассылки + "()]"));
Шаблоны.Вставить("НаименованиеДатаРассылкиФормат", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2 %3'"), "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "]",
"[" + ПараметрыТекстаПисьмаИФайлов.ДатаРассылки + "()]", "[" + ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]"));
Возврат Шаблоны;
КонецФункции
&НаКлиенте
Процедура ПослеЗакрытияПовторнойРассылки(Результат, Параметры) Экспорт
Прочитать();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииПредпросмотраШаблона()
ДобавитьШаблон();
ПараметрыФормы = ПараметрыФормыПредпросмотраШаблона();
ОткрытьФорму("Справочник.РассылкиОтчетов.Форма.ПредварительныйПросмотрПисьма", ПараметрыФормы, ЭтотОбъект, , , , ,
РежимОткрытияОкнаФормы.Независимый);
КонецПроцедуры
#КонецОбласти
#Область КлиентСервер
&НаКлиентеНаСервереБезКонтекста
Функция ПарольСкрыт()
Возврат "********";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьДоступностьКорректность(Форма, Изменения = "")
Объект = Форма.Объект;
Элементы = Форма.Элементы;
Если Изменения = "" Или Изменения = "FTPСерверИКаталог" Тогда
Если ЗначениеЗаполнено(Объект.FTPСервер) Тогда
ПредставлениеАдреса = "ftp://";
Если ЗначениеЗаполнено(Объект.FTPЛогин) Тогда
ПредставлениеАдреса = ПредставлениеАдреса + Объект.FTPЛогин + ?(ЗначениеЗаполнено(Форма.FTPПароль), ":" + ПарольСкрыт(), "") + "@";
КонецЕсли;
Форма.FTPСерверИКаталог = ПредставлениеАдреса + Объект.FTPСервер + ":" + Формат(Объект.FTPПорт, "ЧН=0; ЧГ=0") + Объект.FTPКаталог;
Иначе
Форма.FTPСерверИКаталог = "";
КонецЕсли;
КонецЕсли;
Если Изменения = ""
Или Изменения = "Подготовлена"
Или Изменения = "ВыполнятьПоРасписанию"
Или Изменения = "ВидРассылки"
Или Изменения = "Публиковать"
Или Изменения = "ИспользоватьЭлектроннуюПочту" Тогда
Элементы.Отчеты.АвтоОтметкаНезаполненного = Объект.Подготовлена;
Элементы.ФорматыОтчетов.АвтоОтметкаНезаполненного = Объект.Подготовлена;
Элементы.ПериодичностьРасписания.АвтоОтметкаНезаполненного = Объект.Подготовлена И Объект.ВыполнятьПоРасписанию;
Элементы.СетевойКаталогWindows.АвтоОтметкаНезаполненного = Объект.Подготовлена И Форма.Публиковать;
Элементы.СетевойКаталогLinux.АвтоОтметкаНезаполненного = Объект.Подготовлена И Форма.Публиковать;
Элементы.FTPСерверИКаталог.АвтоОтметкаНезаполненного = Объект.Подготовлена И Форма.Публиковать;
Элементы.Папка.АвтоОтметкаНезаполненного = Объект.Подготовлена И Форма.Публиковать;
Элементы.ВидПочтовогоАдресаАвтора.АвтоОтметкаНезаполненного = Объект.Подготовлена И Объект.Личная;
Элементы.УчетнаяЗапись.АвтоОтметкаНезаполненного = Объект.Подготовлена И Объект.ИспользоватьЭлектроннуюПочту;
КонецЕсли;
Если Изменения = "" Или Изменения = "ВидРассылки" Тогда
Если Объект.Личная И Объект.Персонализирована Тогда
Объект.Личная = Ложь;
КонецЕсли;
ГруппаВходитВИерархиюЛичныхРассылок = ПринадлежитГруппеЛичныхРассылок(Объект.Родитель);
Если Объект.Личная <> ГруппаВходитВИерархиюЛичныхРассылок Тогда
УстановитьМодифицированностьФормы(Форма, "Родитель", ,
НСтр("ru = 'Группа установлена в соответствии с видом рассылки.'"));
Объект.Родитель = ?(Объект.Личная, Форма.Кэш.ГруппаЛичныхРассылок, Неопределено);
КонецЕсли;
Если Объект.Личная Тогда
РассылкаОбщая = Ложь;
Форма.ВидРассылки = "Личная";
ИначеЕсли Объект.Персонализирована Тогда
РассылкаОбщая = Ложь;
Форма.ВидРассылки = "Персонализирована";
Иначе
РассылкаОбщая = Истина;
Форма.ВидРассылки = "Общая";
КонецЕсли;
Если Не РассылкаОбщая Тогда
Объект.ИспользоватьПапку = Ложь;
Объект.ИспользоватьСетевойКаталог = Ложь;
Объект.ИспользоватьFTPРесурс = Ложь;
Объект.ИспользоватьЭлектроннуюПочту = Истина;
КонецЕсли;
Элементы.ВидыРассылки.ТекущаяСтраница = ?(Объект.Личная, Элементы.ВидыРассылкиЛичная,
Элементы.ВидыРассылкиДляПолучателей);
Элементы.ДругиеСпособыДоставки.Видимость = РассылкаОбщая;
Элементы.ИспользоватьЭлектроннуюПочту.Видимость = РассылкаОбщая;
Если Объект.Личная Тогда
Элементы.ПолучателиРассылки.Видимость = Ложь;
Иначе
Элементы.ПолучателиРассылки.Видимость = ЗначениеЗаполнено(Форма.ТипПолучателейРассылки);
Если Не РассылкаОбщая Тогда
Элементы.ПолучателиРассылки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
Иначе
Элементы.ПолучателиРассылки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
КонецЕсли;
КонецЕсли;
Если Объект.ИспользоватьПапку Тогда
Форма.ДругойСпособДоставки = "ИспользоватьПапку";
Форма.Публиковать = Истина;
ИначеЕсли Объект.ИспользоватьСетевойКаталог Тогда
Форма.ДругойСпособДоставки = "ИспользоватьСетевойКаталог";
Форма.Публиковать = Истина;
ИначеЕсли Объект.ИспользоватьFTPРесурс Тогда
Форма.ДругойСпособДоставки = "ИспользоватьFTPРесурс";
Форма.Публиковать = Истина;
Иначе
Форма.ДругойСпособДоставки = Элементы.ДругойСпособДоставки.СписокВыбора[0].Значение;
Форма.Публиковать = Ложь;
КонецЕсли;
Элементы.ИспользоватьПолучателяРассылкиВНастройкеОтчета1.Видимость = Объект.Персонализирована;
Элементы.ИспользоватьПолучателяРассылкиВНастройкеОтчета2.Видимость = Объект.Персонализирована;
Элементы.ИспользоватьПолучателяРассылкиВНастройкеОтчета3.Видимость = Объект.Персонализирована;
Элементы.ИспользоватьПолучателяРассылкиВНастройкеОтчета4.Видимость = Объект.Персонализирована;
УстановитьВидимостьДоступностьПаролейСертификатов(Форма);
КонецЕсли;
Если Изменения = "" Или Изменения = "Отчеты" Тогда
КоличествоОтчетов = Форма.Объект.Отчеты.Количество();
Если КоличествоОтчетов > 0 Тогда
Элементы.СтраницаОтчеты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Отчеты (%1)'"),
Формат(КоличествоОтчетов, "ЧН=0; ЧГ="));
Иначе
Элементы.СтраницаОтчеты.Заголовок = НСтр("ru = 'Отчеты'") ;
КонецЕсли;
КонецЕсли;
Если Изменения = "" Или Изменения = "ДругойСпособДоставки" Или Изменения = "Публиковать" Или Изменения = "ВидРассылки" Тогда
Элементы.ДругойСпособДоставки.Доступность = Форма.Публиковать;
Элементы.ПараметрыДоставки.Доступность = Форма.Публиковать;
Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы[Форма.ДругойСпособДоставки];
Элементы.Папка.Видимость = (Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы.ИспользоватьПапку);
Элементы.СетевойКаталогWindows.Видимость = (Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы.ИспользоватьСетевойКаталог);
Элементы.СетевойКаталогLinux.Видимость = (Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы.ИспользоватьСетевойКаталог);
Элементы.FTPСерверИКаталог.Видимость = (Элементы.ПараметрыДоставки.ТекущаяСтраница = Элементы.ИспользоватьFTPРесурс);
КонецЕсли;
Если Изменения = "" Или Изменения = "ИспользоватьЭлектроннуюПочту" Или Изменения = "ВидРассылки" Тогда
Элементы.ГруппаУчетнаяЗапись.Доступность = Объект.ИспользоватьЭлектроннуюПочту;
Элементы.ПараметрыПисьма.Доступность = Объект.ИспользоватьЭлектроннуюПочту;
Элементы.ДополнительныеПараметрыРассылкиПоЭлектроннойПочте.Доступность = Объект.ИспользоватьЭлектроннуюПочту;
Элементы.ПолучателиРассылки.Доступность = Объект.ИспользоватьЭлектроннуюПочту;
Элементы.ПрикреплятьОтчетыВоВложения.Доступность = Объект.ИспользоватьЭлектроннуюПочту;
КонецЕсли;
Если Изменения = "" Или Изменения = "ИспользоватьЭлектроннуюПочту" Или Изменения = "ВидРассылки"
Или Изменения = "ПрикреплятьОтчетыВоВложения" Или Изменения = "Публиковать" Или Изменения = "ТолькоУведомить" Тогда
Элементы.НастройкиФайловОтчетов.Доступность = Объект.ПрикреплятьОтчетыВоВложения Или Форма.Публиковать;
КонецЕсли;
Если Изменения = "" Или Изменения = "ПолучателиРассылки" Или Изменения = "ВидРассылки" Тогда
Если Форма.ВидРассылки <> "Личная" Тогда
Элементы.ПолучателиРассылки.Видимость = Истина;
ПредставлениеПолучателей = ПредставлениеПолучателей(Форма);
Форма.ПолучателиРассылки = ПредставлениеПолучателей.Краткое;
КонецЕсли;
КонецЕсли;
Если Изменения = ""
Или Изменения = "ТолькоУведомить"
Или Изменения = "ИспользоватьЭлектроннуюПочту"
Или Изменения = "ДругойСпособДоставки"
Или Изменения = "Публиковать"
Или Изменения = "ВидРассылки" Тогда
Элементы.ТолькоУведомить.Видимость = (Объект.ИспользоватьЭлектроннуюПочту И Форма.Публиковать);
Если Не Элементы.ТолькоУведомить.Видимость Тогда
Объект.ТолькоУведомить = Ложь;
КонецЕсли;
СпособыДоставки = "";
Если Объект.ИспользоватьПапку Тогда
СпособыДоставки = НСтр("ru = 'папка'");
КонецЕсли;
Если Объект.ИспользоватьСетевойКаталог Тогда
СпособыДоставки = НСтр("ru = 'сетевой каталог'");
КонецЕсли;
Если Объект.ИспользоватьFTPРесурс Тогда
СпособыДоставки = НСтр("ru = 'FTP'");
КонецЕсли;
Если Объект.ИспользоватьЭлектроннуюПочту И Не Объект.ТолькоУведомить Тогда
СпособыДоставки = СпособыДоставки + ?(СпособыДоставки = "", НСтр("ru = 'эл. почта'"), " "+ НСтр("ru = 'и эл. почта'"));
КонецЕсли;
Элементы.СтраницаДоставка.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Доставка (%1)'"), СпособыДоставки);
КонецЕсли;
Если ПустаяСтрока(Изменения) Или СтрСравнить(Изменения, "ПисьмоВФорматеHTML") = 0 Тогда
Элементы.СтраницыТекстПисьма.ТекущаяСтраница = ?(Объект.ПисьмоВФорматеHTML,
Элементы.СтраницыТекстПисьмаHTML, Элементы.СтраницыТекстПисьмаОбычныйТекст);
КонецЕсли;
Если Изменения = "" Или Изменения = "Архивировать" Тогда
Элементы.ИмяАрхива.Доступность = Объект.Архивировать;
Элементы.ПарольАрхива.Доступность = Объект.Архивировать;
Элементы.СоздатьПарольАрхива.Доступность = Объект.Архивировать;
УстановитьВидимостьДоступностьПаролейСертификатов(Форма);
КонецЕсли;
Если Изменения = "" Или Изменения = "ВыполнятьПоРасписанию" Тогда
Если Объект.ВыполнятьПоРасписанию Тогда
Элементы.СтраницаРасписание.Заголовок = НСтр("ru = 'Расписание (активно)'");
Иначе
Элементы.СтраницаРасписание.Заголовок = НСтр("ru = 'Расписание (не активно)'");
КонецЕсли;
Элементы.ПараметрыВыполненияПоРасписанию.Доступность = Объект.ВыполнятьПоРасписанию;
Элементы.СтраницыПериодичности.Доступность = Объект.ВыполнятьПоРасписанию;
Элементы.ГруппаВремяВыполнения.Доступность = Объект.ВыполнятьПоРасписанию;
КонецЕсли;
Если Изменения = "" Или Изменения = "ПериодичностьРасписания" Тогда
Если Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Ежедневно") Тогда
ИмяПеречисления = "Ежедневно";
ИмяВидимойСтраницы = Элементы.СтраницаЕжедневно.Имя;
ИначеЕсли Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Еженедельно") Тогда
ИмяПеречисления = "Еженедельно";
ИмяВидимойСтраницы = Элементы.СтраницаЕженедельно.Имя;
ИначеЕсли Объект.ПериодичностьРасписания = ПредопределенноеЗначение("Перечисление.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно") Тогда
ИмяПеречисления = "Ежемесячно";
ИмяВидимойСтраницы = Элементы.СтраницаЕжемесячно.Имя;
Иначе
ИмяПеречисления = "Произвольное";
ИмяВидимойСтраницы = "";
КонецЕсли;
Для Каждого Страница Из Элементы.СтраницыПериодичности.ПодчиненныеЭлементы Цикл
Страница.Видимость = (Страница.Имя = ИмяВидимойСтраницы);
КонецЦикла;
Если ИмяПеречисления = "Произвольное" Тогда
Элементы.ИзменитьРасписание.Видимость = Истина;
Элементы.ГруппаВремяВыполнения.Видимость = Ложь;
Иначе
Элементы.ИзменитьРасписание.Видимость = Ложь;
Элементы.ГруппаВремяВыполнения.Видимость = Истина;
КонецЕсли;
Если Изменения = "ПериодичностьРасписания"
И (ИмяПеречисления = "Ежедневно"
Или ИмяПеречисления = "Еженедельно"
Или ИмяПеречисления = "Ежемесячно") Тогда
Форма.Расписание.ДатаНачала = '00010101';
Форма.Расписание.ДатаКонца = '00010101';
Форма.Расписание.ВремяЗавершения = '00010101';
Форма.Расписание.ДеньНеделиВМесяце = 0;
Форма.Расписание.ДетальныеРасписанияДня = Новый Массив;
Форма.Расписание.ИнтервалЗавершения = 0;
Форма.Расписание.ПаузаПовтора = 0;
Форма.Расписание.ПериодНедель = 0;
Если ИмяПеречисления <> "Ежедневно" Тогда
Форма.Расписание.ПериодПовтораДней = 1;
КонецЕсли;
Если ИмяПеречисления <> "Еженедельно" Тогда
ВыбранныеДниНедели = Новый Массив;
Для Индекс = 1 По 7 Цикл
ВыбранныеДниНедели.Добавить(Индекс);
КонецЦикла;
Форма.Расписание.ДниНедели = ВыбранныеДниНедели;
КонецЕсли;
Если ИмяПеречисления <> "Ежемесячно" Тогда
ВсеМесяцы = Новый Массив;
Для Индекс = 1 По 12 Цикл
ВсеМесяцы.Добавить(Индекс);
КонецЦикла;
Форма.Расписание.Месяцы = ВсеМесяцы;
Форма.Расписание.ДеньВМесяце = 0;
КонецЕсли;
КонецЕсли;
Если ИмяПеречисления = "Ежедневно" Тогда
Форма.ВремяНачала = Форма.Расписание.ВремяНачала;
Форма.ПериодПовтораДней = Форма.Расписание.ПериодПовтораДней;
ИначеЕсли ИмяПеречисления = "Еженедельно" Тогда
Форма.ВремяНачала = Форма.Расписание.ВремяНачала;
Для Каждого КлючИЗначение Из Форма.Кэш.Соответствия.ДниНедели Цикл
Форма[КлючИЗначение.Ключ] = (Форма.Расписание.ДниНедели.Найти(КлючИЗначение.Значение) <> Неопределено);
КонецЦикла;
ИначеЕсли ИмяПеречисления = "Ежемесячно" Тогда
Форма.ВремяНачала = Форма.Расписание.ВремяНачала;
Если Форма.Расписание.ДеньВМесяце >= 0 Тогда
Форма.ДеньВМесяце = Форма.Расписание.ДеньВМесяце;
Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = НСтр("ru = 'начала'");
Иначе
Форма.ДеньВМесяце = -Форма.Расписание.ДеньВМесяце;
Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = НСтр("ru = 'конца'");
КонецЕсли;
Для Каждого КлючИЗначение Из Форма.Кэш.Соответствия.Месяцы Цикл
Форма[КлючИЗначение.Ключ] = (Форма.Расписание.Месяцы.Найти(КлючИЗначение.Значение) <> Неопределено);
КонецЦикла;
КонецЕсли;
Форма.ПериодПовтораВТечениеДня = СекундыВЧасы(Форма.Расписание.ПериодПовтораВТечениеДня);
Форма.ВремяОкончания = Форма.Расписание.ВремяКонца;
Форма.ИспользоватьПериодПовтораВТечениеДня = ЗначениеЗаполнено(Форма.ПериодПовтораВТечениеДня);
КонецЕсли;
Если Изменения = "" Или Изменения = "ПериодПовтораВТечениеДня" Или Изменения = "ПериодичностьРасписания" Тогда
Элементы.ПериодПовтораВТечениеДня.Доступность = Форма.ИспользоватьПериодПовтораВТечениеДня;
Элементы.ДекорацияЧасов.Доступность = Форма.ИспользоватьПериодПовтораВТечениеДня;
Элементы.ВремяОкончания.Доступность = Форма.ИспользоватьПериодПовтораВТечениеДня;
Форма.ВремяОкончания = ?(Форма.ИспользоватьПериодПовтораВТечениеДня, Форма.ВремяОкончания, '00010101');
Форма.Расписание.ВремяКонца = Форма.ВремяОкончания;
КонецЕсли;
Если Изменения = "" Или Изменения = "НачалоКонецМесяца" Тогда
Элементы.ГиперссылкаНачалоКонецМесяца.Заголовок = ?(Форма.Расписание.ДеньВМесяце >= 0, "начала", "конца");
КонецЕсли;
Если Изменения = "" Или Изменения = "ФорматыПоУмолчанию" Тогда
Элементы.СброситьФорматПоУмолчанию.Видимость = (Форма.ФорматыПоУмолчанию <> Форма.СписокФорматовПоУмолчаниюПредставление);
КонецЕсли;
Если Изменения = "" Или Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаРасписание Тогда
Элементы.ПредставлениеРасписания.Видимость = Объект.ВыполнятьПоРасписанию;
Если Объект.ВыполнятьПоРасписанию Тогда
Элементы.ПредставлениеРасписания.Заголовок = ПредставлениеРасписания(Форма.Расписание);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьДоступностьПаролейСертификатов(Форма)
Объект = Форма.Объект;
Элементы = Форма.Элементы;
Если Форма.ДоступноШифрованиеВложений Тогда
Если Объект.Персонализирована Тогда
Элементы["ГруппаСертификатДляШифрования"].Видимость = Ложь;
Если Объект.Архивировать Тогда
Элементы.ПаролиШифрование.Заголовок = НСтр("ru = 'Установить пароли и зашифровать'");
Иначе
Элементы.ПаролиШифрование.Заголовок = НСтр("ru = 'Зашифровать'");
КонецЕсли;
Элементы.ГруппаПаролиШифрование.Видимость = Истина;
Элементы.ГруппаПарольАрхива.Видимость = Ложь;
Элементы.ПаролиШифрование.Доступность = Объект.УстановитьПаролиЗашифровать;
Элементы.ПаролиШифрование.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Элементы.ПаролиШифрование.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Установка и настройка паролей и шифрования.
|При рассылке отчетов по электронной почте необходимо учитывать,
|что некоторые почтовые сервера могут не принимать зашифрованные файлы.'");
Элементы.УстановитьПаролиЗашифровать.Доступность = Истина;
Иначе
Элементы["ГруппаСертификатДляШифрования"].Видимость = ?(Форма.Объект.Личная, Истина, Ложь);
Элементы.ГруппаПарольАрхива.Видимость = Истина;
Элементы.ГруппаПаролиШифрование.Видимость = Ложь;
КонецЕсли;
Иначе
Если Объект.Персонализирована Тогда
Элементы.ПаролиШифрование.Заголовок = НСтр("ru = 'Установить пароли'");
Элементы.ГруппаПаролиШифрование.Видимость = Истина;
Элементы.ГруппаПарольАрхива.Видимость = Ложь;
Элементы.ПаролиШифрование.Доступность = Объект.Архивировать И Объект.УстановитьПаролиЗашифровать;
Элементы.ПаролиШифрование.ОтображениеПодсказки = ОтображениеПодсказки.Авто;
Элементы.ПаролиШифрование.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'Установка и настройка паролей.'");
Элементы.УстановитьПаролиЗашифровать.Доступность = Объект.Архивировать;
Иначе
Элементы.ГруппаПарольАрхива.Видимость = Истина;
Элементы.ГруппаПаролиШифрование.Видимость = Ложь;
Если Элементы.Найти("ГруппаСертификатДляШифрования") <> Неопределено Тогда
Элементы["ГруппаСертификатДляШифрования"].Видимость = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеРасписания(Расписание)
ПредставлениеРасписания = Строка(Расписание);
ПредставлениеРасписания = ВРег(Лев(ПредставлениеРасписания, 1)) + Сред(ПредставлениеРасписания, 2);
ПредставлениеРасписания = СтрЗаменить(СтрЗаменить(ПредставлениеРасписания, " ", " "), " ]", "]") + ".";
Если ЗначениеЗаполнено(Расписание.ВремяНачала) Или ЗначениеЗаполнено(Расписание.ВремяКонца) Тогда
Дополнение = ДополнениеПредставленияРасписанияВМоделиСервиса();
ПредставлениеРасписания = ?(ЗначениеЗаполнено(Дополнение), ПредставлениеРасписания + Символы.ПС + Дополнение,
ПредставлениеРасписания);
КонецЕсли;
Возврат ПредставлениеРасписания;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеПолучателей(Форма)
Получатели = Форма.Объект.Получатели;
Включенные = Получатели.НайтиСтроки(Новый Структура("Исключен", Ложь));
Отключенные = Получатели.НайтиСтроки(Новый Структура("Исключен", Истина));
ПредставлениеОтключенных = РассылкаОтчетовКлиентСервер.ПредставлениеСписка(Отключенные, "Получатель", 0);
Остаток = 75 - ПредставлениеОтключенных.ДлинаКраткого;
Представление = РассылкаОтчетовКлиентСервер.ПредставлениеСписка(Включенные, "Получатель", Остаток);
ПараметрыПолучателей = РассылкаОтчетовКлиентСервер.ПараметрыПолучателей();
ПараметрыПолучателей.Ссылка = Форма.Объект.Ссылка;
ПараметрыПолучателей.ВидПочтовогоАдресаПолучателей = Форма.Объект.ВидПочтовогоАдресаПолучателей;
ПараметрыПолучателей.Личная = Форма.Объект.Личная;
ПараметрыПолучателей.ТипПолучателейРассылки = Форма.Объект.ТипПолучателейРассылки;
ПараметрыПолучателей.Получатели = Форма.Объект.Получатели;
КоличествоПолучателей = КоличествоПолучателейСУчетомГрупп(ПараметрыПолучателей);
Если КоличествоПолучателей.Всего = 0 Тогда
Представление.Краткое = НСтр("ru = '<Укажите получателей>'");
Возврат Представление;
КонецЕсли;
Если ПредставлениеОтключенных.МаксимумПревышен Тогда
ПредставлениеОтключенных.Краткое = ПредставлениеОтключенных.Краткое + ", ...";
КонецЕсли;
Если Представление.МаксимумПревышен Тогда
Представление.Краткое = Представление.Краткое + ", ...";
КонецЕсли;
Если КоличествоПолучателей.Исключены <> Неопределено И КоличествоПолучателей.Исключены > 0 Тогда
ШаблонРазделения = НСтр("ru = 'Кроме'")+ ": ";
Представление.Полное = Представление.Полное + ";" + Символы.ПС + ШаблонРазделения + ПредставлениеОтключенных.Полное;
Если Представление.ДлинаКраткого + ПредставлениеОтключенных.ДлинаКраткого <= 75 Тогда
Представление.Краткое = Представление.Краткое + "; " + ШаблонРазделения + ПредставлениеОтключенных.Краткое;
КонецЕсли;
КонецЕсли;
Если Представление.МаксимумПревышен
Или ПредставлениеОтключенных.МаксимумПревышен Тогда
Если КоличествоПолучателей.Исключены <> Неопределено И КоличествоПолучателей.Исключены > 0 Тогда
ШаблонОкончания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '(всего %1, исключая %2)'"),
КоличествоПолучателей.Всего,
КоличествоПолучателей.Исключены);
Иначе
ШаблонОкончания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '(всего %1)'"),
КоличествоПолучателей.Всего);
КонецЕсли;
Представление.Краткое = Представление.Краткое + "; " + ШаблонОкончания;
КонецЕсли;
Возврат Представление;
КонецФункции
&НаСервереБезКонтекста
Функция КоличествоПолучателейСУчетомГрупп(ПараметрыПолучателей)
Возврат Справочники.РассылкиОтчетов.КоличествоПолучателейСУчетомГрупп(ПараметрыПолучателей);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьМодифицированностьФормы(Форма, Поле = "", ПутьКДанным = "", Текст = "")
Если Не Форма.Модифицированность Тогда
Форма.ФормаБылаМодифицированаНаСервере = Истина;
Если ЗначениеЗаполнено(Текст) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Текст;
Сообщение.Поле = Поле;
Сообщение.ПутьКДанным = ПутьКДанным;
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеФорматовПоУмолчанию()
Возврат НСтр("ru = 'по умолчанию'");
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПолучателиУказаны(Получатели)
Для Каждого СтрокаТаблицы Из Получатели Цикл
Если Не СтрокаТаблицы.Исключен Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
ТекстСообщения = НСтр("ru = 'Не выбрано ни одного получателя.'");
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = ТекстСообщения;
Сообщение.Поле = "ПолучателиРассылки";
Сообщение.Сообщить();
Возврат Ложь;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов)
Возврат "[" + ПараметрыТекстаПисьмаИФайлов.Получатель + "]";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЧасыВСекунды(Часы)
Возврат Часы * 60 * 60;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СекундыВЧасы(Секунды)
Возврат Секунды / 60 / 60;
КонецФункции
#КонецОбласти
#Область ВызовСервераСервер
&НаСервереБезКонтекста
Функция ПочтовыеАдресаПолучателя(Получатель, СписокЗначений)
Получатели = Новый Массив;
Получатели.Добавить(Получатель);
ТипыКонтактнойИнформации = Новый Массив;
ТипыКонтактнойИнформации.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Попытка
ПочтовыеАдреса = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(Получатели, ТипыКонтактнойИнформации,, ТекущаяДатаСеанса());
Исключение
Возврат СписокЗначений;
КонецПопытки;
ПочтовыеАдресаПоВидам = Новый Соответствие;
Для Каждого ПочтовыйАдрес Из ПочтовыеАдреса Цикл
Если НЕ ЗначениеЗаполнено(ПочтовыйАдрес.Представление) Тогда
Продолжить;
КонецЕсли;
ПочтовыеАдресаВида = ПочтовыеАдресаПоВидам.Получить(ПочтовыйАдрес.Вид);
Если ПочтовыеАдресаВида = Неопределено Тогда
ПочтовыеАдресаПоВидам.Вставить(ПочтовыйАдрес.Вид, ПочтовыйАдрес.Представление);
Иначе
ПочтовыеАдресаПоВидам[ПочтовыйАдрес.Вид]= ПочтовыеАдресаВида + ", " + ПочтовыйАдрес.Представление;
КонецЕсли;
КонецЦикла;
Для Каждого Вид Из ПочтовыеАдресаПоВидам Цикл
СписокЗначений.Добавить(Вид.Ключ, Вид.Значение + " (" + Строка(Вид.Ключ) + ")");
КонецЦикла;
Возврат СписокЗначений;
КонецФункции
&НаСервереБезКонтекста
Функция ПравоИзмененияПапкиИФайлов(Папка)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
Результат = МодульРаботаСФайламиСлужебный.ПравоДобавленияФайловВПапку(Папка);
Иначе
Результат = Истина;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция СоздатьПароль()
СвойстваПароля = Пользователи.СвойстваПароля();
СвойстваПароля.НаименьшаяДлина = 8;
СвойстваПароля.Сложный = Истина;
СвойстваПароля.УчестьНастройки = "ДляПользователей";
Возврат Пользователи.СоздатьПароль(СвойстваПароля);
КонецФункции
&НаСервереБезКонтекста
Функция ДополнениеПредставленияРасписанияВМоделиСервиса()
Если ОбщегоНазначения.РазделениеВключено() Тогда
Возврат НСтр("ru = 'Точное время запуска может отличаться от указанного.'");
Иначе
Возврат "";
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОбновитьЗначениеПараметраПолучателяПерсонализированнойРассылки()
Если НЕ Объект.Персонализирована Или Элементы.Отчеты.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ШаблонЗначенияПолучателя = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
ЗначениеСписком = Новый СписокЗначений;
ЗначениеСписком.Добавить(ШаблонЗначенияПолучателя, ШаблонЗначенияПолучателя);
Для каждого ЭлементНастройки Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл
Если Не ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Продолжить;
КонецЕсли;
Если ЭлементНастройки.Значение = ШаблонЗначенияПолучателя
Или ТипЗнч(ЭлементНастройки.Значение) = Тип("СписокЗначений")
И ЭлементНастройки.Значение.НайтиПоЗначению(ШаблонЗначенияПолучателя) <> Неопределено Тогда
ДоступныйПараметр = КомпоновщикНастроекКД.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(ЭлементНастройки.Параметр);
Если ДоступныйПараметр <> Неопределено И ДоступныйПараметр.ДоступенСписокЗначений Тогда
ЭлементНастройки.Значение = ЗначениеСписком;
Элементы.Отчеты.ТекущиеДанные.ВнесеныИзменения = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
НайтиНастройкиПерсонализации();
КонецПроцедуры
&НаСервере
Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина, Знач ПользовательскиеНастройки = Неопределено)
Если ИдентификаторСтроки <> ИдентификаторТекущейСтрокиТаблицыОтчетов И ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда
ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов);
КонецЕсли;
ИдентификаторТекущейСтрокиТаблицыОтчетов = ИдентификаторСтроки;
СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаОтчеты = Неопределено Тогда
ИдентификаторТекущейСтрокиТаблицыОтчетов = -1;
Возврат "";
КонецЕсли;
Если ПользовательскиеНастройки = Неопределено Тогда
Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек);
Иначе
ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты);
ОбъектСтрокаОтчеты = РеквизитФормыВЗначение("Объект").Отчеты.Получить(ИндексСтроки);
ПользовательскиеНастройки = ?(ОбъектСтрокаОтчеты = Неопределено, Неопределено, ОбъектСтрокаОтчеты.Настройки.Получить());
КонецЕсли;
КонецЕсли;
Если Не СтрокаОтчеты.Доступность Тогда
Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница;
Возврат "";
КонецЕсли;
ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки);
НайтиНастройкиПерсонализации();
Возврат ПараметрыОтчета.Ошибки;
КонецФункции
&НаСервере
Процедура НайтиНастройкиПерсонализации()
НастройкиПерсонализации.Очистить();
Настройки = КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы;
Для Каждого ЭлементНастройки Из Настройки Цикл
ЗначениеНастройки = Неопределено;
Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЗначениеНастройки = ЭлементНастройки.ПравоеЗначение;
ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЗначениеНастройки = ЭлементНастройки.Значение;
Иначе
Продолжить;
КонецЕсли;
Если ЗначениеНастройки <> ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов) Тогда
Продолжить;
КонецЕсли;
ЗаголовокНастройки = ЗаголовокНастройкиПерсонализации(ЭлементНастройки.ИдентификаторПользовательскойНастройки);
Если ЗаголовокНастройки <> Неопределено Тогда
НастройкиПерсонализации.Добавить(ЗаголовокНастройки);
КонецЕсли;
КонецЦикла;
ОформитьНастройкиПерсонализации();
КонецПроцедуры
&НаСервере
Функция ЗаголовокНастройкиПерсонализации(ИдентификаторНастройки)
ЗаголовокНастройки = Неопределено;
ОписаниеНастройки = Неопределено;
Настройки = КомпоновщикНастроекКД.Настройки;
ПользовательскиеНастройки = КомпоновщикНастроекКД.ПользовательскиеНастройки;
НайденныеНастройки = ПользовательскиеНастройки.ПолучитьОсновныеНастройкиПоИдентификаторуПользовательскойНастройки(
ИдентификаторНастройки);
Если НайденныеНастройки.Количество() = 0 Тогда
Возврат ЗаголовокНастройки;
КонецЕсли;
ЭлементНастройки = НайденныеНастройки[0];
Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ЗаголовокНастройки = Строка(ЭлементНастройки.ЛевоеЗначение);
ОписаниеНастройки = Настройки.Отбор.ДоступныеПоляОтбора.НайтиПоле(
ЭлементНастройки.ЛевоеЗначение);
ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ЗаголовокНастройки = Строка(ЭлементНастройки.Параметр);
ОписаниеНастройки = Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(
ЭлементНастройки.Параметр);
КонецЕсли;
Если ОписаниеНастройки <> Неопределено Тогда
ЗаголовокНастройки = ОписаниеНастройки.Заголовок;
КонецЕсли;
Возврат ЗаголовокНастройки;
КонецФункции
&НаСервере
Процедура ЗаполнитьРасписаниеПоВарианту(Вариант, ОбновитьВидимость = Ложь)
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ВремяНачала = '00010101073000';
Расписание.ПериодПовтораДней = 1;
ДеньНеделиМин = 1;
ДеньНеделиМакс = 7;
ВсеМесяцы = Новый Массив;
Для Индекс = 1 По 12 Цикл
ВсеМесяцы.Добавить(Индекс);
КонецЦикла;
Расписание.Месяцы = ВсеМесяцы;
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
Если Вариант = 2 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежедневно;
Расписание.ПериодПовтораДней = 2;
ИначеЕсли Вариант = 3 Тогда
Расписание.ПериодПовтораДней = 4;
ИначеЕсли Вариант = 4 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно;
ДеньНеделиМин = 1;
ДеньНеделиМакс = 5;
ИначеЕсли Вариант = 5 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно;
Расписание.ВремяНачала = '00010101220000';
ДеньНеделиМин = 6;
ДеньНеделиМакс = 7;
ИначеЕсли Вариант = 6 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно;
ДеньНеделиМин = 1;
ДеньНеделиМакс = 1;
ИначеЕсли Вариант = 7 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно;
ДеньНеделиМин = 5;
ДеньНеделиМакс = 5;
ИначеЕсли Вариант = 8 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Еженедельно;
Расписание.ВремяНачала = '00010101220000';
ДеньНеделиМин = 7;
ДеньНеделиМакс = 7;
ИначеЕсли Вариант = 9 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно;
Расписание.ДеньВМесяце = 1;
ИначеЕсли Вариант = 10 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно;
Расписание.ДеньВМесяце = -1;
ИначеЕсли Вариант = 11 Тогда
ВсеМесяцы = Новый Массив;
ВсеМесяцы.Добавить(1);
ВсеМесяцы.Добавить(4);
ВсеМесяцы.Добавить(7);
ВсеМесяцы.Добавить(10);
Расписание.Месяцы = ВсеМесяцы;
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Ежемесячно;
Расписание.ДеньВМесяце = 10;
ИначеЕсли Вариант = 12 Тогда
Объект.ПериодичностьРасписания = Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное;
КонецЕсли;
ВыбранныеДниНедели = Новый Массив;
Для Индекс = ДеньНеделиМин По ДеньНеделиМакс Цикл
ВыбранныеДниНедели.Добавить(Индекс);
КонецЦикла;
Расписание.ДниНедели = ВыбранныеДниНедели;
Если ОбновитьВидимость Тогда
УстановитьВидимостьДоступностьКорректность(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьДобавленныеСтрокиОтчетов(СтруктураВыбора)
МассивОшибок = Новый Массив;
СтруктураВыбора.Выбрано.Количество = СтруктураВыбора.Выбрано.МассивСтрок.Количество();
Для ОбратныйИндекс = 1 По СтруктураВыбора.Выбрано.Количество Цикл
Индекс = СтруктураВыбора.Выбрано.Количество - ОбратныйИндекс;
ИдентификаторСтрокиОтчеты = СтруктураВыбора.Выбрано.МассивСтрок[Индекс];
СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтрокиОтчеты);
Если СтрокаОтчеты.Представление = "" Тогда
СтрокаОтчеты.Представление = Строка(СтрокаОтчеты.Отчет);
КонецЕсли;
СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтрокиОтчеты, Ложь);
Если СтрокаПредупреждения = "" Тогда
Ключ = "Успешно";
Иначе
Ключ = "СОшибками";
МассивОшибок.Добавить(СтрокаПредупреждения);
КонецЕсли;
Строки = СтруктураВыбора[Ключ].МассивСтрок;
Строки.Добавить(ИдентификаторСтрокиОтчеты);
СтруктураВыбора[Ключ].МассивСтрок = Строки;
СтруктураВыбора[Ключ].Количество = СтруктураВыбора[Ключ].Количество + 1;
СтруктураВыбора[Ключ].ПредставлениеОтчетов = СтруктураВыбора[Ключ].ПредставлениеОтчетов
+ ?(СтруктураВыбора[Ключ].ПредставлениеОтчетов = "", "", ", ")
+ СтрокаОтчеты.Представление;
КонецЦикла;
Если СтруктураВыбора.Успешно.Количество > 0 Тогда
Элементы.Отчеты.ТекущаяСтрока = СтруктураВыбора.Успешно.МассивСтрок[0];
ИдентификаторТекущейСтрокиТаблицыОтчетов = Элементы.Отчеты.ТекущаяСтрока;
ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтрокиОтчеты, Ложь);
КонецЕсли;
Если СтруктураВыбора.СОшибками.Количество > 0 Тогда
СтруктураВыбора.СОшибками.Текст = РассылкаОтчетов.СтрокаСообщенийПользователю(МассивОшибок);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьСпособДоставки(Рассылка, Знач ПараметрыДоставки)
ПараметрыДоставки.ДатаВыполнения = ТекущаяДатаСеанса();
ПараметрыДоставки.РежимТестирования = Истина;
УстановитьПривилегированныйРежим(Истина);
ПараметрыЖурнала = Новый Структура;
ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Проверка способа доставки'", ОбщегоНазначения.КодОсновногоЯзыка()));
ПараметрыЖурнала.Вставить("Данные", Рассылка);
ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов);
ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив);
УстановитьПривилегированныйРежим(Ложь);
ПолноеИмяФайла = ПолучитьИмяВременногоФайла(".html");
ТабДок = Новый ТабличныйДокумент;
ТабДок.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.HTML5);
Файл = Новый Файл(ПолноеИмяФайла);
Вложения = Новый Соответствие;
Вложения.Вставить(Файл.Имя, Файл.ПолноеИмя);
НачатьТранзакцию();
Попытка
РассылкаОтчетов.ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения);
ОтменитьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
Для Каждого Вложение Из Вложения Цикл
УдалитьФайлы(Вложение.Значение);
КонецЦикла;
УдалитьФайлы(ПолноеИмяФайла);
РезультатВыполнения = Новый Структура("Текст, Подробно", "", "");
Если ПараметрыЖурнала.МассивОшибок.Количество() = 0 Тогда
РезультатВыполнения.Текст = НСтр("ru = 'Проверка возможности доставки успешно пройдена.'");
Иначе
РезультатВыполнения.Текст = НСтр("ru = 'Проверка возможности доставки не пройдена.'");
РезультатВыполнения.Подробно = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыЖурнала.МассивОшибок, Ложь);
КонецЕсли;
Возврат РезультатВыполнения;
КонецФункции
&НаСервере
Функция ПоместитьПолучателейВХранилище()
Возврат ПоместитьВоВременноеХранилище(Объект.Получатели.Выгрузить(), УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция НаличиеПериодаВНастройках(ИдентификаторСтроки)
СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаОтчеты = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек);
Иначе
ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты);
ОбъектСтрокаОтчеты = РеквизитФормыВЗначение("Объект").Отчеты.Получить(ИндексСтроки);
ПользовательскиеНастройки = ?(ОбъектСтрокаОтчеты = Неопределено, Неопределено, ОбъектСтрокаОтчеты.Настройки.Получить());
КонецЕсли;
Если ПользовательскиеНастройки = Неопределено Тогда
ПараметрыОтчета = Новый Структура("Отчет, Настройки", СтрокаОтчеты.Отчет, Неопределено);
ПараметрыЖурнала = Новый Структура;
ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'", ОбщегоНазначения.КодОсновногоЯзыка()));
ПараметрыЖурнала.Вставить("Данные", ?(ЗначениеЗаполнено(Объект.Ссылка), Объект.Ссылка, СтрокаОтчеты.Отчет));
ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов);
ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив);
РассылкаОтчетов.ИнициализироватьОтчет(
ПараметрыЖурнала,
ПараметрыОтчета,
Объект.Персонализирована,
УникальныйИдентификатор);
Если ПараметрыОтчета.НастройкиКД <> Неопределено Тогда
ПользовательскиеНастройки = ПараметрыОтчета.НастройкиКД.ПараметрыДанных;
КонецЕсли;
КонецЕсли;
Период = РассылкаОтчетов.ПолучитьПериодИзПользовательскихНастроек(ПользовательскиеНастройки);
Если Период <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Процедура ДобавитьДополнительныеПараметрыШаблона(ПараметрыШаблона, Получатель)
Если ДополнительныеПараметрыТекстаПисьма = Неопределено Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметрыШаблона = Новый Структура;
Для Каждого Параметр Из ДополнительныеПараметрыТекстаПисьма Цикл
ДополнительныеПараметрыШаблона.Вставить(Параметр.Значение.Имя, "");
КонецЦикла;
РассылкаОтчетовПереопределяемый.ПриПолученииПараметровТекстаПисьма(ВидРассылки, ТипПолучателейРассылки, Получатель, ДополнительныеПараметрыШаблона);
Для Каждого Параметр Из ДополнительныеПараметрыШаблона Цикл
ПараметрыШаблона.Вставить(Параметр.Ключ, Параметр.Значение);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьПервогоПолучателя()
ПараметрыПолучателей = РассылкаОтчетовКлиентСервер.ПараметрыПолучателей();
ПараметрыПолучателей.Получатели = Объект.Получатели;
ПараметрыПолучателей.Автор = Объект.Автор;
ПараметрыПолучателей.Личная = Объект.Личная;
ПараметрыПолучателей.ТипПолучателейРассылки = Объект.ТипПолучателейРассылки;
ПараметрыПолучателей.ВидПочтовогоАдресаПолучателей = Объект.ВидПочтовогоАдресаПолучателей;
СписокПолучателейРассылки = РассылкаОтчетов.СформироватьСписокПолучателейРассылки(ПараметрыПолучателей, Неопределено);
ПолучателиМетаданные = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(Объект.ТипПолучателейРассылки, Ложь);
КлючОбъектаМетаданных = ?(ЗначениеЗаполнено(Объект.ТипПолучателейРассылки),
ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.ТипПолучателейРассылки, "КлючОбъектаМетаданных"), Неопределено);
ТипПолучателей = ?(КлючОбъектаМетаданных <> Неопределено, КлючОбъектаМетаданных.Получить(), Неопределено);
ПервыйПолучатель = Новый Структура ("Наименование, Ссылка", "", Новый (ТипПолучателей));
Для Каждого Получатель Из СписокПолучателейРассылки Цикл
ПервыйПолучатель.Ссылка = Получатель.Ключ;
Прервать;
КонецЦикла;
Если ЗначениеЗаполнено(ПервыйПолучатель.Ссылка) Тогда
ПервыйПолучатель.Наименование = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПервыйПолучатель.Ссылка, "Наименование");
КонецЕсли;
Возврат ПервыйПолучатель;
КонецФункции
&НаСервере
Функция ПлановыйСписокОтчетовВоВложениях()
СписокИменФайлов = Новый Массив;
ПараметрыДоставки = Новый Структура("ТранслитерироватьИменаФайлов", Объект.ТранслитерироватьИменаФайлов);
ПараметрыФорматов = Новый Соответствие;
Для Каждого ФорматМД Из Метаданные.Перечисления.ФорматыСохраненияОтчетов.ЗначенияПеречисления Цикл
Формат = Перечисления.ФорматыСохраненияОтчетов[ФорматМД.Имя];
ПараметрыФормата = РассылкаОтчетов.ПараметрыЗаписиТабличногоДокументаВФормат(Формат);
ПараметрыФормата.Вставить("Имя", ФорматМД.Имя);
ПараметрыФорматов.Вставить(Формат, ПараметрыФормата);
КонецЦикла;
Для каждого СтрокаОтчет Из Объект.Отчеты Цикл
ФорматыОтчета = Новый Массив;
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СтрокаОтчет.Отчет));
Если Найденные.Количество() = 0 Тогда
Для Каждого СтрокаФормат Из СписокФорматовПоУмолчанию Цикл
Если НЕ СтрокаФормат.Пометка Тогда
Продолжить;
КонецЕсли;
ФорматыОтчета.Добавить(СтрокаФормат.Значение);
КонецЦикла;
Иначе
Для Каждого СтрокаФормат Из Найденные Цикл
ФорматыОтчета.Добавить(СтрокаФормат.Формат);
КонецЦикла;
КонецЕсли;
Если ЭтоАдресВременногоХранилища(СтрокаОтчет.АдресНастроек) Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчет.АдресНастроек);
Иначе
ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчет);
ОбъектСтрокаОтчеты = РеквизитФормыВЗначение("Объект").Отчеты.Получить(ИндексСтроки);
ПользовательскиеНастройки = ?(ОбъектСтрокаОтчеты = Неопределено, Неопределено, ОбъектСтрокаОтчеты.Настройки.Получить());
КонецЕсли;
Период = РассылкаОтчетов.ПолучитьПериодИзПользовательскихНастроек(ПользовательскиеНастройки);
Для Каждого Формат Из ФорматыОтчета Цикл
ПараметрыФормата = ПараметрыФорматов.Получить(Формат);
ПолноеИмяФайла = РассылкаОтчетов.ПолноеИмяФайлаПоШаблону(
"", СтрокаОтчет.Представление, ПараметрыФормата, ПараметрыДоставки, СтрокаОтчет.ШаблонНаименования, Период);
РассылкаОтчетовПереопределяемый.ПередСохранениемТабличногоДокументаВФормат(
Истина,
Новый ТабличныйДокумент,
Формат,
ПолноеИмяФайла);
СписокИменФайлов.Добавить(ПолноеИмяФайла);
КонецЦикла;
КонецЦикла;
Возврат СписокИменФайлов;
КонецФункции
&НаСервереБезКонтекста
Функция ПоместитьКартинкиВоВременноеХранилище(КартинкиДляHTML)
ТипСтрока = Новый ОписаниеТипов("Строка");
Вложения = Новый ТаблицаЗначений;
Вложения.Колонки.Добавить("АдресВоВременномХранилище", ТипСтрока);
Вложения.Колонки.Добавить("Идентификатор", ТипСтрока);
Вложения.Колонки.Добавить("Расширение", ТипСтрока);
Для Каждого КартинкаДляHTML Из КартинкиДляHTML Цикл
СтрокаВложение = Вложения.Добавить();
ФайлВложение = КартинкаДляHTML.Значение.ПолучитьДвоичныеДанные();
СтрокаВложение.АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ФайлВложение);
СтрокаВложение.Идентификатор = КартинкаДляHTML.Ключ;
СтрокаВложение.Расширение = Строка(КартинкаДляHTML.Значение.Формат());
КонецЦикла;
Возврат ПоместитьВоВременноеХранилище(Вложения);
КонецФункции
&НаСервереБезКонтекста
Функция ПринадлежитГруппеЛичныхРассылок(Группа)
Возврат РассылкаОтчетов.ПринадлежитГруппеЛичныхРассылок(Группа);
КонецФункции
#КонецОбласти
#Область Сервер
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
ЦветТекстаЗапрещеннойЯчейки = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение;
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.НастройкиТекущегоОтчета.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НастройкиТекущегоОтчета.Обнаружен");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки);
Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Отчеты.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФорматыОтчетов.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Отчеты.Доступность");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки);
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФорматыОтчетовШаблонНаименования.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Отчеты.ШаблонНаименования");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = "";
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "[" + ПараметрыТекстаПисьмаИФайлов.НаименованиеОтчета + "] ["
+ ПараметрыТекстаПисьмаИФайлов.ФорматОтчета + "]");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ФорматыОтчетовФорматы.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Отчеты.Форматы");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = "";
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветТекстаЗапрещеннойЯчейки);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ПредставлениеФорматовПоУмолчанию());
ОформитьНастройкиПерсонализации();
КонецПроцедуры
&НаСервере
Процедура ОформитьНастройкиПерсонализации()
Элемент = Неопределено;
ПараметрОформления = Новый ПараметрКомпоновкиДанных("Текст");
Для Каждого ЭлементОформления Из УсловноеОформление.Элементы Цикл
ЗначениеПараметра = ЭлементОформления.Оформление.НайтиЗначениеПараметра(ПараметрОформления);
Если ЗначениеПараметра.Значение = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов) Тогда
Элемент = ЭлементОформления;
Прервать;
КонецЕсли;
КонецЦикла;
Если Элемент <> Неопределено Тогда
ОтборЭлемента = Элемент.Отбор.Элементы[0];
ОтборЭлемента.ПравоеЗначение = НастройкиПерсонализации;
Возврат;
КонецЕсли;
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ПользовательскиеНастройкиЗначение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КомпоновщикНастроекКД.ПользовательскиеНастройки.Настройка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = НастройкиПерсонализации;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ШрифтВажнойНадписи = Метаданные.ЭлементыСтиля.ВажнаяНадписьШрифт;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", ШрифтВажнойНадписи.Значение);
КонецПроцедуры
&НаСервере
Функция ПолучитьКэш()
ДниНедели = Новый Соответствие;
ДниНедели.Вставить(Элементы.Понедельник.Имя, 1);
ДниНедели.Вставить(Элементы.Вторник.Имя, 2);
ДниНедели.Вставить(Элементы.Среда.Имя, 3);
ДниНедели.Вставить(Элементы.Четверг.Имя, 4);
ДниНедели.Вставить(Элементы.Пятница.Имя, 5);
ДниНедели.Вставить(Элементы.Суббота.Имя, 6);
ДниНедели.Вставить(Элементы.Воскресенье.Имя, 7);
ДниНедели = Новый ФиксированноеСоответствие(ДниНедели);
Месяцы = Новый Соответствие;
Месяцы.Вставить(Элементы.Январь.Имя, 1);
Месяцы.Вставить(Элементы.Февраль.Имя, 2);
Месяцы.Вставить(Элементы.Март.Имя, 3);
Месяцы.Вставить(Элементы.Апрель.Имя, 4);
Месяцы.Вставить(Элементы.Май.Имя, 5);
Месяцы.Вставить(Элементы.Июнь.Имя, 6);
Месяцы.Вставить(Элементы.Июль.Имя, 7);
Месяцы.Вставить(Элементы.Август.Имя, 8);
Месяцы.Вставить(Элементы.Сентябрь.Имя, 9);
Месяцы.Вставить(Элементы.Октябрь.Имя, 10);
Месяцы.Вставить(Элементы.Ноябрь.Имя, 11);
Месяцы.Вставить(Элементы.Декабрь.Имя, 12);
Месяцы = Новый ФиксированноеСоответствие(Месяцы);
Шаблоны = Новый ФиксированнаяСтруктура("Тема, Текст, ИмяАрхива",
РассылкаОтчетовКлиентСервер.ШаблонТемы(ПараметрыТекстаПисьмаИФайлов),
РассылкаОтчетов.ШаблонТекста(ПараметрыТекстаПисьмаИФайлов),
РассылкаОтчетовКлиентСервер.ШаблонИмениАрхива(ПараметрыТекстаПисьмаИФайлов));
Кэш = Новый Структура;
Кэш.Вставить("ПустоеЗначениеОтчета", РассылкаОтчетов.ПустоеЗначениеОтчета());
Кэш.Вставить("ГруппаЛичныхРассылок", Справочники.РассылкиОтчетов.ЛичныеРассылки);
Кэш.Вставить("ЗаголовокСистемы", РассылкаОтчетов.ИмяЭтойИнформационнойБазы());
Кэш.Вставить("Соответствия", Новый ФиксированнаяСтруктура("ДниНедели, Месяцы", ДниНедели, Месяцы));
Кэш.Вставить("Шаблоны", Шаблоны);
Кэш.Вставить("ИсключаемыеОтчеты", РассылкаОтчетовПовтИсп.ИсключаемыеОтчеты());
Возврат Новый ФиксированнаяСтруктура(Кэш);
КонецФункции
&НаСервере
Процедура ЗаполнитьСведенияТаблицыОтчеты()
ДоступностьОтчетов = ВариантыОтчетов.ДоступностьОтчетов(Объект.Отчеты.Выгрузить(, "Отчет").ВыгрузитьКолонку("Отчет"));
Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл
ИнформацияОбОтчете = ДоступностьОтчетов.Найти(СтрокаОтчеты.Отчет, "Ссылка");
Если ИнформацияОбОтчете = Неопределено Тогда
СтрокаОтчеты.Доступность = Ложь;
СтрокаОтчеты.Представление = НСтр("ru = '<Недостаточно прав для работы с отчетом>'");
Иначе
СтрокаОтчеты.Доступность = ИнформацияОбОтчете.Доступен;
СтрокаОтчеты.Представление = ИнформацияОбОтчете.Представление;
КонецЕсли;
СтрокаОтчеты.Форматы = "";
Найденные = Объект.ФорматыОтчетов.НайтиСтроки(Новый Структура("Отчет", СтрокаОтчеты.Отчет));
Для Каждого СтрокаФормат Из Найденные Цикл
СтрокаОтчеты.Форматы = СтрокаОтчеты.Форматы + ?(СтрокаОтчеты.Форматы = "", "", ", ") + Строка(СтрокаФормат.Формат);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьРасписаниеРегламентногоЗадания()
УстановитьПривилегированныйРежим(Истина);
ИдентификаторЗадания = ?(СозданКопированием, ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РассылкаОснование,
"РегламентноеЗадание"), Объект.РегламентноеЗадание);
Если ТипЗнч(ИдентификаторЗадания) = Тип("УникальныйИдентификатор") Тогда
Задание = РегламентныеЗаданияСервер.Задание(ИдентификаторЗадания);
Если Задание <> Неопределено Тогда
Расписание = Задание.Расписание;
Если Объект.ПериодичностьРасписания <> Перечисления.ПериодичностиРасписанийРассылокОтчетов.Произвольное
И Не ЗначениеЗаполнено(Расписание.ПериодПовтораВТечениеДня) Тогда
Расписание.ВремяКонца = '00010101';
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПрочитатьНастройкиОтчетовОбъектаКопирования()
КоличествоСтрок = Объект.Отчеты.Количество();
ОтчетыРассылкиОснования = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(РассылкаОснование, "Отчеты").Выгрузить();
Для ОбратныйИндекс = 1 По КоличествоСтрок Цикл
Индекс = КоличествоСтрок - ОбратныйИндекс;
СтрокаОтчеты = Объект.Отчеты.Получить(Индекс);
СтрокаОтчетыОбъектаКопирования = ОтчетыРассылкиОснования.Получить(Индекс);
ПользовательскиеНастройкиКД = СтрокаОтчетыОбъектаКопирования.Настройки.Получить();
СтрокаОтчеты.ВнесеныИзменения = Истина;
ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор();
СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД);
Если Индекс = 0 Тогда
ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов);
КонецЕсли;
Если СтрокаПредупреждения <> "" Тогда
ОбщегоНазначения.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ Индекс +"].Представление");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПодключитьКэшНастроекЭлектроннойПочты()
ТаблицаТиповПолучателей.Загрузить(РассылкаОтчетовПовтИсп.ТаблицаТиповПолучателей());
Для Каждого СтрокаПолучатель Из ТаблицаТиповПолучателей Цикл
Элементы.ТипПолучателейРассылки.СписокВыбора.Добавить(СтрокаПолучатель.ТипПолучателей, СтрокаПолучатель.Представление);
Если СтрокаПолучатель.ИдентификаторОбъектаМетаданных = Объект.ТипПолучателейРассылки Тогда
ТипПолучателейРассылки = СтрокаПолучатель.ТипПолучателей;
Если Объект.ВидПочтовогоАдресаПолучателей.Пустая() И ЗначениеЗаполнено(СтрокаПолучатель.ОсновнойВидКИ) Тогда
Объект.ВидПочтовогоАдресаПолучателей = СтрокаПолучатель.ОсновнойВидКИ;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПустыеШаблоныСтандартными(ТекущийОбъект)
Если ПустаяСтрока(ТекущийОбъект.ТемаПисьма) Тогда
ТекущийОбъект.ТемаПисьма = Кэш.Шаблоны.Тема;
КонецЕсли;
Если ПустаяСтрока(ТекущийОбъект.ТекстПисьма) Тогда
ТекущийОбъект.ТекстПисьма = Кэш.Шаблоны.Текст;
КонецЕсли;
Если ПустаяСтрока(ТекущийОбъект.ИмяАрхива) Тогда
ТекущийОбъект.ИмяАрхива = Кэш.Шаблоны.ИмяАрхива;
КонецЕсли;
Если ПустаяСтрока(ТекстПисьмаФорматированныйДокумент.ПолучитьТекст()) Тогда
ТекстПисьмаФорматированныйДокумент.Добавить(Кэш.Шаблоны.Текст, ТипЭлементаФорматированногоДокумента.Текст);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторСтроки)
СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки);
Если СтрокаОтчеты = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не СтрокаОтчеты.Инициализирован Тогда
СохраняемоеЗначение = Неопределено;
ИначеЕсли СтрокаОтчеты.СКД Тогда
СохраняемоеЗначение = КомпоновщикНастроекКД.ПользовательскиеНастройки;
Иначе
ИменаКолонок = "Реквизит, Представление, Значение, Использование";
Отбор = Новый Структура("Обнаружен", Истина);
СохраняемоеЗначение = НастройкиТекущегоОтчета.Выгрузить().Скопировать(Отбор, ИменаКолонок);
КонецЕсли;
Адрес = ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), СтрокаОтчеты.АдресНастроек, УникальныйИдентификатор);
СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище(СохраняемоеЗначение, Адрес);
КонецПроцедуры
&НаСервере
Функция ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки, Интерактивно = Истина)
ПараметрыЖурнала = Новый Структура;
ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'", ОбщегоНазначения.КодОсновногоЯзыка()));
ПараметрыЖурнала.Вставить("Данные", ?(ЗначениеЗаполнено(Объект.Ссылка), Объект.Ссылка, СтрокаОтчеты.Отчет));
ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов);
ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив);
ПараметрыОтчета = Новый Структура("Отчет, Настройки", СтрокаОтчеты.Отчет, ПользовательскиеНастройки);
РассылкаОтчетов.ИнициализироватьОтчет(
ПараметрыЖурнала,
ПараметрыОтчета,
Объект.Персонализирована,
УникальныйИдентификатор);
ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок);
ПараметрыОтчета.Ошибки = РассылкаОтчетов.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу);
Если ПараметрыОтчета.Инициализирован Тогда
СтрокаОтчеты.СКД = ПараметрыОтчета.СКД;
СтрокаОтчеты.Инициализирован = ПараметрыОтчета.Инициализирован;
СтрокаОтчеты.ПолноеИмя = ПараметрыОтчета.ПолноеИмя;
СтрокаОтчеты.КлючВарианта = ПараметрыОтчета.КлючВарианта;
Если ЗначениеЗаполнено(ПараметрыОтчета.СсылкаВарианта) Тогда
СтрокаОтчеты.Отчет = ПараметрыОтчета.СсылкаВарианта;
СтрокаОтчеты.Представление = Строка(СтрокаОтчеты.Отчет);
КонецЕсли;
КонецЕсли;
Если Не Интерактивно Тогда
Возврат ПараметрыОтчета;
КонецЕсли;
Если Не СтрокаОтчеты.Инициализирован Тогда
Объект.Отчеты.Удалить(СтрокаОтчеты);
Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница;
Возврат ПараметрыОтчета;
КонецЕсли;
Если СтрокаОтчеты.СКД Тогда
КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД;
Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик;
Иначе
Если ТипЗнч(ПользовательскиеНастройки) = Тип("ТаблицаЗначений") Тогда
НастройкиТекущегоОтчета.Загрузить(ПользовательскиеНастройки);
Иначе
НастройкиТекущегоОтчета.Очистить();
КонецЕсли;
Для Каждого КлючИЗначение Из ПараметрыОтчета.ДоступныеРеквизиты Цикл
Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Реквизит", КлючИЗначение.Ключ));
Если Найденные.Количество() = 0 Тогда
СтрокаНастройка = НастройкиТекущегоОтчета.Добавить();
СтрокаНастройка.Реквизит = КлючИЗначение.Ключ;
Иначе
СтрокаНастройка = Найденные[0];
КонецЕсли;
СтрокаНастройка.Представление = КлючИЗначение.Значение.Представление;
СтрокаНастройка.Тип = КлючИЗначение.Значение.Тип;
СтрокаНастройка.Обнаружен = Истина;
СтрокаНастройка.ИндексКартинки = 3;
КонецЦикла;
Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Обнаружен", Ложь));
Для Каждого СтрокаНастройка Из Найденные Цикл
СтрокаНастройка.Использование = Ложь;
СтрокаНастройка.ИндексКартинки = 4;
КонецЦикла;
Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета;
КонецЕсли;
Возврат ПараметрыОтчета;
КонецФункции
&НаСервере
Процедура ДобавитьНастройкиОтчетов(ПрисоединяемыеОтчеты)
Для Каждого СтрокаОтчетыПараметры Из ПрисоединяемыеОтчеты Цикл
Если ТипЗнч(СтрокаОтчетыПараметры.ВариантСсылка) = Тип("СправочникСсылка.ВариантыОтчетов")
И СтрокаОтчетыПараметры.ВариантСсылка <> Справочники.ВариантыОтчетов.ПустаяСсылка() Тогда
ВариантСсылка = СтрокаОтчетыПараметры.ВариантСсылка;
Иначе
ОтчетИнформация = ВариантыОтчетов.ИнформацияОбОтчете(СтрокаОтчетыПараметры.ОтчетПолноеИмя);
Если Не ПустаяСтрока(ОтчетИнформация.ТекстОшибки) Тогда
Если Не ПустаяСтрока(ТекстВсплывающегоОповещенияПриОткрытии) Тогда
ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС;
КонецЕсли;
ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + ОтчетИнформация.ТекстОшибки;
КонецЕсли;
ВариантСсылка = ВариантыОтчетов.ВариантОтчета(ОтчетИнформация.Отчет, СтрокаОтчетыПараметры.КлючВарианта);
КонецЕсли;
Если ВариантСсылка.ПометкаУдаления Тогда
Продолжить;
КонецЕсли;
Найденные = Объект.Отчеты.НайтиСтроки(Новый Структура("Отчет", ВариантСсылка));
Если Найденные.Количество() > 0 Тогда
СтрокаОтчеты = Найденные[0];
Иначе
СтрокаОтчеты = Объект.Отчеты.Добавить();
СтрокаОтчеты.Отчет = ВариантСсылка;
СтрокаОтчеты.ОтправлятьЕслиПустой = Ложь;
СтрокаОтчеты.НеОтправлятьПустой = Истина;
СтрокаОтчеты.Доступность = Истина;
КонецЕсли;
СтрокаОтчеты.ВнесеныИзменения = Истина;
Если Не ЭтоНовый Тогда
Если Найденные.Количество() > 0 Тогда
ШаблонСтрокиСообщения = НСтр("ru = 'Для отчета ""%1"" загружены новые пользовательские настройки.'");
Иначе
ШаблонСтрокиСообщения = НСтр("ru = 'Добавлен отчет ""%1"".'");
КонецЕсли;
ШаблонСтрокиСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтрокиСообщения, Строка(ВариантСсылка));
Если Не ПустаяСтрока(ТекстВсплывающегоОповещенияПриОткрытии) Тогда
ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + Символы.ПС;
КонецЕсли;
ТекстВсплывающегоОповещенияПриОткрытии = ТекстВсплывающегоОповещенияПриОткрытии + ШаблонСтрокиСообщения;
ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты);
КонецЕсли;
ПользовательскиеНастройкиКД = СтрокаОтчетыПараметры.Настройки;
ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор();
Элементы.Отчеты.ТекущаяСтрока = ИдентификаторСтроки;
СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД);
Если СтрокаПредупреждения <> "" Тогда
ОбщегоНазначения.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление");
Иначе
ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторСтроки);
КонецЕсли;
КонецЦикла;
ИдентификаторТекущейСтрокиТаблицыОтчетов = -1;
КонецПроцедуры
&НаСервере
Процедура СоздатьРеквизитЭлементСертификатДляШифрования()
Если НЕ РассылкаОтчетов.ДоступноШифрованиеВложений() Тогда
ДоступноШифрованиеВложений = Ложь;
Возврат;
КонецЕсли;
ДоступноШифрованиеВложений = Истина;
Если Элементы.Найти("ГруппаСертификатДляШифрования") <> Неопределено Тогда
Возврат;
КонецЕсли;
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("СертификатДляШифрования",
Новый ОписаниеТипов("СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования"),,
НСтр("ru = 'Сертификат для шифрования'")));
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Группа = Элементы.Добавить("ГруппаСертификатДляШифрования", Тип("ГруппаФормы"), Элементы.НастройкиФайловОтчетов);
Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Группа.Заголовок = НСтр("ru = 'Сертификат для шифрования'");
Группа.ОтображатьЗаголовок = Ложь;
Группа.РазрешитьИзменениеСостава = Ложь;
Группа.Отображение = ОтображениеОбычнойГруппы.Нет;
Группа.Объединенная = Истина;
Группа.Поведение = ПоведениеОбычнойГруппы.Обычное;
Группа.СквозноеВыравнивание = СквозноеВыравнивание.НеИспользовать;
Элемент = Элементы.Добавить("СертификатДляШифрования", Тип("ПолеФормы"), Группа);
Элемент.Заголовок = НСтр("ru = 'Сертификат для шифрования'");
Элемент.ПутьКДанным = "СертификатДляШифрования";
Элемент.Ширина = 70;
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_СертификатДляШифрованияПриИзменении");
Элемент.ОтображениеПодсказки = ОтображениеПодсказки.Кнопка;
Элемент.РасширеннаяПодсказка.Заголовок = НСтр("ru = 'При рассылке отчетов по электронной почте необходимо учитывать,
|что некоторые почтовые сервера могут не принимать зашифрованные файлы.'");
КонецПроцедуры
&НаСервере
Процедура ОтобразитьВажность()
Если Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.ВысокаяВажностьИнтернетПочтовогоСообщения() Тогда
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьВысокая;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Высокая важность'");
ИначеЕсли Объект.ВажностьПисьма = РаботаСПочтовымиСообщениямиСлужебныйКлиентСервер.НизкаяВажностьИнтернетПочтовогоСообщения() Тогда
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьНизкая;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Низкая важность'");
Иначе
Элементы.ГруппаВажность.Картинка = БиблиотекаКартинок.ВажностьНеЗадана;
Элементы.ГруппаВажность.Подсказка = НСтр("ru = 'Обычная важность'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьКомандыДобавленияДополнительныхПараметровТекста()
РассылкаОтчетов.ДобавитьКомандыДобавленияДополнительныхПараметровТекста(ЭтотОбъект);
ОбновитьСписокПараметровТекстаПисьмаИФайлов();
КонецПроцедуры
&НаСервере
Процедура ОбновитьСписокПараметровТекстаПисьмаИФайлов()
ПараметрыТекстаПисьмаИФайлов = РассылкаОтчетовПовтИсп.ПараметрыТекстаПисьмаИФайлов();
ТипПолучателейРассылки = ?(ВидРассылки = "Личная", Неопределено, ТипПолучателейРассылки);
РассылкаОтчетовПереопределяемый.ПриОпределенииПараметровТекстаПисьма(ВидРассылки, ТипПолучателейРассылки, ПараметрыТекстаПисьмаИФайлов);
КонецПроцедуры
&НаСервере
Процедура ПроверитьНаличиеПериодовВОтчетах(МассивНовыхСтрок = Неопределено)
Если МассивНовыхСтрок <> Неопределено Тогда
Для Каждого ИдентификаторСтроки Из МассивНовыхСтрок Цикл
Если НаличиеПериодаВНастройках(ИдентификаторСтроки) Тогда
СтрокаОтчет = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки);
СтрокаОтчет.ЕстьПериод = Истина;
КонецЕсли;
КонецЦикла;
Возврат;
КонецЕсли;
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
ИдентификаторСтроки = СтрокаОтчет.ПолучитьИдентификатор();
Если НаличиеПериодаВНастройках(ИдентификаторСтроки) Тогда
СтрокаОтчет.ЕстьПериод = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидРассылки()
Если РассылкаОтчетов.ПринадлежитГруппеЛичныхРассылок(Объект.Родитель)Тогда
ВидРассылки = "Личная";
Объект.Личная = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПреобразоватьПараметрыТекста(ТекущийОбъект, ВариантКонвертации)
Если ВариантКонвертации = "ПараметрыВПредставление" Тогда
ИмяПодстрокиПоиска = "Ключ";
ИмяПодстрокиЗамены = "Значение";
Иначе
ИмяПодстрокиПоиска = "Значение";
ИмяПодстрокиЗамены = "Ключ";
КонецЕсли;
ТекстHTML = "";
СтруктураВложенийПисьмаВФорматеHTML = "";
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(ТекстHTML, СтруктураВложенийПисьмаВФорматеHTML);
Для каждого ОписаниеПараметра Из ПараметрыТекстаПисьмаИФайлов Цикл
ПодстрокаПоиска = "[" + ОписаниеПараметра[ИмяПодстрокиПоиска];
ПодстрокаЗамены = "[" + ОписаниеПараметра[ИмяПодстрокиЗамены];
ТекущийОбъект.ТемаПисьма = СтрЗаменить(ТекущийОбъект.ТемаПисьма, ПодстрокаПоиска, ПодстрокаЗамены);
ТекущийОбъект.ТекстПисьма = СтрЗаменить(ТекущийОбъект.ТекстПисьма, ПодстрокаПоиска, ПодстрокаЗамены);
ТекущийОбъект.ТекстПисьмаВФорматеHTML = СтрЗаменить(ТекущийОбъект.ТекстПисьмаВФорматеHTML, ПодстрокаПоиска, ПодстрокаЗамены);
ТекстHTML = СтрЗаменить(ТекстHTML, ПодстрокаПоиска, ПодстрокаЗамены);
Элементы.ФорматыОтчетовШаблонНаименования.ПодсказкаВвода = СтрЗаменить(Элементы.ФорматыОтчетовШаблонНаименования.ПодсказкаВвода,
ПодстрокаПоиска, ПодстрокаЗамены);
Для Каждого СтрокаОтчет Из ТекущийОбъект.Отчеты Цикл
СтрокаОтчет.ШаблонНаименования = СтрЗаменить(СтрокаОтчет.ШаблонНаименования, ПодстрокаПоиска, ПодстрокаЗамены);
КонецЦикла;
ТекущийОбъект.ИмяАрхива = СтрЗаменить(ТекущийОбъект.ИмяАрхива, ПодстрокаПоиска, ПодстрокаЗамены);
КонецЦикла;
Если ТекущийОбъект.ПисьмоВФорматеHTML Тогда
ТекстПисьмаФорматированныйДокумент.УстановитьHTML(ТекстHTML, СтруктураВложенийПисьмаВФорматеHTML);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПреобразоватьПараметрыНастроекОтчетов(ТекущийОбъект, ВариантКонвертации)
Если Не Объект.Персонализирована Тогда
Возврат;
КонецЕсли;
Если ВариантКонвертации = "ПараметрыВПредставление" Тогда
ПодстрокаПоиска = "[Получатель]";
ПодстрокаЗамены = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
Иначе
ПодстрокаПоиска = ШаблонЗначенияПолучателяРассылки(ПараметрыТекстаПисьмаИФайлов);
ПодстрокаЗамены = "[Получатель]";
КонецЕсли;
ВнесеныИзменения = Ложь;
Для каждого СтрокаОтчеты Из Объект.Отчеты Цикл
Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда
ПользовательскиеНастройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек);
Иначе
ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты);
ОбъектСтрокаОтчеты = РеквизитФормыВЗначение("Объект").Отчеты.Получить(ИндексСтроки);
ПользовательскиеНастройки = ?(ОбъектСтрокаОтчеты = Неопределено, Неопределено, ОбъектСтрокаОтчеты.Настройки.Получить());
КонецЕсли;
Если ПользовательскиеНастройки = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ПользовательскиеНастройки) = Тип("ТаблицаЗначений") Тогда
Для каждого ПользовательскаяНастройка Из ПользовательскиеНастройки Цикл
Если СтрСравнить(ПользовательскаяНастройка.Значение, ПодстрокаПоиска) = 0 Тогда
ПользовательскаяНастройка.Значение = СтрЗаменить(ПользовательскаяНастройка.Значение, ПодстрокаПоиска, ПодстрокаЗамены);
ВнесеныИзменения = Истина;
КонецЕсли;
КонецЦикла;
Иначе
Для каждого ПользовательскаяНастройка Из ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЭлементОтбораКомпоновкиДанных")
И СтрСравнить(ПользовательскаяНастройка.ПравоеЗначение, ПодстрокаПоиска) = 0 Тогда
ПользовательскаяНастройка.ПравоеЗначение = СтрЗаменить(ПользовательскаяНастройка.ПравоеЗначение, ПодстрокаПоиска, ПодстрокаЗамены);
ВнесеныИзменения = Истина;
ИначеЕсли ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")
И СтрСравнить(ПользовательскаяНастройка.Значение, ПодстрокаПоиска) = 0 Тогда
ПользовательскаяНастройка.Значение = СтрЗаменить(ПользовательскаяНастройка.Значение, ПодстрокаПоиска, ПодстрокаЗамены);
ВнесеныИзменения = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ОбъектСтрокаОтчеты = ТекущийОбъект.Отчеты.Получить(СтрокаОтчеты.НомерСтроки-1);
Если ТипЗнч(ОбъектСтрокаОтчеты) = Тип("СправочникТабличнаяЧастьСтрока.РассылкиОтчетов.Отчеты") И ВнесеныИзменения Тогда
ОбъектСтрокаОтчеты.Настройки = Новый ХранилищеЗначения(ПользовательскиеНастройки, Новый СжатиеДанных(9));
ИначеЕсли ВнесеныИзменения Тогда
Адрес = ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), СтрокаОтчеты.АдресНастроек, УникальныйИдентификатор);
СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище(ПользовательскиеНастройки, Адрес);
КонецЕсли;
ВнесеныИзменения = Ложь;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПараметрыФормыПредпросмотраШаблона()
ПреобразоватьПараметрыТекста(Объект, "ПредставлениеВПараметры");
КартинкиДляHTML = Новый Структура;
Шаблон = Объект.ТекстПисьма;
Если Объект.ПисьмоВФорматеHTML Тогда
ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.HTML");
ТекстПисьмаФорматированныйДокумент.ПолучитьHTML(Шаблон, КартинкиДляHTML);
Шаблон = Объект.ТемаПисьма + "<br>" + "<br>" + Шаблон;
Иначе
ТипТекста = ПредопределенноеЗначение("Перечисление.ТипыТекстовЭлектронныхПисем.ПростойТекст");
Шаблон = Объект.ТемаПисьма + Символы.ПС + Символы.ПС + Шаблон;
КонецЕсли;
СформированныеОтчеты = "";
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
ПредставлениеОтчета = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1. %2",
СтрокаОтчет.НомерСтроки, СтрокаОтчет.Представление);
СформированныеОтчеты = СформированныеОтчеты + Символы.ПС + ПредставлениеОтчета;
КонецЦикла;
СформированныеОтчеты = СокрЛП(СформированныеОтчеты);
Если Объект.Архивировать Тогда
СформированныеОтчеты = СформированныеОтчеты + Символы.ПС + Символы.ПС + НСтр(
"ru = 'Файлы отчетов запакованы в архив'") + " ";
СтруктураИмениАрхива = Новый Структура("НаименованиеРассылки, ДатаВыполнения", Объект.Наименование,
ТекущаяДатаСеанса());
ИмяАрхива = РассылкаОтчетов.ЗаполнитьШаблон(Объект.ИмяАрхива, СтруктураИмениАрхива);
ИмяАрхива = ИмяАрхива + ".zip";
СформированныеОтчеты = СокрЛП(
СформированныеОтчеты + """" + ИмяАрхива + """");
КонецЕсли;
ПараметрыДоставки = РассылкаОтчетовКлиентСервер.ПараметрыДоставки();
ЗаполнитьЗначенияСвойств(ПараметрыДоставки, Объект);
ПараметрыДоставки.ВыполненаВПапку = Объект.ИспользоватьПапку;
ПараметрыДоставки.ВыполненаВСетевойКаталог = Объект.ИспользоватьСетевойКаталог;
ПараметрыДоставки.ВыполненаНаFTP = Объект.ИспользоватьFTPРесурс;
СпособДоставки = РассылкаОтчетов.ПредставлениеСпособовДоставки(ПараметрыДоставки);
ПараметрыШаблона = Новый Структура;
ПараметрыШаблона.Вставить("НаименованиеРассылки", Объект.Наименование);
ПараметрыШаблона.Вставить("Автор", Объект.Автор);
ПараметрыШаблона.Вставить("ЗаголовокСистемы", Кэш.ЗаголовокСистемы);
ПараметрыШаблона.Вставить("ДатаВыполнения", ТекущаяДатаСеанса());
ПараметрыШаблона.Вставить("СформированныеОтчеты", СформированныеОтчеты);
ПараметрыШаблона.Вставить("СпособДоставки", СпособДоставки);
Если ВидРассылки = "Персонализирована" Тогда
ПервыйПолучатель = ПолучитьПервогоПолучателя();
ПараметрыШаблона.Вставить("Получатель", ПервыйПолучатель.Наименование);
ПервыйПолучательСсылка = ПервыйПолучатель.Ссылка;
Иначе
ПервыйПолучательСсылка = Неопределено;
КонецЕсли;
ДобавитьДополнительныеПараметрыШаблона(ПараметрыШаблона, ПервыйПолучательСсылка);
Если Объект.ВставлятьОтчетыВТекстПисьма Тогда
ОтчетыВТекстеПисьма = "";
Для Каждого СтрокаОтчет Из Объект.Отчеты Цикл
ОтчетыВТекстеПисьма = ОтчетыВТекстеПисьма + Символы.ПС
+ "------------------------------------------" + Символы.ПС
+ СтрокаОтчет.Представление;
КонецЦикла;
Если Объект.ПисьмоВФорматеHTML Тогда
ОтчетыВТекстеПисьма = СтрЗаменить(ОтчетыВТекстеПисьма, Символы.ПС, Символы.ПС + "<br>");
КонецЕсли;
Шаблон = Шаблон + Символы.ПС + Символы.ПС + ОтчетыВТекстеПисьма;
КонецЕсли;
Если Объект.ПрикреплятьОтчетыВоВложения Тогда
ПлановыйСписокОтчетов = ПлановыйСписокОтчетовВоВложениях();
Если ПлановыйСписокОтчетов.Количество() > 0 Тогда
СписокОтчетов = СтрСоединить(ПлановыйСписокОтчетов, Символы.ПС);
ТекстВложения = Символы.ПС + Символы.ПС + НСтр("ru = 'Вложения письма:'");
Если Объект.Архивировать Тогда
СтруктураИмениАрхива = Новый Структура("НаименованиеРассылки, ДатаВыполнения", Объект.Наименование, ТекущаяДатаСеанса());
ИмяАрхива = РассылкаОтчетов.ЗаполнитьШаблон(Объект.ИмяАрхива, СтруктураИмениАрхива);
ИмяАрхива = ИмяАрхива + ".zip";
ТекстВложения = ТекстВложения + Символы.ПС + Символы.ПС + ИмяАрхива;
Иначе
ТекстВложения = ТекстВложения + Символы.ПС;
КонецЕсли;
НомерФайла = 1;
Для Каждого ПолноеИмяФайла Из ПлановыйСписокОтчетов Цикл
ИмяФайлаСПорядком = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1. %2",
НомерФайла, ПолноеИмяФайла);
Если Объект.ПисьмоВФорматеHTML Тогда
ТекстВложения = ТекстВложения + "<p style=""margin-left: 50px;"">" + ИмяФайлаСПорядком + "</p>";
Иначе
ТекстВложения = ТекстВложения + Символы.ПС + Символы.Таб + ИмяФайлаСПорядком;
КонецЕсли;
НомерФайла = НомерФайла + 1;
КонецЦикла;
Если Объект.ПисьмоВФорматеHTML Тогда
ТекстВложения = СтрЗаменить(ТекстВложения, Символы.ПС, Символы.ПС + "<br>");
КонецЕсли;
Шаблон = Шаблон + Символы.ПС + ТекстВложения;
КонецЕсли;
КонецЕсли;
Текст = РассылкаОтчетов.ЗаполнитьШаблон(Шаблон, ПараметрыШаблона);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("НаименованиеРассылки", Объект.Наименование);
ПараметрыФормы.Вставить("ТипТекста", ТипТекста);
ПараметрыФормы.Вставить("Текст", Текст);
Если КартинкиДляHTML.Количество() > 0 Тогда
ПараметрыФормы.Вставить("АдресКартинокДляHTML", ПоместитьКартинкиВоВременноеХранилище(КартинкиДляHTML));
КонецЕсли;
ПреобразоватьПараметрыТекста(Объект, "ПараметрыВПредставление");
Возврат ПараметрыФормы;
КонецФункции
#КонецОбласти
#Область ЗаписьОбъекта
&НаКлиенте
Процедура ЗаписатьНаКлиенте(Результат, ПараметрыЗаписи) Экспорт
Если Не ПараметрыЗаписи.Свойство("Шаг") Тогда
ОчиститьСообщения();
ПараметрыЗаписи.Вставить("Шаг", 1);
КонецЕсли;
Если ПараметрыЗаписи.Шаг = 1 И ТребуютсяРазрешенияНаРесурсыСервера() Тогда
ПараметрыЗаписи.Шаг = 2;
Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиенте", ЭтотОбъект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
Разрешения = РазрешенияНаРесурсыСервера();
МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
МодульРаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Разрешения, ЭтотОбъект, Обработчик);
Иначе
ВыполнитьОбработкуОповещения(Обработчик, КодВозвратаДиалога.ОК);
КонецЕсли;
ИначеЕсли ПараметрыЗаписи.Шаг = 1 Тогда
ПараметрыЗаписи.Шаг = 3;
ИначеЕсли ПараметрыЗаписи.Шаг = 2 Тогда
Если Результат = КодВозвратаДиалога.ОК Тогда
ПараметрыЗаписи.Шаг = 3;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Если ПараметрыЗаписи.Шаг = 3 И ЖелательноОтключитьАрхивацию() Тогда
ПараметрыЗаписи.Шаг = 4;
ЗаголовокВопроса = НСтр("ru = 'Отключить архивацию'");
ТекстВопроса = НСтр("ru = 'При публикации отчетов в папку рекомендуется отключать архивацию в ZIP.'");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Отключить архивацию в ZIP'"));
Кнопки.Добавить(КодВозвратаДиалога.Пропустить, НСтр("ru = 'Продолжить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
Обработчик = Новый ОписаниеОповещения("ЗаписатьНаКлиенте", ЭтотОбъект, ПараметрыЗаписи);
ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Да, ЗаголовокВопроса);
ИначеЕсли ПараметрыЗаписи.Шаг = 3 Тогда
ПараметрыЗаписи.Шаг = 5;
ИначеЕсли ПараметрыЗаписи.Шаг = 4 Тогда
Если Результат = КодВозвратаДиалога.Да Тогда
Объект.Архивировать = Ложь;
ПараметрыЗаписи.Шаг = 5;
ИначеЕсли Результат = КодВозвратаДиалога.Пропустить Тогда
ПараметрыЗаписи.Шаг = 5;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
Если ПараметрыЗаписи.Шаг = 5 Тогда
ПараметрыЗаписи.Шаг = 6;
Успешно = Записать(ПараметрыЗаписи);
Если Не Успешно Тогда
Возврат;
КонецЕсли;
ИмяКоманды = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаписи, "ИмяКоманды");
Если ИмяКоманды = "КомандаВыполнитьСейчас" Тогда
ВыполнитьСейчас();
ИначеЕсли ИмяКоманды = "КомандаЗаписатьИЗакрыть" Тогда
Закрыть();
ИначеЕсли ИмяКоманды = "КомандаСобытияРассылки" Тогда
СобытияРассылки();
ИначеЕсли ИмяКоманды = "КомандаПроверитьРассылку" Тогда
ПроверитьРассылку(ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ПараметрыЗаписи, "ПараметрыДоставки"));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ТребуютсяРазрешенияНаРесурсыСервера()
Если Объект.ИспользоватьСетевойКаталог
И (ЗначениеЗаполнено(Объект.СетевойКаталогWindows) Или ЗначениеЗаполнено(Объект.СетевойКаталогLinux)) Тогда
Если ИзменилисьЗначенияРеквизитов("ИспользоватьСетевойКаталог, СетевойКаталогWindows, СетевойКаталогLinux") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Если Объект.ИспользоватьFTPРесурс И ЗначениеЗаполнено(Объект.FTPСервер) Тогда
Если ИзменилисьЗначенияРеквизитов("ИспользоватьFTPРесурс, FTPСервер, FTPКаталог") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаКлиенте
Функция ЖелательноОтключитьАрхивацию()
Если Объект.ИспользоватьПапку
И Объект.Архивировать
И (Объект.ТолькоУведомить Или Не Объект.ИспользоватьЭлектроннуюПочту) Тогда
Если ИзменилисьЗначенияРеквизитов("ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать") Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Функция РазрешенияНаРесурсыСервера()
РазрешенияНабор = РассылкаОтчетов.РазрешенияНаРесурсыСервера(Объект);
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
РазрешенияСсылка = МодульРаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(РазрешенияНабор, Объект.Ссылка);
РазрешенияМассивСсылок = Новый Массив;
РазрешенияМассивСсылок.Добавить(РазрешенияСсылка);
Возврат РазрешенияМассивСсылок;
КонецФункции
&НаКлиенте
Функция ИзменилисьЗначенияРеквизитов(ИменаРеквизитов)
ИменаРеквизитов = СтрРазделить(ИменаРеквизитов, ",", Ложь);
Для Каждого ИмяРеквизита Из ИменаРеквизитов Цикл
ИмяРеквизита = СокрЛП(ИмяРеквизита);
Если Объект[ИмяРеквизита] <> ЗначенияРеквизитовДоИзменения[ИмяРеквизита] Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
КонецФункции
&НаСервере
Процедура ЗафиксироватьЗначенияРеквизитовДоИзменения()
ИменаРеквизитов = "ИспользоватьПапку, ИспользоватьЭлектроннуюПочту, ТолькоУведомить, Архивировать";
ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьСетевойКаталог, СетевойКаталогWindows, СетевойКаталогLinux";
ИменаРеквизитов = ИменаРеквизитов + ", ИспользоватьFTPРесурс, FTPСервер, FTPКаталог";
ЗначенияРеквизитовДоИзменения = Новый Структура(ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(ЗначенияРеквизитовДоИзменения, Объект);
ЗначенияРеквизитовДоИзменения = Новый ФиксированнаяСтруктура(ЗначенияРеквизитовДоИзменения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКоманды = ОбщегоНазначения.ОбщийМодуль("ПодключаемыеКоманды");
МодульПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиентСервер");
МодульПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КопияКомандыВыполнитьСейчасДляПоддержкиАсинхронности
&НаКлиенте
Процедура ВыполнитьСейчас()
МассивРассылок = Новый Массив;
МассивРассылок.Добавить(Объект.Ссылка);
ПараметрыЗапуска = Новый Структура("МассивРассылок, Форма, ЭтоФормаЭлемента");
ПараметрыЗапуска.МассивРассылок = МассивРассылок;
ПараметрыЗапуска.Форма = ЭтотОбъект;
ПараметрыЗапуска.ЭтоФормаЭлемента = Истина;
РассылкаОтчетовКлиент.ВыполнитьСейчас(ПараметрыЗапуска);
КонецПроцедуры
#КонецОбласти
#Область КопияКомандыСобытияРассылкиДляПоддержкиАсинхронности
&НаКлиенте
Процедура СобытияРассылки()
ПараметрыФормыЖурналаРегистрации = ПараметрыЖурналаРегистрации(Объект.Ссылка);
Если ПараметрыФормыЖурналаРегистрации = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Рассылка еще не выполнялась.'"));
Возврат;
КонецЕсли;
ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", ПараметрыФормыЖурналаРегистрации, ЭтотОбъект);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПараметрыЖурналаРегистрации(Рассылка)
Возврат РассылкаОтчетов.ПараметрыЖурналаРегистрации(Рассылка);
КонецФункции
#КонецОбласти
#КонецОбласти