Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
|
Сообщ.
#1
,
|
|
|
Всем здравия!
Опыта в 1с нет, тч извиняйте. Конектюсь через СОМ. В общем задача вытащить все данные из: Справочники: Номенклатура, Контрагенты. Можно ли их вытащить сразу двумерной таблой? Если нет, то как построчно вывести? 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С код идет. Если можно примеры вывода и ввода. Заранее весьма благодарен. |
Сообщ.
#2
,
|
|
|
https://forum.infostart.ru/forum9/topic141309/
См. "// Пример на языке MS Visual Basic". А использовать - как обычный рекордсет, с поправкой на имена его методов и свойств. |
Сообщ.
#3
,
|
|
|
Цитата Akina @ https://forum.infostart.ru/forum9/topic141309/ См. "// Пример на языке MS Visual Basic". А использовать - как обычный рекордсет, с поправкой на имена его методов и свойств. На последней строке выдаёт ошибку. С чем это может быть связано? Может какой реф ему ещё нать? Добавлено Может админ что перекрыл или в 1с? Я первый кто конектится так у нас. Прикреплённый файл____________________.png (11,85 Кбайт, скачиваний: 730) |
Сообщ.
#4
,
|
|
|
У тебя есть и 1С, и коннектор, и ещё много чего.
У меня нет ничего вышеперечисленного, включая интерес. И кто из нас должен экспериментировать и читать маны? Или хотя бы смотреть в окно OB и на сообщения об ошибках? |
Сообщ.
#5
,
|
|
|
Покопался в загашниках 12-летней давности, накопал компонент для делфей как раз
основанный на COM к одинэске, вот модуль. ПЫСЫ. Программирование тогда только начинал постигать, т.ч. говнокод присутствует в огромных дозах, типа утечек памяти и глобальных переменных, но всё что тебе надо и даже больше чем надо там есть. Прикреплённый файлole1c.pas (27,46 Кбайт, скачиваний: 336) |
Сообщ.
#6
,
|
|
|
Цитата Marchello @ В общем задача вытащить все данные из: Справочники: Номенклатура, Контрагенты. Версия 1С какая? |
Сообщ.
#7
,
|
|
|
Цитата Bas @ Цитата Marchello @ В общем задача вытащить все данные из: Справочники: Номенклатура, Контрагенты. Версия 1С какая? 1С:Предприятие 8.3 (8.3.10.2650) Бухгалтерия предприятия, редакция 3.0 (3.0.57.17) |
Сообщ.
#8
,
|
|
|
Цитата Marchello @ File=""C:\Program Files\1cv8" Это у тебя реально там база лежит, или ты коннектишся к экзешнику? Добавлено 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 @ вытащить все данные из: Справочники: Номенклатура, Контрагенты. Тебе придется указывать конкретные реквизиты этих справочников |
Сообщ.
#9
,
|
|
|
Цитата ^D^ima @ Это у тебя реально там база лежит, или ты коннектишся к экзешнику? Хороший вопрос! Админа вымучил. Короче база лежит на серваке, у юзеров клиенты. Работает через постгри. То что реквизиты указывать это я понимаю. Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать. Дальше уже сам буду разбираться. |
Сообщ.
#10
,
|
|
|
Цитата Marchello @ Работает через постгри. Не важно. Как в 1с-ке строка подключения, то и сюда пихай.В списке баз внизу строка. Добавлено Цитата Marchello @ Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать. выше примерчик |
Сообщ.
#11
,
|
|
|
Цитата Marchello @ Мне примерчик нужен как именно из ёкселя обращаться к таблам и запросы делать. Вот пример для 1С. Сам адаптируешь для экселя. |
Сообщ.
#12
,
|
|
|
Добавил в пример запрос
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 |
Сообщ.
#13
,
|
|
|
Цитата ^D^ima @ Все равно не хочет. На первом set дольше висит но выдаёт ту же ошибку. Может где что-то не так пишу? Визуально базу на серваке не видно. Может быть из-за этого? Как проверить что ее хоть видит V83 при конекте? Не понятно то ли база его отпихивает, то ли не видит вообще его. У нас стандартная версия, может быть отключена внешняя обработка? 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 |
Сообщ.
#14
,
|
|
|
Цитата Marchello @ Как проверить что ее хоть видит V83 при конекте? Ты в 1С базу-то открываешь? Добавлено советую что-бы идти дальше локально поставить копию к себе файловую базу. |
Сообщ.
#15
,
|
|
|
Цитата kosten @ Благодарю. Цитата ^D^ima @ Благодарю, то что надо. Осталось только подключиться. Добавлено Цитата ^D^ima @ Алгоритм какой использовать? Открыть локального клиента, а потом конектиться из экселя к серваку без указания паса и логина? Или както ещё? |
Сообщ.
#16
,
|
|
|
попроси админа установить и сконфигурировать 1С клиента на твоем компьютере. Эта акция поможет найти потерянные компоненты и фиксануть некорректные сеттигнги компьютера ( типа неоткрытого порта в фаерволе).
|
Сообщ.
#17
,
|
|
|
Цитата MIF @ Он не знает толком сам 1с, у нас офиц поддержка. |
Сообщ.
#18
,
|
|
|
Неважно, зовут его Админ или Офисиальная Поддержка. Важно, что он умеет устанавливать и конфигурировать клиеттскую
|
Сообщ.
#19
,
|
|
|
Marchello
Прости за не скоромный вопрос, но сам сам ком коннектор от 1с у тебя установлен? |
Сообщ.
#20
,
|
|
|
Цитата ^D^ima @ да. в реферах он активен и запуск проходит без ошибки. А на подключ к базе ругается. Может ещё что-то надо подгрузить в рефах? А может действительно что-то с правами. Я в глубинке нынче сижу, народ темный, боится всего нового для них. Настолько все ограничено, что я месяц боролся за то чтоб мне сделали возможность просмотра последних документов. А то и их не видно. Через месяц эксель поставили, а через два 1с. Вот теперь следующий этап борьбы со страхами. Добавлено Цитата MIF @ фаерволе Полная переустановка клиента? Прикреплённый файл____________________1.png (12,59 Кбайт, скачиваний: 689) |
Сообщ.
#21
,
|
|
|
Цитата Marchello @ а через два 1с. так и проверь из 1с-ки на твоем ПК открывается ли база? если да и через сом откроется тогда. |
Сообщ.
#22
,
|
|
|
Цитата ^D^ima @ если да и через сом откроется тогда. На компе открывается, а через эксель нет. Я там выше рефер сфоткал, может чего не хватает? Может ли nod32 коцать соединение? |
Сообщ.
#23
,
|
|
|
Цитата Marchello @ На первом set дольше висит но выдаёт ту же ошибку. это на этом что-ли? Цитата Marchello @ Set connector = CreateObject("V83.COMConnector") Если да, то как я понимаю он даже до коннекта к базе не доходит |
Сообщ.
#24
,
|
|
|
Цитата CreateObject("V83.COMConnector") может V82.COMConnector попробовать? |
Сообщ.
#25
,
|
|
|
Цитата kosten @ может V82.COMConnector попробовать? Кстати если на серваке версия 1С сервера из дистрибутива 8,3,10,2560, то V82.COMConnector подключится? |
Сообщ.
#26
,
|
|
|
Цитата ^D^ima @ Кстати если на серваке версия 1С сервера из дистрибутива 8,3,10,2560, то V82.COMConnector подключится? Может ругнуться на несовместимость версий клиента и сервера. |
Сообщ.
#27
,
|
|
|
Цитата ^D^ima @ нет, это сам конект. там два SETa подключения к базе. Добавлено Цитата kosten @ у меня такого нет. С базой 83 идет. |
Сообщ.
#28
,
|
|
|
Так на какой строке и какая ошибка?
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 & ";") |
Сообщ.
#29
,
|
|
|
Цитата ^D^ima @ На всех одна и та же. Прикреплённый файл____________________.png (11,85 Кбайт, скачиваний: 701) |
Сообщ.
#30
,
|
|
|
Marchello, зайди в базу в режиме предприятия и сделай скрин окна с информацией о программе. Выложи сюда.
|
Сообщ.
#31
,
|
|
|
Цитата ^D^ima @ так и проверь из 1с-ки на твоем ПК открывается ли база? если да и через сом откроется тогда. Не факт, там отдельное право есть у роли, "Automation" называется. Добавлено Цитата ^D^ima @ Тебе придется указывать конкретные реквизиты этих справочников Можно через Метаданные() все имена реквизитов вытянуть. Добавлено Цитата Marchello @ В общем задача вытащить все данные из: Справочники: Номенклатура, Контрагенты. А в чем вообще исходная задача? Может проще из 1С соответствующие данные в Excel выгрузить, а не наоборот. Обычно так попроще. |
Сообщ.
#32
,
|
|
|
1. Совпадают ли строки строки соединения в клиенте и экселе?
2. Проведи анализ переменной коннектора после инициализатора в дебаггере. Есть ли у обьекта аттрибут Error? Есть ли свойства, выбрасывающие исключения? 2. Попробуй раннее связывание. Работает ли инициализасия? Можно ли обьявить обьект коннекторa WithEvents? Ест. Ли у обьекта событие OnError? |
Сообщ.
#33
,
|
|
|
Цитата evGenius @ Можно через Метаданные() все имена реквизитов вытянуть. будем знать. Спасибо |
Сообщ.
#34
,
|
|
|
Цитата kosten @ . Выложи сюда. Прикреплённый файл____________________2.png (24,79 Кбайт, скачиваний: 684) |
Сообщ.
#35
,
|
|
|
Цитата Marchello @ На всех одна и та же. Скриншот с ошибкой это из рабочего варианты, который ты пытаешься сделать? |
Сообщ.
#36
,
|
|
|
Цитата evGenius @ А в чем вообще исходная задача? Может проще из 1С соответствующие данные в Excel выгрузить, а не наоборот. Обычно так попроще. Задача фулдуплекс с экселем сделать. Сам фейс в екселе для продаж, закупок, логистов и возможно еще для склада. Бухгалтерия и финансы в 1с остаются. Добавлено Цитата kosten @ У мя открывается скрин. МОжет глюкануло у тя? Добавлено Цитата kosten @ Это та которая у меня стоит, клиентка. Добавлено Цитата MIF @ Дебагер экселя или цеплять надо отдельной какойнить прогой? |
Сообщ.
#37
,
|
|
|
Еще разок скрин
Прикреплённый файл____________________2.png (24,79 Кбайт, скачиваний: 709) |
Сообщ.
#38
,
|
|
|
Ни одной строки подключения к базе из скрина я так и не увидел.
|
Сообщ.
#39
,
|
|
|
Цитата MIF @ Блин, я WithEvents никогда не юзал. Бум лопатить буквы. Добавлено Цитата kosten @ В этом окне что-то ещё должно быть? |
Сообщ.
#40
,
|
|
|
Я может и ошибаюсь. но... 1С это надстройка над MS SQL, так сказать "движок". И доступы они не могли ограничить на уровне Базы, только на уровне интерфейса 1С.
PS Надо изучить 1С , можкт работу найду |
Сообщ.
#41
,
|
|
|
Цитата Bas @ Я может и ошибаюсь. но... 1С это надстройка над MS SQL, так сказать "движок". И доступы они не могли ограничить на уровне Базы, только на уровне интерфейса 1С. Наш топикстартер пытается подключаться не к базе MSSQL, а к высокоуровневой прослойке-базе 1С над ней, так что доступ на этом уровне может быть ограничен. Можно и к базе MSSQL подключиться и оттуда данные вытянуть, но для этого придется полностью разобраться во внутренней структуре хранения данных, а это задача уже совершенно другого уровня сложности. А вообще, прощу прощения за оффтоп Добавлено А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"??? |
Сообщ.
#42
,
|
|
|
Цитата evGenius @ А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"??? Я уже спрашивал об этом, но ответа не получил. |
Сообщ.
#43
,
|
|
|
Цитата evGenius @ А вообще, прощу прощения за оффтоп |
Сообщ.
#44
,
|
|
|
Цитата kosten @ Цитата evGenius @ А вообще, это ошибка, что в коде везде я вижу имя базы "SRV-BUH", а на скриншоте "KRIZ-BUH"??? Я уже спрашивал об этом, но ответа не получил. Касательно названия, то это я просто проверял ошибки подключения к реальной базе и не существующей. Без разницы. |
Сообщ.
#45
,
|
|
|
Всем здравия!
Побороли косяк с конектом. Что было хз. Делали перенастройку сети из-за смены провайдера и новый комп поставили. Косяк исчез. Пример Дмитрия работает. Начал писать другие названия элементов справочника - ошибка. Факт, юрадрес, телефон и прочее. Может есть мегашпаргалка какаянить как обращаться к элементам 1С по структуре их расположения через vba? Или как-то можно из инструментов внутри 1с понять. В универсальном отчете есть структура, но что-то не получается по ней. Гдето не правильно пишу. Например Выборка.ФактическийАдрес Можно как-то перебрать названия элементов справочника, чтоб получить типа названий столбцов и путь, чтоб явно указывать (ИНН,Телефон,Email....) |
Сообщ.
#46
,
|
|
|
Marchello
открой конфигуратор в 1с и у каждого документа\справочника смотри как называются реквизиты для обращения к ним. Цитата Marchello @ Например Выборка.ФактическийАдрес не работает А какой запрос ты делаешь? Ты в начале код на 1с пиши и смотри что получается, затем сможешь без труда перенести в вба. Структуру я писал дл справочника и абстрактный запрос. + ты всегда можешь из 1С в эксель писать. |
Сообщ.
#47
,
|
|
|
Твой пример кода пытаюсь разобрать.
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) как не корёжил из того, что в инете нарыл - ничё не подходит. |
Сообщ.
#48
,
|
|
|
Цитата Marchello @ (n, 5) как не корёжил из того, что в инете нарыл - ничё не подходит. Дергай запросом. Табличные части отдельные таблицы. Ещё раз - делай вначале в 1С, затем переноси в vba |
Сообщ.
#49
,
|
|
|
Как тащить таблицы целиком? Примерчик кинь пожалуйста.
Можно ли как-то вывести имена полей или вообще всю структуру справочника? Темповую базу пока не поставили, а в рабочую лезть пока страшновато. Кроме COM есть ещё варианты запросов делать в 1С? В 16 excel куча разных вариантов языков на основе которых можно сделать запрос и вывести в PQ. Читал статейку сейчас, что com это чисто поддержка для старых версий и она через какое-то время наверно исчезнет. У нас сервачная версия на PostgreSQL. |
Сообщ.
#50
,
|
|
|
Цитата Marchello @ Кроме COM есть ещё варианты запросов делать в 1С? 1 Через веб сервисы 2 Напрямую в БД 3 Через файлы Цитата Marchello @ Можно ли как-то вывести имена полей или вообще всю структуру справочника? открой конфигуратор и посмотри. тестовую базу можно к себе на локальный ПК поставить. |
Сообщ.
#51
,
|
|
|
Цитата ^D^ima @ 2 Напрямую в БД Ты сейчас научишь плохому |
Сообщ.
#52
,
|
|
|
Я имею ввиду протоколы какие на локалке можно юзать?
Если база на postgre, то я так понимаю что можно к ней законектиться стандартными средствами эксель? Может ещё какие понимает язычки? В инете ничего про пост и 1с не нашел. Только что серваки н нём делают. Цитата ^D^ima @ 2 Напрямую в БД БД имеешь ввиду в обход конфига напрямую с таблами? Добавлено Цитата kosten @ Ты сейчас научишь плохому Для того мы тут и есть. |
Сообщ.
#53
,
|
|
|
Цитата kosten @ Ты сейчас научишь плохому Хорошо. Из БД. Но это делать крайне сложно, все таблицы поименованы так что не поймешь что за что отвечает. Цитата Marchello @ Может ещё какие понимает язычки? Я не слышал. |
Сообщ.
#54
,
|
|
|
Цитата ^D^ima @ Но это делать крайне сложно, все таблицы поименованы так что не поймешь что за что отвечает. Это еще и нарушает лицензионное соглашение. |
Сообщ.
#55
,
|
|
|
Цитата ^D^ima @ открой конфигуратор и посмотри. Не могу. Доступа нет к конфигу. Имел бы давно бы уже посмотрел. |
Сообщ.
#56
,
|
|
|
Цитата Marchello @ Можно ли как-то вывести имена полей или вообще всю структуру справочника? Программно через метод Метаданные требуемого объекта. В СП почитай. |
Сообщ.
#57
,
|
|
|
Принтскринов наделал справочника.
Что-то работает, а что-то не работает с какого-то перепуга. До строки СтранаРегистрации работает. А она уже не работает. Хотя в справочнике стоят на одном уровне. С чем такое связано? Я так подозреваю, что там ссылка стоит на СтраныМирв, но как обращаться к таким полям? 9 строка тоже не работает. 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 = Выборка.ТабличныеЧасти.КонтактнаяИнформация.НомерТелефона Блин. Вытащить-то надо фигню какуюто - несколько таблиц, а времени чую убью немерянно. |
Сообщ.
#58
,
|
|
|
Цитата Marchello @ Cells(n, 8).Value = Выборка.СтранаРегистрации Попробуй написать так Cells(n, 8).Value = Выборка.СтранаРегистрации.Наименование |
Сообщ.
#59
,
|
|
|
ОУЕ!
А в табличнуючасть как залезть? Cells(n, 9).Value = Выборка.ТабличныеЧасти.КонтактнаяИнформация.Город (имя и наименование не подходит) |
Сообщ.
#60
,
|
|
|
Цитата Marchello @ А вот ТЧ надо перебирать, например, в цикле. |