Страницы: 1
RSS
Язык запросов 1С в VBA
 
Пытаюсь тянуть данные из 1С через com соединение.
Подключение к базе проходит успешно ( инструкция - http://forum.msexcel.ru/index.php?topic=4341.0 )
Текст запрос в 1С отправляется и выполняется также успешно.
Проблемы возникают на этапе, когда в VBA поступает результат выполнения запроса - объект таблицы значений   - в созданный для этого Variant объект VBA.
Дело в том что стандартный 1с синтаксис для доступа к строкам и столбцам предполагает использование квадратных скобок - например Данные1С [НомерСтроки].НаименованиеСтолбца.
VBA такую синтаксическую конструкцию не поддерживает, и вставляет точку с запятой перед квадратной скобкой. Циклы вида
Код
For Each Колонка In ResultTable.Колонки
      For Each Строка in Колонка.Строки
              Debug.print Строка.Текст
      Next Строка
Next Колонка

ломаются на переборе строк в колонке (1С видимо не имеет такого метода).

Пример из https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=113257&TITLE_SEO=113257-zapusk-1s-cherez-udalennyy-rab-stol-i-posleduyushchee-obrashchenie-k-n&MID=941330&tags=&q=1%D1%81+com&FORUM_ID%5B0%5D=0&DATE_CHANGE=0&order=relevance&s=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8#message941330

тоже не работает (не поддерживается метод .Счет.Код)
Есть ли способы оперировать синтаксическими конструкциями вида Объект[1][0] в VBA?
 
Как вариант выгружать на лист, загружать с него в массив и обрабатывать стандартными методами.
А можно увидеть в каком виде
Цитата
P.lankton написал: в VBA поступает результат выполнения запроса - объект таблицы значений
Согласие есть продукт при полном непротивлении сторон
 
Код
Как вариант выгружать на лист, загружать с него в массив и обрабатывать стандартными методами.   

Проблема как раз в том что я не могу выгрузить результат полученного запроса на лист, потому что результат обращения к 1С базе через язык запросов 1С (грубо говоря - аналог SQL для 1С) - это объект 1С (Таблица запросов, он называется в терминологии 1С).

Код
А можно увидеть в каком виде
P.lankton написал: в VBA поступает результат выполнения запроса - объект таблицы значений
А как это сделать? Все до чего я дошел - это убедиться что это объект, через Typename(). Также я проверил что это именно объект 1С, т.к. использование в VBA методов работы с 1С таблицей значений возвращают верный результат.

 
 
А стандартный экспорт из 1С в Excel существует? Я, просто, не в курсе
Согласие есть продукт при полном непротивлении сторон
 
Не зная какого вида что там возвращается сложно говорить. Но возможно, возвращается объект массива и тогда обращаться можно так:
Код
For lr = 1 to ubound(ResultTable,1)
      For lc = 1 to ubound(ResultTable,2)
              Debug.print ResultTable(lr,lc)
      Next lc
Next lr
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
P.lankton, нужно на более профильные форумы обращаться
https://forum.mista.ru/topic.php?id=610791
COM возвращает структуру, там нет строк и столбцов, там есть объект и его элементы с атрибутами.
По вопросам из тем форума, личку не читаю.
 
Вроде разобрался.

При переборе строк в колонке можно использовать конструкцию с использованием названия колонки
Код
Do While ResultTable.Следующий()
            Debug.Print ResultTable.НАЗВАНИЕ_КОЛОНКИ
Loop

При этом название колонки явно задается в строке запроса (в моем случае ВЫБРАТЬ ХозрасчетныйДвиженияССубконто.Период КАК Период ИЗ РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто
 
Возможно Вам пригодится надстройка:
https://infostart.ru/public/317409/
Excel + SQL = Activetables
Страницы: 1
Наверх