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