Понятие 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: системное программирование.