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