Протестировано на платформе: 8.3.18.1334, 8.3.20.1710
Написано в EDT: 2020.6.2.8
В конфигурации 1 обработка и 1 внешний источник данных, который нужен для реализации загрузки одного из вариантов. Добавлен общий макет для проверки скорости загрузки на вашем железе.
Модуль формы разбит на области, для удобного копирования в свои обработки или изучения способа загрузки.
Работа с Excel через OLE на сервере
#Область OLEСервер
&НаКлиенте
Процедура ЗагрузкаНаСервереOLE(Команда)
Объект.Таблица1.Очистить();
ТекДатаВремя = ТекущаяДата();
нФайл = Новый Файл(ИмяФайла);
//Если НЕ нФайл.Существует() Тогда
// Возврат;
//КонецЕсли;
ДвоичДанные = Новый ДвоичныеДанные(ИмяФайла);
ОбработкаОЛЕНаСервере(ДвоичДанные, нФайл.Расширение);
ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
Сообщить(ИтоговоеВремя);
КонецПроцедуры
&НаСервере
Процедура ОбработкаОЛЕНаСервере(ДвоичДанные, Расширение)
ФайлЭксельНаСервере = ПолучитьИмяВременногоФайла(Расширение);
ДвоичДанные.Записать(ФайлЭксельНаСервере);
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Эксель.DisplayAlerts = 0;
Эксель.Visible = 0;
Исключение
Возврат;
КонецПопытки;
ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);
КоличествоСтраниц = ЭксельКнига.Sheets.Count;
// Перебираем все листы
Для НомерЛиста = 1 По КоличествоСтраниц Цикл
Лист = ЭксельКнига.Sheets(НомерЛиста);
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
КоличествоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
// Перебираем строки
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Нстр = Объект.Таблица1.Добавить();
Нстр.КолонкаКод = Лист.Cells(НомерСтроки, 1).Value;
Нстр.Колонка2 = Лист.Cells(НомерСтроки, 2).Value;
Нстр.Колонка3 = Лист.Cells(НомерСтроки, 3).Value;
Нстр.Колонка4 = Лист.Cells(НомерСтроки, 4).Value;
//// Перебираем колонки
//Для НомерКолонки = 1 По КоличествоКолонок Цикл
// ЗначениеВЯчейке = Лист.Cells(НомерСтроки, НомерКолонки).Value;
// // ...
// Сообщить(ЗначениеВЯчейке); // Обрабатываем занчение
// // ...
//КонецЦикла;
КонецЦикла;
КонецЦикла;
Эксель.Workbooks.Close();
Эксель.Application.Quit();
КонецПроцедуры
#КонецОбласти
Работа с Excel используя внешний источник данных
#Область ВнешнийИсточникДанных
&НаКлиенте
Процедура ЗагрузкаСПомощьюВнешнегоИсточникаДанных(Команда)
Объект.Таблица1.Очистить();
ТекДатаВремя = ТекущаяДата();
ЗагрузкаСПомощьюВнешнегоИсточникаДанныхНаСервере();
ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
Сообщить(ИтоговоеВремя);
КонецПроцедуры
&НаСервере
Процедура ЗагрузкаСПомощьюВнешнегоИсточникаДанныхНаСервере()
Объект.Таблица1.Очистить();
ПараметрыПодключения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыПодключения.СтрокаСоединения =
"Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + ИмяФайла + ";";
ВнешниеИсточникиДанных.Excel.УстановитьОбщиеПараметрыСоединения(ПараметрыПодключения);
ВнешниеИсточникиДанных.Excel.УстановитьСоединение();
//Запрос = Новый Запрос("ВЫБРАТЬ
// | ExcelТаблицаТаблица1.КолонкаКод,
// | ExcelТаблицаТаблица1.Колонка2,
// | ExcelТаблицаТаблица1.Колонка3 КАК Колонка3
// |ИЗ
// | ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1
// |ГДЕ
// | ExcelТаблицаТаблица1.Колонка3 > 1
// |УПОРЯДОЧИТЬ ПО
// | Колонка3");
Запрос = Новый Запрос("ВЫБРАТЬ
| ExcelТаблицаТаблица1.КолонкаКод,
| ExcelТаблицаТаблица1.Колонка2,
| ExcelТаблицаТаблица1.Колонка3 КАК Колонка3,
| ExcelТаблицаТаблица1.Колонка4 КАК Колонка4
|ИЗ
| ВнешнийИсточникДанных.Excel.Таблица.Таблица1 КАК ExcelТаблицаТаблица1");
ТаблицаЭксельВ1с = Запрос.Выполнить().Выгрузить();
Объект.Таблица1.Загрузить(ТаблицаЭксельВ1с);
//Для Каждого Стр Из ТаблицаЭксельВ1с Цикл
// Сообщить(Стр); // Обрабатываем
//КонецЦикла;
КонецПроцедуры
Работа с Excel через OLE на клиенте
#Область OLEКлиент
&НаКлиенте
Процедура ЗагрузкаНаКлиентеOLE(Команда)
Объект.Таблица1.Очистить();
ТекДатаВремя = ТекущаяДата();
Попытка
Эксель = Новый COMОбъект("Excel.Application");
Эксель.DisplayAlerts = 0;
Эксель.Visible = 0;
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
ЭксельКнига = Эксель.Workbooks.Open(ИмяФайла);
КоличествоСтраниц = ЭксельКнига.Sheets.Count;
// Перебираем все листы
Для НомерЛиста = 1 По КоличествоСтраниц Цикл
Лист = ЭксельКнига.Sheets(НомерЛиста);
КоличествоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
КоличествоКолонок = Лист.Cells(1, 1).SpecialCells(11).Column;
// Перебираем строки
Для НомерСтроки = 1 По КоличествоСтрок Цикл
Нстр = Объект.Таблица1.Добавить();
Нстр.КолонкаКод = Лист.Cells(НомерСтроки, 1).Value;
Нстр.Колонка2 = Лист.Cells(НомерСтроки, 2).Value;
Нстр.Колонка3 = Лист.Cells(НомерСтроки, 3).Value;
Нстр.Колонка4 = Лист.Cells(НомерСтроки, 4).Value;
// Перебираем колонки
//Для НомерКолонки = 1 По КоличествоКолонок Цикл
// ЗначениеВЯчейке = Лист.Cells(НомерСтроки, НомерКолонки).Value;
// // ...
// Сообщить(ЗначениеВЯчейке); // Обрабатываем занчение
// // ...
//КонецЦикла;
КонецЦикла;
КонецЦикла;
Эксель.Workbooks.Close();
Эксель.Application.Quit();
ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
Сообщить(ИтоговоеВремя);
КонецПроцедуры
#КонецОбласти
Загрузка в табличный документ
#Область ТабличныйДокумент
&НаСервере
Процедура ЗагрузкаВТабличныйДокументНаСервере()
табДок = Новый ТабличныйДокумент;
Попытка
табДок.Прочитать(ИмяФайла);
Исключение
Возврат;
КонецПопытки;
нТабзнч = Новый ТаблицаЗначений;
нТабзнч.Колонки.Добавить("КолонкаКод", Новый ОписаниеТипов("Строка"));
нТабзнч.Колонки.Добавить("Колонка2", Новый ОписаниеТипов("Строка"));
нТабзнч.Колонки.Добавить("Колонка3", Новый ОписаниеТипов("Строка"));
нТабзнч.Колонки.Добавить("Колонка4", Новый ОписаниеТипов("Строка"));
КоличествоСтрок = табДок.ВысотаТаблицы;
Для сч = 2 По КоличествоСтрок Цикл
нСтр = нТабзнч.Добавить();
Попытка
нСтр.КолонкаКод = Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0;") + "C" + 1).ТекущаяОбласть.Текст);
нСтр.Колонка2 = Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 2).ТекущаяОбласть.Текст);
нСтр.Колонка3 = Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 3).ТекущаяОбласть.Текст);
нСтр.Колонка4 = Строка(табДок.ПолучитьОбласть("R" + Формат(сч, "ЧГ=0") + "C" + 4).ТекущаяОбласть.Текст);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось загрузить строку " + Строка(сч);
Сообщение.Сообщить();
КонецПопытки;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузкаВТабличныйДокумент(Команда)
Объект.Таблица1.Очистить();
ТекДатаВремя = ТекущаяДата();
ЗагрузкаВТабличныйДокументНаСервере();
ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
Сообщить(ИтоговоеВремя);
КонецПроцедуры
#КонецОбласти
Работа с Excel через построитель
#Область ТабличныйДокументv2Построитель
&НаКлиенте
Процедура ЗагрузкаВТабличныйДокументv2(Команда)
Объект.Таблица1.Очистить();
ТекДатаВремя = ТекущаяДата();
ЗагрузкаВТабличныйДокументНаСервереv2();
ИтоговоеВремя = ТекущаяДата() - ТекДатаВремя;
Сообщить(ИтоговоеВремя);
КонецПроцедуры
&НаСервере
Процедура ЗагрузкаВТабличныйДокументНаСервереv2()
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла);
ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб);
Построитель.Выполнить();
ТабДанные = Построитель.Результат.Выгрузить();
Объект.Таблица1.Загрузить(ТабДанные);
//Для Каждого Стр Из ТабДанные Цикл
// Сообщить(стр); // Обрабатываем
//КонецЦикла;
КонецПроцедуры
#КонецОбласти
Готовое решение
Загрузка документов из Excel в 1С одним нажатием!
С помощью данной обработки вы сможете загружать любые товарные документы буквально в один клик! Для загрузки необходимо просто выбрать файлы Excel и нажать кнопку "Загрузить". Простейший интерфейс и мощный механизм поиска номенклатуры. Распознает документы любой формы (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.)