Универсальная загрузка данных формата Excel

14.04.21

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

Универсальная обработка по чтению/импорту данных формата Excel в базы 1С.

 

В данной публикации приведено описание механизма загрузки данных в 1С из "двумерного формата" Excel, а также ряд примеров использования механизма.

Если лень читать длинное описание и смотреть унылые картинки: код можно взять здесь: https://github.com/artkor83/-ImportExcelOnec. И в дальнейшем разбираться самостоятельно: код полностью открыт.

 

Оглавление

Введение

Получение  данных

Получение данных: общее описание, алгоритмы

Получение данных: Порядок работы

Получение данных из листа excel

Получение данных из макета (буфера)

Режим чтения макета из внешнего файла

Режим чтения макета из буфера ячеек

Дополнительные команды

Дополнительные команды: Номера колонок: чтение наименований из файла

Дополнительные команды: Номера колонок: выбор типов

Дополнительные команды: Номера колонок: определение типов

 

Загрузка данных

Загрузка данных: Внешние файлы: обработки, макеты

Загрузка данных: Алгоритмы "Перед загрузкой", "Загрузка данных строки"

Загрузка данных: буфер вспомогательного кода

 

Примеры загрузки данных

Построчная загрузка данных: пример

Построчная загрузка данных: редактирование алгоритмов

Построчная загрузка данных: Загрузка данных в базу

Общая (непострочная) загрузка данных: пример

Общая (непострочная) загрузка данных:редактирование алгоритмов

Общая (непострочная) загрузка данных:загрузка данных в базу

 

Отладка алгоритмов

Отладка построчной загрузки

Отладка общей (непострочной) загрузки.

 

Сохранение / загрузка настроек

Интерфейс сохранения, краткое описание

Примеры файлов настроек, рекомендации

 

 

Введение.

В процессе работы очень часто встают задачи по импорту информации в базы 1С (далее БД1С) из различных excel-файлов. Наиболее распространенные варианты:

  • импорт начальных остатков,

  • прайс-листы различных видов и модификаций

  • сегменты номенклатуры, клиентов

  • прочее: справочники, документы, регистры сведений различного назначения

Если начать с последнего пункта: часто бывает нужно загрузить набор справочников со специально заполняемыми реквизитами, которые простой связью "1-к-1" никак не удается заполнить: появляются "красные поля" в карточке справочников типа "ФизическиеЛица", которые в дальнейшем "мешают жить" в процессе эксплуатации информационных систем.

 

 

На практике все неумолимо сводится к написанию программного кода, где на входе поступает некий объект "ТаблицаЗначений", полученный из Excel, на выходе "все что угодно":

  • Набор элементов ссылочного типа с фиксированными полями. Пример: элементы типа "Справочник.Контрагенты" с видом(физическое лицо/ юридическое лицо), зависящим от длины ИНН из файла excel

  • Набор элементов ссылочного типа нескольких метаданных. Пример: элементы типа Справочник.Сотрудники и "приклеенные" к ним физические лица: Справочник.ФизическиеЛица. При этом не забываем, что наименование физ.лица вовсе не единственное "обязательное поле": необходимо еще указать ФИО, разбивку по реквизитам "Фамилия Имя Отчество".

  • Документ по вводу начальных остатков: тут комментарии излишни. Вариантов "видов операций по вводу остатков" множество в базе формата УТ11, не говоря про ERP ;) И все их нужно как-то обыграть.

В противном случае столкнемся с недовольством пользователей в процессе работы с БД1С, которые никак не могут отредактировать карточку физ.лица. Система ругается на незаполненность полей, либо не получается исправить циферки при вводе начальных остатков.

 

 

При записи объекта система зачастую ругается на поля которые и на форме-то не видны (являются скрытыми), пользователи в ярости, разработчик "на измене".

При импорте данных через формат excel процесс требует значительных программных доработок. Целесообразно под рукой иметь удобный механизм для чтения/обработки/загрузки данных...

Загрузка обработками "на коленке"

Это - плохой путь: не делайте так.

Путем практического опыта с различными загрузками из excel вначале все сводилось к следующему алгоритму:

  1. Есть заготовленный шаблон внешней обработки, который через com читает excel-файл и в нужной закладке собирает данные. Пример кода ниже, образцов можно нагуглить великое множество:

    Excel         = Новый COMОбъект("Excel.Application");
    Excel.Visible = 0;
    Excel.DisplayAlerts = 0;
    Excel.WorkBooks.Open(ИмяФайлаЗагрузки);
  2. Каждая прочитанная строка преобразуется в массив строковых ячеек, которые имеют свое назначение и в дальнейшем используются для загрузки данных

  3. Набор данных выводится на форму в таблицу значений. Как правило, случаются пользовательские ошибки в файле excel. Например:

    • вместо числового поля ввели какую-то непонятную "чудо-строку", которая в момент преобразования значения в число дала ошибку и тем самым файл даже не дочитался

    • ключевое значение типа "артикул номенклатуры" введен в файле неверно - тем самым имеем множество пустых строк товаров, по которым заполнены показатели, а "всего-то нолик вначале забыли добавить до длины=10 символов"

    • файл excel модифицировался: добавили 2 колонки данных в листе excel между "номенклатура" и "цена", а программисту сказать забыли ;)

Вступайте в нашу телеграмм-группу Инфостарт

Excel com ТабличныйДокумент Загрузка чтение данных

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

5490 руб.

12.08.2021    47362    614    71    

223

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

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

12444 руб.

29.10.2014    235015    759    541    

503

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

Загрузка данных отчета о реализации товаров из сервиса Lamoda «Ламода» для конфигурации: 1С:Бухгалтерия предприятия, редакция 3.0; 1C:Управление торговлей, редакция 11 и 1C:Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

6000 руб.

01.03.2021    12909    77    0    

34

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

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

6000 руб.

09.12.2020    30650    304    1    

151
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tvv56 15.04.21 09:18 Сейчас в теме
IMHO. Для оттачивания собственных навыков рабоота проделана интересная, но в практическом применении по времени не окупаемая. Под все разнообразие задач загрузок заранее код не написать, а на модификации алгоритмов всё равно придется тратить время и это удобнее делать в конфигураторе. 90% задач по загрузке одноразовые и для них хранение настройки бесполезно.Пользователям такое решение не отдать, в лучшем случае даже разбираться не станут, в худшем всё напутают и запорят базу а виноват будет конечно разратчик. Значит загрузку придется делать сопровожденцам, а то и самому разработчику. Проще поправить шаблончик с 1 кнопкой "загрузить", отдать и забыть.
warenic; azl78; gigapevt; Gulloper; itmind; IgorS; papche; UncleLu; Aluvika4; kupala; hiduk; serg-666; qwinter; cleaner_it; konashenkov; JohnyDeath; Yashazz; papami; Pawlick; GATTUSO; etmarket; user618912_redgad; +22 1 Ответить
3. artkor 294 15.04.21 11:36 Сейчас в теме
(1) В планах как раз "впилить" историю настроек с возможностью выбора из спсика (чтобы похожие файлы загружать) - а то пока заставляю файлы переименовывать и в единый каталог размещать. Благо юзеры вменяемые. Ну и какую-нибудь "пародию" на систему прав сделать: в частности чтобы алгоритмы не трогали, а только номера колонок итд...
2. Cmapnep 20 15.04.21 10:50 Сейчас в теме
Проделанная работа внушает уважение!
Не планируете подключить редактор с подсказками и раскраской кода на основе монако?
4. artkor 294 15.04.21 11:37 Сейчас в теме
(2) Подскажите это о чем? а то про монако ничего не слышал кроме страны в Европе )
6. Cmapnep 20 15.04.21 13:55 Сейчас в теме
(4) посмотрите вот этот проект https://github.com/salexdv/bsl_console
Вот тут еще коллега интегрировал в КД3 https://github.com/ViktorErmakov/Conversion-3-Plus
Alia777; artkor; vulli; +3 Ответить
7. artkor 294 15.04.21 15:59 Сейчас в теме
(6) Спасибо, надо ознакомиться, может что-то полезного почерпну, добавлю
28. ivanovkpd 05.09.23 14:37 Сейчас в теме
(7) Не внедряли Монако? :)
Было б здорово..
5. gorakh 26 15.04.21 13:18 Сейчас в теме
А БСП шная подсистема чем не устроила?
8. artkor 294 15.04.21 16:02 Сейчас в теме
(5) Когда просто каталог номенклатуры или заказ клиента надо залить - вполне годится, для всего остального этот "велосипед" и придумал
9. PaStrel 132 15.04.21 21:32 Сейчас в теме
Мне статья понравилась. Автор поделился инструментом, разработанным для решения нетривиальных задач по загрузкам информации из Excel. Полагаю, что времени на его освоение и привыкание к нему уйдёт меньше, чем на решение какой-либо одной нестандартной задачи имеющимися средствами. Спасибо за потраченное время на ясную постановку задачи, что важно для статьи в целом, и подробное описание разработки, что встречается реже, чем хотелось бы.
mvxyz; natremiz; cleaner_it; artkor; +4 1 Ответить
10. Yashazz 4933 16.04.21 09:22 Сейчас в теме
Ну, баян, конечно, лютый, и нового совершенно ничего, примитивный com-обмен... Но работа проделана немалая, причём именно по автоматизации промежуточных действий. Правда, соглашусь с (1), это работа почти всегда бесполезная - чем круче и универсальнее универсал, тем труднее им рулить и тем более грамотный спец нужен, делать маленькие загрузчики "по месту" быстрее и дешевле. Я подобную супер-обработку (причём умевшую делать упрощённые грузилки) ещё на 7.7 наваял и тогда же все плюсы и минусы понял.
Оформлено хорошо. Продумано толково. Но, имхо, зря)
IgorS; top_1c; Aluvika4; kupala; cleaner_it; qwinter; +6 Ответить
16. artkor 294 16.04.21 17:59 Сейчас в теме
(10) Частично согласен с Вами. Целью было собрать "для себя" все накопленные наработки воедино, потому как надоело 1 и тотже код "копипастить" из различных мест. Заодно может кому-то еще в работе пригодится: для этого на гитхаб и выложил, чтобы не обидно было никому после скачивания )
11. user1145156 16.04.21 09:33 Сейчас в теме
Работу с почтой бы добавить и регламентные задания
12. cleaner_it 202 16.04.21 09:48 Сейчас в теме
Имеет смысл добавить группировку, вот как тут: https://infostart.ru/1c/articles/1020565/
15. tormozit 7384 16.04.21 13:00 Сейчас в теме
(12) Свернутые группировки блокируют поиск. А раскрыть их все сразу - насколько я знаю, способа нет.
13. qwinter 686 16.04.21 10:48 Сейчас в теме
Поздравляю, теперь вы опытный разработчик загрузок из эксель! Но зачем???
17. artkor 294 16.04.21 18:00 Сейчас в теме
(13) Могу с ходу набор причин назвать - но боюсь ни одна Вас не убедит)
14. ITSun 16.04.21 11:39 Сейчас в теме
Плюс за проделанную работу!
(Пусть и "велосипед")
natremiz; +1 Ответить
18. Olenevod 36 18.04.21 22:51 Сейчас в теме
Уж не знаю на счет велосипеда, но на мой взгляд, вещь очень полезная. Допустим есть интеграционные механизмы с использованием Excel и гораздо удобней настроить что-то в пользовательском режиме, чем выпускать очередной релиз. Может есть, конечно, что-то подобное, но что-то не встречал.
Автору спасибо.
19. artkor 294 18.04.21 23:12 Сейчас в теме
(18) Пожалуйста, рад что полезно ;)
20. top_1c 4169 19.04.21 04:27 Сейчас в теме
Молодец конечно, прокачался.

Но имхо, мне вот эта нравится включенная в Универсальные инструменты - https://infostart.ru/public/1178280/ (первоисточник https://infostart.ru/public/269425/).
21. TimurD 6 05.07.21 14:08 Сейчас в теме
Здравствуйте. Скачал обработку (epf). У Вас в форме в строке 1595 (Функция ПараметрыЗагрузкиДанных) не в верном порядке заполняются тексты алгоритмов. Вместо ЗагрузкаДанныхСтроки подставляется ПослеЧтенияДанных, и на оборот.
22. artkor 294 06.07.21 23:31 Сейчас в теме
(21) Спасибо что заметили, поправил)
23. mvl_dimir 30.08.21 14:21 Сейчас в теме
Удалили? Не вижу файла для скачивания.
25. mvl_dimir 01.09.21 15:28 Сейчас в теме
(24)Не могли бы вы также подсказать. Пытаюсь загрузить .mxl файл, выходит ошибка:


Исправлено: убрал безопасный режим, все ок.
Прикрепленные файлы:
26. artkor 294 01.09.21 21:51 Сейчас в теме
(25) Наверное проблема в безопасном режиме. В модуле обработки
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);

попробуйте прописать "Ложь". Пока не тестировал этот момент - в дальнейшем исправлю.
27. mvl_dimir 02.09.21 10:27 Сейчас в теме
(26)Да, я исправил и все ок стало. Выше в сообщение написал "Исправлено: убрал безопасный режим, все ок".
29. ivanovkpd 05.09.23 14:57 Сейчас в теме
Простите, вроде читал инструкцию внимательно...
Вот у нас есть процедура, которая вызывается перед построчной загрузкой, то есть 1 раз на лист, если правильно понимаю. И есть процедура построчной загрузки, которая вызывается для каждой строки на каждом листе, так?

Допустим мне нужно загрузить 1 лист, создать на его основе 1 док-т и с этого листа заполнить ТЧ.
Это нужно делать одной процедурой, которая "Перед загрузкой.."? Иначе я не вижу как передать объект документа в "построчную"...
30. artkor 294 06.09.23 09:45 Сейчас в теме
(29) Сейчас загружен, давно уже к этой обработке не возвращался. как руки дойдут - в личку отвечу, чтобы тут не писать. Лучше всего ишузы делайте на гитхабе, если какой-то баг нашли: понимаю что эта "дурацкая обработка" не идеальная - мог и накосячить гдето:)
31. ivanovkpd 06.09.23 10:44 Сейчас в теме
(30) да тут скорее не баг, а просто я ее готовить не умею, вот и спросил. И еще... у вас нет непреодолимого желания добавить туда Монако, и сделать продукт коммерческим? Если я сумею вашу обработку приручить, то на 95% моя контора ее готова будет купить, у нас много импорта планируется. Выложите ее тут за денюжку.. :)
32. artkor 294 06.09.23 13:56 Сейчас в теме
(31) рано или поздно сделаю монако - ишуз напишите. Я там еще конструктор шаблонов ваять начинал, пока забросил - надо возвращаться. Денюшек на надо, на то оно и опенсорс чтобы делать открытый код )
33. ivanovkpd 06.09.23 15:25 Сейчас в теме
(32) Создал issue, спасибо :)
Для отправки сообщения требуется регистрация/авторизация