chtenie_excel_v_tablicu_znachenij

Это старая версия документа!


&НаКлиенте Процедура Файл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 = Неопределено;
	ХранилищеТЗ	=	"";
	
	мсооб	=	Новый СообщениеПользователю;
	мсооб.Текст	=	""+ТекущаяДата()+": Загрузка завершена.Новый файл сохранен по адресу: "+ПолныйПутьНовоеИмяФайла;
	мсооб.Сообщить();
	
КонецЕсли;

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

  • /sites/data/attic/chtenie_excel_v_tablicu_znachenij.1612386907.txt.gz
  • Последнее изменение: 2021/02/03 21:15
  • tro