Глава 40 Связь с внешними приложениями посредством механизмов DDE и OLE Automation
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 сервера предоставляет полный доступ к своему
глобальному
контексту (см. «Контекст выполнения программного модуля»). Поэтому объект
OLE-сервер 1С:Предприятие в качестве своих атрибутов может иметь: системные
константы, значения заданных в конфигураторе
констант,
перечислений,
регистров,
видов расчета,
групп видов расчета, а также
переменные, объявленные в глобальном программном модуле с ключевым словом Экспорт.
Система 1С:Предприятие в качестве OLE
Automation сервера предоставляет полный доступ к своему
глобальному
контексту (см. «Контекст выполнения программного модуля»). Поэтому объект
OLE-сервер 1С:Предприятие в качестве своих методов может иметь: системные процедуры
и функции, а также процедуры и функции глобального программного модуля, объявленные
с ключевым словом Экспорт. Кроме того, OLE-сервер 1С:Предприятие
имеет три дополнительных метода: Initialize,
EvalExpr,
ExecuteBatch.
Выполнить инициализацию системы 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, )
Вычислить выражение системы 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(ОтдатьСправочникТоваров());
Создает объект агрегатного типа данных системы 1С:Предприятие и возвращает
ссылку на него.
Синтаксис:
CreateObject(ИмяАгрегатногоТипа)
Англоязычный синоним:
CreateObject
Параметры:
ИмяАгрегатногоТипа |
Строковое выражение, значение которого содержит имя агрегатного типа
данных, объявленного в конфигураторе. |
Возвращаемое значение:
Ссылка на созданный объект агрегатного типа данных.
Описание:
Метод CreateObject создает объект агрегатного типа
данных системы 1С:Предприятие и возвращает ссылку на него. Данная функция обычно
используется одновременно с неявным определением переменной и присвоением ей
ссылки на объект агрегатного типа данных.
Пример:
Процедура Загрузить()
Если ФС.Существуетфайл(Путь + \NUL) = 0 Тогда
Предупреждение(Путь информационной базы не найден!);
Иначе
V7 = СоздатьОбъект(V77.Application);
Открыта
= V7.Initialize(V7.RMTrade, /d + Путь +
/M /N + Пользователь,
);
Если Открыта = 0 Тогда
Предупреждение(Ошибка открытия информационной
базы);
Возврат;
КонецЕсли;
Импорт = V7.CreateObject(Справочник.Контрагенты);
Импорт.ВыбратьЭлементы();
Пока Импорт.ПолучитьЭлемент() = 1 Цикл
Если Импорт.ЭтоГруппа() = 0 Тогда
Сообщить(Импорт.Наименование);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Выполнить последовательность операторов системы 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С:Предприятие данных.
Система 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 связей.
Содержание раздела