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