Партии производства / Модуль

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ВыполняетсяЗакрытие;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ВыполняетсяЗакрытие = Ложь;
	ИзменитьЗаголовокЭтапыТекущегоМесяца();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

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

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

&НаКлиенте
Процедура НачалоПериодаПриИзменении(Элемент)
	ИзменитьЗаголовокЭтапыТекущегоМесяца();
	ЗаполнитьТаблицуСервер();
КонецПроцедуры

&НаКлиенте
Процедура КонецПериодаПриИзменении(Элемент)
	ИзменитьЗаголовокЭтапыТекущегоМесяца();
	ЗаполнитьТаблицуСервер();
КонецПроцедуры

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

&НаКлиенте
Процедура ВариантПодбораПриИзменении(Элемент)
	
	Если ВариантПодбора <> ВариантПодбораПрежнее Тогда
		ЗаполнитьТаблицуСервер();
		ВариантПодбораПрежнее = ВариантПодбора;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыТекущегоМесяцаПриИзменении(Элемент)
	
	ЗаполнитьТаблицуСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	
	Если Подразделение <> ПодразделениеПрежнее Тогда
		ЗаполнитьТаблицуСервер();
		ПодразделениеПрежнее = Подразделение;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НазначениеПриИзменении(Элемент)
	
	Если Назначение <> НазначениеПрежнее Тогда
		ЗаполнитьТаблицуСервер();
		НазначениеПрежнее = Назначение;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
	
	Если НаправлениеДеятельности <> НаправлениеДеятельностиПрежнее Тогда
		ЗаполнитьТаблицуСервер();
		НаправлениеДеятельностиПрежнее = НаправлениеДеятельности;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаказНаПроизводствоПриИзменении(Элемент)
	ЗаполнитьТаблицуСервер();
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ВыбратьСтрокиЭтапы(Команда)
	
	ОтметитьСтроки(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ИсключитьСтрокиЭтапы(Команда)
	
	ОтметитьСтроки(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Функция ПоместитьСтрокиВХранилище()
	
	ТаблицаВыбранныхСтрок = ПартииПроизводства.Выгрузить(Новый Структура("СтрокаВыбрана", Истина));
	
	АдресВХранилище = ПоместитьВоВременноеХранилище(ТаблицаВыбранныхСтрок, АдресВХранилище);
	
	Возврат АдресВХранилище;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьТаблицуСервер()
	
	ОкончаниеПериодаЗначение = ?(ЗначениеЗаполнено(ОкончаниеПериода), ОкончаниеПериода, Дата(3999, 12, 31, 23, 59, 59));
	СтруктураОтбора.Вставить("ОкончаниеПериода", ОкончаниеПериодаЗначение);
	СтруктураОтбора.Вставить("Организация", Организация);
	
	СтруктураОтбора.Вставить("НачалоПериода",          НачалоПериода);
	СтруктураОтбора.Вставить("Подразделение",          Подразделение);
	СтруктураОтбора.Вставить("НаправлениеДеятельности",НаправлениеДеятельности);
	СтруктураОтбора.Вставить("Назначение",             Назначение);
	СтруктураОтбора.Вставить("ТолькоТекущийМесяц",     ЭтапыТекущегоМесяца);
	СтруктураОтбора.Вставить("ДетализироватьПоЭтапам", ?(ВариантПодбора = "ПоПродукции", Ложь, Истина));
	СтруктураОтбора.Вставить("ЗаказНаПроизводство",    ЗаказНаПроизводство);
	СтруктураОтбора.Вставить("ИсключатьПроизводствоНаСтороне", ИсключатьПроизводствоНаСтороне);
	
	Результат = ЗатратыСервер.ПартииПроизводстваДляРаспределенияЗатрат(СтруктураОтбора);
	
	ПартииПроизводства.Загрузить(Результат);
	
КонецПроцедуры

&НаКлиенте
Процедура ПеренестиСтрокиВДокумент()
	
	АдресВХранилище = ПоместитьСтрокиВХранилище();
	Модифицированность = Ложь;
	
	Закрыть(АдресВХранилище);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтметитьСтроки(Пометка)

	Если Элементы.ПартииПроизводства.ВыделенныеСтроки.Количество() > 1 Тогда
		Для каждого ИндексСтроки Из Элементы.ПартииПроизводства.ВыделенныеСтроки Цикл
			СтрокаПроизводство = Элементы.ПартииПроизводства.ДанныеСтроки(ИндексСтроки);
			СтрокаПроизводство.СтрокаВыбрана = Пометка;
		КонецЦикла;
	Иначе
		Для каждого СтрокаПроизводство Из ПартииПроизводства Цикл
			СтрокаПроизводство.СтрокаВыбрана = Пометка;
		КонецЦикла; 
	КонецЕсли;

КонецПроцедуры

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

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

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

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