Загрузка данных


&НаСервере
Процедура СоздатьGTINs()

    ВыгрузитьРегистрВCSV();

    ТестовыйРежим = Истина;  // ← поменяйте на Ложь для реальной записи

    // ОДИН ЗАПРОС: все EAN13, которых ещё нет в ОписаниеGTINИС
    Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Штрихкоды.Владелец КАК Номенклатура,
    |    Штрихкоды.Характеристика КАК Характеристика,
    |    '0' + Штрихкоды.Штрихкод КАК GTIN
    |ПОМЕСТИТЬ НовыеGTIN
    |ИЗ
    |    РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    |    Штрихкоды.Штрихкод <> """" 
    |    И Штрихкоды.Штрихкод LIKE '_____________'
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    НовыеGTIN.Номенклатура КАК Номенклатура,
    |    НовыеGTIN.Характеристика КАК Характеристика,
    |    НовыеGTIN.GTIN КАК GTIN
    |ИЗ
    |    НовыеGTIN ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеGTINИС КАК Существующие
    |    ПО НовыеGTIN.GTIN = Существующие.GTIN
    |ГДЕ
    |    Существующие.GTIN ЕСТЬ NULL
    |";

    Результат = Запрос.Выполнить();

    Если Результат.Пустой() Тогда
        Сообщить("Нет новых GTIN для добавления.");
        Возврат;
    КонецЕсли;

    // Добавление записей в регистр
    Выборка = Результат.Выбрать();
    НаборЗаписей = РегистрыСведений.ОписаниеGTINИС.СоздатьНаборЗаписей();
    КоличествоДобавленных = 0;
    СписокДобавляемых = Новый Массив;

    Пока Выборка.Следующий() Цикл
        GTIN = Выборка.GTIN;
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.GTIN = GTIN;
        НоваяЗапись.ВидУпаковки = Перечисления.ВидыУпаковокИС.Потребительская;
        НоваяЗапись.КоличествоПотребительскихУпаковок = 1;
        КоличествоДобавленных = КоличествоДобавленных + 1;

        // Для плоского списка (CSV)
        Структура = Новый Структура;
        Структура.Вставить("GTIN", GTIN);
        Структура.Вставить("ВидУпаковки", Перечисления.ВидыУпаковокИС.Потребительская);
        Структура.Вставить("КоличествоПотребительскихУпаковок", 1);
        СписокДобавляемых.Добавить(Структура);
    КонецЦикла;

    // Сохранение списка добавляемых
    Если СписокДобавляемых.Количество() > 0 Тогда
        СохранитьСписокВCSV(СписокДобавляемых);
    КонецЕсли;

    // Запись или тест
    Если НаборЗаписей.Количество() > 0 Тогда
        Если ТестовыйРежим Тогда
            Сообщить("*** ТЕСТ: запись отключена. Будет добавлено записей: " + НаборЗаписей.Количество());
        Иначе
            НаборЗаписей.Записать();
            Сообщить("Данные записаны. Добавлено записей: " + НаборЗаписей.Количество());
        КонецЕсли;
    Иначе
        Сообщить("Нет новых записей для добавления.");
    КонецЕсли;

    Сообщить("========== СТАТИСТИКА ==========");
    Сообщить("Добавлено новых записей: " + КоличествоДобавленных);
    Сообщить("=================================");

    ЗаписьЖурналаРегистрации("Заполнение GTIN", УровеньЖурналаРегистрации.Информация,,
        "Тест: " + ?(ТестовыйРежим, "да", "нет") + " | Добавлено: " + КоличествоДобавленных);

КонецПроцедуры

// ============================================================
// Процедура бэкапа регистра
// ============================================================
Процедура ВыгрузитьРегистрВCSV()
    ИмяФайла = "F:\ОписаниеGTINИС_бэкап_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss") + ".csv";
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ОписаниеGTINИС.GTIN, ОписаниеGTINИС.ВидУпаковки, ОписаниеGTINИС.КоличествоПотребительскихУпаковок ИЗ РегистрСведений.ОписаниеGTINИС КАК ОписаниеGTINИС";
    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда 
        Сообщить("Регистр пуст."); 
        Возврат; 
    КонецЕсли;
    Выборка = Результат.Выбрать();
    ТекстCSV = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
    ТекстCSV.ЗаписатьСтроку("GTIN;ВидУпаковки;КоличествоУпаковок");
    Пока Выборка.Следующий() Цикл
        ТекстCSV.ЗаписатьСтроку(Выборка.GTIN + ";" + Строка(Выборка.ВидУпаковки) + ";" + Строка(Выборка.КоличествоПотребительскихУпаковок));
    КонецЦикла;
    ТекстCSV.Закрыть();
    Сообщить("Бэкап сохранён: " + ИмяФайла);
КонецПроцедуры

// ============================================================
// Сохраняет плоский список добавляемых GTIN в CSV
// ============================================================
Процедура СохранитьСписокВCSV(СписокЗаписей)
    ИмяФайла = "F:\Добавляемые_GTIN_" + Формат(ТекущаяДата(), "ДФ=yyyyMMdd_HHmmss") + ".csv";
    ТекстCSV = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.ANSI);
    ТекстCSV.ЗаписатьСтроку("GTIN;ВидУпаковки;КоличествоУпаковок");
    Для каждого Запись Из СписокЗаписей Цикл
        ТекстCSV.ЗаписатьСтроку(Запись.GTIN + ";" + Строка(Запись.ВидУпаковки) + ";" + Строка(Запись.КоличествоПотребительскихУпаковок));
    КонецЦикла;
    ТекстCSV.Закрыть();
    Сообщить("Список добавляемых GTIN сохранён: " + ИмяФайла);
КонецПроцедуры

// ============================================================
// Обработчик кнопки на клиенте
// ============================================================
&НаКлиенте
Процедура ВыполнитьНаКлиенте(Команда)
    СоздатьGTINs();
КонецПроцедуры