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