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