#Если НЕ МобильныйАвтономныйСервер Тогда
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Функция НастройкиИспользованияСерий(ВидНоменклатуры, ПараметрыУказанияСерий = Неопределено, ЗначенияПолейСвязи = Неопределено) Экспорт
РеквизитыВидаНоменклатуры = Новый Структура;
РеквизитыНастройкиУказанияСерий = РеквизитыНастройкиУказанияСерий();
Для Каждого СтрМас Из РеквизитыНастройкиУказанияСерий Цикл
РеквизитыВидаНоменклатуры.Вставить(СтрМас);
КонецЦикла;
РеквизитыВидаНоменклатуры.Вставить("ВидНоменклатуры");
РеквизитыВидаНоменклатуры.Вставить("ОсобенностьУчета");
РеквизитыВидаНоменклатуры.Вставить("ИспользоватьСерии");
Если ТипЗнч(ВидНоменклатуры) <> Тип("СправочникСсылка.ВидыНоменклатуры") Тогда
ЗаполнитьЗначенияСвойств(РеквизитыВидаНоменклатуры, ВидНоменклатуры);
РеквизитыВидаНоменклатуры.ВидНоменклатуры = ВидНоменклатуры.Ссылка;
РеквизитыВидаНоменклатуры.ВладелецСерий = ?(ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,
ВидНоменклатуры.ВладелецСерий,
ВидНоменклатуры.Ссылка);
РеквизитыВидаНоменклатуры.ШаблонЭтикеткиСерии = ?(ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры,
ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(
ВидНоменклатуры.ВладелецСерий,
"ШаблонЭтикеткиСерии"),
ВидНоменклатуры.ШаблонЭтикеткиСерии);
Иначе
РеквизитыВидаНоменклатуры.ВидНоменклатуры = "Ссылка";
РеквизитыВидаНоменклатуры.ВладелецСерий =
"ВЫБОР
| КОГДА НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
| ТОГДА ВладелецСерий
| ИНАЧЕ Ссылка
| КОНЕЦ";
РеквизитыВидаНоменклатуры.ШаблонЭтикеткиСерии =
"ВЫБОР
| КОГДА НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
| ТОГДА ВладелецСерий.ШаблонЭтикеткиСерии
| ИНАЧЕ ШаблонЭтикеткиСерии
| КОНЕЦ";
ПоляВыборки = Новый Массив;
Для Каждого РеквизитВида Из РеквизитыВидаНоменклатуры Цикл
ИмяПоля = ?(ЗначениеЗаполнено(РеквизитВида.Значение),
РеквизитВида.Значение,
РеквизитВида.Ключ);
ПолеВыборки= "
| " + ИмяПоля + " КАК " + РеквизитВида.Ключ;
ПоляВыборки.Добавить(ПолеВыборки);
КонецЦикла;
ТекстВыборки = СтрСоединить(ПоляВыборки, ",");
ТекстЗапроса =
"ВЫБРАТЬ
|&ПоляВыборки
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| ВидыНоменклатуры.Ссылка = &Ссылка";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПоляВыборки", ТекстВыборки);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Ссылка", ВидНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(РеквизитыВидаНоменклатуры, Выборка);
КонецЕсли;
КонецЕсли;
НастройкиИспользованияСерий = НастройкиИспользованияСерийСоставПолей(Ложь);
ЗаполнитьЗначенияСвойств(НастройкиИспользованияСерий, РеквизитыВидаНоменклатуры);
ОписанияИспользованияРеквизитовСерии = ОписанияИспользованияРеквизитовСерии(НастройкиИспользованияСерий, ПараметрыУказанияСерий, ЗначенияПолейСвязи);
ДляСозданиеФиксированногоМассива = Новый Массив;
Для Каждого Описание Из ОписанияИспользованияРеквизитовСерии Цикл
ДляСозданиеФиксированногоМассива.Добавить(Новый ФиксированнаяСтруктура(Описание));
КонецЦикла;
НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии = Новый ФиксированныйМассив(ДляСозданиеФиксированногоМассива);
Если Не ЗначениеЗаполнено(НастройкиИспользованияСерий.ШаблонЭтикеткиСерии) Тогда
НастройкиИспользованияСерий.ШаблонЭтикеткиСерии
= Справочники.ШаблоныЭтикетокИЦенников.ШаблонПоУмолчанию(Перечисления.НазначенияШаблоновЭтикетокИЦенников.ЭтикеткаСерииНоменклатуры);
КонецЕсли;
Если ТипЗнч(ВидНоменклатуры) = Тип("СправочникСсылка.ВидыНоменклатуры")
И (ЗначениеЗаполнено(ЗначенияПолейСвязи)
И ЗначенияПолейСвязи.Свойство("Склад")
И (ЗначениеЗаполнено(ЗначенияПолейСвязи.Склад)
Или ИспользоватьПроизводство())) Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий, ЗНАЧЕНИЕ(Справочник.ПолитикиУчетаСерий.ПустаяСсылка)) КАК ПолитикаУчетаСерий,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПриемке, ЛОЖЬ) КАК УказыватьПриПоступлении,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриОтгрузке, ЛОЖЬ) КАК УказыватьПриОтгрузке,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки, ЛОЖЬ) КАК УказыватьПриПланированииОтгрузки,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчетСерийПоFEFO, ЛОЖЬ) КАК УчетСерийПоFEFO,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПоФактуОтбора, ЛОЖЬ) КАК УказыватьПоФактуОтбора,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьОстаткиСерий, ЛОЖЬ)
| И (ТЧПолитикиУчетаСерий.Склад ССЫЛКА Справочник.Склады ИЛИ &ЕстьПроизводство)КАК УчитыватьОстаткиСерий,
| ЕСТЬNULL(ТЧПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям, ЛОЖЬ)
| И (ТЧПолитикиУчетаСерий.Склад ССЫЛКА Справочник.Склады ИЛИ &ЕстьПроизводство)
| КАК УчитыватьСебестоимостьПоСериям
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ТЧПолитикиУчетаСерий
| ПО ВидыНоменклатуры.Ссылка = ТЧПолитикиУчетаСерий.Ссылка
| И (ТЧПолитикиУчетаСерий.Склад = &СкладПодразделение)
|ГДЕ
| ВидыНоменклатуры.Ссылка = &ВидНоменклатуры";
Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
Запрос.УстановитьПараметр("СкладПодразделение", ЗначенияПолейСвязи.Склад);
Запрос.УстановитьПараметр("ЕстьПроизводство", ИспользоватьПроизводство());
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(НастройкиИспользованияСерий, Выборка);
КонецЕсли;
Если ТипЗнч(ВидНоменклатуры) = Тип("СправочникСсылка.ВидыНоменклатуры") Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатурыРеквизитыДляКонтроляСерий.Свойство КАК Свойство
|ИЗ
| Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляСерий КАК ВидыНоменклатурыРеквизитыДляКонтроляСерий
|ГДЕ
| ВидыНоменклатурыРеквизитыДляКонтроляСерий.Ссылка = ВЫБОР
| КОГДА ВЫРАЗИТЬ(&ВидНоменклатуры КАК Справочник.ВидыНоменклатуры).НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
| ТОГДА ВЫРАЗИТЬ(&ВидНоменклатуры КАК Справочник.ВидыНоменклатуры).ВладелецСерий
| ИНАЧЕ &ВидНоменклатуры
| КОНЕЦ
| И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЭтоДопРеквизит
| И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЗаполнятьОбязательно";
Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
РеквизитыДляКонтроляСерий = Запрос.Выполнить().Выгрузить();
Иначе
Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатурыРеквизитыДляКонтроляСерий.Свойство КАК Свойство
|ИЗ
| Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляСерий КАК ВидыНоменклатурыРеквизитыДляКонтроляСерий
|ГДЕ
| ВидыНоменклатурыРеквизитыДляКонтроляСерий.Ссылка = &ВладелецСерий
| И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЭтоДопРеквизит
| И ВидыНоменклатурыРеквизитыДляКонтроляСерий.ЗаполнятьОбязательно";
Запрос.УстановитьПараметр("ВладелецСерий", ВидНоменклатуры.ВладелецСерий);
РеквизитыДляКонтроляСерий = Запрос.Выполнить().Выгрузить();
Иначе
РеквизитыДляКонтроляСерий = ВидНоменклатуры.РеквизитыДляКонтроляСерий.Выгрузить(
Новый Структура("ЭтоДопРеквизит,ЗаполнятьОбязательно", Истина, Истина));
КонецЕсли;
КонецЕсли;
НастройкиИспользованияСерий.ОбязательныеДопРеквизиты = Новый ФиксированныйМассив(РеквизитыДляКонтроляСерий.ВыгрузитьКолонку("Свойство"));
Возврат НастройкиИспользованияСерий;
КонецФункции
Функция ВидНоменклатурыПоУмолчанию() Экспорт
Текст =
"ВЫБРАТЬ ПЕРВЫЕ 2
| ВидыНоменклатуры.Ссылка КАК ВидНоменклатуры
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| НЕ ВидыНоменклатуры.ПометкаУдаления
| И НЕ ВидыНоменклатуры.ЭтоГруппа";
Запрос = Новый Запрос(Текст);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Неопределено;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество() = 1 Тогда
Выборка.Следующий();
ВидНоменклатуры = Выборка.ВидНоменклатуры;
Иначе
ВидНоменклатуры = Неопределено;
КонецЕсли;
Возврат ВидНоменклатуры;
КонецФункции
Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт
Результат = Новый Массив;
Результат.Добавить("ТипНоменклатуры");
Результат.Добавить("ОсобенностьУчета");
Результат.Добавить("ИспользованиеХарактеристик");
Результат.Добавить("ИспользоватьХарактеристики");
Результат.Добавить("НастройкиКлючаЦенПоХарактеристике");
Результат.Добавить("НастройкиКлючаЦенПоСерии");
Результат.Добавить("НастройкиКлючаЦенПоУпаковке");
Результат.Добавить("ИспользоватьСерии; ВариантЗаданияНастроекСерий");
Результат.Добавить("ПолитикиУчетаСерий; ПолитикиУчетаСерийДобавитьСкладВПолитикиУчетаСерий,ПолитикиУчетаСерийДобавитьПодразделениеВПолитикиУчетаСерий");
Результат.Добавить("НастройкаИспользованияСерий");
Результат.Добавить("ТочностьУказанияСрокаГодностиСерии");
Результат.Добавить("ВариантОформленияПродажи");
Результат.Добавить("ВариантПредставленияНабораВПечатныхФормах");
Результат.Добавить("ВариантРасчетаЦеныНабора;ГруппаЦенаНабора");
Результат.Добавить("ВладелецХарактеристик");
Результат.Добавить("ВладелецСерий");
Результат.Добавить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
Результат.Добавить("ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры");
Результат.Добавить("ВладелецТоварныхКатегорий; НастройкаТоварныхКатегорий");
Результат.Добавить("ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий; ЕстьИндивидуальныеНастройкиПолитикиУчетаСерий");
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, Справочники.Номенклатура.РеквизитыПризнаковОсобенностейУчета(Метаданные.Справочники.ВидыНоменклатуры));
Возврат Результат;
КонецФункции
Функция ПолучитьПредустановленныеВидыНоменклатуры() Экспорт
УстановитьПривилегированныйРежим(Истина);
МассивВидов = Новый Массив;
ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Перечисления.ТипыНоменклатуры.Товар, НСтр("ru = 'Товар'"));
ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Перечисления.ТипыНоменклатуры.Услуга, НСтр("ru = 'Услуга'"));
Возврат МассивВидов;
КонецФункции
Процедура ДобавитьПредустановленныйВидНоменклатуры(МассивВидов, Тип, Имя) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВидыНоменклатуры.Ссылка
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| ВидыНоменклатуры.ТипНоменклатуры = &Тип
| И НЕ ВидыНоменклатуры.ПометкаУдаления";
Запрос.УстановитьПараметр("Тип", Тип);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
НовыйВид = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
НовыйВид.Заполнить(Неопределено);
НовыйВид.Наименование = Имя;
НовыйВид.ТипНоменклатуры = Тип;
Если ПолучитьФункциональнуюОпцию("ИспользоватьГруппыДоступаНоменклатуры") Тогда
НовыйВид.ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(НовыйВид);
КонецЕсли;
НовыйВид.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
ЗаполнитьРеквизитыДляКонтроля(НовыйВид, "Номенклатура");
НастройкаЕдИзмерения = НовыйВид.РеквизитыДляКонтроляНоменклатуры.Найти("ЕдиницаИзмерения");
Если НастройкаЕдИзмерения <> Неопределено Тогда
НастройкаЕдИзмерения.ОтображатьПриСоздании = Истина;
НастройкаЕдИзмерения.ЗаполнятьОбязательно = Истина;
КонецЕсли;
НовыйВид.ЕдиницаИзмерения = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
НовыйВид.ЕдиницаДляОтчетов = Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка();
НовыйВид.Записать();
МассивВидов.Добавить(НовыйВид.Ссылка);
Иначе
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
МассивВидов.Добавить(Выборка.Ссылка);
КонецЕсли;
КонецПроцедуры
Процедура СоздатьВидНоменклатуры(ДанныеЗаполнения, ВидНоменклатурыСсылка) Экспорт
ВидНоменклатурыОбъект = Справочники.ВидыНоменклатуры.СоздатьЭлемент();
ВидНоменклатурыОбъект.Заполнить(Неопределено);
ВидНоменклатурыОбъект.УстановитьНовыйКод();
ВидНоменклатурыОбъект.Наименование = ДанныеЗаполнения.Наименование;
ВидНоменклатурыОбъект.СтавкаНДС = ДанныеЗаполнения.СтавкаНДС;
ВидНоменклатурыОбъект.ТипНоменклатуры = ДанныеЗаполнения.ТипНоменклатуры;
ВидНоменклатурыОбъект.Описание = ДанныеЗаполнения.Описание;
ВидНоменклатурыОбъект.ЕдиницаИзмерения = ДанныеЗаполнения.ЕдиницаИзмерения;
ВидНоменклатурыОбъект.ЕдиницаДляОтчетов = ДанныеЗаполнения.ЕдиницаДляОтчетов;
ВидНоменклатурыОбъект.Родитель = ДанныеЗаполнения.Родитель;
ВидНоменклатурыОбъект.ИспользоватьХарактеристики = ДанныеЗаполнения.ИспользоватьХарактеристики;
ВидНоменклатурыОбъект.ИспользованиеХарактеристик = ДанныеЗаполнения.ИспользованиеХарактеристик;
ВидНоменклатурыОбъект.ВариантОформленияПродажи = ДанныеЗаполнения.ВариантОформленияПродажи;
Если Справочники.ГруппыДоступаНоменклатуры.ИспользуютсяГруппыДоступа() Тогда
ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(ВидНоменклатурыОбъект);
ДанныеЗаполнения.Свойство("ГруппаДоступа", ГруппаДоступа);
ВидНоменклатурыОбъект.ГруппаДоступа = ГруппаДоступа;
КонецЕсли;
ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатурыОбъект, "Номенклатура");
НастройкаЕдИзмерения = ВидНоменклатурыОбъект.РеквизитыДляКонтроляНоменклатуры.Найти("ЕдиницаИзмерения");
Если НастройкаЕдИзмерения <> Неопределено Тогда
НастройкаЕдИзмерения.ОтображатьПриСоздании = Истина;
НастройкаЕдИзмерения.ЗаполнятьОбязательно = Истина;
КонецЕсли;
ВидНоменклатурыОбъект.Записать();
ВидНоменклатурыСсылка = ВидНоменклатурыОбъект.Ссылка;
КонецПроцедуры
Функция ЕдиницаИзмеренияСрокаГодности(ТочностьУказанияСрокаГодности) Экспорт
ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.ПустаяСсылка();
Если ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоМесяцев Тогда
ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Месяц;
ИначеЕсли ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней Тогда
ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Сутки;
ИначеЕсли ТочностьУказанияСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоЧасов Тогда
ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.Час;
КонецЕсли;
Возврат ЕдиницаИзмеренияСрокаГодности;
КонецФункции
Функция ПолучитьРеквизитыДляКлючаЦен(Знач ВидНоменклатуры, Знач РазрезКлюча) Экспорт
Если РазрезКлюча = "Характеристики" Тогда
ИмяТаблицы = "РеквизитыХарактеристикДляКлючаЦен";
ИначеЕсли РазрезКлюча = "Серии" Тогда
ИмяТаблицы = "РеквизитыСерийДляКлючаЦен";
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатурыРеквизитыДляКлючаЦен.ИмяРеквизита,
| ВидыНоменклатурыРеквизитыДляКлючаЦен.ЭтоДопРеквизит,
| ВидыНоменклатурыРеквизитыДляКлючаЦен.Свойство,
| ВидыНоменклатурыРеквизитыДляКлючаЦен.Используется,
| Неопределено КАК Значение
|ИЗ
| &ИмяТаблицы КАК ВидыНоменклатурыРеквизитыДляКлючаЦен
|ГДЕ
| ВидыНоменклатурыРеквизитыДляКлючаЦен.Ссылка = &ВидНоменклатуры
| И ВидыНоменклатурыРеквизитыДляКлючаЦен.Используется";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ИмяТаблицы", "Справочник.ВидыНоменклатуры." + ИмяТаблицы);
Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
РеквизитыДляКлючаЦен = Запрос.Выполнить().Выгрузить();
Возврат РеквизитыДляКлючаЦен
КонецФункции
#Область Команды
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
#КонецОбласти
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтение
|ГДЕ ИСТИНА
|;
|РазрешитьИзменениеЕслиРазрешеноЧтение
|ГДЕ
| ЭтоГруппа ИЛИ
| ЗначениеРазрешено(Ссылка)";
КонецПроцедуры
#КонецОбласти
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
НоменклатураВызовСервера.ВидыНоменклатурыОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныеПроцедурыИФункции
#Область ОбновлениеИнформационнойБазы
Процедура ПослеЗагрузкиДанных(Контейнер) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатуры.Ссылка
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| (ВидыНоменклатуры.ЗапретРедактированияНаименованияДляПечатиНоменклатуры
| ИЛИ ВидыНоменклатуры.ЗапретРедактированияНаименованияДляПечатиХарактеристики
| ИЛИ ВидыНоменклатуры.ЗапретРедактированияРабочегоНаименованияНоменклатуры
| ИЛИ ВидыНоменклатуры.ЗапретРедактированияРабочегоНаименованияХарактеристики)";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
СправочникОбъект.ЗапретРедактированияНаименованияДляПечатиНоменклатуры = Ложь;
СправочникОбъект.ЗапретРедактированияНаименованияДляПечатиХарактеристики = Ложь;
СправочникОбъект.ЗапретРедактированияРабочегоНаименованияНоменклатуры = Ложь;
СправочникОбъект.ЗапретРедактированияРабочегоНаименованияХарактеристики = Ложь;
СправочникОбъект.Записать();
КонецЦикла;
КонецПроцедуры
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
Обработчик = Обработчики.Добавить();
Обработчик.Процедура = "Справочники.ВидыНоменклатуры.ОбработатьДанныеДляПереходаНаНовуюВерсию";
Обработчик.Версия = "11.5.23.25";
Обработчик.РежимВыполнения = "Отложенно";
Обработчик.Идентификатор = Новый УникальныйИдентификатор("0bd0e232-2e00-4bef-be9f-49c3b155bffe");
Обработчик.Многопоточный = Истина;
Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.ВидыНоменклатуры.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Виды номенклатуры"":'"));
СписокОписаний.Добавить(НСтр("ru = '- удаление реквизита ""УдалитьКодОКВЭД2"" из табличной части ""Реквизиты для контроля номенклатуры""';"));
Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
Читаемые = Новый Массив;
Читаемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
Изменяемые = Новый Массив;
Изменяемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
Блокируемые = Новый Массив;
Блокируемые.Добавить(Метаданные.Справочники.ВидыНоменклатуры.ПолноеИмя());
Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");
КонецПроцедуры
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
ПараметрыВыборки = Параметры.ПараметрыВыборки;
ПараметрыВыборки.ПолныеИменаОбъектов = ПустаяСсылка().Метаданные().ПолноеИмя();
ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиСсылки();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры
|ГДЕ
| ВидыНоменклатурыРеквизитыДляКонтроляНоменклатуры.ИмяРеквизита = ""УдалитьКодОКВЭД2""";
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Параметры.ОбработкаЗавершена = Ложь;
ПолноеИмяОбъекта = ПустаяСсылка().Метаданные().ПолноеИмя();
ОбновляемыеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
Если ОбновляемыеДанные.Количество() = 0 Тогда
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
Возврат;
КонецЕсли;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
ИсключенияПриОбновлении = Новый Массив;
СписокОписаний = Новый Массив;
СписокОписаний.Добавить(НСтр("ru = 'Не удалось обработать справочник ""Виды номенклатуры"" по обработчику:'"));
СписокОписаний.Добавить(НСтр("ru = '- удаление реквизита ""УдалитьКодОКВЭД2"" из табличной части ""Реквизиты для контроля номенклатуры""';"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДанныеДляОбновления.Ссылка КАК Ссылка
|ПОМЕСТИТЬ ТаблицаЭлементов
|ИЗ
| &ДанныеДляОбновления КАК ДанныеДляОбновления
|;
|
|
|ВЫБРАТЬ
| ТаблицаЭлементов.Ссылка КАК Ссылка,
| ДанныеСправочника.ВерсияДанных КАК ВерсияДанных,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ОтображатьПриСоздании, Ложь) КАК ОтображатьПриСозданииУдалитьКодОКВЭД2,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ЗаполнятьОбязательно, Ложь) КАК ЗаполнятьОбязательноУдалитьКодОКВЭД2,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.Уникален, Ложь) КАК УникаленУдалитьКодОКВЭД2,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ОтображатьПриСоздании, Ложь) КАК ОтображатьПриСозданииКодОКВЭД2,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ЗаполнятьОбязательно, Ложь) КАК ЗаполнятьОбязательноКодОКВЭД2,
| ЕСТЬNULL(ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.Уникален, Ложь) КАК УникаленКодОКВЭД2
|ИЗ
| ТаблицаЭлементов КАК ТаблицаЭлементов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры КАК ДанныеСправочника
| ПО (ТаблицаЭлементов.Ссылка = ДанныеСправочника.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2
| ПО (ТаблицаЭлементов.Ссылка = ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.Ссылка)
| И (ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыУдалитьКодОКВЭД2.ИмяРеквизита = ""УдалитьКодОКВЭД2"")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.РеквизитыДляКонтроляНоменклатуры КАК ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2
| ПО (ТаблицаЭлементов.Ссылка = ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.Ссылка)
| И (ВидыНоменклатурыРеквизитыДляКонтроляНоменклатурыКодОКВЭД2.ИмяРеквизита = ""КодОКВЭД2"")
|";
Запрос.УстановитьПараметр("ДанныеДляОбновления", ОбновляемыеДанные);
Справочник = Запрос.Выполнить().Выбрать();
Пока Справочник.Следующий() Цикл
ПричинаИсключения = 0;
Рекомендация = "";
НачатьТранзакцию();
Попытка
ПричинаИсключения = 1;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
ЭлементБлокировки.УстановитьЗначение("Ссылка", Справочник.Ссылка);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
СправочникОбъект = ОбновлениеИнформационнойБазыУТ.ПроверитьПолучитьОбъект(
Справочник.Ссылка, Справочник.ВерсияДанных, Параметры.Очередь);
ПричинаИсключения = 2;
Рекомендация = НСтр("ru = 'Проверьте данные справочника вручную.'");
ОбъектИзменен = Ложь;
Если СправочникОбъект <> Неопределено Тогда
Если (Не Справочник.ОтображатьПриСозданииКодОКВЭД2
И Не Справочник.ЗаполнятьОбязательноКодОКВЭД2
И Не Справочник.УникаленКодОКВЭД2)
И (Не Справочник.ОтображатьПриСозданииУдалитьКодОКВЭД2
Или Не Справочник.ЗаполнятьОбязательноУдалитьКодОКВЭД2
Или Не Справочник.УникаленУдалитьКодОКВЭД2) Тогда
НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "КодОКВЭД2"));
Если НайденныеСтроки.Количество() > 0 Тогда
НайденныеСтроки[0].ОтображатьПриСоздании = Справочник.ОтображатьПриСозданииУдалитьКодОКВЭД2;
НайденныеСтроки[0].ЗаполнятьОбязательно = Справочник.ЗаполнятьОбязательноУдалитьКодОКВЭД2;
НайденныеСтроки[0].Уникален = Справочник.УникаленУдалитьКодОКВЭД2;
КонецЕсли;
КонецЕсли;
НайденныеСтроки = СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("ИмяРеквизита", "УдалитьКодОКВЭД2"));
Если НайденныеСтроки.Количество() > 0 Тогда
СправочникОбъект.РеквизитыДляКонтроляНоменклатуры.Удалить(НайденныеСтроки[0]);
КонецЕсли;
ОбъектИзменен = Истина;
КонецЕсли;
ПричинаИсключения = 3;
Если ОбъектИзменен Тогда
ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект);
Иначе
ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Справочник.Ссылка);
КонецЕсли;
ОбъектовОбработано = ОбъектовОбработано + 1;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(ИнформацияОбОшибке(), Справочник.Ссылка);
Если ПричинаИсключения = 2 Тогда
ОписаниеПроблемы = ОбновлениеИнформационнойБазыУТ.ПроблемаСДанными(
Справочник.Ссылка, Рекомендация, ИнформацияОбОшибке());
ИсключенияПриОбновлении.Добавить(ОписаниеПроблемы);
ИначеЕсли ПричинаИсключения = 3 Тогда
ОбновлениеИнформационнойБазыУТ.ЗаписатьПлохиеДанные(
ИсключенияПриОбновлении, ОбъектовОбработано, Параметры);
ВызватьИсключение СтрСоединить(СписокОписаний, Символы.ПС);
КонецЕсли;
КонецПопытки;
КонецЦикла;
Параметры.ОбработкаЗавершена =
ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);
КонецПроцедуры
#КонецОбласти
#Область Прочее
Процедура ОтработатьЛогикуСвязиРеквизитов(ВидНоменклатуры) Экспорт
РеквизитыПризнаковОсобенностейУчета = Справочники.Номенклатура.РеквизитыПризнаковОсобенностейУчета(Метаданные.Справочники.ВидыНоменклатуры);
Для Каждого ИмяРеквизита Из РеквизитыПризнаковОсобенностейУчета Цикл
ВидНоменклатуры[ИмяРеквизита] = ВидНоменклатуры.ОсобенностьУчета =
ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяРеквизита);
КонецЦикла;
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ОсобенностьУчета) Тогда
Если ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Услуга Тогда
ВидНоменклатуры.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.ОрганизациейПродавцом;
Иначе
ВидНоменклатуры.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета;
КонецЕсли;
КонецЕсли;
ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета();
ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета.Получить(ВидНоменклатуры.ОсобенностьУчета);
Если ЗначенияРеквизитов <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитов);
КонецЕсли;
ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецХарактеристик");
ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецСерий");
ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, "ВладелецТоварныхКатегорий");
ИспользованиеРеквизитов = Справочники.Номенклатура.ИспользованиеЭлементов(ВидНоменклатуры,Ложь,Истина);
МетаданныеОбъекта = Метаданные.Справочники.ВидыНоменклатуры;
Для каждого КлючЗначение Из ИспользованиеРеквизитов Цикл
Если Не КлючЗначение.Значение Тогда
Если МетаданныеОбъекта.Реквизиты.Найти(КлючЗначение.Ключ) <> Неопределено Тогда
ВидНоменклатуры[КлючЗначение.Ключ] = Неопределено;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Не ВидНоменклатуры.ИспользоватьХарактеристики Тогда
ВидНоменклатуры.ИспользованиеХарактеристик = ПредопределенноеЗначение("Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать");
ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики = "";
ВидНоменклатуры.ШаблонРабочегоНаименованияХарактеристики = "";
ВидНоменклатуры.ЗапретРедактированияНаименованияДляПечатиХарактеристики = Ложь;
ВидНоменклатуры.ЗапретРедактированияРабочегоНаименованияХарактеристики = Ложь;
ВидНоменклатуры.ВладелецХарактеристик = Неопределено;
КонецЕсли;
Если ВидНоменклатуры.ИспользованиеХарактеристик <> Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры Тогда
ВидНоменклатуры.ВладелецХарактеристик = Справочники.ВидыНоменклатуры.ПустаяСсылка();
КонецЕсли;
Если Не ВидНоменклатуры.ИспользоватьСерии Тогда
ЗначенияРеквизитовПоУмолчанию = ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(Справочники.ВидыНоменклатуры.ПустаяСсылка(),
РеквизитыНастройкиУказанияСерий());
ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитовПоУмолчанию);
ВидНоменклатуры.ПолитикаУчетаСерий = Справочники.ПолитикиУчетаСерий.СерииНеИспользуются;
ВидНоменклатуры.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
ВидНоменклатуры.ПолитикиУчетаСерий.Очистить();
Иначе
Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры
И (ТипЗнч(ВидНоменклатуры) = Тип("СправочникОбъект.ВидыНоменклатуры")
И Не ВидНоменклатуры.ДополнительныеСвойства.Свойство("ПропуститьЗаполнениеТЧПолитикиУчетаСерий")) Тогда
РеквизитыВладельцаСерий = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецСерий,
РеквизитыНастройкиУказанияСерий());
ЗаполнитьЗначенияСвойств(ВидНоменклатуры, РеквизитыВладельцаСерий,,"ВладелецСерий,НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВидыНоменклатурыПолитикиУчетаСерий.Склад,
| ВидыНоменклатурыПолитикиУчетаСерий.ПолитикаУчетаСерий
|ИЗ
| Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ВидыНоменклатурыПолитикиУчетаСерий
|ГДЕ
| ВидыНоменклатурыПолитикиУчетаСерий.Ссылка = &ВладелецСерий";
Запрос.УстановитьПараметр("ВладелецСерий", ВидНоменклатуры.ВладелецСерий);
ВидНоменклатуры.ПолитикиУчетаСерий.Загрузить(Запрос.Выполнить().Выгрузить());
Иначе
НастройкиИспользованияСерий = НастройкиИспользованияСерий(ВидНоменклатуры);
Для Каждого Описание Из НастройкиИспользованияСерий.ОписанияИспользованияРеквизитовСерии Цикл
Если Не ПустаяСтрока(Описание.ОсобенностиУчета) Тогда
ИменаОсобенностей = СтрРазделить(Описание.ОсобенностиУчета, ",");
НадоОчистить = Истина;
Для Каждого ИмяОсобенности Из ИменаОсобенностей Цикл
Если ВидНоменклатуры.ОсобенностьУчета = ПредопределенноеЗначение("Перечисление.ОсобенностиУчетаНоменклатуры." + ИмяОсобенности) Тогда
НадоОчистить = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если НадоОчистить Тогда
ВидНоменклатуры[Описание.ИмяНастройки] = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ВидНоменклатуры.ИспользоватьКоличествоСерии = (ВидНоменклатуры.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров);
Если ВидНоменклатуры.НастройкаИспользованияСерий <> Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда
ВидНоменклатуры.ИспользоватьRFIDМеткиСерии = Ложь;
КонецЕсли;
Если Не ВидНоменклатуры.ИспользоватьСрокГодностиСерии
И Не ВидНоменклатуры.ИспользоватьДатуПроизводстваСерии Тогда
ВидНоменклатуры.ЕдиницаИзмеренияСрокаГодности = Перечисления.ЕдиницыИзмеренияВремени.ПустаяСсылка();
ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.ПустаяСсылка();
Иначе
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии) Тогда
ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии = Перечисления.ТочностиУказанияСрокаГодности.СТочностьюДоДней;
КонецЕсли;
ВидНоменклатуры.ЕдиницаИзмеренияСрокаГодности = Справочники.ВидыНоменклатуры.ЕдиницаИзмеренияСрокаГодности(
ВидНоменклатуры.ТочностьУказанияСрокаГодностиСерии);
КонецЕсли;
Если Не ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры Тогда
ВидНоменклатуры.ВладелецСерий = Справочники.ВидыНоменклатуры.ПустаяСсылка();
КонецЕсли;
Если Не ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий) Тогда
ВидНоменклатуры.АвтоматическиГенерироватьСерии = Ложь;
КонецЕсли;
Если ВидНоменклатуры.АвтоматическиГенерироватьСерии Тогда
ВидНоменклатуры.ИспользоватьНомерСерии = Ложь;
КонецЕсли;
ПараметрыОтбораПолитики = НоменклатураКлиентСервер.ПараметрыОтбораПолитикУчетаСерий();
ЗаполнитьЗначенияСвойств(ПараметрыОтбораПолитики, ВидНоменклатуры);
Если ЗначениеЗаполнено(ВидНоменклатуры.ПолитикаУчетаСерий)
И ВидНоменклатуры.ПолитикаУчетаСерий <> Справочники.ПолитикиУчетаСерий.СерииНеИспользуются Тогда
ОтборПолитик = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитики);
Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(ВидНоменклатуры.ПолитикаУчетаСерий, ОтборПолитик) Тогда
ВидНоменклатуры.ПолитикаУчетаСерий = Справочники.ПолитикиУчетаСерий.СерииНеИспользуются;
КонецЕсли;
КонецЕсли;
Для Каждого СтрТабл Из ВидНоменклатуры.ПолитикиУчетаСерий Цикл
Если СтрТабл.ПолитикаУчетаСерий <> Справочники.ПолитикиУчетаСерий.СерииНеИспользуются Тогда
ПараметрыОтбораПолитики.Склад = СтрТабл.Склад;
ОтборПолитик = НоменклатураСервер.ОтборПолитикУчетаСерийПоПараметрам(ПараметрыОтбораПолитики);
Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(СтрТабл.ПолитикаУчетаСерий, ОтборПолитик) Тогда
СтрТабл.ПолитикаУчетаСерий = ВидНоменклатуры.ПолитикаУчетаСерий;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если Не ВидНоменклатуры.ТоварныеКатегорииОбщиеСДругимВидомНоменклатуры Тогда
ВидНоменклатуры.ВладелецТоварныхКатегорий = Справочники.ВидыНоменклатуры.ПустаяСсылка();
КонецЕсли;
ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатуры, "Номенклатура");
ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "Номенклатура");
ЗаполнитьРеквизитыДляКонтроля(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
ЗаполнитьДопРеквизитыДляКонтроляИОтбора(ВидНоменклатуры, "СерииНоменклатуры");
КонтролироватьДублиНоменклатуры = ВидНоменклатуры.РеквизитыДляКонтроляНоменклатуры.НайтиСтроки(Новый Структура("Уникален", Истина)).Количество() > 0;
КонецПроцедуры
Процедура ЗаполнитьРеквизитыПоУмолчанию(ВидНоменклатуры) Экспорт
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ГруппаДоступа) Тогда
ВидНоменклатуры.ГруппаДоступа = Справочники.ГруппыДоступаНоменклатуры.ПолучитьГруппуДоступаПоУмолчанию(ВидНоменклатуры);
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ТипНоменклатуры)
И Не Перечисления.ОсобенностиУчетаНоменклатуры.ОднаИзОсобенностейВключена() Тогда
ВидНоменклатуры.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар;
КонецЕсли;
Если ПустаяСтрока(ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры) Тогда
ВидНоменклатуры.ШаблонНаименованияДляПечатиНоменклатуры = "[Наименование]";
КонецЕсли;
ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета();
ЗначенияРеквизитов = ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета.Получить(ВидНоменклатуры.ОсобенностьУчета);
Если ЗначенияРеквизитов <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(ВидНоменклатуры, ЗначенияРеквизитов);
КонецЕсли;
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ВариантОформленияПродажи) Тогда
ВидНоменклатуры.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг;
КонецЕсли;
Если ВидНоменклатуры.ИспользоватьСерии Тогда
Если Не ЗначениеЗаполнено(ВидНоменклатуры.НастройкаИспользованияСерий) Тогда
ВидНоменклатуры.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ПартияТоваров;
КонецЕсли;
Если Не ВидНоменклатуры.ИспользоватьНомерСерии
И Не ВидНоменклатуры.ИспользоватьСрокГодностиСерии Тогда
ВидНоменклатуры.ИспользоватьНомерСерии = Истина;
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 2
| ВидыНоменклатуры.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВидыНоменклатуры КАК ВидыНоменклатуры
|ГДЕ
| НЕ ВидыНоменклатуры.ПометкаУдаления
| И ВидыНоменклатуры.Ссылка <> &Ссылка
| И &ТекстУсловияОтбора";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", ВидНоменклатуры.Ссылка);
ОтборВладельцаСерий = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(ВидНоменклатуры, "ВладелецСерий");
Если ОтборВладельцаСерий.Количество() > 0 Тогда
МассивТекстовУсловия = Новый Массив;
Для Каждого КлючЗначение Из ОтборВладельцаСерий Цикл
Если ТипЗнч(КлючЗначение.Значение) = Тип("Массив")
Или ТипЗнч(КлючЗначение.Значение) = Тип("ФиксированныйМассив") Тогда
МассивТекстовУсловия.Добавить("ВидыНоменклатуры." + КлючЗначение.Ключ + " В(&" +КлючЗначение.Ключ + ")");
Иначе
МассивТекстовУсловия.Добавить("ВидыНоменклатуры." + КлючЗначение.Ключ + " = &" +КлючЗначение.Ключ);
КонецЕсли;
Запрос.УстановитьПараметр(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияОтбора", СтрСоединить(МассивТекстовУсловия, " И "));
Иначе
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ТекстУсловияОтбора", "ИСТИНА");
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество() = 1 Тогда
Выборка.Следующий();
ВидНоменклатуры.ВладелецСерий = Выборка.Ссылка;
ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Истина;
Иначе
ВидНоменклатуры.ВладелецСерий = Неопределено;
ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры = Ложь;
КонецЕсли;
КонецЕсли;
Если ВидНоменклатуры.ИспользоватьХарактеристики Тогда
Если Не ЗначениеЗаполнено(ВидНоменклатуры.ИспользованиеХарактеристик)
Или ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда
ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры;
КонецЕсли;
Если ПустаяСтрока(ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики) Тогда
ВидНоменклатуры.ШаблонНаименованияДляПечатиХарактеристики = "[Наименование]";
КонецЕсли;
КонецЕсли;
УстановитьРеквизитыЦенообразованияПоУмолчанию(ВидНоменклатуры);
НоменклатураЛокализация.ЗаполнитьРеквизитыВидаНоменклатурыПоУмолчанию(ВидНоменклатуры);
КонецПроцедуры
Функция ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета() Экспорт
ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета = Новый Соответствие;
НоменклатураЛокализация.ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета(ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета);
Возврат ЗначенияРеквизитовСтрогоЗаполняемыеПоОсобенностямУчета;
КонецФункции
Функция РеквизитыНастройкиУказанияСерий()
РеквизитыНастройкиУказанияСерий = Новый Массив;
РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьНомерСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьСрокГодностиСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьRFIDМеткиСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьДатуПроизводстваСерии");
РеквизитыНастройкиУказанияСерий.Добавить("НастройкаИспользованияСерий");
РеквизитыНастройкиУказанияСерий.Добавить("АвтоматическиГенерироватьСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ВладелецСерий");
РеквизитыНастройкиУказанияСерий.Добавить("ШаблонЭтикеткиСерии");
РеквизитыНастройкиУказанияСерий.Добавить("НастройкиСерийБерутсяИзДругогоВидаНоменклатуры");
РеквизитыНастройкиУказанияСерий.Добавить("ШаблонРабочегоНаименованияСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ЕдиницаИзмеренияСрокаГодности");
РеквизитыНастройкиУказанияСерий.Добавить("ТочностьУказанияСрокаГодностиСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ИспользоватьКоличествоСерии");
РеквизитыНастройкиУказанияСерий.Добавить("ПолитикаУчетаСерий");
РеквизитыНастройкиУказанияСерий.Добавить("НастройкиКлючаЦенПоСерии");
НоменклатураЛокализация.РеквизитыНастройкиУказанияСерий(РеквизитыНастройкиУказанияСерий);
Возврат РеквизитыНастройкиУказанияСерий;
КонецФункции
Функция НастройкиИспользованияСерийСоставПолей(ТолькоРеквизитыВида)
НастройкиИспользованияСерийСоставПолей = Новый Структура;
НастройкиИспользованияСерийСоставПолей = ОбщегоНазначенияУТ.ЗначенияРеквизитовОбъектаПоУмолчанию(
Справочники.ВидыНоменклатуры.ПустаяСсылка(),
РеквизитыНастройкиУказанияСерий());
НастройкиИспользованияСерийСоставПолей.Вставить("ВидНоменклатуры", Справочники.ВидыНоменклатуры.ПустаяСсылка());
НастройкиИспользованияСерийСоставПолей.Вставить("ОсобенностьУчета", Перечисления.ОсобенностиУчетаНоменклатуры.ПустаяСсылка());
НастройкиИспользованияСерийСоставПолей.Вставить("ИспользоватьСерии", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("НастройкиКлючаЦенПоСерии", Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать);
Если Не ТолькоРеквизитыВида Тогда
НастройкиИспользованияСерийСоставПолей.Вставить("ПолитикаУчетаСерий", Справочники.ПолитикиУчетаСерий.ПустаяСсылка());
НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриПоступлении", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриОтгрузке", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПриПланированииОтгрузки", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УчетСерийПоFEFO", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УказыватьПоФактуОтбора", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УчитыватьОстаткиСерий", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("УчитыватьСебестоимостьПоСериям", Ложь);
НастройкиИспользованияСерийСоставПолей.Вставить("ОбязательныеДопРеквизиты", Новый ФиксированныйМассив(Новый Массив));
НастройкиИспользованияСерийСоставПолей.Вставить("ОписанияИспользованияРеквизитовСерии", Новый ФиксированныйМассив(Новый Массив));
КонецЕсли;
Возврат НастройкиИспользованияСерийСоставПолей;
КонецФункции
Функция ОписанияИспользованияРеквизитовСерии(НастройкиИспользованияСерий = Неопределено, ПараметрыУказанияСерий = Неопределено, ЗначенияПолейСвязи = Неопределено) Экспорт
ОписанияИспользованияРеквизитовСерии = Новый Массив;
Если НастройкиИспользованияСерий = Неопределено Тогда
НастройкиИспользованияСерий = НастройкиИспользованияСерийСоставПолей(Истина);
Иначе
ФорматнаяСтрокаСрокаГодности = "";
КонецЕсли;
ФорматнаяСтрокаСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.ФорматнаяСтрока(НастройкиИспользованияСерий.ТочностьУказанияСрокаГодностиСерии);
ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности = Перечисления.ТочностиУказанияСрокаГодности.ПредставлениеФорматнойСтроки(НастройкиИспользованияСерий.ТочностьУказанияСрокаГодностиСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "Номер";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьНомерСерии";
ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = '%Номер%'");
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "ДатаПроизводства";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьДатуПроизводстваСерии";
ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = 'от %ДатаПроизводства%'");
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.Формат = ФорматнаяСтрокаСрокаГодности;
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеФорматнойСтрокиВЗаголовке = ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "ГоденДо";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьСрокГодностиСерии";
ОписаниеИспользованиеРеквизитаСерии.ТекстШаблонаНаименования = НСтр("ru = 'до %ГоденДо%'");
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.Формат = ФорматнаяСтрокаСрокаГодности;
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеФорматнойСтрокиВЗаголовке = ПредставлениеФорматнойСтрокиВЗаголовкеСрокаГодности;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDTID";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDUser";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDEPC";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.ПроверятьЗаполнение = Истина;
ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "EPCGTIN";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
ОписаниеИспользованиеРеквизитаСерии = ОписаниеИспользованиеРеквизитаСерии();
ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита = "RFIDМеткаНеЧитаемая";
ОписаниеИспользованиеРеквизитаСерии.ПредставлениеРеквизита
= Метаданные.Справочники.СерииНоменклатуры.Реквизиты.Найти(ОписаниеИспользованиеРеквизитаСерии.ИмяРеквизита).Представление();
ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки = "ИспользоватьRFIDМеткиСерии";
ОписаниеИспользованиеРеквизитаСерии.Использование = НастройкиИспользованияСерий[ОписаниеИспользованиеРеквизитаСерии.ИмяНастройки];
ОписаниеИспользованиеРеквизитаСерии.МожноРедактировать = Ложь;
ОписанияИспользованияРеквизитовСерии.Добавить(ОписаниеИспользованиеРеквизитаСерии);
НоменклатураЛокализация.ОписаниеИспользованияРеквизитовСерии(ОписанияИспользованияРеквизитовСерии, НастройкиИспользованияСерий, ПараметрыУказанияСерий, ЗначенияПолейСвязи);
Возврат ОписанияИспользованияРеквизитовСерии;
КонецФункции
Функция ОписаниеИспользованиеРеквизитаСерии() Экспорт
ОписаниеИспользованиеРеквизитаСерии = Новый Структура;
ОписаниеИспользованиеРеквизитаСерии.Вставить("ИмяРеквизита");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ПредставлениеРеквизита");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ИмяНастройки");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ТекстШаблонаНаименования");
ОписаниеИспользованиеРеквизитаСерии.Вставить("Использование", Ложь);
ОписаниеИспользованиеРеквизитаСерии.Вставить("ОсобенностиУчета", "");
ОписаниеИспользованиеРеквизитаСерии.Вставить("Формат", "");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ПредставлениеФорматнойСтрокиВЗаголовке", "");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ПроверятьЗаполнение", Истина);
ОписаниеИспользованиеРеквизитаСерии.Вставить("МожноРедактировать", Истина);
ОписаниеИспользованиеРеквизитаСерии.Вставить("ТекстУсловногоОформления", "");
ОписаниеИспользованиеРеквизитаСерии.Вставить("ПроверятьУникальностьЗначения", Ложь);
Возврат ОписаниеИспользованиеРеквизитаСерии;
КонецФункции
Функция ПредусмотренаАвтоматическаяГенерацияСерий(НастройкиИспользованияСерий) Экспорт
ПредусмотренаАвтоматическаяГенерацияСерий = Ложь;
НоменклатураЛокализация.ПредусмотренаАвтоматическаяГенерацияСерий(ПредусмотренаАвтоматическаяГенерацияСерий, НастройкиИспользованияСерий);
Возврат ПредусмотренаАвтоматическаяГенерацияСерий;
КонецФункции
Функция ЭтоРеквизитСоставногоТипа(Реквизит)
ТипЗначенияРеквизита = ТипЗнч(Реквизит);
Если ТипЗначенияРеквизита = Тип("ФиксированнаяСтруктура") Тогда
Возврат (Не Реквизит.Тип.Типы().Количество() < 2);
ИначеЕсли ТипЗначенияРеквизита = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда
Возврат (Не Реквизит.ТипЗначения.Типы().Количество() < 2);
Иначе
ТекстИсключения = НСтр("ru = 'Неожиданный тип значения параметра Реквизит.'");
ВызватьИсключение ТекстИсключения;
КонецЕсли;
КонецФункции
Функция ДоступноИзменениеНастройкиОтображенияРеквизита(Объект, СтрокаРеквизита, ВладелецРеквизита) Экспорт
ИмяРеквизита = СтрокаРеквизита.ИмяРеквизита;
ЭтоДопРеквизит = СтрокаРеквизита.ЭтоДопРеквизит;
Если ЭтоДопРеквизит Тогда
Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаРеквизита.Свойство,"ЗаполнятьОбязательно");
ЗаполнятьОбязательно = Реквизиты.ЗаполнятьОбязательно;
Иначе
Если ВладелецРеквизита = "Номенклатура" Тогда
ОписаниеРеквизита = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета,
Объект.ИспользованиеХарактеристик,
Объект.ИспользоватьСрокГодностиСерии);
ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
Иначе
ЗаполнятьОбязательно = Ложь;
КонецЕсли;
КонецЕсли;
ДоступноИзменениеНастройки = Не ЗаполнятьОбязательно;
Если ЭтоОбязательноОтображаемыйРеквизит(Объект, ИмяРеквизита, ВладелецРеквизита, ЭтоДопРеквизит, ЗаполнятьОбязательно) Тогда
ДоступноИзменениеНастройки = Ложь;
КонецЕсли;
Возврат ДоступноИзменениеНастройки
И Не (СтрокаРеквизита.Уникален
Или СтрокаРеквизита.ЗаполнятьОбязательно);
КонецФункции
Функция ДоступноИзменениеНастройкиОбязательностиЗаполненияРеквизита(Объект, СтрокаРеквизита, ВладелецРеквизита)
ИмяРеквизита = СтрокаРеквизита.ИмяРеквизита;
ЭтоДопРеквизит = СтрокаРеквизита.ЭтоДопРеквизит;
Если ЭтоДопРеквизит Тогда
ТекстИсключения = НСтр("ru = 'Функция не предназначена для использования с доп. реквизитами.'");
ВызватьИсключение ТекстИсключения;
Иначе
Если ВладелецРеквизита = "Номенклатура" Тогда
ОписаниеРеквизита = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета,
Объект.ИспользованиеХарактеристик,
Объект.ИспользоватьСрокГодностиСерии);
ТипЗначения = ОписаниеРеквизита.Тип;
ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
ИначеЕсли ВладелецРеквизита = "ХарактеристикиНоменклатуры" Тогда
ОписаниеРеквизита = Справочники.ХарактеристикиНоменклатуры.РеквизитОписание(ИмяРеквизита,
Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета);
ТипЗначения = ОписаниеРеквизита.Тип;
ЗаполнятьОбязательно = ОписаниеРеквизита.ОбязательныйДляЗаполнения;
Иначе
ЗаполнятьОбязательно = Ложь;
КонецЕсли;
КонецЕсли;
ДоступноИзменениеНастройки = НЕ ЗаполнятьОбязательно;
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
Возврат ДоступноИзменениеНастройки
И ТипЗначения <> ОписаниеТиповБулево;
КонецФункции
Процедура ДобавитьРеквизитДляКонтроляИОтбораНоменклатуры(Объект, Реквизит, ВладелецРеквизита) Экспорт
Если Справочники.Номенклатура.НеотображаемыеВТаблицеНастроекРеквизиты().Найти(Реквизит.Имя) <> Неопределено Тогда
Возврат;
КонецЕсли;
НеиспользуемыеДляКонтроляРеквизиты = Справочники.Номенклатура.НеиспользуемыеДляКонтроляУникальностиРеквизиты();
ТипыНеИспользуемыеДляКонтроля = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
СвойстваДляЗаполнения =
"Уникален, ЗаполнятьОбязательно, ОтображатьПриСоздании, ДоступностьУникален,
|ДоступностьЗаполнятьОбязательно, ДоступностьОтображатьПриСоздании";
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
Если Не ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(Реквизит, "Тип") Тогда
ТипРеквизита = Новый ОписаниеТипов("Неопределено");
Иначе
ТипРеквизита = Реквизит.Тип;
КонецЕсли;
ЭтоТовар = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Товар);
ЭтоМногооборотнаяТара = (Объект.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
ПредставлениеРеквизита = Реквизит.Представление;
ЭтоНеиспользуемыйДляКонтроляРеквизит = (НеиспользуемыеДляКонтроляРеквизиты.Найти(Реквизит.Имя) <> Неопределено);
ЭтоНеиспользуемыйДляКонтроляТип = (ТипыНеИспользуемыеДляКонтроля.Найти(Реквизит.Имя) <> Неопределено);
ЭтоРеквизитСоставногоТипа = ЭтоРеквизитСоставногоТипа(Реквизит);
ЭтоОбязательныйДляЗаполненияРеквизит = Реквизит.ОбязательныйДляЗаполнения;
ТипРеквизитаБулево = (ТипРеквизита = ОписаниеТиповБулево);
ЭтоРеквизитРекомендуемыйДляКонтроляУникальности = Реквизит.РекомендуемыйДляКонтроляУникальности;
Отбор = Новый Структура("ИмяРеквизита,ЭтоДопРеквизит", Реквизит.Имя, Ложь);
Если ВладелецРеквизита = "Номенклатура" Тогда
ИмяТЧ = "РеквизитыДляКонтроляНоменклатуры";
Иначе
ИмяТЧ = "РеквизитыДляКонтроляХарактеристик";
КонецЕсли;
НайденныеСтроки = Объект[ИмяТЧ].НайтиСтроки(Отбор);
ЭтоНоваяСтрока = Ложь;
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаРеквизитовДляКонтроля = Объект[ИмяТЧ].Добавить();
СтрокаРеквизитовДляКонтроля.ИмяРеквизита = Реквизит.Имя;
ЭтоНоваяСтрока = Истина;
Иначе
СтрокаРеквизитовДляКонтроля = НайденныеСтроки[0];
КонецЕсли;
СтрокаРеквизитовДляКонтроля.ПредставлениеРеквизита = ПредставлениеРеквизита;
Если Не СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно Тогда
СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно = ЭтоОбязательныйДляЗаполненияРеквизит;
КонецЕсли;
Если Не СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании Тогда
СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании =
ЭтоОбязательноОтображаемыйРеквизит(Объект, Реквизит, "Номенклатура", Ложь, ЭтоОбязательныйДляЗаполненияРеквизит);
КонецЕсли;
Если ЭтоРеквизитРекомендуемыйДляКонтроляУникальности
И ЭтоНоваяСтрока Тогда
СтрокаРеквизитовДляКонтроля.Уникален = Истина;
СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании = Истина;
СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
ИначеЕсли ЭтоНеиспользуемыйДляКонтроляРеквизит
Или ЭтоНеиспользуемыйДляКонтроляТип Тогда
СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Ложь;
СтрокаРеквизитовДляКонтроля.Уникален = Ложь;
Иначе
СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
КонецЕсли;
СтрокаРеквизитовДляКонтроля.ДоступностьЗаполнятьОбязательно = ДоступноИзменениеНастройкиОбязательностиЗаполненияРеквизита(Объект,
СтрокаРеквизитовДляКонтроля,
ВладелецРеквизита);
СтрокаРеквизитовДляКонтроля.ДоступностьОтображатьПриСоздании = ДоступноИзменениеНастройкиОтображенияРеквизита(Объект,
СтрокаРеквизитовДляКонтроля,
ВладелецРеквизита);
КонецПроцедуры
Функция ЭтоОбязательноОтображаемыйРеквизит(Объект, ИмяРеквизита, ВладелецРеквизита, ЭтоДопРеквизит, ЗаполнятьОбязательно)
Если ЭтоДопРеквизит Тогда
Возврат ЗаполнятьОбязательно;
КонецЕсли;
Если ЗаполнятьОбязательно Тогда
Возврат Истина;
КонецЕсли;
Если ВладелецРеквизита = "Номенклатура" Тогда
ОбязательноОтображаемый = Справочники.Номенклатура.РеквизитОписание(ИмяРеквизита,
Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета,
Объект.ИспользованиеХарактеристик,
Объект.ИспользоватьСрокГодностиСерии).ОбязательныйДляОтображенияПриСоздании;
Возврат ОбязательноОтображаемый;
КонецЕсли;
Возврат Ложь;
КонецФункции
Процедура УдалитьРеквизитДляКонтроля(Объект, ИмяРеквизита, ВладелецРеквизита)
Отбор = Новый Структура("ИмяРеквизита", ИмяРеквизита);
КоллекцияРеквизитовДляКонтроля = КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизита);
НайденныеСтроки = КоллекцияРеквизитовДляКонтроля.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
СтрокаТаблицыРеквизитов = НайденныеСтроки[0];
КоллекцияРеквизитовДляКонтроля.Удалить(СтрокаТаблицыРеквизитов);
КонецЕсли;
КонецПроцедуры
Процедура УдалитьРеквизитДляОтбора(Объект, ИмяРеквизита, ВладелецРеквизита)
КоллекцияРеквизитовОтбора = КоллекцияРеквизитовОтбора(Объект, ВладелецРеквизита);
МассивСтрок = КоллекцияРеквизитовОтбора.НайтиСтроки(Новый Структура("ИмяРеквизита", ИмяРеквизита));
Если МассивСтрок.Количество() > 0 Тогда
СтрокаТаблицыРеквизитов = МассивСтрок[0];
КоллекцияРеквизитовОтбора.Удалить(СтрокаТаблицыРеквизитов);
КонецЕсли;
КонецПроцедуры
Процедура ПриИзмененииФлагаУникален(Объект, ВладелецРеквизита, ИдентификаторСтрокиТаблицы) Экспорт
КоллекцияРеквизитовДляКонтроля = Справочники.ВидыНоменклатуры.КоллекцияРеквизитовДляКонтроля(Объект, ВладелецРеквизита);
Если ТипЗнч(Объект) = Тип("СправочникОбъект.ВидыНоменклатуры") Тогда
ТекущиеДанные = КоллекцияРеквизитовДляКонтроля[ИдентификаторСтрокиТаблицы];
Иначе
ТекущиеДанные = КоллекцияРеквизитовДляКонтроля.НайтиПоИдентификатору(ИдентификаторСтрокиТаблицы);
КонецЕсли;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
Если ВладелецРеквизита <> "СерииНоменклатуры"
И ТекущиеДанные.Уникален Тогда
ТекущиеДанные.ЗаполнятьОбязательно = Истина;
ТекущиеДанные.ОтображатьПриСоздании = Истина;
КонецЕсли;
Если ТекущиеДанные.ЭтоДопРеквизит Тогда
ТипЗначения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущиеДанные.Свойство, "ТипЗначения");
Если ТипЗначения = ОписаниеТиповБулево Тогда
ТекущиеДанные.ЗаполнятьОбязательно = Ложь;
КонецЕсли;
Иначе
Если ВладелецРеквизита = "Номенклатура" Тогда
ТипРеквизита = Справочники.Номенклатура.РеквизитОписание(ТекущиеДанные.ИмяРеквизита,
Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета,
Объект.ИспользованиеХарактеристик,
Объект.ИспользоватьСрокГодностиСерии).Тип;
Если ТипРеквизита = ОписаниеТиповБулево Тогда
ТекущиеДанные.ЗаполнятьОбязательно = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ВладелецРеквизита <> "СерииНоменклатуры" Тогда
ТекущиеДанные.ДоступностьОтображатьПриСоздании = Справочники.ВидыНоменклатуры.ДоступноИзменениеНастройкиОтображенияРеквизита(Объект,
ТекущиеДанные,
ВладелецРеквизита);
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьРеквизитыДляКонтроля(Объект, ВладелецРеквизитов) Экспорт
Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры"
И Не Объект.ИспользоватьХарактеристики Тогда
Объект.РеквизитыБыстрогоОтбораХарактеристик.Очистить();
Возврат;
КонецЕсли;
Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры" Тогда
ЗависимостьОтТипаНоменклатуры = ЗначениеНастроекПовтИсп.ВсеРеквизитыХарактеристикНоменклатуры(Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета);
Иначе
ЗависимостьОтТипаНоменклатуры = ЗначениеНастроекПовтИсп.ВсеРеквизитыНоменклатуры(Объект.ТипНоменклатуры,
Объект.ОсобенностьУчета,
Объект.ИспользоватьХарактеристики,
Объект.ИспользоватьСрокГодностиСерии);
КонецЕсли;
Для Каждого НастройкаОтТипа Из ЗависимостьОтТипаНоменклатуры Цикл
Если НастройкаОтТипа.Значение.Использование Тогда
Справочники.ВидыНоменклатуры.ДобавитьРеквизитДляКонтроляИОтбораНоменклатуры(Объект,
НастройкаОтТипа.Значение,
ВладелецРеквизитов);
Иначе
УдалитьРеквизитДляКонтроля(Объект, НастройкаОтТипа.Ключ, ВладелецРеквизитов);
УдалитьРеквизитДляОтбора(Объект, НастройкаОтТипа.Ключ, ВладелецРеквизитов);
КонецЕсли;
КонецЦикла;
Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры" Тогда
Объект.РеквизитыДляКонтроляХарактеристик.Сортировать("ПредставлениеРеквизита");
Иначе
Объект.РеквизитыДляКонтроляНоменклатуры.Сортировать("ПредставлениеРеквизита");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДопРеквизитыДляКонтроляИОтбора(Объект, НазначениеДопРеквизитов) Экспорт
Если НазначениеДопРеквизитов = "ХарактеристикиНоменклатуры"
И Не Объект.ИспользоватьХарактеристики Тогда
Объект.РеквизитыДляКонтроляХарактеристик.Очистить();
Возврат;
ИначеЕсли НазначениеДопРеквизитов = "СерииНоменклатуры"
И Не Объект.ИспользоватьСерии Тогда
Объект.РеквизитыДляКонтроляСерий.Очистить();
Возврат;
КонецЕсли;
ТипыНеИспользуемыеДляКонтроля = Справочники.Номенклатура.НеиспользуемыеДляКонтроляЗаполненияИОтборовТипы();
Отбор = Новый Структура("Свойство, ЭтоДопРеквизит");
ВсеДопРеквизиты = Справочники.Номенклатура.ВсеДополнительныеРеквизиты(Объект.Ссылка, НазначениеДопРеквизитов);
РеквизитыДляКонтроля = КоллекцияРеквизитовДляКонтроля(Объект, НазначениеДопРеквизитов);
РеквизитыБыстрогоОтбора = КоллекцияРеквизитовОтбора(Объект, НазначениеДопРеквизитов);
УдаляемыеСтроки = Новый Массив;
Для каждого ДопРеквизит Из РеквизитыДляКонтроля Цикл
Если Не ДопРеквизит.ЭтоДопРеквизит Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
ОписаниеДопРеквизита = ВсеДопРеквизиты.НайтиСтроки(Отбор);
Если ОписаниеДопРеквизита.Количество() = 0 Тогда
УдаляемыеСтроки.Добавить(ДопРеквизит);
Иначе
ЗаполнитьЗначенияСвойств(ДопРеквизит,ОписаниеДопРеквизита[0]);
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из УдаляемыеСтроки Цикл
РеквизитыДляКонтроля.Удалить(Строка);
КонецЦикла;
Если РеквизитыБыстрогоОтбора <> Неопределено Тогда
УдаляемыеСтроки = Новый Массив;
Для Каждого ДопРеквизит Из РеквизитыБыстрогоОтбора Цикл
Если Не ДопРеквизит.ЭтоДопРеквизит Тогда
Продолжить;
КонецЕсли;
ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
Если ВсеДопРеквизиты.НайтиСтроки(Отбор).Количество() = 0 Тогда
УдаляемыеСтроки.Добавить(ДопРеквизит);
КонецЕсли;
КонецЦикла;
Для Каждого Строка Из УдаляемыеСтроки Цикл
РеквизитыБыстрогоОтбора.Удалить(Строка);
КонецЦикла;
КонецЕсли;
Для Каждого ДопРеквизит Из ВсеДопРеквизиты Цикл
ТипЗначения = ДопРеквизит.Тип;
ЭтоНеиспользуемыйДляКонтроляТип = ТипыНеИспользуемыеДляКонтроля.Найти(ТипЗначения) <> Неопределено;
ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
НайденныеСтроки = РеквизитыДляКонтроля.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() > 0 Тогда
СтрокаРеквизитовДляКонтроля = НайденныеСтроки[0];
СтрокаРеквизитовДляКонтроля.ПредставлениеРеквизита = ДопРеквизит.ПредставлениеРеквизита;
Иначе
СтрокаРеквизитовДляКонтроля = РеквизитыДляКонтроля.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаРеквизитовДляКонтроля, ДопРеквизит);
КонецЕсли;
Если ДопРеквизит.ЗаполнятьОбязательно Тогда
СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно = Истина;
Если НазначениеДопРеквизитов <> "СерииНоменклатуры" Тогда
СтрокаРеквизитовДляКонтроля.ОтображатьПриСоздании = Истина;
КонецЕсли;
КонецЕсли;
СтрокаРеквизитовДляКонтроля.ДоступностьЗаполнятьОбязательно = Истина;
Если НазначениеДопРеквизитов <> "СерииНоменклатуры" Тогда
Если Не ЭтоНеиспользуемыйДляКонтроляТип Тогда
СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Истина;
Иначе
СтрокаРеквизитовДляКонтроля.Уникален = Ложь;
СтрокаРеквизитовДляКонтроля.ДоступностьУникален = Ложь;
КонецЕсли;
СтрокаРеквизитовДляКонтроля.ДоступностьОтображатьПриСоздании = Не СтрокаРеквизитовДляКонтроля.ЗаполнятьОбязательно
И Не СтрокаРеквизитовДляКонтроля.Уникален;
КонецЕсли;
КонецЦикла;
Если РеквизитыБыстрогоОтбора <> Неопределено Тогда
Отбор = Новый Структура("Свойство");
Для Каждого ДопРеквизит Из ВсеДопРеквизиты Цикл
ЗаполнитьЗначенияСвойств(Отбор, ДопРеквизит);
ИзменяемыеСтроки = РеквизитыБыстрогоОтбора.НайтиСтроки(Отбор);
Для Каждого СтрокаРеквизитов Из ИзменяемыеСтроки Цикл
ЗаполнитьЗначенияСвойств(СтрокаРеквизитов, ДопРеквизит, "ПредставлениеРеквизита");
КонецЦикла;
КонецЦикла;
КонецЕсли;
Если РеквизитыДляКонтроля <> Неопределено Тогда
РеквизитыДляКонтроля.Сортировать("ПредставлениеРеквизита");
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьРеквизитыДляЦенообразования(Объект, ВладелецРеквизитов) Экспорт
Если ВладелецРеквизитов = "ХарактеристикиНоменклатуры"
И (Не Объект.ИспользоватьХарактеристики
Или Не Объект.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
Объект.РеквизитыХарактеристикДляКлючаЦен.Очистить();
Возврат;
ИначеЕсли ВладелецРеквизитов = "СерииНоменклатуры"
И (Не Объект.ИспользоватьСерии
Или Не Объект.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
Объект.РеквизитыСерийДляКлючаЦен.Очистить();
Возврат;
КонецЕсли;
КонецПроцедуры
Функция КоллекцияРеквизитовДляКонтроля(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
Возврат ТекущийОбъект.РеквизитыДляКонтроляНоменклатуры;
ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
Возврат ТекущийОбъект.РеквизитыДляКонтроляХарактеристик;
ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
Возврат ТекущийОбъект.РеквизитыДляКонтроляСерий;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция КоллекцияРеквизитовОтбора(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
Если ТипВладельцаНабораЭлементов = "Номенклатура" Тогда
Возврат ТекущийОбъект.РеквизитыБыстрогоОтбораНоменклатуры;
ИначеЕсли ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
Возврат ТекущийОбъект.РеквизитыБыстрогоОтбораХарактеристик;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция КоллекцияРеквизитовДляКлючаЦен(ТекущийОбъект, ТипВладельцаНабораЭлементов) Экспорт
Если ТипВладельцаНабораЭлементов = "ХарактеристикиНоменклатуры" Тогда
Возврат ТекущийОбъект.РеквизитыХарактеристикДляКлючаЦен;
ИначеЕсли ТипВладельцаНабораЭлементов = "СерииНоменклатуры" Тогда
Возврат ТекущийОбъект.РеквизитыСерийДляКлючаЦен;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
Функция ИспользоватьПроизводство() Экспорт
ИспользоватьПроизводство = Ложь;
Возврат ИспользоватьПроизводство;
КонецФункции
Процедура ПроверитьПоТипуИОсобенностиНоменклатуруОчиститьВладельца(ВидНоменклатуры, ИмяРеквизитаВладелец)
Если Не ЗначениеЗаполнено(ВидНоменклатуры[ИмяРеквизитаВладелец]) Тогда
Возврат;
КонецЕсли;
ОтборВладельца = НоменклатураСервер.ОтборВладельцаПодчиненныхСправочников(ВидНоменклатуры, ИмяРеквизитаВладелец);
Если Не ОбщегоНазначенияУТ.СсылкаСоответствуетОтбору(ВидНоменклатуры[ИмяРеквизитаВладелец], ОтборВладельца) Тогда
ВидНоменклатуры[ИмяРеквизитаВладелец] = Неопределено;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьРеквизитыЦенообразованияПоУмолчанию(ВидНоменклатуры) Экспорт
ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
Если ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры
И ЗначениеЗаполнено(ВидНоменклатуры.ВладелецХарактеристик) Тогда
НастройкиКлючаЦенПоХарактеристикеПоВладельцу = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецХарактеристик,"НастройкиКлючаЦенПоХарактеристике");
ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = НастройкиКлючаЦенПоХарактеристикеПоВладельцу.НастройкиКлючаЦенПоХарактеристике;
КонецЕсли;
ВидНоменклатуры.НастройкиКлючаЦенПоСерии = Перечисления.ВариантОтбораДляКлючаЦен.НеИспользовать;
Если ВидНоменклатуры.НастройкиСерийБерутсяИзДругогоВидаНоменклатуры И ЗначениеЗаполнено(ВидНоменклатуры.ВладелецСерий) Тогда
НастройкиКлючаЦенПоХарактеристикеПоВладельцу = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ВидНоменклатуры.ВладелецСерий,"НастройкиКлючаЦенПоСерии");
ВидНоменклатуры.НастройкиКлючаЦенПоСерии = НастройкиКлючаЦенПоХарактеристикеПоВладельцу.НастройкиКлючаЦенПоСерии;
КонецЕсли;
ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатуры, "ХарактеристикиНоменклатуры");
ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатуры, "СерииНоменклатуры");
КонецПроцедуры
Процедура УстановитьРеквизитыЦенообразования(ВидыНоменклатуры, ПараметрыУстановки) Экспорт
Для Каждого ВидНоменклатуры Из ВидыНоменклатуры Цикл
ВидНоменклатурыОбъект = Неопределено;
Если Не ЗапретитьИспользованияХарактеристикДляЦенообразования(ВидНоменклатуры) И Не ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике = Неопределено Тогда
ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();
ВидНоменклатурыОбъект.НастройкиКлючаЦенПоХарактеристике = ПараметрыУстановки.НастройкиКлючаЦенПоХарактеристике;
ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатурыОбъект, "ХарактеристикиНоменклатуры");
КонецЕсли;
Если Не ЗапретитьИспользованияСерииДляЦенообразования(ВидНоменклатуры) И Не ПараметрыУстановки.НастройкиКлючаЦенПоСерии = Неопределено Тогда
Если ВидНоменклатурыОбъект = Неопределено Тогда
ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();
КонецЕсли;
ВидНоменклатурыОбъект.НастройкиКлючаЦенПоСерии = ПараметрыУстановки.НастройкиКлючаЦенПоСерии;
ЗаполнитьРеквизитыДляЦенообразования(ВидНоменклатурыОбъект, "СерииНоменклатуры");
КонецЕсли;
Если Не ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке = Неопределено Тогда
Если ВидНоменклатурыОбъект = Неопределено Тогда
ВидНоменклатурыОбъект = ВидНоменклатуры.ПолучитьОбъект();
КонецЕсли;
ВидНоменклатурыОбъект.НастройкиКлючаЦенПоУпаковке = ПараметрыУстановки.НастройкиКлючаЦенПоУпаковке;
КонецЕсли;
Если Не ВидНоменклатурыОбъект = Неопределено Тогда
Попытка
ВидНоменклатурыОбъект.Записать();
Исключение
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ЗапретитьИспользованияСерииДляЦенообразования(Знач ВидНоменклатуры) Экспорт
Запретить = Ложь;
Если НЕ ВидНоменклатуры.ИспользоватьСерии Тогда
Запретить = Истина;
КонецЕсли;
Возврат Запретить;
КонецФункции
Функция ЗапретитьИспользованияХарактеристикДляЦенообразования(Знач ВидНоменклатуры) Экспорт
Запретить = Ложь;
Если Не ВидНоменклатуры.ИспользоватьХарактеристики
Или ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать
Или (ВидНоменклатуры.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры
И ВидНоменклатуры.НастройкиКлючаЦенПоХарактеристике = Перечисления.ВариантОтбораДляКлючаЦен.ИспользоватьПоРеквизитам) Тогда
Запретить = Истина;
КонецЕсли;
Возврат Запретить;
КонецФункции
#КонецОбласти
#КонецОбласти
#КонецЕсли
#КонецЕсли