//********************************************************************************** //получаем макет на сервере, сохраняем в файл и передаем на клиента &НаСервере Функция ПолучитьДанныеМакета() АдресХранилища = Новый УникальныйИдентификатор(); Макет = ПолучитьОбщийМакет("Договор"); ВременныйФайл = ПолучитьИмяВременногоФайла("doc"); Макет.Записать(ВременныйФайл); Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл), АдресХранилища); УдалитьФайлы(ВременныйФайл); Возврат Адрес; КонецФункции //********************************************************************************** //код сотрудника, нужно для создания уникального имени файла для каждого пользователя &НаСервере Функция КодПользователя(Пользователь) Возврат СокрЛП(Пользователь.Сотрудник.Код); КонецФункции //********************************************************************************** //Ссылка - ссылка на договор(ссылка справочника, нужно для подстановки реквизитов) //РеквизитыДляПечати - структура с нужными реквизитами &НаКлиенте Процедура ПечатьДоговора(Ссылка,РеквизитыДляПечати) Пользователь = ОбщегоНазначения.ТекущийПользователь(); Каталог = КаталогВременныхФайлов(); Каталог = ?(Прав(Каталог,1) = "\", Каталог, Каталог+"\"); ПолноеИмяФайла = Каталог+"Договор_"+КодПользователя(Пользователь)+".doc"; Попытка Индификатор = ПолучитьДанныеМакета(); МакетДоговора = ПолучитьИзВременногоХранилища(Индификатор); МакетДоговора.Записать(ПолноеИмяФайла); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Попытка MSWord = Новый COMОбъект("Word.Application"); Исключение Сообщить("Ошибка при попытке создать объект ""MS Word""!" + Символы.ПС + "Возможно приложение ""MS Word"" не установлено или установлено неправильно.", СтатусСообщения.Внимание); КонецПопытки; MSWord.Documents.Open(ПолноеИмяФайла); Попытка Документ = MSWord.Application.Documents(1); Документ.Activate(); Исключение // Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается. Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); MSWord.Application.Quit(); Возврат; КонецПопытки; //******************************************* //тут выполняем замену Попытка Замена = Документ.Content.Find; Замена.Execute("{ЧтоМеняем}", Ложь, Истина, Ложь, , , Истина, , Ложь, "На что меняем"); Исключение КонецПопытки; // Делаем видимым приложение и активизируем его. MSWord.Application.Visible = Истина; MSWord.Activate(); КонецПроцедуры
// Параметры: // Адрес - адрес файла на сервере // ЛокальныйПуть - путь для сохранения файла на локальном компьютере // ВыдаватьСообщения - признак необходимости выдачи сообщений в случае ошибки // (необязательный, по умолчаню равен Истина) // // Возвращаемое значение: // Число - результат получения файла с сервера // 0 - успешно; // 1 - неправильный параметр // 2 - неправильные код пользователя или пароль для доступа к "закрытой" части сайта // 3 - ошибка подключения к веб-сайту. // Функция ПолучитьФайлССервера(Знач Адрес, Знач ЛокальныйПуть, Знач ВыдаватьСообщения = Истина, Знач Соединение = Неопределено) Экспорт Если НЕ ЗначениеЗаполнено(Адрес) ИЛИ НЕ ЗначениеЗаполнено(ЛокальныйПуть) Тогда ЗаписатьОшибку("Невозможно подключиться к сети Интернет: не инициализированы внутренние переменные."); Возврат 1; КонецЕсли; Если Соединение = Неопределено Тогда // Установка параметров прокси-сервера Если ПроксиСерверТребуетАутентификации Тогда ПроксиСервер = Новый ИнтернетПрокси(); ПроксиСервер.Пользователь = ПользовательПроксиСервера; ПроксиСервер.Пароль = ПарольПроксиСервера; КонецЕсли; // Создание HTTP-соединения с сервером обновлений Соединение = Новый HTTPСоединение(СерверОбновлений, , КодПользователяСервераОбновлений, ПарольСервераОбновлений, ?(ПроксиСерверТребуетАутентификации, ПроксиСервер, Неопределено)); КонецЕсли; Попытка СоздатьКаталог(ПолучитьКаталогФайла(ЛокальныйПуть)); Соединение.Получить(Адрес, ЛокальныйПуть); Исключение // "Ошибка аутентификации при доступе Адресу" ОписаниеОшибки = ОписаниеОшибки(); Если Найти(ОписаниеОшибки, Адрес) > 0 И НЕ Найти(ОписаниеОшибки, "не обнаружен") Тогда ЗаписатьПредупреждение("Ошибка при обращении к http://" + Соединение.Сервер + "/" + Адрес + " |" + ОписаниеОшибки); Если ВыдаватьСообщения Тогда ОбщегоНазначения.ПредупреждениеОбОшибке("Неправильно указан код пользователя или пароль."); КонецЕсли; Возврат 2; КонецЕсли; // Файл не обнаружен Если Найти(ОписаниеОшибки, "не обнаружен") Тогда Сообщение = "Ошибка при обращении к http://" + Соединение.Сервер + "/" + Адрес + " |" + ОписаниеОшибки; ЗаписатьПредупреждение("Ошибка при обращении к http://" + Соединение.Сервер + "/" + Адрес + " |" + ОписаниеОшибки); Если ВыдаватьСообщения Тогда ОбщегоНазначения.СообщитьОбОшибке(Сообщение); КонецЕсли; Возврат 3; КонецЕсли; // Ошибка работы с Интернет: a timeout was reached Сообщение = "Ошибка при обращении к http://" + Соединение.Сервер + "/" + Адрес + " |" + ОписаниеОшибки; ЗаписатьПредупреждение(Сообщение); Если ВыдаватьСообщения Тогда ОбщегоНазначения.СообщитьОбОшибке(Сообщение); КонецЕсли; Возврат 3; КонецПопытки; ЗаписатьИнформацию("Файл успешно получен (адрес: http://" + Соединение.Сервер + "/" + Адрес + "; локальный файл: " + ЛокальныйПуть + ")."); Возврат 0; КонецФункции