Обработка запускается как внешняя из пользовательского режима.
Выбирается путь к файлу Excel (*.xlsx;*.xls;) и происходит загрузка данных из файла по этому пути. Как таковой загрузки никаких данных тут не происходит, и обработка строк условная.
Все тесты производились на платформе 8.3.20.1914, однако код отработает на любой из 8.2, 8.3.
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = НСтр("ru = 'Файл XLSX'; en = 'XLSX file'") + "(*.xlsx)|*.xlsx";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ПутьКФайлу", ЭтотОбъект, Новый Структура("ДиалогОткрытияФайла",ДиалогОткрытияФайла)));
КонецПроцедуры
&НаКлиенте
Процедура ПутьКФайлу(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт //Процедура обрабатывает результат выбора файла пользователем
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
Если ВыбранныеФайлы <> Неопределено Тогда
Объект.ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
Иначе
ПоказатьПредупреждение(Неопределено,"Файл не выбран!");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
Если Объект.ПутьКФайлу = "" Тогда
Сообщ = Новый СообщениеПользователю;
Сообщ.Текст = "Выберите файл!";
Сообщ.Сообщить();
Иначе
Эксель = Новый COMОбъект("Excel.Application");
КнигаЭксель = Эксель.Workbooks.Open(Объект.ПутьКФайлу);
Лист1 = Книгаэксель.WorkSheets(1);
п = 2;
Пока п < 13 Цикл
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Артикул", СокрЛП(Лист1.Cells(п,1).value));
СтруктураДанных.Вставить("Наименование",СокрЛП(Лист1.Cells(п,2).value));
СтруктураДанных.Вставить("Количество",СокрЛП(Лист1.Cells(п,3).value));
СтруктураДанных.Вставить("ЕдиницаИзмерения",СокрЛП(Лист1.Cells(п,4).value));
СтруктураДанных.Вставить("Тип",СокрЛП(Лист1.Cells(п,5).value));
СтруктураДанных.Вставить("Цена",СокрЛП(Лист1.Cells(п,6).value));
СтруктураДанных.Вставить("ГОСТ",СокрЛП(Лист1.Cells(п,7).value));
ЗагрузкаНаСервере(СтруктураДанных);
п = п+1;
КонецЦикла;
Сообщ = Новый СообщениеПользователю;
Сообщ.Текст = "Данные были успешно загружены!";
Сообщ.Сообщить();
Эксель.Application.Quit();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузкаНаСервере(СтруктураДанных)
Если Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтруктураДанных.ЕдиницаИзмерения) = Справочники.ЕдиницыИзмерения.ПустаяСсылка() Тогда
ДобЕдиницы = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
ДобЕдиницы.Наименование = СтруктураДанных.ЕдиницаИзмерения;
ДобЕдиницы.Записать();
КонецЕсли;
Если Справочники.ТипыДеталей.НайтиПоНаименованию(СтруктураДанных.Тип) = Справочники.ТипыДеталей.ПустаяСсылка() Тогда
ДобТипаД = Справочники.ТипыДеталей.СоздатьЭлемент();
ДобТипаД.Наименование = СтруктураДанных.Тип;
ДобТипаД.Записать();
КонецЕсли;
Если Справочники.ГОСТы.НайтиПоНаименованию(СтруктураДанных.ГОСТ) = Справочники.ГОСТы.ПустаяСсылка() Тогда
ДобГост = Справочники.ГОСТы.СоздатьЭлемент();
ДобГост.Наименование = СтруктураДанных.ГОСТ;
ДобГост.Записать();
КонецЕсли;
//детали и все все
Если Справочники.Детали.НайтиПоНаименованию(СтруктураДанных.Наименование) = Справочники.Детали.ПустаяСсылка() Тогда
ДобДетали = Справочники.Детали.СоздатьЭлемент();
ДобДетали.Артикул = СтруктураДанных.Артикул;
ДобДетали.Наименование = СтруктураДанных.Наименование;
ДобДетали.Количество = СтруктураДанных.Количество;
ДобДетали.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(СтруктураДанных.ЕдиницаИзмерения);
ДобДетали.Тип = Справочники.ТипыДеталей.НайтиПоНаименованию(СтруктураДанных.Тип);
ДобДетали.Цена = СтруктураДанных.Цена;
ДобДетали.ГОСТ = Справочники.ГОСТы.НайтиПоНаименованию(СтруктураДанных.ГОСТ);
ДобДетали.Записать();
КонецЕсли;
КонецПроцедуры // ЗагрузкаНаСервере()