Книга знаний

1С:Предприятие / v8 / Приемы программирования / OLE, COM

v8: Как получить печатную форму из удаленной базы

Описана методика обращения к удаленной ИБ посредством DCOM, выполнения в ней некоторых действий и получение данныхАвтор статьи: Asmody | Редакторы:
Последняя редакция №2 от 05.09.06 | История
URL: http://kb.mista.ru/article.php?id=362

Ключевые слова: Удаленная база, OLE, DCOM, печатная форма, V8.Application


Исходная задача


Пусть есть некоторая Конфигурация1, установленная на Компьютере1 (назовем его локальным), и Конфигурация2 (возможно с другой структурой), установленная на Компьютере2 (его назовем удаленным). Компьютеры находятся в одной Windows-сети – условие необходимо для работы DCOM. Требуется на Компьютере1 находясь в Конфигурации1 сформировать печатную форму из Конфигурации2 и вывести ее на печать.

Решение


Решение основано на возможности запуска 1С:Предприятие 8.0 в режиме OLE на удаленном компьютере. Основная идея: создаем OLE-объект V8.Application на удаленном компьютере (Компьютер2 в нашей задаче).  При этом экземпляр 1С:Предприятия будет запущен именно на Компьютере2. Используя этот объект, формируем печатную форму. Формирование печатной формы должно быть реализовано в Конфигурации2. В результате должен быть получен объект типа "Табличный документ". Поскольку через OLE можно передавать только значения базовых типов, преобразуем этот табличный документ в строку. Это можно сделать через функцию ЗначениеВСтрокуВнутр(). На локальном компьютере останется только выполнить обратные преобразования - выполнить ЗначениеИзСтрокиВнутр(), и вывести полученный табличный документ.

Код


(в Конфигурации1)
Процедура КнопкавыполнитьНажатие()
ИмяУдаленногоКомпьютера="Компьютер2";
СтрокаПодключенияКУдаленнойБазе="File=""D:\1CBases\Конфигурация2; Usr=""Пользователь"";"; // путь к ИБ должен формироваться относительно файловой системы _удаленного_ компьютера!!!
УдаленнаяБаза = Новый COMОбъект("V8.Application", ИмяУдаленногоКомпьютера); // экземпляр COM-объекта создается на удаленном компьютере
УдаленнаяБаза.Connect(СтрокаПодключенияКУдаленнойБазе);
ТабДок = ЗначениеИзСтрокиВнутр(УдаленнаяБаза.getPrintForm()); // получаем печатную форму из удаленной базы
ТабДок.Показать();
КонецПроцедуры


(в Конфигурации2 - должен быть расположен либо в модуле приложения, либо в общем модуле)
Функция getPrintForm() Экспорт
      ТабДок = СформироватьПечатнуюФорму(); // формируем нужную форму. На выходе получаем объект типа Табличный документ
      Возврат ЗначениеВСтрокуВнутр(ТабДок); // поскольку по OLE передаются только значения базовых типов, сворачиваем табличный документ в строку
КонецФункции


Ограничения


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


Заключение


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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика