Имя: Пароль:
1C
1С v8
Word печатная форма
0 88g88
 
02.10.19
17:33
Приветствую форумчане.
как правильно указа параметры в макете ворда и заполнить их?

параметры указал в [] скобках.
а заполнить их не получается. из кода пока есть это:

Процедура ПроверкаНаСервере() экспорт
    Договор = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    MSword = Договор.Получить();
    

    MSWord.Application.Visible = Истина;
    MSWord.Activate();
    
КонецПроцедуры
1 dka80
 
02.10.19
17:48
я делал так: в тексте параметры обозначал не параметрами, а текстом с процентами. Например %Параметр1%
Далее в коде:
Object.Find.Execute("%" + Параметр + "%",,,,,,,,,Значение,2);
2 88g88
 
02.10.19
17:54
Правильно понял?

Процедура ПроверкаНаСервере() экспорт
    Договор = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    MSword = Договор.Получить();
    
    MSword.Find.Execute("%" + "Параметр1" + "%",,,,,,,,,"Проверка",2);

    MSWord.Application.Visible = Истина;
    MSWord.Activate();
    
КонецПроцедуры

Ошибку показывает
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(7)}: Поле объекта не обнаружено (Find)
    MSword.Find.Execute("%" + "Параметр1" + "%",,,,,,,,,"Проверка",2);
3 dka80
 
02.10.19
17:58
У меня WordApplication, а не макет
4 88g88
 
03.10.19
13:12
В общем подготовить документ пришлось как описано в статье по ссылке.
https://helpme1c.ru/kak-sozdavat-shablony-word-dlya-ispolzovaniya-v-1s

Но одно но настройку делал не в обычном файле а сразу в макете 1С. Который создан как "Active document"
В статье код оптимизирован под другой тип макета в виде внешнего файла. Я создавал как внутренний макет.

Далее примерно такой код получился.


&НаСервере
Процедура ПроверкаНаСервере() экспорт
    Договор = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    MSword = Договор.Получить();
    
    Для каждого поле из  MSword.Fields цикл
        //Получаем Значение поля
        ПолноеИмя = Поле.Code.Text;
        // Ищем позицию для отчистки от лишних символов за наименование поля
        ПозицияСлеша = Найти(ПолноеИмя,"\*");
        // Убираем 12 символов до параметра в полном имене и 14 после
        КороткоеИмя = СокрЛ(Сред(ПолноеИмя, 12, ПозицияСлеша - 14));
        
        ЗначениеПоля = "";
        // Ишем необходимый параметр и заменяем значение
        Если КороткоеИмя = "Параметр1" тогда
            ЗначениеПоля = "Новое значение"
        КонецЕсли;    
        
        // Записываем значение если оно не пустое.
        Если ЗначениеПоля <> "" Тогда
            Поле.Select();
            MSword.Application.Selection.TypeText(ЗначениеПоля);
        КонецЕсли;    
        
    КонецЦикла;
    
    MSWord.Application.Visible = Истина;
    MSWord.Activate();
    
КонецПроцедуры

&НаКлиенте
Процедура Проверка(Команда) экспорт
    ПроверкаНаСервере();
КонецПроцедуры
5 88g88
 
03.10.19
13:14
Результатом будет открытый но не сохраненный документ.