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