Как программисту быстро загрузить данные из Excel

21.11.11

Интеграция - Загрузка и выгрузка в Excel

Встала как-то разовая задача - загрузить данные из Excel в базу...
Идея не новая, на ИС имеются уже готовые подобные разработки, но предлагается сделать самостоятельно. Пригодится в будущем.

Идея не новая, на ИС имеются уже готовые подобные разработки, например

но предлагается сделать то же самое самостоятельно. Пригодится в будущем.

 

Пример из жизни: Принесли листик с именами клиентов и суммами зарплат - нужно внести в базу.

Как быть?

1. Взять чужую готовую разработку (плюс: ничего разрабатывать не надо, можно отдать бухгалтеру на растерзание, минус: как правило, бухгалтер придет к Вам с "просьбой" показать как и что делать... возможно, придется шаманить с настройками - особенно если обмен не удастся).

2. Написать "простенькую" обработку загрузки из Excel через OLE (тут ключевое слово "простенькую"... Помимо наладки обмена, нужно вкратце знать как устроен Excel - и как к нему обращаться. Скорее всего - нужен хотя бы минимальный опыт написания макросов. Хотя примеров более чем достаточно).

3. Простое решение:

Создаем внешнюю обработку, туда вставим табличное поле. Включим показывать заголовки колонок и строк и разрешить редактирование. При работе - нужную таблицу копируем из  Excel в буфер обмена и вставляем в табличный документ. При этом форматирование теряется, но оно нам не особо надо.

Далее на ту же форму кидаем кнопку "Выполнить" (хотя вообще-то эта кнопка уже должна быть создана автоматически) и в процедуре-обработчике описываем цикл по строкам с чтением и выполнением нужных действий:

Процедура КнопкаВыполнитьНажатие(Кнопка)

    ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;

    НачальнаяСтрока = 2;
    КонечнаяСтрока = ЭлементыФормы.ТабДок.ВысотаТаблицы;

    Док = Документы.КорректировкаЗаписейРегистровНакопления.СоздатьДокумент();
    НовСтр = Док.ТаблицаРегистровНакопления.Добавить();
    НовСтр.Имя = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Имя;
    НовСтр.Представление = Метаданные.РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Представление();

    Рег = Док.Движения.ВзаиморасчетыСРаботникамиОрганизаций;

    Для сч=НачальнаяСтрока по КонечнаяСтрока Цикл

        СуммаВзаиморасчетов = СокрЛП(ТабДок.Область(сч, 2).Текст);
        СуммаВзаиморасчетов = Число(СуммаВзаиморасчетов);

        ИмяФизЛица = СокрЛП(ТабДок.Область(сч, 1).Текст);
        Если ИмяФизЛица="" Тогда

            Продолжить;

        КонецЕсли;

        ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ИмяФизЛица);
        Если ФизЛицо.Пустая() Тогда

            Сообщить("Физ. лицо не найдено: "+ИмяФизЛица);
            Продолжить;

        КонецЕсли;

        НовЗапись = Рег.ДобавитьПриход(); 
        НовЗапись.Активность = истина;
        НовЗапись.ФизЛицо = ФизЛицо;
        НовЗапись.СуммаВзаиморасчетов = СуммаВзаиморасчетов;

    КонецЦикла;

    Док.ПолучитьФорму().Открыть();

КонецПроцедуры

В принципе, этого достаточно чтобы загрузить данные в документ и показать форму - остальные поля в форме можно заполнить вручную. Можно доработать: вынести на форму поля для заполнения значений при создании конкретного документа, настройку начальной и конечной строк и т.п. Тут как говорится - нет предела совершенству.

Плюсы: пишем все сами - не надо изучать чужой код или что-то настраивать, не требуется знание макросов и устройства Excel (как и сам Excel), не заморачиваемся с OLE-подключением.

Минусы: Универсальностью данное решение не обладает, но как вариант - сделать "по-быстрому" и "на один раз".

Итог: у меня рядом с обработкой "ЗагрузкаИзExcel.epf" со временем накопились обработки, которые делал по-быстрому, копируя ее и изменяя тело цикла "Для"...

 

См. также

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

6000 5100 руб.

09.11.2016    234107    1062    898    

1003

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", МагнитЭкспресс (быв.Казань-Экспресс), "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом", "Золотое Яблоко" в документы "Отчет комиссионера (агента) о продажах" и другие, работает в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

2400 руб.

12.08.2021    35486    348    68    

155

SALE! 30%

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Бухгалтер Пользователь Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    106909    313    173    

326

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 10.10.2024, версия 9.8 - 9.13)

15600 руб.

20.11.2015    156045    378    378    

513

Маркетплейсы Загрузка и выгрузка в Excel Программист Пользователь Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Управленческий учет Платные (руб)

Загрузка данных отчета о реализации и продаже товаров из сервиса Яндекс.Маркета «Беру» в 1С из Отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3; Управление нашей фирмой, редакция 3.0 и Розница, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    25342    252    1    

114

SALE! 15%

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

11100 9435 руб.

29.10.2014    216743    657    527    

456
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. murat_ 34 26.10.11 08:40 Сейчас в теме
А чем не устроила универсальная обработка с ИТС-диска "ЗагрузкаДанныхИзТабличногоДокумента" ?
Для разовых задач она самое то и писать ничего не нужно.
WanGoff; Eugeneer; Craig; +3 Ответить
5. Craig 275 02.11.11 08:15 Сейчас в теме
(1) Тоже поддерживаю. Обработка с диска ИТС ЗагрузкаДанныхИзТабличногоДокумента универсальна, там возможности куда больше чем в "простенькой" обработке написанной быстро на коленях.
7. MICK77 15 02.11.11 17:56 Сейчас в теме
Craig пишет:

(1) Тоже поддерживаю. Обработка с диска ИТС ЗагрузкаДанныхИзТабличногоДокумента универсальна, там возможности куда больше чем в "простенькой" обработке написанной быстро на коленях.

этой обработкой с диска можно загрузить только в 1 документ. а если надо их много?
RustIG; Karmerruk; b-dm; annak2980; +4 Ответить
10. 03.11.11 15:02 Сейчас в теме
(1) ей еще надо научить пользоваться пользователей. А тут можно просто написать простенькую обработку, научить пользователя в нее копировать данные и все.
11. murat_ 34 03.11.11 21:27 Сейчас в теме
(10) Автор вообще-то ясно указал "разовая задача" для "программиста", про повседневную работу пользователей речь здесь не шла.
2. DrAku1a 1745 26.10.11 08:57 Сейчас в теме
Устраивает, но порой проще и быстрее - написать самому.
3. dka80 21 26.10.11 09:25 Сейчас в теме
4. Attest 3 30.10.11 00:04 Сейчас в теме
6. kea35 02.11.11 17:53 Сейчас в теме
Обработка имеет шанс на жизнь
8. vikorn 03.11.11 13:11 Сейчас в теме
9. 03.11.11 15:01 Сейчас в теме
Вообще-то боян, но некоторые не знают, что так действительно удобнее.
Не нужно вводить имя файла.
12. Andrusha1 04.11.11 11:52 Сейчас в теме
Прикольно, идея копировать в буфер не приходила в голову. Хотя все оригинальное, просто.
13. westx 07.11.11 00:15 Сейчас в теме
Да, как-то не дошло до мозга о такой возможности, спасибо автору.
14. Alexey26 2 09.11.11 22:39 Сейчас в теме
15. petrovaUL 14.11.11 08:28 Сейчас в теме
16. Fruit83 28 19.11.11 00:10 Сейчас в теме
Спасибо за статью, для меня это сейчас самое то!:)
murat_ и Craig разница между обработкой и публикацией все-таки есть. :)
17. maloi_a 21.11.11 10:41 Сейчас в теме
Замечание.
Поправьте в примере "КонечнаяСтрока = ЭлементыФормы.ТабДок . ВысотаТаблицы ;"
на "КонечнаяСтрока = ТабДок.ВысотаТаблицы;"
18. DrAku1a 1745 21.11.11 10:55 Сейчас в теме
(17) Хорошо. Хотя оба варианта работоспособны.
19. annak2980 21.11.11 13:14 Сейчас в теме
Спасибо автору за интересную идею, описанную полностью в виде статьи
20. GTV 23.11.11 08:42 Сейчас в теме
А мне понравилось! Автор - молодец!
21. Fruit83 28 24.11.11 13:21 Сейчас в теме
У меня проблема возникла. Сперва система ругалась на СуммаВзаиморасчетов = Число(СуммаВзаиморасчетов); , писала что не может преобразовать к типу число. Теперь просто значение не присваивается.
22. DrAku1a 1745 24.11.11 18:20 Сейчас в теме
(21) Используйте СуммаВзаиморасчетов = Число(СокрЛП(СуммаВзаиморасчетов));, кроме того нужно проверять что сумма взаиморасчетов - не пустая строка, а также, если вы перекидываете данные из отчетов 8-ки - то учтите, что по-умолчанию 8-ка вставляет разделитель (пробел) между триадами числа, например код А = Число(Строка(1000)); вызовет в 8-ке ошибку.

Функция ВЧисло(знач Текст)
  ДопустимыеЗнаки = "0123456789,-";
  Текст = СокрЛП(""+Текст);
  Ответ = "";
  Для сч = 1 по СтрДлина(Текст) Цикл
    Символ = Сред(Текст, сч, 1);
    Если Найти(ДопустимыеЗнаки, Символ)>0 Тогда
      Ответ = Ответ + Символ;
    КонецЕсли;
  КонецЦикла
  Возврат ?(Ответ="", 0, Число(Ответ));
КонецФункции
Показать
23. Fruit83 28 24.11.11 19:19 Сейчас в теме
СуммаВзаиморасчетов = Число(СокрЛП(СуммаВзаиморасчетов)) не помогло, а вот функция помогла. Добавил ее в форму и вызвал СуммаВзаиморасчетов = ВЧисло(СуммаВзаиморасчетов);
Спасибо!
24. Fruit83 28 24.11.11 19:41 Сейчас в теме
Чем отличается Текст = СокрЛП(""+Текст) от Текст = СокрЛП(Текст)?
25. DrAku1a 1745 25.11.11 02:49 Сейчас в теме
(24) По-сути ничем, но есть один ньюанс:

ИМХО, проверено методом тыка: 1С при анализе выражений использует правило сложения переменных вариантного типа, как в Basic (результат выражения имеет такой же тип, как первая переменная (операнд) выражения, все остальные выражения приводятся к типу первого операнда).

Т.е. конструкция ""+Текст - это указание 1С, что если Текст не является строкой - то его нужно преобразовать в строку. Хотя 1С должна сама делать такое преобразование внутри СокрЛП() - я на это не полагаюсь и лишний раз перестраховываюсь от ошибок при выполнении кода.
26. Fruit83 28 25.11.11 23:21 Сейчас в теме
А как обойти обойти проблему контроля уникальности кодов? При загрузке справочника их надо указывать, но, если идет совпадение по кодам, загрузка прерывается...Мне сейчас приходится страховаться и указывать коды, которые наверняка не встретятся в справочнике.
27. DrAku1a 1745 26.11.11 04:06 Сейчас в теме
(26) Сделайте предварительную выборку по справочнику (до цикла загрузки) на предмет максимального кода - можно запросом, можно вручную. Поместите в отдельную переменную. Затем при добавлении нового значения в справочник - увеличивайте эту переменную на 1 и присваивайте код новому элементу.
28. nurislam 17.12.11 14:37 Сейчас в теме
Спасибо.Иногда нужна такая.
29. Koles 28.12.11 10:04 Сейчас в теме
Интересный приемчик. Спасибо.
30. Murom 28.12.11 11:00 Сейчас в теме
Очень интересный прием. Да и правда быстро и удобно.
Но я по-старинке пользуюсь универсальной "ЗагрузкаДанныхИзТабличногоДокумента". Хотя идея имеет место на жизнь. И еще удобно, если у клиента надо что-то загрузить, а "ЗагрузкаДанныхИзТабличногоДокумента" нет под рукой, то можно очень быстро набросать такую обработочку.
31. dmpas 418 28.12.11 11:24 Сейчас в теме
Да! Определённо наш метод!

Ещё можно табличный документ засунуть в макет внешней обработки и брать данные оттуда. Я использую это, когда мне надо одни и те же данные загрузить в пару тестовых баз по паре десятков раз, а потом отправить клиенту (ну или своими руками) для загрузки в рабочую. Единоразовый копипаст и дальше всё уже решается нажатием одной кнопки - товарищ Бух это любит.
32. Fruit83 28 10.01.12 12:01 Сейчас в теме
(31) baton_pk, не могли бы вы по-подробнее рассказать о том, как засунуть макет внешней обработки?
33. dmpas 418 10.01.12 12:07 Сейчас в теме
(32) Fruit83!
Всё то же самое:
во внешней обработке добавляем новый макет - табличный документ и копипастом из Excel вставляем табличку в макет.
Потом в коде просто вызываем ПолучитьМакет("НашаТабличка") и пробегаемся по табличке.

Можно посмотреть типовые - заполнение первоначальных данных в пустой базе или подбор из классификатора валют, например.
34. DrAku1a 1745 10.01.12 16:54 Сейчас в теме
(33) Можно обойтись и без макета - а вставить данные из Excel в поле табличного документа на форме - в режиме конфигуратора. И они сохранятся с обработкой.
35. dmpas 418 10.01.12 17:13 Сейчас в теме
(34) DrAku1a.
Можно, но оно тогда наружу торчать будет. В моих случаях хотелось всё это дело скрыть: таблиц для загрузки было несколько да и на форме были другие элементы, более нужные пользователю.
А так, да, Ваш вариант на все 100% справедлив.
36. nshrek 9 23.01.12 23:25 Сейчас в теме
спасибо, хоть и полно в инете аналогичных обработок но думаю пригодится и эта.
37. ivn75 2 23.01.12 23:30 Сейчас в теме
Смысл темы? В инете полно примеров решений загрузки из Excel при помощи DCOM объектов, при помощи которых можно не только загружать из Excel и Open office, но и выгрузки обратно с форматированием, проставлением формул и гиперссылок.
38. DrAku1a 1745 24.01.12 01:58 Сейчас в теме
(37) Чтобы использовать имеющиеся в инете примеры - нужно вникать в чужой код, возможно - читать документацию... и еще - немао подводных камней встретится... Правда, есть у меня в арсенале функция, которая Excel-файл через OLE считывает в таблицу значений - но пользуюсь ей редко. А так - не выходя из комфортной среды 1С, без изучения доп. материалов можно сделать загрузку данных. Быстро просто и удобно.
42. Bezeus 11.06.12 07:06 Сейчас в теме
(38) Вот именно из таких редко используемых функций и строятся "программерские запасы".
39. BalVlad 24.01.12 22:07 Сейчас в теме
40. Yury1001 1472 24.01.12 22:29 Сейчас в теме
Мысль верная (идея рабочая), дубовая (надёжная), помнится копирование документов между базами так писал, и даже из 8 в 7.7 было. Только я в многострочную строку вставлял, потом Список.ИзСтрокиСРазделителями() и вот готовое соответствие так сказать, пользуй не хочу.
+
41. sai-2010 07.02.12 15:30 Сейчас в теме
Спасибо автору.
Очень четко и толково все написал.
Действительно выгрузка и загрузка справочников, это часто возникающая задача.
Надо срочно и именнно этот справочник.
Эта статья очень помогла мне.
Огромное спасибо.
Удачи.
43. vladismi 168 12.07.12 09:36 Сейчас в теме
Отличная идея. А то, как правило, начинаешь вспоминать, как подключиться к Ёкселю... :)
44. olezhe 21 09.10.12 16:00 Сейчас в теме
Немедля использовал для загрузки множества документов из единой таблицы. Плюсанул. Спасибо за подсказку.
45. ledogora 7 12.11.12 21:26 Сейчас в теме
Полезная статья.Спасибо.
46. wbazil 140 08.07.13 11:56 Сейчас в теме
обычно копировал подключение к Excel из другой обработки, но часто бывало что потом в процессе отладки этих екселей плодиться много, приходиться прибивать процессы, а тут красиво и элегантно.
Спасибо за идею!
47. WanGoff 138 01.08.13 00:23 Сейчас в теме
Ну как-то слишком уж несерьезно, на мой взгляд. Статья для тех, кто второй месяц занимается 1С.
48. DrAku1a 1745 01.08.13 02:07 Сейчас в теме
(47) Да, но... Посмотри сколько народу сказали что классная идея!..
49. WanGoff 138 01.08.13 03:54 Сейчас в теме
(48) Сложно спорить. Видимо, многим и правда помогло. Ну что ж, и то хорошо.
50. Ele1234567 23.12.13 10:28 Сейчас в теме
Все зависит от решаемой задачи. Но стоит взять на заметку
51. Dionisy_nb 14.02.14 12:15 Сейчас в теме
Отличная идея, если нужно что-то одноразовое. Или редкоиспользуемое.
52. Andrey@ 16.03.14 13:43 Сейчас в теме
Как вариант можно использовать при разовой загрузке данных, а то и настроить загрузку номенклатуры из накладной в Excel от поставщика.Спасибо.
53. SurmachAU 20 10.01.18 10:48 Сейчас в теме
Спасибо! Даже сейчас ваша статься помогла. Но вот у меня вопрос, так получилось, что при загрузке не считывает 1-й столбец, т.е. постоянно надо контролировать, чтобы данные не по подали в первый столбец.
Оставьте свое сообщение