gifts2017

Загрузка таблиц 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
498
.epf 32,68Kb 498 Скачать

См. также

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

Комментарии

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

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

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

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

УТ 11.0.8.8
6. sockor sockor (sockor) 12.07.12 11:37
(5) DarkSign, в текущей версии не предусмотрено формирование новой номенклатуры при загрузке документа.
насчет первой и последней строки интересно - вышли файлик, может какая особенность ADO
7. ULAS SV (ulas) 12.07.12 11:45
Есть множество других обработок для загрузки
8. sockor sockor (sockor) 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) 12.07.12 13:28
(9) DarkSign, загрузка номенклатуры планируется на август, как и загрузка соответствия её номенклатуре поставщика
сейчас посмотрю, что с твоим файлом
11. sockor sockor (sockor) 12.07.12 14:14
(9) DarkSign, спасибо за замечание, ошибка чтения первой строки (как я и предполагал это особенности строки соединения с COM объектом), исправлена, твой файл-пример загружается теперь
12. Денис (amyd) 02.08.12 12:50
регламентные задания это очень хорошо, только вот
Microsoft.Jet.OLEDB.4.0 работает только на 32х битных системах.
если ваш сервах "мудрые" админы переведут на 64х, что может быть достаточно скоро, то на этом этапе загрузка через Jet сразу прекратится...
слышал есть метод обхода, но я его пока не нашел..
13. sockor sockor (sockor) 02.08.12 17:00
(12) amyd,
не вижу связи между сервером БД / сервером 1С и сервером где запускаются пользовательские приложения.
14. Александр Иванов (ls300) 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) 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) 06.09.12 17:09
(18) Eugeneer, перепроверил в аналогичных условиях - работает.
20. Eugeneer (Eugeneer) 06.09.12 17:12
(19) вроде как нашел. ПРоцедура ваша на клиенте выполняется. я переделывал под сервер
21. Юрий Осипов (yuraos) 12.03.13 19:29
(12)
а как провайдер данных
Microsoft.Jet.OLEDB.4.0
работает с книгами Excel-2007 *.xlsx ???
22. Юрий Осипов (yuraos) 12.03.13 19:40
(21)
впрочем вопрос этот чисто риторический...
:)

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

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

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

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

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

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

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