Выработка сотрудников / Форма списка документов / Модуль формы

файл

#Область ОбработчикиСобытийФормы

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

&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
	
	Если Параметры.Свойство("Период")
		И Не Настройки.Получить("Период") = Неопределено Тогда
		Настройки.Удалить("Период");
	КонецЕсли;
	
	
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
	
	ПериодВыработкаСотрудников = Настройки.Получить("ПериодВыработкаСотрудников");
	
	Если Не Параметры.Свойство("Период") Тогда
		Период = Настройки.Получить("Период");
		Если Не ЗначениеЗаполнено(Период) Тогда
			Период = ТекущаяДатаСеанса();
		КонецЕсли;
	КонецЕсли;
	
	УстановитьОтборПоПериоду();
	
	ЗаполнитьТрудозатратыКОформлению();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(Период);
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	Если ИмяСобытия = "Запись_ВыработкаСотрудников"
		Или ИмяСобытия = "Запись_ПроизводствоБезЗаказа" Тогда
		ЗаполнитьТрудозатратыКОформлению();
	КонецЕсли;
	
	Если ИмяСобытия = "Запись_ВыработкаСотрудников" Тогда
		Элементы.БригадныеНаряды.Обновить();
	КонецЕсли;
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыОповещенияЭДО = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаСписка();
	ПараметрыОповещенияЭДО.Форма = ЭтотОбъект;
	ПараметрыОповещенияЭДО.ИмяДинамическогоСписка = "БригадныеНаряды";
	ПараметрыОповещенияЭДО.ЕстьОбработчикОбновленияВидимостиСостоянияЭДО = Истина;
	ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаСписка(ИмяСобытия, Параметр, Источник, ПараметрыОповещенияЭДО);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
	Настройки.Вставить("ПериодВыработкаСотрудников", ПериодВыработкаСотрудников);
	Настройки.Вставить("Период", Период);
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	ПодразделениеПриИзмененииВызовСервера();
	
КонецПроцедуры

&НаКлиенте
Процедура ОтборВидНарядаПриИзменении(Элемент)
	
	ВидНарядаПриИзмененииВызовСервера();
	
КонецПроцедуры

&НаКлиенте
Процедура БригадаПриИзменении(Элемент)
	
	БригадаПриИзмененииВызовСервера();
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцСтрокаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	Оповещение = Новый ОписаниеОповещения("МесяцСтрокаНачалоВыбораЗавершение", ЭтотОбъект);
	ОбщегоНазначенияУТКлиент.НачалоВыбораПредставленияПериодаРегистрации(Элемент, СтандартнаяОбработка, Период, ЭтаФорма, Оповещение);
КонецПроцедуры

&НаКлиенте
Процедура МесяцСтрокаНачалоВыбораЗавершение(ВыбранныйПериод, ДополнительныеПараметры) Экспорт 
	
	Если ВыбранныйПериод <> Неопределено Тогда
		Период = ВыбранныйПериод;
		МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(Период);
	КонецЕсли;
	ЗаполнитьТрудозатратыКОформлению();
	
КонецПроцедуры

&НаКлиенте
Процедура МесяцСтрокаОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура МесяцСтрокаРегулирование(Элемент, Направление, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Период = ДобавитьМесяц(Период, Направление);
	МесяцСтрока = ОбщегоНазначенияУТКлиент.ПолучитьПредставлениеПериодаРегистрации(Период);
	ЗаполнитьТрудозатратыКОформлению();
КонецПроцедуры

&НаКлиенте
Процедура ПериодичностьОформленияВыработкиПриИзменении(Элемент)
	ЗаполнитьТрудозатратыКОформлению();
КонецПроцедуры

&НаКлиенте
Процедура РежимОформленияПриИзменении(Элемент)
	СохранитьПараметрыОтбора();
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыОбработкаПолученияНавигационнойСсылки(Элемент, Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Ссылка = Элементы.БригадныеНаряды.ТекущиеДанные.Ссылка;
	НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(Ссылка);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыБригадныеНаряды

&НаКлиенте
Процедура БригадныеНарядыПриАктивизацииСтроки(Элемент)
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	Если Поле = Элементы.БригадныеНарядыПредставлениеСостояния Тогда
		// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
		ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаСписка(ВыбраннаяСтрока, СтандартнаяОбработка);
		// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
	
	Если Копирование Тогда
		ОбщегоНазначенияУТКлиент.СкопироватьЭлемент(Элемент);
	Иначе
		ОткрытьФорму("Документ.ВыработкаСотрудников.ФормаОбъекта");
	КонецЕсли;
	Отказ = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыПередНачаломИзменения(Элемент, Отказ)
	
	Отказ = Истина;
	ОбщегоНазначенияУТКлиент.ИзменитьЭлемент(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыПередУдалением(Элемент, Отказ)
	
	Отказ = Истина;
	ОбщегоНазначенияУТКлиент.УстановитьПометкуУдаления(Элементы.БригадныеНаряды, Заголовок);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормыСписокТрудозатратПроизводства

&НаКлиенте
Процедура ТрудозатратыКОформлениюВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ТекущиеДанные = Элемент.ТекущиеДанные;
	Если ТекущиеДанные <> Неопределено Тогда
		Если Поле.Имя = "ТрудозатратыКОформлениюИсполнитель" Тогда
			ПоказатьЗначение(Неопределено, ТекущиеДанные.Исполнитель);
		ИначеЕсли Поле.Имя = "ТрудозатратыКОформлениюВидРабот" Тогда
			ПоказатьЗначение(Неопределено, ТекущиеДанные.ВидРабот);
		ИначеЕсли Поле.Имя = "ТрудозатратыКОформлениюПодразделение" Тогда
			ПоказатьЗначение(Неопределено, ТекущиеДанные.Подразделение);
		ИначеЕсли Поле.Имя = "ТрудозатратыКОформлениюРаспоряжение" Тогда
			ПоказатьЗначение(Неопределено, ТекущиеДанные.Распоряжение);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура КомандаОбновитьДанные(Команда)
	
	ЗаполнитьТрудозатратыКОформлению();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаРазвернутьПоРаспоряжениям(Команда)
	
	РазвернутьПоРаспоряжениямПриИзмененииВызовСервера();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОформитьПоРаспоряжению(Команда)
	
	ОчиститьСообщения();
	
	Если Элементы.ТрудозатратыКОформлению.ВыделенныеСтроки.Количество() = 0 Тогда
		ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Команда не может быть выполнена для указанного объекта.'"));
		Возврат;
	КонецЕсли;
	
	ПараметрыОформления = ПараметрыОформленияНаСервере(Элементы.ТрудозатратыКОформлению.ВыделенныеСтроки);
	
	Если ПараметрыОформления = Неопределено Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
			НСтр("ru = 'По выбранным распоряжениям выработка сотрудников уже оформлена или оформление не требуется.'"));
		Возврат;
	КонецЕсли;
	
	ПараметрыОформления.Вставить("Периодичность",   Периодичность);
	
	Если РежимОформления = "ВключатьВПериодВыполненияРабот" Тогда
		ПараметрыОформления.Вставить("ВключатьВПериодВыполненияРабот", Истина);
	Иначе
		ПараметрыОформления.Вставить("ВключатьВПериодВыполненияРабот", Ложь);
	КонецЕсли;
	
	Если ПараметрыОформления.ТребуетсяОдинДокумент Тогда
		
		ПараметрыОформления.Вставить("ЗаполнитьПоОтбору", Истина);
		
		ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ПараметрыОформления);
		ОткрытьФорму("Документ.ВыработкаСотрудников.ФормаОбъекта", ПараметрыФормы);
		
	Иначе
		
		ПараметрыОформления.Вставить("НачалоПериода",   НачалоМесяца(Период));
		ПараметрыОформления.Вставить("КонецПериода",    КонецМесяца(Период));
		
		ДлительнаяОперация = СформироватьВФоне(ПараметрыОформления);
		
		ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
		ОписаниеОповещения = Новый ОписаниеОповещения("СформироватьДокументыЗавершение", ЭтотОбъект);
		ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОписаниеОповещения, ПараметрыОжидания);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьИнтервал(Команда)
	
	Оповещение = Новый ОписаниеОповещения("УстановитьИнтервалЗавершение", ЭтотОбъект);
	
	ОбщегоНазначенияУтКлиент.РедактироватьПериод(ПериодВыработкаСотрудников, , Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаСоздатьПерсональныйНаряд(Команда)
	
	СоздатьНаряд(ПредопределенноеЗначение("Перечисление.ВидыБригадныхНарядов.Персональный"));
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаСоздатьБригадныйНаряд(Команда)
	
	СоздатьНаряд(ПредопределенноеЗначение("Перечисление.ВидыБригадныхНарядов.Бригадный"));
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьВыработкуПоЗаказу21(Команда)
	
	
	Возврат; // в КА пустой
	
КонецПроцедуры

&НаКлиенте
Процедура СоздатьВыработкуБезЗаказа21(Команда)
	СоздатьНаряд(ПредопределенноеЗначение("Перечисление.ВидыБригадныхНарядов.БригадныйБезЗаказа21"));
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьВыделенные(Команда)
	
	Ссылки = Новый Массив;
	Для каждого ВыбраннаяСтрока Из Элементы.БригадныеНаряды.ВыделенныеСтроки Цикл
		ДанныеСтроки = Элементы.БригадныеНаряды.ДанныеСтроки(ВыбраннаяСтрока);
		Ссылки.Добавить(ДанныеСтроки.Ссылка);
	КонецЦикла;
	
	Если Ссылки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Ссылки);
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыПровести(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиДокументы(Элементы.БригадныеНаряды, Заголовок);
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыОтменитьПроведение(Команда)
	
	ОбщегоНазначенияУТКлиент.ОтменаПроведения(Элементы.БригадныеНаряды, Заголовок);
	
КонецПроцедуры

&НаКлиенте
Процедура БригадныеНарядыОбновить(Команда)
	
	// &ЗамерПроизводительности
	ОценкаПроизводительностиКлиент.ЗамерВремени(
		"Документ.ВыработкаСотрудников.Форма.ФормаСпискаДокументов.БригадныеНарядыОбновить");
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.БригадныеНаряды);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.БригадныеНаряды, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.БригадныеНаряды);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Элементы.БригадныеНаряды);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Элементы.БригадныеНаряды);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьВидимостьСостоянияЭДО()
	
	ОбменСКонтрагентамиКлиент.ОбработчикОбновленияВидимостьСостоянияЭДО(ЭтотОбъект, Элементы.БригадныеНарядыПредставлениеСостояния);
	
КонецПроцедуры

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область УправлениеФормой

&НаСервере
Процедура СгенерироватьКомандыСоздания()
	
	КомандыСоздания = Новый Массив;
	КомандыСоздания.Добавить("СоздатьБригадныйНаряд");
	КомандыСоздания.Добавить("СоздатьПерсональныйНаряд");
	КомандыСоздания.Добавить("СоздатьВыработкуБезЗаказа");
	
	ИспользуетсяПроизводство22 = ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеПроизводством2_2");
	ШаблонЗаголовка = НСтр("ru = '%1 (2.1)'");
	
	Для Каждого КомандаСоздания Из КомандыСоздания Цикл
		
		НоваяКнопка = Элементы.Добавить(КомандаСоздания, Тип("КнопкаФормы"), Элементы.БригадныеНарядыГруппаСоздатьГенерируемая);
		НоваяКнопка.ИмяКоманды = КомандаСоздания;
		
		Если ИспользуетсяПроизводство22
			И (КомандаСоздания = "СоздатьВыработкуБезЗаказа"
				Или КомандаСоздания = "СоздатьВыработкуПоЗаказу") Тогда
			НоваяКнопка.Заголовок = СтрШаблон(ШаблонЗаголовка, Команды.Найти(КомандаСоздания).Заголовок);
		КонецЕсли;
			
	КонецЦикла;
		
КонецПроцедуры

#КонецОбласти

#Область Отборы

&НаСервере
Процедура ПриИзмененииОтборов()
	
	УстановитьОтборПоПодразделению();
	УстановитьОтборПоВидуНаряда();
	УстановитьОтборПоБригаде();
	
	ЗаполнитьТрудозатратыКОформлению();
	
	СохранитьПараметрыОтбора();
	
КонецПроцедуры

&НаСервере
Процедура СохранитьПараметрыОтбора()
	
	ПараметрыОтбора = Новый Структура("Бригада,ОтборВидНаряда,Подразделение,РежимОформления,Период");
	ЗаполнитьЗначенияСвойств(ПараметрыОтбора, ЭтаФорма);
	ХранилищеНастроекДанныхФорм.Сохранить("ВыработкаСотрудниковФормаСписка", "ПараметрыОтбора", ПараметрыОтбора);
	
КонецПроцедуры

&НаСервере
Процедура ПодразделениеПриИзмененииВызовСервера()
	
	УстановитьОтборПоПодразделению();
	ЗаполнитьТрудозатратыКОформлению();
	
	СохранитьПараметрыОтбора();
	
КонецПроцедуры

&НаСервере
Процедура ВидНарядаПриИзмененииВызовСервера()

	УстановитьОтборПоВидуНаряда();
	ЗаполнитьТрудозатратыКОформлению();

	СохранитьПараметрыОтбора();
	
КонецПроцедуры

&НаСервере
Процедура БригадаПриИзмененииВызовСервера()
	
	УстановитьОтборПоБригаде();
	ЗаполнитьТрудозатратыКОформлению();
	
	СохранитьПараметрыОтбора();
	
КонецПроцедуры

&НаСервере
Процедура РазвернутьПоРаспоряжениямПриИзмененииВызовСервера()
	
	ОтображатьРаспоряжения = НЕ ОтображатьРаспоряжения;
	Элементы.ТрудозатратыКОформлениюРазвернутьПоРаспоряжениям.Пометка = ОтображатьРаспоряжения;
	
	ЗаполнитьТрудозатратыКОформлению();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоПодразделению()
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		БригадныеНаряды, 
		"Подразделение", 
		Подразделение, 
		ВидСравненияКомпоновкиДанных.Равно,
		, // Представление - автоматически
		ЗначениеЗаполнено(Подразделение));
		
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоБригаде()
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		БригадныеНаряды, 
		"Бригада", 
		Бригада, 
		ВидСравненияКомпоновкиДанных.Равно,
		, // Представление - автоматически
		ЗначениеЗаполнено(Бригада));
		
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоВидуНаряда()
	
	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
		БригадныеНаряды,
		"ВидНаряда",
		ОтборВидНаряда,
		ВидСравненияКомпоновкиДанных.Равно,
		,
		ЗначениеЗаполнено(ОтборВидНаряда));
	
КонецПроцедуры

#КонецОбласти

#Область ЗаполнениеДанными

&НаСервере
Процедура ЗаполнитьТрудозатратыКОформлению()
	
	ТрудозатратыКОформлению.Очистить();
	
	СтруктураОтбора = Новый Структура;
	
	Если ЗначениеЗаполнено(Подразделение) Тогда
		СтруктураОтбора.Вставить("Подразделение", Подразделение);
	КонецЕсли;
	Если ЗначениеЗаполнено(Бригада) Тогда
		СтруктураОтбора.Вставить("Бригада", Бригада);
	КонецЕсли;
	Если ЗначениеЗаполнено(ОтборВидНаряда) Тогда
		СтруктураОтбора.Вставить("ВидНаряда", ОтборВидНаряда);
	КонецЕсли;
	
	СтруктураОтбора.Вставить("НачалоПериода", НачалоМесяца(Период));
	СтруктураОтбора.Вставить("КонецПериода", КонецМесяца(Период));
	СтруктураОтбора.Вставить("Периодичность", Периодичность);
	СтруктураОтбора.Вставить("СворачиватьРаспоряжения", Не ОтображатьРаспоряжения);
	
	КОформлению = Документы.ВыработкаСотрудников.ТрудозатратыКОформлению(СтруктураОтбора);
	
	Таблица = КОформлению.Выгрузить();
	Таблица.Свернуть("ВидНаряда,Подразделение,Организация,Распоряжение,Период,НачалоПериода,КонецПериода,ДатаВыполнения,Бригада,Исполнитель,Работник","Сумма");
	
	ТрудозатратыКОформлению.Загрузить(Таблица);
	ТрудозатратыКОформлению.Сортировать("НачалоПериода");
	
	Для Каждого Строка Из ТрудозатратыКОформлению Цикл
		Строка.Период.ДатаНачала = Строка.НачалоПериода;
		Строка.Период.ДатаОкончания = Строка.КонецПериода;
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

#Область ФормированиеНарядов

&НаКлиенте
Процедура СоздатьНаряд(ВидНаряда)
	
	ЗначенияЗаполнения = Новый Структура;
	ЗначенияЗаполнения.Вставить("ВидНаряда", ВидНаряда);
	
	Если ЗначениеЗаполнено(Подразделение) Тогда
		ЗначенияЗаполнения.Вставить("Подразделение", Подразделение);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Бригада) Тогда
		ЗначенияЗаполнения.Вставить("Бригада", Бригада);
	КонецЕсли;
	
	ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения);
	
	ОткрытьФорму("Документ.ВыработкаСотрудников.ФормаОбъекта", ПараметрыФормы);
	
КонецПроцедуры

#КонецОбласти

#Область Прочее

&НаСервере
Функция ОбработатьПараметрыФормы(ПараметрыФормы)
	
	ПараметрыОбработаны = Ложь;
	
	Если ПараметрыФормы.Свойство("СтруктураБыстрогоОтбора") Тогда
		
		ПараметрыФормы.СтруктураБыстрогоОтбора.Свойство("Бригада", Бригада);
		ПараметрыФормы.СтруктураБыстрогоОтбора.Свойство("ВидНаряда", ОтборВидНаряда);
		ПараметрыФормы.СтруктураБыстрогоОтбора.Свойство("Подразделение", Подразделение);
		
		ПараметрыОбработаны = Истина;
		
		Возврат ПараметрыОбработаны;
		
	КонецЕсли;
	
	Если ПараметрыФормы.Свойство("Подразделение") Тогда
		Подразделение = ПараметрыФормы.Подразделение;
		ПараметрыОбработаны = Истина;
	КонецЕсли;
	
	Если ПараметрыФормы.Свойство("Период") Тогда
		Период = ПараметрыФормы.Период;
		ПараметрыОбработаны = Истина;
	КонецЕсли;
	
	Если ПараметрыФормы.Свойство("РежимОформления") Тогда
		РежимОформления = ПараметрыФормы.РежимОформления;
		ПараметрыОбработаны = Истина;
	КонецЕсли;
	
	Если ПараметрыФормы.Свойство("ПерейтиКСписку") Тогда
		Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.ГруппаБригадныеНаряды;
	КонецЕсли;
	
	Возврат ПараметрыОбработаны;
	
КонецФункции

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	// детальные поля скрыты, если отключен разворот по распоряжениям
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюДата.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюРаспоряжение.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюИсполнитель.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтображатьРаспоряжения");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	// бригада скрыта при развороте по распоряжениям
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюБригада.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтображатьРаспоряжения");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
	
	// для персональных нарядов вместо бригады замещающий текст 
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюБригада.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТрудозатратыКОформлению.Бригада");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<работники>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	
	// распоряжение оформляется цветом как гиперссылка
	
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТрудозатратыКОформлениюРаспоряжение.Имя);
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
	
КонецПроцедуры

#КонецОбласти

#Область ЖурналДокументов

&НаСервере
Процедура ЗаполнитьРеквизитыФормыПриСоздании()
	
	ТаблицаЗначенийДоступно = Документы.ВыработкаСотрудников.ИнициализироватьХозяйственныеОперацииИДокументы(
		ХозяйственныеОперацииИДокументы.Выгрузить());
	
	ХозяйственныеОперацииИДокументы.Загрузить(ТаблицаЗначенийДоступно);
	
КонецПроцедуры

&НаСервере
Процедура НастроитьКнопкиУправленияДокументами()
	
	СтруктураПараметров = ОбщегоНазначенияУТ.СтруктураПараметровНастройкиКнопокУправленияДокументами();
	СтруктураПараметров.Форма                                             = ЭтотОбъект;
	СтруктураПараметров.ИмяГруппыСоздать                                  = "БригадныеНарядыГруппаСоздатьГенерируемая";
	СтруктураПараметров.ИмяГруппыСоздатьКонтекст                          = "БригадныеНарядыГруппаСоздатьГенерируемаяКонтекст";
	СтруктураПараметров.ИмяКнопкиСкопировать                              = "БригадныеНарядыСкопировать";
	СтруктураПараметров.ИмяКнопкиСкопироватьКонтекстноеМеню               = "БригадныеНарядыКонтекстноеМенюСкопировать";
	СтруктураПараметров.ИмяКнопкиИзменить                                 = "БригадныеНарядыИзменить";
	СтруктураПараметров.ИмяКнопкиИзменитьКонтекстноеМеню                  = "БригадныеНарядыКонтекстноеМенюИзменить";
	СтруктураПараметров.ИмяКнопкиПровести                                 = "БригадныеНарядыПровести";
	СтруктураПараметров.ИмяКнопкиПровестиКонтекстноеМеню                  = "БригадныеНарядыКонтекстноеМенюПровести";
	СтруктураПараметров.ИмяКнопкиОтменаПроведения                         = "БригадныеНарядыОтменаПроведения";
	СтруктураПараметров.ИмяКнопкиОтменаПроведенияКонтекстноеМеню          = "БригадныеНарядыКонтекстноеМенюОтменаПроведения";
	СтруктураПараметров.ИмяКнопкиУстановитьПометкуУдаления                = "БригадныеНарядыУстановитьСнятьПометкуУдаления";
	СтруктураПараметров.ИмяКнопкиУстановитьПометкуУдаленияКонтекстноеМеню = "БригадныеНарядыКонтекстноеМенюУстановитьСнятьПометкуУдаления";
	
	ОбщегоНазначенияУТ.НастроитьКнопкиУправленияДокументами(СтруктураПараметров);
	
	Элементы[СтруктураПараметров.ИмяГруппыСоздать].Картинка = БиблиотекаКартинок.СоздатьЭлементСписка;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормыСлужебные

&НаКлиенте
Процедура УстановитьИнтервалЗавершение(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
	
	Если ВыбранноеЗначение = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	УстановитьОтборПоПериоду();
	
КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоПериоду()
	
	БригадныеНаряды.Параметры.УстановитьЗначениеПараметра("НачалоПериода", ПериодВыработкаСотрудников.ДатаНачала);
	БригадныеНаряды.Параметры.УстановитьЗначениеПараметра("КонецПериода", ПериодВыработкаСотрудников.ДатаОкончания);
	
КонецПроцедуры

&НаСервере
Функция СформироватьВФоне(СтруктураОтбора)
	
	ИмяПроцедуры = "Документы.ВыработкаСотрудников.СформироватьДокументы";
	
	ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполнения.ОжидатьЗавершение = 0;
	
	Возврат ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, СтруктураОтбора, ПараметрыВыполнения);
	
КонецФункции

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

&НаСервере
Функция ПараметрыОформленияНаСервере(Знач Строки)
	
	Возврат ОперативныйУчетПроизводстваВызовСервера.ПараметрыОформленияВыработкиСотрудников(Неопределено, Строки, ТрудозатратыКОформлению);
	
КонецФункции

&НаКлиенте
Процедура ОбновитьДанныеСписков(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
	
	ЗаполнитьТрудозатратыКОформлению();
	
КонецПроцедуры

#КонецОбласти

#КонецОбласти

Связанные материалы