V83 comconnector excel vba

Коллеги, я в последнее время по работе активно использую доступ к 1С из внешнего приложения.
Думаю, эта тема будет интересна многим. В этой ветке я буду выкладывать примеры кода с пояснениями и прошу Ваших комментариев и пожеланий.

Подключение к 1С v.8 через COMConnector

Внешнее соединение с приложением 1С v.8 может осуществляться двумя способами — через объекты OLEAutomation и COMConnection.
Основное отличие — первый вариант обращается к полноценному приложению, включая интерфейсные объекты (окно приложения, формы, табло и т.п.). Второй вариант предназначен для работы с данными без обращения к интерфейсу. Второй вариант гораздо производительнее и требует меньше ресурсов.
Поскольку мне в работе приходится обращаться к 1С именно через COMConnection, я буду приводить примеры работы именно через этот механизм. Язык программирования — VBA.

Итак, первый код. Получаем подключение к 1С.
Подключаем к проекту VBA ссылку на библиотеку 1CV81 COMConnector Tipe Library (меню Tools — Refernces).
Копируем в модуль код:

Public v8 As Object
Dim v8con As New V81.COMConnector

Public Sub v8connect()

'Версия для файлового варианта 1С
'Set v8 = v8con.Connect("File=""C:Путь к папке с конфигурацией""; Usr =""ИмяПользователя"";Pwd=""Пароль""")

'Версия для серверного варианта 1С
Set v8 = v8con.Connect("Srvr=ИмяСервера1С;Ref=ИмяИнформационнойБазы;Usr =""ИмяПользователя"";Pwd=""Пароль""")

End Sub

В результате получаем публичную переменную v8 типа Object с активным подключением к заданной информационной базе.
Все параметры понятны интуитивно. Путь к базе, сервер и имя базы можно подсмотреть в окне запуска 1С.


#1




08.11.2010, 12:09

Последнее редактирование: 08.11.2010, 12:32 от Алексей Шмуйлович

Пример работы со справочником Контрагенты

'Получение ссылки на элемент справочника Контрагенты
'В системе 1С принято организациями назвать юрлица, бухгалтерский учет которых ведется в информационной системе (свои фирмы).
'Все остальные юрлица учитываются в справочнике Контрагенты. Причем организации также присутствуют в справочнике Контрагенты,
'но не наоборот.
'SpravContragent - функция возвращает логическое значение True, если удалось получить ссылку на элемент справочника Контрагенты
'v8 - объект COMConection, с установленным подключеннием к базе 1С
'INN - Строка ИНН для поиска элемента в справочнике
'Name - Строка Наименования для проверки на соответствие ИНН и наименования (некоторые госучреждения имеют одинаковый ИНН)
'Org - Срока с названием нашей организации. В случае добавления нового контрагента будет создан договор на эту организацию.
'Ref - в эту объектную переменную будет помещена ссылка на элемент справочника в случае успешного исполнения функции
'Message - Строка с сообщением об ошибках и прочих особых обстоятельствах
Public Function SpravContragent(v8 As Object, INN As String, Name As String, Org As String, Ref As Object, Message As String) As Boolean

       'Ищем элемент справочника
   Set Ref = v8.Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", INN)
   If Ref.Наименование = "" Then 'Если получили пустую ссылку, создаем нового контрагента
       Set Ref = v8.Справочники.Контрагенты.СоздатьЭлемент()
       Ref.Наименование = Name
       Ref.ИНН = INN
       'Предварительно создайте в справочнике Контрагенты папку (группу) "Новые контрагенты"
       Ref.Родитель = v8.Справочники.Контрагенты.НайтиПоНаименованию("Новые контрагенты")
       Ref.Записать
       Set Дог = v8.Справочники.ДоговорыКонтрагентов.СоздатьЭлемент()
       Дог.Наименование = "Основной договор"
       Дог.Владелец = Ref.ссылка
       Дог.Организация = v8.Справочники.Организации.НайтиПоНаименованию(Org)
       Дог.ВалютаВзаиморасчетов = v8.Справочники.Валюты.НайтиПоНаименованию("руб")
       Дог.ВидДоговора = v8.Перечисления.ВидыДоговоровКонтрагентов.Прочее
       Дог.ВедениеВзаиморасчетов = v8.Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом
       Дог.Записать
       Ref.ОсновнойДоговорКонтрагента = Дог
       Ref.Записать
       'Создаем задачу в системе 1С. Код процедуры CreateTask будет приведен позже. Пока эту строку нужно закомментировать
       'CreateTask v8, "Добавлен новый контрагент """ & Name & """. Проверьте правильность заполнения реквизитов.", Ref.ссылка
       SpravContragent = True
   Else
       If Ref.Наименование = Name Then
           'Определяем, что делать, если элемент помечен на удаление. Например, снимаем пометку.
           If Ref.ПометкаУдаления Then Ref.ПолучитьОбъект.УстановитьПометкуУдаления 0
           SpravContragent = True
      Else
           Message = "Сообщение менеджеру: Контрагент с указанным ИНН найден в справочнике, но его наименование не совпадает с запрошенным (""" & Name & """). Наименование в справочнике """ & Ref.Наименование & """. Свяжитесь с департаментом финансов."
           SpravContragent = False
       End If
   End If
End Function

'Пример использования
Sub testSpravContragent()
   Dim text As String
   Dim OutRef As Object

       If v8 Is Nothing Then v8connect

       'Замените параметры вызова функции на правильные наименования и ИНН, чтобы получить ссылку на существующий элемент
   If SpravContragent(v8, "Тестовое название", "123456789012", "Тестовая организация", OutRef, text) Then
       Debug.Print OutRef.Наименование
       Debug.Print text
       Debug.Print OutRef.ОсновнойДоговорКонтрагента.Наименование
   End If
End Sub


#2




08.11.2010, 12:30

Последнее редактирование: 08.11.2010, 12:33 от Алексей Шмуйлович

Получаем структуру данных документа для дальнейшего использования в коде

Код должен запускаться из VBA-модуля книги MS Excel.

Sub RunDocumentStructure()
   If v8 Is Nothing Then v8connect
   DocumentStructure v8.метаданные.Документы.ПлатежноеПоручениеВходящее
   DocumentStructure v8.метаданные.Документы.СчетНаОплатуПокупателю
   'DocumentStructure v8.метаданные.Документы...
End Sub

Sub DocumentStructure(Документ) 'Выводит структуру данных документа на лист Excel
'Dim Документ As Object, sht As Worksheet
If v8 Is Nothing Then v8connect
Set sht = ActiveWorkbook.Sheets.Add
sht.Name = Left(Документ.Имя & " Структура", 31)
On Error Resume Next

For Each рек In Документ.Реквизиты
   r = r + 1
   sht.Cells(r, 1) = "Документ." & рек.Имя
   sht.Cells(r, 1).InsertIndent -1
   sht.Cells(r, 1).Font.Bold = True
   sht.Cells(r, 2) = рек.Синоним
   sht.Cells(r, 3) = v8.String(рек.тип)
   If v8.String(рек.тип) = "Строка" Then sht.Cells(r, 3) = v8.String(рек.тип) & "(" & v8.String(рек.тип.квалификаторыстроки.длина) & ")"
   If v8.String(рек.тип) = "Число" Then sht.Cells(r, 3) = v8.String(рек.тип) & "(" & v8.String(рек.тип.квалификаторычисла.разрядность) & "," & v8.String(рек.тип.квалификаторычисла.разрядностьдробнойчасти) & ")"
Next
For Each тч In Документ.Табличныечасти
   r = r + 1
   sht.Cells(r, 1) = "Документ." & тч.Имя
   sht.Cells(r, 2) = "Табличная часть (подчиненная таблица)"
   sht.Cells(r, 1).InsertIndent -1
   sht.Cells(r, 1).Font.Bold = True
For Each рек In тч.Реквизиты
   r = r + 1
   sht.Cells(r, 1).InsertIndent 1
   sht.Cells(r, 1).Font.Bold = False
   sht.Cells(r, 1) = тч.Имя & "." & рек.Имя
   sht.Cells(r, 2) = рек.Синоним
   sht.Cells(r, 3) = v8.String(рек.тип)
   If v8.String(рек.тип) = "Строка" Then sht.Cells(r, 3) = v8.String(рек.тип) & "(" & v8.String(рек.тип.квалификаторыстроки.длина) & ")"
   If v8.String(рек.тип) = "Число" Then sht.Cells(r, 3) = v8.String(рек.тип) & "(" & v8.String(рек.тип.квалификаторычисла.разрядность) & "," & v8.String(рек.тип.квалификаторычисла.разрядностьдробнойчасти) & ")"
Next
Next
sht.Columns("A:B").EntireColumn.AutoFit
End Sub


К примеру: Подключение к 1С v.8 через COMConnector

При таком способе у меня Excel аварийно завершает работу на строке подключения. Попробовал через позднее связывание, — выдаёт ошибку: «Method ‘Connect’ of object ‘IV8COMConnector3’ failed».

Public Sub v8connect()
 Set v8 = CreateObject("v81.COMConnector")
'Подключаемся через пользователя со всеми правами:
 ConnectionString = "File=""C:База81"";Usr=""Шпец"";Pwd=""12345"";"
 Set v8con = v8.Connect(ConnectionString)
End Sub

База создана с нуля. Есть идеи как пофиксить ошибку?

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли


Нужно проверить у пользователя конкретно право внешнего соединения.


Да, я посмотрел у себя в конфигурации. Ни одна роль, имеющаяся в типовой конфигурации, не имеет права внешнего подключения. У нас в конфигурацию добавлена роль, имеющая такое право. Право задается для самого верхнего объекта в дереве конфигурации, то есть для самой конфигурации.


ВБА для меня темный лес, в 1С постоянно что то изучаю и 95% нужной информации выгружаю через свои обработки :)


Ну и хорошо, будем обращаться за советом :)


Доброго времени суток!
Спасибо за статью! Очень помогла! Подключение, пример — все работает.

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

Может подскажите где посмотреть объектную модель 1С?
Спасибо


Самые общие советы: посмотрите для начала в конфигураторе 1С дерево конфигурации, увидите какие бывают объекты, набор их свойств.
Там же есть синтакс-помощник, где системно описана структура объектной модели, свойства и методы языка.
Ваш вопрос относится к конкретному объекту конфигурации — документу Счета-фактуры полученные. Найдите его в дереве конфигурации, посмотрите набор реквизитов. В Синтакс помощнике посмотрите, какие методы существуют для документов.


Еще один вариант познакомиться со структурой конкретной конфигурации, а точнее структурой данных — изучить Консоль отчетов. Это универсальный инструмент, позволяющий в режиме Предприятия (не в конфигураторе) строить запросы к различным таблицам данных. Ищите консоль отчетов в меню Отчеты — Универсальные отчеты — Консоль отчетов.



Спасибо!
Уже рою в этом направлении.


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Другие офисные программы

  • 1C

  • Статья «Работа с 1С v.8 через COMConnector из Excel» (черновик)

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#1

23.01.2018 18:02:09

Всем, здравствуйте. Пробую подключиться к серверу 1С с помощью кода (при запуске программы 1С поле пароля пустое)

Код
Public V8 As Object
Dim v8con As New V83.COMConnector

Public Sub v8connect()
Set V8 = v8con.Connect("Srvr=""Feldman"";Ref=""alfa_trade_2005"";Usr=""ИвановВС"";Pwd=""""")
End Sub

Но при выполнении, появляется сообщение Debug на строке

Код
 Set V8 = v8con.Connect("Srvr=""Feldman"";Ref=""alfa_trade_2005"";Usr=""ИвановВС"";Pwd=""""")

  Подскажите пожалуйста где ошибка.

Кросс

Excel всемогущий.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

Здравствуйте! Я вообще-то не спец в этом, но вдруг угадал: для пустого пароля точно нужно пять кавычек, а не четыре?

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Здесь именно пять кавычек.

 

Дмитрий Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#4

23.01.2018 20:01:58

Цитата
_Igor_61 написал:
точно нужно пять кавычек

для пароля 4, пятая закрывающая строку подключения.

Цитата
agregator написал:
появляется сообщение Debug

а что пишет-то сообщение? Может, раз пароль отсутствует, его и не указывать вовсе?

Код
Set V8 = v8con.Connect("Srvr=""Feldman"";Ref=""alfa_trade_2005"";Usr=""ИвановВС"";")

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

Изменено: Дмитрий Щербаков23.01.2018 20:02:53

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

#5

23.01.2018 20:07:18

Цитата
agregator написал:
Здесь именно пять кавычек.

Уверены?

http://1clenta.ru/pattern/33

не нужно ли там ; добавить?

По вопросам из тем форума, личку не читаю.

 

_Igor_61

Пользователь

Сообщений: 3007
Регистрация: 18.07.2016

Ой, неужели я все-таки угадал?  :)  

 

БМВ

Модератор

Сообщений: 21378
Регистрация: 28.12.2016

Excel 2013, 2016

_Igor_61, А вдруг там пароль один апостраф :-) ( самый распространённый пароль — шесть звездочек )  :D  

По вопросам из тем форума, личку не читаю.

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Утром на работе попробую предложения _Igor_61, Дмитрия Щербакова и БМВ.

Изменено: agregator23.01.2018 20:26:24

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#9

23.01.2018 20:31:14

В

примере

показывалось так

Код
Public v8 As Object
Dim v8con As New V81.COMConnector

Public Sub v8connect()
'Версия для файлового варианта 1С
'Set v8 = v8con.Connect("File=""C:Путь к папке с конфигурацией""; Usr =""ИмяПользователя"";Pwd=""Пароль""")
'Версия для серверного варианта 1С
Set v8 = v8con.Connect("Srvr=ИмяСервера1С;Ref=ИмяИнформационнойБазы;Usr =""ИмяПользователя"";Pwd=""Пароль""")
End Sub

Excel всемогущий.

 

Дмитрий Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#10

23.01.2018 20:42:01

Цитата
agregator написал:
В примере  показывалось так

Текст ошибки все так же будет не лишним. Кроме Вас никто не знает что там за ошибка. Может ошибка вообще в недоступности сервера.

Изменено: Дмитрий Щербаков23.01.2018 20:42:32

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

На предложение _Igor_61 четыре кавычки VBA ругается «Compile error: Expected: list separator or)»
На предложения  Дмитрия Щербакова без Pwd=»»»» и  БМВ ; добавить
«Microsoft Visual Basic
Run-time error ’-2147467259 (80004005)’:
Внешнее соединение не разрешено для указанного пользователя 1C Предприятия
End Debug»

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

Сказали пользователя с паролем и макрос сработал.
Что без пароля нельзя?

 

Дмитрий Щербаков

Пользователь

Сообщений: 14182
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#13

24.01.2018 09:16:24

Цитата
agregator написал:
Что без пароля нельзя?

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Jack Famous

Пользователь

Сообщений: 10848
Регистрация: 07.11.2014

OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome

https://vk.com/pavelgrishenkov?w=wall89239090_1137

Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄

 

agregator

Пользователь

Сообщений: 214
Регистрация: 01.01.1970

#15

24.01.2018 14:32:25

Цитата
Дмитрий Щербаков написал:
Вы вручную(без кода) можете войти в систему с указанным пользователем без пароля?

Да, я указываю пользователя, а поле пароля остается пустым.

Excel всемогущий.

18 / 20 / 2

Регистрация: 04.03.2017

Сообщений: 199

1

13.09.2018, 13:28. Показов 25121. Ответов 30


Студворк — интернет-сервис помощи студентам

Доброго времени суток. Кто знает, скажите пожалуйста, как через excel происходит подключение к 1С, то есть как посредством запросов, VBA и прочего, минуя выгрузку CSV таблиц из 1C сразу обращаться к дужным данным в 1C? В excel есть вкладка данные (рисунок 1), в ней есть графа «Из базы данных SQL Server» (рисунок 2), которая открывает окно ввода сервера и инструкций (рисунок 3). Как я понимаю нужно туда подставить какие-то значения, но какие? У меня есть пользовательский логин и пароль для 1C, на вкладке 1С «О программе» есть тоже кое-какая информация (рисунок 4), и я так понимаю её тоже нужно куда-то вставить. Кто знает, помогите пожалуйста подключиться к 1С, два дня перерывал весь интернет, ничего не нашёл (или не понял). Очень нужно.



0



7 / 7 / 3

Регистрация: 09.01.2018

Сообщений: 210

13.09.2018, 18:16

21

Студворк — интернет-сервис помощи студентам

А где в России берут все ПО? На торрентах.
Не уверен, что имя машины Важно. А вот Самого сервера я не вижу.

Добавлено через 16 минут
Открываем меню программ на виртуалке, находим MS SQL Server 2008 (или 2005, или 2012). Там есть Диспетчер конфигурации — в нем четко видны все инстансы, запущенные на компе. Кстати, не исключено, что там же есть Microsoft SQL Management Studio, так что и ставить не нужно.



0



7 / 7 / 3

Регистрация: 09.01.2018

Сообщений: 210

14.09.2018, 09:37

22

Последний скрин не видел… В нем вижу, что Initial Catalog=Base8;

Добавлено через 33 минуты
Это я про скрин с параметрами 1С.

Добавлено через 5 минут
И еще… Хотел спросить. А за каким лешим Вы вообще решили напрячь этого монстра (Excel)? Думаете дешево и сердито получится? Отнюдь. Во-первых, этот монстр отожрет ресурсов у сиквела вдвое-втрое больше, чем программа на чем угодно под ADO. Во-вторых, этот монстр за собой «не подчищает» на сиквеле — его соединения торчат часами. Это не страшно, если их единицы-десятки, но если Вы поставите Excel основным инструментом решения всех задач — будет проблема.



0



477 / 134 / 49

Регистрация: 07.05.2016

Сообщений: 521

14.09.2018, 10:45

23

а точно нужно именно из excel подключаться в базе для решения задачи?
может будет достаточно наоборот из 1С сохранять отчет с нужными цифрами в excel?
это будет гораздо проще и без очередного велосипеда



0



18 / 20 / 2

Регистрация: 04.03.2017

Сообщений: 199

14.09.2018, 14:15

 [ТС]

24

vpivo, QwertyZ, ну просто хочу из экселя сразу формировать отчёты, статистику, и планирование закупок (на основе статистике). а там, в 1C, хренова туча информации, и всё нужно обрабатывать, всё с исключениями, потому что 1С у нас написана не очень..

Добавлено через 1 минуту
QwertyZ, vpivo, кроме екселя ничего подходящего под данные задачи в компании нет, да и вообще прога удобная



0



477 / 134 / 49

Регистрация: 07.05.2016

Сообщений: 521

14.09.2018, 15:31

25

ГарриНаФеррари,

Цитата
Сообщение от ГарриНаФеррари
Посмотреть сообщение

vpivo, QwertyZ, ну просто хочу из экселя сразу формировать отчёты, статистику, и планирование закупок (на основе статистике). а там, в 1C, хренова туча информации, и всё нужно обрабатывать, всё с исключениями, потому что 1С у нас написана не очень..

т.е. вы думаете, что будет проще извлекать какие-то данные из SQL таблиц, чем формировать отчеты в 1С ?
что-то очень сомнительно



0



7 / 7 / 3

Регистрация: 09.01.2018

Сообщений: 210

14.09.2018, 16:36

26

По мне так лучше потратить месяц на изучение псевдоERP, она же аляСУБД под названием 1С, чем этого монстра Excel задействовать. Поверьте на слово, Excel — худший вариант.
Во-первых, Вы не знаете архитектуры своей БД Base8, поэтому Вам придется профайлером подглядывать за тем, как и откуда инфу добывает сама 1С.
Во-вторых, раз уж Вы решили сесть на Excel, то значит до самых гланд будете вынуждены отлаживать запросы к таблицам, имена которых изначально знать не будете.
В-третьих, будете нерво курить бамбук, пока монстроподобный Excel родит отчет, который даже черепахоподобная 1С будет формировать вдвое быстрее.



0



18 / 20 / 2

Регистрация: 04.03.2017

Сообщений: 199

14.09.2018, 21:57

 [ТС]

27

Если всё так плохо с 1С и excel, то почему при приёме на работу почти всегда требуют знание sql и excel, я так понимаю что именно для того, чтобы с помощью excel извлекать данные из 1C..?

Добавлено через 1 час 0 минут
Да и ещё плюс ко всему, это наверное самое основное, мне чтобы создать сводную таблицу в excel, нужно обработать примерно 2 400 000 строк (каждая строка содержит 27 столбцов). Excel просто не тянет такой объём, OLAP-куб обрабатывается ооооочень долго, это просто жесть какая-то….У меня один файлик такой весит 400мб, excel дохнет



0



Тест

Эксперт 1С

383 / 162 / 56

Регистрация: 26.02.2010

Сообщений: 1,241

17.09.2018, 09:21

28

Цитата
Сообщение от ГарриНаФеррари
Посмотреть сообщение

чтобы с помощью excel извлекать данные из 1C..?

вообщем первый раз такое слышу



0



Эксмет

17.09.2018, 09:54

Не по теме:

Цитата
Сообщение от ГарриНаФеррари
Посмотреть сообщение

Да и ещё плюс ко всему, это наверное самое основное, мне чтобы создать сводную таблицу в excel, нужно обработать примерно 2 400 000 строк (каждая строка содержит 27 столбцов). Excel просто не тянет такой объём, OLAP-куб обрабатывается ооооочень долго, это просто жесть какая-то….У меня один файлик такой весит 400мб, excel дохне

Вот вы сами объяснили, почему в компаниях, которые не хотят загнуться в скором времени, переходят от учета в excel на 1С.
У вас есть мощный инструмент — отчеты в 1С. Если подходящего в вашей базе нет, закажите разработку и выгружайте потом его результат в эксель, раз начальство не воспринимает 1С)



0



megacold

24 / 19 / 6

Регистрация: 10.11.2016

Сообщений: 51

04.11.2018, 07:07

30

Если не знаете, как подключиться то будете 2 года пытаться собрать инфу из sql.
Пробуйте формировать списки, отчеты и сохранять в Excel/
Есть еще вариант через COM

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Module Module1
Sub Main()
  Dim cc As Object 'It will be a COM connector
  Dim con As Object
  Dim o,o2 As Object
  Dim e As Object
  Dim str As String
  Try
    cc = CreateObject("V82.COMConnector")
    con = cc .Connect ("File=c :/lcv8/mdcom;Usr=rnaBHbiii")
    o = con NewObject("Array", 5)
    o.Set(0 "Item 0")
    o.Set(1 "Item 1")
    o.Set(2 "Item 2")
    o.Set(3 "Item 3")
    o.Set(4 "Item 4")
    o.Set(5 "Item 5")
    Dim c As Integer = o.Count()
    For Each e In o
      Console.WriteLine(e.ToString())
    Next
    o2 = con.AllowedLength.Variable
    str = con.ValueStr(o2)
    Dim s As String = str
  Catch ex As Exception
    Console.WriteLine(ex)
  End Try
  con = Nothing
  cc = Nothing
  System.GC.Collect()
End Sub
End Module
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Set Товар = trade.Справочники.Товары
Группа = Товар.СоздатьГруппу()
Группа.Наименование = "***** Экспорт из Excel ******"
Группа.Записать()
N = 100 'Количество строк в документе
For Count = 1 To N
Элемент = Товар.СоздатьЭлемент()
Элемент.Наименование = Application.Cells(Count, 2).Value
Элемент.Розн_Цена = Application.Cells(Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells(Count, 4).Value
Элемент.Опт_Цена = Application.Cells(Count, 5).Value
Элемент.Родитель = Группа.Ссылка
Элемент.Записать()
Next Count



0



Al75

0 / 0 / 0

Регистрация: 28.08.2020

Сообщений: 1

28.08.2020, 19:58

31

‘В редакторе Excel подключаем через Reference библиотеку V83.COMconnector. Если ее нет то нужно установить

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    Dim cntr As Object
    Dim conn As New V83.COMConnector
 
 ' Файловый вариант
         Set cntr = conn.Connect("File=""e:База"";")
   'Серверный вариант
        Set cntr =conn.Connect("Srvr=""ИмяСервера"";Ref=""ИмяБазы"";Usr=""Пользователь"";Pwd=""12345"")
    
     Set Запрос = cntr.NewObject("Запрос")
       //Если есть временные таблицы
    Set МВТ = cntr.NewObject("МенеджерВременныхТаблиц")
    
    Запрос.МенеджерВременныхТаблиц = МВТ
 
 
  Запрос.Текст = "Выбрать * Из Спаравочник.Номенклатура"
 
  Запрос.УстановитьПараметр "КонецПериода", CDate("24.12.2019")
 
  Set Записи = Запрос.Выполнить.ВЫБРАТЬ()
  Set n=1;
 
      While Запрос.Следующий() = True
      Worksheets("заказы").Cells(n, 1).Value = Записи.Артикул.Наименование
      n=n+1
       Wend



0



>
Как вытащить справочники из 1С через V83.COMConnector
, Запрос в 1 С из EXCEL

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
30.01.18, 12:57

    Full Member

    ***

    Рейтинг (т): 6

    Всем здравия!
    Опыта в 1с нет, тч извиняйте.
    Конектюсь через СОМ.

    В общем задача вытащить все данные из:
    Справочники: Номенклатура, Контрагенты.

    Можно ли их вытащить сразу двумерной таблой?
    Если нет, то как построчно вывести?

    ExpandedWrap disabled

          Dim cntr As Object

          Dim trade As Object

          Dim Òîâàð As Object

          Set cntr = CreateObject(«V83.COMConnector»)

          Set trade = cntr.Connect(«File=»»C:Program Files1cv8″»; Usr=»»Пупкин»»;»)

    На этом мои познания закончились, т.к. дальше 1С код идет. :wall:

    Если можно примеры вывода и ввода.

    Заранее весьма благодарен.

    Monster

    Akina



    Сообщ.
    #2

    ,
    30.01.18, 13:19

      https://forum.infostart.ru/forum9/topic141309/
      См. «// Пример на языке MS Visual Basic». А использовать — как обычный рекордсет, с поправкой на имена его методов и свойств.


      Marchello



      Сообщ.
      #3

      ,
      30.01.18, 14:37

        Full Member

        ***

        Рейтинг (т): 6

        Цитата Akina @ 30.01.18, 13:19

        На последней строке выдаёт ошибку.
        С чем это может быть связано?
        Может какой реф ему ещё нать?

        Добавлено 30.01.18, 14:40
        Может админ что перекрыл или в 1с?
        Я первый кто конектится так у нас.

        Сообщение отредактировано: Marchello — 30.01.18, 14:40


        Прикреплённый файлПрикреплённый файл____________________.png (11,85 Кбайт, скачиваний: 704)

        Monster

        Akina



        Сообщ.
        #4

        ,
        30.01.18, 18:04

          У тебя есть и 1С, и коннектор, и ещё много чего.
          У меня нет ничего вышеперечисленного, включая интерес.
          И кто из нас должен экспериментировать и читать маны? Или хотя бы смотреть в окно OB и на сообщения об ошибках?


          Gonarh



          Сообщ.
          #5

          ,
          30.01.18, 20:46

            Full Member

            ***

            Рейтинг (т): 28

            Покопался в загашниках 12-летней давности, накопал компонент для делфей как раз
            основанный на COM к одинэске, вот модуль.
            ПЫСЫ. Программирование тогда только начинал постигать, т.ч. говнокод присутствует в огромных дозах, типа утечек памяти и глобальных переменных,
            но всё что тебе надо и даже больше чем надо там есть.

            Прикреплённый файлПрикреплённый файлole1c.pas (27,46 Кбайт, скачиваний: 276)

            Wizard

            Bas



            Сообщ.
            #6

            ,
            30.01.18, 23:41

              Цитата Marchello @ 30.01.18, 12:57

              В общем задача вытащить все данные из:
              Справочники: Номенклатура, Контрагенты.

              Версия 1С какая?


              Marchello



              Сообщ.
              #7

              ,
              31.01.18, 05:29

                Full Member

                ***

                Рейтинг (т): 6

                Цитата Bas @ 30.01.18, 23:41

                Цитата Marchello @ 30.01.18, 12:57

                В общем задача вытащить все данные из:
                Справочники: Номенклатура, Контрагенты.

                Версия 1С какая?

                1С:Предприятие 8.3 (8.3.10.2650)
                Бухгалтерия предприятия, редакция 3.0 (3.0.57.17)

                Guru

                ^D^ima



                Сообщ.
                #8

                ,
                31.01.18, 11:00

                  Цитата Marchello @ 30.01.18, 12:57

                  File=»»C:Program Files1cv8″

                  Это у тебя реально там база лежит, или ты коннектишся к экзешнику? :D

                  Добавлено 31.01.18, 11:47

                  ExpandedWrap disabled

                    Sub Кнопка1_Щелчок()

                    Dim cntr As Object

                       Dim Buh As Object

                       Dim Контрагенты As Object

                       Dim Выборка As Object

                       Dim n As Integer

                       Dim Count As Integer

                       Set cntr = CreateObject(«V83.COMConnector»)

                       Set Buh = cntr.Connect(«File=»»C:TestBaseКаврецкая»»;»)

                       Set Контрагенты = Buh.Справочники.Контрагенты

                       Set Выборка = Контрагенты.Выбрать()

                       n = 1

                       While Выборка.следующий() = True

                         Cells(n, 1).Value = Выборка.Наименование

                         Cells(n, 2).Value = Выборка.ИНН

                         n = n + 1

                       Wend

                    End Sub

                  Добавлено 31.01.18, 11:50

                  Цитата Marchello @ 30.01.18, 12:57

                  вытащить все данные из:
                  Справочники: Номенклатура, Контрагенты.

                  Тебе придется указывать конкретные реквизиты этих справочников


                  Marchello



                  Сообщ.
                  #9

                  ,
                  31.01.18, 12:46

                    Full Member

                    ***

                    Рейтинг (т): 6

                    Цитата ^D^ima @ 31.01.18, 11:00

                    Это у тебя реально там база лежит, или ты коннектишся к экзешнику? :D

                    Хороший вопрос!
                    Админа вымучил.
                    Короче база лежит на серваке, у юзеров клиенты.
                    Работает через постгри.

                    То что реквизиты указывать это я понимаю.
                    Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать.
                    Дальше уже сам буду разбираться.

                    Сообщение отредактировано: Marchello — 31.01.18, 12:51

                    Guru

                    ^D^ima



                    Сообщ.
                    #10

                    ,
                    31.01.18, 12:51

                      Цитата Marchello @ 31.01.18, 12:46

                      Работает через постгри.

                      Не важно.
                      Как в 1с-ке строка подключения, то и сюда пихай.В списке баз внизу строка.

                      Добавлено 31.01.18, 12:52

                      Цитата Marchello @ 31.01.18, 12:46

                      Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать.

                      выше примерчик

                      Member

                      kosten



                      Сообщ.
                      #11

                      ,
                      31.01.18, 13:14

                        Цитата Marchello @ 31.01.18, 12:46

                        Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать.

                        Вот пример для 1С. Сам адаптируешь для экселя.

                        Guru

                        ^D^ima



                        Сообщ.
                        #12

                        ,
                        31.01.18, 13:34

                          Добавил в пример запрос

                          ExpandedWrap disabled

                            Sub Кнопка1_Щелчок()

                            Dim cntr As Object

                               Dim Buh As Object

                               Dim Контрагенты As Object

                               Dim Выборка As Object

                               Dim Запрос As Object

                               Dim ВыборкаЗапрос As Object

                               Set cntr = CreateObject(«V83.COMConnector»)

                               Set Buh = cntr.Connect(«File=»»C:TestBaseКаврецкая»»;»)

                               Set Контрагенты = Buh.Справочники.Контрагенты

                               Set Выборка = Контрагенты.Выбрать()

                               n = 1

                               While Выборка.следующий() = True

                                 Cells(n, 1).Value = Выборка.Наименование

                                 Cells(n, 2).Value = Выборка.ИНН

                                 n = n + 1

                               Wend

                                  Set Запрос = Buh.NewObject(«Запрос»)

                                Запрос.Текст = «ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ  Номенклатура.Код = &Код»

                                Запрос.УстановитьПараметр «Код», «00-00000291»

                                Set ВыборкаЗапрос = Запрос.Выполнить.Выбрать()

                               While ВыборкаЗапрос.следующий() = True

                                 Cells(1, 3).Value = Выборка.Наименование

                               Wend

                            End Sub


                          Marchello



                          Сообщ.
                          #13

                          ,
                          31.01.18, 13:38

                            Full Member

                            ***

                            Рейтинг (т): 6

                            Цитата ^D^ima @ 31.01.18, 12:51

                            Все равно не хочет.
                            На первом set дольше висит но выдаёт ту же ошибку.
                            Может где что-то не так пишу?
                            Визуально базу на серваке не видно.
                            Может быть из-за этого?
                            Как проверить что ее хоть видит V83 при конекте?
                            Не понятно то ли база его отпихивает, то ли не видит вообще его.
                            У нас стандартная версия, может быть отключена внешняя обработка?

                            ExpandedWrap disabled

                              Sub Excel_to_trade()

                                  Dim cntr As Object

                                  Dim trade As Object

                                  Set connector = CreateObject(«V83.COMConnector»)

                                  Serv = «1c8server»

                                  Bs = «SRV-BUH»

                                  User = «Ìàð÷åâñêèé Ä. Å.»

                                  Pass = vbNullString

                                  Set trade = connector.Connect(«Srvr=»»1c8server»»;Ref=»»SRV-BUH»»;»)

                                  Set trade = connector.Connect(«Srvr=» & Serv & «;» & «Ref=» & Bs & «;» & «Usr=» & User & «;» & «Pwd=» & Pass)

                                  Set trade = connector.Connect(«Srvr=» & Serv & «;» & «Ref=» & Bs & «;» & «Usr=» & User & «;» & «Pwd=» & Pass & «;»)

                              End Sub

                            Guru

                            ^D^ima



                            Сообщ.
                            #14

                            ,
                            31.01.18, 13:54

                              Цитата Marchello @ 31.01.18, 13:38

                              Как проверить что ее хоть видит V83 при конекте?

                              Ты в 1С базу-то открываешь?

                              Добавлено 31.01.18, 13:56
                              советую что-бы идти дальше локально поставить копию к себе файловую базу.


                              Marchello



                              Сообщ.
                              #15

                              ,
                              31.01.18, 14:02

                                Full Member

                                ***

                                Рейтинг (т): 6

                                Цитата kosten @ 31.01.18, 13:14

                                Благодарю.

                                Цитата ^D^ima @ 31.01.18, 13:34

                                Благодарю, то что надо.

                                Осталось только подключиться. :wall:

                                Добавлено 31.01.18, 14:07

                                Цитата ^D^ima @ 31.01.18, 13:54

                                Алгоритм какой использовать?

                                Открыть локального клиента, а потом конектиться из экселя к серваку без указания паса и логина?
                                Или както ещё?

                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                0 пользователей:

                                • Предыдущая тема
                                • VB for Application
                                • Следующая тема

                                [ Script execution time: 0,0707 ]   [ 22 queries used ]   [ Generated: 14.04.23, 16:33 GMT ]  

                                   Eeelena

                                23.08.19 — 12:48

                                Здравствуйте.

                                Пытаюсь запустить макрос , который выгружает из 1С документы. Но возникает ошибка «Не установлены компоненты доступа к серверу 1С:Предприятия» . Подскажите в чем может быть причина, вроде бы все установлено Платформа 8.3

                                Код следующий:

                                Set conn = CreateObject(«V83.COMConnector»)

                                Set bd = conn.Connect(«Srvr=»»Zeus:1687″»;Ref=»»moto_sup»»;Usr=»»Логин»»;Pwd=»»12345″»»)

                                Set Запрос = bd.NewObject(«Запрос»)

                                Запрос.Текст = «Здесь текст консольного запроса к БД 1С»

                                   sqr4

                                1 — 23.08.19 — 12:50

                                   VladZ

                                2 — 23.08.19 — 13:27

                                (0) Зачем нужны эти нелепые телодвижения? Почему бы из 1с не генерировать все, что нужно?

                                   Cyberhawk

                                3 — 23.08.19 — 13:30

                                (2) Увы, далеко не все возможности Экселя поддерживаются в платформенной записи табдока в эксель-файл

                                   Eeelena

                                4 — 23.08.19 — 13:51

                                (1) Зарегистрировала вручную. но все равно такая же ошибка

                                   Кирпич

                                5 — 23.08.19 — 13:59

                                мож excel 64 разрядный

                                   Eeelena

                                6 — 23.08.19 — 14:03

                                (5) 32

                                   sqr4

                                7 — 23.08.19 — 14:30

                                Такое ощущение, что надо еще что то в платформе доставить или права дать кому-то

                                   Eeelena

                                8 — 23.08.19 — 14:37

                                (7) если бы я знала что )

                                   Sergz66

                                9 — 23.08.19 — 14:50

                                (6)А 1с сколькибитная?

                                   VladZ

                                10 — 23.08.19 — 14:54

                                Можно озвучить полный текст задачи?

                                   Eeelena

                                11 — 23.08.19 — 15:02

                                (9) 32

                                   МаксимНижегородец

                                12 — 23.08.19 — 15:02

                                (0)  CreateObject(«V83.COMConnector») — ВНЕШНЕЙ Обработкой 1С пробовали все тоже самое получать, через V83.COMConnector?

                                   Eeelena

                                13 — 23.08.19 — 15:03

                                (10)Пытаюсь запустить макрос , который выгружает из 1С документы. Но возникает ошибка «Не установлены компоненты доступа к серверу 1С:Предприятия»  

                                Код следующий:

                                Set conn = CreateObject(«V83.COMConnector»)

                                Set bd = conn.Connect(«Srvr=»»Zeus:1687″»;Ref=»»moto_sup»»;Usr=»»Логин»»;Pwd=»»12345″»»)

                                Set Запрос = bd.NewObject(«Запрос»)

                                Запрос.Текст = «Здесь текст консольного запроса к БД 1С»

                                   Eeelena

                                14 — 23.08.19 — 15:03

                                (12) нет

                                   sqr4

                                15 — 23.08.19 — 15:04

                                (14) пробуйте, это явно отметет множество причин

                                   Sergz66

                                16 — 23.08.19 — 15:11

                                (13)А операционная система 32 или 64х?

                                   МаксимНижегородец

                                17 — 23.08.19 — 15:17

                                (15) Первая же причина — на КОМПЕ не установлен из дистрибутива COMConnector.

                                   МаксимНижегородец

                                18 — 23.08.19 — 15:19

                                (15) Вторая причина на КОМПЕ из макроса не виден менеджер лицензий 1С.

                                   VladZ

                                19 — 23.08.19 — 15:24

                                (13) Это я уже видел.  Дальше что происходит?

                                   Eeelena

                                20 — 23.08.19 — 19:30

                                (16) 64

                                   Eeelena

                                21 — 23.08.19 — 19:31

                                (19) ничего не происходит. Эта  ошибка выскакивает и все.

                                   Eeelena

                                22 — 23.08.19 — 19:32

                                (17) а как его установить?

                                   Eeelena

                                23 — 23.08.19 — 19:43

                                делаю вот так CreateObject(«V83.Application») ошибка та же

                                  

                                МимохожийОднако

                                24 — 23.08.19 — 20:58

                                (22) setup из дистрибутива 1С8. Потом зарегистрируй com….dll

                                Понравилась статья? Поделить с друзьями:
                              • V ing or infinitive choose the correct word
                              • Using word documents with
                              • Utter a word перевод
                              • Using with in vba for excel
                              • Utopia meaning of the word