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

14.05.14

Интеграция - Внешние источники данных

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

Понятие 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С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20689    21    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13745    13    48    

25

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    51067    101    165    

89

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10795    13    8    

15

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    25060    23    1    

25

Производство готовой продукции (работ, услуг) Внешние источники данных Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 Лесное и деревообрабатывающее хозяйство Россия Управленческий учет Платные (руб)

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

10200 руб.

24.06.2021    20708    57    53    

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

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

И главное, знает ли автор книги, которую вообще-то за деньги продают, о подобном нарушении авторских прав, и как к этом относится администрация Инфостарта? Напомню фразочку с форзаца любой почти книги по 1С: "Никакая часть не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Полное или частичное копирование материалов книги без письменного разрешения запрещается". Так, вроде бы.
Trukit; JammShoot; Гриффин; Boulala; shalimski; artbear; bulpi; borda4ev; SayapinaTI; +9 Ответить
2. ignor 237 21.05.14 11:50 Сейчас в теме
Автор, почитай ещё мою статью до кучи http://1cniku.ru/Articles/V8OLE.html
TanyTany; +1 Ответить
3. avz_1C 10 16.11.14 12:20 Сейчас в теме
Автор, спасибо.
Кто бы и что ни говорил, но Вы сделали нужную работу.
Ставлю "+".
4. DERL 19.10.17 13:35 Сейчас в теме
Все супер, очень помогло с подключением к другой базе 8.3
Однако после выполнения запроса с выгрузкой в дерево в базе ОЛЕ, это дерево как COMОбъект, и как его преобразовать в обычное дерево формы не могу понять. Есть решения?
Оставьте свое сообщение