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