Загрузка данных
&НаСервере
Процедура Создать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();
КонецПроцедуры