gifts2017

Com1C v1.6 - работа с 1С:Предприятие 8.x через COM-интерфейс

Опубликовал Роман Осадченко (cleaner_it) в раздел Обмен - Перенос данных из 1C8 в 1C8

Выкладывается с исходниками (Delphi 6). Работайте, учитесь, совершенствуйте:)

Внешнее приложение для Windows, позволяет динамически сформировать строку подключения COM к 1С 8.x (на 1С 8.2 строку подключения в исходниках необходимо изменить: поменять V81 на V82 - говорим спасибо SirYozha) для файлового и клиент-серверного варианта.

Показан пример работы с 1С 8.x через COM в Delphi 6 с использованием русского (!) языка.
1. Выборка метаданных
2. Выполнение простых запросов к данным
3. Вывод данных справочника "Сотрудники организации" для 1С:ЗиУП 2.5

Конечно, работа с 1С через COM накладывает некоторые ограничения - не все функции, доступные в конфигураторе 1С, можно будет использовать в данном приложении (читайте встроенную справку), а некоторые будут реализовываться при помощи бантиков - но этот метод имеет право на жизнь.

Когда-нибудь попробую использовать Firebird Embedded для хранения некоторого заранее полученного набора данных из 1С для дальнейшего формирования отчетов - получится нечто вроде локальной базы 1С:Firebird:)

При разработке используется компонента для Delphi "nextgrid_d6" (дистрибутив находится в директории с исходными кодами Delphi) и PivotCubeVCL (тоже внутри, уже распакован).

Планы:
1. Планируется доработка для работы с 1С:Предприятие 7.7 через OLE
2. Решение проблемы (для меня) - ускорение обращения к ссылочным объектам 1С:Предприятия 8.1.

Внимание! Выложено две версии: с использованием ActiveX OLAP и без него.

PS: если Вы реализовали интересное решение в рамках данной публикации - не пожалейте кода для товарищей. Присылайте мне Ваши варианты решений, я их включу в основную ветку разработки. Разумеется, с указанием автора


КОМУ ЭТО НУЖНО:

1. Программистам - для обучения в большей степени, для автоматизации обмена между ИБ, ну и т.д. Лишним в копилке не будет

2. Компаниям, которые имеют желание использовать отчетность отдельно от приложения 1С (соответственно, без затрат на лицензии 1С)


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

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

Наименование Файл Версия Размер Кол. Скачив.
Com1C v1.6 - source (D6) - 2011-01-09 - 01-00.zip
.zip 3,19Mb
08.01.11
148
.zip 3,19Mb 148 Скачать
Com1C v1.5 - source (D6).zip
.zip 3,44Mb
08.01.11
130
.zip 3,44Mb 130 Скачать
Com1C_v1_5 - source (D6) without OLAP.zip
.zip 3,44Mb
08.01.11
27
.zip 3,44Mb 27 Скачать
Com1C v1.5.1 - source (D6) - 2010-09-09 - 22-20.zip
.zip 3,18Mb
08.01.11
40
.zip 3,18Mb 40 Скачать

См. также

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

Комментарии

1. mirco brons (mirco) 07.08.10 21:00
"Компаниям с ограниченным количеством лицензий 1С" - 1С обидится :D
2. Роман Осадченко (cleaner_it) 07.08.10 21:08
(1) Да пусть обижается:) От нее не убудет:)
3. Александр Овсянников (_LEV_) 07.08.10 21:59
По-моему извращение какое-то 8-)
4. Роман Осадченко (cleaner_it) 07.08.10 22:18
(3) А по делу? Идея в целом неплохая, если развить.
5. Аркадий Кучер (Abadonna) 08.08.10 02:32
За Дельфи - плюс не глядя ;)
6. Татьяна Шавлак (Stety) 08.08.10 16:54
(1) Если бы их эта уязвимость действительно заботила, уже давно была бы заглушка и лицензии продавались бы двух видов: нормальная - подороже и "рид-онли" - подешевле.
7. Александр Цегельников (markers) 09.08.10 07:19
Эх, мож кто ткнёт пальцем где можно взять пример (желательно готовый), как писать COM Объекты? Чтоб из 1С можно было подключатся... Честно гуглил, чё-то пытался сделать но не получалось... Буду весьма благодарен! Пишу на Delphi 7.
По теме: У меня при подключении ругнулось на несоответствие версий.
8. Роман Осадченко (cleaner_it) 09.08.10 07:31
(7) Несоответствие версий COM-объектов? Какая платформа 1С установлена?
ActiveX - это продолжение COM. Пример небольшой могу накидать на D6 или D2010
10. Александр Рытов (Арчибальд) 09.08.10 07:47
11. Александр Цегельников (markers) 09.08.10 07:50
(8) насчёт платформы понял, у меня видимо на компе просто старая стоит :) Ссорь!
Пример? Было бы здорово, самый простецкий, а то просто не могу малость понять.... Спасибо!
12. qwertor (qwertor) 09.08.10 07:56
" Без желания тратить лицензии 1С... " - каким образом ?
13. Роман Осадченко (cleaner_it) 09.08.10 08:17
(12) Таким, что лицензия занимается COM-объектом только на момент обращения к данным. При окончании выборки разрушаем экземпляр объекта (соединение), и имеем на руках данные для отчета и одну незанятую лицензию 1С
14. Роман Осадченко (cleaner_it) 09.08.10 08:30
(11) Лучше проверь наличие COM-объекта, иногда бывают глюки с его установкой
15. Роман Осадченко (cleaner_it) 09.08.10 09:36
(11) Пожалуй, лучше статью сделаю, оно так быстрее усвоится
16. Роман Осадченко (cleaner_it) 09.08.10 09:44
17. Сергей Михе (Serg7Z) 09.08.10 11:55
выдает ошибку, "Класс не зарегистрирован" как его зарегить?
18. Аркадий Кучер (Abadonna) 09.08.10 13:25
OLE создает нормально, вроде коннектится.
Однако Меню - Основная форма: см.рис.
Чаво хочет?
Может nextgrid_d6 в СИСТЕМЕ не хватает?
Прикрепленные файлы:
19. Роман Осадченко (cleaner_it) 09.08.10 15:07
(18) nextgrid_d6 нужен только для Delphi. Про ошибку - может OLAP не установлен http://infostart.ru/public/64385/ ? Он у меня находится на следующей закладке формы "Основная форма"
20. Аркадий Кучер (Abadonna) 09.08.10 15:10
(19)
Про ошибку - может OLAP не установлен

Дык ясен арафат не установлен ;) Ты б хоть в описалове это как-то указал
21. Роман Осадченко (cleaner_it) 09.08.10 15:11
Посмотрите у себя закладку "OLAP-отчет" (картинка "Встроенный ActiveX-объект: OLAP-отчет") - есть там что? Если вам не нужен OLAP, удалите в Delphi компонент
22. Роман Осадченко (cleaner_it) 09.08.10 15:12
(20) Виновен :oops:
Abadonna; Арчибальд; +2 Ответить
23. Аркадий Кучер (Abadonna) 09.08.10 15:14
По опыту: описалова лишнего не бывает. Потом меньше вопросами терроризируют ;)
24. Роман Осадченко (cleaner_it) 09.08.10 15:19
25. Аркадий Кучер (Abadonna) 09.08.10 15:21
(21) Тут видишь в чем штука: чтобы перекомпилить, мне надо nextgrid_d6 на Дельфи поставить, а неохота - у меня и так там компонент море. Ты бы положил еще вариант экзюка без OLAP, и было бы счастье;)
Да и D7 у меня, может и не скушать компонент
26. Аркадий Кучер (Abadonna) 09.08.10 15:46
Если возникает ошибка "Класс не зарегистрирован" - это ничего страшного, просто не будет работать OLAP-отчет

К сожалению, не просто OLAP не работает. При нажатии ОК на мессадж-боске с ошибкой дальше просто ничего не происходит - форма таки не открывается
27. Александр Рытов (Арчибальд) 09.08.10 15:50
(24) Поздно. Ты уже под катком :D
28. Роман Осадченко (cleaner_it) 09.08.10 16:20
(26) Ок, перекомпилю экзешник без OLAP:) А вот без nextgrid_d6 сложнее, не хочется на стандартные компоненты переползать

(27) Каток - это неприятно:(
29. Аркадий Кучер (Abadonna) 09.08.10 16:22
(28) Да просто экзюк сделай, чтобы хоть потестить.
30. Александр Рытов (Арчибальд) 09.08.10 16:33
(28) Как сказать... Есть разные мнения, Абадонна в курсе :D
31. Роман Осадченко (cleaner_it) 09.08.10 16:33
Добавил файлик "Com1C_v1_5 - source (D6) without OLAP.zip", тестируйте:)

Кстати, есть хорошая задачка для интересующихся: как получить из 1С не все данные справочника для отображения в таблице, а только те, которые нужно отобразить (а при движении вертикального ползунка "добирать" нужные данные). Если ее решить - тогда уж можно будет развернуться:)
32. Сергей Троицкий (tsd) 09.08.10 20:28

КОМУ ЭТО НУЖНО:
2. Компаниям с ограниченным количеством лицензий 1С. Без желания тратить лицензии 1С на сотрудников, которым для работы нужна только отчетность:)


Хм,
применение данного решения подразумевает наличие в штате специально обученного человека, либо постоянное обращение к оному если он за штатом.

Bнтересно, через какое время до руководства дойдет, что выгоднее один раз купить лицензии, чем постоянно платить зарплату :D
например, лицензия на 20 пользователей стоит 65 т.р., ну, плюс сервер 1С 42 т.р. = 107 т.р. Через сколько месяцев стоимость умельца сравняется со стоимостью лицензий?
33. Михаил Усков (MMF) 10.08.10 00:28
"Кстати, есть хорошая задачка для интересующихся: как получить из 1С не все данные справочника для отображения в таблице, а только те, которые нужно отобразить (а при движении вертикального ползунка "добирать" нужные данные). Если ее решить - тогда уж можно будет развернуться"
Обычно в таких случаях делают на основе TVirtualStringTree - быстро получают первичные ключи и на их основе строят дерево-грид, а при прокрутке подкачивают отсутствующие поля по pk.
34. Роман Осадченко (cleaner_it) 10.08.10 02:47
(32) Предполагается наличие 1С-ника в штате:) Раз он есть - почему не воспользоваться ситуацией
(33) Спасибо!
35. Роман Осадченко (cleaner_it) 10.08.10 04:21
(33) Боюсь, что в качестве первичных ключей придется брать GUID, а их быстро получить не получится...
36. Аркадий Кучер (Abadonna) 10.08.10 06:21
(32) tsd, а ты не франч случайно? или аутсорсер? Фикси бы не написал
подразумевает наличие в штате специально обученного человек
, ибо фикси и есть специально обученный человек ;)
37. Сергей Троицкий (tsd) 10.08.10 12:08
(36) угу, уже давно франч. А за бытность свою был и фикси и фри (в общем как негра не назови ... :D ).

Фикси бы не написал
, ибо фикси и есть специально обученный человек


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

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

ЗЫ: сексом лучше заниматься в большой удобной кровати, а не стоя в гамаке в натянутом на себя гидрокостюме ;)

38. Аркадий Кучер (Abadonna) 11.08.10 00:13
(37)
сексом лучше заниматься в большой удобной кровати

Молодой еще ;) Мне вот в кровати уже и неинтересно. Но и в гидрокостюме не буду :D
Что касается данного решения, для меня оно интересно именно как решение, практического применения, если честно, не вижу
39. Роман Осадченко (cleaner_it) 11.08.10 01:52
Главное - реализация идеи. А как ее применить - всегда найдем 8-)
40. Сергей Гуков (SirYozha) 16.08.10 12:31
на 1С 8.2 не проверял, но на толстом клиенте должно работать

не сработает в строчке
V8 := CreateOLEObject('V81.COMConnector');// as IV8COMConnector;

в 8.2 вместо V81 пишется V82
41. Роман Осадченко (cleaner_it) 17.08.10 06:42
(40) ок, добавлю явный выбор версии платформы
42. Роман Осадченко (cleaner_it) 09.09.10 16:16
Обновлено до версии 1.5.1
Добавлено:
1. Обращение к метаданным
2. Выполнение простых запросов
43. Роман Осадченко (cleaner_it) 08.01.11 19:32
Обновлено до версии 1.6
Изменения:
1. Добавлен явный выбор версии платформы 1С (8.1, 8.2, 7.7)
2. Разделены формы обращения к метаданным и построения OLAP-отчетов (для того, чтобы не выкладывать отдельно версию без OLAP-отчета)
44. Марина (hate86) 09.10.11 11:24
Спасибо:-) Удобное подспорье. Почерпнула пару новых моментов.
1С 7.7 через COM.connector не подключается? или у меня просто руки кривые?
45. Zoomby Zoomby (Zoomby) 09.10.11 12:33
Спасибо, нужно будет посмотреть обработку. :)
46. Denis Zuev (Varies) 02.11.11 18:10
hate86
к 1С 7.7 нельзя подключиться через СОМ, туда только через OLE можно.

cleaner_it
пофикси для 1С 7.7 выбор COM/OLE коннектора, там практически ничего не отличается, только пара строчек при подключении изменится.
47. Роман Осадченко (cleaner_it) 03.11.11 02:22
(46) У меня времени нет на это:) Ставить делфи 6 с компонентами, изменять... Программисты смогут сделать это самостоятельно, это нетрудно.
48. lees lees (lees) 24.11.11 14:02
исходники Делфи я поюзал. Да, здорово! как реальный пример использовал , сделал обработку на основе этого тоже по Ком объекту, которая загружает данные из зарплатной базы в УПП, но обезличеннные! Круть! Ком-объекты рулят!
cleaner_it; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа