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