Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > VB for Application > Как вытащить справочники из 1С через V83.COMConnector


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

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

Можно ли их вытащить сразу двумерной таблой?
Если нет, то как построчно вывести?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        Dim cntr As Object
        Dim trade As Object
        Dim Òîâàð As Object
        Set cntr = CreateObject("V83.COMConnector")
        Set trade = cntr.Connect("File=""C:\Program Files\1cv8""; Usr=""Пупкин"";")

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

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

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

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

Автор: Marchello 30.01.18, 14:37
Цитата Akina @
https://forum.infostart.ru/forum9/topic141309/
См. "// Пример на языке MS Visual Basic". А использовать - как обычный рекордсет, с поправкой на имена его методов и свойств.

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

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

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

Автор: Gonarh 30.01.18, 20:46
Покопался в загашниках 12-летней давности, накопал компонент для делфей как раз
основанный на COM к одинэске, вот модуль.
ПЫСЫ. Программирование тогда только начинал постигать, т.ч. говнокод присутствует в огромных дозах, типа утечек памяти и глобальных переменных,
но всё что тебе надо и даже больше чем надо там есть.
ole1c.pas (, : 308)

Автор: Bas 30.01.18, 23:41
Цитата Marchello @
В общем задача вытащить все данные из:
Справочники: Номенклатура, Контрагенты.

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

Автор: Marchello 31.01.18, 05:29
Цитата Bas @
Цитата Marchello @
В общем задача вытащить все данные из:
Справочники: Номенклатура, Контрагенты.

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

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

Автор: ^D^ima 31.01.18, 11:00
Цитата Marchello @
File=""C:\Program Files\1cv8"

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

Добавлено
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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


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

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

Автор: Marchello 31.01.18, 12:46
Цитата ^D^ima @


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


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


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

Автор: ^D^ima 31.01.18, 12:51
Цитата Marchello @
Работает через постгри.

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

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

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

Автор: kosten 31.01.18, 13:14
Цитата Marchello @
Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать.

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

Автор: ^D^ima 31.01.18, 13:34
Добавил в пример запрос
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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 31.01.18, 13:38
Цитата ^D^ima @

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

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    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

Автор: ^D^ima 31.01.18, 13:54
Цитата Marchello @
Как проверить что ее хоть видит V83 при конекте?

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

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

Автор: Marchello 31.01.18, 14:02
Цитата kosten @

Благодарю.
Цитата ^D^ima @

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

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

Добавлено
Цитата ^D^ima @

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

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

Автор: MIF 31.01.18, 14:07
попроси админа установить и сконфигурировать 1С клиента на твоем компьютере. Эта акция поможет найти потерянные компоненты и фиксануть некорректные сеттигнги компьютера ( типа неоткрытого порта в фаерволе).

Автор: Marchello 31.01.18, 14:13
Цитата MIF @

Он не знает толком сам 1с, у нас офиц поддержка.

Автор: MIF 31.01.18, 14:19
Неважно, зовут его Админ или Офисиальная Поддержка. Важно, что он умеет устанавливать и конфигурировать клиеттскую

Автор: ^D^ima 31.01.18, 14:26
Marchello
Прости за не скоромный вопрос, но сам сам ком коннектор от 1с у тебя установлен?

Автор: Marchello 01.02.18, 05:25
Цитата ^D^ima @


да.
в реферах он активен и запуск проходит без ошибки.
А на подключ к базе ругается.
Может ещё что-то надо подгрузить в рефах?
А может действительно что-то с правами.
Я в глубинке нынче сижу, народ темный, боится всего нового для них.
Настолько все ограничено, что я месяц боролся за то чтоб мне сделали возможность просмотра последних документов.
А то и их не видно.
Через месяц эксель поставили, а через два 1с.
Вот теперь следующий этап борьбы со страхами.

Добавлено
Цитата MIF @
фаерволе

Полная переустановка клиента?
____________________1.png (, : 678)

Автор: ^D^ima 01.02.18, 06:09
Цитата Marchello @
а через два 1с.

так и проверь из 1с-ки на твоем ПК открывается ли база? если да и через сом откроется тогда.

Автор: Marchello 01.02.18, 06:13
Цитата ^D^ima @
если да и через сом откроется тогда.

На компе открывается, а через эксель нет.
Я там выше рефер сфоткал, может чего не хватает?
Может ли nod32 коцать соединение?

Автор: ^D^ima 01.02.18, 07:06
Цитата Marchello @
На первом set дольше висит но выдаёт ту же ошибку.

это на этом что-ли?
Цитата Marchello @
Set connector = CreateObject("V83.COMConnector")


Если да, то как я понимаю он даже до коннекта к базе не доходит

Автор: kosten 01.02.18, 07:13
Цитата
CreateObject("V83.COMConnector")

может V82.COMConnector попробовать?

Автор: ^D^ima 01.02.18, 07:27
Цитата kosten @
может V82.COMConnector попробовать?

Кстати если на серваке версия 1С сервера из дистрибутива 8,3,10,2560, то V82.COMConnector подключится?

Автор: kosten 01.02.18, 07:34
Цитата ^D^ima @
Кстати если на серваке версия 1С сервера из дистрибутива 8,3,10,2560, то V82.COMConnector подключится?

Может ругнуться на несовместимость версий клиента и сервера.

Автор: Marchello 01.02.18, 07:50
Цитата ^D^ima @

нет, это сам конект.
там два SETa подключения к базе.

Добавлено
Цитата kosten @

у меня такого нет.
С базой 83 идет.

Автор: ^D^ima 01.02.18, 08:45
Так на какой строке и какая ошибка?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
        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 & ";")

Автор: Marchello 01.02.18, 11:06
Цитата ^D^ima @

На всех одна и та же.
____________________.png (, : 688)

Автор: kosten 01.02.18, 11:54
Marchello, зайди в базу в режиме предприятия и сделай скрин окна с информацией о программе. Выложи сюда.

Автор: evGenius 01.02.18, 17:08
Цитата ^D^ima @
так и проверь из 1с-ки на твоем ПК открывается ли база? если да и через сом откроется тогда.

Не факт, там отдельное право есть у роли, "Automation" называется.

Добавлено
Цитата ^D^ima @
Тебе придется указывать конкретные реквизиты этих справочников

Можно через Метаданные() все имена реквизитов вытянуть.

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

А в чем вообще исходная задача? Может проще из 1С соответствующие данные в Excel выгрузить, а не наоборот. Обычно так попроще.

Автор: MIF 01.02.18, 18:16
1. Совпадают ли строки строки соединения в клиенте и экселе?
2. Проведи анализ переменной коннектора после инициализатора в дебаггере. Есть ли у обьекта аттрибут Error? Есть ли свойства, выбрасывающие исключения?
2. Попробуй раннее связывание. Работает ли инициализасия? Можно ли обьявить обьект коннекторa WithEvents? Ест. Ли у обьекта событие OnError?

Автор: ^D^ima 02.02.18, 06:15
Цитата evGenius @
Можно через Метаданные() все имена реквизитов вытянуть.

будем знать. Спасибо

Автор: Marchello 02.02.18, 08:54
Цитата kosten @
. Выложи сюда.

____________________2.png (, : 658)

Автор: kosten 02.02.18, 08:58
Цитата Marchello @
На всех одна и та же.

Скриншот с ошибкой это из рабочего варианты, который ты пытаешься сделать?

Автор: Marchello 02.02.18, 09:03
Цитата evGenius @

А в чем вообще исходная задача? Может проще из 1С соответствующие данные в Excel выгрузить, а не наоборот. Обычно так попроще.

Задача фулдуплекс с экселем сделать.
Сам фейс в екселе для продаж, закупок, логистов и возможно еще для склада.
Бухгалтерия и финансы в 1с остаются.

Добавлено
Цитата kosten @

У мя открывается скрин.
МОжет глюкануло у тя?

Добавлено
Цитата kosten @

Это та которая у меня стоит, клиентка.

Добавлено
Цитата MIF @

Дебагер экселя или цеплять надо отдельной какойнить прогой?

Автор: Marchello 02.02.18, 09:14
Еще разок скрин
____________________2.png (, : 691)

Автор: kosten 02.02.18, 09:18
Ни одной строки подключения к базе из скрина я так и не увидел.

Автор: Marchello 02.02.18, 09:27
Цитата MIF @

Блин, я WithEvents никогда не юзал.
Бум лопатить буквы.

Добавлено
Цитата kosten @

В этом окне что-то ещё должно быть?

Автор: Bas 02.02.18, 16:43
Я может и ошибаюсь. но... 1С это надстройка над MS SQL, так сказать "движок". И доступы они не могли ограничить на уровне Базы, только на уровне интерфейса 1С.
PS Надо изучить 1С , можкт работу найду :'(

Автор: evGenius 03.02.18, 06:25
Цитата Bas @
Я может и ошибаюсь. но... 1С это надстройка над MS SQL, так сказать "движок". И доступы они не могли ограничить на уровне Базы, только на уровне интерфейса 1С.

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

А вообще, прощу прощения за оффтоп :lol:

Добавлено
А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"???

Автор: kosten 03.02.18, 07:00
Цитата evGenius @
А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"???

Я уже спрашивал об этом, но ответа не получил.

Автор: Bas 04.02.18, 09:57
Цитата evGenius @

А вообще, прощу прощения за оффтоп

:D

Автор: Marchello 05.02.18, 05:44
Цитата kosten @
Цитата evGenius @
А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"???

Я уже спрашивал об этом, но ответа не получил.

Касательно названия, то это я просто проверял ошибки подключения к реальной базе и не существующей.
Без разницы.

Автор: Marchello 07.06.18, 11:41
Всем здравия!
Побороли косяк с конектом.
Что было хз.
Делали перенастройку сети из-за смены провайдера и новый комп поставили.
Косяк исчез.

Пример Дмитрия работает.
Начал писать другие названия элементов справочника - ошибка.
Факт, юрадрес, телефон и прочее.

Может есть мегашпаргалка какаянить как обращаться к элементам 1С по структуре их расположения через vba?
Или как-то можно из инструментов внутри 1с понять.

В универсальном отчете есть структура, но что-то не получается по ней.
Гдето не правильно пишу.

Например
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Выборка.ФактическийАдрес
не работает

Можно как-то перебрать названия элементов справочника, чтоб получить типа названий столбцов и путь, чтоб явно указывать (ИНН,Телефон,Email....)

Автор: ^D^ima 07.06.18, 14:16
Marchello
открой конфигуратор в 1с и у каждого документа\справочника смотри как называются реквизиты для обращения к ним.

Цитата Marchello @
Например
Выборка.ФактическийАдрес
не работает

А какой запрос ты делаешь?

Ты в начале код на 1с пиши и смотри что получается, затем сможешь без труда перенести в вба. Структуру я писал дл справочника и абстрактный запрос. + ты всегда можешь из 1С в эксель писать.

Автор: Marchello 08.06.18, 07:02
Твой пример кода пытаюсь разобрать.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Public Sub v8connect()
    Set Base = v8con.Connect(StrConnectBase)
    Dim cntr As Object
    Dim Справочник As Object
    Dim Выборка As Object
    Dim n As Integer
    Set Справочник = Base.Справочники.Контрагенты
    Set Выборка = Справочник.Выбрать()
    n = 1
    While Выборка.следующий() = True
        Cells(n, 1).Value = Выборка.Код
        Cells(n, 2).Value = Выборка.ИНН
        Cells(n, 3).Value = Выборка.КПП
        Cells(n, 4).Value = Выборка.Наименование
        Cells(n, 5).Value = Выборка.ЮрЛица.Наименование
        n = n + 1
    Wend
    End Sub


(n, 5) как не корёжил из того, что в инете нарыл - ничё не подходит.

Автор: ^D^ima 08.06.18, 08:02
Цитата Marchello @
(n, 5) как не корёжил из того, что в инете нарыл - ничё не подходит.

Дергай запросом. Табличные части отдельные таблицы. Ещё раз - делай вначале в 1С, затем переноси в vba

Автор: Marchello 08.06.18, 09:44
Как тащить таблицы целиком? Примерчик кинь пожалуйста.
Можно ли как-то вывести имена полей или вообще всю структуру справочника?

Темповую базу пока не поставили, а в рабочую лезть пока страшновато.

Кроме COM есть ещё варианты запросов делать в 1С?

В 16 excel куча разных вариантов языков на основе которых можно сделать запрос и вывести в PQ.

Читал статейку сейчас, что com это чисто поддержка для старых версий и она через какое-то время наверно исчезнет.

У нас сервачная версия на PostgreSQL.

Автор: ^D^ima 08.06.18, 10:13
Цитата Marchello @
Кроме COM есть ещё варианты запросов делать в 1С?

1 Через веб сервисы
2 Напрямую в БД
3 Через файлы


Цитата Marchello @
Можно ли как-то вывести имена полей или вообще всю структуру справочника?

открой конфигуратор и посмотри.

тестовую базу можно к себе на локальный ПК поставить.

Автор: kosten 08.06.18, 10:17
Цитата ^D^ima @
2 Напрямую в БД

Ты сейчас научишь плохому >:(

Автор: Marchello 08.06.18, 10:55
Я имею ввиду протоколы какие на локалке можно юзать?

Если база на postgre, то я так понимаю что можно к ней законектиться стандартными средствами эксель?
Может ещё какие понимает язычки?
В инете ничего про пост и 1с не нашел. Только что серваки н нём делают.

Цитата ^D^ima @
2 Напрямую в БД

БД имеешь ввиду в обход конфига напрямую с таблами?

Добавлено
Цитата kosten @
Ты сейчас научишь плохому >:(

Для того мы тут и есть. ;)

Автор: ^D^ima 08.06.18, 11:01
Цитата kosten @
Ты сейчас научишь плохому

Хорошо. Из БД. Но это делать крайне сложно, все таблицы поименованы так что не поймешь что за что отвечает.

Цитата Marchello @
Может ещё какие понимает язычки?

Я не слышал.

Автор: kosten 08.06.18, 11:05
Цитата ^D^ima @
Но это делать крайне сложно, все таблицы поименованы так что не поймешь что за что отвечает.

Это еще и нарушает лицензионное соглашение.

Автор: Marchello 08.06.18, 11:37
Цитата ^D^ima @
открой конфигуратор и посмотри.

Не могу.
Доступа нет к конфигу.
Имел бы давно бы уже посмотрел.

Автор: kosten 08.06.18, 11:55
Цитата Marchello @
Можно ли как-то вывести имена полей или вообще всю структуру справочника?

Программно через метод Метаданные требуемого объекта. В СП почитай.

Автор: Marchello 09.06.18, 10:37
Принтскринов наделал справочника.
Что-то работает, а что-то не работает с какого-то перепуга.
До строки СтранаРегистрации работает.
А она уже не работает.
Хотя в справочнике стоят на одном уровне.
С чем такое связано?
Я так подозреваю, что там ссылка стоит на СтраныМирв, но как обращаться к таким полям?

9 строка тоже не работает.

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Set Справочник = Base.Справочники.Контрагенты
    Set Выборка = Справочник.Выбрать()
    n = 1
    While Выборка.следующий() = True
        Cells(n, 1).Value = Выборка.Код
        Cells(n, 2).Value = Выборка.ИНН
        Cells(n, 3).Value = Выборка.КПП
        Cells(n, 4).Value = Выборка.Наименование
        Cells(n, 5).Value = Выборка.НаименованиеПолное
        Cells(n, 6).Value = Выборка.ДатаРегистрации
        Cells(n, 7).Value = Выборка.КодПоОкпо
        Cells(n, 8).Value = Выборка.СтранаРегистрации
        Cells(n, 9).Value = Выборка.ТабличныеЧасти.КонтактнаяИнформация.НомерТелефона


Блин.
Вытащить-то надо фигню какуюто - несколько таблиц, а времени чую убью немерянно.

Автор: kosten 09.06.18, 11:29
Цитата Marchello @
Cells(n, 8).Value = Выборка.СтранаРегистрации

Попробуй написать так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Cells(n, 8).Value = Выборка.СтранаРегистрации.Наименование

Автор: Marchello 09.06.18, 12:01
ОУЕ! :rose:

А в табличнуючасть как залезть?
Cells(n, 9).Value = Выборка.ТабличныеЧасти.КонтактнаяИнформация.Город (имя и наименование не подходит)

Автор: kosten 09.06.18, 12:27
Цитата Marchello @

А вот ТЧ надо перебирать, например, в цикле.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)