|
Как передать макет типа ActiveDocument c сервера клиенту | ☑ | ||
---|---|---|---|---|
0
Ampfer
20.01.17
✎
10:43
|
Уважаемые Cпецы,
Переделываю доставшуюся мне по наследству обработку с обычных форм на УФ. Вынес код получения Макета на Сервер. Столкнулся с проблемой передачи макета (тип ActiveDocument Excel). Предложенные Гуглом варианты и танцы с бубнами не помогли. Пробовал также с использованием Временного хранилища. Ниже код этого варианта &На Клиенте Попытка МакетСсылка = ПолучитьМакет("Макет"); Макет = ПолучитьИзВременногоХранилища(МакетСсылка); Книга = Макет.Получить(); ЛистШаблон = Книга.WorkSheets(1); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; &НаСервере Функция ПолучитьМакет(ИмяМакета) УниИд = Новый УникальныйИдентификатор; ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ЭтотМакет = ОбработкаОбъект.ПолучитьМакет(ИмяМакета); Адрес = ПоместитьВоВременноеХранилище(ЭтотМакет,УниИд); Возврат Адрес; КонецФункции Выдает ошибку в строке Макет = ПолучитьИзВременногоХранилища(МакетСсылка); Пробовал также получить книгу на сервере (Макет.Получить()) и передать ее клиенту. Тоже не проходит. Помогите please. |
|||
1
drcrasher
20.01.17
✎
10:51
|
не дешевле макет из екселя в таб док перенести?
|
|||
2
Ampfer
20.01.17
✎
11:32
|
Даже затрудняюсь сказать. В макете три листа Excel. В результате обработки, в Excel файле создаются три листа на каждого контрагента с данными фактических продаж из 1с. В пустые колонки пользователи копированием добавляют бюджетные цифры и таким образом получается план фактный анализ продаж по клиентам.
|
|||
3
bolobol
20.01.17
✎
11:43
|
(2) Спасибо за информацию. И всё же: не дешевле макет из екселя в таб док перенести? В три таб дока?? В ТЧ??? В три ТЧ????
А на сервере эксель имеется? Сохранить актив в файл и загнать в двоичные данные. |
|||
4
Ampfer
20.01.17
✎
12:17
|
(3) Сохранить актив в файл и загнать в двоичные данные.
В три таб дока?? В ТЧ??? В три ТЧ???? Как вариант, только тогда весь код переписывать. Про вариант с сохранением в файл а потом загрузить его на клиенте видел в гугле. Пока не разобрался. А вот про загнать в двоичные данные можно поподробнее |
|||
5
Ampfer
20.01.17
✎
13:50
|
Пробую вариант с сохранением в файл
&НаКлиенте МакетФайл = ПолучитьМакет("Макет"); Попытка Макет = ПолучитьCOMОбъект(МакетФайл); Исключение КомОбъект = 0; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); Возврат; КонецПопытки; &НаСервере Функция ПолучитьМакет(ИмяМакета) //Каталог = ПараметрыСеанса.ТекущийПользователь.РабочийКаталог; //Каталог = ?(Прав(Каталог,1) = "\", Каталог, Каталог+"\"); Каталог = "C:\Users\AVG\"; Если ЗначениеЗаполнено(Каталог) Тогда Попытка ПолноеИмяФайла = Каталог+ИмяМакета+".xlsx"; ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ЭтотМакет = ОбработкаОбъект.ПолучитьМакет(ИмяМакета); ЭтотМакет.Записать(ПолноеИмяФайла); Возврат ПолноеИмяФайла; Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не удалось записать файл "+ОписаниеОшибки(); Сообщение.Сообщить(); Возврат Неопределено; КонецПопытки; Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не указан каталог. Сохранение файла невозможно"; Сообщение.Сообщить(); Возврат Неопределено; КонецЕсли; КонецФункции Файл создается и передается. Но не могу открыть на клиенте. И еще нет свойства РабочийКаталог в ПараметрыСеанса.ТекущийПользователь.РабочийКаталог.Пришось его закоментировать. |
|||
6
Akela has missed
20.01.17
✎
13:58
|
Надо было лишь в своей функции сделать следующее:
ЭтотМакет = ОбработкаОбъект.ПолучитьМакет(ИмяМакета); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); ЭтотМакет.Сохранить(ИмяВременногоФайла); Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); |
|||
7
Evgueni
20.01.17
✎
14:10
|
&НаСервере
Функция ПолучитьМакетСервер(НазваниеМакета) АдресМакета = ПоместитьВоВременноеХранилище(Справочники.МойСправочник.ПолучитьМакет("МойДвоичныйМакетСЭкселемВнутри")); Возврат АдресМакета; КонецФункции &НаКлиенте Процедура НаПечататьЧтоТо() АдресМакета = ПолучитьМакетСервер(); ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресМакета); ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx"); ДвоичныеДанные.Записать(ИмяВременногоФайла); Эксель = Новый COMОбъект("Excel.Application"); Эксель.Visible = 1; Книга = Эксель.WorkBooks.Open(ИмяВременногоФайла); Лист = Книга.WorkSheets(1); //TODO КонецПроцедуры Я так у себя реализовал |
|||
8
Ampfer
20.01.17
✎
16:35
|
to 6,7 Спасибо коллеги, завтра попробую этот вариант
|
|||
9
Ampfer
23.01.17
✎
11:21
|
Заработало в таком виде
&НаСервере Функция ПолучитьМакет(ИмяМакета) Попытка ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xls"); ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ЭтотМакет = ОбработкаОбъект.ПолучитьМакет(ИмяМакета); ЭтотМакет.Записать(ИмяВременногоФайла); Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла)); Возврат Адрес; Исключение Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не удалось записать файл "+ОписаниеОшибки(); Сообщение.Сообщить(); Возврат Неопределено; КонецПопытки; КонецФункции &НаКлиенте Попытка МакетФайл = ПолучитьМакет("Макет"); ДвоичныеДанные = ПолучитьИзВременногоХранилища(МакетФайл); ИмяФ = ПолучитьИмяВременногоФайла("xls"); ДвоичныеДанные.Записать(ИмяФ); Макет = ПолучитьCOMОбъект(ИмяФ); //инициализируем COM-объект Исключение Сообщить("Не удалось получить макет"); Сообщить(ОписаниеОшибки()); КонецПопытки; Еще раз большущее всем спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |