Имя: Пароль:
1C
1С v8
Выгрузить ворд шаблон и заполнить.
0 antihacker
 
29.11.17
05:44
Всем привет !

В хранилище лежит ворд файл. Мне надо выгрузить его и запонить.

Делаю так

&НаСервере
Функция ПолучитьШаблонДоговора()

    ШаблонДоговорСотрудника = Константы.ШаблонДоговорСотрудника.СоздатьМенеджерЗначения();

    // читаем значение
    ШаблонДоговорСотрудника.Прочитать();    
    //Сообщить(ШаблонДоговорСотрудника.Значение);

    // меняем значение
    ХранЗнач = ШаблонДоговорСотрудника.Значение.Получить();
    
ДвоичДанные1 = Новый ДвоичныеДанные(ХранЗнач);
Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные1, УникальныйИдентификатор);

возврат Адрес;

КонецФункции

&НаКлиенте
Функция ЗаполнитьШаблонВорд()

    //Попытка создать COM объект
    Попытка
        ОбъектВорд = Новый COMОбъект("Word.Application");
    Исключение
        Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат Неопределено;
    КонецПопытки;
    
    ФайлШаблон = ПолучитьШаблонДоговора();
    
        ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлШаблон);
   // получаем имя временного файла в локальной ФС на сервере

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("docx");
   // получаем файл правил для зачитки

    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    
    //Путь к шаблону
    ОбъектВорд.Documents.Add(ИмяВременногоФайла);
    ШаблонВорд = ОбъектВорд.ActiveDocument;
    
    //Получаем все закладки из шаблона
    Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
        Сообщить(ЗакладкаВорд.Name);        
    КонецЦикла;
    
    //Заменяем закладку1 на текст
    ШаблонВорд.Bookmarks("DATAVIDACHI1").Select();
    ШаблонВорд.Application.Selection.TypeText("123456789");
          
    ОбъектВорд.Application.Visible = Истина;
    ОбъектВорд.Activate();
    
    //Закрытие документа
    ОбъектВорд.Application.Quit();
    
КонецФункции

Пишет -

{Документ.Проекты.Форма.ФормаДокумента.Форма(889)}: Ошибка при вызове метода контекста (Add)
    ОбъектВорд.Documents.Add(ИмяВременногоФайла);
по причине:
Произошла исключительная ситуация (Microsoft Word): Word has encountered a problem.
1 antihacker
 
29.11.17
05:45
А загружаю так

&НаКлиенте
Процедура ЗагрузитьШаблон(Команда)
    
    #Если ВебКлиент Тогда
            Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
                    УстановитьРасширениеРаботыСФайлами();
                    ПодключитьРасширениеРаботыСФайлами();
            КонецЕсли;    
        #КонецЕсли

        СтандартнаяОбработка=ложь;      
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Заголовок = "Выберите файл";
        Диалог.ПолноеИмяФайла = "";
        Фильтр = "* (*.*)|*.*";
        Диалог.Фильтр = Фильтр;
        Диалог.МножественныйВыбор = Ложь;
        Диалог.Каталог = "С:\";

    ЕСЛИ Диалог.Выбрать() ТОГДА

          ПутьКФайлу = СокрЛП(Диалог.ПолноеИмяФайла);

          //Имя файла
          //ДлинаКаталога=СтрДлина(Диалог.каталог);
          //ПолнаяДлина=СтрДлина(Диалог.ПолноеИмяФайла);
          //ИмяФайла=Прав(Диалог.ПолноеИмяФайла,ПолнаяДлина-ДлинаКаталога);  
          
                 строка= стрзаменить(ПутьКФайлу,"\", Символы.ПС);
                
                 ИсхИмяФайла=СтрПолучитьСтроку(строка,стрчислострок(строка));
          
          #Если НЕ ВебКлиент Тогда

          ПомещамыеФайлы = Новый Массив;
          ПомещамыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу,""));
          ПомещенныеФайлы = Новый Массив;

          Если НЕ ПоместитьФайлы(ПомещамыеФайлы,ПомещенныеФайлы,,Ложь,УникальныйИдентификатор) Тогда
                 сообщить("Ошибка прикрепление файла: " +ОписаниеОшибки());
          Иначе
                 ПрикрепитьФайлСервер(ПомещенныеФайлы);
          КонецЕсли;            
          #Иначе
        
          ПомещамыеФайлы = Новый Массив;
          ПомещамыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу,""));
          ПомещенныеФайлы = Новый Массив;

         Если НЕ ПоместитьФайлы(ПомещамыеФайлы,ПомещенныеФайлы,,Ложь,УникальныйИдентификатор) Тогда
                 сообщить("Ошибка прикрепление файла: " +ОписаниеОшибки());
              Иначе                        
                 ПрикрепитьФайлСервер(ПомещенныеФайлы,ИсхИмяФайла,Истина,вхТипИнформации);
         КонецЕсли;    
         #КонецЕсли
    
    КОНЕЦЕСЛИ;
    

КонецПроцедуры

&НаСервере
Процедура ПрикрепитьФайлСервер(Данные)//  = Ложь
    
//   Если ЭтоВебКлиент Тогда
//

//        АдресПрикрепленныйФайл = Данные[0].Хранение;
//        ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл);    
//    Иначе
         АдресПрикрепленныйФайл = Данные[0].Хранение;
         ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл);
        // создаём и используем менеджер значений константы напрямую
        
    ШаблонДоговорСотрудника = Константы.ШаблонДоговорСотрудника.СоздатьМенеджерЗначения();

    // читаем значение
    ШаблонДоговорСотрудника.Прочитать();    
    //Сообщить(ШаблонДоговорСотрудника.Значение);

    // меняем значение
    ШаблонДоговорСотрудника.Значение =
    Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл),Новый СжатиеДанных(9));;

    // записываем значение
    ШаблонДоговорСотрудника.Записать();
    //
    //МенеджерЗаписи.ДвоичныеДанныеФайла=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(ТекСтрока.АдресВременногоХранилища),Новый СжатиеДанных(9));
    

КонецПроцедуры
2 Mankubus
 
29.11.17
06:19
Конфа на бсп?
3 antihacker
 
29.11.17
06:43
самописная
4 antihacker
 
29.11.17
07:37
Темиа закрыта. решил вот так.

&НаСервере
Функция ПолучитьШаблонДоговора()

    ШаблонДоговорСотрудника = Константы.ШаблонДоговорСотрудника.СоздатьМенеджерЗначения();

    // читаем значение
    ШаблонДоговорСотрудника.Прочитать();    
    //Сообщить(ШаблонДоговорСотрудника.Значение);

    // меняем значение
    ХранЗнач = ШаблонДоговорСотрудника.Значение.Получить();
    
    //ДвоичДанные1 = Новый ДвоичныеДанные(ХранЗнач);
    //Адрес = ПоместитьВоВременноеХранилище(ДвоичДанные1, УникальныйИдентификатор);

    возврат ХранЗнач;

КонецФункции

&НаКлиенте
Функция ЗаполнитьШаблонВорд()

    //Попытка создать COM объект
    Попытка
        ОбъектВорд = Новый COMОбъект("Word.Application");
    Исключение
        Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат Неопределено;
    КонецПопытки;
    
    ФайлШаблон = ПолучитьШаблонДоговора();
    
    //ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлШаблон);
    // получаем имя временного файла в локальной ФС на сервере

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");
    // получаем файл правил для зачитки    
    
    ФайлШаблон.Записать(ИмяВременногоФайла);
    
    сообщить(ФайлШаблон);
    
    //Путь к шаблону
    ОбъектВорд.Documents.Add(ИмяВременногоФайла);
    ШаблонВорд = ОбъектВорд.ActiveDocument;
    
    //Получаем все закладки из шаблона
    Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
        Сообщить(ЗакладкаВорд.Name);        
    КонецЦикла;
    
    //Заменяем закладку1 на текст
    ШаблонВорд.Bookmarks("DATAVIDACHI1").Select();
    ШаблонВорд.Application.Selection.TypeText("123456789");
          
    ОбъектВорд.Application.Visible = Истина;
    ОбъектВорд.Activate();
    
    //Закрытие документа
    ОбъектВорд.Application.Quit();
    
КонецФункции


Но и это не работала пока
Это

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("docx");
не поменял на это

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");

Почему ? Ведь на клиенте Оффис 2007, а не  2003 !

НЕ могу понять !
5 antihacker
 
29.11.17
08:17
По ходу  ОбъектВорд.Documents.Add(ИмяВременногоФайла);
для 2007 выглядит по другому. Ведь на это ругаеться когда когда применен ПолучитьИмяВременногоФайла("docx");