Каталог решений - Подсистема COMExchange: прямой доступ к EXCEL через ADO

Подсистема COMExchange: прямой доступ к EXCEL через ADO

Подсистема COMExchange: прямой доступ к EXCEL через ADO

В наличии

На примере этой, очень популярной, темы наглядно продемонстрированы
нетривиальные возможности консоли запросов в составе подсистемы:
1. использование событий выполнения запроса (в том числе для запуска на выполнение других запросов)
2. запуск на выполнение запроса в цикле с подстановкой значений параметров из таблицы значений.

Категория:

Описание

 

Все истинные арийцы коннектятся через ADO.
Поэтому в порочящих их связях незаметны …
(пьяный бред Мюллера после победы) 

Прямой доступ к файлам EXCEL очень популярная, если не порядком избитая, тема. 
Есть множество публикаций, посвящённой этой теме.
Целью же этой статьи является не сказать что-то нового в этом деле, а наглядно продемонстрировать некоторые
нетривиальные возможности консоли запросов в составе подсистемы «COMExchange».

Для этой цели возьмём пример обсуждаемый ll13 в его замечательной статье и немного усложним.
Выгрузим в EXCEL номенклатуру с ценами в разрезе характеристик и видов цен.
Сделаем все это в консоли запросов  и после выгрузки наглядно покажем её результат, а именно
считаем лист EXCEL с выгруженными данными в консоли и откроем саму книгу EXCEL в его родном приложении.

Демонстрационный пример (сохранённый запрос), реализующий поставленную задачу,
можно взять из файла !НоменклатураЦеныВЭксельADO.rar  в архиве комплекта поставки подсистемы.

Этот пример работает в типовых конфигурациях УТ-10.3, УПП-1.2, УПП-1.3 и УТ-11.0.
В последнем случае 1С надо запускать в толстом клиенте в режиме обычного приложения.

Для работы демонстрационного примера необходимо:
1. Установить подсистему «COMExchange»;
2. Выполнить начальное заполнение объектов подсистемы в специальной форме. Для примера потребуются стандартные
    («предопределённые»)  узлы плана обмена «Обмен данными COM» с кодами ‘ExcelJet’ и ‘Excel’;
3. Открыть в консоли запросов сохранённый запрос из архива файла поставки и выполнить запрос «ЭксельADO»
    из дерева списка запросов (Рис.1, Рис.2).
    При этом в диалоге выбора файла потребуется выбрать путь к файлу EXCEL (лучше выбрать имя нового файла).

Комментарии к запросам примера:
1. Запрос 1С «ЭксельADO»  (Рис.1, Рис.2): 
    Текст и параметры этого запроса не обрабатываются. Его события выполнения используются
    для программного запуска на выполнение  других запросов из дерева списка и показа результата
    выгрузки (смотри ниже комментарии к событиям запросов);

2. Запросы 1С «ВыбратьНоменклатуруЦены» и «ВыбратьНоменклатуруЦены(УТ11 (Рис.3):
    Выбирают из информационной базы данные, требуемые для выгрузки в файл EXCEL.
    Первый используется в конфигурациях УТ-10.3, УПП-1.2, УПП-1.3, последний в УТ-11.0;

3. Запрос ADO «ЭксельСоздатьЛист» (Рис.4):
Выполняет соединение ADO с файлом EXCEL, создаёт рабочий лист («таблицу») с именем «Прайс»;

4. Запрос ADO «ЭксельЗаполнитьЛист» (Рис.5):
    Выполняет вставку строк в рабочий лист. Выполняется в цикле с подстановкой параметров из таблицы значений. 
    В качестве таблицы параметров запросу передаётся полученная из базы 1С выборка данных в виде таблицы значений.

5. Запрос ADO «ЭксельПрочитатьЛист» (Рис.6): 
    Считывает из файла EXCEL выгруженные в него данные для показа результата выгрузки в консоли.

Комментарии к событиям выполнения запроса «ЭксельADO»:
1. Событие «Перед запросом» (Рис.1):
    Отключается обработка текста и параметров запроса (СтандартнаяОбработка = Ложь).
    Проверяется имя и версия конфигурации для определения имени запроса для выборки данных из базы. 
    Если конфигурация непредусмотренная – выводится сообщение с установкой статуса отказа (Отказ = Истина), в противном случае
    выполняется запрос «ВыбратьНоменклатуруЦены» или «ВыбратьНоменклатуруЦены(УТ11 для выборки данных  из базы 1С.
    Затем запрос «ЭксельСоздатьЛист» выполняет подключение к файлу EXCEL и создаёт рабочий лист «Прайс» для выгрузки данных.
    Соединению ADO присваивается имя «ЭксельADO» для использования в других запросах ADO. 
    Затем с помощью функции тзПараметрыУстановить() выборка данных из базы 1С устанавливается для запроса «ЭксельЗаполнитьЛист»
    в качестве таблицы параметров для его выполнения в цикле. После чего этот запрос выполняет заполнение рабочего листа. 
    Ну и в завершении всего запрос «ЭксельПрочитатьЛист» считывает выгруженные данные для показа в консоли.

2. Событие «После запроса» (Рис.2):
    Используется для открытия файла EXCEL в его родном приложении.
    Для этого сначала закрываем соединение ADO с файлом с помощью процедуры ЗакрытьСоединениеADO(),
    передав ей через аргумент имя соединения. Затем открываем файл EXCEL с помощью функции ЗапросПутьOpen().
    В качестве первого аргумента функции передаётся имя запроса открывшего файл  EXCEL.
    При установке соединения через структуру с опциями запроса назад возвращается путь к открытому файлу. 
    В качестве второго аргумента функции передаётся код узла плана обмена «Обмен данными COM» ,
    который, используя путь к файлу в опциях запроса, пытается его открыть. 
    В данном случае это стандартный узел ‘Excel’ для COM-соединения с приложением MS Excel.

Примечания:
1) Указанные выше процедуры и функции определены в модуле объекта обработки консоли и довольно подробно описаны в её описании.
    Для их вставки в текст модуля обработчика можно воспользоваться меню сервисной кнопки «f(x)» текстового поля (Рис.7).

2) Для доступа к EXCEL через ADO в примере использован узел плана обмена «Excel-Jet.OLEDB».
    В принципе тот же результат получается при использовании узла «Excel-Ace.OLEDB»
    Но в этом случае, если созданный файл будет иметь расширение *.xlsx, то могут возникнуть проблемы с открытием этого файла в EXCEL
    Например, EXCEL-2010 со стандартными настройками отказывается открывать такой файл и его приходится переименовывать в *.xls.

has been added to your cart:
Оформление заказа