powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить объект GETOBJECT(, "vb2.application")
12 сообщений из 12, страница 1 из 1
Получить объект GETOBJECT(, "vb2.application")
    #38324993
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кто сталкивался с необходимостью импортировать в Excel данные из 1С?
Конструкция
Код: vbnet
1.
Set obj1C = CreateObject("vb2.application")


нормально работает. Однако неинтересно открывать несколько экземпляров 1С, когда нужная база уже открыта. Тем более, есть опасение, что не слишком квалифицированные пользователи что-нть сотворят не то.
Пробовал и так и сяк,
Код: vbnet
1.
   Set obj1C = GetObject(, "V82.Application") 


но неизменно получаю "429 ActiveX component can't create object" (Debug.Print Err.Number & " " & Err.Description).
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325009
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что из того, что у пользователя "нужная база уже открыта"? Ведь он с ней работает в это время. Вы же и открываете отдельное соединение для того, чтобы его полностью контролировать программно. И открывайте в инвизибл-режиме, чтобы пользователь даже не видел, что происходит.
Импорт сделали - сразу закрывайте соединение, нечего ему висеть.
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325030
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Тут еще такой момент - и одна-то база довольно долго чирикает, пока открывается на компе пользователей (просьба воздержаться от рекомендаций заменить им машины на более мощные), а уж две, а то и три вообще все ресурсы съедают.
Пока да. Используем "obj1C.Connect.Close", но при таком подходе базы закрывается тоже далеко не сразу (минуты две-три). Вручную закрыть получается гораздо быстрее.
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325140
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витал,

а это опечатка или в коде у Вас действительно не VB, а V 8 (цифра восемь)?
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325586
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
The_Prist,
К сожалению, опечатка. В коде все правильно - V 8 2
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325732
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Витал,

А как насчет не импорта из 1С в Excel, а экспорта в формат Excel средствами 1С? Пишете небольшую внешнюю обработку, прикручиваете к базе - а Экзелем только забираете сформированные файлы.
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38325937
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

С экспортом проблем нет. Как правило, стараемся так и делать. Но! Проблемы есть с общим доступом к данному конкретному файлу. Чтобы сохранить изменения надо его открыть для записи, а он уже может быть кем-то открыт (и чаще всего именно так и есть - открывают и не закрывают в течение всего дня) и этот кто-то кое-что там правит. При этом другие тоже могут смотреть файл в течение всего рабочего дня с доступом только для чтения и при этом хотят иметь возможность получать актуальную информацию. Источник данных в этом файле не один только 1С - он всего лишь один ИЗ...
А так бы и не заморачивались с решением этой проблемы.
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38326008
Витал, а почему не используете импорт ч-з внешние данные с сервера? Поди ведь не файловая база, а скл?
-----
Не люблю Progress OpenEdge.
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38326031
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВиталПроблемы есть с общим доступом к данному конкретному файлу. Чтобы сохранить изменения надо его открыть для записи, а он уже может быть кем-то открыт (и чаще всего именно так и есть - открывают и не закрывают в течение всего дня) и этот кто-то кое-что там правит. При этом другие тоже могут смотреть файл в течение всего рабочего дня с доступом только для чтения и при этом хотят иметь возможность получать актуальную информацию. Источник данных в этом файле не один только 1С - он всего лишь один ИЗ...Ничего не понял из перечисленного вами...
Если вы экспортируете данные (пусть даже в xls-файл) - то для дальнейшей работы именно этот файл становится источником данных , а отнюдь не рабочим полем для битвы юзеров за ресурсы. А "что-то там править" юзер должен иметь право только в своих файликах, подтягивая в них информацию из имеющегося экспортированного.
Если же вы "замутили" неповоротливую систему одного файла Excel, с общим доступом, с импортом данных их множества источников... тут одно выражение только политкоррекно: "кто вам такую архитектуру проектировал?"
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38326078
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может Вы тип(класс) неверно указываете? Может надо как-то так:
Код: vbnet
1.
Set obj1C = GetObject(, "V82.Connect")


или навроде того. Вполне возможно, что класс Application не может быть использован для подключения к уже запущенному экземпляру(я в 1С не очень, поэтому лишь догадки).
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38326300
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Да. Сначала не совсем понял о чем речь. Однако предложенный подход все равно не решает проблему обновления информации пользователями "...при этом хотят иметь возможность получать актуальную информацию" . Т.к. все равно придется открывать 1С (у кого не был открыт), потом файл внешней обработки и запускать экспорт, а в этом случае почему бы не напрямую шуровать данные в общий файл и на фиг тогда буферный? Также и с другими источниками - открываем, экспортируем.
Собственно, нет желания здесь обсуждать иные подходы. В конце концов есть простое начальственное ХОЧУ! "Хочу, чтобы все в одном месте и по одной кнопочке, а не ковырять инструкции - открой это, нажми то, закрой это, открой другое... Надо, чтобы нажал большую кнопку в конечном фале и получил результат".
Понимаю, что "новичку заказывают калькулятор и он пишет Excel, профи пишет ровно калькулятор, а гуру умеет убедить начальство в том, что калькулятор им нафиг не нужен", однако вариант гуру у меня не прокатил. Приходится писать калькулятор и именно в таком виде, как хочет начальство.

The_Prist,

Спасибо, но эффект тот же: "429 ActiveX component can't create object"
...
Рейтинг: 0 / 0
Получить объект GETOBJECT(, "vb2.application")
    #38326962
Витал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача решена.
В общем-то, получается "Знай и люби...". Вроде в ADODB нет драйвера для доступа к базам 1С, поэтому я такой подход даже не рассматривал и соответственно не искал аналог в 1С, а он там есть. Поэтому для доступа к инфе требуется создать объект класса COMConnector. Что-то типа:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim obj1C As Object, bd As Object
Set obj1C = CreateObject("V82.COMConnector") 'CreateObject("V82.Application")

Dim BD_1C_Path As String
BD_1C_Path = Sheets("óïð").Range("BD_1C_Path")
Set bd = obj1C.Connect("File=""" & BD_1C_Path & """;Usr=admin;Pwd=vfyxtcnth")

Set зпр = bd.NewObject("Запрос")
зпр.Текст = зпр_текст
              
зпр.УстановитьПараметр "ДатаОт", CDate(Sheets("Расчет").Range("ДатаОт"))
зпр.УстановитьПараметр "ДатаДо", CDate(Sheets("Расчет").Range("ДатаДо"))

Set выб = зпр.Выполнить().ВЫБРАТЬ()
...


То есть при таком подходе по барабану открыт 1С или нет. Ничего потом закрывать не требуется, да и работает быстрее. Вроде как. Еще не сравнивали с созданием и закрытием приложения.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Получить объект GETOBJECT(, "vb2.application")
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]