gifts2017

Применение технологии OLE Automation в системе «1С:Предприятие» версии 8.2

Опубликовал Tatiana Sayapina (SayapinaTI) в раздел Программирование - Практика программирования

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

Понятие OLE Automation

Чтобы это стало возможным, приложения должны предоставлять свои сервисы не только человеку, но и программам, т. е. они должны быть программируемыми. Обеспечение программируемости и является целью "Автоматизации" (технология OLE Automation). Приложение можно сделать программируемым, обеспечив доступ к его сервисам, через обычный СОМ-интерфейс.

Механизм OLE был задуман как технология интеграции программных продуктов Microsoft Office. Технология OLE предоставляет нам возможность работать с объектами, созданными в других приложениях (документы, рисунки, таблицы). Основные термины, с которыми оперирует данная технология, — это OLE-объект, сервер приложения и контейнер приложения.

OLE-объектом называют объект, созданный в другом приложении и сохранивший связь с этим приложением. Документ, редакции Word, или  электронные таблицы в формате Excel — все они могут быть OLE-объектами, если будут вставлены в документ соответствующим образом. Если не вставлять их как OLE-объект, то связь с оригинальным приложением будет отсутствовать.

Контейнером приложения OLE называют приложение, в котором создается составной документ, позволяя обрабатывать его в исходном приложении (например, таком как Word или Excel), которое использовалось для создания этого объекта.

Сервером приложения OLE (OLE Server Application) называют приложение, создающее объекты, которые можно поместить в документ-контейнер.

Программы — "1С:Предприятие", Microsoft Word и Excel являются приложениями, которые могут выступать и как OLE-сервер, и как OLE-контейнер. Другими словами, эти приложения могут создавать новые OLE-объекты, а такжет хранить OLE-объекты, созданные в других приложениях.

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

Использование Automation сервера в версии 8.2

Система "1С:Предприятие 8.2" может использоваться внешними приложениями в качестве OLE Automation сервера.

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

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

1. Создается OLE Объект с идентификатором "V82.Application".

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

3. Вызываются свойства и методы системы "1С:Предприятие" как OLE Automation сервера.

Приведем пример доступа к данным информационной базы посредством из Visual Basic скрипта 

' Подключение к БД средствами OLE Automation
Set cc = CreateObject("v82.Application")
cc.Connect("File=C:\1C\1S_82; usr=Администатор")
' Установка видимости приложения
cc.Visible = True
' Задаем текст запроса
Text = "ВЫБРАТЬ * ИЗ Справочник.Контрагенты"
' Создаем объект Запрос
Set Query = cc.NewObject("Запрос")
Query.Text = Text
' Выполнение запроса
Set Result = Query.Execute()
Set Choose = Result.Choose()
' Выборка результата выполнения запроса
Do While Choose.Next()
' Пример вывода сообщения в OLE-базе
cc.Message(Choose.Description)
Loop
' Пример вывода предупреждения в OLE-базе
cc.DoMessageBox "Для вопросов http://forum.amur.ru", 10,"Внимание!!!" 

   Некоторые версии внешних программ, в том числе и Visual Basic Script, обращающихся к программе "1С:Предприятие" посредством OLE Automation, могут неправильно интерпретировать русские идентификаторы объектов. По этому,  для обращения к свойствам и методам агрегатных типов данных системы "1С:Предприятие" из внешних приложений рекомендуется использовать их англоязычные синонимы.

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

Кроме того, OLE Automation сервер имеет одно дополнительное свойство и два метода с целью выполнения действий, специфичных для работы в режиме OLE Automation.

Единственное свойство visible имеет значение логического типа и позволяет управлять видимостью пользовательского интерфейса системы «1С:Предприятием». По умолчанию свойство имеет значение ложь.

Объект OLE-сервер системы "1С:Предприятие" в качестве своих методов может использовать системные процедуры и функции, а также процедуры и функции модуля приложения и общих модулей, объявленные с ключевым словом экспорт. Кроме того, OLE-сервер системы "1С:Предприятие" имеет два дополнительных метода: Connect и NewObject.

Метод Connect выполняет инициализацию системы "1С:Предприятие" и имеет единственный параметр — строку, используемую для соединения с информационной базой. Метод возвращает Истина, если инициализация прошла успешно, или Ложь, если нет.

Существует два варианта подключения к OLE-серверу системы "1С:Предприятие", которые зависят от варианта использования информационной базы (файловый или клиент-серверный варианты). Приведем пример подключения файловой и клиент-серверной версии системы "1С:Предприятие" 

' Подключение к БД файлового варианта
Set FileDb = CreateObject("v82.Application")
 FileDb.Connect("File=C:\Progra~l\lcv8\Db\Trade; Usr=Иванов; Pwd=super")
 ' Подключение к БД клиент-серверного варианта
Set ServerDb = CreateObject ("v82.Application")
ServerDb.Connect("Srvr=ServerlC; Ref=Trade; Usr=Иванов; Pwd=super")

 Рассмотрим параметры подключения к базе данных в файловом варианте.

• File — указывает на каталог базы данных.

• usr — имя пользователя, под которым будет происходить авторизация.

• Pwd — пароль пользователя.

Для подключения к базе данных в клиент-серверном варианте используются четыре параметра.

• srvr — указывает имя сервера, на котором работает сервер приложений системы "1С:Предприятие";

• Ref — указывает имя базы данных на сервере приложений;

• usr — определяет имя пользователя, под которым будет происходить авторизация;

• Pwd — пароль пользователя.

Второй специальный метод OLE-сервера системы "1С:Предприятие" — NewObject, который создает объект агрегатного типа данных системы "1С:Предприятие" и возвращает ссылку на него. Единственный параметр метода — строковое выражение, значение которого содержит имя агрегатного типа данных, объявленного в конфигураторе.

Доступ к объектам базы данных

Mетод NewObject используется для создания объекта типа запрос.

Поскольку система "1С:Предприятие" может создавать и использовать OLE Automation серверы, то из системы "1С:Предприятие" можно обращаться к другим информационным базам.

Для создания объектов агрегатного типа используется метод NewObject, но для доступа к константам и перечислениям достаточно использовать свойства глобального контекста константы и перечисления сервера приложения.

База = Новый СОМОбъект("V82.Application");
База.Connect(СтрокаПодключения);
// Доступ к константам
Сообщить(База.Константы.ОсновнаяВалюта.Получить().Наименование);
// Доступ к перечислениям
Сообщить(База.Перечисления.Периодичность.День);

Для доступа к справочникам и документам можно использовать метод NewObject. Однако можно использовать и свойства глобального контекста Справочники и Документы. После создания объекта справочника или документа к нему применимы все методы, касающиеся соответствующего объекта в среде "1С:Предприятие". 

База = Новый COMОбъект("V82.Application");
База.Connect(СтрокаПодключения);
 // Доступ к справочникам
СправочникОLЕ = База.Справочники.Контрагенты;
Выборка = СправочникОLЕ.Выбрать();
 // Обход выборки элементов справочника
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;
 // Создание нового элемента справочника
СправочникОLЕ = База.Справочники.Контрагенты;
НовыйЭлемент = СправочникОLЕ.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Алхимов Новый";
НовыйЭлемент.Записать();

 Доступ к документам производится так же, как и к справочникам.

База = Новый COMОбъект("V82.Application");
База.Connect(СтрокаПодключения);
// Поиск контрагента в OLE-базе
СправочникОLЕ = База.Справочники.Контрагенты;
СпрЭлемент = СправочникОLЕ.НайтиПоНаименованию("Алхимов");
// Создание нового документа
ДокументОLЕ= База.Документы.ПоступлениеТоваров.СоздатьДокумент();
ДокументОLЕ.Дата = ТекущаяДата();
ДокументОLЕ.Контрагент = СпрЭлемент;
ДокументОLЕ.УстановитьНовыйНомер();
ДокументОLЕ.Записать();

  В объектах OLE-базы данных можно использовать только ее же объекты. В примере, рассмотренном выше, для заполнения реквизита документа контрагент используется элемент справочника контрагенты той же OLE-базы. Это правило касается не только объектов агрегатных типов (справочников, документов, регистров и т. п.), но и универсальных коллекций значений, таких как массивы, структуры, списки значений и т.п.

Рассмотрим пример вывода курса доллара из регистра сведений. 

База = Новый СОМОбъект("V82.Application");
База.Connect(СтрокаПодключения);
// Доступ к регистрам сведений
// Поиск элемента справочника с наименованием "USD"
СправочникОLЕ = База.Справочники.Валюты;
СпрЭлемент = СправочникОLЕ.НайтиПоНаименованию("USD");
// Создаем структуру в OLE-базе
Структура = База.NewObject("Структура");
Структура.Вставить("Валюта", СпрЭлемент);
// Получаем курс доллара на текущую дату
РегистрСведенийОLЕ = База.РегистрыСведений.КурсыВалют;
Структура = РегистрСведенийОLЕ.ПолучитьПоследнее(ТекущаяДата(), Структура);
Сообщить("Курс доллара = " + Структура.Курс);
Сообщить("Кратность = " + Структура.Кратность);

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

Использование запросов

Работа с регистрами полностью аналогична работе со справочниками и документами.

В системе "1С:Предприятие" использование запросов является самым основным способом получения сводных данных, поэтому и при использовании системы в качестве OLE Automation сервера очень важно уметь использовать механизмы запросов.

Для выполнения запроса к данным OLE-базы достаточно с помощью метода NewObject создать объект Запрос и далее работать с ним стандартными методами.

Рассмотрим простой пример вывода списка наименований контрагентов 

 СтрокаПодключения="File=C:\1C\1S_82; usr=Администатор";
 База = Новый COMОбъект("V82.Application");
 База.Connect(СтрокаПодключения);
 Текст = "ВЫБРАТЬ * ИЗ Справочник.Контрагенты";
 // Создаем объект запрос
 Запрос = База.NewObject("Запрос");
 Запрос.Текст = Текст;
  // Выполняем запрос
 РезультатЗапроса = Запрос.Выполнить();
 Выборка = РезультатЗапроса.Выбрать();
  // Обход результата выполнения запроса
 Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование);
 КонецЦикла;

  Вызов пользовательских интерфейсов

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

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

                СтрокаПодключения="File=C:\1C\1S_82; usr=Администатор";
                База = Новый COMОбъект("V82.Application");
                // Шаг 1. Соединение с базой данных
                База.Connect(СтрокаПодключения);
                // Шаг 2. Установка видимости главного окна приложения
                База.Visible = Истина;
                // Шаг 3. Пример вывода сообщения в OLE-базе
                База.Сообщить("Пример сообщения через OLE Automation");
                // Пример вывода предупреждения в OLE-базе
                База.Предупреждение("Для вопросов http://forum.amur.ru",,"Внимание!!!");
                // Шаг 4. Открытие формы списка справочника
                Форма = База.Справочники.Контрагенты.ПолучитьФорму("ФормаСписка");
                Форма.Открыть();

В приведенном примере последовательно выполняются следующие действия:

1. Соединение с базой данных.

2. Установка видимости главного окна приложения.

3. ВЫВОД сообщений С ПОМОЩЬЮ операторов Сообщить И Предупреждение.

4. Открытие формы списка справочника контрагенты.

Доступ к метаданным

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

СтрокаПодключения="File=C:\1C\1S_82; usr=Администатор";
База = Новый COMОбъект("V82.Application");
База.Connect(СтрокаПодключения);
МетаСправочники = База.Метаданные.Справочники;
// Перебираем все справочники
Для каждого Справочник Из МетаСправочники Цикл
                Сообщить(Справочник.Имя);
                // Перебираем все реквизиты
                Для каждого Реквизит Из Справочник.Реквизиты Цикл
                               Сообщить(Символы.Таб + Реквизит.Имя);
                КонецЦикла;
КонецЦикла;

Использование СОМ-соединения в версии 8.2

Основная задача использования СОМ-соединения для конфигурации системы "1С:Предприятие 8.2" — это обеспечение надежного и быстрого программного доступа к объектам конфигурации из внешних приложений. Применение СОМ-соединения во многом похоже на использование OLE Automation сервера, но существуют и очень важные отличия. Приведем некоторые общесистемные отличия СОМ-соединения от OLE Automation.

При использовании СОМ-соединения:

• затрачиваются гораздо меньше системных ресурсов;

• происходит более быстрая установка соединения с базой данных;

• происходит более быстрое обращение к свойствам и методам объектов;

• полностью отсутствуют пользовательские интерфейсы.

 Отличия в программном использовании СОМ-соединения можно определить следующим образом:

• OLE-объект создается с идентификатором «V82.COMConnector»;

• отсутствует свойство Visible;

• не работают все методы системы "1С:Предприятие", касающиеся визуализации объектов;

• недоступен модуль приложения, но при этом доступен модуль внешнего соединения;

• из общих модулей доступны только те, у которых установлено свойство Внешнее соединение;

• метод Connect возвращает объект соединения с базой данных (в OLE Automation метод возвращал значение логического типа, а доступ к базе данных происходил через объект, созданный с помощью идентификатора "V82.Application").

Приведем пример подключения к базе данных системы "1С:Предприятие 8.2" с помощью СОМ-соединения на языке Visual Basic Script . 

' Подключение к БД
Set cc = CreateObject("v82.COMConnector") '
Set con = cc.Connect("File=C:\1C\1S_82; usr=Администатор")
' Вывод сообщения о названии конфигурации
MsgBox con.Metadata.Name, 0, "Конфигурация"
 ' Задаем текст запроса
Text = "ВЫБРАТЬ * ИЗ Справочник.Контрагенты"
 ' Создаем объект Запрос
Set Query = con.NewObject("Запрос")
Query.Text = Text
 ' Выполнение запроса
Set Result = Query.Execute()
Set Choose = Result.Choose()
ResultChoose = ""
 ' Выборка результата выполнения запроса
Do While Choose.Next ()
 ' Конкатенация всех значений выборки в одну строку
ResultChoose = ResultChoose & vbCrLf & Choose.Description
Loop
 ' Вывод результата выполнения запроса
MsgBox ResultChoose, 0, "Результат выборки"
Работа с Microsoft Excel

С помощью объекта Excel.Application, предоставляемого OLE-сервером MS Excel, можно программно создавать электронные таблицы, а также использовать все функции MS Excel, предоставляемые пользователям.

Основным, в объектной модели Excel, является объект Application, содержащий коллекцию Workbooks объектов типа WorkBook. Каждый объект типа WorkBook содержит коллекцию объектов Worksheets типа Worksheet, коллекцию объектов Сharts типа Сhart и др. Манипуляция рабочими книгами, их листами, ячейками, диаграммами и др. осуществляется путем обращения к свойствам и методам этих объектов.

Для создания примеров использования Microsoft Excel можно использовать следующий код создания контроллера:

Excel = Новый СОМОбъект("Excel.Application") .

Создать новую рабочую книгу Excel можно, используя метод Add коллекции Workbooks объекта Application:

Excel.Workbooks.Add()

Для создания рабочей книги на основе шаблона следует указать его имя в качестве первого параметра метода Add:

Excel.WorkBooks.AddC("C:\Templates\tm.xltx") 

В качестве первого параметра этого метода можно также использовать следующие константы:

• -4109 — рабочая книга состоит из листа с диаграммой;

• -4167 — рабочая книга состоит из листа с данными.

В этом случае рабочая книга будет содержать лист того типа, который задан указанной константой (график, обычный лист с данными и др.).

Для открытия уже существующего документа следует воспользоваться методом Open коллекции WorkBooks.

Excel.Documents.Open("С:\MyExcelFile.xlsx") .

 Отметим, что свойство ActiveWorkBook объекта Excel.Application указывает на текущую активную рабочую книгу среди одной или нескольких открытых. Помимо этого к рабочей книге можно обращаться по ее порядковому номеру. Например, ко второй открытой рабочей книге можно обратиться с помощью записи:

Excel.WorkBooks[2].

Сделать рабочую книгу активной можно с помощью метода Activate:

Excel.WorkBooks[2].Activate() .

Следующее, чему следует научиться, — это сохранять рабочие книги в файлах.

Закрытие документа может быть осуществлено с помощью метода close:

Excel.WorkBooks[2] .Close() ИЛИ Excel.ActiveWorkBook.Close ().

Метод Сlose имеет несколько необязательных (в случае позднего связывания) параметров, влияющих на правила сохранения рабочей книги. Первый из параметров принимает значения истина или ложь и влияет на то, сохранять ли изменения, внесенные в рабочую книгу. Второй параметр — имя файла, в котором нужно сохранить рабочую книгу (если в нее были внесены изменения). Третий параметр также принимает значения истина или ложь и влияет на то, будет ли пересылаться документ следующему пользователю по электронной почте.

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

Excel.ActiveWorkBook.Save();
Excel.ActiveWorkBook.SaveAs("C:\MyWorkBook.xls") .

 Метод SaveAs имеет более десятка параметров, влияющих на то, как именно сохраняется документ (под каким именем, с паролем или без него, какова кодовая страница для содержащегося в ней текста и др.).

Закрыть среду Excel можно с помощью метода Quit объекта Excel .Application. В случае Excel этот метод параметров не имеет.

Вывод документа Excel на устройство печати можно осуществить с помощью метода PrintOut объекта WorkBook, например:

Excel.ActiveWorkBook.Printout() .

Если нужно изменить параметры печати, следует указать значения соответствующих параметров метода PrintOut (в случае Excel их восемь).

Обращение к листам рабочей книги производится с помощью коллекции WorkSheets объекта WorkBook. Каждый член этой коллекции представляет собой объект Worksheet. К члену этой коллекции можно обратиться по его порядковому номеру, например:

Excel.WorkBooks[I].Worksheets[I].Name = "Страница 1".

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

К листу рабочей книги можно обратиться и по имени, например:

Excel.WorkBooks[1].Worksheets["Лист1"].Name = "Страница 1".

 Обращение к отдельным ячейкам листа производится с помощью коллекции Cells объекта WorkSheet. Например, добавить данные в ячейку B1  можно следующим образом:

Excel.WorkBooks[1].Worksheets["Лист1"].Cells[1,2].Value = "25".

Здесь первая из координат ячейки указывает на номер строки, вторая — на номер столбца.

 Добавление формул в ячейки производится аналогичным способом:

Excel.WorkBooks[I].Worksheets["Лист1"].Cells[3,2].Value=" =SUM(B1:B2)".

 Очистить ячейку можно с помощью  метода ClearContents .

Форматирование текста в ячейках производится с помощью свойств Font

и Interior объекта Cell и их свойств. Например, приведенный фрагмент кода, выводит текст в ячейке красным жирным шрифтом Courier размера 16 на желтом фоне.

Excel.WorkBooks[1].Worksheets[1].Cells[3,2].Interior.ColorIndex = 6;
Excel.WorkBooks[1].Worksheets[1].Cells[3,2].Font,Colorlndex = 3;
Excel.WorkBooks[1].Worksheets[1].Cells[3,2].Font,Name - "Courier";
Excel.WorkBooks[1].Worksheets[1].Cells[3,2].Font.Size = 16;
Excel.WorkBooks[1].Worksheets[1].Cells[3,2].Font.Bold = Истина;

Свойство Colorlndex может принимать числовые значения от 1 до 56. Ниже

приведены значения только основных цветов:

• 1 — белый;

• 2 - черный;

• з — красный;

• 5 — синий;

• б — желтый;

• 7 — лиловый;

• 10 — зеленый;

• 33 — голубой;

• 39 - сиреневый;

• 46 — оранжевый.

Обратиться к текущей ячейке можно с помощью свойства ActiveCell объекта Excel.Application, а узнать местоположение ячейки можно с помощью свойства Address объекта Cell, например:

Сообщить(Excel.ActiveCell.Address).

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

Excel.WorkBooks[1].Worksheets[2].Range["A1:C5"].Copy();
Excel.Workbooks[1].Worksheets[2].Range["A11:C15"].Select();
Excel.WorkBooks[1].Worksheets[2].Paste();

Обратите внимание на то, что диапазон, куда копируются данные, предварительно выделяется с помощью метода Select.

Выгрузка метаданных в MS Excel

Рассмотрим пример выгрузки метаданных произвольной конфигурации системы "1С:Предприятие 8.2" в лист Microsoft Excel. 

// Определяем все возможные объекты метаданных
ВсеТипы = Новый Структура();
ВсеТипы.Вставить("ОбщиеМодули", "Общие модули");
ВсеТипы.Вставить("ОбщиеФормы", "Общие формы");
ВсеТипы.Вставить("ОбщиеМакеты", "Общие макеты");
ВсеТипы.Вставить("ОбщиеКартинки", "Общие картинки");
ВсеТипы.Вставить("Роли", "Роли");
ВсеТипы.Вставить("Интерфейсы", "Интерфейсы");
ВсеТипы.Вставить("Стили", "Стили");
ВсеТипы.Вставить("Языки", "Языки");
ВсеТипы.Вставить("ПланыОбмена", "Планы обмена");
ВсеТипы.Вставить("Константы", "Константы");
ВсеТипы.Вставить("КритерииОтбора", "Критерии отбора");
ВсеТипы.Вставить("Справочники", "Справочники");
ВсеТипы.Вставить("Документы", "Документы");
ВсеТипы.Вставить("ЖурналыДокументов", "Журналы документов");
ВсеТипы.Вставить("Перечисления", "Перечисления");
ВсеТипы.Вставить("Отчеты", "Отчеты");
ВсеТипы.Вставить("Обработки", "Обработки");
ВсеТипы.Вставить("ПланыВидовХарактеристик", "Планы видов характеристик");
ВсеТипы.Вставить("ПланыСчетов", "Планы счетов");
ВсеТипы.Вставить("ПланыВидовРасчета", "Планы видов расчета");
ВсеТипы.Вставить("РегистрыСведений", "Регистры сведений");
ВсеТипы.Вставить("РегистрыБухгалтерии", "Регистры бухгалтерии");
ВсеТипы.Вставить("РегистрыРасчета", "Регистры расчета");
// Определяем все возможные параметры
ВсеПараметры = Новый Структура();
ВсеПараметры.Вставить("Измерения", "Измерения");
ВсеПараметры.Вставить("Ресурсы", "Ресурсы");
ВсеПараметры.Вставить("Реквизиты", "Реквизиты");
ВсеПараметры.Вставить("Формы", "Формы");
ВсеПараметры.Вставить("Макеты", "Макеты");
ВсеПараметры.Вставить("Графы", "Графы");
ВсеПараметры.Вставить("ТабличныеЧасти", "Табличные части");
ВсеПараметры.Вставить("Значения", "Значения");
 
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Не удалось открыть Excel");
    Возврат;
КонецПопытки;
// Добавляем новый лист
Excel.Application.Workbooks.Add("C:\For1C82.xlsx");
Лист = Excel.ActiveSheet;
// Задаем имя закладки
Лист.Name = "Данные";
НомерСтроки = 0;
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ВсеТипы Цикл
//Состояние("" + ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = ТипОбъекта.Значение;
// Перебираем конкретные объекты
Для каждого ОбъектМД Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = ОбъектМД.Синоним;
// Перебираем параметры метаданных
Для каждого Параметр Из ВсеПараметры Цикл
Попытка
    Количество = Объект[Параметр.Ключ].Количество();
Исключение
    Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = Параметр.Значение + " (" + Количество + " ) " ;
// Добавляем новую таблицу
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = "Имя";
Лист.Cells(НомерСтроки, 2).Value = "Синоним";
Лист.Cells(НомерСтроки, 3).Value = "Тип";
Лист.Cells(НомерСтроки, 4).Value = "Комментарий";
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
НомерСтроки = НомерСтроки + 1;
// Заполняем содержимое таблицы
Попытка
   Лист.Сеlls(НомерСтроки, 1).Value = Значение.Имя;
Исключение
КонецПопытки;
Попытка
   Лист.Cells(НомерСтроки, 2).Value = Значение.Синоним;
Исключение
КонецПопытки;
Попытка
   СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
   СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Лист.Cells(НомерСтроки, 3).Value = СтрокаТипов;
Исключение
КонецПопытки;
Попытка
   Лист.Cells(НомерСтроки, 4).Value = Значение.Комментарий;
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Excel.Visible = Истина;
Excel = Неопределено;

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

Ниже  показан пример цветового оформления ячеек MS Excel и задание в них определенного шрифта.

 // Получаем ссылку на определенную ячейку
Ячейка = Лист.Cells(НомерСтроки, НомерКолонки);
// Устанавливаем отступ в 2 символа
Ячейка.InsertIndent(2);
// Устанавливаем размер шрифта
Ячейка.Font.Size = 12;
// Устанавливаем цвет
Ячейка.Font.Colorlndex = 5;
// Устанавливаем жирный шрифт
Ячейка.Font.Bold = Истина;
// Устанавливаем ширину колонки
Ячейка.ColumnWidth = 20;
// Очищаем все границы
Ячейка.Borders(5).LineStyle = -4142;
// Устанавливаем левую границу
Ячейка.Borders(7).LineStyle = 1;'
// Устанавливаем верхнюю границу
Ячейка.Borders(8).LineStyle = 1;
// Устанавливаем нижнюю границу
Ячейка.Borders(9).LineStyle = 1;
// Устанавливаем правую границу
Ячейка.Borders(10).LineStyle = 1;
// Устанавливаем выравнивание по левому краю
Ячейка.VerticalAlignment = -4160;
// Устанавливаем перенос слов
Ячейка.WrapText = Истина;

   В первой строке данного примера в переменную ячейка помещается ссылка на конкретную ячейку с координатами НомерСтроки и НомерКолонки. После этого через данную переменную устанавливается размер шрифта, цвет текста, ширина ячейки, границы, положение текста и т. д.

 *Источник информации: Михайлов А. В.  1С:Предприятие 7.7/8.0: системное программирование. 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Яков Коган (Yashazz) 15.05.14 11:01
Внагляк передранный из Михайлова мануал. Чего нового-то, чего своего-то, окромя копипаста? Я вот щас Хрусталёву по главам выложу, тоже стартманей подыму, так?

Автор, разъясни, как получить тип значения переменной, объявленной в базе, к которой подключились через com? Ну или скажи, можно ли пользоваться командой "Выполнить", а?

И главное, знает ли автор книги, которую вообще-то за деньги продают, о подобном нарушении авторских прав, и как к этом относится администрация Инфостарта? Напомню фразочку с форзаца любой почти книги по 1С: "Никакая часть не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Полное или частичное копирование материалов книги без письменного разрешения запрещается". Так, вроде бы.
JammShoot; Гриффин; Boulala; shalimski; artbear; bulpi; iTony73; SayapinaTI; +8 Ответить
2. Андрей Бертыш (ignor) 21.05.14 11:50
Автор, почитай ещё мою статью до кучи http://1cniku.ru/Articles/V8OLE.html
3. Игорь Богданов (avz_1C) 16.11.14 12:20
Автор, спасибо.
Кто бы и что ни говорил, но Вы сделали нужную работу.
Ставлю "+".