Имя: Пароль:
1C
1С v8
ActiveDocument MS Word сквозная нумерация при вставке фрагмента со списком
,
0 beholder13
 
27.11.14
13:40
В-общем, в макете есть нумерованный список, с каждой итерацией фрагмент макета с нумерованным списком вставляется из буфера обмена и нумерация в новом фрагменте продолжается, чего не хочется.

Процедура ВывестиДанныеПоДокументуВШаблонMSWord(ДокументСсылка)
    // Итак, получаем макет, инициализируем ворд:
    Идентификатор = ИдентификаторМакетаВХранилищеЗначений();
    Макет = ПолучитьИзВременногоХранилища(Идентификатор);

    Попытка
        MSWord = Макет.Получить();
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не найден MS Word.";
        Сообщение.Сообщить();
    
        Возврат;
    КонецПопытки;

    // получение данных из базы (в переменную ДокументСсылка может прийти ссылка на документ,
    // массив ссылок на документ или список значений, функция ПолучитьДанныеДляПечати()
    // собирает данные из регистров в структуру со статичным набором ключей для каждого
    // документа, на который придет ссылка):
    ТекстОшибки = "";
    МассивПараметров = Новый Массив;
    Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.АктОбОказанииПроизводственныхУслуг") Тогда
        СтруктураПараметров = ПолучитьДанныеДляПечати(ДокументСсылка,ТекстОшибки);
        МассивПараметров.Добавить(СтруктураПараметров);
    Иначе
        Для каждого ДокСсылка Из ДокументСсылка Цикл
            Если ТипЗнч(ДокСсылка) = Тип("ЭлементСпискаЗначений") Тогда
                СтруктураПараметров = ПолучитьДанныеДляПечати(ДокСсылка.Значение,ТекстОшибки);
            Иначе
                СтруктураПараметров = ПолучитьДанныеДляПечати(ДокСсылка,ТекстОшибки);
            КонецЕсли;            
            МассивПараметров.Добавить(СтруктураПараметров);
        КонецЦикла;
    КонецЕсли;

    // Вывод в макет
    Попытка
        Документ = MSWord.Application.Documents(1);
        MSWord.Application.Options.CheckSpellingAsYouType = False;
          MSWord.Application.Options.CheckGrammarAsYouType = False;
        
        // Если пришло несколько наборов параметров, кладем шаблон в буфер обмена
        Если МассивПараметров.Количество() > 1 Тогда
            Документ.Activate();

            // MSWord.Lists(1).ApplyListTemplate(MSWord.ListTemplates(1),False);
            // не прокатывает, все равно при вставке нумерация продолжается (второй параметр - ContinuePreviousList)
            // в Lists всегда 1 список, ниже, после цикла, тоже

            MSWord.Application.Selection.WholeStory();
            MSWord.Application.Selection.Copy();    
        КонецЕсли;        
        
        Для каждого СтруктураПараметров Из МассивПараметров Цикл
            Замена = Документ.Content.Find;
            РезультатСклонения = "";
            Замена.Wrap = 1;

            // Здесь подставляются значения для замены, свернул в одну строку для читабельности
            Замена.Execute("ТекстЗамены",,,,,,,,,СтруктураПараметров.ТекстЗамены,2);        
            // Здесь подставляются значения переменных, тоже свернул
            MSWord.Variables("ИмяПеременной").Value = СтруктураПараметров.ИмяПеременной;

            MSWord.Fields.Update();
            MSWord.Fields.Unlink();
            
            // Если несколько наборов, рисуем еще одну страницу
            Если МассивПараметров.Количество() > 1 И НЕ(МассивПараметров.ВГраница() = МассивПараметров.Найти(СтруктураПараметров)) Тогда
                MSWord.Application.Selection.EndKey(6);
                MSWord.Application.Selection.InsertBreak(7);                
                MSWord.Application.Selection.Paste();    
            КонецЕсли;
        КонецЦикла;

        MSWord.Application.Visible = True;
        
        MsWord.Application.Activate();
        
        wdWindowStateMaximize=1;
        wdWindowStateMinimize=2;
        MsWord.Application.WindowState = wdWindowStateMinimize;
        MsWord.Application.WindowState = wdWindowStateMaximize;
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        
        MSWord.Application.Quit();
    КонецПопытки;
КонецПроцедуры

Вопрос: как программно зафорсить список (или фрагмент списка) нумероваться с 1?
1 beholder13
 
27.11.14
15:52
Ап
2 beholder13
 
27.11.14
21:06
up
3 beholder13
 
28.11.14
17:46
Короч проблема решена, но так-то костылем. Суть в том, что перед копированием фрагмента список преобразовываем в текст, т.е. отрубается стандартный механизм нумерации ворда. Форматирование, в том числе отступы, остается как в шаблоне.

Документ.Lists(1).ConvertNumbersToText();
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан