258 документов
← К списку

Automation Server

страница

Automation Server

Основное назначение Automation-сервера «1С:Предприятия» ? управление приложением системы «1С:Предприятие» из других приложений и выполнение действий, аналогичных интерактивным действиям.

Automation-сервер «1С:Предприятия» предоставляет доступ ко всем свойствам и методам своего глобального контекста, имеет дополнительные свойства и методы для выполнения действий, специфичных для работы в режиме Automation.

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

  • создается COM-объект с идентификатором V83.Application (толстый клиент) или V83``c``.Application (тонкий клиент);
  • выполняется инициализация системы «1С:Предприятие» методом Connect();
  • вызываются свойства и методы системы «1С:Предприятие» как Automation-сервера.

Поставим задачу загрузить данные из листа программы Microsoft Excel в базу данных «1С:Предприятия».

В листе данные расположены следующим образом (рис. 5.1).

Рис. 5.1. Состав листа Excel

Признаком конца табличной части является наличие в колонке «Номер» символа «#».

Пример кода макроса на Visual Basic, с помощью которого выполняется загрузка данных, приведен в листинге 5.1.

Листинг 5.1. Пример чтения данных из листа Excel в толстом клиенте

Sub OLE()

Dim trade As Object

Dim Элемент As Object

 

Set trade = CreateObject("V83.Application")

trade.Connect("File=""c:\InfoBases\Trade"";Usr=""Director"";")

 

Rem создаем документ

Set Документ = trade.Документы.РасходнаяНакладная.СоздатьДокумент()

 

Rem получаем данные из листа

Set Клиент = trade.Справочники.Клиенты.НайтиПоНаименованию(Application.Cells(1, 2).Value)

НомерДокумента = Application.Cells(2, 2).Value

Дата = Application.Cells(3, 2).Value

 

Rem записываем полученные данные в документ

Документ.Клиент = Клиент

Документ.Дата = Дата

Документ.Номер = НомерДокумента

 

Номер = 6   'Первая строка табличной части

НомерСтроки = Application.Cells(Номер, 1).Value

 

Rem в последней строке табличной части будет символ #

While НомерСтроки <> "#"

 

Rem получаем данные из листа

Set Номенклатура = trade.Справочники.Товары.НайтиПоНаименованию(Application.Cells(Номер, 2).Value)

Количество = Application.Cells(Номер, 5).Value

Цена = Application.Cells(Номер, 6).Value

Сумма = Application.Cells(Номер, 7).Value

 

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

Set Строка = Документ.Товары.Добавить()

Строка.Товар = Номенклатура

Строка.Количество = Количество

Строка.Цена = Цена

Строка.Сумма = Сумма

Номер = Номер + 1

НомерСтроки = Application.Cells(Номер, 1).Value

Wend

Документ.Записать

 

Документ.ПолучитьФорму.Открыть

End Sub

В данном примере создается COM-объект с идентификатором V83.Application, то есть запускается и инициализируется конфигурация «1С:Предприятия» в режиме толстого клиента с базой данных в каталоге c:\InfoBases\Trade. Далее создается экземпляр документа РасходнаяНакладная. Из листа извлекаются данные документа и записываются в объект «1С:Предприятия». В конце алгоритма открывается форма вновь созданного документа.

В результате выполнения макроса из листа Microsoft Excel в информационной базе «1С:Предприятия» создается расходная накладная, документ заполняется данными и открывается его форма (рис. 5.2).

Рис. 5.2. Расходная накладная, заполненная из листа Microsoft Excel

Аналогичные действия можно выполнять и в режиме тонкого клиента, когда создается объект V83``c``.Application. Однако в тонком клиенте недоступны методы прикладных объектов, невозможно обратиться к менеджерам справочников, документов и т. п. Поэтому новый документ создается с помощью метода ПолучитьФорму(), обращение к его реквизитам происходит через основной реквизит полученной формы, а поиск ссылки на справочник выполняется в функции ПолучитьСсылкуНаСправочник() общего неглобального модуля РаботаСДанными (листинг 5.2).

Листинг **5.**2. Пример чтения данных из листа Excel в тонком клиенте

Sub OLE_V83c()

Dim trade As Object

Dim Элемент As Object

 

Set trade = CreateObject("V83c.Application")

trade.Connect("File=""c:\InfoBases\Trade"";Usr="""";")

 

Rem создаем документ

Set ФормаДокумента = trade.ПолучитьФорму("Документ.РасходнаяНакладная.ФормаОбъекта")

 

Rem получаем данные из листа

Set Клиент = trade.РаботаСДанными.ПолучитьСсылкуНаСправочник("Клиенты", Application.Cells(1, 2).Value)

НомерДокумента = Application.Cells(2, 2).Value

Дата = Application.Cells(3, 2).Value

 

Rem записываем полученные данные в документ

ФормаДокумента.Объект.Клиент = Клиент

ФормаДокумента.Объект.Дата = Дата

ФормаДокумента.Объект.Номер = НомерДокумента

 

Номер = 6   'Первая строка табличной части

НомерСтроки = Application.Cells(Номер, 1).Value

 

Rem в последней строке табличной части будет символ #

While НомерСтроки <> "#"

 

Rem получаем данные из листа

Set Номенклатура = trade.РаботаСДанными.ПолучитьСсылкуНаСправочник("Товары", Application.Cells(Номер, 2).Value)

Количество = Application.Cells(Номер, 5).Value

Цена = Application.Cells(Номер, 6).Value

Сумма = Application.Cells(Номер, 7).Value

 

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

Set Строка = ФормаДокумента.Объект.Товары.Добавить()

Строка.Товар = Номенклатура

Строка.Количество = Количество

Строка.Цена = Цена

Строка.Сумма = Сумма

Номер = Номер + 1

НомерСтроки = Application.Cells(Номер, 1).Value

Wend

 

ФормаДокумента.Открыть

 

End Sub

В конце алгоритма открывается форма вновь созданного документа, и данные в документ могут быть записаны интерактивно из формы.

Результат выполнения этого макроса аналогичен показанному выше на рис. 5.2.

Объект Automation-сервер «1С:Предприятия» в качестве своих свойств может иметь:

  • системные константы;
  • значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры);
  • переменные, объявленные в модуле приложения с ключевым словом Экспорт.

Automation-сервер «1С:Предприятия» в качестве своих методов может иметь:

  • системные процедуры и функции;
  • процедуры и функции модуля приложения и общих модулей, объявленные с ключевым словом Экспорт;
  • два дополнительных метода: Connect() и NewObject().

Как и многие современные программные продукты, «1С:Предприятие» может выступать в роли клиентов Automation. Поэтому имеется возможность из системы «1С:Предприятие» обращаться к другой копии «1С:Предприятия» (например, к другой конфигурации) для обмена данными. Здесь также можно запускать «1С:Предприятие» в толстом клиенте (листинг 5.3) и в тонком клиенте (листинг 5.4).

подробнее

Подробнее познакомиться с использованием системы «1С:Предприятие» в качестве Automation Client (толстый и тонкий клиент) можно в демонстрационной конфигурации «Интеграция с 1С», которая прилагается к книге.

Листинг 5.3. Пример использования системы «1С:Предприятие» в качестве Automation Client (толстый клиент)

Процедура AutomationТолстыйКлиент(Команда)

 

Путь = "c:\InfoBases\Trade";

Пароль = "";

Пользователь = "";

 

V83 = Новый COMОбъект("V83.Application");

 

Попытка

Открытие = V83.Connect("File=" + Путь + ";Usr=" + Пользователь + ";Pwd=" + Пароль + ";");

Исключение

ПоказатьПредупреждение(, "База данных не открыта!!!");

Возврат;

КонецПопытки; 

 

МенеджерНоменклатуры = V83.Справочники.Товары;

НовыйЭлемент = МенеджерНоменклатуры.СоздатьЭлемент();   

НовыйЭлемент.Наименование = "Созданный";

НовыйЭлемент.Записать();

Фрм = НовыйЭлемент.ПолучитьФорму();

Фрм.Открыть();      

 

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

Листинг 5.4. Пример использования системы «1С:Предприятие» в качестве Automation Client (тонкий клиент)

Процедура AutomationТонкийКлиент(Команда)

 

Путь = "c:\InfoBases\Trade";

Пароль = "";

Пользователь = "";

 

V83 = Новый COMObject("V83c.Application");

 

Попытка

Открытие = V83.Connect("File=" + Путь + ";Usr=" + Пользователь + ";Pwd=" + Пароль + ";");

Исключение

ПоказатьПредупреждение(, "База данных не открыта!!!");

Возврат;

КонецПопытки; 

 

//тонкий клиент - создание нового элемента при открытии формы.

Фрм = V83.ПолучитьФорму("Справочник.Товары.ФормаОбъекта");   

Фрм.Объект.Наименование = "Добавленный";

Фрм.Открыть();

 

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