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

Публикация № 277982 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. Yashazz 4305 15.05.14 11:01 Сейчас в теме
Внагляк передранный из Михайлова мануал. Чего нового-то, чего своего-то, окромя копипаста? Я вот щас Хрусталёву по главам выложу, тоже стартманей подыму, так?

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

И главное, знает ли автор книги, которую вообще-то за деньги продают, о подобном нарушении авторских прав, и как к этом относится администрация Инфостарта? Напомню фразочку с форзаца любой почти книги по 1С: "Никакая часть не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Полное или частичное копирование материалов книги без письменного разрешения запрещается". Так, вроде бы.
JammShoot; Гриффин; Boulala; shalimski; artbear; bulpi; borda4ev; SayapinaTI; +8 Ответить
2. ignor 235 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Объект, и как его преобразовать в обычное дерево формы не могу понять. Есть решения?
Оставьте свое сообщение

См. также

Этюды по программированию. Взаимодействие с Microsoft Word Промо

Внешние источники данных v8 Бесплатно (free)

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    34324    milkers    23    

Обмен сообщениями "Системы взаимодействия 1С" с "НЕ 1С" системой. Где хранятся файлы вложений и как получить их местоположение в хранилище s3?

Внешние источники данных WEB Обмен между базами 1C v8 1cv8.cf Бесплатно (free)

Вы когда-нибудь задавались вопросом: где хранятся сообщение и их прикрепления «Системы взаимодействия 1С»? Мне пришлось!

31.05.2022    720    Zlohobbit    3    

Получение данных таблиц PostgreSQL через внешний источник данных

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Получение данных таблиц напрямую из PostgreSQL через объект конфигурации "Внешний источник данных", с развёрнутым сервером 1С на Linux.

31.01.2022    1287    AndreyNit    4    

ВИДы на жительство. Использование внешних источников данных в прикладных задачах

Внешние источники данных v8 Бесплатно (free)

На Infostart Meetup Novosibirsk выступил ведущий разработчик МКК «Ваш Инвестор» Вадим Фоминых. Он на практических примерах показал коллегам, как его команда использует внешние источники данных в прикладных задачах, призвал не отказываться от этого инструмента и объяснил – почему.

19.04.2021    2691    Shmell    5    

Кэширование COM-соединения. Три способа Промо

Внешние источники данных WEB Обмен между базами 1C v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    44044    YPermitin    42    

Бухгалтерия 3.0. Ошибка загрузки билетов из Smartway

Внешние источники данных v8::БУ 8.3.14 БП3.0 Россия БУ Бесплатно (free)

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

18.03.2021    1108    maria_vl    2    

Правила обмена больше не нужны

Внешние источники данных Обмен между базами 1C WEB Файловые протоколы обмена (TXT, XML, DBF), FTP v8 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    16119    Nikola23    40    

Работа с Ворд через СОМ-Объект

Внешние источники данных v8 Бесплатно (free)

Статья представляет собой еще один велосипед на тему формирования документов на основе шаблонов через СОМ-Объект. Как и все другие велосипеды, этот написан потому, что другие велосипеды - плохие. В действительности, если погуглить, мы получим огромное количество ссылок на советы в стиле "сделай так и будет тебе счастье". Но почему "так", зачем "так", какие есть альтернативы - авторы советов не раскрывают. Хуже того, половина найденных таким способом рецептов окажутся откровенно вредными. Судя по тому, как вредные рецепты копируются из совета в совет, большинство разработчиков, из тех, что переписываются на форумах, просто воспроизводят то, что когда-то нагуглили сами. Ну да, работает - не трогай :-)

15.02.2021    13470    Sindbad_M    36    

Перенос данных из учетных программ Парус в конфигурации 1С Промо

Внешние источники данных v7.7 v8 БП2.0 ЗУП2.5 ЗКБУ БГУ 1С7:Бух 1С7:ЗиК 1С7:ББУ Россия БУ Госбюджет Бесплатно (free)

Статья посвящена анализу процессов переноса данных из учетных программ Парус в конфигурации 1С.

05.11.2012    55111    sklowsky    16    

DaJet Exchange: обмен данными с 1С (часть 1)

Внешние источники данных v8 Бесплатно (free)

Типовой механизм обмена данными 1С, основанный на планах обмена, имеет ряд существенных недостатков. Для преодоления этих недостатков предлагается рассмотреть теоретические основы использования альтернативных механизмов, а также предлагается обсудить реализацию практического решения, оптимального с точки зрения автора.

11.01.2021    5028    zhichkin    14    

Структура обработки загрузки номенклатуры поставщика с примерами и комментариями (часть 2)

Внешние источники данных v8 1cv8.cf Бесплатно (free)

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

17.10.2020    1289    malikov_pro    3    

Структура обработки загрузки номенклатуры поставщика с примерами и комментариями (часть 1)

Внешние источники данных v8 УНФ Бесплатно (free)

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

12.10.2020    1583    malikov_pro    0    

Сканируем без сканера или MXL to JPG Промо

Внешние источники данных Универсальные функции Печатные формы v8 1cv8.cf Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    35069    shakmaev    47    

Загрузка данных из Algoritm-S в конфигурацию "Бухгалтерия предприятия 3.0 (3.0.79.21) "

Розничная торговля Внешние источники данных v8 БП3.0 Розничная и сетевая торговля (FMCG) Фармацевтика, аптеки Россия Бесплатно (free)

В статье представлен шаблон обработки для загрузки некоторых данных из программы Algoritm-S в конфигурацию "Бухгалтерия предприятия 3.0 (3.0.79.21)

04.08.2020    2117    RPGrigorev    0    

Соединение COM в 1С: примеры и инструкции

Внешние источники данных v8 Бесплатно (free)

Ни для кого не секрет, что преимуществом 1С является динамичность системы для работы с основными технологиями. Одно из подтверждений динамичности системы - это простота подключения к данным другой базы. В этой статье я опишу свой опыт работы с данными системы Галактика ERP. Возникла задача организовать удобный интерфейс для пользователей при работе с определенными выборками по заданным параметрам.

31.07.2020    1751    Koder_Line    4    

Интеграции с сервером SQL. Быстро и просто

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Решаем вопросы экспорта/импорта данных в базы отличного от 1С происхождения.

06.07.2020    6783    Infector    4    

Структура обработки загрузки цен и остатков поставщика с примерами и комментариями

Внешние источники данных WEB v8 1cv8.cf Россия Бесплатно (free)

В статье опишу структуру обработки по загрузке цен и остатков от поставщика с примерами.

27.06.2020    2590    malikov_pro    0    

Как мы загружаем данные в "Центр управления кассами Магнита"

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Статья о том, как мы делали механизм загрузки больших объемов данных в "Центр управления кассами Магнита"

08.05.2020    6367    chernenko_vv    26    

Интеграция СуперОкна7 и УНФ

Внешние источники данных v8 УНФ Россия Бесплатно (free)

Изучаем базу данных СуперОкна7, смотрим возможности передачи и получения информации.

08.05.2020    3741    vostok1.dz    3    

Синхронизация БИТ:СКУД 8 с Parsec.Net 2.5

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Настройка синхронизации БИТ:СКУД 8 с Parsec.Net.2.5, выгрузка данных из внешней системы контроля доступа.

04.05.2020    5452    RPGrigorev    0    

Получение данных из Сигур

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Получение данных из СКУД Сигур (без танцов с бубном)

25.12.2019    8559    skaoxy    10    

Доступ к базе 1С из MariaDB

Внешние источники данных v8 БП2.0 Бесплатно (free)

Прямое соединение MariaDB с базой на сервере MSSQL. Получение доступа к актуальным данным 1С из сторонних программ.

25.12.2019    5495    serg7965    1    

Выгрузка из 1С номенклатуры со штрихкодами без программирования

Загрузка и выгрузка в Excel Внешние источники данных v8 УТ11 Россия Бесплатно (free)

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    32077    user1114182    12    

Вставка BLOB в таблицы ORACLE средствами 1С 8.х с использованием Microsoft OLEDB Provider

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Столкнулся с необходимостью выгружать картинки из 1С 8 в ORACLE-таблицу.

08.08.2019    5642    nomad_irk    0    

Выгрузка данных в таблицу MS SQL SERVER

Внешние источники данных v8 Бесплатно (free)

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER через COM.

02.07.2019    13764    EvgenSav    18    

1С и компьютерное зрение: новый подход к контролю за ассортиментом магазина

Розничная торговля Внешние источники данных v8 1С:Франчайзи, автоматизация бизнеса УУ Бесплатно (free)

Машинное зрение в магазинах и 1С. Как поднять эффективность торгового предприятия (магазин. кафе, шоурум и т.д.) с совершенно неожиданной стороны? Как получить реальные демографические данные покупателей и, самое главное, как это использовать в повседневной работе магазина? Как можно расширить привычные ABC и XYZ анализ, добавив в них пласт данных о трафике и демографии покупателей? Что необходимо для 1С, чтобы использовать данные видеоанализа людского трафика?

20.06.2019    10390    osipov_cvizi    16    

MS Access и 1С. Что, когда и зачем?

Внешние источники данных v8 Бесплатно (free)

Об использовании MS Access в связке с 1С. Можно ли использовать продукты Office на сервере. Когда Access может быть полезен. Примеры работы и другое.

09.04.2019    37894    YPermitin    47    

Программное чтение файла ibases.v8i

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Пример кода, который позволяет читать файл списка баз данных ibases.v8i.

02.04.2019    5526    Andryza    17    

RabbitMQ + Конвертация Данных 3.0

Внешние источники данных Обмен между базами 1C Файловые протоколы обмена (TXT, XML, DBF), FTP v8 КД Бесплатно (free)

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

21.03.2019    32536    barelpro    87    

Загрузка ЭЛН (электронных листов нетрудоспособности) из файлов

Внешние источники данных Зарплата v8 УПП1 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Что делать, если по каким-то причинам нет возможности разместить 1С и Крипто-Про на одном рабочем месте? Правильно - открывать конфигуратор и пилить. Благо, там не сложно. Непосредственно решение для УПП 1.3. Для ЗиК 2.5 и Комплексной автоматизации должно быть аналогично.

07.02.2019    8004    SatanClaws    6    

RabbitMQ, Python и Windows. Step By Step

Внешние источники данных v8 Бесплатно (free)

Работа с шиной RabbitMQ, используя Python на Windows. Пошаговый быстрый старт.

13.12.2018    12596    w.r.    10    

Из 1С в IIKO: Передаем перемещения УТ в приходные накладные

Внешние источники данных Оптовая торговля v8 УТ11 Рестораны, кафе и фаст-фуд УУ Бесплатно (free)

Рассмотрение вариантов передачи документа "Перемещение товаров" из Управление торговлей 11 в документ "Приходная накладная" IIKO.

12.09.2018    10224    oyti    9    

IIKO (Айко). Обмениваемся накладными с 1С

Внешние источники данных v8 БП3.0 Рестораны, кафе и фаст-фуд БУ УУ Бесплатно (free)

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

01.06.2018    31180    oyti    43    

Юридически значимый электронный документооборот с Контур.Диадок

Внешние источники данных v8 НУ НДС Бесплатно (free)

Пример использования компоненты DiadocComApi http://diadocsdk-1c.readthedocs.io/ru/latest/

31.05.2018    15619    savostin.alex    13    

Интеграция Zimbra и 1С

Внешние источники данных СRM v8 Россия УУ Бесплатно (free)

В публикации описывается способ интеграции 1С с почтовым сервером Zimbra, используя SOAP сервис. Рассматривать вопрос интеграции будем на примере бизнес задачи, из блока CRM. Реализации общей адресной книги(GAL-Global Address List) между сотрудниками. Сотрудники(компания) ведет весь учет в 1С, в том числе и элементы CRM, а Zimbra выступает лишь в роли почтового сервиса. Сделать данную публикация побудило отсутствие в интернете готовых примеров совместной работы 1С и Zimbra. Надеюсь, она поможет кому-либо сократить время на реализацию похожей задачи.

16.04.2018    13573    Гексагон    18    

Как написать обмен с 50 поставщиками и не сойти с ума. Теория

Файловые протоколы обмена (TXT, XML, DBF), FTP Внешние источники данных Обмен между базами 1C v8 1cv8.cf Бесплатно (free)

Поставщики бывают разные. Одни готовы подстроиться под наш формат - другие нет; одни обмениваются SOAPом - другие RESTом; одни работают с кодами товаров - другие с идентификаторами предложений; одни готовы отдать статус по заказу - другие нет; у одних есть справочники, элементы которых вам нужно сопоставить со своими - у других нет. В общем очень разные.

09.04.2018    12096    m-rv    12    

Обмен сведениями о пособиях с ФСС для Зарплата и Управление персоналом 2.5.129.3

Внешние источники данных Зарплата v8 v8::СПР ЗУП2.5 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Ошибка отправки файла при обмене сведениями о пособиях с ФСС. Зарплата и Управление Персоналом, редакция 2.5 (2.5.129.3).

06.03.2018    20701    Igorexa    30    

Загрузка данных из DocsVision

Внешние источники данных v8 Бесплатно (free)

Необходимо было реализовать загрузку данных из программы документооборота "DocsVision 5" в "1С:Документооборот 8". Данное описание оставляю больше для себя, чтобы не забыть, ну и, может, еще кому поможет, т.к. не нашел нигде нормального описания.

17.01.2018    10323    apxi    6    

Создание мобильного клиента 1С на Android с использованием HTTP-сервисов

Внешние источники данных Мобильная разработка v8 v8::Mobile Бесплатно (free)

Краткий курс по созданию мобильного приложения на Android, который связывается с сервером 1С через HTTP-сервис. Публикация рассчитана на тех, кто хорошо знаком с программированием на платформе 1С и владеет основами программирования на платформе Android (умеет создавать Activity и знает, как устроена структура проекта).

03.11.2017    36649    cdiamond    21    

Как сделать конфигурацию «1С:Предприятие 8» приложением QuickBooks. Проходим авторизацию OAuth 1.0a+OpenID 2.0

Внешние источники данных v8 Бесплатно (free)

Пришло время, когда интеграция со сторонними организациями и их приложениями стала необходимостью для успешного ведения бизнеса. В этой статье будет рассмотрено прохождение авторизации OAuth 1.0a+OpenID 2.0 и превращение конфигурации «1С:Предприятие 8» в приложение QuickBooks.

10.09.2017    21893    pbazeliuk    30    

Внешние источники данных. Примеры (добавление, изменение, удаление). Реализовано в версии 8.3.5.1068 и позднее

Внешние источники данных Механизмы платформы 1С v8::blocking v8::Запросы 1cv8.cf Бесплатно (free)

В версии платформы 8.3.5.1068 (и позднее) появилась возможность добавления, изменения и удаления данных во внешних источниках программными средствами 1С. Примеры данной возможности представлены в данной статье.

19.04.2017    43893    miller-adm    8    

Установка гиперссылок в PDF

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Установка гиперссылок в PDF. Решение задачи по проставлению ссылок в файл PDF.

06.04.2017    15995    semenich_b    13