Загрузка таблиц EXCEL средствами ADODB в УТ11 8.2 (управляемые формы)

Опубликовал sockor sockor (sockor) в раздел Обмен - Загрузка и выгрузка в Excel

Внешняя обработка загрузки данных из электронных таблиц (MS EXCEL, Open office Calc) не используя медленные COM-соединения
для подключения в УТ 11, платформы 8.2 (на управляемых формах)

Обработка загружает данные по номенклатуре (поиск осуществляется по коду) в документы ПТиУ,РТиУ, Установка Цен, Ввод остатков, Сегменты мноменклатуры.

Дописывать программисту легко, код хорошо документирован, оставлены много закомментареных возможностей.

04.07.2012 - исправлен способ обхода ошибок (отсутсвующие коды, количества) в цикле перебора строк

10.07.2012 - добавлены виды документов для загрузки (возврат от покупателя, возврат поставщику)

12.07.2012 - исправлена ошибка чтения первой строки (особенность adodb)

12.09.2012 - модифицирована под УТ 11.0.9.8 

17.10.2012 - добавлены виды документов для загрузки (заказ клиента, перемещение товара), оптимизирована под УТ 11.0.10.12

18.10.2012 - добавлены виды документов для загрузки (заказ поставщику), существенно переработана и оптимизирована логика интерфейса и формирования документов

19.10.2012 - добавлена возможность загружать по наименованию и артикулу поставщика

24.11.2012 - исправлены найденые ошибки, добавлена возможность искать по ГТД и добавлять информацию в строки поступления

24.12.2012 - добавлена попытка подключения через ACE.ADODB.12.0, если он имеется, для возможности чтения файлов xlsx

16.01.2013 - добавлена возможность загружать в документ "регистрация цен поставщика"

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



 

Плюсы данного способа чтения файла excel:

- Большая скорость работы.

- Не требуется запуск самого процесса excel.exe, как это происходит в случае использования OLE-сервера excel.application, а следовательно на него не тратятся ресурсы. Кроме того нет необходимости отслеживать и перехватывать ошибки, связанные с процессом excel.exe, те кто использовал OLE-cоединение - тот поймет о чем я говорю, мало радости когда в случае программной или пользовательской ошибки процесс excel.exe остается висеть в памяти.

- Не требуется самого приложения EXCEL, достаточно что бы на компьютере был установлен OLEDB провайдер Microsoft.Jet.OLEDB.4.0 (он входит в состав практически всех ОС семейства Windows) Это особенно актуально, когда данный код выполняется на сервере 1С:Предприятия, например в качестве регламентного задания.

- В рамках лицензирования, если на сервере установлена копия MS EXCEL, то использовать даже в терминальном режиме можно только одному человеку. Через ADO загрузку и выгрузку могут делать остальные пользователи официально.


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

Наименование Файл Версия Размер
внешняя обработка загрузки данных из электронных таблиц, средствами ADODB
.epf 32,68Kb
05.02.13
504
.epf 32,68Kb 504 Скачать

См. также

Комментарии
1. Тимур Сабитов (sabitovip) 13.06.12 13:27 Сейчас в теме
Все хорошо, только вот конкретно в нашем случае клиенты и поставщики не присылают электронные документы с указанием кода номенклатуры.
2. Сергей Середин (ssn5810) 50 13.06.12 13:44 Сейчас в теме
Нужно сделать проверку по артикулу ??
3. sockor sockor (sockor) 48 13.06.12 22:47 Сейчас в теме
(1) sabitovip,

в модуле формы вариант левого соединения можно переделать на что угодно

на подобно по наименованию
на артикул
на ваш вариант

я не претендовал на избыточность решения - это просто хорошая база, для тех кто не хочет писать с нуля
4. sockor sockor (sockor) 48 13.06.12 22:48 Сейчас в теме
5. Игорь Кузнецов (DarkSign) 12.07.12 11:28 Сейчас в теме
Не совсем понял, как это работает. При загрузке файла экселя из 7 строк и столбцами - Код, Наименование, Кол-во, Цена, Сумма не загружаются первая и последняя строки. Наименование не грузится вообще (а оно-то, собственно, больше всего и нужно, цифры и так не проблема забить)...

УТ 11.0.8.8
6. sockor sockor (sockor) 48 12.07.12 11:37 Сейчас в теме
(5) DarkSign, в текущей версии не предусмотрено формирование новой номенклатуры при загрузке документа.
насчет первой и последней строки интересно - вышли файлик, может какая особенность ADO
7. ULAS SV (ulas) 12.07.12 11:45 Сейчас в теме
Есть множество других обработок для загрузки
8. sockor sockor (sockor) 48 12.07.12 11:56 Сейчас в теме
(7) ulas, да, я и не продаю и не пиарю, я просто выложил бесплатную подключаемую внешнюю обработку с использованием ADODB на управляемых формах для УТ 11

аналога нету в принципе
9. Игорь Кузнецов (DarkSign) 12.07.12 12:14 Сейчас в теме
(6) sockor,
Вот файлик: http://zalil.ru/33567470

На всякий случай обновился до последней УТ, тот же результат.
А загрузка номенклатуры не планируется?
10. sockor sockor (sockor) 48 12.07.12 13:28 Сейчас в теме
(9) DarkSign, загрузка номенклатуры планируется на август, как и загрузка соответствия её номенклатуре поставщика
сейчас посмотрю, что с твоим файлом
11. sockor sockor (sockor) 48 12.07.12 14:14 Сейчас в теме
(9) DarkSign, спасибо за замечание, ошибка чтения первой строки (как я и предполагал это особенности строки соединения с COM объектом), исправлена, твой файл-пример загружается теперь
12. Денис (amyd) 82 02.08.12 12:50 Сейчас в теме
регламентные задания это очень хорошо, только вот
Microsoft.Jet.OLEDB.4.0 работает только на 32х битных системах.
если ваш сервах "мудрые" админы переведут на 64х, что может быть достаточно скоро, то на этом этапе загрузка через Jet сразу прекратится...
слышал есть метод обхода, но я его пока не нашел..
13. sockor sockor (sockor) 48 02.08.12 17:00 Сейчас в теме
(12) amyd,
не вижу связи между сервером БД / сервером 1С и сервером где запускаются пользовательские приложения.
14. Александр Иванов (ls300) 5 06.08.12 15:01 Сейчас в теме
Очень полезная обработка! Сэкономил кучу времени) А написать загрузку номенклатуры можно и самостоятельно, это не так сложно=)
15. Eugeneer (Eugeneer) 06.09.12 16:12 Сейчас в теме
Автору: - не работает на клиент-серверной базе.

Полный текст ошибки

Ошибка при установке значения атрибута контекста (ActiveConnection)
по причине:
Произошла исключительная ситуация (ADOX.Catalog): Невозможно использование подключения для выполнения операции. Оно закрыто или не допускается в данном контексте.

Причем на этом же сервере в толстом клиенте (тут надо признать что оно 32 разрядное) - работает. Как только клиент-сервер. Все.
16. Eugeneer (Eugeneer) 06.09.12 16:13 Сейчас в теме
(80) да прямо таки и нету?)) валом.
17. sockor sockor (sockor) 48 06.09.12 16:37 Сейчас в теме
(15) Eugeneer, на 32 семерке в связке с сервером win 2008 r2 sp2 64x работает.
предположить что у вас не так - не могу.
18. Eugeneer (Eugeneer) 06.09.12 16:43 Сейчас в теме
(15) Текст ошибки я скинул.
База клиент-серверная (SQL) на 64 разрядном сервере. 1С сервер тоже 64.
Прога запущена в тонком клиенте в терминальной сессии на серваке.
19. sockor sockor (sockor) 48 06.09.12 17:09 Сейчас в теме
(18) Eugeneer, перепроверил в аналогичных условиях - работает.
20. Eugeneer (Eugeneer) 06.09.12 17:12 Сейчас в теме
(19) вроде как нашел. ПРоцедура ваша на клиенте выполняется. я переделывал под сервер
21. Юрий Осипов (yuraos) 882 12.03.13 19:29 Сейчас в теме
(12)
а как провайдер данных
Microsoft.Jet.OLEDB.4.0
работает с книгами Excel-2007 *.xlsx ???
22. Юрий Осипов (yuraos) 882 12.03.13 19:40 Сейчас в теме
(21)
впрочем вопрос этот чисто риторический...
:)

Более интересен другой вопрос:
чтение из данных экселя выполняется
на стороне клиента или на стороне сервера ???
23. sockor sockor (sockor) 48 12.03.13 21:48 Сейчас в теме
(22) yuraos, (21) yuraos,

а вы проверьте, там ведь еще есть

Попытка
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;
24. sockor sockor (sockor) 48 12.03.13 21:48 Сейчас в теме
25. Олег Гинзбург (smaharbA) 12.03.13 22:08 Сейчас в теме
еще одна жертва обмана

бьюсь на скоч - по оле из екселя быстрее, да и с адо упретеся в колонки (коли раскурите)
26. sockor sockor (sockor) 48 12.03.13 23:02 Сейчас в теме
(25) smaharbA,

я замерял, две мои почти идентичные обработки.
АДО быстрее
27. Олег Гинзбург (smaharbA) 13.03.13 01:50 Сейчас в теме
(26)
- Машу каслом не испортить.
..
- Это смотря каким каслом !...
28. Юрий Осипов (yuraos) 882 13.03.13 18:54 Сейчас в теме
(26)
Есьм в физике два критерия истины:
Один - ПРАКТИКА - когда на эксперименте можно однозначно проверить.
Второй - ЛЕЗВИЕ (которое Онзангера) - когда эксперимет дает непонятно что...
...тогда считают более правильной ту теорию, которая проще.

sockor, я б скиншоты бы выложил бы для наглядности
;)))
29. Юрий Осипов (yuraos) 882 13.03.13 18:56 Сейчас в теме
(23) sockor,
верю охотно! вопрос - то риторический был.
;)))
30. Юрий Осипов (yuraos) 882 13.03.13 19:01 Сейчас в теме
(24)
Понятно...
а не пробывал задуриться делать это на сервере, но
выбирая локальный путь к файлу на клиенте,
который на сервере не существует ???
(сервер должен быть "настоящим" и
крутиться должен физически на другой машинке)
31. sockor sockor (sockor) 48 13.03.13 23:14 Сейчас в теме
(30) yuraos,

код вызова ком обьекта не хочет исполнятся на стороне сервера
32. Юрий Осипов (yuraos) 882 14.03.13 17:37 Сейчас в теме
(31) sockor,
в чем проблема?
Объект ADODB.Connection не создается или
путь к файлу не находит ???
33. sockor sockor (sockor) 48 14.03.13 17:42 Сейчас в теме
(32) yuraos, объект не создается, хз почему так, принял как должное и написал все это
34. Юрий Осипов (yuraos) 882 14.03.13 18:17 Сейчас в теме
(33) sockor, ну попробуем разобраться
;)
Сервер 1С - виндузовый или
вдруг он под линуксом с постгрескулем работает???
35. sockor sockor (sockor) 48 14.03.13 20:36 Сейчас в теме
(34) yuraos, а без разницы тащемта
36. Юрий Осипов (yuraos) 882 14.03.13 20:47 Сейчас в теме
(35) sockor,
любопытно...надо будет поковыряться,
это у меня концептуальный интерес
в связи с этой разработкой.
:)))
37. Наталья Наталья (nata_87) 35 03.03.17 13:25 Сейчас в теме
пример файла загрузки Excel дайте пжл, а то что то ничего не выводит
Оставьте свое сообщение