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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ЗатратыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	РасшифроватьПоле(Поле.Имя, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗаполнитьФактическийОстатокПоУчетному(Команда)
	
	ЗаполнитьФактическийОстатокПоУчетномуСервер();
	
КонецПроцедуры

&НаКлиенте
Процедура КомандаОткрытьДокументРаспределения(Команда)
	
	ОткрытьДокументРаспределения();

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ДоступныеОрганизации(Организация = Неопределено)
	
	СписокОрганизаций = Новый СписокЗначений;
	Если НЕ ЗначениеЗаполнено(Организация) Тогда
		Запрос = Новый Запрос("
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	ДанныеСправочника.Ссылка КАК Организация
		|ИЗ
		|	Справочник.Организации КАК ДанныеСправочника
		|ГДЕ
		|	(ДанныеСправочника.Ссылка = &Организация
		|	ИЛИ &Организация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) ИЛИ &Организация = НЕОПРЕДЕЛЕНО)
		|");
		Запрос.УстановитьПараметр("Организация", Организация);
		МассивОрганизаций = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Организация");
		СписокОрганизаций.ЗагрузитьЗначения(МассивОрганизаций);
	Иначе
		СписокОрганизаций.Добавить(Организация);
	КонецЕсли;
	Возврат СписокОрганизаций;
	
КонецФункции

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

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

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

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

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

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

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

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

	//
	
	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Ложь, "ЗатратыСерия", "Затраты.СтатусУказанияСерий", "Затраты.ТипНоменклатуры");
	
	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//

	НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма, 
																			 "ЗатратыХарактеристика",
																		     "Затраты.ХарактеристикиИспользуются");

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла);

	//

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

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

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

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

	//

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

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

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

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

	// Без назначения, если назначение не заполнено.

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

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

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

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

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

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

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

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

&НаКлиенте
Функция РасшифроватьПоле(ИмяПоля, СтандартнаяОбработка = Ложь)

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

	Возврат Истина;
	
КонецФункции

&НаКлиенте
Процедура РасшифровкаЗатратыКРаспределению()

	ОткрытьДокументРаспределения();

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

&НаКлиенте
Процедура РасшифровкаЗатратыРаспределеноНаПроизводство()

	ОткрытьДокументРаспределения();

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

&НаКлиенте
Процедура РасшифровкаЗатратыСписаноНаРасходы()

	ОткрытьДокументРаспределения();

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

//++ Устарело_Производство21
&НаСервереБезКонтекста
Функция НастройкиОтчетаДвижениеМатериаловПолуфабрикатовРаботВПроизводстве(Знач Период, Знач Организация, Знач Подразделение)

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

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

КонецФункции
//-- Устарело_Производство21

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

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

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