Обработка представляет собой просто заготовку для загрузки данных из файла Excel. Она позволяет работать как с платным (или успешно ломанным) Microsoft Excel на компьютере, так и с бесплатными Open Office или Libre Office (которые все чаще используются во многих компаниях).
Сразу сообщаю - обработка не является неким универсальным загрузчиком, в котором можно извратиться и загрузить все что угодно из Excel не заглядывая в конфигуратор.
Я не сторонник подобных решения, т.к. как правило 95% пользователей 1С не в состоянии таким механизмом воспользоваться - просто не хватит навыков в программировании и построении запросов. И получается что подобные мощные и гибкие загрузчики по большей части тешат самолюбие их авторов.
Я, скажем так, за разумный подход и полуавтоматизацию в этом вопросе. Поэтому предлагаю свою болванку обработки, которую можно любому, даже начинающему, программисту по быстрому допилить под собственные нужды.
Плюс обработки в том, что не надо лезть в куски кода работы с COM-объектами, а сразу в нужном месте написать свой кусок и использовать. Для этого достаточно почитать комментарии к коду и вставить свои куски вот в этих двух процедурах:
&НаКлиенте
Процедура ВыполнитьЗагрузку()
Перем Источник, КоличествоСтрок, КоличествоКолонок, ЗначениеЯчейки, СтруктураCOMОбъектов;
//Отказ готовим на случай если надо будет не продолжать загрузку данных на сервере.
Отказ = Ложь;
//Инициализация обработчика
ТекстОшибки = ИнициализироватьИсточникДанных(Источник, КоличествоСтрок, КоличествоКолонок, СтруктураCOMОбъектов);
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
//Готовим массив под строки.
//Каждая строка будет представлена в виде структуры.
МассивОбработки = Новый Массив;
Для ТекНомерСтроки = Объект.НомерНачальнойСтроки ПО КоличествоСтрок Цикл
//Получение значений ячеек и помещение в структуру
СтруктураСтроки = Новый Структура("НомерСтрокиФайла", ТекНомерСтроки); //Для того чтобы можно было состыковать с какой строкой таблицы файла работаем
//...
//Текст обработчика - получение данных из таблицы файла.
//Заменяем ключи структуры на нужные нам. Номера колонок указываем так же - какие нам нужны
СтруктураСтроки.Вставить("Заголовок1", ПолучитьЗначениеЯчейки(Источник, 1, ТекНомерСтроки));
СтруктураСтроки.Вставить("Заголовок2", ПолучитьЗначениеЯчейки(Источник, 2, ТекНомерСтроки));
СтруктураСтроки.Вставить("Заголовок3", ПолучитьЗначениеЯчейки(Источник, 3, ТекНомерСтроки));
СтруктураСтроки.Вставить("Заголовок4", ПолучитьЗначениеЯчейки(Источник, 4, ТекНомерСтроки));
//...
//Помещаем сформированную структуру в массив
МассивОбработки.Добавить(СтруктураСтроки);
КонецЦикла;
//Закрываем обработчик
ТекстОшибки = ЗакрытьОбработчик(Источник, СтруктураCOMОбъектов);
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки);
Возврат;
КонецЕсли;
//Передаем массив на сервер для уже собственно загрузки данных
//Если установлена галочка, то выводим загруженные данные пользователю на просмотр в виде табличного документа.
//Пользователь может отменить дальнейшую обработку, если его что-то не устраивает в данных.
Если Не Отказ Тогда
Если Объект.ОтображатьЗагруженныеДанные Тогда
МожноПродолжатьЗагрузку = ОткрытьФормуМодально("ВнешняяОбработка.БолванкаИмпортаИзExcelИOpenOffice.Форма.ФормаРезультатаЗагрузки", Новый Структура("МассивОбработки", МассивОбработки), ЭтаФорма);
Если МожноПродолжатьЗагрузку Тогда
ОбработатьПолученныеДанныеНаСервере(МассивОбработки);
Иначе
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Обработка прервана!");
КонецЕсли;
Иначе
ОбработатьПолученныеДанныеНаСервере(МассивОбработки);
КонецЕсли;
КонецЕсли;
КонецПроцедуры //ВыполнитьЗагрузку()
&НаСервере
Процедура ОбработатьПолученныеДанныеНаСервере(МассивОбработки)
Для Каждого СтруктураСтроки Из МассивОбработки Цикл
//...
//Текст обработчика - загрузка данных из полученного массива структур строк.
//...
КонецЦикла;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Обработка завершена!");
КонецПроцедуры //ОбработатьПолученныеДанныеНаСервере()
...не заглядывая в остальные места )))
В общем свой код вставляйте тут:
и тут:
Сами куски кода работы с COM-объектами естественно не мои - по работе с экселем уже и не вспомню откуда брал изначально, а по Опен офису помогла вот эта статья: 1С и работа с Excel, OpenOffice/LibreOffice, ADODB (за что огромное спасибо автору!)
Для понимания работы, ну и собственно проверки работоспособности обработки - добавил кнопочку, которая сохранит из бинарного макета обработки на диск тестовый файл Excel, чтобы его можно было бы выбрать и протестировать работу загрузчика.
Прошу помидорами в комментах не закидывать - еще раз, не претендую на какую-либо оригинальность, просто причесал инструмент под себя, и решил, что, может, еще кому пригодится ))
Разрабатывалось на платформе 8.3.16, но будет работать и на более старых версиях.