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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДекорацияЕстьЛишниеРезервыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	
	ПеренестиРезервы();
КонецПроцедуры

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

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();
	
	// Установка цвета для ячеек, требующих настройки
	// Продукция
	Элемент = УсловноеОформление.Элементы.Добавить();

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

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

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

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КОформлениюПродукцияНазначение.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Нстр("ru = '<без назначения>'"));
	
	// Работы
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КОформлениюРаботыНазначение.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КОформлениюРаботы.Назначение");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Нстр("ru = '<без назначения>'"));
	
	// Без серии, если серия не заполнена.

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КОформлениюПродукцияСерия.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КОформлениюПродукция.Серия");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", Нстр("ru = '<без серии>'"));
	
КонецПроцедуры

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

&НаКлиенте
Процедура ИзменениеМоделиЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Элемент = Элементы[ДополнительныеПараметры]; // ТаблицаФормы - таблица формы
	Элемент.Обновить();
	
КонецПроцедуры

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

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

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

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

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

#Область ПеренестиРезервы

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

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

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

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

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


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

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

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

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

&НаСервереБезКонтекста
Функция ПараметрПериод(ПериодРегистрации, ИтогиРассчитаны)
	
	ПараметрПериод = КонецМесяца(ПериодРегистрации) + 1;
	
	ИтогиПродукции = РегистрыНакопления.ТоварыОрганизаций.ПолучитьМаксимальныйПериодРассчитанныхИтогов() + 1;
	ИтогиРабот = РегистрыНакопления.МатериалыИРаботыВПроизводстве.ПолучитьМаксимальныйПериодРассчитанныхИтогов() + 1;
	
	ИтогиРассчитаны = ПараметрПериод <= ИтогиПродукции
						И ПараметрПериод <= ИтогиРабот;
	
	Если НЕ ИтогиРассчитаны Тогда
		ПараметрПериод = Неопределено;
	КонецЕсли;
	
	Возврат ПараметрПериод;
	
КонецФункции

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыКОформлениюПродукция

&НаКлиенте
Процедура КОформлениюПродукцияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	КОформлениюОбщиеВыбор("КОформлениюПродукция", Поле);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыКОформлениюРаботы

&НаКлиенте
Процедура КОформлениюРаботыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	КОформлениюОбщиеВыбор("КОформлениюРаботы", Поле);
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыКОформлениюОбщие

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

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

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

#Область ОбработчикиКомандСтраницыКОформлениюПродукция

&НаКлиенте
Процедура КОформлениюПродукцияОформитьСогласноНастройке(Команда)
	
	КОформлениюОбщиеОформитьСогласноНастройке("КОформлениюПродукция");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюПродукцияПроизводствоБезЗаказа(Команда)
	
	КОформлениюОбщиеПроизводствоБезЗаказа("КОформлениюПродукция");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюПродукцияРаспределениеВозвратныхОтходов(Команда)
	
	КОформлениюОбщиеРаспределениеВозвратныхОтходов("КОформлениюПродукция");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюПродукцияОбновить(Команда)
	
	КОформлениюОбщиеОбновить(Элементы.КОформлениюПродукция);
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюПродукцияНастроитьМодель(Команда)
	
	КОформлениюОбщиеНастроитьМодель("КОформлениюПродукция");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюПродукцияОчиститьМодель(Команда)
	
	КОформлениюОбщиеОчиститьМодель("КОформлениюПродукция");
	
КонецПроцедуры

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

#Область ОбработчикиКомандСтраницыКОформлениюРаботы

&НаКлиенте
Процедура КОформлениюРаботыОформитьСогласноНастройке(Команда)
	
	КОформлениюОбщиеОформитьСогласноНастройке("КОформлениюРаботы");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюРаботыПроизводствоБезЗаказа(Команда)
	
	КОформлениюОбщиеПроизводствоБезЗаказа("КОформлениюРаботы");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюРаботыРаспределениеВозвратныхОтходов(Команда)
	
	КОформлениюОбщиеРаспределениеВозвратныхОтходов("КОформлениюРаботы");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюРаботыОбновить(Команда)
	
	КОформлениюОбщиеОбновить(Элементы.КОформлениюРаботы);
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюРаботыНастроитьМодель(Команда)
	
	КОформлениюОбщиеНастроитьМодель("КОформлениюРаботы");
	
КонецПроцедуры

&НаКлиенте
Процедура КОформлениюРаботыОчиститьМодель(Команда)
	
	КОформлениюОбщиеОчиститьМодель("КОформлениюРаботы");
	
КонецПроцедуры

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

#Область ОбработчикиКомандСтраницыКОформлениюОбщие

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

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

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

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

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

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

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

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