====== Получение печатной формы из удаленной базы ======
Описана методика обращения к удаленной ИБ посредством DCOM, выполнения в ней некоторых действий и получение данных
==== Исходная задача ====
Пусть есть некоторая Конфигурация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 передаются только значения базовых типов, сворачиваем табличный документ в строку
КонецФункции
==== Ограничения ====
Следует учесть, что полученная таким образом печатная форма будет "оторванной" от своих данных. Т.е., как минимум, не будут работать расшифровки. Также возможны проблемы, если при формировании табличного документа в его параметры передаются **//ссылки//**, а **//не представления//** объектов
==== Заключение ====
Подобный метод можно использовать для других случаев обращения к удаленной ИБ, при этом нет необходимости обеспечивать доступ к такой ИБ на локальном компьютере