#Область ОписаниеПеременных
&НаКлиенте
Перем КлиентскийКэш;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда
ВызватьИсключение НСтр("ru = 'Создание нового элемента копированием запрещено.'");
КонецЕсли;
Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма
И Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Отказ = Истина;
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'Работа с печатными формами не поддерживается.'"));
Возврат;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "СтраницаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
КонецЕсли;
ЭтоНовый = Объект.Ссылка.Пустая();
ПравоДобавления = ДополнительныеОтчетыИОбработки.ПравоДобавления();
Если Не ПравоДобавления Тогда
Если ЭтоНовый Тогда
ВызватьИсключение(НСтр("ru = 'Недостаточно прав доступа для добавления дополнительных отчетов или обработок.'"),
КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
Элементы.ЗагрузитьИзФайла.Видимость = Ложь;
Элементы.ВыгрузитьВФайл.Видимость = Ложь;
КонецЕсли;
Элементы.Публикация.СписокВыбора.Очистить();
ДоступныеВидыПубликации = ДополнительныеОтчетыИОбработкиПовтИсп.ДоступныеВидыПубликации();
Для Каждого ВидПубликации Из ДоступныеВидыПубликации Цикл
Элементы.Публикация.СписокВыбора.Добавить(ВидПубликации);
КонецЦикла;
ОтображениеРасширеннойИнформации = ДополнительныеОтчетыИОбработки.ОтображатьРасширеннуюИнформацию(Объект.Ссылка);
Элементы.СтраницаДополнительнаяИнформация.Видимость = ОтображениеРасширеннойИнформации;
Если Не ДополнительныеОтчетыИОбработки.ВозможнаЗагрузкаОбработкиИзФайла(Объект.Ссылка) Тогда
Элементы.ЗагрузитьИзФайла.Видимость = Ложь;
КонецЕсли;
Если Не ДополнительныеОтчетыИОбработки.ВозможнаВыгрузкаОбработкиВФайл(Объект.Ссылка) Тогда
Элементы.ВыгрузитьВФайл.Видимость = Ложь;
КонецЕсли;
ВидДополнительнаяОбработка = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка;
ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет;
ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет;
ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии;
Если ЭтоНовый Тогда
Объект.ИспользоватьДляФормыОбъекта = Истина;
Объект.ИспользоватьДляФормыСписка = Истина;
ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Истина;
КонецЕсли;
Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Не Элементы.ЗагрузитьИзФайла.Видимость Тогда
ВызватьИсключение(НСтр("ru = 'Недостаточно прав для загрузки дополнительных отчетов и обработок.'"),
КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
ЗаполнитьКоманды();
АдресРазрешений = ПоместитьВоВременноеХранилище(
РеквизитФормыВЗначение("Объект").Разрешения.Выгрузить(),
УникальныйИдентификатор);
УстановитьВидимостьДоступность();
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КлиентскийКэш = Новый Структура;
Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда
ПодключитьОбработчикОжидания("ОбновитьИзФайла", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.РазмещениеВРазделах") Тогда
Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
Объект.Разделы.Очистить();
Для Каждого ЭлементСписка Из ВыбранноеЗначение Цикл
НоваяСтрока = Объект.Разделы.Добавить();
НоваяСтрока.Раздел = ЭлементСписка.Значение;
КонецЦикла;
Модифицированность = Истина;
УстановитьВидимостьДоступность();
ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.ДополнительныеОтчетыИОбработки.Форма.БыстрыйДоступКДополнительнымОтчетамИОбработкам") Тогда
Если ТипЗнч(ВыбранноеЗначение) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
ЭлементКоманда = Объект.Команды.НайтиПоИдентификатору(КлиентскийКэш.ИдентификаторСтрокиКоманды);
Если ЭлементКоманда = Неопределено Тогда
Возврат;
КонецЕсли;
Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор));
Для Каждого СтрокаТаблицы Из Найденные Цикл
БыстрыйДоступ.Удалить(СтрокаТаблицы);
КонецЦикла;
Для Каждого ЭлементСписка Из ВыбранноеЗначение Цикл
СтрокаТаблицы = БыстрыйДоступ.Добавить();
СтрокаТаблицы.ИдентификаторКоманды = ЭлементКоманда.Идентификатор;
СтрокаТаблицы.Пользователь = ЭлементСписка.Значение;
КонецЦикла;
ЭлементКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей(ВыбранноеЗначение.Количество());
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ВыборОбъектовМетаданных" Тогда
ЗагрузитьВыбранныеОбъектыМетаданных(Параметр);
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
Если МодульУправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецЕсли
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
Если ДополнительныеОтчетыИОбработки.ВозможнаВыгрузкаОбработкиВФайл(Объект.Ссылка) Тогда
АдресДанныхОбработки = ПоместитьВоВременноеХранилище(
ТекущийОбъект.ХранилищеОбработки.Получить(),
УникальныйИдентификатор);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДанныеРегистра.ИдентификаторКоманды,
| ДанныеРегистра.Пользователь
|ИЗ
| РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ДанныеРегистра
|ГДЕ
| ДанныеРегистра.ДополнительныйОтчетИлиОбработка = &Ссылка
| И ДанныеРегистра.Доступно = ИСТИНА
| И НЕ ДанныеРегистра.Пользователь.ПометкаУдаления
| И НЕ ДанныеРегистра.Пользователь.Недействителен";
БыстрыйДоступ.Загрузить(Запрос.Выполнить().Выгрузить());
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если РегистрацияОбработки И ДополнительныеОтчетыИОбработки.ВозможнаЗагрузкаОбработкиИзФайла(Объект.Ссылка) Тогда
ДвоичныеДанныеОбработки = ПолучитьИзВременногоХранилища(АдресДанныхОбработки);
ТекущийОбъект.ХранилищеОбработки = Новый ХранилищеЗначения(ДвоичныеДанныеОбработки, Новый СжатиеДанных(9));
КонецЕсли;
Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда
ТекущийОбъект.ДополнительныеСвойства.Вставить("АктуальныеКоманды", Объект.Команды.Выгрузить());
Иначе
БыстрыйДоступ.Очистить();
КонецЕсли;
ТекущийОбъект.ДополнительныеСвойства.Вставить("БыстрыйДоступ", БыстрыйДоступ.Выгрузить());
ТекущийОбъект.ДополнительныеСвойства.Вставить("НазначениеВариантаОтчета", НазначениеВариантаОтчета);
ТекущийОбъект.Разрешения.Загрузить(ПолучитьИзВременногоХранилища(АдресРазрешений));
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецЕсли;
Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ОшибкаПодключения") Тогда
ТекстСообщения = ТекущийОбъект.ДополнительныеСвойства.ОшибкаПодключения;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
КонецЕсли;
ЭтоНовый = Ложь;
Если РегистрацияОбработки Тогда
ОбновитьПовторноИспользуемыеЗначения();
РегистрацияОбработки = Ложь;
КонецЕсли;
ЗаполнитьКоманды();
УстановитьВидимостьДоступность();
Если Объект.Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена
И Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МодульУправлениеПечатью.ОтключитьКомандыПечати(ВыбранныеОбъектыНазначения().ВыгрузитьЗначения(), ОтключаемыеКоманды().ВыгрузитьЗначения());
КонецЕсли;
СтандартныеПодсистемыСервер.ОповеститьВсеСеансыОбУстареванииПовторноИспользуемыхЗначений(Истина);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ВариантыДополнительногоОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ВариантыДополнительногоОтчетаПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ОткрытьВариант();
КонецПроцедуры
&НаКлиенте
Процедура ВариантыДополнительногоОтчетаПередУдалением(Элемент, Отказ)
Отказ = Истина;
Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
Если Вариант = Неопределено Тогда
Возврат;
КонецЕсли;
Если НЕ Вариант.Пользовательский Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'"));
Возврат;
КонецЕсли;
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пометить ""%1"" на удаление?'"), Вариант.Наименование);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Вариант", Вариант);
Обработчик = Новый ОписаниеОповещения("ВариантыДополнительногоОтчетаПередУдалениемЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьДляФормыСпискаПриИзменении(Элемент)
Если НЕ Объект.ИспользоватьДляФормыОбъекта И НЕ Объект.ИспользоватьДляФормыСписка Тогда
Объект.ИспользоватьДляФормыОбъекта = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИспользоватьДляФормыОбъектаПриИзменении(Элемент)
Если НЕ Объект.ИспользоватьДляФормыОбъекта И НЕ Объект.ИспользоватьДляФормыСписка Тогда
Объект.ИспользоватьДляФормыСписка = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияВключениеПрофилейБезопасностиНадписьОбработкаНавигационнойСсылки(Элемент, Ссылка, СтандартнаяОбработка)
Если Ссылка = "int://sp-on" Тогда
МодульРаботаВБезопасномРежимеКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаВБезопасномРежимеКлиент");
МодульРаботаВБезопасномРежимеКлиент.ОткрытьДиалогНастройкиИспользованияПрофилейБезопасности();
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РазмещениеКомандНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидДополнительнаяОбработка Тогда
Разделы = Новый СписокЗначений;
Для Каждого СтрокаТаблицы Из Объект.Разделы Цикл
Разделы.Добавить(СтрокаТаблицы.Раздел);
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Разделы", Разделы);
ПараметрыФормы.Вставить("ВидОбработки", Объект.Вид);
ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.РазмещениеВРазделах", ПараметрыФормы, ЭтотОбъект);
Иначе
ПараметрыФормы = ПодготовитьПараметрыФормыВыборОбъектовМетаданных();
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыФормы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтраницыВариантыКомандыРазрешенияПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства")
И ТекущаяСтраница.Имя = "СтраницаДополнительныеРеквизиты"
И Не ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОбъектКоманды
&НаКлиенте
Процедура ОбъектКомандыБыстрыйДоступПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИзменитьБыстрыйДоступ();
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыБыстрыйДоступПредставлениеОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыРегламентноеЗаданиеИспользованиеПриИзменении(Элемент)
ИзменитьРегламентноеЗадание(Ложь, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыРегламентноеЗаданиеПредставлениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИзменитьРегламентноеЗадание(Истина, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыРегламентноеЗаданиеПредставлениеОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыНастроитьБыстрыйДоступ(Команда)
ИзменитьБыстрыйДоступ();
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыНастроитьРасписание(Команда)
ИзменитьРегламентноеЗадание(Истина, Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОбъектКомандыПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура КомандаЗаписатьИЗакрыть(Команда)
ЗаписатьНаКлиенте(Истина);
КонецПроцедуры
&НаКлиенте
Процедура КомандаЗаписать(Команда)
ЗаписатьНаКлиенте(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
ОбновитьИзФайла();
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьВФайл(Команда)
ПараметрыВыгрузки = Новый Структура;
ПараметрыВыгрузки.Вставить("ЭтоОтчет", Объект.Вид = ВидОтчет Или Объект.Вид = ВидДополнительныйОтчет);
ПараметрыВыгрузки.Вставить("ИмяФайла", Объект.ИмяФайла);
ПараметрыВыгрузки.Вставить("АдресДанныхОбработки", АдресДанныхОбработки);
ДополнительныеОтчетыИОбработкиКлиент.ВыгрузитьВФайл(ПараметрыВыгрузки);
КонецПроцедуры
&НаКлиенте
Процедура ВариантыДополнительногоОтчетаОткрыть(Команда)
Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
Если Вариант = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Выберите вариант отчета.'"));
Возврат;
КонецЕсли;
ДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Объект.Ссылка, Вариант.КлючВарианта);
КонецПроцедуры
&НаКлиенте
Процедура РазместитьВРазделах(Команда)
МассивВариантов = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.ВариантыДополнительногоОтчета.ВыделенныеСтроки Цикл
Вариант = ВариантыДополнительногоОтчета.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ЗначениеЗаполнено(Вариант.Ссылка) Тогда
МассивВариантов.Добавить(Вариант.Ссылка);
КонецЕсли;
КонецЦикла;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВариантыОтчетовКлиент");
МодульВариантыОтчетовКлиент.ОткрытьДиалогРазмещенияВариантовВРазделах(МассивВариантов);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВидимость(Команда)
Если Модифицированность Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("НастроитьВидимостьЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Для настройки видимости команд печати запишите обработку. Продолжить?'");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("Продолжить", НСтр("ru = 'Продолжить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки);
Иначе
ОткрытьФормуНастроекПодменюПечать();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
СтрокаТаблицыКоманд = Элементы.ОбъектКоманды.ТекущиеДанные;
Если СтрокаТаблицыКоманд = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы")
И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода")
И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода")
И Не СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда
Возврат;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ИдентификаторВыполняемойКоманды", СтрокаТаблицыКоманд.Идентификатор);
Обработчик = Новый ОписаниеОповещения("ВыполнитьКомандуПослеПодтвержденияЗаписи", ЭтотОбъект, Контекст);
Если Объект.Ссылка.Пустая() Или Модифицированность Тогда
ТекстВопроса = НСтр("ru = 'Для выполнения команды запишите данные.'");
Кнопки = Новый СписокЗначений;
Кнопки.Добавить("ЗаписатьИПродолжить", НСтр("ru = 'Записать и продолжить'"));
Кнопки.Добавить(КодВозвратаДиалога.Отмена);
ПоказатьВопрос(Обработчик, ТекстВопроса, Кнопки);
Иначе
ВыполнитьОбработкуОповещения(Обработчик, "ПродолжитьБезЗаписи");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбъектКомандыРегламентноеЗаданиеИспользование.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбъектКомандыРегламентноеЗаданиеПредставление.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Команды.РегламентноеЗаданиеРазрешено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОбъектКомандыРегламентноеЗаданиеПредставление.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Команды.РегламентноеЗаданиеИспользование");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецПроцедуры
#Область Клиент
&НаКлиенте
Процедура ЗаписатьНаКлиенте(ЗакрытьПослеЗаписи)
Обработчик = Новый ОписаниеОповещения("ПродолжитьЗаписьНаКлиенте", ЭтотОбъект, ЗакрытьПослеЗаписи);
ВыполнитьОбработкуОповещения(Обработчик, КодВозвратаДиалога.ОК);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗаписьНаКлиенте(Результат, ЗакрытьПослеЗаписи) Экспорт
ПараметрыЗаписи = Новый Структура;
ПараметрыЗаписи.Вставить("РегистрацияОбработки", РегистрацияОбработки);
ПараметрыЗаписи.Вставить("ЗакрытьПослеЗаписи", ЗакрытьПослеЗаписи);
Успех = Записать(ПараметрыЗаписи);
Если Не Успех Тогда
Возврат;
КонецЕсли;
Если ПараметрыЗаписи.РегистрацияОбработки Тогда
ОбновитьПовторноИспользуемыеЗначения();
ТекстОповещения = НСтр("ru = 'Для применения изменений в открытых окнах закройте их и откройте заново.'");
ПоказатьОповещениеПользователя(, , ТекстОповещения);
КонецЕсли;
ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьНаКлиентеЗавершение(ПараметрыЗаписи)
Если ПараметрыЗаписи.ЗакрытьПослеЗаписи И Открыта() Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайла()
Оповещение = Новый ОписаниеОповещения("ОбновитьИзФайлаПослеПодтверждения", ЭтотОбъект);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Оповещение,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередДобавлениемДополнительногоОтчетаИлиОбработки);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаПослеПодтверждения(Ответ, ПараметрыРегистрации) Экспорт
Если Ответ <> "Продолжить" Тогда
ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации);
Возврат;
КонецЕсли;
ПараметрыРегистрации = Новый Структура;
ПараметрыРегистрации.Вставить("Успех", Ложь);
ПараметрыРегистрации.Вставить("АдресДанныхОбработки", АдресДанныхОбработки);
Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаПослеВыбораФайла", ЭтотОбъект, ПараметрыРегистрации);
ПараметрыЗагрузки = ФайловаяСистемаКлиент.ПараметрыЗагрузкиФайла();
ПараметрыЗагрузки.Диалог.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения();
ПараметрыЗагрузки.ИдентификаторФормы = УникальныйИдентификатор;
Если Объект.Ссылка.Пустая() Тогда
ПараметрыЗагрузки.Диалог.ИндексФильтра = 0;
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета или обработки'");
ИначеЕсли Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет Тогда
ПараметрыЗагрузки.Диалог.ИндексФильтра = 1;
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешнего отчета'");
Иначе
ПараметрыЗагрузки.Диалог.ИндексФильтра = 2;
ПараметрыЗагрузки.Диалог.Заголовок = НСтр("ru = 'Выберите файл внешней обработки'");
КонецЕсли;
ФайловаяСистемаКлиент.ЗагрузитьФайл(Обработчик, ПараметрыЗагрузки, Объект.ИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаПослеВыбораФайла(ОписаниеФайла, ПараметрыРегистрации) Экспорт
Если ОписаниеФайла = Неопределено Тогда
ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации);
Возврат;
КонецЕсли;
Ключи = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьПубликацию, ОтключатьКонфликтующие, Конфликтующие");
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыРегистрации, Ключи, Ложь);
ПараметрыРегистрации.ОтключатьПубликацию = Ложь;
ПараметрыРегистрации.ОтключатьКонфликтующие = Ложь;
ПараметрыРегистрации.Конфликтующие = Новый СписокЗначений;
МассивПодстрок = СтрРазделить(ОписаниеФайла.Имя, ПолучитьРазделительПути(), Ложь);
ПараметрыРегистрации.ИмяФайла = МассивПодстрок.Получить(МассивПодстрок.ВГраница());
РасширениеФайла = ВРег(Прав(ПараметрыРегистрации.ИмяФайла, 3));
Если РасширениеФайла = "ERF" Тогда
ПараметрыРегистрации.ЭтоОтчет = Истина;
ИначеЕсли РасширениеФайла = "EPF" Тогда
ПараметрыРегистрации.ЭтоОтчет = Ложь;
Иначе
ПараметрыРегистрации.Успех = Ложь;
ОбработчикРезультата = Новый ОписаниеОповещения("ОбновитьИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации);
ТекстПредупреждения = НСтр("ru = 'Расширение файла не соответствует расширению внешнего отчета (ERF) или обработки (EPF).'");
ПараметрыВозврата = Новый Структура;
ПараметрыВозврата.Вставить("Обработчик", ОбработчикРезультата);
ПараметрыВозврата.Вставить("Результат", Неопределено);
ОбработчикПростогоДиалога = Новый ОписаниеОповещения("ВернутьРезультатПослеЗакрытияПростогоДиалога", ЭтотОбъект, ПараметрыВозврата);
ПоказатьПредупреждение(ОбработчикПростогоДиалога, ТекстПредупреждения);
Возврат;
КонецЕсли;
ПараметрыРегистрации.АдресДанныхОбработки = ОписаниеФайла.Хранение;
ОбновитьИзФайлаИСообщить(ПараметрыРегистрации);
КонецПроцедуры
&НаКлиенте
Процедура ВернутьРезультатПослеЗакрытияПростогоДиалога(ПараметрыОбработчика) Экспорт
Если ТипЗнч(ПараметрыОбработчика.Обработчик) = Тип("ОписаниеОповещения") Тогда
ВыполнитьОбработкуОповещения(ПараметрыОбработчика.Обработчик, ПараметрыОбработчика.Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаИСообщить(ПараметрыРегистрации)
ОбновитьИзФайлаНаСервере(ПараметрыРегистрации);
Если ПараметрыРегистрации.ОтключатьКонфликтующие Тогда
ОповеститьОбИзменении(Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки"));
КонецЕсли;
Если ПараметрыРегистрации.Успех Тогда
ОповещениеЗаголовок = ?(ПараметрыРегистрации.ЭтоОтчет, НСтр("ru = 'Файл внешнего отчета загружен'"), НСтр("ru = 'Файл внешней обработки загружен'"));
ОповещениеСсылка = ?(ЭтоНовый, "", ПолучитьНавигационнуюСсылку(Объект.Ссылка));
ОповещениеТекст = ПараметрыРегистрации.ИмяФайла;
ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст);
ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации);
ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда
ПоказатьКонфликты(ПараметрыРегистрации);
Иначе
ОбработчикРезультата = Новый ОписаниеОповещения("ОбновитьИзФайлаЗавершение", ЭтотОбъект, ПараметрыРегистрации);
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОбработчикРезультата, ПараметрыРегистрации.ТекстОшибки,
РежимДиалогаВопрос.ОК, ПараметрыВопроса);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьКонфликты(ПараметрыРегистрации)
Если ПараметрыРегистрации.КоличествоКонфликтующих > 1 Тогда
Если ПараметрыРегистрации.ЭтоОтчет Тогда
ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешнего отчета'");
ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]""
|уже занято существующими дополнительными отчетами ([Count]):
|[List].
|
|Выберите:
|1. ""[Continue]"" - загрузить новый отчет в режиме отладки.
|2. ""[Disable]"" - загрузить новый отчет, отключив публикацию всех конфликтующих отчетов.
|3. ""[Open]"" - отменить загрузку и показать список конфликтующих отчетов.'");
Иначе
ЗаголовокВопроса = НСтр("ru = 'Конфликты при загрузке внешней обработки'");
ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]""
|уже занято существующими дополнительными обработками ([Count]):
|[List].
|
|Выберите:
|1. ""[Continue]"" - загрузить новую обработку в режиме отладки.
|2. ""[Disable]"" - загрузить новую обработку, отключив публикацию всех конфликтующих обработок.
|3. ""[Open]"" - отменить загрузку и показать список конфликтующих обработок.'");
КонецЕсли;
ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить конфликтующие'");
ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и показать список'");
Иначе
Если ПараметрыРегистрации.ЭтоОтчет Тогда
ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешнего отчета'");
ТекстВопроса = НСтр("ru = 'Внутреннее имя отчета ""[Name]""
|уже занято существующим дополнительным отчетом [List].
|
|Выберите:
|1. ""[Continue]"" - загрузить новый отчет в режиме отладки.
|2. ""[Disable]"" - загрузить новый отчет, отключив публикацию конфликтующего отчета.
|3. ""[Open]"" - открыть карточку конфликтующего отчета.'");
ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другой отчет'");
Иначе
ЗаголовокВопроса = НСтр("ru = 'Конфликт при загрузке внешней обработки'");
ТекстВопроса = НСтр("ru = 'Внутреннее имя обработки ""[Name]""
|уже занято существующей дополнительной обработкой [List].
|
|Выберите:
|1. ""[Continue]"" - загрузить новую обработку в режиме отладки.
|2. ""[Disable]"" - загрузить новую обработку, отключив публикацию конфликтующей обработки.
|3. ""[Open]"" - открыть карточку конфликтующей обработки.'");
ПредставлениеКнопкиОтключить = НСтр("ru = 'Отключить другую обработку'");
КонецЕсли;
ПредставлениеКнопкиОткрыть = НСтр("ru = 'Отменить и открыть'");
КонецЕсли;
ПредставлениеКнопкиПродолжить = НСтр("ru = 'В режиме отладки'");
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Name]", ПараметрыРегистрации.ИмяОбъекта);
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Count]", ПараметрыРегистрации.КоличествоКонфликтующих);
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[List]", ПараметрыРегистрации.ПредставлениеЗанявших);
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Disable]", ПредставлениеКнопкиОтключить);
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Open]", ПредставлениеКнопкиОткрыть);
ТекстВопроса = СтрЗаменить(ТекстВопроса, "[Continue]", ПредставлениеКнопкиПродолжить);
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить("ПродолжитьБезПубликации", ПредставлениеКнопкиПродолжить);
КнопкиВопроса.Добавить("ОтключитьКонфликтующие", ПредставлениеКнопкиОтключить);
КнопкиВопроса.Добавить("ОтменитьИОткрыть", ПредставлениеКнопкиОткрыть);
КнопкиВопроса.Добавить(КодВозвратаДиалога.Отмена);
Обработчик = Новый ОписаниеОповещения("ОбновитьИзФайлаРазрешениеКонфликтов", ЭтотОбъект, ПараметрыРегистрации);
ПоказатьВопрос(Обработчик, ТекстВопроса, КнопкиВопроса, , "ПродолжитьБезПубликации", ЗаголовокВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаРазрешениеКонфликтов(Ответ, ПараметрыРегистрации) Экспорт
Если Ответ = "ПродолжитьБезПубликации" Тогда
ПараметрыРегистрации.ОтключатьПубликацию = Истина;
ОбновитьИзФайлаИСообщить(ПараметрыРегистрации);
ИначеЕсли Ответ = "ОтключитьКонфликтующие" Тогда
ПараметрыРегистрации.ОтключатьКонфликтующие = Истина;
ОбновитьИзФайлаИСообщить(ПараметрыРегистрации);
ИначеЕсли Ответ = "ОтменитьИОткрыть" Тогда
ПоказатьСписок = (ПараметрыРегистрации.КоличествоКонфликтующих > 1);
Если ПараметрыРегистрации.СтароеИмяОбъекта = ПараметрыРегистрации.ИмяОбъекта И Не ЭтоНовый Тогда
ПоказатьСписок = Истина;
КонецЕсли;
Если ПоказатьСписок Тогда
ФормаИмя = "Справочник.ДополнительныеОтчетыИОбработки.ФормаСписка";
ФормаЗаголовок = НСтр("ru = 'Дополнительные отчеты и обработки с внутреннем именем ""%1""'");
ФормаЗаголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ФормаЗаголовок, ПараметрыРегистрации.ИмяОбъекта);
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Отбор", Новый Структура);
ФормаПараметры.Отбор.Вставить("ИмяОбъекта", ПараметрыРегистрации.ИмяОбъекта);
ФормаПараметры.Отбор.Вставить("ЭтоГруппа", Ложь);
ФормаПараметры.Вставить("Заголовок", ФормаЗаголовок);
ФормаПараметры.Вставить("Отображение", "Список");
Иначе
ФормаИмя = "Справочник.ДополнительныеОтчетыИОбработки.ФормаОбъекта";
ФормаПараметры = Новый Структура;
ФормаПараметры.Вставить("Ключ", ПараметрыРегистрации.Конфликтующие[0].Значение);
КонецЕсли;
ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации);
ОткрытьФорму(ФормаИмя, ФормаПараметры, Неопределено, Истина);
Иначе
ОбновитьИзФайлаЗавершение(Неопределено, ПараметрыРегистрации);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИзФайлаЗавершение(ПустойРезультат, ПараметрыРегистрации) Экспорт
Если ПараметрыРегистрации = Неопределено Или ПараметрыРегистрации.Успех = Ложь Тогда
Если ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии И Открыта() Тогда
Закрыть();
КонецЕсли;
ИначеЕсли ПараметрыРегистрации.Успех = Истина Тогда
Если Не Открыта() Тогда
Открыть();
КонецЕсли;
Модифицированность = Истина;
РегистрацияОбработки = Истина;
АдресДанныхОбработки = ПараметрыРегистрации.АдресДанныхОбработки;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьВариант()
Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные;
Если Вариант = Неопределено Тогда
Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"), Вариант.Наименование);
ПоказатьПредупреждение(, ТекстОшибки);
Иначе
МодульВариантыОтчетовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ВариантыОтчетовКлиент");
МодульВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Вариант.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьРегламентноеЗадание(РежимВыбора = Ложь, ИзмененФлажок = Ложь)
ЭлементКоманда = Элементы.ОбъектКоманды.ТекущиеДанные;
Если ЭлементКоманда = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЭлементКоманда.ВариантЗапуска <> ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода")
И ЭлементКоманда.ВариантЗапуска <> ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда
ТекстОшибки = НСтр("ru = 'Команда с вариантом запуска ""%1""
|не может использоваться в регламентных заданиях.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Строка(ЭлементКоманда.ВариантЗапуска));
ПоказатьПредупреждение(, ТекстОшибки);
Если ИзмененФлажок Тогда
ЭлементКоманда.РегламентноеЗаданиеИспользование = НЕ ЭлементКоманда.РегламентноеЗаданиеИспользование;
КонецЕсли;
Возврат;
КонецЕсли;
Если ИзмененФлажок И Не ЭлементКоманда.РегламентноеЗаданиеИспользование Тогда
Возврат;
КонецЕсли;
Если ЭлементКоманда.РегламентноеЗаданиеРасписание.Количество() > 0 Тогда
РасписаниеКоманды = ЭлементКоманда.РегламентноеЗаданиеРасписание.Получить(0).Значение;
Иначе
РасписаниеКоманды = Неопределено;
КонецЕсли;
Если ТипЗнч(РасписаниеКоманды) <> Тип("РасписаниеРегламентногоЗадания") Тогда
РасписаниеКоманды = Новый РасписаниеРегламентногоЗадания;
КонецЕсли;
Контекст = Новый Структура;
Контекст.Вставить("ЭлементКоманда", ЭлементКоманда);
Контекст.Вставить("ОтключитьФлажокПриОтменеРедактирования", ИзмененФлажок);
Контекст.Вставить("РасписаниеКоманды", РасписаниеКоманды);
Обработчик = Новый ОписаниеОповещения("ПередВключениемЗапускаПоРасписанию", ЭтотОбъект, Контекст);
ПользователиСлужебныйКлиент.ПоказатьПредупреждениеБезопасности(Обработчик,
ПользователиСлужебныйКлиентСервер.ВидыПредупрежденийБезопасности().ПередВключениемРегламентногоЗаданияДополнительнойОбработки);
КонецПроцедуры
&НаКлиенте
Процедура ПередВключениемЗапускаПоРасписанию(Результат, Контекст) Экспорт
Если Результат <> "Продолжить" Тогда
ЭлементКоманда = Контекст.ЭлементКоманда;
ЭлементКоманда.РегламентноеЗаданиеИспользование = Ложь;
Возврат;
КонецЕсли;
Обработчик = Новый ОписаниеОповещения("ПослеОкончанияРедактированияРасписания", ЭтотОбъект, Контекст);
РедактированиеРасписания = Новый ДиалогРасписанияРегламентногоЗадания(Контекст.РасписаниеКоманды);
РедактированиеРасписания.Показать(Обработчик);
КонецПроцедуры
&НаКлиенте
Процедура ПослеОкончанияРедактированияРасписания(Расписание, Контекст) Экспорт
ЭлементКоманда = Контекст.ЭлементКоманда;
Если Расписание = Неопределено Тогда
Если Контекст.ОтключитьФлажокПриОтменеРедактирования Тогда
ЭлементКоманда.РегламентноеЗаданиеИспользование = Ложь;
КонецЕсли;
Иначе
Если РазделениеВключено
И Расписание.ПериодПовтораВТечениеДня <> 0
И Расписание.ПериодПовтораВТечениеДня < 60 Тогда
ТекстСообщения = НСтр("ru = 'Не допускается установка интервала повтора регламентного задания менее 60 секунд.'");
ПоказатьПредупреждение(, ТекстСообщения);
Возврат;
КонецЕсли;
ЭлементКоманда.РегламентноеЗаданиеРасписание.Очистить();
ЭлементКоманда.РегламентноеЗаданиеРасписание.Добавить(Расписание);
Если ДополнительныеОтчетыИОбработкиКлиентСервер.РасписаниеЗадано(Расписание) Тогда
Модифицированность = Истина;
ЭлементКоманда.РегламентноеЗаданиеИспользование = Истина;
ЭлементКоманда.РегламентноеЗаданиеПредставление = Строка(Расписание);
Иначе
ЭлементКоманда.РегламентноеЗаданиеПредставление = НСтр("ru = 'Не заполнено'");
Если ЭлементКоманда.РегламентноеЗаданиеИспользование Тогда
ЭлементКоманда.РегламентноеЗаданиеИспользование = Ложь;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Запуск по расписанию отключен'"),
,
НСтр("ru = 'Расписание не заполнено'"));
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьБыстрыйДоступ()
ЭлементКоманда = Элементы.ОбъектКоманды.ТекущиеДанные;
Если ЭлементКоманда = Неопределено Тогда
Возврат;
КонецЕсли;
Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор));
ПользователиСБыстрымДоступом = Новый СписокЗначений;
Для Каждого СтрокаТаблицы Из Найденные Цикл
ПользователиСБыстрымДоступом.Добавить(СтрокаТаблицы.Пользователь);
КонецЦикла;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ПользователиСБыстрымДоступом", ПользователиСБыстрымДоступом);
ПараметрыФормы.Вставить("ПредставлениеКоманды", ЭлементКоманда.Представление);
КлиентскийКэш.Вставить("ИдентификаторСтрокиКоманды", ЭлементКоманда.ПолучитьИдентификатор());
ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.Форма.БыстрыйДоступКДополнительнымОтчетамИОбработкам", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ВариантыДополнительногоОтчетаПередУдалениемЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
Вариант = ДополнительныеПараметры.Вариант;
УдалитьВариантДополнительногоОтчета("ВнешнийОтчет." + Объект.ИмяОбъекта, Вариант.КлючВарианта);
ВариантыДополнительногоОтчета.Удалить(Вариант);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКомандуПослеПодтвержденияЗаписи(Ответ, Контекст) Экспорт
Если Ответ = "ЗаписатьИПродолжить" Тогда
ОчиститьСообщения();
Если Не Записать() Тогда
Возврат;
КонецЕсли;
ИначеЕсли Ответ <> "ПродолжитьБезЗаписи" Тогда
Возврат;
КонецЕсли;
Если Объект.Ссылка.Пустая() Или Модифицированность Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыКоманд = Элементы.ОбъектКоманды.ТекущиеДанные;
Если СтрокаТаблицыКоманд = Неопределено
Или СтрокаТаблицыКоманд.Идентификатор <> Контекст.ИдентификаторВыполняемойКоманды Тогда
Найденные = Объект.Команды.НайтиСтроки(Новый Структура("Идентификатор", Контекст.ИдентификаторВыполняемойКоманды));
Если Найденные.Количество() = 0 Тогда
Возврат;
КонецЕсли;
СтрокаТаблицыКоманд = Найденные[0];
КонецЕсли;
ВыполняемаяКоманда = Новый Структура(
"Ссылка, Представление,
|Идентификатор, ВариантЗапуска, ПоказыватьОповещение,
|Модификатор, ОбъектыНазначения, ЭтоОтчет, Вид");
ЗаполнитьЗначенияСвойств(ВыполняемаяКоманда, СтрокаТаблицыКоманд);
ВыполняемаяКоманда.Ссылка = Объект.Ссылка;
ВыполняемаяКоманда.Вид = Объект.Вид;
ВыполняемаяКоманда.ЭтоОтчет = (Объект.Вид = ВидДополнительныйОтчет Или Объект.Вид = ВидОтчет);
Если СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы") Тогда
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, ЭтотОбъект, ВыполняемаяКоманда.ОбъектыНазначения);
ИначеЕсли СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода") Тогда
ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьКлиентскийМетодОбработки(ВыполняемаяКоманда, ЭтотОбъект, ВыполняемаяКоманда.ОбъектыНазначения);
ИначеЕсли СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода")
Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда
ЗаголовокСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выполняется команда ""%1""'"),
СтрокаТаблицыКоманд.Представление);
ПоказатьОповещениеПользователя(ЗаголовокСостояния + "...", , , БиблиотекаКартинок.ДлительнаяОперация48);
ДлительнаяОперация = НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ТекстСообщения = ЗаголовокСостояния;
ПараметрыОжидания.ОповещениеПользователя.Показать = Истина;
ПараметрыОжидания.ВыводитьОкноОжидания = Истина;
ОповещениеОЗавершении = Новый ОписаниеОповещения("ПослеЗавершенияВыполненияСервернойКомандыВФоне", ЭтотОбъект, ВыполняемаяКоманда);
ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗавершенияВыполненияСервернойКомандыВФоне(Задание, ДополнительныеПараметры) Экспорт
Если Задание = Неопределено Тогда
Возврат;
КонецЕсли;
Если Задание.Статус = "Ошибка" Тогда
СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(
Задание.ИнформацияОбОшибке);
Возврат;
КонецЕсли;
Результат = ПолучитьИзВременногоХранилища(Задание.АдресРезультата);
ОповеститьФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Результат, "ОповеститьФормы");
Если ОповеститьФормы <> Неопределено Тогда
СтандартныеПодсистемыКлиент.ОповеститьФормыОбИзменении(ОповеститьФормы);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область КлиентСервер
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеБыстрогоДоступаПользователей(КоличествоПользователей)
Если КоличествоПользователей = 0 Тогда
Возврат НСтр("ru = 'Нет'");
КонецЕсли;
БыстрыйДоступПредставление = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
НСтр("ru = ';%1 пользователь;;%1 пользователя;%1 пользователей;%1 пользователя'"), КоличествоПользователей);
Возврат БыстрыйДоступПредставление;
КонецФункции
#КонецОбласти
#Область ВызовСервераСервер
&НаСервереБезКонтекста
Функция НачатьВыполнениеСервернойКомандыВФоне(ВыполняемаяКоманда, УникальныйИдентификатор)
ИмяПроцедуры = "ДополнительныеОтчетыИОбработки.ВыполнитьКоманду";
ПараметрыПроцедуры = Новый Структура("ДополнительнаяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения");
ПараметрыПроцедуры.ДополнительнаяОбработкаСсылка = ВыполняемаяКоманда.Ссылка;
ПараметрыПроцедуры.ИдентификаторКоманды = ВыполняемаяКоманда.Идентификатор;
ПараметрыПроцедуры.ОбъектыНазначения = ВыполняемаяКоманда.ОбъектыНазначения;
НастройкиЗапуска = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
НастройкиЗапуска.НаименованиеФоновогоЗадания =
НСтр("ru = 'Дополнительные отчеты и обработки: Выполнение серверного метода обработки'");
НастройкиЗапуска.УточнениеОшибки =
НСтр("ru = 'Не удалось выполнить команду по причине:'");
Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, НастройкиЗапуска);
КонецФункции
&НаСервере
Процедура ОбновитьИзФайлаНаСервере(ПараметрыРегистрации)
ОбъектСправочника = РеквизитФормыВЗначение("Объект");
КомандыСохраненные = ОбъектСправочника.Команды.Выгрузить();
РезультатРегистрации = ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработку(ОбъектСправочника, ПараметрыРегистрации);
АдресРазрешений = ПоместитьВоВременноеХранилище(ОбъектСправочника.Разрешения.Выгрузить(), УникальныйИдентификатор);
ЗначениеВРеквизитФормы(ОбъектСправочника, "Объект");
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ПараметрыРегистрации, РезультатРегистрации, Истина);
Если ПараметрыРегистрации.Успех Тогда
ЗаполнитьКоманды(КомандыСохраненные);
НазначениеВариантаОтчета = ПараметрыРегистрации.НазначениеВариантаОтчета;
ИначеЕсли ПараметрыРегистрации.ИмяОбъектаЗанято Тогда
ПредставлениеЗанявших = "";
Для Каждого ЭлементСписка Из ПараметрыРегистрации.Конфликтующие Цикл
Если СтрДлина(ПредставлениеЗанявших) > 80 Тогда
ПредставлениеЗанявших = ПредставлениеЗанявших + "... ";
Прервать;
КонецЕсли;
ПредставлениеЗанявших = ПредставлениеЗанявших
+ ?(ПредставлениеЗанявших = "", "", ", ")
+ """" + СокрЛП(ЭлементСписка.Представление) + """";
КонецЦикла;
ПараметрыРегистрации.Вставить("ПредставлениеЗанявших", ПредставлениеЗанявших);
ПараметрыРегистрации.Вставить("КоличествоКонфликтующих", ПараметрыРегистрации.Конфликтующие.Количество());
КонецЕсли;
УстановитьВидимостьДоступность(ПараметрыРегистрации.Успех);
КонецПроцедуры
&НаСервере
Функция ПодготовитьПараметрыФормыВыборОбъектовМетаданных()
ТаблицаОбъектовМетаданных = ДополнительныеОтчетыИОбработки.ПодключенныеОбъектыМетаданных(Объект.Вид);
Если ТаблицаОбъектовМетаданных = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ФильтрПоОбъектамМетаданных = Новый СписокЗначений;
ФильтрПоОбъектамМетаданных.ЗагрузитьЗначения(ТаблицаОбъектовМетаданных.ВыгрузитьКолонку("ПолноеИмя"));
ВыбранныеОбъектыМетаданных = Новый СписокЗначений;
ОбъектыНазначения = Новый Массив;
Для Каждого ЭлементНазначение Из Объект.Назначение Цикл
Если ТаблицаОбъектовМетаданных.Найти(ЭлементНазначение.ОбъектНазначения, "Ссылка") <> Неопределено Тогда
ОбъектыНазначения.Добавить(ЭлементНазначение.ОбъектНазначения);
КонецЕсли;
КонецЦикла;
ПолныеИменаОбъектовНазначения = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(ОбъектыНазначения, "ПолноеИмя");
Для Каждого КлючИЗначение Из ПолныеИменаОбъектовНазначения Цикл
ВыбранныеОбъектыМетаданных.Добавить(КлючИЗначение.Значение);
КонецЦикла;
ПараметрыФормы = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыФормы.ФильтрПоОбъектамМетаданных = ФильтрПоОбъектамМетаданных;
ПараметрыФормы.ВыбранныеОбъектыМетаданных = ВыбранныеОбъектыМетаданных;
ПараметрыФормы.Заголовок = НСтр("ru = 'Назначение дополнительной обработки'");
Возврат ПараметрыФормы;
КонецФункции
&НаСервере
Процедура ЗагрузитьВыбранныеОбъектыМетаданных(Параметр)
Объект.Назначение.Очистить();
Для Каждого ЭлементПараметр Из Параметр Цикл
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ЭлементПараметр.Значение);
Если ОбъектМетаданных = Неопределено Тогда
Продолжить;
КонецЕсли;
СтрокаНазначение = Объект.Назначение.Добавить();
СтрокаНазначение.ОбъектНазначения = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных);
КонецЦикла;
Модифицированность = Истина;
УстановитьВидимостьДоступность();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УдалитьВариантДополнительногоОтчета(КлючОбъекта, КлючВарианта)
ХранилищаНастроек["ХранилищеВариантовОтчетов"].Удалить(КлючОбъекта, КлючВарианта, Неопределено);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьДоступность(Регистрация = Ложь)
ЭтоГлобальнаяОбработка = (Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет);
ЭтоОтчет = (Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет);
Если Не Регистрация И Не ЭтоНовый И ЭтоОтчет Тогда
ВариантыДополнительногоОтчетаЗаполнить();
Иначе
ВариантыДополнительногоОтчета.Очистить();
КонецЕсли;
КоличествоВариантов = ВариантыДополнительногоОтчета.Количество();
КоличествоКоманд = Объект.Команды.Количество();
КоличествоВидимыхЗакладок = 1;
Если Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов Тогда
КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1;
Элементы.СтраницыВарианты.Видимость = Истина;
Если Регистрация ИЛИ КоличествоВариантов = 0 Тогда
Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыСкрытьДоЗаписи;
Элементы.СтраницаВарианты.Заголовок = НСтр("ru = 'Варианты отчета'");
Иначе
Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыПоказать;
Элементы.СтраницаВарианты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Варианты отчета (%1)'"),
Формат(КоличествоВариантов, "ЧГ="));
КонецЕсли;
Иначе
Элементы.СтраницыВарианты.Видимость = Ложь;
КонецЕсли;
Элементы.СтраницаКоманды.Видимость = КоличествоКоманд > 0;
Если КоличествоКоманд = 0 Тогда
Элементы.СтраницаКоманды.Заголовок = НазваниеСтраницыКоманд();
Иначе
КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1;
Элементы.СтраницаКоманды.Заголовок = НазваниеСтраницыКоманд() + " (" + Формат(КоличествоКоманд, "ЧГ=") + ")";
КонецЕсли;
Элементы.ВыполнитьКоманду.Видимость = Ложь;
Если ЭтоГлобальнаяОбработка И КоличествоКоманд > 0 Тогда
Для Каждого СтрокаТаблицыКоманд Из Объект.Команды Цикл
Если СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ОткрытиеФормы")
Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовКлиентскогоМетода")
Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода")
Или СтрокаТаблицыКоманд.ВариантЗапуска = ПредопределенноеЗначение("Перечисление.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме") Тогда
Элементы.ВыполнитьКоманду.Видимость = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
СвойстваБезопасногоРежима = СвойстваБезопасногоРежима();
БезопасныйРежим = СвойстваБезопасногоРежима.БезопасныйРежим;
КоличествоРазрешений = СвойстваБезопасногоРежима.КоличествоРазрешений;
ИспользуютсяПрофилиБезопасности = СвойстваБезопасногоРежима.ИспользуютсяПрофилиБезопасности;
Если КоличествоРазрешений = 0 Тогда
Элементы.СтраницаРазрешения.Видимость = Ложь;
Элементы.ГруппаБезопасныйРежимГлобальный.Видимость = Истина;
Элементы.ДекорацияБезопасныйРежимЛожьНадпись.Видимость = (БезопасныйРежим = Ложь);
Элементы.ДекорацияБезопасныйРежимИстинаНадпись.Видимость = (БезопасныйРежим = Истина);
Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Ложь;
Иначе
КоличествоВидимыхЗакладок = КоличествоВидимыхЗакладок + 1;
Элементы.СтраницаРазрешения.Видимость = Истина;
Элементы.СтраницаРазрешения.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Разрешения (%1)'"),
Формат(КоличествоРазрешений, "ЧГ="));
Элементы.ГруппаБезопасныйРежимГлобальный.Видимость = Ложь;
Элементы.ГруппаСтраницыРежимыСовместимостиРазрешений.ТекущаяСтраница = Элементы.СтраницаРазрешенияВерсия_2_2_2;
Если ИспользуютсяПрофилиБезопасности И БезопасныйРежим = Истина Тогда
Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаБезопасныйРежимСРазрешениями;
ИначеЕсли ТипЗнч(БезопасныйРежим) = Тип("Булево") Тогда
Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаНебезопасныйРежимСРазрешениями;
ИначеЕсли ТипЗнч(БезопасныйРежим) = Тип("Строка") Тогда
Элементы.СтраницыБезопасныйРежимСРазрешениями.ТекущаяСтраница = Элементы.СтраницаПерсональныйПрофильБезопасности;
Элементы.ДекорацияПерсональныйПрофильБезопасностиНадпись.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Дополнительный отчет или обработка будет подключаться к приложению с использованием ""персонального""
|профиля безопасности %1, в котором будут разрешены только следующие операции:'"),
БезопасныйРежим);
Иначе
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 не является корректным режимом подключения для дополнительных отчетов и обработок,
|требующих разрешений на использование профилей безопасности.'"),
БезопасныйРежим);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный");
ДоступнаНастройкаПрофилейБезопасности = МодульРаботаВБезопасномРежимеСлужебный.ДоступнаНастройкаПрофилейБезопасности();
Иначе
ДоступнаНастройкаПрофилейБезопасности = Ложь;
КонецЕсли;
Если БезопасныйРежим = Ложь И Не ИспользуютсяПрофилиБезопасности И ДоступнаНастройкаПрофилейБезопасности Тогда
Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Истина;
Иначе
Элементы.ГруппаВключениеПрофилейБезопасности.Видимость = Ложь;
КонецЕсли;
СформироватьСписокРазрешений();
КонецЕсли;
Элементы.СтраницыВариантыКомандыРазрешения.ОтображениеСтраниц = ОтображениеСтраницФормы[
?(КоличествоВидимыхЗакладок > 1, "ЗакладкиСверху", "Нет")];
ПредставлениеНазначения = ПредставлениеНазначения(ЭтоГлобальнаяОбработка);
Элементы.ОбъектКомандыБыстрыйДоступПредставление.Видимость = ЭтоГлобальнаяОбработка;
Элементы.ОбъектКомандыНастроитьБыстрыйДоступ.Видимость = ЭтоГлобальнаяОбработка;
Элементы.ОбъектКомандыРегламентноеЗаданиеПредставление.Видимость = ЭтоГлобальнаяОбработка;
Элементы.ОбъектКомандыРегламентноеЗаданиеИспользование.Видимость = ЭтоГлобальнаяОбработка;
Элементы.ОбъектКомандыНастроитьРасписание.Видимость = ЭтоГлобальнаяОбработка;
ЭтоПечатнаяФорма = Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма;
Элементы.ТипыФорм.Видимость = Не ЭтоГлобальнаяОбработка И Не ЭтоПечатнаяФорма;
Если Не Элементы.ТипыФорм.Видимость Тогда
Объект.ИспользоватьДляФормыОбъекта = Истина;
Объект.ИспользоватьДляФормыСписка = Истина;
КонецЕсли;
Элементы.НастроитьВидимость.Видимость = ЭтоПечатнаяФорма;
Элементы.ОбъектКомандыКомментарий.Видимость = ЭтоПечатнаяФорма;
Если ЭтоНовый Тогда
Заголовок = ?(ЭтоОтчет, НСтр("ru = 'Дополнительный отчет (создание)'"),
НСтр("ru = 'Дополнительная обработка (создание)'"));
Иначе
Заголовок = Объект.Наименование + " " + ?(ЭтоОтчет, НСтр("ru = '(Дополнительный отчет)'"),
НСтр("ru = '(Дополнительная обработка)'"));
КонецЕсли;
Если КоличествоВариантов > 0 Тогда
ВыводитьЗаголовокТаблицы = КоличествоВидимыхЗакладок <= 1 И Объект.Вид = ВидДополнительныйОтчет
И Объект.ИспользуетХранилищеВариантов;
Элементы.ВариантыДополнительногоОтчета.ПоложениеЗаголовка =
ПоложениеЗаголовкаЭлементаФормы[?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")];
Элементы.ВариантыДополнительногоОтчета.Шапка = НЕ ВыводитьЗаголовокТаблицы;
Элементы.ВариантыДополнительногоОтчета.ГоризонтальныеЛинии = НЕ ВыводитьЗаголовокТаблицы;
КонецЕсли;
Если КоличествоКоманд > 0 Тогда
ВыводитьЗаголовокТаблицы = КоличествоВидимыхЗакладок <= 1 И НЕ ЭтоГлобальнаяОбработка;
Элементы.ОбъектКоманды.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы[
?(ВыводитьЗаголовокТаблицы, "Верх", "Нет")];
Элементы.ОбъектКоманды.Шапка = НЕ ВыводитьЗаголовокТаблицы;
Элементы.ОбъектКоманды.ГоризонтальныеЛинии = НЕ ВыводитьЗаголовокТаблицы;
КонецЕсли;
КлючСохраненияПоложенияОкна = ДополнительныеОтчетыИОбработки.ВидВСтроку(Объект.Вид);
КонецПроцедуры
&НаСервере
Функция СвойстваБезопасногоРежима()
Результат = Новый Структура;
Результат.Вставить("БезопасныйРежим", Объект.БезопасныйРежим);
Результат.Вставить("КоличествоРазрешений", РазрешенияПрофиляБезопасности().Количество());
Результат.Вставить("ИспользуютсяПрофилиБезопасности", Ложь);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрофилиБезопасности") Тогда
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
Результат.ИспользуютсяПрофилиБезопасности = МодульРаботаВБезопасномРежиме.ИспользуютсяПрофилиБезопасности();
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("РаботаВМоделиСервиса") Или Результат.ИспользуютсяПрофилиБезопасности Тогда
МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный");
Если Объект.РежимСовместимостиРазрешений = Перечисления.РежимыСовместимостиРазрешенийДополнительныхОтчетовИОбработок.Версия_2_1_3 Тогда
Если Результат.БезопасныйРежим И Результат.КоличествоРазрешений > 0 И Результат.ИспользуютсяПрофилиБезопасности Тогда
Результат.БезопасныйРежим = ?(ЭтоНовый, "", МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка));
КонецЕсли;
ИначеЕсли Результат.КоличествоРазрешений = 0 Тогда
Результат.БезопасныйРежим = Истина;
ИначеЕсли Результат.ИспользуютсяПрофилиБезопасности Тогда
Результат.БезопасныйРежим = ?(ЭтоНовый, "", МодульРаботаВБезопасномРежимеСлужебный.РежимПодключенияВнешнегоМодуля(Объект.Ссылка));
Иначе
Результат.БезопасныйРежим = Ложь;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПредставлениеНазначения(Знач ЭтоГлобальнаяОбработка)
Результат = "";
Если ЭтоГлобальнаяОбработка Тогда
Для Каждого СтрокаРаздел Из Объект.Разделы Цикл
ПредставлениеРаздела = ДополнительныеОтчетыИОбработки.ПредставлениеРаздела(СтрокаРаздел.Раздел);
Если ПредставлениеРаздела = Неопределено Тогда
Продолжить;
КонецЕсли;
Результат = ?(ПустаяСтрока(Результат), ПредставлениеРаздела,
Результат + ", " + ПредставлениеРаздела);
КонецЦикла;
Иначе
Для Каждого СтрокаНазначение Из Объект.Назначение Цикл
ПредставлениеОбъекта = ДополнительныеОтчетыИОбработки.ПредставлениеОбъектаМетаданных(СтрокаНазначение.ОбъектНазначения);
Результат = ?(ПустаяСтрока(Результат), ПредставлениеОбъекта,
Результат + ", " + ПредставлениеОбъекта);
КонецЦикла;
КонецЕсли;
Если Результат = "" Тогда
Результат = НСтр("ru = 'Не определено'");
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область Сервер
&НаСервере
Процедура СформироватьСписокРазрешений()
ТаблицаРазрешений = ПолучитьИзВременногоХранилища(АдресРазрешений);
Разрешения = Новый Массив();
МодульРаботаВБезопасномРежимеСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежимеСлужебный");
Для Каждого СтрокаТаблицы Из ТаблицаРазрешений Цикл
Разрешение = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(МодульРаботаВБезопасномРежимеСлужебный.Пакет(), СтрокаТаблицы.ВидРазрешения));
ЗаполнитьЗначенияСвойств(Разрешение, СтрокаТаблицы.Параметры.Получить());
Разрешения.Добавить(Разрешение);
КонецЦикла;
Свойства = МодульРаботаВБезопасномРежимеСлужебный.СвойстваДляРегистраРазрешений(Объект.Ссылка);
УстановитьПривилегированныйРежим(Истина);
ПредставлениеРазрешений_2_2_2 = МодульРаботаВБезопасномРежимеСлужебный.ПредставлениеРазрешенийНаИспользованиеВнешнихРесурсов(
Свойства.Тип, Свойства.Идентификатор, Свойства.Тип, Свойства.Идентификатор, Разрешения);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Функция РазрешенияПрофиляБезопасности()
Возврат ПолучитьИзВременногоХранилища(АдресРазрешений);
КонецФункции
&НаСервере
Процедура ЗаполнитьКоманды(КомандыСохраненные = Неопределено)
Объект.Команды.Сортировать("Представление");
КомандыПечатиОбъекта = Неопределено;
Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма
И Объект.Назначение.Количество() = 1
И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
КомандыПечатиОбъекта = МодульУправлениеПечатью.СтандартныеКомандыПечатиОбъекта(Объект.Назначение[0].ОбъектНазначения);
КонецЕсли;
Для Каждого ЭлементКоманда Из Объект.Команды Цикл
Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда
Найденные = БыстрыйДоступ.НайтиСтроки(Новый Структура("ИдентификаторКоманды", ЭлементКоманда.Идентификатор));
ЭлементКоманда.БыстрыйДоступПредставление = ПредставлениеБыстрогоДоступаПользователей(
Найденные.Количество());
КонецЕсли;
ЭлементКоманда.РегламентноеЗаданиеИспользование = Ложь;
ЭлементКоманда.РегламентноеЗаданиеРазрешено = Ложь;
Если Объект.Вид = ВидДополнительнаяОбработка
И (ЭлементКоманда.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода
ИЛИ ЭлементКоманда.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок.СценарийВБезопасномРежиме) Тогда
ЭлементКоманда.РегламентноеЗаданиеРазрешено = Истина;
РегламентноеЗаданиеGUID = ЭлементКоманда.РегламентноеЗаданиеGUID;
Если КомандыСохраненные <> Неопределено Тогда
НайденнаяСтрока = КомандыСохраненные.Найти(ЭлементКоманда.Идентификатор, "Идентификатор");
Если НайденнаяСтрока <> Неопределено Тогда
РегламентноеЗаданиеGUID = НайденнаяСтрока.РегламентноеЗаданиеGUID;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(РегламентноеЗаданиеGUID) Тогда
УстановитьПривилегированныйРежим(Истина);
РегламентноеЗадание = РегламентныеЗаданияСервер.Задание(РегламентноеЗаданиеGUID);
Если РегламентноеЗадание <> Неопределено Тогда
ЭлементКоманда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеGUID;
ЭлементКоманда.РегламентноеЗаданиеПредставление = Строка(РегламентноеЗадание.Расписание);
ЭлементКоманда.РегламентноеЗаданиеИспользование = РегламентноеЗадание.Использование;
ЭлементКоманда.РегламентноеЗаданиеРасписание.Вставить(0, РегламентноеЗадание.Расписание);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если Не ЗначениеЗаполнено(ЭлементКоманда.РегламентноеЗаданиеПредставление) Тогда
ЭлементКоманда.РегламентноеЗаданиеПредставление = НСтр("ru = 'Не заполнено'");
КонецЕсли;
ИначеЕсли Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда
Если Не ПустаяСтрока(ЭлементКоманда.ЗаменяемыеКоманды) И КомандыПечатиОбъекта <> Неопределено Тогда
ИдентификаторыЗаменяемых = СтрРазделить(ЭлементКоманда.ЗаменяемыеКоманды, ",", Ложь);
ПредставлениеЗаменяемыхКоманд = "";
КоличествоЗаменяемых = 0;
Фильтр = Новый Структура("Идентификатор, ФорматСохранения, СразуНаПринтер", Неопределено, Неопределено, Ложь);
Для Каждого ИдентификаторЗаменяемойКоманды Из ИдентификаторыЗаменяемых Цикл
Фильтр.Идентификатор = СокрЛП(ИдентификаторЗаменяемойКоманды);
СписокЗаменяемыхКоманд = КомандыПечатиОбъекта.НайтиСтроки(Фильтр);
Если СписокЗаменяемыхКоманд.Количество() = 1 Тогда
ПредставлениеЗаменяемыхКоманд = ПредставлениеЗаменяемыхКоманд + ?(ПустаяСтрока(ПредставлениеЗаменяемыхКоманд), "", ", ") + """" + СписокЗаменяемыхКоманд[0].Представление + """";
КоличествоЗаменяемых = КоличествоЗаменяемых + 1;
КонецЕсли;
КонецЦикла;
Если КоличествоЗаменяемых > 0 Тогда
Если КоличествоЗаменяемых = 1 Тогда
ШаблонКомментария = НСтр("ru = 'Заменяет стандартную команду печати %1'");
Иначе
ШаблонКомментария = НСтр("ru = 'Заменяет стандартные команды печати: %1'");
КонецЕсли;
ЭлементКоманда.Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, ПредставлениеЗаменяемыхКоманд);
КонецЕсли;
КонецЕсли;
Иначе
ЭлементКоманда.РегламентноеЗаданиеПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Неприменимо для команд с вариантом запуска ""%1""'"),
Строка(ЭлементКоманда.ВариантЗапуска));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВариантыДополнительногоОтчетаЗаполнить()
ВариантыДополнительногоОтчета.Очистить();
Попытка
ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ОбъектВнешнейОбработки(Объект.Ссылка);
Исключение
ТекстОшибки = НСтр("ru = 'Не удалось получить список вариантов отчета из-за ошибки, возникшей при подключении этого отчета:'");
ТекстСообщения = ТекстОшибки + Символы.ПС + ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецПопытки;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда
МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов");
ОтчетМетаданные = ВнешнийОбъект.Метаданные();
СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных;
Если СхемаКДМетаданные <> Неопределено Тогда
СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя);
Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл
КлючВарианта = ВариантНастроекКД.Имя;
ВариантСсылка = МодульВариантыОтчетов.ВариантОтчета(Объект.Ссылка, КлючВарианта);
Если ВариантСсылка <> Неопределено Тогда
Вариант = ВариантыДополнительногоОтчета.Добавить();
Вариант.КлючВарианта = КлючВарианта;
Вариант.Наименование = ВариантНастроекКД.Представление;
Вариант.Пользовательский = Ложь;
Вариант.ИндексКартинки = 5;
Вариант.Ссылка = ВариантСсылка;
КонецЕсли;
КонецЦикла;
Иначе
КлючВарианта = "";
ВариантСсылка = МодульВариантыОтчетов.ВариантОтчета(Объект.Ссылка, КлючВарианта);
Если ВариантСсылка <> Неопределено Тогда
Вариант = ВариантыДополнительногоОтчета.Добавить();
Вариант.КлючВарианта = КлючВарианта;
Вариант.Наименование = ОтчетМетаданные.Представление();
Вариант.Пользовательский = Ложь;
Вариант.ИндексКартинки = 5;
Вариант.Ссылка = ВариантСсылка;
КонецЕсли;
КонецЕсли;
Иначе
МодульВариантыОтчетов = Неопределено;
КонецЕсли;
Если Объект.ИспользуетХранилищеВариантов Тогда
Хранилище = ХранилищаНастроек["ХранилищеВариантовОтчетов"];
КлючОбъекта = Объект.Ссылка;
СписокНастроек = МодульВариантыОтчетов.КлючиВариантовОтчета(КлючОбъекта);
Иначе
Хранилище = ХранилищеВариантовОтчетов;
КлючОбъекта = "ВнешнийОтчет." + Объект.ИмяОбъекта;
СписокНастроек = Хранилище.ПолучитьСписок(КлючОбъекта);
КонецЕсли;
Для Каждого ЭлементСписка Из СписокНастроек Цикл
Вариант = ВариантыДополнительногоОтчета.Добавить();
Вариант.КлючВарианта = ЭлементСписка.Значение;
Вариант.Наименование = ЭлементСписка.Представление;
Вариант.Пользовательский = Истина;
Вариант.ИндексКартинки = 3;
Если МодульВариантыОтчетов <> Неопределено Тогда
Вариант.Ссылка = МодульВариантыОтчетов.ВариантОтчета(Объект.Ссылка, Вариант.КлючВарианта);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ВыбранныеОбъектыНазначения()
Результат = Новый СписокЗначений;
Результат.ЗагрузитьЗначения(Объект.Назначение.Выгрузить(, "ОбъектНазначения").ВыгрузитьКолонку("ОбъектНазначения"));
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура НастроитьВидимостьЗавершение(РезультатДиалога, ДополнительныеПараметры) Экспорт
Если РезультатДиалога <> "Продолжить" Тогда
Возврат;
КонецЕсли;
Записать();
ОткрытьФормуНастроекПодменюПечать();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуНастроекПодменюПечать()
МодульУправлениеПечатьюСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюСлужебныйКлиент");
МодульУправлениеПечатьюСлужебныйКлиент.ОткрытьФормуНастроекПодменюПечать(ВыбранныеОбъектыНазначения());
КонецПроцедуры
&НаСервере
Функция ОтключаемыеКоманды()
Результат = Новый СписокЗначений;
Для Каждого Команда Из Объект.Команды Цикл
Если Не ПустаяСтрока(Команда.ЗаменяемыеКоманды) Тогда
СписокЗаменяемых = СтрРазделить(Команда.ЗаменяемыеКоманды, ",", Ложь);
Для Каждого ЗаменяемаяКоманда Из СписокЗаменяемых Цикл
Результат.Добавить(ЗаменяемаяКоманда);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Функция НазваниеСтраницыКоманд()
Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма Тогда
Возврат НСтр("ru = 'Команды печати'");
Иначе
Возврат НСтр("ru = 'Команды'");
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ДополнительныеРеквизиты
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствамиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеСвойствамиКлиент");
МодульУправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
МодульУправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти