![]() |
![]() |
![]() |
|
Active Document перестал работать на 8.3.6.2237 | ☑ | ||
---|---|---|---|---|
0
evorle145
18.09.15
✎
15:39
|
Помогите, чет совсем в ступоре. База клиент-серверная.
&НаКлиенте Процедура СоздатьПечатнуюФормуДоговора(Команда) Макет = ПолучитьМакетСервер(); //серверная функция, записывает макет в файл и возвращает полное имя файла Попытка КомОбъект = ПолучитьCOMОбъект(Макет); //инициализируем COM-объект Исключение КомОбъект = 0; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); КонецПопытки; Падает в исключение! Функция ПолучитьМакетСервер(КомОбъект) Об = РеквизитФормыВЗначение("Объект"); Макет = Об.ПолучитьМакет("Макет"); ИмяФайла = ПолучитьИмяВременногоФайла("doc"); Макет.Записать(ИмяФайла); Возврат ИмяФайла; КонецФункции Где туплю, подскажите? |
|||
1
ВедущийП
18.09.15
✎
15:41
|
Текст ошибки?
|
|||
2
evorle145
18.09.15
✎
15:42
|
{Справочник.ДоговорыКонтрагентов.Форма.ФормаЭлемента.Форма(1010)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: -2147221020(0x800401E4): Синтаксическая ошибка
|
|||
3
evorle145
18.09.15
✎
15:44
|
(1) , забыл уточнить, в файлом варианте все работает!
|
|||
4
Записьдампа
18.09.15
✎
15:45
|
(0) Файловые системы на клиенте и сервере - очень разные вещи. Начиная от расположения файлов и кончая правами доступа.
|
|||
5
evorle145
18.09.15
✎
15:47
|
(4) , понимаю. Но ведь тут сделано все вроде по инструкции как http://catalog.mista.ru/public/270277/ . Но com объект на клиенте создать не может...
|
|||
6
ВедущийП
18.09.15
✎
15:51
|
Windows 32 разрядный?
|
|||
7
evorle145
18.09.15
✎
15:52
|
(6) не, 64
|
|||
8
Записьдампа
18.09.15
✎
15:56
|
(5) Это к автору писульки на нимфостарте, плз. Ты сохраняешь файл по пути для сервера, а потом пытаешся читать его на клиенте. А это возможно только в файловой базе или в случае когда сервер запущен на той же машине.
|
|||
9
evorle145
18.09.15
✎
15:58
|
(8) , так а как же тогда? читать тоже на сервере что ли?
|
|||
10
Записьдампа
18.09.15
✎
16:03
|
(9) Передавать тушку файла, из которого ты создаешь комобъект, через временное хранилище.
|
|||
11
Serginio1
18.09.15
✎
16:03
|
Возвращай Двоичные Данные и записывай на клиенте в папки на которые есть разрешения в Ворде итд.
|
|||
12
ВедущийП
18.09.15
✎
16:06
|
(5) Сохраняй файл в общей папке, и отдавай путь типа \\server\share\fail.doc
|
|||
13
ВедущийП
18.09.15
✎
16:09
|
Функция ПолучитьМакетСервер(КомОбъект)
Об = РеквизитФормыВЗначение("Объект"); Макет = Об.ПолучитьМакет("Макет"); ИмяФайла = ПолучитьИмяВременногоФайла("doc"); СтрЗаменить(ИмяФайла, КаталогВременныхФайлов(), "\\server\share\"); Макет.Записать(ИмяФайла); Возврат ИмяФайла; КонецФункции |
|||
14
ВедущийП
18.09.15
✎
16:09
|
Ессесно надо добавить ИмяФайла=
ИмяФайла = СтрЗаменить(ИмяФайла, КаталогВременныхФайлов(), "\\server\share\"); |
|||
15
ВедущийП
18.09.15
✎
16:10
|
В папку должен доступ иметь пользователь под которым запущен сервер 1С
|
|||
16
evorle145
18.09.15
✎
16:11
|
(13) , то есть проблема в том , что на клиенте я не могу обратиться к файлу, у которого путь такой: C:\Users\USR1CV82\AppData\Local\Temp\ ?
|
|||
17
evorle145
18.09.15
✎
16:16
|
(11) это то есть так делать:
&НаСервере Функция ПолучитьМакетСервер(АдресФайлаВХранилище) Об = РеквизитФормыВЗначение("Объект"); Макет = Об.ПолучитьМакет("Макет"); ИмяФайла = ПолучитьИмяВременногоФайла("doc"); Макет.Записать(ИмяФайла); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); Возврат ИмяФайла; КонецФункции И потом на клиенте ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище ); ДвоичныеДанные.Записать(ПолучитьИмяВременногоФайла("doc")); |
|||
18
ВедущийП
18.09.15
✎
16:23
|
(16) Путь к файлу, который находится на сервере. А ты или не на сервере, или, если на сервере, у тебя нет доступа к папке пользователя, под которым запущен сервер 1с.
|
|||
19
evorle145
18.09.15
✎
16:27
|
(18) , да, доступа нет, совершенно верно. Сейчас буду делать как вы сказали. Только хотел бы еще просить взглянуть на (17), что я не так тут сделал, что опять валится в исключение, вот сам код:
Макет = ПолучитьМакетСервер(АдресФайлаВХранилище); //серверная функция, записывает макет в файл и возвращает полное имя файла ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище ); ИмяФ = ПолучитьИмяВременногоФайла("doc"); ДвоичныеДанные.Записать(ИмяФ); Попытка КомОбъект = ПолучитьCOMОбъект(ИмяФ); //инициализируем COM-объект Исключение КомОбъект = 0; Сообщение = Новый СообщениеПользователю; Сообщение.Текст = ОписаниеОшибки(); Сообщение.Сообщить(); КонецПопытки; |
|||
20
evorle145
18.09.15
✎
16:28
|
В функцию добавил помещение во временное хранилище:
Функция ПолучитьМакетСервер(АдресФайлаВХранилище) Об = РеквизитФормыВЗначение("Объект"); Макет = Об.ПолучитьМакет("Макет"); ИмяФайла = ПолучитьИмяВременногоФайла("doc"); Макет.Записать(ИмяФайла); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); Возврат ИмяФайла; КонецФункции |
|||
21
Serginio1
18.09.15
✎
16:43
|
(17) А разве нельзя просто
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла); Возврат ДвоичныеДанные ; |
|||
22
evorle145
18.09.15
✎
16:46
|
(21) Может быть и так тоже работает! Прошу меня просить, код в (19)-(20) полностью рабочий!! Спасибо больше Serginio1 и ВедущийП за помощь! Воспользовался советом в (11)
|
|||
23
Serginio1
18.09.15
✎
16:52
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |