powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / ComConnector | VBA | Функции 1С
26 сообщений из 26, показаны все 2 страниц
ComConnector | VBA | Функции 1С
    #39718897
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ComConnector | VBA | Функции 1С
    #39718979
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пойму, что ты хочешь победить? У COMConnector нет метода Дата и это правильно. Для конвертации строки в дату запускать 1с наверное не самый лучший способ. Методы комка нужны для доступа к данным 1с, а не для вычислений, которые прекрасно можно сделать без подобных извращений.
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719011
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoroshНе пойму, что ты хочешь победить?
Мне нужно из vba запустить 1c-запрос, который содержит параметры. Вот его часть:
Код: sql
1.
РегистрНакопления.РасчетыСКлиентами.ОстаткиИОбороты(&ДатаНачала, &ДатаОкончания, Период, , ) КАК РасчетыСКлиентамиОстаткиИОбороты


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


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

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

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

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

а что "смущает"? это не дата и не строка чтобы работало неявное приведение типов
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719082
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дата(2018,1,15)
'2018.1.15'
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719200
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алгоритм такой
1. Создаешь комок v8con As New V83.COMConnector
2. Подключаешься к нужной базе через v8con.Connect
3. Создаешь запрос примерно так Query = v8.NewObject("Query")
4. Устанавливаешь нужные запросу параметры методом Query.УстановитьПараметр(<название параметра>, <значение параметра>)
5. Выполняешь запрос и возвращаешь курсор с данными Query.Execute().Choose()
6. Крутишь в цикле курсор и читаешь что там есть
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719291
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 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
ComConnector | VBA | Функции 1С
    #39719300
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ComConnector | VBA | Функции 1С
    #39719303
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо вот так: Query.УстановитьПараметр("ДатаНачала", dtStart)

ДатаНачала это строка, имя параметра, пихай в кавычки. Без кавычек у тебя вышло: Query.УстановитьПараметр("", dtStart), на что 1с тебя правильно обругал
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719309
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А следующей ошибкой будет несоответствие типов. Ибо нефиг совать строку туда где должна быть дата и надеяться что 1с ее сам додумается ее преобразовать. Сделай в басике валидную дату и пихай ее значением параметра.
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719383
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ComConnector | VBA | Функции 1С
    #39719384
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если попробовать так:
Код: vbnet
1.
resString = Res.АналитикаУчетаПоПартнерам.Организация

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

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

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


Конечно,
Код: vbnet
1.
q = "ВЫБРАТЬ Представление(РасчетыСКлиентамиОстаткиИОбороты.АналитикаУчетаПоПартнерам.Организация) как Организация, "
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719500
Dorosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам уже ответили как правильно написать, а я объясню. Организация в 1с это справочник, сложный тип данных, то что в "нормальных" языках называют class или object. Запихать его в string не выйдет. Надо получить строковое представление объекта, используя функцию 1с ПРЕДСТАВЛЕНИЕ() или выбрав Организация.Наименование КАК Организация
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39719533
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
ComConnector | VBA | Функции 1С
    #39719538
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dorosh,
Спасибо, за разъяснение!
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39720109
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно куму пригодится.
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
ComConnector | VBA | Функции 1С
    #39720110
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также хотел добавить, что приложение EXCEL должно быть x32
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39866254
Андрейка1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже, ломал голову над похожей задачей. В итоге решил следующим способом: 1) создаем подключение, 2) выбираем объект 1С (справочник, регистр, документ и т.д.), 3) получаем перечень полей и формируем в динамической таблице excel структуру объекта, 4) формируем текстовую строку секции "ГДЕ", 5) формируем итоговый запрос, 6) выгружаем запрос на лист (динамическую таблицу).
подробнее - https://analysiscore.wordpress.com/2019/09/23/finish-1c-excel/
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39866439
AHDP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольно,

Но для корректных итогов нужно использовать Границу, а не дату+время.
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39896927
Андрейка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
ComConnector | VBA | Функции 1С
    #39896932
МодальноеОкно
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрейка1
Соответственно вопрос - что нужно сделать для того чтобы проект office 64 bit получал данные из 1С 8 32 битной?


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

Неа, я и не пытался. Сейчас осваиваю программирование в 1с.
...
Рейтинг: 0 / 0
ComConnector | VBA | Функции 1С
    #39962770
Stix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрейка1,

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


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