Основная страница

 

Глава 40
Связь с внешними приложениями посредством механизмов
DDE и OLE Automation


 

При формировании пользовательского интерфейса прикладной задачи довольно часто существуют ситуации, когда для удобства работы пользователя необходимо дать возможность обрабатывать имеющиеся данные с помощью других, имеющихся на компьютере программ.

Одним из примеров использования такой возможности может служить запуск программы Microsoft Excel (непосредственно из программы 1С:Предприятие ) с одновременным выводом в нее результатов расчета. Далее пользователь может обрабатывать полученные результаты (просматривать, редактировать, печатать и т. п.) непосредственно в среде Microsoft Excel.

Одну из возможностей запуска и управления внешними приложениями дает механизм OLE Automation. Встроенный язык системы 1С:Предприятие поддерживает технологию управления объектами OLE. Непосредственно при помощи операторов языка можно управлять, например, программами, входящими в Microsoft Office.

Контекст работы с внешними приложениями

Внешнее приложение, с которым предполагается устанавливать связь, должно отвечать следующим условиям: внешнее приложение должно поддерживать механизм OLE Automation и должно быть установлено на том компьютере, где его намечено использовать.

Во всех программных модулях вызов процедур или функций внешнего приложения может выполняться только при помощи переменной со ссылкой на объект, который создается функцией СоздатьОбъект. Чтобы вызвать метод внешнего приложения, имя метода (с указанием необходимых параметров) пишется через точку после идентификатора переменной.

При создании переменной со ссылкой на внешнее приложение, в качестве имени объекта в операторе СоздатьОбъект должен выступать зарегистрированный OLE идентификатор внешнего приложения.

Зарегистрированный OLE идентификатор внешнего приложения — это уникальный идентификатор программного продукта, который записывается в регистрационную базу Windows при инсталляции программы.

Примеры OLE идентификаторов:

Excel

"Excel.Application"

LotusApproach

"Approach.Application"

MSGraph

"MSGraph.Application"

PowerPoint

"PowerPoint.Application"

Пример:

// Создаем объект Excel (запускаем программу Excel)

Ехсеl = СоздатьОбъект("Excel.Application");

// делаем окно программы Excel видимым и активным

Excel.Visible = l;

Методы внешних приложений

Методы внешних приложений, а также синтаксис их использования у каждого приложения свои. Описание процедур и функций внешнего приложений можно получить только в документации данного приложения. Например, практически все программы, входящие в пакет Microsoft Office используют для своего управления версию языка Visual Basic.

Чтобы вызвать метод внешнего приложения в языке системы 1С:Предприятие, имя метода (с указанием необходимых параметров) пишется через точку после имени ссылки на объект внешнего приложения.

Пример:

// Создаем объект Excel и присвоим его переменной языка

ОкноЕхсеl = СоздатьОбъект("Excel.Application");

// устанавливаем имя окна Excel

ОкноЕхсеl.Caption = "Отчет";

// создадим новую рабочую книгу

НовыеРабочиеКниги = ОкноЕхсеl.Workbooks;

РабочаяКнига = НовыеРабочиеКниги.Add();

Ограничения:

Не поддерживаются значения, передаваемые по ссылке;

Не поддерживаются массивы, в точности SAFEARRAY;

Не поддерживаются значения типа IUnknown.

Эти ограничения не столь серьезны, т. к. например, все типы данных, с которыми работает Excel и большинство других наиболее распространенных программ, полностью поддерживаются.

Типы поддерживаемых данных:

Boolean

Currency

Date

Double-precision floating-point

Integer

Long integer

Object

Single-precision floating-point

String

Пример:

//В данном примере запускается программа Excel,

// затем в нее передаются некоторые данные, и затем

// на их основе строится диаграмма.

// Создаем объект Excel и присвоим его переменной языка

ОкноЕхсеl = СоздатьОбъект("Excel.Application");

// устанавливаем имя окна Excel

ОкноЕхсеl.Caption = "Отчет";

// создадим новую рабочую книгу

НовыеРабочиеКниги = ОкноЕхсеl.Workbooks;

РабочаяКнига = НовыеРабочиеКниги.Аdd();

ЧислоРядов = 10;

ЧислоСтолбцов = 5;

// проставим названия строк

Для Ряд = 1 По ЧислоРядов Цикл

   Ячейка = ОкноЕхсеl.Cells(Ряд + 1, 1);

   Ячейка.Value = "Строка " + Строка(Ряд);

КонецЦикла;

// проставим названия столбцов

Для Столбец = 1 По ЧислоСтолбцов Цикл

   Ячейка = ОкноЕхсеl.Cells(1, Столбец + 1);

   Ячейка.Value = "Столбец " + Строка(Столбец);

КонецЦикла;

// заполним ячейки таблицы значениями

Для Ряд = 1 По ЧислоРядов Цикл

   Для Столбец = 1 По ЧислоСтолбцов Цикл

      Ячейка = ОкноЕхсеl.Cells(Ряд + 1, Столбец + 1);

      Ячейка.Value = Ряд + Столбец;

   КонецЦикла;

КонецЦикла;

// выделим область в таблице и присвоим ее переменной языка

Область = ОкноЕхсеl.Range(ОкноЕхсеl.Cells(1, 1),

                          ОкноЕхсеl.Cells(ЧислоРядов + 1, ЧислоСтолбцов + 1));

// зададим имя выделенной области

Область.Name = "ОбластьДанных";

// определим рамку выделенной области и присвоим ее переменной языка

Рамка = Область.Borders;

// установим стили для рамки выделенной области

Рамка.LineStyle = 1;

Рамка.Colorlndex = 3;

// построим диаграмму Лист=РабочаяКнига.Worksheets(1);

Диаграмма = Лист.ChartObjects();

Диаграмма = Диаграмма.Add(5, 5 + Область.Тор + Область.Height,

                          Область.Width, Область.Height);

МояДиаграмма = Диаграмма.Chart;

МояДиаграмма.ChartWizard("ОбластьДанных ", -4102, 6, 1, 1, 1, 1, "Отчет");

// сделаем окно Excel видимым и активным

ОкноЕхсеl.Visible = 1;

Работа системы 1С:Предприятие в качестве OLE Automation сервера

Система 1С:Предприятие может быть запущена внешним приложением в качестве OLE Automation сервера и предоставляет доступ ко всем атрибутам и методам своего глобального контекста (см. «Контекст выполнения программного модуля»). Кроме того, OLE-сервер 1С:Предприятие имеет дополнительные методы, с помощью которых можно выполнить последовательность операторов или вычислить выражение, заданное на встроенном языке 1С:Предприятие.

Для запуска системы 1С:Предприятие в качестве OLE Automation сервера из внешнего приложения, выполняется следующая последовательность действий:

·         создается объект с OLE идентификатором:

o                   V1СEnterprise.Application — версия независимый ключ;

o                   V77.Application — версия зависимый ключ;

o                   V77S.Application — версия зависимый ключ, SQL версия;

o                   V77L.Application — версия зависимый ключ, локальная версия;

o                   V77M.Application — версия зависимый ключ, сетевая версия.

·         выполняется инициализация системы 1С:Предприятие методом Initialize.

·         вызываются атрибуты и методы системы 1С:Предприятие как OLE Automation сервера

Замечание 1: Поскольку программа 1С:Предприятие является одновременно OLE Automation сервером и OLE Automation клиентом, то возможно из 1С:Предприятие обращаться к другой копии 1С:Предприятие (например, к другой конфигурации) для обмена данными. В основном все современные программные продукты поддерживают механизм OLE Automation, это касается в частности MS Office, MS FoxPro и приложений на них написанных, DAO и т. п., поэтому программа 1С:Предприятие может полностью интегрироваться с ними.

Замечание 2: Не локализованные версии внешних программ, обращающихся к программе 1С:Предприятие посредством OLE Automation, могут неправильно интерпретировать русские идентификаторы объектов агрегатных типов данных, например, реквизитов справочников. Данное замечание не относится к продуктам MS Office и к программам, использующим в качестве языка обращения к OLE объектам Microsoft Visual Basic. Рекомендуется использовать локализованные версии программных продуктов, либо в конфигурации использовать идентификаторы без символов кириллицы. Для обращения к атрибутам и методам агрегатных типов данных системы 1С:Предприятие из внешних приложений рекомендуется использовать их англоязычные синонимы.

Замечание 3: Все созданные объекты OLE Automation существуют до тех пор, пока существует переменная, которая содержит значение данного объекта. Следовательно, сама программа 1С:Предприятие, выступающая в качестве объекта OLE Automation в другой программе, будет находиться в памяти компьютера до удаления или изменения значения переменной, содержащей ее в качестве объекта.

Атрибуты системы 1С:Предприятие как OLE Automation сервера

Система 1С:Предприятие в качестве OLE Automation сервера предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому объект OLE-сервер 1С:Предприятие в качестве своих атрибутов может иметь: системные константы, значения заданных в конфигураторе констант, перечислений, регистров, видов расчета, групп видов расчета, а также переменные, объявленные в глобальном программном модуле с ключевым словом Экспорт.

Методы системы 1С:Предприятие как OLE Automation сервера

Система 1С:Предприятие в качестве OLE Automation сервера предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому объект OLE-сервер 1С:Предприятие в качестве своих методов может иметь: системные процедуры и функции, а также процедуры и функции глобального программного модуля, объявленные с ключевым словом Экспорт. Кроме того, OLE-сервер 1С:Предприятие имеет три дополнительных метода: Initialize, EvalExpr, ExecuteBatch.

Initialize

Выполнить инициализацию системы 1С:Предприятие.

Синтаксис:

Initialize(<Имя_Объекта>.RMTrade, <КоманднаяСтрока>, <ПустаяСтрока>)

Англоязычный синоним:

Initialize

Параметры:

<Имя_Объекта>

Идентификатор созданного OLE объекта 1С:Предприятие.

RMTrade

Добавочное ключевое слово.

<КоманднаяСтрока>

Строковое выражение — командная строка запуска 1С:Предприятие.

<ПустаяСтрока>

Строковое выражение. Параметр может содержать пустую строку или строковое значение "NO_SPLASH_SHOW" — отключить заставку при запуске системы 1С:Предприятие в режиме OLE Automation сервера.

Возвращаемое значение:

Значение логического типа: TRUE, если инициализация прошла удачно, или FALSE, если нет.

Замечание: В OLE Automation TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.

Описание:

Метод Initialize выполняет инициализацию системы 1С:Предприятие.

Пример:

* здесь пример приводится на языке MS Visual Basic:

Dim v7 As Object

Set v7 = CreateObject("V77.Application")

result = v7.Initialize(v7.RMTrade, "/DC:\V7\DB /M", "")

EvalExpr

Вычислить выражение системы 1С:Предприятие.

Синтаксис:

EvalExpr(<СтрокаВыражения>)

Англоязычный синоним:

EvalExpr

Параметры:

<СтрокаВыражения>

Строковое выражение — выражение, записанное на встроенном языке 1С:Предприятие.

Возвращаемое значение:

Результат вычисленного выражения.

Описание:

Метод EvalExpr вычисляет выражение, записанное в параметре <СтрокаВыражения> на встроенном языке 1С:Предприятие и возвращает результат вычисления. Результатом выражения может быть число, строка, дата или значение любого агрегатного типа данных. Результат с неопределенным типом данных преобразуются к строковому типу.

Пример:

* здесь пример приводится на языке MS Visual Basic:

Dim v7 As Object

Dim Товары As Object

Set v7 = CreateObject("V77.Application")

result = v7.Initialize(v7.RMTrade, "/DC:\V7\DB /M", "")

Set Товары = v7.EvalExpr("ОтдатьСправочникТоваров()");

CreateObject

Создает объект агрегатного типа данных системы 1С:Предприятие и возвращает ссылку на него.

Синтаксис:

CreateObject(<ИмяАгрегатногоТипа>)

Англоязычный синоним:

CreateObject

Параметры:

<ИмяАгрегатногоТипа>

Строковое выражение, значение которого содержит имя агрегатного типа данных, объявленного в конфигураторе.

Возвращаемое значение:

Ссылка на созданный объект агрегатного типа данных.

Описание:

Метод CreateObject создает объект агрегатного типа данных системы 1С:Предприятие и возвращает ссылку на него. Данная функция обычно используется одновременно с неявным определением переменной и присвоением ей ссылки на объект агрегатного типа данных.

Пример:

Процедура Загрузить()

   Если ФС.Существуетфайл(Путь + "\NUL") = 0 Тогда

      Предупреждение("Путь информационной базы не найден!");

   Иначе

      V7 = СоздатьОбъект("V77.Application");

      Открыта = V7.Initialize(V7.RMTrade, "/d" + Путь +

                              " /M /N" + Пользователь, "");

      Если Открыта = 0 Тогда

         Предупреждение("Ошибка открытия информационной базы");

         Возврат;

      КонецЕсли;

      Импорт = V7.CreateObject("Справочник.Контрагенты");

      Импорт.ВыбратьЭлементы();

      Пока Импорт.ПолучитьЭлемент() = 1 Цикл

         Если Импорт.ЭтоГруппа() = 0 Тогда

            Сообщить(Импорт.Наименование);

         КонецЕсли;

      КонецЦикла;

   КонецЕсли;

КонецПроцедуры

ExecuteBatch

Выполнить последовательность операторов системы 1С:Предприятие.

Синтаксис:

ExecuteBatch(<СтрокаОператоров>)

Англоязычный синоним:

ExecuteBatch

Параметры:

<СтрокаОператоров>

Строковое выражение — текст программы на встроенном языке 1С:Предприятие.

Возвращаемое значение:

Значение логического типа: TRUE, если последовательность операторов выполнены успешно, или FALSE, если нет.

Замечание: В OLE Automation TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.

Описание:

Метод ExecuteBatch выполняет последовательность операторов, записанную в параметре <СтрокаОператоров> на встроенном языке 1С:Предприятие.

Пример:

* здесь пример приводится на языке MS Visual Basic:

Sub Command1_Click ()

   Dim v7 As Object

   Dim Price As Object

   Set v7 = CreateObject("V77.Application")

   result = v7.Initialize(v7.RMTrade, "/DC:\V7\DB /M", "")

   Set Price = v7.EvalExpr("ОтдатьСправочникТоваров()")

   Price.New

   Price.Code = "112233"

   Price.Description = "Test string"

   Price.Write;

   BoolResult = v7.ExecuteBatch("ПроцедураРегл1();ПроцедураРегл2()")

End Sub

* Обращение к программе 1С:Предприятие из модуля MS Excel. В данном примере запускается и инициализируется конфигурация 1С:Предприятие с базой данных в каталоге C:\V7\DB в монопольном режиме. Далее в программе 1С:Предприятие создается объект типа "Справочник.Товары", где создается новая группа элементов с названием "***** Экспорт из Excel ******". Во вновь созданную группу каталога записываются данные из таблицы MS Excel. Здесь пример приводится на языке MS Visual Basic.

Sub Excel_to_trade()

   Dim trade As Object

   Dim Товар As Object

   Set trade = CreateObject("V77 .Application")

   result = trade.Iinitialize(trade.RMTrade, "/DC:\V7\DB /M", "")

   Set Товар = trade.EvalExpr("CreateObject(""Справочник.Товары"")")

   Товар.НоваяГруппа

   Товар.Наименование = "***** Экспорт из Excel ******"

   Товар.Записать

   Товар.ИспользоватьРодителя Товар.ТекущийЭлемент

   N = 100 'Количество строк в документе

   For Count = 1 То N Товар.Новый

      Товар.Наименование = Application.Cells(Count, 2).Value

      Товар.Розн_Цена = Application.Cells(Count, 3).Value

      Товар.Мел_Опт_Цена = Application.Cells(Count, 4).Value

      Товар.Onт_Цена = Application.Cells(Count, 5).Value

      Товар.Записать

   Next Count

End Sub

Работа системы 1С:Предприятие в качестве DDE сервера

Другим способом обращения к данным 1С:Предприятие а из внешних программ является режим DDE. Основное преимущество данного режима является динамическое обновление получаемых из 1С:Предприятие данных.

Система 1С:Предприятие является DDE сервером и предоставляет свой сервис в получении данных и уведомлении DDE клиента об их изменении.

В качестве DDE сервера 1С:Предприятие может возвращать значение некоторого выражения, записанного на встроенном языке 1С:Предприятие. Возвращаемое значение является строкой. Для того, чтобы рассматривать результат выражения в качестве числа или даты, например в ячейке MS Excel, может потребоваться задание формата значения.

Для доступа к 1С:Предприятие посредством DDE следует использовать DDE-объект с именем 1CV7|DDE.

Пример:

* Ниже приведены примеры размещения в ячейках MS Excel DDE связей с программой 1С:Предприятие. Первое выражение в примере обращается к стандартной функции встроенного языка 1С:Предприятие. Второе выражение в примере обращается к функции, записанной в глобальном модуле конфигурации программы 1С:Предприятие.

='1CV7'|DDE!'РабочаяДата()'

='1CV7'|DDE!'СуммаПоНарядам()'

Замечание 1: Для правильной интерпретации значения выражения в качестве числа или даты в MS Excel, нужно в операционной системе установить соответствующий формат представления даты и числа, как он принят в 1С:Предприятие.

Замечание 2: Не рекомендуется обращаться посредством DDE к функциям 1С:Предприятие, которые могут выполняться продолжительное время. Это связано с тем, что обращение к данной функции будет выполняться достаточно часто при обновлениях DDE связей.






Перейти  к оглавлению: Описание встроенного языка