Гость
Форумы / [игнор отключен] [закрыт для гостей] / ComConnector | VBA | Функции 1С / 25 сообщений из 26, страница 1 из 2
17.10.2018, 15:54
    #39718897
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Hello world!
Мне нужно из внешнего приложения(EXCEL) запустить запрос 1С.
Для этого в книге EXCEL подключил соответствующую библиотеку: 1CV83 COM Connector Type Library
А далее составил макрос, в котором идет обращение к справочнику Контрагенты.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub test()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")
    Dim q As String
        q = "ВЫБРАТЬ ПЕРВЫЕ 100 Контрагенты.Наименование, Контрагенты.ссылка ИЗ Справочник.Контрагенты КАК Контрагенты"
    Dim Query As Object
    Set Query = v8.NewObject("Query")
        Query.Текст = q
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim Count As Integer
        Count = 0
    While Res.Next()
        Count = Count + 1
    Wend
End Sub

Но этот запрос очень простой.
А мне нужно научиться использовать такие 1С-функции как:
функцииКонецДняВидГраницыДата
Например такой макрос
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub test2()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")

    Dim parDate As String
        parDate = "20181015"
        parEdDate = v8.Дата(parDate)
End Sub

отрабатывает с ошибкой, в которой говорится, что у v8 нет такого метода.

Подскажите, как победить данную проблему?
...
Рейтинг: 0 / 0
17.10.2018, 16:54
    #39718979
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Не пойму, что ты хочешь победить? У COMConnector нет метода Дата и это правильно. Для конвертации строки в дату запускать 1с наверное не самый лучший способ. Методы комка нужны для доступа к данным 1с, а не для вычислений, которые прекрасно можно сделать без подобных извращений.
...
Рейтинг: 0 / 0
17.10.2018, 17:37
    #39719011
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
DoroshНе пойму, что ты хочешь победить?
Мне нужно из vba запустить 1c-запрос, который содержит параметры. Вот его часть:
Код: sql
1.
РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Период, , ) КАК РасчетыСКлиентамиОстаткиИОбороты


Для инициализации переменных в 1с-ке используется такой код
Код: sql
1.
Запрос1.УстановитьПараметр("НачалоПериода", глБаза.NewObject("Граница", КонецДня(ДатаОкончания), глБаза.ВидГраницы.Включая));


Планировал адаптировать эго для запуска из VBA по Com-у.

Как тогда менять параметры?

Попробовал прописать жестко. Вот так.
Код: sql
1.
ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(20181015, 20181016, Период) КАК РасчетыСКлиентамиОстаткиИОбороты

получил ошибку не соответствия типов.
...
Рейтинг: 0 / 0
17.10.2018, 17:59
    #39719026
МодальноеОкно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Yagrus2получил ошибку не соответствия типов

а что "смущает"? это не дата и не строка чтобы работало неявное приведение типов
...
Рейтинг: 0 / 0
17.10.2018, 20:02
    #39719082
Программист 1с
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Дата(2018,1,15)
'2018.1.15'
...
Рейтинг: 0 / 0
18.10.2018, 09:30
    #39719200
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Алгоритм такой
1. Создаешь комок v8con As New V83.COMConnector
2. Подключаешься к нужной базе через v8con.Connect
3. Создаешь запрос примерно так Query = v8.NewObject("Query")
4. Устанавливаешь нужные запросу параметры методом Query.УстановитьПараметр(<название параметра>, <значение параметра>)
5. Выполняешь запрос и возвращаешь курсор с данными Query.Execute().Choose()
6. Крутишь в цикле курсор и читаешь что там есть
...
Рейтинг: 0 / 0
18.10.2018, 12:10
    #39719291
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Программист 1сДата(2018,1,15)
'2018.1.15'Все равно ошибка
Код: vbnet
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.
Sub test345()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")
    Dim q As String
        q = "ВЫБРАТЬ РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Партнер, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Контрагент, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.Валюта, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаНачальныйОстаток, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаКонечныйОстаток, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты('2018.1.15', '2018.1.16', Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8.NewObject("Query")
        Query.Текст = q
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim Валюта As Long
        Валюта = 0
    Dim sss1 As Variant
    Dim sss2() As Variant
    While Res.Next()
        Валюта = Валюта + 1
        sss1 = Res.Контрагент
    Wend
End Sub
...
Рейтинг: 0 / 0
18.10.2018, 12:28
    #39719300
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
DoroshАлгоритм такой
4. Устанавливаешь нужные запросу параметры методом Query.УстановитьПараметр(<название параметра>, <значение параметра>)
Вот попробовал, не получилось
Код: vbnet
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.
Sub test346()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")
    
    Dim q As String
        q = "ВЫБРАТЬ РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, , Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8.NewObject("Query")
        Query.Текст = q
    Dim dtStart As String
        dtStart = "2018.1.15"
        Call Query.УстановитьПараметр(ДатаНачала, dtStart)
    Dim Res As Object
    Set Res = Query.Execute().Choose()

    Dim i As Long
        i = 0
    While Res.Next()
        i = i + 1
    Wend
End Sub
...
Рейтинг: 0 / 0
18.10.2018, 12:34
    #39719303
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Надо вот так: Query.УстановитьПараметр("ДатаНачала", dtStart)

ДатаНачала это строка, имя параметра, пихай в кавычки. Без кавычек у тебя вышло: Query.УстановитьПараметр("", dtStart), на что 1с тебя правильно обругал
...
Рейтинг: 0 / 0
18.10.2018, 12:38
    #39719309
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
А следующей ошибкой будет несоответствие типов. Ибо нефиг совать строку туда где должна быть дата и надеяться что 1с ее сам додумается ее преобразовать. Сделай в басике валидную дату и пихай ее значением параметра.
...
Рейтинг: 0 / 0
18.10.2018, 14:01
    #39719383
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Dorosh,
Учел ваш советы. Получился такой макрос:
Код: vbnet
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.
Sub test3467()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")
    Dim q As String
        q = "ВЫБРАТЬ РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, , Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8.NewObject("Query")
        Query.Текст = q
    Dim dtStart As Date
        dtStart = 43385 '#12.10.2018#
    Call Query.УстановитьПараметр("ДатаНачала", dtStart)
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim i As Long
        i = 0
    Dim resString As String
    While Res.Next()
        i = i + 1
        resString = Res.Организация
        resString = Res.СуммаПриход
        resString = Res.СуммаРасход
    Wend
End Sub

Запрос 1С отрабатывает. Но не получается вытащить значение столбца организаия
Ошибка возникает на строке
Код: vbnet
1.
resString = Res.Организация

Подскажите, как вытащить значение этого столбца?
...
Рейтинг: 0 / 0
18.10.2018, 14:02
    #39719384
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Если попробовать так:
Код: vbnet
1.
resString = Res.АналитикаУчетаПоПартнерам.Организация

получаю аналогичную ошибку.
...
Рейтинг: 0 / 0
18.10.2018, 15:50
    #39719449
VladimirKr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Yagrus2,

Код: vbnet
1.
q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация), "
...
Рейтинг: 0 / 0
18.10.2018, 15:52
    #39719453
VladimirKr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
VladimirKrYagrus2,

Код: vbnet
1.
q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация), "


Конечно,
Код: vbnet
1.
q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация) как Организация, "
...
Рейтинг: 0 / 0
18.10.2018, 16:52
    #39719500
Dorosh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Вам уже ответили как правильно написать, а я объясню. Организация в 1с это справочник, сложный тип данных, то что в "нормальных" языках называют class или object. Запихать его в string не выйдет. Надо получить строковое представление объекта, используя функцию 1с ПРЕДСТАВЛЕНИЕ() или выбрав Организация.Наименование КАК Организация
...
Рейтинг: 0 / 0
18.10.2018, 17:49
    #39719533
МодальноеОкно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Yagrus2Dorosh,
Учел ваш советы. Получился такой макрос:
Код: vbnet
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.
Sub test3467()
    Dim v8 As Object
    Dim v8con As New V83.COMConnector
    Set v8 = v8con.Connect("Srvr=ServerName;Ref=BaseName;Usr =""UserName"";Pwd=""Password""")
    Dim q As String
        q = "ВЫБРАТЬ РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, , Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8.NewObject("Query")
        Query.Текст = q
    Dim dtStart As Date
        dtStart = 43385 '#12.10.2018#
    Call Query.УстановитьПараметр("ДатаНачала", dtStart)
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim i As Long
        i = 0
    Dim resString As String
    While Res.Next()
        i = i + 1
        resString = Res.Организация
        resString = Res.СуммаПриход
        resString = Res.СуммаРасход
    Wend
End Sub


Запрос 1С отрабатывает. Но не получается вытащить значение столбца организаия
Ошибка возникает на строке
Код: vbnet
1.
resString = Res.Организация


Подскажите, как вытащить значение этого столбца?



блин ну тема пережована мульон раз

что через ком туда-сюда "бесшовно" могут ходить только значения примитивных типов - числа, строки, булево и т.п.
...
Рейтинг: 0 / 0
18.10.2018, 18:00
    #39719538
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Dorosh,
Спасибо, за разъяснение!
...
Рейтинг: 0 / 0
19.10.2018, 17:36
    #39720109
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Возможно куму пригодится.
1. Вариант COM-соединения через Automation Server
Код: vbnet
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.
Sub OLEAutomation()
    Dim v8app As Object
    Set v8app = CreateObject("V83.Application")
    Dim v8 As Object
    Call v8app.Connect("Srvr=n01000105:1941;Ref=ut_filial_bazhitov;Usr =""CheckOLAP"";Pwd=""777""")
    Dim userName As String
        userName = v8app.ИмяПользователя()
    Dim q As String
        q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация) КАК Орг, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, , Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8app.NewObject("Query")
       Query.Текст = q
    Dim dtStart As Date
        dtStart = 43385 '#12.10.2018#
    Call Query.УстановитьПараметр("ДатаНачала", dtStart)
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim i As Long
        i = 0
    While Res.Next()
        i = i + 1
        resString = Res.Орг
        resString = Res.СуммаПриход
        resString = Res.СуммаРасход
    Wend
End Sub

2. Вариант COM-соединения через COMConnector
Код: vbnet
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.
Sub COMConnector()
    Dim v8ComCon As Object
    Set v8ComCon = CreateObject("V83.COMConnector")
    Dim v8Connect As Object
    Set v8Connect = v8ComCon.Connect("Srvr=n01000105:1941;Ref=ut_filial_bazhitov;Usr =""CheckOLAP"";Pwd=""777""")
    Dim userName As String
        userName = v8Connect.ИмяПользователя()
    Dim q As String
        q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация) КАК Орг, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаПриход, "
        q = q + "РасчетыСКлиентамиОстаткиИОбороты.СуммаРасход "
        q = q + "ИЗ РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, , Период) КАК РасчетыСКлиентамиОстаткиИОбороты "
    Dim Query As Object
    Set Query = v8Connect.NewObject("Query")
        Query.Текст = q
    Dim dtStart As Date
        dtStart = 43385 '#12.10.2018#
    Call Query.УстановитьПараметр("ДатаНачала", dtStart)
    Dim Res As Object
    Set Res = Query.Execute().Choose()
    Dim i As Long
        i = 0
    While Res.Next()
        i = i + 1
        resString = Res.Орг
        resString = Res.СуммаПриход
        resString = Res.СуммаРасход
    Wend
End Sub
...
Рейтинг: 0 / 0
19.10.2018, 17:37
    #39720110
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Также хотел добавить, что приложение EXCEL должно быть x32
...
Рейтинг: 0 / 0
24.09.2019, 13:10
    #39866254
Андрейка1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Тоже, ломал голову над похожей задачей. В итоге решил следующим способом: 1) создаем подключение, 2) выбираем объект 1С (справочник, регистр, документ и т.д.), 3) получаем перечень полей и формируем в динамической таблице excel структуру объекта, 4) формируем текстовую строку секции "ГДЕ", 5) формируем итоговый запрос, 6) выгружаем запрос на лист (динамическую таблицу).
подробнее - https://analysiscore.wordpress.com/2019/09/23/finish-1c-excel/
...
Рейтинг: 0 / 0
24.09.2019, 15:51
    #39866439
AHDP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Прикольно,

Но для корректных итогов нужно использовать Границу, а не дату+время.
...
Рейтинг: 0 / 0
02.12.2019, 10:00
    #39896927
Андрейка1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Чтобы не плодить сообщения.
Вопрос следующий - сделал я в Excel и Access платформу для получения данных 1С через запрос по-средствам comconnectora. 1С и Office соответственно были 32 bit.
Теперь мне Office поставили 64 bit - вылезла ошибка "Не могу создать объект актив икс".
прочитал достаточно и понял что проблема в 32 битном comcntr.dll и импортирование в проект БД Access 64 с использованием контролов Access проблему не решает.
Соответственно вопрос - что нужно сделать для того чтобы проект office 64 bit получал данные из 1С 8 32 битной?
Основной "затык" возникает на

Public v8 As Object
Public Olev8 As Object
Public Obj1C As Object
Public Function cnn1C(ByVal ver1C As String, ByVal dbpath As String, Optional CloseFlag As Boolean = False) As Object 'connection
Static ConObj1C As Object
If (ConObj1C Is Nothing) And (Not CloseFlag) Then
Dim Obj1C As Object
Select Case ver1C
Case "V81.COMConnector"
Set Obj1C = CreateObject("V81.COMConnector")
Case "V82.COMConnector"
Set Obj1C = CreateObject("V82.COMConnector")
Case "V83.COMConnector"
Set Obj1C = CreateObject("V83.COMConnector") - вот здесь останов...
End Select
Set ConObj1C = Obj1C.Connect(dbpath)
...
Рейтинг: 0 / 0
02.12.2019, 10:14
    #39896932
МодальноеОкно
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Андрейка1
Соответственно вопрос - что нужно сделать для того чтобы проект office 64 bit получал данные из 1С 8 32 битной?


обертка для ком-коннектора 1с. гугл
...
Рейтинг: 0 / 0
19.12.2019, 16:39
    #39905707
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Андрейка1,
У вас получилось сделать обертку?
...
Рейтинг: 0 / 0
20.12.2019, 16:50
    #39906247
Андрейка1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ComConnector | VBA | Функции 1С
Yagrus2,

Неа, я и не пытался. Сейчас осваиваю программирование в 1с.
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / ComConnector | VBA | Функции 1С / 25 сообщений из 26, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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