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