Имя: Пароль:
1C
1С v8
Работа с Вордовским файлом
0 igorius
 
29.09.15
12:36
Всем добрый день. Есть такая проблема: есть справочник договора, в реквизиты которых пользователь записывает ключевые данные договора, после он нажимает печать и открывается вордовский файлик с шаблоном договора, в котором вместо ключевых слов в квадратных скобках 1с вписывает значения реквизитов. Все работало хороша, пока я не поставил в ворде режим ограниченного редактирования, оставив лишь тот текст который может изменятся в договоре. Как только я это сделал начало выбивать ошибку метода (Execute). Кто, с таким сталкивался - можете подсказать как это исправить? Заранее спасибо, надеюсь нормально объяснил суть проблемы.
1 igorius
 
29.09.15
12:45
Меня посещали мысли как то программно снять пароль режима ограничения перед заменой, а потом опять поставить, но вот как это сделать.... ?
2 jurassic
 
29.09.15
12:46
пускай себе меняют что угодно. тебе жалко что ли?
3 Maxwell198705
 
29.09.15
12:49
Предметно ничего предложить не могу, но как правило они для того в Word  и выводятся, чтобы их можно было в удобной форме(для пользователей более менее соображающих в word) редактировать.А так в печатную форму 1С с блокировкой, чтобы с word не заморачиваться
4 igorius
 
29.09.15
12:53
(3) Я бы может и по другом сделал, но задача именно так и стоит...
5 igorius
 
29.09.15
12:54
(2) док 10 стр, что бы менеджер не вычитывал что там наменял лишнего клиент, это и делается
6 jurassic
 
29.09.15
12:55
борьба с копипастом предусматривается?
7 Maxwell198705
 
29.09.15
13:00
Вариант с выводом в PDF
8 Масянька
 
29.09.15
13:04
(4) Записывай в ворд, но не открывай. Ворд.
9 dk
 
29.09.15
13:07

    Зн1 = ФирмаВыбран.Получить("рсчет");
    Зн2 = ФирмаВыбран.Получить("банк");
    Зн3 = ФирмаВыбран.Получить("ксчет");
    Зн4 = ФирмаВыбран.Получить("БИК");
    
    Если ПустоеЗначение(Зн1) = 1 Тогда
        Зн1 = "________________________________";
    КонецЕсли;
    Если ПустоеЗначение(Зн2) = 1 Тогда
        Зн2 = "____________________________";
    КонецЕсли;
    Если ПустоеЗначение(Зн3) = 1 Тогда
        Зн3 = "_______________________________";
    КонецЕсли;
    Если ПустоеЗначение(Зн4) = 1 Тогда
        Зн4 = "______________";
    КонецЕсли;    
    
    Док.Bookmarks("ФирмаБанк1").Range.Text                    = "Р./сч. " + Зн1 + " " + Зн2 + " к/сч. " + Зн3 + " БИК " + Зн4;
    
    Зн = ФирмаВыбран.Получить("юрадрес");
    Если ПустоеЗначение(Зн) = 0 Тогда
        Док.Bookmarks("ФирмаЮрАдрес1").Range.Text            = "Юридический адрес: " + Зн;
    Иначе
        Док.Bookmarks("ФирмаЮрАдрес1").Range.Text            = "Юридический адрес: _________________________________________________________________";
    КонецЕсли;
    
    Док.Protect(2, -1, "***************");    //wdAllowOnlyFormFields = 2;
    
    Если ФС.СуществуетФайл(ИмяДляСохранения) = 1 Тогда
        Попытка
            ФС.УдалитьФайл(ИмяДляСохранения);
        Исключение
            Сообщить("Ошибка при удалении файла: " + ИмяДляСохранения);
        КонецПопытки;
    КонецЕсли;
    
    Попытка
        Док.SaveAs2(ИмяДляСохранения, wdFormatXMLDocument, 0, "", 0, "********************");
        Сообщить("Записан файл: " + ИмяДляСохранения);
    Исключение
        Сообщить("Ошибка при сохранении файла: " + ОписаниеОшибки());
    КонецПопытки;

    Попытка
        Док.Close(ексНет);
    Исключение
    КонецПопытки;
    
    Попытка
        Ворд.Quit(ексНет);
    Исключение
    КонецПопытки;
    
    Если ФС.СуществуетФайл(ИмяДляСохранения) = 1 Тогда
        Если (ПустоеЗначение(Элем.Емэйл) = 0) И (ЕстьПочта = Да) Тогда
            глОтправитьПисьмо(3, СокрЛП(Элем.Емэйл), "", "Уведомление", "", ИмяДляСохранения);
        Иначе
            ЗапуститьПриложение(ИмяДляСохранения);
        КонецЕсли;
    КонецЕсли;

10 igorius
 
29.09.15
13:18
(9) Спасибо) метод Protect - это как раз то что я искал.