Имя: Пароль:
1C
1С v8
Вывод в защищенный шаблон WORD
,
0 espanol
 
13.09.12
14:42
Есть шаблон вордовского документа, где в ограничении редактирования включена защита под паролем. Для редактирования доступна лишь некоторые поля. В них я помещаю свои переменные.
Делаю вывод в переменные этого документа данные из 1С.
В предприятии запускаю этот шаблон, а там переменные не заполняются. Если выключить защиту, то заполняются.
Подскажите пожалуйста, как сделать так чтобы переменные в защищенном режиме заполнялись, может как-то в коде надо прописать пароль...?


Примерный код, но еще не оптимизированный:

   Путь      = Константы.ПутьКШаблонам.Получить() + "\" + "АКТ ФИЗ ЛИЦО 2011.doc";
   ВремФайл  = ПолучитьИмяВременногоФайла("doc");
   КомОбъект = ПолучитьCOMОбъект(Путь);
   Документ  = КомОбъект.Application.Documents(1);
   
   СтруктураПараметров        = ПолучитьДополнительныеПараметры();
   СтруктураПараметровОбъекта = СтруктураПараметровОбъекта();


   Попытка Документ.Content.Find.Execute("1cPFIO",                    Ложь,Истина,Ложь,,,Истина,,Ложь, СтруктураПараметровОбъекта.Наименование); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cPFIO",                    Ложь,Истина,Ложь,,,Истина,,Ложь, СтруктураПараметровОбъекта.Наименование); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cPFIOsokr",                Ложь,Истина,Ложь,,,Истина,,Ложь, СокрФИОКонтрагента); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cDogovorNumber",           Ложь,Истина,Ложь,,,Истина,,Ложь, СокрЛП(СтруктураПараметровОбъекта.НомерЗаказа)); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cDogovorData",             Ложь,Истина,Ложь,,,Истина,,Ложь, Формат(Дата, "ДЛФ=DD")); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cDogovorNumber",           Ложь,Истина,Ложь,,,Истина,,Ложь, СокрЛП(СтруктураПараметровОбъекта.НомерЗаказа)); Исключение КонецПопытки;
   Попытка Документ.Content.Find.Execute("1cDogovorData",             Ложь,Истина,Ложь,,,Истина,,Ложь, Формат(СтруктураПараметровОбъекта.ДоговорВзаиморасчетов.ДатаНачала, "ДЛФ=DD")); Исключение КонецПопытки;


   Документ.SaveAs(ВремФайл);
   КомОбъект.Application.Quit();
   КомОбъект = Неопределено;
   Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВремФайл));
   УдалитьФайлы(ВремФайл);
   
   ВремФайл = ПолучитьИмяВременногоФайла("doc");
   Данные   = ПолучитьИзВременногоХранилища(Адрес);
   Данные.Записать(ВремФайл);
   УстановитьРасширениеРаботыСФайлами();
   ПодключитьРасширениеРаботыСФайлами();
   ЗапуститьПриложение(ВремФайл);
1 espanol
 
13.09.12
14:57
Никто не знает, жаль...
2 dk
 
13.09.12
15:07
сделай именно шаблоном в ворде (*.dot или *.dotx), а не документом (*.doc)
3 dk
 
13.09.12
15:08
тогда с защитой париться не надо
4 dk
 
13.09.12
15:09
либо при открытии пароль пиши
5 espanol
 
13.09.12
15:12
(4) пример есть? ))
6 espanol
 
13.09.12
15:15
Смысл защиты в том чтобы юзвери не могли изменять текст документа, а те поля в которые выводятся данные из 1С они могут менять.
7 dk
 
13.09.12
15:19
пример открытия по паролю?

В = Новый COMОбъект("Word.Application");
Док = В.Documents.Open(имяФайла,0,0,0,твой_пароль);
8 espanol
 
13.09.12
15:21
(2) чем оно должно помочь то?
9 espanol
 
13.09.12
15:21
(7) жаль, но данный способ не подходит...
10 dk
 
13.09.12
15:24
с шаблоном

В = Новый COMОбъект("Word.Application");
Док = В.Documents.Add(имяФайлашаблона);
....
Док.SaveAs2(НовоеИмя,,,,,пароль_на_изменение_документа);
11 espanol
 
13.09.12
15:37
(10) ну это не то что я имел ввиду ((
12 espanol
 
13.09.12
15:39
Речь идет не о запоролености документа ВОРД, а о его защищенности.
Это можно найти здесь в офисе 2010: Рецензирование -> Ограничить редактирование -> Включить защиту -> Указываем пароль
13 dk
 
13.09.12
15:39
(11) тебе в 1С пароль светить не хочется или в чем проблема?
14 espanol
 
13.09.12
15:40
Можно даже сделать задачу так: шаблон будет не запоролен, вызываем его в 1С, заполняем данными, а когда он открывается у юзверя, он должен стать защищенным перед открытием.
15 dk
 
13.09.12
15:48
Док.Protect("123", 0, 3, 0, -1)
16 espanol
 
13.09.12
16:00
(15) ругается:


{Документ.РеализацияАвтомобилей.Форма.ФормаДокумента.Форма(753)}: Ошибка при вызове метода контекста (Protect)
   Документ.Protect("123", 0, 3, 0, -1);
по причине:
Произошла исключительная ситуация (Microsoft Word): Значение параметра лежит вне допустимого диапазона
17 dk
 
13.09.12
16:04
справки по методу protect у меня почему-то нет (
пробуй экспериментируй
Док.Protect("123")
---
Док.Protect("123", 0, 3)
---
...
версия ворда какая?
18 espanol
 
13.09.12
16:13
(17) версия 2010, посмотрел по ВБА хелпу:
ub Protect(Type As WdProtectionType, [NoReset], [Password], [UseIRM], [EnforceStyleLock])
сделал так:
Документ.Protect(3, , "123");
заработало! Спасибо!
Но вот чето поля с переменными пока не могу менять, наверно надо поэксперементировать...
19 espanol
 
13.09.12
16:20
(17) Эти поля куда я заношу переменные, называются закладки, не в курсе как сделать что бы только они были для редактирования? )
20 espanol
 
13.09.12
16:37
по идее то что мне нужно, делается так: Документ.Protect(2,,"123");
НО в этом случае он мне не заполняем поля данными из 1С...

Как сделать чтоб заполняло?
21 espanol
 
13.09.12
16:57
Жаль что никто не умеет так делать...
22 acsent
 
13.09.12
16:59
закладки это не поля. типа селект, реплэйс
23 espanol
 
13.09.12
17:00
(22) всмысле?
24 dk
 
13.09.12
19:26
дык сначала запалняй а только потом protect делай