gifts2017

Еще одна загрузка данных из Excel (или как окончательно забыть его методы)

Опубликовал Александр Серов (Itilive.ru) в раздел Обмен - Загрузка и выгрузка в Excel

С переодичностью раз в год, на меня падает задача, загрузить что-то эдакое из excel и каждый раз происходит мучительное вспоминание а как создать его COM, как там перебрать ячейки, найти "крайние", разобраться с форматированием... в какой-то момент лень таки победила и подкинула мне идею как перестать вспоминать - а именно: "Почему бы не загрузить файл целиком, в плоскую структуру, и потом просто выбрать данные запросом. Так родился этот справочник, встраиваемый в любую конфигурацию 8.2 c функционалом по загрузке excell файла в свои элементы.

Итак, после загрузки файлов(в форме выбора файлов используете множественный выбор) Вы получаете по одному элементу в справочнике для каждого файла, в табличной части которого, для каждой ячейки есть строка. Для каждой ячейки указано :

  • на каком листе она находится;
  • её координаты - номер строки и колонки в отдельных реквизитов;
  • текст который был в ячейке;
  • сумма или дата, в отдельных колонках, если в процессе загрузки они были распознаны;
  • формула забитая в ячейки;
  • цвет фона или шрифта.

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

 

Во вложении, я к обработке кинул демо excel файл и sel который на примере демо бухгалтерии демонстрирует простоту работы данной методики.

Например, меня очень радует что я могу запросами проверить корректность файлов. Например, что при заполнении бюджета использовали корректные наименования статей затрат из справочника и.т.п.

Теперь немного о минусах:

  • файл грузится целиком, что может увеличивать время обработки - согласитесь, но работать без посредника будет быстрее. На этот аргумент, моя лень чихала. ) говорит что для регулярных обменах, где необходима оперативность надобно работьс xml.
  • для чтения файлов использует COMОбъект("Excel.Application") соответсвенно, для работы с управляемыми приложениями на сервере(или вашей тачке, клиент таки толстый)  должен быть установлен MS Office. Но! если тема получит адекватный отзыв, моя лень заткнется и я перепишу что-бы читать xlsx напрямую.
В справочнике есть 2 набора форм, для Управляемого и Обычного приложения - устанавливайте по умолчанию как Вам необходимо в зависимости от ситуации.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Конфигурация с справочником
.cf 31,47Kb
16.11.12
163
.cf 31,47Kb 163 Скачать
Примеры запросов для БП демо
.zip 8,06Kb
16.11.12
39
.zip 8,06Kb 39 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Владимир (oberon355) 18.11.12 19:16
Очень красивое решение. Класс!!!
2. Яков Коган (Yashazz) 19.11.12 13:25
3. Дмитрий Шерстобитов (DitriX) 19.11.12 14:36
Вот мне кажется, что если читать с хмл на прямую, то это было бы шикарно, иначе, как то не ахти.
4. Александр Серов (Itilive.ru) 19.11.12 14:37
5. Александр Серов (Itilive.ru) 19.11.12 14:38
(3) DitriX,
спасибо за мнение.
6. Александр Овсянников (_LEV_) 19.11.12 17:37
Мне кажется стоит поторговаться со своей совестью и прикрутить чтение файлов xlsx напрямую, не будет напрягов с наличием установленного пакета Office. Думаю, что идея оригинальна для нерегулярных загрузок.
7. Александр Серов (Itilive.ru) 19.11.12 19:16
(6) _LEV_, Если сделаю, то выставлю за бабки. Так что либо мне либо майкрософту....
8. Eugeneer (Eugeneer) 19.11.12 20:09
В общем то идея не нова. Аналогично решено в подсистеме http://infostart.ru/public/146060/
в которую загружаются полные образы прайсов, хранение всех настроек профилей и в общем то на целую подсистему работы с импортом, включая регистры и тд и тп
Вот скрин, остальные по ссылке увидите
http://infostart.ru/upload/iblock/90e/5_2.png
9. Eugeneer (Eugeneer) 19.11.12 20:11
(6) да в общем то тут есть кучи разработок которые выключают в себе сразу все методы. аналогично например и я в своих работах использую все универсальные варианты.
10. Александр Серов (Itilive.ru) 20.11.12 00:12
(8) Ну да... каждый кулик свое болото хвалит... ;)
11. Eugeneer (Eugeneer) 20.11.12 00:42
(10) ну на самом деле я не увидел в статье за что хвалить автора? Ну просто не увидел чтобы он описарлся не чтение с экселя и без экселя и другие...
Ведь чтобы в 1С данные затянуть - в любом случае их нужно считать.

Вот например взять бесплатную обработку - достаточно глубоко сделана. использует все методы чтения. - http://infostart.ru/public/120961/
Про тематику 1С и эксель - самая популярная - уж что что на ИС обработок просто гора!
12. Иваныч Иванов (Иваныч) 20.11.12 09:09
А вообще автору плюс, т.к в любых идеях можно найти что-либо новое для каждого
13. Василий Дугин (vasko88) 20.11.12 13:22
Согласен - автору плюс. Как человек, допустим, который ищет подобную конкретную разработку, или просто идею, не вижу абсолютно никакого смысла лезть в какую-нибудь здоровую "самописную" подсистему, чтобы выделить в ней из кучи того что мне не нужно, малую толику того что нужно
14. Василий Дугин (vasko88) 20.11.12 13:25
Eugeneer, а среди доработок которые вы привели, есть что-то более "абстрактное", нежели загрузка прайсов?
Itilive.ru; +1 Ответить
15. Алексей 1 (AlX0id) 20.11.12 13:40
При наличии Ctrl-C + Ctrl-V из Excel в 1С, имхо, тратить время на написание каких-то там COM-соединений для загрузки пары файлов раз в год - бессмысленно..
Ежели у вас загрузка по расписанию - еще было бы понятно.. Но для единичных файлов..
EliasShy; адуырщдв; +2 Ответить 1
16. Роман Узьмов (RomanUzmov) 20.11.12 22:56
(15) AlX0id, Что-то вообще не понял Вашего комментария. Каким образом Вы собираетесь перенести данные из Excel в базу 1С, используя буфер обмена?
17. nelse (nelse) 21.11.12 05:38
Если бы Вы привели только одну функцию поиска в файле Excel нужного вам зачения (find), то
это решило бы все проблемы. Такой метод/способ ЕСТЬ.
А так... просто трата времени и ресурсов.
Сопряжение 1С и Excel давно размусолено до самых последних "битов".
Уж даже не знаю, что там ещё можно нового найти?
Ничего личного.
18. nelse (nelse) 21.11.12 05:40
(16) RomanUzmov,
"При наличии Ctrl-C + Ctrl-V"
Это он пошутил.
20. Елена Смирнова (smielka) 21.11.12 09:18
1.Не работает в клиент-серверном варианте
2.Зачем нужен такой способ, если можно сразу обратиться запросом к экселю, считать нужные данные и не хранить их в базе
21. Алексей 1 (AlX0id) 21.11.12 10:28
(16) RomanUzmov,
Создаете в обработке на форме табличный документ и тупо копируете туда данные Excel. В дальнейшем работаете только с этим табличным документом. Все. Никаких COM-объектов.
22. Александр Притуленко (evrakylon) 21.11.12 12:08
На счет красоты решения и целесообразности ради этого внесения изменений в конфу еще можно подумать.
А ведь всего лишь нужно: 1) Кусок кода для COM подключения 2) Циклом создается ТЗ и заполняется. 3) Обработка таблицы - хоть запросом, хоть чем. При желании это все выносится в шаблон. Выращивать базу элементами с ТЧ в десятки тысяч строк, как это бывает в прайсах, может быть, и не надо.
23. Александр Серов (Itilive.ru) 21.11.12 12:30
(22) evrakylon, (20) smielka,

Коллеги, очень хочется потролить, но лень,и еще раз отвечая на вопрос "А НАФИГА???" -
я не люблю(мне лень) писать код, особенно связанный с выборкой данных. Я люблю запросы, они созданны только именно для этого, я пишу их быстро и с удовольствием.

Все остальные моменты которые меня радуют даже перечислять не буду. В шапке я упоминал. Решение не универсально, предназначенно для тех кто предпочитает окну конфигуратора консоль запросов + обработка.

На в клиент сервере работает при наличии на сервере excellя, в моменте - мне проще пойти и заставить админов поставить excell, чем парсить структуру xlsx - уверен вам тоже.
Решение "As Is" и не претендует "на истину в первой инстанции".

Спасибо всем кому понравилось.
mip128; bxz; +2 Ответить 1
24. Игор Мудрицкий (Zas1402) 06.12.12 12:05
А вообще автору плюс, т.к в любых идеях можно найти что-либо новое для каждого	


Согласен, для себя очень многое открыл.
25. Евгений Рачковский (eugen91) 06.12.12 15:44
Добрый день. А в чем принципиальное отличие от аналогичных ?
26. Павел Городилов (bxz) 06.12.12 16:59
да каждая вторая обработка на инфостарте чтото делает с exceLL !! где загрузка и обработка таблиц из GOOGLE DOCS - я считаю это просто необходимо добавить в это разработку !! АФТАР ДОБАВЬ ПОЖАЛУЙСТА !!!
27. Владимир (oberon355) 10.12.12 16:34
Ну вот, накинулись на человека. А на самом деле идея не лишена изящества.
28. Olga Gabuza (OLga_gab) 16.02.13 13:52
Мне тоже хочется на сторону разработчика новой обработки. Ставлю плюс и попробую использовать.
29. Mr. Alf Garcia (mip128) 17.06.13 12:43
(26) bxz, Согласен, ваще вот прям!
Еще считаю нужным загрузки из ДБФ!!!
Так как меня все бесит!!!
30. Татьяна (svetanik) 29.10.13 20:09
(23) Александр Серов, спасибо Александр за обработку, за идею! Можно хранить загруженные файлы (в смысле, из которых была загрузка). Чтобы потом была информация для "разбора полетов", когда, например, после загрузки задваивается номенклатура.
31. Lena Lesnik (lelusha) 05.02.14 11:17
А какую-нить демо версию можно сделть бесплатную? или хоть примеры запросов для БД демо.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа