Идея не новая, на ИС имеются уже готовые подобные разработки, например
- 1C 8.1: Потоковая загрузка документов из Excel ( универсальная, xls dbf txt mxl ) - автор: Z-z-z
- Загрузка данных из табличного документа (доработаная) - автор: pri_hod
но предлагается сделать то же самое самостоятельно. Пригодится в будущем.
Пример из жизни: Принесли листик с именами клиентов и суммами зарплат - нужно внести в базу.
Как быть?
1. Взять чужую готовую разработку (плюс: ничего разрабатывать не надо, можно отдать бухгалтеру на растерзание, минус: как правило, бухгалтер придет к Вам с "просьбой" показать как и что делать... возможно, придется шаманить с настройками - особенно если обмен не удастся).
2. Написать "простенькую" обработку загрузки из Excel через OLE (тут ключевое слово "простенькую"... Помимо наладки обмена, нужно вкратце знать как устроен Excel - и как к нему обращаться. Скорее всего - нужен хотя бы минимальный опыт написания макросов. Хотя примеров более чем достаточно).
3. Простое решение:
Создаем внешнюю обработку, туда вставим табличное поле. Включим показывать заголовки колонок и строк и разрешить редактирование. При работе - нужную таблицу копируем из Excel в буфер обмена и вставляем в табличный документ. При этом форматирование теряется, но оно нам не особо надо.
Далее на ту же форму кидаем кнопку "Выполнить" (хотя вообще-то эта кнопка уже должна быть создана автоматически) и в процедуре-обработчике описываем цикл по строкам с чтением и выполнением нужных действий:
Процедура КнопкаВыполнитьНажатие(Кнопка)
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
НачальнаяСтрока = 2;
КонечнаяСтрока = ЭлементыФормы.ТабДок.ВысотаТаблицы;
Док = Документы.КорректировкаЗаписейРегистровНакопления.СоздатьДокумент();
НовСтр = Док.ТаблицаРегистровНакопления.Добавить();
НовСтр.Имя = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Имя;
НовСтр.Представление = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Представление();
Рег = Док.Движения.ВзаиморасчетыСРаботникамиОрганизаций;
Для сч=НачальнаяСтрока по КонечнаяСтрока Цикл
СуммаВзаиморасчетов = СокрЛП(ТабДок.Область(сч, 2).Текст);
СуммаВзаиморасчетов = Число(СуммаВзаиморасчетов);
ИмяФизЛица = СокрЛП(ТабДок.Область(сч, 1).Текст);
Если ИмяФизЛица="" Тогда
Продолжить;
КонецЕсли;
ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ИмяФизЛица);
Если ФизЛицо.Пустая() Тогда
Сообщить("Физ. лицо не найдено: "+ИмяФизЛица);
Продолжить;
КонецЕсли;
НовЗапись = Рег.ДобавитьПриход();
НовЗапись.Активность = истина;
НовЗапись.ФизЛицо = ФизЛицо;
НовЗапись.СуммаВзаиморасчетов = СуммаВзаиморасчетов;
КонецЦикла;
Док.ПолучитьФорму().Открыть();
КонецПроцедуры
В принципе, этого достаточно чтобы загрузить данные в документ и показать форму - остальные поля в форме можно заполнить вручную. Можно доработать: вынести на форму поля для заполнения значений при создании конкретного документа, настройку начальной и конечной строк и т.п. Тут как говорится - нет предела совершенству.
Плюсы: пишем все сами - не надо изучать чужой код или что-то настраивать, не требуется знание макросов и устройства Excel (как и сам Excel), не заморачиваемся с OLE-подключением.
Минусы: Универсальностью данное решение не обладает, но как вариант - сделать "по-быстрому" и "на один раз".
Итог: у меня рядом с обработкой "ЗагрузкаИзExcel.epf" со временем накопились обработки, которые делал по-быстрому, копируя ее и изменяя тело цикла "Для"...