Это старая версия документа!
&НаКлиенте Процедура ФайлExcelНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОчиститьДанныеПофайлу();
СтандартнаяОбработка = Ложь; ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбора.Заголовок = "Выберите файл"; ДиалогВыбора.Фильтр ="Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|"; Если ДиалогВыбора.Выбрать() Тогда ИмяФайла = ДиалогВыбора.ПолноеИмяФайла; КонецЕсли;
КонецПроцедуры
&НаКлиенте Процедура ОбработатьExcelФайл(Команда)
ОчиститьСообщения(); Если ПустаяСтрока(ИмяФайла) Тогда Возврат; КонецЕсли; ПрочитатьПервыичныеДанныеПоФайлу(); //Логируем LogФайл = Новый ТекстовыйДокумент; мсооб = Новый СообщениеПользователю; мсооб.Текст = ""+ТекущаяДата()+": Начало обработки."; LogФайл.ДобавитьСтроку(мсооб.Текст); мсооб.Сообщить();
Excel = ПодключитьсяКЭкселю();
Если Excel=Неопределено Тогда Возврат; КонецЕсли;
Книга = Excel.WorkBooks.Open(ИмяФайла);
Лист = Книга.WorkSheets(1);
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
ИсточникКодВ1 = ОпределитьЧтоЕстьКод(СокрЛП(Лист.Cells(2,1).Value));
НаборСтрокФайла = новый массив;
СчетчикПроблемныхПозиций = 0;
//Начинаем с второй строки в первой шапка)
для Строка = 2 по ВсегоСтрок цикл
//Находим номенклатуру по ШК
Код_товара = СокрЛП(Лист.Cells(Строка,ЭксельНомерКолонкиСКодом).Value);
Если не ЗначениеЗаполнено(Код_товара) И ЗначениеЗаполнено(СокрЛП(Лист.Cells(Строка,15).Value)) Тогда
мсооб = Новый СообщениеПользователю;
ИмяПозиции1 = "("+СокрЛП(Лист.Cells(Строка,15).Value)+")";
ИмяПозиции2 = " ("+СокрЛП(Лист.Cells(Строка,2).Value)+")";
ОбщеИмяПозиции = ИмяПозиции1+ИмяПозиции2;
мсооб.Текст = ""+ТекущаяДата()+": Для позиции "+ОбщеИмяПозиции+" не указан код на PromUa";
LogФайл.ДобавитьСтроку(мсооб.Текст);
мсооб.Сообщить();
Продолжить;
ИначеЕсли не ЗначениеЗаполнено(Код_товара) Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(СокрЛП(ЭксельКолдПозицииДляОбработки)) И Код_товара<>СокрЛП(ЭксельКолдПозицииДляОбработки) Тогда Продолжить; КонецЕсли;
НоменклатураИлиХарактеристикаПоШтрихКоду = НайтиПозициюПоШК(Код_товара);
//Проверяем колонку с номером группы разновидностй
ID_группы_разновидностей = СокрЛП(Лист.Cells(Строка,ЭксельНомерКолонкиСКодомГруппы).Value);
ЭтоВторостепеннаяХарактеристика=УжеЕстьВТЗУжеОбработанных(Код_товара,ID_группы_разновидностей);
НовыйГуид = ПолучитьГУИДНоменклатурыИДИХарКИ(НоменклатураИлиХарактеристикаПоШтрихКоду,ЭтоВторостепеннаяХарактеристика,Код_товара,СчетчикПроблемныхПозиций,ID_группы_разновидностей,LogФайл,ОбщеИмяПозиции);
Если СокрЛП(строка(Лист.Cells(Строка,ЭксельНомерКолонкиСГУИД1С).Value))<>СокрЛП(строка(НовыйГуид)) Тогда
ЭксельКолВоИзмененныхЗаписией = ЭксельКолВоИзмененныхЗаписией+1;
Лист.Cells(Строка,ЭксельНомерКолонкиСГУИД1С).Value = строка(НовыйГуид);
КонецЕсли;
//Обновляем индикатор прогресса
ИндикаторОбработкиExcel = Строка;
//Заглушка если нужно остановить цикл
Если КоличествоСтрокДляОбработки>0 И Строка=(КоличествоСтрокДляОбработки+1) Тогда
ОтключитьсяОтЭкселя(Excel,ИмяФайла);
Прервать;
КонецЕсли;
КонецЦикла;
//сохранить и Закрываем эксель
ОтключитьсяОтЭкселя(Excel,ИмяФайла);
//Закрываем лог
LogФайл.ДобавитьСтроку(""+ТекущаяДата()+": Обработка завершена");
Если ЭксельСохранятьЛог Тогда
LogФайл.Записать(ЭксельПутьДляСохраненияЛога,КодировкаТекста.UTF8,Символы.ВК + Символы.ПС);
КонецЕсли;
мсооб = новый СообщениеПользователю;
мсооб.Текст = "Отчет сохранен в файле: "+ЭксельПутьДляСохраненияЛога;
мсооб.Сообщить();
КонецПроцедуры
&НаКлиенте Функция ПодключитьсяКЭкселю()
Excel = Неопределено;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при открытии файла с помощью Excel! Возможно не устанволен Эксель на этом ПК");
Сообщить(ОписаниеОшибки());
Excel.DisplayAlerts = 0;
Excel.ActiveWorkbook.Close();
Excel.DisplayAlerts = 1;
Excel.Application.Quit();
Excel = Неопределено;
Возврат Excel;
КонецПопытки;
Возврат Excel;
КонецФункции
&НаКлиенте Процедура ОтключитьсяОтЭкселя(Excel,ИмяФайла)
Если Excel<>Неопределено Тогда ПолныйПутьНовоеИмяФайла = СгенерироватьНовоеИмяФайла(ИмяФайла); Excel.ActiveWorkBook.SaveAs(ПолныйПутьНовоеИмяФайла); Excel.DisplayAlerts = 0; Excel.ActiveWorkbook.Close(); Excel.DisplayAlerts = 1; Excel.Application.Quit(); Excel = Неопределено; ХранилищеТЗ = ""; мсооб = Новый СообщениеПользователю; мсооб.Текст = ""+ТекущаяДата()+": Загрузка завершена.Новый файл сохранен по адресу: "+ПолныйПутьНовоеИмяФайла; мсооб.Сообщить(); КонецЕсли;
КонецПроцедуры