Структура предприятия / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
	
	ВариантОбособленногоУчетаТоваров = Перечисления.ВариантыОбособленногоУчетаТоваров.НеВедется;

	Если ЭтоНовый() Тогда
		Статус = Перечисления.СтатусыОрганизацийПодразделений.Действует;
	КонецЕсли;
	
КонецПроцедуры

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


		//-- Устарело_Производство21

		//-- НЕ УТ
		
		ТекущаяСсылка = Ссылка;
		
	КонецЕсли;
	
	ДополнительныеСвойства.Вставить("Ссылка", ТекущаяСсылка);
	//++ НЕ УТ
	ДополнительныеСвойства.Вставить("ИзменилсяПризнакПроизводственное", ИзменилсяПризнакПроизводственное);
	ДополнительныеСвойства.Вставить("РассчитатьДлительностьПроизводства",
		НеобходимоРассчитатьДлительностьПроизводства(Отказ));
	
	
	//-- НЕ УТ
	
	// Установка реквизита РеквизитДопУпорядочивания
	Если НЕ Отказ И РеквизитДопУпорядочивания = 0 Тогда
		
		УстановитьПривилегированныйРежим(Истина);
		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	Таблица.РеквизитДопУпорядочивания КАК РеквизитДопУпорядочивания
		|ИЗ
		|	Справочник.СтруктураПредприятия КАК Таблица
		|
		|УПОРЯДОЧИТЬ ПО
		|	РеквизитДопУпорядочивания УБЫВ");
		
		Выборка = Запрос.Выполнить().Выбрать();
		Выборка.Следующий();
		
		РеквизитДопУпорядочивания = ?(Не ЗначениеЗаполнено(Выборка.РеквизитДопУпорядочивания), 1, Выборка.РеквизитДопУпорядочивания + 1);
		
	КонецЕсли;
	
	Если Статус = Перечисления.СтатусыОрганизацийПодразделений.НеДействует И Не ЭтоНовый() Тогда
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("Ссылка", ТекущаяСсылка);
		Запрос.Текст =
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	СтруктураПредприятия.Ссылка КАК Ссылка
		|ИЗ
		|	Справочник.СтруктураПредприятия КАК СтруктураПредприятия
		|ГДЕ
		|	СтруктураПредприятия.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОрганизацийПодразделений.Действует)
		|	И СтруктураПредприятия.Родитель = &Ссылка";
		
		Если Не Запрос.Выполнить().Пустой() Тогда 
			ОбщегоНазначения.СообщитьПользователю(
				НСтр("ru = 'Существуют подчиненные действующие подразделения. Статус ""не действует"" не может быть установлен.'"),
				,
				"Статус",
				,
				Отказ);
		КонецЕсли;     
	КонецЕсли;
	Если ЗначениеЗаполнено(Родитель) 
		И Статус = Перечисления.СтатусыОрганизацийПодразделений.Действует
		И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Родитель, "Статус") = Перечисления.СтатусыОрганизацийПодразделений.НеДействует Тогда

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

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

//++ НЕ УТ

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

Процедура ПриЧтенииПредставленийНаСервере() Экспорт
	
	МультиязычностьСервер.ПриЧтенииПредставленийНаСервере(ЭтотОбъект);
	
КонецПроцедуры

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

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

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

//++ НЕ УТ

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

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

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

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

//++ Устарело_Производство21


//-- Устарело_Производство21

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

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

#КонецЕсли

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