Общая форма быстрой загрузки Excel предназначена для удобного вызова из любого места конфигурации командой из нескольких строк:
&НаКлиенте
Процедура ОбработатьРезультат(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Отладка=Истина;
Если ТипЗнч(РезультатЗакрытия)=Тип("Массив") Тогда
Если Отладка Тогда
Сообщить("Пользователь нажал кнопку 'Вернуть результат'");
Сообщить("//\\//\\//\\");
ПервыйЗапуск=Истина;
Для Каждого ЭлементМассиваРезультатЗакрытия из РезультатЗакрытия Цикл
Если ПервыйЗапуск Тогда
ТекстЗаголовка="";
Для Каждого ЭлементСтруктуры из ЭлементМассиваРезультатЗакрытия Цикл
ТекстЗаголовка=ТекстЗаголовка+ЭлементСтруктуры.Ключ+"/ ";
КонецЦикла;
Сообщить(ТекстЗаголовка);
ПервыйЗапуск=Ложь;
КонецЕсли;
ТекстЭлемента="";
Для Каждого ЭлементСтруктуры из ЭлементМассиваРезультатЗакрытия Цикл
ТекстЭлемента=ТекстЭлемента+ЭлементСтруктуры.Значение+"/ ";
КонецЦикла;
Сообщить(ТекстЭлемента);
КонецЦикла;
Иначе
Для Каждого ЭлементМассиваРезультатЗакрытия из РезультатЗакрытия Цикл
Для Каждого ЭлементСтруктуры из ЭлементМассиваРезультатЗакрытия Цикл
Сообщить(""+ЭлементСтруктуры.Ключ+"="+ЭлементСтруктуры.Значение);
КонецЦикла;
КонецЦикла
КонецЕсли;
Иначе
Если Отладка Тогда
Сообщить("Пользовать нажал отмена");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПримерЗапускаЧтенияExcel(Команда)
ОбщаяФормаТС_ЧтениеExcel=ПолучитьФорму("ОбщаяФорма.ТС_ЧтениеExcel");
ДополнительныеПараметрыФормыЧтениеExcel=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруДополнительныеПараметрыФормыЧтениеExcel();
// Ввод первого показателя
СтруктураЭлементаМассиваПоказателей=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруЭлементаМассиваПоказателей();
СтруктураЭлементаМассиваПоказателей.Показатель="ШК_Упаковки";
//Ввод первого критерия поиска первого показателя
СтруктураПоиска=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруПоиска();
СтруктураПоиска.Включение1="Код маркировки";
СтруктураПоиска.ТочныйПоиск=Истина;
СтруктураПоиска.ПоискСУчетомРегистра=Ложь;
СтруктураЭлементаМассиваПоказателей.Поиск.Добавить(СтруктураПоиска);
//Ввод второго критерия поиска первого показателя
СтруктураПоиска=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруПоиска();
СтруктураПоиска.Включение1="КиЗ";
СтруктураПоиска.ТочныйПоиск=Истина;
СтруктураПоиска.ПоискСУчетомРегистра=Ложь;
СтруктураЭлементаМассиваПоказателей.Поиск.Добавить(СтруктураПоиска);
ДополнительныеПараметрыФормыЧтениеExcel.МассивПоказателей.Добавить(СтруктураЭлементаМассиваПоказателей);
// Ввод второго показателя
СтруктураЭлементаМассиваПоказателей=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруЭлементаМассиваПоказателей();
СтруктураЭлементаМассиваПоказателей.Показатель="СтатусПроверки";
//Ввод первого критерия поиска второго показателя
СтруктураПоиска=ОбщаяФормаТС_ЧтениеExcel.ПолучитьСтруктуруПоиска();
СтруктураПоиска.Включение1="Статус";
СтруктураПоиска.Исключение1="ШК";
СтруктураПоиска.ТочныйПоиск=Ложь;
СтруктураПоиска.ПоискСУчетомРегистра=Ложь;
СтруктураЭлементаМассиваПоказателей.Поиск.Добавить(СтруктураПоиска);
ДополнительныеПараметрыФормыЧтениеExcel.МассивПоказателей.Добавить(СтруктураЭлементаМассиваПоказателей);
ОбщаяФормаТС_ЧтениеExcel.ЗапускТС_ЧтениеExcel(ЭтотОбъект, "ОбработатьРезультат",Неопределено,ДополнительныеПараметрыФормыЧтениеExcel);
КонецПроцедуры
При открытии формы автоматически анализируется последняя открытая книга. Это позволяет открыть файл из почты, никуда его не сохранять, а сразу загрузить из него данные в 1С, а также, увидев ошибку в данных, подправить их в открытом листе Excel до возврата результата.
В диалоге формы можно выбрать книгу, лист, а также при необходимости открыть новый файл Excel.
В форму можно передать критерии поиска Показателей (колонок). Это позволяет собирать данные в одном месте из примерно похожих данных.
Например, на Ваш запрос разные контрагенты присылаю свои данные в Excel, но форматы немного отличаются: Разные номера колонок, разные строки начала данных, разные названия колонок (Названия колонок условно формализованы, поэтому поиск идет по включению или исключению слов). В итоге эта форма собирает формализованную таблицу показателей (Массив, каждый элемент которого содержит структуру, соответствующую показателям)
Форма быстро работает с большим количеством данных в Excel за счет того, что строки не перебираются по одной ячейке, а из Excel передается массивом (с помощью команды "ДиапозонExcel.Value.Выгрузить()"). Учтен ньюнс ограничения около 60000 строк. Обработка тестировалась на загрузке книги покупок объемом 160000 строк в 1С Бухгалтерия Корп 8.3. Передача данных из формы заняло меньше минуты.
&НаКлиенте
Процедура ВернутьРезультатСПодключением(EXCEL)
МассивРезультата=Новый Массив;
СтруктураРезультата=Новый Структура;
тмпЛист=EXCEL.Workbooks(ВыбраннаяКнига).Sheets(ВыбранныйЛист);
МаксимальныйНомерКолонки=0;
МинимальныйНомерКолонки=2000;
Для Каждого СтрокаТЗПоказателей из ТЗПоказателей Цикл
Если МаксимальныйНомерКолонки<СтрокаТЗПоказателей.НомерКолонки Тогда
МаксимальныйНомерКолонки=СтрокаТЗПоказателей.НомерКолонки;
КонецЕсли;
Если МинимальныйНомерКолонки>СтрокаТЗПоказателей.НомерКолонки Тогда
Если СтрокаТЗПоказателей.НомерКолонки<>0 Тогда
МинимальныйНомерКолонки=СтрокаТЗПоказателей.НомерКолонки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для н=0 по цел((СтрокаНачалаДанных+КоличествоСтрокРезультата)/60000) Цикл
ЗначениеСтр = тмпЛист.Range(тмпЛист.Cells(СтрокаНачалаДанных+1+н*60000,
МинимальныйНомерКолонки),
тмпЛист.Cells(СтрокаНачалаДанных+мин(КоличествоСтрокРезультата, (н+1)*60000),
МаксимальныйНомерКолонки));
АнализируемыеДанные = ЗначениеСтр.Value.Выгрузить();
Для тмпНомерСтроки=1 по мин(КоличествоСтрокРезультата-н*60000,60000) Цикл
СтруктураРезультата=Новый Структура;
Для Каждого СтрокаТЗПоказателей из ТЗПоказателей Цикл
Если СтрокаТЗПоказателей.НомерКолонки>0 Тогда
СтруктураРезультата.Вставить(СтрокаТЗПоказателей.Показатель,АнализируемыеДанные[СтрокаТЗПоказателей.НомерКолонки-МинимальныйНомерКолонки][тмпНомерСтроки-1]);
КонецЕсли;
КонецЦикла;
МассивРезультата.Добавить(СтруктураРезультата);
КонецЦикла;
КонецЦикла;
Закрыть(МассивРезультата);
КонецПроцедуры
Комплект содержит 4 файла:
ТС_ЧтениеExcel.cf - конфигурация с общей формой "ТС_ЧтениеExcel"
Расш_ЧтениеExcel.cfe - Расширение конфигурации с общей формой "ТС_ЧтениеExcel"
ПримерЗапускаЧтениеExcel.epf - Пример запуска общей формы "ТС_ЧтениеExcel" из внешней обработки
КиЗы.xlsx - Excel файл с примером, содержащим на разных листах данные в разном формате
Тестировалось на Платформе: 1С:Предприятие 8.3 (8.3.16.1063).