Основное назначение Automation-сервера «1С:Предприятия» ? управление приложением системы «1С:Предприятие» из других приложений и выполнение действий, аналогичных интерактивным действиям.
Automation-сервер «1С:Предприятия» предоставляет доступ ко всем свойствам и методам своего глобального контекста, имеет дополнительные свойства и методы для выполнения действий, специфичных для работы в режиме Automation.
Для запуска системы «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
Аналогичные действия можно выполнять и в режиме тонкого клиента, когда создается объект V83c.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С:Предприятия» в качестве своих методов может иметь:
Как и многие современные программные продукты, «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.ПолучитьФорму("Справочник.Товары.ФормаОбъекта");
Фрм.Объект.Наименование = "Добавленный";
Фрм.Открыть();
КонецПроцедуры