#Область ОбработчикиСобытий
&НаКлиенте
Процедура ПриОткрытии(Отказ)
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
//удалим из temp файл
Попытка
УдалитьФайлы(Объект.Имя7Z);
Исключение
Сообщить("При удалении файла 7za произошла ошибка: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//заполним реквизиты
Объект.Имя7Z = ПолучитьИмяВременногоФайла("exe");
Макет7Z = Макет7zВTemp();
Макет7Z.Записать(Объект.Имя7Z);
Объект.ДатаАктульности = ТекущаяДата();
КонецПроцедуры
&НаКлиенте
Процедура ПутьКФайлуТНВЭДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.ПолноеИмяФайла = "";
Диалог.МножественныйВыбор = Ложь;
Диалог.Заголовок = "Выберите архив с классификатором ТН ВЭД";
Диалог.Фильтр = "Архив 7Z(*.7z)|*.7z";
Если Диалог.Выбрать() тогда
Объект.ПутьКФайлуТНВЭД = Диалог.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСкачатьНажатие(Элемент)
НачатьЗапускПриложения(Новый ОписаниеОповещения("ДекорацияСкачатьНажатиеЗавершение", ЭтотОбъект), "https://www.nalog.ru/rn77/program//5961290/");
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСкачатьНажатиеЗавершение(КодВозврата, ДополнительныеПараметры) Экспорт
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьКлассификаторНаСервере(лФайл1)
УспехВыполнения = РаспаковатьИПроверитьФайлКлассификатора(лФайл1);
Если УспехВыполнения = Ложь тогда
Возврат;
КонецЕсли;
//идентифицируется запись классификатора по 4-м ключевым полям:
//1. Раздел
//2. Группа
//3. Товарная позиция
//4. Товарная подпозиция
//обрабатываем файлы
Сообщить("Обрабатывается файл ""Разделы"" (1 из 4)");
ОбработатьФайл1();
Сообщить("Обрабатывается файл ""Группы"" (2 из 4)");
ОбработатьФайл2();
Сообщить("Обрабатывается файл ""Товарные позиции"" (3 из 4)");
ОбработатьФайл3();
Сообщить("Обрабатывается файл ""Товарные подпозиции"" (4 из 4)");
ОбработатьФайл4();
Сообщить("Загрузка завершена!");
конецпроцедуры
&НаКлиенте
Процедура ЗагрузитьКлассификатор(Команда)
//распакуем файл и проверим чтобы все прошло удачно
лДвоичДанные1 = Новый ДвоичныеДанные(Объект.ПутьКФайлуТНВЭД);
лФайл1 = ПоместитьВоВременноеХранилище(лДвоичДанные1);
ЗагрузитьКлассификаторНаСервере(лФайл1);
Оповестить("ОбновитьТНВЭД");
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Функция Макет7zВTemp()
Возврат РеквизитФормыВЗначение("Объект").ПолучитьМакет("Архиватор7z");
КонецФункции
&НаСервере
Функция РаспаковатьИПроверитьФайлКлассификатора(лФайл1)
АрхивСДанными = ПолучитьИмяВременногоФайла("rar");
лДвоичДанныеАрхива = ПолучитьИзВременногоХранилища(лФайл1);
лДвоичДанныеАрхива.Записать(АрхивСДанными);
ФайлКлассификатораСуществует = ПроверитьСуществованиеФайла(АрхивСДанными);
Если не ФайлКлассификатораСуществует тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Файл классификатора не существует!";
Сообщение.Поле = "Объект.ПутьКФайлуТНВЭД";
Сообщение.Сообщить();
Возврат Ложь;
КонецЕсли;
//пробуем распаковать файл
РаспаковатьФайлКлассификатора(АрхивСДанными);
//Если не ПроверитьСуществованиеФайла(Объект.Файл1) или
// не ПроверитьСуществованиеФайла(Объект.Файл2) или
// не ПроверитьСуществованиеФайла(Объект.Файл3) или
// не ПроверитьСуществованиеФайла(Объект.Файл4) тогда
//
// Сообщение = Новый СообщениеПользователю;
// Сообщение.Текст = "Не удалось распаковать файл классификатора!";
// //Сообщение.Поле = "Объект.ПутьКФайлуТНВЭД";
// Сообщение.Сообщить();
//
// Возврат Ложь;
//КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ПроверитьСуществованиеФайла(ПутьКФайлу)
Файл = Новый Файл(ПутьКФайлу);
Возврат Файл.Существует();
КонецФункции
&НаСервере
Процедура РаспаковатьФайлКлассификатора(АрхивСДанными)
ПутьРаспаковка = КаталогВременныхФайлов();
//сформируем команду
ПараметрыЗапуска = " e"; //e - extract (Распаковка)
//путь к архиву
ПараметрыЗапуска = ПараметрыЗапуска + " """ + АрхивСДанными + """";
//путь к папке распаковки
ПараметрыЗапуска = ПараметрыЗапуска + " -o""" + ПутьРаспаковка + """";
//рекурсивный обход архива
ПараметрыЗапуска = ПараметрыЗапуска + " -r";
//отвечать на все вопросы yes
ПараметрыЗапуска = ПараметрыЗапуска + " -y";
//ЧтениеZipФайла = Новый ЧтениеZipФайла(ИмяАрхива);
//ЧтениеZipФайла.Извлечь(ЧтениеZipФайла.Элементы[0], ПапкаАрхива, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
// ИмяФайла = ПапкаАрхива + "\" + ЧтениеZipФайла.Элементы[0].Имя;
// ЧтениеZipФайла.Закрыть();
ЗапуститьПриложение(Объект.Имя7Z + ПараметрыЗапуска,,истина);
Объект.Файл1 = ПутьРаспаковка + "TNVED1.TXT";
Объект.Файл2 = ПутьРаспаковка + "TNVED2.TXT";
Объект.Файл3 = ПутьРаспаковка + "TNVED3.TXT";
Объект.Файл4 = ПутьРаспаковка + "TNVED4.TXT";
КонецПроцедуры
&НаСервере
Процедура ОбработатьФайл1()
ТекстДок = Новый ТекстовыйДокумент();
ТекстДок.Прочитать(Объект.Файл1, "cp866");
МассивЗагружЭлементов = Новый Массив;
НомерСтроки = 1; //начинаем разбор файла со второй строки
Пока НомерСтроки <= 200000 цикл //считаем что в файле с классификатором максимум 200000 строк, прерываем цикл если встречаем пустую строку
НомерСтроки = НомерСтроки + 1;
//структура строк:
//1. Раздел
//2. Наименование
//3. Примечание
//4. Дата начала действия
//5. Дата окончания действия
Стр = ТекстДок.ПолучитьСтроку(НомерСтроки);
Если СокрЛП(Стр) = "" тогда
//дошли до конца файла
Прервать;
КонецЕсли;
МассивРазбор = РазложитьСтрокуВМассивПодстрок(Стр, "|");
Раздел = ПреобразоватьСтроку(МассивРазбор[0]);
Группа = "";
ТоварнаяПозиция = "";
ТоварнаяПодпозиция = "";
НаименованиеПолное = ПреобразоватьСтроку(МассивРазбор[1]);
Примечение = ПреобразоватьСтроку(МассивРазбор[2]);
ДатаНачалаДействия = СтрокуВДату(МассивРазбор[3]);
ДатаОкончанияДействия = СтрокуВДату(МассивРазбор[4]);
Родитель = Справочники.ТНВЭД.ПустаяСсылка(); //это корневые элементы справочника
Если ЗначениеЗаполнено(ДатаНачалаДействия) и ДатаНачалаДействия > Объект.ДатаАктульности тогда
//слишком новая строка
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияДействия) и ДатаОкончанияДействия <= Объект.ДатаАктульности тогда
//слишком старая строка
Продолжить;
КонецЕсли;
Эл = НайтиЭлементКлассификатора(Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция);
Если ЗначениеЗаполнено(Эл) тогда
Об = Эл.ПолучитьОбъект();
Иначе
Об = Справочники.ТНВЭД.СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЭлементКлассификатора(Об, Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция, НаименованиеПолное, Примечение, ДатаНачалаДействия, ДатаОкончанияДействия, Родитель, Истина);
МассивЗагружЭлементов.Добавить(Об.Ссылка);
КонецЦикла;
ПометитьНаУдалениеЛишниеЭлементыРазделы(МассивЗагружЭлементов);
КонецПроцедуры
&НаСервере
Процедура ОбработатьФайл2()
ТекстДок = Новый ТекстовыйДокумент();
ТекстДок.Прочитать(Объект.Файл2, "cp866");
МассивЗагружЭлементов = Новый Массив;
НомерСтроки = 1; //начинаем разбор файла со второй строки
Пока НомерСтроки <= 200000 цикл //считаем что в файле с классификатором максимум 200000 строк, прерываем цикл если встречаем пустую строку
НомерСтроки = НомерСтроки + 1;
//структура строк:
//1. Раздел
//2. Наименование
//3. Примечание
//4. Дата начала действия
//5. Дата окончания действия
Стр = ТекстДок.ПолучитьСтроку(НомерСтроки);
Если СокрЛП(Стр) = "" тогда
//дошли до конца файла
Прервать;
КонецЕсли;
МассивРазбор = РазложитьСтрокуВМассивПодстрок(Стр, "|");
Раздел = ПреобразоватьСтроку(МассивРазбор[0]);
Группа = ПреобразоватьСтроку(МассивРазбор[1]);
ТоварнаяПозиция = "";
ТоварнаяПодпозиция = "";
НаименованиеПолное = ПреобразоватьСтроку(МассивРазбор[2]);
Примечение = ПреобразоватьСтроку(МассивРазбор[3]);
ДатаНачалаДействия = СтрокуВДату(МассивРазбор[4]);
ДатаОкончанияДействия = СтрокуВДату(МассивРазбор[5]);
Если ЗначениеЗаполнено(ДатаНачалаДействия) и ДатаНачалаДействия > Объект.ДатаАктульности тогда
//слишком новая строка
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияДействия) и ДатаОкончанияДействия <= Объект.ДатаАктульности тогда
//слишком старая строка
Продолжить;
КонецЕсли;
Родитель = НайтиЭлементКлассификатора(Раздел, "", "", "");
Эл = НайтиЭлементКлассификатора(Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция);
Если ЗначениеЗаполнено(Эл) тогда
Об = Эл.ПолучитьОбъект();
Иначе
Об = Справочники.ТНВЭД.СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЭлементКлассификатора(Об, Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция, НаименованиеПолное, Примечение, ДатаНачалаДействия, ДатаОкончанияДействия, Родитель);
МассивЗагружЭлементов.Добавить(Об.Ссылка);
КонецЦикла;
ПометитьНаУдалениеЛишниеЭлементыГруппы(МассивЗагружЭлементов);
КонецПроцедуры
&НаСервере
Процедура ОбработатьФайл3()
ТекстДок = Новый ТекстовыйДокумент();
ТекстДок.Прочитать(Объект.Файл3, "cp866");
НомерСтроки = 1; //начинаем разбор файла со второй строки
Пока НомерСтроки <= 200000 цикл //считаем что в файле с классификатором максимум 200000 строк, прерываем цикл если встречаем пустую строку
НомерСтроки = НомерСтроки + 1;
//структура строк:
//1. Раздел
//2. Наименование
//3. Примечание
//4. Дата начала действия
//5. Дата окончания действия
Стр = ТекстДок.ПолучитьСтроку(НомерСтроки);
Если СокрЛП(Стр) = "" тогда
//дошли до конца файла
Прервать;
КонецЕсли;
МассивРазбор = РазложитьСтрокуВМассивПодстрок(Стр, "|");
Раздел = "";
Группа = ПреобразоватьСтроку(МассивРазбор[0]);
ТоварнаяПозиция = ПреобразоватьСтроку(МассивРазбор[1]);
ТоварнаяПодпозиция = "";
НаименованиеПолное = ПреобразоватьСтроку(МассивРазбор[2]);
Примечение = "";
ДатаНачалаДействия = СтрокуВДату(МассивРазбор[4]);
ДатаОкончанияДействия = СтрокуВДату(МассивРазбор[5]);
Если ЗначениеЗаполнено(ДатаНачалаДействия) и ДатаНачалаДействия > Объект.ДатаАктульности тогда
//слишком новая строка
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияДействия) и ДатаОкончанияДействия <= Объект.ДатаАктульности тогда
//слишком старая строка
Продолжить;
КонецЕсли;
Родитель = НайтиЭлементКлассификатораБезРаздела(Группа, "", "");
Эл = НайтиЭлементКлассификатора(Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция);
Если ЗначениеЗаполнено(Эл) тогда
Об = Эл.ПолучитьОбъект();
Иначе
Об = Справочники.ТНВЭД.СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЭлементКлассификатора(Об, Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция, НаименованиеПолное, Примечение, ДатаНачалаДействия, ДатаОкончанияДействия, Родитель);
СписокТоварныхПозицийДляПроверки.Добавить(Об.Ссылка);
КонецЦикла;
//ПометитьНаУдалениеЛишниеЭлементыТоварныеПозиции(МассивЗагружЭлементов);
КонецПроцедуры
&НаСервере
Процедура ОбработатьФайл4()
ТекстДок = Новый ТекстовыйДокумент();
ТекстДок.Прочитать(Объект.Файл4, "cp866");
МассивЗагружЭлементов = Новый Массив;
НомерСтроки = 1; //начинаем разбор файла со второй строки
Пока НомерСтроки <= 200000 цикл //считаем что в файле с классификатором максимум 200000 строк, прерываем цикл если встречаем пустую строку
НомерСтроки = НомерСтроки + 1;
//структура строк:
//1. Раздел
//2. Наименование
//3. Примечание
//4. Дата начала действия
//5. Дата окончания действия
Стр = ТекстДок.ПолучитьСтроку(НомерСтроки);
Если СокрЛП(Стр) = "" тогда
//дошли до конца файла
Прервать;
КонецЕсли;
МассивРазбор = РазложитьСтрокуВМассивПодстрок(Стр, "|");
Раздел = "";
Группа = ПреобразоватьСтроку(МассивРазбор[0]);
ТоварнаяПозиция = ПреобразоватьСтроку(МассивРазбор[1]);
ТоварнаяПодпозиция = ПреобразоватьСтроку(МассивРазбор[2]);
НаименованиеПолное = ПреобразоватьСтроку(МассивРазбор[3]);
Примечение = "";
ДатаНачалаДействия = СтрокуВДату(МассивРазбор[4]);
ДатаОкончанияДействия = СтрокуВДату(МассивРазбор[5]);
Если ЗначениеЗаполнено(ДатаНачалаДействия) и ДатаНачалаДействия > Объект.ДатаАктульности тогда
//слишком новая строка
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончанияДействия) и ДатаОкончанияДействия <= Объект.ДатаАктульности тогда
//слишком старая строка
Продолжить;
КонецЕсли;
Родитель = НайтиЭлементКлассификатораБезРаздела(Группа, ТоварнаяПозиция, "");
Если не ЗначениеЗаполнено(Родитель) тогда
//в файле с товарными позициями нету родителя по какой-то причине, создадим
ОбРод = Справочники.ТНВЭД.СоздатьЭлемент();
ОбРод.Группа = Группа;
ОбРод.ТоварнаяПозиция = ТоварнаяПозиция;
ОбРод.Родитель = НайтиЭлементКлассификатораБезРаздела(Группа, "", "");
ОбРод.Наименование = Группа + ТоварнаяПозиция;
Попытка
ОбРод.Записать();
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
Родитель = ОбРод.Ссылка;
СписокТоварныхПозицийДляПроверки.Добавить(ОбРод.Ссылка);
КонецЕсли;
Эл = НайтиЭлементКлассификатора(Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция);
Если ЗначениеЗаполнено(Эл) тогда
Об = Эл.ПолучитьОбъект();
Иначе
Об = Справочники.ТНВЭД.СоздатьЭлемент();
КонецЕсли;
ЗаполнитьЭлементКлассификатора(Об, Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция, НаименованиеПолное, Примечение, ДатаНачалаДействия, ДатаОкончанияДействия, Родитель);
МассивЗагружЭлементов.Добавить(Об.Ссылка);
КонецЦикла;
ПометитьНаУдалениеЛишниеЭлементыТоварныеПозиции(СписокТоварныхПозицийДляПроверки);
ПометитьНаУдалениеЛишниеЭлементыТоварныеПодпозиции(МассивЗагружЭлементов);
КонецПроцедуры
&НаСервере
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт
МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции
&НаСервере
Функция ПреобразоватьСтроку(Стр)
Стр = СокрЛП(Стр);
Стр = СтрЗаменить(Стр, Символ(11), "");
Возврат Стр;
КонецФункции
&НаСервере
Функция СтрокуВДату(Стр)
Стр = СокрЛП(Стр);
Если Стр = "" тогда
Возврат Дата("00010101"); //пустая дата
КонецЕсли;
Возврат Дата(Стр + " 00:00:00");
КонецФункции
&НаСервере
Функция НайтиЭлементКлассификатора(Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция)
Эл = Справочники.ТНВЭД.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| ТНВЭД.ПометкаУдаления = ЛОЖЬ
| И ТНВЭД.ТоварнаяПозиция = &ТоварнаяПозиция
| И ТНВЭД.ТоварнаяПодпозиция = &ТоварнаяПодпозиция
| И ТНВЭД.Раздел = &Раздел
| И ТНВЭД.Группа = &Группа";
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.УстановитьПараметр("Раздел", Раздел);
Запрос.УстановитьПараметр("ТоварнаяПодпозиция", ТоварнаяПодпозиция);
Запрос.УстановитьПараметр("ТоварнаяПозиция", ТоварнаяПозиция);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Ссылка) тогда
Эл = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Эл;
КонецФункции
&НаСервере
Функция НайтиЭлементКлассификатораБезРаздела(Группа, ТоварнаяПозиция, ТоварнаяПодпозиция)
Эл = Справочники.ТНВЭД.ПустаяСсылка();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| ТНВЭД.ПометкаУдаления = ЛОЖЬ
| И ТНВЭД.ТоварнаяПозиция = &ТоварнаяПозиция
| И ТНВЭД.ТоварнаяПодпозиция = &ТоварнаяПодпозиция
| И ТНВЭД.Группа = &Группа";
Запрос.УстановитьПараметр("Группа", Группа);
Запрос.УстановитьПараметр("ТоварнаяПодпозиция", ТоварнаяПодпозиция);
Запрос.УстановитьПараметр("ТоварнаяПозиция", ТоварнаяПозиция);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Если ЗначениеЗаполнено(ВыборкаДетальныеЗаписи.Ссылка) тогда
Эл = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЕсли;
Возврат Эл;
КонецФункции
&НаСервере
Функция ArabicToRoman(Знач тЧисло)
мБуквы = РазложитьСтрокуВМассивПодстрок("I,IV,V,IX,X,XL,L,XC,C,CD,D,CM,M", ",");
мЦифры = РазложитьСтрокуВМассивПодстрок("1,4,5,9,10,40,50,90,100,400,500,900,1000", ",");
тРимскоеЧисло = "";
Для тСчет = 0 По мБуквы.Количество() - 1 Цикл
тБуква=мБуквы.Количество() - тСчет - 1;
Пока тЧисло >= Число(мЦифры[тБуква]) Цикл
тРимскоеЧисло = тРимскоеЧисло + мБуквы[тБуква];
тЧисло = тЧисло - Число(мЦифры[тБуква]);
КонецЦикла;
КонецЦикла;
Возврат тРимскоеЧисло;
КонецФункции
&НаСервере
Процедура ЗаполнитьЭлементКлассификатора(Об, Раздел, Группа, ТоварнаяПозиция, ТоварнаяПодпозиция, НаименованиеПолное, Примечание, ДатаНачалаДействия, ДатаОкончанияДействия, Родитель, ЭтоРаздел = Ложь)
Об.Родитель = Родитель;
Об.Раздел = Раздел;
Об.Группа = Группа;
Об.ТоварнаяПозиция = ТоварнаяПозиция;
Об.ТоварнаяПодпозиция = ТоварнаяПодпозиция;
Об.НаименованиеПолное = НаименованиеПолное;
Об.Примечание = Примечание;
Об.ДатаНачалаДействия = ДатаНачалаДействия;
Об.ДатаОкончанияДействия = ДатаОкончанияДействия;
//сформируем наименование - код ТН ВЭД
Если ЭтоРаздел тогда
//наименование Раздел I и т.д.
Об.Наименование = "Раздел " + ArabicToRoman(Число(Раздел));
Иначе
Об.Наименование = Группа + ТоварнаяПозиция + ТоварнаяПодпозиция;
КонецЕсли;
Попытка
Об.Записать();
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Процедура ПометитьНаУдалениеЛишниеЭлементыРазделы(МассивЗагружЭлементов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| ТНВЭД.Родитель = ЗНАЧЕНИЕ(Справочник.ТНВЭД.ПустаяСсылка)
| И НЕ ТНВЭД.Ссылка В (&МассивЗагружЭлементов)
| И ТНВЭД.ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("МассивЗагружЭлементов", МассивЗагружЭлементов);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Об.УстановитьПометкуУдаления(Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПометитьНаУдалениеЛишниеЭлементыГруппы(МассивЗагружЭлементов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| НЕ ТНВЭД.Ссылка В (&МассивЗагружЭлементов)
| И ТНВЭД.ПометкаУдаления = ЛОЖЬ
| И ТНВЭД.ТоварнаяПозиция = """"
| И ТНВЭД.ТоварнаяПодпозиция = """"
| И НЕ ТНВЭД.Группа = """"
| И НЕ ТНВЭД.Раздел = """"";
Запрос.УстановитьПараметр("МассивЗагружЭлементов", МассивЗагружЭлементов);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Об.УстановитьПометкуУдаления(Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПометитьНаУдалениеЛишниеЭлементыТоварныеПозиции(МассивЗагружЭлементов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| НЕ ТНВЭД.Ссылка В (&МассивЗагружЭлементов)
| И ТНВЭД.ПометкаУдаления = ЛОЖЬ
| И НЕ ТНВЭД.ТоварнаяПозиция = """"
| И ТНВЭД.ТоварнаяПодпозиция = """"
| И НЕ ТНВЭД.Группа = """"
| И ТНВЭД.Раздел = """"";
Запрос.УстановитьПараметр("МассивЗагружЭлементов", МассивЗагружЭлементов);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Об.УстановитьПометкуУдаления(Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПометитьНаУдалениеЛишниеЭлементыТоварныеПодпозиции(МассивЗагружЭлементов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТНВЭД.Ссылка КАК Ссылка
|ИЗ
| Справочник.ТНВЭД КАК ТНВЭД
|ГДЕ
| НЕ ТНВЭД.Ссылка В (&МассивЗагружЭлементов)
| И ТНВЭД.ПометкаУдаления = ЛОЖЬ
| И НЕ ТНВЭД.ТоварнаяПозиция = """"
| И НЕ ТНВЭД.ТоварнаяПодпозиция = """"
| И НЕ ТНВЭД.Группа = """"
| И ТНВЭД.Раздел = """"";
Запрос.УстановитьПараметр("МассивЗагружЭлементов", МассивЗагружЭлементов);
РезультатЗапроса = Запрос.Выполнить();
Если не РезультатЗапроса.Пустой() тогда
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Об.УстановитьПометкуУдаления(Истина);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
Показать