четверг, 11 сентября 2014 г.

Заполнение документа Word из 1с 8.2


1)В шаблоне документа Word (Ворд) в нужных местах вставляем элементы управления и присваиваем им наименования и теги (Вкладка Разработчик).



2)Сохранить этот Ворд - шаблон либо в Макетах обработки, либо в справочнике "Сохраненные настройки", либо в регистре сведений  "Сохраненные натройки".
3)Примерный код обработки:


Соот - соответствие, которое вначале заполняектся:

Соот = Новый Соответствие;
        Соот.Вставить("номердоговора","10");

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
        Диалог.Фильтр = "*.docx|*.docx";
        Диалог.Заголовок = "Укажите место для сохранения документа в формате Word";
        Если не Диалог.Выбрать() Тогда Возврат Неопределено; КонецЕсли;
       
        НовыйПутьКФайлу = Диалог.ПолноеИмяФайла;
        //Сохранен в справочнике "Сохраненные натройки"
        Хранилище_.Получить().Записать(НовыйПутьКФайлу);   
       
        Ошибки = Ложь;
       
        Ворд = Новый COMОбъект("Word.Application");
        Док = Ворд.Documents.open(НовыйПутьКФайлу);   
       
        для сч = 1 по Док.ContentControls.Count Цикл
            Тег = НРег(Док.ContentControls(сч).Tag);
            Текст = Соот.Получить(Тег);
            Док.ContentControls(сч).Range.Text = Текст;
            Если ПустаяСтрока(Текст) Тогда
                Сообщить("Не нашли данных для поля:"+Док.ContentControls(сч).Tag);
                Ошибки=Истина;
            КонецЕсли;
        КонецЦикла;
       
        Если Ошибки Тогда
            Если Вопрос("Имеются не заполненные данные, продолжить формирование документа?",РежимДиалогаВопрос.ДаНет)=КодВозвратаДиалога.Нет Тогда
                Док.close(0);
                Попытка               
                    УдалитьФайлы(НовыйПутьКФайлу);               
                Исключение               
                КонецПопытки;
                Возврат Неопределено;
            КонецЕсли;
        КонецЕсли;
       
        Док.save();
        Док.Application.Visible = Истина;
        Док.Application.Activate();